/// game items.
/// \copyright GNU GPLv2 or any later version.
-#include "g_subs.qh"
+#include <server/mutators/_mod.qh>
#include <common/weapons/all.qh>
+#include <common/mapobjects/subs.qh>
.bool m_isloot; ///< Holds whether item is loot.
/// \brief Holds whether strength, shield or superweapon timers expire while
/// this item is on the ground.
.bool m_isexpiring;
-entity Item_Create(string class_name, vector position)
+entity Item_FindDefinition(string class_name)
+{
+ FOREACH(Items, it.m_canonical_spawnfunc == class_name,
+ {
+ return it;
+ });
+ FOREACH(Weapons, it.m_canonical_spawnfunc == class_name,
+ {
+ return it.m_pickup;
+ });
+ return NULL;
+}
+
+bool Item_IsAllowed(string class_name)
+{
+ entity definition = Item_FindDefinition(class_name);
+ if (definition == NULL)
+ {
+ return false;
+ }
+ return Item_IsDefinitionAllowed(definition);
+}
+
+bool Item_IsDefinitionAllowed(entity definition)
+{
+ return !MUTATOR_CALLHOOK(FilterItemDefinition, definition);
+}
+
+entity Item_Create(string class_name, vector position, bool no_align)
{
entity item = spawn();
item.classname = class_name;
item.spawnfunc_checked = true;
+ setorigin(item, position);
+ item.noalign = no_align;
Item_Initialize(item, class_name);
if (wasfreed(item))
{
return NULL;
}
- setorigin(item, position);
return item;
}
item.classname = class_name;
Item_SetLoot(item, true);
item.noalign = true;
+ setorigin(item, position);
item.pickup_anyway = true;
item.spawnfunc_checked = true;
Item_Initialize(item, class_name);
return false;
}
item.gravity = 1;
- setorigin(item, position);
item.velocity = vel;
SUB_SetFade(item, time + time_to_live, 1);
return true;
bool Item_IsLoot(entity item)
{
- return item.m_isloot || (item.classname == "droppedweapon");
+ return item.m_isloot;
}
void Item_SetLoot(entity item, bool loot)
item.m_isloot = loot;
}
+bool Item_ShouldKeepPosition(entity item)
+{
+ return item.noalign || (item.spawnflags & 1);
+}
+
bool Item_IsExpiring(entity item)
{
return item.m_isexpiring;