Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

✨ update to 1.3.0 #57

Merged
merged 12 commits into from
May 14, 2021
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,7 @@ sudo brew install cmake freetype sdl2
| sv_random_spawn | 1 | 0 | 1 | Activates random spawns |
| sv_random_spawn_tries | 100 | 0 | 9999 | Tries for players to spawn randomly |
| sv_random_spawn_max_score | 100 | 0 | 9999 | Tries for players to spawn randomly |
| sv_party_mode | 0 | 0 | 1 | Random Weapons each round |

## Contributing

Expand Down
15 changes: 2 additions & 13 deletions src/game/server/entities/character.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -148,19 +148,8 @@ void CCharacter::HandleNinja() {
if (m_ActiveWeapon != WEAPON_NINJA)
return;

if ((Server()->Tick() - m_Ninja.m_ActivationTick) >
(g_pData->m_Weapons.m_Ninja.m_Duration * Server()->TickSpeed() / 1000)) {
// time's up, return
m_aWeapons[WEAPON_NINJA].m_Got = false;
m_ActiveWeapon = m_LastWeapon;

// reset velocity
if (m_Ninja.m_CurrentMoveTime > 0)
m_Core.m_Vel = m_Ninja.m_ActivationDir * m_Ninja.m_OldVelAmount;

SetWeapon(m_ActiveWeapon);
return;
}
// never remove ninja
m_Ninja.m_ActivationTick = Server()->Tick();

// force ninja Weapon
SetWeapon(WEAPON_NINJA);
Expand Down
16 changes: 15 additions & 1 deletion src/game/server/gamecontext.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -1635,6 +1648,7 @@ void CGameContext::ConchainGameinfoUpdate(IConsole::IResult *pResult, void *pUse
void CGameContext::ConStartWeapon(IConsole::IResult *pResult, void *pUserData) {
CGameContext *pSelf = (CGameContext *) pUserData;
int StartWeapon = pResult->GetInteger(0);

if (StartWeapon < 0 || StartWeapon > NUM_WEAPONS) // weapon at NUM_WEAPONS is HOOK!
StartWeapon = 0;

Expand Down Expand Up @@ -1714,7 +1728,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();
Expand Down
89 changes: 22 additions & 67 deletions src/game/server/gamecontroller.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -448,6 +448,14 @@ void IGameController::ResetGame() {

CheckGameInfo();

// party mode switch start weapon
if (Config()->m_SvPartyMode) {
// select random next weapon, but never last one
const int NumStartWeapons = NUM_WEAPONS + 1;
m_StartWeapon += (rand() % (NumStartWeapons - 1)) + 1; // random in [1, NumStartWeapons]
m_StartWeapon %= NumStartWeapons;
}

for (int i = 0; i < MAX_CLIENTS; ++i) {
if (GameServer()->m_apPlayers[i]) {
GameServer()->ResetSkin(i);
Expand Down Expand Up @@ -1176,70 +1184,11 @@ int IGameController::GetStartTeam() {
return TEAM_SPECTATORS;
}

/*void IGameController::Com_Example(IConsole::IResult *pResult, void *pContext)
{
CCommandManager::SCommandContext *pComContext = (CCommandManager::SCommandContext *)pContext;
IGameController *pSelf = (IGameController *)pComContext->m_pContext;

<<<<<<< HEAD
if(pCommand)
{
mem_zero(pCommand, sizeof(CChatCommand));
}
}

IGameController::CChatCommand *IGameController::CChatCommands::GetCommand(const char *pName)
{
for(int i = 0; i < MAX_COMMANDS; i++)
{
if(m_aCommands[i].m_Used && str_comp(m_aCommands[i].m_aName, pName) == 0)
{
return &m_aCommands[i];
}
}
return 0;
}

void IGameController::CChatCommands::OnPlayerConnect(IServer *pServer, CPlayer *pPlayer)
{
for(int i = 0; i < MAX_COMMANDS; i++)
{
CChatCommand *pCommand = &m_aCommands[i];

if(pCommand->m_Used)
{
CNetMsg_Sv_CommandInfo Msg;
Msg.m_pName = pCommand->m_aName;
Msg.m_HelpText = pCommand->m_aHelpText;
Msg.m_ArgsFormat = pCommand->m_aArgsFormat;

pServer->SendPackMsg(&Msg, MSGFLAG_VITAL, pPlayer->GetCID());
}
}
}

void IGameController::OnPlayerCommand(CPlayer *pPlayer, const char *pCommandName, const char *pCommandArgs)
{
// TODO: Add a argument parser?
CChatCommand *pCommand = CommandsManager()->GetCommand(pCommandName);

if(pCommand)
pCommand->m_pfnCallback(this, pPlayer, pCommandArgs);
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);
}
=======
pSelf->GameServer()->SendBroadcast(pResult->GetString(0), -1);
}*/

/*
>>>>>>> 662f84d4a358afb20eba2aeb98e4f89bb84bfebc

void IGameController::RegisterChatCommands(CCommandManager *pManager)
{
<<<<<<< HEAD
//AddCommand("example", "si", "I am a description", Com_Example);
AddCommand("help", "", "how to play", ComHelp);
AddCommand("info", "", "show authors and mod description", ComInfo);
}*/

void IGameController::ComSendMessageList(std::vector<std::string> &messageList, const int ClientID) {
CNetMsg_Sv_Chat Msg;
Expand All @@ -1253,15 +1202,21 @@ void IGameController::ComSendMessageList(std::vector<std::string> &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<std::string> 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<std::string> infolist = {"###Info###",
"Catch64 by AssassinTee",
"You like it? Give me a Star on GitHub!",
Expand All @@ -1270,5 +1225,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);
}
10 changes: 6 additions & 4 deletions src/game/server/gamecontroller.h
Original file line number Diff line number Diff line change
Expand Up @@ -134,8 +134,6 @@ class IGameController
int m_TopscoreCount;

void ComSendMessageList(std::vector<std::string>& 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:
Expand Down Expand Up @@ -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();

Expand Down Expand Up @@ -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
2 changes: 2 additions & 0 deletions src/game/variables.h
Original file line number Diff line number Diff line change
Expand Up @@ -154,6 +154,8 @@ MACRO_CONFIG_INT(SvRandomSpawn, sv_random_spawn, 1, 0, 1, CFGFLAG_SAVE|CFGFLAG_S
MACRO_CONFIG_INT(SvRandomSpawnTries, sv_random_spawn_tries, 100, 1, 9999, CFGFLAG_SAVE|CFGFLAG_SERVER, "Tries for random spawn per player per tick");
MACRO_CONFIG_INT(SvRandomSpawnMaxScore, sv_random_spawn_max_score, 10, 0, 1000, CFGFLAG_SAVE|CFGFLAG_SERVER, "Random spawn max allowed score");

MACRO_CONFIG_INT(SvPartyMode, sv_party_mode, 0, 0, 1, CFGFLAG_SAVE|CFGFLAG_SERVER, "Random Weapons each round");

// debug
#ifdef CONF_DEBUG // this one can crash the server if not used correctly
MACRO_CONFIG_INT(DbgDummies, dbg_dummies, 0, 0, MAX_CLIENTS, CFGFLAG_SERVER, "")
Expand Down
2 changes: 1 addition & 1 deletion src/game/version.h
Original file line number Diff line number Diff line change
Expand Up @@ -10,5 +10,5 @@
#define PREV_CLIENT_VERSION 0x0704
#define SETTINGS_FILENAME "settings07"
static const char GAME_RELEASE_VERSION[8] = "0.7.5";
#define CATCH_VERSION "1.2.1"
#define CATCH_VERSION "1.3.0"
#endif