From c3c2d383db3634650dce1bcb9e9b8b374f33f5c4 Mon Sep 17 00:00:00 2001 From: Lyberta Date: Mon, 28 Aug 2017 21:44:19 +0300 Subject: [PATCH] Moved USR into separate file. --- qcsrc/common/t_items.qc | 148 +------------------------------------- qcsrc/common/t_items.qh | 47 ------------ qcsrc/server/_mod.inc | 1 + qcsrc/server/_mod.qh | 1 + qcsrc/server/client.qc | 1 + qcsrc/server/resources.qc | 140 ++++++++++++++++++++++++++++++++++++ qcsrc/server/resources.qh | 44 ++++++++++++ 7 files changed, 190 insertions(+), 192 deletions(-) create mode 100644 qcsrc/server/resources.qc create mode 100644 qcsrc/server/resources.qh diff --git a/qcsrc/common/t_items.qc b/qcsrc/common/t_items.qc index de0dcdba4..3873a4550 100644 --- a/qcsrc/common/t_items.qc +++ b/qcsrc/common/t_items.qc @@ -682,149 +682,6 @@ void Item_ScheduleInitialRespawn(entity e) Item_ScheduleRespawnIn(e, max(0, game_starttime - time) + ((e.respawntimestart) ? e.respawntimestart : ITEM_RESPAWNTIME_INITIAL(e))); } -int GetResourceType(.float resource_property) -{ - switch (resource_property) - { - case health: { return RESOURCE_HEALTH; } - case armorvalue: { return RESOURCE_ARMOR; } - case ammo_shells: { return RESOURCE_SHELLS; } - case ammo_nails: { return RESOURCE_BULLETS; } - case ammo_rockets: { return RESOURCE_ROCKETS; } - case ammo_cells: { return RESOURCE_CELLS; } - case ammo_plasma: { return RESOURCE_PLASMA; } - case ammo_fuel: { return RESOURCE_FUEL; } - } - error("GetResourceType: Invalid property."); - return 0; -} - -.float GetResourceProperty(int resource_type) -{ - switch (resource_type) - { - case RESOURCE_HEALTH: { return health; } - case RESOURCE_ARMOR: { return armorvalue; } - case RESOURCE_SHELLS: { return ammo_shells; } - case RESOURCE_BULLETS: { return ammo_nails; } - case RESOURCE_ROCKETS: { return ammo_rockets; } - case RESOURCE_CELLS: { return ammo_cells; } - case RESOURCE_PLASMA: { return ammo_plasma; } - case RESOURCE_FUEL: { return ammo_fuel; } - } - error("GetResourceProperty: Invalid resource type."); - return health; -} - -float GetResourceLimit(entity e, int resource_type) -{ - float limit; - switch (resource_type) - { - case RESOURCE_HEALTH: - { - limit = autocvar_g_balance_health_limit; - break; - } - case RESOURCE_ARMOR: - { - limit = autocvar_g_balance_armor_limit; - break; - } - case RESOURCE_SHELLS: - { - limit = g_pickup_shells_max; - break; - } - case RESOURCE_BULLETS: - { - limit = g_pickup_nails_max; - break; - } - case RESOURCE_ROCKETS: - { - limit = g_pickup_rockets_max; - break; - } - case RESOURCE_CELLS: - { - limit = g_pickup_cells_max; - break; - } - case RESOURCE_PLASMA: - { - limit = g_pickup_plasma_max; - break; - } - case RESOURCE_FUEL: - { - limit = autocvar_g_balance_fuel_limit; - break; - } - default: - { - error("GetResourceLimit: Invalid resource type."); - return 0; - } - } - MUTATOR_CALLHOOK(GetResourceLimit, e, resource_type, limit); - limit = M_ARGV(2, float); - if (limit > RESOURCE_AMOUNT_HARD_LIMIT) - { - limit = RESOURCE_AMOUNT_HARD_LIMIT; - } - return limit; -} - -void GiveResource(entity receiver, int resource_type, float amount) -{ - if (amount == 0) - { - return; - } - bool forbid = MUTATOR_CALLHOOK(GiveResource, receiver, resource_type, - amount); - if (forbid) - { - return; - } - resource_type = M_ARGV(1, int); - amount = M_ARGV(2, float); - .float resource_property = GetResourceProperty(resource_type); - float max_amount = GetResourceLimit(receiver, resource_type); - receiver.(resource_property) = bound(receiver.(resource_property), - receiver.(resource_property) + amount, max_amount); - switch (resource_type) - { - case RESOURCE_HEALTH: - { - receiver.pauserothealth_finished = - max(receiver.pauserothealth_finished, time + - autocvar_g_balance_pause_health_rot); - return; - } - case RESOURCE_ARMOR: - { - receiver.pauserotarmor_finished = - max(receiver.pauserotarmor_finished, time + - autocvar_g_balance_pause_armor_rot); - return; - } - case RESOURCE_FUEL: - { - receiver.pauserotfuel_finished = max(receiver.pauserotfuel_finished, - time + autocvar_g_balance_pause_fuel_rot); - return; - } - } -} - -void GiveResourceViaProperty(entity receiver, .float resource_property, - float amount) -{ - GiveResource(receiver, GetResourceType(resource_property), amount); -} - float Item_GiveAmmoTo(entity item, entity player, .float ammotype, float ammomax) { if (!item.(ammotype)) @@ -839,7 +696,7 @@ float Item_GiveAmmoTo(entity item, entity player, .float ammotype, float ammomax { amount = ammomax - player.(ammotype); } - GiveResourceViaProperty(player, ammotype, amount); + GiveResource(player, GetResourceType(ammotype), amount); return true; } } @@ -848,7 +705,8 @@ float Item_GiveAmmoTo(entity item, entity player, .float ammotype, float ammomax float mi = min(item.(ammotype), ammomax); if (player.(ammotype) < mi) { - GiveResourceViaProperty(player, ammotype, mi - player.(ammotype)); + GiveResource(player, GetResourceType(ammotype), mi - + player.(ammotype)); } return true; } diff --git a/qcsrc/common/t_items.qh b/qcsrc/common/t_items.qh index a86810be3..ac7791791 100644 --- a/qcsrc/common/t_items.qh +++ b/qcsrc/common/t_items.qh @@ -4,22 +4,6 @@ #include #endif -/// \brief Unconditional maximum amount of resources the player can have. -const int RESOURCE_AMOUNT_HARD_LIMIT = 999; - -/// \brief Describes the available resource types. -enum -{ - RESOURCE_HEALTH, ///< Health. - RESOURCE_ARMOR, ///< Armor. - RESOURCE_SHELLS, ///< Shells (used by shotgun). - RESOURCE_BULLETS, ///< Bullets (used by machinegun and rifle) - RESOURCE_ROCKETS, ///< Rockets (used by mortar, hagar, devastator, etc). - RESOURCE_CELLS, ///< Cells (used by electro, crylink, vortex, etc) - RESOURCE_PLASMA, ///< Plasma (unused). - RESOURCE_FUEL ///< Fuel (used by jetpack). -}; - const int AMMO_COUNT = 4; // amount of ammo types to show in the inventory panel // item networking @@ -100,37 +84,6 @@ void Item_ScheduleRespawn(entity e); void Item_ScheduleInitialRespawn(entity e); -/// \brief Converts resource entity property to resource type. -/// \param[in] resource_property Resource entity property to convert. -/// \return Resource type (a RESOURCE_* constant). -int GetResourceType(.float resource_property); - -/// \brief Converts resource type (a RESOURCE_* constant) to entity property. -/// \param[in] resource_type Type of the resource. -/// \return Entity proprty for that resource. -.float GetResourceProperty(int resource_type); - -/// \brief Returns the maximum amount of the given resource. -/// \param[in] e Entity to check. -/// \param[in] resource_type Type of the resource (a RESOURCE_* constant). -/// \return Maximum amount of the given resource. -float GetResourceLimit(entity e, int resource_type); - -/// \brief Gives player a resource such as health, armor or ammo. -/// \param[in,out] receiver Entity to give resource to. -/// \param[in] resource_type Type of the resource (a RESOURCE_* constant). -/// \param[in] amount Amount of resource to give. -/// \return No return. -void GiveResource(entity receiver, int resource_type, float amount); - -/// \brief Gives player a resource such as health, armor or ammo. -/// \param[in,out] e Entity to give resource to. -/// \param[in] resource_property Entity property of the resource. -/// \param[in] amount Amount of resource to give. -/// \return No return. -void GiveResourceViaProperty(entity receiver, .float resource_property, - float amount); - float Item_GiveAmmoTo(entity item, entity player, .float ammotype, float ammomax); float Item_GiveTo(entity item, entity player); diff --git a/qcsrc/server/_mod.inc b/qcsrc/server/_mod.inc index 87a8d5689..99115fbdc 100644 --- a/qcsrc/server/_mod.inc +++ b/qcsrc/server/_mod.inc @@ -20,6 +20,7 @@ #include #include #include +#include #include #include #include diff --git a/qcsrc/server/_mod.qh b/qcsrc/server/_mod.qh index 2967c110c..3a8898670 100644 --- a/qcsrc/server/_mod.qh +++ b/qcsrc/server/_mod.qh @@ -20,6 +20,7 @@ #include #include #include +#include #include #include #include diff --git a/qcsrc/server/client.qc b/qcsrc/server/client.qc index b7d3a294c..22543766b 100644 --- a/qcsrc/server/client.qc +++ b/qcsrc/server/client.qc @@ -12,6 +12,7 @@ #include "teamplay.qh" #include "playerdemo.qh" #include "spawnpoints.qh" +#include "resources.qh" #include "g_damage.qh" #include "g_hook.qh" #include "command/common.qh" diff --git a/qcsrc/server/resources.qc b/qcsrc/server/resources.qc new file mode 100644 index 000000000..a6e0e0724 --- /dev/null +++ b/qcsrc/server/resources.qc @@ -0,0 +1,140 @@ +#include "resources.qh" + +//#include + +float GetResourceLimit(entity e, int resource_type) +{ + float limit; + switch (resource_type) + { + case RESOURCE_HEALTH: + { + limit = autocvar_g_balance_health_limit; + break; + } + case RESOURCE_ARMOR: + { + limit = autocvar_g_balance_armor_limit; + break; + } + case RESOURCE_SHELLS: + { + limit = g_pickup_shells_max; + break; + } + case RESOURCE_BULLETS: + { + limit = g_pickup_nails_max; + break; + } + case RESOURCE_ROCKETS: + { + limit = g_pickup_rockets_max; + break; + } + case RESOURCE_CELLS: + { + limit = g_pickup_cells_max; + break; + } + case RESOURCE_PLASMA: + { + limit = g_pickup_plasma_max; + break; + } + case RESOURCE_FUEL: + { + limit = autocvar_g_balance_fuel_limit; + break; + } + default: + { + error("GetResourceLimit: Invalid resource type."); + return 0; + } + } + MUTATOR_CALLHOOK(GetResourceLimit, e, resource_type, limit); + limit = M_ARGV(2, float); + if (limit > RESOURCE_AMOUNT_HARD_LIMIT) + { + limit = RESOURCE_AMOUNT_HARD_LIMIT; + } + return limit; +} + +void GiveResource(entity receiver, int resource_type, float amount) +{ + if (amount == 0) + { + return; + } + bool forbid = MUTATOR_CALLHOOK(GiveResource, receiver, resource_type, + amount); + if (forbid) + { + return; + } + resource_type = M_ARGV(1, int); + amount = M_ARGV(2, float); + .float resource_property = GetResourceProperty(resource_type); + float max_amount = GetResourceLimit(receiver, resource_type); + receiver.(resource_property) = bound(receiver.(resource_property), + receiver.(resource_property) + amount, max_amount); + switch (resource_type) + { + case RESOURCE_HEALTH: + { + receiver.pauserothealth_finished = + max(receiver.pauserothealth_finished, time + + autocvar_g_balance_pause_health_rot); + return; + } + case RESOURCE_ARMOR: + { + receiver.pauserotarmor_finished = + max(receiver.pauserotarmor_finished, time + + autocvar_g_balance_pause_armor_rot); + return; + } + case RESOURCE_FUEL: + { + receiver.pauserotfuel_finished = max(receiver.pauserotfuel_finished, + time + autocvar_g_balance_pause_fuel_rot); + return; + } + } +} + +int GetResourceType(.float resource_property) +{ + switch (resource_property) + { + case health: { return RESOURCE_HEALTH; } + case armorvalue: { return RESOURCE_ARMOR; } + case ammo_shells: { return RESOURCE_SHELLS; } + case ammo_nails: { return RESOURCE_BULLETS; } + case ammo_rockets: { return RESOURCE_ROCKETS; } + case ammo_cells: { return RESOURCE_CELLS; } + case ammo_plasma: { return RESOURCE_PLASMA; } + case ammo_fuel: { return RESOURCE_FUEL; } + } + error("GetResourceType: Invalid property."); + return 0; +} + +.float GetResourceProperty(int resource_type) +{ + switch (resource_type) + { + case RESOURCE_HEALTH: { return health; } + case RESOURCE_ARMOR: { return armorvalue; } + case RESOURCE_SHELLS: { return ammo_shells; } + case RESOURCE_BULLETS: { return ammo_nails; } + case RESOURCE_ROCKETS: { return ammo_rockets; } + case RESOURCE_CELLS: { return ammo_cells; } + case RESOURCE_PLASMA: { return ammo_plasma; } + case RESOURCE_FUEL: { return ammo_fuel; } + } + error("GetResourceProperty: Invalid resource type."); + return health; +} diff --git a/qcsrc/server/resources.qh b/qcsrc/server/resources.qh new file mode 100644 index 000000000..5785e2704 --- /dev/null +++ b/qcsrc/server/resources.qh @@ -0,0 +1,44 @@ +#pragma once + +/// \brief Unconditional maximum amount of resources the player can have. +const int RESOURCE_AMOUNT_HARD_LIMIT = 999; + +/// \brief Describes the available resource types. +enum +{ + RESOURCE_HEALTH, ///< Health. + RESOURCE_ARMOR, ///< Armor. + RESOURCE_SHELLS, ///< Shells (used by shotgun). + RESOURCE_BULLETS, ///< Bullets (used by machinegun and rifle) + RESOURCE_ROCKETS, ///< Rockets (used by mortar, hagar, devastator, etc). + RESOURCE_CELLS, ///< Cells (used by electro, crylink, vortex, etc) + RESOURCE_PLASMA, ///< Plasma (unused). + RESOURCE_FUEL ///< Fuel (used by jetpack). +}; + +// ============================ Public API ==================================== + +/// \brief Returns the maximum amount of the given resource. +/// \param[in] e Entity to check. +/// \param[in] resource_type Type of the resource (a RESOURCE_* constant). +/// \return Maximum amount of the given resource. +float GetResourceLimit(entity e, int resource_type); + +/// \brief Gives player a resource such as health, armor or ammo. +/// \param[in,out] receiver Entity to give resource to. +/// \param[in] resource_type Type of the resource (a RESOURCE_* constant). +/// \param[in] amount Amount of resource to give. +/// \return No return. +void GiveResource(entity receiver, int resource_type, float amount); + +// ===================== Legacy and/or internal API =========================== + +/// \brief Converts resource entity property to resource type. +/// \param[in] resource_property Resource entity property to convert. +/// \return Resource type (a RESOURCE_* constant). +int GetResourceType(.float resource_property); + +/// \brief Converts resource type (a RESOURCE_* constant) to entity property. +/// \param[in] resource_type Type of the resource. +/// \return Entity proprty for that resource. +.float GetResourceProperty(int resource_type); -- 2.39.2