1 #include "resources.qh"
3 //#include <server/autocvars.qh>
5 float GetResourceLimit(entity e, int resource_type)
12 limit = autocvar_g_balance_health_limit;
17 limit = autocvar_g_balance_armor_limit;
22 limit = g_pickup_shells_max;
25 case RESOURCE_BULLETS:
27 limit = g_pickup_nails_max;
30 case RESOURCE_ROCKETS:
32 limit = g_pickup_rockets_max;
37 limit = g_pickup_cells_max;
42 limit = g_pickup_plasma_max;
47 limit = autocvar_g_balance_fuel_limit;
52 error("GetResourceLimit: Invalid resource type.");
56 MUTATOR_CALLHOOK(GetResourceLimit, e, resource_type, limit);
57 limit = M_ARGV(2, float);
58 if (limit > RESOURCE_AMOUNT_HARD_LIMIT)
60 limit = RESOURCE_AMOUNT_HARD_LIMIT;
65 void GiveResource(entity receiver, int resource_type, float amount)
71 bool forbid = MUTATOR_CALLHOOK(GiveResource, receiver, resource_type,
77 resource_type = M_ARGV(1, int);
78 amount = M_ARGV(2, float);
79 .float resource_property = GetResourceProperty(resource_type);
80 float max_amount = GetResourceLimit(receiver, resource_type);
81 receiver.(resource_property) = bound(receiver.(resource_property),
82 receiver.(resource_property) + amount, max_amount);
83 switch (resource_type)
87 receiver.pauserothealth_finished =
88 max(receiver.pauserothealth_finished, time +
89 autocvar_g_balance_pause_health_rot);
94 receiver.pauserotarmor_finished =
95 max(receiver.pauserotarmor_finished, time +
96 autocvar_g_balance_pause_armor_rot);
101 receiver.pauserotfuel_finished = max(receiver.pauserotfuel_finished,
102 time + autocvar_g_balance_pause_fuel_rot);
108 int GetResourceType(.float resource_property)
110 switch (resource_property)
112 case health: { return RESOURCE_HEALTH; }
113 case armorvalue: { return RESOURCE_ARMOR; }
114 case ammo_shells: { return RESOURCE_SHELLS; }
115 case ammo_nails: { return RESOURCE_BULLETS; }
116 case ammo_rockets: { return RESOURCE_ROCKETS; }
117 case ammo_cells: { return RESOURCE_CELLS; }
118 case ammo_plasma: { return RESOURCE_PLASMA; }
119 case ammo_fuel: { return RESOURCE_FUEL; }
121 error("GetResourceType: Invalid property.");
125 .float GetResourceProperty(int resource_type)
127 switch (resource_type)
129 case RESOURCE_HEALTH: { return health; }
130 case RESOURCE_ARMOR: { return armorvalue; }
131 case RESOURCE_SHELLS: { return ammo_shells; }
132 case RESOURCE_BULLETS: { return ammo_nails; }
133 case RESOURCE_ROCKETS: { return ammo_rockets; }
134 case RESOURCE_CELLS: { return ammo_cells; }
135 case RESOURCE_PLASMA: { return ammo_plasma; }
136 case RESOURCE_FUEL: { return ammo_fuel; }
138 error("GetResourceProperty: Invalid resource type.");