Starting rewrite of lua parser in earnest

This commit is contained in:
KimLS 2018-08-25 15:33:29 -07:00
parent d1aef18974
commit f40b44a454
63 changed files with 1625 additions and 1770 deletions

View File

@ -40,30 +40,6 @@ SET(zone_sources
horse.cpp horse.cpp
inventory.cpp inventory.cpp
loottables.cpp loottables.cpp
lua_bit.cpp
lua_corpse.cpp
lua_client.cpp
lua_door.cpp
lua_encounter.cpp
lua_entity.cpp
lua_entity_list.cpp
lua_general.cpp
lua_group.cpp
lua_hate_list.cpp
lua_inventory.cpp
lua_item.cpp
lua_iteminst.cpp
lua_mob.cpp
lua_mod.cpp
lua_npc.cpp
lua_object.cpp
lua_packet.cpp
lua_parser.cpp
lua_parser_events.cpp
lua_raid.cpp
lua_spawn.cpp
lua_spell.cpp
lua_stat_bonuses.cpp
embperl.cpp embperl.cpp
embxs.cpp embxs.cpp
entity.cpp entity.cpp
@ -156,7 +132,7 @@ SET(zone_headers
command.h command.h
common.h common.h
corpse.h corpse.h
data_bucket.h data_bucket.h
doors.h doors.h
embparser.h embparser.h
embperl.h embperl.h
@ -173,31 +149,6 @@ SET(zone_headers
hate_list.h hate_list.h
heal_rotation.h heal_rotation.h
horse.h horse.h
lua_bit.h
lua_client.h
lua_corpse.h
lua_door.h
lua_encounter.h
lua_entity.h
lua_entity_list.h
lua_general.h
lua_group.h
lua_hate_list.h
lua_inventory.h
lua_item.h
lua_iteminst.h
lua_mob.h
lua_mod.h
lua_npc.h
lua_object.h
lua_packet.h
lua_parser.h
lua_parser_events.h
lua_ptr.h
lua_raid.h
lua_spawn.h
lua_spell.h
lua_stat_bonuses.h
map.h map.h
masterentity.h masterentity.h
maxskill.h maxskill.h
@ -245,6 +196,45 @@ SET(zone_headers
zonedump.h zonedump.h
) )
IF(EQEMU_BUILD_LUA)
SET(zone_sources ${zone_sources}
lua/lua_client.cpp
lua/lua_corpse.cpp
lua/lua_door.cpp
lua/lua_entity.cpp
lua/lua_npc.cpp
lua/lua_mob.cpp
lua/lua_object.cpp
lua/lua_general.cpp
lua/lua_parser.cpp
)
SET(zone_headers ${zone_headers}
lua/lua_events.h
lua/lua_forward.h
lua/lua_parser.h
lua/lua_structs.h
)
SOURCE_GROUP(lua FILES
lua/lua_client.cpp
lua/lua_corpse.cpp
lua/lua_door.cpp
lua/lua_entity.cpp
lua/lua_events.h
lua/lua_forward.h
lua/lua_npc.cpp
lua/lua_mob.cpp
lua/lua_object.cpp
lua/lua_general.cpp
lua/lua_parser.cpp
lua/lua_parser.h
lua/lua_structs.h
)
endif()
IF(EQEMU_DEPOP_INVALIDATES_CACHE) IF(EQEMU_DEPOP_INVALIDATES_CACHE)
ADD_DEFINITIONS(-DDEPOP_INVALIDATES_NPC_TYPES_CACHE) ADD_DEFINITIONS(-DDEPOP_INVALIDATES_NPC_TYPES_CACHE)
ENDIF(EQEMU_DEPOP_INVALIDATES_CACHE) ENDIF(EQEMU_DEPOP_INVALIDATES_CACHE)

8
zone/lua/lua_client.cpp Normal file
View File

@ -0,0 +1,8 @@
#include <sol.hpp>
#include "../client.h"
void lua_register_client(sol::state *state) {
state->new_usertype<Client>("Client",
sol::base_classes, sol::bases<Mob, Entity>()
);
}

8
zone/lua/lua_corpse.cpp Normal file
View File

@ -0,0 +1,8 @@
#include <sol.hpp>
#include "../corpse.h"
void lua_register_corpse(sol::state *state) {
state->new_usertype<Corpse>("Corpse",
sol::base_classes, sol::bases<Mob, Entity>()
);
}

8
zone/lua/lua_door.cpp Normal file
View File

@ -0,0 +1,8 @@
#include <sol.hpp>
#include "../doors.h"
void lua_register_doors(sol::state *state) {
state->new_usertype<Doors>("Doors",
sol::base_classes, sol::bases<Entity>()
);
}

37
zone/lua/lua_entity.cpp Normal file
View File

@ -0,0 +1,37 @@
#include <sol.hpp>
#include "../entity.h"
#include "../client.h"
#include "../npc.h"
#include "../corpse.h"
#include "../doors.h"
#include "../object.h"
void lua_register_entity(sol::state *state) {
state->new_usertype<Entity>("Entity",
"IsClient", &Entity::IsClient,
"IsNPC", &Entity::IsNPC,
"IsMob", &Entity::IsMob,
"IsMerc", &Entity::IsMerc,
"IsCorpse", &Entity::IsCorpse,
"IsPlayerCorpse", &Entity::IsPlayerCorpse,
"IsNPCCorpse", &Entity::IsNPCCorpse,
"IsObject", &Entity::IsObject,
"IsDoor", &Entity::IsDoor,
"IsTrap", &Entity::IsTrap,
"IsBeacon", &Entity::IsBeacon,
"IsEncounter", &Entity::IsEncounter,
"IsBot", &Entity::IsBot,
"IsAura", &Entity::IsAura,
"CastToClient", (Client*(Entity::*)())&Entity::CastToClient,
"CastToMob", (Mob*(Entity::*)())&Entity::CastToMob,
//"CastToMerc", (Merc*(Entity::*)())&Entity::CastToMerc,
"CastToCorpse", (Corpse*(Entity::*)())&Entity::CastToCorpse,
"CastToObject", (Object*(Entity::*)())&Entity::CastToObject,
"CastToDoors", (Doors*(Entity::*)())&Entity::CastToDoors,
//"CastToTrap", (Trap*(Entity::*)())&Entity::CastToTrap,
//"CastToBeacon", (Beacon*(Entity::*)())&Entity::CastToBeacon,
//"CastToEncounter", (Encounter*(Entity::*)())&Entity::CastToEncounter,
"GetID", &Entity::GetID,
"GetName", &Entity::GetName
);
}

88
zone/lua/lua_events.h Normal file
View File

@ -0,0 +1,88 @@
#pragma once
const char *LuaEvents[_LargestEventID] = {
"event_say",
"event_trade",
"event_death",
"event_spawn",
"event_attack",
"event_combat",
"event_aggro",
"event_slay",
"event_npc_slay",
"event_waypoint_arrive",
"event_waypoint_depart",
"event_timer",
"event_signal",
"event_hp",
"event_enter",
"event_exit",
"event_enter_zone",
"event_click_door",
"event_loot",
"event_zone",
"event_level_up",
"event_killed_merit",
"event_cast_on",
"event_task_accepted",
"event_task_stage_complete",
"event_task_update",
"event_task_complete",
"event_task_fail",
"event_aggro_say",
"event_player_pickup",
"event_popup_response",
"event_environmental_damage",
"event_proximity_say",
"event_cast",
"event_cast_begin",
"event_scale_calc",
"event_item_enter_zone",
"event_target_change",
"event_hate_list",
"event_spell_effect",
"event_spell_effect",
"event_spell_buff_tic",
"event_spell_buff_tic",
"event_spell_fade",
"event_spell_effect_translocate_complete",
"event_combine_success",
"event_combine_failure",
"event_item_click",
"event_item_click_cast",
"event_group_change",
"event_forage_success",
"event_forage_failure",
"event_fish_start",
"event_fish_success",
"event_fish_failure",
"event_click_object",
"event_discover_item",
"event_disconnect",
"event_connect",
"event_item_tick",
"event_duel_win",
"event_duel_lose",
"event_encounter_load",
"event_encounter_unload",
"event_command",
"event_drop_item",
"event_destroy_item",
"event_feign_death",
"event_weapon_proc",
"event_equip_item",
"event_unequip_item",
"event_augment_item",
"event_unaugment_item",
"event_augment_insert",
"event_augment_remove",
"event_enter_area",
"event_leave_area",
"event_respawn",
"event_death_complete",
"event_unhandled_opcode",
"event_tick",
"event_spawn_zone",
"event_death_zone",
"event_use_skill"
};

10
zone/lua/lua_forward.h Normal file
View File

@ -0,0 +1,10 @@
#pragma once
void lua_register_general(sol::state *state);
void lua_register_entity(sol::state *state);
void lua_register_mob(sol::state *state);
void lua_register_npc(sol::state *state);
void lua_register_client(sol::state *state);
void lua_register_doors(sol::state *state);
void lua_register_corpse(sol::state *state);
void lua_register_object(sol::state *state);

5
zone/lua/lua_general.cpp Normal file
View File

@ -0,0 +1,5 @@
#include <sol.hpp>
void lua_register_general(sol::state *state) {
auto table = state->create_named_table("eqemu");
}

8
zone/lua/lua_mob.cpp Normal file
View File

@ -0,0 +1,8 @@
#include <sol.hpp>
#include "../mob.h"
void lua_register_mob(sol::state *state) {
state->new_usertype<Mob>("Mob",
sol::base_classes, sol::bases<Entity>()
);
}

8
zone/lua/lua_npc.cpp Normal file
View File

@ -0,0 +1,8 @@
#include <sol.hpp>
#include "../npc.h"
void lua_register_npc(sol::state *state) {
state->new_usertype<NPC>("NPC",
sol::base_classes, sol::bases<Mob, Entity>()
);
}

8
zone/lua/lua_object.cpp Normal file
View File

@ -0,0 +1,8 @@
#include <sol.hpp>
#include "../object.h"
void lua_register_object(sol::state *state) {
state->new_usertype<Object>("Object",
sol::base_classes, sol::bases<Entity>()
);
}

1136
zone/lua/lua_parser.cpp Normal file

File diff suppressed because it is too large Load Diff

View File

@ -1,20 +1,9 @@
#ifndef _EQE_LUA_PARSER_H #pragma once
#define _EQE_LUA_PARSER_H #include "../quest_parser_collection.h"
#ifdef LUA_EQEMU #include "../quest_interface.h"
#include "quest_parser_collection.h"
#include "quest_interface.h"
#include <string> #include <string>
#include <list> #include <sol_forward.hpp>
#include <map>
#include <exception>
#include "zone_config.h"
#include "lua_mod.h"
extern const ZoneConfig *Config;
struct lua_State;
class Client; class Client;
class NPC; class NPC;
@ -23,15 +12,6 @@ namespace EQEmu
class ItemInstance; class ItemInstance;
} }
#include "lua_parser_events.h"
struct lua_registered_event;
namespace luabind {
namespace adl {
class object;
}
}
class LuaParser : public QuestInterface { class LuaParser : public QuestInterface {
public: public:
~LuaParser(); ~LuaParser();
@ -87,7 +67,7 @@ public:
return &inst; return &inst;
} }
bool HasFunction(std::string function, std::string package_name); bool HasFunction(const std::string &function, const std::string &package_name);
//Mod Extensions //Mod Extensions
void MeleeMitigation(Mob *self, Mob *attacker, DamageHitInfo &hit, ExtraAttackOptions *opts, bool &ignoreDefault); void MeleeMitigation(Mob *self, Mob *attacker, DamageHitInfo &hit, ExtraAttackOptions *opts, bool &ignoreDefault);
@ -102,27 +82,25 @@ public:
private: private:
LuaParser(); LuaParser();
LuaParser(const LuaParser&); LuaParser(const LuaParser&) = delete;
LuaParser& operator=(const LuaParser&); LuaParser& operator=(const LuaParser&) = delete;
int _EventNPC(std::string package_name, QuestEventID evt, NPC* npc, Mob *init, std::string data, uint32 extra_data, int _EventNPC(std::string package_name, QuestEventID evt, NPC* npc, Mob *init, std::string data, uint32 extra_data,
std::vector<EQEmu::Any> *extra_pointers, luabind::adl::object *l_func = nullptr); std::vector<EQEmu::Any> *extra_pointers, sol::function *l_func = nullptr);
int _EventPlayer(std::string package_name, QuestEventID evt, Client *client, std::string data, uint32 extra_data, int _EventPlayer(std::string package_name, QuestEventID evt, Client *client, std::string data, uint32 extra_data,
std::vector<EQEmu::Any> *extra_pointers, luabind::adl::object *l_func = nullptr); std::vector<EQEmu::Any> *extra_pointers, sol::function *l_func = nullptr);
int _EventItem(std::string package_name, QuestEventID evt, Client *client, EQEmu::ItemInstance *item, Mob *mob, std::string data, int _EventItem(std::string package_name, QuestEventID evt, Client *client, EQEmu::ItemInstance *item, Mob *mob, std::string data,
uint32 extra_data, std::vector<EQEmu::Any> *extra_pointers, luabind::adl::object *l_func = nullptr); uint32 extra_data, std::vector<EQEmu::Any> *extra_pointers, sol::function *l_func = nullptr);
int _EventSpell(std::string package_name, QuestEventID evt, NPC* npc, Client *client, uint32 spell_id, uint32 extra_data, int _EventSpell(std::string package_name, QuestEventID evt, NPC* npc, Client *client, uint32 spell_id, uint32 extra_data,
std::vector<EQEmu::Any> *extra_pointers, luabind::adl::object *l_func = nullptr); std::vector<EQEmu::Any> *extra_pointers, sol::function *l_func = nullptr);
int _EventEncounter(std::string package_name, QuestEventID evt, std::string encounter_name, std::string data, uint32 extra_data, int _EventEncounter(std::string package_name, QuestEventID evt, std::string encounter_name, std::string data, uint32 extra_data,
std::vector<EQEmu::Any> *extra_pointers); std::vector<EQEmu::Any> *extra_pointers);
void LoadScript(std::string filename, std::string package_name); void LoadScript(const std::string &filename);
void MapFunctions(lua_State *L); void LoadScript(const std::string &filename, const std::string &package_name);
void MapFunctions();
QuestEventID ConvertLuaEvent(QuestEventID evt); QuestEventID ConvertLuaEvent(QuestEventID evt);
struct Implementation; struct Implementation;
std::unique_ptr<Implementation> mImpl; std::unique_ptr<Implementation> mImpl;
}; };
#endif
#endif

