diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/server/game/Entities/Object/Object.cpp | 117 | ||||
| -rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 3 | ||||
| -rw-r--r-- | src/server/game/Entities/Unit/Unit.cpp | 4 | ||||
| -rw-r--r-- | src/server/game/Handlers/ChatHandler.cpp | 16 | ||||
| -rw-r--r-- | src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp | 5 | ||||
| -rw-r--r-- | src/server/game/World/World.cpp | 11 | ||||
| -rw-r--r-- | src/server/game/World/World.h | 9 | ||||
| -rw-r--r-- | src/server/scripts/World/chat_log.cpp | 225 | ||||
| -rw-r--r-- | src/server/shared/Debugging/WheatyExceptionReport.cpp | 26 | ||||
| -rw-r--r-- | src/server/shared/Logging/Log.cpp | 12 | ||||
| -rw-r--r-- | src/server/shared/Logging/Log.h | 6 | ||||
| -rw-r--r-- | src/server/worldserver/worldserver.conf.dist | 72 |
12 files changed, 159 insertions, 347 deletions
diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp index 69f7073ce1b..c0a54060298 100644 --- a/src/server/game/Entities/Object/Object.cpp +++ b/src/server/game/Entities/Object/Object.cpp @@ -2489,125 +2489,36 @@ void WorldObject::GetNearPoint(WorldObject const* /*searcher*/, float &x, float { GetNearPoint2D(x, y, distance2d+searcher_size, absAngle); z = GetPositionZ(); + // Should "searcher" be used instead of "this" when updating z coordinate ? UpdateAllowedPositionZ(x, y, z); - /* // if detection disabled, return first point - if (!sWorld->getIntConfig(CONFIG_DETECT_POS_COLLISION)) - { - UpdateGroundPositionZ(x, y, z); // update to LOS height if available + if (!sWorld->getBoolConfig(CONFIG_DETECT_POS_COLLISION)) return; - } - // or remember first point - float first_x = x; - float first_y = y; - bool first_los_conflict = false; // first point LOS problems - - // prepare selector for work - ObjectPosSelector selector(GetPositionX(), GetPositionY(), GetObjectSize(), distance2d+searcher_size); - - // adding used positions around object - { - CellCoord p(Trinity::ComputeCellCoord(GetPositionX(), GetPositionY())); - Cell cell(p); - cell.SetNoCreate(); - - Trinity::NearUsedPosDo u_do(*this, searcher, absAngle, selector); - Trinity::WorldObjectWorker<Trinity::NearUsedPosDo> worker(this, u_do); - - TypeContainerVisitor<Trinity::WorldObjectWorker<Trinity::NearUsedPosDo>, GridTypeMapContainer > grid_obj_worker(worker); - TypeContainerVisitor<Trinity::WorldObjectWorker<Trinity::NearUsedPosDo>, WorldTypeMapContainer > world_obj_worker(worker); - - CellLock<GridReadGuard> cell_lock(cell, p); - cell_lock->Visit(cell_lock, grid_obj_worker, *GetMap(), *this, distance2d); - cell_lock->Visit(cell_lock, world_obj_worker, *GetMap(), *this, distance2d); - } - - // maybe can just place in primary position - if (selector.CheckOriginal()) - { - UpdateGroundPositionZ(x, y, z); // update to LOS height if available - - if (IsWithinLOS(x, y, z)) - return; - - first_los_conflict = true; // first point have LOS problems - } - - float angle; // candidate of angle for free pos - - // special case when one from list empty and then empty side preferred - if (selector.FirstAngle(angle)) - { - GetNearPoint2D(x, y, distance2d, absAngle+angle); - z = GetPositionZ(); - UpdateGroundPositionZ(x, y, z); // update to LOS height if available - - if (IsWithinLOS(x, y, z)) - return; - } - - // set first used pos in lists - selector.InitializeAngle(); - - // select in positions after current nodes (selection one by one) - while (selector.NextAngle(angle)) // angle for free pos - { - GetNearPoint2D(x, y, distance2d, absAngle+angle); - z = GetPositionZ(); - UpdateGroundPositionZ(x, y, z); // update to LOS height if available - - if (IsWithinLOS(x, y, z)) - return; - } - - // BAD NEWS: not free pos (or used or have LOS problems) - // Attempt find _used_ pos without LOS problem - - if (!first_los_conflict) - { - x = first_x; - y = first_y; - - UpdateGroundPositionZ(x, y, z); // update to LOS height if available + // return if the point is already in LoS + if (IsWithinLOS(x, y, z)) return; - } - - // special case when one from list empty and then empty side preferred - if (selector.IsNonBalanced()) - { - if (!selector.FirstAngle(angle)) // _used_ pos - { - GetNearPoint2D(x, y, distance2d, absAngle+angle); - z = GetPositionZ(); - UpdateGroundPositionZ(x, y, z); // update to LOS height if available - - if (IsWithinLOS(x, y, z)) - return; - } - } - // set first used pos in lists - selector.InitializeAngle(); + // remember first point + float first_x = x; + float first_y = y; + float first_z = z; - // select in positions after current nodes (selection one by one) - while (selector.NextUsedAngle(angle)) // angle for used pos but maybe without LOS problem + // loop in a circle to look for a point in LoS using small steps + for (float angle = M_PI / 8; angle < M_PI * 2; angle += M_PI / 8) { - GetNearPoint2D(x, y, distance2d, absAngle+angle); + GetNearPoint2D(x, y, distance2d + searcher_size, absAngle + angle); z = GetPositionZ(); - UpdateGroundPositionZ(x, y, z); // update to LOS height if available - + UpdateAllowedPositionZ(x, y, z); if (IsWithinLOS(x, y, z)) return; } - // BAD BAD NEWS: all found pos (free and used) have LOS problem :( + // still not in LoS, give up and return first position found x = first_x; y = first_y; - - UpdateGroundPositionZ(x, y, z); // update to LOS height if available - */ + z = first_z; } void WorldObject::GetClosePoint(float &x, float &y, float &z, float size, float distance2d /*= 0*/, float angle /*= 0*/) const diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index e8bb7981c79..2691a6870f2 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -25058,6 +25058,9 @@ void Player::HandleFall(MovementInfo const& movementInfo) if (damageperc > 0) { uint32 damage = (uint32)(damageperc * GetMaxHealth()*sWorld->getRate(RATE_DAMAGE_FALL)); + + if (GetCommandStatus(CHEAT_GOD)) + damage = 0; float height = movementInfo.pos.m_positionZ; UpdateGroundPositionZ(movementInfo.pos.m_positionX, movementInfo.pos.m_positionY, height); diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index 98072e11632..5bf3193fc14 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -2515,7 +2515,7 @@ SpellMissInfo Unit::MagicSpellHitResult(Unit* victim, SpellInfo const* spellInfo // Chance hit from victim SPELL_AURA_MOD_ATTACKER_SPELL_HIT_CHANCE auras modHitChance += victim->GetTotalAuraModifierByMiscMask(SPELL_AURA_MOD_ATTACKER_SPELL_HIT_CHANCE, schoolMask); // Reduce spell hit chance for Area of effect spells from victim SPELL_AURA_MOD_AOE_AVOIDANCE aura - if (spellInfo->IsTargetingArea()) + if (spellInfo->IsAffectingArea()) modHitChance -= victim->GetTotalAuraModifier(SPELL_AURA_MOD_AOE_AVOIDANCE); // Decrease hit chance from victim rating bonus @@ -10443,7 +10443,7 @@ bool Unit::isSpellCrit(Unit* victim, SpellInfo const* spellProto, SpellSchoolMas default: return false; } - break; + // Do not add a break here, case fallthrough is intentional! Adding a break will make above spells unable to crit. case SPELL_DAMAGE_CLASS_MAGIC: { if (schoolMask & SPELL_SCHOOL_MASK_NORMAL) diff --git a/src/server/game/Handlers/ChatHandler.cpp b/src/server/game/Handlers/ChatHandler.cpp index fbc78564ea5..e0b29523a3a 100644 --- a/src/server/game/Handlers/ChatHandler.cpp +++ b/src/server/game/Handlers/ChatHandler.cpp @@ -107,20 +107,12 @@ void WorldSession::HandleMessagechatOpcode(WorldPacket& recvData) case CHAT_MSG_GUILD: case CHAT_MSG_BATTLEGROUND: case CHAT_MSG_WHISPER: - if (sWorld->getBoolConfig(CONFIG_CHATLOG_ADDON)) - { - std::string msg = ""; - recvData >> msg; - - if (msg.empty()) - return; - - sScriptMgr->OnPlayerChat(sender, uint32(CHAT_MSG_ADDON), lang, msg); - } - - // Disabled addon channel? + // check if addon messages are disabled if (!sWorld->getBoolConfig(CONFIG_ADDON_CHANNEL)) + { + recvData.rfinish(); return; + } break; default: TC_LOG_ERROR("network", "Player %s (GUID: %u) sent a chatmessage with an invalid language/message type combination", diff --git a/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp index 28e58c87323..c59762066ae 100644 --- a/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp @@ -159,10 +159,15 @@ bool TargetedMovementGeneratorMedium<T, D>::DoUpdate(T* owner, uint32 time_diff) if (TransportBase* transport = owner->GetDirectTransport()) transport->CalculatePassengerPosition(dest.x, dest.y, dest.z); + // First check distance if (owner->GetTypeId() == TYPEID_UNIT && owner->ToCreature()->CanFly()) targetMoved = !i_target->IsWithinDist3d(dest.x, dest.y, dest.z, allowed_dist); else targetMoved = !i_target->IsWithinDist2d(dest.x, dest.y, allowed_dist); + + // then, if the target is in range, check also Line of Sight. + if (!targetMoved) + targetMoved = !i_target->IsWithinLOSInMap(owner); } if (i_recalculateTravel || targetMoved) diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp index 729dfac6497..8f2941865fa 100644 --- a/src/server/game/World/World.cpp +++ b/src/server/game/World/World.cpp @@ -1177,17 +1177,6 @@ void World::LoadConfigSettings(bool reload) m_int_configs[CONFIG_NUMTHREADS] = sConfigMgr->GetIntDefault("MapUpdate.Threads", 1); m_int_configs[CONFIG_MAX_RESULTS_LOOKUP_COMMANDS] = sConfigMgr->GetIntDefault("Command.LookupMaxResults", 0); - // chat logging - m_bool_configs[CONFIG_CHATLOG_CHANNEL] = sConfigMgr->GetBoolDefault("ChatLogs.Channel", false); - m_bool_configs[CONFIG_CHATLOG_WHISPER] = sConfigMgr->GetBoolDefault("ChatLogs.Whisper", false); - m_bool_configs[CONFIG_CHATLOG_SYSCHAN] = sConfigMgr->GetBoolDefault("ChatLogs.SysChan", false); - m_bool_configs[CONFIG_CHATLOG_PARTY] = sConfigMgr->GetBoolDefault("ChatLogs.Party", false); - m_bool_configs[CONFIG_CHATLOG_RAID] = sConfigMgr->GetBoolDefault("ChatLogs.Raid", false); - m_bool_configs[CONFIG_CHATLOG_GUILD] = sConfigMgr->GetBoolDefault("ChatLogs.Guild", false); - m_bool_configs[CONFIG_CHATLOG_PUBLIC] = sConfigMgr->GetBoolDefault("ChatLogs.Public", false); - m_bool_configs[CONFIG_CHATLOG_ADDON] = sConfigMgr->GetBoolDefault("ChatLogs.Addon", false); - m_bool_configs[CONFIG_CHATLOG_BGROUND] = sConfigMgr->GetBoolDefault("ChatLogs.Battleground", false); - // Warden m_bool_configs[CONFIG_WARDEN_ENABLED] = sConfigMgr->GetBoolDefault("Warden.Enabled", false); m_int_configs[CONFIG_WARDEN_NUM_MEM_CHECKS] = sConfigMgr->GetIntDefault("Warden.NumMemChecks", 3); diff --git a/src/server/game/World/World.h b/src/server/game/World/World.h index 4c43507d038..a58dcc82acc 100644 --- a/src/server/game/World/World.h +++ b/src/server/game/World/World.h @@ -139,15 +139,6 @@ enum WorldBoolConfigs CONFIG_SHOW_KICK_IN_WORLD, CONFIG_SHOW_MUTE_IN_WORLD, CONFIG_SHOW_BAN_IN_WORLD, - CONFIG_CHATLOG_CHANNEL, - CONFIG_CHATLOG_WHISPER, - CONFIG_CHATLOG_SYSCHAN, - CONFIG_CHATLOG_PARTY, - CONFIG_CHATLOG_RAID, - CONFIG_CHATLOG_GUILD, - CONFIG_CHATLOG_PUBLIC, - CONFIG_CHATLOG_ADDON, - CONFIG_CHATLOG_BGROUND, CONFIG_AUTOBROADCAST, CONFIG_ALLOW_TICKETS, CONFIG_DBC_ENFORCE_ITEM_ATTRIBUTES, diff --git a/src/server/scripts/World/chat_log.cpp b/src/server/scripts/World/chat_log.cpp index ef854246d20..7074de3ed48 100644 --- a/src/server/scripts/World/chat_log.cpp +++ b/src/server/scripts/World/chat_log.cpp @@ -22,144 +22,133 @@ class ChatLogScript : public PlayerScript { -public: - ChatLogScript() : PlayerScript("ChatLogScript") { } + public: + ChatLogScript() : PlayerScript("ChatLogScript") { } - void OnChat(Player* player, uint32 type, uint32 lang, std::string& msg) - { - switch (type) + void OnChat(Player* player, uint32 type, uint32 lang, std::string& msg) OVERRIDE { - case CHAT_MSG_ADDON: - if (sWorld->getBoolConfig(CONFIG_CHATLOG_ADDON)) - TC_LOG_DEBUG("chat.log", "[ADDON] Player %s sends: %s", - player->GetName().c_str(), msg.c_str()); - break; - - case CHAT_MSG_SAY: - if (sWorld->getBoolConfig(CONFIG_CHATLOG_PUBLIC)) - TC_LOG_DEBUG("chat.log", "[SAY] Player %s says (language %u): %s", + switch (type) + { + case CHAT_MSG_SAY: + TC_LOG_DEBUG("chat.log.say", "Player %s says (language %u): %s", player->GetName().c_str(), lang, msg.c_str()); - break; + break; - case CHAT_MSG_EMOTE: - if (sWorld->getBoolConfig(CONFIG_CHATLOG_PUBLIC)) - TC_LOG_DEBUG("chat.log", "[TEXTEMOTE] Player %s emotes: %s", + case CHAT_MSG_EMOTE: + TC_LOG_DEBUG("chat.log.emote", "Player %s emotes: %s", player->GetName().c_str(), msg.c_str()); - break; + break; - case CHAT_MSG_YELL: - if (sWorld->getBoolConfig(CONFIG_CHATLOG_PUBLIC)) - TC_LOG_DEBUG("chat.log", "[YELL] Player %s yells (language %u): %s", + case CHAT_MSG_YELL: + TC_LOG_DEBUG("chat.log.yell", "Player %s yells (language %u): %s", player->GetName().c_str(), lang, msg.c_str()); - break; + break; + } + } + + void OnChat(Player* player, uint32 /*type*/, uint32 lang, std::string& msg, Player* receiver) OVERRIDE + { + if (lang != LANG_ADDON) + TC_LOG_DEBUG("chat.log.whisper", "Player %s tells %s: %s", + player->GetName().c_str(), receiver ? receiver->GetName().c_str() : "<unknown>", msg.c_str()); + else + TC_LOG_DEBUG("chat.log.addon.whisper", "Player %s tells %s: %s", + player->GetName().c_str(), receiver ? receiver->GetName().c_str() : "<unknown>", msg.c_str()); } - } - - void OnChat(Player* player, uint32 /*type*/, uint32 lang, std::string& msg, Player* receiver) - { - if (lang != LANG_ADDON && sWorld->getBoolConfig(CONFIG_CHATLOG_WHISPER)) - TC_LOG_DEBUG("chat.log", "[WHISPER] Player %s tells %s: %s", - player->GetName().c_str(), receiver ? receiver->GetName().c_str() : "<unknown>", msg.c_str()); - else if (lang == LANG_ADDON && sWorld->getBoolConfig(CONFIG_CHATLOG_ADDON)) - TC_LOG_DEBUG("chat.log", "[ADDON] Player %s tells %s: %s", - player->GetName().c_str(), receiver ? receiver->GetName().c_str() : "<unknown>", msg.c_str()); - } - - void OnChat(Player* player, uint32 type, uint32 lang, std::string& msg, Group* group) - { - //! NOTE: - //! LANG_ADDON can only be sent by client in "PARTY", "RAID", "GUILD", "BATTLEGROUND", "WHISPER" - switch (type) + + void OnChat(Player* player, uint32 type, uint32 lang, std::string& msg, Group* group) OVERRIDE { - case CHAT_MSG_PARTY: - if (lang != LANG_ADDON && sWorld->getBoolConfig(CONFIG_CHATLOG_PARTY)) - TC_LOG_DEBUG("chat.log", "[PARTY] Player %s tells group with leader %s: %s", - player->GetName().c_str(), group ? group->GetLeaderName() : "<unknown>", msg.c_str()); - else if (lang == LANG_ADDON && sWorld->getBoolConfig(CONFIG_CHATLOG_ADDON)) - TC_LOG_DEBUG("chat.log", "[ADDON] Player %s tells group with leader %s: %s", - player->GetName().c_str(), group ? group->GetLeaderName() : "<unknown>", msg.c_str()); - break; - - case CHAT_MSG_PARTY_LEADER: - if (sWorld->getBoolConfig(CONFIG_CHATLOG_PARTY)) - TC_LOG_DEBUG("chat.log", "[PARTY] Leader %s tells group: %s", + //! NOTE: + //! LANG_ADDON can only be sent by client in "PARTY", "RAID", "GUILD", "BATTLEGROUND", "WHISPER" + switch (type) + { + case CHAT_MSG_PARTY: + if (lang != LANG_ADDON) + TC_LOG_DEBUG("chat.log.party", "Player %s tells group with leader %s: %s", + player->GetName().c_str(), group ? group->GetLeaderName() : "<unknown>", msg.c_str()); + else + TC_LOG_DEBUG("chat.log.addon.party", "Player %s tells group with leader %s: %s", + player->GetName().c_str(), group ? group->GetLeaderName() : "<unknown>", msg.c_str()); + break; + + case CHAT_MSG_PARTY_LEADER: + TC_LOG_DEBUG("chat.log.party", "Leader %s tells group: %s", player->GetName().c_str(), msg.c_str()); - break; - - case CHAT_MSG_RAID: - if (lang != LANG_ADDON && sWorld->getBoolConfig(CONFIG_CHATLOG_RAID)) - TC_LOG_DEBUG("chat.log", "[RAID] Player %s tells raid with leader %s: %s", - player->GetName().c_str(), group ? group->GetLeaderName() : "<unknown>", msg.c_str()); - else if (lang == LANG_ADDON && sWorld->getBoolConfig(CONFIG_CHATLOG_ADDON)) - TC_LOG_DEBUG("chat.log", "[ADDON] Player %s tells raid with leader %s: %s", - player->GetName().c_str(), group ? group->GetLeaderName() : "<unknown>", msg.c_str()); - break; - - case CHAT_MSG_RAID_LEADER: - if (sWorld->getBoolConfig(CONFIG_CHATLOG_RAID)) - TC_LOG_DEBUG("chat.log", "[RAID] Leader player %s tells raid: %s", + break; + + case CHAT_MSG_RAID: + if (lang != LANG_ADDON) + TC_LOG_DEBUG("chat.log.raid", "Player %s tells raid with leader %s: %s", + player->GetName().c_str(), group ? group->GetLeaderName() : "<unknown>", msg.c_str()); + else + TC_LOG_DEBUG("chat.log.addon.raid", "Player %s tells raid with leader %s: %s", + player->GetName().c_str(), group ? group->GetLeaderName() : "<unknown>", msg.c_str()); + break; + + case CHAT_MSG_RAID_LEADER: + TC_LOG_DEBUG("chat.log.raid", "Leader player %s tells raid: %s", player->GetName().c_str(), msg.c_str()); - break; + break; - case CHAT_MSG_RAID_WARNING: - if (sWorld->getBoolConfig(CONFIG_CHATLOG_RAID)) - TC_LOG_DEBUG("chat.log", "[RAID] Leader player %s warns raid with: %s", + case CHAT_MSG_RAID_WARNING: + TC_LOG_DEBUG("chat.log.raid", "Leader player %s warns raid with: %s", player->GetName().c_str(), msg.c_str()); - break; - - case CHAT_MSG_BATTLEGROUND: - if (lang != LANG_ADDON && sWorld->getBoolConfig(CONFIG_CHATLOG_BGROUND)) - TC_LOG_DEBUG("chat.log", "[BATTLEGROUND] Player %s tells battleground with leader %s: %s", - player->GetName().c_str(), group ? group->GetLeaderName() : "<unknown>", msg.c_str()); - else if (lang == LANG_ADDON && sWorld->getBoolConfig(CONFIG_CHATLOG_ADDON)) - TC_LOG_DEBUG("chat.log", "[ADDON] Player %s tells battleground with leader %s: %s", - player->GetName().c_str(), group ? group->GetLeaderName() : "<unknown>", msg.c_str()); - break; - - case CHAT_MSG_BATTLEGROUND_LEADER: - if (sWorld->getBoolConfig(CONFIG_CHATLOG_BGROUND)) - TC_LOG_DEBUG("chat.log", "[BATTLEGROUND] Leader player %s tells battleground: %s", + break; + + case CHAT_MSG_BATTLEGROUND: + if (lang != LANG_ADDON) + TC_LOG_DEBUG("chat.log.bg", "Player %s tells battleground with leader %s: %s", + player->GetName().c_str(), group ? group->GetLeaderName() : "<unknown>", msg.c_str()); + else + TC_LOG_DEBUG("chat.log.addon.bg", "Player %s tells battleground with leader %s: %s", + player->GetName().c_str(), group ? group->GetLeaderName() : "<unknown>", msg.c_str()); + break; + + case CHAT_MSG_BATTLEGROUND_LEADER: + TC_LOG_DEBUG("chat.log.bg", "Leader player %s tells battleground: %s", player->GetName().c_str(), msg.c_str()); - break; + break; + } } - } - void OnChat(Player* player, uint32 type, uint32 lang, std::string& msg, Guild* guild) - { - switch (type) + void OnChat(Player* player, uint32 type, uint32 lang, std::string& msg, Guild* guild) OVERRIDE { - case CHAT_MSG_GUILD: - if (lang != LANG_ADDON && sWorld->getBoolConfig(CONFIG_CHATLOG_GUILD)) - TC_LOG_DEBUG("chat.log", "[GUILD] Player %s tells guild %s: %s", - player->GetName().c_str(), guild ? guild->GetName().c_str() : "<unknown>", msg.c_str()); - else if (lang == LANG_ADDON && sWorld->getBoolConfig(CONFIG_CHATLOG_ADDON)) - TC_LOG_DEBUG("chat.log", "[ADDON] Player %s sends to guild %s: %s", + switch (type) + { + case CHAT_MSG_GUILD: + if (lang != LANG_ADDON) + TC_LOG_DEBUG("chat.log.guild", "Player %s tells guild %s: %s", + player->GetName().c_str(), guild ? guild->GetName().c_str() : "<unknown>", msg.c_str()); + else + TC_LOG_DEBUG("chat.log.addon.guild", "Player %s sends to guild %s: %s", + player->GetName().c_str(), guild ? guild->GetName().c_str() : "<unknown>", msg.c_str()); + break; + + case CHAT_MSG_OFFICER: + TC_LOG_DEBUG("chat.log.guild.officer", "Player %s tells guild %s officers: %s", player->GetName().c_str(), guild ? guild->GetName().c_str() : "<unknown>", msg.c_str()); - break; + break; + } + } - case CHAT_MSG_OFFICER: - if (sWorld->getBoolConfig(CONFIG_CHATLOG_GUILD)) - TC_LOG_DEBUG("chat.log", "[OFFICER] Player %s tells guild %s officers: %s", - player->GetName().c_str(), guild ? guild->GetName().c_str() : "<unknown>", msg.c_str()); - break; + void OnChat(Player* player, uint32 /*type*/, uint32 /*lang*/, std::string& msg, Channel* channel) OVERRIDE + { + bool isSystem = channel && + (channel->HasFlag(CHANNEL_FLAG_TRADE) || + channel->HasFlag(CHANNEL_FLAG_GENERAL) || + channel->HasFlag(CHANNEL_FLAG_CITY) || + channel->HasFlag(CHANNEL_FLAG_LFG)); + + if (isSystem) + TC_LOG_DEBUG("chat.log.system", "Player %s tells channel %s: %s", + player->GetName().c_str(), channel->GetName().c_str(), msg.c_str()); + else + { + std::string channelName = channel ? channel->GetName() : "<unknown>"; + TC_LOG_DEBUG("chat.log.channel." + channelName, "Player %s tells channel %s: %s", + player->GetName().c_str(), channelName.c_str(), msg.c_str()); + } } - } - - void OnChat(Player* player, uint32 /*type*/, uint32 /*lang*/, std::string& msg, Channel* channel) - { - bool isSystem = channel && - (channel->HasFlag(CHANNEL_FLAG_TRADE) || - channel->HasFlag(CHANNEL_FLAG_GENERAL) || - channel->HasFlag(CHANNEL_FLAG_CITY) || - channel->HasFlag(CHANNEL_FLAG_LFG)); - - if (sWorld->getBoolConfig(CONFIG_CHATLOG_SYSCHAN) && isSystem) - TC_LOG_DEBUG("chat.log", "[SYSCHAN] Player %s tells channel %s: %s", - player->GetName().c_str(), channel->GetName().c_str(), msg.c_str()); - else if (sWorld->getBoolConfig(CONFIG_CHATLOG_CHANNEL)) - TC_LOG_DEBUG("chat.log", "[CHANNEL] Player %s tells channel %s: %s", - player->GetName().c_str(), channel ? channel->GetName().c_str() : "<unknown>", msg.c_str()); - } }; void AddSC_chat_log() diff --git a/src/server/shared/Debugging/WheatyExceptionReport.cpp b/src/server/shared/Debugging/WheatyExceptionReport.cpp index 1afe688c942..3b6bd3d2cc8 100644 --- a/src/server/shared/Debugging/WheatyExceptionReport.cpp +++ b/src/server/shared/Debugging/WheatyExceptionReport.cpp @@ -29,15 +29,23 @@ inline LPTSTR ErrorMessage(DWORD dw) { LPVOID lpMsgBuf; - FormatMessage( - FORMAT_MESSAGE_ALLOCATE_BUFFER | - FORMAT_MESSAGE_FROM_SYSTEM, - NULL, - dw, - MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), - (LPTSTR) &lpMsgBuf, - 0, NULL); - return (LPTSTR)lpMsgBuf; + DWORD formatResult = FormatMessage( + FORMAT_MESSAGE_ALLOCATE_BUFFER | + FORMAT_MESSAGE_FROM_SYSTEM, + NULL, + dw, + MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), + (LPTSTR) &lpMsgBuf, + 0, NULL); + if (formatResult != 0) + return (LPTSTR)lpMsgBuf; + else + { + LPTSTR msgBuf = (LPTSTR)LocalAlloc(LPTR, 30); + sprintf(msgBuf, "Unknown error: %u", dw); + return msgBuf; + } + } //============================== Global Variables ============================= diff --git a/src/server/shared/Logging/Log.cpp b/src/server/shared/Logging/Log.cpp index d7d70e7d4ea..bc002668b3b 100644 --- a/src/server/shared/Logging/Log.cpp +++ b/src/server/shared/Logging/Log.cpp @@ -250,13 +250,13 @@ void Log::ReadLoggersFromConfig() AppenderConsole* appender = new AppenderConsole(NextAppenderId(), "Console", LOG_LEVEL_DEBUG, APPENDER_FLAGS_NONE); appenders[appender->getId()] = appender; - Logger& logger = loggers[LOGGER_ROOT]; - logger.Create(LOGGER_ROOT, LOG_LEVEL_ERROR); - logger.addAppender(appender->getId(), appender); + Logger& rootLogger = loggers[LOGGER_ROOT]; + rootLogger.Create(LOGGER_ROOT, LOG_LEVEL_ERROR); + rootLogger.addAppender(appender->getId(), appender); - logger = loggers["server"]; - logger.Create("server", LOG_LEVEL_ERROR); - logger.addAppender(appender->getId(), appender); + Logger& serverLogger = loggers["server"]; + serverLogger.Create("server", LOG_LEVEL_INFO); + serverLogger.addAppender(appender->getId(), appender); } } diff --git a/src/server/shared/Logging/Log.h b/src/server/shared/Logging/Log.h index dcac93e5a60..73c5601b95b 100644 --- a/src/server/shared/Logging/Log.h +++ b/src/server/shared/Logging/Log.h @@ -103,16 +103,12 @@ inline Logger const* Log::GetLoggerByType(std::string const& originalType) } while (!logger); - cachedLoggers[type] = logger; + cachedLoggers[originalType] = logger; return logger; } inline bool Log::ShouldLog(std::string const& type, LogLevel level) { - // TODO: Use cache to store "Type.sub1.sub2": "Type" equivalence, should - // Speed up in cases where requesting "Type.sub1.sub2" but only configured - // Logger "Type" - Logger const* logger = GetLoggerByType(type); if (!logger) return false; diff --git a/src/server/worldserver/worldserver.conf.dist b/src/server/worldserver/worldserver.conf.dist index 1762859afae..f71ef5d064b 100644 --- a/src/server/worldserver/worldserver.conf.dist +++ b/src/server/worldserver/worldserver.conf.dist @@ -410,78 +410,6 @@ PidFile = "" PacketLogFile = "" -# -# ChatLogs.Channel -# Description: Log custom channel chat. -# Default: 0 - (Disabled) -# 1 - (Enabled) - -ChatLogs.Channel = 0 - -# -# ChatLogs.Whisper -# Description: Log whispers between players. -# Default: 0 - (Disabled) -# 1 - (Enabled) - -ChatLogs.Whisper = 0 - -# -# ChatLogs.SysChan -# Description: Log system channel messages. -# Default: 0 - (Disabled) -# 1 - (Enabled) - -ChatLogs.SysChan = 0 - -# -# ChatLogs.Party -# Description: Log party chat. -# Default: 0 - (Disabled) -# 1 - (Enabled) - -ChatLogs.Party = 0 - -# -# ChatLogs.Raid -# Description: Log raid chat. -# Default: 0 - (Disabled) -# 1 - (Enabled) - -ChatLogs.Raid = 0 - -# -# ChatLogs.Guild -# Description: Log guild chat. -# Default: 0 - (Disabled) -# 1 - (Enabled) - -ChatLogs.Guild = 0 - -# -# ChatLogs.Public -# Description: Log public chat (say/yell/emote). -# Default: 0 - (Disabled) -# 1 - (Enabled) - -ChatLogs.Public = 0 - -# -# ChatLogs.Addon -# Description: Log addon messages. -# Default: 0 - (Disabled) -# 1 - (Enabled) - -ChatLogs.Addon = 0 - -# -# ChatLogs.BattleGround -# Description: Log battleground chat. -# Default: 0 - (Disabled) -# 1 - (Enabled) - -ChatLogs.BattleGround = 0 - # Extended Logging system configuration moved to end of file (on purpose) # ################################################################################################### |
