mirror of
https://github.com/EQEmu/Server.git
synced 2026-05-17 07:18:37 +00:00
Lua fixes, need to get perl working again D=
This commit is contained in:
+187
-16
@@ -7,7 +7,11 @@
|
||||
#include <map>
|
||||
|
||||
#include "lua_parser.h"
|
||||
#include "lua_item.h"
|
||||
#include "lua_iteminst.h"
|
||||
#include "lua_mob.h"
|
||||
#include "QuestParserCollection.h"
|
||||
#include "questmgr.h"
|
||||
|
||||
struct Events { };
|
||||
|
||||
@@ -27,35 +31,202 @@ void unload_encounter(std::string name) {
|
||||
parse->EventEncounter(EVENT_ENCOUNTER_UNLOAD, name, 0);
|
||||
}
|
||||
|
||||
void register_event(std::string package_name, std::string name, int evt, luabind::object func) {
|
||||
lua_registered_event e;
|
||||
e.encounter_name = name;
|
||||
e.lua_reference = func;
|
||||
e.event_id = static_cast<QuestEventID>(evt);
|
||||
|
||||
auto liter = lua_encounter_events_registered.find(package_name);
|
||||
if(liter == lua_encounter_events_registered.end()) {
|
||||
std::list<lua_registered_event> elist;
|
||||
elist.push_back(e);
|
||||
lua_encounter_events_registered[package_name] = elist;
|
||||
} else {
|
||||
std::list<lua_registered_event> elist = liter->second;
|
||||
auto iter = elist.begin();
|
||||
while(iter != elist.end()) {
|
||||
if(iter->event_id == evt && iter->encounter_name.compare(name) == 0) {
|
||||
//already registered this event for this encounter
|
||||
return;
|
||||
}
|
||||
++iter;
|
||||
}
|
||||
|
||||
elist.push_back(e);
|
||||
lua_encounter_events_registered[package_name] = elist;
|
||||
}
|
||||
}
|
||||
|
||||
void unregister_event(std::string package_name, std::string name, int evt) {
|
||||
auto liter = lua_encounter_events_registered.find(package_name);
|
||||
if(liter != lua_encounter_events_registered.end()) {
|
||||
std::list<lua_registered_event> elist = liter->second;
|
||||
auto iter = elist.begin();
|
||||
while(iter != elist.end()) {
|
||||
if(iter->event_id == evt && iter->encounter_name.compare(name) == 0) {
|
||||
iter = elist.erase(iter);
|
||||
}
|
||||
}
|
||||
lua_encounter_events_registered[package_name] = elist;
|
||||
}
|
||||
}
|
||||
|
||||
void register_npc_event(std::string name, int evt, int npc_id, luabind::object func) {
|
||||
if(luabind::type(func) == LUA_TFUNCTION) {
|
||||
std::stringstream package_name;
|
||||
package_name << "npc_" << npc_id;
|
||||
|
||||
lua_registered_event e;
|
||||
e.encounter_name = name;
|
||||
e.lua_reference = func;
|
||||
e.event_id = static_cast<QuestEventID>(evt);
|
||||
|
||||
auto liter = lua_encounter_events_registered.find(package_name.str());
|
||||
if(liter == lua_encounter_events_registered.end()) {
|
||||
std::list<lua_registered_event> elist;
|
||||
elist.push_back(e);
|
||||
lua_encounter_events_registered[package_name.str()] = elist;
|
||||
} else {
|
||||
std::list<lua_registered_event> elist = liter->second;
|
||||
elist.push_back(e);
|
||||
lua_encounter_events_registered[package_name.str()] = elist;
|
||||
}
|
||||
register_event(package_name.str(), name, evt, func);
|
||||
}
|
||||
}
|
||||
|
||||
void unregister_npc_event(std::string name, int evt, int npc_id) {
|
||||
std::stringstream package_name;
|
||||
package_name << "npc_" << npc_id;
|
||||
|
||||
unregister_event(package_name.str(), name, evt);
|
||||
}
|
||||
|
||||
void register_player_event(std::string name, int evt, luabind::object func) {
|
||||
if(luabind::type(func) == LUA_TFUNCTION) {
|
||||
register_event("player", name, evt, func);
|
||||
}
|
||||
}
|
||||
|
||||
void unregister_player_event(std::string name, int evt) {
|
||||
unregister_event("player", name, evt);
|
||||
}
|
||||
|
||||
void register_item_event(std::string name, int evt, Lua_Item item, luabind::object func) {
|
||||
const Item_Struct *itm = item;
|
||||
if(!itm) {
|
||||
return;
|
||||
}
|
||||
|
||||
std::stringstream package_name;
|
||||
package_name << "item_";
|
||||
|
||||
std::stringstream item_name;
|
||||
if(EVENT_SCALE_CALC == evt || EVENT_ITEM_ENTER_ZONE == evt)
|
||||
{
|
||||
item_name << itm->CharmFile;
|
||||
}
|
||||
else if(EVENT_ITEM_CLICK == evt || EVENT_ITEM_CLICK_CAST == evt)
|
||||
{
|
||||
item_name << "script_";
|
||||
item_name << itm->ScriptFileID;
|
||||
}
|
||||
else
|
||||
{
|
||||
item_name << "item_";
|
||||
item_name << itm->ID;
|
||||
}
|
||||
|
||||
package_name << item_name;
|
||||
|
||||
if(luabind::type(func) == LUA_TFUNCTION) {
|
||||
register_event(package_name.str(), name, evt, func);
|
||||
}
|
||||
}
|
||||
|
||||
void unregister_item_event(std::string name, int evt, Lua_Item item) {
|
||||
const Item_Struct *itm = item;
|
||||
if(!itm) {
|
||||
return;
|
||||
}
|
||||
|
||||
std::stringstream package_name;
|
||||
package_name << "item_";
|
||||
|
||||
std::stringstream item_name;
|
||||
if(EVENT_SCALE_CALC == evt || EVENT_ITEM_ENTER_ZONE == evt)
|
||||
{
|
||||
item_name << itm->CharmFile;
|
||||
}
|
||||
else if(EVENT_ITEM_CLICK == evt || EVENT_ITEM_CLICK_CAST == evt)
|
||||
{
|
||||
item_name << "script_";
|
||||
item_name << itm->ScriptFileID;
|
||||
}
|
||||
else
|
||||
{
|
||||
item_name << "item_";
|
||||
item_name << itm->ID;
|
||||
}
|
||||
|
||||
package_name << item_name;
|
||||
unregister_event(package_name.str(), name, evt);
|
||||
}
|
||||
|
||||
void register_spell_event(std::string name, int evt, int spell_id, luabind::object func) {
|
||||
if(luabind::type(func) == LUA_TFUNCTION) {
|
||||
std::stringstream package_name;
|
||||
package_name << "spell_" << spell_id;
|
||||
|
||||
register_event(package_name.str(), name, evt, func);
|
||||
}
|
||||
}
|
||||
|
||||
void unregister_spell_event(std::string name, int evt, int spell_id) {
|
||||
std::stringstream package_name;
|
||||
package_name << "spell_" << spell_id;
|
||||
|
||||
unregister_event(package_name.str(), name, evt);
|
||||
}
|
||||
|
||||
void lua_say(const char *str) {
|
||||
quest_manager.say(str);
|
||||
}
|
||||
|
||||
void lua_say(const char *str, int language) {
|
||||
quest_manager.say(str, language);
|
||||
}
|
||||
|
||||
void lua_me(const char *str) {
|
||||
quest_manager.me(str);
|
||||
}
|
||||
|
||||
void lua_summon_item(uint32 itemid, int charges = 0) {
|
||||
quest_manager.summonitem(itemid, charges);
|
||||
}
|
||||
|
||||
Lua_Mob lua_spawn2(int npc_type, int grid, int unused, double x, double y, double z, double heading) {
|
||||
return Lua_Mob(quest_manager.spawn2(npc_type, grid, unused,
|
||||
static_cast<float>(x), static_cast<float>(y), static_cast<float>(z), static_cast<float>(heading)));
|
||||
}
|
||||
|
||||
Lua_Mob lua_unique_spawn(int npc_type, int grid, int unused, double x, double y, double z, double heading = 0.0) {
|
||||
return Lua_Mob(quest_manager.unique_spawn(npc_type, grid, unused,
|
||||
static_cast<float>(x), static_cast<float>(y), static_cast<float>(z), static_cast<float>(heading)));
|
||||
}
|
||||
|
||||
Lua_Mob lua_spawn_from_spawn2(uint32 spawn2_id) {
|
||||
return Lua_Mob(quest_manager.spawn_from_spawn2(spawn2_id));
|
||||
}
|
||||
|
||||
luabind::scope lua_register_general() {
|
||||
return luabind::namespace_("eq")
|
||||
[
|
||||
luabind::def("load_encounter", &load_encounter),
|
||||
luabind::def("unload_encounter", &unload_encounter),
|
||||
luabind::def("register_npc_event", ®ister_npc_event)
|
||||
luabind::def("register_npc_event", ®ister_npc_event),
|
||||
luabind::def("unregister_npc_event", &unregister_npc_event),
|
||||
luabind::def("register_player_event", ®ister_player_event),
|
||||
luabind::def("unregister_player_event", &unregister_player_event),
|
||||
luabind::def("register_item_event", ®ister_item_event),
|
||||
luabind::def("unregister_item_event", &unregister_item_event),
|
||||
luabind::def("register_spell_event", ®ister_spell_event),
|
||||
luabind::def("unregister_spell_event", &unregister_spell_event),
|
||||
luabind::def("say", (void(*)(const char*))&lua_say),
|
||||
luabind::def("say", (void(*)(const char*, int))&lua_say),
|
||||
luabind::def("me", (void(*)(const char*))&lua_me),
|
||||
luabind::def("summon_item", (void(*)(uint32))&lua_summon_item),
|
||||
luabind::def("summon_item", (void(*)(uint32,int))&lua_summon_item),
|
||||
luabind::def("spawn2", (Lua_Mob(*)(int,int,int,double,double,double,double))&lua_spawn2),
|
||||
luabind::def("unique_spawn", (Lua_Mob(*)(int,int,int,double,double,double))&lua_unique_spawn),
|
||||
luabind::def("unique_spawn", (Lua_Mob(*)(int,int,int,double,double,double,double))&lua_unique_spawn),
|
||||
luabind::def("spawn_from_spawn2", (Lua_Mob(*)(uint32))&lua_spawn_from_spawn2)
|
||||
];
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user