From 1f265af1e784c9c1e95f6059e0661f63c59637c2 Mon Sep 17 00:00:00 2001 From: KimLS Date: Fri, 17 May 2013 09:49:02 -0700 Subject: [PATCH] Hate list stuff, need to make it more efficient --- zone/lua_entity.h | 4 +++- zone/lua_hate_entry.h | 19 +++++++++++++++++++ zone/lua_hate_list.h | 11 +++++++++++ zone/lua_mob.cpp | 22 ++++++++++++++++++++++ zone/lua_mob.h | 2 ++ zone/lua_parser.cpp | 42 +++++++++++++++++++----------------------- zone/merc.cpp | 23 ----------------------- 7 files changed, 76 insertions(+), 47 deletions(-) create mode 100644 zone/lua_hate_entry.h create mode 100644 zone/lua_hate_list.h diff --git a/zone/lua_entity.h b/zone/lua_entity.h index afddc9798..f1105b347 100644 --- a/zone/lua_entity.h +++ b/zone/lua_entity.h @@ -8,6 +8,7 @@ class Entity; class Lua_Client; class Lua_NPC; class Lua_Mob; +struct Lua_HateList; //class Lua_Merc; //class Lua_Corpse; //class Lua_Object; @@ -24,7 +25,8 @@ class Lua_Mob; #define Lua_Safe_Call_Entity() if(!d_) { return Lua_Entity(); } NativeType *self = reinterpret_cast(d_) #define Lua_Safe_Call_Mob() if(!d_) { return Lua_Mob(); } NativeType *self = reinterpret_cast(d_) #define Lua_Safe_Call_NPC() if(!d_) { return Lua_NPC(); } NativeType *self = reinterpret_cast(d_) -#define Lua_Safe_Call_Client() if(!d_) { return Lua_Client(); } NativeType *self = reinterpret_cast(d_) +#define Lua_Safe_Call_Client() if(!d_) { return Lua_Client(); } NativeType *self = reinterpret_cast(d_) +#define Lua_Safe_Call_HateList() if(!d_) { return Lua_HateList(); } NativeType *self = reinterpret_cast(d_) class Lua_Entity : public Lua_Ptr { diff --git a/zone/lua_hate_entry.h b/zone/lua_hate_entry.h new file mode 100644 index 000000000..6b6337bad --- /dev/null +++ b/zone/lua_hate_entry.h @@ -0,0 +1,19 @@ +#ifndef EQEMU_LUA_HATE_ENTRY_H +#define EQEMU_LUA_HATE_ENTRY_H +#ifdef LUA_EQEMU + +class Lua_Mob; + +struct Lua_HateEntry +{ + Lua_HateEntry() { } + virtual ~Lua_HateEntry() { } + + Lua_Mob ent; + int damage; + int hate; + bool frenzy; +}; + +#endif +#endif diff --git a/zone/lua_hate_list.h b/zone/lua_hate_list.h new file mode 100644 index 000000000..e4eb347b1 --- /dev/null +++ b/zone/lua_hate_list.h @@ -0,0 +1,11 @@ +#ifndef EQEMU_LUA_HATE_LIST_H +#define EQEMU_LUA_HATE_LIST_H +#ifdef LUA_EQEMU + +struct Lua_HateList +{ + std::vector entries; +}; + +#endif +#endif diff --git a/zone/lua_mob.cpp b/zone/lua_mob.cpp index 70123f137..7530a0132 100644 --- a/zone/lua_mob.cpp +++ b/zone/lua_mob.cpp @@ -2,6 +2,8 @@ #include "masterentity.h" #include "lua_mob.h" +#include "lua_hate_entry.h" +#include "lua_hate_list.h" #include "lua_client.h" const char *Lua_Mob::GetName() { @@ -751,5 +753,25 @@ Lua_Mob Lua_Mob::GetOwner() { return Lua_Mob(self->GetOwner()); } +Lua_HateList Lua_Mob::GetHateList() { + Lua_Safe_Call_HateList(); + Lua_HateList ret; + + std::list h_list; + self->GetHateList(h_list); + auto iter = h_list.begin(); + while(iter != h_list.end()) { + tHateEntry *ent = (*iter); + Lua_HateEntry e; + e.ent = Lua_Mob(ent->ent); + e.damage = ent->damage; + e.hate = ent->hate; + e.frenzy = ent->bFrenzy; + ret.entries.push_back(e); + ++iter; + } + + return ret; +} #endif diff --git a/zone/lua_mob.h b/zone/lua_mob.h index f12d66c3a..c9ae3cd57 100644 --- a/zone/lua_mob.h +++ b/zone/lua_mob.h @@ -5,6 +5,7 @@ #include "lua_entity.h" class Mob; +struct Lua_HateList; class Lua_Mob : public Lua_Entity { @@ -172,6 +173,7 @@ public: void SpellEffect(Lua_Mob caster, int spell_id, double partial); Lua_Mob GetPet(); Lua_Mob GetOwner(); + Lua_HateList GetHateList(); }; #endif diff --git a/zone/lua_parser.cpp b/zone/lua_parser.cpp index 83456929e..b75473fed 100644 --- a/zone/lua_parser.cpp +++ b/zone/lua_parser.cpp @@ -2,21 +2,26 @@ #include "lua.hpp" #include +#include #include +#include +#include +#include +#include #include "masterentity.h" #include "../common/spdat.h" #include "../common/seperator.h" #include "lua_entity.h" #include "lua_mob.h" +#include "lua_hate_entry.h" +#include "lua_hate_list.h" #include "lua_client.h" #include "lua_npc.h" #include "lua_item.h" +#include "lua_spell.h" #include "zone.h" -#include -#include -#include #include "lua_parser.h" const char *LuaEvents[_LargestEventID] = { @@ -888,6 +893,7 @@ void LuaParser::MapFunctions(lua_State *L) { .def("SpellFinished", (bool(Lua_Mob::*)(int,Lua_Mob,int,int,uint32,int))&Lua_Mob::SpellFinished) .def("SpellFinished", (bool(Lua_Mob::*)(int,Lua_Mob,int,int,uint32,int,bool))&Lua_Mob::SpellFinished) .def("SpellEffect", &Lua_Mob::SpellEffect) + .def("GetHateList", &Lua_Mob::GetHateList) , luabind::class_("Client") @@ -896,29 +902,19 @@ void LuaParser::MapFunctions(lua_State *L) { luabind::class_("NPC") .def(luabind::constructor<>()), - //luabind::class_("Trade") - // .def(luabind::constructor<>()) - // .def_readwrite("item1", &Lua_Trade::item1_) - // .def_readwrite("item2", &Lua_Trade::item2_) - // .def_readwrite("item3", &Lua_Trade::item3_) - // .def_readwrite("item4", &Lua_Trade::item4_) - // .def_readwrite("item1_charges", &Lua_Trade::item1_charges_) - // .def_readwrite("item2_charges", &Lua_Trade::item2_charges_) - // .def_readwrite("item3_charges", &Lua_Trade::item3_charges_) - // .def_readwrite("item4_charges", &Lua_Trade::item4_charges_) - // .def_readwrite("item1_attuned", &Lua_Trade::item1_attuned_) - // .def_readwrite("item2_attuned", &Lua_Trade::item2_attuned_) - // .def_readwrite("item3_attuned", &Lua_Trade::item3_attuned_) - // .def_readwrite("item4_attuned", &Lua_Trade::item4_attuned_) - // .def_readwrite("platinum", &Lua_Trade::platinum_) - // .def_readwrite("gold", &Lua_Trade::gold_) - // .def_readwrite("silver", &Lua_Trade::silver_) - // .def_readwrite("copper", &Lua_Trade::copper_), - luabind::class_("Item") .def(luabind::constructor<>()) .property("null", &Lua_Entity::Null) - .property("valid", &Lua_Entity::Valid) + .property("valid", &Lua_Entity::Valid), + + luabind::class_("HateEntry") + .def_readwrite("ent", &Lua_HateEntry::ent) + .def_readwrite("damage", &Lua_HateEntry::damage) + .def_readwrite("hate", &Lua_HateEntry::hate) + .def_readwrite("frenzy", &Lua_HateEntry::frenzy), + + luabind::class_("HateList") + .def_readwrite("entries", &Lua_HateList::entries, luabind::return_stl_iterator) ]; } catch(std::exception &ex) { diff --git a/zone/merc.cpp b/zone/merc.cpp index b768d3d5c..47bd09e0f 100644 --- a/zone/merc.cpp +++ b/zone/merc.cpp @@ -2576,29 +2576,6 @@ void Merc::CheckHateList() { } } } - - - /*std::list their_hate_list; - npc->GetHateList(their_hate_list); - std::list::iterator hateEntryIter = their_hate_list.begin(); - - while(hateEntryIter != their_hate_list.end()) - { - tHateEntry *entry = (*hateEntryIter); - - if(g->IsGroupMember(entry->ent)) { - if(!hate_list.IsOnHateList(npc)) { - float range = g->HasRole(entry->ent, RolePuller) ? RuleI(Mercs, AggroRadiusPuller) : RuleI(Mercs, AggroRadius); - range *= range; - if(entry->ent->DistNoRootNoZ(*this) < range) { - hate_list.Add(entry->ent, 1); - } - } - } - - - hateEntryIter++; - }*/ } } }