11

» WarCraft 3 / 11 Одинаковых абилок.

Но есть нюанс - канал вроде нельзя настроить так чтобы текущий приказ не сбивался.
А есть вариант на Jass'e отменить приказ "Стоп" от абилок?
11

» WarCraft 3 / 11 Одинаковых абилок.

P.S. Мне уже предлагали поменять "приказ" у способности "канал", но я не понял, что это значит...
11

» WarCraft 3 / Удалить сообщение DisplayTimedTextToForce

Главное просто условие записать. "локал игрок == твой игрок"
Спасибо! С этим понял.
Steal nerves:
Поменяй приказ. У канала это возможно. см. ссылка
Рылся, так и не понял: приказ - это ID приказа? Я ж говорю, у меня сразу 11 штук таких у юнита будет. Значит, надо разные ID у всех делать, чтоб каждая по отдельности срабатывала...(
Или что такое приказ тогда...
11

» WarCraft 3 / Удалить сообщение DisplayTimedTextToForce

PT153:
DopaMine, ели нужно только для конкретного игрока, то нужно этот вызов обернуть в GetLocalPlayer().
А где тогда указывать, для какого именно игрока удалять?
И ещё: как на основе канала сделать способность, которая не прервёт текущего приказа? Не нашёл чё-то. P.S. Рёв не подходит, ибо мне нужно одновременно иметь 11 таких абилок(с разным ID приказа)
PT153:
GetLocalPlayer().
Эта штука возвращает игрока триггера что ль?
11

» WarCraft 3 / Бета версия Warcraft III Reforged 1.32

Скорее всего выйдет нечто очень сырое и забагованное, с ужасным фпс. Для чего собсно утечка и была организована, подготовить игроков.
Надо же, как всё продумано)))))))))))))))))))))))))))
11

» WarCraft 3 / Изменить описание способности

Если что, создание одинаковых способностей с разным описанием - самый крайний вариант. Ибо там вариантов перезарядки до сотых секунды около 1000 будет точно...
Проще всего, если прям для описания способности есть тег, позволяющий вставить значение из функции jass
Ладно, вопрос закрыт, я всё равно буду добавлять свои характеристики, и тогда выводить их на экран при нажатии на абилку "характеристики персонажа", и в них будет вывод из хэша данных в том числе о перезарядке этого удара для данного персонажа.
11

» WarCraft 3 / Бета версия Warcraft III Reforged 1.32

Kirill78:
DopaMine, нормально сыграть смогут только ЗБТ шники. Игра не вышла даже на PTR.
Хм, ясно( а я думал эта фишка позволит любому, кто оформил предзаказ, сыграть
Так чё, игра реально 31 декабря выйдет?))
11

» WarCraft 3 / Загрузка по хэндлу в функцию

Спасибо)) я с этим уже разобрался, понятно про таймеры)
PT153:
После возврата из функции никакие дальнейшие действия не выполняются. Я говорил про это.
Смотрел и долго не мог понять, моё ли это))))
11

» WarCraft 3 / Бета версия Warcraft III Reforged 1.32

Ребят, я один не понял, как сыграть в карту какую-нибудь и послушать озвучку/посмотреть графику??? Создал ярлык, ввёл в конце " -launch", предзаказ оформлен уже как год почти.
Загруженные файлы
11

» WarCraft 3 / Загрузка по хэндлу в функцию

