diff options
| author | Vincent_Michael <Vincent_Michael@gmx.de> | 2014-01-21 21:57:09 +0100 |
|---|---|---|
| committer | Vincent_Michael <Vincent_Michael@gmx.de> | 2014-01-21 21:58:30 +0100 |
| commit | 3f99890b129c836cd364169ec4d69620bff0ca82 (patch) | |
| tree | c71f17ba9f1425ec1044b6dfec60c4e8aa2902a8 /src/server/game | |
| parent | 7c4a16e6c2f9cd6faa4d66ade9fa017267310632 (diff) | |
| parent | 101ac7f5110030ac12fa13f3e9a9d2c671e48734 (diff) | |
Merge branch 'master' of github.com:TrinityCore/TrinityCore into 4.3.4
Conflicts:
src/server/game/Entities/Unit/Unit.cpp
src/server/game/Entities/Unit/Unit.h
Diffstat (limited to 'src/server/game')
| -rw-r--r-- | src/server/game/AI/SmartScripts/SmartScriptMgr.cpp | 1 | ||||
| -rw-r--r-- | src/server/game/AI/SmartScripts/SmartScriptMgr.h | 17 | ||||
| -rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 11 | ||||
| -rw-r--r-- | src/server/game/Handlers/TicketHandler.cpp | 24 | ||||
| -rw-r--r-- | src/server/game/Spells/SpellMgr.cpp | 2 | ||||
| -rw-r--r-- | src/server/game/Tickets/TicketMgr.cpp | 37 | ||||
| -rw-r--r-- | src/server/game/Tickets/TicketMgr.h | 6 | ||||
| -rw-r--r-- | src/server/game/Weather/Weather.cpp | 16 | ||||
| -rw-r--r-- | src/server/game/Weather/WeatherMgr.cpp | 1 | ||||
| -rw-r--r-- | src/server/game/World/World.cpp | 10 | ||||
| -rw-r--r-- | src/server/game/World/World.h | 2 |
11 files changed, 76 insertions, 51 deletions
diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp b/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp index 543cb9235d3..d912de2a72c 100644 --- a/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp +++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp @@ -766,6 +766,7 @@ bool SmartAIMgr::IsEventValid(SmartScriptHolder& e) TC_LOG_ERROR("sql.sql", "SmartAIMgr: Entry %d SourceType %u Event %u Action %u attempts to set invalid phase, skipped.", e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType()); return false; } + if (!IsMinMaxValid(e, e.action.randomPhaseRange.phaseMin, e.action.randomPhaseRange.phaseMax)) return false; break; diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.h b/src/server/game/AI/SmartScripts/SmartScriptMgr.h index bb806717d97..d47dbeae600 100644 --- a/src/server/game/AI/SmartScripts/SmartScriptMgr.h +++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.h @@ -53,9 +53,12 @@ enum SMART_EVENT_PHASE SMART_EVENT_PHASE_4 = 4, SMART_EVENT_PHASE_5 = 5, SMART_EVENT_PHASE_6 = 6, - SMART_EVENT_PHASE_MAX = 7, + SMART_EVENT_PHASE_7 = 7, + SMART_EVENT_PHASE_8 = 8, + SMART_EVENT_PHASE_9 = 9, + SMART_EVENT_PHASE_MAX = 10, - SMART_EVENT_PHASE_COUNT = 6 + SMART_EVENT_PHASE_COUNT = 9 }; enum SMART_EVENT_PHASE_BITS @@ -67,7 +70,10 @@ enum SMART_EVENT_PHASE_BITS SMART_EVENT_PHASE_4_BIT = 8, SMART_EVENT_PHASE_5_BIT = 16, SMART_EVENT_PHASE_6_BIT = 32, - SMART_EVENT_PHASE_ALL = SMART_EVENT_PHASE_1_BIT + SMART_EVENT_PHASE_2_BIT + SMART_EVENT_PHASE_3_BIT + SMART_EVENT_PHASE_4_BIT + SMART_EVENT_PHASE_5_BIT + SMART_EVENT_PHASE_6_BIT + SMART_EVENT_PHASE_7_BIT = 64, + SMART_EVENT_PHASE_8_BIT = 128, + SMART_EVENT_PHASE_9_BIT = 256, + SMART_EVENT_PHASE_ALL = SMART_EVENT_PHASE_1_BIT + SMART_EVENT_PHASE_2_BIT + SMART_EVENT_PHASE_3_BIT + SMART_EVENT_PHASE_4_BIT + SMART_EVENT_PHASE_5_BIT + SMART_EVENT_PHASE_6_BIT + SMART_EVENT_PHASE_7_BIT + SMART_EVENT_PHASE_8_BIT + SMART_EVENT_PHASE_9_BIT }; const uint32 SmartPhaseMask[SMART_EVENT_PHASE_COUNT][2] = @@ -77,7 +83,10 @@ const uint32 SmartPhaseMask[SMART_EVENT_PHASE_COUNT][2] = {SMART_EVENT_PHASE_3, SMART_EVENT_PHASE_3_BIT }, {SMART_EVENT_PHASE_4, SMART_EVENT_PHASE_4_BIT }, {SMART_EVENT_PHASE_5, SMART_EVENT_PHASE_5_BIT }, - {SMART_EVENT_PHASE_6, SMART_EVENT_PHASE_6_BIT } + {SMART_EVENT_PHASE_6, SMART_EVENT_PHASE_6_BIT }, + {SMART_EVENT_PHASE_7, SMART_EVENT_PHASE_7_BIT }, + {SMART_EVENT_PHASE_8, SMART_EVENT_PHASE_8_BIT }, + {SMART_EVENT_PHASE_9, SMART_EVENT_PHASE_9_BIT } }; enum SMART_EVENT diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index b10ba3e52af..d57d1312add 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -7850,14 +7850,9 @@ void Player::UpdateZone(uint32 newZone, uint32 newArea) { if (Weather* weather = WeatherMgr::FindWeather(zone->ID)) weather->SendWeatherUpdateToPlayer(this); - else - { - if (!WeatherMgr::AddWeather(zone->ID)) - { - // send fine weather packet to remove old zone's weather - WeatherMgr::SendFineWeatherUpdateToPlayer(this); - } - } + else if (!WeatherMgr::AddWeather(zone->ID)) + // send fine weather packet to remove old zone's weather + WeatherMgr::SendFineWeatherUpdateToPlayer(this); } sScriptMgr->OnPlayerUpdateZone(this, newZone, newArea); diff --git a/src/server/game/Handlers/TicketHandler.cpp b/src/server/game/Handlers/TicketHandler.cpp index aefe7d96331..4ea4d835ae9 100644 --- a/src/server/game/Handlers/TicketHandler.cpp +++ b/src/server/game/Handlers/TicketHandler.cpp @@ -49,13 +49,23 @@ void WorldSession::HandleGMTicketCreateOpcode(WorldPacket& recvData) // Player must not have ticket if (!ticket || ticket->IsClosed()) { - ticket = new GmTicket(GetPlayer(), recvData); - + uint32 mapId; + float x, y, z; + std::string message; + uint32 needResponse; + bool needMoreHelp; uint32 count; std::list<uint32> times; uint32 decompressedSize; std::string chatLog; + recvData >> mapId; + recvData >> x >> y >> z; + recvData >> message; + + recvData >> needResponse; + recvData >> needMoreHelp; + recvData >> count; for (uint32 i = 0; i < count; i++) @@ -77,19 +87,25 @@ void WorldSession::HandleGMTicketCreateOpcode(WorldPacket& recvData) if (uncompress(dest.contents(), &realSize, recvData.contents() + pos, recvData.size() - pos) == Z_OK) { dest >> chatLog; - ticket->SetChatLog(times, chatLog); } else { TC_LOG_ERROR("network", "CMSG_GMTICKET_CREATE possibly corrupt. Uncompression failed."); recvData.rfinish(); - delete ticket; return; } recvData.rfinish(); // Will still have compressed data in buffer. } + ticket = new GmTicket(GetPlayer()); + ticket->SetPosition(mapId, x, y, z); + ticket->SetMessage(message); + ticket->SetGmAction(needResponse, needMoreHelp); + + if (!chatLog.empty()) + ticket->SetChatLog(times, chatLog); + sTicketMgr->AddTicket(ticket); sTicketMgr->UpdateLastChange(); diff --git a/src/server/game/Spells/SpellMgr.cpp b/src/server/game/Spells/SpellMgr.cpp index daa6c1f7c93..bac84951e21 100644 --- a/src/server/game/Spells/SpellMgr.cpp +++ b/src/server/game/Spells/SpellMgr.cpp @@ -817,7 +817,7 @@ bool SpellMgr::IsSpellProcEventCanTriggeredBy(SpellProcEventEntry const* spellPr { if (EventProcFlag & PROC_FLAG_TAKEN_SPELL_MAGIC_DMG_CLASS_POS) { - if (!(procExtra & PROC_EX_INTERNAL_DOT)) + if (!(procExtra & PROC_EX_INTERNAL_HOT)) return false; } else if (procExtra & PROC_EX_INTERNAL_HOT) diff --git a/src/server/game/Tickets/TicketMgr.cpp b/src/server/game/Tickets/TicketMgr.cpp index 5c536b2f929..c97a8b95678 100644 --- a/src/server/game/Tickets/TicketMgr.cpp +++ b/src/server/game/Tickets/TicketMgr.cpp @@ -34,26 +34,13 @@ inline float GetAge(uint64 t) { return float(time(NULL) - t) / DAY; } // GM ticket GmTicket::GmTicket() : _id(0), _playerGuid(0), _posX(0), _posY(0), _posZ(0), _mapId(0), _createTime(0), _lastModifiedTime(0), _closedBy(0), _assignedTo(0), _completed(false), _escalatedStatus(TICKET_UNASSIGNED), _viewed(false), - _needResponse(false), _haveTicket(false) { } + _needResponse(false), _needMoreHelp(false) { } -GmTicket::GmTicket(Player* player, WorldPacket& recvData) : _createTime(time(NULL)), _lastModifiedTime(time(NULL)), _closedBy(0), _assignedTo(0), _completed(false), _escalatedStatus(TICKET_UNASSIGNED), _viewed(false), _haveTicket(false) +GmTicket::GmTicket(Player* player) : _createTime(time(NULL)), _lastModifiedTime(time(NULL)), _closedBy(0), _assignedTo(0), _completed(false), _escalatedStatus(TICKET_UNASSIGNED), _viewed(false), _needMoreHelp(false), _needResponse(false) { _id = sTicketMgr->GenerateTicketId(); _playerName = player->GetName(); _playerGuid = player->GetGUID(); - - uint32 mapId; - recvData >> mapId; // Map is sent as UInt32! - _mapId = mapId; - - recvData >> _posX; - recvData >> _posY; - recvData >> _posZ; - recvData >> _message; - uint32 needResponse; - recvData >> needResponse; - _needResponse = (needResponse == 17); // Requires GM response. 17 = true, 1 = false (17 is default) - recvData >> _haveTicket; // Requests further GM interaction on a ticket to which a GM has already responded. Basically means "has a new ticket" } GmTicket::~GmTicket() { } @@ -80,7 +67,7 @@ bool GmTicket::LoadFromDB(Field* fields) _completed = fields[++index].GetBool(); _escalatedStatus = GMTicketEscalationStatus(fields[++index].GetUInt8()); _viewed = fields[++index].GetBool(); - _haveTicket = fields[++index].GetBool(); + _needMoreHelp = fields[++index].GetBool(); return true; } @@ -107,7 +94,7 @@ void GmTicket::SaveToDB(SQLTransaction& trans) const stmt->setBool (++index, _completed); stmt->setUInt8 (++index, uint8(_escalatedStatus)); stmt->setBool (++index, _viewed); - stmt->setBool (++index, _haveTicket); + stmt->setBool (++index, _needMoreHelp); CharacterDatabase.ExecuteOrAppend(trans, stmt); } @@ -124,7 +111,7 @@ void GmTicket::WritePacket(WorldPacket& data) const data << uint32(GMTICKET_STATUS_HASTEXT); data << uint32(_id); data << _message; - data << uint8(_haveTicket); + data << uint8(_needMoreHelp); data << GetAge(_lastModifiedTime); if (GmTicket* ticket = sTicketMgr->GetOldestOpenTicket()) data << GetAge(ticket->GetLastModifiedTime()); @@ -225,6 +212,20 @@ void GmTicket::SetUnassigned() } } +void GmTicket::SetPosition(uint32 mapId, float x, float y, float z) +{ + _mapId = mapId; + _posX = x; + _posY = y; + _posZ = z; +} + +void GmTicket::SetGmAction(uint32 needResponse, bool needMoreHelp) +{ + _needResponse = (needResponse == 17); // Requires GM response. 17 = true, 1 = false (17 is default) + _needMoreHelp = needMoreHelp; // Requests further GM interaction on a ticket to which a GM has already responded. Basically means "has a new ticket" +} + void GmTicket::TeleportTo(Player* player) const { player->TeleportTo(_mapId, _posX, _posY, _posZ, 0.0f, 0); diff --git a/src/server/game/Tickets/TicketMgr.h b/src/server/game/Tickets/TicketMgr.h index 3dd048189d7..5bfe78abbba 100644 --- a/src/server/game/Tickets/TicketMgr.h +++ b/src/server/game/Tickets/TicketMgr.h @@ -82,7 +82,7 @@ class GmTicket { public: GmTicket(); - GmTicket(Player* player, WorldPacket& recvData); + GmTicket(Player* player); ~GmTicket(); bool IsClosed() const { return _closedBy; } @@ -129,6 +129,8 @@ public: void SetComment(std::string const& comment) { _comment = comment; } void SetViewed() { _viewed = true; } void SetUnassigned(); + void SetPosition(uint32 mapId, float x, float y, float z); + void SetGmAction(uint32 needResponse, bool needMoreHelp); void AppendResponse(std::string const& response) { _response += response; } @@ -164,7 +166,7 @@ private: GMTicketEscalationStatus _escalatedStatus; bool _viewed; bool _needResponse; /// @todo find out the use of this, and then store it in DB - bool _haveTicket; + bool _needMoreHelp; std::string _response; std::string _chatLog; // No need to store in db, will be refreshed every session client side }; diff --git a/src/server/game/Weather/Weather.cpp b/src/server/game/Weather/Weather.cpp index 2a7e29629ff..79b4fbd8c69 100644 --- a/src/server/game/Weather/Weather.cpp +++ b/src/server/game/Weather/Weather.cpp @@ -195,7 +195,6 @@ bool Weather::ReGenerate() void Weather::SendWeatherUpdateToPlayer(Player* player) { WorldPacket data(SMSG_WEATHER, (4+4+4)); - data << uint32(GetWeatherState()) << (float)m_grade << uint8(0); player->GetSession()->SendPacket(&data); } @@ -203,10 +202,6 @@ void Weather::SendWeatherUpdateToPlayer(Player* player) /// Send the new weather to all players in the zone bool Weather::UpdateWeather() { - Player* player = sWorld->FindPlayerInZone(m_zone); - if (!player) - return false; - ///- Send the weather packet to all players in this zone if (m_grade >= 1) m_grade = 0.9999f; @@ -216,8 +211,13 @@ bool Weather::UpdateWeather() WeatherState state = GetWeatherState(); WorldPacket data(SMSG_WEATHER, (4+4+4)); - data << uint32(state) << (float)m_grade << uint8(0); - player->SendMessageToSet(&data, true); + data << uint32(state); + data << (float)m_grade; + data << uint8(0); + + //- Returns false if there were no players found to update + if (!sWorld->SendZoneMessage(m_zone, &data)) + return false; ///- Log the event char const* wthstr; @@ -264,8 +264,8 @@ bool Weather::UpdateWeather() wthstr = "fine"; break; } - TC_LOG_INFO("misc", "Change the weather of zone %u to %s.", m_zone, wthstr); + TC_LOG_INFO("misc", "Change the weather of zone %u to %s.", m_zone, wthstr); sScriptMgr->OnWeatherChange(this, state, m_grade); return true; } diff --git a/src/server/game/Weather/WeatherMgr.cpp b/src/server/game/Weather/WeatherMgr.cpp index 69dce957558..9faecdf7c99 100644 --- a/src/server/game/Weather/WeatherMgr.cpp +++ b/src/server/game/Weather/WeatherMgr.cpp @@ -146,7 +146,6 @@ void LoadWeatherData() void SendFineWeatherUpdateToPlayer(Player* player) { WorldPacket data(SMSG_WEATHER, (4+4+4)); - data << (uint32)WEATHER_STATE_FINE << (float)0.0f << uint8(0); player->GetSession()->SendPacket(&data); } diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp index ef6f2869ec5..5f6fb683e8f 100644 --- a/src/server/game/World/World.cpp +++ b/src/server/game/World/World.cpp @@ -172,10 +172,7 @@ Player* World::FindPlayerInZone(uint32 zone) continue; if (player->IsInWorld() && player->GetZoneId() == zone) - { - // Used by the weather system. We return the player to broadcast the change weather message to him and all players in the zone. return player; - } } return NULL; } @@ -2322,9 +2319,11 @@ void World::SendGlobalText(const char* text, WorldSession* self) } /// Send a packet to all players (or players selected team) in the zone (except self if mentioned) -void World::SendZoneMessage(uint32 zone, WorldPacket* packet, WorldSession* self, uint32 team) +bool World::SendZoneMessage(uint32 zone, WorldPacket* packet, WorldSession* self, uint32 team) { + bool foundPlayerToSend = false; SessionMap::const_iterator itr; + for (itr = m_sessions.begin(); itr != m_sessions.end(); ++itr) { if (itr->second && @@ -2335,8 +2334,11 @@ void World::SendZoneMessage(uint32 zone, WorldPacket* packet, WorldSession* self (team == 0 || itr->second->GetPlayer()->GetTeam() == team)) { itr->second->SendPacket(packet); + foundPlayerToSend = true; } } + + return foundPlayerToSend; } /// Send a System Message to all players in the zone (except self if mentioned) diff --git a/src/server/game/World/World.h b/src/server/game/World/World.h index 6f81c4fae97..c8937a062b6 100644 --- a/src/server/game/World/World.h +++ b/src/server/game/World/World.h @@ -648,7 +648,7 @@ class World void SendGMText(int32 string_id, ...); void SendGlobalMessage(WorldPacket* packet, WorldSession* self = 0, uint32 team = 0); void SendGlobalGMMessage(WorldPacket* packet, WorldSession* self = 0, uint32 team = 0); - void SendZoneMessage(uint32 zone, WorldPacket* packet, WorldSession* self = 0, uint32 team = 0); + bool SendZoneMessage(uint32 zone, WorldPacket* packet, WorldSession* self = 0, uint32 team = 0); void SendZoneText(uint32 zone, const char *text, WorldSession* self = 0, uint32 team = 0); void SendServerMessage(ServerMessageType type, const char *text = "", Player* player = NULL); |
