From e0f9d9a8db11a10cbc85646c49bc79c05d0193da Mon Sep 17 00:00:00 2001 From: Xackery Date: Fri, 2 Sep 2022 10:49:18 -0700 Subject: [PATCH] Added sanity fixes for testing --- zone/client.cpp | 6 ++++-- zone/mob.cpp | 6 ++++++ zone/npc_scale_manager.cpp | 3 +++ zone/quest_parser_collection.cpp | 7 +++++++ zone/task_proximity_manager.cpp | 3 +++ zone/zone.cpp | 4 +++- 6 files changed, 26 insertions(+), 3 deletions(-) diff --git a/zone/client.cpp b/zone/client.cpp index e245bbc9a..61f666104 100644 --- a/zone/client.cpp +++ b/zone/client.cpp @@ -188,8 +188,10 @@ Client::Client(EQStreamInterface* ieqs) berserk = false; dead = false; eqs = ieqs; - ip = eqs->GetRemoteIP(); - port = ntohs(eqs->GetRemotePort()); + if (eqs) { + ip = eqs->GetRemoteIP(); + port = ntohs(eqs->GetRemotePort()); + } client_state = CLIENT_CONNECTING; Trader=false; Buyer = false; diff --git a/zone/mob.cpp b/zone/mob.cpp index 2ebec62ab..4ba5c4db0 100644 --- a/zone/mob.cpp +++ b/zone/mob.cpp @@ -4295,6 +4295,12 @@ void Mob::TriggerDefensiveProcs(Mob *on, uint16 hand, bool FromSkillProc, int da if (!on) { return; } + if (on->GetHP() == 0) { + return; + } + if (on->HasDied()) { + return; + } if (!FromSkillProc) { on->TryDefensiveProc(this, hand); diff --git a/zone/npc_scale_manager.cpp b/zone/npc_scale_manager.cpp index 086abf75d..1988bd0c9 100644 --- a/zone/npc_scale_manager.cpp +++ b/zone/npc_scale_manager.cpp @@ -234,6 +234,9 @@ bool NpcScaleManager::LoadScaleData() */ NpcScaleManager::global_npc_scale NpcScaleManager::GetGlobalScaleDataForTypeLevel(int8 npc_type, int npc_level) { + if (npc_type < 1) { + return {}; + } auto iter = npc_global_base_scaling_data.find(std::make_pair(npc_type, npc_level)); if (iter != npc_global_base_scaling_data.end()) { return iter->second; diff --git a/zone/quest_parser_collection.cpp b/zone/quest_parser_collection.cpp index 8c5185ad6..b264d9df7 100644 --- a/zone/quest_parser_collection.cpp +++ b/zone/quest_parser_collection.cpp @@ -471,6 +471,9 @@ int QuestParserCollection::EventEncounter(QuestEventID evt, std::string encounte } QuestInterface *QuestParserCollection::GetQIByNPCQuest(uint32 npcid, std::string &filename) { + if (!Config) { + return nullptr; + } //first look for /quests/zone/npcid.ext (precedence) filename = Config->QuestDir; filename += zone->GetShortName(); @@ -699,6 +702,9 @@ QuestInterface *QuestParserCollection::GetQIByPlayerQuest(std::string &filename) } QuestInterface *QuestParserCollection::GetQIByGlobalNPCQuest(std::string &filename) { + if (!Config) { + return nullptr; + } // simply look for /quests/global/global_npc.ext filename = Config->QuestDir; filename += QUEST_GLOBAL_DIRECTORY; @@ -1003,6 +1009,7 @@ void QuestParserCollection::GetErrors(std::list &err) { int QuestParserCollection::DispatchEventNPC(QuestEventID evt, NPC* npc, Mob *init, std::string data, uint32 extra_data, std::vector *extra_pointers) { int ret = 0; + if (_load_precedence.size() == 0) return ret; auto iter = _load_precedence.begin(); while(iter != _load_precedence.end()) { int i = (*iter)->DispatchEventNPC(evt, npc, init, data, extra_data, extra_pointers); diff --git a/zone/task_proximity_manager.cpp b/zone/task_proximity_manager.cpp index ee46acbcb..1f26e3a81 100644 --- a/zone/task_proximity_manager.cpp +++ b/zone/task_proximity_manager.cpp @@ -22,6 +22,9 @@ TaskProximityManager::~TaskProximityManager() bool TaskProximityManager::LoadProximities(int zone_id) { + if (zone_id == -1) { + return false; + } TaskProximity proximity{}; m_task_proximities.clear(); diff --git a/zone/zone.cpp b/zone/zone.cpp index 2dffad339..84a10bba5 100755 --- a/zone/zone.cpp +++ b/zone/zone.cpp @@ -965,7 +965,9 @@ Zone::Zone(uint32 in_zoneid, uint32 in_instanceid, const char* in_short_name) merchantvar = 0; tradevar = 0; lootvar = 0; - + if (zoneid == -1) { + return; + } if(RuleB(TaskSystem, EnableTaskSystem)) { task_manager->LoadProximities(zoneid); }