diff --git a/src/Combat.cpp b/src/Combat.cpp index aa8b912..48598b1 100644 --- a/src/Combat.cpp +++ b/src/Combat.cpp @@ -307,19 +307,21 @@ void CombatNPC::step(time_t currTime) { } void CombatNPC::transition(AIState newState, EntityRef src) { - state = newState; + if (transitionHandlers.find(newState) != transitionHandlers.end()) transitionHandlers[newState](this, src); else { std::cout << "[WARN] Transition to " << (int)state << " has no handler; going inactive" << std::endl; transition(AIState::INACTIVE, id); } - /* TODO: fire any triggered events - for (NPCEvent& event : NPCManager::NPCEvents) - if (event.trigger == ON_KILLED && event.npcType == type) - event.handler(src, this); - */ + + // TODO: Properly refactor this + if (newState == AIState::DEAD && src.kind == EntityKind::PLAYER) { + for (NPCEvent& event : NPCManager::NPCEvents) + if (event.trigger == ON_KILLED && event.npcType == type) + event.handler(src.sock, this); + } } #pragma endregion diff --git a/src/NPCManager.cpp b/src/NPCManager.cpp index cba6656..b0b8963 100644 --- a/src/NPCManager.cpp +++ b/src/NPCManager.cpp @@ -306,18 +306,18 @@ static void lordFuseStageTwo(CNSocket *sock, BaseNPC *npc) { // Fuse doesn't move // Blastons, Heal - Mob *newbody = (Mob*)NPCManager::summonNPC(oldbody->x, oldbody->y, oldbody->z, plr->instanceID, 2467); + Mob *newbody = (Mob*)NPCManager::summonNPC(oldbody->x, oldbody->y, oldbody->z, oldbody->instanceID, 2467); newbody->angle = oldbody->angle; - NPCManager::updateNPCPosition(newbody->id, newbody->x, newbody->y, newbody->z, - plr->instanceID, oldbody->angle); + NPCManager::updateNPCPosition(newbody->id, newbody->spawnX, newbody->spawnY, newbody->spawnZ, + oldbody->instanceID, oldbody->angle); // right arm, Adaptium, Stun - Mob *arm = (Mob*)NPCManager::summonNPC(oldbody->x - 600, oldbody->y, oldbody->z, plr->instanceID, 2469); + Mob *arm = (Mob*)NPCManager::summonNPC(oldbody->x - 600, oldbody->y, oldbody->z, oldbody->instanceID, 2469); arm->angle = oldbody->angle; - NPCManager::updateNPCPosition(arm->id, arm->x, arm->y, arm->z, - plr->instanceID, oldbody->angle); + NPCManager::updateNPCPosition(arm->id, arm->spawnX, arm->spawnY, arm->spawnZ, + oldbody->instanceID, oldbody->angle); } // summon left arm and stage 3 body @@ -328,18 +328,18 @@ static void lordFuseStageThree(CNSocket *sock, BaseNPC *npc) { std::cout << "Lord Fuse stage three" << std::endl; // Cosmix, Damage Point - Mob *newbody = (Mob*)NPCManager::summonNPC(oldbody->x, oldbody->y, oldbody->z, plr->instanceID, 2468); + Mob *newbody = (Mob*)NPCManager::summonNPC(oldbody->x, oldbody->y, oldbody->z, oldbody->instanceID, 2468); newbody->angle = oldbody->angle; - NPCManager::updateNPCPosition(newbody->id, newbody->x, newbody->y, newbody->z, - plr->instanceID, oldbody->angle); + NPCManager::updateNPCPosition(newbody->id, newbody->spawnX, newbody->spawnY, newbody->spawnZ, + newbody->instanceID, oldbody->angle); // Blastons, Heal - Mob *arm = (Mob*)NPCManager::summonNPC(oldbody->x + 600, oldbody->y, oldbody->z, plr->instanceID, 2470); + Mob *arm = (Mob*)NPCManager::summonNPC(oldbody->x + 600, oldbody->y, oldbody->z, oldbody->instanceID, 2470); arm->angle = oldbody->angle; - NPCManager::updateNPCPosition(arm->id, arm->x, arm->y, arm->z, - plr->instanceID, oldbody->angle); + NPCManager::updateNPCPosition(arm->id, arm->spawnX, arm->spawnY, arm->spawnZ, + arm->instanceID, oldbody->angle); } std::vector NPCManager::NPCEvents = {