From: Lyberta Date: Thu, 29 Mar 2018 07:55:33 +0000 (+0300) Subject: Improved SetResourceLimit. X-Git-Tag: xonotic-v0.8.5~2204^2~4 X-Git-Url: https://git.rm.cloudns.org/?a=commitdiff_plain;h=0089c8134464ec1dfa9607d2b9c1dd0853f1b9bf;p=xonotic%2Fxonotic-data.pk3dir.git Improved SetResourceLimit. --- diff --git a/qcsrc/server/mutators/events.qh b/qcsrc/server/mutators/events.qh index 165353fff..a93c76878 100644 --- a/qcsrc/server/mutators/events.qh +++ b/qcsrc/server/mutators/events.qh @@ -680,11 +680,13 @@ constants for resource types. Return true to forbid the change. */ MUTATOR_HOOKABLE(SetResourceAmount, EV_SetResourceAmount); /** Called after the amount of resource of an entity has changed. See RESOURCE_* -constants for resource types. */ +constants for resource types. Amount wasted is the amount of resource that is +above resource limit so it was not given. */ #define EV_ResourceAmountChanged(i, o) \ /** checked entity */ i(entity, MUTATOR_ARGV_0_entity) \ /** resource type */ i(int, MUTATOR_ARGV_1_int) \ /** amount */ i(float, MUTATOR_ARGV_2_float) \ + /** amount wasted */ i(float, MUTATOR_ARGV_3_float) \ /**/ MUTATOR_HOOKABLE(ResourceAmountChanged, EV_ResourceAmountChanged); diff --git a/qcsrc/server/resources.qc b/qcsrc/server/resources.qc index 23cdea096..fc20caeba 100644 --- a/qcsrc/server/resources.qc +++ b/qcsrc/server/resources.qc @@ -83,18 +83,21 @@ void SetResourceAmount(entity e, int resource_type, float amount) } resource_type = M_ARGV(1, int); amount = M_ARGV(2, float); - .float resource_field = GetResourceField(resource_type); - if (e.(resource_field) == amount) - { - return; - } float max_amount = GetResourceLimit(e, resource_type); + float amount_wasted = 0; if (amount > max_amount) { + amount_wasted = amount - max_amount; amount = max_amount; } + .float resource_field = GetResourceField(resource_type); + if (e.(resource_field) == amount) + { + return; + } e.(resource_field) = amount; - MUTATOR_CALLHOOK(ResourceAmountChanged, e, resource_type, amount); + MUTATOR_CALLHOOK(ResourceAmountChanged, e, resource_type, amount, + amount_wasted); } void GiveResource(entity receiver, int resource_type, float amount)