5

» WarCraft 3 / Почему появляется два тексттага?

Было бы неплохо перед показом кода расставить все отступы, ибо порой читать сложновато.
Однако я быстренько глянул и могу сказать, что код должен работать адекватно.
Но хочу придраться к самому созданию всплывающего текста. При каждом поднятии любого предмета будет создаваться этот текст (без записей и т.д.) и будет тупо висеть всю игру. Не проверял, действительно ли так, так что могу ошибаться.
NekoriDes:
но показывает оба тексттага с варнингом.
А чего пишет то? Случаем не "Доступно с 0 уровня"?
5

» WarCraft 3 / Просьба

facepalm... я имел ввиду глянь там, но какого черта написал "оставляем просьбу тут" - сам в шоке...
5

» WarCraft 3 / Не хочет в отряд

такое же действие только на 7,14 и 21 уровнях
Событие - Герой изучил способность
Условия - Изученная способность == нашей, И ( ее уровень == 7 или 14 или 21)
Действия - данные действия в этом вопросе.
ssbbssc, умничка, правильно пишет. Zhan10, тебе обязательно нужно делать расчеты в реальной, а потом переводить ее в целочисленную. Ибо с десятичными числами характеристики не желают работать.
И насчет бонуса... сия бонус добавляет % даже от предметов. И при каждом действии не учитывается прошлый бонус. К тому же если таких героев 3 или более они же тоже могут изучить сия способность и тут выйдет баг. Ибо каждый добавленный в группу прибавит процент к характеристикам. А это на 7 уровне у последнего изучившего способность героя будет 45% добавки к характеристикам.
Делай выводы и исправляй.
5

» WarCraft 3 / Не хочет в отряд

Факт в том, что в группу добавляется тобою созданный, однако действия с доб. хар-к не работают как ты хочешь.
5

» WarCraft 3 / Способности и алгоритмы на заказ

TAHK90, вот играйся.
Да и другим дадим поиграться.

Ай, забыл в фильтр добавить:
 and not IsUnitType(GetFilterUnit(),UNIT_TYPE_MECHANICAL) and not IsUnitType(GetFilterUnit(),UNIT_TYPE_STRUCTURE) 
Загруженные файлы
5

» WarCraft 3 / Способности и алгоритмы на заказ

TAHK90, вот, играйся.
Да и другим дадим поиграться.
За слишком много функций, дядьки, не ругайтесь.
Загруженные файлы
5

» WarCraft 3 / В чем тут проблема?

Ай... прошляпил. ENAleksey правильно пишет.
Ошибка в
...Cos(f-30 * bj_DEGTORAD)
...Sin(f-30 * bj_DEGTORAD)
вместо что выше пропиши:
...Cos((f-30) * bj_DEGTORAD)
...Sin((f-30) * bj_DEGTORAD)
5

» WarCraft 3 / В чем тут проблема?

Как именно криво? Ибо ошибок, лично я, не вижу.
Однако советик: сделай лучше через цикл, так проще и меньше места занимает код.
5

» WarCraft 3 / [JASS] Оптимизация

Вот ты блин... придрался к этому евенту... Пока не проверю лично, что лучше, я не признаю твою правоту.
И меня не евенты интересуют, а функции и их корешки...
5

» WarCraft 3 / Замена юнитов в таверне не работает должным образом

Sucsonius: насколько понимаю ты редактируешь чужую карту и в ней создал своего героя. Дабы не мучаться с слк таблицами и с .j, пройдись прогой X-Deprotect да и редактируй в обычном редакторе, только я не помню как обратно слк таблицы в читабельный вид для РО зашаманить - поиск в твоем распоряжении.
5

» WarCraft 3 / [JASS] Оптимизация

Блин... я не противоречу, просто не так выражаю мысль и работу способности. Ошибка с моей стороны при которой ты не можешь понять, что мне действительно нужно.

Пробну еще раз...
SkillW_Func_Init - функция, что вызывается после создания героя. В ней:
		call TriggerRegisterPlayerUnitEvent(SkillW_D,Player(index),EVENT_PLAYER_UNIT_ATTACKED,null)
  • первый евент на отлов атаки он же основной, для пассивки многократного урона.
SkillW_A_Func_Condition - функция, которая вызывается при изучении способности. Здесь:
        call TriggerRegisterUnitEvent(SkillW_C, GetTriggerUnit(), EVENT_UNIT_DAMAGED)
  • отлов урона для триггерного уворота.
SkillW_D_Func_Condition - функция, что вызывается при каждой атаке. Здесь:
		call TriggerRegisterUnitEvent( SkillW_D__Trigger[SkillW_D__MAX], t, EVENT_UNIT_DAMAGED)
  • временный отлов урона. пассивка многократного урона, триггер уничтожается после использования
SkillW_E_Func_Condition - функция, отлавливает использование способности. начало того, что мне желанно оптимизировать.
SkillW_E_Func_Periodic - функция, что вызывается каждый период времени.
SkillW_E_Func_AreaActions - функция, что отвечает за поиск цели. Эту же функцию мне хочется вызывать после нанесения урона. В ней:
call TriggerRegisterUnitEvent( SkillW_E__Trigger[index], SkillW_E__Target[index], EVENT_UNIT_ATTACKED)
  • временный отлов атаки.
SkillW_E_Func_TargetActions - функция с триггером, что отлавливает атаку и урон, а после уничтожает триггер.
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]
...
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 после уничтожение триггера в последней функции?
5

» WarCraft 3 / [JASS] Оптимизация

nvc123, да, т.е. для каждой пассивной способности по отдельному триггеру с евентом
EVENT_PLAYER_UNIT_ATTACKED
к ним же вдобавок тот самый отлов для активки, но он создается только на время действия способности.

Кет, так как осуществить проверку?
5

» WarCraft 3 / Невидимые карты

Один из многих случаев где всегда была хороша поговорка: "Смотрю в книгу- вижу фигу."
Друг любезный, ищи проблему не в компьютере, а в себе.
5

» WarCraft 3 / Приказы

не кастуют спелл
Проблема, возможно, в самом спелле или в отданном приказе даммикам.
TAHK90:
если сделать цикл от 1 до 3-х то ничего не изменяется
Ты сильно не прав.
TAHK90:
да в прибавок они ещё и не сразу трое спаунятся.
В силу того что ты используешь
Wait 2 seconds
у тебя они и не создаются сразу. Для того чтобы сразу создать их ты должен поверить тому что написал KPOKODIL т.е.
Сделай 1 цикл от 1 до 3-х. Вейт вообще удали к чертям, сделай время жизни даммиков 0.5 - 1 сек