Регулирование значений в Редакторе объектов.
В первую очередь, вам необходимо знать, что награда за убийство боевой единицы - случайное значение между (базовым значением + кол-вом костей) и (базовым значением + кол-вом костей * кол-во граней у кости). В Редакторе объектов у любого воина есть такие поля:
Характеристики - Награда за уничтожение - базовая. Характеристики - Награда за уничтожение - кол-во граней у кости. Характеристики - Награда за уничтожение - кол-во костей.
Эти значения определяют призовое золото, которое является случайным числом между (базовым значением + кол-вом костей) и (базовым значением + кол-вом костей * кол-во граней у кости)
Характеристики - Призовая древесина - базовое значение. Характеристики - Призовая древесина - количество граней. Характеристики - Призовая древесина - количество кубиков.
Эти значения определяют призовое дерево, которое является случайным числом между (базовым значением + кол-вом кубиков) и (базовым значением + кол-вом кубиков * кол-во граней)
Помня эти правила, вы сможете на свой вкус отредактировать призовое золото и древесину. А теперь приступим к триггерам...
Регулирование значений при помощи триггеров.
Для регулирования значений награды триггерно, нам сначала необходимо научиться регулировать встроенную систему - включать и выключать её. Для этого применяется действие:
Оно отключает или включает те значения, что мы регулировали в Редакторе объектов. Допустим, мы не хотим использовать значение Редактора объектов, т.к. его нельзя отловить и хотим всё сделать при помощи триггеров. Тогда придётся сделать такой цикл:
Это отключит движок получения награды. Теперь мы можем сымитировать этот движок триггерно. Здесь нам поможет такая Jass-функция: Код function Bounty takes player whichplayer, integer bounty, real x, real y returns nothing local texttag t=CreateTextTag() local string s="+" call AdjustPlayerStateBJ( bounty, whichplayer, PLAYER_STATE_RESOURCE_GOLD ) if bounty<0 then set s="" endif call SetTextTagText(t,s+I2S(bounty),0.025) call SetTextTagPos(t,x,y, 0.00) call SetTextTagColor(t,255,220,0,255) call SetTextTagVelocity(t,0,0.03) if (GetLocalPlayer()==whichplayer) then call SetTextTagVisibility(t,true) set s="UI\\Feedback\\GoldCredit\\GoldCredit.mdl" else call SetTextTagVisibility(t,false) set s="" endif call DestroyEffect(AddSpecialEffect(s,x,y)) call SetTextTagFadepoint(t,2) call SetTextTagLifespan(t,3) call SetTextTagPermanent(t,false) set t=null endfunction
Мы можем вставить её в основной код карты, затем вызвать в триггере с событием смерти боевой единицы Custom script: Код call Bounty(GetOwningPlayer(GetKillingUnit()),20,GetUnitX(GetTriggerUnit()),GetUnitY(GetTriggerUnit()))
В таком случае убивающий будет получать по 20 ед. золота за убитую боевую единицу. Вот и всё по вознаграждениям. Экспериментируйте, и у вас всё получится! Спасибо за внимание. |