diff options
author | Shauren <shauren.trinity@gmail.com> | 2013-03-17 01:53:53 +0100 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2013-03-17 01:53:53 +0100 |
commit | ffe25145eb905a34225714251e2a0b1daf6e0ff8 (patch) | |
tree | 333d9157402ea9d48f8e05ce7675dae6d2352117 /src | |
parent | a8aa684261529757c6fcf6dc3b71597754451858 (diff) | |
parent | 7458f38764ccbcbd79d601dd022a10c89ec5980b (diff) |
Merge branch '4.3.4' of github.com:TrinityCore/TrinityCore into 4.3.4
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/AI/SmartScripts/SmartScriptMgr.h | 4 | ||||
-rw-r--r-- | src/server/game/Entities/Player/Player.h | 1 | ||||
-rw-r--r-- | src/server/game/Entities/Unit/Unit.cpp | 13 | ||||
-rw-r--r-- | src/server/game/Handlers/ChatHandler.cpp | 22 | ||||
-rw-r--r-- | src/server/game/Miscellaneous/Language.h | 3 | ||||
-rw-r--r-- | src/server/game/Server/WorldSession.cpp | 3 | ||||
-rw-r--r-- | src/server/scripts/Commands/cs_message.cpp | 20 |
7 files changed, 46 insertions, 20 deletions
diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.h b/src/server/game/AI/SmartScripts/SmartScriptMgr.h index d300cf64451..9b5d715b90b 100644 --- a/src/server/game/AI/SmartScripts/SmartScriptMgr.h +++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.h @@ -105,8 +105,8 @@ enum SMART_EVENT SMART_EVENT_REWARD_QUEST = 20, // QuestID(0any) SMART_EVENT_REACHED_HOME = 21, // NONE SMART_EVENT_RECEIVE_EMOTE = 22, // EmoteId, CooldownMin, CooldownMax, condition, val1, val2, val3 - SMART_EVENT_HAS_AURA = 23, // Param1 = SpellID, Param2 = Number of Time STacked, Param3/4 RepeatMin, RepeatMax - SMART_EVENT_TARGET_BUFFED = 24, // Param1 = SpellID, Param2 = Number of Time STacked, Param3/4 RepeatMin, RepeatMax + SMART_EVENT_HAS_AURA = 23, // Param1 = SpellID, Param2 = Stack amount, Param3/4 RepeatMin, RepeatMax + SMART_EVENT_TARGET_BUFFED = 24, // Param1 = SpellID, Param2 = Stack amount, Param3/4 RepeatMin, RepeatMax SMART_EVENT_RESET = 25, // Called after combat, when the creature respawn and spawn. SMART_EVENT_IC_LOS = 26, // NoHostile, MaxRnage, CooldownMin, CooldownMax SMART_EVENT_PASSENGER_BOARDED = 27, // CooldownMin, CooldownMax diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index c708179fe04..ab02b316ce5 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -2484,6 +2484,7 @@ class Player : public Unit, public GridObject<Player> void ClearWhisperWhiteList() { WhisperList.clear(); } void AddWhisperWhiteList(uint64 guid) { WhisperList.push_back(guid); } bool IsInWhisperWhiteList(uint64 guid); + void RemoveFromWhisperWhiteList(uint64 guid) { WhisperList.remove(guid); } /*! These methods send different packets to the client in apply and unapply case. These methods are only sent to the current unit. diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index 655fb41cc83..54454e46a4a 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -16362,7 +16362,7 @@ void Unit::_ExitVehicle(Position const* exitPosition) Player* player = ToPlayer(); - // If player is on mouted duel and exits the mount should immediatly lose the duel + // If the player is on mounted duel and exits the mount, he should immediatly lose the duel if (player && player->duel && player->duel->isMounted) player->DuelComplete(DUEL_FLED); @@ -16390,14 +16390,19 @@ void Unit::_ExitVehicle(Position const* exitPosition) SendMessageToSet(&data, false); } + float height = pos.GetPositionZ(); + Movement::MoveSplineInit init(this); - init.MoveTo(pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ(), false); + + // Creatures without inhabit type air should begin falling after exiting the vehicle + if (GetTypeId() == TYPEID_UNIT && !CanFly() && height > GetMap()->GetWaterOrGroundLevel(pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ(), &height) + 0.1f) + init.SetFall(); + + init.MoveTo(pos.GetPositionX(), pos.GetPositionY(), height, false); init.SetFacing(GetOrientation()); init.SetTransportExit(); init.Launch(); - //GetMotionMaster()->MoveFall(); // Enable this once passenger positions are calculater properly (see above) - if (player) player->ResummonPetTemporaryUnSummonedIfAny(); diff --git a/src/server/game/Handlers/ChatHandler.cpp b/src/server/game/Handlers/ChatHandler.cpp index 6abde6cac04..ca79c1c350a 100644 --- a/src/server/game/Handlers/ChatHandler.cpp +++ b/src/server/game/Handlers/ChatHandler.cpp @@ -314,12 +314,6 @@ void WorldSession::HandleMessagechatOpcode(WorldPacket& recvData) } break; case CHAT_MSG_WHISPER: { - if (sender->getLevel() < sWorld->getIntConfig(CONFIG_CHAT_WHISPER_LEVEL_REQ)) - { - SendNotification(GetTrinityString(LANG_WHISPER_REQ), sWorld->getIntConfig(CONFIG_CHAT_WHISPER_LEVEL_REQ)); - return; - } - if (!normalizePlayerName(to)) { SendPlayerNotFoundNotice(to); @@ -327,16 +321,18 @@ void WorldSession::HandleMessagechatOpcode(WorldPacket& recvData) } Player* receiver = sObjectAccessor->FindPlayerByName(to); - if (!receiver || (!HasPermission(RBAC_PERM_CAN_FILTER_WHISPERS) && - !receiver->isAcceptWhispers() && !receiver->IsInWhisperWhiteList(sender->GetGUID()))) + if (!receiver) { SendPlayerNotFoundNotice(to); return; } + if (!sender->isGameMaster() && sender->getLevel() < sWorld->getIntConfig(CONFIG_CHAT_WHISPER_LEVEL_REQ) && !receiver->IsInWhisperWhiteList(sender->GetGUID())) + { + SendNotification(GetTrinityString(LANG_WHISPER_REQ), sWorld->getIntConfig(CONFIG_CHAT_WHISPER_LEVEL_REQ)); + return; + } - // @todo: check only sender permission and add receiver to whiteList if receiver does not have the permission - if (GetPlayer()->GetTeam() != receiver->GetTeam() && !HasPermission(RBAC_PERM_TWO_SIDE_INTERACTION_CHAT) && - !receiver->GetSession()->HasPermission(RBAC_PERM_TWO_SIDE_INTERACTION_CHAT)) + if (GetPlayer()->GetTeam() != receiver->GetTeam() && !HasPermission(RBAC_PERM_TWO_SIDE_INTERACTION_CHAT) && !receiver->IsInWhisperWhiteList(sender->GetGUID())) { SendWrongFactionNotice(); return; @@ -349,7 +345,9 @@ void WorldSession::HandleMessagechatOpcode(WorldPacket& recvData) } // If player is a Gamemaster and doesn't accept whisper, we auto-whitelist every player that the Gamemaster is talking to - if (HasPermission(RBAC_PERM_CAN_FILTER_WHISPERS) && !sender->isAcceptWhispers() && !sender->IsInWhisperWhiteList(receiver->GetGUID())) + // We also do that if a player is under the required level for whispers. + if (receiver->getLevel() < sWorld->getIntConfig(CONFIG_CHAT_WHISPER_LEVEL_REQ) || + (HasPermission(RBAC_PERM_CAN_FILTER_WHISPERS) && !sender->isAcceptWhispers() && !sender->IsInWhisperWhiteList(receiver->GetGUID()))) sender->AddWhisperWhiteList(receiver->GetGUID()); GetPlayer()->Whisper(msg, lang, receiver->GetGUID()); diff --git a/src/server/game/Miscellaneous/Language.h b/src/server/game/Miscellaneous/Language.h index 99d36135977..1ac10e156ad 100644 --- a/src/server/game/Miscellaneous/Language.h +++ b/src/server/game/Miscellaneous/Language.h @@ -384,7 +384,8 @@ enum TrinityStrings LANG_COMMAND_CHEAT_CD = 360, LANG_COMMAND_CHEAT_POWER = 361, LANG_COMMAND_CHEAT_WW = 362, - // Room for more level 2 363-399 not used + LANG_COMMAND_WHISPEROFFPLAYER = 363, + // Room for more level 2 364-399 not used // level 3 chat LANG_SCRIPTS_RELOADED = 400, diff --git a/src/server/game/Server/WorldSession.cpp b/src/server/game/Server/WorldSession.cpp index 642e6e7d29c..074e04547f6 100644 --- a/src/server/game/Server/WorldSession.cpp +++ b/src/server/game/Server/WorldSession.cpp @@ -516,6 +516,9 @@ void WorldSession::LogoutPlayer(bool save) ///- Remove pet _player->RemovePet(NULL, PET_SAVE_AS_CURRENT, true); + ///- Clear whisper whitelist + _player->ClearWhisperWhiteList(); + ///- empty buyback items and save the player in the database // some save parts only correctly work in case player present in map/player_lists (pets, etc) if (save) diff --git a/src/server/scripts/Commands/cs_message.cpp b/src/server/scripts/Commands/cs_message.cpp index e2c53492e9d..66f55b85c1c 100644 --- a/src/server/scripts/Commands/cs_message.cpp +++ b/src/server/scripts/Commands/cs_message.cpp @@ -27,6 +27,7 @@ EndScriptData */ #include "ChannelMgr.h" #include "Language.h" #include "Player.h" +#include "ObjectMgr.h" class message_commandscript : public CommandScript { @@ -186,7 +187,7 @@ public: return true; } - std::string argStr = (char*)args; + std::string argStr = strtok((char*)args, " "); // whisper on if (argStr == "on") { @@ -205,6 +206,23 @@ public: return true; } + if (argStr == "remove") + { + std::string name = strtok(NULL, " "); + if (normalizePlayerName(name)) + if (Player* player = sObjectAccessor->FindPlayerByName(name)) + { + handler->GetSession()->GetPlayer()->RemoveFromWhisperWhiteList(player->GetGUID()); + handler->PSendSysMessage(LANG_COMMAND_WHISPEROFFPLAYER, name); + return true; + } + else + { + handler->PSendSysMessage(LANG_PLAYER_NOT_FOUND, name); + handler->SetSentErrorMessage(true); + return false; + } + } handler->SendSysMessage(LANG_USE_BOL); handler->SetSentErrorMessage(true); return false; |