From: James O'Neill Date: Sun, 21 Apr 2024 14:44:09 +0000 (+0900) Subject: Merge PR 'Add support for a "give a" command to give player armour' X-Git-Url: https://git.rm.cloudns.org/?a=commitdiff_plain;h=f2b5d49e7bb788d0f4ed01f00ead2e6af2e93d1c;p=xonotic%2Fdarkplaces.git Merge PR 'Add support for a "give a" command to give player armour' Allows the command `give a #` to give the player armour, just like the other `give` commands. Based on the example code provided by Baker7. Fixes #132 . See https://github.com/DarkPlacesEngine/darkplaces/pull/136 Signed-off-by: bones_was_here --- diff --git a/sv_ccmds.c b/sv_ccmds.c index 138b2c09..aa6790e5 100644 --- a/sv_ccmds.c +++ b/sv_ccmds.c @@ -216,6 +216,7 @@ static void SV_Give_f(cmd_state_t *cmd) prvm_prog_t *prog = SVVM_prog; const char *t; int v; + int player_items; t = Cmd_Argv(cmd, 1); v = atoi (Cmd_Argv(cmd, 2)); @@ -325,6 +326,49 @@ static void SV_Give_f(cmd_state_t *cmd) PRVM_serveredictfloat(host_client->edict, ammo_cells) = v; } break; + case 'a': + // + // Set the player armour value to the number specified and then adjust the armour type/colour based on the value + // + player_items = PRVM_serveredictfloat(host_client->edict, items); + PRVM_serveredictfloat(host_client->edict, armorvalue) = v; + + // Remove whichever armour item the player currently has + if (gamemode == GAME_ROGUE) + player_items &= ~(RIT_ARMOR1 | RIT_ARMOR2 | RIT_ARMOR3); + else + player_items &= ~(IT_ARMOR1 | IT_ARMOR2 | IT_ARMOR3); + + if (v > 150) + { + // Give red armour + PRVM_serveredictfloat(host_client->edict, armortype) = 0.8; + if (gamemode == GAME_ROGUE) + player_items |= RIT_ARMOR3; + else + player_items |= IT_ARMOR3; + } + else if (v > 100) + { + // Give yellow armour + PRVM_serveredictfloat(host_client->edict, armortype) = 0.6; + if (gamemode == GAME_ROGUE) + player_items |= RIT_ARMOR2; + else + player_items |= IT_ARMOR2; + } + else if (v >= 0) + { + // Give green armour + PRVM_serveredictfloat(host_client->edict, armortype) = 0.3; + if (gamemode == GAME_ROGUE) + player_items |= RIT_ARMOR1; + else + player_items |= IT_ARMOR1; + } + + PRVM_serveredictfloat(host_client->edict, items) = player_items; + break; } }