float GetResourceLimit(entity e, int resource_type)
{
if(!IS_PLAYER(e))
- return -1; // no limits on non-players
+ return RESOURCE_LIMIT_NONE; // no limits on non-players
float limit;
switch (resource_type)
amount = M_ARGV(2, float);
float max_amount = GetResourceLimit(e, resource_type); // TODO: should allow overriding these limits if cheats are enabled!
float amount_wasted = 0;
- if (amount > max_amount && max_amount >= 0)
+ if (amount > max_amount && max_amount != RESOURCE_LIMIT_NONE)
{
amount_wasted = amount - max_amount;
amount = max_amount;
return;
}
float current_amount = GetResourceAmount(receiver, resource_type);
- if (current_amount + amount > limit)
+ if (current_amount + amount > limit && limit != RESOURCE_LIMIT_NONE)
{
amount = limit - current_amount;
}
return;
}
float current_amount = GetResourceAmount(receiver, resource_type);
- if (current_amount - amount < limit)
+ if (current_amount - amount < -limit)
{
- amount = limit + current_amount;
+ amount = -limit + current_amount;
}
TakeResource(receiver, resource_type, amount);
}
+void GiveOrTakeResource(entity receiver, int resource_type, float amount)
+{
+ if(amount < 0)
+ {
+ TakeResource(receiver, resource_type, amount * -1);
+ }
+ else
+ {
+ GiveResource(receiver, resource_type, amount);
+ }
+}
+
+void GiveOrTakeResourceWithLimit(entity receiver, int resource_type, float amount,
+ float limit)
+{
+ if(amount < 0)
+ {
+ TakeResourceWithLimit(receiver, resource_type, amount * -1, limit);
+ }
+ else
+ {
+ GiveResourceWithLimit(receiver, resource_type, amount, limit);
+ }
+}
+
int GetResourceType(.float resource_field)
{
switch (resource_field)