diff --git a/zone/QuestInterface.h b/zone/QuestInterface.h index a5605032c..38926eff5 100644 --- a/zone/QuestInterface.h +++ b/zone/QuestInterface.h @@ -61,7 +61,20 @@ public: virtual void ReloadQuests() { } virtual uint32 GetIdentifier() = 0; - virtual void GetErrors(std::list &err) { } + //TODO: Set maximum quest errors instead of hard coding it + virtual void GetErrors(std::list &err) { + err.insert(err.end(), errors_.begin(), errors_.end()); + } + + virtual void AddError(std::string error) { + errors_.push_back(error); + if(errors_.size() > 30) { + errors_.pop_front(); + } + } + +protected: + std::list errors_; }; #endif diff --git a/zone/client.h b/zone/client.h index f95bfe063..bbf853dc0 100644 --- a/zone/client.h +++ b/zone/client.h @@ -211,7 +211,6 @@ public: virtual Raid* GetRaid() { return entity_list.GetRaidByClient(this); } virtual Group* GetGroup() { return entity_list.GetGroupByClient(this); } -// void Discipline(ClientDiscipline_Struct* disc_in, Mob* tar); void AI_Init(); void AI_Start(uint32 iMoveDelay = 0); void AI_Stop(); diff --git a/zone/lua_client.cpp b/zone/lua_client.cpp index 1e079d30e..9aeccedb9 100644 --- a/zone/lua_client.cpp +++ b/zone/lua_client.cpp @@ -518,6 +518,47 @@ void Lua_Client::DeleteItemInInventory(int slot_id, int quantity, bool update_cl self->DeleteItemInInventory(slot_id, quantity, update_client); } +void Lua_Client::SummonItem(uint32 item_id) { + Lua_Safe_Call_Void(); + self->SummonItem(item_id); +} + +void Lua_Client::SummonItem(uint32 item_id, int charges) { + Lua_Safe_Call_Void(); + self->SummonItem(item_id, charges); +} + +void Lua_Client::SummonItem(uint32 item_id, int charges, uint32 aug1) { + Lua_Safe_Call_Void(); + self->SummonItem(item_id, charges, aug1); +} + +void Lua_Client::SummonItem(uint32 item_id, int charges, uint32 aug1, uint32 aug2) { + Lua_Safe_Call_Void(); + self->SummonItem(item_id, charges, aug1, aug2); +} + +void Lua_Client::SummonItem(uint32 item_id, int charges, uint32 aug1, uint32 aug2, uint32 aug3) { + Lua_Safe_Call_Void(); + self->SummonItem(item_id, charges, aug1, aug2, aug3); +} + +void Lua_Client::SummonItem(uint32 item_id, int charges, uint32 aug1, uint32 aug2, uint32 aug3, uint32 aug4) { + Lua_Safe_Call_Void(); + self->SummonItem(item_id, charges, aug1, aug2, aug3, aug4); +} + +void Lua_Client::SummonItem(uint32 item_id, int charges, uint32 aug1, uint32 aug2, uint32 aug3, uint32 aug4, uint32 aug5) { + Lua_Safe_Call_Void(); + self->SummonItem(item_id, charges, aug1, aug2, aug3, aug4, aug5); +} + +void Lua_Client::SummonItem(uint32 item_id, int charges, uint32 aug1, uint32 aug2, uint32 aug3, uint32 aug4, uint32 aug5, + bool attuned) { + Lua_Safe_Call_Void(); + self->SummonItem(item_id, charges, aug1, aug2, aug3, aug4, aug5, attuned); +} + void Lua_Client::SummonItem(uint32 item_id, int charges, uint32 aug1, uint32 aug2, uint32 aug3, uint32 aug4, uint32 aug5, bool attuned, int to_slot) { Lua_Safe_Call_Void(); diff --git a/zone/lua_client.h b/zone/lua_client.h index 8769d4426..d441cd347 100644 --- a/zone/lua_client.h +++ b/zone/lua_client.h @@ -132,8 +132,17 @@ public: int GetItemIDAt(int slot_id); int GetAugmentIDAt(int slot_id, int aug_slot); void DeleteItemInInventory(int slot_id, int quantity, bool update_client = true); - void SummonItem(uint32 item_id, int charges = 0, uint32 aug1 = 0, uint32 aug2 = 0, uint32 aug3 = 0, uint32 aug4 = 0, - uint32 aug5 = 0, bool attuned = false, int to_slot = 30); + void SummonItem(uint32 item_id); + void SummonItem(uint32 item_id, int charges); + void SummonItem(uint32 item_id, int charges, uint32 aug1); + void SummonItem(uint32 item_id, int charges, uint32 aug1, uint32 aug2); + void SummonItem(uint32 item_id, int charges, uint32 aug1, uint32 aug2, uint32 aug3); + void SummonItem(uint32 item_id, int charges, uint32 aug1, uint32 aug2, uint32 aug3, uint32 aug4); + void SummonItem(uint32 item_id, int charges, uint32 aug1, uint32 aug2, uint32 aug3, uint32 aug4, uint32 aug5); + void SummonItem(uint32 item_id, int charges, uint32 aug1, uint32 aug2, uint32 aug3, uint32 aug4, uint32 aug5, + bool attuned); + void SummonItem(uint32 item_id, int charges, uint32 aug1, uint32 aug2, uint32 aug3, uint32 aug4, uint32 aug5, + bool attuned, int to_slot); void SetStats(int type, int value); void IncStats(int type, int value); void DropItem(int slot_id); diff --git a/zone/lua_parser.cpp b/zone/lua_parser.cpp index fbb06124a..100660a6a 100644 --- a/zone/lua_parser.cpp +++ b/zone/lua_parser.cpp @@ -822,17 +822,6 @@ void LuaParser::MapFunctions(lua_State *L) { } } -void LuaParser::GetErrors(std::list &err) { - err.insert(err.end(), errors_.begin(), errors_.end()); -} - -void LuaParser::AddError(std::string error) { - errors_.push_back(error); - if(errors_.size() > 30) { - errors_.pop_front(); - } -} - void LuaParser::DispatchEventNPC(QuestEventID evt, NPC* npc, Mob *init, std::string data, uint32 extra_data) { if(!npc) return; diff --git a/zone/lua_parser.h b/zone/lua_parser.h index a78fc09ca..d19e7e350 100644 --- a/zone/lua_parser.h +++ b/zone/lua_parser.h @@ -53,7 +53,6 @@ public: virtual std::string GetVar(std::string name); virtual void ReloadQuests(); virtual uint32 GetIdentifier() { return 0xb0712acc; } - virtual void GetErrors(std::list &err); virtual void DispatchEventNPC(QuestEventID evt, NPC* npc, Mob *init, std::string data, uint32 extra_data); virtual void DispatchEventPlayer(QuestEventID evt, Client *client, std::string data, uint32 extra_data); @@ -75,13 +74,11 @@ private: bool HasFunction(std::string function, std::string package_name); void ClearStates(); void MapFunctions(lua_State *L); - void AddError(std::string error); void ExportQGlobals(NPC *n, Client *c); void ExportZoneVariables(); std::map vars_; std::map loaded_; - std::list errors_; lua_State *L; NPCArgumentHandler NPCArgumentDispatch[_LargestEventID]; diff --git a/zone/lua_parser_events.cpp b/zone/lua_parser_events.cpp index b5ffe000c..639b07297 100644 --- a/zone/lua_parser_events.cpp +++ b/zone/lua_parser_events.cpp @@ -73,7 +73,7 @@ void handle_npc_event_trade(QuestInterface *parse, lua_State* L, NPC* npc, Mob * lua_setfield(L, -2, "item1_attuned"); lua_pushboolean(L, std::stoul(parse->GetVar("item2.attuned." + ident.str())) != 0 ? true : false); - lua_setfield(L, -2, "item1_attuned"); + lua_setfield(L, -2, "item2_attuned"); lua_pushboolean(L, std::stoul(parse->GetVar("item3.attuned." + ident.str())) != 0 ? true : false); lua_setfield(L, -2, "item3_attuned"); @@ -81,6 +81,66 @@ void handle_npc_event_trade(QuestInterface *parse, lua_State* L, NPC* npc, Mob * lua_pushboolean(L, std::stoul(parse->GetVar("item4.attuned." + ident.str())) != 0 ? true : false); lua_setfield(L, -2, "item4_attuned"); + lua_pushinteger(L, std::stoul(parse->GetVar("item1.augment1." + ident.str()))); + lua_setfield(L, -2, "item1_augment1"); + + lua_pushinteger(L, std::stoul(parse->GetVar("item1.augment2." + ident.str()))); + lua_setfield(L, -2, "item1_augment2"); + + lua_pushinteger(L, std::stoul(parse->GetVar("item1.augment3." + ident.str()))); + lua_setfield(L, -2, "item1_augment3"); + + lua_pushinteger(L, std::stoul(parse->GetVar("item1.augment4." + ident.str()))); + lua_setfield(L, -2, "item1_augment4"); + + lua_pushinteger(L, std::stoul(parse->GetVar("item1.augment5." + ident.str()))); + lua_setfield(L, -2, "item1_augment5"); + + lua_pushinteger(L, std::stoul(parse->GetVar("item2.augment1." + ident.str()))); + lua_setfield(L, -2, "item2_augment1"); + + lua_pushinteger(L, std::stoul(parse->GetVar("item2.augment2." + ident.str()))); + lua_setfield(L, -2, "item2_augment2"); + + lua_pushinteger(L, std::stoul(parse->GetVar("item2.augment3." + ident.str()))); + lua_setfield(L, -2, "item2_augment3"); + + lua_pushinteger(L, std::stoul(parse->GetVar("item2.augment4." + ident.str()))); + lua_setfield(L, -2, "item2_augment4"); + + lua_pushinteger(L, std::stoul(parse->GetVar("item2.augment5." + ident.str()))); + lua_setfield(L, -2, "item2_augment5"); + + lua_pushinteger(L, std::stoul(parse->GetVar("item3.augment1." + ident.str()))); + lua_setfield(L, -2, "item3_augment1"); + + lua_pushinteger(L, std::stoul(parse->GetVar("item3.augment2." + ident.str()))); + lua_setfield(L, -2, "item3_augment2"); + + lua_pushinteger(L, std::stoul(parse->GetVar("item3.augment3." + ident.str()))); + lua_setfield(L, -2, "item3_augment3"); + + lua_pushinteger(L, std::stoul(parse->GetVar("item3.augment4." + ident.str()))); + lua_setfield(L, -2, "item3_augment4"); + + lua_pushinteger(L, std::stoul(parse->GetVar("item3.augment5." + ident.str()))); + lua_setfield(L, -2, "item3_augment5"); + + lua_pushinteger(L, std::stoul(parse->GetVar("item4.augment1." + ident.str()))); + lua_setfield(L, -2, "item4_augment1"); + + lua_pushinteger(L, std::stoul(parse->GetVar("item4.augment2." + ident.str()))); + lua_setfield(L, -2, "item4_augment2"); + + lua_pushinteger(L, std::stoul(parse->GetVar("item4.augment3." + ident.str()))); + lua_setfield(L, -2, "item4_augment3"); + + lua_pushinteger(L, std::stoul(parse->GetVar("item4.augment4." + ident.str()))); + lua_setfield(L, -2, "item4_augment4"); + + lua_pushinteger(L, std::stoul(parse->GetVar("item4.augment5." + ident.str()))); + lua_setfield(L, -2, "item4_augment5"); + lua_pushinteger(L, std::stoul(parse->GetVar("platinum." + ident.str()))); lua_setfield(L, -2, "platinum"); diff --git a/zone/trading.cpp b/zone/trading.cpp index 5f3c31b04..e2619cd56 100644 --- a/zone/trading.cpp +++ b/zone/trading.cpp @@ -647,7 +647,7 @@ void Client::FinishTrade(Mob* tradingWith, ServerPacket* qspack, bool finalizer) parse->AddVar(temp1, temp2); for(int y = 0; y < 5; y++) { - snprintf(temp1, 100, "item%d.augment.%d", z + 1, tradingWith->GetNPCTypeID()); + snprintf(temp1, 100, "item%d.augment%d.%d", z + 1, y + 1, tradingWith->GetNPCTypeID()); snprintf(temp2, 100, "%d", augments[z][y]); parse->AddVar(temp1, temp2); }