В прямом смысле - никак во время игры, т.е сколько ты способностей указал спелбуку в редакторе обьектов, столько там их и будет.
Есть бага, суть которой в том что игра видя два одинаковых ID способности считает их одной, рисуя на них кулдауны и прочее одновременно, ну так вот, сделаем два спелбука, в одном одно заклинание, а во втором второе, в настройках у обоих спеллбуков оставляем базовый ид приказа - по умолчанию, добавим юниту один спеллбук - он может его открывать и юзать одну способность, добавляем ему второй спеллбук и скрываем его - действие SetPlayerAbilityAvalivle (к примеру, есть и другие способы) и вуаля, в первом спеллбуке мы видим 2 абикли и можем юзать 2 абилки, хотя технически в первом спелбуке о дна абилка, а во втором другая...
К примеру событие - завершение подготовки боевой единицы, и собственно подменяешь одного юнита - другим, в редакторе сделаешь 2 бугая и триггер который с неким шансом будет заменять обычных бугаёв на альтернативных.
PUVer, ну уже есть карта Геи Vs Натуралов, правда ей лет 20 уже. Ну 50 лайков будет, задумаюсь, если автор поможет с моделями - сделаю карту с игровыми роликами, 18+ контентом, в жанре TAG или дефенс.
Ну а в чем проблема? JASS API как бы позволяет нам удалять, добавлять, скрывать - способности. Не вижу проблем, просто скрываем абилку и все, а когда нужно снова делаем видимой на карте комманд, ну а у самого героя \ юнита есть сразу все возможные такие абилки, а ты тупо делаешь достумными \ недоступными.
Ну как вариант морф в другого юнита, у тини сперва так было сделано, потом несколько по другому (уровни просто увилечение размера, а аганим с деревом - морф)
ST95, такое там насколько помню не ввели, и причем тут стороний софт? Мемхак это наработка на языке jass, он присутсвует в коде карты и больше ничего не требует. Их уже несколько версий, функционал очень широк и удобен, главное тщательно читать интсрукцию и рекомендации по форуму, чтобы не сесть в лужу.
еще раз, для особо одаренных - открываем ссылку и скачиваем карту с мемхаком, вставляем его себе в карту.
Ну уж тут прикреплю, самый древний мемхак где эти функции были и работали, далее чет не припомню развивали их или нет, через 5 сек после старта карты у чародея крови внезапно становятся доступны для изучения криты блейдмастера. Никаких абилок, никаких модификаций обьектов, все делается исключительно кодом, благодаря мемхаку.
function Y65 takes nothing returns boolean
local trigger t=GetTriggeringTrigger()
local integer S5I=GetHandleId(t)
local integer NPI=GetTriggerEvalCount(t)
local unit P7I=(LoadUnitHandle(HashData,(S5I),(2)))
local unit P8I=(LoadUnitHandle(HashData,(S5I),(17)))
local lightning UZI=(LoadLightningHandle(HashData,(S5I),(196)))
local integer SUI=(LoadInteger(HashData,(S5I),(5)))
local real QXI=(LoadReal(HashData,(S5I),(189)))
local real QYI=(LoadReal(HashData,(S5I),(190)))
local real QJI=GetUnitX(P8I)
local real QKI=GetUnitY(P8I)
local real IV1
local real IW1
local real II3=(LoadReal(HashData,(S5I),(23)))
local real I13=(LoadReal(HashData,(S5I),(24)))
local real RM2
local real QWI=QNI(II3,I13,QJI,QKI)
call SaveReal(HashData,(S5I),(23),((QJI)*1.0))
call SaveReal(HashData,(S5I),(24),((QKI)*1.0))
if QWI>100 or NPI>(3.5/.03)or RKI(P8I)==true then
call DestroyLightning(UZI)
call FlushChildHashtable(HashData,(S5I))
call S0I(t)
else
call MoveLightning(UZI,true,QXI,QYI,QJI,QKI)
if QNI(QXI,QYI,QJI,QKI)>325 then
set RM2=Atan2(QKI-QYI,QJI-QXI)
set IV1=QXI+(325)*Cos(RM2)
set IW1=QYI+(325)*Sin(RM2)
call SetUnitX(P8I,IV1)
call SetUnitY(P8I,IW1)
endif
endif
set t=null
set P7I=null
set P8I=null
set UZI=null
return false
endfunction
function Y75 takes unit P7I,unit P8I,integer SUI returns nothing
local trigger t=CreateTrigger()
local integer S5I=GetHandleId(t)
local lightning UZI=AddLightning("PONC",true,GetUnitX(P7I),GetUnitY(P7I),GetUnitX(P8I),GetUnitY(P8I))
call SetLightningColor(UZI,1,1,1,1)
call SaveLightningHandle(HashData,(S5I),(196),(UZI))
call SaveUnitHandle(HashData,(S5I),(2),(P7I))
call SaveUnitHandle(HashData,(S5I),(17),(P8I))
call SaveInteger(HashData,(S5I),(5),(SUI))
call SaveReal(HashData,(S5I),(189),((GetUnitX(P7I))*1.0))
call SaveReal(HashData,(S5I),(190),((GetUnitY(P7I))*1.0))
call SaveReal(HashData,(S5I),(23),((GetUnitX(P8I))*1.0))
call SaveReal(HashData,(S5I),(24),((GetUnitY(P8I))*1.0))
call TriggerRegisterTimerEvent(t,0.03,true)
call TriggerRegisterUnitEvent(t,P8I,EVENT_UNIT_DEATH)
call TriggerAddCondition(t,Condition(function Y65))
call DamageTarget(P7I,P8I,1,50.00*SUI)
call IssueTargetOrder(P7I,"attack",P8I)
set t=null
set UZI=null
endfunction
function Y85 takes nothing returns boolean
local trigger t=GetTriggeringTrigger()
local integer S5I=GetHandleId(t)
local integer NPI=GetTriggerEvalCount(t)
local integer SUI=(LoadInteger(HashData,(S5I),(5)))
local unit P7I=(LoadUnitHandle(HashData,(S5I),(2)))
local real RM2=(LoadReal(HashData,(S5I),(13)))
local real BA3=(LoadReal(HashData,(S5I),(189)))
local real BB3=(LoadReal(HashData,(S5I),(190)))
local real QJI=(LoadReal(HashData,(S5I),(47)))
local real QKI=(LoadReal(HashData,(S5I),(48)))
local real IV1=BA3+(30*(20+4*2)/30)*NPI*Cos(RM2*bj_DEGTORAD)
local real IW1=BB3+(30*(20+4*2)/30)*NPI*Sin(RM2*bj_DEGTORAD)
local real YB3=SquareRoot((IV1-QJI)*(IV1-QJI)+(IW1-QKI)*(IW1-QKI))
local real YC3=700
local real YD3=175
local real YE3=(1-YB3/YC3)*YD3*2
local group g=NTI()
local unit P8I
if NPI==1 then
call SetUnitAnimationByIndex(P7I,5)
call SetUnitTimeScale(P7I,1.5)
endif
if YE3>YD3 then
call SetUnitAnimationByIndex(P7I,5)
set YE3=YD3*2-YE3
endif
call SetUnitFlyHeight(P7I,QDI(YE3,0),0)
call SetUnitX(P7I,PTI(IV1))
call SetUnitY(P7I,PUI(IW1))
call SetUnitFacing(P7I,RM2)
set GK=P7I
call GroupEnumUnitsInRange(g,IV1,IW1,120,Condition(function D21))
set P8I=FirstOfGroup(g)
call NSI(g)
if YB3<30 or P8I!=null or GetTriggerEvalCount(t)>26 then
call SetUnitFlyHeight(P7I,0,0)
call SetUnitFacing(P7I,RM2)
call SetUnitTimeScale(P7I,1)
call SetUnitAnimation(P7I,"stand")
call SetUnitPathing(P7I,true)
call UnitRemoveAbility(P7I,'A1J6')
call UPI(GetUnitX(P7I),GetUnitY(P7I),100)
if P8I!=null and RKI(P8I)==false then
call SCI(P8I,4408,5)
call Y75(P7I,P8I,SUI)
endif
call FlushChildHashtable(HashData,(S5I))
call S0I(t)
endif
set t=null
set P7I=null
set P8I=null
return false
endfunction
function Y95 takes nothing returns nothing
local unit P7I=GetTriggerUnit()
local integer SUI=GetUnitAbilityLevel(P7I,'A1J7')
local trigger t=CreateTrigger()
local integer S5I=GetHandleId(t)
local real QWI=700
local real RM2=GetUnitFacing(P7I)
local real QXI=GetUnitX(P7I)
local real QYI=GetUnitY(P7I)
local real QJI=PTI(QXI+QWI*Cos(RM2*bj_DEGTORAD))
local real QKI=PUI(QYI+QWI*Sin(RM2*bj_DEGTORAD))
call AddPermanentAbility(P7I,'Amrf')
call UnitRemoveAbility(P7I,'Amrf')
call SetUnitPathing(P7I,false)
call AddPermanentAbility(P7I,'A1J6')
call TriggerRegisterTimerEvent(t,0.03,true)
call TriggerAddCondition(t,Condition(function Y85))
call SaveUnitHandle(HashData,(S5I),(2),(P7I))
call SaveInteger(HashData,(S5I),(5),(SUI))
call SaveReal(HashData,(S5I),(13),((RM2)*1.0))
call SaveReal(HashData,(S5I),(189),((QXI)*1.0))
call SaveReal(HashData,(S5I),(190),((QYI)*1.0))
call SaveReal(HashData,(S5I),(47),((QJI)*1.0))
call SaveReal(HashData,(S5I),(48),((QKI)*1.0))
set P7I=null
set t=null
endfunction
function YA5 takes nothing returns boolean
if GetSpellAbilityId()=='A1J7' then
call Y95()
endif
return false
endfunction
function R71 takes nothing returns nothing
local trigger t=CreateTrigger()
call UMI(t,EVENT_PLAYER_UNIT_SPELL_EFFECT)
call TriggerAddCondition(t,Condition(function YA5))
set t=null
endfunction
'A1J7' - pounce. осоновано на "Веерный бросок" ('AEfk' )
UMI - TriggerRegisterAnyUnitEventBJ
PTI - проверка на границу карты по оси X
PUI - проверка на границу карты по оси Y
AddPermanentAbility:
function AddPermanentAbility takes unit u, integer id returns nothing
call UnitAddAbility( u, id )
call UnitMakeAbilityPermanent( u, true, id )
endfunction
S0I - утилизация триггеров, можно заменить на DestroyTrigger()
SCI - установка некого флага на хендл юнита втечени N сек, подленное назначение неизвестно.
NTI - CreateGroup()
NSI - DestroyGroup()
QNI - DistanceBetweenCords - измеряет растояние, выведено из одноименной бж функции.
PONC - Эффект молнии, кастом, добавлен в LigthingData.slk
» WarCraft 3 / Задержка в карте.
Ну а так, карту в студию
» XGM Конкурсы / Конкурс набора иконок 2022
» WarCraft 3 / Книга заклинаний
Есть бага, суть которой в том что игра видя два одинаковых ID способности считает их одной, рисуя на них кулдауны и прочее одновременно, ну так вот, сделаем два спелбука, в одном одно заклинание, а во втором второе, в настройках у обоих спеллбуков оставляем базовый ид приказа - по умолчанию, добавим юниту один спеллбук - он может его открывать и юзать одну способность, добавляем ему второй спеллбук и скрываем его - действие SetPlayerAbilityAvalivle (к примеру, есть и другие способы) и вуаля, в первом спеллбуке мы видим 2 абикли и можем юзать 2 абилки, хотя технически в первом спелбуке о дна абилка, а во втором другая...
» WarCraft 3 / Как сделать спавн рандомного бугая?
» WarCraft 3 / Превращеия Юнитов из казармы из Своих в союзных
» Fantasy Pirates / Вадим 2kxaoc играет в Fantasy Pirates #5
» WarCraft 3 / Орк-магичка
» WarCraft 3 / Орк-магичка
» WarCraft 3 / Орк-магичка
» WarCraft 3 / GetClosestDestructable
» WarCraft 3 / Орк-магичка
» WarCraft 3 / Орк-магичка
» WarCraft 3 / Функция Анимации
» WarCraft 3 / как агрить монстров на героев как в жизнь на арене
» WarCraft 3 / РАБОТА с ОДНОРАЗОВЫМ способностями
» WarCraft 3 / Изменения внешности при изучения пассивки
» WarCraft 3 / Как сделать герою прокачиваемые способности во время игры?
» WarCraft 3 / Как сделать герою прокачиваемые способности во время игры?
» WarCraft 3 / Как сделать герою прокачиваемые способности во время игры?
» WarCraft 3 / Как сделать герою прокачиваемые способности во время игры?
Ну а в разных версиях мемхака код отличается, но найти по ctrl+f думаю не составит труда.
» WarCraft 3 / Как сделать герою прокачиваемые способности во время игры?
» WarCraft 3 / Как сделать герою прокачиваемые способности во время игры?
» WarCraft 3 / крафт
Ред. quq_CCCP
» WarCraft 3 / Прыжок сларка на гуи
call UnitAddAbility( u, id )
call UnitMakeAbilityPermanent( u, true, id )
endfunction
» WarCraft 3 / Прыжок сларка на гуи
с доты на jass могу кинуть код.