• 🏆 Texturing Contest #33 is OPEN! Contestants must re-texture a SD unit model found in-game (Warcraft 3 Classic), recreating the unit into a peaceful NPC version. 🔗Click here to enter!
  • It's time for the first HD Modeling Contest of 2024. Join the theme discussion for Hive's HD Modeling Contest #6! Click here to post your idea!

Texttag Desync

Status
Not open for further replies.
JASS:
local unit au=GetTriggerUnit()
local unit su=GetEventDamageSource()
local integer tdmg=R2I(GetEventDamage())
local integer pi=GetPlayerId(GetOwningPlayer(au))
local real x=GetUnitX(au)+25*Cos(180.*.0174532)
local real y=GetUnitY(au)+25*Sin(180.*.0174532)
local texttag txt
local real xvel =.04*Cos(90.*.0174532)
local real yvel =.04*Sin(90.*.0174532)
if GetLocalPlayer()==GetOwningPlayer(su) or GetLocalPlayer()==GetOwningPlayer(au) then
if udg_showdmg[pi] and tdmg>0 then
set txt=CreateTextTag()
if IsUnitType(au,UNIT_TYPE_HERO) then
if GetRandomReal(1,100)<=udg_evade[pi] then
call SetUnitState(au,UNIT_STATE_LIFE,GetUnitState(au,UNIT_STATE_LIFE)+tdmg)
call SetTextTagText(txt,"^"+"evasion"+"^",.02)
call SetTextTagColor(txt,40,40,40,0)
else
call SetTextTagText(txt,I2S(tdmg),.02)
call SetTextTagColor(txt,130,00,00,0)
call SetUnitState(au,UNIT_STATE_LIFE,GetUnitState(au,UNIT_STATE_LIFE)+udg_block[pi])
endif
else
if GetRandomReal(1,100)<=udg_ACchance[pi] then
set tdmg=R2I(.1*udg_ACpower[pi])+tdmg
call SetTextTagText(txt,"*"+I2S(tdmg)+"*",.02)
call SetTextTagColor(txt,255,255,255,0)
call SetUnitState(au,UNIT_STATE_LIFE,GetUnitState(au,UNIT_STATE_LIFE)-.1*udg_SCpower[pi])
else
call SetTextTagText(txt,I2S(tdmg),.02)
endif
endif
endif
endif
call SetTextTagVelocity(txt,xvel,yvel)
call SetTextTagPos(txt,x,y,60)
call SetTextTagPermanent(txt,false)
call SetTextTagLifespan(txt,1)
call SetTextTagFadepoint(txt,0)
call TriggerSleepAction(1)
call DestroyTextTag(txt)
set txt=null
set au=null
set su=null
call DestroyTrigger(GetTriggeringTrigger())

:fp: How to use the GetLocalPlayer() in that function so I don't have a desync?
 
Level 14
Joined
Jun 3, 2005
Messages
209
You're changing the state of the game inside a GetLocalPlayer() bracket using functions like 'SetUnitState' and 'GetRandomReal'; which guarantees a desync. Assuming that all you want to do is show the texttag for one player, use:

JASS:
if p == GetLocalPlayer() then
    call SetTextTagVisibility(tt, true)
else
    call SetTextTagVisibility(tt, false)
endif

If you indent it better, it'd be clearer what you're aiming to do.
 
Status
Not open for further replies.
Top