mirror of
https://github.com/mangosfour/server.git
synced 2025-12-20 07:37:02 +00:00
50 plus cmangos updates implemented (to c12832)
Implemented over 50 updates from the cmangos Cata repo, up to and including c12832 Improve random movement The core will now work with the creature_template update that was applied to the database yesterday.
This commit is contained in:
parent
12f8fbf37d
commit
e4d1bdfc74
80 changed files with 3164 additions and 2965 deletions
|
|
@ -536,7 +536,8 @@ ChatCommand* ChatHandler::getCommandTable()
|
|||
{ "creature_ai_scripts", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadEventAIScriptsCommand, "", NULL },
|
||||
{ "creature_ai_summons", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadEventAISummonsCommand, "", NULL },
|
||||
{ "creature_ai_texts", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadEventAITextsCommand, "", NULL },
|
||||
{ "creature_battleground", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadBattleEventCommand, "", NULL },
|
||||
{ "creature_battleground", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadBattleEventCommand, "", NULL },
|
||||
{ "creature_template_classlevelstats", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadCreaturesStatsCommand, "", nullptr },
|
||||
{ "creature_involvedrelation", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadCreatureQuestInvRelationsCommand, "", NULL },
|
||||
{ "creature_loot_template", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadLootTemplatesCreatureCommand, "", NULL },
|
||||
{ "creature_questrelation", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadCreatureQuestRelationsCommand, "", NULL },
|
||||
|
|
@ -985,7 +986,7 @@ void ChatHandler::SendSysMessage(const char* str)
|
|||
|
||||
while (char* line = LineFromMessage(pos))
|
||||
{
|
||||
FillSystemMessageData(&data, line);
|
||||
ChatHandler::BuildChatPacket(data, CHAT_MSG_SYSTEM, line, LANG_UNIVERSAL, CHAT_TAG_NONE, m_session->GetPlayer()->GetObjectGuid());
|
||||
m_session->SendPacket(&data);
|
||||
}
|
||||
|
||||
|
|
@ -1000,10 +1001,11 @@ void ChatHandler::SendGlobalSysMessage(const char* str)
|
|||
// need copy to prevent corruption by strtok call in LineFromMessage original string
|
||||
char* buf = mangos_strdup(str);
|
||||
char* pos = buf;
|
||||
ObjectGuid guid = m_session ? m_session->GetPlayer()->GetObjectGuid() : ObjectGuid();
|
||||
|
||||
while (char* line = LineFromMessage(pos))
|
||||
{
|
||||
FillSystemMessageData(&data, line);
|
||||
ChatHandler::BuildChatPacket(data, CHAT_MSG_SYSTEM, line, LANG_UNIVERSAL, CHAT_TAG_NONE, guid);
|
||||
sWorld.SendGlobalMessage(&data);
|
||||
}
|
||||
|
||||
|
|
@ -2095,99 +2097,6 @@ bool ChatHandler::isValidChatMessage(const char* message)
|
|||
return validSequence == validSequenceIterator;
|
||||
}
|
||||
|
||||
// Note: target_guid used only in CHAT_MSG_WHISPER_INFORM mode (in this case channelName ignored)
|
||||
void ChatHandler::FillMessageData(WorldPacket* data, WorldSession* session, uint8 type, uint32 language, const char* channelName, ObjectGuid targetGuid, const char* message, Unit* speaker, const char* addonPrefix /*= NULL*/)
|
||||
{
|
||||
uint32 messageLength = (message ? strlen(message) : 0) + 1;
|
||||
|
||||
data->Initialize(SMSG_MESSAGECHAT, 100); // guess size
|
||||
*data << uint8(type);
|
||||
if ((type != CHAT_MSG_CHANNEL && type != CHAT_MSG_WHISPER) || language == LANG_ADDON)
|
||||
*data << uint32(language);
|
||||
else
|
||||
*data << uint32(LANG_UNIVERSAL);
|
||||
|
||||
switch (type)
|
||||
{
|
||||
case CHAT_MSG_SAY:
|
||||
case CHAT_MSG_PARTY:
|
||||
case CHAT_MSG_PARTY_LEADER:
|
||||
case CHAT_MSG_RAID:
|
||||
case CHAT_MSG_GUILD:
|
||||
case CHAT_MSG_OFFICER:
|
||||
case CHAT_MSG_YELL:
|
||||
case CHAT_MSG_WHISPER:
|
||||
case CHAT_MSG_CHANNEL:
|
||||
case CHAT_MSG_RAID_LEADER:
|
||||
case CHAT_MSG_RAID_WARNING:
|
||||
case CHAT_MSG_BG_SYSTEM_NEUTRAL:
|
||||
case CHAT_MSG_BG_SYSTEM_ALLIANCE:
|
||||
case CHAT_MSG_BG_SYSTEM_HORDE:
|
||||
case CHAT_MSG_BATTLEGROUND:
|
||||
case CHAT_MSG_BATTLEGROUND_LEADER:
|
||||
targetGuid = session ? session->GetPlayer()->GetObjectGuid() : ObjectGuid();
|
||||
break;
|
||||
case CHAT_MSG_MONSTER_SAY:
|
||||
case CHAT_MSG_MONSTER_PARTY:
|
||||
case CHAT_MSG_MONSTER_YELL:
|
||||
case CHAT_MSG_MONSTER_WHISPER:
|
||||
case CHAT_MSG_MONSTER_EMOTE:
|
||||
case CHAT_MSG_RAID_BOSS_WHISPER:
|
||||
case CHAT_MSG_RAID_BOSS_EMOTE:
|
||||
case CHAT_MSG_BATTLENET:
|
||||
{
|
||||
*data << ObjectGuid(speaker->GetObjectGuid());
|
||||
*data << uint32(0); // 2.1.0
|
||||
*data << uint32(strlen(speaker->GetName()) + 1);
|
||||
*data << speaker->GetName();
|
||||
ObjectGuid listener_guid;
|
||||
*data << listener_guid;
|
||||
if (listener_guid && !listener_guid.IsPlayer())
|
||||
{
|
||||
*data << uint32(1); // string listener_name_length
|
||||
*data << uint8(0); // string listener_name
|
||||
}
|
||||
*data << uint32(messageLength);
|
||||
*data << message;
|
||||
*data << uint8(0);
|
||||
|
||||
if (type == CHAT_MSG_RAID_BOSS_WHISPER || type == CHAT_MSG_RAID_BOSS_EMOTE)
|
||||
{
|
||||
*data << float(0.0f); // Added in 4.2.0, unk
|
||||
*data << uint8(0); // Added in 4.2.0, unk
|
||||
}
|
||||
return;
|
||||
}
|
||||
default:
|
||||
if (type != CHAT_MSG_WHISPER_INFORM && type != CHAT_MSG_IGNORED && type != CHAT_MSG_DND && type != CHAT_MSG_AFK)
|
||||
targetGuid.Clear(); // only for CHAT_MSG_WHISPER_INFORM used original value target_guid
|
||||
break;
|
||||
}
|
||||
|
||||
*data << ObjectGuid(targetGuid); // there 0 for BG messages
|
||||
*data << uint32(0); // can be chat msg group or something
|
||||
|
||||
if (type == CHAT_MSG_CHANNEL)
|
||||
{
|
||||
MANGOS_ASSERT(channelName);
|
||||
*data << channelName;
|
||||
*data << ObjectGuid(targetGuid);
|
||||
}
|
||||
else if (type == CHAT_MSG_ADDON)
|
||||
{
|
||||
MANGOS_ASSERT(addonPrefix);
|
||||
*data << addonPrefix;
|
||||
}
|
||||
else
|
||||
*data << ObjectGuid(targetGuid);
|
||||
*data << uint32(messageLength);
|
||||
*data << message;
|
||||
if (session != 0 && type != CHAT_MSG_WHISPER_INFORM && type != CHAT_MSG_DND && type != CHAT_MSG_AFK)
|
||||
*data << uint8(session->GetPlayer()->GetChatTag());
|
||||
else
|
||||
*data << uint8(0);
|
||||
}
|
||||
|
||||
Player* ChatHandler::getSelectedPlayer()
|
||||
{
|
||||
if (!m_session)
|
||||
|
|
@ -3717,11 +3626,12 @@ void ChatHandler::LogCommand(char const* fullcmd)
|
|||
}
|
||||
|
||||
void ChatHandler::BuildChatPacket(WorldPacket& data, ChatMsg msgtype, char const* message, Language language /*= LANG_UNIVERSAL*/, ChatTagFlags chatTag /*= CHAT_TAG_NONE*/,
|
||||
ObjectGuid const& senderGuid /*= ObjectGuid()*/, char const* senderName /*= NULL*/,
|
||||
ObjectGuid const& targetGuid /*= ObjectGuid()*/, char const* targetName /*= NULL*/,
|
||||
char const* channelName /*= NULL*/)
|
||||
ObjectGuid const& senderGuid /*= ObjectGuid()*/, char const* senderName /*= nullptr*/,
|
||||
ObjectGuid const& targetGuid /*= ObjectGuid()*/, char const* targetName /*= nullptr*/,
|
||||
char const* channelName /*= nullptr*/, uint32 achievementId /*= 0*/, const char* addonPrefix /*= nullptr*/)
|
||||
{
|
||||
bool isGM = chatTag & CHAT_TAG_GM;
|
||||
bool isAchievement = false;
|
||||
|
||||
data.Initialize(isGM ? SMSG_GM_MESSAGECHAT : SMSG_MESSAGECHAT);
|
||||
data << uint8(msgtype);
|
||||
|
|
@ -3731,60 +3641,76 @@ void ChatHandler::BuildChatPacket(WorldPacket& data, ChatMsg msgtype, char const
|
|||
|
||||
switch (msgtype)
|
||||
{
|
||||
case CHAT_MSG_MONSTER_SAY:
|
||||
case CHAT_MSG_MONSTER_PARTY:
|
||||
case CHAT_MSG_MONSTER_YELL:
|
||||
case CHAT_MSG_MONSTER_WHISPER:
|
||||
case CHAT_MSG_RAID_BOSS_WHISPER:
|
||||
case CHAT_MSG_RAID_BOSS_EMOTE:
|
||||
case CHAT_MSG_MONSTER_EMOTE:
|
||||
MANGOS_ASSERT(senderName);
|
||||
data << uint32(strlen(senderName) + 1);
|
||||
data << senderName;
|
||||
data << ObjectGuid(targetGuid); // Unit Target
|
||||
if (targetGuid && !targetGuid.IsPlayer() && !targetGuid.IsPet())
|
||||
{
|
||||
data << uint32(strlen(targetName) + 1); // target name length
|
||||
data << targetName; // target name
|
||||
}
|
||||
MANGOS_ASSERT(message);
|
||||
data << uint32(strlen(message) + 1);
|
||||
data << message;
|
||||
data << uint8(chatTag);
|
||||
break;
|
||||
case CHAT_MSG_BG_SYSTEM_NEUTRAL:
|
||||
case CHAT_MSG_BG_SYSTEM_ALLIANCE:
|
||||
case CHAT_MSG_BG_SYSTEM_HORDE:
|
||||
data << ObjectGuid(targetGuid); // Unit Target
|
||||
if (targetGuid && !targetGuid.IsPlayer())
|
||||
{
|
||||
MANGOS_ASSERT(targetName);
|
||||
data << uint32(strlen(targetName) + 1); // target name length
|
||||
data << targetName; // target name
|
||||
}
|
||||
MANGOS_ASSERT(message);
|
||||
data << uint32(strlen(message) + 1);
|
||||
data << message;
|
||||
data << uint8(chatTag);
|
||||
break;
|
||||
default:
|
||||
if (msgtype == CHAT_MSG_CHANNEL)
|
||||
{
|
||||
MANGOS_ASSERT(channelName);
|
||||
data << channelName;
|
||||
}
|
||||
data << ObjectGuid(targetGuid);
|
||||
MANGOS_ASSERT(message);
|
||||
data << uint32(strlen(message) + 1);
|
||||
data << message;
|
||||
data << uint8(chatTag);
|
||||
if (isGM)
|
||||
{
|
||||
case CHAT_MSG_MONSTER_SAY:
|
||||
case CHAT_MSG_MONSTER_PARTY:
|
||||
case CHAT_MSG_MONSTER_YELL:
|
||||
case CHAT_MSG_MONSTER_WHISPER:
|
||||
case CHAT_MSG_MONSTER_EMOTE:
|
||||
case CHAT_MSG_RAID_BOSS_WHISPER:
|
||||
case CHAT_MSG_RAID_BOSS_EMOTE:
|
||||
case CHAT_MSG_BATTLENET:
|
||||
case CHAT_MSG_WHISPER_FOREIGN:
|
||||
MANGOS_ASSERT(senderName);
|
||||
data << uint32(strlen(senderName) + 1);
|
||||
data << senderName;
|
||||
}
|
||||
break;
|
||||
data << ObjectGuid(targetGuid); // Unit Target
|
||||
if (targetGuid && !targetGuid.IsPlayer() && !targetGuid.IsPet() && (msgtype != CHAT_MSG_WHISPER_FOREIGN))
|
||||
{
|
||||
data << uint32(strlen(targetName) + 1); // target name length
|
||||
data << targetName; // target name
|
||||
}
|
||||
break;
|
||||
case CHAT_MSG_BG_SYSTEM_NEUTRAL:
|
||||
case CHAT_MSG_BG_SYSTEM_ALLIANCE:
|
||||
case CHAT_MSG_BG_SYSTEM_HORDE:
|
||||
data << ObjectGuid(targetGuid); // Unit Target
|
||||
if (targetGuid && !targetGuid.IsPlayer())
|
||||
{
|
||||
MANGOS_ASSERT(targetName);
|
||||
data << uint32(strlen(targetName) + 1); // target name length
|
||||
data << targetName; // target name
|
||||
}
|
||||
break;
|
||||
case CHAT_MSG_ACHIEVEMENT:
|
||||
case CHAT_MSG_GUILD_ACHIEVEMENT:
|
||||
data << ObjectGuid(targetGuid); // Unit Target
|
||||
isAchievement = true;
|
||||
break;
|
||||
default:
|
||||
if (isGM)
|
||||
{
|
||||
MANGOS_ASSERT(senderName);
|
||||
data << uint32(strlen(senderName) + 1);
|
||||
data << senderName;
|
||||
}
|
||||
|
||||
if (msgtype == CHAT_MSG_CHANNEL)
|
||||
{
|
||||
MANGOS_ASSERT(channelName);
|
||||
data << channelName;
|
||||
data << ObjectGuid(targetGuid);
|
||||
}
|
||||
else if (msgtype == CHAT_MSG_ADDON)
|
||||
{
|
||||
MANGOS_ASSERT(addonPrefix);
|
||||
data << addonPrefix;
|
||||
}
|
||||
else
|
||||
data << ObjectGuid(targetGuid);
|
||||
break;
|
||||
}
|
||||
MANGOS_ASSERT(message);
|
||||
data << uint32(strlen(message) + 1);
|
||||
data << message;
|
||||
data << uint8(chatTag);
|
||||
|
||||
if (isAchievement)
|
||||
data << uint32(achievementId);
|
||||
|
||||
if (msgtype == CHAT_MSG_RAID_BOSS_WHISPER || msgtype == CHAT_MSG_RAID_BOSS_EMOTE)
|
||||
{
|
||||
data << float(0.0f); // Added in 4.2.0, unk
|
||||
data << uint8(0); // Added in 4.2.0, unk
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue