| 07-27-2006, 11:10 PM | #1 |
I made this conditional kick trigger. Everything is working just fine when I save, except this one line. JASS:call TriggerAddAction(T,function KickVote(pk,j)) JASS:function KickVote takes integer playerIndex, integer voteIndex returns nothing local real percent if udg_kickVoters[GetPlayerId(GetTriggerPlayer())]==false then set udg_kickVoters[GetPlayerId(GetTriggerPlayer())]=true set udg_kickVote=udg_kickVote+1 set percent = I2R(udg_kickVote/voteIndex)*100 call DisplayTextToForce(GetPlayersAll(),I2S(R2I(percent)) + "% yes votes so far.") elseif GetTriggerPlayer()==Player(udg_Host) then call DisplayTextToPlayer(GetTriggerPlayer(),0,0,"|cffff0000Your vote is automatically yes.|r") elseif GetTriggerPlayer()==Player(playerIndex) then call DisplayTextToPlayer(GetTriggerPlayer(),0,0,"|cffff0000You are unable to vote.|r") else call DisplayTextToPlayer(GetTriggerPlayer(),0,0,"|cffff0000You've already voted.|r") endif endfunction function Kick_Actions takes nothing returns nothing local trigger T local player p=GetTriggerPlayer() local integer i=0 local integer j=0 local integer pk=GetPlayerIndexFromColorString(SubString(GetEventPlayerChatString(), 6, 22)) local timer t local timerdialog td local boolean b if pk==0 or GetPlayerSlotState(Player(pk-1))!=PLAYER_SLOT_STATE_PLAYING or GetPlayerId(p)==pk-1 or p!=Player(udg_Host) then if p!=Player(udg_Host) then call DisplayTextToPlayer(p,0,0,"|cffff0000Only " + udg_playerColor[udg_Host] + GetPlayerName(Player(udg_Host)) + " |cffff0000has authority to initiate a vote.|r") else call DisplayTextToPlayer(p,0,0,"|cffff0000Error handling request!|r") endif set p=null return endif set udg_kickVoters[9]=true // ****vote in progress**** set pk=pk-1 set T=CreateTrigger() set b=false loop exitwhen i>8 call TriggerRegisterPlayerChatEvent( T, Player(i), "-yes", true ) if Player(i)!=p and i!=pk and GetPlayerSlotState(Player(i))==PLAYER_SLOT_STATE_PLAYING then set udg_kickVoters[i]=false set j=j+1 if IsPlayerAlly(Player(i),Player(pk)) then set b=true endif else set udg_kickVoters[i]=true endif set i=i+1 endloop if b==false then call DisplayTextToPlayer(p,0,0,"|cffff0000Unable to kick " + udg_playerColor[pk+1] + GetPlayerName(Player(pk)) + " |cffff0000unless he/she has an ally.|r") set p=null call DestroyTrigger(T) set T=null set udg_kickVoters[9]=false return endif // call TriggerAddAction(T,function KickVote(pk,j)) set udg_kickVote=0 set t=CreateTimer() set td=CreateTimerDialog(t) call TimerDialogSetTitle(td,"Kick Timer") call TimerDialogDisplay(td, true) call TimerStart( t, 15.00, false, null ) call DisplayTimedTextToForce(GetPlayersAll(),15,udg_playerColor[GetPlayerId(p)+1] + GetPlayerName(p) + "|r has initiated a vote to kick " + udg_playerColor[pk+1] + GetPlayerName(Player(pk)) + "|r from the game. Type |cffffcc00-yes|r to Kick. Must be 100% vote yes.") call PolledWait(15) if udg_kickVote==j then call RemovePlayer( Player(pk), PLAYER_GAME_RESULT_DEFEAT ) else call DisplayTextToForce(GetPlayersAll(),"Kick Failed") endif set i=0 loop set udg_kickVoters[i]=false set i=i+1 exitwhen i>9 endloop call DestroyTrigger(T) call PauseTimer(t) call DestroyTimer(t) call DestroyTimerDialog(td) set T=null set p=null set t=null set td=null endfunction //=========================================================================== function Kick_Conditions takes nothing returns boolean return udg_kickVoters[9]==false or udg_kickVoters[9]==null endfunction function InitTrig_Kick takes nothing returns nothing local integer i=0 set gg_trg_Kick = CreateTrigger( ) loop exitwhen i>8 call TriggerRegisterPlayerChatEvent( gg_trg_Kick, Player(i), "-kick", false ) set i=i+1 endloop call TriggerAddCondition(gg_trg_Kick, Condition(function Kick_Conditions)) call TriggerAddAction( gg_trg_Kick, function Kick_Actions ) endfunction |
| 07-27-2006, 11:12 PM | #2 |
You can't have parameters to a code parameter. You need to use something like the Local Handle Vars. |
| 07-27-2006, 11:27 PM | #3 |
Yes, the only way to do it would be setting a global or storing a int. Theres no need for handle vars, as hes using ints and not handles. As Alevice said, you can only have functions that take nothing and returns nothing for code parameters. So instead make your functions like this: JASS:function KickVote takes integer playerIndex, integer voteIndex returns nothing local real percent local integer playerIndex = udg_pk local integer voteIndex = udg_j if udg_kickVoters[GetPlayerId(GetTriggerPlayer())]==false then set udg_kickVoters[GetPlayerId(GetTriggerPlayer())]=true set udg_kickVote=udg_kickVote+1 set percent = I2R(udg_kickVote/voteIndex)*100 call DisplayTextToForce(GetPlayersAll(),I2S(R2I(percent)) + "% yes votes so far.") elseif GetTriggerPlayer()==Player(udg_Host) then call DisplayTextToPlayer(GetTriggerPlayer(),0,0,"|cffff0000Your vote is automatically yes.|r") elseif GetTriggerPlayer()==Player(playerIndex) then call DisplayTextToPlayer(GetTriggerPlayer(),0,0,"|cffff0000You are unable to vote.|r") else call DisplayTextToPlayer(GetTriggerPlayer(),0,0,"|cffff0000You've already voted.|r") endif endfunction function Kick_Actions takes nothing returns nothing local trigger T local player p=GetTriggerPlayer() local integer i=0 local integer j=0 local integer pk=GetPlayerIndexFromColorString(SubString(GetEventPlayerChatString(), 6, 22)) local timer t local timerdialog td local boolean b if pk==0 or GetPlayerSlotState(Player(pk-1))!=PLAYER_SLOT_STATE_PLAYING or GetPlayerId(p)==pk-1 or p!=Player(udg_Host) then if p!=Player(udg_Host) then call DisplayTextToPlayer(p,0,0,"|cffff0000Only " + udg_playerColor[udg_Host] + GetPlayerName(Player(udg_Host)) + " |cffff0000has authority to initiate a vote.|r") else call DisplayTextToPlayer(p,0,0,"|cffff0000Error handling request!|r") endif set p=null return endif set udg_kickVoters[9]=true // ****vote in progress**** set pk=pk-1 set T=CreateTrigger() set b=false loop exitwhen i>8 call TriggerRegisterPlayerChatEvent( T, Player(i), "-yes", true ) if Player(i)!=p and i!=pk and GetPlayerSlotState(Player(i))==PLAYER_SLOT_STATE_PLAYING then set udg_kickVoters[i]=false set j=j+1 if IsPlayerAlly(Player(i),Player(pk)) then set b=true endif else set udg_kickVoters[i]=true endif set i=i+1 endloop if b==false then call DisplayTextToPlayer(p,0,0,"|cffff0000Unable to kick " + udg_playerColor[pk+1] + GetPlayerName(Player(pk)) + " |cffff0000unless he/she has an ally.|r") set p=null call DestroyTrigger(T) set T=null set udg_kickVoters[9]=false return endif set udg_pk = pk set udg_j = j call TriggerAddAction(T,function KickVote) set udg_kickVote=0 set t=CreateTimer() set td=CreateTimerDialog(t) call TimerDialogSetTitle(td,"Kick Timer") call TimerDialogDisplay(td, true) call TimerStart( t, 15.00, false, null ) call DisplayTimedTextToForce(GetPlayersAll(),15,udg_playerColor[GetPlayerId(p)+1] + GetPlayerName(p) + "|r has initiated a vote to kick " + udg_playerColor[pk+1] + GetPlayerName(Player(pk)) + "|r from the game. Type |cffffcc00-yes|r to Kick. Must be 100% vote yes.") call PolledWait(15) if udg_kickVote==j then call RemovePlayer( Player(pk), PLAYER_GAME_RESULT_DEFEAT ) else call DisplayTextToForce(GetPlayersAll(),"Kick Failed") endif set i=0 loop set udg_kickVoters[i]=false set i=i+1 exitwhen i>9 endloop call DestroyTrigger(T) call PauseTimer(t) call DestroyTimer(t) call DestroyTimerDialog(td) set T=null set p=null set t=null set td=null endfunction //=========================================================================== function Kick_Conditions takes nothing returns boolean return udg_kickVoters[9]==false or udg_kickVoters[9]==null endfunction function InitTrig_Kick takes nothing returns nothing local integer i=0 set gg_trg_Kick = CreateTrigger( ) loop exitwhen i>8 call TriggerRegisterPlayerChatEvent( gg_trg_Kick, Player(i), "-kick", false ) set i=i+1 endloop call TriggerAddCondition(gg_trg_Kick, Condition(function Kick_Conditions)) call TriggerAddAction( gg_trg_Kick, function Kick_Actions ) endfunction |
| 07-28-2006, 06:18 AM | #4 |
I just was trying to avoid using a global, but oh well. I have a way I can just use my existing array and add to it I guess. Thanks guys, just wanted to see if it was possible. |
| 07-28-2006, 08:58 AM | #5 | ||
Quote:
Quote:
He wants to attach something to a handle. Only way to do it without globals is local handle variables. |
