]> git.rm.cloudns.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
Fix not being able to set a health item to take health
authorMario <mario@smbclan.net>
Wed, 20 Jun 2018 09:51:02 +0000 (19:51 +1000)
committerMario <mario@smbclan.net>
Wed, 20 Jun 2018 09:51:02 +0000 (19:51 +1000)
qcsrc/common/t_items.qc
qcsrc/server/resources.qc
qcsrc/server/resources.qh

index 68fa7ef578ee302b29fd3697e22f89b5a2b6d856..140b619c5ec09cae3f8c62fcf1e87bb6c4b61c2b 100644 (file)
@@ -742,14 +742,14 @@ float Item_GiveAmmoTo(entity item, entity player, int resource_type, float ammom
                {
                        return false;
                }
-               GiveResourceWithLimit(player, resource_type, amount, ammomax);
+               GiveOrTakeResourceWithLimit(player, resource_type, amount, ammomax);
                return true;
        }
        if (g_weapon_stay != 2)
        {
                return false;
        }
-       GiveResourceWithLimit(player, resource_type, amount, min(amount, ammomax));
+       GiveOrTakeResourceWithLimit(player, resource_type, amount, min(amount, ammomax));
        return true;
 }
 
index b3b19095ae8b14e7832b386d1f5614c891a3d93f..74a0c55788a71a2f19de6accaeaacba47f1c9c3b 100644 (file)
@@ -232,13 +232,38 @@ void TakeResourceWithLimit(entity receiver, int resource_type, float amount,
                return;
        }
        float current_amount = GetResourceAmount(receiver, resource_type);
-       if (current_amount - amount < limit)
+       if (current_amount - amount < -limit)
        {
-               amount = limit + current_amount;
+               amount = -limit + current_amount;
        }
        TakeResource(receiver, resource_type, amount);
 }
 
+void GiveOrTakeResource(entity receiver, int resource_type, float amount)
+{
+       if(amount < 0)
+       {
+               TakeResource(receiver, resource_type, amount * -1);
+       }
+       else
+       {
+               GiveResource(receiver, resource_type, amount);
+       }
+}
+
+void GiveOrTakeResourceWithLimit(entity receiver, int resource_type, float amount,
+       float limit)
+{
+       if(amount < 0)
+       {
+               TakeResourceWithLimit(receiver, resource_type, amount * -1, limit);
+       }
+       else
+       {
+               GiveResourceWithLimit(receiver, resource_type, amount, limit);
+       }
+}
+
 int GetResourceType(.float resource_field)
 {
        switch (resource_field)
index e4631ab5605ad30d7953826cdaddf6ef78ea7bd7..15433b264fde16ba7b34d98510743ead0accf3b8 100644 (file)
@@ -67,6 +67,22 @@ void TakeResource(entity receiver, int resource_type, float amount);
 void TakeResourceWithLimit(entity receiver, int resource_type, float amount,
        float limit);
 
+/// \brief Gives to or takes from an entity resource.
+/// \param[in,out] receiver Entity to give or take resource.
+/// \param[in] resource_type Type of the resource (a RESOURCE_* constant).
+/// \param[in] amount Amount of resource to give or take.
+/// \return No return.
+void GiveOrTakeResource(entity receiver, int resource_type, float amount);
+
+/// \brief Gives to or takes from an entity resource but not more/less than a limit.
+/// \param[in,out] receiver Entity to give or take resource.
+/// \param[in] resource_type Type of the resource (a RESOURCE_* constant).
+/// \param[in] amount Amount of resource to give or take.
+/// \param[in] limit Limit of resources to give or take.
+/// \return No return.
+void GiveOrTakeResourceWithLimit(entity receiver, int resource_type, float amount,
+       float limit);
+
 // ===================== Legacy and/or internal API ===========================
 
 /// \brief Converts an entity field to resource type.