From 93aee97972358e07efaa0240d8e9469c4c48d791 Mon Sep 17 00:00:00 2001 From: Lyberta Date: Mon, 19 Mar 2018 11:39:22 +0300 Subject: [PATCH] Added GiveResourceWithLimit hook. --- qcsrc/server/mutators/events.qh | 13 +++++++++++++ qcsrc/server/resources.qc | 13 +++++++++++++ 2 files changed, 26 insertions(+) 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) { -- 2.39.2