Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 582fb7d

Browse files
Synchronize changes from 1.6 master branch [ci skip]
74ffa1d Refactor server CLuaTeamDefs (PR #3945) f37bbad Refactor client CLuaTeamDefs (PR #3944)
2 parents da13a55 + 74ffa1d commit 582fb7d

File tree

8 files changed

+137
-422
lines changed

8 files changed

+137
-422
lines changed

‎Client/mods/deathmatch/logic/CClientTeam.cpp‎

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,19 @@ void CClientTeam::RemoveAll()
6464
m_List.clear();
6565
}
6666

67+
std::vector<CClientPlayer*> CClientTeam::GetPlayers() const
68+
{
69+
std::vector<CClientPlayer*> players;
70+
71+
for (auto iter = IterBegin(); iter != IterEnd(); ++iter)
72+
{
73+
if (!(*iter)->IsBeingDeleted())
74+
players.push_back(*iter);
75+
}
76+
77+
return players;
78+
}
79+
6780
bool CClientTeam::Exists(CClientPlayer* pPlayer)
6881
{
6982
list<CClientPlayer*>::const_iterator iter = m_List.begin();
@@ -96,4 +109,4 @@ void CClientTeam::SetColor(unsigned char ucRed, unsigned char ucGreen, unsigned
96109
m_ucRed = ucRed;
97110
m_ucGreen = ucGreen;
98111
m_ucBlue = ucBlue;
99-
}
112+
}

‎Client/mods/deathmatch/logic/CClientTeam.h‎

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,11 +44,12 @@ class CClientTeam final : public CClientEntity
4444
void AddPlayer(CClientPlayer* pPlayer, bool bChangePlayer = false);
4545
void RemovePlayer(CClientPlayer* pPlayer, bool bChangePlayer = false);
4646
void RemoveAll();
47+
std::vector<CClientPlayer*> GetPlayers() const;
4748

4849
bool Exists(CClientPlayer* pPlayer);
4950

50-
std::list<CClientPlayer*>::const_iterator IterBegin() { return m_List.begin(); }
51-
std::list<CClientPlayer*>::const_iterator IterEnd() { return m_List.end(); }
51+
std::list<CClientPlayer*>::const_iterator IterBegin() constnoexcept{ return m_List.begin(); }
52+
std::list<CClientPlayer*>::const_iterator IterEnd() constnoexcept{ return m_List.end(); }
5253

5354
void GetPosition(CVector& vecPosition) const { vecPosition = m_vecPosition; }
5455
void SetPosition(const CVector& vecPosition) { m_vecPosition = vecPosition; }

‎Client/mods/deathmatch/logic/luadefs/CLuaTeamDefs.cpp‎

Lines changed: 34 additions & 130 deletions
Original file line numberDiff line numberDiff line change
@@ -2,21 +2,23 @@
22
*
33
* PROJECT: Multi Theft Auto
44
* LICENSE: See LICENSE in the top level directory
5-
* FILE: mods/shared_logic/luadefs/CLuaTeamDefs.cpp
6-
* PURPOSE: Lua team definitions class
75
*
86
* Multi Theft Auto is available from http://www.multitheftauto.com/
97
*
108
*****************************************************************************/
119

1210
#include "StdInc.h"
13-
using std::list;
11+
#include<lua/CLuaFunctionParser.h>
1412

