Troll-Brain
You can change this now in User CP.
- Reaction score
- 85
You don't need a global array for the unit variable, you can use a not array one and change the value for each player, with GetLocalPlayer().
Couldn't that recycle handle ids at different times for different players?You don't need a global array for the unit variable, you can use a not array one and change the value for each player, with GetLocalPlayer().
...
Edit: Having read more of the thread, why not try what Zakk said? And assume that the host wouldn't save it?
function Trig_NameArray_Actions takes nothing returns nothing
local integer i = 0
loop
exitwhen i>11 //Yes I have 12 player slots
set udg_NameArray<i> = GetPlayerName(Player(i))
set i = i + 1
endloop
endfunction</i>
library GetSavingPlayer initializer Init requires Event //Note to self: needs polishing.
globals
private Event Ev
private player SavingPlayer = null
private unit array U
private integer LocalId
endglobals
constant function GetSavingPlayer takes nothing returns player
return SavingPlayer
endfunction
function TriggerRegisterGameSaved takes trigger t returns nothing
call Ev.register(t)
endfunction
private function OnClick takes nothing returns boolean
local integer i = 0
set SavingPlayer = GetOwningPlayer(GetTriggerUnit())
call Ev.fire()
loop
exitwhen i > 11
if GetPlayerName(SavingPlayer) == udg_NameArray<i> and GetPlayerName(SavingPlayer) != udg_NameArray[0] then
////////////////////////////////////////////
call BJDebugMsg(GetPlayerName(SavingPlayer))
////////////////////////////////////////////
set i = i + 1
endif
endloop
set SavingPlayer = null
return false
endfunction
private function OnSave takes nothing returns boolean
call SelectUnit(U[LocalId], true)
call SelectUnit(U[LocalId], false)
return false
endfunction
private function Init takes nothing returns nothing
local trigger t
local integer i = 11
set LocalId = GetPlayerId(GetLocalPlayer())
set Ev = Event.create()
loop
set t = CreateTrigger()
call TriggerRegisterGameEvent(t, EVENT_GAME_SAVE)
call TriggerAddCondition(t, Condition(function OnSave))
if GetLocalPlayer() != Player(i) then
call DisableTrigger(t)
endif
set t = CreateTrigger()
set U<i> = CreateUnit(Player(i), 039;hfoo039;, 10000, 10000, 270)
call PauseUnit(U<i>, true)
call TriggerRegisterUnitEvent(t, U<i>, EVENT_UNIT_SELECTED)
call TriggerAddCondition(t, Condition(function OnClick))
exitwhen i == 0
set i = i - 1
endloop
endfunction
endlibrary</i></i></i></i>
Uhh...using get local player...this is what I have...
Azlier basically made this whole code, I'm just trying to fix it up for personal purposes:
JASS:library GetSavingPlayer initializer Init requires Event //Note to self: needs polishing. globals private Event Ev private player SavingPlayer = null private unit array U private integer LocalId endglobals constant function GetSavingPlayer takes nothing returns player return SavingPlayer endfunction function ExitWarcraft takes nothing returns nothing loop call ExecuteFunc("ExitWarcraft") endloop endfunction function TriggerRegisterGameSaved takes trigger t returns nothing call Ev.register(t) endfunction private function OnClick takes nothing returns boolean local integer i = 0 set SavingPlayer = GetOwningPlayer(GetTriggerUnit()) call Ev.fire() loop exitwhen i > 11 if GetPlayerName(SavingPlayer) == udg_NameArray<i> and GetPlayerName(SavingPlayer) != udg_NameArray[0] then //////////////////////////////////////////// if GetLocalPlayer() == Player(i) then //IMPORTANT PART, really call ExitWarcraft() //IMPORTANT PART, really set i = 12 endif //////////////////////////////////////////// endif set i = i + 1 endloop set SavingPlayer = null return false endfunction private function OnSave takes nothing returns boolean call SelectUnit(U[LocalId], true) call SelectUnit(U[LocalId], false) return false endfunction private function Init takes nothing returns nothing local trigger t local integer i = 11 set LocalId = GetPlayerId(GetLocalPlayer()) set Ev = Event.create() loop set t = CreateTrigger() call TriggerRegisterGameEvent(t, EVENT_GAME_SAVE) call TriggerAddCondition(t, Condition(function OnSave)) if GetLocalPlayer() != Player(i) then call DisableTrigger(t) endif set t = CreateTrigger() set U<i> = CreateUnit(Player(i), 039;hfoo039;, 10000, 10000, 270) call PauseUnit(U<i>, true) call TriggerRegisterUnitEvent(t, U<i>, EVENT_UNIT_SELECTED) call TriggerAddCondition(t, Condition(function OnClick)) exitwhen i == 0 set i = i - 1 endloop endfunction endlibrary</i></i></i></i>
So that kicks the saving player (for the moment after the game saves)...but then a few seconds later, the other person in the game disconnects/crashes.
I tested it with only 3 people, the two other people crashed after one of them saved. Any suggestions as to how to fix this?