From 4863d29590a2ce0cb35eca237f9379d69a310160 Mon Sep 17 00:00:00 2001 From: Gent S Date: Mon, 30 Nov 2020 10:53:34 -0500 Subject: [PATCH] Fix /unsummonW crash on non-mob NPCs --- src/ChatManager.cpp | 38 ++++++++++++++++++++------------------ 1 file changed, 20 insertions(+), 18 deletions(-) diff --git a/src/ChatManager.cpp b/src/ChatManager.cpp index b52128f..86a79a6 100644 --- a/src/ChatManager.cpp +++ b/src/ChatManager.cpp @@ -284,27 +284,29 @@ void unsummonWCommand(std::string full, std::vector& args, CNSocket return; } - int leadId = ((Mob*)npc)->groupLeader; - if (leadId != 0) { - if (MobManager::Mobs.find(leadId) == MobManager::Mobs.end()) { - std::cout << "[WARN] unsummonW: leader not found!" << std::endl; - } - Mob* leadNpc = MobManager::Mobs[leadId]; - for (int i = 0; i < 4; i++) { - if (leadNpc->groupMember[i] == 0) - break; - - if (MobManager::Mobs.find(leadNpc->groupMember[i]) == MobManager::Mobs.end()) { - std::cout << "[WARN] unsommonW: leader can't find a group member!" << std::endl; - continue; + if (MobManager::Mobs.find(npc->appearanceData.iNPC_ID) != MobManager::Mobs.end()) { + int leadId = ((Mob*)npc)->groupLeader; + if (leadId != 0) { + if (MobManager::Mobs.find(leadId) == MobManager::Mobs.end()) { + std::cout << "[WARN] unsummonW: leader not found!" << std::endl; } + Mob* leadNpc = MobManager::Mobs[leadId]; + for (int i = 0; i < 4; i++) { + if (leadNpc->groupMember[i] == 0) + break; - NPCManager::destroyNPC(leadNpc->groupMember[i]); + if (MobManager::Mobs.find(leadNpc->groupMember[i]) == MobManager::Mobs.end()) { + std::cout << "[WARN] unsommonW: leader can't find a group member!" << std::endl; + continue; + } + + NPCManager::destroyNPC(leadNpc->groupMember[i]); + } + TableData::RunningGroups.erase(leadId); + NPCManager::destroyNPC(leadId); + ChatManager::sendServerMessage(sock, "/unsummonW: Mob group destroyed."); + return; } - TableData::RunningGroups.erase(leadId); - NPCManager::destroyNPC(leadId); - ChatManager::sendServerMessage(sock, "/unsummonW: Mob group destroyed."); - return; } ChatManager::sendServerMessage(sock, "/unsummonW: removed mob with type: " + std::to_string(npc->appearanceData.iNPCType) +