Last active
October 12, 2016 17:45
-
-
Save shavitush/3334205e06a2e57e6090b2dd307d277c to your computer and use it in GitHub Desktop.
AMXX Jailbreak random number vote
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// UNTESTED!!!! | |
// Licensed under GNU GPL v3 | |
// License copy: https://gist.github.com/ebe17e6a328bfe354ac30016a807cc16 | |
#include <amxmodx> | |
#include <cstrike> | |
#pragma semicolon 1 | |
#pragma ctrlchar '\' | |
#define RANDOMNUMBER_FLAG ADMIN_VOTE | |
#define PREFIX "\4[AMXX]\1" | |
#define PLUGIN_VERSION "1.0" | |
// cache | |
new gI_RandomNumber = -1; | |
new Array:gA_Players = (Array:INVALID_HANDLE); | |
// gCV - global ConVar, sourcepawn habit | |
new gCV_Enabled = INVALID_HANDLE; | |
new gCV_MinimumRange = INVALID_HANDLE; | |
new gCV_MaximumRange = INVALID_HANDLE; | |
new gCV_TimeToGuess = INVALID_HANDLE; | |
new gCV_RestartTime = INVALID_HANDLE; | |
new gCV_RestartRound = INVALID_HANDLE; | |
// yes, i know INVALID_HANDLE is actually -1 but that's a more proper use | |
public plugin_init() | |
{ | |
register_plugin("Jailbreak Random Number", PLUGIN_VERSION, "github.com/shavitush"); | |
// register_clcmd instead of concmd so i won't block 'say' for non-admins | |
register_clcmd("say", "Command_Say"); | |
register_clcmd("say_team", "Command_Say"); | |
// settings | |
gCV_Enabled = register_cvar("jb_randomnumber_enabled", "1", FCVAR_SERVER); | |
gCV_MinimumRange = register_cvar("jb_randomnumber_minimum", "1", FCVAR_SERVER); | |
gCV_MaximumRange = register_cvar("jb_randomnumber_maximum", "350", FCVAR_SERVER); | |
gCV_TimeToGuess = register_cvar("jb_randomnumber_time", "30.0", FCVAR_SERVER); | |
gCV_RestartTime = register_cvar("jb_randomnumber_rrtime", "10", FCVAR_SERVER); | |
// cvars | |
gCV_RestartRound = get_cvar_pointer("sv_restartround"); | |
// cache | |
gA_Players = ArrayCreate(2); | |
// tracking cvar, for gametracker or whatever | |
register_cvar("jb_randomnumber_version", PLUGIN_VERSION, FCVAR_SERVER); | |
} | |
public Command_Say(client) | |
{ | |
if(get_pcvar_num(gCV_Enabled) == 0) // AMX Mod X Compiler 1.8.3-manual plugin.sma(37) : error 017: undefined symbol "get_pcvar_bool" WHAT THE FUCJJKKKKL;PJIASDUI978HOJGLMK,HYO7NU8IJBLKM, | |
{ | |
return PLUGIN_CONTINUE; | |
} | |
new iArgs = read_argc(); | |
new sArg[16]; | |
read_argv(1, sArg, 15); | |
if(gI_RandomNumber == -1) | |
{ | |
if(((sArg[0] == '!' || sArg[0] == '/') && equal(sArg[1], "rnvote"))) | |
{ | |
if(get_user_flags(client) & RANDOMNUMBER_FLAG == 0) | |
{ | |
return PLUGIN_CONTINUE; | |
} | |
else | |
{ | |
client_print_color(0, client, "%s A \3\"Random Number\"\1 game has started!", PREFIX); | |
client_print_color(0, client, "%s To participate, write a number inbetween \4%d and %d\1. After the time is up (\3%.01f sec\1), the player who wrote the closest number to the one we generated will win and become a guard.", PREFIX, get_pcvar_num(gCV_MinimumRange), get_pcvar_num(gCV_MaximumRange), get_pcvar_float(gCV_TimeToGuess)); | |
ArrayClear(gA_Players); | |
gI_RandomNumber = random_num(get_pcvar_num(gCV_MinimumRange), get_pcvar_num(gCV_MaximumRange)); | |
set_task(get_pcvar_float(gCV_TimeToGuess), "Timer_FinishVote", 32767); | |
} | |
} | |
} | |
// random number is running | |
else | |
{ | |
if(cs_get_user_team(client) != CS_TEAM_T) | |
{ | |
client_print_color(client, client, "%s You may only participate as a prisoner.", PREFIX); | |
return PLUGIN_HANDLED; | |
} | |
new iUserID = get_user_userid(client); | |
if(ArrayFindValue(gA_Players, iUserID) != -1) | |
{ | |
client_print_color(client, client, "%s You may only submit one number.", PREFIX); | |
return PLUGIN_HANDLED; | |
} | |
new iNumber = str_to_num(sArg); | |
if(iArgs == 0 || iNumber < get_pcvar_num(gCV_MinimumRange) || iNumber > get_pcvar_num(gCV_MaximumRange)) | |
{ | |
client_print_color(client, client, "%s You may want to submit a number of between \4%d to %d\1.", PREFIX, get_pcvar_num(gCV_MinimumRange), get_pcvar_num(gCV_MaximumRange)); | |
} | |
else | |
{ | |
for(new i = 0; i < ArraySize(gA_Players); i++) | |
{ | |
if(ArrayGetCell(gA_Players, i, 1) == iNumber) | |
{ | |
client_print_color(client, client, "%s The number you've submitted (\4%d\1) is already taken.", PREFIX, iNumber); | |
return PLUGIN_HANDLED; | |
} | |
} | |
new aInput[2]; | |
aInput[0] = iUserID; | |
aInput[1] = iNumber; | |
ArrayPushArray(gA_Players, aInput, 2); | |
client_print_color(client, client, "%s You have submitted the number \4%d\1.", PREFIX, iNumber); | |
} | |
return PLUGIN_HANDLED; | |
} | |
return PLUGIN_CONTINUE; | |
} | |
public Timer_FinishVote() | |
{ | |
new iNumber = 0; | |
new iWinner = -1; | |
// could just loop through the whole array but meh | |
for(new i = 1; i <= MaxClients; i++) | |
{ | |
if(!is_user_connected(i)) | |
{ | |
continue; | |
} | |
new iArrayCell = ArrayFindValue(gA_Players, get_user_userid(i)); | |
if(iArrayCell != -1) | |
{ | |
new iEntry = ArrayGetCell(gA_Players, iArrayCell, 1); | |
if(abs(gI_RandomNumber - iEntry) < abs(gI_RandomNumber - iNumber)) | |
{ | |
iNumber = iEntry; | |
iWinner = i; | |
} | |
} | |
} | |
if(iWinner != -1) | |
{ | |
cs_set_user_team(iWinner, CS_TEAM_CT, CS_CT_GSG9); | |
new sName[MAX_NAME_LENGTH]; | |
get_user_name(iWinner, sName, MAX_NAME_LENGTH); | |
client_print_color(0, iWinner, "%s The winner is \3%s\1 with the number \3%d\1. The random number was \4%d\1.", PREFIX, sName, iNumber, gI_RandomNumber); | |
client_print_color(0, iWinner, "%s Round will restart in \4%d seconds\1.", PREFIX, get_pcvar_num(gCV_RestartTime)); | |
set_pcvar_num(gCV_RestartRound, get_pcvar_num(gCV_RestartTime)); | |
} | |
else | |
{ | |
client_print_color(0, print_team_red, "%s A winner \3COULD NOT\1 be found within \4%.01 seconds\1, sorry.", PREFIX, get_pcvar_float(gCV_TimeToGuess)); | |
} | |
ArrayClear(gA_Players); | |
gI_RandomNumber = -1; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment