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 float GetResourceAmount(entity e, int resource_type)
67 .float resource_field = GetResourceField(resource_type);
68 return e.(resource_field);
71 void SetResourceAmount(entity e, int resource_type, float amount)
73 .float resource_field = GetResourceField(resource_type);
74 if (e.(resource_field) == amount)
78 float max_amount = GetResourceLimit(e, resource_type);
79 if (amount > max_amount)
83 e.(resource_field) = amount;
86 void GiveResource(entity receiver, int resource_type, float amount)
92 bool forbid = MUTATOR_CALLHOOK(GiveResource, receiver, resource_type,
98 resource_type = M_ARGV(1, int);
99 amount = M_ARGV(2, float);
104 SetResourceAmount(receiver, resource_type,
105 GetResourceAmount(receiver, resource_type) + amount);
106 switch (resource_type)
108 case RESOURCE_HEALTH:
110 receiver.pauserothealth_finished =
111 max(receiver.pauserothealth_finished, time +
112 autocvar_g_balance_pause_health_rot);
117 receiver.pauserotarmor_finished =
118 max(receiver.pauserotarmor_finished, time +
119 autocvar_g_balance_pause_armor_rot);
124 receiver.pauserotfuel_finished = max(receiver.pauserotfuel_finished,
125 time + autocvar_g_balance_pause_fuel_rot);
131 int GetResourceType(.float resource_field)
133 switch (resource_field)
135 case health: { return RESOURCE_HEALTH; }
136 case armorvalue: { return RESOURCE_ARMOR; }
137 case ammo_shells: { return RESOURCE_SHELLS; }
138 case ammo_nails: { return RESOURCE_BULLETS; }
139 case ammo_rockets: { return RESOURCE_ROCKETS; }
140 case ammo_cells: { return RESOURCE_CELLS; }
141 case ammo_plasma: { return RESOURCE_PLASMA; }
142 case ammo_fuel: { return RESOURCE_FUEL; }
144 error("GetResourceType: Invalid field.");
148 .float GetResourceField(int resource_type)
150 switch (resource_type)
152 case RESOURCE_HEALTH: { return health; }
153 case RESOURCE_ARMOR: { return armorvalue; }
154 case RESOURCE_SHELLS: { return ammo_shells; }
155 case RESOURCE_BULLETS: { return ammo_nails; }
156 case RESOURCE_ROCKETS: { return ammo_rockets; }
157 case RESOURCE_CELLS: { return ammo_cells; }
158 case RESOURCE_PLASMA: { return ammo_plasma; }
159 case RESOURCE_FUEL: { return ammo_fuel; }
161 error("GetResourceField: Invalid resource type.");