27

» WarCraft 3 / Рандомизация героев

там не функция, а система. чаще всего берут массив переменной типа тип юнита, забивают в него всех героев. короче базу данных делают.
есть замечательная функция
GetRandomInteger //такая функция, ищи в гуи строчку Random Integer
выбирает случайное число, то есть массив от ... и до ...
проблема в том. что часто могут попадаться одни и те же числа, и это проблема рандома
27

» WarCraft 3 / Как воскрешать умершего Героя способностью?

В целях можно заметить, что действует на мертвых. Мертвые - трупы, так нужен труп, а герой не оставляет труп (хотя остается в игре сам, иконка героя торчит и тд.). Хотя можно настроить так, чтоб оставлял труп (время смерти в РО задать и тип смерти сменить), но, к сожалению, это не работает (проверял). Без триггеров это не сделаешь. Недавно была тема как воскресить героя в АОЕ (что-то не смог найти)
27

» WarCraft 3 / Jass New Gen Pack - Rebuild 1.4

B_KPOBATb, смотри в шапке темы, где написано "при наличии проблем". там написано если проблема при установке, то попробуй тогда архив скачать и распаковать архиватоваром
27

» WarCraft 3 / Циклы в cJass

exitwhen - это и есть выход. Рядом с ним прописывают условие (булеан). Как цикл работает? пошагово: сверху-вниз. и так до сих пор пока условие не выполнится (может бесконечно). Если не прописать туда норм условие выхода, то крит. ошибка. Он каждый раз проверяет. Пример, вот во второй функции:
set res = res * num операция вычисления (мы тут что-то делаем, с каждым разом перемножаем и res становится больше или меньше, если умножим на отр. число num)
exitwhen (i >= pow) если условие верно, то выходим из цикла, и перестаем пробегать сверху-вниз
set i = i + 1 прибавляем
во второй функции сколько раз (pow) перемножать на num. Это своего рода возведение в степень что ль? Это можно представить как pow - степень, num - число. Думаю, что первая функция это то же самая что вторая, абсолютно одинаковы. Есть функция близзардов Pow - возведение в степень. Извиняюсь, там про реальное число
27

» WarCraft 3 / Вопрос про таймер

ImbaStyle, паузу тоже можно сделать) это надо продумать. можно не паузить таймер, а сохранять boolean а где-то в твоем коде доставать эту логическую и проверять. и тому подобное
и не обязательно при старте, можно от любого момента времени.
р
27

» WarCraft 3 / Вопрос про таймер

Принятый ответ
разъяснения
  1. берете таймер + хэндл и хэш-таблица (это простой пример). И можно массивы перебирать каждый раз (есть еще XAT на cjass).
  2. в чем суть этого метода? берете при старте игры запускаете один таймер на все.
  3. при запуске триггера или функции сохраняете текущее время этого таймера в хэше или переменную, при повторном запуске сверяете текущее время и прошедшее (сохраненное) время
есть такие команды как
TimerGetRemaining
TimerGetElapsed
TimerGetTimeout
из них можно вытащить текущее, сколько прошло, и заданное время
  1. таймер не обязательно удалять
вообще-то когда много таймеров работает это плохо, проседает. Лучше когда таймеров меньше было. Если у вас в течении игры работает 50 таймеров, не лучше ли сделать несколько?
есть еще баги с таймером xgm.guru/p/wc3/timer-exploit
смотри примеры, что скинул
насчет того, как пользоваться одним таймером в разных триггерах. Это в зависимости, того, что вы хотели сделать и как.
Загруженные файлы
27

» WarCraft 3 / Любые агрументы в функциях

Принятый ответ
void - это nothing то есть ничего не возвращает функция, а саму функции называют doTheThing, а unit u - аргументы функции, мануалы про cjass почитай (хотя я тоже соглашусь, что написано очень плохо в мануалах. Нужно попробовать немного самим пописать коды)
можно представить как (если хорошо понимаешь jass)
function doTheThing takes unit u returns nothing
... //что-то делаешь с юнитом u (берем аргумент функции - unit u)
endfunction
GetMyUnit - такой не существует, видимо Док имеет в виду подставить свою переменную
пример
например составил пример функции - определить уровень абилы юнита. Функция называется LV, u - юнит, id - целое число, равкод абилы. Возвращает целое число (уровень абилы).
function LV takes unit u, integer id returns integer
return GetUnitAbilityLevel(u, id)
endfunction 
'A000' - равкод абилы
local integer lv = LV(GetTriggerUnit(), 'A000') //узнаем уровень героя
и честно не понял вопрос темы?
27

» Администрация XGM / Как вернуть аккаунт?