7
zone/lua/lua_structs.h Normal file
View File

@ -0,0 +1,7 @@
#pragma once
struct Script
{
bool Loaded;
sol::environment Env;
};

View File

@ -37,240 +37,240 @@ struct Filters { };
struct MessageTypes { }; struct MessageTypes { };
struct Rule { }; struct Rule { };
struct lua_registered_event { //struct lua_registered_event {
std::string encounter_name; // std::string encounter_name;
luabind::adl::object lua_reference; // luabind::adl::object lua_reference;
QuestEventID event_id; // QuestEventID event_id;
}; //};
//
extern std::map<std::string, std::list<lua_registered_event>> lua_encounter_events_registered; //extern std::map<std::string, std::list<lua_registered_event>> lua_encounter_events_registered;
extern std::map<std::string, bool> lua_encounters_loaded; //extern std::map<std::string, bool> lua_encounters_loaded;
extern std::map<std::string, Encounter *> lua_encounters; //extern std::map<std::string, Encounter *> lua_encounters;
//
extern void MapOpcodes(); //extern void MapOpcodes();
extern void ClearMappedOpcode(EmuOpcode op); //extern void ClearMappedOpcode(EmuOpcode op);
//
void unregister_event(std::string package_name, std::string name, int evt); //void unregister_event(std::string package_name, std::string name, int evt);
//
void load_encounter(std::string name) { //void load_encounter(std::string name) {
if(lua_encounters_loaded.count(name) > 0) // if(lua_encounters_loaded.count(name) > 0)
return; // return;
auto enc = new Encounter(name.c_str()); // auto enc = new Encounter(name.c_str());
entity_list.AddEncounter(enc); // entity_list.AddEncounter(enc);
lua_encounters[name] = enc; // lua_encounters[name] = enc;
lua_encounters_loaded[name] = true; // lua_encounters_loaded[name] = true;
parse->EventEncounter(EVENT_ENCOUNTER_LOAD, name, "", 0); // parse->EventEncounter(EVENT_ENCOUNTER_LOAD, name, "", 0);
} //}
//
void load_encounter_with_data(std::string name, std::string info_str) { //void load_encounter_with_data(std::string name, std::string info_str) {
if(lua_encounters_loaded.count(name) > 0) // if(lua_encounters_loaded.count(name) > 0)
return; // return;
auto enc = new Encounter(name.c_str()); // auto enc = new Encounter(name.c_str());
entity_list.AddEncounter(enc); // entity_list.AddEncounter(enc);
lua_encounters[name] = enc; // lua_encounters[name] = enc;
lua_encounters_loaded[name] = true; // lua_encounters_loaded[name] = true;
std::vector<EQEmu::Any> info_ptrs; // std::vector<EQEmu::Any> info_ptrs;
info_ptrs.push_back(&info_str); // info_ptrs.push_back(&info_str);
parse->EventEncounter(EVENT_ENCOUNTER_LOAD, name, "", 0, &info_ptrs); // parse->EventEncounter(EVENT_ENCOUNTER_LOAD, name, "", 0, &info_ptrs);
} //}
//
void unload_encounter(std::string name) { //void unload_encounter(std::string name) {
if(lua_encounters_loaded.count(name) == 0) // if(lua_encounters_loaded.count(name) == 0)
return; // return;
//
auto liter = lua_encounter_events_registered.begin(); // auto liter = lua_encounter_events_registered.begin();
while(liter != lua_encounter_events_registered.end()) { // while(liter != lua_encounter_events_registered.end()) {
std::list<lua_registered_event> &elist = liter->second; // std::list<lua_registered_event> &elist = liter->second;
auto iter = elist.begin(); // auto iter = elist.begin();
while(iter != elist.end()) { // while(iter != elist.end()) {
if((*iter).encounter_name.compare(name) == 0) { // if((*iter).encounter_name.compare(name) == 0) {
iter = elist.erase(iter); // iter = elist.erase(iter);
} else { // } else {
++iter; // ++iter;
} // }
} // }
//
if(elist.size() == 0) { // if(elist.size() == 0) {
lua_encounter_events_registered.erase(liter++); // lua_encounter_events_registered.erase(liter++);
} else { // } else {
++liter; // ++liter;
} // }
} // }
//
lua_encounters[name]->Depop(); // lua_encounters[name]->Depop();
lua_encounters.erase(name); // lua_encounters.erase(name);
lua_encounters_loaded.erase(name); // lua_encounters_loaded.erase(name);
parse->EventEncounter(EVENT_ENCOUNTER_UNLOAD, name, "", 0); // parse->EventEncounter(EVENT_ENCOUNTER_UNLOAD, name, "", 0);
} //}
//
void unload_encounter_with_data(std::string name, std::string info_str) { //void unload_encounter_with_data(std::string name, std::string info_str) {
if(lua_encounters_loaded.count(name) == 0) // if(lua_encounters_loaded.count(name) == 0)
return; // return;
//
auto liter = lua_encounter_events_registered.begin(); // auto liter = lua_encounter_events_registered.begin();
while(liter != lua_encounter_events_registered.end()) { // while(liter != lua_encounter_events_registered.end()) {
std::list<lua_registered_event> &elist = liter->second; // std::list<lua_registered_event> &elist = liter->second;
auto iter = elist.begin(); // auto iter = elist.begin();
while(iter != elist.end()) { // while(iter != elist.end()) {
if((*iter).encounter_name.compare(name) == 0) { // if((*iter).encounter_name.compare(name) == 0) {
iter = elist.erase(iter); // iter = elist.erase(iter);
} // }
else { // else {
++iter; // ++iter;
} // }
} // }
//
if(elist.size() == 0) { // if(elist.size() == 0) {
lua_encounter_events_registered.erase(liter++); // lua_encounter_events_registered.erase(liter++);
} // }
else { // else {
++liter; // ++liter;
} // }
} // }
//
lua_encounters[name]->Depop(); // lua_encounters[name]->Depop();
lua_encounters.erase(name); // lua_encounters.erase(name);
lua_encounters_loaded.erase(name); // lua_encounters_loaded.erase(name);
std::vector<EQEmu::Any> info_ptrs; // std::vector<EQEmu::Any> info_ptrs;
info_ptrs.push_back(&info_str); // info_ptrs.push_back(&info_str);
parse->EventEncounter(EVENT_ENCOUNTER_UNLOAD, name, "", 0, &info_ptrs); // parse->EventEncounter(EVENT_ENCOUNTER_UNLOAD, name, "", 0, &info_ptrs);
} //}
//
void register_event(std::string package_name, std::string name, int evt, luabind::adl::object func) { //void register_event(std::string package_name, std::string name, int evt, luabind::adl::object func) {
if(lua_encounters_loaded.count(name) == 0) // if(lua_encounters_loaded.count(name) == 0)
return; // return;
//
unregister_event(package_name, name, evt); // unregister_event(package_name, name, evt);
//
lua_registered_event e; // lua_registered_event e;
e.encounter_name = name; // e.encounter_name = name;
e.lua_reference = func; // e.lua_reference = func;
e.event_id = static_cast<QuestEventID>(evt); // e.event_id = static_cast<QuestEventID>(evt);
//
auto liter = lua_encounter_events_registered.find(package_name); // auto liter = lua_encounter_events_registered.find(package_name);
if(liter == lua_encounter_events_registered.end()) { // if(liter == lua_encounter_events_registered.end()) {
std::list<lua_registered_event> elist; // std::list<lua_registered_event> elist;
elist.push_back(e); // elist.push_back(e);
lua_encounter_events_registered[package_name] = elist; // lua_encounter_events_registered[package_name] = elist;
} else { // } else {
std::list<lua_registered_event> &elist = liter->second; // std::list<lua_registered_event> &elist = liter->second;
elist.push_back(e); // elist.push_back(e);
} // }
} //}
//
void unregister_event(std::string package_name, std::string name, int evt) { //void unregister_event(std::string package_name, std::string name, int evt) {
auto liter = lua_encounter_events_registered.find(package_name); // auto liter = lua_encounter_events_registered.find(package_name);
if(liter != lua_encounter_events_registered.end()) { // if(liter != lua_encounter_events_registered.end()) {
std::list<lua_registered_event> elist = liter->second; // std::list<lua_registered_event> elist = liter->second;
auto iter = elist.begin(); // auto iter = elist.begin();
while(iter != elist.end()) { // while(iter != elist.end()) {
if(iter->event_id == evt && iter->encounter_name.compare(name) == 0) { // if(iter->event_id == evt && iter->encounter_name.compare(name) == 0) {
iter = elist.erase(iter); // iter = elist.erase(iter);
break; // break;
} // }
++iter; // ++iter;
} // }
lua_encounter_events_registered[package_name] = elist; // lua_encounter_events_registered[package_name] = elist;
} // }
} //}
//
void register_npc_event(std::string name, int evt, int npc_id, luabind::adl::object func) { //void register_npc_event(std::string name, int evt, int npc_id, luabind::adl::object func) {
if(luabind::type(func) == LUA_TFUNCTION) { // if(luabind::type(func) == LUA_TFUNCTION) {
std::stringstream package_name; // std::stringstream package_name;
package_name << "npc_" << npc_id; // package_name << "npc_" << npc_id;
//
register_event(package_name.str(), name, evt, func); // register_event(package_name.str(), name, evt, func);
} // }
} //}
//
void register_npc_event(int evt, int npc_id, luabind::adl::object func) { //void register_npc_event(int evt, int npc_id, luabind::adl::object func) {
std::string name = quest_manager.GetEncounter(); // std::string name = quest_manager.GetEncounter();
register_npc_event(name, evt, npc_id, func); // register_npc_event(name, evt, npc_id, func);
} //}
//
void unregister_npc_event(std::string name, int evt, int npc_id) { //void unregister_npc_event(std::string name, int evt, int npc_id) {
std::stringstream package_name; // std::stringstream package_name;
package_name << "npc_" << npc_id; // package_name << "npc_" << npc_id;
//
unregister_event(package_name.str(), name, evt); // unregister_event(package_name.str(), name, evt);
} //}
//
void unregister_npc_event(int evt, int npc_id) { //void unregister_npc_event(int evt, int npc_id) {
std::string name = quest_manager.GetEncounter(); // std::string name = quest_manager.GetEncounter();
unregister_npc_event(name, evt, npc_id); // unregister_npc_event(name, evt, npc_id);
} //}
//
void register_player_event(std::string name, int evt, luabind::adl::object func) { //void register_player_event(std::string name, int evt, luabind::adl::object func) {
if(luabind::type(func) == LUA_TFUNCTION) { // if(luabind::type(func) == LUA_TFUNCTION) {
register_event("player", name, evt, func); // register_event("player", name, evt, func);
} // }
} //}
//
void register_player_event(int evt, luabind::adl::object func) { //void register_player_event(int evt, luabind::adl::object func) {
std::string name = quest_manager.GetEncounter(); // std::string name = quest_manager.GetEncounter();
register_player_event(name, evt, func); // register_player_event(name, evt, func);
} //}
//
void unregister_player_event(std::string name, int evt) { //void unregister_player_event(std::string name, int evt) {
unregister_event("player", name, evt); // unregister_event("player", name, evt);
} //}
//
void unregister_player_event(int evt) { //void unregister_player_event(int evt) {
std::string name = quest_manager.GetEncounter(); // std::string name = quest_manager.GetEncounter();
unregister_player_event(name, evt); // unregister_player_event(name, evt);
} //}
//
void register_item_event(std::string name, int evt, int item_id, luabind::adl::object func) { //void register_item_event(std::string name, int evt, int item_id, luabind::adl::object func) {
std::string package_name = "item_"; // std::string package_name = "item_";
package_name += std::to_string(item_id); // package_name += std::to_string(item_id);
//
if(luabind::type(func) == LUA_TFUNCTION) { // if(luabind::type(func) == LUA_TFUNCTION) {
register_event(package_name, name, evt, func); // register_event(package_name, name, evt, func);
} // }
} //}
//
void register_item_event(int evt, int item_id, luabind::adl::object func) { //void register_item_event(int evt, int item_id, luabind::adl::object func) {
std::string name = quest_manager.GetEncounter(); // std::string name = quest_manager.GetEncounter();
register_item_event(name, evt, item_id, func); // register_item_event(name, evt, item_id, func);
} //}
//
void unregister_item_event(std::string name, int evt, int item_id) { //void unregister_item_event(std::string name, int evt, int item_id) {
std::string package_name = "item_"; // std::string package_name = "item_";
package_name += std::to_string(item_id); // package_name += std::to_string(item_id);
//
unregister_event(package_name, name, evt); // unregister_event(package_name, name, evt);
} //}
//
void unregister_item_event(int evt, int item_id) { //void unregister_item_event(int evt, int item_id) {
std::string name = quest_manager.GetEncounter(); // std::string name = quest_manager.GetEncounter();
unregister_item_event(name, evt, item_id); // unregister_item_event(name, evt, item_id);
} //}
//
void register_spell_event(std::string name, int evt, int spell_id, luabind::adl::object func) { //void register_spell_event(std::string name, int evt, int spell_id, luabind::adl::object func) {
if(luabind::type(func) == LUA_TFUNCTION) { // if(luabind::type(func) == LUA_TFUNCTION) {
std::stringstream package_name; // std::stringstream package_name;
package_name << "spell_" << spell_id; // package_name << "spell_" << spell_id;
//
register_event(package_name.str(), name, evt, func); // register_event(package_name.str(), name, evt, func);
} // }
} //}
//
void register_spell_event(int evt, int spell_id, luabind::adl::object func) { //void register_spell_event(int evt, int spell_id, luabind::adl::object func) {
std::string name = quest_manager.GetEncounter(); // std::string name = quest_manager.GetEncounter();
register_spell_event(name, evt, spell_id, func); // register_spell_event(name, evt, spell_id, func);
} //}
//
void unregister_spell_event(std::string name, int evt, int spell_id) { //void unregister_spell_event(std::string name, int evt, int spell_id) {
std::stringstream package_name; // std::stringstream package_name;
package_name << "spell_" << spell_id; // package_name << "spell_" << spell_id;
//
unregister_event(package_name.str(), name, evt); // unregister_event(package_name.str(), name, evt);
} //}
//
void unregister_spell_event(int evt, int spell_id) { //void unregister_spell_event(int evt, int spell_id) {
std::string name = quest_manager.GetEncounter(); // std::string name = quest_manager.GetEncounter();
unregister_spell_event(name, evt, spell_id); // unregister_spell_event(name, evt, spell_id);
} //}
Lua_Mob lua_spawn2(int npc_type, int grid, int unused, double x, double y, double z, double heading) { Lua_Mob lua_spawn2(int npc_type, int grid, int unused, double x, double y, double z, double heading) {
auto position = glm::vec4(x, y, z, heading); auto position = glm::vec4(x, y, z, heading);

View File

@ -2,11 +2,11 @@
#include <luabind/luabind.hpp> #include <luabind/luabind.hpp>
#include <luabind/object.hpp> #include <luabind/object.hpp>
#include "../common/spdat.h" #include "../../common/spdat.h"
#include "masterentity.h" #include "../masterentity.h"
#include "questmgr.h" #include "../questmgr.h"
#include "zone.h" #include "../zone.h"
#include "zone_config.h" #include "../zone_config.h"
#include "lua_parser.h" #include "lua_parser.h"
#include "lua_mod.h" #include "lua_mod.h"

View File

@ -3,7 +3,7 @@
#include "lua.hpp" #include "lua.hpp"
#include <luabind/luabind.hpp> #include <luabind/luabind.hpp>
#include "../common/spdat.h" #include "../../common/spdat.h"
#include "lua_spell.h" #include "lua_spell.h"
Lua_Spell::Lua_Spell(int id) { Lua_Spell::Lua_Spell(int id) {

File diff suppressed because it is too large Load Diff

View File

@ -1,55 +0,0 @@
#ifndef EQEMU_LUA_PTR_H
#define EQEMU_LUA_PTR_H
#ifdef LUA_EQEMU
#ifndef EQEMU_UNSAFE_LUA
#define Lua_Safe_Call_Void() if(!d_) { return; } NativeType *self = reinterpret_cast<NativeType*>(d_)
#define Lua_Safe_Call_Bool() if(!d_) { return false; } NativeType *self = reinterpret_cast<NativeType*>(d_)
#define Lua_Safe_Call_Int() if(!d_) { return 0; } NativeType *self = reinterpret_cast<NativeType*>(d_)
#define Lua_Safe_Call_Real() if(!d_) { return 0.0; } NativeType *self = reinterpret_cast<NativeType*>(d_)
#define Lua_Safe_Call_String() if(!d_) { return ""; } NativeType *self = reinterpret_cast<NativeType*>(d_)
#define Lua_Safe_Call_Class(type) if(!d_) { return type(); } NativeType *self = reinterpret_cast<NativeType*>(d_)
#else
#define Lua_Safe_Call_Void() NativeType *self = reinterpret_cast<NativeType*>(d_)
#define Lua_Safe_Call_Bool() NativeType *self = reinterpret_cast<NativeType*>(d_)
#define Lua_Safe_Call_Int() NativeType *self = reinterpret_cast<NativeType*>(d_)
#define Lua_Safe_Call_Real() NativeType *self = reinterpret_cast<NativeType*>(d_)
#define Lua_Safe_Call_String() NativeType *self = reinterpret_cast<NativeType*>(d_)
#define Lua_Safe_Call_Class(type) NativeType *self = reinterpret_cast<NativeType*>(d_)
#endif
template<typename T>
class Lua_Ptr
{
public:
Lua_Ptr() {
}
Lua_Ptr(T *d) : d_(d) {
}
~Lua_Ptr() {
}
T *GetLuaPtrData() {
return d_;
}
void SetLuaPtrData(T *d) {
d_ = d;
}
bool Null() {
return d_ == nullptr;
}
bool Valid() {
return d_ != nullptr;
}
protected:
T *d_;
};
#endif
#endif