очень сложно понять, что вы хотите сделать. зачем такая сложная конструкция, что у вас не работает не понятна.
Проще сделать нельзя, так как я делаю сложную механику скиллов. Очень надеюсь, что так можно сделать.
Скилл первый - ударить. Работает так: в области перед кастером выбирается отряд, в нём выбирается(pick) ближайший юнит к кастеру, у кастера проигрывается анимация удара со скоростью, зависящей от ловкости кастера, и через время анимации цели наносится урон, зависящий от силы кастера.
Скилл второй - уворот от первого скилла.(из наруто - каварими но дзюцу. Уже описывал подобное в другом вопросе, но там я делал уворот от автоатак, а щас делаю от "Ударить").
Он работает так: кастер жмёт кнопку(каварими но дзюцу)(направленная на точку) - и если в течение секунды после нажатия кастер становится (pick)-юнитом( из предыдущей способности), то кастер мгновенно(в момент становления PICK-юнитом из первой абилки) прячется(hide), и через 1.5 секунды появляется в точке - цель заклинания. Если же кастер просто нажал абилку и так и не стал выбранным юнитом предыдущей абилки, то просто пойдёт кулдаун. Это для того, чтоб надо было микрить и доджить, успевать нажать за время анимации врага. А если тот прокачен и у него анимация 0.2 секунды, то типо не поможет навык микроконтроля, так как враг КРУТОй НИНДЯ)))))))))))))))))))0
Второе я сделал. Правда, корявенько, надо переписывать, чтоб устранить все утечки(предварительно найдя, как именно это делается, а то мне писали здесь, что я обнуляю переменную после возврата из функции).
А вот с первой абилкой беда - пока у меня урон наносится сразу после того, как определилась цель(pick) и со скоростью анимации я не работал и не знаю даже, можно ли влиять на скорость проигрывания анимации. Если узнаю, что нельзя - я удалю варкрафт.)
Steal nerves:
Зачем тебе создавать лишний таймер, и периодически проверять => лишняя работа. Можно напрямую узнать в хэше. Если значение изменится, ты сам узнаешь через сработки события юза абилити или завершения таймера
В том и дело, что мне надо узнать это не перед нажатием абилки, а в течение секунды после этого.
DopaMine:
в течение секунды после этого.
Узнать в течение секунды, а среагировать на изменение булина как можно быстрее.
DopaMine:
Если узнаю, что нельзя - я удалю варкрафт.)
АФИГЕТЬ, так можно, оказывается))) в моём случае это даже легче, чем во время автоатаки изменить)) ВАРКРАФТ ФОРЕВЕР)
11

» WarCraft 3 / Получение координат каждого юнита в группе

