Господи, ну что там за лимит-то еще такой, подробнее можно?
Но все равно переместить CloneAbility не проблема, просто не вижу смысла из-за все-таки НЕ наиглавнейшей задачи в XXX-й раз изменять код (у ульта очень большой кд, он слишком часто юзаться не будет, даже с этим лимитом мифическим "сотен" там не наберется, если за одно использование пройдет 10 клонабилитей, + любая абила, на которую ульт уже воздействовал, клонабилити новых уже НЕ вызывает, т. к. по ифзенэлсу не проходит).
Фатал в основной карте происходит после ОДНОГО юза ульты и ОДНОГО увеличения ренджа (т. е. вызывается десять клонабилитей). Точнее, его достаточно, чтобы после выхода из вара был фатал. Все еще уверенность, что дело в этом "превышении лимита"?
Зачем вообще, еще раз, юзается функция клонабилити и что будет, если ее не юзать? Вот почему, например, в основном мемхаке есть функции, которые просто меняют параметры, а тут еще необходима вот эта клонабилити? Проконсультируйте, если не трудно.
Ну код станет оптимальнее, ок, но не в этом же дело сейчас.
Все-таки мне кажется, что это из-за виджетайзера. Потому что он мне так уже уничтожал москитных даммиков, считая их "неиспользуемыми объектами", а мне потом разбираться, почему вместо файерболлов пустота летала.
Он, наверное, что-то там корежит в данных способностей при сжатии.
Потому что коды ведь одинаковые в тест-карте и в основной? (Если нет - пальцем на различия). А в тест-карте не фаталит, а в основной фаталит. А основная отличается:
Тем, что в ней дохрена всего;
Тем, что сжималась виджетайзером и оптимайзером.
Влияет ли первая причина? Вряд ли. Вывод...
***
Нде. Чушь какая-то. Дошло сейчас прогнать тест-карту через виджик и оптимайзер (т. е. протестировать так же, как основную) - нет фатала.
Оптимизация одинаковая. Код спелла одинаковый.
Одна карта фаталит вар после выхода из него, если спелл юзается, другая нет. Втф?
А что вообще будет, кстати, если клонабилити не писать?
Функция не подействует, код не скомпилируется или?...
замечание от GF RaiseD: 1.4 (злоупотребление форматированием) Существуют каты, блоки кода и форматирование.
Прошу переименовать все 4 модели в соответственно Puddle (для красной), BlackPuddle, GreenPuddle, WaterPuddle и все пути текстур для них и сами текстуры сделать начинающимися с этих слов.
Все закинуть в архив.
Самостоятельно делаю такое через W3ME v 1.07. Именно эта модель после попыток там поменять ей пути текстур бодается.
Так что кто умеет по-другому - сделайте, плз. Ради ничтожного % моделей осваивать параллельный способ желания совсем нет, лучше уж альтернативные выходы искать.
Только что с игры на основной карте НЕ за Райза - фатала после выхода из игры нет.
Тест-карта с Райзом (проюзаны все его активные абилы, всем проставлен безлим рендж через ульту) - фатала после выхода из игры нет.
Основная карта, пикается Райз, вводится -lvlup, юзается его ульта и за ней любая абила, чтобы дать ей безлим рендж. Все, после выхода из игры (хоть немедленно, хоть когда) - однозначный фатал.
Дело не "в любой абиле" - точно были вот ща проюзаны все абилы без ульты и все нормально. Точно что-то связано с ультой, а она выше...
В чём прикол, не понятно. Даже равкоды абил абсолютно одинаковые... В основной карте гораздо больше кода, РО, ланда и вообще всего, но при чем тут это?
Мля, ну, может, код в основной карте чем-то отличается от вышенаписанного и это я идентифицировать не могу? Вот в основной
/
function UnlimitedAbility takes nothing returns nothing ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ: u5, u6
local unit u5= GetTriggerUnit()
local unit u6= GetSpellTargetUnit()
local integer a= GetUnitAbility(u5 , GetSpellAbilityId())
local integer i= 0 ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ - ЗАКРЫТО
ДЕЛАЕМ НЕОГРАНИЧЕННУЮ ДАЛЬНОСТЬ СПОСОБНОСТИ, ЕСЛИ ОНА УЖЕ НЕ НЕОГРАНИЧЕННАЯ
if ( u6 != null ) and UnitHasBuffBJ(u5, 'B0H6') == true then
loop
exitwhen i > 10
set i=i + 1
call CloneAbilityData(a)
if GetAbilityDataHeroRng(a , i) < 99999 then
call SetAbilityDataHeroRng(a , i , 99999)
call UnitRemoveAbilityBJ('A27A', u5)
call UnitRemoveBuffBJ('B0H6', u5)
endif
endloop
endif ДЕЛАЕМ НЕОГРАНИЧЕННУЮ ДАЛЬНОСТЬ СПОСОБНОСТИ, ЕСЛИ ОНА УЖЕ НЕ НЕОГРАНИЧЕННАЯ - ЗАКРЫТО.
ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ: u5, u6
set u5=null
set u6=null ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ - ЗАКРЫТО
endfunction
function Unlimited2 takes nothing returns nothing ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ: t, u5, u6, heroadded, heroaction
local timer t= GetExpiredTimer()
local unit u5=LoadUnitHandle(udg_Hash, GetHandleId(t), 2)
local unit u6=LoadUnitHandle(udg_Hash, GetHandleId(t), 1)
local trigger heroadded=LoadTriggerHandle(udg_Hash, GetHandleId(t), 20)
local triggeraction heroaction=LoadTriggerActionHandle(udg_Hash, GetHandleId(t), 21)
local integer i=LoadInteger(udg_Hash, GetHandleId(t), 3)
local real r=LoadReal(udg_Hash, GetHandleId(t), 4) ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ - ЗАКРЫТО
set i=i + 1
call SaveInteger(udg_Hash, GetHandleId(t), 3, i)
if ( i == 100 ) or ( i == 200 ) or ( i == 300 ) or ( i == 400 ) or ( i == 500 ) or ( i == 600 ) or ( i == 700 ) or ( i == 800 ) or ( i == 900 ) or ( i == 1000 ) then
if i > 1000 or ( GetUnitAbilityLevelSwapped('A27A', u6) == 0 ) then
call PauseTimer(t)
call DestroyTimer(t)
call FlushChildHashtable(udg_Hash, GetHandleId(t))
call UnitRemoveAbilityBJ('A27A', u6)
call UnitRemoveBuffBJ('B0H6', u6)
call TriggerRemoveAction(heroadded, heroaction)
call DestroyTrigger(heroadded)
endif
ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ: t, u5, u6, heroadded, heroaction
set t=null
set u5=null
set u6=null
set heroadded=null
set heroaction=null ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ - ЗАКРЫТО
endfunction
function Unlimited takes nothing returns nothing ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ: t, u5, u6, heroadded, heroaction
local timer t= CreateTimer()
local unit u5= GetTriggerUnit()
local unit u6= GetSpellTargetUnit()
local trigger heroadded
local triggeraction heroaction
local real r
local integer i= 0 ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ - ЗАКРЫТО
if ( GetSpellAbilityId() == 'A278' ) then
set r=30 * ( GetUnitAbilityLevelSwapped('A278', u5) )
call UnitAddAbilityBJ('A27A', u6)
call UnitMakeAbilityPermanent(u6, true, 'A27A')
set heroadded=CreateTrigger()
call TriggerRegisterAnyUnitEventBJ(heroadded, EVENT_PLAYER_UNIT_SPELL_EFFECT)
set heroaction=TriggerAddAction(heroadded, function UnlimitedAbility)
ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ: t, u5, u6, heroadded, heroaction
set t=null
set u5=null
set u6=null
set heroadded=null
set heroaction=null ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ - ЗАКРЫТО
endfunction
/
АГА! Появилась наконец идея... Основная-то карта через виджетайзер проходит!!!
А там абилы жмутся!!!
Может быть, что из-за этого?! И чо тогда - абилы не жать или с фаталом смириться?
WarCraft III Widgetizer 1.9 - мб снять галочку с Abilities? Но насколько тогда ухудшится скорость игры и загрузки? На размер-то пофигу...
Если отслеживанием без мемхака, то еще важно не забыть учитывать всякие рефрешероподобные абилки - после их применения сразу засчитывать все кулдауны у того, кому рефрешнуло, готовыми.
Можно, например, при каждом рефреше накидывать на того, кому он произведен, способность-маркер-пустышку "этому сейчас рефрешнуло", во всех своих отслеживающих таймерах проверять ее наличие у юнита, если она есть - сразу делать "достижение нуля" и удалять ее (т. к. свою функцию выполнила).
Хотя во избежание багов еще такую абилу-пустышку тогда надо удалять при каждом ПРИМЕНЕНИИ способности, а таймер-счетчик должен быть с малым периодом...
Да, на 99% уверенность, что дело в избыточном клонировании. Основную карту уже сейчас переоткрывать времени нет, но после проверки в дополнительной (клонировалась только одна абилка, у которой рендж фактически был увеличен) вар НЕ сфаталил при выходе. Все понятно, ок, потом разберемся.
***
Нет. Все равно фаталит в основной карте.
В тест-карте не фаталило.
Если играть в основную карту без героя с этой абилой - не фаталит.
У этого героя еще из того, что не используется ни у кого больше, в другом спелле юзается AddUnitMPRegen из основного мемхака, но крайне сомнительно, что дело в ней...
Текущий код (еще исправлено отсутствие проверки баффа, жесткая ошибка, теперь способность ДЕЙСТВИТЕЛЬНО работает правильно - в чем она ЖЕСТОКО косила раньше, пусть интересующиеся юзеры разберутся сами, но в основной карте фаталит).
PS Ниже я Клон в принципе не могу поставить, проблема-то в том, что для вызова GetAbilityDataHeroRng УЖЕ надо абилку склонировать.
***********
function UnlimitedAbility takes nothing returns nothing ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ: u5, u6
local unit u5 = GetTriggerUnit()
local unit u6 = GetSpellTargetUnit()
local integer a = GetUnitAbility(u5,GetSpellAbilityId())
local integer i = 0 ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ - ЗАКРЫТО
ДЕЛАЕМ НЕОГРАНИЧЕННУЮ ДАЛЬНОСТЬ СПОСОБНОСТИ, ЕСЛИ ОНА УЖЕ НЕ НЕОГРАНИЧЕННАЯ
if (u6 != null) and UnitHasBuffBJ(u5,'B0H6') == true then
loop
exitwhen i > 10
set i = i+1
call CloneAbilityData(a)
if GetAbilityDataHeroRng(a, i) < 99999 then
call SetAbilityDataHeroRng(a,i,99999)
call UnitRemoveAbilityBJ( 'A27A', u5 )
call UnitRemoveBuffBJ( 'B0H6', u5 )
endif
endloop
endif ДЕЛАЕМ НЕОГРАНИЧЕННУЮ ДАЛЬНОСТЬ СПОСОБНОСТИ, ЕСЛИ ОНА УЖЕ НЕ НЕОГРАНИЧЕННАЯ - ЗАКРЫТО.
ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ: u5, u6
set u5 = null
set u6 = null ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ - ЗАКРЫТО
endfunction
function Unlimited2 takes nothing returns nothing ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ: t, u5, u6, heroadded, heroaction
local timer t = GetExpiredTimer()
local unit u5=LoadUnitHandle(udg_Hash,GetHandleId(t),2)
local unit u6=LoadUnitHandle(udg_Hash,GetHandleId(t),1)
local trigger heroadded=LoadTriggerHandle(udg_Hash,GetHandleId(t),20)
local triggeraction heroaction=LoadTriggerActionHandle(udg_Hash,GetHandleId(t),21)
local integer i=LoadInteger(udg_Hash,GetHandleId(t),3)
local real r=LoadReal(udg_Hash,GetHandleId(t),4) ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ - ЗАКРЫТО
set i = i + 1
call SaveInteger(udg_Hash,GetHandleId(t),3,i)
if (i==100) or (i==200) or (i==300) or (i==400) or (i==500) or (i==600) or (i==700) or (i==800) or (i==900) or (i==1000) then
if i > 1000 or (GetUnitAbilityLevelSwapped('A27A',u6) == 0) then
call PauseTimer(t)
call DestroyTimer(t)
call FlushChildHashtable(udg_Hash,GetHandleId(t))
call UnitRemoveAbilityBJ( 'A27A', u6 )
call UnitRemoveBuffBJ( 'B0H6', u6 )
call TriggerRemoveAction(heroadded,heroaction)
call DestroyTrigger(heroadded)
endif
ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ: t, u5, u6, heroadded, heroaction
set t = null
set u5 = null
set u6 = null
set heroadded = null
set heroaction = null ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ - ЗАКРЫТО
endfunction
function Unlimited takes nothing returns nothing ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ: t, u5, u6, heroadded, heroaction
local timer t = CreateTimer()
local unit u5 = GetTriggerUnit()
local unit u6 = GetSpellTargetUnit()
local trigger heroadded
local triggeraction heroaction
local real r
local integer i = 0 ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ - ЗАКРЫТО
if ( GetSpellAbilityId() == 'A278' ) then
set r = 30 * (GetUnitAbilityLevelSwapped('A278',u5))
call UnitAddAbilityBJ( 'A27A', u6 )
call UnitMakeAbilityPermanent (u6, true, 'A27A')
set heroadded=CreateTrigger()
call TriggerRegisterAnyUnitEventBJ(heroadded, EVENT_PLAYER_UNIT_SPELL_EFFECT)
set heroaction = TriggerAddAction(heroadded,function UnlimitedAbility)
ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ: t, u5, u6, heroadded, heroaction
set t = null
set u5 = null
set u6 = null
set heroadded = null
set heroaction = null ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ - ЗАКРЫТО
endfunction
Код рассчитан на то, чтобы менять рендж в принципе любой таргетабл-юнит абилити.
Да вот весь код, это изначально бафф, который накидывается на цель и отхиливает ей хп и ману, но это чтобы было.
А основная суть баффа - что если под ним скастовать любую таргетабл-юнит абилити, то она у кастера становится с анлимитед каст ренджем (на все уровни).
Тут из-за "предусмотрительности" на всякий случай прописано вплоть до 10 уровней (хотя на деле у абил практически никогда больше 5 не бывает, а у предметных вообще 1).
Мб в этом дело?
Тогда надо еще макс. лвл абилы узнавать и специально рендж продрючивать только на существующее число лвлов?
НО опять же - с глобальными изменениями кулдаунов таких траблов не было.
Вот весь код спелла (юнит для функции регистрируется при изучении заклинания). Все действует, "дагоны" с анлимитед каст ренджем рулят, "шаклы расты" тоже. Но фаталит.
***************************************
function UnlimitedAbility takes nothing returns nothing ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ: u5, u6
local unit u5 = GetTriggerUnit()
local unit u6 = GetSpellTargetUnit()
local integer a = GetUnitAbility(u5,GetSpellAbilityId())
local integer i = 0 ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ - ЗАКРЫТО
call CloneAbilityData(a)
ДЕЛАЕМ НЕОГРАНИЧЕННУЮ ДАЛЬНОСТЬ СПОСОБНОСТИ, ЕСЛИ ОНА УЖЕ НЕ НЕОГРАНИЧЕННАЯ
if (u6 != null) then
loop
exitwhen i > 10
set i = i+1
if GetAbilityDataHeroRng(a, i) < 99999 then
call SetAbilityDataHeroRng(a,i,99999)
call UnitRemoveAbilityBJ( 'A27A', u5 )
call UnitRemoveBuffBJ( 'B0H6', u5 )
endif
endloop
endif ДЕЛАЕМ НЕОГРАНИЧЕННУЮ ДАЛЬНОСТЬ СПОСОБНОСТИ, ЕСЛИ ОНА УЖЕ НЕ НЕОГРАНИЧЕННАЯ - ЗАКРЫТО.
ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ: u5, u6
set u5 = null
set u6 = null ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ - ЗАКРЫТО
endfunction
function Unlimited2 takes nothing returns nothing ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ: t, u5, u6, heroadded, heroaction
local timer t = GetExpiredTimer()
local unit u5=LoadUnitHandle(udg_Hash,GetHandleId(t),2)
local unit u6=LoadUnitHandle(udg_Hash,GetHandleId(t),1)
local trigger heroadded=LoadTriggerHandle(udg_Hash,GetHandleId(t),20)
local triggeraction heroaction=LoadTriggerActionHandle(udg_Hash,GetHandleId(t),21)
local integer i=LoadInteger(udg_Hash,GetHandleId(t),3)
local real r=LoadReal(udg_Hash,GetHandleId(t),4) ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ - ЗАКРЫТО
set i = i + 1
call SaveInteger(udg_Hash,GetHandleId(t),3,i)
if (i==100) or (i==200) or (i==300) or (i==400) or (i==500) or (i==600) or (i==700) or (i==800) or (i==900) or (i==1000) then
if i > 1000 or (GetUnitAbilityLevelSwapped('A27A',u6) == 0) then
call PauseTimer(t)
call DestroyTimer(t)
call FlushChildHashtable(udg_Hash,GetHandleId(t))
call UnitRemoveAbilityBJ( 'A27A', u6 )
call UnitRemoveBuffBJ( 'B0H6', u6 )
call TriggerRemoveAction(heroadded,heroaction)
call DestroyTrigger(heroadded)
endif
ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ: t, u5, u6, heroadded, heroaction
set t = null
set u5 = null
set u6 = null
set heroadded = null
set heroaction = null ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ - ЗАКРЫТО
endfunction
function Unlimited takes nothing returns nothing ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ: t, u5, u6, heroadded, heroaction
local timer t = CreateTimer()
local unit u5 = GetTriggerUnit()
local unit u6 = GetSpellTargetUnit()
local trigger heroadded
local triggeraction heroaction
local real r
local integer i = 0 ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ - ЗАКРЫТО
if ( GetSpellAbilityId() == 'A278' ) then
set r = 30 * (GetUnitAbilityLevelSwapped('A278',u5))
call UnitAddAbilityBJ( 'A27A', u6 )
call UnitMakeAbilityPermanent (u6, true, 'A27A')
set heroadded=CreateTrigger()
call TriggerRegisterAnyUnitEventBJ(heroadded, EVENT_PLAYER_UNIT_SPELL_EFFECT)
set heroaction = TriggerAddAction(heroadded,function UnlimitedAbility)
ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ: t, u5, u6, heroadded, heroaction
set t = null
set u5 = null
set u6 = null
set heroadded = null
set heroaction = null ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ - ЗАКРЫТО
endfunction
Короче, было лишних многобукаф, основная суть следующая:
Если в игре заюзать изменение ренджа абилки (во всяком случае, до 99999), то после выхода из вара за просмотром реплея такой игры или участием в ней будет сообщение про фатал еррор. Не смертельно и даже не то чтобы неприятно, но просто факт.
Такая абилка становится какой-то особенной, "отделенной" - не подвергается по крайней мере некоторым изменениям, которые должны глобально влиять на все такие абилки всех таких юнитов.
Если карта открывается 50 минут и надо менять только код, то редактировать war3map.j , очевидно, в разы быстрее, а уж в случае ошибок можно будет и в карту полезть (но как раз в блокноте писать уже и приятнее и ошибки маловероятны, это насчёт того, кто что знает и кто чего не знает).
Открывать интересно именно свою карту, чужие не особенно и вопрос не про это был.
Ну, ятп, неприятных побочных эффектов нет, спасибо.
Если кому не впадлу - че там с ренджем атаки? Вроде что-то было, но при попытке поставить и использовать нихрена не делало (при этом дистанция получения приказа у препарируемого юнита на всякий пожарный в РО высокая ставилась).
Просто ну нет сейчас времени все самостоятельно переиспытывать, не сто рук и мозгов. А идеи классные (типа снайперского поля, медленно по чуть-чуть увеличивающего рендж атаки ренджевикам, пока в нем стоишь) подъезжают.
Можно дать абилу на съедение деревьев от горных великанов. Тогда появится возможность райткликать на дерево, а когда он будет пытаться кастануть абилу на дерево, сиречь съесть его (макс. расстояние каста настраивается) - отменять каст (тогда дерево останется стоять на месте и ничего ему не будет), триггерно запускать свой прыжок. Тогда кулдаун абилы не пойдет, но его, ятп, можно будет пустить через мемхак.
Зачем аура выносливости, если есть аура торнадо? То же самое, только спеллбуков не надо, т. к. иконка не отображается. Правда, там по умолчанию красный цвет описания баффа, а для положительного эффекта логичнее зеленый, но цветотег один раз поставить и дальше копипастить явно проще, чем спеллбуки давать и блочить.
Все должно действовать, постоянно именно так и делаю. Триггер в студию.
P. S. Только одна оговорка: на всякий случай будет лучше, если способность, даваемая даммику, заранее будет присутствовать у какого-нибудь юнита на карте (можно нейтрального и/или не способного её скастануть), иначе иногда не исключены ситуации, когда даммик просто не кастует добавленную ему способность вообще (зависимость определить не удалось, абсолютно в одной и той же уже сохраненной и оптимизированной карте может кастовать, а может не кастовать - если не стал кастовать эту абилу в первый раз, то и всю игру - т. е. весь конкретный запуск конкретно этой карты - уже не станет, но добавлением абилы заранее нейтральному зданию, т. е. прелоадом, лечится надёжно).
Если ломать дальше, то надо сильнее хакать, до этих проверок докапываться :D :D :D
А вообще -300 ставилось, кстати, потому, что хотелось заодно проверить, возможна ли отрицательная скорость перемещения (не пойдет ли юнит задом :D) Не пошел, а жалко, тоже фантазия ппц разыгрывалась, что бы можно было сделать... Хотя это офк и так можно сделать, но триггерно...
Ред. ClotPh
» WarCraft 3 / [Мемхак] Функции для способностей.
Ок, жду, спасибо.
» WarCraft 3 / [Мемхак] Функции для способностей.
» WarCraft 3 / [Мемхак] Функции для способностей.
» WarCraft 3 / [Мемхак] Функции для способностей.
***
Одна карта фаталит вар после выхода из него, если спелл юзается, другая нет. Втф?
А что вообще будет, кстати, если клонабилити не писать?
Функция не подействует, код не скомпилируется или?...
Ред. ClotPh
» WarCraft 3 / Нужна модель? - Вам сюда!
Все закинуть в архив.
Самостоятельно делаю такое через W3ME v 1.07. Именно эта модель после попыток там поменять ей пути текстур бодается.
Так что кто умеет по-другому - сделайте, плз. Ради ничтожного % моделей осваивать параллельный способ желания совсем нет, лучше уж альтернативные выходы искать.
Ред. ClotPh
» WarCraft 3 / [Мемхак] Функции для способностей.
ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ: u5, u6
local unit u5= GetTriggerUnit()
local unit u6= GetSpellTargetUnit()
local integer a= GetUnitAbility(u5 , GetSpellAbilityId())
local integer i= 0
ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ - ЗАКРЫТО
if ( u6 != null ) and UnitHasBuffBJ(u5, 'B0H6') == true then
loop
exitwhen i > 10
set i=i + 1
call CloneAbilityData(a)
if GetAbilityDataHeroRng(a , i) < 99999 then
call SetAbilityDataHeroRng(a , i , 99999)
call UnitRemoveAbilityBJ('A27A', u5)
call UnitRemoveBuffBJ('B0H6', u5)
endif
endloop
endif
ДЕЛАЕМ НЕОГРАНИЧЕННУЮ ДАЛЬНОСТЬ СПОСОБНОСТИ, ЕСЛИ ОНА УЖЕ НЕ НЕОГРАНИЧЕННАЯ - ЗАКРЫТО.
set u5=null
set u6=null
ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ - ЗАКРЫТО
endfunction
ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ: t, u5, u6, heroadded, heroaction
local timer t= GetExpiredTimer()
local unit u5=LoadUnitHandle(udg_Hash, GetHandleId(t), 2)
local unit u6=LoadUnitHandle(udg_Hash, GetHandleId(t), 1)
local trigger heroadded=LoadTriggerHandle(udg_Hash, GetHandleId(t), 20)
local triggeraction heroaction=LoadTriggerActionHandle(udg_Hash, GetHandleId(t), 21)
local integer i=LoadInteger(udg_Hash, GetHandleId(t), 3)
local real r=LoadReal(udg_Hash, GetHandleId(t), 4)
ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ - ЗАКРЫТО
call SaveInteger(udg_Hash, GetHandleId(t), 3, i)
call ConditionalTriggerExecute(gg_trg_destroyspeceffect)
call SetUnitManaBJ(u6, ( GetUnitStateSwap(UNIT_STATE_MANA, u6) + r ))
call SetUnitLifeBJ(u6, ( GetUnitStateSwap(UNIT_STATE_LIFE, u6) + r ))
endif
call PauseTimer(t)
call DestroyTimer(t)
call FlushChildHashtable(udg_Hash, GetHandleId(t))
call UnitRemoveAbilityBJ('A27A', u6)
call UnitRemoveBuffBJ('B0H6', u6)
call TriggerRemoveAction(heroadded, heroaction)
call DestroyTrigger(heroadded)
endif
set t=null
set u5=null
set u6=null
set heroadded=null
set heroaction=null
ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ - ЗАКРЫТО
endfunction
ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ: t, u5, u6, heroadded, heroaction
local timer t= CreateTimer()
local unit u5= GetTriggerUnit()
local unit u6= GetSpellTargetUnit()
local trigger heroadded
local triggeraction heroaction
local real r
local integer i= 0
ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ - ЗАКРЫТО
call UnitMakeAbilityPermanent(u6, true, 'A27A')
set heroadded=CreateTrigger()
call TriggerRegisterAnyUnitEventBJ(heroadded, EVENT_PLAYER_UNIT_SPELL_EFFECT)
set heroaction=TriggerAddAction(heroadded, function UnlimitedAbility)
call SaveUnitHandle(udg_Hash, GetHandleId(t), 1, u6)
call SaveReal(udg_Hash, GetHandleId(t), 4, r)
call SaveInteger(udg_Hash, GetHandleId(t), 3, i)
call SaveTriggerHandle(udg_Hash, GetHandleId(t), 20, heroadded)
call SaveTriggerActionHandle(udg_Hash, GetHandleId(t), 21, heroaction)
call TimerStart(t, 0.01, true, function Unlimited2)
else
call PauseTimer(t)
call DestroyTimer(t)
call FlushChildHashtable(udg_Hash, GetHandleId(t))
endif
set t=null
set u5=null
set u6=null
set heroadded=null
set heroaction=null
ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ - ЗАКРЫТО
endfunction
А там абилы жмутся!!!
Может быть, что из-за этого?! И чо тогда - абилы не жать или с фаталом смириться?
WarCraft III Widgetizer 1.9 - мб снять галочку с Abilities? Но насколько тогда ухудшится скорость игры и загрузки? На размер-то пофигу...
Ред. ClotPh
» WarCraft 3 / Кулдаун на способность
» WarCraft 3 / [Мемхак] Функции для способностей.
***
PS Ниже я Клон в принципе не могу поставить, проблема-то в том, что для вызова GetAbilityDataHeroRng УЖЕ надо абилку склонировать.
ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ: u5, u6
local unit u5 = GetTriggerUnit()
local unit u6 = GetSpellTargetUnit()
local integer a = GetUnitAbility(u5,GetSpellAbilityId())
local integer i = 0
ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ - ЗАКРЫТО
if (u6 != null) and UnitHasBuffBJ(u5,'B0H6') == true then
loop
exitwhen i > 10
set i = i+1
call CloneAbilityData(a)
if GetAbilityDataHeroRng(a, i) < 99999 then
call SetAbilityDataHeroRng(a,i,99999)
call UnitRemoveAbilityBJ( 'A27A', u5 )
call UnitRemoveBuffBJ( 'B0H6', u5 )
endif
endloop
endif
ДЕЛАЕМ НЕОГРАНИЧЕННУЮ ДАЛЬНОСТЬ СПОСОБНОСТИ, ЕСЛИ ОНА УЖЕ НЕ НЕОГРАНИЧЕННАЯ - ЗАКРЫТО.
set u5 = null
set u6 = null
ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ - ЗАКРЫТО
endfunction
ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ: t, u5, u6, heroadded, heroaction
local timer t = GetExpiredTimer()
local unit u5=LoadUnitHandle(udg_Hash,GetHandleId(t),2)
local unit u6=LoadUnitHandle(udg_Hash,GetHandleId(t),1)
local trigger heroadded=LoadTriggerHandle(udg_Hash,GetHandleId(t),20)
local triggeraction heroaction=LoadTriggerActionHandle(udg_Hash,GetHandleId(t),21)
local integer i=LoadInteger(udg_Hash,GetHandleId(t),3)
local real r=LoadReal(udg_Hash,GetHandleId(t),4)
ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ - ЗАКРЫТО
call SaveInteger(udg_Hash,GetHandleId(t),3,i)
call ConditionalTriggerExecute( gg_trg_destroyspeceffect )
call SetUnitManaBJ( u6, ( GetUnitStateSwap(UNIT_STATE_MANA, u6) + r ) )
call SetUnitLifeBJ( u6, ( GetUnitStateSwap(UNIT_STATE_LIFE, u6) + r ) )
endif
call PauseTimer(t)
call DestroyTimer(t)
call FlushChildHashtable(udg_Hash,GetHandleId(t))
call UnitRemoveAbilityBJ( 'A27A', u6 )
call UnitRemoveBuffBJ( 'B0H6', u6 )
call TriggerRemoveAction(heroadded,heroaction)
call DestroyTrigger(heroadded)
endif
set t = null
set u5 = null
set u6 = null
set heroadded = null
set heroaction = null
ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ - ЗАКРЫТО
endfunction
ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ: t, u5, u6, heroadded, heroaction
local timer t = CreateTimer()
local unit u5 = GetTriggerUnit()
local unit u6 = GetSpellTargetUnit()
local trigger heroadded
local triggeraction heroaction
local real r
local integer i = 0
ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ - ЗАКРЫТО
call UnitMakeAbilityPermanent (u6, true, 'A27A')
set heroadded=CreateTrigger()
call TriggerRegisterAnyUnitEventBJ(heroadded, EVENT_PLAYER_UNIT_SPELL_EFFECT)
set heroaction = TriggerAddAction(heroadded,function UnlimitedAbility)
call SaveUnitHandle(udg_Hash,GetHandleId(t),1,u6)
call SaveReal(udg_Hash,GetHandleId(t),4,r)
call SaveInteger (udg_Hash,GetHandleId(t),3,i)
call SaveTriggerHandle(udg_Hash,GetHandleId(t),20,heroadded)
call SaveTriggerActionHandle(udg_Hash,GetHandleId(t),21,heroaction)
call TimerStart (t, 0.01, true, function Unlimited2)
else
call PauseTimer(t)
call DestroyTimer(t)
call FlushChildHashtable(udg_Hash,GetHandleId(t))
endif
set t = null
set u5 = null
set u6 = null
set heroadded = null
set heroaction = null
ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ - ЗАКРЫТО
endfunction
» WarCraft 3 / [Мемхак] Функции для способностей.
Дело только в этом? Вообще у кого-нибудь еще сабж фаталил подобным образом?
» WarCraft 3 / [Мемхак] Функции для способностей.
НО опять же - с глобальными изменениями кулдаунов таких траблов не было.
ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ: u5, u6
local unit u5 = GetTriggerUnit()
local unit u6 = GetSpellTargetUnit()
local integer a = GetUnitAbility(u5,GetSpellAbilityId())
local integer i = 0
ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ - ЗАКРЫТО
if (u6 != null) then
loop
exitwhen i > 10
set i = i+1
if GetAbilityDataHeroRng(a, i) < 99999 then
call SetAbilityDataHeroRng(a,i,99999)
call UnitRemoveAbilityBJ( 'A27A', u5 )
call UnitRemoveBuffBJ( 'B0H6', u5 )
endif
endloop
endif
ДЕЛАЕМ НЕОГРАНИЧЕННУЮ ДАЛЬНОСТЬ СПОСОБНОСТИ, ЕСЛИ ОНА УЖЕ НЕ НЕОГРАНИЧЕННАЯ - ЗАКРЫТО.
set u5 = null
set u6 = null
ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ - ЗАКРЫТО
endfunction
ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ: t, u5, u6, heroadded, heroaction
local timer t = GetExpiredTimer()
local unit u5=LoadUnitHandle(udg_Hash,GetHandleId(t),2)
local unit u6=LoadUnitHandle(udg_Hash,GetHandleId(t),1)
local trigger heroadded=LoadTriggerHandle(udg_Hash,GetHandleId(t),20)
local triggeraction heroaction=LoadTriggerActionHandle(udg_Hash,GetHandleId(t),21)
local integer i=LoadInteger(udg_Hash,GetHandleId(t),3)
local real r=LoadReal(udg_Hash,GetHandleId(t),4)
ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ - ЗАКРЫТО
call SaveInteger(udg_Hash,GetHandleId(t),3,i)
call ConditionalTriggerExecute( gg_trg_destroyspeceffect )
call SetUnitManaBJ( u6, ( GetUnitStateSwap(UNIT_STATE_MANA, u6) + r ) )
call SetUnitLifeBJ( u6, ( GetUnitStateSwap(UNIT_STATE_LIFE, u6) + r ) )
endif
call PauseTimer(t)
call DestroyTimer(t)
call FlushChildHashtable(udg_Hash,GetHandleId(t))
call UnitRemoveAbilityBJ( 'A27A', u6 )
call UnitRemoveBuffBJ( 'B0H6', u6 )
call TriggerRemoveAction(heroadded,heroaction)
call DestroyTrigger(heroadded)
endif
set t = null
set u5 = null
set u6 = null
set heroadded = null
set heroaction = null
ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ - ЗАКРЫТО
endfunction
ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ: t, u5, u6, heroadded, heroaction
local timer t = CreateTimer()
local unit u5 = GetTriggerUnit()
local unit u6 = GetSpellTargetUnit()
local trigger heroadded
local triggeraction heroaction
local real r
local integer i = 0
ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ - ЗАКРЫТО
call UnitMakeAbilityPermanent (u6, true, 'A27A')
set heroadded=CreateTrigger()
call TriggerRegisterAnyUnitEventBJ(heroadded, EVENT_PLAYER_UNIT_SPELL_EFFECT)
set heroaction = TriggerAddAction(heroadded,function UnlimitedAbility)
call SaveUnitHandle(udg_Hash,GetHandleId(t),1,u6)
call SaveReal(udg_Hash,GetHandleId(t),4,r)
call SaveInteger (udg_Hash,GetHandleId(t),3,i)
call SaveTriggerHandle(udg_Hash,GetHandleId(t),20,heroadded)
call SaveTriggerActionHandle(udg_Hash,GetHandleId(t),21,heroaction)
call TimerStart (t, 0.01, true, function Unlimited2)
else
call PauseTimer(t)
call DestroyTimer(t)
call FlushChildHashtable(udg_Hash,GetHandleId(t))
endif
set t = null
set u5 = null
set u6 = null
set heroadded = null
set heroaction = null
ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ - ЗАКРЫТО
endfunction
Ред. ClotPh
» WarCraft 3 / [Мемхак] Функции для способностей.
» WarCraft 3 / Доставание war3map.j через mpq, изменение и вшивание обратно
Открывать интересно именно свою карту, чужие не особенно и вопрос не про это был.
Ну, ятп, неприятных побочных эффектов нет, спасибо.
» WarCraft 3 / Какая функция отвечает за получение дальности атаки?
Но новички в картостроительстве, большинство серверов и отчасти последний патч варкрафта в мемхак не понимают.
» WarCraft 3 / Как сделать способность как в троллях и эльфах?
» WarCraft 3 / Нужна модель? - Вам сюда!
На хайве ппц годнота подъехала
» WarCraft 3 / Хак на память Warcraft3
» WarCraft 3 / Хак на память Warcraft3
» WarCraft 3 / Как дать юниту возможность райткликать на дерево?
» WarCraft 3 / Мигалка у баффов перед исчезновением
» WarCraft 3 / Как повысить уровень способности в НЕ героя?
» WarCraft 3 / Meat Hook
Ред. ClotPh
» WarCraft 3 / Хак на память Warcraft3
А вообще -300 ставилось, кстати, потому, что хотелось заодно проверить, возможна ли отрицательная скорость перемещения (не пойдет ли юнит задом :D) Не пошел, а жалко, тоже фантазия ппц разыгрывалась, что бы можно было сделать... Хотя это офк и так можно сделать, но триггерно...