Skip to content

Commit

Permalink
Move clientid to callback ctx member and add emote
Browse files Browse the repository at this point in the history
ChillerDragon committed Oct 25, 2024
1 parent 033080a commit 4e41b25
Showing 11 changed files with 62 additions and 14 deletions.
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -100,6 +100,7 @@ void CCharacter::Tick()
TWBL::SetState(this, &State);
State.m_pCollision = Collision();
State.m_ppPlayers = GameServer()->m_apPlayers;
GameServer()->m_TwblCallbackCtx.m_ClientId = GetPlayer()->GetCid();
State.m_pCallbackCtx = &GameServer()->m_TwblCallbackCtx;
Twbl_SampleTick(&State, &Bot, &GetPlayer()->m_TwblPersistentState, sizeof(GetPlayer()->m_TwblPersistentState));
@@ -141,6 +142,7 @@ void CCharacter::Tick()
TWBL::SetState(this, &State);
State.m_pCollision = Collision();
State.m_ppPlayers = GameServer()->m_apPlayers;
GameServer()->m_TwblCallbackCtx.m_ClientId = GetPlayer()->GetCid();
State.m_pCallbackCtx = &GameServer()->m_TwblCallbackCtx;

// ideally this Init() is moved to the constructor
18 changes: 16 additions & 2 deletions src/bots/base.cpp
Original file line number Diff line number Diff line change
@@ -81,7 +81,7 @@ void PushRingInt(int *pBuffer, int New, size_t MaxEntries)

void CBaseBot::_DieRaw() const
{
m_pStateIn->m_pCallbackCtx->Die(m_pStateIn->m_ClientId);
m_pStateIn->m_pCallbackCtx->Die();
}

void CBaseBot::_Die(const char *pComment) const
@@ -92,7 +92,21 @@ void CBaseBot::_Die(const char *pComment) const

void CBaseBot::_SendChatRaw(int Team, const char *pText)
{
m_pStateIn->m_pCallbackCtx->SendChat(m_pStateIn->m_ClientId, Team, pText);
m_pStateIn->m_pCallbackCtx->SendChat(Team, pText);
}

void CBaseBot::_EmoteRaw(int Emote)
{
m_pStateIn->m_pCallbackCtx->Emote(Emote);
}

void CBaseBot::_Emote(int Emote, const char *pComment, const char *pFunction, const char *pFile, int Line)
{
_EmoteRaw(Emote);
PushRingStr(m_pStateOut->m_apEmoteComments, pComment, GetStrBufSize(m_pStateOut->m_apEmoteComments));
PushRingStr(m_pStateOut->m_apEmoteFunctions, pFunction, GetStrBufSize(m_pStateOut->m_apEmoteFunctions));
PushRingStr(m_pStateOut->m_apEmoteFiles, pFile, GetStrBufSize(m_pStateOut->m_apEmoteFiles));
PushRingInt(m_pStateOut->m_aEmoteLines, Line, GetIntBufSize(m_pStateOut->m_aEmoteLines));
}

void CBaseBot::_AimRaw(int TargetX, int TargetY) const
3 changes: 3 additions & 0 deletions src/bots/base.h
Original file line number Diff line number Diff line change
@@ -77,6 +77,9 @@ class CBaseBot
void _DieRaw() const;
void _Die(const char *pComment) const;

void _EmoteRaw(int Emote);
void _Emote(int Emote, const char *pComment, const char *pFunction, const char *pFile, int Line);