DopaMine, хеш не обязательно, такие вещи можно делать через глобальные переменные
У меня появился таймер для того, чтоб нанести урон отобранному юниту через 0.2 секунды после того, как он был выбран. Теперь глобальные не подойдут, так как скилл муи и в глобальную будут за время ожидания(0.2) перезаписываться значения других юнитов, кастеров. Как быть?( ведь и в хендл не сохранишь, так как к примеру в отсеивателе ненужных юнитов для группы - GetFilterUnit() нет того, к чему привязать хэндл юнита-кастера(которого надо включить в список тех, кого не надо бить)
11

» WarCraft 3 / Загрузка по хэндлу в функцию

Я не могу понять, почему из лупа выгружается инфа каждые 0.1 секунду и дальше происходить что-то в зависимости от этой инфы. Я когда через таймер жду условия, оно НЕ передаётся в основную функцию так же мгновенно, как из лупа.
Если я вызову функцию из таймера, то в ней опять нельзя будет использовать GetTriggerUnit(), а у меня в этой функции объявлен старт ещё одного таймера...
Как тогда быть, нихрена не понимаю.
biridius:
в чем смысл функции в ОП? тип попытка написать свой собственный PolledWait?
абилки делайте через таймеры
на таймер как раз можно и сохранять данные в хеш, а не на какого то TriggeringUnit
Мне нужно отловить момент одной абилки при нажании на другую(проверка длится 1 секунду). Через зацикленный таймер не работает. При том, что я в нём каждые 0.05 секунд загружаю булин. А в основной функции написано, что если этот булин тру, то делать дальше.
А когда булин у меня становится тру, функция сразу не срабатывает. Она срабатывает при следующем нажатии на абилку, которая зависит от этого тру
Логика в том, что если в функции события триггера написано "юнит атакован", то это событие проверяется постоянно. А у меня событие "ЖМЁТСЯ КНОПКА"(проверка булина другой абилки). И типо на момент нажатия кнопки проверяется булин другой абилки. А мне надо, чтоб в течение секунды проверялся булин и если он за эту секунду становится тру, то выполнить дальше. А этот булин становится трушным, но так как абилка-проверка работает по нажатии на эту абилку, то в момент изменения булина с фолс на тру ничего не происходит, если это таймер, а не ЛУП.
function TimerUdar takes nothing returns nothing
    local    timer TimerForAttack = GetExpiredTimer()
    local integer ta = GetHandleId(TimerForAttack)
    local      unit u = LoadUnitHandle(udg_hash,ta,9)
    local integer h = GetHandleId(u)
    local real i = LoadReal(udg_hash,h,StringHash("stop"))
    if (i <= 1) then
        if (LoadBoolean(udg_hash,h,StringHash("attackedUnit")) == true) then
            call SaveBoolean(udg_hash,h,StringHash("attackedUnit"), true)
            
            call DisplayTimedTextToForce( GetPlayersAll(), 30, "true")
            call DestroyTimer(TimerForAttack)
        else
        call SaveReal(udg_hash,h,StringHash("stop"),i + 0.05)
        endif
    else
        call SaveBoolean(udg_hash,h,StringHash("attackedUnit"), false)
        call DisplayTimedTextToForce( GetPlayersAll(), 30, "false")
    
        call DestroyTimer(TimerForAttack) 
        call FlushChildHashtable(udg_hash,h) 
        call FlushChildHashtable(udg_hash,ta) 
    endif
endfunction
Это таимер, которыи ловит булин
Из другого тригера по хэндлу юнита
РЕБЯТА, ВСЁ ЗАРАБОТАЛО! Оказывается, из этого таймера, как только становится булин == тру, можно было вызвать старт ещё одного таймера. Щас буду всё писать с нуля, оптимизируя.
PT153:
DopaMine, ты опять делаешь действия после возврата из функции.
Поясните плз. Я делаю действия после возврата из функции. Ну так я заполняю переменную "unit u" значением о юните, так ведь? И в конце я просто обнуляю переменную u, в чём ошибка?
Вот это разве не обнуление ради устранения утечек?
local unit u = GetTriggerUnit()
...
...
set u = null
11

» WarCraft 3 / Загрузка по хэндлу в функцию

DopaMine, не все знают как и когда нужно пользоваться вэйтом, поэтому у них ростёт опухоль связанная с тем что вэйты вообще нельзя использовать... Так что можешь сразу забивать, если тебе начинают доказывать что всё не работает тупо из-за вейта, и не объясняют почему именно и что/куда уходит.
Поясните плз кто-нибудь, о чём речь хотя бы. Я хочу сам решить, чем мне пользоваться, а чем - нет:D
11

» WarCraft 3 / Загрузка по хэндлу в функцию

забыть про вейты на совсем
Что такое вейты?(Wait я здесь не вижу)
Я четвёртый день пробую на джассе. До этого не знал, что это.
quq_CCCP:
Информации море ссылка
А вот это действительно полезно, спасибо!
11

» WarCraft 3 / Почему не работает абилка?(чекните GetDistance)

когда в плюсике оно прокачивается.
Понял, так сработало...
Мне нужно вот, что: когда юнит атакован этой абилкой, с ним надо что-то сделать, чтоб в другом триггере через событие я мог обратиться к этому юниту. Я хотел дать ему невидимую способность 'A002'(канал - параменты -изображение убрать галочку). И типо в другом триггере тогда нужно событие: юнит получил способность... Условие - уровень способности 'A002' > 0. Или как-то так
А как кроме способности сделать - пока не понял.
11

» WarCraft 3 / Почему не работает абилка?(чекните GetDistance)

Hate:
Это событие относится к героям, когда они увеличивают уровень способности для героев.
А, а как для любого юнита проверить? Дать предмет?
DopaMine:
Hate:
Это событие относится к героям, когда они увеличивают уровень способности для героев.
А, а как для любого юнита проверить? Дать предмет?
Ну и проверять тоже предмет. Не оч удобно
11

» WarCraft 3 / Почему не работает абилка?(чекните GetDistance)

Тебе нужна функция GetLearnedSkill().
Не работает... у меня событие:
call TriggerRegisterAnyUnitEventBJ( gg_trg_CastTrigger, EVENT_PLAYER_HERO_SKILL )
Условие
 return GetLearnedSkill() == 'A002'
В другом триггере написано в деиствиях:
call UnitAddAbility(target, 'A002' )
Способность появляется у юнита, но сообщение, которое должно вывестись(debugging), не выводится(
PT153:
Это событие относится к героям, когда они увеличивают уровень способности для героев.
Плюс, если я даю способность не герою, а мечнику, к примеру, ему подойдёт это событие?
11

» WarCraft 3 / Почему не работает абилка?(чекните GetDistance)

PT153:
Hate, он не понимает, как вообще функции работают, а ты тут про дебаггинг.
Во-первых, я не знал про то, что к функции можно обращаться, как к методам в известных мне языках программирования.
Во-вторых, дебаггинг я делал точно так же, как в инструкции, когда хотел понять, почему у меня выбирается область не перед юнитом. Выводил сообщения на экран, чтоб понять, правильно ли я угол добавляю в синус и косинус. Выяснилось, что тригонометрические операции принимают аргументы в радианах. Я не знал про это.(Обычно я встречался с Cos(90),Sin(45) и т.д.
В-третьих, каждый когда-то не знал всех возможностей работы функций, так что это норма)
PT153:
function TakeUnitsFilter takes nothing returns boolean
return GetFilterUnit() != Caster and IsUnitEnemy(GetFilterUnit(), GetOwningPlayer(Caster))
endfunction
Я вижу, фильтр работает для набора юнитов в группу. Я собираюсь одной абилкой доджить этот скилл, поэтому мне нужно, чтоб спрятанных можно было добавить в группу, но нельзя было наносить им урон. По дефолту спрятанные домажатся?
prog:
Не помню надо ли отсеивать скрытых или перебор по области сам их игнорирует, но мертвых же точно надо отсеивать.
Это я сделал, спасибо) и спрятанных не дамажит теперь. Что за прикол с событием "ADD_PLAYER_HERO_SKILL"? В триггерах это - Юнит получает способность. Почему я в условиях не могу обратиться к полученной способности? Даже на Jass'e
То есть, мне надо условие: return полученная способность == 'A002'
DopaMine:
Не помню надо ли отсеивать скрытых или перебор по области сам их игнорирует, но мертвых же точно надо отсеивать.
Сделал не без помощи ребят с этого сайта, конечно))
11

