-#ifndef PICKUP_H
-#define PICKUP_H
-#include "../item.qh"
-CLASS(Pickup, GameItem)
- METHOD(Pickup, respondTo, bool(entity, int))
- ATTRIB(Pickup, m_model, string, string_null)
- ATTRIB(Pickup, m_sound, string, string_null)
- ATTRIB(Pickup, m_respawntime, int, 0)
- ATTRIB(Pickup, m_respawntimejitter, int, 0)
- ATTRIB(Pickup, m_name, string, string_null)
- ATTRIB(Pickup, m_itemid, int, 0)
- ATTRIB(Pickup, m_botvalue, int, 0)
-ENDCLASS(Pickup)
-
-#define SPAWNTIMES(_) \
- _(WEAPON, weapon) \
- _(AMMO, ammo) \
- _(SHORT, short) \
- _(MEDIUM, medium) \
- _(LONG, long) \
- /**/
-
-#define SPAWNTIMES_ENUM(id, idlc) SPAWNTIME_##id ,
-enum { SPAWNTIMES(SPAWNTIMES_ENUM) };
-#undef SPAWNTIMES_ENUM
-
-#ifdef SVQC
-#include "../../../server/defs.qh"
-
-#define SPAWNTIMES_MAP(id, idlc) i == SPAWNTIME_##id ? g_pickup_respawntime_##idlc :
-[[inline]] int spawntime(int i) { return SPAWNTIMES(SPAWNTIMES_MAP) 0; }
-#undef SPAWNTIMES_MAP
+#pragma once
-#define SPAWNTIMES_MAP(id, idlc) i == SPAWNTIME_##id ? g_pickup_respawntimejitter_##idlc :
-[[inline]] int spawntimejitter(int i) { return SPAWNTIMES(SPAWNTIMES_MAP) 0; }
-#undef SPAWNTIMES_MAP
+#include <common/items/inventory.qh>
+#include <common/items/item.qh>
+CLASS(Pickup, GameItem)
+#ifndef MENUQC
+ ATTRIB(Pickup, m_model, Model);
+ ATTRIB(Pickup, m_sound, Sound, SND_ITEMPICKUP);
#endif
-
-bool Pickup_respondTo(entity this, int request)
-{
- switch (request) {
- default: return false;
- case ITEM_SIGNAL(Default):
- print(strcat(this.m_name, " responding\n"));
- return true;
+ ATTRIB(Pickup, m_name, string);
+ METHOD(Pickup, show, void(Pickup this))
+ {
+ TC(Pickup, this);
+ LOG_INFOF("%s: %s\n", etos(this), this.m_name);
}
-}
-
+#ifdef SVQC
+ ATTRIB(Pickup, m_mins, vector, '-16 -16 0');
+ ATTRIB(Pickup, m_maxs, vector, '16 16 32');
+ ATTRIB(Pickup, m_botvalue, int, 0);
+ ATTRIB(Pickup, m_itemflags, int, 0);
+ ATTRIB(Pickup, m_itemid, int, 0);
+ float generic_pickupevalfunc(entity player, entity item);
+ ATTRIB(Pickup, m_pickupevalfunc, float(entity player, entity item), generic_pickupevalfunc);
+ ATTRIB(Pickup, m_respawntime, float());
+ ATTRIB(Pickup, m_respawntimejitter, float());
+ float Item_GiveTo(entity item, entity player);
+ METHOD(Pickup, giveTo, bool(Pickup this, entity item, entity player))
+ {
+ TC(Pickup, this);
+ bool b = Item_GiveTo(item, player);
+ if (b) {
+ LOG_DEBUGF("entity %i picked up %s", player, this.m_name);
+ player.inventory.inv_items[this.m_id]++;
+ Inventory_update(player);
+ }
+ return b;
+ }
+ bool ITEM_HANDLE(Pickup, Pickup this, entity item, entity player);
#endif
+ENDCLASS(Pickup)