]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/server/resources.qc
URS: Added GiveResourceWithLimit.
[xonotic/xonotic-data.pk3dir.git] / qcsrc / server / resources.qc
index 94c21e9fbf6dd3013cb6c5d12dd8c268d5c7ce6b..c5bbe75e1e4382d259da687c53946b2e445eb530 100644 (file)
@@ -1,3 +1,8 @@
+/// \file
+/// \brief Source file that contains implementation of the resource system.
+/// \author Lyberta
+/// \copyright GNU GPLv3 or any later version.
+
 #include "resources.qh"
 
 #include "autocvars.qh"
@@ -71,6 +76,13 @@ float GetResourceAmount(entity e, int resource_type)
 
 void SetResourceAmount(entity e, int resource_type, float amount)
 {
+       bool forbid = MUTATOR_CALLHOOK(SetResourceAmount, e, resource_type, amount);
+       if (forbid)
+       {
+               return;
+       }
+       resource_type = M_ARGV(1, int);
+       amount = M_ARGV(2, float);
        .float resource_field = GetResourceField(resource_type);
        if (e.(resource_field) == amount)
        {
@@ -129,6 +141,21 @@ void GiveResource(entity receiver, int resource_type, float amount)
        }
 }
 
+void GiveResourceWithLimit(entity receiver, int resource_type, float amount,
+       float limit)
+{
+       if (amount == 0)
+       {
+               return;
+       }
+       float current_amount = GetResourceAmount(receiver, resource_type);
+       if (current_amount + amount > limit)
+       {
+               amount = limit - current_amount;
+       }
+       GiveResource(receiver, resource_type, amount);
+}
+
 int GetResourceType(.float resource_field)
 {
        switch (resource_field)