diff --git a/src/server/game/Handlers/ChatHandler.cpp b/src/server/game/Handlers/ChatHandler.cpp index 96ecc5e..0a5b929 100644 --- a/src/server/game/Handlers/ChatHandler.cpp +++ b/src/server/game/Handlers/ChatHandler.cpp @@ -199,7 +199,36 @@ void WorldSession::HandleChatMessage(ChatMsg type, uint32 lang, std::string msg, if (msg.empty()) return; - if (ChatHandler(this).ParseCommands(msg.c_str())) + // ================================================================= + // ORDRE_AUX_COMPAGNONS + // + // SIGNALE EN JEU : « !summon repond "You can't teleport yourself to + // yourself", et !follow repond "There is no such command" ». + // + // ChatHandler::ParseCommands traite le point d'exclamation comme un + // prefixe de commande au meme titre que le point : + // if (text[0] != '!' && text[0] != '.') return false; + // Il intercepte donc tout ordre avant qu'il n'atteigne le canal de + // groupe, ou Group::ProcessGroupBotCommand l'attend. Le systeme + // d'ordres aux playerbots etait inaccessible depuis toujours -- + // « !summon » partait vers la commande de maitre de jeu du meme nom. + // + // On laisse passer les messages en « ! » lorsque le joueur commande + // effectivement des bots. Un maitre de jeu sans compagnon garde ses + // commandes en « ! » ; celui qui en a passe par le point, qui reste + // le prefixe principal. + bool ordreAuxCompagnons = false; + if (!msg.empty() && msg[0] == '!') + if (Group* groupe = GetPlayer()->GetGroup()) + for (GroupReference* itr = groupe->GetFirstMember(); itr != nullptr; itr = itr->next()) + if (Player* membre = itr->GetSource()) + if (membre->IsPlayerBot()) + { + ordreAuxCompagnons = true; + break; + } + + if (!ordreAuxCompagnons && ChatHandler(this).ParseCommands(msg.c_str())) return; // Strip invisible characters for non-addon messages diff --git a/src/server/game/Mercenary/MercenaryMgr.cpp b/src/server/game/Mercenary/MercenaryMgr.cpp index c0be794..63c616a 100644 --- a/src/server/game/Mercenary/MercenaryMgr.cpp +++ b/src/server/game/Mercenary/MercenaryMgr.cpp @@ -460,7 +460,7 @@ MercenaryResult MercenaryMgr::Summon(Player* owner, uint8 role, Creature* portal } m_contracts.push_back(contract); - TC_LOG_INFO("server.worldserver", "Mercenaires: %s a paye %u po pour un %s (compte bot %u).", + TC_LOG_INFO("server.worldserver", freeOfCharge ? "Mercenaires: %s recoit gratuitement un %3 (compte bot %4), cout %2 po non preleve." : "Mercenaires: %s a paye %u po pour un %s (compte bot %u).", owner->GetName().c_str(), GetCostGold(), GetRoleName(role), accountId); return MERC_OK;