void WorldSession::HandleGroupSetLeaderOpcode( WorldPacket & recv_data ) { uint64 guid; recv_data >> guid; Group *group = GetPlayer()->GetGroup(); if(!group) return; Player *player = sObjectMgr.GetPlayer(guid); /** error handling **/ if (!player || !group->IsLeader(GetPlayer()->GetGUID()) || player->GetGroup() != group) return; /********************/ // everything is fine, do it group->ChangeLeader(guid); }
void WorldSession::HandleGroupSetLeaderOpcode(WorldPacket& recvData) { TC_LOG_DEBUG(LOG_FILTER_NETWORKIO, "WORLD: Received CMSG_GROUP_SET_LEADER"); uint64 guid; recvData >> guid; Player* player = ObjectAccessor::FindPlayer(guid); Group* group = GetPlayer()->GetGroup(); if (!group || !player) return; if (!group->IsLeader(GetPlayer()->GetGUID()) || player->GetGroup() != group) return; // Everything's fine, accepted. group->ChangeLeader(guid); group->SendUpdate(); }
void WorldSession::HandleGroupSetLeaderOpcode( WorldPacket & recv_data ) { ObjectGuid guid; recv_data >> guid; Group *group = GetPlayer()->GetGroup(); if (!group) return; Player *player = sObjectMgr.GetPlayer(guid); /** error handling **/ if (!player || !group->IsLeader(GetPlayer()->GetObjectGuid()) || player->GetGroup() != group) return; /********************/ // everything is fine, do it GetPlayer()->GetLFGState()->RemoveRole(ROLE_LEADER); group->ChangeLeader(guid); }
void WorldSession::HandleGroupSetLeaderOpcode( WorldPacket & recv_data ) { CHECK_PACKET_SIZE(recv_data,8); Group *group = GetPlayer()->GetGroup(); if(!group) return; uint64 guid; recv_data >> guid; Player *player = objmgr.GetPlayer(guid); /** error handling **/ if (!player || !group->IsLeader(GetPlayer()->GetGUID()) || player->GetGroup() != group) return; /********************/ // everything's fine, do it group->ChangeLeader(guid); }
void WorldSession::HandleGroupSetLeaderOpcode(WorldPacket& recvData) { TC_LOG_DEBUG("network", "WORLD: Received CMSG_GROUP_SET_LEADER"); ObjectGuid guid; recvData.read_skip<uint8>(); guid[1] = recvData.ReadBit(); guid[7] = recvData.ReadBit(); guid[0] = recvData.ReadBit(); guid[2] = recvData.ReadBit(); guid[5] = recvData.ReadBit(); guid[3] = recvData.ReadBit(); guid[4] = recvData.ReadBit(); guid[6] = recvData.ReadBit(); recvData.ReadByteSeq(guid[1]); recvData.ReadByteSeq(guid[5]); recvData.ReadByteSeq(guid[7]); recvData.ReadByteSeq(guid[6]); recvData.ReadByteSeq(guid[0]); recvData.ReadByteSeq(guid[2]); recvData.ReadByteSeq(guid[4]); recvData.ReadByteSeq(guid[3]); Player* player = ObjectAccessor::FindPlayer(guid); Group* group = GetPlayer()->GetGroup(); if (!group || !player) return; if (!group->IsLeader(GetPlayer()->GetGUID()) || player->GetGroup() != group) return; // Everything's fine, accepted. group->ChangeLeader(guid); group->SendUpdate(); }
void WorldSession::HandleGroupSetLeaderOpcode(WorldPacket& recvData) { #if defined(ENABLE_EXTRAS) && defined(ENABLE_EXTRA_LOGS) sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: Received CMSG_GROUP_SET_LEADER"); #endif uint64 guid; recvData >> guid; Player* player = ObjectAccessor::FindPlayerInOrOutOfWorld(guid); Group* group = GetPlayer()->GetGroup(); if (!group || !player) return; if (!group->IsLeader(GetPlayer()->GetGUID()) || player->GetGroup() != group || guid == GetPlayer()->GetGUID()) return; // Everything's fine, accepted. group->ChangeLeader(guid); group->SendUpdate(); }
void WorldSession::HandleGroupSetLeaderOpcode(WorldPacket & recv_data) { sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: Received CMSG_GROUP_SET_LEADER"); Group* group = GetPlayer()->GetGroup(); if (!group) return; uint64 guid; recv_data >> guid; Player* player = ObjectAccessor::FindPlayer(guid); /** error handling **/ if (!player || !group->IsLeader(GetPlayer()->GetGUID()) || player->GetGroup() != group) return; /********************/ // Everything's fine, do it group->ChangeLeader(guid); group->SendUpdate(); }
////////////////////////////////////////////////////////////////////////////////////////// ///This function handles CMSG_GROUP_SET_LEADER: ////////////////////////////////////////////////////////////////////////////////////////// void WorldSession::HandleGroupSetLeaderOpcode( WorldPacket & recv_data ) { WorldPacket data; std::string membername; Group *group; Player * player; recv_data >> membername; player = objmgr.GetPlayer(membername.c_str()); if ( player == NULL ) { data.Initialize( SMSG_PARTY_COMMAND_RESULT ); data << uint32( 0x0 ); data << membername; data << uint32( 0x00000001 ); SendPacket( &data ); return; } // error player is not leader if (!GetPlayer()->IsInGroup() || (GetPlayer()->GetGroupLeader() != GetPlayer()->GetGUID())) return; // error player not in group if (!player->IsInGroup() || (player->GetGroupLeader() != GetPlayer()->GetGUID())) return; group = objmgr.GetGroupByLeader(GetPlayer()->GetGroupLeader()); ASSERT(group); group->ChangeLeader(player->GetGUID()); }
void WorldSession::HandleGroupSetLeaderOpcode(WorldPacket& recvData) { sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: Received CMSG_GROUP_SET_LEADER"); ObjectGuid guid; recvData.read_skip<uint8>(); uint8 bitOrder[8] = { 1, 6, 5, 3, 0, 4, 2, 7 }; recvData.ReadBitInOrder(guid, bitOrder); recvData.FlushBits(); uint8 byteOrder[8] = { 4, 0, 6, 5, 1, 7, 2, 3 }; recvData.ReadBytesSeq(guid, byteOrder); Player* player = ObjectAccessor::FindPlayer(guid); Group* group = GetPlayer()->GetGroup(); if (!group || !player) return; if (!group->IsLeader(GetPlayer()->GetGUID()) || player->GetGroup() != group) return; // @TODO: find a better way to fix exploit, we must have possibility to change leader while group is in raid/instance // Prevent exploits with instance saves for (GroupReference *itr = group->GetFirstMember(); itr != NULL; itr = itr->next()) if (Player* plr = itr->getSource()) if (plr->GetMap() && plr->GetMap()->Instanceable()) return; // Everything's fine, accepted. group->ChangeLeader(guid); group->SendUpdate(); }
void WorldSession::HandleMoveWorldportAckOpcode( WorldPacket & /*recv_data*/ ) { sLog.outDebug( "WORLD: got MSG_MOVE_WORLDPORT_ACK." ); MapEntry const* mEntry = sMapStore.LookupEntry(GetPlayer()->GetMapId()); if(!mEntry || !MaNGOS::IsValidMapCoord(GetPlayer()->GetPositionX(),GetPlayer()->GetPositionY())) { LogoutPlayer(false); return; } // reset instance validity GetPlayer()->m_InstanceValid = true; GetPlayer()->SetSemaphoreTeleport(false); GetPlayer()->SendInitialPacketsBeforeAddToMap(); MapManager::Instance().GetMap(GetPlayer()->GetMapId(), GetPlayer())->Add(GetPlayer()); GetPlayer()->SendInitialPacketsAfterAddToMap(); // flight fast teleport case if(GetPlayer()->GetMotionMaster()->top()->GetMovementGeneratorType()==FLIGHT_MOTION_TYPE) { if(!_player->InBattleGround()) { // short preparations to continue flight FlightPathMovementGenerator* flight = (FlightPathMovementGenerator*)(GetPlayer()->GetMotionMaster()->top()); flight->Initialize(*GetPlayer()); SendPath(flight->GetPath(),flight->GetCurrentNode(),flight->GetPathAtMapEnd()); GetPlayer()->SetDontMove(false); return; } // battleground state prepre, stop flight GetPlayer()->GetMotionMaster()->MovementExpired(); GetPlayer()->FlightComplete(); GetPlayer()->ClearTaxiDestinations(); GetPlayer()->StopMoving(); } // resurrect character at enter into instance where his corpse exist after add to map Corpse *corpse = GetPlayer()->GetCorpse(); if (corpse && corpse->GetType() == CORPSE_RESURRECTABLE && corpse->GetMapId() == GetPlayer()->GetMapId()) { if( mEntry && (mEntry->map_type == MAP_INSTANCE || mEntry->map_type == MAP_RAID) ) { GetPlayer()->ResurrectPlayer(0.5f,false); GetPlayer()->SpawnCorpseBones(); GetPlayer()->SaveToDB(); } } // mount allow check if(!_player->GetBaseMap()->IsMountAllowed()) _player->RemoveSpellsCausingAura(SPELL_AURA_MOUNTED); // battleground state preper if(_player->InBattleGround()) { BattleGround *bg = _player->GetBattleGround(); if(bg) { if(bg->GetMapId() == _player->GetMapId()) // we teleported to bg { if(!bg->GetBgRaid(_player->GetTeam())) // first player joined { Group *group = new Group; bg->SetBgRaid(_player->GetTeam(), group); group->ConvertToRaid(); group->AddMember(_player->GetGUID(), _player->GetName()); group->ChangeLeader(_player->GetGUID()); } else // raid already exist { bg->GetBgRaid(_player->GetTeam())->AddMember(_player->GetGUID(), _player->GetName()); } } } } // honorless target if(GetPlayer()->pvpInfo.inHostileArea) GetPlayer()->CastSpell(GetPlayer(), 2479, true); // resummon pet if(GetPlayer()->m_oldpetnumber) { Pet* NewPet = new Pet(GetPlayer()); if(!NewPet->LoadPetFromDB(GetPlayer(), 0, GetPlayer()->m_oldpetnumber, true)) delete NewPet; GetPlayer()->m_oldpetnumber = 0; } GetPlayer()->SetDontMove(false); }