void WorldSession::HandleAreaSpiritHealerQueueOpcode(WorldPacket & recv_data) { sLog.outDebug("WORLD: CMSG_AREA_SPIRIT_HEALER_QUEUE"); BattleGround *bg = _player->GetBattleGround(); uint64 guid; recv_data >> guid; Creature *unit = GetPlayer()->GetMap()->GetCreature(guid); if (!unit) return; if (!unit->isSpiritService()) // it's not spirit service return; if (bg) { bg->AddPlayerToResurrectQueue(guid, _player->GetGUID()); } else { // Wintergrasp Hack till 3.2 and it's implemented as BG if (GetPlayer()->GetZoneId() == 4197) { OutdoorPvPWG *pvpWG = (OutdoorPvPWG*)sOutdoorPvPMgr.GetOutdoorPvPToZoneId(4197); if (pvpWG && pvpWG->isWarTime()) pvpWG->AddPlayerToResurrectQueue(guid, _player->GetGUID()); } } }
void WorldSession::HandleGossipHelloOpcode( WorldPacket & recv_data ) { sLog.outDebug( "WORLD: Received CMSG_GOSSIP_HELLO" ); uint64 guid; recv_data >> guid; Creature *unit = GetPlayer()->GetNPCIfCanInteractWith(guid, UNIT_NPC_FLAG_NONE); if (!unit) { sLog.outDebug( "WORLD: HandleGossipHelloOpcode - Unit (GUID: %u) not found or you can't interact with him.", uint32(GUID_LOPART(guid)) ); return; } // remove fake death if(GetPlayer()->hasUnitState(UNIT_STAT_DIED)) GetPlayer()->RemoveSpellsCausingAura(SPELL_AURA_FEIGN_DEATH); // Playerbot mod if(unit->isBotGiver()) { GetPlayer()->TalkedToCreature(unit->GetEntry(),unit->GetGUID()); unit->prepareGossipMenu(GetPlayer(),GOSSIP_OPTION_BOT); unit->sendPreparedGossip(GetPlayer()); unit->StopMoving(); } else if( unit->isArmorer() || unit->isCivilian() || unit->isQuestGiver() || unit->isServiceProvider()) { unit->StopMoving(); } // If spiritguide, no need for gossip menu, just put player into resurrect queue if (unit->isSpiritGuide()) { BattleGround *bg = _player->GetBattleGround(); if(bg) { bg->AddPlayerToResurrectQueue(unit->GetGUID(), _player->GetGUID()); sBattleGroundMgr.SendAreaSpiritHealerQueryOpcode(_player, bg, unit->GetGUID()); return; } } if(!Script->GossipHello( _player, unit )) { _player->TalkedToCreature(unit->GetEntry(),unit->GetGUID()); unit->prepareGossipMenu(_player); unit->sendPreparedGossip(_player); } }
void WorldSession::HandleAreaSpiritHealerQueueOpcode( WorldPacket & recv_data ) { sLog.outDebug("WORLD: CMSG_AREA_SPIRIT_HEALER_QUEUE"); CHECK_PACKET_SIZE(recv_data, 8); if(!_player->InBattleGround()) return; BattleGround *bg = _player->GetBattleGround(); if(!bg) return; uint64 guid; recv_data >> guid; bg->AddPlayerToResurrectQueue(guid, _player->GetGUID()); }
void WorldSession::HandleAreaSpiritHealerQueueOpcode(WorldPacket & recv_data) { sLog.outDebug("WORLD: CMSG_AREA_SPIRIT_HEALER_QUEUE"); BattleGround *bg = _player->GetBattleGround(); uint64 guid; recv_data >> guid; Creature *unit = GetPlayer()->GetMap()->GetCreature(guid); if (!unit) return; if (!unit->isSpiritService()) // it's not spirit service return; if (bg) bg->AddPlayerToResurrectQueue(guid, _player->GetGUID()); }
void WorldSession::HandleGossipHelloOpcode( WorldPacket & recv_data ) { sLog.outDebug( "WORLD: Received CMSG_GOSSIP_HELLO" ); uint64 guid; recv_data >> guid; Creature *unit = GetPlayer()->GetNPCIfCanInteractWith(guid, UNIT_NPC_FLAG_NONE); if (!unit) { sLog.outDebug( "WORLD: HandleGossipHelloOpcode - Unit (GUID: %u) not found or you can't interact with him.", uint32(GUID_LOPART(guid)) ); return; } GetPlayer()->RemoveAurasWithInterruptFlags(AURA_INTERRUPT_FLAG_TALK); // remove fake death //if (GetPlayer()->hasUnitState(UNIT_STAT_DIED)) // GetPlayer()->RemoveAurasByType(SPELL_AURA_FEIGN_DEATH); if ( unit->isArmorer() || unit->isCivilian() || unit->isQuestGiver() || unit->isServiceProvider()) { unit->StopMoving(); } // If spiritguide, no need for gossip menu, just put player into resurrect queue if (unit->isSpiritGuide()) { BattleGround *bg = _player->GetBattleGround(); if (bg) { bg->AddPlayerToResurrectQueue(unit->GetGUID(), _player->GetGUID()); sBattleGroundMgr.SendAreaSpiritHealerQueryOpcode(_player, bg, unit->GetGUID()); return; } } if (!sScriptMgr.GossipHello(_player, unit)) { _player->TalkedToCreature(unit->GetEntry(), unit->GetGUID()); _player->PrepareGossipMenu(unit, unit->GetCreatureInfo()->GossipMenuId); _player->SendPreparedGossip(unit); } }
void WorldSession::HandleAreaSpiritHealerQueueOpcode( WorldPacket & recv_data ) { sLog.outDebug("WORLD: CMSG_AREA_SPIRIT_HEALER_QUEUE"); CHECK_PACKET_SIZE(recv_data, 8); BattleGround *bg = _player->GetBattleGround(); if(!bg) return; uint64 guid; recv_data >> guid; Creature *unit = ObjectAccessor::GetCreature(*_player, guid); if(!unit) return; if(!unit->isSpiritService()) // it's not spirit service return; bg->AddPlayerToResurrectQueue(guid, _player->GetGUID()); }