From: Lyberta Date: Mon, 19 Mar 2018 08:39:22 +0000 (+0300) Subject: Added GiveResourceWithLimit hook. X-Git-Tag: xonotic-v0.8.5~2204^2~9 X-Git-Url: http://git.xonotic.org/?a=commitdiff_plain;h=93aee97972358e07efaa0240d8e9469c4c48d791;p=xonotic%2Fxonotic-data.pk3dir.git Added GiveResourceWithLimit hook. --- diff --git a/qcsrc/server/mutators/events.qh b/qcsrc/server/mutators/events.qh index 6853c04a1..f0112a519 100644 --- a/qcsrc/server/mutators/events.qh +++ b/qcsrc/server/mutators/events.qh @@ -690,6 +690,19 @@ for resource types. Return true to forbid giving. */ /**/ MUTATOR_HOOKABLE(GiveResource, EV_GiveResource); +/** Called when entity is being given some resource with specified limit. See +RESOURCE_* constants for resource types. Return true to forbid giving. */ +#define EV_GiveResourceWithLimit(i, o) \ + /** receiver */ i(entity, MUTATOR_ARGV_0_entity) \ + /** resource type */ i(int, MUTATOR_ARGV_1_int) \ + /**/ o(int, MUTATOR_ARGV_1_int) \ + /** amount */ i(float, MUTATOR_ARGV_2_float) \ + /**/ o(float, MUTATOR_ARGV_2_float) \ + /** limit */ i(float, MUTATOR_ARGV_3_float) \ + /**/ o(float, MUTATOR_ARGV_3_float) \ + /**/ +MUTATOR_HOOKABLE(GiveResourceWithLimit, EV_GiveResourceWithLimit); + /** called at when a player connect */ #define EV_ClientConnect(i, o) \ /** player */ i(entity, MUTATOR_ARGV_0_entity) \ diff --git a/qcsrc/server/resources.qc b/qcsrc/server/resources.qc index a2a1358b9..254db749f 100644 --- a/qcsrc/server/resources.qc +++ b/qcsrc/server/resources.qc @@ -148,6 +148,19 @@ void GiveResourceWithLimit(entity receiver, int resource_type, float amount, { return; } + bool forbid = MUTATOR_CALLHOOK(GiveResourceWithLimit, receiver, + resource_type, amount, limit); + if (forbid) + { + return; + } + resource_type = M_ARGV(1, int); + amount = M_ARGV(2, float); + limit = M_ARGV(3, float); + if (amount <= 0) + { + return; + } float current_amount = GetResourceAmount(receiver, resource_type); if (current_amount + amount > limit) {