]> git.rm.cloudns.org Git - xonotic/darkplaces.git/commitdiff
Merge PR 'Add support for a "give a" command to give player armour'
authorJames O'Neill <hemebond@gmail.com>
Sun, 21 Apr 2024 14:44:09 +0000 (23:44 +0900)
committerGitHub <noreply@github.com>
Sun, 21 Apr 2024 14:44:09 +0000 (00:44 +1000)
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 <bones_was_here@xonotic.au>
sv_ccmds.c

index 138b2c09c0c78cecf275a77f2172795b19796d2e..aa6790e5a552d9b9a2db75ec3b772a01a292cfbe 100644 (file)
@@ -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;
        }
 }