DT2S, AT2S,WT2S конвертеры типа урона, атаки и оружия в строку
gg_unit_Hvsh_0001 это юнит вайши. Я проверяю работоспособность событий на ней со включенным мана щитом. Снижение урона во время damaging тратит меньше маны у щита, чем damaged.
В приведенном ниже коде (назовем его так)
при наличии в событиях
set trig = CreateTrigger() работает только damaging,
при отсутствии обе функции, на которые ссылается триггер (UnitWasDamaging/UnitWasDamaged) работают от события damaged (или мне так кажется).
Итак вопрос: что надо сделать, чтобы все помирить, т.е. чтобы UnitWasDamaging был от события Damaging, а UnitWasDamaged от Damaged, или какое другое решение?
gg_unit_Hvsh_0001 это юнит вайши. Я проверяю работоспособность событий на ней со включенным мана щитом. Снижение урона во время damaging тратит меньше маны у щита, чем damaged.
В приведенном ниже коде (назовем его так)
при наличии в событиях
set trig = CreateTrigger() работает только damaging,
при отсутствии обе функции, на которые ссылается триггер (UnitWasDamaging/UnitWasDamaged) работают от события damaged (или мне так кажется).
Итак вопрос: что надо сделать, чтобы все помирить, т.е. чтобы UnitWasDamaging был от события Damaging, а UnitWasDamaged от Damaged, или какое другое решение?
function DT2S takes damagetype damagetype returns string
local string sdt = null
if damagetype == DAMAGE_TYPE_UNKNOWN then
set sdt = "DAMAGE_TYPE_UNKNOWN"
elseif damagetype == DAMAGE_TYPE_NORMAL then
set sdt = "DAMAGE_TYPE_NORMAL"
elseif damagetype == DAMAGE_TYPE_ENHANCED then
set sdt = "DAMAGE_TYPE_ENHANCED"
elseif damagetype == DAMAGE_TYPE_FIRE then
set sdt = "DAMAGE_TYPE_FIRE"
elseif damagetype == DAMAGE_TYPE_COLD then
set sdt = "DAMAGE_TYPE_COLD"
elseif damagetype == DAMAGE_TYPE_LIGHTNING then
set sdt = "DAMAGE_TYPE_LIGHTNING"
elseif damagetype == DAMAGE_TYPE_POISON then
set sdt = "DAMAGE_TYPE_POISON"
elseif damagetype == DAMAGE_TYPE_DISEASE then
set sdt = "DAMAGE_TYPE_DISEASE"
elseif damagetype == DAMAGE_TYPE_DIVINE then
set sdt = "DAMAGE_TYPE_DIVINE"
elseif damagetype == DAMAGE_TYPE_MAGIC then
set sdt = "DAMAGE_TYPE_MAGIC"
elseif damagetype == DAMAGE_TYPE_SONIC then
set sdt = "DAMAGE_TYPE_SONIC"
elseif damagetype == DAMAGE_TYPE_ACID then
set sdt = "DAMAGE_TYPE_ACID"
elseif damagetype == DAMAGE_TYPE_FORCE then
set sdt = "DAMAGE_TYPE_FORCE"
elseif damagetype == DAMAGE_TYPE_DEATH then
set sdt = "DAMAGE_TYPE_DEATH"
elseif damagetype == DAMAGE_TYPE_MIND then
set sdt = "DAMAGE_TYPE_MIND"
elseif damagetype == DAMAGE_TYPE_PLANT then
set sdt = "DAMAGE_TYPE_PLANT"
elseif damagetype == DAMAGE_TYPE_DEFENSIVE then
set sdt = "DAMAGE_TYPE_DEFENSIVE"
elseif damagetype == DAMAGE_TYPE_DEMOLITION then
set sdt = "DAMAGE_TYPE_DEMOLITION"
elseif damagetype == DAMAGE_TYPE_SLOW_POISON then
set sdt = "DAMAGE_TYPE_SLOW_POISON"
elseif damagetype == DAMAGE_TYPE_SPIRIT_LINK then
set sdt = "DAMAGE_TYPE_SPIRIT_LINK"
elseif damagetype == DAMAGE_TYPE_SHADOW_STRIKE then
set sdt = "DAMAGE_TYPE_SHADOW_STRIKE"
elseif damagetype == DAMAGE_TYPE_UNIVERSAL then
set sdt = "DAMAGE_TYPE_UNIVERSAL"
endif
return sdt
endfunction
function AT2S takes attacktype attacktype returns string
local string sat = null
if attacktype == ATTACK_TYPE_NORMAL then
set sat = "ATTACK_TYPE_NORMAL"
elseif attacktype == ATTACK_TYPE_HERO then
set sat = "ATTACK_TYPE_HERO"
elseif attacktype == ATTACK_TYPE_MELEE then
set sat = "ATTACK_TYPE_MELEE"
elseif attacktype == ATTACK_TYPE_PIERCE then
set sat = "ATTACK_TYPE_PIERCE"
elseif attacktype == ATTACK_TYPE_MAGIC then
set sat = "ATTACK_TYPE_MAGIC"
elseif attacktype == ATTACK_TYPE_CHAOS then
set sat = "ATTACK_TYPE_CHAOS"
elseif attacktype == ATTACK_TYPE_SIEGE then
set sat = "ATTACK_TYPE_SIEGE"
endif
return sat
endfunction
function WT2S takes weapontype weapontype returns string
local string swt = null
if weapontype == WEAPON_TYPE_WHOKNOWS then
set swt = "WEAPON_TYPE_WHOKNOWS"
elseif weapontype == WEAPON_TYPE_METAL_LIGHT_CHOP then
set swt = "WEAPON_TYPE_METAL_LIGHT_CHOP"
elseif weapontype == WEAPON_TYPE_METAL_MEDIUM_CHOP then
set swt = "WEAPON_TYPE_METAL_MEDIUM_CHOP"
elseif weapontype == WEAPON_TYPE_METAL_HEAVY_CHOP then
set swt = "WEAPON_TYPE_METAL_HEAVY_CHOP"
elseif weapontype == WEAPON_TYPE_METAL_LIGHT_SLICE then
set swt = "WEAPON_TYPE_METAL_LIGHT_SLICE"
elseif weapontype == WEAPON_TYPE_METAL_MEDIUM_SLICE then
set swt = "WEAPON_TYPE_METAL_MEDIUM_SLICE"
elseif weapontype == WEAPON_TYPE_METAL_HEAVY_SLICE then
set swt = "WEAPON_TYPE_METAL_HEAVY_SLICE"
elseif weapontype == WEAPON_TYPE_METAL_MEDIUM_BASH then
set swt = "WEAPON_TYPE_METAL_MEDIUM_BASH"
elseif weapontype == WEAPON_TYPE_METAL_HEAVY_BASH then
set swt = "WEAPON_TYPE_METAL_HEAVY_BASH"
elseif weapontype == WEAPON_TYPE_METAL_MEDIUM_STAB then
set swt = "WEAPON_TYPE_METAL_MEDIUM_STAB"
elseif weapontype == WEAPON_TYPE_METAL_HEAVY_STAB then
set swt = "WEAPON_TYPE_METAL_HEAVY_STAB"
elseif weapontype == WEAPON_TYPE_WOOD_LIGHT_SLICE then
set swt = "WEAPON_TYPE_WOOD_LIGHT_SLICE"
elseif weapontype == WEAPON_TYPE_WOOD_MEDIUM_SLICE then
set swt = "WEAPON_TYPE_WOOD_MEDIUM_SLICE"
elseif weapontype == WEAPON_TYPE_WOOD_HEAVY_SLICE then
set swt = "WEAPON_TYPE_WOOD_HEAVY_SLICE"
elseif weapontype == WEAPON_TYPE_WOOD_LIGHT_BASH then
set swt = "WEAPON_TYPE_WOOD_LIGHT_BASH"
elseif weapontype == WEAPON_TYPE_WOOD_MEDIUM_BASH then
set swt = "WEAPON_TYPE_WOOD_MEDIUM_BASH"
elseif weapontype == WEAPON_TYPE_WOOD_HEAVY_BASH then
set swt = "WEAPON_TYPE_WOOD_HEAVY_BASH"
elseif weapontype == WEAPON_TYPE_WOOD_LIGHT_STAB then
set swt = "WEAPON_TYPE_WOOD_LIGHT_STAB"
elseif weapontype == WEAPON_TYPE_WOOD_MEDIUM_STAB then
set swt = "WEAPON_TYPE_WOOD_MEDIUM_STAB"
elseif weapontype == WEAPON_TYPE_CLAW_LIGHT_SLICE then
set swt = "WEAPON_TYPE_CLAW_LIGHT_SLICE"
elseif weapontype == WEAPON_TYPE_CLAW_MEDIUM_SLICE then
set swt = "WEAPON_TYPE_CLAW_MEDIUM_SLICE"
elseif weapontype == WEAPON_TYPE_CLAW_HEAVY_SLICE then
set swt = "WEAPON_TYPE_CLAW_HEAVY_SLICE"
elseif weapontype == WEAPON_TYPE_AXE_MEDIUM_CHOP then
set swt = "WEAPON_TYPE_AXE_MEDIUM_CHOP"
elseif weapontype == WEAPON_TYPE_ROCK_HEAVY_BASH then
set swt = "WEAPON_TYPE_ROCK_HEAVY_BASH"
endif
return swt
endfunction
function UnitWasDamaging takes nothing returns nothing
local unit t = GetTriggerUnit()
local unit s = GetEventDamageSource()
if t == gg_unit_Hvsh_0001 then
call BlzSetEventDamage( ( GetEventDamage() * 0.50 ) )
set udg_damaging = GetEventDamage()
call DisplayTimedTextToForce( GetPlayersAll(), 10.00, "1")
endif
set t = null
set s = null
set udg_damaging = GetEventDamage()
endfunction
function UnitWasDamaged takes nothing returns nothing
local unit t = GetTriggerUnit()
local unit s = GetEventDamageSource()
local string sdt = DT2S(BlzGetEventDamageType())
local string sat = AT2S(BlzGetEventAttackType())
local string swt = WT2S(BlzGetEventWeaponType())
local real dmgd = GetEventDamage()
local real dmgng = udg_damaging
if (t != gg_unit_Hvsh_0001) then
call BlzSetEventDamage( ( dmgd * 0.50 ) )
set dmgd = GetEventDamage()
call DisplayTimedTextToForce( GetPlayersAll(), 10.00, "2")
endif
call DisplayTimedTextToForce( GetPlayersAll(), 10.00, ("======================================="))
call DisplayTimedTextToForce( GetPlayersAll(), 10.00, ("source " + udg_color[GetConvertedPlayerId(GetOwningPlayer(s))] + GetUnitName(s)+"|r" + " attack " + udg_color[GetConvertedPlayerId(GetOwningPlayer(t))] + GetUnitName(t)+"|r"))
call DisplayTimedTextToForce( GetPlayersAll(), 10.00, ("damaged " + R2S(dmgd) + " / damaging" + R2S(dmgng)))
call DisplayTimedTextToForce( GetPlayersAll(), 10.00, ("damagetype " + sdt))
call DisplayTimedTextToForce( GetPlayersAll(), 10.00, ("attacktype " + sat))
call DisplayTimedTextToForce( GetPlayersAll(), 10.00, ("weapontype " + swt))
call DisplayTimedTextToForce( GetPlayersAll(), 10.00, ("======================================="))
set sdt = null
set sat = null
set swt = null
set dmgd = 0
set dmgng = 0
set t = null
set s = null
endfunction
function damage_func_con takes nothing returns boolean
if GetEventDamage() > 0.00 then
return true
endif
return false
endfunction
//===========================================================================
function InitTrig_damage takes nothing returns nothing
local trigger trig = CreateTrigger()
call TriggerRegisterAnyUnitEventBJ(trig, EVENT_PLAYER_UNIT_DAMAGING)
call TriggerAddAction(trig, function UnitWasDamaging)
call TriggerAddCondition( trig, Condition(function damage_func_con))
set trig = CreateTrigger()
call TriggerRegisterAnyUnitEventBJ(trig, EVENT_PLAYER_UNIT_DAMAGED)
call TriggerAddAction(trig, function UnitWasDamaged)
call TriggerAddCondition( trig, Condition(function damage_func_con))
endfunction
Принятый ответ
На самом деле никакой проблемы нет с этим вариантом, просто я ставил у другого юнита щит маны(100% резист) по умолчанию, и он не пробивал его событием EVENT_PLAYER_UNIT_DAMAGED, поэтому и не показывал.
`
ОЖИДАНИЕ РЕКЛАМЫ...
0
Показать
Nifistofi
3 года
0
Показать
На самом деле никакой проблемы нет с этим вариантом, просто я ставил у другого юнита щит маны(100% резист) по умолчанию, и он не пробивал его событием EVENT_PLAYER_UNIT_DAMAGED, поэтому и не показывал.
Принятый ответ
Чтобы оставить комментарий, пожалуйста, войдите на сайт.