// Plugin by [IKR] Soul Man (http://ikr.homeip.net). // // Adds two commands: // admin_vote_slay <target>: Starts a vote to slay target. // admin_vote_stack <target>: Starts a vote to stack target. // // Only users who can use the admin_vote_kick <target>, can use these new commands. #include <core> #include <console> #include <string> #include <admin> #include <adminlib> // These may be edited: #define SLAY_RATIO 80 /* a number between 0 and 100 */ #define STACK_RATIO 80 /* a number between 0 and 100 */ new STRING_VERSION[MAX_DATA_LENGTH] = "2.50.11"; public admin_vote_slay(HLCommand,HLData,HLUserName,UserIndex) { new Command[MAX_COMMAND_LENGTH]; new Target[MAX_DATA_LENGTH]; new TargetName[MAX_NAME_LENGTH]; new Text[MAX_TEXT_LENGTH]; new User[MAX_NAME_LENGTH]; convert_string(HLCommand,Command,MAX_COMMAND_LENGTH); convert_string(HLData,Target,MAX_DATA_LENGTH); convert_string(HLUserName,User,MAX_NAME_LENGTH); get_username(Target, TargetName, MAX_NAME_LENGTH); if (access(ACCESS_VOTE_KICK,"") != 1) { selfmessage("You don't have access to this command"); return PLUGIN_HANDLED; } if (vote_allowed() != 1) { selfmessage("Vote not allowed at this time."); return PLUGIN_HANDLED; } if(check_immunity(Target)==1) { snprintf(Text, MAX_TEXT_LENGTH, "Laf. You can't vote slay '%s', you silly bear.", Target); say(Text); return PLUGIN_HANDLED; } if ( check_user(Target) > 0 ) { say_command(User,Command,Target); snprintf(Text, MAX_TEXT_LENGTH, "Kill %s?", TargetName); if(getvar("sv_lan")==1) { vote(Text, "Yes", "No", "HandleSlayVote", TargetName); } else { new strAuthID[MAX_AUTHID_LENGTH]; get_userAuthID(TargetName, strAuthID); vote(Text, "Yes", "No", "HandleSlayVote", strAuthID); } } else { selfmessage("Unrecognized user name "); selfmessage(Target); } return PLUGIN_HANDLED; } public HandleSlayVote(WinningOption,HLData,VoteCount,UserCount) { new strNumber[MAX_NUMBER_LENGTH]; new TargetDead; new TargetIndex; new TargetName[MAX_NAME_LENGTH]; new TargetSessionid; new TargetTeam; new TargetWonid; new Text[MAX_TEXT_LENGTH]; if(getvar("sv_lan")==1) { convert_string(HLData, TargetName, MAX_NUMBER_LENGTH); } else { new strAuthID[MAX_NUMBER_LENGTH]; convert_string(HLData, strAuthID, MAX_AUTHID_LENGTH); get_username(strAuthID, TargetName, MAX_NAME_LENGTH); } if ( (WinningOption == 1 && VoteCount >= (SLAY_RATIO/100)*UserCount) || (WinningOption == 2 && VoteCount <= (SLAY_RATIO/100)*UserCount) ) { if ( check_user(TargetName) > 0 ) { get_userindex(TargetName, TargetIndex); if ( playerinfo(TargetIndex, TargetName, MAX_NAME_LENGTH, TargetSessionid, TargetWonid, TargetTeam, TargetDead) == 1 ) { if (TargetDead == 1) { snprintf(Text, MAX_TEXT_LENGTH, "%s killed due to a vote.", TargetName); say(Text); message(TargetName, "You have been killed due to a vote."); slay(TargetName); } else { snprintf(Text, MAX_TEXT_LENGTH, "%s would be killed due to a vote if he were alive.", TargetName); say(Text); } } } } else { numtostr((SLAY_RATIO/100)*UserCount, strNumber); snprintf(Text, MAX_TEXT_LENGTH, "Not enough votes to kill %s (needed %s).", TargetName, strNumber); say(Text); } } public admin_vote_stack(HLCommand,HLData,HLUserName,UserIndex) { new Command[MAX_COMMAND_LENGTH]; new Target[MAX_DATA_LENGTH]; new TargetName[MAX_NAME_LENGTH]; new Text[MAX_TEXT_LENGTH]; new User[MAX_NAME_LENGTH]; convert_string(HLCommand,Command,MAX_COMMAND_LENGTH); convert_string(HLUserName,User,MAX_NAME_LENGTH); convert_string(HLData,Target,MAX_DATA_LENGTH); get_username(Target, TargetName, MAX_NAME_LENGTH); if (access(ACCESS_VOTE_KICK,"") != 1) { selfmessage("You don't have access to this command"); return PLUGIN_HANDLED; } if (vote_allowed() != 1) { selfmessage("Vote not allowed at this time."); return PLUGIN_HANDLED; } if(check_immunity(Target)==1) { snprintf(Text, MAX_TEXT_LENGTH, "Laf. You can't vote stack '%s', you silly bear.", Target); say(Text); return PLUGIN_HANDLED; } if ( check_user(Target) > 0 ) { snprintf(Text, MAX_TEXT_LENGTH, "Nail %s to the ground?", TargetName); if(getvar("sv_lan")==1) { vote(Text, "Yes", "No", "HandleStackVote", TargetName); } else { new strAuthID[MAX_AUTHID_LENGTH]; get_userAuthID(TargetName, strAuthID); vote(Text, "Yes", "No", "HandleStackVote", strAuthID); } } else { selfmessage("Unrecognized user name "); selfmessage(Target); } return PLUGIN_HANDLED; } public HandleStackVote(WinningOption,HLData,VoteCount,UserCount) { new strNumber[MAX_NUMBER_LENGTH]; new TargetDead; new TargetIndex; new TargetName[MAX_NAME_LENGTH]; new TargetSessionid; new TargetTeam; new TargetWonid; new Text[MAX_TEXT_LENGTH]; new X; new Y; new Z; if(getvar("sv_lan")==1) { convert_string(HLData, TargetName, MAX_NUMBER_LENGTH); } else { new strAuthID[MAX_AUTHID_LENGTH]; convert_string(HLData, strAuthID, MAX_AUTHID_LENGTH); get_username(strAuthID, TargetName, MAX_NAME_LENGTH); } if ( (WinningOption == 1 && VoteCount >= (SLAY_RATIO/100)*UserCount) || (WinningOption == 2 && VoteCount <= (SLAY_RATIO/100)*UserCount) ) { if ( check_user(TargetName) > 0 ) { get_userindex(TargetName, TargetIndex); if ( playerinfo(TargetIndex, TargetName, MAX_NAME_LENGTH, TargetSessionid, TargetWonid, TargetTeam, TargetDead) == 1 ) { if (TargetDead == 1) { if (get_userorigin(TargetName, X,Y,Z) != 0) { if (teleport(TargetName, X,Y,Z - 20) != 0) { centersay("Free kill !", 10, 250,250,250); snprintf(Text, MAX_TEXT_LENGTH, "%s is stuck due to a vote.", TargetName); say(Text); message(TargetName, "You are stuck due to a vote"); } else { snprintf(Text, MAX_TEXT_LENGTH, "Stack vote failed. %s is lucky.", TargetName); say(Text); } } else { snprintf(Text, MAX_TEXT_LENGTH, "Stack vote failed. %s is lucky.", TargetName); say(Text); } } else { snprintf(Text, MAX_TEXT_LENGTH, "%s would be stuck due to a vote if he were alive.", TargetName); } } } } else { numtostr((SLAY_RATIO/100)*UserCount, strNumber); snprintf(Text, MAX_TEXT_LENGTH, "Not enough votes to stack %s (needed %s).", TargetName, strNumber); say(Text); } } public plugin_init() { plugin_registerinfo("Vote Plugin by [IKR] Soul Man", "Long live democracy!", STRING_VERSION); plugin_registercmd("admin_vote_slay", "admin_vote_slay", ACCESS_VOTE_KICK, "admin_vote_slay <target>: Starts a vote to slay target."); plugin_registercmd("admin_vote_stack", "admin_vote_stack", ACCESS_VOTE_KICK, "admin_vote_stack <target>: Starts a vote to stack target."); return PLUGIN_CONTINUE; }