/* Aim(x, y)
*
* Aim with targets using coordinates
2 changes: 2 additions & 0 deletions src/bots/def_macros.h
Original file line number Diff line number Diff line change
@@ -2,6 +2,7 @@

#ifdef TWBL_DEBUG
#define Die(comment) _Die(comment)
#define Emote(value, comment) _Emote(value, comment)
#define Aim(TargetX, TargetY, comment) _Aim(TargetX, TargetY, comment, __func__, __FILE__, __LINE__)
#define AimPos(TargetX, TargetY, comment) _AimPos(TargetX, TargetY, comment, __func__, __FILE__, __LINE__)
#define SetDirection(value, comment) _SetDirection(value, comment, __func__, __FILE__, __LINE__)
@@ -11,6 +12,7 @@
#define SetWeapon(value, comment) _SetWeapon(value, comment, __func__, __FILE__, __LINE__)
#else
#define Die(comment) _DieRaw()
#define Emote(value, comment) _EmoteRaw()
#define Aim(TargetX, TargetY, comment) _AimRaw(TargetX, TargetY)
#define AimPos(TargetX, TargetY, comment) _AimPosRaw(TargetX, TargetY)
#define SetDirection(value, comment) _SetDirectionRaw(value)
1 change: 1 addition & 0 deletions src/bots/undef_macros.h
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
#undef Die
#undef Emote
#undef Aim
#undef AimPos
#undef SetDirection
10 changes: 8 additions & 2 deletions src/server/ddnet_callback_ctx.cpp
Original file line number Diff line number Diff line change
@@ -9,13 +9,15 @@ CGameContext *CDDNetCallbackCtx::GameServer()
return m_pGameServer;
}

void CDDNetCallbackCtx::SendChat(int ClientId, int Team, const char *pText)
void CDDNetCallbackCtx::SendChat(int Team, const char *pText)
{
int ClientId = GetCid();
GameServer()->SendChat(ClientId, Team, pText);
}

void CDDNetCallbackCtx::Die(int ClientId)
void CDDNetCallbackCtx::Die()
{
int ClientId = GetCid();
if(ClientId < 0 || ClientId >= MAX_CLIENTS)
return;

@@ -26,4 +28,8 @@ void CDDNetCallbackCtx::Die(int ClientId)
pPlayer->KillCharacter(WEAPON_SELF);
}

void CDDNetCallbackCtx::Emote(int Emote)
{
}

} // namespace TWBL
5 changes: 3 additions & 2 deletions src/server/ddnet_callback_ctx.h
Original file line number Diff line number Diff line change
@@ -13,8 +13,9 @@ class CDDNetCallbackCtx : public CCallbackCtx
CGameContext *m_pGameServer = nullptr;
CGameContext *GameServer();

void SendChat(int ClientId, int Team, const char *pText) override;
void Die(int ClientId) override;
void SendChat(int Team, const char *pText) override;
void Die() override;
void Emote(int Emote) override;
};

} // namespace TWBL
12 changes: 8 additions & 4 deletions src/test/mock_callback_ctx.cpp
Original file line number Diff line number Diff line change
@@ -3,12 +3,16 @@

#include "mock_callback_ctx.h"

void CMockCallbackCtx::SendChat(int ClientId, int Team, const char *pText)
void CMockCallbackCtx::SendChat(int Team, const char *pText)
{
dbg_msg("chat", "%d:%d: %s", ClientId, Team, pText);
dbg_msg("chat", "%d:%d: %s", GetCid(), Team, pText);
}

void CMockCallbackCtx::Die(int ClientId)
void CMockCallbackCtx::Die()
{
dbg_msg("game", "killed cid=%d", GetCid());
}

void CMockCallbackCtx::Emote(int Emote)
{
dbg_msg("game", "killed cid=%d", ClientId);
}
5 changes: 3 additions & 2 deletions src/test/mock_callback_ctx.h
Original file line number Diff line number Diff line change
@@ -7,8 +7,9 @@
class CMockCallbackCtx : public TWBL::CCallbackCtx
{
public:
void SendChat(int ClientId, int Team, const char *pText) override;
void Die(int ClientId) override;
void SendChat(int Team, const char *pText) override;
void Die() override;
void Emote(int Emote) override;
};

#endif
8 changes: 6 additions & 2 deletions src/twbl/callback_ctx.h
Original file line number Diff line number Diff line change
@@ -7,8 +7,12 @@ class CCallbackCtx
{
public:
virtual ~CCallbackCtx() = default;
virtual void SendChat(int ClientId, int Team, const char *pText) = 0;
virtual void Die(int ClientId) = 0;
virtual void SendChat(int Team, const char *pText) = 0;
virtual void Die() = 0;
virtual void Emote(int Emote) = 0;

int m_ClientId = 0;
int GetCid() { return m_ClientId; }
};

}; // namespace TWBL
10 changes: 10 additions & 0 deletions src/twbl/types.h
Original file line number Diff line number Diff line change
@@ -78,6 +78,11 @@ class CServerBotStateOut
const char *m_apSetWeaponFiles[TWBL_MAX_LOG_LEN];
int m_aSetWeaponLines[TWBL_MAX_LOG_LEN];

const char *m_apEmoteComments[TWBL_MAX_LOG_LEN];
const char *m_apEmoteFunctions[TWBL_MAX_LOG_LEN];
const char *m_apEmoteFiles[TWBL_MAX_LOG_LEN];
int m_aEmoteLines[TWBL_MAX_LOG_LEN];

CServerBotStateOut()
{
#ifdef TWBL_DEBUG
@@ -113,6 +118,11 @@ class CServerBotStateOut
m_apSetWeaponFunctions[i] = "";
m_apSetWeaponFiles[i] = "";
m_aSetWeaponLines[i] = 0;

m_apEmoteComments[i] = "";
m_apEmoteFunctions[i] = "";
m_apEmoteFiles[i] = "";
m_aEmoteLines[i] = 0;
}
#endif
}

0 comments on commit 4e41b25

Please sign in to comment.