103 lines
3.0 KiB
Plaintext
103 lines
3.0 KiB
Plaintext
/////////////////////////////////////////////////////////////////////////////////
|
|
// Real Time Strategy - NWN - Voting Process
|
|
//===============================================================================
|
|
// By Deva Bryson Winblood. 03/09/2003
|
|
/////////////////////////////////////////////////////////////////////////////////
|
|
|
|
void fnClearVotes()
|
|
{ // set all votes to unvoted 1=YES, 2=NO
|
|
object oPC=GetFirstPC();
|
|
while(oPC!=OBJECT_INVALID)
|
|
{
|
|
SetLocalInt(oPC,"nRTSVote",0);
|
|
oPC=GetNextPC();
|
|
}
|
|
} // fnClearVotes()
|
|
|
|
void fnVotePasses(int nVoteType)
|
|
{ // the vote passed
|
|
object oVoter=GetLocalObject(GetModule(),"oRTSVoter");
|
|
string sID=GetLocalString(oVoter,"sTeamID");
|
|
object oWP=GetWaypointByTag(sID+"_START");
|
|
switch(nVoteType)
|
|
{ //vote switch
|
|
case 1: { // forced end game
|
|
DelayCommand(2.0,ExecuteScript("rts_forced_end",OBJECT_SELF));
|
|
break;
|
|
} // forced end game
|
|
case 2: { // allow stuck player to return home
|
|
AssignCommand(oVoter,ClearAllActions(TRUE));
|
|
AssignCommand(oVoter,JumpToObject(oWP));
|
|
break;
|
|
} // allow stuck player to return home
|
|
case 3: { // shut down all non-essential processes
|
|
SetLocalInt(GetModule(),"nDisableNonEssential",TRUE);
|
|
break;
|
|
} // shut down all non-essential processes
|
|
case 4: { // deep statistical dump
|
|
ExecuteScript("deep_debug_dump",GetModule());
|
|
break;
|
|
} // deep statistical dump
|
|
case 5: { // clean up common areas
|
|
ExecuteScript("cleanup_common",GetModule());
|
|
break;
|
|
} // clean up common areas
|
|
case 6: { // delete my units outside my lair
|
|
ExecuteScript("delete_my_units",GetLocalObject(GetModule(),"oRTSVoteInitiate"));
|
|
break;
|
|
} // delete my units outside my lair
|
|
} //vote switch
|
|
} // the vote passed
|
|
|
|
|
|
|
|
void fnVotingProcess()
|
|
{ // fnVotingProcess
|
|
int nYea=0;
|
|
int nNay=0;
|
|
int nNoVote=0;
|
|
int nVote;
|
|
object oMod=GetModule();
|
|
object oPC=GetFirstPC();
|
|
while(oPC!=OBJECT_INVALID&&nNay==0)
|
|
{ // still PCs and no NAY vote
|
|
nVote=GetLocalInt(oPC,"nRTSVote");
|
|
if (nVote==1) nYea++;
|
|
else if (nVote==2) nNay++;
|
|
else
|
|
{ // has not voted
|
|
nNoVote++;
|
|
if (!IsInConversation(oPC))
|
|
{ // not in conversation
|
|
AssignCommand(oPC,ActionStartConversation(oPC,"rts_vote",TRUE));
|
|
} // not in conversation
|
|
} // has not voted
|
|
oPC=GetNextPC();
|
|
} // still PCs and no NAY vote
|
|
if (nNay==0&&nNoVote==0)
|
|
{ // motion passes
|
|
fnVotePasses(GetLocalInt(oMod,"nRTSVoteType"));
|
|
SetLocalInt(oMod,"nRTSVoteStart",FALSE);
|
|
} // motion passes
|
|
else if (nNay==0&&nNoVote!=0)
|
|
{ // still players who need to vote
|
|
DelayCommand(5.0,fnVotingProcess()); // recursion later time
|
|
} // still players who need to vote
|
|
else
|
|
{
|
|
SendMessageToPC(OBJECT_SELF,"Your vote did not pass.");
|
|
SetLocalInt(oMod,"nRTSVoteStart",FALSE);
|
|
}
|
|
} // fnVotingProcess
|
|
|
|
|
|
|
|
void main()
|
|
{
|
|
object oPC=OBJECT_SELF;
|
|
AssignCommand(oPC,ClearAllActions());
|
|
fnClearVotes();
|
|
SetLocalInt(oPC,"nRTSVote",1);
|
|
fnVotingProcess();
|
|
}
|