HomeUser Control Panel (unavailable in archive)ForumsTutorialsArt GalleryResourcesMaps

Display Text to Player crash?

09-29-2008, 05:54 AM#1
The_AwaKening
I couldn't determine for sure this was the problem, but my map seemed to crash when 2 people ran this command almost simultaneously. Anything in there that you can see that would cause a problem?

Collapse JASS:
function PlayerInfoBool takes nothing returns boolean
    return IsUnitType(GetFilterUnit(), UNIT_TYPE_HERO)
endfunction

function PlayerInfo_Msg takes string check returns string
    local string s = " "
    local integer j=1
    local integer k=0
    loop
        exitwhen j>=9-StringLength(check) and k>StringLength(check)
        if SubString(check,k-1,k)=="1" then
            set s=s+" "
        endif
        if j<9-StringLength(check) then
            set s=s+"  "
        endif
        set j=j+1
        set k=k+1
    endloop

    return s
endfunction

function Trig_Player_Info_Actions takes nothing returns nothing
    local player p=GetTriggerPlayer()
    local integer i
    local string randoms
    local string heros
    local string kills
    local string deaths
    local string units
    local string gold
    local force f=CreateForce()
    local group g
    local unit u
    local boolexpr b

    if GetEventPlayerChatString() == "-info" then
        set i=GetPlayerId(p)+1
    else
        // function used to get Player # from color, name, or player number
        set i=GetPlayerIndexFromColorString(SubString(GetEventPlayerChatString(), 6, 22))
    endif

    set randoms=I2S(udg_RandomHero[i])
    set heros=I2S(udg_totalHeros[i])
    set kills=I2S(udg_infoHKills[i])
    set deaths=I2S(udg_infoDeaths[i])
    set units=I2S(udg_infoKills[i])
    set gold=I2S(udg_infoGold[i])

    call ForceAddPlayer(f,p)
    if IsPlayerInForce(GetLocalPlayer(), f) then
        call ClearTextMessages()
    endif
    call DestroyForce(f)

    call DisplayTimedTextToPlayer( p, 0, 0, 10, ( "  " + udg_playerColor[i] + udg_PlayerName[i-1] + "|r  has
	" ) )

    call DisplayTimedTextToPlayer( p, 0, 0, 10, ( ( PlayerInfo_Msg(randoms) + "|cffffcc00" + randoms ) + "|r  Random heros" ) )

    call DisplayTimedTextToPlayer( p, 0, 0, 10, ( ( PlayerInfo_Msg(heros) + "|cffffcc00" + heros ) + "|r  Total heros" ) )

    call DisplayTimedTextToPlayer( p, 0, 0, 10, ( ( PlayerInfo_Msg(units) + "|cffffcc00" + units ) + "|r  Unit Kills" ) )

    call DisplayTimedTextToPlayer( p, 0, 0, 10, ( ( PlayerInfo_Msg(gold) + "|cffffcc00" + gold ) + "|r  Gold collected" ) )

    call DisplayTimedTextToPlayer( p, 0, 0, 10, ( ( PlayerInfo_Msg(deaths) + "|cffffcc00" + deaths ) + "|r  Deaths  and" ) )

    call DisplayTimedTextToPlayer( p, 0, 0, 10, ( ( PlayerInfo_Msg(kills) + "|cffffcc00" + kills ) + "|r  Hero Kills
	" ) )

    call TriggerSleepAction(1.0)
    set g=CreateGroup()
    set b=Condition(function PlayerInfoBool)
    call GroupEnumUnitsOfPlayer(g,Player(i-1),b)
    if FirstOfGroup(g)!=null then
        call DisplayTimedTextToPlayer( p, 0, 0, 10, ( "  " + udg_playerColor[i] + " heros controlled are |r
		" ) )
        loop
            set u=FirstOfGroup(g)
            exitwhen u==null
            call DisplayTimedTextToPlayer( GetTriggerPlayer(), 0, 0, 10, "            " + GetUnitName(u) )
            call GroupRemoveUnit(g,u)
        endloop
    endif
    call DestroyGroup(g)
    call DestroyBoolExpr(b)
        
    set f=null
    set g=null
    set u=null
    set b=null
    set randoms=null
    set heros=null
    set kills=null
    set deaths=null
    set units=null
    set gold=null
endfunction

//===========================================================================
function InitTrig_Player_Info takes nothing returns nothing
local integer i=0
    set gg_trg_Player_Info = CreateTrigger(  )
    loop
        exitwhen i>8
        call TriggerRegisterPlayerChatEvent( gg_trg_Player_Info, Player(i), "-info", false )
        set i=i+1
    endloop
    call TriggerAddAction( gg_trg_Player_Info, function Trig_Player_Info_Actions )
endfunction