Как сделать проверку кем нанесён урон и в каких кол-вах, например, Ратуше? Если допустим синий нанёс 100 урона, то здание переходит ему.

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

(всю папку триггеров себе вставляй)
инструкция по переносу в самой наработке
//////////// ВОТ ЧТО ТЕБЕ НАДО ДОПИСАТЬ/////////
if LoadInteger(udg_hash,GetHandleId(c),100+p)>=100 then где 100 - твоё число
call SetUnitOwner(c,GetOwningPlayer(u))
endif
и я показал куда, настраивать всё всё не надо ибо тебе не нужен опыт
и это не 100% решение и не гуи, требуется переработка, я дал максимальную подсказку с образцом
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
0
32
5 лет назад
0
Глобалки/хештаблицы
0
28
5 лет назад
0
В триггере по получении урона смотришь GetEventDamageSource (тот, кто нанёс урон) и GetEventDamage (количество урона).
5
32
5 лет назад
5

А вот подробнее , тут как раз такие реализована система подсчета урона по крипу, чтобы в этом % соотношении выдать опыт, в твоём же случае нужно немножко переделать систему:
Первый кто нанесёт 100 урона станет владельцем здания
function Trig_Damage_Test_Actions takes nothing returns nothing
local unit c=GetTriggerUnit() //  тот кто получил урон
local unit u=GetEventDamageSource() //  тот кто нанёс
local real d=GetEventDamage() // количество урона
local integer p=0
//IsUnitType(u,UNIT_TYPE_HERO) and 
if c!=u and IsUnitDead(c)==false and IsUnitIllusion(u)==false and IsUnitEnemy(u,GetOwningPlayer(c)) then //система опыта и голды

set p=GetPlayerId(GetOwningPlayer(u))
call SaveInteger(udg_hash,GetHandleId(c),100+p,R2I(d)+LoadInteger(udg_hash,GetHandleId(c),100+p)) // записываем в индекс + номер игрока хештаблицы
//////////////// ВОТ ЧТО ТЕБЕ НАДО ДОПИСАТЬ/////////
if LoadInteger(udg_hash,GetHandleId(c),100+p)>=100 then // где 100 - твоё число
call SetUnitOwner(c,GetOwningPlayer(u))
endif
//////////////////////////////////////// И ВСЁ/////////////
endif



set c=null
set u=null

endfunction
0
28
5 лет назад
Отредактирован PT153
0
IsUnitDead(c)==false and IsUnitIllusion(u)==false
Ну это бан.
UnitAlive(c) and (not IsUnitIllusion(u))
или
(not IsUnitDead(c)) and (not IsUnitIllusion(u))
или
(not (IsUnitDead(c) or IsUnitIllusion(u)))
Да и зачем проверять, что получатель урона жив? Получатель урона всегда жив, ведь урон нанесётся после окончания триггера, а мёртвые не могут получить урон.
0
16
5 лет назад
Отредактирован Naadir
0
PT153, зато, когда обращаешься к мёртвым юнитам, например их абилкам, могут возникать фаталы. Вдруг ты захочешь добавить 99999хп для какой-нибудь абилки блока, а юнит будет мертв?
1
28
5 лет назад
1
Naadir, причём тут это? Событие на получения урона срабатывает только для живых юнитов.
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.