1513
void CLuaTeamDefs::LoadFunctions()
1614
{
1715
constexpr static const std::pair<const char*, lua_CFunction> functions[]{
18-
{"getTeamFromName", GetTeamFromName}, {"getTeamName", GetTeamName}, {"getTeamColor", GetTeamColor},
19-
{"getTeamFriendlyFire", GetTeamFriendlyFire}, {"getPlayersInTeam", GetPlayersInTeam}, {"countPlayersInTeam", CountPlayersInTeam},
16+
{"getTeamFromName", ArgumentParserWarn<false, GetTeamFromName>},
17+
{"getTeamName", ArgumentParserWarn<false, GetTeamName>},
18+
{"getTeamColor", ArgumentParserWarn<false, GetTeamColor>},
19+
{"getTeamFriendlyFire", ArgumentParserWarn<false, GetTeamFriendlyFire>},
20+
{"getPlayersInTeam", ArgumentParserWarn<false, GetPlayersInTeam>},
21+
{"countPlayersInTeam", ArgumentParserWarn<false, CountPlayersInTeam>}
2022
};
2123

2224
// Add functions
@@ -28,156 +30,58 @@ void CLuaTeamDefs::AddClass(lua_State* luaVM)
2830
{
2931
lua_newclass(luaVM);
3032

31-
lua_classfunction(luaVM, "create", "getTeamFromName");
3233
lua_classfunction(luaVM, "getFromName", "getTeamFromName");
3334
lua_classfunction(luaVM, "countPlayers", "countPlayersInTeam");
3435
lua_classfunction(luaVM, "getFriendlyFire", "getTeamFriendlyFire");
3536
lua_classfunction(luaVM, "getName", "getTeamName");
3637
lua_classfunction(luaVM, "getColor", "getTeamColor");
3738
lua_classfunction(luaVM, "getPlayers", "getPlayersInTeam");
3839

39-
lua_classvariable(luaVM, "playerCount", NULL, "countPlayersInTeam");
40-
lua_classvariable(luaVM, "friendlyFire", NULL, "getTeamFriendlyFire");
41-
lua_classvariable(luaVM, "players", NULL, "getPlayersInTeam");
42-
lua_classvariable(luaVM, "name", NULL, "getTeamName");
40+
lua_classvariable(luaVM, "playerCount", nullptr, "countPlayersInTeam");
41+
lua_classvariable(luaVM, "friendlyFire", nullptr, "getTeamFriendlyFire");
42+
lua_classvariable(luaVM, "players", nullptr, "getPlayersInTeam");
43+
lua_classvariable(luaVM, "name", nullptr, "getTeamName");
4344

4445
lua_registerclass(luaVM, "Team", "Element");
4546
}
4647

47-
intCLuaTeamDefs::GetTeamFromName(lua_State* luaVM)
48+
std::variant<CClientTeam*, bool> CLuaTeamDefs::GetTeamFromName(const std::string name) noexcept
4849
{
49-
SString strName = "";
50-
CScriptArgReader argStream(luaVM);
51-
argStream.ReadString(strName);
52-
53-
if (!argStream.HasErrors())
54-
{
55-
CClientTeam* pTeam = m_pTeamManager->GetTeam(strName);
56-
if (pTeam)
57-
{
58-
lua_pushelement(luaVM, pTeam);
59-
return 1;
60-
}
61-
}
62-
else
63-
m_pScriptDebugging->LogCustom(luaVM, argStream.GetFullErrorMessage());
64-
65-
lua_pushboolean(luaVM, false);
66-
return 1;
50+
CClientTeam* team = m_pTeamManager->GetTeam(name.c_str());
51+
52+
if (!team)
53+
return false;
54+
55+
return team;
6756
}
6857

69-
int CLuaTeamDefs::GetTeamName(lua_State* luaVM)
58+
std::string CLuaTeamDefs::GetTeamName(CClientTeam* team)
7059
{
71-
CClientTeam* pTeam = NULL;
72-
CScriptArgReader argStream(luaVM);
73-
argStream.ReadUserData(pTeam);
74-
75-
if (!argStream.HasErrors())
76-
{
77-
const char* szName = pTeam->GetTeamName();
78-
if (szName)
79-
{
80-
lua_pushstring(luaVM, szName);
81-
return 1;
82-
}
83-
}
84-
else
85-
m_pScriptDebugging->LogCustom(luaVM, argStream.GetFullErrorMessage());
86-
87-
lua_pushboolean(luaVM, false);
88-
return 1;
60+
return std::string(team->GetTeamName());
8961
}
9062

91-
intCLuaTeamDefs::GetTeamColor(lua_State* luaVM)
63+
CLuaMultiReturn<std::uint8_t, std::uint8_t, std::uint8_t> CLuaTeamDefs::GetTeamColor(CClientTeam* team) noexcept
9264
{
93-
CClientTeam* pTeam = NULL;
94-
CScriptArgReader argStream(luaVM);
95-
argStream.ReadUserData(pTeam);
96-
97-
if (!argStream.HasErrors())
98-
{
99-
unsigned char ucRed, ucGreen, ucBlue;
100-
pTeam->GetColor(ucRed, ucGreen, ucBlue);
101-
102-
lua_pushnumber(luaVM, ucRed);
103-
lua_pushnumber(luaVM, ucGreen);
104-
lua_pushnumber(luaVM, ucBlue);
105-
return 3;
106-
}
107-
else
108-
m_pScriptDebugging->LogCustom(luaVM, argStream.GetFullErrorMessage());
109-
110-
lua_pushboolean(luaVM, false);
111-
return 1;
65+
std::uint8_t red;
66+
std::uint8_t green;
67+
std::uint8_t blue;
68+
69+
team->GetColor(red, green, blue);
70+
71+
return {red, green, blue};
11272
}
11373

114-
int CLuaTeamDefs::GetTeamFriendlyFire(lua_State* luaVM)
74+
bool CLuaTeamDefs::GetTeamFriendlyFire(CClientTeam* team) noexcept
11575
{
116-
CClientTeam* pTeam = NULL;
117-
CScriptArgReader argStream(luaVM);
118-
argStream.ReadUserData(pTeam);
119-
120-
if (!argStream.HasErrors())
121-
{
122-
bool bFriendlyFire = pTeam->GetFriendlyFire();
123-
lua_pushboolean(luaVM, bFriendlyFire);
124-
return 1;
125-
}
126-
else
127-
m_pScriptDebugging->LogCustom(luaVM, argStream.GetFullErrorMessage());
128-
129-
lua_pushboolean(luaVM, false);
130-
return 1;
76+
return team->GetFriendlyFire();
13177
}
13278

133-
int CLuaTeamDefs::GetPlayersInTeam(lua_State* luaVM)
79+
std::vector<CClientPlayer*> CLuaTeamDefs::GetPlayersInTeam(CClientTeam* team)
13480
{
135-
CClientTeam* pTeam = NULL;
136-
CScriptArgReader argStream(luaVM);
137-
argStream.ReadUserData(pTeam);
138-
139-
if (!argStream.HasErrors())
140-
{
141-
lua_newtable(luaVM);
142-
143-
unsigned int uiIndex = 0;
144-
145-
list<CClientPlayer*>::const_iterator iter = pTeam->IterBegin();
146-
for (; iter != pTeam->IterEnd(); iter++)
147-
{
148-
CClientPlayer* pPlayer = *iter;
149-
if (!pPlayer->IsBeingDeleted())
150-
{
151-
lua_pushnumber(luaVM, ++uiIndex);
152-
lua_pushelement(luaVM, pPlayer);
153-
lua_settable(luaVM, -3);
154-
}
155-
}
156-
157-
return 1;
158-
}
159-
else
160-
m_pScriptDebugging->LogCustom(luaVM, argStream.GetFullErrorMessage());
161-
162-
lua_pushboolean(luaVM, false);
163-
return 1;
81+
return team->GetPlayers();
16482
}
16583

166-
int CLuaTeamDefs::CountPlayersInTeam(lua_State* luaVM)
84+
std::uint32_t CLuaTeamDefs::CountPlayersInTeam(CClientTeam* team) noexcept
16785
{
168-
CClientTeam* pTeam = NULL;
169-
CScriptArgReader argStream(luaVM);
170-
argStream.ReadUserData(pTeam);
171-
172-
if (!argStream.HasErrors())
173-
{
174-
unsigned int uiCount = pTeam->CountPlayers();
175-
lua_pushnumber(luaVM, uiCount);
176-
return 1;
177-
}
178-
else
179-
m_pScriptDebugging->LogCustom(luaVM, argStream.GetFullErrorMessage());
180-
181-
lua_pushboolean(luaVM, false);
182-
return 1;
86+
return team->CountPlayers();
18387
}

‎Client/mods/deathmatch/logic/luadefs/CLuaTeamDefs.h‎

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,26 +2,26 @@
22
*
33
* PROJECT: Multi Theft Auto
44
* LICENSE: See LICENSE in the top level directory
5-
* FILE: mods/shared_logic/luadefs/CLuaTeamDefs.cpp
6-
* PURPOSE: Lua team definitions class
75
*
86
* Multi Theft Auto is available from http://www.multitheftauto.com/
97
*
108
*****************************************************************************/
119

1210
#pragma once
1311
#include "CLuaDefs.h"
12+
#include <lua/CLuaMultiReturn.h>
1413

1514
class CLuaTeamDefs : public CLuaDefs
1615
{
1716
public:
1817
static void LoadFunctions();
1918
static void AddClass(lua_State* luaVM);
2019

21-
LUA_DECLARE(GetTeamFromName);
22-
LUA_DECLARE(GetTeamName);
23-
LUA_DECLARE(GetTeamColor);
24-
LUA_DECLARE(GetTeamFriendlyFire);
25-
LUA_DECLARE(GetPlayersInTeam);
26-
LUA_DECLARE(CountPlayersInTeam);
20+
private:
21+
static std::variant<CClientTeam*, bool> GetTeamFromName(const std::string name) noexcept;
22+
static std::string GetTeamName(CClientTeam* team);
23+
static CLuaMultiReturn<std::uint8_t, std::uint8_t, std::uint8_t> GetTeamColor(CClientTeam* team) noexcept;
24+
static bool GetTeamFriendlyFire(CClientTeam* team) noexcept;
25+
static std::vector<CClientPlayer*> GetPlayersInTeam(CClientTeam* team);
26+
static std::uint32_t CountPlayersInTeam(CClientTeam* team) noexcept;
2727
};

‎Server/mods/deathmatch/logic/CTeam.cpp‎

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313
#include "CTeam.h"
1414
#include "CLogger.h"
1515
#include "Utils.h"
16-
#include "lua/LuaCommon.h"
1716

1817
CTeam::CTeam(CTeamManager* pTeamManager, CElement* pParent, const char* szName, unsigned char ucRed, unsigned char ucGreen, unsigned char ucBlue)
1918
: CElement(pParent)
@@ -118,19 +117,17 @@ void CTeam::RemoveAllPlayers()
118117
m_Players.clear();
119118
}
120119

