Secrets
06-13-2010, 04:04 AM
Ported objects to perl today. You can now get an object list via perl with $entity_list->GetObjectList(), and do a lot of things with them, all from perl. This was just me experimenting with the perlxs util in the utilities folder, but it evolved into this.
Check below where it boots up for a list of perl commands. I handpicked the functions that could prove useful.
Image:
http://imgur.com/X5mvr.png
Example Script:
sub EVENT_SAY {
if($text=~/object/i)
{
my @moblist = $entity_list->GetObjectList();
foreach $ent (@moblist)
{
quest::ze(15, $ent->GetDBID())
}
}
}
Diff:
Index: doors.cpp
================================================== =================
--- doors.cpp (revision 1556)
+++ doors.cpp (working copy)
@@ -599,9 +599,4 @@
return false;
}
return true;
-}
-
-
-
-
-
+}
\ No newline at end of file
Index: embperl.cpp
================================================== =================
--- embperl.cpp (revision 1556)
+++ embperl.cpp (working copy)
@@ -38,6 +38,7 @@
EXTERN_C XS(boot_Raid);
EXTERN_C XS(boot_QuestItem);
EXTERN_C XS(boot_HateEntry);
+EXTERN_C XS(boot_Object);
EXTERN_C XS(boot_PerlPacket);
/*XS(XS_Client_new);
//XS(XS_Mob_new);
@@ -88,6 +89,7 @@
newXS(strcpy(buf, "Raid::boot_Raid"), boot_Raid, file);
newXS(strcpy(buf, "QuestItem::boot_QuestItem"), boot_QuestItem, file);
newXS(strcpy(buf, "HateEntry::boot_HateEntry"), boot_HateEntry, file);
+ newXS(strcpy(buf, "Object::boot_Object"), boot_Object, file);
;
#endif
#endif
Index: entity.cpp
================================================== =================
--- entity.cpp (revision 1556)
+++ entity.cpp (working copy)
@@ -1000,6 +1000,40 @@
return 0;
}
+Object* EntityList::GetObjectByDBID(int32 id) {
+ LinkedListIterator<Object*> iterator(object_list);
+
+ iterator.Reset();
+ while(iterator.MoreElements())
+ {
+ if (iterator.GetData())
+ {
+ if (iterator.GetData()->CastToObject()->GetDBID() == id) {
+ return iterator.GetData();
+ }
+ }
+ iterator.Advance();
+ }
+ return 0;
+}
+
+Object* EntityList::GetObjectByID(int16 id) {
+ LinkedListIterator<Object*> iterator(object_list);
+
+ iterator.Reset();
+ while(iterator.MoreElements())
+ {
+ if (iterator.GetData())
+ {
+ if (iterator.GetData()->CastToObject()->GetID() == id) {
+ return iterator.GetData();
+ }
+ }
+ iterator.Advance();
+ }
+ return 0;
+}
+
NPC* EntityList::GetNPCByNPCTypeID(int32 npc_id)
{
if (npc_id == 0)
@@ -3833,7 +3867,7 @@
}
}
-void EntityList::CreateGroundObject(int32 itemid, float x, float y, float z, float heading, int32 decay_time)
+int16 EntityList::CreateGroundObject(int32 itemid, float x, float y, float z, float heading, int32 decay_time)
{
const Item_Struct* is = database.GetItem(itemid);
if(is)
@@ -3845,10 +3879,28 @@
entity_list.AddObject(object, true);
object->StartDecay();
safe_delete(i);
+ if(object)
+ return object->GetID();
}
+ return 0; // fell through itemstruct
}
+ return 0; // fell through everything, this is bad/incomplete from perl
}
+int16 EntityList::CreateGroundObjectFromModel(const char *model, float x, float y, float z, float heading, int8 type)
+{
+ if(model)
+ {
+ Object* object = new Object(model,x,y,z,heading,type);
+ entity_list.AddObject(object, true);
+ //object->StartDecay();
+ if(object)
+ return object->GetID();
+ // fell through itemstruct
+ }
+ return 0; // fell through everything, this is bad/incomplete from perl
+}
+
Mob* EntityList::GetTargetForMez(Mob* caster)
{
if(!caster)
@@ -4332,6 +4384,21 @@
return n_list;
}
+
+list<Object*> EntityList::GetObjectList()
+{
+ list<Object*> n_list;
+ LinkedListIterator<Object*> iterator(object_list);
+ iterator.Reset();
+ while(iterator.MoreElements())
+ {
+ Object *ent = iterator.GetData();
+ n_list.push_back(ent);
+ iterator.Advance();
+ }
+ return n_list;
+}
+
list<Client*> EntityList::GetClientList()
{
list<Client*> c_list;
Index: entity.h
================================================== =================
--- entity.h (revision 1556)
+++ entity.h (working copy)
@@ -131,6 +131,8 @@
Mob* GetMob(const char* name);
Mob* GetMobByNpcTypeID(int32 get_id);
NPC* GetNPCByID(int16 id);
+ Object* GetObjectByID(int16 id);
+ Object* GetObjectByDBID(int32 id);
NPC* GetNPCByNPCTypeID(int32 npc_id);
Client* GetClientByName(const char *name);
Client* GetClientByAccID(int32 accid);
@@ -342,7 +344,8 @@
void SaveAllClientsTaskState();
void ReloadAllClientsTaskState(int TaskID=0);
- void CreateGroundObject(int32 itemid, float x, float y, float z, float heading, int32 decay_time = 300000);
+ int16 CreateGroundObject(int32 itemid, float x, float y, float z, float heading, int32 decay_time = 300000);
+ int16 CreateGroundObjectFromModel(const char *model, float x, float y, float z, float heading, int8 type = 0x00);
void ZoneWho(Client *c, Who_All_Struct* Who);
void UnMarkNPC(int16 ID);
@@ -356,6 +359,7 @@
list<Mob*> GetMobList();
list<NPC*> GetNPCList();
+ list<Object*> GetObjectList();
list<Client*> GetClientList();
list<Corpse*> GetCorpseList();
void DepopAll(int NPCTypeID, bool StartSpawnTimer = true);
Index: Object.cpp
================================================== =================
--- Object.cpp (revision 1556)
+++ Object.cpp (working copy)
@@ -221,6 +221,40 @@
}
}
+Object::Object(const char *model, float x, float y, float z, float heading, int8 type)
+ : respawn_timer(0), decay_timer(300000)
+{
+ user = NULL;
+ last_user = NULL;
+
+ // Initialize members
+ m_id = 0;
+ m_inst = NULL;
+ m_type = type;
+ m_icon = 0;
+ m_inuse = false;
+ m_ground_spawn = false;
+ // Set as much struct data as we can
+ memset(&m_data, 0, sizeof(Object_Struct));
+ m_data.heading = heading;
+ m_data.x = x;
+ m_data.y = y;
+ m_data.z = z;
+ m_data.zone_id = zone->GetZoneID();
+ //Hardcoded portion for unknown members
+ m_data.unknown024 = 0x7f001194;
+ m_data.unknown064 = 0; //0x0000000D;
+ m_data.unknown068 = 0; //0x0000001E;
+ m_data.unknown072 = 0; //0x000032ED;
+ m_data.unknown076 = 0x0000d5fe;
+ m_data.unknown084 = 0xFFFFFFFF;
+
+ if(model)
+ strcpy(m_data.object_name, model);
+ else
+ strcpy(m_data.object_name, "IT64_ACTORDEF"); //default object name if model isn't specified for some unknown reason
+}
+
Object::~Object()
{
safe_delete(m_inst);
@@ -263,6 +297,19 @@
return true;
}
+int16 Object::VarSave()
+{
+ if (m_id) {
+ // Update existing
+ database.UpdateObject(m_id, m_type, m_icon, m_data, m_inst);
+ }
+ else {
+ // Doesn't yet exist, add now
+ m_id = database.AddObject(m_type, m_icon, m_data, m_inst);
+ }
+ return m_id;
+}
+
// Remove object from database
void Object::Delete(bool reset_state)
{
@@ -648,6 +695,110 @@
return this->m_icon;
}
+float Object::GetX()
+{
+ return this->m_data.x;
+}
+
+float Object::GetY()
+{
+ return this->m_data.y;
+}
+
+
+float Object::GetZ()
+{
+ return this->m_data.z;
+}
+
+float Object::GetHeadingData()
+{
+ return this->m_data.heading;
+}
+
+void Object::SetX(float pos)
+{
+ this->m_data.x = pos;
+
+ EQApplicationPacket* app = new EQApplicationPacket();
+ EQApplicationPacket* app2 = new EQApplicationPacket();
+ this->CreateDeSpawnPacket(app);
+ this->CreateSpawnPacket(app2);
+ entity_list.QueueClients(0, app);
+ entity_list.QueueClients(0, app2);
+ safe_delete(app);
+ safe_delete(app2);
+}
+
+void Object::SetY(float pos)
+{
+ this->m_data.y = pos;
+
+ EQApplicationPacket* app = new EQApplicationPacket();
+ EQApplicationPacket* app2 = new EQApplicationPacket();
+ this->CreateDeSpawnPacket(app);
+ this->CreateSpawnPacket(app2);
+ entity_list.QueueClients(0, app);
+ entity_list.QueueClients(0, app2);
+ safe_delete(app);
+ safe_delete(app2);
+}
+
+void Object::Depop()
+{
+ EQApplicationPacket* app = new EQApplicationPacket();
+ this->CreateDeSpawnPacket(app);
+ entity_list.QueueClients(0, app);
+ safe_delete(app);
+ entity_list.RemoveObject(this->GetID());
+}
+
+void Object::Repop()
+{
+ EQApplicationPacket* app = new EQApplicationPacket();
+ EQApplicationPacket* app2 = new EQApplicationPacket();
+ this->CreateDeSpawnPacket(app);
+ this->CreateSpawnPacket(app2);
+ entity_list.QueueClients(0, app);
+ entity_list.QueueClients(0, app2);
+ safe_delete(app);
+ safe_delete(app2);
+}
+
+
+
+void Object::SetZ(float pos)
+{
+ this->m_data.z = pos;
+
+ EQApplicationPacket* app = new EQApplicationPacket();
+ EQApplicationPacket* app2 = new EQApplicationPacket();
+ this->CreateDeSpawnPacket(app);
+ this->CreateSpawnPacket(app2);
+ entity_list.QueueClients(0, app);
+ entity_list.QueueClients(0, app2);
+ safe_delete(app);
+ safe_delete(app2);
+}
+
+void Object::SetModelName(const char* modelname)
+{
+ strncpy(m_data.object_name, modelname, 20); // 20 is the max for chars in object_name, this should be safe
+ EQApplicationPacket* app = new EQApplicationPacket();
+ EQApplicationPacket* app2 = new EQApplicationPacket();
+ this->CreateDeSpawnPacket(app);
+ this->CreateSpawnPacket(app2);
+ entity_list.QueueClients(0, app);
+ entity_list.QueueClients(0, app2);
+ safe_delete(app);
+ safe_delete(app2);
+}
+
+const char* Object::GetModelName()
+{
+ return this->m_data.object_name;
+}
+
void Object::SetIcon(int32 icon)
{
this->m_icon = icon;
@@ -719,6 +870,14 @@
this->m_data.x = x;
this->m_data.y = y;
this->m_data.z = z;
+ EQApplicationPacket* app = new EQApplicationPacket();
+ EQApplicationPacket* app2 = new EQApplicationPacket();
+ this->CreateDeSpawnPacket(app);
+ this->CreateSpawnPacket(app2);
+ entity_list.QueueClients(0, app);
+ entity_list.QueueClients(0, app2);
+ safe_delete(app);
+ safe_delete(app2);
}
void Object::GetHeading(float* heading)
@@ -732,5 +891,13 @@
void Object::SetHeading(float heading)
{
this->m_data.heading = heading;
+ EQApplicationPacket* app = new EQApplicationPacket();
+ EQApplicationPacket* app2 = new EQApplicationPacket();
+ this->CreateDeSpawnPacket(app);
+ this->CreateSpawnPacket(app2);
+ entity_list.QueueClients(0, app);
+ entity_list.QueueClients(0, app2);
+ safe_delete(app);
+ safe_delete(app2);
}
Index: object.h
================================================== =================
--- object.h (revision 1556)
+++ object.h (working copy)
@@ -135,6 +135,7 @@
// Loading object from client dropping item on ground
Object(Client* client, const ItemInst* inst);
Object(const ItemInst *inst, float x, float y, float z, float heading, int32 decay_time);
+ Object(const char *model, float x, float y, float z, float heading, int8 type);
// Destructor
~Object();
@@ -153,6 +154,8 @@
// Packet functions
void CreateSpawnPacket(EQApplicationPacket* app);
void CreateDeSpawnPacket(EQApplicationPacket* app);
+ void Depop();
+ void Repop();
//Decay functions
void StartDecay() {decay_timer.Start();}
@@ -165,6 +168,7 @@
// Override base class implementations
virtual bool IsObject() const { return true; }
virtual bool Save();
+ virtual int16 VarSave();
virtual void SetID(int16 set_id);
void ClearUser() { user = NULL; }
@@ -172,6 +176,7 @@
int32 GetDBID();
int32 GetType();
void SetType(int32 type);
+ void SetDBID(int32 dbid);
int32 GetIcon();
void SetIcon(int32 icon);
int32 GetItemID();
@@ -181,6 +186,15 @@
void GetLocation(float* x, float* y, float* z);
void SetLocation(float x, float y, float z);
void GetHeading(float* heading);
+ float GetX();
+ float GetY();
+ float GetZ();
+ float GetHeadingData();
+ void SetX(float pos);
+ void SetY(float pos);
+ void SetZ(float pos);
+ void SetModelName(const char* modelname);
+ const char* GetModelName();
void SetHeading(float heading);
protected:
Index: perl_entity.cpp
================================================== =================
--- perl_entity.cpp (revision 1556)
+++ perl_entity.cpp (working copy)
@@ -173,6 +173,61 @@
XSRETURN(1);
}
+XS(XS_EntityList_GetObjectByDBID); /* prototype to pass -Wmissing-prototypes */
+XS(XS_EntityList_GetObjectByDBID)
+{
+ dXSARGS;
+ if (items != 2)
+ Perl_croak(aTHX_ "Usage: EntityList::GetObjectByDBID(THIS, id)");
+ {
+ EntityList * THIS;
+ Object * RETVAL;
+ int32 id = (int32)SvUV(ST(1));
+
+ if (sv_derived_from(ST(0), "EntityList")) {
+ IV tmp = SvIV((SV*)SvRV(ST(0)));
+ THIS = INT2PTR(EntityList *,tmp);
+ }
+ else
+ Perl_croak(aTHX_ "THIS is not of type EntityList");
+ if(THIS == NULL)
+ Perl_croak(aTHX_ "THIS is NULL, avoiding crash.");
+
+ RETVAL = THIS->GetObjectByDBID(id);
+ ST(0) = sv_newmortal();
+ sv_setref_pv(ST(0), "Object", (void*)RETVAL);
+ }
+ XSRETURN(1);
+}
+
+XS(XS_EntityList_GetObjectByID); /* prototype to pass -Wmissing-prototypes */
+XS(XS_EntityList_GetObjectByID)
+{
+ dXSARGS;
+ if (items != 2)
+ Perl_croak(aTHX_ "Usage: EntityList::GetObjectByID(THIS, id)");
+ {
+ EntityList * THIS;
+ Object * RETVAL;
+ int32 id = (int32)SvUV(ST(1));
+
+ if (sv_derived_from(ST(0), "EntityList")) {
+ IV tmp = SvIV((SV*)SvRV(ST(0)));
+ THIS = INT2PTR(EntityList *,tmp);
+ }
+ else
+ Perl_croak(aTHX_ "THIS is not of type EntityList");
+ if(THIS == NULL)
+ Perl_croak(aTHX_ "THIS is NULL, avoiding crash.");
+
+ RETVAL = THIS->GetObjectByID(id);
+ ST(0) = sv_newmortal();
+ sv_setref_pv(ST(0), "Object", (void*)RETVAL);
+ }
+ XSRETURN(1);
+}
+
+
XS(XS_EntityList_GetNPCByNPCTypeID); /* prototype to pass -Wmissing-prototypes */
XS(XS_EntityList_GetNPCByNPCTypeID)
{
@@ -1797,6 +1852,42 @@
XSRETURN(num_npcs);
}
+XS(XS_EntityList_GetObjectList); /* prototype to pass -Wmissing-prototypes */
+XS(XS_EntityList_GetObjectList)
+{
+ dXSARGS;
+ int num_objects = 0;
+ if (items != 1)
+ Perl_croak(aTHX_ "Usage: EntityList::GetObjectList(THIS)");
+ {
+ EntityList *THIS;
+
+ if (sv_derived_from(ST(0), "EntityList")) {
+ IV tmp = SvIV((SV*)SvRV(ST(0)));
+ THIS = INT2PTR(EntityList *,tmp);
+ }
+ else
+ Perl_croak(aTHX_ "THIS is not of type EntityList");
+
+ if(THIS == NULL)
+ Perl_croak(aTHX_ "THIS is NULL, avoiding crash.");
+
+ std::list<Object*> object_list = entity_list.GetObjectList();
+ std::list<Object*>::iterator iter = object_list.begin();
+
+ while(iter != object_list.end())
+ {
+ Object *entry = (*iter);
+ ST(0) = sv_newmortal();
+ sv_setref_pv(ST(0), "Object", (void*)entry);
+ XPUSHs(ST(0));
+ num_objects++;
+ iter++;
+ }
+ }
+ XSRETURN(num_objects);
+}
+
XS(XS_EntityList_GetCorpseList); /* prototype to pass -Wmissing-prototypes */
XS(XS_EntityList_GetCorpseList)
{
@@ -1884,6 +1975,8 @@
newXSproto(strcpy(buf, "GetMobByID"), XS_EntityList_GetMobByID, file, "$$");
newXSproto(strcpy(buf, "GetMobByNpcTypeID"), XS_EntityList_GetMobByNpcTypeID, file, "$$");
newXSproto(strcpy(buf, "GetNPCByID"), XS_EntityList_GetNPCByID, file, "$$");
+ newXSproto(strcpy(buf, "GetObjectByID"), XS_EntityList_GetObjectByID, file, "$");
+ newXSproto(strcpy(buf, "GetObjectByDBID"), XS_EntityList_GetObjectByDBID, file, "$");
newXSproto(strcpy(buf, "GetNPCByNPCTypeID"), XS_EntityList_GetNPCByNPCTypeID, file, "$$");
newXSproto(strcpy(buf, "GetClientByName"), XS_EntityList_GetClientByName, file, "$$");
newXSproto(strcpy(buf, "GetClientByAccID"), XS_EntityList_GetClientByAccID, file, "$$");
@@ -1940,6 +2033,7 @@
newXSproto(strcpy(buf, "GetMobList"), XS_EntityList_GetMobList, file, "$");
newXSproto(strcpy(buf, "GetClientList"), XS_EntityList_GetClientList, file, "$");
newXSproto(strcpy(buf, "GetNPCList"), XS_EntityList_GetNPCList, file, "$");
+ newXSproto(strcpy(buf, "GetObjectList"), XS_EntityList_GetObjectList, file, "$");
newXSproto(strcpy(buf, "GetCorpseList"), XS_EntityList_GetCorpseList, file, "$");
newXSproto(strcpy(buf, "SignalAllClients"), XS_EntityList_SignalAllClients, file, "$$");
XSRETURN_YES;
Index: perl_object.cpp
================================================== =================
--- perl_object.cpp (revision 0)
+++ perl_object.cpp (revision 0)
@@ -0,0 +1,883 @@
+/*
+ * This file was generated automatically by xsubpp version 1.9508 from the
+ * contents of tmp. Do not edit this file, edit tmp instead.
+ *
+ * ANY CHANGES MADE HERE WILL BE LOST!
+ *
+ */
+
+
+/* EQEMu: Everquest Server Emulator
+ Copyright (C) 2001-2004 EQEMu Development Team (http://eqemulator.net)
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; version 2 of the License.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY except by those people which sell it, which
+ are required to give you total support for your newly bought product;
+ without even the implied warranty of MERCHANTABILITY or FITNESS FOR
+ A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+*/
+
+#include "features.h"
+#ifdef EMBPERL_XS_CLASSES
+#include "../common/debug.h"
+#include "embperl.h"
+
+#include "object.h"
+
+#ifdef THIS /* this macro seems to leak out on some systems */
+#undef THIS
+#endif
+
+XS(XS_Object_IsGroundSpawn); /* prototype to pass -Wmissing-prototypes */
+XS(XS_Object_IsGroundSpawn)
+{
+ dXSARGS;
+ if (items != 1)
+ Perl_croak(aTHX_ "Usage: Object::IsGroundSpawn(THIS)");
+ {
+ Object * THIS;
+ bool RETVAL;
+
+ if (sv_derived_from(ST(0), "Object")) {
+ IV tmp = SvIV((SV*)SvRV(ST(0)));
+ THIS = INT2PTR(Object *,tmp);
+ }
+ else
+ Perl_croak(aTHX_ "THIS is not of type Object");
+ if(THIS == NULL)
+ Perl_croak(aTHX_ "THIS is NULL, avoiding crash.");
+
+ RETVAL = THIS->IsGroundSpawn();
+ ST(0) = boolSV(RETVAL);
+ sv_2mortal(ST(0));
+ }
+ XSRETURN(1);
+}
+
+
+
+XS(XS_Object_Close); /* prototype to pass -Wmissing-prototypes */
+XS(XS_Object_Close)
+{
+ dXSARGS;
+ if (items != 1)
+ Perl_croak(aTHX_ "Usage: Object::Close(THIS)");
+ {
+ Object * THIS;
+
+ if (sv_derived_from(ST(0), "Object")) {
+ IV tmp = SvIV((SV*)SvRV(ST(0)));
+ THIS = INT2PTR(Object *,tmp);
+ }
+ else
+ Perl_croak(aTHX_ "THIS is not of type Object");
+ if(THIS == NULL)
+ Perl_croak(aTHX_ "THIS is NULL, avoiding crash.");
+
+ THIS->Close();
+ }
+ XSRETURN_EMPTY;
+}
+
+
+XS(XS_Object_Delete); /* prototype to pass -Wmissing-prototypes */
+XS(XS_Object_Delete)
+{
+ dXSARGS;
+ if (items < 1 || items > 2)
+ Perl_croak(aTHX_ "Usage: Object::Delete(THIS, reset_state=false)");
+ {
+ Object * THIS;
+ bool reset_state;
+
+ if (sv_derived_from(ST(0), "Object")) {
+ IV tmp = SvIV((SV*)SvRV(ST(0)));
+ THIS = INT2PTR(Object *,tmp);
+ }
+ else
+ Perl_croak(aTHX_ "THIS is not of type Object");
+ if(THIS == NULL)
+ Perl_croak(aTHX_ "THIS is NULL, avoiding crash.");
+
+ if (items < 2)
+ reset_state = false;
+ else {
+ reset_state = (bool)SvTRUE(ST(1));
+ }
+
+ THIS->Delete(reset_state);
+ }
+ XSRETURN_EMPTY;
+}
+XS(XS_Object_StartDecay); /* prototype to pass -Wmissing-prototypes */
+XS(XS_Object_StartDecay)
+{
+ dXSARGS;
+ if (items != 1)
+ Perl_croak(aTHX_ "Usage: Object::StartDecay(THIS)");
+ {
+ Object * THIS;
+
+ if (sv_derived_from(ST(0), "Object")) {
+ IV tmp = SvIV((SV*)SvRV(ST(0)));
+ THIS = INT2PTR(Object *,tmp);
+ }
+ else
+ Perl_croak(aTHX_ "THIS is not of type Object");
+ if(THIS == NULL)
+ Perl_croak(aTHX_ "THIS is NULL, avoiding crash.");
+
+ THIS->StartDecay();
+ }
+ XSRETURN_EMPTY;
+}
+
+
+XS(XS_Object_DeleteItem); /* prototype to pass -Wmissing-prototypes */
+XS(XS_Object_DeleteItem)
+{
+ dXSARGS;
+ if (items != 2)
+ Perl_croak(aTHX_ "Usage: Object::DeleteItem(THIS, index)");
+ {
+ Object * THIS;
+ uint8 index = (uint8)SvUV(ST(1));
+
+ if (sv_derived_from(ST(0), "Object")) {
+ IV tmp = SvIV((SV*)SvRV(ST(0)));
+ THIS = INT2PTR(Object *,tmp);
+ }
+ else
+ Perl_croak(aTHX_ "THIS is not of type Object");
+ if(THIS == NULL)
+ Perl_croak(aTHX_ "THIS is NULL, avoiding crash.");
+
+ THIS->DeleteItem(index);
+ }
+ XSRETURN_EMPTY;
+}
+
+XS(XS_Object_IsObject); /* prototype to pass -Wmissing-prototypes */
+XS(XS_Object_IsObject)
+{
+ dXSARGS;
+ if (items != 1)
+ Perl_croak(aTHX_ "Usage: Object::IsObject(THIS)");
+ {
+ Object * THIS;
+ bool RETVAL;
+
+ if (sv_derived_from(ST(0), "Object")) {
+ IV tmp = SvIV((SV*)SvRV(ST(0)));
+ THIS = INT2PTR(Object *,tmp);
+ }
+ else
+ Perl_croak(aTHX_ "THIS is not of type Object");
+ if(THIS == NULL)
+ Perl_croak(aTHX_ "THIS is NULL, avoiding crash.");
+
+ RETVAL = THIS->IsObject();
+ ST(0) = boolSV(RETVAL);
+ sv_2mortal(ST(0));
+ }
+ XSRETURN(1);
+}
+
+
+XS(XS_Object_Save); /* prototype to pass -Wmissing-prototypes */
+XS(XS_Object_Save)
+{
+ dXSARGS;
+ if (items != 1)
+ Perl_croak(aTHX_ "Usage: Object::Save(THIS)");
+ {
+ Object * THIS;
+ bool RETVAL;
+
+ if (sv_derived_from(ST(0), "Object")) {
+ IV tmp = SvIV((SV*)SvRV(ST(0)));
+ THIS = INT2PTR(Object *,tmp);
+ }
+ else
+ Perl_croak(aTHX_ "THIS is not of type Object");
+ if(THIS == NULL)
+ Perl_croak(aTHX_ "THIS is NULL, avoiding crash.");
+
+ RETVAL = THIS->Save();
+ ST(0) = boolSV(RETVAL);
+ sv_2mortal(ST(0));
+ }
+ XSRETURN(1);
+}
+
+
+XS(XS_Object_SetID); /* prototype to pass -Wmissing-prototypes */
+XS(XS_Object_SetID)
+{
+ dXSARGS;
+ if (items != 2)
+ Perl_croak(aTHX_ "Usage: Object::SetID(THIS, set_id)");
+ {
+ Object * THIS;
+ int16 set_id = (int16)SvUV(ST(1));
+
+ if (sv_derived_from(ST(0), "Object")) {
+ IV tmp = SvIV((SV*)SvRV(ST(0)));
+ THIS = INT2PTR(Object *,tmp);
+ }
+ else
+ Perl_croak(aTHX_ "THIS is not of type Object");
+ if(THIS == NULL)
+ Perl_croak(aTHX_ "THIS is NULL, avoiding crash.");
+
+ THIS->SetID(set_id);
+ }
+ XSRETURN_EMPTY;
+}
+
+
+XS(XS_Object_ClearUser); /* prototype to pass -Wmissing-prototypes */
+XS(XS_Object_ClearUser)
+{
+ dXSARGS;
+ if (items != 1)
+ Perl_croak(aTHX_ "Usage: Object::ClearUser(THIS)");
+ {
+ Object * THIS;
+
+ if (sv_derived_from(ST(0), "Object")) {
+ IV tmp = SvIV((SV*)SvRV(ST(0)));
+ THIS = INT2PTR(Object *,tmp);
+ }
+ else
+ Perl_croak(aTHX_ "THIS is not of type Object");
+ if(THIS == NULL)
+ Perl_croak(aTHX_ "THIS is NULL, avoiding crash.");
+
+ THIS->ClearUser();
+ }
+ XSRETURN_EMPTY;
+}
+
+
+XS(XS_Object_GetDBID); /* prototype to pass -Wmissing-prototypes */
+XS(XS_Object_GetDBID)
+{
+ dXSARGS;
+ if (items != 1)
+ Perl_croak(aTHX_ "Usage: Object::GetDBID(THIS)");
+ {
+ Object * THIS;
+ int32 RETVAL;
+ dXSTARG;
+
+ if (sv_derived_from(ST(0), "Object")) {
+ IV tmp = SvIV((SV*)SvRV(ST(0)));
+ THIS = INT2PTR(Object *,tmp);
+ }
+ else
+ Perl_croak(aTHX_ "THIS is not of type Object");
+ if(THIS == NULL)
+ Perl_croak(aTHX_ "THIS is NULL, avoiding crash.");
+
+ RETVAL = THIS->GetDBID();
+ XSprePUSH; PUSHu((UV)RETVAL);
+ }
+ XSRETURN(1);
+}
+
+XS(XS_Object_GetID); /* prototype to pass -Wmissing-prototypes */
+XS(XS_Object_GetID)
+{
+ dXSARGS;
+ if (items != 1)
+ Perl_croak(aTHX_ "Usage: Object::GetID(THIS)");
+ {
+ Object * THIS;
+ int16 RETVAL;
+ dXSTARG;
+
+ if (sv_derived_from(ST(0), "Object")) {
+ IV tmp = SvIV((SV*)SvRV(ST(0)));
+ THIS = INT2PTR(Object *,tmp);
+ }
+ else
+ Perl_croak(aTHX_ "THIS is not of type Object");
+ if(THIS == NULL)
+ Perl_croak(aTHX_ "THIS is NULL, avoiding crash.");
+
+ RETVAL = THIS->GetID();
+ XSprePUSH; PUSHu((UV)RETVAL);
+ }
+ XSRETURN(1);
+}
+
+XS(XS_Object_GetX); /* prototype to pass -Wmissing-prototypes */
+XS(XS_Object_GetX)
+{
+ dXSARGS;
+ if (items != 1)
+ Perl_croak(aTHX_ "Usage: Object::GetX(THIS)");
+ {
+ Object * THIS;
+ float RETVAL;
+ dXSTARG;
+
+ if (sv_derived_from(ST(0), "Object")) {
+ IV tmp = SvIV((SV*)SvRV(ST(0)));
+ THIS = INT2PTR(Object *,tmp);
+ }
+ else
+ Perl_croak(aTHX_ "THIS is not of type Object");
+ if(THIS == NULL)
+ Perl_croak(aTHX_ "THIS is NULL, avoiding crash.");
+
+ RETVAL = THIS->GetX();
+ XSprePUSH; PUSHn((double)RETVAL);
+ }
+ XSRETURN(1);
+}
+
+XS(XS_Object_GetY); /* prototype to pass -Wmissing-prototypes */
+XS(XS_Object_GetY)
+{
+ dXSARGS;
+ if (items != 1)
+ Perl_croak(aTHX_ "Usage: Object::GetY(THIS)");
+ {
+ Object * THIS;
+ float RETVAL;
+ dXSTARG;
+
+ if (sv_derived_from(ST(0), "Object")) {
+ IV tmp = SvIV((SV*)SvRV(ST(0)));
+ THIS = INT2PTR(Object *,tmp);
+ }
+ else
+ Perl_croak(aTHX_ "THIS is not of type Object");
+ if(THIS == NULL)
+ Perl_croak(aTHX_ "THIS is NULL, avoiding crash.");
+
+ RETVAL = THIS->GetY();
+ XSprePUSH; PUSHn((double)RETVAL);
+ }
+ XSRETURN(1);
+}
+
+XS(XS_Object_GetZ); /* prototype to pass -Wmissing-prototypes */
+XS(XS_Object_GetZ)
+{
+ dXSARGS;
+ if (items != 1)
+ Perl_croak(aTHX_ "Usage: Object::GetZ(THIS)");
+ {
+ Object * THIS;
+ float RETVAL;
+ dXSTARG;
+
+ if (sv_derived_from(ST(0), "Object")) {
+ IV tmp = SvIV((SV*)SvRV(ST(0)));
+ THIS = INT2PTR(Object *,tmp);
+ }
+ else
+ Perl_croak(aTHX_ "THIS is not of type Object");
+ if(THIS == NULL)
+ Perl_croak(aTHX_ "THIS is NULL, avoiding crash.");
+
+ RETVAL = THIS->GetZ();
+ XSprePUSH; PUSHn((double)RETVAL);
+ }
+ XSRETURN(1);
+}
+
+XS(XS_Object_GetHeading); /* prototype to pass -Wmissing-prototypes */
+XS(XS_Object_GetHeading)
+{
+ dXSARGS;
+ if (items != 1)
+ Perl_croak(aTHX_ "Usage: Object::GetHeadingData(THIS)");
+ {
+ Object * THIS;
+ float RETVAL;
+ dXSTARG;
+
+ if (sv_derived_from(ST(0), "Object")) {
+ IV tmp = SvIV((SV*)SvRV(ST(0)));
+ THIS = INT2PTR(Object *,tmp);
+ }
+ else
+ Perl_croak(aTHX_ "THIS is not of type Object");
+ if(THIS == NULL)
+ Perl_croak(aTHX_ "THIS is NULL, avoiding crash.");
+
+ RETVAL = THIS->GetHeadingData();
+ XSprePUSH; PUSHn((double)RETVAL);
+ }
+ XSRETURN(1);
+}
+
+XS(XS_Object_VarSave); /* prototype to pass -Wmissing-prototypes */
+XS(XS_Object_VarSave)
+{
+ dXSARGS;
+ if (items != 1)
+ Perl_croak(aTHX_ "Usage: Object::VarSave(THIS)");
+ {
+ Object * THIS;
+ int32 RETVAL;
+ dXSTARG;
+
+ if (sv_derived_from(ST(0), "Object")) {
+ IV tmp = SvIV((SV*)SvRV(ST(0)));
+ THIS = INT2PTR(Object *,tmp);
+ }
+ else
+ Perl_croak(aTHX_ "THIS is not of type Object");
+ if(THIS == NULL)
+ Perl_croak(aTHX_ "THIS is NULL, avoiding crash.");
+
+ RETVAL = THIS->VarSave();
+ XSprePUSH; PUSHu((UV)RETVAL);
+ }
+ XSRETURN(1);
+}
+
+
+XS(XS_Object_GetType); /* prototype to pass -Wmissing-prototypes */
+XS(XS_Object_GetType)
+{
+ dXSARGS;
+ if (items != 1)
+ Perl_croak(aTHX_ "Usage: Object::GetType(THIS)");
+ {
+ Object * THIS;
+ int32 RETVAL;
+ dXSTARG;
+
+ if (sv_derived_from(ST(0), "Object")) {
+ IV tmp = SvIV((SV*)SvRV(ST(0)));
+ THIS = INT2PTR(Object *,tmp);
+ }
+ else
+ Perl_croak(aTHX_ "THIS is not of type Object");
+ if(THIS == NULL)
+ Perl_croak(aTHX_ "THIS is NULL, avoiding crash.");
+
+ RETVAL = THIS->GetType();
+ XSprePUSH; PUSHu((UV)RETVAL);
+ }
+ XSRETURN(1);
+}
+
+
+XS(XS_Object_SetType); /* prototype to pass -Wmissing-prototypes */
+XS(XS_Object_SetType)
+{
+ dXSARGS;
+ if (items != 2)
+ Perl_croak(aTHX_ "Usage: Object::SetType(THIS, type)");
+ {
+ Object * THIS;
+ int32 type = (int32)SvUV(ST(1));
+
+ if (sv_derived_from(ST(0), "Object")) {
+ IV tmp = SvIV((SV*)SvRV(ST(0)));
+ THIS = INT2PTR(Object *,tmp);
+ }
+ else
+ Perl_croak(aTHX_ "THIS is not of type Object");
+ if(THIS == NULL)
+ Perl_croak(aTHX_ "THIS is NULL, avoiding crash.");
+
+ THIS->SetType(type);
+ }
+ XSRETURN_EMPTY;
+}
+
+
+XS(XS_Object_GetIcon); /* prototype to pass -Wmissing-prototypes */
+XS(XS_Object_GetIcon)
+{
+ dXSARGS;
+ if (items != 1)
+ Perl_croak(aTHX_ "Usage: Object::GetIcon(THIS)");
+ {
+ Object * THIS;
+ int32 RETVAL;
+ dXSTARG;
+
+ if (sv_derived_from(ST(0), "Object")) {
+ IV tmp = SvIV((SV*)SvRV(ST(0)));
+ THIS = INT2PTR(Object *,tmp);
+ }
+ else
+ Perl_croak(aTHX_ "THIS is not of type Object");
+ if(THIS == NULL)
+ Perl_croak(aTHX_ "THIS is NULL, avoiding crash.");
+
+ RETVAL = THIS->GetIcon();
+ XSprePUSH; PUSHu((UV)RETVAL);
+ }
+ XSRETURN(1);
+}
+
+
+XS(XS_Object_SetIcon); /* prototype to pass -Wmissing-prototypes */
+XS(XS_Object_SetIcon)
+{
+ dXSARGS;
+ if (items != 2)
+ Perl_croak(aTHX_ "Usage: Object::SetIcon(THIS, icon)");
+ {
+ Object * THIS;
+ int32 icon = (int32)SvUV(ST(1));
+
+ if (sv_derived_from(ST(0), "Object")) {
+ IV tmp = SvIV((SV*)SvRV(ST(0)));
+ THIS = INT2PTR(Object *,tmp);
+ }
+ else
+ Perl_croak(aTHX_ "THIS is not of type Object");
+ if(THIS == NULL)
+ Perl_croak(aTHX_ "THIS is NULL, avoiding crash.");
+
+ THIS->SetIcon(icon);
+ }
+ XSRETURN_EMPTY;
+}
+
+
+XS(XS_Object_GetItemID); /* prototype to pass -Wmissing-prototypes */
+XS(XS_Object_GetItemID)
+{
+ dXSARGS;
+ if (items != 1)
+ Perl_croak(aTHX_ "Usage: Object::GetItemID(THIS)");
+ {
+ Object * THIS;
+ int32 RETVAL;
+ dXSTARG;
+
+ if (sv_derived_from(ST(0), "Object")) {
+ IV tmp = SvIV((SV*)SvRV(ST(0)));
+ THIS = INT2PTR(Object *,tmp);
+ }
+ else
+ Perl_croak(aTHX_ "THIS is not of type Object");
+ if(THIS == NULL)
+ Perl_croak(aTHX_ "THIS is NULL, avoiding crash.");
+
+ RETVAL = THIS->GetItemID();
+ XSprePUSH; PUSHu((UV)RETVAL);
+ }
+ XSRETURN(1);
+}
+
+
+XS(XS_Object_SetItemID); /* prototype to pass -Wmissing-prototypes */
+XS(XS_Object_SetItemID)
+{
+ dXSARGS;
+ if (items != 2)
+ Perl_croak(aTHX_ "Usage: Object::SetItemID(THIS, itemid)");
+ {
+ Object * THIS;
+ int32 itemid = (int32)SvUV(ST(1));
+
+ if (sv_derived_from(ST(0), "Object")) {
+ IV tmp = SvIV((SV*)SvRV(ST(0)));
+ THIS = INT2PTR(Object *,tmp);
+ }
+ else
+ Perl_croak(aTHX_ "THIS is not of type Object");
+ if(THIS == NULL)
+ Perl_croak(aTHX_ "THIS is NULL, avoiding crash.");
+
+ THIS->SetItemID(itemid);
+ }
+ XSRETURN_EMPTY;
+}
+
+XS(XS_Object_SetLocation); /* prototype to pass -Wmissing-prototypes */
+XS(XS_Object_SetLocation)
+{
+ dXSARGS;
+ if (items != 4)
+ Perl_croak(aTHX_ "Usage: Object::SetLocation(THIS, x, y, z)");
+ {
+ Object * THIS;
+ float x = (float)SvNV(ST(1));
+ float y = (float)SvNV(ST(2));
+ float z = (float)SvNV(ST(3));
+
+ if (sv_derived_from(ST(0), "Object")) {
+ IV tmp = SvIV((SV*)SvRV(ST(0)));
+ THIS = INT2PTR(Object *,tmp);
+ }
+ else
+ Perl_croak(aTHX_ "THIS is not of type Object");
+ if(THIS == NULL)
+ Perl_croak(aTHX_ "THIS is NULL, avoiding crash.");
+
+ THIS->SetLocation(x, y, z);
+ }
+ XSRETURN_EMPTY;
+}
+
+XS(XS_Object_SetX); /* prototype to pass -Wmissing-prototypes */
+XS(XS_Object_SetX)
+{
+ dXSARGS;
+ if (items != 2)
+ Perl_croak(aTHX_ "Usage: Object::SetX(THIS, XPos)");
+ {
+ Object * THIS;
+ float pos = (float)SvNV(ST(1));
+
+ if (sv_derived_from(ST(0), "Object")) {
+ IV tmp = SvIV((SV*)SvRV(ST(0)));
+ THIS = INT2PTR(Object *,tmp);
+ }
+ else
+ Perl_croak(aTHX_ "THIS is not of type Object");
+ if(THIS == NULL)
+ Perl_croak(aTHX_ "THIS is NULL, avoiding crash.");
+
+ THIS->SetX(pos);
+ }
+ XSRETURN_EMPTY;
+}
+
+XS(XS_Object_SetY); /* prototype to pass -Wmissing-prototypes */
+XS(XS_Object_SetY)
+{
+ dXSARGS;
+ if (items != 2)
+ Perl_croak(aTHX_ "Usage: Object::SetY(THIS, YPos)");
+ {
+ Object * THIS;
+ float pos = (float)SvNV(ST(1));
+
+ if (sv_derived_from(ST(0), "Object")) {
+ IV tmp = SvIV((SV*)SvRV(ST(0)));
+ THIS = INT2PTR(Object *,tmp);
+ }
+ else
+ Perl_croak(aTHX_ "THIS is not of type Object");
+ if(THIS == NULL)
+ Perl_croak(aTHX_ "THIS is NULL, avoiding crash.");
+
+ THIS->SetY(pos);
+ }
+ XSRETURN_EMPTY;
+}
+
+XS(XS_Object_SetZ); /* prototype to pass -Wmissing-prototypes */
+XS(XS_Object_SetZ)
+{
+ dXSARGS;
+ if (items != 2)
+ Perl_croak(aTHX_ "Usage: Object::SetZ(THIS, ZPos)");
+ {
+ Object * THIS;
+ float pos = (float)SvNV(ST(1));
+
+ if (sv_derived_from(ST(0), "Object")) {
+ IV tmp = SvIV((SV*)SvRV(ST(0)));
+ THIS = INT2PTR(Object *,tmp);
+ }
+ else
+ Perl_croak(aTHX_ "THIS is not of type Object");
+ if(THIS == NULL)
+ Perl_croak(aTHX_ "THIS is NULL, avoiding crash.");
+
+ THIS->SetZ(pos);
+ }
+ XSRETURN_EMPTY;
+}
+
+XS(XS_Object_SetHeading); /* prototype to pass -Wmissing-prototypes */
+XS(XS_Object_SetHeading)
+{
+ dXSARGS;
+ if (items != 2)
+ Perl_croak(aTHX_ "Usage: Object::SetHeading(THIS, heading)");
+ {
+ Object * THIS;
+ float heading = (float)SvNV(ST(1));
+
+ if (sv_derived_from(ST(0), "Object")) {
+ IV tmp = SvIV((SV*)SvRV(ST(0)));
+ THIS = INT2PTR(Object *,tmp);
+ }
+ else
+ Perl_croak(aTHX_ "THIS is not of type Object");
+ if(THIS == NULL)
+ Perl_croak(aTHX_ "THIS is NULL, avoiding crash.");
+
+ THIS->SetHeading(heading);
+ }
+ XSRETURN_EMPTY;
+}
+
+XS(XS_Object_SetModelName); /* prototype to pass -Wmissing-prototypes */
+XS(XS_Object_SetModelName)
+{
+ dXSARGS;
+ if (items < 1 || items > 2)
+ Perl_croak(aTHX_ "Usage: Object::SetModelName(THIS, name)");
+ {
+ Object * THIS;
+ char * name = NULL;
+
+ if (sv_derived_from(ST(0), "Object")) {
+ IV tmp = SvIV((SV*)SvRV(ST(0)));
+ THIS = INT2PTR(Object *,tmp);
+ }
+ else
+ Perl_croak(aTHX_ "THIS is not of type Object");
+ if(THIS == NULL)
+ Perl_croak(aTHX_ "THIS is NULL, avoiding crash.");
+
+ if (items > 1) { name = (char *)SvPV_nolen(ST(1)); }
+
+ THIS->SetModelName(name);
+ }
+ XSRETURN_EMPTY;
+}
+XS(XS_Object_GetModelName); /* prototype to pass -Wmissing-prototypes */
+XS(XS_Object_GetModelName)
+{
+ dXSARGS;
+ if (items != 1)
+ Perl_croak(aTHX_ "Usage: Object::GetModelName(THIS)");
+ {
+ Object * THIS;
+ Const_char * RETVAL;
+ dXSTARG;
+
+ if (sv_derived_from(ST(0), "Object")) {
+ IV tmp = SvIV((SV*)SvRV(ST(0)));
+ THIS = INT2PTR(Object *,tmp);
+ }
+ else
+ Perl_croak(aTHX_ "THIS is not of type Object");
+ if(THIS == NULL)
+ Perl_croak(aTHX_ "THIS is NULL, avoiding crash.");
+
+ RETVAL = THIS->GetModelName();
+ sv_setpv(TARG, RETVAL); XSprePUSH; PUSHTARG;
+ }
+ XSRETURN(1);
+}
+
+XS(XS_Object_Repop); /* prototype to pass -Wmissing-prototypes */
+XS(XS_Object_Repop)
+{
+ dXSARGS;
+ if (items != 1)
+ Perl_croak(aTHX_ "Usage: Object::Repop(THIS)");
+ {
+ Object * THIS;
+ Const_char * RETVAL;
+ dXSTARG;
+
+ if (sv_derived_from(ST(0), "Object")) {
+ IV tmp = SvIV((SV*)SvRV(ST(0)));
+ THIS = INT2PTR(Object *,tmp);
+ }
+ else
+ Perl_croak(aTHX_ "THIS is not of type Object");
+ if(THIS == NULL)
+ Perl_croak(aTHX_ "THIS is NULL, avoiding crash.");
+ THIS->Repop();
+ }
+ XSRETURN_EMPTY;
+}
+
+XS(XS_Object_Depop); /* prototype to pass -Wmissing-prototypes */
+XS(XS_Object_Depop)
+{
+ dXSARGS;
+ if (items != 1)
+ Perl_croak(aTHX_ "Usage: Object::Repop(THIS)");
+ {
+ Object * THIS;
+ Const_char * RETVAL;
+ dXSTARG;
+
+ if (sv_derived_from(ST(0), "Object")) {
+ IV tmp = SvIV((SV*)SvRV(ST(0)));
+ THIS = INT2PTR(Object *,tmp);
+ }
+ else
+ Perl_croak(aTHX_ "THIS is not of type Object");
+ if(THIS == NULL)
+ Perl_croak(aTHX_ "THIS is NULL, avoiding crash.");
+ THIS->Depop();
+ }
+ XSRETURN_EMPTY;
+}
+
+#ifdef __cplusplus
+extern "C"
+#endif
+XS(boot_Object); /* prototype to pass -Wmissing-prototypes */
+XS(boot_Object)
+{
+ dXSARGS;
+ char file[256];
+ strncpy(file, __FILE__, 256);
+ file[255] = 0;
+
+ if(items != 1)
+ fprintf(stderr, "boot_quest does not take any arguments.");
+ char buf[128];
+
+ //add the strcpy stuff to get rid of const warnings....
+
+
+
+ XS_VERSION_BOOTCHECK ;
+ newXSproto(strcpy(buf, "Depop"),XS_Object_Depop, file, "$");
+ newXSproto(strcpy(buf, "Repop"),XS_Object_Repop, file, "$");
+ newXSproto(strcpy(buf, "SetModelName"),XS_Object_SetModelName, file, "$$");
+ newXSproto(strcpy(buf, "GetModelName"),XS_Object_GetModelName, file, "$");
+ newXSproto(strcpy(buf, "GetX"),XS_Object_GetX, file, "$");
+ newXSproto(strcpy(buf, "GetY"),XS_Object_GetY, file, "$");
+ newXSproto(strcpy(buf, "GetZ"),XS_Object_GetZ, file, "$");
+ newXSproto(strcpy(buf, "GetHeading"),XS_Object_GetHeading, file, "$");
+ newXSproto(strcpy(buf, "SetX"),XS_Object_SetX, file, "$$");
+ newXSproto(strcpy(buf, "SetY"),XS_Object_SetY, file, "$$");
+ newXSproto(strcpy(buf, "SetZ"),XS_Object_SetZ, file, "$$");
+ newXSproto(strcpy(buf, "SetHeading"),XS_Object_SetHeading, file, "$$");
+ newXSproto(strcpy(buf, "SetLocation"),XS_Object_SetLocation, file, "$$$$");
+ newXSproto(strcpy(buf, "SetItemID"),XS_Object_SetItemID, file, "$$");
+ newXSproto(strcpy(buf, "GetItemID"),XS_Object_GetItemID, file, "$");
+ newXSproto(strcpy(buf, "SetIcon"),XS_Object_SetIcon, file, "$$");
+ newXSproto(strcpy(buf, "GetIcon"),XS_Object_GetIcon, file, "$");
+ newXSproto(strcpy(buf, "SetType"),XS_Object_SetType, file, "$$");
+ newXSproto(strcpy(buf, "GetType"),XS_Object_GetType, file, "$");
+ newXSproto(strcpy(buf, "GetDBID"),XS_Object_GetDBID, file, "$");
+ newXSproto(strcpy(buf, "ClearUser"),XS_Object_ClearUser, file, "$");
+ newXSproto(strcpy(buf, "SetID"),XS_Object_SetID, file, "$$");
+ newXSproto(strcpy(buf, "GetID"),XS_Object_GetID, file, "$");
+ newXSproto(strcpy(buf, "Save"),XS_Object_Save, file, "$");
+ newXSproto(strcpy(buf, "VarSave"),XS_Object_VarSave, file, "$");
+ newXSproto(strcpy(buf, "DeleteItem"),XS_Object_DeleteItem, file, "$$");
+ newXSproto(strcpy(buf, "StartDecay"),XS_Object_StartDecay, file, "$$");
+ newXSproto(strcpy(buf, "Delete"),XS_Object_Delete, file, "$$");
+ newXSproto(strcpy(buf, "IsGroundSpawn"),XS_Object_IsGroundSpawn, file, "$");
+ newXSproto(strcpy(buf, "Close"),XS_Object_Close, file, "$");
+ XSRETURN_YES;
+}
+#endif //EMBPERL_XS_CLASSES
+
Index: perlparser.cpp
================================================== =================
--- perlparser.cpp (revision 1556)
+++ perlparser.cpp (working copy)
@@ -90,6 +90,9 @@
"package HateEntry;"
"&boot_HateEntry;" // load quest item XS
+ "package Object;"
+ "&boot_Object;" // load quest item XS
+
#endif
"package main;"
"}"
@@ -2540,17 +2543,44 @@
float y = (float)SvNV(ST(2));
float z = (float)SvNV(ST(3));
float heading = (float)SvNV(ST(4));
+ uint16 id = 0;
if(items == 5)
- quest_manager.CreateGroundObject(itemid, x, y, z, heading);
+ id = quest_manager.CreateGroundObject(itemid, x, y, z, heading);
else{
int32 decay_time = (int32)SvIV(ST(5));
- quest_manager.CreateGroundObject(itemid, x, y, z, heading, decay_time);
+ id = quest_manager.CreateGroundObject(itemid, x, y, z, heading, decay_time);
}
- XSRETURN_EMPTY;
+
+ XSRETURN_IV(id);
}
+XS(XS__CreateGroundObjectFromModel);
+XS(XS__CreateGroundObjectFromModel)
+{
+ dXSARGS;
+ if (items != 5 && items != 6)
+ Perl_croak(aTHX_ "Usage: CreateGroundObjectFromModel(modelname, x, y, z, heading, [type])");
+
+ char * modelname = (char *)SvPV_nolen(ST(0));
+ float x = (float)SvNV(ST(1));
+ float y = (float)SvNV(ST(2));
+ float z = (float)SvNV(ST(3));
+ float heading = (float)SvNV(ST(4));
+ uint16 id = 0;
+
+ if(items == 5)
+ id = quest_manager.CreateGroundObjectFromModel(modelnam e, x, y, z, heading);
+ else{
+ int32 type = (int32)SvIV(ST(5));
+ id = quest_manager.CreateGroundObjectFromModel(modelnam e, x, y, z, heading, type);
+ }
+
+
+ XSRETURN_IV(id);
+}
+
XS(XS__ModifyNPCStat);
XS(XS__ModifyNPCStat)
{
@@ -3157,6 +3187,7 @@
newXS(strcpy(buf, "we"), XS__we, file);
newXS(strcpy(buf, "getlevel"), XS__getlevel, file);
newXS(strcpy(buf, "creategroundobject"), XS__CreateGroundObject, file);
+ newXS(strcpy(buf, "creategroundobjectfrommodel"), XS__CreateGroundObjectFromModel, file);
newXS(strcpy(buf, "modifynpcstat"), XS__ModifyNPCStat, file);
newXS(strcpy(buf, "collectitems"), XS__collectitems, file);
newXS(strcpy(buf, "updatespawntimer"), XS__UpdateSpawnTimer, file);
Index: questmgr.cpp
================================================== =================
--- questmgr.cpp (revision 1556)
+++ questmgr.cpp (working copy)
@@ -1933,11 +1933,20 @@
return 0;
}
-void QuestManager::CreateGroundObject(int32 itemid, float x, float y, float z, float heading, int32 decay_time)
+int16 QuestManager::CreateGroundObject(int32 itemid, float x, float y, float z, float heading, int32 decay_time)
{
- entity_list.CreateGroundObject(itemid, x, y, z, heading, decay_time);
+ int16 entid = 0; //safety check
+ entid = entity_list.CreateGroundObject(itemid, x, y, z, heading, decay_time);
+ return entid;
}
+int16 QuestManager::CreateGroundObjectFromModel(const char *model, float x, float y, float z, float heading, int8 type)
+{
+ int16 entid = 0; //safety check
+ entid = entity_list.CreateGroundObjectFromModel(model, x, y, z, heading, type);
+ return entid;
+}
+
void QuestManager::ModifyNPCStat(const char *identifier, const char *newValue)
{
if(owner){
Index: questmgr.h
================================================== =================
--- questmgr.h (revision 1556)
+++ questmgr.h (working copy)
@@ -191,7 +191,8 @@
bool checktitle(int titlecheck);
void removetitle(int titlecheck);
- void CreateGroundObject(int32 itemid, float x, float y, float z, float heading, int32 decay_time = 300000);
+ int16 CreateGroundObject(int32 itemid, float x, float y, float z, float heading, int32 decay_time = 300000);
+ int16 CreateGroundObjectFromModel(const char* model, float x, float y, float z, float heading, int8 type = 0x00);
void ModifyNPCStat(const char *identifier, const char *newValue);
void UpdateSpawnTimer(int32 id, int32 newTime);
Index: Zone.vcproj
================================================== =================
--- Zone.vcproj (revision 1556)
+++ Zone.vcproj (working copy)
@@ -572,6 +572,10 @@
>
</File>
<File
+ RelativePath=".\perl_object.cpp"
+ >
+ </File>
+ <File
RelativePath=".\perl_perlpacket.cpp"
>
</File>
Check below where it boots up for a list of perl commands. I handpicked the functions that could prove useful.
Image:
http://imgur.com/X5mvr.png
Example Script:
sub EVENT_SAY {
if($text=~/object/i)
{
my @moblist = $entity_list->GetObjectList();
foreach $ent (@moblist)
{
quest::ze(15, $ent->GetDBID())
}
}
}
Diff:
Index: doors.cpp
================================================== =================
--- doors.cpp (revision 1556)
+++ doors.cpp (working copy)
@@ -599,9 +599,4 @@
return false;
}
return true;
-}
-
-
-
-
-
+}
\ No newline at end of file
Index: embperl.cpp
================================================== =================
--- embperl.cpp (revision 1556)
+++ embperl.cpp (working copy)
@@ -38,6 +38,7 @@
EXTERN_C XS(boot_Raid);
EXTERN_C XS(boot_QuestItem);
EXTERN_C XS(boot_HateEntry);
+EXTERN_C XS(boot_Object);
EXTERN_C XS(boot_PerlPacket);
/*XS(XS_Client_new);
//XS(XS_Mob_new);
@@ -88,6 +89,7 @@
newXS(strcpy(buf, "Raid::boot_Raid"), boot_Raid, file);
newXS(strcpy(buf, "QuestItem::boot_QuestItem"), boot_QuestItem, file);
newXS(strcpy(buf, "HateEntry::boot_HateEntry"), boot_HateEntry, file);
+ newXS(strcpy(buf, "Object::boot_Object"), boot_Object, file);
;
#endif
#endif
Index: entity.cpp
================================================== =================
--- entity.cpp (revision 1556)
+++ entity.cpp (working copy)
@@ -1000,6 +1000,40 @@
return 0;
}
+Object* EntityList::GetObjectByDBID(int32 id) {
+ LinkedListIterator<Object*> iterator(object_list);
+
+ iterator.Reset();
+ while(iterator.MoreElements())
+ {
+ if (iterator.GetData())
+ {
+ if (iterator.GetData()->CastToObject()->GetDBID() == id) {
+ return iterator.GetData();
+ }
+ }
+ iterator.Advance();
+ }
+ return 0;
+}
+
+Object* EntityList::GetObjectByID(int16 id) {
+ LinkedListIterator<Object*> iterator(object_list);
+
+ iterator.Reset();
+ while(iterator.MoreElements())
+ {
+ if (iterator.GetData())
+ {
+ if (iterator.GetData()->CastToObject()->GetID() == id) {
+ return iterator.GetData();
+ }
+ }
+ iterator.Advance();
+ }
+ return 0;
+}
+
NPC* EntityList::GetNPCByNPCTypeID(int32 npc_id)
{
if (npc_id == 0)
@@ -3833,7 +3867,7 @@
}
}
-void EntityList::CreateGroundObject(int32 itemid, float x, float y, float z, float heading, int32 decay_time)
+int16 EntityList::CreateGroundObject(int32 itemid, float x, float y, float z, float heading, int32 decay_time)
{
const Item_Struct* is = database.GetItem(itemid);
if(is)
@@ -3845,10 +3879,28 @@
entity_list.AddObject(object, true);
object->StartDecay();
safe_delete(i);
+ if(object)
+ return object->GetID();
}
+ return 0; // fell through itemstruct
}
+ return 0; // fell through everything, this is bad/incomplete from perl
}
+int16 EntityList::CreateGroundObjectFromModel(const char *model, float x, float y, float z, float heading, int8 type)
+{
+ if(model)
+ {
+ Object* object = new Object(model,x,y,z,heading,type);
+ entity_list.AddObject(object, true);
+ //object->StartDecay();
+ if(object)
+ return object->GetID();
+ // fell through itemstruct
+ }
+ return 0; // fell through everything, this is bad/incomplete from perl
+}
+
Mob* EntityList::GetTargetForMez(Mob* caster)
{
if(!caster)
@@ -4332,6 +4384,21 @@
return n_list;
}
+
+list<Object*> EntityList::GetObjectList()
+{
+ list<Object*> n_list;
+ LinkedListIterator<Object*> iterator(object_list);
+ iterator.Reset();
+ while(iterator.MoreElements())
+ {
+ Object *ent = iterator.GetData();
+ n_list.push_back(ent);
+ iterator.Advance();
+ }
+ return n_list;
+}
+
list<Client*> EntityList::GetClientList()
{
list<Client*> c_list;
Index: entity.h
================================================== =================
--- entity.h (revision 1556)
+++ entity.h (working copy)
@@ -131,6 +131,8 @@
Mob* GetMob(const char* name);
Mob* GetMobByNpcTypeID(int32 get_id);
NPC* GetNPCByID(int16 id);
+ Object* GetObjectByID(int16 id);
+ Object* GetObjectByDBID(int32 id);
NPC* GetNPCByNPCTypeID(int32 npc_id);
Client* GetClientByName(const char *name);
Client* GetClientByAccID(int32 accid);
@@ -342,7 +344,8 @@
void SaveAllClientsTaskState();
void ReloadAllClientsTaskState(int TaskID=0);
- void CreateGroundObject(int32 itemid, float x, float y, float z, float heading, int32 decay_time = 300000);
+ int16 CreateGroundObject(int32 itemid, float x, float y, float z, float heading, int32 decay_time = 300000);
+ int16 CreateGroundObjectFromModel(const char *model, float x, float y, float z, float heading, int8 type = 0x00);
void ZoneWho(Client *c, Who_All_Struct* Who);
void UnMarkNPC(int16 ID);
@@ -356,6 +359,7 @@
list<Mob*> GetMobList();
list<NPC*> GetNPCList();
+ list<Object*> GetObjectList();
list<Client*> GetClientList();
list<Corpse*> GetCorpseList();
void DepopAll(int NPCTypeID, bool StartSpawnTimer = true);
Index: Object.cpp
================================================== =================
--- Object.cpp (revision 1556)
+++ Object.cpp (working copy)
@@ -221,6 +221,40 @@
}
}
+Object::Object(const char *model, float x, float y, float z, float heading, int8 type)
+ : respawn_timer(0), decay_timer(300000)
+{
+ user = NULL;
+ last_user = NULL;
+
+ // Initialize members
+ m_id = 0;
+ m_inst = NULL;
+ m_type = type;
+ m_icon = 0;
+ m_inuse = false;
+ m_ground_spawn = false;
+ // Set as much struct data as we can
+ memset(&m_data, 0, sizeof(Object_Struct));
+ m_data.heading = heading;
+ m_data.x = x;
+ m_data.y = y;
+ m_data.z = z;
+ m_data.zone_id = zone->GetZoneID();
+ //Hardcoded portion for unknown members
+ m_data.unknown024 = 0x7f001194;
+ m_data.unknown064 = 0; //0x0000000D;
+ m_data.unknown068 = 0; //0x0000001E;
+ m_data.unknown072 = 0; //0x000032ED;
+ m_data.unknown076 = 0x0000d5fe;
+ m_data.unknown084 = 0xFFFFFFFF;
+
+ if(model)
+ strcpy(m_data.object_name, model);
+ else
+ strcpy(m_data.object_name, "IT64_ACTORDEF"); //default object name if model isn't specified for some unknown reason
+}
+
Object::~Object()
{
safe_delete(m_inst);
@@ -263,6 +297,19 @@
return true;
}
+int16 Object::VarSave()
+{
+ if (m_id) {
+ // Update existing
+ database.UpdateObject(m_id, m_type, m_icon, m_data, m_inst);
+ }
+ else {
+ // Doesn't yet exist, add now
+ m_id = database.AddObject(m_type, m_icon, m_data, m_inst);
+ }
+ return m_id;
+}
+
// Remove object from database
void Object::Delete(bool reset_state)
{
@@ -648,6 +695,110 @@
return this->m_icon;
}
+float Object::GetX()
+{
+ return this->m_data.x;
+}
+
+float Object::GetY()
+{
+ return this->m_data.y;
+}
+
+
+float Object::GetZ()
+{
+ return this->m_data.z;
+}
+
+float Object::GetHeadingData()
+{
+ return this->m_data.heading;
+}
+
+void Object::SetX(float pos)
+{
+ this->m_data.x = pos;
+
+ EQApplicationPacket* app = new EQApplicationPacket();
+ EQApplicationPacket* app2 = new EQApplicationPacket();
+ this->CreateDeSpawnPacket(app);
+ this->CreateSpawnPacket(app2);
+ entity_list.QueueClients(0, app);
+ entity_list.QueueClients(0, app2);
+ safe_delete(app);
+ safe_delete(app2);
+}
+
+void Object::SetY(float pos)
+{
+ this->m_data.y = pos;
+
+ EQApplicationPacket* app = new EQApplicationPacket();
+ EQApplicationPacket* app2 = new EQApplicationPacket();
+ this->CreateDeSpawnPacket(app);
+ this->CreateSpawnPacket(app2);
+ entity_list.QueueClients(0, app);
+ entity_list.QueueClients(0, app2);
+ safe_delete(app);
+ safe_delete(app2);
+}
+
+void Object::Depop()
+{
+ EQApplicationPacket* app = new EQApplicationPacket();
+ this->CreateDeSpawnPacket(app);
+ entity_list.QueueClients(0, app);
+ safe_delete(app);
+ entity_list.RemoveObject(this->GetID());
+}
+
+void Object::Repop()
+{
+ EQApplicationPacket* app = new EQApplicationPacket();
+ EQApplicationPacket* app2 = new EQApplicationPacket();
+ this->CreateDeSpawnPacket(app);
+ this->CreateSpawnPacket(app2);
+ entity_list.QueueClients(0, app);
+ entity_list.QueueClients(0, app2);
+ safe_delete(app);
+ safe_delete(app2);
+}
+
+
+
+void Object::SetZ(float pos)
+{
+ this->m_data.z = pos;
+
+ EQApplicationPacket* app = new EQApplicationPacket();
+ EQApplicationPacket* app2 = new EQApplicationPacket();
+ this->CreateDeSpawnPacket(app);
+ this->CreateSpawnPacket(app2);
+ entity_list.QueueClients(0, app);
+ entity_list.QueueClients(0, app2);
+ safe_delete(app);
+ safe_delete(app2);
+}
+
+void Object::SetModelName(const char* modelname)
+{
+ strncpy(m_data.object_name, modelname, 20); // 20 is the max for chars in object_name, this should be safe
+ EQApplicationPacket* app = new EQApplicationPacket();
+ EQApplicationPacket* app2 = new EQApplicationPacket();
+ this->CreateDeSpawnPacket(app);
+ this->CreateSpawnPacket(app2);
+ entity_list.QueueClients(0, app);
+ entity_list.QueueClients(0, app2);
+ safe_delete(app);
+ safe_delete(app2);
+}
+
+const char* Object::GetModelName()
+{
+ return this->m_data.object_name;
+}
+
void Object::SetIcon(int32 icon)
{
this->m_icon = icon;
@@ -719,6 +870,14 @@
this->m_data.x = x;
this->m_data.y = y;
this->m_data.z = z;
+ EQApplicationPacket* app = new EQApplicationPacket();
+ EQApplicationPacket* app2 = new EQApplicationPacket();
+ this->CreateDeSpawnPacket(app);
+ this->CreateSpawnPacket(app2);
+ entity_list.QueueClients(0, app);
+ entity_list.QueueClients(0, app2);
+ safe_delete(app);
+ safe_delete(app2);
}
void Object::GetHeading(float* heading)
@@ -732,5 +891,13 @@
void Object::SetHeading(float heading)
{
this->m_data.heading = heading;
+ EQApplicationPacket* app = new EQApplicationPacket();
+ EQApplicationPacket* app2 = new EQApplicationPacket();
+ this->CreateDeSpawnPacket(app);
+ this->CreateSpawnPacket(app2);
+ entity_list.QueueClients(0, app);
+ entity_list.QueueClients(0, app2);
+ safe_delete(app);
+ safe_delete(app2);
}
Index: object.h
================================================== =================
--- object.h (revision 1556)
+++ object.h (working copy)
@@ -135,6 +135,7 @@
// Loading object from client dropping item on ground
Object(Client* client, const ItemInst* inst);
Object(const ItemInst *inst, float x, float y, float z, float heading, int32 decay_time);
+ Object(const char *model, float x, float y, float z, float heading, int8 type);
// Destructor
~Object();
@@ -153,6 +154,8 @@
// Packet functions
void CreateSpawnPacket(EQApplicationPacket* app);
void CreateDeSpawnPacket(EQApplicationPacket* app);
+ void Depop();
+ void Repop();
//Decay functions
void StartDecay() {decay_timer.Start();}
@@ -165,6 +168,7 @@
// Override base class implementations
virtual bool IsObject() const { return true; }
virtual bool Save();
+ virtual int16 VarSave();
virtual void SetID(int16 set_id);
void ClearUser() { user = NULL; }
@@ -172,6 +176,7 @@
int32 GetDBID();
int32 GetType();
void SetType(int32 type);
+ void SetDBID(int32 dbid);
int32 GetIcon();
void SetIcon(int32 icon);
int32 GetItemID();
@@ -181,6 +186,15 @@
void GetLocation(float* x, float* y, float* z);
void SetLocation(float x, float y, float z);
void GetHeading(float* heading);
+ float GetX();
+ float GetY();
+ float GetZ();
+ float GetHeadingData();
+ void SetX(float pos);
+ void SetY(float pos);
+ void SetZ(float pos);
+ void SetModelName(const char* modelname);
+ const char* GetModelName();
void SetHeading(float heading);
protected:
Index: perl_entity.cpp
================================================== =================
--- perl_entity.cpp (revision 1556)
+++ perl_entity.cpp (working copy)
@@ -173,6 +173,61 @@
XSRETURN(1);
}
+XS(XS_EntityList_GetObjectByDBID); /* prototype to pass -Wmissing-prototypes */
+XS(XS_EntityList_GetObjectByDBID)
+{
+ dXSARGS;
+ if (items != 2)
+ Perl_croak(aTHX_ "Usage: EntityList::GetObjectByDBID(THIS, id)");
+ {
+ EntityList * THIS;
+ Object * RETVAL;
+ int32 id = (int32)SvUV(ST(1));
+
+ if (sv_derived_from(ST(0), "EntityList")) {
+ IV tmp = SvIV((SV*)SvRV(ST(0)));
+ THIS = INT2PTR(EntityList *,tmp);
+ }
+ else
+ Perl_croak(aTHX_ "THIS is not of type EntityList");
+ if(THIS == NULL)
+ Perl_croak(aTHX_ "THIS is NULL, avoiding crash.");
+
+ RETVAL = THIS->GetObjectByDBID(id);
+ ST(0) = sv_newmortal();
+ sv_setref_pv(ST(0), "Object", (void*)RETVAL);
+ }
+ XSRETURN(1);
+}
+
+XS(XS_EntityList_GetObjectByID); /* prototype to pass -Wmissing-prototypes */
+XS(XS_EntityList_GetObjectByID)
+{
+ dXSARGS;
+ if (items != 2)
+ Perl_croak(aTHX_ "Usage: EntityList::GetObjectByID(THIS, id)");
+ {
+ EntityList * THIS;
+ Object * RETVAL;
+ int32 id = (int32)SvUV(ST(1));
+
+ if (sv_derived_from(ST(0), "EntityList")) {
+ IV tmp = SvIV((SV*)SvRV(ST(0)));
+ THIS = INT2PTR(EntityList *,tmp);
+ }
+ else
+ Perl_croak(aTHX_ "THIS is not of type EntityList");
+ if(THIS == NULL)
+ Perl_croak(aTHX_ "THIS is NULL, avoiding crash.");
+
+ RETVAL = THIS->GetObjectByID(id);
+ ST(0) = sv_newmortal();
+ sv_setref_pv(ST(0), "Object", (void*)RETVAL);
+ }
+ XSRETURN(1);
+}
+
+
XS(XS_EntityList_GetNPCByNPCTypeID); /* prototype to pass -Wmissing-prototypes */
XS(XS_EntityList_GetNPCByNPCTypeID)
{
@@ -1797,6 +1852,42 @@
XSRETURN(num_npcs);
}
+XS(XS_EntityList_GetObjectList); /* prototype to pass -Wmissing-prototypes */
+XS(XS_EntityList_GetObjectList)
+{
+ dXSARGS;
+ int num_objects = 0;
+ if (items != 1)
+ Perl_croak(aTHX_ "Usage: EntityList::GetObjectList(THIS)");
+ {
+ EntityList *THIS;
+
+ if (sv_derived_from(ST(0), "EntityList")) {
+ IV tmp = SvIV((SV*)SvRV(ST(0)));
+ THIS = INT2PTR(EntityList *,tmp);
+ }
+ else
+ Perl_croak(aTHX_ "THIS is not of type EntityList");
+
+ if(THIS == NULL)
+ Perl_croak(aTHX_ "THIS is NULL, avoiding crash.");
+
+ std::list<Object*> object_list = entity_list.GetObjectList();
+ std::list<Object*>::iterator iter = object_list.begin();
+
+ while(iter != object_list.end())
+ {
+ Object *entry = (*iter);
+ ST(0) = sv_newmortal();
+ sv_setref_pv(ST(0), "Object", (void*)entry);
+ XPUSHs(ST(0));
+ num_objects++;
+ iter++;
+ }
+ }
+ XSRETURN(num_objects);
+}
+
XS(XS_EntityList_GetCorpseList); /* prototype to pass -Wmissing-prototypes */
XS(XS_EntityList_GetCorpseList)
{
@@ -1884,6 +1975,8 @@
newXSproto(strcpy(buf, "GetMobByID"), XS_EntityList_GetMobByID, file, "$$");
newXSproto(strcpy(buf, "GetMobByNpcTypeID"), XS_EntityList_GetMobByNpcTypeID, file, "$$");
newXSproto(strcpy(buf, "GetNPCByID"), XS_EntityList_GetNPCByID, file, "$$");
+ newXSproto(strcpy(buf, "GetObjectByID"), XS_EntityList_GetObjectByID, file, "$");
+ newXSproto(strcpy(buf, "GetObjectByDBID"), XS_EntityList_GetObjectByDBID, file, "$");
newXSproto(strcpy(buf, "GetNPCByNPCTypeID"), XS_EntityList_GetNPCByNPCTypeID, file, "$$");
newXSproto(strcpy(buf, "GetClientByName"), XS_EntityList_GetClientByName, file, "$$");
newXSproto(strcpy(buf, "GetClientByAccID"), XS_EntityList_GetClientByAccID, file, "$$");
@@ -1940,6 +2033,7 @@
newXSproto(strcpy(buf, "GetMobList"), XS_EntityList_GetMobList, file, "$");
newXSproto(strcpy(buf, "GetClientList"), XS_EntityList_GetClientList, file, "$");
newXSproto(strcpy(buf, "GetNPCList"), XS_EntityList_GetNPCList, file, "$");
+ newXSproto(strcpy(buf, "GetObjectList"), XS_EntityList_GetObjectList, file, "$");
newXSproto(strcpy(buf, "GetCorpseList"), XS_EntityList_GetCorpseList, file, "$");
newXSproto(strcpy(buf, "SignalAllClients"), XS_EntityList_SignalAllClients, file, "$$");
XSRETURN_YES;
Index: perl_object.cpp
================================================== =================
--- perl_object.cpp (revision 0)
+++ perl_object.cpp (revision 0)
@@ -0,0 +1,883 @@
+/*
+ * This file was generated automatically by xsubpp version 1.9508 from the
+ * contents of tmp. Do not edit this file, edit tmp instead.
+ *
+ * ANY CHANGES MADE HERE WILL BE LOST!
+ *
+ */
+
+
+/* EQEMu: Everquest Server Emulator
+ Copyright (C) 2001-2004 EQEMu Development Team (http://eqemulator.net)
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; version 2 of the License.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY except by those people which sell it, which
+ are required to give you total support for your newly bought product;
+ without even the implied warranty of MERCHANTABILITY or FITNESS FOR
+ A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+*/
+
+#include "features.h"
+#ifdef EMBPERL_XS_CLASSES
+#include "../common/debug.h"
+#include "embperl.h"
+
+#include "object.h"
+
+#ifdef THIS /* this macro seems to leak out on some systems */
+#undef THIS
+#endif
+
+XS(XS_Object_IsGroundSpawn); /* prototype to pass -Wmissing-prototypes */
+XS(XS_Object_IsGroundSpawn)
+{
+ dXSARGS;
+ if (items != 1)
+ Perl_croak(aTHX_ "Usage: Object::IsGroundSpawn(THIS)");
+ {
+ Object * THIS;
+ bool RETVAL;
+
+ if (sv_derived_from(ST(0), "Object")) {
+ IV tmp = SvIV((SV*)SvRV(ST(0)));
+ THIS = INT2PTR(Object *,tmp);
+ }
+ else
+ Perl_croak(aTHX_ "THIS is not of type Object");
+ if(THIS == NULL)
+ Perl_croak(aTHX_ "THIS is NULL, avoiding crash.");
+
+ RETVAL = THIS->IsGroundSpawn();
+ ST(0) = boolSV(RETVAL);
+ sv_2mortal(ST(0));
+ }
+ XSRETURN(1);
+}
+
+
+
+XS(XS_Object_Close); /* prototype to pass -Wmissing-prototypes */
+XS(XS_Object_Close)
+{
+ dXSARGS;
+ if (items != 1)
+ Perl_croak(aTHX_ "Usage: Object::Close(THIS)");
+ {
+ Object * THIS;
+
+ if (sv_derived_from(ST(0), "Object")) {
+ IV tmp = SvIV((SV*)SvRV(ST(0)));
+ THIS = INT2PTR(Object *,tmp);
+ }
+ else
+ Perl_croak(aTHX_ "THIS is not of type Object");
+ if(THIS == NULL)
+ Perl_croak(aTHX_ "THIS is NULL, avoiding crash.");
+
+ THIS->Close();
+ }
+ XSRETURN_EMPTY;
+}
+
+
+XS(XS_Object_Delete); /* prototype to pass -Wmissing-prototypes */
+XS(XS_Object_Delete)
+{
+ dXSARGS;
+ if (items < 1 || items > 2)
+ Perl_croak(aTHX_ "Usage: Object::Delete(THIS, reset_state=false)");
+ {
+ Object * THIS;
+ bool reset_state;
+
+ if (sv_derived_from(ST(0), "Object")) {
+ IV tmp = SvIV((SV*)SvRV(ST(0)));
+ THIS = INT2PTR(Object *,tmp);
+ }
+ else
+ Perl_croak(aTHX_ "THIS is not of type Object");
+ if(THIS == NULL)
+ Perl_croak(aTHX_ "THIS is NULL, avoiding crash.");
+
+ if (items < 2)
+ reset_state = false;
+ else {
+ reset_state = (bool)SvTRUE(ST(1));
+ }
+
+ THIS->Delete(reset_state);
+ }
+ XSRETURN_EMPTY;
+}
+XS(XS_Object_StartDecay); /* prototype to pass -Wmissing-prototypes */
+XS(XS_Object_StartDecay)
+{
+ dXSARGS;
+ if (items != 1)
+ Perl_croak(aTHX_ "Usage: Object::StartDecay(THIS)");
+ {
+ Object * THIS;
+
+ if (sv_derived_from(ST(0), "Object")) {
+ IV tmp = SvIV((SV*)SvRV(ST(0)));
+ THIS = INT2PTR(Object *,tmp);
+ }
+ else
+ Perl_croak(aTHX_ "THIS is not of type Object");
+ if(THIS == NULL)
+ Perl_croak(aTHX_ "THIS is NULL, avoiding crash.");
+
+ THIS->StartDecay();
+ }
+ XSRETURN_EMPTY;
+}
+
+
+XS(XS_Object_DeleteItem); /* prototype to pass -Wmissing-prototypes */
+XS(XS_Object_DeleteItem)
+{
+ dXSARGS;
+ if (items != 2)
+ Perl_croak(aTHX_ "Usage: Object::DeleteItem(THIS, index)");
+ {
+ Object * THIS;
+ uint8 index = (uint8)SvUV(ST(1));
+
+ if (sv_derived_from(ST(0), "Object")) {
+ IV tmp = SvIV((SV*)SvRV(ST(0)));
+ THIS = INT2PTR(Object *,tmp);
+ }
+ else
+ Perl_croak(aTHX_ "THIS is not of type Object");
+ if(THIS == NULL)
+ Perl_croak(aTHX_ "THIS is NULL, avoiding crash.");
+
+ THIS->DeleteItem(index);
+ }
+ XSRETURN_EMPTY;
+}
+
+XS(XS_Object_IsObject); /* prototype to pass -Wmissing-prototypes */
+XS(XS_Object_IsObject)
+{
+ dXSARGS;
+ if (items != 1)
+ Perl_croak(aTHX_ "Usage: Object::IsObject(THIS)");
+ {
+ Object * THIS;
+ bool RETVAL;
+
+ if (sv_derived_from(ST(0), "Object")) {
+ IV tmp = SvIV((SV*)SvRV(ST(0)));
+ THIS = INT2PTR(Object *,tmp);
+ }
+ else
+ Perl_croak(aTHX_ "THIS is not of type Object");
+ if(THIS == NULL)
+ Perl_croak(aTHX_ "THIS is NULL, avoiding crash.");
+
+ RETVAL = THIS->IsObject();
+ ST(0) = boolSV(RETVAL);
+ sv_2mortal(ST(0));
+ }
+ XSRETURN(1);
+}
+
+
+XS(XS_Object_Save); /* prototype to pass -Wmissing-prototypes */
+XS(XS_Object_Save)
+{
+ dXSARGS;
+ if (items != 1)
+ Perl_croak(aTHX_ "Usage: Object::Save(THIS)");
+ {
+ Object * THIS;
+ bool RETVAL;
+
+ if (sv_derived_from(ST(0), "Object")) {
+ IV tmp = SvIV((SV*)SvRV(ST(0)));
+ THIS = INT2PTR(Object *,tmp);
+ }
+ else
+ Perl_croak(aTHX_ "THIS is not of type Object");
+ if(THIS == NULL)
+ Perl_croak(aTHX_ "THIS is NULL, avoiding crash.");
+
+ RETVAL = THIS->Save();
+ ST(0) = boolSV(RETVAL);
+ sv_2mortal(ST(0));
+ }
+ XSRETURN(1);
+}
+
+
+XS(XS_Object_SetID); /* prototype to pass -Wmissing-prototypes */
+XS(XS_Object_SetID)
+{
+ dXSARGS;
+ if (items != 2)
+ Perl_croak(aTHX_ "Usage: Object::SetID(THIS, set_id)");
+ {
+ Object * THIS;
+ int16 set_id = (int16)SvUV(ST(1));
+
+ if (sv_derived_from(ST(0), "Object")) {
+ IV tmp = SvIV((SV*)SvRV(ST(0)));
+ THIS = INT2PTR(Object *,tmp);
+ }
+ else
+ Perl_croak(aTHX_ "THIS is not of type Object");
+ if(THIS == NULL)
+ Perl_croak(aTHX_ "THIS is NULL, avoiding crash.");
+
+ THIS->SetID(set_id);
+ }
+ XSRETURN_EMPTY;
+}
+
+
+XS(XS_Object_ClearUser); /* prototype to pass -Wmissing-prototypes */
+XS(XS_Object_ClearUser)
+{
+ dXSARGS;
+ if (items != 1)
+ Perl_croak(aTHX_ "Usage: Object::ClearUser(THIS)");
+ {
+ Object * THIS;
+
+ if (sv_derived_from(ST(0), "Object")) {
+ IV tmp = SvIV((SV*)SvRV(ST(0)));
+ THIS = INT2PTR(Object *,tmp);
+ }
+ else
+ Perl_croak(aTHX_ "THIS is not of type Object");
+ if(THIS == NULL)
+ Perl_croak(aTHX_ "THIS is NULL, avoiding crash.");
+
+ THIS->ClearUser();
+ }
+ XSRETURN_EMPTY;
+}
+
+
+XS(XS_Object_GetDBID); /* prototype to pass -Wmissing-prototypes */
+XS(XS_Object_GetDBID)
+{
+ dXSARGS;
+ if (items != 1)
+ Perl_croak(aTHX_ "Usage: Object::GetDBID(THIS)");
+ {
+ Object * THIS;
+ int32 RETVAL;
+ dXSTARG;
+
+ if (sv_derived_from(ST(0), "Object")) {
+ IV tmp = SvIV((SV*)SvRV(ST(0)));
+ THIS = INT2PTR(Object *,tmp);
+ }
+ else
+ Perl_croak(aTHX_ "THIS is not of type Object");
+ if(THIS == NULL)
+ Perl_croak(aTHX_ "THIS is NULL, avoiding crash.");
+
+ RETVAL = THIS->GetDBID();
+ XSprePUSH; PUSHu((UV)RETVAL);
+ }
+ XSRETURN(1);
+}
+
+XS(XS_Object_GetID); /* prototype to pass -Wmissing-prototypes */
+XS(XS_Object_GetID)
+{
+ dXSARGS;
+ if (items != 1)
+ Perl_croak(aTHX_ "Usage: Object::GetID(THIS)");
+ {
+ Object * THIS;
+ int16 RETVAL;
+ dXSTARG;
+
+ if (sv_derived_from(ST(0), "Object")) {
+ IV tmp = SvIV((SV*)SvRV(ST(0)));
+ THIS = INT2PTR(Object *,tmp);
+ }
+ else
+ Perl_croak(aTHX_ "THIS is not of type Object");
+ if(THIS == NULL)
+ Perl_croak(aTHX_ "THIS is NULL, avoiding crash.");
+
+ RETVAL = THIS->GetID();
+ XSprePUSH; PUSHu((UV)RETVAL);
+ }
+ XSRETURN(1);
+}
+
+XS(XS_Object_GetX); /* prototype to pass -Wmissing-prototypes */
+XS(XS_Object_GetX)
+{
+ dXSARGS;
+ if (items != 1)
+ Perl_croak(aTHX_ "Usage: Object::GetX(THIS)");
+ {
+ Object * THIS;
+ float RETVAL;
+ dXSTARG;
+
+ if (sv_derived_from(ST(0), "Object")) {
+ IV tmp = SvIV((SV*)SvRV(ST(0)));
+ THIS = INT2PTR(Object *,tmp);
+ }
+ else
+ Perl_croak(aTHX_ "THIS is not of type Object");
+ if(THIS == NULL)
+ Perl_croak(aTHX_ "THIS is NULL, avoiding crash.");
+
+ RETVAL = THIS->GetX();
+ XSprePUSH; PUSHn((double)RETVAL);
+ }
+ XSRETURN(1);
+}
+
+XS(XS_Object_GetY); /* prototype to pass -Wmissing-prototypes */
+XS(XS_Object_GetY)
+{
+ dXSARGS;
+ if (items != 1)
+ Perl_croak(aTHX_ "Usage: Object::GetY(THIS)");
+ {
+ Object * THIS;
+ float RETVAL;
+ dXSTARG;
+
+ if (sv_derived_from(ST(0), "Object")) {
+ IV tmp = SvIV((SV*)SvRV(ST(0)));
+ THIS = INT2PTR(Object *,tmp);
+ }
+ else
+ Perl_croak(aTHX_ "THIS is not of type Object");
+ if(THIS == NULL)
+ Perl_croak(aTHX_ "THIS is NULL, avoiding crash.");
+
+ RETVAL = THIS->GetY();
+ XSprePUSH; PUSHn((double)RETVAL);
+ }
+ XSRETURN(1);
+}
+
+XS(XS_Object_GetZ); /* prototype to pass -Wmissing-prototypes */
+XS(XS_Object_GetZ)
+{
+ dXSARGS;
+ if (items != 1)
+ Perl_croak(aTHX_ "Usage: Object::GetZ(THIS)");
+ {
+ Object * THIS;
+ float RETVAL;
+ dXSTARG;
+
+ if (sv_derived_from(ST(0), "Object")) {
+ IV tmp = SvIV((SV*)SvRV(ST(0)));
+ THIS = INT2PTR(Object *,tmp);
+ }
+ else
+ Perl_croak(aTHX_ "THIS is not of type Object");
+ if(THIS == NULL)
+ Perl_croak(aTHX_ "THIS is NULL, avoiding crash.");
+
+ RETVAL = THIS->GetZ();
+ XSprePUSH; PUSHn((double)RETVAL);
+ }
+ XSRETURN(1);
+}
+
+XS(XS_Object_GetHeading); /* prototype to pass -Wmissing-prototypes */
+XS(XS_Object_GetHeading)
+{
+ dXSARGS;
+ if (items != 1)
+ Perl_croak(aTHX_ "Usage: Object::GetHeadingData(THIS)");
+ {
+ Object * THIS;
+ float RETVAL;
+ dXSTARG;
+
+ if (sv_derived_from(ST(0), "Object")) {
+ IV tmp = SvIV((SV*)SvRV(ST(0)));
+ THIS = INT2PTR(Object *,tmp);
+ }
+ else
+ Perl_croak(aTHX_ "THIS is not of type Object");
+ if(THIS == NULL)
+ Perl_croak(aTHX_ "THIS is NULL, avoiding crash.");
+
+ RETVAL = THIS->GetHeadingData();
+ XSprePUSH; PUSHn((double)RETVAL);
+ }
+ XSRETURN(1);
+}
+
+XS(XS_Object_VarSave); /* prototype to pass -Wmissing-prototypes */
+XS(XS_Object_VarSave)
+{
+ dXSARGS;
+ if (items != 1)
+ Perl_croak(aTHX_ "Usage: Object::VarSave(THIS)");
+ {
+ Object * THIS;
+ int32 RETVAL;
+ dXSTARG;
+
+ if (sv_derived_from(ST(0), "Object")) {
+ IV tmp = SvIV((SV*)SvRV(ST(0)));
+ THIS = INT2PTR(Object *,tmp);
+ }
+ else
+ Perl_croak(aTHX_ "THIS is not of type Object");
+ if(THIS == NULL)
+ Perl_croak(aTHX_ "THIS is NULL, avoiding crash.");
+
+ RETVAL = THIS->VarSave();
+ XSprePUSH; PUSHu((UV)RETVAL);
+ }
+ XSRETURN(1);
+}
+
+
+XS(XS_Object_GetType); /* prototype to pass -Wmissing-prototypes */
+XS(XS_Object_GetType)
+{
+ dXSARGS;
+ if (items != 1)
+ Perl_croak(aTHX_ "Usage: Object::GetType(THIS)");
+ {
+ Object * THIS;
+ int32 RETVAL;
+ dXSTARG;
+
+ if (sv_derived_from(ST(0), "Object")) {
+ IV tmp = SvIV((SV*)SvRV(ST(0)));
+ THIS = INT2PTR(Object *,tmp);
+ }
+ else
+ Perl_croak(aTHX_ "THIS is not of type Object");
+ if(THIS == NULL)
+ Perl_croak(aTHX_ "THIS is NULL, avoiding crash.");
+
+ RETVAL = THIS->GetType();
+ XSprePUSH; PUSHu((UV)RETVAL);
+ }
+ XSRETURN(1);
+}
+
+
+XS(XS_Object_SetType); /* prototype to pass -Wmissing-prototypes */
+XS(XS_Object_SetType)
+{
+ dXSARGS;
+ if (items != 2)
+ Perl_croak(aTHX_ "Usage: Object::SetType(THIS, type)");
+ {
+ Object * THIS;
+ int32 type = (int32)SvUV(ST(1));
+
+ if (sv_derived_from(ST(0), "Object")) {
+ IV tmp = SvIV((SV*)SvRV(ST(0)));
+ THIS = INT2PTR(Object *,tmp);
+ }
+ else
+ Perl_croak(aTHX_ "THIS is not of type Object");
+ if(THIS == NULL)
+ Perl_croak(aTHX_ "THIS is NULL, avoiding crash.");
+
+ THIS->SetType(type);
+ }
+ XSRETURN_EMPTY;
+}
+
+
+XS(XS_Object_GetIcon); /* prototype to pass -Wmissing-prototypes */
+XS(XS_Object_GetIcon)
+{
+ dXSARGS;
+ if (items != 1)
+ Perl_croak(aTHX_ "Usage: Object::GetIcon(THIS)");
+ {
+ Object * THIS;
+ int32 RETVAL;
+ dXSTARG;
+
+ if (sv_derived_from(ST(0), "Object")) {
+ IV tmp = SvIV((SV*)SvRV(ST(0)));
+ THIS = INT2PTR(Object *,tmp);
+ }
+ else
+ Perl_croak(aTHX_ "THIS is not of type Object");
+ if(THIS == NULL)
+ Perl_croak(aTHX_ "THIS is NULL, avoiding crash.");
+
+ RETVAL = THIS->GetIcon();
+ XSprePUSH; PUSHu((UV)RETVAL);
+ }
+ XSRETURN(1);
+}
+
+
+XS(XS_Object_SetIcon); /* prototype to pass -Wmissing-prototypes */
+XS(XS_Object_SetIcon)
+{
+ dXSARGS;
+ if (items != 2)
+ Perl_croak(aTHX_ "Usage: Object::SetIcon(THIS, icon)");
+ {
+ Object * THIS;
+ int32 icon = (int32)SvUV(ST(1));
+
+ if (sv_derived_from(ST(0), "Object")) {
+ IV tmp = SvIV((SV*)SvRV(ST(0)));
+ THIS = INT2PTR(Object *,tmp);
+ }
+ else
+ Perl_croak(aTHX_ "THIS is not of type Object");
+ if(THIS == NULL)
+ Perl_croak(aTHX_ "THIS is NULL, avoiding crash.");
+
+ THIS->SetIcon(icon);
+ }
+ XSRETURN_EMPTY;
+}
+
+
+XS(XS_Object_GetItemID); /* prototype to pass -Wmissing-prototypes */
+XS(XS_Object_GetItemID)
+{
+ dXSARGS;
+ if (items != 1)
+ Perl_croak(aTHX_ "Usage: Object::GetItemID(THIS)");
+ {
+ Object * THIS;
+ int32 RETVAL;
+ dXSTARG;
+
+ if (sv_derived_from(ST(0), "Object")) {
+ IV tmp = SvIV((SV*)SvRV(ST(0)));
+ THIS = INT2PTR(Object *,tmp);
+ }
+ else
+ Perl_croak(aTHX_ "THIS is not of type Object");
+ if(THIS == NULL)
+ Perl_croak(aTHX_ "THIS is NULL, avoiding crash.");
+
+ RETVAL = THIS->GetItemID();
+ XSprePUSH; PUSHu((UV)RETVAL);
+ }
+ XSRETURN(1);
+}
+
+
+XS(XS_Object_SetItemID); /* prototype to pass -Wmissing-prototypes */
+XS(XS_Object_SetItemID)
+{
+ dXSARGS;
+ if (items != 2)
+ Perl_croak(aTHX_ "Usage: Object::SetItemID(THIS, itemid)");
+ {
+ Object * THIS;
+ int32 itemid = (int32)SvUV(ST(1));
+
+ if (sv_derived_from(ST(0), "Object")) {
+ IV tmp = SvIV((SV*)SvRV(ST(0)));
+ THIS = INT2PTR(Object *,tmp);
+ }
+ else
+ Perl_croak(aTHX_ "THIS is not of type Object");
+ if(THIS == NULL)
+ Perl_croak(aTHX_ "THIS is NULL, avoiding crash.");
+
+ THIS->SetItemID(itemid);
+ }
+ XSRETURN_EMPTY;
+}
+
+XS(XS_Object_SetLocation); /* prototype to pass -Wmissing-prototypes */
+XS(XS_Object_SetLocation)
+{
+ dXSARGS;
+ if (items != 4)
+ Perl_croak(aTHX_ "Usage: Object::SetLocation(THIS, x, y, z)");
+ {
+ Object * THIS;
+ float x = (float)SvNV(ST(1));
+ float y = (float)SvNV(ST(2));
+ float z = (float)SvNV(ST(3));
+
+ if (sv_derived_from(ST(0), "Object")) {
+ IV tmp = SvIV((SV*)SvRV(ST(0)));
+ THIS = INT2PTR(Object *,tmp);
+ }
+ else
+ Perl_croak(aTHX_ "THIS is not of type Object");
+ if(THIS == NULL)
+ Perl_croak(aTHX_ "THIS is NULL, avoiding crash.");
+
+ THIS->SetLocation(x, y, z);
+ }
+ XSRETURN_EMPTY;
+}
+
+XS(XS_Object_SetX); /* prototype to pass -Wmissing-prototypes */
+XS(XS_Object_SetX)
+{
+ dXSARGS;
+ if (items != 2)
+ Perl_croak(aTHX_ "Usage: Object::SetX(THIS, XPos)");
+ {
+ Object * THIS;
+ float pos = (float)SvNV(ST(1));
+
+ if (sv_derived_from(ST(0), "Object")) {
+ IV tmp = SvIV((SV*)SvRV(ST(0)));
+ THIS = INT2PTR(Object *,tmp);
+ }
+ else
+ Perl_croak(aTHX_ "THIS is not of type Object");
+ if(THIS == NULL)
+ Perl_croak(aTHX_ "THIS is NULL, avoiding crash.");
+
+ THIS->SetX(pos);
+ }
+ XSRETURN_EMPTY;
+}
+
+XS(XS_Object_SetY); /* prototype to pass -Wmissing-prototypes */
+XS(XS_Object_SetY)
+{
+ dXSARGS;
+ if (items != 2)
+ Perl_croak(aTHX_ "Usage: Object::SetY(THIS, YPos)");
+ {
+ Object * THIS;
+ float pos = (float)SvNV(ST(1));
+
+ if (sv_derived_from(ST(0), "Object")) {
+ IV tmp = SvIV((SV*)SvRV(ST(0)));
+ THIS = INT2PTR(Object *,tmp);
+ }
+ else
+ Perl_croak(aTHX_ "THIS is not of type Object");
+ if(THIS == NULL)
+ Perl_croak(aTHX_ "THIS is NULL, avoiding crash.");
+
+ THIS->SetY(pos);
+ }
+ XSRETURN_EMPTY;
+}
+
+XS(XS_Object_SetZ); /* prototype to pass -Wmissing-prototypes */
+XS(XS_Object_SetZ)
+{
+ dXSARGS;
+ if (items != 2)
+ Perl_croak(aTHX_ "Usage: Object::SetZ(THIS, ZPos)");
+ {
+ Object * THIS;
+ float pos = (float)SvNV(ST(1));
+
+ if (sv_derived_from(ST(0), "Object")) {
+ IV tmp = SvIV((SV*)SvRV(ST(0)));
+ THIS = INT2PTR(Object *,tmp);
+ }
+ else
+ Perl_croak(aTHX_ "THIS is not of type Object");
+ if(THIS == NULL)
+ Perl_croak(aTHX_ "THIS is NULL, avoiding crash.");
+
+ THIS->SetZ(pos);
+ }
+ XSRETURN_EMPTY;
+}
+
+XS(XS_Object_SetHeading); /* prototype to pass -Wmissing-prototypes */
+XS(XS_Object_SetHeading)
+{
+ dXSARGS;
+ if (items != 2)
+ Perl_croak(aTHX_ "Usage: Object::SetHeading(THIS, heading)");
+ {
+ Object * THIS;
+ float heading = (float)SvNV(ST(1));
+
+ if (sv_derived_from(ST(0), "Object")) {
+ IV tmp = SvIV((SV*)SvRV(ST(0)));
+ THIS = INT2PTR(Object *,tmp);
+ }
+ else
+ Perl_croak(aTHX_ "THIS is not of type Object");
+ if(THIS == NULL)
+ Perl_croak(aTHX_ "THIS is NULL, avoiding crash.");
+
+ THIS->SetHeading(heading);
+ }
+ XSRETURN_EMPTY;
+}
+
+XS(XS_Object_SetModelName); /* prototype to pass -Wmissing-prototypes */
+XS(XS_Object_SetModelName)
+{
+ dXSARGS;
+ if (items < 1 || items > 2)
+ Perl_croak(aTHX_ "Usage: Object::SetModelName(THIS, name)");
+ {
+ Object * THIS;
+ char * name = NULL;
+
+ if (sv_derived_from(ST(0), "Object")) {
+ IV tmp = SvIV((SV*)SvRV(ST(0)));
+ THIS = INT2PTR(Object *,tmp);
+ }
+ else
+ Perl_croak(aTHX_ "THIS is not of type Object");
+ if(THIS == NULL)
+ Perl_croak(aTHX_ "THIS is NULL, avoiding crash.");
+
+ if (items > 1) { name = (char *)SvPV_nolen(ST(1)); }
+
+ THIS->SetModelName(name);
+ }
+ XSRETURN_EMPTY;
+}
+XS(XS_Object_GetModelName); /* prototype to pass -Wmissing-prototypes */
+XS(XS_Object_GetModelName)
+{
+ dXSARGS;
+ if (items != 1)
+ Perl_croak(aTHX_ "Usage: Object::GetModelName(THIS)");
+ {
+ Object * THIS;
+ Const_char * RETVAL;
+ dXSTARG;
+
+ if (sv_derived_from(ST(0), "Object")) {
+ IV tmp = SvIV((SV*)SvRV(ST(0)));
+ THIS = INT2PTR(Object *,tmp);
+ }
+ else
+ Perl_croak(aTHX_ "THIS is not of type Object");
+ if(THIS == NULL)
+ Perl_croak(aTHX_ "THIS is NULL, avoiding crash.");
+
+ RETVAL = THIS->GetModelName();
+ sv_setpv(TARG, RETVAL); XSprePUSH; PUSHTARG;
+ }
+ XSRETURN(1);
+}
+
+XS(XS_Object_Repop); /* prototype to pass -Wmissing-prototypes */
+XS(XS_Object_Repop)
+{
+ dXSARGS;
+ if (items != 1)
+ Perl_croak(aTHX_ "Usage: Object::Repop(THIS)");
+ {
+ Object * THIS;
+ Const_char * RETVAL;
+ dXSTARG;
+
+ if (sv_derived_from(ST(0), "Object")) {
+ IV tmp = SvIV((SV*)SvRV(ST(0)));
+ THIS = INT2PTR(Object *,tmp);
+ }
+ else
+ Perl_croak(aTHX_ "THIS is not of type Object");
+ if(THIS == NULL)
+ Perl_croak(aTHX_ "THIS is NULL, avoiding crash.");
+ THIS->Repop();
+ }
+ XSRETURN_EMPTY;
+}
+
+XS(XS_Object_Depop); /* prototype to pass -Wmissing-prototypes */
+XS(XS_Object_Depop)
+{
+ dXSARGS;
+ if (items != 1)
+ Perl_croak(aTHX_ "Usage: Object::Repop(THIS)");
+ {
+ Object * THIS;
+ Const_char * RETVAL;
+ dXSTARG;
+
+ if (sv_derived_from(ST(0), "Object")) {
+ IV tmp = SvIV((SV*)SvRV(ST(0)));
+ THIS = INT2PTR(Object *,tmp);
+ }
+ else
+ Perl_croak(aTHX_ "THIS is not of type Object");
+ if(THIS == NULL)
+ Perl_croak(aTHX_ "THIS is NULL, avoiding crash.");
+ THIS->Depop();
+ }
+ XSRETURN_EMPTY;
+}
+
+#ifdef __cplusplus
+extern "C"
+#endif
+XS(boot_Object); /* prototype to pass -Wmissing-prototypes */
+XS(boot_Object)
+{
+ dXSARGS;
+ char file[256];
+ strncpy(file, __FILE__, 256);
+ file[255] = 0;
+
+ if(items != 1)
+ fprintf(stderr, "boot_quest does not take any arguments.");
+ char buf[128];
+
+ //add the strcpy stuff to get rid of const warnings....
+
+
+
+ XS_VERSION_BOOTCHECK ;
+ newXSproto(strcpy(buf, "Depop"),XS_Object_Depop, file, "$");
+ newXSproto(strcpy(buf, "Repop"),XS_Object_Repop, file, "$");
+ newXSproto(strcpy(buf, "SetModelName"),XS_Object_SetModelName, file, "$$");
+ newXSproto(strcpy(buf, "GetModelName"),XS_Object_GetModelName, file, "$");
+ newXSproto(strcpy(buf, "GetX"),XS_Object_GetX, file, "$");
+ newXSproto(strcpy(buf, "GetY"),XS_Object_GetY, file, "$");
+ newXSproto(strcpy(buf, "GetZ"),XS_Object_GetZ, file, "$");
+ newXSproto(strcpy(buf, "GetHeading"),XS_Object_GetHeading, file, "$");
+ newXSproto(strcpy(buf, "SetX"),XS_Object_SetX, file, "$$");
+ newXSproto(strcpy(buf, "SetY"),XS_Object_SetY, file, "$$");
+ newXSproto(strcpy(buf, "SetZ"),XS_Object_SetZ, file, "$$");
+ newXSproto(strcpy(buf, "SetHeading"),XS_Object_SetHeading, file, "$$");
+ newXSproto(strcpy(buf, "SetLocation"),XS_Object_SetLocation, file, "$$$$");
+ newXSproto(strcpy(buf, "SetItemID"),XS_Object_SetItemID, file, "$$");
+ newXSproto(strcpy(buf, "GetItemID"),XS_Object_GetItemID, file, "$");
+ newXSproto(strcpy(buf, "SetIcon"),XS_Object_SetIcon, file, "$$");
+ newXSproto(strcpy(buf, "GetIcon"),XS_Object_GetIcon, file, "$");
+ newXSproto(strcpy(buf, "SetType"),XS_Object_SetType, file, "$$");
+ newXSproto(strcpy(buf, "GetType"),XS_Object_GetType, file, "$");
+ newXSproto(strcpy(buf, "GetDBID"),XS_Object_GetDBID, file, "$");
+ newXSproto(strcpy(buf, "ClearUser"),XS_Object_ClearUser, file, "$");
+ newXSproto(strcpy(buf, "SetID"),XS_Object_SetID, file, "$$");
+ newXSproto(strcpy(buf, "GetID"),XS_Object_GetID, file, "$");
+ newXSproto(strcpy(buf, "Save"),XS_Object_Save, file, "$");
+ newXSproto(strcpy(buf, "VarSave"),XS_Object_VarSave, file, "$");
+ newXSproto(strcpy(buf, "DeleteItem"),XS_Object_DeleteItem, file, "$$");
+ newXSproto(strcpy(buf, "StartDecay"),XS_Object_StartDecay, file, "$$");
+ newXSproto(strcpy(buf, "Delete"),XS_Object_Delete, file, "$$");
+ newXSproto(strcpy(buf, "IsGroundSpawn"),XS_Object_IsGroundSpawn, file, "$");
+ newXSproto(strcpy(buf, "Close"),XS_Object_Close, file, "$");
+ XSRETURN_YES;
+}
+#endif //EMBPERL_XS_CLASSES
+
Index: perlparser.cpp
================================================== =================
--- perlparser.cpp (revision 1556)
+++ perlparser.cpp (working copy)
@@ -90,6 +90,9 @@
"package HateEntry;"
"&boot_HateEntry;" // load quest item XS
+ "package Object;"
+ "&boot_Object;" // load quest item XS
+
#endif
"package main;"
"}"
@@ -2540,17 +2543,44 @@
float y = (float)SvNV(ST(2));
float z = (float)SvNV(ST(3));
float heading = (float)SvNV(ST(4));
+ uint16 id = 0;
if(items == 5)
- quest_manager.CreateGroundObject(itemid, x, y, z, heading);
+ id = quest_manager.CreateGroundObject(itemid, x, y, z, heading);
else{
int32 decay_time = (int32)SvIV(ST(5));
- quest_manager.CreateGroundObject(itemid, x, y, z, heading, decay_time);
+ id = quest_manager.CreateGroundObject(itemid, x, y, z, heading, decay_time);
}
- XSRETURN_EMPTY;
+
+ XSRETURN_IV(id);
}
+XS(XS__CreateGroundObjectFromModel);
+XS(XS__CreateGroundObjectFromModel)
+{
+ dXSARGS;
+ if (items != 5 && items != 6)
+ Perl_croak(aTHX_ "Usage: CreateGroundObjectFromModel(modelname, x, y, z, heading, [type])");
+
+ char * modelname = (char *)SvPV_nolen(ST(0));
+ float x = (float)SvNV(ST(1));
+ float y = (float)SvNV(ST(2));
+ float z = (float)SvNV(ST(3));
+ float heading = (float)SvNV(ST(4));
+ uint16 id = 0;
+
+ if(items == 5)
+ id = quest_manager.CreateGroundObjectFromModel(modelnam e, x, y, z, heading);
+ else{
+ int32 type = (int32)SvIV(ST(5));
+ id = quest_manager.CreateGroundObjectFromModel(modelnam e, x, y, z, heading, type);
+ }
+
+
+ XSRETURN_IV(id);
+}
+
XS(XS__ModifyNPCStat);
XS(XS__ModifyNPCStat)
{
@@ -3157,6 +3187,7 @@
newXS(strcpy(buf, "we"), XS__we, file);
newXS(strcpy(buf, "getlevel"), XS__getlevel, file);
newXS(strcpy(buf, "creategroundobject"), XS__CreateGroundObject, file);
+ newXS(strcpy(buf, "creategroundobjectfrommodel"), XS__CreateGroundObjectFromModel, file);
newXS(strcpy(buf, "modifynpcstat"), XS__ModifyNPCStat, file);
newXS(strcpy(buf, "collectitems"), XS__collectitems, file);
newXS(strcpy(buf, "updatespawntimer"), XS__UpdateSpawnTimer, file);
Index: questmgr.cpp
================================================== =================
--- questmgr.cpp (revision 1556)
+++ questmgr.cpp (working copy)
@@ -1933,11 +1933,20 @@
return 0;
}
-void QuestManager::CreateGroundObject(int32 itemid, float x, float y, float z, float heading, int32 decay_time)
+int16 QuestManager::CreateGroundObject(int32 itemid, float x, float y, float z, float heading, int32 decay_time)
{
- entity_list.CreateGroundObject(itemid, x, y, z, heading, decay_time);
+ int16 entid = 0; //safety check
+ entid = entity_list.CreateGroundObject(itemid, x, y, z, heading, decay_time);
+ return entid;
}
+int16 QuestManager::CreateGroundObjectFromModel(const char *model, float x, float y, float z, float heading, int8 type)
+{
+ int16 entid = 0; //safety check
+ entid = entity_list.CreateGroundObjectFromModel(model, x, y, z, heading, type);
+ return entid;
+}
+
void QuestManager::ModifyNPCStat(const char *identifier, const char *newValue)
{
if(owner){
Index: questmgr.h
================================================== =================
--- questmgr.h (revision 1556)
+++ questmgr.h (working copy)
@@ -191,7 +191,8 @@
bool checktitle(int titlecheck);
void removetitle(int titlecheck);
- void CreateGroundObject(int32 itemid, float x, float y, float z, float heading, int32 decay_time = 300000);
+ int16 CreateGroundObject(int32 itemid, float x, float y, float z, float heading, int32 decay_time = 300000);
+ int16 CreateGroundObjectFromModel(const char* model, float x, float y, float z, float heading, int8 type = 0x00);
void ModifyNPCStat(const char *identifier, const char *newValue);
void UpdateSpawnTimer(int32 id, int32 newTime);
Index: Zone.vcproj
================================================== =================
--- Zone.vcproj (revision 1556)
+++ Zone.vcproj (working copy)
@@ -572,6 +572,10 @@
>
</File>
<File
+ RelativePath=".\perl_object.cpp"
+ >
+ </File>
+ <File
RelativePath=".\perl_perlpacket.cpp"
>
</File>