mirror of
https://github.com/EQEmu/Server.git
synced 2025-12-21 10:11:30 +00:00
Starting rewrite of lua parser in earnest
This commit is contained in:
parent
d1aef18974
commit
f40b44a454
@ -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
|
||||||
@ -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
8
zone/lua/lua_client.cpp
Normal 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
8
zone/lua/lua_corpse.cpp
Normal 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
8
zone/lua/lua_door.cpp
Normal 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
37
zone/lua/lua_entity.cpp
Normal 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
88
zone/lua/lua_events.h
Normal 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
10
zone/lua/lua_forward.h
Normal 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
5
zone/lua/lua_general.cpp
Normal 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
8
zone/lua/lua_mob.cpp
Normal 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
8
zone/lua/lua_npc.cpp
Normal 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
8
zone/lua/lua_object.cpp
Normal 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
1136
zone/lua/lua_parser.cpp
Normal file
File diff suppressed because it is too large
Load Diff
@ -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
7
zone/lua/lua_structs.h
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
struct Script
|
||||||
|
{
|
||||||
|
bool Loaded;
|
||||||
|
sol::environment Env;
|
||||||
|
};
|
||||||
@ -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);
|
||||||
@ -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"
|
||||||
@ -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) {
|
||||||
1389
zone/lua_parser.cpp
1389
zone/lua_parser.cpp
File diff suppressed because it is too large
Load Diff
@ -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
|
|
||||||
Loading…
x
Reference in New Issue
Block a user