» WarCraft 3 / Почему не работает абилка?(чекните GetDistance)

PT153:
DopaMine, конечно. Ты должен их передать.
Надо же, не знал, что так можно. Чисто твоё себе вставил - всё заработало... Спасибо! Щас буду разбираться, как это работает.
У меня когда врагов нету, юнит себя бьёт АХАХ, так как радиус с расстоянием совпадает, если я на бегу жму, себя иногда задевает)))))))
11

» WarCraft 3 / Почему не работает абилка?(чекните GetDistance)

function GetDistanceUnitPoints takes unit u1, real x, real y returns real
    local real dx = GetUnitX(u1) - x
    local real dy = GetUnitY(u1) - y
    return SquareRoot(dx * dx + dy * dy)
endfunction
Я хотя бы правильно понял, что такая функция должна получать абстрактные параметры, а не конкретно мои значения?
11

» WarCraft 3 / Почему не работает абилка?(чекните GetDistance)

Так ты функцию нахождения юнита не вызвал.
Юнита-кастера? А где её надо вызвать? Я совсем запутался(
PT153:
Ты не наносишь урон, а отнимаешь здоровье, килл твоему кастеру не засчитается.
А как именно урон нанести?(
11

» WarCraft 3 / Получение координат каждого юнита в группе

globals
real X
real Y
unit ClosestUnit
real Distance
endglobals
Щас буду разбираться)
PT153:
» Функции дистанции
» Узнать ближайшего юнита к (x, y)
Офигеть, как компактно можно написать) прям как я и представлял, но как-то просто слишком выходит)) Круто! Спасибо!
11

» WarCraft 3 / Получение координат каждого юнита в группе

Хорошо, чему тогда в начале равна глобльная ?:D
Ну вообще, я так понял, это будет как раз координата кастера. Только тогда надо модуль разницы сравнивать.