summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaweł Redman <pawel.redman@gmail.com>2017-04-13 11:30:00 +0000
committer/dev/humancontroller <devhc@example.com>2017-04-15 17:24:22 +0200
commit4458f4b4ab011ddc47d26f099a53360552c88a66 (patch)
treed5b5137511eeaf91eea7bb53041db5f921585746
parenta8c4d597689cb8cd8c88290254ef0a5bb7757d24 (diff)
Implement !give.
-rw-r--r--src/game/g_admin.c100
-rw-r--r--src/game/g_admin.h2
2 files changed, 102 insertions, 0 deletions
diff --git a/src/game/g_admin.c b/src/game/g_admin.c
index 9d5d90e..6869920 100644
--- a/src/game/g_admin.c
+++ b/src/game/g_admin.c
@@ -153,6 +153,11 @@ g_admin_cmd_t g_admin_cmds[ ] =
"list all flags understood by this server",
""
},
+
+ {"give", G_admin_give, "give",
+ "give funds to a player",
+ "[^3name|slot#^7] [^3amount^7]"
+ },
{"help", G_admin_help, "help",
"display commands available to you or help on a specific command",
@@ -9858,3 +9863,98 @@ qboolean G_admin_scrim(gentity_t *ent, int skiparg )
return qtrue;
}
+static qboolean is_numeric(const char *str)
+{
+ const char *p;
+
+ if (!*str)
+ return qfalse;
+
+ for (p = str; *p; p++)
+ if (*p < '0' || *p > '9')
+ return qfalse;
+
+ return qtrue;
+}
+
+qboolean G_admin_give(gentity_t *ent, int skiparg)
+{
+ char arg_name_raw[MAX_NAME_LENGTH];
+ char arg_name[MAX_NAME_LENGTH];
+ char arg_amount[30];
+ int target_id, amount;
+ gentity_t *target;
+ const char *currency;
+
+ if (G_SayArgc() < 3 + skiparg) {
+ ADMP("^3!give: ^7usage: !give [player] [amount]\n");
+ return qfalse;
+ }
+
+ G_SayArgv(1 + skiparg, arg_name_raw, sizeof(arg_name_raw));
+ G_SanitiseString(arg_name_raw, arg_name, sizeof(arg_name));
+
+ if (is_numeric(arg_name)) {
+ target_id = atoi(arg_name);
+
+ if (target_id < 0 || target_id >= MAX_CLIENTS) {
+ ADMP(va("^3!give: ^7invalid client number\n"));
+ return qfalse;
+ }
+ } else {
+ int pids[ MAX_CLIENTS ];
+
+ if (G_ClientNumbersFromString(arg_name, pids) != 1) {
+ char error[MAX_STRING_CHARS];
+
+ G_MatchOnePlayer(pids, error, sizeof(error));
+ ADMP(va("^3!give: ^7%s\n", error));
+ return qfalse;
+ }
+
+ target_id = pids[0];
+ }
+
+
+ target = g_entities + target_id;
+
+ if (!target->client ||
+ target->client->pers.connected != CON_CONNECTED) {
+ invalid_target:
+ ADMP("^3!give: ^7invalid target\n");
+ return qfalse;
+ }
+
+ G_SayArgv(2 + skiparg, arg_amount, sizeof(arg_amount));
+ amount = atoi(arg_amount);
+
+ switch (target->client->pers.teamSelection) {
+ case PTE_ALIENS:
+ if (amount < -9 || amount > 9) {
+ too_big:
+ ADMP("^3!give: ^7amount is too big\n");
+ return qfalse;
+ }
+
+ currency = "evo";
+ break;
+
+ case PTE_HUMANS:
+ if (amount < -2000 || amount > 2000)
+ goto too_big;
+
+ currency = "credit";
+ break;
+
+ default:
+ goto invalid_target;
+ }
+
+ G_AddCreditToClient(target->client, amount, qtrue);
+ AP(va("print \"^3!give: ^7%s^7 was given %i %s%s by ^7%s^7\n\"",
+ target->client->pers.netname, amount, currency,
+ (abs(amount) != 1 ? "s" : ""),
+ ent ? G_admin_adminPrintName(ent) : "console"));
+
+ return qtrue;
+}
diff --git a/src/game/g_admin.h b/src/game/g_admin.h
index d211243..7292fb4 100644
--- a/src/game/g_admin.h
+++ b/src/game/g_admin.h
@@ -347,6 +347,8 @@ qboolean G_admin_rnote( gentity_t *ent, int skiparg );
qboolean G_admin_scrim( gentity_t *ent, int skiparg );
+qboolean G_admin_give( gentity_t *ent, int skiparg );
+
void G_admin_print( gentity_t *ent, char *m );
void G_admin_buffer_print( gentity_t *ent, char *m );
void G_admin_buffer_begin( void );