Подскажите, пожалуйста, как триггерно задать увеличение голды в n раз при каждом ее получении (например, раб принес 10 голды, а игрок вместо этого получит 10n).

Принятый ответ

вот так можно, только в этом случае нельзя пользоваться функцией "добавить золото". только установить.
Загруженные файлы
`
ОЖИДАНИЕ РЕКЛАМЫ...
2
19
5 лет назад
2
Похожие вопросы:

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

3
10
5 лет назад
3
вот так можно, только в этом случае нельзя пользоваться функцией "добавить золото". только установить.
Загруженные файлы
Принятый ответ
0
23
5 лет назад
0
мда зачем вам добавить если вы и так знаете
сколько у текушего игрока монет + 10 и устанавливаете голд
0
10
5 лет назад
Отредактирован LordDracula
0
для того чтобы проверить, что голда: добыта, кол-во добытой = 10
а, лол, да). невнимательно посмотрел вопрос
0
12
5 лет назад
Отредактирован EHP_Sequence
0
LordDracula:
для того чтобы проверить, что голда: добыта, кол-во добытой = 10
а, лол, да). невнимательно посмотрел вопрос
Спасибо, а как для всех игроков такое сделать? Откопировать для каждого игрока триггеР?
0
26
5 лет назад
0
Как понял, с добытым золотом просто пример, оно должно быть больше и при убийстве крипов. Но вот предметы, наверное, не должны продаваться за n раз большую сумму.
Иначе бы автор вопроса спросил, как можно увеличить количество добываемого из шахты золота, а не каждого получаемого золота.
0
12
5 лет назад
0
Да, кстати, с крипов тоже надо увеличить голду.
0
17
5 лет назад
Отредактирован N1ghtSiren
0
EHP_Sequence,
Проверять на убийцу крипа, если это овнер убийцы - красный, то добавлять +20 голды
Если у убийцы-героя есть определённая шмотка - то давать +30 голды
Крип умирает
GetOwningPlayer(GetKillingUnit()) == Player(0) //Красный
SetPlayerState(Player(0),PLAYER_STATE_RESOURCE_GOLD,GetPlayerState(Player(0),PLAYER_STATE_RESOURCE_GOLD)+20)
Как отловить то, что раб дотаскивает голду до замка, я не знаю D:
0
10
5 лет назад
0
EHP_Sequence:
Спасибо, а как для всех игроков такое сделать? Откопировать для каждого игрока триггеР?
Нужно добавить для каждого игрока событие, что у игрока 1
0
23
5 лет назад
0
приказ haved вроде это который добывает холото вот и проверяй
1
27
5 лет назад
Отредактирован MpW
1
Есть система. Можно использовать EVENT_WIDGET_DEATH - то есть это срабатывает раньше реальной смерти. Это помогает не только отслеживать перерождение. Но и другие объекты, такие как смерть декора, предмета.
Используем TriggerRegisterDeathEvent(<триггер>,<widget>)
добавляем всем это событие как обычно
function TrigPick_Func001A takes nothing returns nothing
    call TriggerRegisterDeathEvent( gg_trg_d1, GetEnumUnit() )
endfunction

function TrigPick_Actions takes nothing returns nothing
    call ForGroupBJ( GetUnitsInRectAll(GetPlayableMapRect()), function TrigPick_Func001A )
endfunction

//===========================================================================
function InitTrig_pick takes nothing returns nothing
    set gg_trg_pick = CreateTrigger(  )
    call TriggerAddAction( gg_trg_pick, function TrigPick_Actions )
endfunction
теперь основная фишка. Когда происходит смерть, событие TriggerRegisterDeathEvent срабатывает раньше и там значение голды не изменилось. Поскольку мы не можем в этом событии узнать убийцу, как в реальном событии. Нам придется завести массив. Циклом пробегаем от 0 до 11, и записываем в него значение голды всех игроков (убийца неизвестен, записываем всех). Тк значение в будущем у убийцы через 0 сек изменится, нам нужно знать наскока изменится
код
function Trig1_d_Actions takes nothing returns nothing
    local integer i = 0
    
    loop
        exitwhen i>11
        set udg_p[i] = GetPlayerState( Player(i), PLAYER_STATE_RESOURCE_GOLD)
        call BJDebugMsg("Игрок " + I2S(i) + " имеет золото: " + I2S(udg_p[i]))
        set i=i+1
    endloop
    
endfunction

//===========================================================================
function InitTrig_d1 takes nothing returns nothing
    set gg_trg_d1 = CreateTrigger(  )
    call TriggerAddAction( gg_trg_d1, function Trig1_d_Actions )
endfunction
когда придет реальная смерть TriggerRegisterAnyUnitEventBJ( gg_trg_d, EVENT_PLAYER_UNIT_DEATH ). То уже деньги уже зачислены, юнит мертв. В реальной смерти можно узнать убийцу, тогда сверяемся с массивом. Насколько изменилось. Все это происходит за 0.00 сек
код
function Trig_d_Actions takes nothing returns nothing
    
    local integer n = GetPlayerId(GetOwningPlayer(GetKillingUnit()))
    local integer gold = GetPlayerState( Player(n), PLAYER_STATE_RESOURCE_GOLD)-udg_p[n]
    call BJDebugMsg("|cFFFF9300Игрок получил:r " + I2S(gold))
    
endfunction

//===========================================================================
function InitTrig_d takes nothing returns nothing
    set gg_trg_d = CreateTrigger(  )
    
    call TriggerRegisterAnyUnitEventBJ( gg_trg_d, EVENT_PLAYER_UNIT_DEATH )
    call TriggerAddAction( gg_trg_d, function Trig_d_Actions )
endfunction

А вот добыча золота рабом можно попробовать проверять приказом. Там когда он идет за ресурсом имеет один приказ. Добыв его (меняется анима - уже за плечами мешок с голдой), уже имеет другой приказ. Здесь также пригодится массив, чтоб знать наскока изменилось значение голды. Хотя я думаю это сложнее будет и не факт что точно.

еще можно смотреть как изменилась голда у рудника

вот карта
вот не объяснил, когда срабатывает триггер ChangeGold. Он записывает изменения голды.Срабатывает это событие раньше всех (досенения рабом голды в ратушу, покупки предмета, награды за убийство). Но позже спустя срабатывает одно из них, буквально сразу же.
Тк все события и действия однопоточные, то:
Если раб донес, это изменение уже записано в массиве ch. Из ch мы знаем что он донес 10 голды.
При продаже итема, можно узнать из ch стоимость итема.
При убийстве знаем из ch сколько награды получили.
запутаться невозможно логически, хотя триггер ChangeGold не нужен. можно было все вычисления сделать в самих триггерах. Но так совпало, что гораздо удобнее. И есть другие случаи изменения числа голды (подбора монетки, тренировки, исследования, строительство), поэтому это переходит нужное
Загруженные файлы
1
27
5 лет назад
Отредактирован MpW
1
вот обучающая карта с примерами - версия 2. написал пояснения. пример того как отследить золото каких-нибудь объектов, без бд. Или сколько голды забрал раб, или сколько награды получил. И зная это значение, можно там всякие там экономические расчеты делать.
Загруженные файлы
Чтобы оставить комментарий, пожалуйста, войдите на сайт.