aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2013-03-17 01:53:53 +0100
committerShauren <shauren.trinity@gmail.com>2013-03-17 01:53:53 +0100
commitffe25145eb905a34225714251e2a0b1daf6e0ff8 (patch)
tree333d9157402ea9d48f8e05ce7675dae6d2352117 /src
parenta8aa684261529757c6fcf6dc3b71597754451858 (diff)
parent7458f38764ccbcbd79d601dd022a10c89ec5980b (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.h4
-rw-r--r--src/server/game/Entities/Player/Player.h1
-rw-r--r--src/server/game/Entities/Unit/Unit.cpp13
-rw-r--r--src/server/game/Handlers/ChatHandler.cpp22
-rw-r--r--src/server/game/Miscellaneous/Language.h3
-rw-r--r--src/server/game/Server/WorldSession.cpp3
-rw-r--r--src/server/scripts/Commands/cs_message.cpp20
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;