HoS_PRC8/_mod/_module/nss/rts_voting_proc.nss
Jaysyn904 04165202c0 Initial upload
Initial upload
2024-11-25 19:36:07 -05:00

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();
}