@@ -138,53 +138,54 @@ int ModApiServer::l_get_player_ip(lua_State *L)
138
138
// get_player_information(name)
139
139
int ModApiServer::l_get_player_information (lua_State *L)
140
140
{
141
-
142
141
NO_MAP_LOCK_REQUIRED;
143
- const char * name = luaL_checkstring (L, 1 );
144
- RemotePlayer *player = dynamic_cast <ServerEnvironment *>(getEnv (L))->getPlayer (name);
145
- if (player == NULL ) {
142
+
143
+ Server *server = getServer (L);
144
+
145
+ const char *name = luaL_checkstring (L, 1 );
146
+ RemotePlayer *player = server->getEnv ().getPlayer (name);
147
+ if (!player) {
146
148
lua_pushnil (L); // no such player
147
149
return 1 ;
148
150
}
149
151
150
152
Address addr;
151
- try
152
- {
153
- addr = getServer (L)->getPeerAddress (player->getPeerId ());
154
- } catch (const con::PeerNotFoundException &) {
153
+ try {
154
+ addr = server->getPeerAddress (player->getPeerId ());
155
+ } catch (const con::PeerNotFoundException &) {
155
156
dstream << FUNCTION_NAME << " : peer was not found" << std::endl;
156
157
lua_pushnil (L); // error
157
158
return 1 ;
158
159
}
159
160
160
- float min_rtt,max_rtt,avg_rtt,min_jitter,max_jitter,avg_jitter;
161
+ float min_rtt, max_rtt, avg_rtt, min_jitter, max_jitter, avg_jitter;
161
162
ClientState state;
162
163
u32 uptime;
163
164
u16 prot_vers;
164
- u8 ser_vers,major,minor,patch;
165
- std::string vers_string;
166
- std::string lang_code;
167
-
168
- #define ERET (code ) \
169
- if (!(code)) { \
170
- dstream << FUNCTION_NAME << " : peer was not found" << std::endl; \
171
- lua_pushnil (L); /* error */ \
172
- return 1 ; \
165
+ u8 ser_vers, major, minor, patch;
166
+ std::string vers_string, lang_code;
167
+
168
+ auto getConInfo = [&] (con::rtt_stat_type type, float *value) -> bool {
169
+ return server->getClientConInfo (player->getPeerId (), type, value);
170
+ };
171
+
172
+ bool have_con_info =
173
+ getConInfo (con::MIN_RTT, &min_rtt) &&
174
+ getConInfo (con::MAX_RTT, &max_rtt) &&
175
+ getConInfo (con::AVG_RTT, &avg_rtt) &&
176
+ getConInfo (con::MIN_JITTER, &min_jitter) &&
177
+ getConInfo (con::MAX_JITTER, &max_jitter) &&
178
+ getConInfo (con::AVG_JITTER, &avg_jitter);
179
+
180
+ bool r = server->getClientInfo (player->getPeerId (), &state, &uptime,
181
+ &ser_vers, &prot_vers, &major, &minor, &patch, &vers_string,
182
+ &lang_code);
183
+ if (!r) {
184
+ dstream << FUNCTION_NAME << " : peer was not found" << std::endl;
185
+ lua_pushnil (L); // error
186
+ return 1 ;
173
187
}
174
188
175
- ERET (getServer (L)->getClientConInfo (player->getPeerId (), con::MIN_RTT, &min_rtt))
176
- ERET (getServer (L)->getClientConInfo (player->getPeerId (), con::MAX_RTT, &max_rtt))
177
- ERET (getServer (L)->getClientConInfo (player->getPeerId (), con::AVG_RTT, &avg_rtt))
178
- ERET (getServer (L)->getClientConInfo (player->getPeerId (), con::MIN_JITTER,
179
- &min_jitter))
180
- ERET (getServer (L)->getClientConInfo (player->getPeerId (), con::MAX_JITTER,
181
- &max_jitter))
182
- ERET (getServer (L)->getClientConInfo (player->getPeerId (), con::AVG_JITTER,
183
- &avg_jitter))
184
-
185
- ERET (getServer (L)->getClientInfo (player->getPeerId (), &state, &uptime, &ser_vers,
186
- &prot_vers, &major, &minor, &patch, &vers_string, &lang_code))
187
-
188
189
lua_newtable (L);
189
190
int table = lua_gettop (L);
190
191
@@ -202,29 +203,31 @@ int ModApiServer::l_get_player_information(lua_State *L)
202
203
}
203
204
lua_settable (L, table);
204
205
205
- lua_pushstring (L," min_rtt" );
206
- lua_pushnumber (L, min_rtt);
207
- lua_settable (L, table);
206
+ if (have_con_info) { // may be missing
207
+ lua_pushstring (L, " min_rtt" );
208
+ lua_pushnumber (L, min_rtt);
209
+ lua_settable (L, table);
208
210
209
- lua_pushstring (L," max_rtt" );
210
- lua_pushnumber (L, max_rtt);
211
- lua_settable (L, table);
211
+ lua_pushstring (L, " max_rtt" );
212
+ lua_pushnumber (L, max_rtt);
213
+ lua_settable (L, table);
212
214
213
- lua_pushstring (L," avg_rtt" );
214
- lua_pushnumber (L, avg_rtt);
215
- lua_settable (L, table);
215
+ lua_pushstring (L, " avg_rtt" );
216
+ lua_pushnumber (L, avg_rtt);
217
+ lua_settable (L, table);
216
218
217
- lua_pushstring (L," min_jitter" );
218
- lua_pushnumber (L, min_jitter);
219
- lua_settable (L, table);
219
+ lua_pushstring (L, " min_jitter" );
220
+ lua_pushnumber (L, min_jitter);
221
+ lua_settable (L, table);
220
222
221
- lua_pushstring (L," max_jitter" );
222
- lua_pushnumber (L, max_jitter);
223
- lua_settable (L, table);
223
+ lua_pushstring (L, " max_jitter" );
224
+ lua_pushnumber (L, max_jitter);
225
+ lua_settable (L, table);
224
226
225
- lua_pushstring (L," avg_jitter" );
226
- lua_pushnumber (L, avg_jitter);
227
- lua_settable (L, table);
227
+ lua_pushstring (L, " avg_jitter" );
228
+ lua_pushnumber (L, avg_jitter);
229
+ lua_settable (L, table);
230
+ }
228
231
229
232
lua_pushstring (L," connection_uptime" );
230
233
lua_pushnumber (L, uptime);
@@ -268,7 +271,6 @@ int ModApiServer::l_get_player_information(lua_State *L)
268
271
lua_settable (L, table);
269
272
#endif
270
273
271
- #undef ERET
272
274
return 1 ;
273
275
}
274
276
0 commit comments