Локальные триггеры хороши тем, что их можно будет бескорыстия и совести удалить, а потом если нужно создать по новой. Тем самым уменьшить нагрузку на варчик в определенных условиях.
Icebow, способ исполнения нужно писать, а так же MUI да\нет. И узнать бы более подробно про выключение. Сделать наподобие "Жар Преисподней" или давать способность отключения давая возможность удерживать более одного портала на одного мага (при условии что MUI имеется).
Было бы неплохо перед показом кода расставить все отступы, ибо порой читать сложновато.
Однако я быстренько глянул и могу сказать, что код должен работать адекватно.
Но хочу придраться к самому созданию всплывающего текста. При каждом поднятии любого предмета будет создаваться этот текст (без записей и т.д.) и будет тупо висеть всю игру. Не проверял, действительно ли так, так что могу ошибаться. NekoriDes:
но показывает оба тексттага с варнингом.
А чего пишет то? Случаем не "Доступно с 0 уровня"?
Событие - Герой изучил способность
Условия - Изученная способность == нашей, И ( ее уровень == 7 или 14 или 21)
Действия - данные действия в этом вопросе.
ssbbssc, умничка, правильно пишет. Zhan10, тебе обязательно нужно делать расчеты в реальной, а потом переводить ее в целочисленную. Ибо с десятичными числами характеристики не желают работать.
И насчет бонуса... сия бонус добавляет % даже от предметов. И при каждом действии не учитывается прошлый бонус. К тому же если таких героев 3 или более они же тоже могут изучить сия способность и тут выйдет баг. Ибо каждый добавленный в группу прибавит процент к характеристикам. А это на 7 уровне у последнего изучившего способность героя будет 45% добавки к характеристикам.
Делай выводы и исправляй.
Вот ты блин... придрался к этому евенту... Пока не проверю лично, что лучше, я не признаю твою правоту.
И меня не евенты интересуют, а функции и их корешки...
Sucsonius: насколько понимаю ты редактируешь чужую карту и в ней создал своего героя. Дабы не мучаться с слк таблицами и с .j, пройдись прогой X-Deprotect да и редактируй в обычном редакторе, только я не помню как обратно слк таблицы в читабельный вид для РО зашаманить - поиск в твоем распоряжении.
Блин... я не противоречу, просто не так выражаю мысль и работу способности. Ошибка с моей стороны при которой ты не можешь понять, что мне действительно нужно.
Пробну еще раз...
SkillW_Func_Init - функция, что вызывается после создания героя. В ней:
временный отлов урона. пассивка многократного урона, триггер уничтожается после использования
SkillW_E_Func_Condition - функция, отлавливает использование способности. начало того, что мне желанно оптимизировать. SkillW_E_Func_Periodic - функция, что вызывается каждый период времени. SkillW_E_Func_AreaActions - функция, что отвечает за поиск цели. Эту же функцию мне хочется вызывать после нанесения урона. В ней:
Теперь разберу последнюю функцию, ибо без этого не понять основу моего выбора сия способа.
Первым делом функция срабатывает после того как цель способности (выбирается случайно в области действия) была атакована. Далее проверка на атакующего
local trigger tr=GetTriggeringTrigger()
local integer index=SkillW_E_Func_GetTriggerIndex(tr)
local unit u=SkillW_E__Unit[index]
local unit t=SkillW_E__Target[index]
...
if GetTriggerUnit()==t and GetAttacker()==u then
Т.е. проверяем наш герой ли атаковал.
Далее проверяем
if IsUnitType(t,UNIT_TYPE_HERO) then
атакованный герой?
Да.
Даем дополнительную атаку на один удар.
Нет
Даем способность, что уменьшает наносимый урон нашим Героем.
Далее...
call SetUnitAnimation( u, "slam" )
call TriggerRegisterUnitEvent( SkillW_E__Trigger[index], t, EVENT_UNIT_DAMAGED)
даем триггеру евент на отлов урона. После того как цель способности получит урон пойдет опять проверка на "вшивость"
local trigger tr=GetTriggeringTrigger()
local integer index=SkillW_E_Func_GetTriggerIndex(tr)
local unit u=SkillW_E__Unit[index]
local unit t=SkillW_E__Target[index]
...
elseif GetTriggerEventId()==EVENT_UNIT_DAMAGED then
if GetTriggerUnit()==t and GetEventDamageSource()==u and RegisterDamage then
извиняюсь за каламбур с названной переменной, ибо по началу я даже не знал как обозвать ее, а потом было лениво переименовывать
Если получивший урон и есть наша цель способности, нанесший урон и есть наш Герой, полученный урон не от способности, то
call DisableTrigger(tr)
set b=true
...
if b then
call UnitRemoveAbility(u,Custom_SkillW_Ability_E)
set STATS_UNIT=u
set STATS_VALUE=-SkillW_E__Bonus[index]
set STATS_ADDER=0
call TriggerEvaluate(gg_trg_Stats)
set SkillW_E__Target[index]=null
call DestroyTrigger(tr)
set SkillW_E__Trigger[index]=null
endif
Иными словами уничтожаем триггер и убираем доп. атаку и способность по уменьшению урона по не героям.
Надеюсь уже совсем хорошо пояснил, что за что отвечает. И понятно почему нужно отлавливать как атаку так и урон.
Теперь задача:
Как реализовать вызов функции SkillW_E_Func_AreaActions из функции SkillW_E_Func_TargetActions после уничтожение триггера в последней функции?
» WarCraft 3 / Какой триггер нагружает карту глобальный или локальный?
» WarCraft 3 / Способности и алгоритмы на заказ
» WarCraft 3 / Способности и алгоритмы на заказ
Да и другим дадим поиграться.
» WarCraft 3 / Почему появляется два тексттага?
Однако я быстренько глянул и могу сказать, что код должен работать адекватно.
Но хочу придраться к самому созданию всплывающего текста. При каждом поднятии любого предмета будет создаваться этот текст (без записей и т.д.) и будет тупо висеть всю игру. Не проверял, действительно ли так, так что могу ошибаться.
NekoriDes:
» WarCraft 3 / Просьба
» WarCraft 3 / Просьба
» WarCraft 3 / Не хочет в отряд
Условия - Изученная способность == нашей, И ( ее уровень == 7 или 14 или 21)
Действия - данные действия в этом вопросе.
И насчет бонуса... сия бонус добавляет % даже от предметов. И при каждом действии не учитывается прошлый бонус. К тому же если таких героев 3 или более они же тоже могут изучить сия способность и тут выйдет баг. Ибо каждый добавленный в группу прибавит процент к характеристикам. А это на 7 уровне у последнего изучившего способность героя будет 45% добавки к характеристикам.
Делай выводы и исправляй.
» WarCraft 3 / Не хочет в отряд
» WarCraft 3 / Способности и алгоритмы на заказ
» WarCraft 3 / Способности и алгоритмы на заказ
» WarCraft 3 / Способности и алгоритмы на заказ
Да и другим дадим поиграться.
» WarCraft 3 / Способности и алгоритмы на заказ
» WarCraft 3 / Способности и алгоритмы на заказ
Да и другим дадим поиграться.
» WarCraft 3 / Способности и алгоритмы на заказ
Да и другим дадим поиграться.
» WarCraft 3 / Способности и алгоритмы на заказ
Да и другим дадим поиграться.
За слишком много функций, дядьки, не ругайтесь.
» WarCraft 3 / В чем тут проблема?
Ошибка в
» WarCraft 3 / В чем тут проблема?
Однако советик: сделай лучше через цикл, так проще и меньше места занимает код.
» WarCraft 3 / Замена юнитов в таверне не работает должным образом
» WarCraft 3 / [JASS] Оптимизация
И меня не евенты интересуют, а функции и их корешки...
» WarCraft 3 / Замена юнитов в таверне не работает должным образом
» WarCraft 3 / [JASS] Оптимизация
SkillW_E_Func_Periodic - функция, что вызывается каждый период времени.
SkillW_E_Func_AreaActions - функция, что отвечает за поиск цели. Эту же функцию мне хочется вызывать после нанесения урона. В ней:
Первым делом функция срабатывает после того как цель способности (выбирается случайно в области действия) была атакована. Далее проверка на атакующего
Далее проверяем
- Да.
- Нет
Далее...Даем дополнительную атаку на один удар.
Даем способность, что уменьшает наносимый урон нашим Героем.
Если получивший урон и есть наша цель способности, нанесший урон и есть наш Герой, полученный урон не от способности, то
Надеюсь уже совсем хорошо пояснил, что за что отвечает. И понятно почему нужно отлавливать как атаку так и урон.
Теперь задача:
Как реализовать вызов функции SkillW_E_Func_AreaActions из функции SkillW_E_Func_TargetActions после уничтожение триггера в последней функции?
Ред. DazzleFirst
» WarCraft 3 / [JASS] Оптимизация
» WarCraft 3 / В чем моя ошибка?
Вот тебе примерчиГ: