MExp отлов полученого опыта героем.
Эта статья посвящена MExp (Massge Exp) то как не труд отловить полученный опыт героем. Да и создать плавающий текст рядом с самим героем видный только ему (а точнее его владельцу;)).
Просто каждую секунду записываем текущий опыт героя на его хендл через хеш таблицу. При записи проверяем его прошлое значение, если есть разница то естественно вернуть её нам. А там уж мы создадим плавающий текст.
[code=jass]
globals
hashtable Mexp_hash = InitHashtable()
endglobals
function act takes nothing returns nothing
local unit u = GetEnumUnit()
local integer a = 0
if IsUnitType(u, UNIT_TYPE_HERO) == true then
set a = LoadInteger(Mexp_hash, GetHandleId(u),1)
if a != GetHeroXP(u) then
set a = GetHeroXP(u) - a
// сдеся делайте что хотите, переменная "а" и есть полученный опыт.
endif
call SaveInteger(Mexp_hash,GetHandleId(u),1,GetHeroXP(u))
endif
set u = null
endfunction
function acionsMexp takes nothing returns nothing
local rect r = GetPlayableMapRect()
local group g = GetUnitsInRectMatching(r, null)
call ForGroup(g, function act)
call GroupClear(g)
call DestroyGroup(g)
set r = null
set g = null
endfunction
function InitTrig_exp takes nothing returns nothing
set gg_trg_exp =CreateTrigger()
call TriggerAddAction(gg_trg_exp, function acionsMexp)
call TriggerRegisterTimerEventPeriodic(gg_trg_exp, 1)
endfunction[/code]
Да и триггер должен называться exp)
author of the article H_A_PK