1 #include "resources.qh"
3 #include "autocvars.qh"
4 #include "miscfunctions.qh"
6 float GetResourceLimit(entity e, int resource_type)
13 limit = autocvar_g_balance_health_limit;
18 limit = autocvar_g_balance_armor_limit;
23 limit = g_pickup_shells_max;
26 case RESOURCE_BULLETS:
28 limit = g_pickup_nails_max;
31 case RESOURCE_ROCKETS:
33 limit = g_pickup_rockets_max;
38 limit = g_pickup_cells_max;
43 limit = g_pickup_plasma_max;
48 limit = autocvar_g_balance_fuel_limit;
53 error("GetResourceLimit: Invalid resource type.");
57 MUTATOR_CALLHOOK(GetResourceLimit, e, resource_type, limit);
58 limit = M_ARGV(2, float);
59 if (limit > RESOURCE_AMOUNT_HARD_LIMIT)
61 limit = RESOURCE_AMOUNT_HARD_LIMIT;
66 float GetResourceAmount(entity e, int resource_type)
68 .float resource_field = GetResourceField(resource_type);
69 return e.(resource_field);
72 void SetResourceAmount(entity e, int resource_type, float amount)
74 .float resource_field = GetResourceField(resource_type);
75 if (e.(resource_field) == amount)
79 float max_amount = GetResourceLimit(e, resource_type);
80 if (amount > max_amount)
84 e.(resource_field) = amount;
87 void GiveResource(entity receiver, int resource_type, float amount)
93 bool forbid = MUTATOR_CALLHOOK(GiveResource, receiver, resource_type,
99 resource_type = M_ARGV(1, int);
100 amount = M_ARGV(2, float);
105 SetResourceAmount(receiver, resource_type,
106 GetResourceAmount(receiver, resource_type) + amount);
107 switch (resource_type)
109 case RESOURCE_HEALTH:
111 receiver.pauserothealth_finished =
112 max(receiver.pauserothealth_finished, time +
113 autocvar_g_balance_pause_health_rot);
118 receiver.pauserotarmor_finished =
119 max(receiver.pauserotarmor_finished, time +
120 autocvar_g_balance_pause_armor_rot);
125 receiver.pauserotfuel_finished = max(receiver.pauserotfuel_finished,
126 time + autocvar_g_balance_pause_fuel_rot);
132 int GetResourceType(.float resource_field)
134 switch (resource_field)
136 case health: { return RESOURCE_HEALTH; }
137 case armorvalue: { return RESOURCE_ARMOR; }
138 case ammo_shells: { return RESOURCE_SHELLS; }
139 case ammo_nails: { return RESOURCE_BULLETS; }
140 case ammo_rockets: { return RESOURCE_ROCKETS; }
141 case ammo_cells: { return RESOURCE_CELLS; }
142 case ammo_plasma: { return RESOURCE_PLASMA; }
143 case ammo_fuel: { return RESOURCE_FUEL; }
145 error("GetResourceType: Invalid field.");
149 .float GetResourceField(int resource_type)
151 switch (resource_type)
153 case RESOURCE_HEALTH: { return health; }
154 case RESOURCE_ARMOR: { return armorvalue; }
155 case RESOURCE_SHELLS: { return ammo_shells; }
156 case RESOURCE_BULLETS: { return ammo_nails; }
157 case RESOURCE_ROCKETS: { return ammo_rockets; }
158 case RESOURCE_CELLS: { return ammo_cells; }
159 case RESOURCE_PLASMA: { return ammo_plasma; }
160 case RESOURCE_FUEL: { return ammo_fuel; }
162 error("GetResourceField: Invalid resource type.");