mirror of https://github.com/OpenTTD/OpenTTD
(svn r1204) -Add: [Network] Added some cheaters-protection (money-cheat mostly)
parent
8ab0190c29
commit
19e3842615
|
@ -1336,6 +1336,7 @@ STR_NETWORK_ERR_WRONG_REVISION :{WHITE} The revision of this client does not
|
||||||
STR_NETWORK_ERR_WRONG_PASSWORD :{WHITE} Wrong password
|
STR_NETWORK_ERR_WRONG_PASSWORD :{WHITE} Wrong password
|
||||||
STR_NETWORK_ERR_SERVER_FULL :{WHITE} The server is full
|
STR_NETWORK_ERR_SERVER_FULL :{WHITE} The server is full
|
||||||
STR_NETWORK_ERR_KICKED :{WHITE} You were kicked out of the game
|
STR_NETWORK_ERR_KICKED :{WHITE} You were kicked out of the game
|
||||||
|
STR_NETWORK_ERR_CHEATER :{WHITE} Cheating is not allowed on this server
|
||||||
|
|
||||||
STR_NETWORK_ERR_LEFT :has left the game
|
STR_NETWORK_ERR_LEFT :has left the game
|
||||||
############ Leave those lines in this order!!
|
############ Leave those lines in this order!!
|
||||||
|
@ -1351,6 +1352,7 @@ STR_NETWORK_ERR_CLIENT_NAME_IN_USE :name already in use
|
||||||
STR_NETWORK_ERR_CLIENT_WRONG_PASSWORD :wrong game-password
|
STR_NETWORK_ERR_CLIENT_WRONG_PASSWORD :wrong game-password
|
||||||
STR_NETWORK_ERR_CLIENT_PLAYER_MISMATCH :wrong player-id in DoCommand
|
STR_NETWORK_ERR_CLIENT_PLAYER_MISMATCH :wrong player-id in DoCommand
|
||||||
STR_NETWORK_ERR_CLIENT_KICKED :kicked by server
|
STR_NETWORK_ERR_CLIENT_KICKED :kicked by server
|
||||||
|
STR_NETWORK_ERR_CLIENT_CHEATER :was trying to use a cheat
|
||||||
############ End of leave-in-this-order
|
############ End of leave-in-this-order
|
||||||
STR_NETWORK_CLIENT_JOINED :has joined the game
|
STR_NETWORK_CLIENT_JOINED :has joined the game
|
||||||
STR_NETWORK_GIVE_MONEY :gave your company some money ({CURRENCY})
|
STR_NETWORK_GIVE_MONEY :gave your company some money ({CURRENCY})
|
||||||
|
|
|
@ -377,6 +377,8 @@ DEF_CLIENT_RECEIVE_COMMAND(PACKET_SERVER_ERROR)
|
||||||
_switch_mode_errorstr = STR_NETWORK_ERR_WRONG_PASSWORD;
|
_switch_mode_errorstr = STR_NETWORK_ERR_WRONG_PASSWORD;
|
||||||
} else if (error == NETWORK_ERROR_KICKED) {
|
} else if (error == NETWORK_ERROR_KICKED) {
|
||||||
_switch_mode_errorstr = STR_NETWORK_ERR_KICKED;
|
_switch_mode_errorstr = STR_NETWORK_ERR_KICKED;
|
||||||
|
} else if (error == NETWORK_ERROR_CHEATER) {
|
||||||
|
_switch_mode_errorstr = STR_NETWORK_ERR_CHEATER;
|
||||||
}
|
}
|
||||||
|
|
||||||
DeleteWindowById(WC_NETWORK_STATUS_WINDOW, 0);
|
DeleteWindowById(WC_NETWORK_STATUS_WINDOW, 0);
|
||||||
|
|
|
@ -87,6 +87,7 @@ typedef enum {
|
||||||
NETWORK_ERROR_WRONG_PASSWORD,
|
NETWORK_ERROR_WRONG_PASSWORD,
|
||||||
NETWORK_ERROR_PLAYER_MISMATCH, // Happens in CLIENT_COMMAND
|
NETWORK_ERROR_PLAYER_MISMATCH, // Happens in CLIENT_COMMAND
|
||||||
NETWORK_ERROR_KICKED,
|
NETWORK_ERROR_KICKED,
|
||||||
|
NETWORK_ERROR_CHEATER,
|
||||||
} NetworkErrorCode;
|
} NetworkErrorCode;
|
||||||
|
|
||||||
// Actions that can be used for NetworkTextMessage
|
// Actions that can be used for NetworkTextMessage
|
||||||
|
|
|
@ -785,16 +785,29 @@ DEF_SERVER_RECEIVE_COMMAND(PACKET_CLIENT_COMMAND)
|
||||||
SEND_COMMAND(PACKET_SERVER_ERROR)(cs, NETWORK_ERROR_PLAYER_MISMATCH);
|
SEND_COMMAND(PACKET_SERVER_ERROR)(cs, NETWORK_ERROR_PLAYER_MISMATCH);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (cp->cmd == CMD_PLAYER_CTRL) {
|
switch (cp->cmd) {
|
||||||
if (cp->p1 == 0)
|
/* Player_ctrl is not always allowed */
|
||||||
// UGLY! p2 is mis-used to get the client-id in CmdPlayerCtrl
|
case CMD_PLAYER_CTRL:
|
||||||
cp->p2 = cs - _clients;
|
{
|
||||||
else {
|
/* cp->p1 == 0, is allowed */
|
||||||
/* We do NOT allow any client to send any PLAYER_CTRL packet..
|
if (cp->p1 == 0) {
|
||||||
(they can delete random players with it if they like */
|
// UGLY! p2 is mis-used to get the client-id in CmdPlayerCtrl
|
||||||
SEND_COMMAND(PACKET_SERVER_ERROR)(cs, NETWORK_ERROR_PLAYER_MISMATCH);
|
cp->p2 = cs - _clients;
|
||||||
return;
|
} else {
|
||||||
}
|
/* The rest are cheats */
|
||||||
|
SEND_COMMAND(PACKET_SERVER_ERROR)(cs, NETWORK_ERROR_CHEATER);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
} break;
|
||||||
|
|
||||||
|
/* Don't allow those commands if server == advertising (considered cheating) */
|
||||||
|
case CMD_MONEY_CHEAT:
|
||||||
|
{
|
||||||
|
if (_network_advertise) {
|
||||||
|
SEND_COMMAND(PACKET_SERVER_ERROR)(cs, NETWORK_ERROR_CHEATER);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
} break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue