1
0
Fork 0

(svn r8625) [0.5] -Backport from trunk (8253, 8273, 8497, 8520 + 8542):

-Codechange: Be more strict about language generation and fail any languages not having the mandatory ##name, ##ownname and ##isocode pragma's.
-Fix: return value from clamp was ignored 
-Codechange: Increase the size of the sound/video/music-drivers to 32 bytes (instead of 16) so their actual parameters can be passed. Sound has for example 'bufsize' and 'hz'.
-Fix/Feature: requery gameservers that did not respond to their first query.
release/0.5
rubidium 2007-02-08 10:19:03 +00:00
parent 1584e061eb
commit 4e3652f337
8 changed files with 57 additions and 11 deletions

View File

@ -1822,7 +1822,7 @@ static void CheatsWndProc(Window *w, WindowEvent *e)
/* Increase or decrease the value and clamp it to extremes */
value += (x >= 30) ? step : -step;
clamp(value, ce->min, ce->max);
value = clamp(value, ce->min, ce->max);
// take whatever the function returns
value = ce->proc(value, (x >= 30) ? 1 : -1);

View File

@ -1267,6 +1267,7 @@ void NetworkUDPGameLoop(void)
} else if (_udp_client_socket != INVALID_SOCKET) {
NetworkUDPReceive(_udp_client_socket);
if (_network_udp_broadcast > 0) _network_udp_broadcast--;
NetworkGameListRequery();
}
}

View File

@ -130,6 +130,7 @@ typedef struct NetworkGameList {
uint16 port;
bool online; // False if the server did not respond (default status)
bool manually; // True if the server was added manually
uint8 retries;
struct NetworkGameList *next;
} NetworkGameList;

View File

@ -6,6 +6,10 @@
#include "debug.h"
#include "network_data.h"
#include "newgrf_config.h"
#include "network_udp.h"
/** Should we stop/contiue requerying of offline servers? */
static bool _stop_requerying = false;
// This file handles the GameList
// Also, it handles the request to a server for data about the server
@ -39,6 +43,7 @@ NetworkGameList *NetworkGameListAddItem(uint32 ip, uint16 port)
DEBUG(net, 4) ("[NET][GameList] Added server to list");
UpdateNetworkGameWindow(false);
_stop_requerying = false;
return item;
}
@ -71,4 +76,38 @@ void NetworkGameListRemoveItem(NetworkGameList *remove)
}
}
enum {
MAX_GAME_LIST_REQUERY_COUNT = 5,
REQUERY_EVERY_X_GAMELOOPS = 60,
};
/** Requeries the (game) servers we have not gotten a reply from */
void NetworkGameListRequery(void)
{
static uint8 requery_cnt = 0;
struct in_addr ip;
NetworkGameList *item;
if (_stop_requerying || ++requery_cnt < REQUERY_EVERY_X_GAMELOOPS) return;
requery_cnt = 0;
_stop_requerying = true;
for (item = _network_game_list; item != NULL; item = item->next) {
uint8 retries;
if (item->online || item->retries >= MAX_GAME_LIST_REQUERY_COUNT) continue;
ip.s_addr = item->ip;
/* item gets mostly zeroed by NetworkUDPQueryServer */
retries = item->retries;
NetworkUDPQueryServer(inet_ntoa(ip), item->port);
item->retries = retries + 1;
_stop_requerying = false;
}
}
#endif /* ENABLE_NETWORK */

View File

@ -7,5 +7,6 @@ void NetworkGameListClear(void);
NetworkGameList *NetworkGameListAddItem(uint32 ip, uint16 port);
void NetworkGameListRemoveItem(NetworkGameList *remove);
void NetworkGameListAddQueriedItem(const NetworkGameInfo *info, bool server_online);
void NetworkGameListRequery(void);
#endif /* NETWORK_GAMELIST_H */

View File

@ -141,7 +141,7 @@ static void showhelp(void)
"\n"
"Command line options:\n"
" -v drv = Set video driver (see below)\n"
" -s drv = Set sound driver (see below)\n"
" -s drv = Set sound driver (see below) (param bufsize,hz)\n"
" -m drv = Set music driver (see below)\n"
" -r res = Set resolution (for instance 800x600)\n"
" -h = Display this help text\n"
@ -326,7 +326,7 @@ int ttd_main(int argc, char *argv[])
MyGetOptData mgo;
int i;
const char *optformat;
char musicdriver[16], sounddriver[16], videodriver[16];
char musicdriver[32], sounddriver[32], videodriver[32];
int resolution[2] = {0,0};
Year startyear = INVALID_YEAR;
uint generation_seed = GENERATE_NEW_SEED;
@ -334,7 +334,7 @@ int ttd_main(int argc, char *argv[])
bool network = false;
char *network_conn = NULL;
musicdriver[0] = sounddriver[0] = videodriver[0] = 0;
musicdriver[0] = sounddriver[0] = videodriver[0] = '\0';
_game_mode = GM_MENU;
_switch_mode = SM_MENU;
@ -410,10 +410,10 @@ int ttd_main(int argc, char *argv[])
LoadFromHighScore();
// override config?
if (musicdriver[0]) ttd_strlcpy(_ini_musicdriver, musicdriver, sizeof(_ini_musicdriver));
if (sounddriver[0]) ttd_strlcpy(_ini_sounddriver, sounddriver, sizeof(_ini_sounddriver));
if (videodriver[0]) ttd_strlcpy(_ini_videodriver, videodriver, sizeof(_ini_videodriver));
if (resolution[0]) { _cur_resolution[0] = resolution[0]; _cur_resolution[1] = resolution[1]; }
if (musicdriver[0] != '\0') ttd_strlcpy(_ini_musicdriver, musicdriver, sizeof(_ini_musicdriver));
if (sounddriver[0] != '\0') ttd_strlcpy(_ini_sounddriver, sounddriver, sizeof(_ini_sounddriver));
if (videodriver[0] != '\0') ttd_strlcpy(_ini_videodriver, videodriver, sizeof(_ini_videodriver));
if (resolution[0] != 0) { _cur_resolution[0] = resolution[0]; _cur_resolution[1] = resolution[1]; }
if (startyear != INVALID_YEAR) _patches_newgame.starting_year = startyear;
if (generation_seed != GENERATE_NEW_SEED) _patches_newgame.generation_seed = generation_seed;

View File

@ -910,12 +910,12 @@ static void ParseFile(const char *file, bool english)
_file = file;
// For each new file we parse, reset the genders.
/* For each new file we parse, reset the genders, and language codes */
_numgenders = 0;
_lang_name[0] = _lang_ownname[0] = _lang_isocode[0] = '\0';
// TODO:!! We can't reset the cases. In case the translated strings
// derive some strings from english....
in = fopen(file, "r");
if (in == NULL) fatal("Cannot open file");
_cur_line = 1;
@ -925,6 +925,10 @@ static void ParseFile(const char *file, bool english)
_cur_line++;
}
fclose(in);
if (_lang_name[0] == '\0' || _lang_ownname[0] == '\0' || _lang_isocode[0] == '\0') {
fatal("Language must include ##name, ##ownname and ##isocode");
}
}

View File

@ -319,7 +319,7 @@ VARDEF byte _get_z_hint; // used as a hint to getslopez to return the right heig
VARDEF Vehicle *_place_clicked_vehicle;
VARDEF char _ini_videodriver[16], _ini_musicdriver[16], _ini_sounddriver[16];
VARDEF char _ini_videodriver[32], _ini_musicdriver[32], _ini_sounddriver[32];
// Used for dynamic language support
typedef struct {