121-
void CTeam::GetPlayers(lua_State* luaVM)
120+
std::vector<CPlayer*> CTeam::GetPlayers() const
122121
{
123-
unsignedint uiIndex = 0;
124-
list<CPlayer*>::const_iterator iter = m_Players.begin();
125-
for (; iter != m_Players.end(); ++iter)
122+
std::vector<CPlayer*> players;
123+
124+
for (auto iter = m_Players.begin(); iter != m_Players.end(); ++iter)
126125
{
127126
if (!(*iter)->IsBeingDeleted())
128-
{
129-
lua_pushnumber(luaVM, ++uiIndex);
130-
lua_pushelement(luaVM, *iter);
131-
lua_settable(luaVM, -3);
132-
}
127+
players.push_back(*iter);
133128
}
129+
130+
return players;
134131
}
135132

136133
void CTeam::GetColor(unsigned char& ucRed, unsigned char& ucGreen, unsigned char& ucBlue)

‎Server/mods/deathmatch/logic/CTeam.h‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ class CTeam final : public CElement
3636
void AddPlayer(CPlayer* pPlayer, bool bChangePlayer = false);
3737
void RemovePlayer(CPlayer* pPlayer, bool bChangePlayer = false);
3838
void RemoveAllPlayers();
39-
void GetPlayers(lua_State* luaVM);
39+
std::vector<CPlayer*> GetPlayers() const;
4040

4141
void GetColor(unsigned char& ucRed, unsigned char& ucGreen, unsigned char& ucBlue);
4242
void SetColor(unsigned char ucRed, unsigned char ucGreen, unsigned char ucBlue);

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /