Skip to content

Commit 66277ec

Browse files
committed
Source
1 parent 1f706e0 commit 66277ec

File tree

1 file changed

+31
-124
lines changed

1 file changed

+31
-124
lines changed

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

Lines changed: 31 additions & 124 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,61 @@ 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-
int CLuaTeamDefs::GetTeamFromName(lua_State* luaVM)
48+
CClientTeam* 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+
return m_pTeamManager->GetTeam(name.c_str());
6751
}
6852

69-
int CLuaTeamDefs::GetTeamName(lua_State* luaVM)
53+
std::string CLuaTeamDefs::GetTeamName(CClientTeam* team) noexcept
7054
{
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;
55+
return std::string(team->GetTeamName());
8956
}
9057

91-
int CLuaTeamDefs::GetTeamColor(lua_State* luaVM)
58+
CLuaMultiReturn<std::uint8_t, std::uint8_t, std::uint8_t> CLuaTeamDefs::GetTeamColor(CClientTeam* team) noexcept
9259
{
93-
CClientTeam* pTeam = NULL;
94-
CScriptArgReader argStream(luaVM);
95-
argStream.ReadUserData(pTeam);
60+
std::uint8_t red;
61+
std::uint8_t green;
62+
std::uint8_t blue;
9663

97-
if (!argStream.HasErrors())
98-
{
99-
unsigned char ucRed, ucGreen, ucBlue;
100-
pTeam->GetColor(ucRed, ucGreen, ucBlue);
64+
team->GetColor(red, green, blue);
10165

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;
66+
return {red, green, blue};
11267
}
11368

114-
int CLuaTeamDefs::GetTeamFriendlyFire(lua_State* luaVM)
69+
bool CLuaTeamDefs::GetTeamFriendlyFire(CClientTeam* team) noexcept
11570
{
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;
71+
return team->GetFriendlyFire();
13172
}
13273

133-
int CLuaTeamDefs::GetPlayersInTeam(lua_State* luaVM)
74+
std::vector<CClientPlayer*> CLuaTeamDefs::GetPlayersInTeam(CClientTeam* team) noexcept
13475
{
135-
CClientTeam* pTeam = NULL;
136-
CScriptArgReader argStream(luaVM);
137-
argStream.ReadUserData(pTeam);
76+
std::vector<CClientPlayer*> players;
13877

139-
if (!argStream.HasErrors())
78+
for (auto iter = team->IterBegin(); iter != team->IterEnd(); ++iter)
14079
{
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;
80+
if (!(*iter)->IsBeingDeleted())
81+
players.push_back(*iter);
15882
}
159-
else
160-
m_pScriptDebugging->LogCustom(luaVM, argStream.GetFullErrorMessage());
16183

162-
lua_pushboolean(luaVM, false);
163-
return 1;
84+
return players;
16485
}
16586

166-
int CLuaTeamDefs::CountPlayersInTeam(lua_State* luaVM)
87+
std::uint32_t CLuaTeamDefs::CountPlayersInTeam(CClientTeam* team) noexcept
16788
{
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;
89+
return team->CountPlayers();
18390
}

0 commit comments

Comments
 (0)