Skip to content

Instantly share code, notes, and snippets.

@shavitush
Last active October 12, 2016 17:45
Show Gist options
  • Save shavitush/3334205e06a2e57e6090b2dd307d277c to your computer and use it in GitHub Desktop.
Save shavitush/3334205e06a2e57e6090b2dd307d277c to your computer and use it in GitHub Desktop.
AMXX Jailbreak random number vote
// 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