Я помню, когда мне надоел вакрафт (я не мог норм в него играть из-за слабого пк), и я ничего не делая, как по привычке заходил сюда на форум. Хотел удалится, так нельзя было. Решил ввести случайный пароль, чтобы не смог зайти. а потом спустя 2-3 месяца мне захотелось снова варкрафтить, и думал. что смогу без хгм. Но такое дело нужно было скачать собственные наработки, найти какие-то ответы на интересующие вопросы и еще найти ответы, которые забывал (записи решил вести и кучу наработок накачал и все это отсортировал по папкам), и прочее. но для этого не смог зайти обратно. сожалел сильно. мне было не восстановить. Присылал на майл.ру, и там в сообщении требовалось зайти по ссылке на хгм, так заходил и ничего не происходило. Не знаю, из-за этого не хотел заново регистрировать и прочее. решил, что это правильно, забил на это и на варкрафт в целом тоже. Так раз в полгода иногда проверял. Меня на хгм 2 года не было кажись. Четыре месяца назад я повторил процедуру и вот я здесь
27

» WarCraft 3 / Аура

LainMikoroso, тут я ему основы объяснил. потом пусть не удивляется "а почему у меня не работает" кстати про jass тут речи не идет, я просто не помню как называются переменные и все. а так согласен, перекосило не в ту сторону, когда увидел скриншот
27

» WarCraft 3 / Аура

Принятый ответ
Вы не правильно юзаете варкрафтоские переменные, например у вас событие с таймером. Он не дает каких либо варкрафтовским переменным данные (например, у вас на русском написано "Юнит триггера", это наверное GetTriggerUnit, но не существует его). Вам нужны какие-то данные от которых нужно отталкиваться, например берете группу и всех пикаете (есть GetEnumUnit() ). Когда вы всех пикаете через ForGroup, там перебирают всех через переменную GetEnumUnit
Если использовать другие события, то там аргументы передают. Например, юнит умирает (если не ошибаюсь) дает 4 переменные: TriggerUnit, убийца и умирающий. TriggerPlayer (если регистр события прикреплен на юнита, а не на игрока, то эта переменная не будет работать, не проверял). Хотя две переменные TriggerUnit и умирающий ссылаются на одного и того же юнита - умирающего юнита
27

» WarCraft 3 / Три неизвестных функции триггера?

Принятый ответ
огромная инфа
GetTriggerEvalCount - сколько раз условие сработает (если триггер выключен, то событие с условием все равно работают, и будет прибавлять без конца). Еще понял, что, если выключен (через галочку), то это не будет работать. Есть специальная команда TriggerEvaluate, можно проверить с помощью нее. Это короче сколько раз прокатывает условие (см. TriggerEvaluate)
GetTriggerExecCount - сколько раз сработал триггер (если триггер выключен, то счетчик GetTriggerExecCount не засчитает это). Вроде это за поток отвечает, например Execute. Мне вот интересно, а вот в ForGroup проверить можно сколько потоков стало? вроде ничего не будет
TriggerEvaluate - проверка, проверяет есть ли у триггера условие. Проверяет скорее всего, то что прокатывает ли условие (пример функции ConditionalTriggerExecute). Можно на любом триггере проверить это. Если триггер выключен (не в самих триггерах, а в разделе редактора триггеров через галочку - если снять включен, то не работает проверка), то это не проверишь. Некоторые хитрецы используют функцию условия, это будет быстрее, а точнее раньше выполняется. С этим можно использовать TriggerEvaluate
TriggerExecute - запускает поток функции (действие триггера запускает), игнорируя условие и событие. Однако, не используйте варкрафтовские переменные вроде GetTriggerUnit(), так как они не будут работать, ибо они пусты и зависят от события.
TriggerExecuteWait - то же самое, что и TriggerExecute. В чем разница между двумя мне неизвестно. Проверял маленько.
ResetTrigger - перезапускает триггер и обнуляет значения GetTriggerEvalCount и GetTriggerExecCount
TriggerSleepAction - он же вэйт, паузит на время поток (не паузит весь триггер), короче действие (action). В условии эта штука не работает, обрывает поток. В некоторых функциях он также не работает, например ForGroup, В ForGroup видимо отдельные потоки создает и шлет, на каждого свой поток, если вставит там вэйт, то он обрубает поток и все. А то что внизу осталось, он до конца не обработает уже никогда. Это пример.
раскрыть
Вот результаты:
  1. Вызов TriggerSleepAction внутри TriggerEvaluate убивает поток, и он никогда не возобновляется.
  2. Вызов TriggerSleepAction внутри TriggerExecute работает.
  3. Вызов TriggerSleepAction внутри TriggerExecuteWait выполняет то же самое, что и TriggerExecute.
  4. Иногда может обрывать поток в неожиданных местах. Например, ForGroup. А иногда работает.
IsTriggerWaitOnSleeps, - эта особая проверка триггера, проверяет включена ли пауза (короче вэйт TriggerSleepAction будет работать, иначе нет). С этой функцией связана другая функция TriggerWaitOnSleeps. IsTriggerWaitOnSleeps возвращает истину true - значит вэйт включен, false - вэйт выключен. Кстати я долго мучался, оказывается, что, если все в первый раз, то функция вернет false, даже, если вэйт работает.
TriggerWaitOnSleeps - функция которая включает вэйт (true) и выключает вэйт (false). Короче пропускает время ожидания вэйта. У меня эта функция работает не сразу, или вообще не работала, тыкал пока не заработало.
Загруженные файлы
27

» WarCraft 3 / Png формат

