diff --git a/common/features.h b/common/features.h index 72f693a57..301ebfed1 100644 --- a/common/features.h +++ b/common/features.h @@ -51,9 +51,6 @@ Core Zone features //this seems to make perl very unhappy on reload, and crashes #define EMBPERL_IO_CAPTURE -//enable perl-based in-game command, pretty useless without EMBPERL_XS_CLASSES -#define EMBPERL_COMMANDS - #endif /* diff --git a/zone/CMakeLists.txt b/zone/CMakeLists.txt index 92d56299d..334619697 100644 --- a/zone/CMakeLists.txt +++ b/zone/CMakeLists.txt @@ -123,7 +123,6 @@ SET(zone_headers object.h pathing.h perlpacket.h - perlparser.h petitions.h pets.h PlayerCorpse.h diff --git a/zone/command.cpp b/zone/command.cpp index 7b112c0d8..de3fa6e66 100644 --- a/zone/command.cpp +++ b/zone/command.cpp @@ -559,64 +559,6 @@ int command_add(const char *command_string, const char *desc, int access, CmdFun return 0; } - -#ifdef EMBPERL_COMMANDS -/* - * command_add_perl - * adds a command to the command list, as a perl function - * - * Parameters: - * command_string - the command ex: "spawn" - * desc - text description of command for #help - * access - default access level required to use command - * - */ -int command_add_perl(const char *command_string, const char *desc, int access) { - string cstr(command_string); - - if(commandlist.count(cstr) != 0) { -#ifdef COMMANDS_PERL_OVERRIDE - //print a warning so people dont get too confused when this happens - LogFile->write(EQEMuLog::Status, "command_add_perl() - Perl Command '%s' is overriding the compiled command." , command_string); - CommandRecord *tmp = commandlist[cstr]; - safe_delete(tmp); -#else - LogFile->write(EQEMuLog::Error, "command_add_perl() - Command '%s' is a duplicate - check commands.pl." , command_string); - return(-1); -#endif - } - - CommandRecord *c = new CommandRecord; - c->desc = desc; - c->access = access; - c->function = nullptr; - - commandlist[cstr] = c; - - commandcount++; - return 0; - -} - -//clear out any perl commands. -//should restore any overridden C++ commands, but thats a lot of work. -void command_clear_perl() { - map::iterator cur,end,del; - cur = commandlist.begin(); - end = commandlist.end(); - for(; cur != end;) { - del = cur; - cur++; - if(del->second->function == nullptr) { - safe_delete(del->second); - commandlist.erase(del); - } - } -} - -#endif //EMBPERL_COMMANDS - - /* * * command_realdispatch @@ -657,15 +599,8 @@ int command_realdispatch(Client *c, const char *message) #endif if(cur->function == nullptr) { -#ifdef EMBPERL_COMMANDS - //todo reimplement this stuff - //dispatch perl command - //PerlembParser *embparse = (PerlembParser *) parse; - //embparse->ExecCommand(c, &sep); -#else - LogFile->write(EQEMuLog::Error, "Command '%s' has a null function, but perl commands are diabled!\n", cstr.c_str()); + LogFile->write(EQEMuLog::Error, "Command '%s' has a null function\n", cstr.c_str()); return(-1); -#endif } else { //dispatch C++ command cur->function(c, &sep); // dispatch command diff --git a/zone/command.h b/zone/command.h index 0696d7b19..b0f8c2935 100644 --- a/zone/command.h +++ b/zone/command.h @@ -60,8 +60,6 @@ int command_add(const char *command_string, const char *desc, int access, CmdFun int command_notavail(Client *c, const char *message); int command_realdispatch(Client *c, char const *message); void command_logcommand(Client *c, const char *message); -int command_add_perl(const char *command_string, const char *desc, int access); -void command_clear_perl(); //commands void command_resetaa(Client* c,const Seperator *sep); diff --git a/zone/embparser.cpp b/zone/embparser.cpp index a0af9b59c..854016574 100644 --- a/zone/embparser.cpp +++ b/zone/embparser.cpp @@ -95,7 +95,7 @@ const char *QuestEventSubroutines[_LargestEventID] = { "EVENT_DUEL_LOSE" }; -PerlembParser::PerlembParser() : perl(nullptr) { +PerlembParser::PerlembParser() : perl(nullptr), event_queue_in_use_(false) { global_npc_quest_status_ = questUnloaded; player_quest_status_ = questUnloaded; global_player_quest_status_ = questUnloaded; @@ -106,7 +106,6 @@ PerlembParser::~PerlembParser() { } void PerlembParser::ReloadQuests() { - command_clear_perl(); try { if(perl == nullptr) { @@ -134,9 +133,6 @@ void PerlembParser::ReloadQuests() { spell_quest_status_.clear(); } -void PerlembParser::MapFunctions() { -} - void PerlembParser::EventCommon(QuestEventID event, uint32 objid, const char * data, NPC* npcmob, ItemInst* iteminst, Mob* mob, uint32 extradata, bool global) { @@ -147,9 +143,58 @@ void PerlembParser::EventCommon(QuestEventID event, uint32 objid, const char * d return; if(perl->InUse()) { - //PERL_TODO queue event + AddQueueEvent(event, objid, data, npcmob, iteminst, mob, extradata, global); return; } + + bool isPlayerQuest = false; + bool isGlobalPlayerQuest = false; + bool isGlobalNPC = false; + bool isItemQuest = false; + bool isSpellQuest = false; + std::string package_name; + + GetQuestTypes(isPlayerQuest, isGlobalPlayerQuest, isGlobalNPC, isItemQuest, isSpellQuest, + event, npcmob, iteminst, mob, global); + GetQuestPackageName(isPlayerQuest, isGlobalPlayerQuest, isGlobalNPC, isItemQuest, isSpellQuest, + package_name, event, objid, data, npcmob, iteminst, global); + + const char *sub_name = QuestEventSubroutines[event]; + if(!perl->SubExists(package_name.c_str(), sub_name)) { + return; + } + + int char_id = 0; + ExportCharID(package_name, char_id, npcmob, mob); + ExportQGlobals(isPlayerQuest, isGlobalPlayerQuest, isGlobalNPC, isItemQuest, isSpellQuest, + package_name, npcmob, mob, char_id); + + //ExportGenericVariables(); + ExportMobVariables(isPlayerQuest, isGlobalPlayerQuest, isGlobalNPC, isItemQuest, isSpellQuest, + package_name, mob, npcmob); + ExportZoneVariables(package_name); + ExportItemVariables(package_name, mob); + ExportEventVariables(package_name, event, objid, data, npcmob, iteminst, mob, extradata); + + if(isPlayerQuest || isGlobalPlayerQuest){ + SendCommands(package_name.c_str(), sub_name, 0, mob, mob, nullptr); + } + else if(isItemQuest) { + SendCommands(package_name.c_str(), sub_name, 0, mob, mob, iteminst); + } + else if(isSpellQuest) + { + if(mob) { + SendCommands(package_name.c_str(), sub_name, 0, mob, mob, nullptr); + } else { + SendCommands(package_name.c_str(), sub_name, 0, npcmob, mob, nullptr); + } + } + else { + SendCommands(package_name.c_str(), sub_name, objid, npcmob, mob, nullptr); + } + + HandleQueue(); } double PerlembParser::EventNPC(QuestEventID evt, NPC* npc, Mob *init, std::string data, uint32 extra_data) { @@ -183,34 +228,106 @@ double PerlembParser::EventSpell(QuestEventID evt, NPC* npc, Client *client, uin } bool PerlembParser::HasQuestSub(uint32 npcid, const char *subname) { - return false; + std::stringstream package_name; + package_name << "qst_npc_" << npcid; + + if(!perl) + return false; + + auto iter = npc_quest_status_.find(npcid); + if(iter == npc_quest_status_.end() || iter->second == QuestFailedToLoad) { + return false; + } + + return(perl->SubExists(package_name.str().c_str(), subname)); } bool PerlembParser::HasGlobalQuestSub(const char *subname) { - return false; + if(!perl) + return false; + + if(global_npc_quest_status_ != questLoaded) { + return false; + } + + return(perl->SubExists("qst_global_npc", subname)); } bool PerlembParser::PlayerHasQuestSub(const char *subname) { - return false; + if(!perl) + return false; + + if(player_quest_status_ != questLoaded) { + return false; + } + + return(perl->SubExists("qst_player", subname)); } bool PerlembParser::GlobalPlayerHasQuestSub(const char *subname) { - return false; + if(!perl) + return false; + + if(global_player_quest_status_ != questLoaded) { + return false; + } + + return(perl->SubExists("qst_global_player", subname)); } bool PerlembParser::SpellHasQuestSub(uint32 spell_id, const char *subname) { - return false; + std::stringstream package_name; + package_name << "qst_spell_" << spell_id; + + if(!perl) + return false; + + auto iter = spell_quest_status_.find(spell_id); + if(iter == spell_quest_status_.end() || iter->second == QuestFailedToLoad) { + return false; + } + + return(perl->SubExists(package_name.str().c_str(), subname)); } bool PerlembParser::ItemHasQuestSub(ItemInst *itm, const char *subname) { - return false; + std::stringstream package_name; + package_name << "qst_item_"; + + std::string item_name; + const Item_Struct* item = itm->GetItem(); + if(strcmp("EVENT_SCALE_CALC", subname) == 0 || strcmp("EVENT_ITEM_ENTERZONE", subname) == 0) + { + item_name = item->CharmFile; + } + else if(strcmp("EVENT_ITEM_CLICK", subname) == 0 || strcmp("EVENT_ITEM_CLICK_CAST", subname) == 0 ) + { + item_name = "script_"; + item_name += itoa(item->ScriptFileID); + } + else + { + item_name = "item_"; + item_name += itoa(item->ID); + } + + package_name << item_name; + + if(!perl) + return false; + + auto iter = item_quest_status_.find(item_name); + if(iter == item_quest_status_.end() || iter->second == QuestFailedToLoad) { + return false; + } + + return(perl->SubExists(package_name.str().c_str(), subname)); } void PerlembParser::LoadNPCScript(std::string filename, int npc_id) { std::stringstream package_name; - package_name << "qst_" << npc_id; + package_name << "qst_npc_" << npc_id; - printf("%s = %s\n", package_name.str().c_str(), filename.c_str()); if(!perl) return; @@ -219,7 +336,8 @@ void PerlembParser::LoadNPCScript(std::string filename, int npc_id) { return; } - if(npc_quest_status_.find(npc_id) != npc_quest_status_.end()) { + auto iter = npc_quest_status_.find(npc_id); + if(iter != npc_quest_status_.end()) { return; } @@ -237,7 +355,6 @@ void PerlembParser::LoadNPCScript(std::string filename, int npc_id) { } void PerlembParser::LoadGlobalNPCScript(std::string filename) { - printf("%s %s\n", "qst_global_npc", filename.c_str()); if(!perl) return; @@ -264,7 +381,6 @@ void PerlembParser::LoadGlobalNPCScript(std::string filename) { } void PerlembParser::LoadPlayerScript(std::string filename) { - printf("%s %s\n", "qst_player", filename.c_str()); if(!perl) return; @@ -291,7 +407,6 @@ void PerlembParser::LoadPlayerScript(std::string filename) { } void PerlembParser::LoadGlobalPlayerScript(std::string filename) { - printf("%s %s\n", "qst_global_player", filename.c_str()); if(!perl) return; @@ -318,17 +433,75 @@ void PerlembParser::LoadGlobalPlayerScript(std::string filename) { } void PerlembParser::LoadItemScript(std::string filename, std::string item_script) { - printf("Load Spell %s = %s\n", item_script.c_str(), filename.c_str()); + std::stringstream package_name; + package_name << "qst_item_" << item_script; + + if(!perl) + return; + + if(perl->InUse()) + { + return; + } + + auto iter = item_quest_status_.find(item_script); + if(iter != item_quest_status_.end()) { + return; + } + + try { + perl->eval_file(package_name.str().c_str(), filename.c_str()); + } + catch(const char *err) + { + LogFile->write(EQEMuLog::Quest, "WARNING: error compiling quest file %s: %s", filename.c_str(), err); + item_quest_status_[item_script] = questFailedToLoad; + return; + } + + item_quest_status_[item_script] = questLoaded; } void PerlembParser::LoadSpellScript(std::string filename, uint32 spell_id) { - printf("Load Item %d = %s\n", spell_id, filename.c_str()); + std::stringstream package_name; + package_name << "qst_spell_" << spell_id; + + if(!perl) + return; + + if(perl->InUse()) + { + return; + } + + auto iter = spell_quest_status_.find(spell_id); + if(iter != spell_quest_status_.end()) { + return; + } + + try { + perl->eval_file(package_name.str().c_str(), filename.c_str()); + } + catch(const char *err) + { + LogFile->write(EQEMuLog::Quest, "WARNING: error compiling quest file %s: %s", filename.c_str(), err); + spell_quest_status_[spell_id] = questFailedToLoad; + return; + } + + spell_quest_status_[spell_id] = questLoaded; } void PerlembParser::AddVar(std::string name, std::string val) { + vars_[name] = val; } std::string PerlembParser::GetVar(std::string name) { + auto iter = vars_.find(name); + if(iter != vars_.end()) { + return iter->second; + } + return std::string(); } @@ -420,915 +593,704 @@ void PerlembParser::ExportVar(const char *pkgprefix, const char *varname, const } void PerlembParser::SendCommands(const char *pkgprefix, const char *event, uint32 npcid, Mob* other, Mob* mob, ItemInst* iteminst) { + if(!perl) + return; + + if(mob && mob->IsClient()) + quest_manager.StartQuest(other, mob->CastToClient(), iteminst); + else + quest_manager.StartQuest(other, nullptr, nullptr); + + try { + + std::string cmd = "package " + (std::string)(pkgprefix) + (std::string)(";"); + perl->eval(cmd.c_str()); + +#ifdef EMBPERL_XS_CLASSES + char namebuf[64]; + + //init a couple special vars: client, npc, entity_list + Client *curc = quest_manager.GetInitiator(); + snprintf(namebuf, 64, "%s::client", pkgprefix); + SV *client = get_sv(namebuf, true); + if(curc != nullptr) { + sv_setref_pv(client, "Client", curc); + } else { + //clear out the value, mainly to get rid of blessedness + sv_setsv(client, _empty_sv); + } + + //only export NPC if it's a npc quest + if(!other->IsClient()){ + NPC *curn = quest_manager.GetNPC(); + snprintf(namebuf, 64, "%s::npc", pkgprefix); + SV *npc = get_sv(namebuf, true); + sv_setref_pv(npc, "NPC", curn); + } + + //only export QuestItem if it's an item quest + if(iteminst) { + ItemInst* curi = quest_manager.GetQuestItem(); + snprintf(namebuf, 64, "%s::questitem", pkgprefix); + SV *questitem = get_sv(namebuf, true); + sv_setref_pv(questitem, "QuestItem", curi); + } + + snprintf(namebuf, 64, "%s::entity_list", pkgprefix); + SV *el = get_sv(namebuf, true); + sv_setref_pv(el, "EntityList", &entity_list); +#endif + + //now call the requested sub + perl->dosub(std::string(pkgprefix).append("::").append(event).c_str()); + +#ifdef EMBPERL_XS_CLASSES + std::string eval_str = (std::string)"$" + (std::string)pkgprefix + (std::string)"::client = undef;"; + eval_str += (std::string)"$" + (std::string)pkgprefix + (std::string)"::npc = undef;"; + eval_str += (std::string)"$" + (std::string)pkgprefix + (std::string)"::questitem = undef;"; + eval_str += (std::string)"$" + (std::string)pkgprefix + (std::string)"::entity_list = undef;"; + perl->eval(eval_str.c_str()); +#endif + + } catch(const char * err) { + + //try to reduce some of the console spam... + //todo: tweak this to be more accurate at deciding what to filter (we don't want to gag legit errors) + if(!strstr(err,"Undefined subroutine")) + LogFile->write(EQEMuLog::Status, "Script error: %s::%s - %s", pkgprefix, event, err); + } + + quest_manager.EndQuest(); +} + +void PerlembParser::MapFunctions() { + _empty_sv = newSV(0); + + perl->eval( + "{" + "package quest;" + "&boot_quest;" //load our quest XS +#ifdef EMBPERL_XS_CLASSES + "package Mob;" + "&boot_Mob;" //load our Mob XS + + "package Client;" + "our @ISA = qw(Mob);" //client inherits mob. + "&boot_Mob;" //load our Mob XS + "&boot_Client;" //load our Client XS + + "package NPC;" + "our @ISA = qw(Mob);" //NPC inherits mob. + "&boot_Mob;" //load our Mob XS + "&boot_NPC;" //load our NPC XS + + "package Corpse;" + "our @ISA = qw(Mob);" //Corpse inherits mob. + "&boot_Mob;" //load our Mob XS + "&boot_Corpse;" //load our Mob XS + + "package EntityList;" + "&boot_EntityList;" //load our EntityList XS + + "package PerlPacket;" + "&boot_PerlPacket;" //load our PerlPacket XS + + "package Group;" + "&boot_Group;" //load our Group XS + + "package Raid;" + "&boot_Raid;" //load our Raid XS + + "package QuestItem;" + "&boot_QuestItem;" // load quest Item XS + + "package HateEntry;" + "&boot_HateEntry;" // load quest Hate XS + + "package Object;" + "&boot_Object;" // load quest Object XS + + "package Doors;" + "&boot_Doors;" // load quest Doors XS + +#endif + "package main;" + "}" + ); +} + +void PerlembParser::HandleQueue() { + if(event_queue_in_use_) + return; + + event_queue_in_use_ = true; + + while(!event_queue_.empty()) { + EventRecord e = event_queue_.front(); + event_queue_.pop(); + + EventCommon(e.event, e.objid, e.data.c_str(), e.npcmob, e.iteminst, e.mob, e.extradata, e.global); + } + + event_queue_in_use_ = false; +} + +void PerlembParser::AddQueueEvent(QuestEventID event, uint32 objid, const char * data, NPC* npcmob, ItemInst* iteminst, Mob* mob, + uint32 extradata, bool global) +{ + EventRecord e; + e.event = event; + e.objid = objid; + e.data = data; + e.npcmob = npcmob; + e.iteminst = iteminst; + e.mob = mob; + e.extradata = extradata; + e.global = global; + event_queue_.push(e); +} + +void PerlembParser::GetQuestTypes(bool &isPlayerQuest, bool &isGlobalPlayerQuest, bool &isGlobalNPC, bool &isItemQuest, + bool &isSpellQuest, QuestEventID event, NPC* npcmob, ItemInst* iteminst, Mob* mob, bool global) +{ + if(event == EVENT_SPELL_EFFECT_CLIENT || + event == EVENT_SPELL_EFFECT_NPC || + event == EVENT_SPELL_EFFECT_BUFF_TIC_CLIENT || + event == EVENT_SPELL_EFFECT_BUFF_TIC_NPC || + event == EVENT_SPELL_EFFECT_TRANSLOCATE_COMPLETE) + { + isSpellQuest = true; + } + else + { + if(!npcmob && mob) { + if(!iteminst) { + if(global) { + isGlobalPlayerQuest = true; + } else { + isPlayerQuest = true; + } + } + else + isItemQuest = true; + } + } +} + +void PerlembParser::GetQuestPackageName(bool &isPlayerQuest, bool &isGlobalPlayerQuest, bool &isGlobalNPC, bool &isItemQuest, + bool &isSpellQuest, std::string &package_name, QuestEventID event, uint32 objid, const char * data, + NPC* npcmob, ItemInst* iteminst, bool global) +{ + if(!isPlayerQuest && !isGlobalPlayerQuest && !isItemQuest && !isSpellQuest) { + if(global) { + isGlobalNPC = true; + package_name = "qst_global_npc"; + } else { + package_name = "qst_npc_"; + package_name += itoa(npcmob->GetNPCTypeID()); + } + } + else if(isItemQuest) { + const Item_Struct* item = iteminst->GetItem(); + package_name = "qst_item_"; + + if (event == EVENT_SCALE_CALC || event == EVENT_ITEM_ENTERZONE) { + package_name += item->CharmFile; + } + else if (event == EVENT_ITEM_CLICK || event == EVENT_ITEM_CLICK_CAST) { + package_name += "script_"; + package_name += itoa(item->ScriptFileID); + } + else { + package_name += "item_"; + package_name += itoa(objid); + } + } + else if(isPlayerQuest) { + package_name = "qst_player"; + } + else if(isGlobalPlayerQuest) { + package_name = "qst_global_player"; + } + else + { + package_name = "qst_spell_"; + package_name += data; + } +} + +void PerlembParser::ExportCharID(const std::string &package_name, int &char_id, NPC *npcmob, Mob *mob) { + if (mob && mob->IsClient()) { // some events like waypoint and spawn don't have a player involved + char_id = mob->CastToClient()->CharacterID(); + } else { + if(npcmob) + { + char_id = -static_cast(npcmob->GetNPCTypeID()); // make char id negative npc id as a fudge + } + else if(mob && mob->IsNPC()) + { + char_id = -static_cast(mob->CastToNPC()->GetNPCTypeID()); // make char id negative npc id as a fudge + } + } + ExportVar(package_name.c_str(), "charid", char_id); +} + +void PerlembParser::ExportQGlobals(bool isPlayerQuest, bool isGlobalPlayerQuest, bool isGlobalNPC, bool isItemQuest, + bool isSpellQuest, std::string &package_name, NPC *npcmob, Mob *mob, int char_id) { + //NPC quest + if(!isPlayerQuest && !isGlobalPlayerQuest && !isItemQuest && !isSpellQuest) + { + //only export for npcs that are global enabled. + if(npcmob && npcmob->GetQglobal()) + { + map globhash; + QGlobalCache *npc_c = nullptr; + QGlobalCache *char_c = nullptr; + QGlobalCache *zone_c = nullptr; + + //retrieve our globals + npc_c = npcmob->GetQGlobals(); + if(mob && mob->IsClient()) + char_c = mob->CastToClient()->GetQGlobals(); + zone_c = zone->GetQGlobals(); + + if(!npc_c) + { + npc_c = npcmob->CreateQGlobals(); + npc_c->LoadByNPCID(npcmob->GetNPCTypeID()); + } + + if(!char_c) + { + if(mob && mob->IsClient()) + { + char_c = mob->CastToClient()->CreateQGlobals(); + char_c->LoadByCharID(mob->CastToClient()->CharacterID()); + } + } + + if(!zone_c) + { + zone_c = zone->CreateQGlobals(); + zone_c->LoadByZoneID(zone->GetZoneID()); + zone_c->LoadByGlobalContext(); + } + + std::list globalMap; + if(npc_c) + { + QGlobalCache::Combine(globalMap, npc_c->GetBucket(), npcmob->GetNPCTypeID(), char_id, zone->GetZoneID()); + } + + if(char_c) + { + QGlobalCache::Combine(globalMap, char_c->GetBucket(), npcmob->GetNPCTypeID(), char_id, zone->GetZoneID()); + } + + if(zone_c) + { + QGlobalCache::Combine(globalMap, zone_c->GetBucket(), npcmob->GetNPCTypeID(), char_id, zone->GetZoneID()); + } + + std::list::iterator iter = globalMap.begin(); + while(iter != globalMap.end()) + { + globhash[(*iter).name] = (*iter).value; + ExportVar(package_name.c_str(), (*iter).name.c_str(), (*iter).value.c_str()); + ++iter; + } + ExportHash(package_name.c_str(), "qglobals", globhash); + } + } + else + { + map globhash; + QGlobalCache *char_c = nullptr; + QGlobalCache *zone_c = nullptr; + + //retrieve our globals + if(mob && mob->IsClient()) + char_c = mob->CastToClient()->GetQGlobals(); + zone_c = zone->GetQGlobals(); + + if(!char_c) + { + if(mob && mob->IsClient()) + { + char_c = mob->CastToClient()->CreateQGlobals(); + char_c->LoadByCharID(mob->CastToClient()->CharacterID()); + } + } + + if(!zone_c) + { + zone_c = zone->CreateQGlobals(); + zone_c->LoadByZoneID(zone->GetZoneID()); + zone_c->LoadByGlobalContext(); + } + + std::list globalMap; + if(char_c) + { + QGlobalCache::Combine(globalMap, char_c->GetBucket(), 0, char_id, zone->GetZoneID()); + } + + if(zone_c) + { + QGlobalCache::Combine(globalMap, zone_c->GetBucket(), 0, char_id, zone->GetZoneID()); + } + + std::list::iterator iter = globalMap.begin(); + while(iter != globalMap.end()) + { + globhash[(*iter).name] = (*iter).value; + ExportVar(package_name.c_str(), (*iter).name.c_str(), (*iter).value.c_str()); + ++iter; + } + ExportHash(package_name.c_str(), "qglobals", globhash); + } +} + +void PerlembParser::ExportMobVariables(bool isPlayerQuest, bool isGlobalPlayerQuest, bool isGlobalNPC, bool isItemQuest, + bool isSpellQuest, std::string &package_name, Mob *mob, NPC *npcmob) +{ + uint8 fac = 0; + if (mob && mob->IsClient()) { + ExportVar(package_name.c_str(), "uguild_id", mob->CastToClient()->GuildID()); + ExportVar(package_name.c_str(), "uguildrank", mob->CastToClient()->GuildRank()); + ExportVar(package_name.c_str(), "status", mob->CastToClient()->Admin()); + } + + if(!isPlayerQuest && !isGlobalPlayerQuest && !isItemQuest) { + if (mob && npcmob && mob->IsClient()) { + Client* client = mob->CastToClient(); + + fac = client->GetFactionLevel(client->CharacterID(), npcmob->GetID(), client->GetRace(), + client->GetClass(), client->GetDeity(), npcmob->GetPrimaryFaction(), npcmob); + } + } + + if(mob) { + ExportVar(package_name.c_str(), "name", mob->GetName()); + ExportVar(package_name.c_str(), "race", GetRaceName(mob->GetRace())); + ExportVar(package_name.c_str(), "class", GetEQClassName(mob->GetClass())); + ExportVar(package_name.c_str(), "ulevel", mob->GetLevel()); + ExportVar(package_name.c_str(), "userid", mob->GetID()); + } + + if(!isPlayerQuest && !isGlobalPlayerQuest && !isItemQuest && !isSpellQuest) + { + if (npcmob) + { + ExportVar(package_name.c_str(), "mname", npcmob->GetName()); + ExportVar(package_name.c_str(), "mobid", npcmob->GetID()); + ExportVar(package_name.c_str(), "mlevel", npcmob->GetLevel()); + ExportVar(package_name.c_str(), "hpratio",npcmob->GetHPRatio()); + ExportVar(package_name.c_str(), "x", npcmob->GetX() ); + ExportVar(package_name.c_str(), "y", npcmob->GetY() ); + ExportVar(package_name.c_str(), "z", npcmob->GetZ() ); + ExportVar(package_name.c_str(), "h", npcmob->GetHeading() ); + if(npcmob->GetTarget()) { + ExportVar(package_name.c_str(), "targetid", npcmob->GetTarget()->GetID()); + ExportVar(package_name.c_str(), "targetname", npcmob->GetTarget()->GetName()); + } + } + + if (fac) { + ExportVar(package_name.c_str(), "faction", itoa(fac)); + } + } +} + +void PerlembParser::ExportZoneVariables(std::string &package_name) { + if (zone) { + ExportVar(package_name.c_str(), "zoneid", zone->GetZoneID()); + ExportVar(package_name.c_str(), "zoneln", zone->GetLongName()); + ExportVar(package_name.c_str(), "zonesn", zone->GetShortName()); + ExportVar(package_name.c_str(), "instanceid", zone->GetInstanceID()); + ExportVar(package_name.c_str(), "instanceversion", zone->GetInstanceVersion()); + TimeOfDay_Struct eqTime; + zone->zone_time.getEQTimeOfDay( time(0), &eqTime); + ExportVar(package_name.c_str(), "zonehour", eqTime.hour - 1); + ExportVar(package_name.c_str(), "zonemin", eqTime.minute); + ExportVar(package_name.c_str(), "zonetime", (eqTime.hour - 1) * 100 + eqTime.minute); + ExportVar(package_name.c_str(), "zoneweather", zone->zone_weather); + } +} + +#define HASITEM_FIRST 0 +#define HASITEM_LAST 29 // this includes worn plus 8 base slots +#define HASITEM_ISNULLITEM(item) ((item==-1) || (item==0)) + +void PerlembParser::ExportItemVariables(std::string &package_name, Mob *mob) { + if(mob && mob->IsClient()) + { + string hashname = package_name + std::string("::hasitem"); + + //start with an empty hash + perl->eval(std::string("%").append(hashname).append(" = ();").c_str()); + + for(int slot = HASITEM_FIRST; slot <= HASITEM_LAST; slot++) + { + char *hi_decl=nullptr; + int itemid = mob->CastToClient()->GetItemIDAt(slot); + if(!HASITEM_ISNULLITEM(itemid)) + { + MakeAnyLenString(&hi_decl, "push (@{$%s{%d}},%d);", hashname.c_str(), itemid, slot); + perl->eval(hi_decl); + safe_delete_array(hi_decl); + } + } + } + + if(mob && mob->IsClient()) { + string hashname = package_name + std::string("::oncursor"); + perl->eval(std::string("%").append(hashname).append(" = ();").c_str()); + char *hi_decl = nullptr; + int itemid = mob->CastToClient()->GetItemIDAt(30); + if(!HASITEM_ISNULLITEM(itemid)) { + MakeAnyLenString(&hi_decl, "push (@{$%s{%d}},%d);",hashname.c_str(), itemid, 30); + perl->eval(hi_decl); + safe_delete_array(hi_decl); + } + } +} + +#undef HASITEM_FIRST +#undef HASITEM_LAST +#undef HASITEM_ISNULLITEM + +void PerlembParser::ExportEventVariables(std::string &package_name, QuestEventID event, uint32 objid, const char * data, + NPC* npcmob, ItemInst* iteminst, Mob* mob, uint32 extradata) +{ + switch (event) { + case EVENT_SAY: { + if (npcmob && npcmob->GetAppearance() != eaDead) + npcmob->FaceTarget(mob); + ExportVar(package_name.c_str(), "data", objid); + ExportVar(package_name.c_str(), "text", data); + ExportVar(package_name.c_str(), "langid", extradata); + break; + } + + case EVENT_ITEM: { + if (npcmob->GetAppearance() != eaDead) { + npcmob->FaceTarget(mob); + } + + //this is such a hack... why aren't these just set directly.. + ExportVar(package_name.c_str(), "item1", GetVar("item1." + std::string(itoa(objid))).c_str()); + ExportVar(package_name.c_str(), "item2", GetVar("item2." + std::string(itoa(objid))).c_str()); + ExportVar(package_name.c_str(), "item3", GetVar("item3." + std::string(itoa(objid))).c_str()); + ExportVar(package_name.c_str(), "item4", GetVar("item4." + std::string(itoa(objid))).c_str()); + ExportVar(package_name.c_str(), "item1_charges", GetVar("item1.charges." + std::string(itoa(objid))).c_str()); + ExportVar(package_name.c_str(), "item2_charges", GetVar("item2.charges." + std::string(itoa(objid))).c_str()); + ExportVar(package_name.c_str(), "item3_charges", GetVar("item3.charges." + std::string(itoa(objid))).c_str()); + ExportVar(package_name.c_str(), "item4_charges", GetVar("item4.charges." + std::string(itoa(objid))).c_str()); + ExportVar(package_name.c_str(), "item1_attuned", GetVar("item1.attuned." + std::string(itoa(objid))).c_str()); + ExportVar(package_name.c_str(), "item2_attuned", GetVar("item2.attuned." + std::string(itoa(objid))).c_str()); + ExportVar(package_name.c_str(), "item3_attuned", GetVar("item3.attuned." + std::string(itoa(objid))).c_str()); + ExportVar(package_name.c_str(), "item4_attuned", GetVar("item4.attuned." + std::string(itoa(objid))).c_str()); + ExportVar(package_name.c_str(), "copper", GetVar("copper." + std::string(itoa(objid))).c_str()); + ExportVar(package_name.c_str(), "silver", GetVar("silver." + std::string(itoa(objid))).c_str()); + ExportVar(package_name.c_str(), "gold", GetVar("gold." + std::string(itoa(objid))).c_str()); + ExportVar(package_name.c_str(), "platinum", GetVar("platinum." + std::string(itoa(objid))).c_str()); + string hashname = package_name + std::string("::itemcount"); + perl->eval(std::string("%").append(hashname).append(" = ();").c_str()); + perl->eval(std::string("++$").append(hashname).append("{$").append(package_name).append("::item1};").c_str()); + perl->eval(std::string("++$").append(hashname).append("{$").append(package_name).append("::item2};").c_str()); + perl->eval(std::string("++$").append(hashname).append("{$").append(package_name).append("::item3};").c_str()); + perl->eval(std::string("++$").append(hashname).append("{$").append(package_name).append("::item4};").c_str()); + break; + } + + case EVENT_WAYPOINT_ARRIVE: + case EVENT_WAYPOINT_DEPART: { + ExportVar(package_name.c_str(), "wp", data); + break; + } + + case EVENT_HP: { + if (extradata == 1) { + ExportVar(package_name.c_str(), "hpevent", "-1"); + ExportVar(package_name.c_str(), "inchpevent", data); + } + else + { + ExportVar(package_name.c_str(), "hpevent", data); + ExportVar(package_name.c_str(), "inchpevent", "-1"); + } + break; + } + + case EVENT_TIMER: { + ExportVar(package_name.c_str(), "timer", data); + break; + } + + case EVENT_SIGNAL: { + ExportVar(package_name.c_str(), "signal", data); + break; + } + + case EVENT_NPC_SLAY: { + ExportVar(package_name.c_str(), "killed", mob->GetNPCTypeID()); + break; + } + + case EVENT_COMBAT: { + ExportVar(package_name.c_str(), "combat_state", data); + break; + } + + case EVENT_CLICKDOOR: { + Seperator sep(data); + ExportVar(package_name.c_str(), "doorid", sep.arg[0]); + ExportVar(package_name.c_str(), "version", sep.arg[1]); + break; + } + + case EVENT_LOOT: { + Seperator sep(data); + ExportVar(package_name.c_str(), "looted_id", sep.arg[0]); + ExportVar(package_name.c_str(), "looted_charges", sep.arg[1]); + ExportVar(package_name.c_str(), "corpse", sep.arg[2]); + break; + } + + case EVENT_ZONE:{ + ExportVar(package_name.c_str(), "target_zone_id", data); + break; + } + + case EVENT_CAST_ON: + case EVENT_CAST:{ + ExportVar(package_name.c_str(), "spell_id", data); + break; + } + + case EVENT_TASKACCEPTED:{ + ExportVar(package_name.c_str(), "task_id", data); + break; + } + + case EVENT_TASK_STAGE_COMPLETE:{ + Seperator sep(data); + ExportVar(package_name.c_str(), "task_id", sep.arg[0]); + ExportVar(package_name.c_str(), "activity_id", sep.arg[1]); + break; + } + + case EVENT_TASK_FAIL:{ + Seperator sep(data); + ExportVar(package_name.c_str(), "task_id", sep.arg[0]); + break; + } + + case EVENT_TASK_COMPLETE: + case EVENT_TASK_UPDATE:{ + Seperator sep(data); + ExportVar(package_name.c_str(), "donecount", sep.arg[0]); + ExportVar(package_name.c_str(), "activity_id", sep.arg[1]); + ExportVar(package_name.c_str(), "task_id", sep.arg[2]); + break; + } + + case EVENT_PLAYER_PICKUP:{ + ExportVar(package_name.c_str(), "picked_up_id", data); + break; + } + + case EVENT_AGGRO_SAY: { + ExportVar(package_name.c_str(), "data", objid); + ExportVar(package_name.c_str(), "text", data); + ExportVar(package_name.c_str(), "langid", extradata); + break; + } + + case EVENT_POPUPRESPONSE:{ + ExportVar(package_name.c_str(), "popupid", data); + break; + } + + case EVENT_PROXIMITY_SAY: { + ExportVar(package_name.c_str(), "data", objid); + ExportVar(package_name.c_str(), "text", data); + ExportVar(package_name.c_str(), "langid", extradata); + break; + } + + case EVENT_SCALE_CALC: + case EVENT_ITEM_ENTERZONE: { + ExportVar(package_name.c_str(), "itemid", objid); + ExportVar(package_name.c_str(), "itemname", iteminst->GetItem()->Name); + break; + } + + case EVENT_ITEM_CLICK_CAST: + case EVENT_ITEM_CLICK: { + ExportVar(package_name.c_str(), "itemid", objid); + ExportVar(package_name.c_str(), "itemname", iteminst->GetItem()->Name); + ExportVar(package_name.c_str(), "slotid", extradata); + break; + } + + case EVENT_GROUP_CHANGE: { + if(mob && mob->IsClient()) + { + ExportVar(package_name.c_str(), "grouped", mob->IsGrouped()); + ExportVar(package_name.c_str(), "raided", mob->IsRaidGrouped()); + } + break; + } + + case EVENT_HATE_LIST: { + ExportVar(package_name.c_str(), "hate_state", data); + break; + } + + case EVENT_SPELL_EFFECT_CLIENT: + case EVENT_SPELL_EFFECT_NPC: + case EVENT_SPELL_EFFECT_BUFF_TIC_CLIENT: + case EVENT_SPELL_EFFECT_BUFF_TIC_NPC: + { + ExportVar(package_name.c_str(), "caster_id", extradata); + break; + } + + //tradeskill events + case EVENT_COMBINE_SUCCESS: + case EVENT_COMBINE_FAILURE: + { + ExportVar(package_name.c_str(), "recipe_id", extradata); + ExportVar(package_name.c_str(), "recipe_name", data); + break; + } + + case EVENT_FORAGE_SUCCESS: { + ExportVar(package_name.c_str(), "foraged_item", extradata); + break; + } + + case EVENT_FISH_SUCCESS: { + ExportVar(package_name.c_str(), "fished_item", extradata); + break; + } + + case EVENT_CLICK_OBJECT: { + ExportVar(package_name.c_str(), "objectid", data); + break; + } + + case EVENT_DISCOVER_ITEM: { + ExportVar(package_name.c_str(), "itemid", extradata); + break; + } + + default: { + break; + } + } } #endif - - -// -//void PerlembParser::HandleQueue() { -// if(eventQueueProcessing) -// return; -// eventQueueProcessing = true; -// -// while(!eventQueue.empty()) { -// EventRecord e = eventQueue.front(); -// eventQueue.pop(); -// -// EventCommon(e.event, e.objid, e.data.c_str(), e.npcmob, e.iteminst, e.mob, e.extradata, e.global); -// } -// -// eventQueueProcessing = false; -//} -// -//void PerlembParser::EventCommon(QuestEventID event, uint32 objid, const char * data, NPC* npcmob, ItemInst* iteminst, Mob* mob, uint32 extradata, bool global) -//{ -// if(!perl) -// return; -// -// if(event >= _LargestEventID) -// return; -// -// if(perl->InUse()) { -// //queue the event for later. -// EventRecord e; -// e.event = event; -// e.objid = objid; -// if(data != nullptr) -// e.data = data; -// e.npcmob = npcmob; -// e.iteminst = iteminst; -// e.mob = mob; -// e.extradata = extradata; -// e.global = global; -// eventQueue.push(e); -// return; -// } -// -// bool isPlayerQuest = false; -// bool isGlobalPlayerQuest = false; -// bool isGlobalNPC = false; -// bool isItemQuest = false; -// bool isSpellQuest = false; -// if(event == EVENT_SPELL_EFFECT_CLIENT || -// event == EVENT_SPELL_EFFECT_NPC || -// event == EVENT_SPELL_EFFECT_BUFF_TIC_CLIENT || -// event == EVENT_SPELL_EFFECT_BUFF_TIC_NPC || -// event == EVENT_SPELL_EFFECT_TRANSLOCATE_COMPLETE) -// { -// isSpellQuest = true; -// } -// else -// { -// if(!npcmob && mob) { -// if(!iteminst) { -// if(global) { -// isGlobalPlayerQuest = true; -// } else { -// isPlayerQuest = true; -// } -// } -// else -// isItemQuest = true; -// } -// } -// -// string packagename; -// if(!isPlayerQuest && !isGlobalPlayerQuest && !isItemQuest && !isSpellQuest){ -// -// if(global){ -// isGlobalNPC = true; -// packagename = "global_npc"; -// } else { -// -// packagename = GetPkgPrefix(objid); -// } -// } -// else if(isItemQuest) { -// const Item_Struct* item = iteminst->GetItem(); -// if (!item) return; -// -// if (event == EVENT_SCALE_CALC || event == EVENT_ITEM_ENTERZONE) { -// packagename = item->CharmFile; -// } -// else if (event == EVENT_ITEM_CLICK || event == EVENT_ITEM_CLICK_CAST) { -// packagename = "script_"; -// packagename += itoa(item->ScriptFileID); -// } -// else { -// packagename = "item_"; -// packagename += itoa(objid); -// } -// } -// else if(isPlayerQuest) { -// if(!zone || !zone->GetShortName()) // possible segfault fix -// return; -// packagename = "player"; -// packagename += "_"; -// packagename += zone->GetShortName(); -// } -// else if(isGlobalPlayerQuest) { -// packagename = "global_player"; -// } -// else -// { -// packagename = "spell_effect_"; -// packagename += data; -// } -// -// const char *sub_name = QuestEventSubroutines[event]; -// -// //make sure the sub we need even exists before we even do all this crap. -// if(!perl->SubExists(packagename.c_str(), sub_name)) { -// return; -// } -// -// int charid = 0; -// if (mob && mob->IsClient()) { // some events like waypoint and spawn don't have a player involved -// charid = mob->CastToClient()->CharacterID(); -// } else { -// if(npcmob) -// { -// charid = -npcmob->GetNPCTypeID(); // make char id negative npc id as a fudge -// } -// else if(mob && mob->IsNPC()) -// { -// charid = -mob->CastToNPC()->GetNPCTypeID(); // make char id negative npc id as a fudge -// } -// } -// ExportVar(packagename.c_str(), "charid", charid); -// -// //NPC quest -// if(!isPlayerQuest && !isGlobalPlayerQuest && !isItemQuest && !isSpellQuest) -// { -// //only export for npcs that are global enabled. -// if(npcmob && npcmob->GetQglobal()) -// { -// map globhash; -// QGlobalCache *npc_c = nullptr; -// QGlobalCache *char_c = nullptr; -// QGlobalCache *zone_c = nullptr; -// -// //retrieve our globals -// npc_c = npcmob->GetQGlobals(); -// if(mob && mob->IsClient()) -// char_c = mob->CastToClient()->GetQGlobals(); -// zone_c = zone->GetQGlobals(); -// -// if(!npc_c) -// { -// npc_c = npcmob->CreateQGlobals(); -// npc_c->LoadByNPCID(npcmob->GetNPCTypeID()); -// } -// -// if(!char_c) -// { -// if(mob && mob->IsClient()) -// { -// char_c = mob->CastToClient()->CreateQGlobals(); -// char_c->LoadByCharID(mob->CastToClient()->CharacterID()); -// } -// } -// -// if(!zone_c) -// { -// zone_c = zone->CreateQGlobals(); -// zone_c->LoadByZoneID(zone->GetZoneID()); -// zone_c->LoadByGlobalContext(); -// } -// -// std::list globalMap; -// if(npc_c) -// { -// QGlobalCache::Combine(globalMap, npc_c->GetBucket(), npcmob->GetNPCTypeID(), charid, zone->GetZoneID()); -// } -// -// if(char_c) -// { -// QGlobalCache::Combine(globalMap, char_c->GetBucket(), npcmob->GetNPCTypeID(), charid, zone->GetZoneID()); -// } -// -// if(zone_c) -// { -// QGlobalCache::Combine(globalMap, zone_c->GetBucket(), npcmob->GetNPCTypeID(), charid, zone->GetZoneID()); -// } -// -// std::list::iterator iter = globalMap.begin(); -// while(iter != globalMap.end()) -// { -// globhash[(*iter).name] = (*iter).value; -// ExportVar(packagename.c_str(), (*iter).name.c_str(), (*iter).value.c_str()); -// ++iter; -// } -// ExportHash(packagename.c_str(), "qglobals", globhash); -// } -// } -// else -// { -// map globhash; -// QGlobalCache *char_c = nullptr; -// QGlobalCache *zone_c = nullptr; -// -// //retrieve our globals -// if(mob && mob->IsClient()) -// char_c = mob->CastToClient()->GetQGlobals(); -// zone_c = zone->GetQGlobals(); -// -// if(!char_c) -// { -// if(mob && mob->IsClient()) -// { -// char_c = mob->CastToClient()->CreateQGlobals(); -// char_c->LoadByCharID(mob->CastToClient()->CharacterID()); -// } -// } -// -// if(!zone_c) -// { -// zone_c = zone->CreateQGlobals(); -// zone_c->LoadByZoneID(zone->GetZoneID()); -// zone_c->LoadByGlobalContext(); -// } -// -// std::list globalMap; -// if(char_c) -// { -// QGlobalCache::Combine(globalMap, char_c->GetBucket(), 0, charid, zone->GetZoneID()); -// } -// -// if(zone_c) -// { -// QGlobalCache::Combine(globalMap, zone_c->GetBucket(), 0, charid, zone->GetZoneID()); -// } -// -// std::list::iterator iter = globalMap.begin(); -// while(iter != globalMap.end()) -// { -// globhash[(*iter).name] = (*iter).value; -// ExportVar(packagename.c_str(), (*iter).name.c_str(), (*iter).value.c_str()); -// ++iter; -// } -// ExportHash(packagename.c_str(), "qglobals", globhash); -// } -// -// uint8 fac = 0; -// if (mob && mob->IsClient()) { -// ExportVar(packagename.c_str(), "uguild_id", mob->CastToClient()->GuildID()); -// ExportVar(packagename.c_str(), "uguildrank", mob->CastToClient()->GuildRank()); -// ExportVar(packagename.c_str(), "status", mob->CastToClient()->Admin()); -// } -// -// if(!isPlayerQuest && !isGlobalPlayerQuest && !isItemQuest){ -// if (mob && npcmob && mob->IsClient() && npcmob->IsNPC()) { -// Client* client = mob->CastToClient(); -// NPC* npc = npcmob->CastToNPC(); -// -// // Need to figure out why one of these casts would fail.. -// if (client && npc) { -// fac = client->GetFactionLevel(client->CharacterID(), npcmob->GetID(), client->GetRace(), client->GetClass(), client->GetDeity(), npc->GetPrimaryFaction(), npcmob); -// } -// else if (!client) { -// LogFile->write(EQEMuLog::Status, "WARNING: cast failure on mob->CastToClient()"); -// } -// else if (!npc) { -// LogFile->write(EQEMuLog::Status, "WARNING: cast failure on npcmob->CastToNPC()"); -// } -// } -// } -// if (mob) { -// ExportVar(packagename.c_str(), "name", mob->GetName()); -// ExportVar(packagename.c_str(), "race", GetRaceName(mob->GetRace())); -// ExportVar(packagename.c_str(), "class", GetEQClassName(mob->GetClass())); -// ExportVar(packagename.c_str(), "ulevel", mob->GetLevel()); -// ExportVar(packagename.c_str(), "userid", mob->GetID()); -// } -// -// if(!isPlayerQuest && !isGlobalPlayerQuest && !isItemQuest && !isSpellQuest) -// { -// if (npcmob) -// { -// ExportVar(packagename.c_str(), "mname", npcmob->GetName()); -// ExportVar(packagename.c_str(), "mobid", npcmob->GetID()); -// ExportVar(packagename.c_str(), "mlevel", npcmob->GetLevel()); -// ExportVar(packagename.c_str(), "hpratio",npcmob->GetHPRatio()); -// ExportVar(packagename.c_str(), "x", npcmob->GetX() ); -// ExportVar(packagename.c_str(), "y", npcmob->GetY() ); -// ExportVar(packagename.c_str(), "z", npcmob->GetZ() ); -// ExportVar(packagename.c_str(), "h", npcmob->GetHeading() ); -// if ( npcmob->GetTarget() ) { -// ExportVar(packagename.c_str(), "targetid", npcmob->GetTarget()->GetID()); -// ExportVar(packagename.c_str(), "targetname", npcmob->GetTarget()->GetName()); -// } -// } -// -// if (fac) { -// ExportVar(packagename.c_str(), "faction", itoa(fac)); -// } -// } -// -// if (zone) { -// ExportVar(packagename.c_str(), "zoneid", zone->GetZoneID()); -// ExportVar(packagename.c_str(), "zoneln", zone->GetLongName()); -// ExportVar(packagename.c_str(), "zonesn", zone->GetShortName()); -// ExportVar(packagename.c_str(), "instanceid", zone->GetInstanceID()); -// ExportVar(packagename.c_str(), "instanceversion", zone->GetInstanceVersion()); -// TimeOfDay_Struct eqTime; -// zone->zone_time.getEQTimeOfDay( time(0), &eqTime); -// ExportVar(packagename.c_str(), "zonehour", eqTime.hour - 1); -// ExportVar(packagename.c_str(), "zonemin", eqTime.minute); -// ExportVar(packagename.c_str(), "zonetime", (eqTime.hour - 1) * 100 + eqTime.minute); -// ExportVar(packagename.c_str(), "zoneweather", zone->zone_weather); -// } -// -//// $hasitem -//#define HASITEM_FIRST 0 -//#define HASITEM_LAST 29 // this includes worn plus 8 base slots -//#define HASITEM_ISNULLITEM(item) ((item==-1) || (item==0)) -// -// if(mob && mob->IsClient()) -// { -// string hashname = packagename + std::string("::hasitem"); -//#if EQDEBUG >= 7 -// LogFile->write(EQEMuLog::Debug, "starting hasitem, on : %s",hashname.c_str() ); -//#endif -// -// //start with an empty hash -// perl->eval(std::string("%").append(hashname).append(" = ();").c_str()); -// -// for(int slot=HASITEM_FIRST; slot<=HASITEM_LAST;slot++) -// { -// char *hi_decl=nullptr; -// int itemid=mob->CastToClient()->GetItemIDAt(slot); -// if(!HASITEM_ISNULLITEM(itemid)) -// { -// MakeAnyLenString(&hi_decl, "push (@{$%s{%d}},%d);",hashname.c_str(),itemid,slot); -//// this is annoying -//#if EQDEBUG >= 7 -// LogFile->write(EQEMuLog::Debug, "declare hasitem : %s",hi_decl); -//#endif -// perl->eval(hi_decl); -// safe_delete_array(hi_decl); -// } -// } -// } -//// $oncursor -// if(mob && mob->IsClient()) { -// string hashname = packagename + std::string("::oncursor"); -// perl->eval(std::string("%").append(hashname).append(" = ();").c_str()); -// char *hi_decl = nullptr; -// int itemid = mob->CastToClient()->GetItemIDAt(30); -// if(!HASITEM_ISNULLITEM(itemid)) { -// MakeAnyLenString(&hi_decl, "push (@{$%s{%d}},%d);",hashname.c_str(),itemid,30); -// perl->eval(hi_decl); -// safe_delete_array(hi_decl); -// } -// } -// //do any event-specific stuff... -// switch (event) { -// case EVENT_SAY: { -// if (npcmob && npcmob->GetAppearance() != eaDead) -// npcmob->FaceTarget(mob); -// ExportVar(packagename.c_str(), "data", objid); -// ExportVar(packagename.c_str(), "text", data); -// ExportVar(packagename.c_str(), "langid", extradata); -// break; -// } -// case EVENT_ITEM: { -// if (npcmob->GetAppearance() != eaDead) -// npcmob->FaceTarget(mob); -// //this is such a hack... why aren't these just set directly.. -// ExportVar(packagename.c_str(), "item1", GetVar("item1", objid).c_str()); -// ExportVar(packagename.c_str(), "item2", GetVar("item2", objid).c_str()); -// ExportVar(packagename.c_str(), "item3", GetVar("item3", objid).c_str()); -// ExportVar(packagename.c_str(), "item4", GetVar("item4", objid).c_str()); -// ExportVar(packagename.c_str(), "item1_charges", GetVar("item1.charges", objid).c_str()); -// ExportVar(packagename.c_str(), "item2_charges", GetVar("item2.charges", objid).c_str()); -// ExportVar(packagename.c_str(), "item3_charges", GetVar("item3.charges", objid).c_str()); -// ExportVar(packagename.c_str(), "item4_charges", GetVar("item4.charges", objid).c_str()); -// ExportVar(packagename.c_str(), "item1_attuned", GetVar("item1.attuned", objid).c_str()); -// ExportVar(packagename.c_str(), "item2_attuned", GetVar("item2.attuned", objid).c_str()); -// ExportVar(packagename.c_str(), "item3_attuned", GetVar("item3.attuned", objid).c_str()); -// ExportVar(packagename.c_str(), "item4_attuned", GetVar("item4.attuned", objid).c_str()); -// ExportVar(packagename.c_str(), "copper", GetVar("copper", objid).c_str()); -// ExportVar(packagename.c_str(), "silver", GetVar("silver", objid).c_str()); -// ExportVar(packagename.c_str(), "gold", GetVar("gold", objid).c_str()); -// ExportVar(packagename.c_str(), "platinum", GetVar("platinum", objid).c_str()); -// string hashname = packagename + std::string("::itemcount"); -// perl->eval(std::string("%").append(hashname).append(" = ();").c_str()); -// perl->eval(std::string("++$").append(hashname).append("{$").append(packagename).append("::item1};").c_str()); -// perl->eval(std::string("++$").append(hashname).append("{$").append(packagename).append("::item2};").c_str()); -// perl->eval(std::string("++$").append(hashname).append("{$").append(packagename).append("::item3};").c_str()); -// perl->eval(std::string("++$").append(hashname).append("{$").append(packagename).append("::item4};").c_str()); -// break; -// } -// case EVENT_WAYPOINT_ARRIVE: -// case EVENT_WAYPOINT_DEPART: { -// ExportVar(packagename.c_str(), "wp", data); -// break; -// } -// case EVENT_HP: { -// if (extradata == 1) { -// ExportVar(packagename.c_str(), "hpevent", "-1"); -// ExportVar(packagename.c_str(), "inchpevent", data); -// } -// else -// { -// ExportVar(packagename.c_str(), "hpevent", data); -// ExportVar(packagename.c_str(), "inchpevent", "-1"); -// } -// break; -//} -// case EVENT_TIMER: { -// ExportVar(packagename.c_str(), "timer", data); -// break; -// } -// case EVENT_SIGNAL: { -// ExportVar(packagename.c_str(), "signal", data); -// break; -// } -// case EVENT_NPC_SLAY: { -// ExportVar(packagename.c_str(), "killed", mob->GetNPCTypeID()); -// break; -// } -// case EVENT_COMBAT: { -// ExportVar(packagename.c_str(), "combat_state", data); -// break; -// } -// -// case EVENT_CLICKDOOR: { -// Seperator *sep = new Seperator(data); -// ExportVar(packagename.c_str(), "doorid", sep->arg[0]); -// ExportVar(packagename.c_str(), "version", sep->arg[1]); -// break; -// } -// -// case EVENT_LOOT:{ -// Seperator *sep = new Seperator(data); -// ExportVar(packagename.c_str(), "looted_id", sep->arg[0]); -// ExportVar(packagename.c_str(), "looted_charges", sep->arg[1]); -// ExportVar(packagename.c_str(), "corpse", sep->arg[2]); -// safe_delete(sep); -// break; -// } -// -// case EVENT_ZONE:{ -// ExportVar(packagename.c_str(), "target_zone_id", data); -// break; -// } -// -// case EVENT_CAST_ON: -// case EVENT_CAST:{ -// ExportVar(packagename.c_str(), "spell_id", data); -// break; -// } -// -// case EVENT_TASKACCEPTED:{ -// ExportVar(packagename.c_str(), "task_id", data); -// break; -// } -// -// case EVENT_TASK_STAGE_COMPLETE:{ -// Seperator *sep = new Seperator(data); -// ExportVar(packagename.c_str(), "task_id", sep->arg[0]); -// ExportVar(packagename.c_str(), "activity_id", sep->arg[1]); -// safe_delete(sep); -// break; -// } -// case EVENT_TASK_FAIL:{ -// Seperator *sep = new Seperator(data); -// ExportVar(packagename.c_str(), "task_id", sep->arg[0]); -// safe_delete(sep); -// break; -// } -// case EVENT_TASK_COMPLETE: -// case EVENT_TASK_UPDATE:{ -// Seperator *sep = new Seperator(data); -// ExportVar(packagename.c_str(), "donecount", sep->arg[0]); -// ExportVar(packagename.c_str(), "activity_id", sep->arg[1]); -// ExportVar(packagename.c_str(), "task_id", sep->arg[2]); -// safe_delete(sep); -// break; -// } -// case EVENT_PLAYER_PICKUP:{ -// ExportVar(packagename.c_str(), "picked_up_id", data); -// break; -// } -// -// case EVENT_AGGRO_SAY: { -// ExportVar(packagename.c_str(), "data", objid); -// ExportVar(packagename.c_str(), "text", data); -// ExportVar(packagename.c_str(), "langid", extradata); -// break; -// } -// case EVENT_POPUPRESPONSE:{ -// ExportVar(packagename.c_str(), "popupid", data); -// break; -// } -// case EVENT_PROXIMITY_SAY: { -// ExportVar(packagename.c_str(), "data", objid); -// ExportVar(packagename.c_str(), "text", data); -// ExportVar(packagename.c_str(), "langid", extradata); -// break; -// } -// case EVENT_SCALE_CALC: -// case EVENT_ITEM_ENTERZONE: { -// ExportVar(packagename.c_str(), "itemid", objid); -// ExportVar(packagename.c_str(), "itemname", iteminst->GetItem()->Name); -// break; -// } -// case EVENT_ITEM_CLICK_CAST: -// case EVENT_ITEM_CLICK: { -// ExportVar(packagename.c_str(), "itemid", objid); -// ExportVar(packagename.c_str(), "itemname", iteminst->GetItem()->Name); -// ExportVar(packagename.c_str(), "slotid", extradata); -// break; -// } -// case EVENT_GROUP_CHANGE: { -// if(mob && mob->IsClient()) -// { -// ExportVar(packagename.c_str(), "grouped", mob->IsGrouped()); -// ExportVar(packagename.c_str(), "raided", mob->IsRaidGrouped()); -// } -// break; -// } -// case EVENT_HATE_LIST: { -// ExportVar(packagename.c_str(), "hate_state", data); -// break; -// } -// -// case EVENT_SPELL_EFFECT_CLIENT: -// case EVENT_SPELL_EFFECT_NPC: -// case EVENT_SPELL_EFFECT_BUFF_TIC_CLIENT: -// case EVENT_SPELL_EFFECT_BUFF_TIC_NPC: -// { -// ExportVar(packagename.c_str(), "caster_id", extradata); -// break; -// } -// //tradeskill events -// case EVENT_COMBINE_SUCCESS: -// case EVENT_COMBINE_FAILURE: -// { -// ExportVar(packagename.c_str(), "recipe_id", extradata); -// ExportVar(packagename.c_str(), "recipe_name", data); -// break; -// } -// -// case EVENT_FORAGE_SUCCESS: { -// ExportVar(packagename.c_str(), "foraged_item", extradata); -// break; -// } -// -// case EVENT_FISH_SUCCESS: { -// ExportVar(packagename.c_str(), "fished_item", extradata); -// break; -// } -// -// case EVENT_CLICK_OBJECT: { -// ExportVar(packagename.c_str(), "objectid", data); -// break; -// } -// -// case EVENT_DISCOVER_ITEM: { -// ExportVar(packagename.c_str(), "itemid", extradata); -// break; -// } -// -// //nothing special about these events -// case EVENT_DEATH: -// case EVENT_SPAWN: -// case EVENT_ATTACK: -// case EVENT_SLAY: -// case EVENT_AGGRO: -// case EVENT_ENTER: -// case EVENT_EXIT: -// case EVENT_ENTERZONE: -// case EVENT_LEVEL_UP: -// case EVENT_KILLED_MERIT: -// case EVENT_TARGET_CHANGE: -// break; -// -// default: { -// // should we do anything here? -// break; -// } -// } -// -// if(isPlayerQuest || isGlobalPlayerQuest){ -// SendCommands(packagename.c_str(), sub_name, 0, mob, mob, nullptr); -// } -// else if(isItemQuest) { -// SendCommands(packagename.c_str(), sub_name, 0, mob, mob, iteminst); -// } -// else if(isSpellQuest) -// { -// if(mob) { -// SendCommands(packagename.c_str(), sub_name, 0, mob, mob, nullptr); -// } else { -// SendCommands(packagename.c_str(), sub_name, 0, npcmob, mob, nullptr); -// } -// } -// else { -// SendCommands(packagename.c_str(), sub_name, objid, npcmob, mob, nullptr); -// } -// -// //now handle any events that cropped up... -// HandleQueue(); -//} -// -//bool PerlembParser::isloaded(const char *packagename) const { -// char buffer[120]; -// snprintf(buffer, 120, "$%s::isloaded", packagename); -// if(!perl->VarExists(packagename, "isloaded")) -// return(false); -// return perl->geti(buffer); -//} -// -// -////this function does NOT consider the default to be a quest -//int PerlembParser::HasQuestFile(uint32 npcid) { -// int32 qstID = GetNPCqstID(npcid); -// int success=1; -// -// if(hasQuests.count(npcid) == 1) { -// questMode mode = hasQuests[npcid]; -// if(mode == questDefault) -// return(false); -// return(true); -// } -// -// if (qstID==-1) -// success = false; -// if (!success) -// return(false); -// -// if(hasQuests.count(npcid) != 1) -// return(false); -// -// questMode mode = hasQuests[npcid]; -// if(mode == questDefault) -// return(false); -// -// return(true); -//} -// -//bool PerlembParser::HasQuestSub(uint32 npcid, const char *subname) { -// int32 qstID = GetNPCqstID(npcid); -// -// string packagename = GetPkgPrefix(npcid); -// -// return(perl->SubExists(packagename.c_str(), subname)); -//} -// -//bool PerlembParser::HasGlobalQuestSub(const char *subname) { -// string packagename = "global_npc"; -// -// return(perl->SubExists(packagename.c_str(), subname)); -//} -// -//bool PerlembParser::PlayerHasQuestSub(const char *subname) { -// -// string packagename = "player_"; -// packagename += zone->GetShortName(); -// -// if(subname == "EVENT_CAST") -// return (playerQuestLoaded[zone->GetShortName()] == pQuestEventCast); -// -// return(perl->SubExists(packagename.c_str(), subname)); -//} -// -//bool PerlembParser::GlobalPlayerHasQuestSub(const char *subname) { -// -// string packagename = "global_player"; -// -// if(subname == "EVENT_CAST") -// return (globalPlayerQuestLoaded == pQuestEventCast); -// -// return(perl->SubExists(packagename.c_str(), subname)); -//} -// -//bool PerlembParser::SpellHasQuestSub(uint32 id, const char *subname) -//{ -// string packagename = "spell_effect_"; -// packagename += itoa(id); -// -// return(perl->SubExists(packagename.c_str(), subname)); -//} -// -//bool PerlembParser::ItemHasQuestSub(ItemInst *itm, const char *subname) -//{ -// string packagename; -// const Item_Struct* item = itm->GetItem(); -// if(!item) -// return false; -// -// if(strcmp("EVENT_SCALE_CALC", subname) == 0 || strcmp("EVENT_ITEM_ENTERZONE", subname) == 0) -// { -// packagename = item->CharmFile; -// } -// else if(strcmp("EVENT_ITEM_CLICK", subname) == 0 || strcmp("EVENT_ITEM_CLICK_CAST", subname) == 0 ) -// { -// packagename = "script_"; -// packagename += itoa(item->ScriptFileID); -// } -// else -// { -// packagename = "item_"; -// packagename += itoa(item->ID); -// } -// -// return perl->SubExists(packagename.c_str(), subname); -//} -// -////utility - return something of the form "qst1234"... -////will return "qst[DEFAULT_QUEST_PREFIX]" if the npc in question has no script of its own or failed to compile and defaultOK is set to true -//std::string PerlembParser::GetPkgPrefix(uint32 npcid, bool defaultOK) -//{ -// char buf[32]; -// snprintf(buf, 32, "qst%lu", (unsigned long) npcid); -//// std::string prefix = "qst"; -//// std::string temp = prefix + (std::string)(itoa(npcid)); -//// if(!npcid || (defaultOK && isdefault(temp.c_str()))) -// if(!npcid || (defaultOK && (hasQuests.count(npcid) == 1 && hasQuests[npcid] == questDefault))) -// { -// snprintf(buf, 32, "qst%s", DEFAULT_QUEST_PREFIX.c_str()); -// } -// -// return(std::string(buf)); -//} -// -//void PerlembParser::SendCommands(const char * pkgprefix, const char *event, uint32 npcid, Mob* other, Mob* mob, ItemInst* iteminst) -//{ -// if(!perl) -// return; -// _ZP(PerlembParser_SendCommands); -// -// if(mob && mob->IsClient()) -// quest_manager.StartQuest(other, mob->CastToClient()); -// else -// quest_manager.StartQuest(other, nullptr); -// -// try -// { -// std::string cmd = "@quest::cmd_queue = (); package " + (std::string)(pkgprefix) + (std::string)(";"); -// perl->eval(cmd.c_str()); -// perl->dosub(std::string(pkgprefix).append("::").append(event).c_str()); -// } -// catch(const char * err) -// { -// //try to reduce some of the console spam... -// //todo: tweak this to be more accurate at deciding what to filter (we don't want to gag legit errors) -// if(!strstr(err,"Undefined subroutine")) -// LogFile->write(EQEMuLog::Status, "Script error: %s::%s - %s", pkgprefix, event, err); -// return; -// } -// -// int numcoms = perl->geti("quest::qsize()"); -// for(int c = 0; c < numcoms; ++c) -// { -// char var[1024] = {0}; -// sprintf(var,"$quest::cmd_queue[%d]{func}",c); -// std::string cmd = perl->getstr(var); -// sprintf(var,"$quest::cmd_queue[%d]{args}",c); -// std::string args = perl->getstr(var); -// size_t num_args = std::count(args.begin(), args.end(), ',') + 1; -// -// ExCommands(cmd, args, num_args, npcid, other, mob); -// } -// -// quest_manager.EndQuest(); -//} -// -//#ifdef EMBPERL_COMMANDS -//void PerlembParser::ExecCommand(Client *c, Seperator *sep) { -//#ifdef EMBPERL_XS_CLASSES -// SV *client = get_sv("commands::client", true); -// if(c != nullptr) { -// sv_setref_pv(client, "Client", c); -// } else { -// //clear out the value, mainly to get rid of blessedness -// //which prevents us from accessing an invalid pointer -// sv_setsv(client, newSV(0)); -// } -//#endif -// -// char namebuf[128]; -// snprintf(namebuf, 128, "commands::%s", sep->arg[0]+1); -// namebuf[127] = '\0'; -// std::vector args; -// int i; -// for(i = 1; i <= sep->argnum; i++) { -// args.push_back(sep->arg[i]); -// } -// -// try -// { -// perl->dosub(namebuf, &args); -// } catch(const char * err) -// { -// c->Message(13, "Error executing perl command, check the logs."); -// LogFile->write(EQEMuLog::Quest, "Script error: %s", err); -// } -// -// //now handle any events that cropped up... -// HandleQueue(); -//} -//#endif -// -//void PerlembParser::map_funs() -//{ -// //map each "exported" function to a variable list that we can access from c -// //todo: -// // break 1|settimer 2|stoptimer 1|dbspawnadd 2|flagcheck 1|write 2| -// // settarget 2|follow 1|sfollow 1|save 1|setallskill 1 -// //update/ensure that the api matches that of the native script engine -// perl->eval( -//"{" -//"package quest;" -//"&boot_qc;" -//"@cmd_queue = ();" -//"sub qsize{return scalar(@cmd_queue)};" -//"sub say{push(@cmd_queue,{func=>'say',args=>join(',',@_)});}" -//"sub emote{push(@cmd_queue,{func=>'emote',args=>join(',',@_)});}" -//"sub shout{push(@cmd_queue,{func=>'shout',args=>join(',',@_)});}" -//"sub spawn{push(@cmd_queue,{func=>'spawn',args=>join(',',@_)});}" -//"sub spawn2{push(@cmd_queue,{func=>'spawn2',args=>join(',',@_)});}" -//"sub unique_spawn{push(@cmd_queue,{func=>'unique_spawn',args=>join(',',@_)});}" -//"sub echo{push(@cmd_queue,{func=>'echo',args=>join(',',@_)});}" -//"sub summonitem{push(@cmd_queue,{func=>'summonitem',args=>join(',',@_)});}" -//"sub castspell{push(@cmd_queue,{func=>'castspell',args=>join(',',@_)});}" -//"sub selfcast{push(@cmd_queue,{func=>'selfcast',args=>join(',',@_)});}" -//"sub depop{push(@cmd_queue,{func=>'depop'});}" -//"sub exp{push(@cmd_queue,{func=>'exp',args=>join(',',@_)});}" -//"sub level{push(@cmd_queue,{func=>'level',args=>join(',',@_)});}" -//"sub safemove{push(@cmd_queue,{func=>'safemove'});}" -//"sub rain{push(@cmd_queue,{func=>'rain',args=>join(',',@_)});}" -//"sub snow{push(@cmd_queue,{func=>'snow',args=>join(',',@_)});}" -//"sub givecash{push(@cmd_queue,{func=>'givecash',args=>join(',',@_)});}" -//"sub pvp{push(@cmd_queue,{func=>'pvp',args=>join(',',@_)});}" -//"sub doanim{push(@cmd_queue,{func=>'doanim',args=>join(',',@_)});}" -//"sub addskill{push(@cmd_queue,{func=>'addskill',args=>join(',',@_)});}" -//"sub me{push(@cmd_queue,{func=>'me',args=>join(',',@_)});}" -//"sub permagender{push(@cmd_queue,{func=>'permagender',args=>join(',',@_)});}" -//"sub permarace{push(@cmd_queue,{func=>'permarace',args=>join(',',@_)});}" -//"sub scribespells{push(@cmd_queue,{func=>'scribespells',args=>join(',',@_)});}" -//"sub permaclass{push(@cmd_queue,{func=>'permaclass',args=>join(',',@_)});}" -//"sub surname{push(@cmd_queue,{func=>'surname',args=>join(',',@_)});}" -//"sub addldonpoint{push(@cmd_queue,{func=>'addldonpoint',args=>join(',',@_)});}" -//"sub ding{push(@cmd_queue,{func=>'ding',args=>join(',',@_)});}" -//"sub faction{push(@cmd_queue,{func=>'faction',args=>join(',',@_)});}" -//"sub setguild{push(@cmd_queue,{func=>'setguild',args=>join(',',@_)});}" -//"sub rebind{push(@cmd_queue,{func=>'rebind',args=>join(',',@_)});}" -//"sub flagcheck{push(@cmd_queue,{func=>'flagcheck',args=>join(',',@_)});}" -//"sub write{push(@cmd_queue,{func=>'write',args=>join(',',@_)});}" -//"sub settime{push(@cmd_queue,{func=>'settime',args=>join(',',@_)});}" -//"sub setsky{push(@cmd_queue,{func=>'setsky',args=>join(',',@_)});}" -//"sub settimer{push(@cmd_queue,{func=>'settimer',args=>join(',',@_)});}" -//"sub stoptimer{push(@cmd_queue,{func=>'stoptimer',args=>join(',',@_)});}" -//"sub settarget{push(@cmd_queue,{func=>'settarget',args=>join(',',@_)});}" -//"sub follow{push(@cmd_queue,{func=>'follow',args=>join(',',@_)});}" -//"sub sfollow{push(@cmd_queue,{func=>'sfollow',args=>join(',',@_)});}" -//"sub movepc{push(@cmd_queue,{func=>'movepc',args=>join(',',@_)});}" -//"sub gmmove{push(@cmd_queue,{func=>'gmmove',args=>join(',',@_)});}" -//"sub movegrp{push(@cmd_queue,{func=>'movegrp',args=>join(',',@_)});}" -//"sub setlanguage{push(@cmd_queue,{func=>'setlanguage',args=>join(',',@_)});}" -//"sub setskill{push(@cmd_queue,{func=>'setskill',args=>join(',',@_)});}" -//"sub setallskill{push(@cmd_queue,{func=>'setallskill',args=>join(',',@_)});}" -//"sub attack{push(@cmd_queue,{func=>'attack',args=>join(',',@_)});}" -//"sub save{push(@cmd_queue,{func=>'save',args=>join(',',@_)});}" -//"sub linkitem{push(@cmd_queue,{func=>'linkitem',args=>join(',',@_)});}" -//"sub sethp{push(@cmd_queue,{func=>'sethp',args=>join(',',@_)});}" -//"sub signal{push(@cmd_queue,{func=>'signal',args=>join(',',@_)});}" -//"sub setglobal{push(@cmd_queue,{func=>'setglobal',args=>join(',',@_)});}" -//"sub targlobal{push(@cmd_queue,{func=>'targlobal',args=>join(',',@_)});}" -//"sub delglobal{push(@cmd_queue,{func=>'delglobal',args=>join(',',@_)});}" -//"sub setnexthpevent{push(@cmd_queue,{func=>'setnexthpevent',args=>join(',',@_)});}" -//"sub setnextinchpevent{push(@cmd_queue,{func=>'setnextinchpevent',args=>join(',',@_)});}" -//"sub respawn{push(@cmd_queue,{func=>'respawn',args=>join(',',@_)});}" -//"sub stop{push(@cmd_queue,{func=>'stop',args=>join(',',@_)});}" -//"sub pause{push(@cmd_queue,{func=>'pause',args=>join(',',@_)});}" -//"sub resume{push(@cmd_queue,{func=>'resume',args=>join(',',@_)});}" -//"sub start{push(@cmd_queue,{func=>'start',args=>join(',',@_)});}" -//"sub moveto{push(@cmd_queue,{func=>'moveto',args=>join(',',@_)});}" -//"sub warp{push(@cmd_queue,{func=>'warp',args=>join(',',@_)});}" -//"sub changedeity{push(@cmd_queue,{func=>'changedeity',args=>join(',',@_)});}" -//"sub addldonpoints{push(@cmd_queue,{func=>'addldonpoints',args=>join(',',@_)});}" -//"sub addloot{push(@cmd_queue,{func=>'addloot',args=>join(',',@_)});}" -//"sub traindisc{push(@cmd_queue,{func=>'traindisc',args=>join(',',@_)});}" -//"sub set_proximity{push(@cmd_queue,{func=>'set_proximity',args=>join(',',@_)});}" -//"sub clear_proximity{push(@cmd_queue,{func=>'clear_proximity',args=>join(',',@_)});}" -//"sub setanim{push(@cmd_queue,{func=>'setanim',args=>join(',',@_)});}" -//"sub showgrid{push(@cmd_queue,{func=>'showgrid',args=>join(',',@_)});}" -//"sub showpath{push(@cmd_queue,{func=>'showpath',args=>join(',',@_)});}" -//"sub pathto{push(@cmd_queue,{func=>'pathto',args=>join(',',@_)});}" -//"sub spawn_condition{push(@cmd_queue,{func=>'spawn_condition',args=>join(',',@_)});}" -//"sub toggle_spawn_event{push(@cmd_queue,{func=>'toggle_spawn_event',args=>join(',',@_)});}" -//"sub set_zone_flag{push(@cmd_queue,{func=>'set_zone_flag',args=>join(',',@_)});}" -//"sub clear_zone_flag{push(@cmd_queue,{func=>'clear_zone_flag',args=>join(',',@_)});}" -//"package main;" -//"}" -//);//eval -//} -// -//#endif //EMBPERL -// -//#endif //EMBPARSER_CPP diff --git a/zone/embparser.h b/zone/embparser.h index 80eafc091..0680ae6f9 100644 --- a/zone/embparser.h +++ b/zone/embparser.h @@ -23,7 +23,7 @@ class PerlembParser : public QuestInterface { typedef struct { QuestEventID event; uint32 objid; - const char *data; + std::string data; NPC* npcmob; ItemInst* iteminst; Mob* mob; @@ -75,13 +75,37 @@ private: void SendCommands(const char *pkgprefix, const char *event, uint32 npcid, Mob* other, Mob* mob, ItemInst* iteminst); void MapFunctions(); + void HandleQueue(); + void AddQueueEvent(QuestEventID event, uint32 objid, const char * data, NPC* npcmob, ItemInst* iteminst, Mob* mob, + uint32 extradata, bool global); + + void GetQuestTypes(bool &isPlayerQuest, bool &isGlobalPlayerQuest, bool &isGlobalNPC, bool &isItemQuest, + bool &isSpellQuest, QuestEventID event, NPC* npcmob, ItemInst* iteminst, Mob* mob, bool global); + void GetQuestPackageName(bool &isPlayerQuest, bool &isGlobalPlayerQuest, bool &isGlobalNPC, bool &isItemQuest, + bool &isSpellQuest, std::string &package_name, QuestEventID event, uint32 objid, const char * data, + NPC* npcmob, ItemInst* iteminst, bool global); + void ExportCharID(const std::string &package_name, int &char_id, NPC *npcmob, Mob *mob); + void ExportQGlobals(bool isPlayerQuest, bool isGlobalPlayerQuest, bool isGlobalNPC, bool isItemQuest, + bool isSpellQuest, std::string &package_name, NPC *npcmob, Mob *mob, int char_id); + void ExportMobVariables(bool isPlayerQuest, bool isGlobalPlayerQuest, bool isGlobalNPC, bool isItemQuest, + bool isSpellQuest, std::string &package_name, Mob *mob, NPC *npcmob); + void ExportZoneVariables(std::string &package_name); + void ExportItemVariables(std::string &package_name, Mob *mob); + void ExportEventVariables(std::string &package_name, QuestEventID event, uint32 objid, const char * data, + NPC* npcmob, ItemInst* iteminst, Mob* mob, uint32 extradata); + std::map npc_quest_status_; PerlQuestStatus global_npc_quest_status_; PerlQuestStatus player_quest_status_; PerlQuestStatus global_player_quest_status_; std::map item_quest_status_; std::map spell_quest_status_; + + bool event_queue_in_use_; std::queue event_queue_; + + std::map vars_; + SV *_empty_sv; }; #endif @@ -245,9 +269,6 @@ private: // // int HasQuestFile(uint32 npcid); // -//#ifdef EMBPERL_COMMANDS -// void ExecCommand(Client *c, Seperator *sep); -//#endif // //}; // diff --git a/zone/embperl.cpp b/zone/embperl.cpp index 1c0b70c9e..7c134044e 100644 --- a/zone/embperl.cpp +++ b/zone/embperl.cpp @@ -21,26 +21,22 @@ Eglin #define GvCV_set(gv,cv) (GvCV(gv) = (cv)) #endif -//PERL_TODO: -//#ifdef EMBPERL_XS -//EXTERN_C XS(boot_quest); -//#ifdef EMBPERL_XS_CLASSES -//EXTERN_C XS(boot_Mob); -//EXTERN_C XS(boot_NPC); -//EXTERN_C XS(boot_Client); -//EXTERN_C XS(boot_Corpse); -//EXTERN_C XS(boot_EntityList); -//EXTERN_C XS(boot_Group); -//EXTERN_C XS(boot_Raid); -//EXTERN_C XS(boot_QuestItem); -//EXTERN_C XS(boot_HateEntry); -//EXTERN_C XS(boot_Object); -//EXTERN_C XS(boot_Doors); -//EXTERN_C XS(boot_PerlPacket); -//#endif -//#endif -#ifdef EMBPERL_COMMANDS -XS(XS_command_add); +#ifdef EMBPERL_XS +EXTERN_C XS(boot_quest); +#ifdef EMBPERL_XS_CLASSES +EXTERN_C XS(boot_Mob); +EXTERN_C XS(boot_NPC); +EXTERN_C XS(boot_Client); +EXTERN_C XS(boot_Corpse); +EXTERN_C XS(boot_EntityList); +EXTERN_C XS(boot_Group); +EXTERN_C XS(boot_Raid); +EXTERN_C XS(boot_QuestItem); +EXTERN_C XS(boot_HateEntry); +EXTERN_C XS(boot_Object); +EXTERN_C XS(boot_Doors); +EXTERN_C XS(boot_PerlPacket); +#endif #endif #ifdef EMBPERL_IO_CAPTURE @@ -61,33 +57,26 @@ EXTERN_C void xs_init(pTHX) newXS(strcpy(buf, "DynaLoader::boot_DynaLoader"), boot_DynaLoader, file); newXS(strcpy(buf, "quest::boot_qc"), boot_qc, file); - //PERL_TODO: -//#ifdef EMBPERL_XS -// newXS(strcpy(buf, "quest::boot_quest"), boot_quest, file); -//#ifdef EMBPERL_XS_CLASSES -// newXS(strcpy(buf, "Mob::boot_Mob"), boot_Mob, file); -// newXS(strcpy(buf, "NPC::boot_Mob"), boot_Mob, file); -// newXS(strcpy(buf, "NPC::boot_NPC"), boot_NPC, file); -///// newXS(strcpy(buf, "NPC::new"), XS_NPC_new, file); -// newXS(strcpy(buf, "Corpse::boot_Mob"), boot_Mob, file); -// newXS(strcpy(buf, "Corpse::boot_Corpse"), boot_Corpse, file); -// newXS(strcpy(buf, "Client::boot_Mob"), boot_Mob, file); -// newXS(strcpy(buf, "Client::boot_Client"), boot_Client, file); -//// newXS(strcpy(buf, "Client::new"), XS_Client_new, file); -// newXS(strcpy(buf, "EntityList::boot_EntityList"), boot_EntityList, file); -//// newXS(strcpy(buf, "EntityList::new"), XS_EntityList_new, file); -// newXS(strcpy(buf, "PerlPacket::boot_PerlPacket"), boot_PerlPacket, file); -// newXS(strcpy(buf, "Group::boot_Group"), boot_Group, file); -// 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); -// newXS(strcpy(buf, "Doors::boot_Doors"), boot_Doors, file); -//; -//#endif -//#endif -#ifdef EMBPERL_COMMANDS - newXS(strcpy(buf, "commands::command_add"), XS_command_add, file); +#ifdef EMBPERL_XS + newXS(strcpy(buf, "quest::boot_quest"), boot_quest, file); +#ifdef EMBPERL_XS_CLASSES + newXS(strcpy(buf, "Mob::boot_Mob"), boot_Mob, file); + newXS(strcpy(buf, "NPC::boot_Mob"), boot_Mob, file); + newXS(strcpy(buf, "NPC::boot_NPC"), boot_NPC, file); + newXS(strcpy(buf, "Corpse::boot_Mob"), boot_Mob, file); + newXS(strcpy(buf, "Corpse::boot_Corpse"), boot_Corpse, file); + newXS(strcpy(buf, "Client::boot_Mob"), boot_Mob, file); + newXS(strcpy(buf, "Client::boot_Client"), boot_Client, file); + newXS(strcpy(buf, "EntityList::boot_EntityList"), boot_EntityList, file); + newXS(strcpy(buf, "PerlPacket::boot_PerlPacket"), boot_PerlPacket, file); + newXS(strcpy(buf, "Group::boot_Group"), boot_Group, file); + 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); + newXS(strcpy(buf, "Doors::boot_Doors"), boot_Doors, file); +; +#endif #endif #ifdef EMBPERL_IO_CAPTURE newXS(strcpy(buf, "EQEmuIO::PRINT"), XS_EQEmuIO_PRINT, file); @@ -161,14 +150,13 @@ void Embperl::DoInit() { //make a tieable class to capture IO and pass it into EQEMuLog eval_pv( "package EQEmuIO; " -// "&boot_EQEmuIO;" "sub TIEHANDLE { my $me = bless {}, $_[0]; $me->PRINT('Creating '.$me); return($me); } " "sub WRITE { } " //dunno why I need to shift off fmt here, but it dosent like without it "sub PRINTF { my $me = shift; my $fmt = shift; $me->PRINT(sprintf($fmt, @_)); } " "sub CLOSE { my $me = shift; $me->PRINT('Closing '.$me); } " "sub DESTROY { my $me = shift; $me->PRINT('Destroying '.$me); } " -//this ties us for all packages, just do it in quest since thats kinda 'our' package + //this ties us for all packages, just do it in quest since thats kinda 'our' package "package quest;" " if(tied *STDOUT) { untie(*STDOUT); }" " if(tied *STDERR) { untie(*STDERR); }" @@ -211,21 +199,6 @@ void Embperl::DoInit() { LogFile->write(EQEMuLog::Quest, "Perl warning: %s", err); } #endif //EMBPERL_PLUGIN -#ifdef EMBPERL_COMMANDS - LogFile->write(EQEMuLog::Quest, "Loading perl commands..."); - try - { - eval_pv( - "package commands;" - "main::eval_file('commands', 'commands.pl');" - "&commands::commands_init();" - , FALSE); - } - catch(const char *err) - { - LogFile->write(EQEMuLog::Quest, "Warning - commands.pl: %s", err); - } -#endif //EMBPERL_COMMANDS in_use = false; } diff --git a/zone/embxs.cpp b/zone/embxs.cpp index 402bf7c73..164a0b2af 100644 --- a/zone/embxs.cpp +++ b/zone/embxs.cpp @@ -112,25 +112,4 @@ XS(XS_EQEmuIO_PRINT) } #endif //EMBPERL_IO_CAPTURE - -#ifdef EMBPERL_COMMANDS - -XS(XS_command_add); /* prototype to pass -Wmissing-prototypes */ -XS(XS_command_add) -{ - dXSARGS; - if (items != 3) - Perl_croak(aTHX_ "Usage: commands::command_add(name, desc, access)"); - - char *name = SvPV_nolen(ST(0)); - char *desc = SvPV_nolen(ST(1)); - int access = (int)SvIV(ST(2)); - - command_add_perl(name, desc, access); - - XSRETURN_EMPTY; -} - -#endif //EMBPERL_COMMANDS - #endif // EMBPERL diff --git a/zone/perlparser.cpp b/zone/perlparser.cpp index 44348692c..dcd23341e 100644 --- a/zone/perlparser.cpp +++ b/zone/perlparser.cpp @@ -16,3714 +16,3577 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -//#include "../common/features.h" -// -//#ifdef EMBPERL -//#ifdef EMBPERL_XS -// -//#include "../common/debug.h" -//#include "perlparser.h" -//#include "questmgr.h" -//#include "embxs.h" -//#include "entity.h" -//#include "../common/MiscFunctions.h" -//#include "zone.h" -//extern Zone* zone; -// -///* -// -//Some useful perl API info: -// -//SvUV == string to unsigned value (char->ulong) -//SvIV == string to signed value (char->long) -//SvNV == string to real value (float,double) -//SvPV_nolen == string with no length restriction -// -// -//*/ -// -//PerlXSParser::PerlXSParser() : PerlembParser() { -// //we cannot rely on PerlembParser to call the right map_funs because -// //our virtual table is not set up until after we call them, so we need to move -// //the call to ReloadQuests out of the constructor. -//} -// -//void PerlXSParser::map_funs() { -// _empty_sv = newSV(0); -// -// perl->eval( -// "{" -// "package quest;" -// "&boot_quest;" //load our quest XS -//#ifdef EMBPERL_XS_CLASSES -// "package Mob;" -// "&boot_Mob;" //load our Mob XS -// -// "package Client;" -// "our @ISA = qw(Mob);" //client inherits mob. -// "&boot_Mob;" //load our Mob XS -// "&boot_Client;" //load our Client XS -// -// "package NPC;" -// "our @ISA = qw(Mob);" //NPC inherits mob. -// "&boot_Mob;" //load our Mob XS -// "&boot_NPC;" //load our NPC XS -// -// "package Corpse;" -// "our @ISA = qw(Mob);" //Corpse inherits mob. -// "&boot_Mob;" //load our Mob XS -// "&boot_Corpse;" //load our Mob XS -// -// "package EntityList;" -// "&boot_EntityList;" //load our EntityList XS -// -// "package PerlPacket;" -// "&boot_PerlPacket;" //load our PerlPacket XS -// -// "package Group;" -// "&boot_Group;" //load our Group XS -// -// "package Raid;" -// "&boot_Raid;" //load our Raid XS -// -// "package QuestItem;" -// "&boot_QuestItem;" // load quest Item XS -// -// "package HateEntry;" -// "&boot_HateEntry;" // load quest Hate XS -// -// "package Object;" -// "&boot_Object;" // load quest Object XS -// -// "package Doors;" -// "&boot_Doors;" // load quest Doors XS -// -//#endif -// "package main;" -// "}" -// );//eval -//} -// -//void PerlXSParser::SendCommands(const char * pkgprefix, const char *event, uint32 npcid, Mob* other, Mob* mob, ItemInst* iteminst) -//{ -// if(!perl) -// return; -// _ZP(PerlXSParser_SendCommands); -// -// if(mob && mob->IsClient()) -// quest_manager.StartQuest(other, mob->CastToClient(), iteminst); -// else -// quest_manager.StartQuest(other, nullptr, nullptr); -// -// try { -// -// std::string cmd = "package " + (std::string)(pkgprefix) + (std::string)(";"); -// perl->eval(cmd.c_str()); -// -//#ifdef EMBPERL_XS_CLASSES -// char namebuf[64]; -// -// //init a couple special vars: client, npc, entity_list -// Client *curc = quest_manager.GetInitiator(); -// snprintf(namebuf, 64, "%s::client", pkgprefix); -// SV *client = get_sv(namebuf, true); -// if(curc != nullptr) { -// sv_setref_pv(client, "Client", curc); -// } else { -// //clear out the value, mainly to get rid of blessedness -// sv_setsv(client, _empty_sv); -// } -// -// //only export NPC if it's a npc quest -// if(!other->IsClient()){ -// NPC *curn = quest_manager.GetNPC(); -// snprintf(namebuf, 64, "%s::npc", pkgprefix); -// SV *npc = get_sv(namebuf, true); -// sv_setref_pv(npc, "NPC", curn); -// } -// -// //only export QuestItem if it's an item quest -// if(iteminst) { -// ItemInst* curi = quest_manager.GetQuestItem(); -// snprintf(namebuf, 64, "%s::questitem", pkgprefix); -// SV *questitem = get_sv(namebuf, true); -// sv_setref_pv(questitem, "QuestItem", curi); -// } -// -// snprintf(namebuf, 64, "%s::entity_list", pkgprefix); -// SV *el = get_sv(namebuf, true); -// sv_setref_pv(el, "EntityList", &entity_list); -//#endif -// -// //now call the requested sub -// perl->dosub(std::string(pkgprefix).append("::").append(event).c_str()); -// -//#ifdef EMBPERL_XS_CLASSES -// std::string eval_str = (std::string)"$" + (std::string)pkgprefix + (std::string)"::client = undef;"; -// eval_str += (std::string)"$" + (std::string)pkgprefix + (std::string)"::npc = undef;"; -// eval_str += (std::string)"$" + (std::string)pkgprefix + (std::string)"::questitem = undef;"; -// eval_str += (std::string)"$" + (std::string)pkgprefix + (std::string)"::entity_list = undef;"; -// perl->eval(eval_str.c_str()); -//#endif -// -// } catch(const char * err) { -// -// //try to reduce some of the console spam... -// //todo: tweak this to be more accurate at deciding what to filter (we don't want to gag legit errors) -// if(!strstr(err,"Undefined subroutine")) -// LogFile->write(EQEMuLog::Status, "Script error: %s::%s - %s", pkgprefix, event, err); -// } -// -// quest_manager.EndQuest(); -//} -// -// -//#ifdef EMBPERL_XS_CLASSES -// -////Any creation of new Client objects gets the current quest Client -//XS(XS_Client_new); -//XS(XS_Client_new) -//{ -// dXSARGS; -// if (items != 1) -// Perl_croak(aTHX_ "Usage: Client::new()"); -// { -// Client * RETVAL; -// -// RETVAL = quest_manager.GetInitiator(); -// ST(0) = sv_newmortal(); -// if(RETVAL) -// sv_setref_pv(ST(0), "Client", (void*)RETVAL); -// } -// XSRETURN(1); -//} -// -////Any creation of new NPC objects gets the current quest NPC -//XS(XS_NPC_new); -//XS(XS_NPC_new) -//{ -// dXSARGS; -// if (items != 1) -// Perl_croak(aTHX_ "Usage: NPC::new()"); -// { -// NPC * RETVAL; -// -// RETVAL = quest_manager.GetNPC(); -// ST(0) = sv_newmortal(); -// if(RETVAL) -// sv_setref_pv(ST(0), "NPC", (void*)RETVAL); -// } -// XSRETURN(1); -//} -// -////Any creation of new NPC objects gets the current quest NPC -//XS(XS_EntityList_new); -//XS(XS_EntityList_new) -//{ -// dXSARGS; -// if (items != 1) -// Perl_croak(aTHX_ "Usage: EntityList::new()"); -// { -// EntityList * RETVAL; -// -// RETVAL = &entity_list; -// ST(0) = sv_newmortal(); -// if(RETVAL) -// sv_setref_pv(ST(0), "EntityList", (void*)RETVAL); -// } -// XSRETURN(1); -//} -// -////Any creation of new quest items gets the current quest item -//XS(XS_QuestItem_new); -//XS(XS_QuestItem_new) -//{ -// dXSARGS; -// if (items != 1) -// Perl_croak(aTHX_ "Usage: QuestItem::new()"); -// -// ItemInst* RETVAL; -// -// RETVAL = quest_manager.GetQuestItem(); -// ST(0) = sv_newmortal(); -// if(RETVAL) -// sv_setref_pv(ST(0), "QuestItem", (void*)RETVAL); -// -// XSRETURN(1); -//} -// -////Any creation of new quest items gets the current quest item -//XS(XS_MobList_new); -//XS(XS_MobList_new) -//{ -// dXSARGS; -// if (items != 1) -// Perl_croak(aTHX_ "Usage: MobList::new()"); -// -// ListElement* RETVAL; -// -// RETVAL = nullptr; -// ST(0) = sv_newmortal(); -// if(RETVAL) -// sv_setref_pv(ST(0), "MobList", (void*)RETVAL); -// -// XSRETURN(1); -//} -// -//#endif //EMBPERL_XS_CLASSES -// -// -//XS(XS__echo); // prototype to pass -Wmissing-prototypes -//XS(XS__echo) { -// dXSARGS; -// -// if (items != 2) -// Perl_croak(aTHX_ "Usage: echo(id#, str)"); -// -// quest_manager.echo(SvUV(ST(0)), SvPV_nolen(ST(1))); -// -// XSRETURN_EMPTY; -//} -// -//XS(XS__say); // prototype to pass -Wmissing-prototypes -//XS(XS__say) { -// dXSARGS; -// -// if (items == 1) -// quest_manager.say(SvPV_nolen(ST(0))); -// else if (items == 2) -// quest_manager.say(SvPV_nolen(ST(0)), (int)SvIV(ST(1))); -// else -// Perl_croak(aTHX_ "Usage: say(str [, language])"); -// -// XSRETURN_EMPTY; -//} -// -//XS(XS__me); // prototype to pass -Wmissing-prototypes -//XS(XS__me) { -// dXSARGS; -// -// if (items != 1) -// Perl_croak(aTHX_ "Usage: %s(str)", "me"); -// -// quest_manager.me(SvPV_nolen(ST(0))); -// -// XSRETURN_EMPTY; -//} -// -//XS(XS__summonitem); // prototype to pass -Wmissing-prototypes -//XS(XS__summonitem) -//{ -// dXSARGS; -// if (items == 1) -// quest_manager.summonitem(SvUV(ST(0))); -// else if(items == 2) -// quest_manager.summonitem(SvUV(ST(0)), SvUV(ST(1))); -// else -// Perl_croak(aTHX_ "Usage: summonitem(itemid, [charges])"); -// XSRETURN_EMPTY; -//} -// -//XS(XS__write); -//XS(XS__write) -//{ -// dXSARGS; -// if (items != 2) -// Perl_croak(aTHX_ "Usage: write(file, str)"); -// -// char * file = (char *)SvPV_nolen(ST(0)); -// char * str = (char *)SvPV_nolen(ST(1)); -// -// quest_manager.write(file, str); -// -// XSRETURN_EMPTY; -//} -// -//XS(XS__spawn); -//XS(XS__spawn) -//{ -// dXSARGS; -// if (items != 6) -// Perl_croak(aTHX_ "Usage: spawn(npc_type, grid, unused, x, y, z)"); -// -// uint16 RETVAL; -// dXSTARG; -// -// int npc_type = (int)SvIV(ST(0)); -// int grid = (int)SvIV(ST(1)); -// int unused = (int)SvIV(ST(2)); -// float x = (float)SvNV(ST(3)); -// float y = (float)SvNV(ST(4)); -// float z = (float)SvNV(ST(5)); -// -// RETVAL = quest_manager.spawn2(npc_type, grid, unused, x, y, z, 0); -// XSprePUSH; PUSHu((UV)RETVAL); -// -// XSRETURN(1); -//} -// -//XS(XS__spawn2); -//XS(XS__spawn2) -//{ -// dXSARGS; -// if (items != 7) -// Perl_croak(aTHX_ "Usage: spawn2(npc_type, grid, unused, x, y, z, heading)"); -// -// uint16 RETVAL; -// dXSTARG; -// -// int npc_type = (int)SvIV(ST(0)); -// int grid = (int)SvIV(ST(1)); -// int unused = (int)SvIV(ST(2)); -// float x = (float)SvNV(ST(3)); -// float y = (float)SvNV(ST(4)); -// float z = (float)SvNV(ST(5)); -// float heading = (float)SvNV(ST(6)); -// -// RETVAL = quest_manager.spawn2(npc_type, grid, unused, x, y, z, heading); -// XSprePUSH; PUSHu((UV)RETVAL); -// -// XSRETURN(1); -//} -// -//XS(XS__unique_spawn); -//XS(XS__unique_spawn) -//{ -// dXSARGS; -// if (items != 6 && items != 7) -// Perl_croak(aTHX_ "Usage: unique_spawn(npc_type, grid, unused, x, y, z, [heading])"); -// -// uint16 RETVAL; -// dXSTARG; -// -// int npc_type = (int)SvIV(ST(0)); -// int grid = (int)SvIV(ST(1)); -// int unused = (int)SvIV(ST(2)); -// float x = (float)SvNV(ST(3)); -// float y = (float)SvNV(ST(4)); -// float z = (float)SvNV(ST(5)); -// float heading = 0; -// if(items == 7) -// heading = (float)SvNV(ST(6)); -// -// RETVAL = quest_manager.unique_spawn(npc_type, grid, unused, x, y, z, heading); -// XSprePUSH; PUSHu((UV)RETVAL); -// -// XSRETURN(1); -//} -// -//XS(XS__spawn_from_spawn2); -//XS(XS__spawn_from_spawn2) -//{ -// dXSARGS; -// if (items != 1) -// Perl_croak(aTHX_ "Usage: spawn_from_spawn2(spawn2_id)"); -// -// uint16 RETVAL; -// dXSTARG; -// -// int spawn2_id = (int)SvIV(ST(0)); -// -// RETVAL = quest_manager.spawn_from_spawn2(spawn2_id); -// XSprePUSH; PUSHu((UV)RETVAL); -// -// XSRETURN(1); -//} -// -//XS(XS__enable_spawn2); -//XS(XS__enable_spawn2) -//{ -// dXSARGS; -// if (items != 1) -// Perl_croak(aTHX_ "Usage: enable_spawn2(spawn2_id)"); -// -// int spawn2_id = (int)SvIV(ST(0)); -// -// quest_manager.enable_spawn2(spawn2_id); -// XSRETURN_EMPTY; -//} -// -//XS(XS__disable_spawn2); -//XS(XS__disable_spawn2) -//{ -// dXSARGS; -// if (items != 1) -// Perl_croak(aTHX_ "Usage: disable_spawn2(spawn2_id)"); -// -// int spawn2_id = (int)SvIV(ST(0)); -// -// quest_manager.disable_spawn2(spawn2_id); -// XSRETURN_EMPTY; -//} -// -//XS(XS__setstat); -//XS(XS__setstat) -//{ -// dXSARGS; -// if (items != 2) -// Perl_croak(aTHX_ "Usage: setstat(stat, value)"); -// -// int stat = (int)SvIV(ST(0)); -// int value = (int)SvIV(ST(1)); -// -// quest_manager.setstat(stat, value); -// -// XSRETURN_EMPTY; -//} -// -//XS(XS__incstat); //old setstat command aza -//XS(XS__incstat) -//{ -// dXSARGS; -// if (items != 2) -// Perl_croak(aTHX_ "Usage: incstat(stat, value)"); -// -// int stat = (int)SvIV(ST(0)); -// int value = (int)SvIV(ST(1)); -// -// quest_manager.incstat(stat, value); -// -// XSRETURN_EMPTY; -//} -// -//XS(XS__castspell); -//XS(XS__castspell) -//{ -// dXSARGS; -// if (items != 2) -// Perl_croak(aTHX_ "Usage: castspell(spell_id, target_id)"); -// -// int spell_id = (int)SvIV(ST(0)); -// int target_id = (int)SvIV(ST(1)); -// -// quest_manager.castspell(spell_id, target_id); -// -// XSRETURN_EMPTY; -//} -// -//XS(XS__selfcast); -//XS(XS__selfcast) -//{ -// dXSARGS; -// if (items != 1) -// Perl_croak(aTHX_ "Usage: selfcast(spell_id)"); -// -// int spell_id = (int)SvIV(ST(0)); -// -// quest_manager.selfcast(spell_id); -// -// XSRETURN_EMPTY; -//} -// -//XS(XS__addloot); -//XS(XS__addloot) -//{ -// dXSARGS; -// if(items < 1 || items > 3) -// Perl_croak(aTHX_ "Usage: addloot(item_id, charges = 0, equipitem = true)"); -// -// uint32 itemid = (uint32)SvUV(ST(0)); -// uint16 charges = 0; -// bool equipitem = true; -// -// if (items > 1) -// charges = (uint16)SvUV(ST(1)); -// if (items > 2) -// equipitem = (bool)SvTRUE(ST(2)); -// -// quest_manager.addloot(itemid, charges, equipitem); -// -// XSRETURN_EMPTY; -//} -// -//XS(XS__zone); -//XS(XS__zone) -//{ -// dXSARGS; -// if (items != 1) -// Perl_croak(aTHX_ "Usage: zone(zone_name)"); -// -// char * zone_name = (char *)SvPV_nolen(ST(0)); -// -// quest_manager.Zone(zone_name); -// -// XSRETURN_EMPTY; -//} -// -//XS(XS__settimer); -//XS(XS__settimer) -//{ -// dXSARGS; -// if (items != 2) -// Perl_croak(aTHX_ "Usage: settimer(timer_name, seconds)"); -// -// char * timer_name = (char *)SvPV_nolen(ST(0)); -// int seconds = (int)SvIV(ST(1)); -// -// quest_manager.settimer(timer_name, seconds); -// -// XSRETURN_EMPTY; -//} -// -//XS(XS__settimerMS); -//XS(XS__settimerMS) -//{ -// dXSARGS; -// if (items != 2) -// Perl_croak(aTHX_ "Usage: settimerMS(timer_name, milliseconds)"); -// -// char * timer_name = (char *)SvPV_nolen(ST(0)); -// int milliseconds = (int)SvIV(ST(1)); -// -// quest_manager.settimerMS(timer_name, milliseconds); -// -// XSRETURN_EMPTY; -//} -// -//XS(XS__stoptimer); -//XS(XS__stoptimer) -//{ -// dXSARGS; -// if (items != 1) -// Perl_croak(aTHX_ "Usage: stoptimer(timer_name)"); -// -// char * timer_name = (char *)SvPV_nolen(ST(0)); -// -// quest_manager.stoptimer(timer_name); -// -// XSRETURN_EMPTY; -//} -// -//XS(XS__stopalltimers); -//XS(XS__stopalltimers) -//{ -// dXSARGS; -// if (items != 0) -// Perl_croak(aTHX_ "Usage: stopalltimers()"); -// -// quest_manager.stopalltimers(); -// -// XSRETURN_EMPTY; -//} -// -//XS(XS__emote); -//XS(XS__emote) -//{ -// dXSARGS; -// if (items != 1) -// Perl_croak(aTHX_ "Usage: emote(str)"); -// -// char * str = (char *)SvPV_nolen(ST(0)); -// -// quest_manager.emote(str); -// -// XSRETURN_EMPTY; -//} -// -//XS(XS__shout); -//XS(XS__shout) -//{ -// dXSARGS; -// if (items != 1) -// Perl_croak(aTHX_ "Usage: shout(str)"); -// -// char * str = (char *)SvPV_nolen(ST(0)); -// -// quest_manager.shout(str); -// -// XSRETURN_EMPTY; -//} -// -//XS(XS__shout2); -//XS(XS__shout2) -//{ -// dXSARGS; -// if (items != 1) -// Perl_croak(aTHX_ "Usage: shout2(str)"); -// -// char * str = (char *)SvPV_nolen(ST(0)); -// -// quest_manager.shout2(str); -// -// XSRETURN_EMPTY; -//} -// -//XS(XS__gmsay); -//XS(XS__gmsay) -//{ -// dXSARGS; -// if ((items < 1) || (items > 5)) -// Perl_croak(aTHX_ "Usage: gmsay(str, color, send_to_world?)"); -// -// char * str = (char *)SvPV_nolen(ST(0)); -// int color = 7; -// bool send_to_world = 0; -// uint32 to_guilddbid = 0; -// uint16 to_minstatus = 80; -// -// if (items > 1) { -// color = (int)SvIV(ST(1)); -// } -// -// if (items > 2) { -// send_to_world = ((int)SvIV(ST(2))) == 0?false:true; -// } -// -// if (items > 3) -// to_guilddbid = (int)SvUV(ST(3)); -// -// if (items > 4) -// to_minstatus = (int)SvUV(ST(4)); -// -// quest_manager.gmsay(str, color, send_to_world, to_guilddbid, to_minstatus); -// -// XSRETURN_EMPTY; -//} -// -//XS(XS__depop); -//XS(XS__depop) -//{ -// dXSARGS; -// if (items < 0 || items > 1) -// Perl_croak(aTHX_ "Usage: depop(npc_type= 0)"); -// -// int npc_type; -// -// if (items < 1) -// npc_type = 0; -// else -// npc_type = (int)SvIV(ST(0)); -// -// -// quest_manager.depop(npc_type); -// -// XSRETURN_EMPTY; -//} -// -//XS(XS__depop_withtimer); -//XS(XS__depop_withtimer) -//{ -// dXSARGS; -// if (items < 0 || items > 1) -// Perl_croak(aTHX_ "Usage: depop_withtimer(npc_type= 0)"); -// -// int npc_type; -// -// if (items < 1) -// npc_type = 0; -// else -// npc_type = (int)SvIV(ST(0)); -// -// -// quest_manager.depop_withtimer(npc_type); -// -// XSRETURN_EMPTY; -//} -// -//XS(XS__depopall); -//XS(XS__depopall) -//{ -// dXSARGS; -// if (items < 0 || items > 1) -// Perl_croak(aTHX_ "Usage: depopall(npc_type= 0)"); -// -// int npc_type; -// -// if (items < 1) -// npc_type = 0; -// else -// npc_type = (int)SvIV(ST(0)); -// -// -// quest_manager.depopall(npc_type); -// -// XSRETURN_EMPTY; -//} -// -//XS(XS__settarget); -//XS(XS__settarget) -//{ -// dXSARGS; -// if (items != 2) -// Perl_croak(aTHX_ "Usage: settarget(type, target_id)"); -// -// char * type = (char *)SvPV_nolen(ST(0)); -// int target_id = (int)SvIV(ST(1)); -// -// quest_manager.settarget(type, target_id); -// -// XSRETURN_EMPTY; -//} -// -//XS(XS__follow); -//XS(XS__follow) -//{ -// dXSARGS; -// if (items != 1 && items != 2) -// Perl_croak(aTHX_ "Usage: follow(entity_id, [distance])"); -// -// int entity_id = (int)SvIV(ST(0)); -// int distance; -// -// if (items == 2) -// distance = (int)SvIV(ST(1)); -// else -// distance = 10; -// -// quest_manager.follow(entity_id, distance); -// -// XSRETURN_EMPTY; -//} -// -//XS(XS__sfollow); -//XS(XS__sfollow) -//{ -// dXSARGS; -// if (items != 0) -// Perl_croak(aTHX_ "Usage: sfollow()"); -// -// -// quest_manager.sfollow(); -// -// XSRETURN_EMPTY; -//} -// -//XS(XS__changedeity); -//XS(XS__changedeity) -//{ -// dXSARGS; -// if (items != 1) -// Perl_croak(aTHX_ "Usage: changedeity(diety_id)"); -// -// int diety_id = (int)SvIV(ST(0)); -// -// quest_manager.changedeity(diety_id); -// -// XSRETURN_EMPTY; -//} -// -//XS(XS__exp); -//XS(XS__exp) -//{ -// dXSARGS; -// if (items != 1) -// Perl_croak(aTHX_ "Usage: exp(amt)"); -// -// int amt = (int)SvIV(ST(0)); -// -// quest_manager.exp(amt); -// -// XSRETURN_EMPTY; -//} -// -//XS(XS__level); -//XS(XS__level) -//{ -// dXSARGS; -// if (items != 1) -// Perl_croak(aTHX_ "Usage: level(newlevel)"); -// -// int newlevel = (int)SvIV(ST(0)); -// -// quest_manager.level(newlevel); -// -// XSRETURN_EMPTY; -//} -// -//XS(XS__traindisc); -//XS(XS__traindisc) -//{ -// dXSARGS; -// if (items != 1) -// Perl_croak(aTHX_ "Usage: traindisc(discipline_tome_item_id)"); -// -// int discipline_tome_item_id = (int)SvIV(ST(0)); -// -// quest_manager.traindisc(discipline_tome_item_id); -// -// XSRETURN_EMPTY; -//} -// -//XS(XS__isdisctome); -//XS(XS__isdisctome) -//{ -// dXSARGS; -// if (items != 1) -// Perl_croak(aTHX_ "Usage: isdisctome(item_id)"); -// -// bool RETVAL; -// int item_id = (int)SvIV(ST(0)); -// -// RETVAL = quest_manager.isdisctome(item_id); -// -// ST(0) = boolSV(RETVAL); -// sv_2mortal(ST(0)); -// XSRETURN(1); -//} -// -//XS(XS__safemove); -//XS(XS__safemove) -//{ -// dXSARGS; -// if (items != 0) -// Perl_croak(aTHX_ "Usage: safemove()"); -// -// -// quest_manager.safemove(); -// -// XSRETURN_EMPTY; -//} -// -//XS(XS__rain); -//XS(XS__rain) -//{ -// dXSARGS; -// if (items != 1) -// Perl_croak(aTHX_ "Usage: rain(weather)"); -// -// int weather = (int)SvIV(ST(0)); -// -// quest_manager.rain(weather); -// -// XSRETURN_EMPTY; -//} -// -//XS(XS__snow); -//XS(XS__snow) -//{ -// dXSARGS; -// if (items != 1) -// Perl_croak(aTHX_ "Usage: snow(weather)"); -// -// int weather = (int)SvIV(ST(0)); -// -// quest_manager.snow(weather); -// -// XSRETURN_EMPTY; -//} -// -//XS(XS__surname); -//XS(XS__surname) -//{ -// dXSARGS; -// if (items != 1) -// Perl_croak(aTHX_ "Usage: surname(name)"); -// -// char * name = (char *)SvPV_nolen(ST(0)); -// -// quest_manager.surname(name); -// -// XSRETURN_EMPTY; -//} -// -//XS(XS__permaclass); -//XS(XS__permaclass) -//{ -// dXSARGS; -// if (items != 1) -// Perl_croak(aTHX_ "Usage: permaclass(class_id)"); -// -// int class_id = (int)SvIV(ST(0)); -// -// quest_manager.permaclass(class_id); -// -// XSRETURN_EMPTY; -//} -// -//XS(XS__permarace); -//XS(XS__permarace) -//{ -// dXSARGS; -// if (items != 1) -// Perl_croak(aTHX_ "Usage: permarace(race_id)"); -// -// int race_id = (int)SvIV(ST(0)); -// -// quest_manager.permarace(race_id); -// -// XSRETURN_EMPTY; -//} -// -//XS(XS__permagender); -//XS(XS__permagender) -//{ -// dXSARGS; -// if (items != 1) -// Perl_croak(aTHX_ "Usage: permagender(gender_id)"); -// -// int gender_id = (int)SvIV(ST(0)); -// -// quest_manager.permagender(gender_id); -// -// XSRETURN_EMPTY; -//} -// -//XS(XS__scribespells); -//XS(XS__scribespells) -//{ -// dXSARGS; -// if (items < 1) -// Perl_croak(aTHX_ "Usage: scribespells(max_level, min_level = 1)"); -// -// uint16 RETVAL; -// dXSTARG; -// -// uint8 max_level = (uint8)SvIV(ST(0)); -// uint8 min_level = (uint8)SvIV(ST(1)); -// -// if (min_level) -// RETVAL = quest_manager.scribespells(max_level, min_level); -// else -// RETVAL = quest_manager.scribespells(max_level); -// -// XSprePUSH; PUSHu((IV)RETVAL); -// XSRETURN(1); -//} -// -//XS(XS__traindiscs); -//XS(XS__traindiscs) -//{ -// dXSARGS; -// if (items < 1) -// Perl_croak(aTHX_ "Usage: traindiscs(max_level, min_level = 1)"); -// -// uint16 RETVAL; -// dXSTARG; -// -// uint8 max_level = (uint8)SvIV(ST(0)); -// uint8 min_level = (uint8)SvIV(ST(1)); -// -// if (min_level) -// RETVAL = quest_manager.traindiscs(max_level, min_level); -// else -// RETVAL = quest_manager.traindiscs(max_level); -// -// XSprePUSH; PUSHu((IV)RETVAL); -// XSRETURN(1); -//} -// -//XS(XS__unscribespells); -//XS(XS__unscribespells) -//{ -// dXSARGS; -// if (items != 0) -// Perl_croak(aTHX_ "Usage: unscribespells()"); -// -// -// quest_manager.unscribespells(); -// -// XSRETURN_EMPTY; -//} -// -//XS(XS__untraindiscs); -//XS(XS__untraindiscs) -//{ -// dXSARGS; -// if (items != 0) -// Perl_croak(aTHX_ "Usage: untraindiscs()"); -// -// -// quest_manager.untraindiscs(); -// -// XSRETURN_EMPTY; -//} -// -//XS(XS__givecash); -//XS(XS__givecash) -//{ -// dXSARGS; -// if (items != 4) -// Perl_croak(aTHX_ "Usage: givecash(copper, silver, gold, platinum)"); -// -// int copper = (int)SvIV(ST(0)); -// int silver = (int)SvIV(ST(1)); -// int gold = (int)SvIV(ST(2)); -// int platinum = (int)SvIV(ST(3)); -// -// quest_manager.givecash(copper, silver, gold, platinum); -// -// XSRETURN_EMPTY; -//} -// -//XS(XS__pvp); -//XS(XS__pvp) -//{ -// dXSARGS; -// if (items != 1) -// Perl_croak(aTHX_ "Usage: pvp(mode)"); -// -// char * mode = (char *)SvPV_nolen(ST(0)); -// -// quest_manager.pvp(mode); -// -// XSRETURN_EMPTY; -//} -// -//XS(XS__movepc); -//XS(XS__movepc) -//{ -// dXSARGS; -// if (items != 4 && items != 5) -// Perl_croak(aTHX_ "Usage: movepc(zone_id, x, y, z [,heading])"); -// -// int zoneid = (int)SvIV(ST(0)); -// float x = (float)SvNV(ST(1)); -// float y = (float)SvNV(ST(2)); -// float z = (float)SvNV(ST(3)); -// -// if (items == 4) -// -// quest_manager.movepc(zoneid, x, y, z, 0.0f); -// -// else { -// float heading = (float)SvNV(ST(4)); -// quest_manager.movepc(zoneid, x, y, z, heading); -// } -// -// XSRETURN_EMPTY; -//} -// -//XS(XS__gmmove); -//XS(XS__gmmove) -//{ -// dXSARGS; -// if (items != 3) -// Perl_croak(aTHX_ "Usage: gmmove(x, y, z)"); -// -// float x = (float)SvNV(ST(0)); -// float y = (float)SvNV(ST(1)); -// float z = (float)SvNV(ST(2)); -// -// quest_manager.gmmove(x, y, z); -// -// XSRETURN_EMPTY; -//} -// -//XS(XS__movegrp); -//XS(XS__movegrp) -//{ -// dXSARGS; -// if (items != 4) -// Perl_croak(aTHX_ "Usage: movegrp(zoneid, x, y, z)"); -// -// int zoneid = (int)SvIV(ST(0)); -// float x = (float)SvNV(ST(1)); -// float y = (float)SvNV(ST(2)); -// float z = (float)SvNV(ST(3)); -// -// quest_manager.movegrp(zoneid, x, y, z); -// -// XSRETURN_EMPTY; -//} -// -//XS(XS__doanim); -//XS(XS__doanim) -//{ -// dXSARGS; -// if (items != 1) -// Perl_croak(aTHX_ "Usage: doanim(anim_id)"); -// -// int anim_id = (int)SvIV(ST(0)); -// -// quest_manager.doanim(anim_id); -// -// XSRETURN_EMPTY; -//} -// -//XS(XS__addskill); -//XS(XS__addskill) -//{ -// dXSARGS; -// if (items != 2) -// Perl_croak(aTHX_ "Usage: addskill(skill_id, value)"); -// -// int skill_id = (int)SvIV(ST(0)); -// int value = (int)SvIV(ST(1)); -// -// quest_manager.addskill(skill_id, value); -// -// XSRETURN_EMPTY; -//} -// -//XS(XS__setlanguage); -//XS(XS__setlanguage) -//{ -// dXSARGS; -// if (items != 2) -// Perl_croak(aTHX_ "Usage: setlanguage(skill_id, value)"); -// -// int skill_id = (int)SvIV(ST(0)); -// int value = (int)SvIV(ST(1)); -// -// quest_manager.setlanguage(skill_id, value); -// -// XSRETURN_EMPTY; -//} -// -//XS(XS__setskill); -//XS(XS__setskill) -//{ -// dXSARGS; -// if (items != 2) -// Perl_croak(aTHX_ "Usage: setskill(skill_id, value)"); -// -// int skill_id = (int)SvIV(ST(0)); -// int value = (int)SvIV(ST(1)); -// -// quest_manager.setskill(skill_id, value); -// -// XSRETURN_EMPTY; -//} -// -//XS(XS__setallskill); -//XS(XS__setallskill) -//{ -// dXSARGS; -// if (items != 1) -// Perl_croak(aTHX_ "Usage: setallskill(value)"); -// -// int value = (int)SvIV(ST(0)); -// -// quest_manager.setallskill(value); -// -// XSRETURN_EMPTY; -//} -// -//XS(XS__attack); -//XS(XS__attack) -//{ -// dXSARGS; -// if (items != 1) -// Perl_croak(aTHX_ "Usage: attack(client_name)"); -// -// char * client_name = (char *)SvPV_nolen(ST(0)); -// -// quest_manager.attack(client_name); -// -// XSRETURN_EMPTY; -//} -// -//XS(XS__attacknpc); -//XS(XS__attacknpc) -//{ -// dXSARGS; -// if (items != 1) -// Perl_croak(aTHX_ "Usage: attacknpc(npc_entity_id)"); -// -// int npc_entity_id = (int)SvIV(ST(0)); -// -// quest_manager.attacknpc(npc_entity_id); -// -// XSRETURN_EMPTY; -//} -// -//XS(XS__attacknpctype); -//XS(XS__attacknpctype) -//{ -// dXSARGS; -// if (items != 1) -// Perl_croak(aTHX_ "Usage: attacknpctype(npc_type_id)"); -// -// int npc_type_id = (int)SvIV(ST(0)); -// -// quest_manager.attacknpctype(npc_type_id); -// -// XSRETURN_EMPTY; -//} -// -//XS(XS__save); -//XS(XS__save) -//{ -// dXSARGS; -// if (items != 0) -// Perl_croak(aTHX_ "Usage: save()"); -// -// -// quest_manager.save(); -// -// XSRETURN_EMPTY; -//} -// -//XS(XS__faction); -//XS(XS__faction) -//{ -// dXSARGS; -// if (items < 2 || items > 3) -// Perl_croak(aTHX_ "Usage: faction(faction_id, faction_value, temp)"); -// -// int faction_id = (int)SvIV(ST(0)); -// int faction_value = (int)SvIV(ST(1)); -// int temp; -// -// if(items == 2) -// temp = 0; -// else -// temp = (int)SvIV(ST(2)); -// -// quest_manager.faction(faction_id, faction_value, temp); -// -// XSRETURN_EMPTY; -//} -// -//XS(XS__setsky); -//XS(XS__setsky) -//{ -// dXSARGS; -// if (items != 1) -// Perl_croak(aTHX_ "Usage: setsky(new_sky)"); -// -// unsigned char new_sky = (unsigned char)SvUV(ST(0)); -// -// quest_manager.setsky(new_sky); -// -// XSRETURN_EMPTY; -//} -// -//XS(XS__setguild); -//XS(XS__setguild) -//{ -// dXSARGS; -// if (items != 2) -// Perl_croak(aTHX_ "Usage: setguild(new_guild_id, new_rank)"); -// -// unsigned long new_guild_id = (unsigned long)SvUV(ST(0)); -// int new_rank = (int)SvIV(ST(1)); -// -// quest_manager.setguild(new_guild_id, new_rank); -// -// XSRETURN_EMPTY; -//} -// -//XS(XS__createguild); -//XS(XS__createguild) -//{ -// dXSARGS; -// if (items != 2) -// Perl_croak(aTHX_ "Usage: createguild(guild_name, leader)"); -// -// char * guild_name = (char *)SvPV_nolen(ST(0)); -// char * leader = (char *)SvPV_nolen(ST(1)); -// -// quest_manager.CreateGuild(guild_name, leader); -// -// XSRETURN_EMPTY; -//} -// -//XS(XS__settime); -//XS(XS__settime) -//{ -// dXSARGS; -// if (items != 2) -// Perl_croak(aTHX_ "Usage: settime(new_hour, new_min)"); -// -// int new_hour = (int)SvIV(ST(0)); -// int new_min = (int)SvIV(ST(1)); -// -// quest_manager.settime(new_hour, new_min); -// -// XSRETURN_EMPTY; -//} -// -//XS(XS__itemlink); -//XS(XS__itemlink) -//{ -// dXSARGS; -// if (items != 1) -// Perl_croak(aTHX_ "Usage: itemlink(item_id)"); -// -// int item_id = (int)SvIV(ST(0)); -// -// quest_manager.itemlink(item_id); -// -// XSRETURN_EMPTY; -//} -// -//XS(XS__signalwith); -//XS(XS__signalwith) -//{ -// dXSARGS; -// -// if (items == 2) { -// int npc_id = (int)SvIV(ST(0)); -// int signal_id = (int)SvIV(ST(1)); -// quest_manager.signalwith(npc_id, signal_id); -// } else if(items == 3) { -// int npc_id = (int)SvIV(ST(0)); -// int signal_id = (int)SvIV(ST(1)); -// int wait = (int)SvIV(ST(2)); -// quest_manager.signalwith(npc_id, signal_id, wait); -// } else { -// Perl_croak(aTHX_ "Usage: signalwith(npc_id,signal_id[,wait_ms])"); -// } -// -// XSRETURN_EMPTY; -//} -// -//XS(XS__signal); -//XS(XS__signal) -//{ -// dXSARGS; -// -// if (items == 1) { -// int npc_id = (int)SvIV(ST(0)); -// quest_manager.signal(npc_id); -// } else if(items == 2) { -// int npc_id = (int)SvIV(ST(0)); -// int wait = (int)SvIV(ST(1)); -// quest_manager.signal(npc_id, wait); -// } else { -// Perl_croak(aTHX_ "Usage: signal(npc_id[,wait_ms])"); -// } -// -// XSRETURN_EMPTY; -//} -// -//XS(XS__setglobal); -//XS(XS__setglobal) -//{ -// dXSARGS; -// if (items != 4) -// Perl_croak(aTHX_ "Usage: setglobal(varname, newvalue, options, duration)"); -// -// char * varname = (char *)SvPV_nolen(ST(0)); -// char * newvalue = (char *)SvPV_nolen(ST(1)); -// int options = (int)SvIV(ST(2)); -// char * duration = (char *)SvPV_nolen(ST(3)); -// -// quest_manager.setglobal(varname, newvalue, options, duration); -// -// XSRETURN_EMPTY; -//} -// -//XS(XS__targlobal); -//XS(XS__targlobal) -//{ -// dXSARGS; -// if (items != 6) -// Perl_croak(aTHX_ "Usage: targlobal(varname, value, duration, npcid, charid, zoneid)"); -// -// char * varname = (char *)SvPV_nolen(ST(0)); -// char * value = (char *)SvPV_nolen(ST(1)); -// char * duration = (char *)SvPV_nolen(ST(2)); -// int npcid = (int)SvIV(ST(3)); -// int charid = (int)SvIV(ST(4)); -// int zoneid = (int)SvIV(ST(5)); -// -// quest_manager.targlobal(varname, value, duration, npcid, charid, zoneid); -// -// XSRETURN_EMPTY; -//} -// -//XS(XS__delglobal); -//XS(XS__delglobal) -//{ -// dXSARGS; -// if (items != 1) -// Perl_croak(aTHX_ "Usage: delglobal(varname)"); -// -// char * varname = (char *)SvPV_nolen(ST(0)); -// -// quest_manager.delglobal(varname); -// -// XSRETURN_EMPTY; -//} -// -//XS(XS__ding); -//XS(XS__ding) -//{ -// dXSARGS; -// if (items != 0) -// Perl_croak(aTHX_ "Usage: ding()"); -// -// -// quest_manager.ding(); -// -// XSRETURN_EMPTY; -//} -// -//XS(XS__rebind); -//XS(XS__rebind) -//{ -// dXSARGS; -// if (items != 4) -// Perl_croak(aTHX_ "Usage: rebind(zoneid, x, y, z)"); -// -// int zoneid = (int)SvIV(ST(0)); -// float x = (float)SvNV(ST(1)); -// float y = (float)SvNV(ST(2)); -// float z = (float)SvNV(ST(3)); -// -// quest_manager.rebind(zoneid, x, y, z); -// -// XSRETURN_EMPTY; -//} -// -//XS(XS__start); -//XS(XS__start) -//{ -// dXSARGS; -// if (items != 1) -// Perl_croak(aTHX_ "Usage: start(wp)"); -// -// int wp = (int)SvIV(ST(0)); -// -// quest_manager.start(wp); -// -// XSRETURN_EMPTY; -//} -// -//XS(XS__stop); -//XS(XS__stop) -//{ -// dXSARGS; -// if (items != 0) -// Perl_croak(aTHX_ "Usage: stop()"); -// -// -// quest_manager.stop(); -// -// XSRETURN_EMPTY; -//} -// -//XS(XS__pause); -//XS(XS__pause) -//{ -// dXSARGS; -// if (items != 1) -// Perl_croak(aTHX_ "Usage: pause(duration)"); -// -// int duration = (int)SvIV(ST(0)); -// -// quest_manager.pause(duration); -// -// XSRETURN_EMPTY; -//} -// -//XS(XS__moveto); -//XS(XS__moveto) -//{ -// dXSARGS; -// if (items != 3 && items != 4 && items != 5) -// Perl_croak(aTHX_ "Usage: moveto(x, y, z, [mth, saveguard?])"); -// -// float x = (float)SvNV(ST(0)); -// float y = (float)SvNV(ST(1)); -// float z = (float)SvNV(ST(2)); -// float h; -// bool saveguard; -// -// if(items > 3) -// h = (float)SvNV(ST(3)); -// else -// h = 0; -// -// if(items > 4) -// saveguard = (bool)SvTRUE(ST(4)); -// else -// saveguard = false; -// -// quest_manager.moveto(x, y, z, h, saveguard); -// -// XSRETURN_EMPTY; -//} -// -//XS(XS__resume); -//XS(XS__resume) -//{ -// dXSARGS; -// if (items != 0) -// Perl_croak(aTHX_ "Usage: resume()"); -// -// -// quest_manager.resume(); -// -// XSRETURN_EMPTY; -//} -// -//XS(XS__addldonpoints); -//XS(XS__addldonpoints) -//{ -// dXSARGS; -// if (items != 2) -// Perl_croak(aTHX_ "Usage: addldonpoints(points, theme)"); -// -// long points = (long)SvIV(ST(0)); -// unsigned long theme = (unsigned long)SvUV(ST(1)); -// -// quest_manager.addldonpoints(points, theme); -// -// XSRETURN_EMPTY; -//} -// -//XS(XS__addldonwin); -//XS(XS__addldonwin) -//{ -// dXSARGS; -// if (items != 2) -// Perl_croak(aTHX_ "Usage: addldonwin(wins, theme)"); -// -// long wins = (long)SvIV(ST(0)); -// unsigned long theme = (unsigned long)SvUV(ST(1)); -// -// quest_manager.addldonwin(wins, theme); -// -// XSRETURN_EMPTY; -//} -// -//XS(XS__addldonloss); -//XS(XS__addldonloss) -//{ -// dXSARGS; -// if (items != 2) -// Perl_croak(aTHX_ "Usage: addldonloss(losses, theme)"); -// -// long losses = (long)SvIV(ST(0)); -// unsigned long theme = (unsigned long)SvUV(ST(1)); -// -// quest_manager.addldonloss(losses, theme); -// -// XSRETURN_EMPTY; -//} -// -//XS(XS__setnexthpevent); -//XS(XS__setnexthpevent) -//{ -// dXSARGS; -// if (items != 1) -// Perl_croak(aTHX_ "Usage: setnexthpevent(at)"); -// -// int at = (int)SvIV(ST(0)); -// -// quest_manager.setnexthpevent(at); -// -// XSRETURN_EMPTY; -//} -// -//XS(XS__setnextinchpevent); -//XS(XS__setnextinchpevent) -//{ -// dXSARGS; -// if (items != 1) -// Perl_croak(aTHX_ "Usage: setnextinchpevent(at)"); -// -// int at = (int)SvIV(ST(0)); -// -// quest_manager.setnextinchpevent(at); -// -// XSRETURN_EMPTY; -//} -// -//XS(XS__sethp); -//XS(XS__sethp) -//{ -// dXSARGS; -// if (items != 1) -// Perl_croak(aTHX_ "Usage: sethp(percentage)"); -// -// int hpperc = (int)SvIV(ST(0)); -// -// quest_manager.sethp(hpperc); -// -// XSRETURN_EMPTY; -//} -// -//XS(XS__respawn); -//XS(XS__respawn) -//{ -// dXSARGS; -// if (items != 2) -// Perl_croak(aTHX_ "Usage: respawn(npc_type, grid)"); -// -// int npc_type = (int)SvIV(ST(0)); -// int grid = (int)SvIV(ST(1)); -// -// quest_manager.respawn(npc_type, grid); -// -// XSRETURN_EMPTY; -//} -// -//XS(XS__ChooseRandom); -//XS(XS__ChooseRandom) -//{ -// dXSARGS; -// if (items < 1) -// Perl_croak(aTHX_ "Usage: ChooseRandom(... list ...)"); -// -// int index = MakeRandomInt(0, items-1); -// -// SV *tmp = ST(0); -// ST(0) = ST(index); -// ST(index) = tmp; -// -// XSRETURN(1); //return 1 element from the stack (ST(0)) -//} -// -//XS(XS__set_proximity); -//XS(XS__set_proximity) -//{ -// dXSARGS; -// if (items != 4 && items != 6) -// Perl_croak(aTHX_ "Usage: set_proximity(minx, maxx, miny, maxy [, minz, maxz])"); -// -// float minx = (float)SvNV(ST(0)); -// float maxx = (float)SvNV(ST(1)); -// float miny = (float)SvNV(ST(2)); -// float maxy = (float)SvNV(ST(3)); -// -// if(items == 4) -// quest_manager.set_proximity(minx, maxx, miny, maxy); -// else { -// float minz = (float)SvNV(ST(4)); -// float maxz = (float)SvNV(ST(5)); -// quest_manager.set_proximity(minx, maxx, miny, maxy, minz, maxz); -// } -// -// XSRETURN_EMPTY; -//} -// -//XS(XS__clear_proximity); -//XS(XS__clear_proximity) -//{ -// dXSARGS; -// if (items != 0) -// Perl_croak(aTHX_ "Usage: clear_proximity()"); -// -// quest_manager.clear_proximity(); -// -// XSRETURN_EMPTY; -//} -// -//XS(XS__setanim); -//XS(XS__setanim) //Cisyouc: mob->setappearance() addition -//{ -// dXSARGS; -// if(items != 2) -// Perl_croak(aTHX_ "Usage: quest::setanim(npc_type, animnum);"); -// -// quest_manager.setanim(SvUV(ST(0)), SvUV(ST(1))); -// -// XSRETURN_EMPTY; -//} -// -//XS(XS__showgrid); -//XS(XS__showgrid) -//{ -// dXSARGS; -// if(items != 1) -// Perl_croak(aTHX_ "Usage: quest::showgrid(grid_id);"); -// -// quest_manager.showgrid(SvUV(ST(0))); -// -// XSRETURN_EMPTY; -//} -// -//XS(XS__showpath); -//XS(XS__showpath) -//{ -// dXSARGS; -// if (items != 3) -// Perl_croak(aTHX_ "Usage: showpath(x, y, z)"); -// -// float x = (float)SvNV(ST(0)); -// float y = (float)SvNV(ST(1)); -// float z = (float)SvNV(ST(2)); -// -// quest_manager.showpath(x, y, z); -// -// XSRETURN_EMPTY; -//} -// -//XS(XS__pathto); -//XS(XS__pathto) -//{ -// dXSARGS; -// if (items != 3) -// Perl_croak(aTHX_ "Usage: pathto(x, y, z)"); -// -// float x = (float)SvNV(ST(0)); -// float y = (float)SvNV(ST(1)); -// float z = (float)SvNV(ST(2)); -// -// quest_manager.pathto(x, y, z); -// -// XSRETURN_EMPTY; -//} -// -//XS(XS__spawn_condition); -//XS(XS__spawn_condition) -//{ -// dXSARGS; -// if (items < 3 || items > 4) -// Perl_croak(aTHX_ "Usage: spawn_condition(zone_short, [instance_id], condition_id, value)"); -// -// if(items == 3) -// { -// char * zone_short = (char *)SvPV_nolen(ST(0)); -// uint16 cond_id = (int)SvUV(ST(1)); -// int16 value = (int)SvIV(ST(2)); -// -// quest_manager.spawn_condition(zone_short, zone->GetInstanceID(), cond_id, value); -// } -// else -// { -// char * zone_short = (char *)SvPV_nolen(ST(0)); -// uint32 instance_id = (int)SvUV(ST(1)); -// uint16 cond_id = (int)SvUV(ST(2)); -// int16 value = (int)SvIV(ST(3)); -// -// quest_manager.spawn_condition(zone_short, instance_id, cond_id, value); -// } -// XSRETURN_EMPTY; -//} -// -//XS(XS__get_spawn_condition); -//XS(XS__get_spawn_condition) -//{ -// dXSARGS; -// if (items < 2 || items > 3) -// Perl_croak(aTHX_ "Usage: get_spawn_condition(zone_short, [instance_id], condition_id)"); -// -// if(items == 2) -// { -// int16 RETVAL; -// dXSTARG; -// -// char * zone_short = (char *)SvPV_nolen(ST(0)); -// uint16 cond_id = (int)SvIV(ST(1)); -// -// RETVAL = quest_manager.get_spawn_condition(zone_short, zone->GetInstanceID(), cond_id); -// XSprePUSH; PUSHu((IV)RETVAL); -// -// XSRETURN(1); -// } -// else -// { -// int16 RETVAL; -// dXSTARG; -// -// char * zone_short = (char *)SvPV_nolen(ST(0)); -// uint16 instance_id = (int)SvIV(ST(1)); -// uint16 cond_id = (int)SvIV(ST(2)); -// -// RETVAL = quest_manager.get_spawn_condition(zone_short, instance_id, cond_id); -// XSprePUSH; PUSHu((IV)RETVAL); -// -// XSRETURN(1); -// } -//} -// -//XS(XS__toggle_spawn_event); -//XS(XS__toggle_spawn_event) -//{ -// dXSARGS; -// if (items != 2) -// Perl_croak(aTHX_ "Usage: toggle_spawn_event(event_id, enabled?, reset_base)"); -// -// uint32 event_id = (int)SvIV(ST(0)); -// bool enabled = ((int)SvIV(ST(1))) == 0?false:true; -// bool reset_base = ((int)SvIV(ST(1))) == 0?false:true; -// -// quest_manager.toggle_spawn_event(event_id, enabled, reset_base); -// -// XSRETURN_EMPTY; -//} -// -//XS(XS__has_zone_flag); -//XS(XS__has_zone_flag) -//{ -// dXSARGS; -// if (items != 1) -// Perl_croak(aTHX_ "Usage: has_zone_flag(zone_id)"); -// -// int16 RETVAL; -// dXSTARG; -// -// uint32 zone_id = (int)SvIV(ST(0)); -// -// RETVAL = quest_manager.has_zone_flag(zone_id); -// XSprePUSH; PUSHu((IV)RETVAL); -// -// XSRETURN(1); -// -//} -// -//XS(XS__set_zone_flag); -//XS(XS__set_zone_flag) -//{ -// dXSARGS; -// if (items != 1) -// Perl_croak(aTHX_ "Usage: set_zone_flag(zone_id)"); -// -// uint32 zone_id = (int)SvIV(ST(0)); -// -// quest_manager.set_zone_flag(zone_id); -// -// XSRETURN_EMPTY; -//} -// -//XS(XS__clear_zone_flag); -//XS(XS__clear_zone_flag) -//{ -// dXSARGS; -// if (items != 1) -// Perl_croak(aTHX_ "Usage: clear_zone_flag(zone_id)"); -// -// uint32 zone_id = (int)SvIV(ST(0)); -// -// quest_manager.clear_zone_flag(zone_id); -// -// XSRETURN_EMPTY; -//} -// -//XS(XS__summonburriedplayercorpse); -//XS(XS__summonburriedplayercorpse) -//{ -// dXSARGS; -// if (items != 5) -// Perl_croak(aTHX_ "Usage: summonburriedplayercorpse(char_id,dest_x,dest_y,dest_z,dest_heading)"); -// -// bool RETVAL; -// uint32 char_id = (int)SvIV(ST(0)); -// float dest_x = (float)SvIV(ST(1)); -// float dest_y = (float)SvIV(ST(2)); -// float dest_z = (float)SvIV(ST(3)); -// float dest_heading = (float)SvIV(ST(4)); -// -// RETVAL = quest_manager.summonburriedplayercorpse(char_id, dest_x, dest_y, dest_z, dest_heading); -// -// ST(0) = boolSV(RETVAL); -// sv_2mortal(ST(0)); -// XSRETURN(1); -//} -// -//XS(XS__summonallplayercorpses); -//XS(XS__summonallplayercorpses) -//{ -// dXSARGS; -// if (items != 5) -// Perl_croak(aTHX_ "Usage: summonallplayercorpses(char_id,dest_x,dest_y,dest_z,dest_heading)"); -// -// bool RETVAL; -// uint32 char_id = (int)SvIV(ST(0)); -// float dest_x = (float)SvIV(ST(1)); -// float dest_y = (float)SvIV(ST(2)); -// float dest_z = (float)SvIV(ST(3)); -// float dest_heading = (float)SvIV(ST(4)); -// -// RETVAL = quest_manager.summonallplayercorpses(char_id, dest_x, dest_y, dest_z, dest_heading); -// -// ST(0) = boolSV(RETVAL); -// sv_2mortal(ST(0)); -// XSRETURN(1); -//} -// -//XS(XS__getplayerburriedcorpsecount); -//XS(XS__getplayerburriedcorpsecount) -//{ -// dXSARGS; -// if (items != 1) -// Perl_croak(aTHX_ "Usage: getplayerburriedcorpsecount(char_id)"); -// -// uint32 RETVAL; -// dXSTARG; -// -// uint32 char_id = (int)SvIV(ST(0)); -// -// RETVAL = quest_manager.getplayerburriedcorpsecount(char_id); -// XSprePUSH; PUSHu((IV)RETVAL); -// -// XSRETURN(1); -//} -// -//XS(XS__buryplayercorpse); -//XS(XS__buryplayercorpse) -//{ -// dXSARGS; -// if (items != 1) -// Perl_croak(aTHX_ "Usage: buryplayercorpse(char_id)"); -// -// uint32 RETVAL; -// dXSTARG; -// -// uint32 char_id = (int)SvIV(ST(0)); -// -// RETVAL = quest_manager.buryplayercorpse(char_id); -// XSprePUSH; PUSHu((IV)RETVAL); -// -// XSRETURN(1); -//} -// -//XS(XS__forcedooropen); -//XS(XS__forcedooropen) -//{ -// dXSARGS; -// if (items < 1 || items > 2) -// Perl_croak(aTHX_ "Usage: forcedooropen(doorid [, altmode=0])"); -// -// if (items == 1) -// { -// uint32 did = (int)SvIV(ST(0)); -// -// quest_manager.forcedooropen(did, false); -// -// XSRETURN_EMPTY; -// } -// else -// { -// uint32 did = (int)SvIV(ST(0)); -// bool am = (int)SvIV(ST(1)) == 0?false:true; -// -// quest_manager.forcedooropen(did, am); -// -// XSRETURN_EMPTY; -// } -//} -// -//XS(XS__forcedoorclose); -//XS(XS__forcedoorclose) -//{ -// dXSARGS; -// if (items < 1 || items > 2) -// Perl_croak(aTHX_ "Usage: forcedoorclose(doorid [, altmode=0])"); -// -// if (items == 1) -// { -// uint32 did = (int)SvIV(ST(0)); -// -// quest_manager.forcedoorclose(did, false); -// -// XSRETURN_EMPTY; -// } -// else -// { -// uint32 did = (int)SvIV(ST(0)); -// bool am = (int)SvIV(ST(1)) == 0?false:true; -// -// quest_manager.forcedoorclose(did, am); -// -// XSRETURN_EMPTY; -// } -//} -// -//XS(XS__toggledoorstate); -//XS(XS__toggledoorstate) -//{ -// dXSARGS; -// if (items !=1) -// Perl_croak(aTHX_ "Usage: toggledoorstate(doorid)"); -// -// uint32 did = (int)SvIV(ST(0)); -// -// quest_manager.toggledoorstate(did); -// -// XSRETURN_EMPTY; -//} -// -//XS(XS__isdooropen); -//XS(XS__isdooropen) -//{ -// dXSARGS; -// if (items != 1) -// Perl_croak(aTHX_ "Usage: isdooropen(doorid)"); -// -// bool RETVAL; -// dXSTARG; -// -// uint32 doorid = (int)SvIV(ST(0)); -// -// RETVAL = quest_manager.isdooropen(doorid); -// XSprePUSH; PUSHu((IV)RETVAL); -// -// XSRETURN(1); -//} -// -//XS(XS__depopzone); -//XS(XS__depopzone) -//{ -// dXSARGS; -// if (items != 1) -// Perl_croak(aTHX_ "Usage: depopzone(StartSpawnStatus)"); -// -// bool StartSpawnStatus = ((int)SvIV(ST(0))) == 0?false:true; -// -// quest_manager.depopzone(StartSpawnStatus); -// -// XSRETURN_EMPTY; -//} -// -//XS(XS__repopzone); -//XS(XS__repopzone) -//{ -// dXSARGS; -// if (items != 0) -// Perl_croak(aTHX_ "Usage: repopzone()"); -// -// quest_manager.repopzone(); -// -// XSRETURN_EMPTY; -//} -// -//XS(XS__npcrace); -//XS(XS__npcrace) -//{ -// dXSARGS; -// if (items != 1) -// Perl_croak(aTHX_ "Usage: npcrace(race_id)"); -// -// int race_id = (int)SvIV(ST(0)); -// -// quest_manager.npcrace(race_id); -// -// XSRETURN_EMPTY; -//} -// -//XS(XS__npcgender); -//XS(XS__npcgender) -//{ -// dXSARGS; -// if (items != 1) -// Perl_croak(aTHX_ "Usage: npcgender(gender_id)"); -// -// int gender_id= (int)SvIV(ST(0)); -// -// quest_manager.npcgender(gender_id); -// -// XSRETURN_EMPTY; -//} -// -//XS(XS__npcsize); -//XS(XS__npcsize) -//{ -// dXSARGS; -// if (items != 1) -// Perl_croak(aTHX_ "Usage: npcsize(newsize)"); -// -// int newsize = (int)SvIV(ST(0)); -// -// quest_manager.npcsize(newsize); -// -// XSRETURN_EMPTY; -//} -// -//XS(XS__npctexture); -//XS(XS__npctexture) -//{ -// dXSARGS; -// if (items != 1) -// Perl_croak(aTHX_ "Usage: npctexture(newtexture)"); -// -// int newtexture = (int)SvIV(ST(0)); -// -// quest_manager.npctexture(newtexture); -// -// XSRETURN_EMPTY; -//} -// -//XS(XS__playerrace); -//XS(XS__playerrace) -//{ -// dXSARGS; -// if (items != 1) -// Perl_croak(aTHX_ "Usage: playerrace(race_id)"); -// -// int race_id = (int)SvIV(ST(0)); -// -// quest_manager.playerrace(race_id); -// -// XSRETURN_EMPTY; -//} -// -//XS(XS__playergender); -//XS(XS__playergender) -//{ -// dXSARGS; -// if (items != 1) -// Perl_croak(aTHX_ "Usage: playergender(gender_id)"); -// -// int gender_id= (int)SvIV(ST(0)); -// -// quest_manager.playergender(gender_id); -// -// XSRETURN_EMPTY; -//} -// -//XS(XS__playersize); -//XS(XS__playersize) -//{ -// dXSARGS; -// if (items != 1) -// Perl_croak(aTHX_ "Usage: playersize(newsize)"); -// -// int newsize = (int)SvIV(ST(0)); -// -// quest_manager.playersize(newsize); -// -// XSRETURN_EMPTY; -//} -// -//XS(XS__playertexture); -//XS(XS__playertexture) -//{ -// dXSARGS; -// if (items != 1) -// Perl_croak(aTHX_ "Usage: playertexture(newtexture)"); -// -// int newtexture = (int)SvIV(ST(0)); -// -// quest_manager.playertexture(newtexture); -// -// XSRETURN_EMPTY; -//} -// -//XS(XS__playerfeature); -//XS(XS__playerfeature) -//{ -// dXSARGS; -// if (items != 2) -// Perl_croak(aTHX_ "Usage: playerfeature(feature, setting)"); -// -// char * feature = (char *)SvPV_nolen(ST(0)); -// int setting = (int)SvIV(ST(1)); -// -// quest_manager.playerfeature(feature, setting); -// -// XSRETURN_EMPTY; -//} -// -//XS(XS__npcfeature); -//XS(XS__npcfeature) -//{ -// dXSARGS; -// if (items != 2) -// Perl_croak(aTHX_ "Usage: npcfeature(feature, setting)"); -// -// char * feature = (char *)SvPV_nolen(ST(0)); -// int setting = (int)SvIV(ST(1)); -// -// quest_manager.npcfeature(feature, setting); -// -// XSRETURN_EMPTY; -//} -// -//#ifdef BOTS -// -//XS(XS__createbotcount); -//XS(XS__createbotcount) -//{ -// dXSARGS; -// int RETVAL; -// dXSTARG; -// -// RETVAL = quest_manager.createbotcount(); -// XSprePUSH; PUSHi((IV)RETVAL); -// -// XSRETURN(1); -//} -// -//XS(XS__spawnbotcount); -//XS(XS__spawnbotcount) -//{ -// dXSARGS; -// int RETVAL; -// dXSTARG; -// -// RETVAL = quest_manager.spawnbotcount(); -// XSprePUSH; PUSHi((IV)RETVAL); -// -// XSRETURN(1); -//} -// -//XS(XS__botquest); -//XS(XS__botquest) -//{ -// dXSARGS; -// bool RETVAL; -// dXSTARG; -// -// RETVAL = quest_manager.botquest(); -// XSprePUSH; PUSHu((IV)RETVAL); -// -// XSRETURN(1); -//} -// -//XS(XS__createBot); -//XS(XS__createBot) -//{ -// dXSARGS; -// bool RETVAL; -// dXSTARG; -// -// if(items != 6) -// { -// Perl_croak(aTHX_ "Usage: createBot(firstname, lastname, level, race, class, gender)"); -// } -// -// char *firstname = (char *)SvPV_nolen(ST(0)); -// char *lastname = (char *)SvPV_nolen(ST(1)); -// int level = (int) SvIV(ST(2)); -// int race = (int) SvIV(ST(3)); -// int botclass = (int) SvIV(ST(4)); -// int gender = (int) SvIV(ST(5)); -// -// RETVAL = quest_manager.createBot(firstname, lastname, level, race, botclass, gender); -// XSprePUSH; PUSHu((IV)RETVAL); -// XSRETURN(1); -//} -// -//#endif //BOTS -// -//XS(XS__taskselector); -//XS(XS__taskselector) -//{ -// dXSARGS; -// if((items >= 1) && (items <=MAXCHOOSERENTRIES)) { -// int tasks[MAXCHOOSERENTRIES]; -// for(int i=0; i< items; i++) { -// tasks[i] = (int)SvIV(ST(i)); -// } -// quest_manager.taskselector(items, tasks); -// } else { -// Perl_croak(aTHX_ "Usage: taskselector(taskid1, taskid2, ..., taskid%i)", MAXCHOOSERENTRIES); -// } -// -// XSRETURN_EMPTY; -//} -//XS(XS__tasksetselector); -//XS(XS__tasksetselector) -//{ -// dXSARGS; -// if(items == 1) { -// int tasksetid = (int)SvIV(ST(0)); -// quest_manager.tasksetselector(tasksetid); -// } else { -// Perl_croak(aTHX_ "Usage: tasksetselector(tasksetid)"); -// } -// -// XSRETURN_EMPTY; -//} -//XS(XS__enabletask); -//XS(XS__enabletask) -//{ -// dXSARGS; -// if((items >= 1) && (items <=10)) { -// int tasks[10]; -// for(int i=0; i< items; i++) { -// tasks[i] = (int)SvIV(ST(i)); -// } -// quest_manager.enabletask(items, tasks); -// } else { -// Perl_croak(aTHX_ "Usage: enabletask(taskid1, taskid2, ..., taskid10"); -// } -// -// XSRETURN_EMPTY; -//} -//XS(XS__disabletask); -//XS(XS__disabletask) -//{ -// dXSARGS; -// if((items >= 1) && (items <=10)) { -// int tasks[10]; -// for(int i=0; i< items; i++) { -// tasks[i] = (int)SvIV(ST(i)); -// } -// quest_manager.disabletask(items, tasks); -// } else { -// Perl_croak(aTHX_ "Usage: disabletask(taskid1, taskid2, ..., taskid10"); -// } -// -// XSRETURN_EMPTY; -//} -// -//XS(XS__istaskenabled); -//XS(XS__istaskenabled) -//{ -// dXSARGS; -// bool RETVAL; -// dXSTARG; -// -// if(items == 1) { -// unsigned int taskid = (int)SvIV(ST(0)); -// RETVAL = quest_manager.istaskenabled(taskid); -// } else { -// Perl_croak(aTHX_ "Usage: istaskenabled(taskid)"); -// } -// -// XSprePUSH; PUSHu((IV)RETVAL); -// -// XSRETURN(1); -//} -//XS(XS__istaskactive); -//XS(XS__istaskactive) -//{ -// dXSARGS; -// bool RETVAL; -// dXSTARG; -// -// if(items == 1) { -// unsigned int task = (int)SvIV(ST(0)); -// RETVAL = quest_manager.istaskactive(task); -// } else { -// Perl_croak(aTHX_ "Usage: istaskactive(task)"); -// } -// -// XSprePUSH; PUSHu((IV)RETVAL); -// -// XSRETURN(1); -//} -//XS(XS__istaskactivityactive); -//XS(XS__istaskactivityactive) -//{ -// dXSARGS; -// bool RETVAL; -// dXSTARG; -// -// if(items == 2) { -// unsigned int task = (int)SvIV(ST(0)); -// unsigned int activity = (int)SvIV(ST(1)); -// RETVAL = quest_manager.istaskactivityactive(task, activity); -// } else { -// Perl_croak(aTHX_ "Usage: istaskactivityactive(task,activity)"); -// } -// -// XSprePUSH; PUSHu((IV)RETVAL); -// -// XSRETURN(1); -//} -//XS(XS__gettaskactivitydonecount); -//XS(XS__gettaskactivitydonecount) -//{ -// dXSARGS; -// uint32 RETVAL; -// dXSTARG; -// -// if(items == 2) { -// unsigned int task = (int)SvIV(ST(0)); -// unsigned int activity = (int)SvIV(ST(1)); -// RETVAL = quest_manager.gettaskactivitydonecount(task, activity); -// XSprePUSH; PUSHu((UV)RETVAL); -// } else { -// Perl_croak(aTHX_ "Usage: gettaskactivitydonecount(task,activity)"); -// } -// -// XSRETURN(1); -//} -//XS(XS__updatetaskactivity); -//XS(XS__updatetaskactivity) -//{ -// dXSARGS; -// unsigned int task, activity; -// int count = 1; -// if(items == 2) { -// task = (int)SvIV(ST(0)); -// activity = (int)SvIV(ST(1)); -// quest_manager.updatetaskactivity(task, activity, count); -// } -// else if(items == 3) { -// task = (int)SvIV(ST(0)); -// activity = (int)SvIV(ST(1)); -// count = (int)SvIV(ST(2)); -// quest_manager.updatetaskactivity(task, activity, count); -// } else { -// Perl_croak(aTHX_ "Usage: updatetaskactivity(task, activity [,count])"); -// } -// -// XSRETURN_EMPTY; -//} -// -//XS(XS__resettaskactivity); -//XS(XS__resettaskactivity) -//{ -// dXSARGS; -// unsigned int task, activity; -// if(items == 2) { -// task = (int)SvIV(ST(0)); -// activity = (int)SvIV(ST(1)); -// quest_manager.resettaskactivity(task, activity); -// } else { -// Perl_croak(aTHX_ "Usage: resettaskactivity(task, activity)"); -// } -// -// XSRETURN_EMPTY; -//} -// -//XS(XS__taskexploredarea); -//XS(XS__taskexploredarea) -//{ -// dXSARGS; -// unsigned int exploreid; -// if(items == 1) { -// exploreid = (int)SvIV(ST(0)); -// quest_manager.taskexploredarea(exploreid); -// } else { -// Perl_croak(aTHX_ "Usage: taskexplorearea(exploreid)"); -// } -// -// XSRETURN_EMPTY; -//} -// -//XS(XS__assigntask); -//XS(XS__assigntask) -//{ -// dXSARGS; -// unsigned int taskid; -// if(items == 1) { -// taskid = (int)SvIV(ST(0)); -// quest_manager.assigntask(taskid); -// } else { -// Perl_croak(aTHX_ "Usage: assigntask(taskid)"); -// } -// -// XSRETURN_EMPTY; -//} -// -//XS(XS__failtask); -//XS(XS__failtask) -//{ -// dXSARGS; -// unsigned int taskid; -// if(items == 1) { -// taskid = (int)SvIV(ST(0)); -// quest_manager.failtask(taskid); -// } else { -// Perl_croak(aTHX_ "Usage: failtask(taskid)"); -// } -// -// XSRETURN_EMPTY; -//} -// -//XS(XS__tasktimeleft); -//XS(XS__tasktimeleft) -//{ -// dXSARGS; -// int RETVAL; -// dXSTARG; -// -// if(items == 1) { -// unsigned int taskid = (int)SvIV(ST(0)); -// RETVAL = quest_manager.tasktimeleft(taskid); -// } else { -// Perl_croak(aTHX_ "Usage: tasktimeleft(taskid)"); -// } -// -// XSprePUSH; PUSHi((IV)RETVAL); -// -// XSRETURN(1); -//} -// -//XS(XS__istaskcompleted); -//XS(XS__istaskcompleted) -//{ -// dXSARGS; -// int RETVAL; -// dXSTARG; -// -// if(items == 1) { -// unsigned int taskid = (int)SvIV(ST(0)); -// RETVAL = quest_manager.istaskcompleted(taskid); -// } else { -// Perl_croak(aTHX_ "Usage: istaskcompleted(taskid)"); -// } -// -// XSprePUSH; PUSHi((IV)RETVAL); -// -// XSRETURN(1); -//} -// -//XS(XS__enabledtaskcount); -//XS(XS__enabledtaskcount) -//{ -// dXSARGS; -// int RETVAL; -// dXSTARG; -// -// if(items == 1) { -// unsigned int taskset = (int)SvIV(ST(0)); -// RETVAL = quest_manager.enabledtaskcount(taskset); -// } else { -// Perl_croak(aTHX_ "Usage: enabledtaskcount(taskset)"); -// } -// -// XSprePUSH; PUSHi((IV)RETVAL); -// -// XSRETURN(1); -//} -// -//XS(XS__firsttaskinset); -//XS(XS__firsttaskinset) -//{ -// dXSARGS; -// int RETVAL; -// dXSTARG; -// -// if(items == 1) { -// unsigned int taskset = (int)SvIV(ST(0)); -// RETVAL = quest_manager.firsttaskinset(taskset); -// } else { -// Perl_croak(aTHX_ "Usage: firsttaskinset(taskset)"); -// } -// -// XSprePUSH; PUSHi((IV)RETVAL); -// -// XSRETURN(1); -//} -// -//XS(XS__lasttaskinset); -//XS(XS__lasttaskinset) -//{ -// dXSARGS; -// int RETVAL; -// dXSTARG; -// -// if(items == 1) { -// unsigned int taskset = (int)SvIV(ST(0)); -// RETVAL = quest_manager.lasttaskinset(taskset); -// } else { -// Perl_croak(aTHX_ "Usage: lasttaskinset(taskset)"); -// } -// -// XSprePUSH; PUSHi((IV)RETVAL); -// -// XSRETURN(1); -//} -// -//XS(XS__nexttaskinset); -//XS(XS__nexttaskinset) -//{ -// dXSARGS; -// int RETVAL; -// dXSTARG; -// -// if(items == 2) { -// unsigned int taskset = (int)SvIV(ST(0)); -// unsigned int taskid = (int)SvIV(ST(1)); -// RETVAL = quest_manager.nexttaskinset(taskset, taskid); -// } else { -// Perl_croak(aTHX_ "Usage: nexttaskinset(taskset, taskid)"); -// } -// -// XSprePUSH; PUSHi((IV)RETVAL); -// -// XSRETURN(1); -//} -//XS(XS__activespeaktask); -//XS(XS__activespeaktask) -//{ -// dXSARGS; -// int RETVAL; -// dXSTARG; -// -// if(items == 0) { -// RETVAL = quest_manager.activespeaktask(); -// } else { -// Perl_croak(aTHX_ "Usage: activespeaktask()"); -// } -// -// XSprePUSH; PUSHi((IV)RETVAL); -// -// XSRETURN(1); -//} -// -//XS(XS__activespeakactivity); -//XS(XS__activespeakactivity) -//{ -// dXSARGS; -// int RETVAL; -// dXSTARG; -// -// if(items == 1) { -// unsigned int taskid = (int)SvIV(ST(0)); -// RETVAL = quest_manager.activespeakactivity(taskid); -// } else { -// Perl_croak(aTHX_ "Usage: activespeakactivity(taskid)"); -// } -// -// XSprePUSH; PUSHi((IV)RETVAL); -// -// XSRETURN(1); -//} -// -//XS(XS__activetasksinset); -//XS(XS__activetasksinset) -//{ -// dXSARGS; -// int RETVAL; -// dXSTARG; -// -// if(items == 1) { -// unsigned int taskset = (int)SvIV(ST(0)); -// RETVAL = quest_manager.activetasksinset(taskset); -// } else { -// Perl_croak(aTHX_ "Usage: activetasksinset(taskset)"); -// } -// -// XSprePUSH; PUSHi((IV)RETVAL); -// -// XSRETURN(1); -//} -// -//XS(XS__completedtasksinset); -//XS(XS__completedtasksinset) -//{ -// dXSARGS; -// int RETVAL; -// dXSTARG; -// -// if(items == 1) { -// unsigned int taskset = (int)SvIV(ST(0)); -// RETVAL = quest_manager.completedtasksinset(taskset); -// } else { -// Perl_croak(aTHX_ "Usage: completedtasksinset(taskset)"); -// } -// -// XSprePUSH; PUSHi((IV)RETVAL); -// -// XSRETURN(1); -//} -// -// -//XS(XS__istaskappropriate); -//XS(XS__istaskappropriate) -//{ -// dXSARGS; -// bool RETVAL; -// dXSTARG; -// -// if(items == 1) { -// unsigned int task = (int)SvIV(ST(0)); -// RETVAL = quest_manager.istaskappropriate(task); -// } else { -// Perl_croak(aTHX_ "Usage: istaskaappropriate(task)"); -// } -// -// XSprePUSH; PUSHu((IV)RETVAL); -// -// XSRETURN(1); -//} -// -// XS(XS__popup); // prototype to pass -Wmissing-prototypes -// XS(XS__popup) { -// dXSARGS; -// int popupid = 0; -// int buttons = 0; -// int duration = 0; -// -// if((items < 2) || (items > 5)) -// Perl_croak(aTHX_ "Usage: popup(windowtitle, text, popupid, buttons, duration)"); -// -// if(items >= 3) -// popupid = (int)SvIV(ST(2)); -// -// if(items >= 4) -// buttons = (int)SvIV(ST(3)); -// -// if(items == 5) -// duration = (int)SvIV(ST(4)); -// -// quest_manager.popup(SvPV_nolen(ST(0)), SvPV_nolen(ST(1)), popupid, buttons, duration); -// -// XSRETURN_EMPTY; -// } -//XS(XS__clearspawntimers); -//XS(XS__clearspawntimers) -//{ -// dXSARGS; -// if (items != 0) -// Perl_croak(aTHX_ "Usage: clearspawntimers()"); -// -// quest_manager.clearspawntimers(); -// -// XSRETURN_EMPTY; -//} -//XS(XS__ze); -//XS(XS__ze) -//{ -// dXSARGS; -// if (items != 2) -// Perl_croak(aTHX_ "Usage: ze(type, str)"); -// -// int type = (int)SvIV(ST(0)); -// char * str = (char *)SvPV_nolen(ST(1)); -// -// quest_manager.ze(type, str); -// -// XSRETURN_EMPTY; -//} -// -//XS(XS__we); -//XS(XS__we) -//{ -// dXSARGS; -// if (items != 2) -// Perl_croak(aTHX_ "Usage: we(type, str)"); -// -// int type = (int)SvIV(ST(0)); -// char * str = (char *)SvPV_nolen(ST(1)); -// -// quest_manager.we(type, str); -// -// XSRETURN_EMPTY; -//} -//XS(XS__getlevel); -//XS(XS__getlevel) -//{ -// dXSARGS; -// if (items > 1) -// Perl_croak(aTHX_ "Usage: getlevel(type)"); -// -// int RETVAL; -// dXSTARG; -// -// int type; -// if (items == 1) -// type = (int)SvIV(ST(0)); -// else -// type = 0; -// -// RETVAL = quest_manager.getlevel(type); -// XSprePUSH; PUSHu((IV)RETVAL); -// -// XSRETURN(1); -//} -// -//XS(XS__CreateGroundObject); -//XS(XS__CreateGroundObject) -//{ -// dXSARGS; -// if (items != 5 && items != 6) -// Perl_croak(aTHX_ "Usage: creategroundobject(itemid, x, y, z, heading, [decay_time])"); -// -// int itemid = (int)SvIV(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.CreateGroundObject(itemid, x, y, z, heading); -// else{ -// uint32 decay_time = (uint32)SvIV(ST(5)); -// id = quest_manager.CreateGroundObject(itemid, x, y, z, heading, decay_time); -// } -// -// XSRETURN_IV(id); -//} -// -//XS(XS__CreateGroundObjectFromModel); -//XS(XS__CreateGroundObjectFromModel) -//{ -// dXSARGS; -// if (items < 5 || items > 7) -// Perl_croak(aTHX_ "Usage: creategroundobjectfrommodel(modelname, x, y, z, heading, [type], [decay_time])"); -// -// 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)); -// uint32 type = 0; -// uint32 decay_time = 0; -// uint16 id = 0; -// -// if (items > 5) -// type = (uint32)SvIV(ST(5)); -// -// if (items > 6) -// decay_time = (uint32)SvIV(ST(6)); -// -// id = quest_manager.CreateGroundObjectFromModel(modelname, x, y, z, heading, type, decay_time); -// XSRETURN_IV(id); -//} -// -//XS(XS__CreateDoor); -//XS(XS__CreateDoor) -//{ -// dXSARGS; -// if (items < 5 || items > 7) -// Perl_croak(aTHX_ "Usage: createdoor(modelname, x, y, z, heading, [type], [size])"); -// -// 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)); -// uint32 type = 58; -// uint32 size = 100; -// uint16 id = 0; -// -// if (items > 5) -// type = (uint32)SvIV(ST(5)); -// -// if (items > 6) -// size = (uint32)SvIV(ST(6)); -// -// id = quest_manager.CreateDoor(modelname, x, y, z, heading, type, size); -// XSRETURN_IV(id); -//} -// -//XS(XS__ModifyNPCStat); -//XS(XS__ModifyNPCStat) -//{ -// dXSARGS; -// if (items != 2) -// Perl_croak(aTHX_ "Usage: ModifyNPCStat(identifier, newValue)"); -// -// quest_manager.ModifyNPCStat(SvPV_nolen(ST(0)), SvPV_nolen(ST(1))); -// -// XSRETURN_EMPTY; -//} -// -//XS(XS__collectitems); -//XS(XS__collectitems) -//{ -// dXSARGS; -// if (items != 2) -// Perl_croak(aTHX_ "Usage: collectitems(item_id, remove?)"); -// -// uint32 item_id = (int)SvIV(ST(0)); -// bool remove = ((int)SvIV(ST(1))) == 0?false:true; -// -// int quantity = -// quest_manager.collectitems(item_id, remove); -// -// XSRETURN_IV(quantity); -//} -// -//XS(XS__UpdateSpawnTimer); -//XS(XS__UpdateSpawnTimer) -//{ -// dXSARGS; -// if (items != 2) -// Perl_croak(aTHX_ "Usage: UpdateSpawnTimer(Spawn2_ID, Updated_Time_Till_Repop)"); -// -// uint32 id = (int)SvIV(ST(0)); -// uint32 duration = (int)SvIV(ST(1)); -// -// quest_manager.UpdateSpawnTimer(id, duration); -// -// XSRETURN_EMPTY; -//} -// -//XS(XS__MerchantSetItem); -//XS(XS__MerchantSetItem) { -// dXSARGS; -// if (items != 2 && items != 3) -// Perl_croak(aTHX_ "Usage: MerchantSetItem(NPCid, itemid [, quantity])"); -// -// uint32 NPCid = (int)SvUV(ST(0)); -// uint32 itemid = (int)SvUV(ST(1)); -// uint32 quantity = 0; -// if (items == 3) -// quantity = (int)SvUV(ST(2)); -// -// quest_manager.MerchantSetItem(NPCid, itemid, quantity); -// -// XSRETURN_EMPTY; -//} -// -//XS(XS__MerchantCountItem); -//XS(XS__MerchantCountItem) { -// dXSARGS; -// if (items != 2) -// Perl_croak(aTHX_ "Usage: MerchantCountItem(NPCid, itemid)"); -// -// uint32 NPCid = (int)SvUV(ST(0)); -// uint32 itemid = (int)SvUV(ST(1)); -// uint32 quantity = quest_manager.MerchantCountItem(NPCid, itemid); -// -// XSRETURN_UV(quantity); -//} -// -//XS(XS__varlink); -//XS(XS__varlink) { -// dXSARGS; -// if (items != 1) -// Perl_croak(aTHX_ "Usage: varlink(itemID)"); -// dXSTARG; -// -// Const_char * RETVAL; -// char text[250]; -// uint32 itemID; -// itemID = (int)SvUV(ST(0)); -// -// RETVAL = quest_manager.varlink(text, itemID); -// -// sv_setpv(TARG, RETVAL); XSprePUSH; PUSHTARG; -// XSRETURN(1); -//} -// -//XS(XS__CreateInstance); -//XS(XS__CreateInstance) { -// dXSARGS; -// if (items != 3) -// Perl_croak(aTHX_ "Usage: CreateInstance(zone_name, version, duration)"); -// -// char * zone = (char *)SvPV_nolen(ST(0)); -// uint16 version = (int)SvUV(ST(1)); -// uint32 duration = (int)SvUV(ST(2)); -// uint32 id = quest_manager.CreateInstance(zone, version, duration); -// -// XSRETURN_UV(id); -//} -// -//XS(XS__DestroyInstance); -//XS(XS__DestroyInstance) { -// dXSARGS; -// if (items != 1) -// Perl_croak(aTHX_ "Usage: DestroyInstance(id)"); -// -// uint16 id = (int)SvUV(ST(0)); -// quest_manager.DestroyInstance(id); -// -// XSRETURN_EMPTY; -//} -// -//XS(XS__GetInstanceID); -//XS(XS__GetInstanceID) { -// dXSARGS; -// if (items != 2) -// Perl_croak(aTHX_ "Usage: GetInstanceID(zone_name, version)"); -// -// char * zone = (char *)SvPV_nolen(ST(0)); -// uint16 version = (int)SvUV(ST(1)); -// uint16 id = quest_manager.GetInstanceID(zone, version); -// -// XSRETURN_UV(id); -//} -// -//XS(XS__AssignToInstance); -//XS(XS__AssignToInstance) { -// dXSARGS; -// if (items != 1) -// Perl_croak(aTHX_ "Usage: AssignToInstance(id)"); -// -// uint16 id = (int)SvUV(ST(0)); -// quest_manager.AssignToInstance(id); -// -// XSRETURN_EMPTY; -//} -// -//XS(XS__AssignGroupToInstance); -//XS(XS__AssignGroupToInstance) { -// dXSARGS; -// if (items != 1) -// Perl_croak(aTHX_ "Usage: AssignGroupToInstance(id)"); -// -// uint16 id = (int)SvUV(ST(0)); -// quest_manager.AssignGroupToInstance(id); -// -// XSRETURN_EMPTY; -//} -// -//XS(XS__AssignRaidToInstance); -//XS(XS__AssignRaidToInstance) { -// dXSARGS; -// if (items != 1) -// Perl_croak(aTHX_ "Usage: AssignRaidToInstance(id)"); -// -// uint16 id = (int)SvUV(ST(0)); -// quest_manager.AssignRaidToInstance(id); -// -// XSRETURN_EMPTY; -//} -// -//XS(XS__MovePCInstance); -//XS(XS__MovePCInstance) -//{ -// dXSARGS; -// if (items != 5 && items != 6) -// Perl_croak(aTHX_ "Usage: MovePCInstance(zone_id, instance_id, x, y, z [,heading])"); -// -// int zoneid = (int)SvIV(ST(0)); -// int instanceid = (int)SvIV(ST(1)); -// float x = (float)SvNV(ST(2)); -// float y = (float)SvNV(ST(3)); -// float z = (float)SvNV(ST(4)); -// -// if (items == 4) -// { -// quest_manager.MovePCInstance(zoneid, instanceid, x, y, z, 0.0f); -// } -// else -// { -// float heading = (float)SvNV(ST(5)); -// quest_manager.MovePCInstance(zoneid, instanceid, x, y, z, heading); -// } -// -// XSRETURN_EMPTY; -//} -// -//XS(XS__FlagInstanceByGroupLeader); -//XS(XS__FlagInstanceByGroupLeader) { -// dXSARGS; -// if (items != 2) -// Perl_croak(aTHX_ "Usage: FlagInstanceByGroupLeader(zone, version)"); -// -// uint32 zone = (int)SvUV(ST(0)); -// uint16 version = (int)SvUV(ST(1)); -// quest_manager.FlagInstanceByGroupLeader(zone, version); -// -// XSRETURN_EMPTY; -//} -// -//XS(XS__FlagInstanceByRaidLeader); -//XS(XS__FlagInstanceByRaidLeader) { -// dXSARGS; -// if (items != 2) -// Perl_croak(aTHX_ "Usage: FlagInstanceByRaidLeader(zone, version)"); -// -// uint32 zone = (int)SvUV(ST(0)); -// uint16 version = (int)SvUV(ST(1)); -// quest_manager.FlagInstanceByRaidLeader(zone, version); -// -// XSRETURN_EMPTY; -//} -// -//XS(XS__saylink); -//XS(XS__saylink) { -// dXSARGS; -// if (items < 1 || items > 3) -// Perl_croak(aTHX_ "Usage: saylink(phrase,[silent?],[linkname])"); -// dXSTARG; -// -// Const_char * RETVAL; -// char text[250]; -// char text2[250]; -// bool silent = false; -// strcpy(text,(char *)SvPV_nolen(ST(0))); -// if(items >= 2) { -// silent = ((int)SvIV(ST(1))) == 0 ? false : true; -// } -// if (items == 3) -// strcpy(text2,(char *)SvPV_nolen(ST(2))); -// else -// strcpy(text2,text); -// -// RETVAL = quest_manager.saylink(text, silent, text2); -// sv_setpv(TARG, RETVAL); XSprePUSH; PUSHTARG; -// XSRETURN(1); -//} -// -//XS(XS__getguildnamebyid); -//XS(XS__getguildnamebyid) { -// dXSARGS; -// if (items != 1) -// Perl_croak(aTHX_ "Usage: getguildnamebyid(guild_id)"); -// dXSTARG; -// -// Const_char * RETVAL; -// uint32 guild_id = (int)SvUV(ST(0)); -// -// RETVAL = quest_manager.getguildnamebyid(guild_id); -// -// sv_setpv(TARG, RETVAL); XSprePUSH; PUSHTARG; -// XSRETURN(1); -//} -// -//XS(XS__SetRunning); -//XS(XS__SetRunning) -//{ -// dXSARGS; -// if (items != 1) -// Perl_croak(aTHX_ "Usage: SetRunning(val)"); -// -// bool val = ((int)SvIV(ST(0))) == 0?false:true; -// -// quest_manager.SetRunning(val); -// -// XSRETURN_EMPTY; -//} -// -//XS(XS__IsRunning); -//XS(XS__IsRunning) -//{ -// dXSARGS; -// if (items >= 1) -// Perl_croak(aTHX_ "Usage: IsRunning()"); -// -// bool RETVAL; -// dXSTARG; -// -// -// RETVAL = quest_manager.IsRunning(); -// XSprePUSH; PUSHu((IV)RETVAL); -// -// XSRETURN(1); -//} -// -//XS(XS__IsEffectInSpell); -//XS(XS__IsEffectInSpell) -//{ -// dXSARGS; -// if (items != 2) -// Perl_croak(aTHX_ "Usage: IsEffectInSpell(spell_id, effect_id)"); -// -// uint32 spell_id = (uint32)SvUV(ST(0)); -// uint32 effect_id = (uint32)SvUV(ST(1)); -// bool RETVAL; -// dXSTARG; -// -// -// RETVAL = IsEffectInSpell(spell_id, effect_id); -// XSprePUSH; PUSHu((IV)RETVAL); -// -// XSRETURN(1); -//} -// -//XS(XS__IsBeneficialSpell); -//XS(XS__IsBeneficialSpell) -//{ -// dXSARGS; -// if (items != 1) -// Perl_croak(aTHX_ "Usage: IsBeneficialSpell(spell_id)"); -// -// uint32 spell_id = (uint32)SvUV(ST(0)); -// bool RETVAL; -// dXSTARG; -// -// -// RETVAL = BeneficialSpell(spell_id); -// XSprePUSH; PUSHu((IV)RETVAL); -// -// XSRETURN(1); -//} -// -//XS(XS__GetSpellResistType); -//XS(XS__GetSpellResistType) -//{ -// dXSARGS; -// if (items != 1) -// Perl_croak(aTHX_ "Usage: GetSpellResistType(spell_id)"); -// -// uint32 spell_id = (uint32)SvUV(ST(0)); -// int32 spell_val = 0; -// dXSTARG; -// -// spell_val = GetSpellResistType(spell_id); -// XSRETURN_UV(spell_val); -//} -// -//XS(XS__GetSpellTargetType); -//XS(XS__GetSpellTargetType) -//{ -// dXSARGS; -// if (items != 1) -// Perl_croak(aTHX_ "Usage: GetSpellTargetType(spell_id)"); -// -// uint32 spell_id = (uint32)SvUV(ST(0)); -// int32 spell_val = 0; -// dXSTARG; -// -// spell_val = GetSpellTargetType(spell_id); -// XSRETURN_UV(spell_val); -//} -// -//XS(XS__FlyMode); -//XS(XS__FlyMode) { -// dXSARGS; -// if (items != 1) -// Perl_croak(aTHX_ "Usage: FlyMode([0/1/2])"); -// -// uint8 flymode = (int)SvUV(ST(0)); -// quest_manager.FlyMode(flymode); -// -// XSRETURN_EMPTY; -//} -// -//XS(XS_FactionValue); -//XS(XS_FactionValue) { -// dXSARGS; -// if (items != 0) -// Perl_croak(aTHX_ "Usage: factionvalue()"); -// -// uint8 fac = quest_manager.FactionValue(); -// XSRETURN_UV(fac); -//} -// -//XS(XS__enabletitle); -//XS(XS__enabletitle) -//{ -// dXSARGS; -// if (items != 1) -// Perl_croak(aTHX_ "Usage: enabletitle(titleset)"); -// -// int titleset = (int)SvIV(ST(0)); -// -// quest_manager.enabletitle(titleset); -// -// XSRETURN_EMPTY; -//} -// -//XS(XS__checktitle); -//XS(XS__checktitle) -//{ -// dXSARGS; -// if (items != 1) -// Perl_croak(aTHX_ "Usage: checktitle(titleset)"); -// -// bool RETVAL; -// int titleset = (int)SvIV(ST(0)); -// -// RETVAL = quest_manager.checktitle(titleset); -// -// ST(0) = boolSV(RETVAL); -// sv_2mortal(ST(0)); -// XSRETURN(1); -//} -// -//XS(XS__removetitle); -//XS(XS__removetitle) -//{ -// dXSARGS; -// if (items != 1) -// Perl_croak(aTHX_ "Usage: removetitle(titleset)"); -// -// int titleset = (int)SvIV(ST(0)); -// -// quest_manager.removetitle(titleset); -// -// XSRETURN_EMPTY; -//} -// -//XS(XS__wearchange); -//XS(XS__wearchange) -//{ -// dXSARGS; -// if (items != 2) -// Perl_croak(aTHX_ "Usage: wearchange(slot, texture)"); -// -// uint8 slot = (int)SvUV(ST(0)); -// uint16 texture = (int)SvUV(ST(1)); -// -// quest_manager.wearchange(slot, texture); -// -// XSRETURN_EMPTY; -//} -// -//XS(XS__voicetell); -//XS(XS__voicetell) -//{ -// dXSARGS; -// if (items != 4) -// Perl_croak(aTHX_ "Usage: voicetell(clientname, type, race, gender)"); -// -// char * str = (char *)SvPV_nolen(ST(0)); -// int macronum = (int)SvIV(ST(1)); -// int racenum = (int)SvIV(ST(2)); -// int gendernum = (int)SvIV(ST(3)); -// -// quest_manager.voicetell(str, macronum, racenum, gendernum); -// -// XSRETURN_EMPTY; -//} -// -//XS(XS__LearnRecipe); -//XS(XS__LearnRecipe) -//{ -// dXSARGS; -// if (items != 1) -// Perl_croak(aTHX_ "Usage: LearnRecipe(recipe_id)"); -// -// uint32 recipe_id = (uint32)SvIV(ST(0)); -// -// quest_manager.LearnRecipe(recipe_id); -// -// XSRETURN_EMPTY; -//} -// -//XS(XS__SendMail); -//XS(XS__SendMail) -//{ -// dXSARGS; -// if (items != 4) -// Perl_croak(aTHX_ "Usage: SendMail(to, from, subject, message)"); -// -// char *to = (char *)SvPV_nolen(ST(0)); -// char *from = (char *)SvPV_nolen(ST(1)); -// char *subject = (char *)SvPV_nolen(ST(2)); -// char *message = (char *)SvPV_nolen(ST(3)); -// -// quest_manager.SendMail(to, from, subject, message); -// -// XSRETURN_EMPTY; -//} -// -//XS(XS__GetZoneID); -//XS(XS__GetZoneID) -//{ -// dXSARGS; -// if (items != 1) -// Perl_croak(aTHX_ "Usage: GetZoneID(zone)"); -// -// char *zone = (char *)SvPV_nolen(ST(0)); -// int32 id = quest_manager.GetZoneID(zone); -// -// XSRETURN_IV(id); -//} -// -//XS(XS__GetZoneLongName); -//XS(XS__GetZoneLongName) -//{ -// dXSARGS; -// if (items != 1) -// Perl_croak(aTHX_ "Usage: GetZoneLongName(zone)"); -// dXSTARG; -// char *zone = (char *)SvPV_nolen(ST(0)); -// Const_char* RETVAL = quest_manager.GetZoneLongName(zone); -// -// sv_setpv(TARG, RETVAL); XSprePUSH; PUSHTARG; -// XSRETURN(1); -//} -// -//XS(XS__GetTimeSeconds); -//XS(XS__GetTimeSeconds) -//{ -// dXSARGS; -// if (items != 0) -// Perl_croak(aTHX_ "Usage: GetTimeSeconds()"); -// -// uint32 seconds = 0; -// dXSTARG; -// -// seconds = Timer::GetTimeSeconds(); -// XSRETURN_UV(seconds); -//} -// -//XS(XS__handleturnin); // prototype to pass -Wmissing-prototypes -//XS(XS__handleturnin) { -// dXSARGS; -// -// if (items != 2) -// Perl_croak(aTHX_ "Usage: handleturnin(itemid, itemcharges)"); -// int itemid = (int)SvIV(ST(0)); -// int charges = (int)SvIV(ST(1)); -// -// bool returnVal = quest_manager.TurnInItem(itemid,charges); -// -// ST(0) = boolSV(returnVal); -// sv_2mortal(ST(0)); -// XSRETURN(1); -//} -// -//XS(XS__completehandin); // prototype to pass -Wmissing-prototypes -//XS(XS__completehandin) { -// dXSARGS; -// -// if (items != 0) -// Perl_croak(aTHX_ "Usage: completehandin()"); -// -// quest_manager.CompleteHandIn(); -// -// XSRETURN_EMPTY; -//} -// -//XS(XS__resethandin); // prototype to pass -Wmissing-prototypes -//XS(XS__resethandin) { -// dXSARGS; -// -// if (items != 0) -// Perl_croak(aTHX_ "Usage: resethandin()"); -// -// quest_manager.ResetHandIn(); -// -// XSRETURN_EMPTY; -//} -// -//XS(XS__clearhandin); // prototype to pass -Wmissing-prototypes -//XS(XS__clearhandin) { -// dXSARGS; -// -// if (items != 0) -// Perl_croak(aTHX_ "Usage: clearhandin()"); -// -// quest_manager.ClearHandIn(); -// -// XSRETURN_EMPTY; -//} -// -//XS(XS__crosszonesignalclientbycharid); -//XS(XS__crosszonesignalclientbycharid) -//{ -// dXSARGS; -// -// if (items != 2) -// Perl_croak(aTHX_ "Usage: crosszonesignalclientbycharid(char_id, data)"); -// -// if (items == 2) { -// int char_id = (int)SvIV(ST(0)); -// uint32 data = (uint32)SvIV(ST(1)); -// quest_manager.CrossZoneSignalPlayerByCharID(char_id, data); -// } else { -// Perl_croak(aTHX_ "Usage: crosszonesignalclientbycharid(char_id, data)"); -// } -// -// XSRETURN_EMPTY; -//} -// -//XS(XS__crosszonesignalclientbyname); -//XS(XS__crosszonesignalclientbyname) -//{ -// dXSARGS; -// -// if (items != 2) -// Perl_croak(aTHX_ "Usage: crosszonesignalclientbycharid(Name, data)"); -// -// if (items == 2) { -// char *Name = (char *)SvPV_nolen(ST(0)); -// uint32 data = (uint32)SvIV(ST(1)); -// quest_manager.CrossZoneSignalPlayerByName(Name, data); -// } else { -// Perl_croak(aTHX_ "Usage: crosszonesignalclientbycharid(Name, data)"); -// } -// -// XSRETURN_EMPTY; -//} -// -// -//XS(XS__crosszonemessageplayerbyname); -//XS(XS__crosszonemessageplayerbyname) -//{ -// dXSARGS; -// -// if (items != 3) -// Perl_croak(aTHX_ "Usage: crosszonemessageplayerbyname(Type, Name, Message)"); -// -// if (items == 3) { -// uint32 Type = (uint32)SvIV(ST(0)); -// char *Name = (char *)SvPV_nolen(ST(1)); -// char *Message = (char *)SvPV_nolen(ST(2)); -// quest_manager.CrossZoneMessagePlayerByName(Type, Name, Message); -// } else { -// Perl_croak(aTHX_ "Usage: crosszonemessageplayerbyname(Type, Name, Message)"); -// } -// -// XSRETURN_EMPTY; -//} -// -///* -//This is the callback perl will look for to setup the -//quest package's XSUBs -//*/ -//EXTERN_C XS(boot_quest); // prototype to pass -Wmissing-prototypes -//EXTERN_C XS(boot_quest) -//{ -// dXSARGS; -// char file[256]; -// strncpy(file, __FILE__, 256); -// file[255] = '\0'; -// -// if(items != 1) -// LogFile->write(EQEMuLog::Error, "boot_quest does not take any arguments."); -// -// char buf[128]; //shouldent have any function names longer than this. -// -// //add the strcpy stuff to get rid of const warnings.... -// -// XS_VERSION_BOOTCHECK ; -// newXS(strcpy(buf, "echo"), XS__echo, file); -// newXS(strcpy(buf, "say"), XS__say, file); -// newXS(strcpy(buf, "me"), XS__me, file); -// newXS(strcpy(buf, "summonitem"), XS__summonitem, file); -// newXS(strcpy(buf, "write"), XS__write, file); -// newXS(strcpy(buf, "spawn"), XS__spawn, file); -// newXS(strcpy(buf, "spawn2"), XS__spawn2, file); -// newXS(strcpy(buf, "unique_spawn"), XS__unique_spawn, file); -// newXS(strcpy(buf, "spawn_from_spawn2"), XS__spawn_from_spawn2, file); -// newXS(strcpy(buf, "enable_spawn2"), XS__enable_spawn2, file); -// newXS(strcpy(buf, "disable_spawn2"), XS__disable_spawn2, file); -// newXS(strcpy(buf, "setstat"), XS__setstat, file); -// newXS(strcpy(buf, "incstat"), XS__incstat, file); -// newXS(strcpy(buf, "castspell"), XS__castspell, file); -// newXS(strcpy(buf, "selfcast"), XS__selfcast, file); -// newXS(strcpy(buf, "addloot"), XS__addloot, file); -// newXS(strcpy(buf, "zone"), XS__zone, file); -// newXS(strcpy(buf, "settimer"), XS__settimer, file); -// newXS(strcpy(buf, "settimerMS"), XS__settimerMS, file); -// newXS(strcpy(buf, "stoptimer"), XS__stoptimer, file); -// newXS(strcpy(buf, "stopalltimers"), XS__stopalltimers, file); -// newXS(strcpy(buf, "emote"), XS__emote, file); -// newXS(strcpy(buf, "shout"), XS__shout, file); -// newXS(strcpy(buf, "shout2"), XS__shout2, file); -// newXS(strcpy(buf, "gmsay"), XS__gmsay, file); -// newXS(strcpy(buf, "depop"), XS__depop, file); -// newXS(strcpy(buf, "depop_withtimer"), XS__depop_withtimer, file); -// newXS(strcpy(buf, "settarget"), XS__settarget, file); -// newXS(strcpy(buf, "follow"), XS__follow, file); -// newXS(strcpy(buf, "sfollow"), XS__sfollow, file); -// newXS(strcpy(buf, "changedeity"), XS__changedeity, file); -// newXS(strcpy(buf, "exp"), XS__exp, file); -// newXS(strcpy(buf, "level"), XS__level, file); -// newXS(strcpy(buf, "traindisc"), XS__traindisc, file); -// newXS(strcpy(buf, "isdisctome"), XS__isdisctome, file); -// newXS(strcpy(buf, "safemove"), XS__safemove, file); -// newXS(strcpy(buf, "rain"), XS__rain, file); -// newXS(strcpy(buf, "snow"), XS__snow, file); -// newXS(strcpy(buf, "surname"), XS__surname, file); -// newXS(strcpy(buf, "permaclass"), XS__permaclass, file); -// newXS(strcpy(buf, "permarace"), XS__permarace, file); -// newXS(strcpy(buf, "permagender"), XS__permagender, file); -// newXS(strcpy(buf, "scribespells"), XS__scribespells, file); -// newXS(strcpy(buf, "traindiscs"), XS__traindiscs, file); -// newXS(strcpy(buf, "unscribespells"), XS__unscribespells, file); -// newXS(strcpy(buf, "untraindiscs"), XS__untraindiscs, file); -// newXS(strcpy(buf, "givecash"), XS__givecash, file); -// newXS(strcpy(buf, "pvp"), XS__pvp, file); -// newXS(strcpy(buf, "movepc"), XS__movepc, file); -// newXS(strcpy(buf, "gmmove"), XS__gmmove, file); -// newXS(strcpy(buf, "movegrp"), XS__movegrp, file); -// newXS(strcpy(buf, "doanim"), XS__doanim, file); -// newXS(strcpy(buf, "addskill"), XS__addskill, file); -// newXS(strcpy(buf, "setlanguage"), XS__setlanguage, file); -// newXS(strcpy(buf, "setskill"), XS__setskill, file); -// newXS(strcpy(buf, "setallskill"), XS__setallskill, file); -// newXS(strcpy(buf, "attack"), XS__attack, file); -// newXS(strcpy(buf, "attacknpc"), XS__attacknpc, file); -// newXS(strcpy(buf, "attacknpctype"), XS__attacknpctype, file); -// newXS(strcpy(buf, "save"), XS__save, file); -// newXS(strcpy(buf, "faction"), XS__faction, file); -// newXS(strcpy(buf, "setsky"), XS__setsky, file); -// newXS(strcpy(buf, "setguild"), XS__setguild, file); -// newXS(strcpy(buf, "createguild"), XS__createguild, file); -// newXS(strcpy(buf, "settime"), XS__settime, file); -// newXS(strcpy(buf, "itemlink"), XS__itemlink, file); -// newXS(strcpy(buf, "signal"), XS__signal, file); -// newXS(strcpy(buf, "signalwith"), XS__signalwith, file); -// newXS(strcpy(buf, "setglobal"), XS__setglobal, file); -// newXS(strcpy(buf, "targlobal"), XS__targlobal, file); -// newXS(strcpy(buf, "delglobal"), XS__delglobal, file); -// newXS(strcpy(buf, "ding"), XS__ding, file); -// newXS(strcpy(buf, "rebind"), XS__rebind, file); -// newXS(strcpy(buf, "start"), XS__start, file); -// newXS(strcpy(buf, "stop"), XS__stop, file); -// newXS(strcpy(buf, "pause"), XS__pause, file); -// newXS(strcpy(buf, "moveto"), XS__moveto, file); -// newXS(strcpy(buf, "resume"), XS__resume, file); -// newXS(strcpy(buf, "addldonpoints"), XS__addldonpoints, file); -// newXS(strcpy(buf, "addldonwin"), XS__addldonpoints, file); -// newXS(strcpy(buf, "addldonloss"), XS__addldonpoints, file); -// newXS(strcpy(buf, "setnexthpevent"), XS__setnexthpevent, file); -// newXS(strcpy(buf, "setnextinchpevent"), XS__setnextinchpevent, file); -// newXS(strcpy(buf, "sethp"), XS__sethp, file); -// newXS(strcpy(buf, "respawn"), XS__respawn, file); -// newXS(strcpy(buf, "getItemName"), XS_qc_getItemName, file); -// newXS(strcpy(buf, "ChooseRandom"), XS__ChooseRandom, file); -// newXS(strcpy(buf, "set_proximity"), XS__set_proximity, file); -// newXS(strcpy(buf, "clear_proximity"), XS__clear_proximity, file); -// newXS(strcpy(buf, "setanim"), XS__setanim, file); -// newXS(strcpy(buf, "showgrid"), XS__showgrid, file); -// newXS(strcpy(buf, "showpath"), XS__showpath, file); -// newXS(strcpy(buf, "pathto"), XS__pathto, file); -// newXS(strcpy(buf, "spawn_condition"), XS__spawn_condition, file); -// newXS(strcpy(buf, "get_spawn_condition"), XS__get_spawn_condition, file); -// newXS(strcpy(buf, "toggle_spawn_event"), XS__toggle_spawn_event, file); -// newXS(strcpy(buf, "has_zone_flag"), XS__has_zone_flag, file); -// newXS(strcpy(buf, "set_zone_flag"), XS__set_zone_flag, file); -// newXS(strcpy(buf, "clear_zone_flag"), XS__clear_zone_flag, file); -// newXS(strcpy(buf, "summonburriedplayercorpse"), XS__summonburriedplayercorpse, file); -// newXS(strcpy(buf, "summonallplayercorpses"), XS__summonallplayercorpses, file); -// newXS(strcpy(buf, "getplayerburriedcorpsecount"), XS__getplayerburriedcorpsecount, file); -// newXS(strcpy(buf, "buryplayercorpse"), XS__buryplayercorpse, file); -// newXS(strcpy(buf, "forcedooropen"), XS__forcedooropen, file); -// newXS(strcpy(buf, "forcedoorclose"), XS__forcedoorclose, file); -// newXS(strcpy(buf, "toggledoorstate"), XS__toggledoorstate, file); -// newXS(strcpy(buf, "isdooropen"), XS__isdooropen, file); -// newXS(strcpy(buf, "depopall"), XS__depopall, file); -// newXS(strcpy(buf, "depopzone"), XS__depopzone, file); -// newXS(strcpy(buf, "repopzone"), XS__repopzone, file); -// newXS(strcpy(buf, "npcrace"), XS__npcrace, file); -// newXS(strcpy(buf, "npcgender"), XS__npcgender, file); -// newXS(strcpy(buf, "npcsize"), XS__npcsize, file); -// newXS(strcpy(buf, "npctexture"), XS__npctexture, file); -// newXS(strcpy(buf, "playerrace"), XS__playerrace, file); -// newXS(strcpy(buf, "playergender"), XS__playergender, file); -// newXS(strcpy(buf, "playersize"), XS__playersize, file); -// newXS(strcpy(buf, "playertexture"), XS__playertexture, file); -// newXS(strcpy(buf, "playerfeature"), XS__playerfeature, file); -// newXS(strcpy(buf, "npcfeature"), XS__npcfeature, file); -// -//#ifdef BOTS -// newXS(strcpy(buf, "botquest"), XS__botquest, file); -// newXS(strcpy(buf, "spawnbotcount"), XS__spawnbotcount, file); -// newXS(strcpy(buf, "createbotcount"), XS__createbotcount, file); -// newXS(strcpy(buf, "createBot"), XS__createBot, file); -//#endif //BOTS -// -// newXS(strcpy(buf, "taskselector"), XS__taskselector, file); -// newXS(strcpy(buf, "tasksetselector"), XS__tasksetselector, file); -// newXS(strcpy(buf, "enabletask"), XS__enabletask, file); -// newXS(strcpy(buf, "disabletask"), XS__disabletask, file); -// newXS(strcpy(buf, "istaskenabled"), XS__istaskenabled, file); -// newXS(strcpy(buf, "istaskactive"), XS__istaskactive, file); -// newXS(strcpy(buf, "istaskactivityactive"), XS__istaskactivityactive, file); -// newXS(strcpy(buf, "gettaskactivitydonecount"), XS__gettaskactivitydonecount, file); -// newXS(strcpy(buf, "updatetaskactivity"), XS__updatetaskactivity, file); -// newXS(strcpy(buf, "resettaskactivity"), XS__resettaskactivity, file); -// newXS(strcpy(buf, "taskexploredarea"), XS__taskexploredarea, file); -// newXS(strcpy(buf, "assigntask"), XS__assigntask, file); -// newXS(strcpy(buf, "failtask"), XS__failtask, file); -// newXS(strcpy(buf, "tasktimeleft"), XS__tasktimeleft, file); -// newXS(strcpy(buf, "istaskcompleted"), XS__istaskcompleted, file); -// newXS(strcpy(buf, "enabledtaskcount"), XS__enabledtaskcount, file); -// newXS(strcpy(buf, "firsttaskinset"), XS__firsttaskinset, file); -// newXS(strcpy(buf, "lasttaskinset"), XS__lasttaskinset, file); -// newXS(strcpy(buf, "nexttaskinset"), XS__nexttaskinset, file); -// newXS(strcpy(buf, "activespeaktask"), XS__activespeaktask, file); -// newXS(strcpy(buf, "activespeakactivity"), XS__activespeakactivity, file); -// newXS(strcpy(buf, "activetasksinset"), XS__activetasksinset, file); -// newXS(strcpy(buf, "completedtasksinset"), XS__completedtasksinset, file); -// newXS(strcpy(buf, "istaskappropriate"), XS__istaskappropriate, file); -// newXS(strcpy(buf, "popup"), XS__popup, file); -// newXS(strcpy(buf, "clearspawntimers"), XS__clearspawntimers, file); -// newXS(strcpy(buf, "ze"), XS__ze, file); -// 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, "createdoor"), XS__CreateDoor, file); -// newXS(strcpy(buf, "modifynpcstat"), XS__ModifyNPCStat, file); -// newXS(strcpy(buf, "collectitems"), XS__collectitems, file); -// newXS(strcpy(buf, "updatespawntimer"), XS__UpdateSpawnTimer, file); -// newXS(strcpy(buf, "MerchantSetItem"), XS__MerchantSetItem, file); -// newXS(strcpy(buf, "MerchantCountItem"), XS__MerchantCountItem, file); -// newXS(strcpy(buf, "varlink"), XS__varlink, file); -// newXS(strcpy(buf, "saylink"), XS__saylink, file); -// newXS(strcpy(buf, "getguildnamebyid"), XS__getguildnamebyid, file); -// newXS(strcpy(buf, "CreateInstance"), XS__CreateInstance, file); -// newXS(strcpy(buf, "DestroyInstance"), XS__DestroyInstance, file); -// newXS(strcpy(buf, "GetInstanceID"), XS__GetInstanceID, file); -// newXS(strcpy(buf, "AssignToInstance"), XS__AssignToInstance, file); -// newXS(strcpy(buf, "AssignGroupToInstance"), XS__AssignGroupToInstance, file); -// newXS(strcpy(buf, "AssignRaidToInstance"), XS__AssignRaidToInstance, file); -// newXS(strcpy(buf, "MovePCInstance"), XS__MovePCInstance, file); -// newXS(strcpy(buf, "FlagInstanceByGroupLeader"), XS__FlagInstanceByGroupLeader, file); -// newXS(strcpy(buf, "FlagInstanceByRaidLeader"), XS__FlagInstanceByRaidLeader, file); -// newXS(strcpy(buf, "SetRunning"), XS__SetRunning, file); -// newXS(strcpy(buf, "IsRunning"), XS__IsRunning, file); -// newXS(strcpy(buf, "IsEffectInSpell"), XS__IsEffectInSpell, file); -// newXS(strcpy(buf, "IsBeneficialSpell"), XS__IsBeneficialSpell, file); -// newXS(strcpy(buf, "GetSpellResistType"), XS__GetSpellResistType, file); -// newXS(strcpy(buf, "GetSpellTargetType"), XS__GetSpellTargetType, file); -// newXS(strcpy(buf, "FlyMode"), XS__FlyMode, file); -// newXS(strcpy(buf, "factionvalue"), XS_FactionValue, file); -// newXS(strcpy(buf, "checktitle"), XS__checktitle, file); -// newXS(strcpy(buf, "enabletitle"), XS__enabletitle, file); -// newXS(strcpy(buf, "removetitle"), XS__removetitle, file); -// newXS(strcpy(buf, "wearchange"), XS__wearchange, file); -// newXS(strcpy(buf, "voicetell"), XS__voicetell, file); -// newXS(strcpy(buf, "LearnRecipe"), XS__LearnRecipe, file); -// newXS(strcpy(buf, "SendMail"), XS__SendMail, file); -// newXS(strcpy(buf, "GetZoneID"), XS__GetZoneID, file); -// newXS(strcpy(buf, "GetZoneLongName"), XS__GetZoneLongName, file); -// newXS(strcpy(buf, "GetTimeSeconds"), XS__GetTimeSeconds, file); -// newXS(strcpy(buf, "handleturnin"), XS__handleturnin, file); -// newXS(strcpy(buf, "completehandin"), XS__completehandin, file); -// newXS(strcpy(buf, "resethandin"), XS__resethandin, file); -// newXS(strcpy(buf, "clearhandin"), XS__clearhandin, file); -// newXS(strcpy(buf, "crosszonesignalclientbycharid"), XS__crosszonesignalclientbycharid, file); -// newXS(strcpy(buf, "crosszonesignalclientbyname"), XS__crosszonesignalclientbyname, file); -// newXS(strcpy(buf, "crosszonemessageplayerbyname"), XS__crosszonemessageplayerbyname, file); -// XSRETURN_YES; -//} -// -//#endif -//#endif +#include "../common/features.h" + +#ifdef EMBPERL +#ifdef EMBPERL_XS + +#include "../common/debug.h" +#include "embparser.h" +#include "questmgr.h" +#include "embxs.h" +#include "entity.h" +#include "../common/MiscFunctions.h" +#include "zone.h" +extern Zone* zone; + +/* + +Some useful perl API info: + +SvUV == string to unsigned value (char->ulong) +SvIV == string to signed value (char->long) +SvNV == string to real value (float,double) +SvPV_nolen == string with no length restriction + +*/ + +#ifdef EMBPERL_XS_CLASSES + +//Any creation of new Client objects gets the current quest Client +XS(XS_Client_new); +XS(XS_Client_new) +{ + dXSARGS; + if (items != 1) + Perl_croak(aTHX_ "Usage: Client::new()"); + { + Client * RETVAL; + + RETVAL = quest_manager.GetInitiator(); + ST(0) = sv_newmortal(); + if(RETVAL) + sv_setref_pv(ST(0), "Client", (void*)RETVAL); + } + XSRETURN(1); +} + +//Any creation of new NPC objects gets the current quest NPC +XS(XS_NPC_new); +XS(XS_NPC_new) +{ + dXSARGS; + if (items != 1) + Perl_croak(aTHX_ "Usage: NPC::new()"); + { + NPC * RETVAL; + + RETVAL = quest_manager.GetNPC(); + ST(0) = sv_newmortal(); + if(RETVAL) + sv_setref_pv(ST(0), "NPC", (void*)RETVAL); + } + XSRETURN(1); +} + +//Any creation of new NPC objects gets the current quest NPC +XS(XS_EntityList_new); +XS(XS_EntityList_new) +{ + dXSARGS; + if (items != 1) + Perl_croak(aTHX_ "Usage: EntityList::new()"); + { + EntityList * RETVAL; + + RETVAL = &entity_list; + ST(0) = sv_newmortal(); + if(RETVAL) + sv_setref_pv(ST(0), "EntityList", (void*)RETVAL); + } + XSRETURN(1); +} + +//Any creation of new quest items gets the current quest item +XS(XS_QuestItem_new); +XS(XS_QuestItem_new) +{ + dXSARGS; + if (items != 1) + Perl_croak(aTHX_ "Usage: QuestItem::new()"); + + ItemInst* RETVAL; + + RETVAL = quest_manager.GetQuestItem(); + ST(0) = sv_newmortal(); + if(RETVAL) + sv_setref_pv(ST(0), "QuestItem", (void*)RETVAL); + + XSRETURN(1); +} + +//Any creation of new quest items gets the current quest item +XS(XS_MobList_new); +XS(XS_MobList_new) +{ + dXSARGS; + if (items != 1) + Perl_croak(aTHX_ "Usage: MobList::new()"); + + ListElement* RETVAL; + + RETVAL = nullptr; + ST(0) = sv_newmortal(); + if(RETVAL) + sv_setref_pv(ST(0), "MobList", (void*)RETVAL); + + XSRETURN(1); +} + +#endif //EMBPERL_XS_CLASSES + + +XS(XS__echo); // prototype to pass -Wmissing-prototypes +XS(XS__echo) { + dXSARGS; + + if (items != 2) + Perl_croak(aTHX_ "Usage: echo(id#, str)"); + + quest_manager.echo(SvUV(ST(0)), SvPV_nolen(ST(1))); + + XSRETURN_EMPTY; +} + +XS(XS__say); // prototype to pass -Wmissing-prototypes +XS(XS__say) { + dXSARGS; + + if (items == 1) + quest_manager.say(SvPV_nolen(ST(0))); + else if (items == 2) + quest_manager.say(SvPV_nolen(ST(0)), (int)SvIV(ST(1))); + else + Perl_croak(aTHX_ "Usage: say(str [, language])"); + + XSRETURN_EMPTY; +} + +XS(XS__me); // prototype to pass -Wmissing-prototypes +XS(XS__me) { + dXSARGS; + + if (items != 1) + Perl_croak(aTHX_ "Usage: %s(str)", "me"); + + quest_manager.me(SvPV_nolen(ST(0))); + + XSRETURN_EMPTY; +} + +XS(XS__summonitem); // prototype to pass -Wmissing-prototypes +XS(XS__summonitem) +{ + dXSARGS; + if (items == 1) + quest_manager.summonitem(SvUV(ST(0))); + else if(items == 2) + quest_manager.summonitem(SvUV(ST(0)), SvUV(ST(1))); + else + Perl_croak(aTHX_ "Usage: summonitem(itemid, [charges])"); + XSRETURN_EMPTY; +} + +XS(XS__write); +XS(XS__write) +{ + dXSARGS; + if (items != 2) + Perl_croak(aTHX_ "Usage: write(file, str)"); + + char * file = (char *)SvPV_nolen(ST(0)); + char * str = (char *)SvPV_nolen(ST(1)); + + quest_manager.write(file, str); + + XSRETURN_EMPTY; +} + +XS(XS__spawn); +XS(XS__spawn) +{ + dXSARGS; + if (items != 6) + Perl_croak(aTHX_ "Usage: spawn(npc_type, grid, unused, x, y, z)"); + + uint16 RETVAL; + dXSTARG; + + int npc_type = (int)SvIV(ST(0)); + int grid = (int)SvIV(ST(1)); + int unused = (int)SvIV(ST(2)); + float x = (float)SvNV(ST(3)); + float y = (float)SvNV(ST(4)); + float z = (float)SvNV(ST(5)); + + RETVAL = quest_manager.spawn2(npc_type, grid, unused, x, y, z, 0); + XSprePUSH; PUSHu((UV)RETVAL); + + XSRETURN(1); +} + +XS(XS__spawn2); +XS(XS__spawn2) +{ + dXSARGS; + if (items != 7) + Perl_croak(aTHX_ "Usage: spawn2(npc_type, grid, unused, x, y, z, heading)"); + + uint16 RETVAL; + dXSTARG; + + int npc_type = (int)SvIV(ST(0)); + int grid = (int)SvIV(ST(1)); + int unused = (int)SvIV(ST(2)); + float x = (float)SvNV(ST(3)); + float y = (float)SvNV(ST(4)); + float z = (float)SvNV(ST(5)); + float heading = (float)SvNV(ST(6)); + + RETVAL = quest_manager.spawn2(npc_type, grid, unused, x, y, z, heading); + XSprePUSH; PUSHu((UV)RETVAL); + + XSRETURN(1); +} + +XS(XS__unique_spawn); +XS(XS__unique_spawn) +{ + dXSARGS; + if (items != 6 && items != 7) + Perl_croak(aTHX_ "Usage: unique_spawn(npc_type, grid, unused, x, y, z, [heading])"); + + uint16 RETVAL; + dXSTARG; + + int npc_type = (int)SvIV(ST(0)); + int grid = (int)SvIV(ST(1)); + int unused = (int)SvIV(ST(2)); + float x = (float)SvNV(ST(3)); + float y = (float)SvNV(ST(4)); + float z = (float)SvNV(ST(5)); + float heading = 0; + if(items == 7) + heading = (float)SvNV(ST(6)); + + RETVAL = quest_manager.unique_spawn(npc_type, grid, unused, x, y, z, heading); + XSprePUSH; PUSHu((UV)RETVAL); + + XSRETURN(1); +} + +XS(XS__spawn_from_spawn2); +XS(XS__spawn_from_spawn2) +{ + dXSARGS; + if (items != 1) + Perl_croak(aTHX_ "Usage: spawn_from_spawn2(spawn2_id)"); + + uint16 RETVAL; + dXSTARG; + + int spawn2_id = (int)SvIV(ST(0)); + + RETVAL = quest_manager.spawn_from_spawn2(spawn2_id); + XSprePUSH; PUSHu((UV)RETVAL); + + XSRETURN(1); +} + +XS(XS__enable_spawn2); +XS(XS__enable_spawn2) +{ + dXSARGS; + if (items != 1) + Perl_croak(aTHX_ "Usage: enable_spawn2(spawn2_id)"); + + int spawn2_id = (int)SvIV(ST(0)); + + quest_manager.enable_spawn2(spawn2_id); + XSRETURN_EMPTY; +} + +XS(XS__disable_spawn2); +XS(XS__disable_spawn2) +{ + dXSARGS; + if (items != 1) + Perl_croak(aTHX_ "Usage: disable_spawn2(spawn2_id)"); + + int spawn2_id = (int)SvIV(ST(0)); + + quest_manager.disable_spawn2(spawn2_id); + XSRETURN_EMPTY; +} + +XS(XS__setstat); +XS(XS__setstat) +{ + dXSARGS; + if (items != 2) + Perl_croak(aTHX_ "Usage: setstat(stat, value)"); + + int stat = (int)SvIV(ST(0)); + int value = (int)SvIV(ST(1)); + + quest_manager.setstat(stat, value); + + XSRETURN_EMPTY; +} + +XS(XS__incstat); //old setstat command aza +XS(XS__incstat) +{ + dXSARGS; + if (items != 2) + Perl_croak(aTHX_ "Usage: incstat(stat, value)"); + + int stat = (int)SvIV(ST(0)); + int value = (int)SvIV(ST(1)); + + quest_manager.incstat(stat, value); + + XSRETURN_EMPTY; +} + +XS(XS__castspell); +XS(XS__castspell) +{ + dXSARGS; + if (items != 2) + Perl_croak(aTHX_ "Usage: castspell(spell_id, target_id)"); + + int spell_id = (int)SvIV(ST(0)); + int target_id = (int)SvIV(ST(1)); + + quest_manager.castspell(spell_id, target_id); + + XSRETURN_EMPTY; +} + +XS(XS__selfcast); +XS(XS__selfcast) +{ + dXSARGS; + if (items != 1) + Perl_croak(aTHX_ "Usage: selfcast(spell_id)"); + + int spell_id = (int)SvIV(ST(0)); + + quest_manager.selfcast(spell_id); + + XSRETURN_EMPTY; +} + +XS(XS__addloot); +XS(XS__addloot) +{ + dXSARGS; + if(items < 1 || items > 3) + Perl_croak(aTHX_ "Usage: addloot(item_id, charges = 0, equipitem = true)"); + + uint32 itemid = (uint32)SvUV(ST(0)); + uint16 charges = 0; + bool equipitem = true; + + if (items > 1) + charges = (uint16)SvUV(ST(1)); + if (items > 2) + equipitem = (bool)SvTRUE(ST(2)); + + quest_manager.addloot(itemid, charges, equipitem); + + XSRETURN_EMPTY; +} + +XS(XS__zone); +XS(XS__zone) +{ + dXSARGS; + if (items != 1) + Perl_croak(aTHX_ "Usage: zone(zone_name)"); + + char * zone_name = (char *)SvPV_nolen(ST(0)); + + quest_manager.Zone(zone_name); + + XSRETURN_EMPTY; +} + +XS(XS__settimer); +XS(XS__settimer) +{ + dXSARGS; + if (items != 2) + Perl_croak(aTHX_ "Usage: settimer(timer_name, seconds)"); + + char * timer_name = (char *)SvPV_nolen(ST(0)); + int seconds = (int)SvIV(ST(1)); + + quest_manager.settimer(timer_name, seconds); + + XSRETURN_EMPTY; +} + +XS(XS__settimerMS); +XS(XS__settimerMS) +{ + dXSARGS; + if (items != 2) + Perl_croak(aTHX_ "Usage: settimerMS(timer_name, milliseconds)"); + + char * timer_name = (char *)SvPV_nolen(ST(0)); + int milliseconds = (int)SvIV(ST(1)); + + quest_manager.settimerMS(timer_name, milliseconds); + + XSRETURN_EMPTY; +} + +XS(XS__stoptimer); +XS(XS__stoptimer) +{ + dXSARGS; + if (items != 1) + Perl_croak(aTHX_ "Usage: stoptimer(timer_name)"); + + char * timer_name = (char *)SvPV_nolen(ST(0)); + + quest_manager.stoptimer(timer_name); + + XSRETURN_EMPTY; +} + +XS(XS__stopalltimers); +XS(XS__stopalltimers) +{ + dXSARGS; + if (items != 0) + Perl_croak(aTHX_ "Usage: stopalltimers()"); + + quest_manager.stopalltimers(); + + XSRETURN_EMPTY; +} + +XS(XS__emote); +XS(XS__emote) +{ + dXSARGS; + if (items != 1) + Perl_croak(aTHX_ "Usage: emote(str)"); + + char * str = (char *)SvPV_nolen(ST(0)); + + quest_manager.emote(str); + + XSRETURN_EMPTY; +} + +XS(XS__shout); +XS(XS__shout) +{ + dXSARGS; + if (items != 1) + Perl_croak(aTHX_ "Usage: shout(str)"); + + char * str = (char *)SvPV_nolen(ST(0)); + + quest_manager.shout(str); + + XSRETURN_EMPTY; +} + +XS(XS__shout2); +XS(XS__shout2) +{ + dXSARGS; + if (items != 1) + Perl_croak(aTHX_ "Usage: shout2(str)"); + + char * str = (char *)SvPV_nolen(ST(0)); + + quest_manager.shout2(str); + + XSRETURN_EMPTY; +} + +XS(XS__gmsay); +XS(XS__gmsay) +{ + dXSARGS; + if ((items < 1) || (items > 5)) + Perl_croak(aTHX_ "Usage: gmsay(str, color, send_to_world?)"); + + char * str = (char *)SvPV_nolen(ST(0)); + int color = 7; + bool send_to_world = 0; + uint32 to_guilddbid = 0; + uint16 to_minstatus = 80; + + if (items > 1) { + color = (int)SvIV(ST(1)); + } + + if (items > 2) { + send_to_world = ((int)SvIV(ST(2))) == 0?false:true; + } + + if (items > 3) + to_guilddbid = (int)SvUV(ST(3)); + + if (items > 4) + to_minstatus = (int)SvUV(ST(4)); + + quest_manager.gmsay(str, color, send_to_world, to_guilddbid, to_minstatus); + + XSRETURN_EMPTY; +} + +XS(XS__depop); +XS(XS__depop) +{ + dXSARGS; + if (items < 0 || items > 1) + Perl_croak(aTHX_ "Usage: depop(npc_type= 0)"); + + int npc_type; + + if (items < 1) + npc_type = 0; + else + npc_type = (int)SvIV(ST(0)); + + + quest_manager.depop(npc_type); + + XSRETURN_EMPTY; +} + +XS(XS__depop_withtimer); +XS(XS__depop_withtimer) +{ + dXSARGS; + if (items < 0 || items > 1) + Perl_croak(aTHX_ "Usage: depop_withtimer(npc_type= 0)"); + + int npc_type; + + if (items < 1) + npc_type = 0; + else + npc_type = (int)SvIV(ST(0)); + + + quest_manager.depop_withtimer(npc_type); + + XSRETURN_EMPTY; +} + +XS(XS__depopall); +XS(XS__depopall) +{ + dXSARGS; + if (items < 0 || items > 1) + Perl_croak(aTHX_ "Usage: depopall(npc_type= 0)"); + + int npc_type; + + if (items < 1) + npc_type = 0; + else + npc_type = (int)SvIV(ST(0)); + + + quest_manager.depopall(npc_type); + + XSRETURN_EMPTY; +} + +XS(XS__settarget); +XS(XS__settarget) +{ + dXSARGS; + if (items != 2) + Perl_croak(aTHX_ "Usage: settarget(type, target_id)"); + + char * type = (char *)SvPV_nolen(ST(0)); + int target_id = (int)SvIV(ST(1)); + + quest_manager.settarget(type, target_id); + + XSRETURN_EMPTY; +} + +XS(XS__follow); +XS(XS__follow) +{ + dXSARGS; + if (items != 1 && items != 2) + Perl_croak(aTHX_ "Usage: follow(entity_id, [distance])"); + + int entity_id = (int)SvIV(ST(0)); + int distance; + + if (items == 2) + distance = (int)SvIV(ST(1)); + else + distance = 10; + + quest_manager.follow(entity_id, distance); + + XSRETURN_EMPTY; +} + +XS(XS__sfollow); +XS(XS__sfollow) +{ + dXSARGS; + if (items != 0) + Perl_croak(aTHX_ "Usage: sfollow()"); + + + quest_manager.sfollow(); + + XSRETURN_EMPTY; +} + +XS(XS__changedeity); +XS(XS__changedeity) +{ + dXSARGS; + if (items != 1) + Perl_croak(aTHX_ "Usage: changedeity(diety_id)"); + + int diety_id = (int)SvIV(ST(0)); + + quest_manager.changedeity(diety_id); + + XSRETURN_EMPTY; +} + +XS(XS__exp); +XS(XS__exp) +{ + dXSARGS; + if (items != 1) + Perl_croak(aTHX_ "Usage: exp(amt)"); + + int amt = (int)SvIV(ST(0)); + + quest_manager.exp(amt); + + XSRETURN_EMPTY; +} + +XS(XS__level); +XS(XS__level) +{ + dXSARGS; + if (items != 1) + Perl_croak(aTHX_ "Usage: level(newlevel)"); + + int newlevel = (int)SvIV(ST(0)); + + quest_manager.level(newlevel); + + XSRETURN_EMPTY; +} + +XS(XS__traindisc); +XS(XS__traindisc) +{ + dXSARGS; + if (items != 1) + Perl_croak(aTHX_ "Usage: traindisc(discipline_tome_item_id)"); + + int discipline_tome_item_id = (int)SvIV(ST(0)); + + quest_manager.traindisc(discipline_tome_item_id); + + XSRETURN_EMPTY; +} + +XS(XS__isdisctome); +XS(XS__isdisctome) +{ + dXSARGS; + if (items != 1) + Perl_croak(aTHX_ "Usage: isdisctome(item_id)"); + + bool RETVAL; + int item_id = (int)SvIV(ST(0)); + + RETVAL = quest_manager.isdisctome(item_id); + + ST(0) = boolSV(RETVAL); + sv_2mortal(ST(0)); + XSRETURN(1); +} + +XS(XS__safemove); +XS(XS__safemove) +{ + dXSARGS; + if (items != 0) + Perl_croak(aTHX_ "Usage: safemove()"); + + + quest_manager.safemove(); + + XSRETURN_EMPTY; +} + +XS(XS__rain); +XS(XS__rain) +{ + dXSARGS; + if (items != 1) + Perl_croak(aTHX_ "Usage: rain(weather)"); + + int weather = (int)SvIV(ST(0)); + + quest_manager.rain(weather); + + XSRETURN_EMPTY; +} + +XS(XS__snow); +XS(XS__snow) +{ + dXSARGS; + if (items != 1) + Perl_croak(aTHX_ "Usage: snow(weather)"); + + int weather = (int)SvIV(ST(0)); + + quest_manager.snow(weather); + + XSRETURN_EMPTY; +} + +XS(XS__surname); +XS(XS__surname) +{ + dXSARGS; + if (items != 1) + Perl_croak(aTHX_ "Usage: surname(name)"); + + char * name = (char *)SvPV_nolen(ST(0)); + + quest_manager.surname(name); + + XSRETURN_EMPTY; +} + +XS(XS__permaclass); +XS(XS__permaclass) +{ + dXSARGS; + if (items != 1) + Perl_croak(aTHX_ "Usage: permaclass(class_id)"); + + int class_id = (int)SvIV(ST(0)); + + quest_manager.permaclass(class_id); + + XSRETURN_EMPTY; +} + +XS(XS__permarace); +XS(XS__permarace) +{ + dXSARGS; + if (items != 1) + Perl_croak(aTHX_ "Usage: permarace(race_id)"); + + int race_id = (int)SvIV(ST(0)); + + quest_manager.permarace(race_id); + + XSRETURN_EMPTY; +} + +XS(XS__permagender); +XS(XS__permagender) +{ + dXSARGS; + if (items != 1) + Perl_croak(aTHX_ "Usage: permagender(gender_id)"); + + int gender_id = (int)SvIV(ST(0)); + + quest_manager.permagender(gender_id); + + XSRETURN_EMPTY; +} + +XS(XS__scribespells); +XS(XS__scribespells) +{ + dXSARGS; + if (items < 1) + Perl_croak(aTHX_ "Usage: scribespells(max_level, min_level = 1)"); + + uint16 RETVAL; + dXSTARG; + + uint8 max_level = (uint8)SvIV(ST(0)); + uint8 min_level = (uint8)SvIV(ST(1)); + + if (min_level) + RETVAL = quest_manager.scribespells(max_level, min_level); + else + RETVAL = quest_manager.scribespells(max_level); + + XSprePUSH; PUSHu((IV)RETVAL); + XSRETURN(1); +} + +XS(XS__traindiscs); +XS(XS__traindiscs) +{ + dXSARGS; + if (items < 1) + Perl_croak(aTHX_ "Usage: traindiscs(max_level, min_level = 1)"); + + uint16 RETVAL; + dXSTARG; + + uint8 max_level = (uint8)SvIV(ST(0)); + uint8 min_level = (uint8)SvIV(ST(1)); + + if (min_level) + RETVAL = quest_manager.traindiscs(max_level, min_level); + else + RETVAL = quest_manager.traindiscs(max_level); + + XSprePUSH; PUSHu((IV)RETVAL); + XSRETURN(1); +} + +XS(XS__unscribespells); +XS(XS__unscribespells) +{ + dXSARGS; + if (items != 0) + Perl_croak(aTHX_ "Usage: unscribespells()"); + + + quest_manager.unscribespells(); + + XSRETURN_EMPTY; +} + +XS(XS__untraindiscs); +XS(XS__untraindiscs) +{ + dXSARGS; + if (items != 0) + Perl_croak(aTHX_ "Usage: untraindiscs()"); + + + quest_manager.untraindiscs(); + + XSRETURN_EMPTY; +} + +XS(XS__givecash); +XS(XS__givecash) +{ + dXSARGS; + if (items != 4) + Perl_croak(aTHX_ "Usage: givecash(copper, silver, gold, platinum)"); + + int copper = (int)SvIV(ST(0)); + int silver = (int)SvIV(ST(1)); + int gold = (int)SvIV(ST(2)); + int platinum = (int)SvIV(ST(3)); + + quest_manager.givecash(copper, silver, gold, platinum); + + XSRETURN_EMPTY; +} + +XS(XS__pvp); +XS(XS__pvp) +{ + dXSARGS; + if (items != 1) + Perl_croak(aTHX_ "Usage: pvp(mode)"); + + char * mode = (char *)SvPV_nolen(ST(0)); + + quest_manager.pvp(mode); + + XSRETURN_EMPTY; +} + +XS(XS__movepc); +XS(XS__movepc) +{ + dXSARGS; + if (items != 4 && items != 5) + Perl_croak(aTHX_ "Usage: movepc(zone_id, x, y, z [,heading])"); + + int zoneid = (int)SvIV(ST(0)); + float x = (float)SvNV(ST(1)); + float y = (float)SvNV(ST(2)); + float z = (float)SvNV(ST(3)); + + if (items == 4) + + quest_manager.movepc(zoneid, x, y, z, 0.0f); + + else { + float heading = (float)SvNV(ST(4)); + quest_manager.movepc(zoneid, x, y, z, heading); + } + + XSRETURN_EMPTY; +} + +XS(XS__gmmove); +XS(XS__gmmove) +{ + dXSARGS; + if (items != 3) + Perl_croak(aTHX_ "Usage: gmmove(x, y, z)"); + + float x = (float)SvNV(ST(0)); + float y = (float)SvNV(ST(1)); + float z = (float)SvNV(ST(2)); + + quest_manager.gmmove(x, y, z); + + XSRETURN_EMPTY; +} + +XS(XS__movegrp); +XS(XS__movegrp) +{ + dXSARGS; + if (items != 4) + Perl_croak(aTHX_ "Usage: movegrp(zoneid, x, y, z)"); + + int zoneid = (int)SvIV(ST(0)); + float x = (float)SvNV(ST(1)); + float y = (float)SvNV(ST(2)); + float z = (float)SvNV(ST(3)); + + quest_manager.movegrp(zoneid, x, y, z); + + XSRETURN_EMPTY; +} + +XS(XS__doanim); +XS(XS__doanim) +{ + dXSARGS; + if (items != 1) + Perl_croak(aTHX_ "Usage: doanim(anim_id)"); + + int anim_id = (int)SvIV(ST(0)); + + quest_manager.doanim(anim_id); + + XSRETURN_EMPTY; +} + +XS(XS__addskill); +XS(XS__addskill) +{ + dXSARGS; + if (items != 2) + Perl_croak(aTHX_ "Usage: addskill(skill_id, value)"); + + int skill_id = (int)SvIV(ST(0)); + int value = (int)SvIV(ST(1)); + + quest_manager.addskill(skill_id, value); + + XSRETURN_EMPTY; +} + +XS(XS__setlanguage); +XS(XS__setlanguage) +{ + dXSARGS; + if (items != 2) + Perl_croak(aTHX_ "Usage: setlanguage(skill_id, value)"); + + int skill_id = (int)SvIV(ST(0)); + int value = (int)SvIV(ST(1)); + + quest_manager.setlanguage(skill_id, value); + + XSRETURN_EMPTY; +} + +XS(XS__setskill); +XS(XS__setskill) +{ + dXSARGS; + if (items != 2) + Perl_croak(aTHX_ "Usage: setskill(skill_id, value)"); + + int skill_id = (int)SvIV(ST(0)); + int value = (int)SvIV(ST(1)); + + quest_manager.setskill(skill_id, value); + + XSRETURN_EMPTY; +} + +XS(XS__setallskill); +XS(XS__setallskill) +{ + dXSARGS; + if (items != 1) + Perl_croak(aTHX_ "Usage: setallskill(value)"); + + int value = (int)SvIV(ST(0)); + + quest_manager.setallskill(value); + + XSRETURN_EMPTY; +} + +XS(XS__attack); +XS(XS__attack) +{ + dXSARGS; + if (items != 1) + Perl_croak(aTHX_ "Usage: attack(client_name)"); + + char * client_name = (char *)SvPV_nolen(ST(0)); + + quest_manager.attack(client_name); + + XSRETURN_EMPTY; +} + +XS(XS__attacknpc); +XS(XS__attacknpc) +{ + dXSARGS; + if (items != 1) + Perl_croak(aTHX_ "Usage: attacknpc(npc_entity_id)"); + + int npc_entity_id = (int)SvIV(ST(0)); + + quest_manager.attacknpc(npc_entity_id); + + XSRETURN_EMPTY; +} + +XS(XS__attacknpctype); +XS(XS__attacknpctype) +{ + dXSARGS; + if (items != 1) + Perl_croak(aTHX_ "Usage: attacknpctype(npc_type_id)"); + + int npc_type_id = (int)SvIV(ST(0)); + + quest_manager.attacknpctype(npc_type_id); + + XSRETURN_EMPTY; +} + +XS(XS__save); +XS(XS__save) +{ + dXSARGS; + if (items != 0) + Perl_croak(aTHX_ "Usage: save()"); + + + quest_manager.save(); + + XSRETURN_EMPTY; +} + +XS(XS__faction); +XS(XS__faction) +{ + dXSARGS; + if (items < 2 || items > 3) + Perl_croak(aTHX_ "Usage: faction(faction_id, faction_value, temp)"); + + int faction_id = (int)SvIV(ST(0)); + int faction_value = (int)SvIV(ST(1)); + int temp; + + if(items == 2) + temp = 0; + else + temp = (int)SvIV(ST(2)); + + quest_manager.faction(faction_id, faction_value, temp); + + XSRETURN_EMPTY; +} + +XS(XS__setsky); +XS(XS__setsky) +{ + dXSARGS; + if (items != 1) + Perl_croak(aTHX_ "Usage: setsky(new_sky)"); + + unsigned char new_sky = (unsigned char)SvUV(ST(0)); + + quest_manager.setsky(new_sky); + + XSRETURN_EMPTY; +} + +XS(XS__setguild); +XS(XS__setguild) +{ + dXSARGS; + if (items != 2) + Perl_croak(aTHX_ "Usage: setguild(new_guild_id, new_rank)"); + + unsigned long new_guild_id = (unsigned long)SvUV(ST(0)); + int new_rank = (int)SvIV(ST(1)); + + quest_manager.setguild(new_guild_id, new_rank); + + XSRETURN_EMPTY; +} + +XS(XS__createguild); +XS(XS__createguild) +{ + dXSARGS; + if (items != 2) + Perl_croak(aTHX_ "Usage: createguild(guild_name, leader)"); + + char * guild_name = (char *)SvPV_nolen(ST(0)); + char * leader = (char *)SvPV_nolen(ST(1)); + + quest_manager.CreateGuild(guild_name, leader); + + XSRETURN_EMPTY; +} + +XS(XS__settime); +XS(XS__settime) +{ + dXSARGS; + if (items != 2) + Perl_croak(aTHX_ "Usage: settime(new_hour, new_min)"); + + int new_hour = (int)SvIV(ST(0)); + int new_min = (int)SvIV(ST(1)); + + quest_manager.settime(new_hour, new_min); + + XSRETURN_EMPTY; +} + +XS(XS__itemlink); +XS(XS__itemlink) +{ + dXSARGS; + if (items != 1) + Perl_croak(aTHX_ "Usage: itemlink(item_id)"); + + int item_id = (int)SvIV(ST(0)); + + quest_manager.itemlink(item_id); + + XSRETURN_EMPTY; +} + +XS(XS__signalwith); +XS(XS__signalwith) +{ + dXSARGS; + + if (items == 2) { + int npc_id = (int)SvIV(ST(0)); + int signal_id = (int)SvIV(ST(1)); + quest_manager.signalwith(npc_id, signal_id); + } else if(items == 3) { + int npc_id = (int)SvIV(ST(0)); + int signal_id = (int)SvIV(ST(1)); + int wait = (int)SvIV(ST(2)); + quest_manager.signalwith(npc_id, signal_id, wait); + } else { + Perl_croak(aTHX_ "Usage: signalwith(npc_id,signal_id[,wait_ms])"); + } + + XSRETURN_EMPTY; +} + +XS(XS__signal); +XS(XS__signal) +{ + dXSARGS; + + if (items == 1) { + int npc_id = (int)SvIV(ST(0)); + quest_manager.signal(npc_id); + } else if(items == 2) { + int npc_id = (int)SvIV(ST(0)); + int wait = (int)SvIV(ST(1)); + quest_manager.signal(npc_id, wait); + } else { + Perl_croak(aTHX_ "Usage: signal(npc_id[,wait_ms])"); + } + + XSRETURN_EMPTY; +} + +XS(XS__setglobal); +XS(XS__setglobal) +{ + dXSARGS; + if (items != 4) + Perl_croak(aTHX_ "Usage: setglobal(varname, newvalue, options, duration)"); + + char * varname = (char *)SvPV_nolen(ST(0)); + char * newvalue = (char *)SvPV_nolen(ST(1)); + int options = (int)SvIV(ST(2)); + char * duration = (char *)SvPV_nolen(ST(3)); + + quest_manager.setglobal(varname, newvalue, options, duration); + + XSRETURN_EMPTY; +} + +XS(XS__targlobal); +XS(XS__targlobal) +{ + dXSARGS; + if (items != 6) + Perl_croak(aTHX_ "Usage: targlobal(varname, value, duration, npcid, charid, zoneid)"); + + char * varname = (char *)SvPV_nolen(ST(0)); + char * value = (char *)SvPV_nolen(ST(1)); + char * duration = (char *)SvPV_nolen(ST(2)); + int npcid = (int)SvIV(ST(3)); + int charid = (int)SvIV(ST(4)); + int zoneid = (int)SvIV(ST(5)); + + quest_manager.targlobal(varname, value, duration, npcid, charid, zoneid); + + XSRETURN_EMPTY; +} + +XS(XS__delglobal); +XS(XS__delglobal) +{ + dXSARGS; + if (items != 1) + Perl_croak(aTHX_ "Usage: delglobal(varname)"); + + char * varname = (char *)SvPV_nolen(ST(0)); + + quest_manager.delglobal(varname); + + XSRETURN_EMPTY; +} + +XS(XS__ding); +XS(XS__ding) +{ + dXSARGS; + if (items != 0) + Perl_croak(aTHX_ "Usage: ding()"); + + + quest_manager.ding(); + + XSRETURN_EMPTY; +} + +XS(XS__rebind); +XS(XS__rebind) +{ + dXSARGS; + if (items != 4) + Perl_croak(aTHX_ "Usage: rebind(zoneid, x, y, z)"); + + int zoneid = (int)SvIV(ST(0)); + float x = (float)SvNV(ST(1)); + float y = (float)SvNV(ST(2)); + float z = (float)SvNV(ST(3)); + + quest_manager.rebind(zoneid, x, y, z); + + XSRETURN_EMPTY; +} + +XS(XS__start); +XS(XS__start) +{ + dXSARGS; + if (items != 1) + Perl_croak(aTHX_ "Usage: start(wp)"); + + int wp = (int)SvIV(ST(0)); + + quest_manager.start(wp); + + XSRETURN_EMPTY; +} + +XS(XS__stop); +XS(XS__stop) +{ + dXSARGS; + if (items != 0) + Perl_croak(aTHX_ "Usage: stop()"); + + + quest_manager.stop(); + + XSRETURN_EMPTY; +} + +XS(XS__pause); +XS(XS__pause) +{ + dXSARGS; + if (items != 1) + Perl_croak(aTHX_ "Usage: pause(duration)"); + + int duration = (int)SvIV(ST(0)); + + quest_manager.pause(duration); + + XSRETURN_EMPTY; +} + +XS(XS__moveto); +XS(XS__moveto) +{ + dXSARGS; + if (items != 3 && items != 4 && items != 5) + Perl_croak(aTHX_ "Usage: moveto(x, y, z, [mth, saveguard?])"); + + float x = (float)SvNV(ST(0)); + float y = (float)SvNV(ST(1)); + float z = (float)SvNV(ST(2)); + float h; + bool saveguard; + + if(items > 3) + h = (float)SvNV(ST(3)); + else + h = 0; + + if(items > 4) + saveguard = (bool)SvTRUE(ST(4)); + else + saveguard = false; + + quest_manager.moveto(x, y, z, h, saveguard); + + XSRETURN_EMPTY; +} + +XS(XS__resume); +XS(XS__resume) +{ + dXSARGS; + if (items != 0) + Perl_croak(aTHX_ "Usage: resume()"); + + + quest_manager.resume(); + + XSRETURN_EMPTY; +} + +XS(XS__addldonpoints); +XS(XS__addldonpoints) +{ + dXSARGS; + if (items != 2) + Perl_croak(aTHX_ "Usage: addldonpoints(points, theme)"); + + long points = (long)SvIV(ST(0)); + unsigned long theme = (unsigned long)SvUV(ST(1)); + + quest_manager.addldonpoints(points, theme); + + XSRETURN_EMPTY; +} + +XS(XS__addldonwin); +XS(XS__addldonwin) +{ + dXSARGS; + if (items != 2) + Perl_croak(aTHX_ "Usage: addldonwin(wins, theme)"); + + long wins = (long)SvIV(ST(0)); + unsigned long theme = (unsigned long)SvUV(ST(1)); + + quest_manager.addldonwin(wins, theme); + + XSRETURN_EMPTY; +} + +XS(XS__addldonloss); +XS(XS__addldonloss) +{ + dXSARGS; + if (items != 2) + Perl_croak(aTHX_ "Usage: addldonloss(losses, theme)"); + + long losses = (long)SvIV(ST(0)); + unsigned long theme = (unsigned long)SvUV(ST(1)); + + quest_manager.addldonloss(losses, theme); + + XSRETURN_EMPTY; +} + +XS(XS__setnexthpevent); +XS(XS__setnexthpevent) +{ + dXSARGS; + if (items != 1) + Perl_croak(aTHX_ "Usage: setnexthpevent(at)"); + + int at = (int)SvIV(ST(0)); + + quest_manager.setnexthpevent(at); + + XSRETURN_EMPTY; +} + +XS(XS__setnextinchpevent); +XS(XS__setnextinchpevent) +{ + dXSARGS; + if (items != 1) + Perl_croak(aTHX_ "Usage: setnextinchpevent(at)"); + + int at = (int)SvIV(ST(0)); + + quest_manager.setnextinchpevent(at); + + XSRETURN_EMPTY; +} + +XS(XS__sethp); +XS(XS__sethp) +{ + dXSARGS; + if (items != 1) + Perl_croak(aTHX_ "Usage: sethp(percentage)"); + + int hpperc = (int)SvIV(ST(0)); + + quest_manager.sethp(hpperc); + + XSRETURN_EMPTY; +} + +XS(XS__respawn); +XS(XS__respawn) +{ + dXSARGS; + if (items != 2) + Perl_croak(aTHX_ "Usage: respawn(npc_type, grid)"); + + int npc_type = (int)SvIV(ST(0)); + int grid = (int)SvIV(ST(1)); + + quest_manager.respawn(npc_type, grid); + + XSRETURN_EMPTY; +} + +XS(XS__ChooseRandom); +XS(XS__ChooseRandom) +{ + dXSARGS; + if (items < 1) + Perl_croak(aTHX_ "Usage: ChooseRandom(... list ...)"); + + int index = MakeRandomInt(0, items-1); + + SV *tmp = ST(0); + ST(0) = ST(index); + ST(index) = tmp; + + XSRETURN(1); //return 1 element from the stack (ST(0)) +} + +XS(XS__set_proximity); +XS(XS__set_proximity) +{ + dXSARGS; + if (items != 4 && items != 6) + Perl_croak(aTHX_ "Usage: set_proximity(minx, maxx, miny, maxy [, minz, maxz])"); + + float minx = (float)SvNV(ST(0)); + float maxx = (float)SvNV(ST(1)); + float miny = (float)SvNV(ST(2)); + float maxy = (float)SvNV(ST(3)); + + if(items == 4) + quest_manager.set_proximity(minx, maxx, miny, maxy); + else { + float minz = (float)SvNV(ST(4)); + float maxz = (float)SvNV(ST(5)); + quest_manager.set_proximity(minx, maxx, miny, maxy, minz, maxz); + } + + XSRETURN_EMPTY; +} + +XS(XS__clear_proximity); +XS(XS__clear_proximity) +{ + dXSARGS; + if (items != 0) + Perl_croak(aTHX_ "Usage: clear_proximity()"); + + quest_manager.clear_proximity(); + + XSRETURN_EMPTY; +} + +XS(XS__setanim); +XS(XS__setanim) //Cisyouc: mob->setappearance() addition +{ + dXSARGS; + if(items != 2) + Perl_croak(aTHX_ "Usage: quest::setanim(npc_type, animnum);"); + + quest_manager.setanim(SvUV(ST(0)), SvUV(ST(1))); + + XSRETURN_EMPTY; +} + +XS(XS__showgrid); +XS(XS__showgrid) +{ + dXSARGS; + if(items != 1) + Perl_croak(aTHX_ "Usage: quest::showgrid(grid_id);"); + + quest_manager.showgrid(SvUV(ST(0))); + + XSRETURN_EMPTY; +} + +XS(XS__showpath); +XS(XS__showpath) +{ + dXSARGS; + if (items != 3) + Perl_croak(aTHX_ "Usage: showpath(x, y, z)"); + + float x = (float)SvNV(ST(0)); + float y = (float)SvNV(ST(1)); + float z = (float)SvNV(ST(2)); + + quest_manager.showpath(x, y, z); + + XSRETURN_EMPTY; +} + +XS(XS__pathto); +XS(XS__pathto) +{ + dXSARGS; + if (items != 3) + Perl_croak(aTHX_ "Usage: pathto(x, y, z)"); + + float x = (float)SvNV(ST(0)); + float y = (float)SvNV(ST(1)); + float z = (float)SvNV(ST(2)); + + quest_manager.pathto(x, y, z); + + XSRETURN_EMPTY; +} + +XS(XS__spawn_condition); +XS(XS__spawn_condition) +{ + dXSARGS; + if (items < 3 || items > 4) + Perl_croak(aTHX_ "Usage: spawn_condition(zone_short, [instance_id], condition_id, value)"); + + if(items == 3) + { + char * zone_short = (char *)SvPV_nolen(ST(0)); + uint16 cond_id = (int)SvUV(ST(1)); + int16 value = (int)SvIV(ST(2)); + + quest_manager.spawn_condition(zone_short, zone->GetInstanceID(), cond_id, value); + } + else + { + char * zone_short = (char *)SvPV_nolen(ST(0)); + uint32 instance_id = (int)SvUV(ST(1)); + uint16 cond_id = (int)SvUV(ST(2)); + int16 value = (int)SvIV(ST(3)); + + quest_manager.spawn_condition(zone_short, instance_id, cond_id, value); + } + XSRETURN_EMPTY; +} + +XS(XS__get_spawn_condition); +XS(XS__get_spawn_condition) +{ + dXSARGS; + if (items < 2 || items > 3) + Perl_croak(aTHX_ "Usage: get_spawn_condition(zone_short, [instance_id], condition_id)"); + + if(items == 2) + { + int16 RETVAL; + dXSTARG; + + char * zone_short = (char *)SvPV_nolen(ST(0)); + uint16 cond_id = (int)SvIV(ST(1)); + + RETVAL = quest_manager.get_spawn_condition(zone_short, zone->GetInstanceID(), cond_id); + XSprePUSH; PUSHu((IV)RETVAL); + + XSRETURN(1); + } + else + { + int16 RETVAL; + dXSTARG; + + char * zone_short = (char *)SvPV_nolen(ST(0)); + uint16 instance_id = (int)SvIV(ST(1)); + uint16 cond_id = (int)SvIV(ST(2)); + + RETVAL = quest_manager.get_spawn_condition(zone_short, instance_id, cond_id); + XSprePUSH; PUSHu((IV)RETVAL); + + XSRETURN(1); + } +} + +XS(XS__toggle_spawn_event); +XS(XS__toggle_spawn_event) +{ + dXSARGS; + if (items != 2) + Perl_croak(aTHX_ "Usage: toggle_spawn_event(event_id, enabled?, reset_base)"); + + uint32 event_id = (int)SvIV(ST(0)); + bool enabled = ((int)SvIV(ST(1))) == 0?false:true; + bool reset_base = ((int)SvIV(ST(1))) == 0?false:true; + + quest_manager.toggle_spawn_event(event_id, enabled, reset_base); + + XSRETURN_EMPTY; +} + +XS(XS__has_zone_flag); +XS(XS__has_zone_flag) +{ + dXSARGS; + if (items != 1) + Perl_croak(aTHX_ "Usage: has_zone_flag(zone_id)"); + + int16 RETVAL; + dXSTARG; + + uint32 zone_id = (int)SvIV(ST(0)); + + RETVAL = quest_manager.has_zone_flag(zone_id); + XSprePUSH; PUSHu((IV)RETVAL); + + XSRETURN(1); + +} + +XS(XS__set_zone_flag); +XS(XS__set_zone_flag) +{ + dXSARGS; + if (items != 1) + Perl_croak(aTHX_ "Usage: set_zone_flag(zone_id)"); + + uint32 zone_id = (int)SvIV(ST(0)); + + quest_manager.set_zone_flag(zone_id); + + XSRETURN_EMPTY; +} + +XS(XS__clear_zone_flag); +XS(XS__clear_zone_flag) +{ + dXSARGS; + if (items != 1) + Perl_croak(aTHX_ "Usage: clear_zone_flag(zone_id)"); + + uint32 zone_id = (int)SvIV(ST(0)); + + quest_manager.clear_zone_flag(zone_id); + + XSRETURN_EMPTY; +} + +XS(XS__summonburriedplayercorpse); +XS(XS__summonburriedplayercorpse) +{ + dXSARGS; + if (items != 5) + Perl_croak(aTHX_ "Usage: summonburriedplayercorpse(char_id,dest_x,dest_y,dest_z,dest_heading)"); + + bool RETVAL; + uint32 char_id = (int)SvIV(ST(0)); + float dest_x = (float)SvIV(ST(1)); + float dest_y = (float)SvIV(ST(2)); + float dest_z = (float)SvIV(ST(3)); + float dest_heading = (float)SvIV(ST(4)); + + RETVAL = quest_manager.summonburriedplayercorpse(char_id, dest_x, dest_y, dest_z, dest_heading); + + ST(0) = boolSV(RETVAL); + sv_2mortal(ST(0)); + XSRETURN(1); +} + +XS(XS__summonallplayercorpses); +XS(XS__summonallplayercorpses) +{ + dXSARGS; + if (items != 5) + Perl_croak(aTHX_ "Usage: summonallplayercorpses(char_id,dest_x,dest_y,dest_z,dest_heading)"); + + bool RETVAL; + uint32 char_id = (int)SvIV(ST(0)); + float dest_x = (float)SvIV(ST(1)); + float dest_y = (float)SvIV(ST(2)); + float dest_z = (float)SvIV(ST(3)); + float dest_heading = (float)SvIV(ST(4)); + + RETVAL = quest_manager.summonallplayercorpses(char_id, dest_x, dest_y, dest_z, dest_heading); + + ST(0) = boolSV(RETVAL); + sv_2mortal(ST(0)); + XSRETURN(1); +} + +XS(XS__getplayerburriedcorpsecount); +XS(XS__getplayerburriedcorpsecount) +{ + dXSARGS; + if (items != 1) + Perl_croak(aTHX_ "Usage: getplayerburriedcorpsecount(char_id)"); + + uint32 RETVAL; + dXSTARG; + + uint32 char_id = (int)SvIV(ST(0)); + + RETVAL = quest_manager.getplayerburriedcorpsecount(char_id); + XSprePUSH; PUSHu((IV)RETVAL); + + XSRETURN(1); +} + +XS(XS__buryplayercorpse); +XS(XS__buryplayercorpse) +{ + dXSARGS; + if (items != 1) + Perl_croak(aTHX_ "Usage: buryplayercorpse(char_id)"); + + uint32 RETVAL; + dXSTARG; + + uint32 char_id = (int)SvIV(ST(0)); + + RETVAL = quest_manager.buryplayercorpse(char_id); + XSprePUSH; PUSHu((IV)RETVAL); + + XSRETURN(1); +} + +XS(XS__forcedooropen); +XS(XS__forcedooropen) +{ + dXSARGS; + if (items < 1 || items > 2) + Perl_croak(aTHX_ "Usage: forcedooropen(doorid [, altmode=0])"); + + if (items == 1) + { + uint32 did = (int)SvIV(ST(0)); + + quest_manager.forcedooropen(did, false); + + XSRETURN_EMPTY; + } + else + { + uint32 did = (int)SvIV(ST(0)); + bool am = (int)SvIV(ST(1)) == 0?false:true; + + quest_manager.forcedooropen(did, am); + + XSRETURN_EMPTY; + } +} + +XS(XS__forcedoorclose); +XS(XS__forcedoorclose) +{ + dXSARGS; + if (items < 1 || items > 2) + Perl_croak(aTHX_ "Usage: forcedoorclose(doorid [, altmode=0])"); + + if (items == 1) + { + uint32 did = (int)SvIV(ST(0)); + + quest_manager.forcedoorclose(did, false); + + XSRETURN_EMPTY; + } + else + { + uint32 did = (int)SvIV(ST(0)); + bool am = (int)SvIV(ST(1)) == 0?false:true; + + quest_manager.forcedoorclose(did, am); + + XSRETURN_EMPTY; + } +} + +XS(XS__toggledoorstate); +XS(XS__toggledoorstate) +{ + dXSARGS; + if (items !=1) + Perl_croak(aTHX_ "Usage: toggledoorstate(doorid)"); + + uint32 did = (int)SvIV(ST(0)); + + quest_manager.toggledoorstate(did); + + XSRETURN_EMPTY; +} + +XS(XS__isdooropen); +XS(XS__isdooropen) +{ + dXSARGS; + if (items != 1) + Perl_croak(aTHX_ "Usage: isdooropen(doorid)"); + + bool RETVAL; + dXSTARG; + + uint32 doorid = (int)SvIV(ST(0)); + + RETVAL = quest_manager.isdooropen(doorid); + XSprePUSH; PUSHu((IV)RETVAL); + + XSRETURN(1); +} + +XS(XS__depopzone); +XS(XS__depopzone) +{ + dXSARGS; + if (items != 1) + Perl_croak(aTHX_ "Usage: depopzone(StartSpawnStatus)"); + + bool StartSpawnStatus = ((int)SvIV(ST(0))) == 0?false:true; + + quest_manager.depopzone(StartSpawnStatus); + + XSRETURN_EMPTY; +} + +XS(XS__repopzone); +XS(XS__repopzone) +{ + dXSARGS; + if (items != 0) + Perl_croak(aTHX_ "Usage: repopzone()"); + + quest_manager.repopzone(); + + XSRETURN_EMPTY; +} + +XS(XS__npcrace); +XS(XS__npcrace) +{ + dXSARGS; + if (items != 1) + Perl_croak(aTHX_ "Usage: npcrace(race_id)"); + + int race_id = (int)SvIV(ST(0)); + + quest_manager.npcrace(race_id); + + XSRETURN_EMPTY; +} + +XS(XS__npcgender); +XS(XS__npcgender) +{ + dXSARGS; + if (items != 1) + Perl_croak(aTHX_ "Usage: npcgender(gender_id)"); + + int gender_id= (int)SvIV(ST(0)); + + quest_manager.npcgender(gender_id); + + XSRETURN_EMPTY; +} + +XS(XS__npcsize); +XS(XS__npcsize) +{ + dXSARGS; + if (items != 1) + Perl_croak(aTHX_ "Usage: npcsize(newsize)"); + + int newsize = (int)SvIV(ST(0)); + + quest_manager.npcsize(newsize); + + XSRETURN_EMPTY; +} + +XS(XS__npctexture); +XS(XS__npctexture) +{ + dXSARGS; + if (items != 1) + Perl_croak(aTHX_ "Usage: npctexture(newtexture)"); + + int newtexture = (int)SvIV(ST(0)); + + quest_manager.npctexture(newtexture); + + XSRETURN_EMPTY; +} + +XS(XS__playerrace); +XS(XS__playerrace) +{ + dXSARGS; + if (items != 1) + Perl_croak(aTHX_ "Usage: playerrace(race_id)"); + + int race_id = (int)SvIV(ST(0)); + + quest_manager.playerrace(race_id); + + XSRETURN_EMPTY; +} + +XS(XS__playergender); +XS(XS__playergender) +{ + dXSARGS; + if (items != 1) + Perl_croak(aTHX_ "Usage: playergender(gender_id)"); + + int gender_id= (int)SvIV(ST(0)); + + quest_manager.playergender(gender_id); + + XSRETURN_EMPTY; +} + +XS(XS__playersize); +XS(XS__playersize) +{ + dXSARGS; + if (items != 1) + Perl_croak(aTHX_ "Usage: playersize(newsize)"); + + int newsize = (int)SvIV(ST(0)); + + quest_manager.playersize(newsize); + + XSRETURN_EMPTY; +} + +XS(XS__playertexture); +XS(XS__playertexture) +{ + dXSARGS; + if (items != 1) + Perl_croak(aTHX_ "Usage: playertexture(newtexture)"); + + int newtexture = (int)SvIV(ST(0)); + + quest_manager.playertexture(newtexture); + + XSRETURN_EMPTY; +} + +XS(XS__playerfeature); +XS(XS__playerfeature) +{ + dXSARGS; + if (items != 2) + Perl_croak(aTHX_ "Usage: playerfeature(feature, setting)"); + + char * feature = (char *)SvPV_nolen(ST(0)); + int setting = (int)SvIV(ST(1)); + + quest_manager.playerfeature(feature, setting); + + XSRETURN_EMPTY; +} + +XS(XS__npcfeature); +XS(XS__npcfeature) +{ + dXSARGS; + if (items != 2) + Perl_croak(aTHX_ "Usage: npcfeature(feature, setting)"); + + char * feature = (char *)SvPV_nolen(ST(0)); + int setting = (int)SvIV(ST(1)); + + quest_manager.npcfeature(feature, setting); + + XSRETURN_EMPTY; +} + +#ifdef BOTS + +XS(XS__createbotcount); +XS(XS__createbotcount) +{ + dXSARGS; + int RETVAL; + dXSTARG; + + RETVAL = quest_manager.createbotcount(); + XSprePUSH; PUSHi((IV)RETVAL); + + XSRETURN(1); +} + +XS(XS__spawnbotcount); +XS(XS__spawnbotcount) +{ + dXSARGS; + int RETVAL; + dXSTARG; + + RETVAL = quest_manager.spawnbotcount(); + XSprePUSH; PUSHi((IV)RETVAL); + + XSRETURN(1); +} + +XS(XS__botquest); +XS(XS__botquest) +{ + dXSARGS; + bool RETVAL; + dXSTARG; + + RETVAL = quest_manager.botquest(); + XSprePUSH; PUSHu((IV)RETVAL); + + XSRETURN(1); +} + +XS(XS__createBot); +XS(XS__createBot) +{ + dXSARGS; + bool RETVAL; + dXSTARG; + + if(items != 6) + { + Perl_croak(aTHX_ "Usage: createBot(firstname, lastname, level, race, class, gender)"); + } + + char *firstname = (char *)SvPV_nolen(ST(0)); + char *lastname = (char *)SvPV_nolen(ST(1)); + int level = (int) SvIV(ST(2)); + int race = (int) SvIV(ST(3)); + int botclass = (int) SvIV(ST(4)); + int gender = (int) SvIV(ST(5)); + + RETVAL = quest_manager.createBot(firstname, lastname, level, race, botclass, gender); + XSprePUSH; PUSHu((IV)RETVAL); + XSRETURN(1); +} + +#endif //BOTS + +XS(XS__taskselector); +XS(XS__taskselector) +{ + dXSARGS; + if((items >= 1) && (items <=MAXCHOOSERENTRIES)) { + int tasks[MAXCHOOSERENTRIES]; + for(int i=0; i< items; i++) { + tasks[i] = (int)SvIV(ST(i)); + } + quest_manager.taskselector(items, tasks); + } else { + Perl_croak(aTHX_ "Usage: taskselector(taskid1, taskid2, ..., taskid%i)", MAXCHOOSERENTRIES); + } + + XSRETURN_EMPTY; +} +XS(XS__tasksetselector); +XS(XS__tasksetselector) +{ + dXSARGS; + if(items == 1) { + int tasksetid = (int)SvIV(ST(0)); + quest_manager.tasksetselector(tasksetid); + } else { + Perl_croak(aTHX_ "Usage: tasksetselector(tasksetid)"); + } + + XSRETURN_EMPTY; +} +XS(XS__enabletask); +XS(XS__enabletask) +{ + dXSARGS; + if((items >= 1) && (items <=10)) { + int tasks[10]; + for(int i=0; i< items; i++) { + tasks[i] = (int)SvIV(ST(i)); + } + quest_manager.enabletask(items, tasks); + } else { + Perl_croak(aTHX_ "Usage: enabletask(taskid1, taskid2, ..., taskid10"); + } + + XSRETURN_EMPTY; +} +XS(XS__disabletask); +XS(XS__disabletask) +{ + dXSARGS; + if((items >= 1) && (items <=10)) { + int tasks[10]; + for(int i=0; i< items; i++) { + tasks[i] = (int)SvIV(ST(i)); + } + quest_manager.disabletask(items, tasks); + } else { + Perl_croak(aTHX_ "Usage: disabletask(taskid1, taskid2, ..., taskid10"); + } + + XSRETURN_EMPTY; +} + +XS(XS__istaskenabled); +XS(XS__istaskenabled) +{ + dXSARGS; + bool RETVAL; + dXSTARG; + + if(items == 1) { + unsigned int taskid = (int)SvIV(ST(0)); + RETVAL = quest_manager.istaskenabled(taskid); + } else { + Perl_croak(aTHX_ "Usage: istaskenabled(taskid)"); + } + + XSprePUSH; PUSHu((IV)RETVAL); + + XSRETURN(1); +} +XS(XS__istaskactive); +XS(XS__istaskactive) +{ + dXSARGS; + bool RETVAL; + dXSTARG; + + if(items == 1) { + unsigned int task = (int)SvIV(ST(0)); + RETVAL = quest_manager.istaskactive(task); + } else { + Perl_croak(aTHX_ "Usage: istaskactive(task)"); + } + + XSprePUSH; PUSHu((IV)RETVAL); + + XSRETURN(1); +} +XS(XS__istaskactivityactive); +XS(XS__istaskactivityactive) +{ + dXSARGS; + bool RETVAL; + dXSTARG; + + if(items == 2) { + unsigned int task = (int)SvIV(ST(0)); + unsigned int activity = (int)SvIV(ST(1)); + RETVAL = quest_manager.istaskactivityactive(task, activity); + } else { + Perl_croak(aTHX_ "Usage: istaskactivityactive(task,activity)"); + } + + XSprePUSH; PUSHu((IV)RETVAL); + + XSRETURN(1); +} +XS(XS__gettaskactivitydonecount); +XS(XS__gettaskactivitydonecount) +{ + dXSARGS; + uint32 RETVAL; + dXSTARG; + + if(items == 2) { + unsigned int task = (int)SvIV(ST(0)); + unsigned int activity = (int)SvIV(ST(1)); + RETVAL = quest_manager.gettaskactivitydonecount(task, activity); + XSprePUSH; PUSHu((UV)RETVAL); + } else { + Perl_croak(aTHX_ "Usage: gettaskactivitydonecount(task,activity)"); + } + + XSRETURN(1); +} +XS(XS__updatetaskactivity); +XS(XS__updatetaskactivity) +{ + dXSARGS; + unsigned int task, activity; + int count = 1; + if(items == 2) { + task = (int)SvIV(ST(0)); + activity = (int)SvIV(ST(1)); + quest_manager.updatetaskactivity(task, activity, count); + } + else if(items == 3) { + task = (int)SvIV(ST(0)); + activity = (int)SvIV(ST(1)); + count = (int)SvIV(ST(2)); + quest_manager.updatetaskactivity(task, activity, count); + } else { + Perl_croak(aTHX_ "Usage: updatetaskactivity(task, activity [,count])"); + } + + XSRETURN_EMPTY; +} + +XS(XS__resettaskactivity); +XS(XS__resettaskactivity) +{ + dXSARGS; + unsigned int task, activity; + if(items == 2) { + task = (int)SvIV(ST(0)); + activity = (int)SvIV(ST(1)); + quest_manager.resettaskactivity(task, activity); + } else { + Perl_croak(aTHX_ "Usage: resettaskactivity(task, activity)"); + } + + XSRETURN_EMPTY; +} + +XS(XS__taskexploredarea); +XS(XS__taskexploredarea) +{ + dXSARGS; + unsigned int exploreid; + if(items == 1) { + exploreid = (int)SvIV(ST(0)); + quest_manager.taskexploredarea(exploreid); + } else { + Perl_croak(aTHX_ "Usage: taskexplorearea(exploreid)"); + } + + XSRETURN_EMPTY; +} + +XS(XS__assigntask); +XS(XS__assigntask) +{ + dXSARGS; + unsigned int taskid; + if(items == 1) { + taskid = (int)SvIV(ST(0)); + quest_manager.assigntask(taskid); + } else { + Perl_croak(aTHX_ "Usage: assigntask(taskid)"); + } + + XSRETURN_EMPTY; +} + +XS(XS__failtask); +XS(XS__failtask) +{ + dXSARGS; + unsigned int taskid; + if(items == 1) { + taskid = (int)SvIV(ST(0)); + quest_manager.failtask(taskid); + } else { + Perl_croak(aTHX_ "Usage: failtask(taskid)"); + } + + XSRETURN_EMPTY; +} + +XS(XS__tasktimeleft); +XS(XS__tasktimeleft) +{ + dXSARGS; + int RETVAL; + dXSTARG; + + if(items == 1) { + unsigned int taskid = (int)SvIV(ST(0)); + RETVAL = quest_manager.tasktimeleft(taskid); + } else { + Perl_croak(aTHX_ "Usage: tasktimeleft(taskid)"); + } + + XSprePUSH; PUSHi((IV)RETVAL); + + XSRETURN(1); +} + +XS(XS__istaskcompleted); +XS(XS__istaskcompleted) +{ + dXSARGS; + int RETVAL; + dXSTARG; + + if(items == 1) { + unsigned int taskid = (int)SvIV(ST(0)); + RETVAL = quest_manager.istaskcompleted(taskid); + } else { + Perl_croak(aTHX_ "Usage: istaskcompleted(taskid)"); + } + + XSprePUSH; PUSHi((IV)RETVAL); + + XSRETURN(1); +} + +XS(XS__enabledtaskcount); +XS(XS__enabledtaskcount) +{ + dXSARGS; + int RETVAL; + dXSTARG; + + if(items == 1) { + unsigned int taskset = (int)SvIV(ST(0)); + RETVAL = quest_manager.enabledtaskcount(taskset); + } else { + Perl_croak(aTHX_ "Usage: enabledtaskcount(taskset)"); + } + + XSprePUSH; PUSHi((IV)RETVAL); + + XSRETURN(1); +} + +XS(XS__firsttaskinset); +XS(XS__firsttaskinset) +{ + dXSARGS; + int RETVAL; + dXSTARG; + + if(items == 1) { + unsigned int taskset = (int)SvIV(ST(0)); + RETVAL = quest_manager.firsttaskinset(taskset); + } else { + Perl_croak(aTHX_ "Usage: firsttaskinset(taskset)"); + } + + XSprePUSH; PUSHi((IV)RETVAL); + + XSRETURN(1); +} + +XS(XS__lasttaskinset); +XS(XS__lasttaskinset) +{ + dXSARGS; + int RETVAL; + dXSTARG; + + if(items == 1) { + unsigned int taskset = (int)SvIV(ST(0)); + RETVAL = quest_manager.lasttaskinset(taskset); + } else { + Perl_croak(aTHX_ "Usage: lasttaskinset(taskset)"); + } + + XSprePUSH; PUSHi((IV)RETVAL); + + XSRETURN(1); +} + +XS(XS__nexttaskinset); +XS(XS__nexttaskinset) +{ + dXSARGS; + int RETVAL; + dXSTARG; + + if(items == 2) { + unsigned int taskset = (int)SvIV(ST(0)); + unsigned int taskid = (int)SvIV(ST(1)); + RETVAL = quest_manager.nexttaskinset(taskset, taskid); + } else { + Perl_croak(aTHX_ "Usage: nexttaskinset(taskset, taskid)"); + } + + XSprePUSH; PUSHi((IV)RETVAL); + + XSRETURN(1); +} +XS(XS__activespeaktask); +XS(XS__activespeaktask) +{ + dXSARGS; + int RETVAL; + dXSTARG; + + if(items == 0) { + RETVAL = quest_manager.activespeaktask(); + } else { + Perl_croak(aTHX_ "Usage: activespeaktask()"); + } + + XSprePUSH; PUSHi((IV)RETVAL); + + XSRETURN(1); +} + +XS(XS__activespeakactivity); +XS(XS__activespeakactivity) +{ + dXSARGS; + int RETVAL; + dXSTARG; + + if(items == 1) { + unsigned int taskid = (int)SvIV(ST(0)); + RETVAL = quest_manager.activespeakactivity(taskid); + } else { + Perl_croak(aTHX_ "Usage: activespeakactivity(taskid)"); + } + + XSprePUSH; PUSHi((IV)RETVAL); + + XSRETURN(1); +} + +XS(XS__activetasksinset); +XS(XS__activetasksinset) +{ + dXSARGS; + int RETVAL; + dXSTARG; + + if(items == 1) { + unsigned int taskset = (int)SvIV(ST(0)); + RETVAL = quest_manager.activetasksinset(taskset); + } else { + Perl_croak(aTHX_ "Usage: activetasksinset(taskset)"); + } + + XSprePUSH; PUSHi((IV)RETVAL); + + XSRETURN(1); +} + +XS(XS__completedtasksinset); +XS(XS__completedtasksinset) +{ + dXSARGS; + int RETVAL; + dXSTARG; + + if(items == 1) { + unsigned int taskset = (int)SvIV(ST(0)); + RETVAL = quest_manager.completedtasksinset(taskset); + } else { + Perl_croak(aTHX_ "Usage: completedtasksinset(taskset)"); + } + + XSprePUSH; PUSHi((IV)RETVAL); + + XSRETURN(1); +} + + +XS(XS__istaskappropriate); +XS(XS__istaskappropriate) +{ + dXSARGS; + bool RETVAL; + dXSTARG; + + if(items == 1) { + unsigned int task = (int)SvIV(ST(0)); + RETVAL = quest_manager.istaskappropriate(task); + } else { + Perl_croak(aTHX_ "Usage: istaskaappropriate(task)"); + } + + XSprePUSH; PUSHu((IV)RETVAL); + + XSRETURN(1); +} + + XS(XS__popup); // prototype to pass -Wmissing-prototypes + XS(XS__popup) { + dXSARGS; + int popupid = 0; + int buttons = 0; + int duration = 0; + + if((items < 2) || (items > 5)) + Perl_croak(aTHX_ "Usage: popup(windowtitle, text, popupid, buttons, duration)"); + + if(items >= 3) + popupid = (int)SvIV(ST(2)); + + if(items >= 4) + buttons = (int)SvIV(ST(3)); + + if(items == 5) + duration = (int)SvIV(ST(4)); + + quest_manager.popup(SvPV_nolen(ST(0)), SvPV_nolen(ST(1)), popupid, buttons, duration); + + XSRETURN_EMPTY; + } +XS(XS__clearspawntimers); +XS(XS__clearspawntimers) +{ + dXSARGS; + if (items != 0) + Perl_croak(aTHX_ "Usage: clearspawntimers()"); + + quest_manager.clearspawntimers(); + + XSRETURN_EMPTY; +} +XS(XS__ze); +XS(XS__ze) +{ + dXSARGS; + if (items != 2) + Perl_croak(aTHX_ "Usage: ze(type, str)"); + + int type = (int)SvIV(ST(0)); + char * str = (char *)SvPV_nolen(ST(1)); + + quest_manager.ze(type, str); + + XSRETURN_EMPTY; +} + +XS(XS__we); +XS(XS__we) +{ + dXSARGS; + if (items != 2) + Perl_croak(aTHX_ "Usage: we(type, str)"); + + int type = (int)SvIV(ST(0)); + char * str = (char *)SvPV_nolen(ST(1)); + + quest_manager.we(type, str); + + XSRETURN_EMPTY; +} +XS(XS__getlevel); +XS(XS__getlevel) +{ + dXSARGS; + if (items > 1) + Perl_croak(aTHX_ "Usage: getlevel(type)"); + + int RETVAL; + dXSTARG; + + int type; + if (items == 1) + type = (int)SvIV(ST(0)); + else + type = 0; + + RETVAL = quest_manager.getlevel(type); + XSprePUSH; PUSHu((IV)RETVAL); + + XSRETURN(1); +} + +XS(XS__CreateGroundObject); +XS(XS__CreateGroundObject) +{ + dXSARGS; + if (items != 5 && items != 6) + Perl_croak(aTHX_ "Usage: creategroundobject(itemid, x, y, z, heading, [decay_time])"); + + int itemid = (int)SvIV(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.CreateGroundObject(itemid, x, y, z, heading); + else{ + uint32 decay_time = (uint32)SvIV(ST(5)); + id = quest_manager.CreateGroundObject(itemid, x, y, z, heading, decay_time); + } + + XSRETURN_IV(id); +} + +XS(XS__CreateGroundObjectFromModel); +XS(XS__CreateGroundObjectFromModel) +{ + dXSARGS; + if (items < 5 || items > 7) + Perl_croak(aTHX_ "Usage: creategroundobjectfrommodel(modelname, x, y, z, heading, [type], [decay_time])"); + + 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)); + uint32 type = 0; + uint32 decay_time = 0; + uint16 id = 0; + + if (items > 5) + type = (uint32)SvIV(ST(5)); + + if (items > 6) + decay_time = (uint32)SvIV(ST(6)); + + id = quest_manager.CreateGroundObjectFromModel(modelname, x, y, z, heading, type, decay_time); + XSRETURN_IV(id); +} + +XS(XS__CreateDoor); +XS(XS__CreateDoor) +{ + dXSARGS; + if (items < 5 || items > 7) + Perl_croak(aTHX_ "Usage: createdoor(modelname, x, y, z, heading, [type], [size])"); + + 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)); + uint32 type = 58; + uint32 size = 100; + uint16 id = 0; + + if (items > 5) + type = (uint32)SvIV(ST(5)); + + if (items > 6) + size = (uint32)SvIV(ST(6)); + + id = quest_manager.CreateDoor(modelname, x, y, z, heading, type, size); + XSRETURN_IV(id); +} + +XS(XS__ModifyNPCStat); +XS(XS__ModifyNPCStat) +{ + dXSARGS; + if (items != 2) + Perl_croak(aTHX_ "Usage: ModifyNPCStat(identifier, newValue)"); + + quest_manager.ModifyNPCStat(SvPV_nolen(ST(0)), SvPV_nolen(ST(1))); + + XSRETURN_EMPTY; +} + +XS(XS__collectitems); +XS(XS__collectitems) +{ + dXSARGS; + if (items != 2) + Perl_croak(aTHX_ "Usage: collectitems(item_id, remove?)"); + + uint32 item_id = (int)SvIV(ST(0)); + bool remove = ((int)SvIV(ST(1))) == 0?false:true; + + int quantity = + quest_manager.collectitems(item_id, remove); + + XSRETURN_IV(quantity); +} + +XS(XS__UpdateSpawnTimer); +XS(XS__UpdateSpawnTimer) +{ + dXSARGS; + if (items != 2) + Perl_croak(aTHX_ "Usage: UpdateSpawnTimer(Spawn2_ID, Updated_Time_Till_Repop)"); + + uint32 id = (int)SvIV(ST(0)); + uint32 duration = (int)SvIV(ST(1)); + + quest_manager.UpdateSpawnTimer(id, duration); + + XSRETURN_EMPTY; +} + +XS(XS__MerchantSetItem); +XS(XS__MerchantSetItem) { + dXSARGS; + if (items != 2 && items != 3) + Perl_croak(aTHX_ "Usage: MerchantSetItem(NPCid, itemid [, quantity])"); + + uint32 NPCid = (int)SvUV(ST(0)); + uint32 itemid = (int)SvUV(ST(1)); + uint32 quantity = 0; + if (items == 3) + quantity = (int)SvUV(ST(2)); + + quest_manager.MerchantSetItem(NPCid, itemid, quantity); + + XSRETURN_EMPTY; +} + +XS(XS__MerchantCountItem); +XS(XS__MerchantCountItem) { + dXSARGS; + if (items != 2) + Perl_croak(aTHX_ "Usage: MerchantCountItem(NPCid, itemid)"); + + uint32 NPCid = (int)SvUV(ST(0)); + uint32 itemid = (int)SvUV(ST(1)); + uint32 quantity = quest_manager.MerchantCountItem(NPCid, itemid); + + XSRETURN_UV(quantity); +} + +XS(XS__varlink); +XS(XS__varlink) { + dXSARGS; + if (items != 1) + Perl_croak(aTHX_ "Usage: varlink(itemID)"); + dXSTARG; + + Const_char * RETVAL; + char text[250]; + uint32 itemID; + itemID = (int)SvUV(ST(0)); + + RETVAL = quest_manager.varlink(text, itemID); + + sv_setpv(TARG, RETVAL); XSprePUSH; PUSHTARG; + XSRETURN(1); +} + +XS(XS__CreateInstance); +XS(XS__CreateInstance) { + dXSARGS; + if (items != 3) + Perl_croak(aTHX_ "Usage: CreateInstance(zone_name, version, duration)"); + + char * zone = (char *)SvPV_nolen(ST(0)); + uint16 version = (int)SvUV(ST(1)); + uint32 duration = (int)SvUV(ST(2)); + uint32 id = quest_manager.CreateInstance(zone, version, duration); + + XSRETURN_UV(id); +} + +XS(XS__DestroyInstance); +XS(XS__DestroyInstance) { + dXSARGS; + if (items != 1) + Perl_croak(aTHX_ "Usage: DestroyInstance(id)"); + + uint16 id = (int)SvUV(ST(0)); + quest_manager.DestroyInstance(id); + + XSRETURN_EMPTY; +} + +XS(XS__GetInstanceID); +XS(XS__GetInstanceID) { + dXSARGS; + if (items != 2) + Perl_croak(aTHX_ "Usage: GetInstanceID(zone_name, version)"); + + char * zone = (char *)SvPV_nolen(ST(0)); + uint16 version = (int)SvUV(ST(1)); + uint16 id = quest_manager.GetInstanceID(zone, version); + + XSRETURN_UV(id); +} + +XS(XS__AssignToInstance); +XS(XS__AssignToInstance) { + dXSARGS; + if (items != 1) + Perl_croak(aTHX_ "Usage: AssignToInstance(id)"); + + uint16 id = (int)SvUV(ST(0)); + quest_manager.AssignToInstance(id); + + XSRETURN_EMPTY; +} + +XS(XS__AssignGroupToInstance); +XS(XS__AssignGroupToInstance) { + dXSARGS; + if (items != 1) + Perl_croak(aTHX_ "Usage: AssignGroupToInstance(id)"); + + uint16 id = (int)SvUV(ST(0)); + quest_manager.AssignGroupToInstance(id); + + XSRETURN_EMPTY; +} + +XS(XS__AssignRaidToInstance); +XS(XS__AssignRaidToInstance) { + dXSARGS; + if (items != 1) + Perl_croak(aTHX_ "Usage: AssignRaidToInstance(id)"); + + uint16 id = (int)SvUV(ST(0)); + quest_manager.AssignRaidToInstance(id); + + XSRETURN_EMPTY; +} + +XS(XS__MovePCInstance); +XS(XS__MovePCInstance) +{ + dXSARGS; + if (items != 5 && items != 6) + Perl_croak(aTHX_ "Usage: MovePCInstance(zone_id, instance_id, x, y, z [,heading])"); + + int zoneid = (int)SvIV(ST(0)); + int instanceid = (int)SvIV(ST(1)); + float x = (float)SvNV(ST(2)); + float y = (float)SvNV(ST(3)); + float z = (float)SvNV(ST(4)); + + if (items == 4) + { + quest_manager.MovePCInstance(zoneid, instanceid, x, y, z, 0.0f); + } + else + { + float heading = (float)SvNV(ST(5)); + quest_manager.MovePCInstance(zoneid, instanceid, x, y, z, heading); + } + + XSRETURN_EMPTY; +} + +XS(XS__FlagInstanceByGroupLeader); +XS(XS__FlagInstanceByGroupLeader) { + dXSARGS; + if (items != 2) + Perl_croak(aTHX_ "Usage: FlagInstanceByGroupLeader(zone, version)"); + + uint32 zone = (int)SvUV(ST(0)); + uint16 version = (int)SvUV(ST(1)); + quest_manager.FlagInstanceByGroupLeader(zone, version); + + XSRETURN_EMPTY; +} + +XS(XS__FlagInstanceByRaidLeader); +XS(XS__FlagInstanceByRaidLeader) { + dXSARGS; + if (items != 2) + Perl_croak(aTHX_ "Usage: FlagInstanceByRaidLeader(zone, version)"); + + uint32 zone = (int)SvUV(ST(0)); + uint16 version = (int)SvUV(ST(1)); + quest_manager.FlagInstanceByRaidLeader(zone, version); + + XSRETURN_EMPTY; +} + +XS(XS__saylink); +XS(XS__saylink) { + dXSARGS; + if (items < 1 || items > 3) + Perl_croak(aTHX_ "Usage: saylink(phrase,[silent?],[linkname])"); + dXSTARG; + + Const_char * RETVAL; + char text[250]; + char text2[250]; + bool silent = false; + strcpy(text,(char *)SvPV_nolen(ST(0))); + if(items >= 2) { + silent = ((int)SvIV(ST(1))) == 0 ? false : true; + } + if (items == 3) + strcpy(text2,(char *)SvPV_nolen(ST(2))); + else + strcpy(text2,text); + + RETVAL = quest_manager.saylink(text, silent, text2); + sv_setpv(TARG, RETVAL); XSprePUSH; PUSHTARG; + XSRETURN(1); +} + +XS(XS__getguildnamebyid); +XS(XS__getguildnamebyid) { + dXSARGS; + if (items != 1) + Perl_croak(aTHX_ "Usage: getguildnamebyid(guild_id)"); + dXSTARG; + + Const_char * RETVAL; + uint32 guild_id = (int)SvUV(ST(0)); + + RETVAL = quest_manager.getguildnamebyid(guild_id); + + sv_setpv(TARG, RETVAL); XSprePUSH; PUSHTARG; + XSRETURN(1); +} + +XS(XS__SetRunning); +XS(XS__SetRunning) +{ + dXSARGS; + if (items != 1) + Perl_croak(aTHX_ "Usage: SetRunning(val)"); + + bool val = ((int)SvIV(ST(0))) == 0?false:true; + + quest_manager.SetRunning(val); + + XSRETURN_EMPTY; +} + +XS(XS__IsRunning); +XS(XS__IsRunning) +{ + dXSARGS; + if (items >= 1) + Perl_croak(aTHX_ "Usage: IsRunning()"); + + bool RETVAL; + dXSTARG; + + + RETVAL = quest_manager.IsRunning(); + XSprePUSH; PUSHu((IV)RETVAL); + + XSRETURN(1); +} + +XS(XS__IsEffectInSpell); +XS(XS__IsEffectInSpell) +{ + dXSARGS; + if (items != 2) + Perl_croak(aTHX_ "Usage: IsEffectInSpell(spell_id, effect_id)"); + + uint32 spell_id = (uint32)SvUV(ST(0)); + uint32 effect_id = (uint32)SvUV(ST(1)); + bool RETVAL; + dXSTARG; + + + RETVAL = IsEffectInSpell(spell_id, effect_id); + XSprePUSH; PUSHu((IV)RETVAL); + + XSRETURN(1); +} + +XS(XS__IsBeneficialSpell); +XS(XS__IsBeneficialSpell) +{ + dXSARGS; + if (items != 1) + Perl_croak(aTHX_ "Usage: IsBeneficialSpell(spell_id)"); + + uint32 spell_id = (uint32)SvUV(ST(0)); + bool RETVAL; + dXSTARG; + + + RETVAL = BeneficialSpell(spell_id); + XSprePUSH; PUSHu((IV)RETVAL); + + XSRETURN(1); +} + +XS(XS__GetSpellResistType); +XS(XS__GetSpellResistType) +{ + dXSARGS; + if (items != 1) + Perl_croak(aTHX_ "Usage: GetSpellResistType(spell_id)"); + + uint32 spell_id = (uint32)SvUV(ST(0)); + int32 spell_val = 0; + dXSTARG; + + spell_val = GetSpellResistType(spell_id); + XSRETURN_UV(spell_val); +} + +XS(XS__GetSpellTargetType); +XS(XS__GetSpellTargetType) +{ + dXSARGS; + if (items != 1) + Perl_croak(aTHX_ "Usage: GetSpellTargetType(spell_id)"); + + uint32 spell_id = (uint32)SvUV(ST(0)); + int32 spell_val = 0; + dXSTARG; + + spell_val = GetSpellTargetType(spell_id); + XSRETURN_UV(spell_val); +} + +XS(XS__FlyMode); +XS(XS__FlyMode) { + dXSARGS; + if (items != 1) + Perl_croak(aTHX_ "Usage: FlyMode([0/1/2])"); + + uint8 flymode = (int)SvUV(ST(0)); + quest_manager.FlyMode(flymode); + + XSRETURN_EMPTY; +} + +XS(XS_FactionValue); +XS(XS_FactionValue) { + dXSARGS; + if (items != 0) + Perl_croak(aTHX_ "Usage: factionvalue()"); + + uint8 fac = quest_manager.FactionValue(); + XSRETURN_UV(fac); +} + +XS(XS__enabletitle); +XS(XS__enabletitle) +{ + dXSARGS; + if (items != 1) + Perl_croak(aTHX_ "Usage: enabletitle(titleset)"); + + int titleset = (int)SvIV(ST(0)); + + quest_manager.enabletitle(titleset); + + XSRETURN_EMPTY; +} + +XS(XS__checktitle); +XS(XS__checktitle) +{ + dXSARGS; + if (items != 1) + Perl_croak(aTHX_ "Usage: checktitle(titleset)"); + + bool RETVAL; + int titleset = (int)SvIV(ST(0)); + + RETVAL = quest_manager.checktitle(titleset); + + ST(0) = boolSV(RETVAL); + sv_2mortal(ST(0)); + XSRETURN(1); +} + +XS(XS__removetitle); +XS(XS__removetitle) +{ + dXSARGS; + if (items != 1) + Perl_croak(aTHX_ "Usage: removetitle(titleset)"); + + int titleset = (int)SvIV(ST(0)); + + quest_manager.removetitle(titleset); + + XSRETURN_EMPTY; +} + +XS(XS__wearchange); +XS(XS__wearchange) +{ + dXSARGS; + if (items != 2) + Perl_croak(aTHX_ "Usage: wearchange(slot, texture)"); + + uint8 slot = (int)SvUV(ST(0)); + uint16 texture = (int)SvUV(ST(1)); + + quest_manager.wearchange(slot, texture); + + XSRETURN_EMPTY; +} + +XS(XS__voicetell); +XS(XS__voicetell) +{ + dXSARGS; + if (items != 4) + Perl_croak(aTHX_ "Usage: voicetell(clientname, type, race, gender)"); + + char * str = (char *)SvPV_nolen(ST(0)); + int macronum = (int)SvIV(ST(1)); + int racenum = (int)SvIV(ST(2)); + int gendernum = (int)SvIV(ST(3)); + + quest_manager.voicetell(str, macronum, racenum, gendernum); + + XSRETURN_EMPTY; +} + +XS(XS__LearnRecipe); +XS(XS__LearnRecipe) +{ + dXSARGS; + if (items != 1) + Perl_croak(aTHX_ "Usage: LearnRecipe(recipe_id)"); + + uint32 recipe_id = (uint32)SvIV(ST(0)); + + quest_manager.LearnRecipe(recipe_id); + + XSRETURN_EMPTY; +} + +XS(XS__SendMail); +XS(XS__SendMail) +{ + dXSARGS; + if (items != 4) + Perl_croak(aTHX_ "Usage: SendMail(to, from, subject, message)"); + + char *to = (char *)SvPV_nolen(ST(0)); + char *from = (char *)SvPV_nolen(ST(1)); + char *subject = (char *)SvPV_nolen(ST(2)); + char *message = (char *)SvPV_nolen(ST(3)); + + quest_manager.SendMail(to, from, subject, message); + + XSRETURN_EMPTY; +} + +XS(XS__GetZoneID); +XS(XS__GetZoneID) +{ + dXSARGS; + if (items != 1) + Perl_croak(aTHX_ "Usage: GetZoneID(zone)"); + + char *zone = (char *)SvPV_nolen(ST(0)); + int32 id = quest_manager.GetZoneID(zone); + + XSRETURN_IV(id); +} + +XS(XS__GetZoneLongName); +XS(XS__GetZoneLongName) +{ + dXSARGS; + if (items != 1) + Perl_croak(aTHX_ "Usage: GetZoneLongName(zone)"); + dXSTARG; + char *zone = (char *)SvPV_nolen(ST(0)); + Const_char* RETVAL = quest_manager.GetZoneLongName(zone); + + sv_setpv(TARG, RETVAL); XSprePUSH; PUSHTARG; + XSRETURN(1); +} + +XS(XS__GetTimeSeconds); +XS(XS__GetTimeSeconds) +{ + dXSARGS; + if (items != 0) + Perl_croak(aTHX_ "Usage: GetTimeSeconds()"); + + uint32 seconds = 0; + dXSTARG; + + seconds = Timer::GetTimeSeconds(); + XSRETURN_UV(seconds); +} + +XS(XS__handleturnin); // prototype to pass -Wmissing-prototypes +XS(XS__handleturnin) { + dXSARGS; + + if (items != 2) + Perl_croak(aTHX_ "Usage: handleturnin(itemid, itemcharges)"); + int itemid = (int)SvIV(ST(0)); + int charges = (int)SvIV(ST(1)); + + bool returnVal = quest_manager.TurnInItem(itemid,charges); + + ST(0) = boolSV(returnVal); + sv_2mortal(ST(0)); + XSRETURN(1); +} + +XS(XS__completehandin); // prototype to pass -Wmissing-prototypes +XS(XS__completehandin) { + dXSARGS; + + if (items != 0) + Perl_croak(aTHX_ "Usage: completehandin()"); + + quest_manager.CompleteHandIn(); + + XSRETURN_EMPTY; +} + +XS(XS__resethandin); // prototype to pass -Wmissing-prototypes +XS(XS__resethandin) { + dXSARGS; + + if (items != 0) + Perl_croak(aTHX_ "Usage: resethandin()"); + + quest_manager.ResetHandIn(); + + XSRETURN_EMPTY; +} + +XS(XS__clearhandin); // prototype to pass -Wmissing-prototypes +XS(XS__clearhandin) { + dXSARGS; + + if (items != 0) + Perl_croak(aTHX_ "Usage: clearhandin()"); + + quest_manager.ClearHandIn(); + + XSRETURN_EMPTY; +} + +XS(XS__crosszonesignalclientbycharid); +XS(XS__crosszonesignalclientbycharid) +{ + dXSARGS; + + if (items != 2) + Perl_croak(aTHX_ "Usage: crosszonesignalclientbycharid(char_id, data)"); + + if (items == 2) { + int char_id = (int)SvIV(ST(0)); + uint32 data = (uint32)SvIV(ST(1)); + quest_manager.CrossZoneSignalPlayerByCharID(char_id, data); + } else { + Perl_croak(aTHX_ "Usage: crosszonesignalclientbycharid(char_id, data)"); + } + + XSRETURN_EMPTY; +} + +XS(XS__crosszonesignalclientbyname); +XS(XS__crosszonesignalclientbyname) +{ + dXSARGS; + + if (items != 2) + Perl_croak(aTHX_ "Usage: crosszonesignalclientbycharid(Name, data)"); + + if (items == 2) { + char *Name = (char *)SvPV_nolen(ST(0)); + uint32 data = (uint32)SvIV(ST(1)); + quest_manager.CrossZoneSignalPlayerByName(Name, data); + } else { + Perl_croak(aTHX_ "Usage: crosszonesignalclientbycharid(Name, data)"); + } + + XSRETURN_EMPTY; +} + + +XS(XS__crosszonemessageplayerbyname); +XS(XS__crosszonemessageplayerbyname) +{ + dXSARGS; + + if (items != 3) + Perl_croak(aTHX_ "Usage: crosszonemessageplayerbyname(Type, Name, Message)"); + + if (items == 3) { + uint32 Type = (uint32)SvIV(ST(0)); + char *Name = (char *)SvPV_nolen(ST(1)); + char *Message = (char *)SvPV_nolen(ST(2)); + quest_manager.CrossZoneMessagePlayerByName(Type, Name, Message); + } else { + Perl_croak(aTHX_ "Usage: crosszonemessageplayerbyname(Type, Name, Message)"); + } + + XSRETURN_EMPTY; +} + +/* +This is the callback perl will look for to setup the +quest package's XSUBs +*/ +EXTERN_C XS(boot_quest); // prototype to pass -Wmissing-prototypes +EXTERN_C XS(boot_quest) +{ + dXSARGS; + char file[256]; + strncpy(file, __FILE__, 256); + file[255] = '\0'; + + if(items != 1) + LogFile->write(EQEMuLog::Error, "boot_quest does not take any arguments."); + + char buf[128]; //shouldent have any function names longer than this. + + //add the strcpy stuff to get rid of const warnings.... + + XS_VERSION_BOOTCHECK ; + newXS(strcpy(buf, "echo"), XS__echo, file); + newXS(strcpy(buf, "say"), XS__say, file); + newXS(strcpy(buf, "me"), XS__me, file); + newXS(strcpy(buf, "summonitem"), XS__summonitem, file); + newXS(strcpy(buf, "write"), XS__write, file); + newXS(strcpy(buf, "spawn"), XS__spawn, file); + newXS(strcpy(buf, "spawn2"), XS__spawn2, file); + newXS(strcpy(buf, "unique_spawn"), XS__unique_spawn, file); + newXS(strcpy(buf, "spawn_from_spawn2"), XS__spawn_from_spawn2, file); + newXS(strcpy(buf, "enable_spawn2"), XS__enable_spawn2, file); + newXS(strcpy(buf, "disable_spawn2"), XS__disable_spawn2, file); + newXS(strcpy(buf, "setstat"), XS__setstat, file); + newXS(strcpy(buf, "incstat"), XS__incstat, file); + newXS(strcpy(buf, "castspell"), XS__castspell, file); + newXS(strcpy(buf, "selfcast"), XS__selfcast, file); + newXS(strcpy(buf, "addloot"), XS__addloot, file); + newXS(strcpy(buf, "zone"), XS__zone, file); + newXS(strcpy(buf, "settimer"), XS__settimer, file); + newXS(strcpy(buf, "settimerMS"), XS__settimerMS, file); + newXS(strcpy(buf, "stoptimer"), XS__stoptimer, file); + newXS(strcpy(buf, "stopalltimers"), XS__stopalltimers, file); + newXS(strcpy(buf, "emote"), XS__emote, file); + newXS(strcpy(buf, "shout"), XS__shout, file); + newXS(strcpy(buf, "shout2"), XS__shout2, file); + newXS(strcpy(buf, "gmsay"), XS__gmsay, file); + newXS(strcpy(buf, "depop"), XS__depop, file); + newXS(strcpy(buf, "depop_withtimer"), XS__depop_withtimer, file); + newXS(strcpy(buf, "settarget"), XS__settarget, file); + newXS(strcpy(buf, "follow"), XS__follow, file); + newXS(strcpy(buf, "sfollow"), XS__sfollow, file); + newXS(strcpy(buf, "changedeity"), XS__changedeity, file); + newXS(strcpy(buf, "exp"), XS__exp, file); + newXS(strcpy(buf, "level"), XS__level, file); + newXS(strcpy(buf, "traindisc"), XS__traindisc, file); + newXS(strcpy(buf, "isdisctome"), XS__isdisctome, file); + newXS(strcpy(buf, "safemove"), XS__safemove, file); + newXS(strcpy(buf, "rain"), XS__rain, file); + newXS(strcpy(buf, "snow"), XS__snow, file); + newXS(strcpy(buf, "surname"), XS__surname, file); + newXS(strcpy(buf, "permaclass"), XS__permaclass, file); + newXS(strcpy(buf, "permarace"), XS__permarace, file); + newXS(strcpy(buf, "permagender"), XS__permagender, file); + newXS(strcpy(buf, "scribespells"), XS__scribespells, file); + newXS(strcpy(buf, "traindiscs"), XS__traindiscs, file); + newXS(strcpy(buf, "unscribespells"), XS__unscribespells, file); + newXS(strcpy(buf, "untraindiscs"), XS__untraindiscs, file); + newXS(strcpy(buf, "givecash"), XS__givecash, file); + newXS(strcpy(buf, "pvp"), XS__pvp, file); + newXS(strcpy(buf, "movepc"), XS__movepc, file); + newXS(strcpy(buf, "gmmove"), XS__gmmove, file); + newXS(strcpy(buf, "movegrp"), XS__movegrp, file); + newXS(strcpy(buf, "doanim"), XS__doanim, file); + newXS(strcpy(buf, "addskill"), XS__addskill, file); + newXS(strcpy(buf, "setlanguage"), XS__setlanguage, file); + newXS(strcpy(buf, "setskill"), XS__setskill, file); + newXS(strcpy(buf, "setallskill"), XS__setallskill, file); + newXS(strcpy(buf, "attack"), XS__attack, file); + newXS(strcpy(buf, "attacknpc"), XS__attacknpc, file); + newXS(strcpy(buf, "attacknpctype"), XS__attacknpctype, file); + newXS(strcpy(buf, "save"), XS__save, file); + newXS(strcpy(buf, "faction"), XS__faction, file); + newXS(strcpy(buf, "setsky"), XS__setsky, file); + newXS(strcpy(buf, "setguild"), XS__setguild, file); + newXS(strcpy(buf, "createguild"), XS__createguild, file); + newXS(strcpy(buf, "settime"), XS__settime, file); + newXS(strcpy(buf, "itemlink"), XS__itemlink, file); + newXS(strcpy(buf, "signal"), XS__signal, file); + newXS(strcpy(buf, "signalwith"), XS__signalwith, file); + newXS(strcpy(buf, "setglobal"), XS__setglobal, file); + newXS(strcpy(buf, "targlobal"), XS__targlobal, file); + newXS(strcpy(buf, "delglobal"), XS__delglobal, file); + newXS(strcpy(buf, "ding"), XS__ding, file); + newXS(strcpy(buf, "rebind"), XS__rebind, file); + newXS(strcpy(buf, "start"), XS__start, file); + newXS(strcpy(buf, "stop"), XS__stop, file); + newXS(strcpy(buf, "pause"), XS__pause, file); + newXS(strcpy(buf, "moveto"), XS__moveto, file); + newXS(strcpy(buf, "resume"), XS__resume, file); + newXS(strcpy(buf, "addldonpoints"), XS__addldonpoints, file); + newXS(strcpy(buf, "addldonwin"), XS__addldonpoints, file); + newXS(strcpy(buf, "addldonloss"), XS__addldonpoints, file); + newXS(strcpy(buf, "setnexthpevent"), XS__setnexthpevent, file); + newXS(strcpy(buf, "setnextinchpevent"), XS__setnextinchpevent, file); + newXS(strcpy(buf, "sethp"), XS__sethp, file); + newXS(strcpy(buf, "respawn"), XS__respawn, file); + newXS(strcpy(buf, "getItemName"), XS_qc_getItemName, file); + newXS(strcpy(buf, "ChooseRandom"), XS__ChooseRandom, file); + newXS(strcpy(buf, "set_proximity"), XS__set_proximity, file); + newXS(strcpy(buf, "clear_proximity"), XS__clear_proximity, file); + newXS(strcpy(buf, "setanim"), XS__setanim, file); + newXS(strcpy(buf, "showgrid"), XS__showgrid, file); + newXS(strcpy(buf, "showpath"), XS__showpath, file); + newXS(strcpy(buf, "pathto"), XS__pathto, file); + newXS(strcpy(buf, "spawn_condition"), XS__spawn_condition, file); + newXS(strcpy(buf, "get_spawn_condition"), XS__get_spawn_condition, file); + newXS(strcpy(buf, "toggle_spawn_event"), XS__toggle_spawn_event, file); + newXS(strcpy(buf, "has_zone_flag"), XS__has_zone_flag, file); + newXS(strcpy(buf, "set_zone_flag"), XS__set_zone_flag, file); + newXS(strcpy(buf, "clear_zone_flag"), XS__clear_zone_flag, file); + newXS(strcpy(buf, "summonburriedplayercorpse"), XS__summonburriedplayercorpse, file); + newXS(strcpy(buf, "summonallplayercorpses"), XS__summonallplayercorpses, file); + newXS(strcpy(buf, "getplayerburriedcorpsecount"), XS__getplayerburriedcorpsecount, file); + newXS(strcpy(buf, "buryplayercorpse"), XS__buryplayercorpse, file); + newXS(strcpy(buf, "forcedooropen"), XS__forcedooropen, file); + newXS(strcpy(buf, "forcedoorclose"), XS__forcedoorclose, file); + newXS(strcpy(buf, "toggledoorstate"), XS__toggledoorstate, file); + newXS(strcpy(buf, "isdooropen"), XS__isdooropen, file); + newXS(strcpy(buf, "depopall"), XS__depopall, file); + newXS(strcpy(buf, "depopzone"), XS__depopzone, file); + newXS(strcpy(buf, "repopzone"), XS__repopzone, file); + newXS(strcpy(buf, "npcrace"), XS__npcrace, file); + newXS(strcpy(buf, "npcgender"), XS__npcgender, file); + newXS(strcpy(buf, "npcsize"), XS__npcsize, file); + newXS(strcpy(buf, "npctexture"), XS__npctexture, file); + newXS(strcpy(buf, "playerrace"), XS__playerrace, file); + newXS(strcpy(buf, "playergender"), XS__playergender, file); + newXS(strcpy(buf, "playersize"), XS__playersize, file); + newXS(strcpy(buf, "playertexture"), XS__playertexture, file); + newXS(strcpy(buf, "playerfeature"), XS__playerfeature, file); + newXS(strcpy(buf, "npcfeature"), XS__npcfeature, file); + +#ifdef BOTS + newXS(strcpy(buf, "botquest"), XS__botquest, file); + newXS(strcpy(buf, "spawnbotcount"), XS__spawnbotcount, file); + newXS(strcpy(buf, "createbotcount"), XS__createbotcount, file); + newXS(strcpy(buf, "createBot"), XS__createBot, file); +#endif //BOTS + + newXS(strcpy(buf, "taskselector"), XS__taskselector, file); + newXS(strcpy(buf, "tasksetselector"), XS__tasksetselector, file); + newXS(strcpy(buf, "enabletask"), XS__enabletask, file); + newXS(strcpy(buf, "disabletask"), XS__disabletask, file); + newXS(strcpy(buf, "istaskenabled"), XS__istaskenabled, file); + newXS(strcpy(buf, "istaskactive"), XS__istaskactive, file); + newXS(strcpy(buf, "istaskactivityactive"), XS__istaskactivityactive, file); + newXS(strcpy(buf, "gettaskactivitydonecount"), XS__gettaskactivitydonecount, file); + newXS(strcpy(buf, "updatetaskactivity"), XS__updatetaskactivity, file); + newXS(strcpy(buf, "resettaskactivity"), XS__resettaskactivity, file); + newXS(strcpy(buf, "taskexploredarea"), XS__taskexploredarea, file); + newXS(strcpy(buf, "assigntask"), XS__assigntask, file); + newXS(strcpy(buf, "failtask"), XS__failtask, file); + newXS(strcpy(buf, "tasktimeleft"), XS__tasktimeleft, file); + newXS(strcpy(buf, "istaskcompleted"), XS__istaskcompleted, file); + newXS(strcpy(buf, "enabledtaskcount"), XS__enabledtaskcount, file); + newXS(strcpy(buf, "firsttaskinset"), XS__firsttaskinset, file); + newXS(strcpy(buf, "lasttaskinset"), XS__lasttaskinset, file); + newXS(strcpy(buf, "nexttaskinset"), XS__nexttaskinset, file); + newXS(strcpy(buf, "activespeaktask"), XS__activespeaktask, file); + newXS(strcpy(buf, "activespeakactivity"), XS__activespeakactivity, file); + newXS(strcpy(buf, "activetasksinset"), XS__activetasksinset, file); + newXS(strcpy(buf, "completedtasksinset"), XS__completedtasksinset, file); + newXS(strcpy(buf, "istaskappropriate"), XS__istaskappropriate, file); + newXS(strcpy(buf, "popup"), XS__popup, file); + newXS(strcpy(buf, "clearspawntimers"), XS__clearspawntimers, file); + newXS(strcpy(buf, "ze"), XS__ze, file); + 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, "createdoor"), XS__CreateDoor, file); + newXS(strcpy(buf, "modifynpcstat"), XS__ModifyNPCStat, file); + newXS(strcpy(buf, "collectitems"), XS__collectitems, file); + newXS(strcpy(buf, "updatespawntimer"), XS__UpdateSpawnTimer, file); + newXS(strcpy(buf, "MerchantSetItem"), XS__MerchantSetItem, file); + newXS(strcpy(buf, "MerchantCountItem"), XS__MerchantCountItem, file); + newXS(strcpy(buf, "varlink"), XS__varlink, file); + newXS(strcpy(buf, "saylink"), XS__saylink, file); + newXS(strcpy(buf, "getguildnamebyid"), XS__getguildnamebyid, file); + newXS(strcpy(buf, "CreateInstance"), XS__CreateInstance, file); + newXS(strcpy(buf, "DestroyInstance"), XS__DestroyInstance, file); + newXS(strcpy(buf, "GetInstanceID"), XS__GetInstanceID, file); + newXS(strcpy(buf, "AssignToInstance"), XS__AssignToInstance, file); + newXS(strcpy(buf, "AssignGroupToInstance"), XS__AssignGroupToInstance, file); + newXS(strcpy(buf, "AssignRaidToInstance"), XS__AssignRaidToInstance, file); + newXS(strcpy(buf, "MovePCInstance"), XS__MovePCInstance, file); + newXS(strcpy(buf, "FlagInstanceByGroupLeader"), XS__FlagInstanceByGroupLeader, file); + newXS(strcpy(buf, "FlagInstanceByRaidLeader"), XS__FlagInstanceByRaidLeader, file); + newXS(strcpy(buf, "SetRunning"), XS__SetRunning, file); + newXS(strcpy(buf, "IsRunning"), XS__IsRunning, file); + newXS(strcpy(buf, "IsEffectInSpell"), XS__IsEffectInSpell, file); + newXS(strcpy(buf, "IsBeneficialSpell"), XS__IsBeneficialSpell, file); + newXS(strcpy(buf, "GetSpellResistType"), XS__GetSpellResistType, file); + newXS(strcpy(buf, "GetSpellTargetType"), XS__GetSpellTargetType, file); + newXS(strcpy(buf, "FlyMode"), XS__FlyMode, file); + newXS(strcpy(buf, "factionvalue"), XS_FactionValue, file); + newXS(strcpy(buf, "checktitle"), XS__checktitle, file); + newXS(strcpy(buf, "enabletitle"), XS__enabletitle, file); + newXS(strcpy(buf, "removetitle"), XS__removetitle, file); + newXS(strcpy(buf, "wearchange"), XS__wearchange, file); + newXS(strcpy(buf, "voicetell"), XS__voicetell, file); + newXS(strcpy(buf, "LearnRecipe"), XS__LearnRecipe, file); + newXS(strcpy(buf, "SendMail"), XS__SendMail, file); + newXS(strcpy(buf, "GetZoneID"), XS__GetZoneID, file); + newXS(strcpy(buf, "GetZoneLongName"), XS__GetZoneLongName, file); + newXS(strcpy(buf, "GetTimeSeconds"), XS__GetTimeSeconds, file); + newXS(strcpy(buf, "handleturnin"), XS__handleturnin, file); + newXS(strcpy(buf, "completehandin"), XS__completehandin, file); + newXS(strcpy(buf, "resethandin"), XS__resethandin, file); + newXS(strcpy(buf, "clearhandin"), XS__clearhandin, file); + newXS(strcpy(buf, "crosszonesignalclientbycharid"), XS__crosszonesignalclientbycharid, file); + newXS(strcpy(buf, "crosszonesignalclientbyname"), XS__crosszonesignalclientbyname, file); + newXS(strcpy(buf, "crosszonemessageplayerbyname"), XS__crosszonemessageplayerbyname, file); + XSRETURN_YES; +} + +#endif +#endif diff --git a/zone/perlparser.h b/zone/perlparser.h index 2109b9365..8b1378917 100644 --- a/zone/perlparser.h +++ b/zone/perlparser.h @@ -1,46 +1 @@ -/* EQEMu: Everquest Server Emulator - Copyright (C) 2001-2004 EQEMu Development Team (http://eqemulator.org) - 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 -*/ - -//extends the perl parser to use C methods -//instead of the command queue. - -//#ifndef PERLPARSER_H -//#define PERLPARSER_H -// -//#ifdef EMBPERL -//#ifdef EMBPERL_XS -// -//#include "embparser.h" -// -//class PerlXSParser : public PerlembParser { -//public: -// PerlXSParser(); -//// ~PerlXSParser(); -// -// virtual void SendCommands(const char * pkgprefix, const char *event, uint32 npcid, Mob* other, Mob* mob, ItemInst* iteminst); -//protected: -// void map_funs(); -// -// SV *_empty_sv; -//}; -// -// -//#endif //EMBPERL_XS -//#endif //EMBPERL -// -//#endif //PERLPARSER_H