From 819e8885ab4dc833e272ad9fec93c3eb741bba27 Mon Sep 17 00:00:00 2001 From: Marvin Winkens Date: Fri, 14 May 2021 18:50:18 +0200 Subject: [PATCH] fix: :sparkles: add chat commands back in and allow for calls with chat (because other stupid clients can't do it) --- src/game/server/gamecontext.cpp | 15 ++++++++++++++- src/game/server/gamecontroller.cpp | 21 +++++++++++++++++---- src/game/server/gamecontroller.h | 10 ++++++---- 3 files changed, 37 insertions(+), 9 deletions(-) diff --git a/src/game/server/gamecontext.cpp b/src/game/server/gamecontext.cpp index 4191d663..b87d1e45 100644 --- a/src/game/server/gamecontext.cpp +++ b/src/game/server/gamecontext.cpp @@ -1020,6 +1020,19 @@ void CGameContext::OnMessage(int MsgID, CUnpacker *pUnpacker, int ClientID) { pPlayer->m_LastChat + Server()->TickSpeed() * (Length / 20) > Server()->Tick())) return; + if (pMsg->m_pMessage[0] == '/') { + const char *command = pMsg->m_pMessage+1; + if (CommandManager()->GetCommand(command)) { + CommandManager()->OnCommand(command, "", ClientID); + } + else { + char aNoCommand[128]; + str_format(aNoCommand, sizeof(aNoCommand), "Unknown command '%s'", command); + SendServerInfo(aNoCommand, ClientID); + } + return; + } + pPlayer->m_LastChat = Server()->Tick(); // don't allow spectators to disturb players during a running game in tournament mode @@ -1713,7 +1726,7 @@ void CGameContext::OnInit() { m_pController = new CGameControllerCatch64(this); // IDK how this works now - //m_pController->RegisterChatCommands(CommandManager()); + m_pController->RegisterChatCommands(CommandManager()); // create all entities from the game layer CMapItemLayerTilemap *pTileMap = m_Layers.GameLayer(); diff --git a/src/game/server/gamecontroller.cpp b/src/game/server/gamecontroller.cpp index c289f83f..4dda850b 100644 --- a/src/game/server/gamecontroller.cpp +++ b/src/game/server/gamecontroller.cpp @@ -1360,6 +1360,13 @@ void IGameController::RegisterChatCommands(CCommandManager *pManager) AddCommand("info", "", "show authors and mod description", ComInfo); }*/ +void IGameController::RegisterChatCommands(CCommandManager *pManager) +{ + //pManager->AddCommand("test", "Test the command system", "r", Com_Example, this); + pManager->AddCommand("help", "How does this mod work", "", ComHelp, this); + pManager->AddCommand("info", "About page", "", ComInfo, this); +} + void IGameController::ComSendMessageList(std::vector& messageList, const int ClientID) { CNetMsg_Sv_Chat Msg; @@ -1374,17 +1381,23 @@ void IGameController::ComSendMessageList(std::vector& messageList, } } -void IGameController::ComHelp(class IGameController* pGameController, class CPlayer *pPlayer, const char *pArgs) +void IGameController::ComHelp(IConsole::IResult *pResult, void *pContext) { + auto *pComContext = (CCommandManager::SCommandContext *)pContext; + auto *pSelf = (IGameController *)pComContext->m_pContext; + std::vector helplist = {"###Help###", "You start in your team", "If you hit a player, he is in your team, too", "Very easy :D"}; - pGameController->ComSendMessageList(helplist, pPlayer->GetCID()); + pSelf->ComSendMessageList(helplist, pComContext->m_ClientID); } -void IGameController::ComInfo(class IGameController* pGameController, class CPlayer *pPlayer, const char *pArgs) +void IGameController::ComInfo(IConsole::IResult *pResult, void *pContext) { + auto *pComContext = (CCommandManager::SCommandContext *)pContext; + auto *pSelf = (IGameController *)pComContext->m_pContext; + std::vector infolist = {"###Info###", "Catch64 by AssassinTee", "You like it? Give me a Star on GitHub!", @@ -1393,5 +1406,5 @@ void IGameController::ComInfo(class IGameController* pGameController, class CPla std::stringstream ss; ss << "Teeworlds version: '" << GAME_RELEASE_VERSION << "', Catch64 Version: '" << CATCH_VERSION << "'"; infolist.push_back(ss.str()); - pGameController->ComSendMessageList(infolist, pPlayer->GetCID()); + pSelf->ComSendMessageList(infolist, pComContext->m_ClientID); } diff --git a/src/game/server/gamecontroller.h b/src/game/server/gamecontroller.h index c034d309..f4934061 100644 --- a/src/game/server/gamecontroller.h +++ b/src/game/server/gamecontroller.h @@ -134,8 +134,6 @@ class IGameController int m_TopscoreCount; void ComSendMessageList(std::vector& messageList, const int ClientID); - void ComHelp(class IGameController* pGameController, class CPlayer *pPlayer, const char *pArgs); - void ComInfo(class IGameController* pGameController, class CPlayer *pPlayer, const char *pArgs); public: @@ -183,7 +181,7 @@ class IGameController void OnPlayerDisconnect(class CPlayer *pPlayer); void OnPlayerInfoChange(class CPlayer *pPlayer); void OnPlayerReadyChange(class CPlayer *pPlayer); - void OnPlayerCommand(class CPlayer *pPlayer, const char *pCommandName, const char *pCommandArgs); + // void OnPlayerCommand(class CPlayer *pPlayer, const char *pCommandName, const char *pCommandArgs); void OnReset(); @@ -248,7 +246,11 @@ class IGameController int GetStartWeapon(){ return m_StartWeapon;} //static void Com_Example(IConsole::IResult *pResult, void *pContext); - //virtual void RegisterChatCommands(CCommandManager *pManager); + virtual void RegisterChatCommands(CCommandManager *pManager); + + // chat commands + static void ComHelp(IConsole::IResult *pResult, void *pContext); + static void ComInfo(IConsole::IResult *pResult, void *pContext); }; #endif