From 23b671956fd931296a0ff0b2146fdd9920b4f69f Mon Sep 17 00:00:00 2001 From: Marco Cawthorne Date: Tue, 14 Feb 2023 22:02:47 -0800 Subject: [PATCH] Weapons_AddItem: Only count NSGameRules' MaxItemPerSlot() when we're adding a new weapon --- src/server/weapons.qc | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/src/server/weapons.qc b/src/server/weapons.qc index 803f9c2c..9fc7468c 100644 --- a/src/server/weapons.qc +++ b/src/server/weapons.qc @@ -123,7 +123,8 @@ returns TRUE if weapon pickup gets removed from this world int Weapons_AddItem(NSClientPlayer pl, int w, int startammo) { - int value; + int value = false; + bool over_limit = false; /* let's check if we've got a limit */ int maxit; @@ -138,7 +139,8 @@ Weapons_AddItem(NSClientPlayer pl, int w, int startammo) /* we're over the slot limit. */ if (c >= maxit) { - return (0); + over_limit = true; + break; } } } @@ -149,7 +151,7 @@ Weapons_AddItem(NSClientPlayer pl, int w, int startammo) if (pl.g_items & g_weapons[w].id) { /* already present, skip */ value = FALSE; - } else { + } else if (over_limit == false) { /* new to our arsenal */ pl.g_items |= g_weapons[w].id; value = TRUE; @@ -171,7 +173,7 @@ Weapons_AddItem(NSClientPlayer pl, int w, int startammo) /* FALSE means maxammo is hit */ if (!value) return value; - } else { + } else if (over_limit == false) { /* new to our arsenal */ if (g_weapons[w].pickup((player)pl, TRUE, startammo) == TRUE) { pl.g_items |= g_weapons[w].id; @@ -188,6 +190,8 @@ Weapons_AddItem(NSClientPlayer pl, int w, int startammo) /* cannot pickup this weapon (weapon says no) */ return FALSE; } + } else { + return FALSE; } } @@ -199,7 +203,8 @@ Weapons_AddItem(NSClientPlayer pl, int w, int startammo) int Weapons_AddItemSilent(NSClientPlayer pl, int w, int startammo) { - int value; + int value = false; + bool over_limit = false; /* let's check if we've got a limit */ int maxit; @@ -214,7 +219,8 @@ Weapons_AddItemSilent(NSClientPlayer pl, int w, int startammo) /* we're over the slot limit. */ if (c >= maxit) { - return (0); + over_limit = true; + break; } } } @@ -225,7 +231,7 @@ Weapons_AddItemSilent(NSClientPlayer pl, int w, int startammo) if (pl.g_items & g_weapons[w].id) { /* already present, skip */ value = FALSE; - } else { + } else if (over_limit == false) { /* new to our arsenal */ pl.g_items |= g_weapons[w].id; value = TRUE; @@ -245,7 +251,7 @@ Weapons_AddItemSilent(NSClientPlayer pl, int w, int startammo) /* FALSE means maxammo is hit */ if (!value) return value; - } else { + } else if (over_limit == false) { /* new to our arsenal */ if (g_weapons[w].pickup((player)pl, TRUE, startammo) == TRUE) { pl.g_items |= g_weapons[w].id; @@ -260,6 +266,8 @@ Weapons_AddItemSilent(NSClientPlayer pl, int w, int startammo) /* cannot pickup this weapon (weapon says no) */ return FALSE; } + } else { + return false; } }