diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/game/DBCStructure.h | 2 | ||||
-rw-r--r-- | src/game/Map.cpp | 2 | ||||
-rw-r--r-- | src/game/MovementHandler.cpp | 45 | ||||
-rw-r--r-- | src/game/Opcodes.h | 2 | ||||
-rw-r--r-- | src/game/Player.cpp | 26 | ||||
-rw-r--r-- | src/game/Player.h | 6 |
6 files changed, 38 insertions, 45 deletions
diff --git a/src/game/DBCStructure.h b/src/game/DBCStructure.h index bfcf3647c57..686c43fc355 100644 --- a/src/game/DBCStructure.h +++ b/src/game/DBCStructure.h @@ -1129,8 +1129,8 @@ struct MapEntry // Helpers uint32 Expansion() const { return addon; } - bool IsDungeon() const { return map_type == MAP_INSTANCE || map_type == MAP_RAID; } + bool IsNonRaidDungeon() const { return map_type == MAP_INSTANCE; } bool Instanceable() const { return map_type == MAP_INSTANCE || map_type == MAP_RAID || map_type == MAP_BATTLEGROUND || map_type == MAP_ARENA; } bool IsRaid() const { return map_type == MAP_RAID; } bool IsBattleGround() const { return map_type == MAP_BATTLEGROUND; } diff --git a/src/game/Map.cpp b/src/game/Map.cpp index ee8dc1c9cac..4a102b92051 100644 --- a/src/game/Map.cpp +++ b/src/game/Map.cpp @@ -2630,7 +2630,7 @@ void InstanceMap::UnloadAll() void InstanceMap::SendResetWarnings(uint32 timeLeft) const { for(MapRefManager::const_iterator itr = m_mapRefManager.begin(); itr != m_mapRefManager.end(); ++itr) - itr->getSource()->SendInstanceResetWarning(GetId(), timeLeft); + itr->getSource()->SendInstanceResetWarning(GetId(), itr->getSource()->GetDifficulty(), timeLeft); } void InstanceMap::SetResetSchedule(bool on) diff --git a/src/game/MovementHandler.cpp b/src/game/MovementHandler.cpp index aa80d021617..775cef0edca 100644 --- a/src/game/MovementHandler.cpp +++ b/src/game/MovementHandler.cpp @@ -50,7 +50,7 @@ void WorldSession::HandleMoveWorldportAckOpcode() WorldLocation &loc = GetPlayer()->GetTeleportDest(); // possible errors in the coordinate validity check - if(!MapManager::IsValidMapCoord(loc.mapid,loc.x,loc.y,loc.z,loc.o)) + if(!MapManager::IsValidMapCoord(loc.mapid, loc.x, loc.y, loc.z, loc.o)) { LogoutPlayer(false); return; @@ -74,20 +74,17 @@ void WorldSession::HandleMoveWorldportAckOpcode() // to let GetInstance() determine the proper InstanceId based on the player's binds GetPlayer()->SetInstanceId(0); - // check this before Map::Add(player), because that will create the instance save! - bool reset_notify = (GetPlayer()->GetBoundInstance(GetPlayer()->GetMapId(), GetPlayer()->GetDifficulty()) == NULL); - GetPlayer()->SendInitialPacketsBeforeAddToMap(); // the CanEnter checks are done in TeleporTo but conditions may change // while the player is in transit, for example the map may get full if(!GetPlayer()->GetMap()->Add(GetPlayer())) { - sLog.outDebug("WORLD: teleport of player %s (%d) to location %d,%f,%f,%f,%f failed", GetPlayer()->GetName(), GetPlayer()->GetGUIDLow(), loc.mapid, loc.x, loc.y, loc.z, loc.o); + sLog.outDebug("WORLD: teleport of player %s (%d) to location %d, %f, %f, %f, %f failed", GetPlayer()->GetName(), GetPlayer()->GetGUIDLow(), loc.mapid, loc.x, loc.y, loc.z, loc.o); // teleport the player home if(!GetPlayer()->TeleportTo(GetPlayer()->m_homebindMapId, GetPlayer()->m_homebindX, GetPlayer()->m_homebindY, GetPlayer()->m_homebindZ, GetPlayer()->GetOrientation())) { // the player must always be able to teleport home - sLog.outError("WORLD: failed to teleport player %s (%d) to homebind location %d,%f,%f,%f,%f!", GetPlayer()->GetName(), GetPlayer()->GetGUIDLow(), GetPlayer()->m_homebindMapId, GetPlayer()->m_homebindX, GetPlayer()->m_homebindY, GetPlayer()->m_homebindZ, GetPlayer()->GetOrientation()); + sLog.outError("WORLD: failed to teleport player %s (%d) to homebind location %d, %f, %f, %f, %f!", GetPlayer()->GetName(), GetPlayer()->GetGUIDLow(), GetPlayer()->m_homebindMapId, GetPlayer()->m_homebindX, GetPlayer()->m_homebindY, GetPlayer()->m_homebindZ, GetPlayer()->GetOrientation()); assert(false); } return; @@ -97,10 +94,11 @@ void WorldSession::HandleMoveWorldportAckOpcode() // only add to bg group and object, if the player was invited (else he entered through command) if(_player->InBattleGround()) { - // cleanup seting if outdated + // cleanup setting if outdated if(!mEntry->IsBattleGroundOrArena()) { - _player->SetBattleGroundId(0, BATTLEGROUND_TYPE_NONE); // We're not in BG. + // We're not in BG + _player->SetBattleGroundId(0, BATTLEGROUND_TYPE_NONE); // reset destination bg team _player->SetBGTeam(0); } @@ -115,7 +113,7 @@ void WorldSession::HandleMoveWorldportAckOpcode() GetPlayer()->SendInitialPacketsAfterAddToMap(); // flight fast teleport case - if(GetPlayer()->GetMotionMaster()->GetCurrentMovementGeneratorType()==FLIGHT_MOTION_TYPE) + if(GetPlayer()->GetMotionMaster()->GetCurrentMovementGeneratorType() == FLIGHT_MOTION_TYPE) { if(!_player->InBattleGround()) { @@ -142,13 +140,10 @@ void WorldSession::HandleMoveWorldportAckOpcode() } } - if(mEntry->IsRaid() && mInstance) + if((mEntry->IsRaid() || (mEntry->IsNonRaidDungeon() && mEntry->SupportsHeroicMode() && GetPlayer()->IsHeroic())) && mInstance) { - if(reset_notify) - { - uint32 timeleft = sInstanceSaveManager.GetResetTimeFor(GetPlayer()->GetMapId()) - time(NULL); - GetPlayer()->SendInstanceResetWarning(GetPlayer()->GetMapId(), timeleft); // greeting at the entrance of the resort raid instance - } + uint32 timeleft = sInstanceSaveManager.GetResetTimeFor(GetPlayer()->GetMapId()) - time(NULL); + GetPlayer()->SendInstanceResetWarning(GetPlayer()->GetMapId(), GetPlayer()->GetDifficulty(), timeleft); } // mount allow check @@ -165,7 +160,7 @@ void WorldSession::HandleMoveWorldportAckOpcode() void WorldSession::HandleMoveTeleportAck(WorldPacket& recv_data) { - CHECK_PACKET_SIZE(recv_data,8+4); + CHECK_PACKET_SIZE(recv_data, 8+4); sLog.outDebug("MSG_MOVE_TELEPORT_ACK"); uint64 guid; @@ -173,11 +168,11 @@ void WorldSession::HandleMoveTeleportAck(WorldPacket& recv_data) recv_data >> guid; recv_data >> flags >> time; - DEBUG_LOG("Guid " UI64FMTD,guid); - DEBUG_LOG("Flags %u, time %u",flags, time/IN_MILISECONDS); + DEBUG_LOG("Guid " UI64FMTD, guid); + DEBUG_LOG("Flags %u, time %u", flags, time/IN_MILISECONDS); Unit *mover = _player->m_mover; - Player *plMover = mover->GetTypeId()==TYPEID_PLAYER ? (Player*)mover : NULL; + Player *plMover = mover->GetTypeId() == TYPEID_PLAYER ? (Player*)mover : NULL; if(!plMover || !plMover->IsBeingTeleportedNear()) return; @@ -194,8 +189,8 @@ void WorldSession::HandleMoveTeleportAck(WorldPacket& recv_data) plMover->SetPosition(dest.x, dest.y, dest.z, dest.o, true); uint32 newzone, newarea; - plMover->GetZoneAndAreaId(newzone,newarea); - plMover->UpdateZone(newzone,newarea); + plMover->GetZoneAndAreaId(newzone, newarea); + plMover->UpdateZone(newzone, newarea); // new zone if(old_zone != newzone) @@ -244,8 +239,8 @@ void WorldSession::HandleMovementOpcodes( WorldPacket & recv_data ) if( movementInfo.t_x > 50 || movementInfo.t_y > 50 || movementInfo.t_z > 50 ) return; - if( !Trinity::IsValidMapCoord(movementInfo.x+movementInfo.t_x, movementInfo.y+movementInfo.t_y, - movementInfo.z+movementInfo.t_z, movementInfo.o+movementInfo.t_o) ) + if( !MaNGOS::IsValidMapCoord(movementInfo.x+movementInfo.t_x, movementInfo.y + movementInfo.t_y, + movementInfo.z + movementInfo.t_z, movementInfo.o + movementInfo.t_o) ) return; // if we boarded a transport, add us to it @@ -303,7 +298,7 @@ void WorldSession::HandleMovementOpcodes( WorldPacket & recv_data ) if(plMover) // nothing is charmed, or player charmed { plMover->SetPosition(movementInfo.x, movementInfo.y, movementInfo.z, movementInfo.o); - plMover->UpdateFallInformationIfNeed(movementInfo,recv_data.GetOpcode()); + plMover->UpdateFallInformationIfNeed(movementInfo, recv_data.GetOpcode()); if(plMover->isMovingOrTurning()) plMover->RemoveAurasByType(SPELL_AURA_FEIGN_DEATH); @@ -586,7 +581,7 @@ void WorldSession::HandleMoveWaterWalkAck(WorldPacket& /*recv_data*/) void WorldSession::HandleSummonResponseOpcode(WorldPacket& recv_data) { - CHECK_PACKET_SIZE(recv_data,8+1); + CHECK_PACKET_SIZE(recv_data, 8+1); if(!_player->isAlive() || _player->isInCombat() ) return; diff --git a/src/game/Opcodes.h b/src/game/Opcodes.h index 3c2b004ec1f..b3d9c4f8f11 100644 --- a/src/game/Opcodes.h +++ b/src/game/Opcodes.h @@ -363,7 +363,7 @@ enum Opcodes SMSG_ATTACKSTOP = 0x144, SMSG_ATTACKSWING_NOTINRANGE = 0x145, SMSG_ATTACKSWING_BADFACING = 0x146, - SMSG_ATTACKSWING_NOTSTANDING = 0x147, + SMSG_INSTANCE_LOCK_QUERY = 0x147, SMSG_ATTACKSWING_DEADTARGET = 0x148, SMSG_ATTACKSWING_CANT_ATTACK = 0x149, SMSG_ATTACKERSTATEUPDATE = 0x14A, diff --git a/src/game/Player.cpp b/src/game/Player.cpp index 2259a192c71..9ecbdd6d478 100644 --- a/src/game/Player.cpp +++ b/src/game/Player.cpp @@ -15607,6 +15607,8 @@ void Player::SendRaidInfo() size_t p_counter = data.wpos(); data << uint32(counter); // placeholder + time_t now = time(NULL); + for(int i = 0; i < TOTAL_DIFFICULTIES; ++i) { for (BoundInstancesMap::iterator itr = m_boundInstances[i].begin(); itr != m_boundInstances[i].end(); ++itr) @@ -15614,10 +15616,11 @@ void Player::SendRaidInfo() if(itr->second.perm) { InstanceSave *save = itr->second.save; - data << uint32(save->GetMapId()); - data << uint32(save->GetResetTime() - time(NULL)); - data << uint32(save->GetInstanceId()); - data << uint32(save->GetDifficulty()); + data << uint32(save->GetMapId()); // map id + data << uint32(save->GetDifficulty()); // difficulty + data << uint64(save->GetInstanceId()); // instance id + data << uint32(save->GetResetTime() - now); // reset time + data << uint32(0); // is extended ++counter; } } @@ -16451,12 +16454,6 @@ void Player::Customize(uint64 guid, uint8 gender, uint8 skin, uint8 face, uint8 SaveValuesArrayInDB(tokens, guid); } -void Player::SendAttackSwingNotStanding() -{ - WorldPacket data(SMSG_ATTACKSWING_NOTSTANDING, 0); - GetSession()->SendPacket( &data ); -} - void Player::SendAttackSwingDeadTarget() { WorldPacket data(SMSG_ATTACKSWING_DEADTARGET, 0); @@ -18784,7 +18781,7 @@ void Player::SendTransferAborted(uint32 mapid, uint8 reason, uint8 arg) GetSession()->SendPacket(&data); } -void Player::SendInstanceResetWarning(uint32 mapid, uint32 time) +void Player::SendInstanceResetWarning( uint32 mapid, uint32 difficulty, uint32 time ) { // type of warning, based on the time remaining until reset uint32 type; @@ -18796,15 +18793,16 @@ void Player::SendInstanceResetWarning(uint32 mapid, uint32 time) type = RAID_INSTANCE_WARNING_MIN; else type = RAID_INSTANCE_WARNING_MIN_SOON; + WorldPacket data(SMSG_RAID_INSTANCE_MESSAGE, 4+4+4+4); data << uint32(type); data << uint32(mapid); - data << uint32(0); // may be difficulty + data << uint32(difficulty); // difficulty data << uint32(time); if(type == RAID_INSTANCE_WELCOME) { - data << uint8(0); - data << uint8(0); + data << uint8(0); // is your (1) + data << uint8(0); // is extended (1), ignored if prev field is 0 } GetSession()->SendPacket(&data); } diff --git a/src/game/Player.h b/src/game/Player.h index cd14d37f34f..9dcad34f0e8 100644 --- a/src/game/Player.h +++ b/src/game/Player.h @@ -894,7 +894,7 @@ class TRINITY_DLL_SPEC Player : public Unit void SendInitialPacketsBeforeAddToMap(); void SendInitialPacketsAfterAddToMap(); void SendTransferAborted(uint32 mapid, uint8 reason, uint8 arg = 0); - void SendInstanceResetWarning(uint32 mapid, uint32 time); + void SendInstanceResetWarning(uint32 mapid, uint32 difficulty, uint32 time); Creature* GetNPCIfCanInteractWith(uint64 guid, uint32 npcflagmask); bool CanInteractWithNPCs(bool alive = true) const; @@ -1532,6 +1532,7 @@ class TRINITY_DLL_SPEC Player : public Unit void SetDifficulty(uint32 dungeon_difficulty) { m_dungeonDifficulty = dungeon_difficulty; } uint8 GetDifficulty() { return m_dungeonDifficulty; } + bool IsHeroic() { return m_dungeonDifficulty == DIFFICULTY_HEROIC; } bool UpdateSkill(uint32 skill_id, uint32 step); bool UpdateSkillPro(uint16 SkillId, int32 Chance, uint32 step); @@ -1609,11 +1610,10 @@ class TRINITY_DLL_SPEC Player : public Unit void SendDelayResponse(const uint32); void SendLogXPGain(uint32 GivenXP,Unit* victim,uint32 RestXP); - //notifiers + // notifiers void SendAttackSwingCantAttack(); void SendAttackSwingCancelAttack(); void SendAttackSwingDeadTarget(); - void SendAttackSwingNotStanding(); void SendAttackSwingNotInRange(); void SendAttackSwingBadFacingAttack(); void SendAutoRepeatCancel(); |