Принятый ответ
Куда вставлять? ты имеешь в виду на сайт xgm.guru , то тебе надо вопрос к создателям сайта и в другом разделе задавать. Тоже вставлял png, а показывает ссылку. Конвентируй в форматы gif jpg, что делать. Бывали и другие случаи: Написал коммент, загрузил Файл, жмешь отправить. Показывают вам коммент, а сами файлы и изображения пропадают. Вместо изображения ссылка. Нужно обновить страницу в браузере, и тогда покажут.
Один раз хотел добавить еще один файл (через вкладку загрузить файлы), так не добавляется новый. Тогда можно сделать проще - отправить второе сообщение с прикрепленным файлом, короче должно быть два комментария, но сливаются в один.
27

» WarCraft 3 / ИИ. Поиск и выбор участка для строительства

Принятый ответ
Проблема в том, что, если в этой точке построено здание, то IsTerrainPathable(x, y, PATHING_TYPE_BUILDABILITY) не помогает (это терраин проверяет, а вот то что там построено или нет ему пофиг). Посмотрел в триггерах, есть только текстуры земли - уберспласты (там эти текстурки для здания) - нет функции такой в библиотеке jngp для проверки точки. Пробовал через группу, но там своя заминка (походу выборка ловит тех юнитов, точки которых попали в выборку, а не на целиком. Точно не проверял, но не работает с группой),
Clamp, решил через проверку
if (IssueBuildOrderById(YT, 'hhou', x, y) == false) then если не может построить, значит там здание или что-нибудь еще.
Clamp, помог еще твоя ссылка ExecuteFunc. видимо у меня лимит был, не хотело работать (просто дебаг не отобрал. и раб стоял). Хотя это уже не нужно было
А да слегка подвисает на секунду =(
Урра короче без лагов сделал (версия 3), подредактировать недоработку и будет норм
Загруженные файлы
27

» WarCraft 3 / SquareRoot

SquareRoot - это математический корень
dx * dx - можно возвести в степень два, но в варкрафте такого нет, да и не нужно
dx - вектор, точнее его проекция на оси x (из конца вычитаем начало, этим мы можем узнать направление)
27

» WarCraft 3 / Не читает код ниже двух строк

Принятый ответ
Все работает. работает с специальными переменными, типа GetFilterUnit(). Вообще это условие, если это условие (фильтр) истинно, то этого юнита (GetFilterUnit), подходящего по условию, оставляет, а остальных отсеивает. У тебя, если условие истинно, выбирает всех. Мне кажется не работает. потому что радиус слишком маленький 90 - слишком маленький, едва ли кого выделишь. Надо еще дебагом проверять (выводи на экран) и проверяй кол-во юнитов в группе. Так написал, что не понятно, что тебе нужно. И вопрос закрыт? (закрой тему)
чтобы глобалки объявлять скачай jngp, подключи jasshelper (V jass)
в самом наверху триггера можно писать
globals
integer TTT = 0 //целочисленная
endglobals
27

» WarCraft 3 / GetUnitsInRange и condition. Ловля мертвых героев.

EvilPenguin, если действительно так не работает, не пробовал сохранять координаты при смерти героев, а потом проверить не попадают ли эти координаты в область и ресаем?
27

» WarCraft 3 / Способность с зарядами.

можно (удалить и добавить заново) точно не уверен.надо посмотреть на сайте/на форуме. поищите на слова осветительный заряд, сторожевая сова. но это будет гемор с бд (одинаковые абилки, но с разными зарядами)
можно сделать еще продажу предмета самому себе xgm.guru/forum/showthread.php?t=45020
лучше бы напрямую как-то влиять, но к не счастью нет таких нативок. Есть у нас не стандартное решение - взлом памяти - memort hack. Ждем вездесущего драколича, мб он даст интересный ответ. ну ничего подожди немного. сейчас он спит
27

» WarCraft 3 / Система покупки и продажи предмета

всмысле нормализуй "абилки", "итемы"?
ну в этом то и хитрость, когда в лавке 5 стэков, покупаешь и становится 4 стэка и 1 еще в кулдауне. Чтобы этого кулдауна не было, я ему добавлял повторно этот же тип (текущий стэк == максимальный стэк == 4). Никогда проблем не было, но иногда что-то итемы пропадают.
Ну и на том и проверки у меня. Если кол-во слотов больше 11, то значит больше не давать.

короче не знаю в чем проблема. была до этого предыдущая версия. Это будет замечено в этой старой версии Item v8 (ссылка), я подобрал 6 итемов с земли и заложил в лавку. потом подобрал еще 6 итемов, 5 заложил также в лавку. один уже не мог (так и должно, ибо мест нет).
потом купил в лавке (дебаг показывает что в лавке стало снова 10, теперь могу снова заложить итем в лавку), я заложил (дебаг говорит что там 11, но на самом деле там стало 9, просто проданный/заложенный занял место другого, а тот исчез видимо). исправил это дело с помощью интервала (в РО всем итемам выставил интервал пополнения (кулдауна) на ноль и все заработало, и немного в коде подправил (хотя ничего критичного, скорее косметический характер), но больше не знаю что. в новой версии бывают баги, но редко
Загруженные файлы