Добавлен Fa1korn
Как создать над головой юнита плавающий текст, чтобы он следовал за ним до самой смерти, при условии что таких юнитов несколько с разными текстами. Может есть какие наработки?
И ещё один вопрос, можно ли очистить экран от всех плавающих текстов, на моей карте есть триггер SDMS, отображающий урон, но иногда он не удаляет текст (видимо когда урон наносится одновременно)....
И ещё один вопрос, можно ли очистить экран от всех плавающих текстов, на моей карте есть триггер SDMS, отображающий урон, но иногда он не удаляет текст (видимо когда урон наносится одновременно)....
код триггера SDMS
function SDMSCreateTextTag takes nothing returns nothing
local unit u=GetTriggerUnit()
local unit s=GetEventDamageSource()
local location l
local location l2
local player pl=GetOwningPlayer(u)
local player pl2=GetOwningPlayer(s)
local integer i=GetConvertedPlayerId(pl)
local texttag tt=null
local real fontSize=10.0
local real lifeTime=1.0
local real lifeTime2=2.0
local real dmg=GetEventDamage()
local string minus="-"
local string plus=""
local string textColor=SDMSTextVars(i-1)
local boolean b
if ( pl2 == Player(PLAYER_NEUTRAL_AGGRESSIVE) and udg_Players > 1) then
set dmg = dmg + dmg*(udg_Players-1)*0.25
if ( GetUnitStateSwap(UNIT_STATE_LIFE, u) <= dmg*(udg_Players-1)*0.25 ) then
call SetUnitLifeBJ( u, 1.00 )
else
call SetUnitLifeBJ( u, ( GetUnitStateSwap(UNIT_STATE_LIFE, u) - ( dmg*(udg_Players-1)*0.25 ) ) )
endif
endif
if ( dmg > 1.00 ) and ( dmg < 9999.00 ) then
call CreateTextTagUnitBJ(textColor+minus+I2S(R2I(dmg))+plus+"|r",u,0,fontSize,100.0,100.0,100.0,0.0)
endif
//эффекты брызг крови
if ( dmg >= ( GetUnitStateSwap(UNIT_STATE_MAX_LIFE, u) * 1.0 )) then
call DestroyEffect(AddSpecialEffectTarget("Objects\\Spawnmodels\\Human\\HumanLargeDeathExplode\\HumanLargeDeathExplode.mdl", u, "chest"))
else
if ( dmg >= ( GetUnitStateSwap(UNIT_STATE_MAX_LIFE, u) * 0.33 )) then
call DestroyEffect(AddSpecialEffectTarget("Objects\\Spawnmodels\\Human\\HumanBlood\\BloodElfSpellThiefBlood.mdl", u, "chest"))
else
if ( dmg >= ( GetUnitStateSwap(UNIT_STATE_MAX_LIFE, u) * 0.2 )) then
call DestroyEffect(AddSpecialEffectTarget("Objects\\Spawnmodels\\Critters\\Albatross\\CritterBloodAlbatross.mdl", u, "chest"))
endif
endif
endif
//Отлов урона
if GetUnitTypeId(s) == 'u026' then //Прорубающая Атака мастера меча
set s = gg_unit_Nbbc_0091
if ( GetUnitAbilityLevelSwapped('A06B', s) > 0 ) then
if ( GetRandomInt(1, 100) <= udg_Hero_Might_Chance[GetConvertedPlayerId(GetOwningPlayer(s))] or udg_Rune2[GetConvertedPlayerId(GetOwningPlayer(s))] == 1 ) then
if ( GetRandomInt(1, 100) <= 3 + GetUnitAbilityLevelSwapped('A06B', s) ) then
call DummyCastUnit( GetOwningPlayer(s), l, 0.5, 'A045', 1, "bloodlust", s )
endif
endif
if ( GetRandomInt(1, 100) <= udg_Hero_Spirit_Chance[GetConvertedPlayerId(GetOwningPlayer(s))] or udg_Rune2[GetConvertedPlayerId(GetOwningPlayer(s))] == 2 ) then
if ( (GetRandomInt(1, 100) <= udg_Hero_Might_Chance[GetConvertedPlayerId(GetOwningPlayer(s))] or udg_Rune1[GetConvertedPlayerId(GetOwningPlayer(s))] == 1) and GetRandomInt(1, 100) <= 35 ) then
call SetUnitLifeBJ( s, ( GetUnitStateSwap(UNIT_STATE_LIFE, s) + I2R(GetHeroStatBJ(bj_HEROSTAT_AGI, s, true)) * ( 0.04 + ( 0.04 * I2R(GetUnitAbilityLevelSwapped('A06B', s)) ) ) ) )
else
call SetUnitLifeBJ( s, ( GetUnitStateSwap(UNIT_STATE_LIFE, s) + I2R(GetHeroStatBJ(bj_HEROSTAT_AGI, s, true)) * ( 0.02 + ( 0.02 * I2R(GetUnitAbilityLevelSwapped('A06B', s)) ) ) ) )
endif
call DestroyEffect(AddSpecialEffectTarget("Abilities\\Spells\\Undead\\VampiricAura\\VampiricAuraTarget.mdl", s, "chest"))
endif
if ( GetRandomInt(1, 100) <= udg_Hero_Grow_Chance[GetConvertedPlayerId(GetOwningPlayer(s))] or udg_Rune2[GetConvertedPlayerId(GetOwningPlayer(s))] == 3 ) then
set l=GetUnitLoc(u)
call DisableTrigger( GetTriggeringTrigger())
if ( (GetRandomInt(1, 100) <= udg_Hero_Might_Chance[GetConvertedPlayerId(GetOwningPlayer(s))] or udg_Rune1[GetConvertedPlayerId(GetOwningPlayer(s))] == 1) and GetRandomInt(1, 100) <= 35 ) then
call PureDamageArea (s, l, 200, I2R(GetHeroStatBJ(bj_HEROSTAT_AGI, s, true)) * ( 0.2 + ( 0.2 * I2R(GetUnitAbilityLevelSwapped('A06B', s)) ) ))
else
call PureDamageArea (s, l, 200, I2R(GetHeroStatBJ(bj_HEROSTAT_AGI, s, true)) * ( 0.1 + ( 0.1 * I2R(GetUnitAbilityLevelSwapped('A06B', s)) ) ))
endif
call DestroyEffect(AddSpecialEffectTarget("Abilities\\Weapons\\PhoenixMissile\\Phoenix_Missile.mdl", u, "chest"))
call EnableTrigger( GetTriggeringTrigger())
call RemoveLocation(l)
else
call DisableTrigger( GetTriggeringTrigger())
if ( (GetRandomInt(1, 100) <= udg_Hero_Might_Chance[GetConvertedPlayerId(GetOwningPlayer(s))] or udg_Rune1[GetConvertedPlayerId(GetOwningPlayer(s))] == 1) and GetRandomInt(1, 100) <= 35 ) then
call UnitDamageTargetBJ( s, u, I2R(GetHeroStatBJ(bj_HEROSTAT_AGI, s, true)) * ( 0.2 + ( 0.2 * I2R(GetUnitAbilityLevelSwapped('A06B', s)) ) ), ATTACK_TYPE_CHAOS, DAMAGE_TYPE_NORMAL )
else
call UnitDamageTargetBJ( s, u, I2R(GetHeroStatBJ(bj_HEROSTAT_AGI, s, true)) * ( 0.1 + ( 0.1 * I2R(GetUnitAbilityLevelSwapped('A06B', s)) ) ), ATTACK_TYPE_CHAOS, DAMAGE_TYPE_NORMAL )
endif
call EnableTrigger( GetTriggeringTrigger())
endif
endif
if ( (GetRandomInt(1, 100) <= udg_Hero_Might_Chance[GetConvertedPlayerId(GetOwningPlayer(s))] or udg_Rune1[GetConvertedPlayerId(GetOwningPlayer(s))] == 1) and GetRandomInt(1, 100) <= 35 ) then
call DisableTrigger( GetTriggeringTrigger())
call UnitDamageTargetBJ( s, u, 50 + ( 25 * I2R(GetUnitAbilityLevelSwapped('A0A9', s)) ), ATTACK_TYPE_NORMAL, DAMAGE_TYPE_MAGIC )
call EnableTrigger( GetTriggeringTrigger())
endif
if ( GetRandomInt(1, 100) <= udg_Hero_Spirit_Chance[GetConvertedPlayerId(GetOwningPlayer(s))] or udg_Rune1[GetConvertedPlayerId(GetOwningPlayer(s))] == 2 ) then
set l=GetUnitLoc(u)
if ( GetRandomInt(1, 100) <= udg_Hero_Grow_Chance[GetConvertedPlayerId(GetOwningPlayer(s))] or udg_Rune2[GetConvertedPlayerId(GetOwningPlayer(s))] == 3 ) then
call DummyCastUnit(GetOwningPlayer(s),l,0.5,'A0IK',2,"acidbomb",u)
else
call DummyCastUnit(GetOwningPlayer(s),l,0.5,'A0IK',1,"acidbomb",u)
endif
call RemoveLocation(l)
endif
endif
//эффекты предметов
if (UnitHasBuffBJ( u, 'B02S' ) == true) then
call SetUnitLifeBJ( u, ( GetUnitStateSwap(UNIT_STATE_LIFE, u) + dmg * 2.00 ) )
endif
if (UnitHasBuffBJ( u, 'B01L' ) == true) then
call SetUnitManaBJ( s, ( GetUnitStateSwap(UNIT_STATE_MANA, s) + 6.00 ) )
call DestroyEffect(AddSpecialEffectTarget("Abilities\\Spells\\Items\\AIma\\AImaTarget.mdl", s, "overhead"))
endif
if (UnitHasBuffBJ( u, 'B01K' ) == true) then
call SetUnitManaBJ( s, ( GetUnitStateSwap(UNIT_STATE_MANA, s) + 20.00 ) )
call DestroyEffect(AddSpecialEffectTarget("Abilities\\Spells\\Items\\AIma\\AImaTarget.mdl", s, "overhead"))
else
if (UnitHasBuffBJ( u, 'B01E' ) == true) then
call DisableTrigger( GetTriggeringTrigger() )
call UnitDamageTargetBJ( s, u, I2R(GetHeroStatBJ(bj_HEROSTAT_AGI, s, true)), ATTACK_TYPE_CHAOS, DAMAGE_TYPE_DIVINE )
call EnableTrigger( GetTriggeringTrigger() )
else
if (UnitHasBuffBJ( u, 'B01G' ) == true) then
set l=GetUnitLoc(u)
set l2=GetUnitLoc(s)
call DisableTrigger( GetTriggeringTrigger() )
call UnitDamageTargetBJ( s, u, ( DistanceBetweenPoints(l2, l) * 0.20 ), ATTACK_TYPE_CHAOS, DAMAGE_TYPE_DIVINE )
call EnableTrigger( GetTriggeringTrigger() )
call RemoveLocation(l)
call RemoveLocation(l2)
endif
endif
endif
if ( UnitHasItemOfTypeBJ(s, 'I02S') == true ) then
if ( dmg > 50.00 ) then
call SetUnitLifeBJ( s, ( GetUnitStateSwap(UNIT_STATE_LIFE, s) + 50.00 ) )
else
call SetUnitLifeBJ( s, ( GetUnitStateSwap(UNIT_STATE_LIFE, s) + dmg ) )
endif
endif
if ((UnitHasBuffBJ( u, 'B02O' ) == true) or (UnitHasBuffBJ( u, 'B02N' ) == true)) then
set l=GetUnitLoc(u)
set udg_FireBlades_Target = u
call CreateNUnitsAtLoc( 1, 'u00W', pl2, l, bj_UNIT_FACING )
call RemoveLocation(l)
endif
//
set tt=GetLastCreatedTextTag()
call SetTextTagVelocityBJ(tt,96.0,90)
call SetTextTagPermanentBJ(tt,false)
call SetTextTagLifespanBJ(tt,lifeTime)
call SetTextTagFadepointBJ(tt,0.0)
call PolledWait(lifeTime2)
set u=null
set s=null
set pl=null
set pl2=null
set l=null
set l2=null
set i=0
set fontSize=0
set lifeTime=0
set lifeTime2=0
set dmg=0
set minus=""
set plus=""
set textColor=""
call DestroyTextTagBJ(tt)
endfunction
function SDMSTriggerRegisterUnitDamaged takes nothing returns nothing
call TriggerRegisterUnitEvent(SDMStheTrigger(),GetEnteringUnit(),EVENT_UNIT_DAMAGED)
endfunction
function SDMSGroupFunction takes nothing returns nothing
local unit u=GetEnumUnit()
call TriggerRegisterUnitEvent(SDMStheTrigger(),u,EVENT_UNIT_DAMAGED)
set u=null
endfunction
function theSDMSTriggerActions takes nothing returns nothing
local trigger UnitEnter=CreateTrigger()
local trigger TextTagCreate=SDMStheTrigger()
call TriggerRegisterEnterRectSimple(UnitEnter,GetPlayableMapRect())
call TriggerAddAction(UnitEnter,function SDMSTriggerRegisterUnitDamaged)
call ForGroupBJ(GetUnitsInRectAll(GetPlayableMapRect()),function SDMSGroupFunction)
set UnitEnter=null
set TextTagCreate=null
endfunction
function InitTrig_the_SDM_Ttrigger takes nothing returns nothing
local trigger tr=CreateTrigger()
set udg_SDMStrigger=CreateTrigger()//Тут также меняется название глобальной переменной типа триггер.
call TriggerAddAction(SDMStheTrigger(),function SDMSCreateTextTag)
call TriggerRegisterTimerEventSingle(tr,0.0)
call TriggerAddAction(tr,function theSDMSTriggerActions)
set tr=null
endfunction
Принятый ответ
но когда срабатывает одновременно в некоторых случаях текст остается, в чем причина не знаю
причина в бж функциях
избавься от бж и всё норм будет
избавься от бж и всё норм будет
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
избавься от бж и всё норм будет
Отредактирован Fa1korn