- added support for games using the gamespy protocol

- added q3,ut,sof,nolf,rally masters,turok2 and shogo masters
- made game names translatable
- updated german translation
- changed version to 0.9.7b


git-svn-id: http://svn.code.sf.net/p/xqf/code/trunk@90 d2ac09be-c843-0410-8b1f-f8a84130e0ec
This commit is contained in:
Ludwig Nussel 2001-09-28 13:18:24 +00:00 committed by l-n
parent 0e3acd5b37
commit 462db866a4
11 changed files with 158 additions and 7 deletions

View File

@ -1,3 +1,10 @@
Sep 28, 2001: Ludwig Nussel <l-n@sourceforge.net>
- added support for games using the gamespy protocol
- added q3,ut,sof,nolf,rally masters,turok2 and shogo masters
- made game names translatable
- updated german translation
- changed version to 0.9.7b
Sep 27, 2001: Ludwig Nussel <l-n@sourceforge.net>
- more translatable strings marked
- updated german translation

View File

@ -5,7 +5,7 @@
AC_INIT(src/xqf.c)
AM_INIT_AUTOMAKE(xqf, 0.9.7a)
AM_INIT_AUTOMAKE(xqf, 0.9.7b)
dnl AM_CONFIG_HEADER(src/gnuconfig.h:src/gnuconfig.h.in)
AM_CONFIG_HEADER(src/gnuconfig.h)

View File

@ -9,7 +9,7 @@ src/dialogs.c
#src/dns.c
src/filter.c
src/flt-player.c
#src/game.c
src/game.c
#src/history.c
#src/host.c
src/launch.c

View File

@ -5,8 +5,8 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"POT-Creation-Date: 2001-09-27 23:37+0200\n"
"PO-Revision-Date: 2001-09-27 23:38+GMT\n"
"POT-Creation-Date: 2001-09-28 11:43+0200\n"
"PO-Revision-Date: 2001-09-28 11:43+GMT\n"
"Last-Translator: Ludwig Nussel <ludwig.nussel@web.de>\n"
"Language-Team: <de@li.org>\n"
"MIME-Version: 1.0\n"
@ -218,6 +218,12 @@ msgstr "Hoch"
msgid "Down"
msgstr "Runter"
#. server_type
#. flags
#: src/game.c:431
msgid "Generic Gamespy"
msgstr "Allgemein Gamespy"
#: src/launch.c:72 src/launch.c:191
msgid "XQF: ERROR!"
msgstr "XQF: Fehler!"
@ -647,6 +653,10 @@ msgstr ""
"In Datei %s kann nicht geschrieben werden\n"
"Fehler: %s\n"
#: src/source.c:1022
msgid "Favorites"
msgstr "Favoriten"
#: src/srv-prop.c:332
msgid "IP Address:"
msgstr "IP Adresse:"

View File

@ -77,6 +77,7 @@ static int wo_exec (const struct condef *con, int forkit);
static int q2_exec_generic (const struct condef *con, int forkit);
static int ut_exec (const struct condef *con, int forkit);
static int t2_exec (const struct condef *con, int forkit);
static int gamespy_exec (const struct condef *con, int forkit);
static GList *q1_custom_cfgs (char *dir, char *game);
static GList *qw_custom_cfgs (char *dir, char *game);
@ -423,6 +424,28 @@ struct game games[] = {
quake_save_info
},
#endif
// any game using the gamespy protocol
{
GPS_SERVER, // server_type
GAME_CONNECT, // flags
N_("Generic Gamespy"), // name
GPS_DEFAULT_PORT, // default_port
0, // default_master_port
"GPS", // id
"GPS", // qstat_str
"-gps", // qstat_option
"gps", // qstat_master_option
&gamespy3d_pix, // pixmap
un_parse_player, // parse_player
quake_parse_server, // parse_server
un_analyze_serverinfo, // analyze_serverinfo
config_is_valid_generic, // config_is_valid
NULL, // write_config
gamespy_exec, // exec_client
NULL, // custom_cfgs
quake_save_info // save_info
},
{
UNKNOWN_SERVER,
@ -514,7 +537,7 @@ GtkWidget *game_pixmap_with_label (enum server_type type) {
gtk_widget_show (pixmap);
}
label = gtk_label_new (games[type].name);
label = gtk_label_new (_(games[type].name));
gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
gtk_widget_show (label);
@ -1044,7 +1067,6 @@ static void q3_analyze_serverinfo (struct server *s) {
{
s->type=Q3_SERVER;
}
}
else if (strcmp (*info_ptr, "gamename") == 0) {
@ -1947,6 +1969,66 @@ static int ut_exec (const struct condef *con, int forkit) {
return retval;
}
// launch any game that uses the gamespy protocol
// the first argument is the content of gamename field (may be empty),
// the second one the ip of the server
static int gamespy_exec (const struct condef *con, int forkit) {
char *argv[32];
int argi = 0;
char *cmd;
struct game *g = NULL;
int retval;
char **info_ptr;
char* gamename="";
char* hostport=NULL;
char* real_server=NULL;
if(!con || !con->s)
return 1;
g = &games[con->s->type];
cmd = strdup_strip (g->cmd);
argv[argi++] = strtok (cmd, delim);
while ((argv[argi] = strtok (NULL, delim)) != NULL)
argi++;
// go through all server rules
for (info_ptr = con->s->info; info_ptr && *info_ptr; info_ptr += 2) {
if (!strcmp (*info_ptr, "gamename")) {
gamename=info_ptr[1];
}
else if (!strcmp (*info_ptr, "hostport")) {
hostport=info_ptr[1];
}
}
argv[argi++] = strdup_strip (gamename);
if (con->server) {
// gamespy port can be different from game port
if(hostport)
{
real_server = g_strdup_printf ("%s:%s", inet_ntoa (con->s->host->ip), hostport);
argv[argi++] = real_server;
}
else
{
argv[argi++] = con->server;
}
}
argv[argi] = NULL;
retval = client_launch_exec (forkit, g->real_dir, argv, con->s);
g_free (cmd);
g_free (real_server);
return retval;
}
static int t2_exec (const struct condef *con, int forkit) {
char *argv[32];
int argi = 0;

View File

@ -51,6 +51,8 @@
#include "xpm/hr2.xpm"
#include "xpm/un.xpm"
#include "xpm/gamespy3d.xpm"
#include "xpm/green-plus.xpm"
#include "xpm/red-minus.xpm"
@ -101,6 +103,7 @@ struct pixmap sfs_pix;
struct pixmap t2_pix;
struct pixmap hr_pix;
struct pixmap un_pix;
struct pixmap gamespy3d_pix;
struct pixmap gplus_pix;
struct pixmap rminus_pix;
@ -200,6 +203,7 @@ void free_pixmaps (void) {
free_pixmap (&t2_pix);
free_pixmap (&hr_pix);
free_pixmap (&un_pix);
free_pixmap (&gamespy3d_pix);
free_pixmap (&gplus_pix);
free_pixmap (&rminus_pix);
@ -268,6 +272,7 @@ void init_pixmaps (GtkWidget *window) {
create_pixmap (window, &t2_pix, t2_xpm);
create_pixmap (window, &hr_pix, hr2_xpm);
create_pixmap (window, &un_pix, un_xpm);
create_pixmap (window, &gamespy3d_pix, gamespy3d_xpm);
create_pixmap (window, &gplus_pix, green_plus_xpm);
create_pixmap (window, &rminus_pix, red_minus_xpm);

View File

@ -60,6 +60,7 @@ extern struct pixmap sfs_pix;
extern struct pixmap t2_pix;
extern struct pixmap hr_pix;
extern struct pixmap un_pix;
extern struct pixmap gamespy3d_pix;
extern struct pixmap gplus_pix;
extern struct pixmap rminus_pix;

View File

@ -818,6 +818,7 @@ static char *builtin_masters_update_info[] = {
"ADD Q3S master://master3.idsoftware.com id",
"ADD Q3S master://q3master.splatterworld.de Germany",
"ADD Q3S master://q3.golsyd.net.au Australia",
"ADD Q3S master://q3master.barrysworld.com:27950 BarrysWorld",
#endif
"ADD SNS http://www.gameaholic.com/servers/qspy-sin Gameaholic.Com",
@ -835,6 +836,7 @@ static char *builtin_masters_update_info[] = {
#ifdef QSTAT_HAS_UNREAL_SUPPORT
"ADD UNS gmaster://unreal.epicgames.com:28900 Epic",
"ADD UNS gmaster://utmaster.barrysworld.com:28909 BarrysWorld",
#endif
"ADD T2S master://198.74.33.29:28002 NA West1",
@ -845,6 +847,12 @@ static char *builtin_masters_update_info[] = {
"ADD WOS master://wolf.idsoftware.com:27950 id",
"ADD SFS http://www.gameaholic.com/servers/qspy-soldieroffortune gameaholic.com",
"ADD GPS http://www.gameaholic.com/servers/qspy-noonelivesforever Noone Lives Forevere - gameaholic.com",
"ADD GPS http://www.gameaholic.com/servers/qspy-rallymasters Rally Masters - gameaholic.com",
"ADD GPS http://www.gameaholic.com/servers/qspy-turok2 Turok 2 - gameaholic.com",
"ADD GPS http://www.gameaholic.com/servers/qspy-shogo Shogo - gameaholic.com",
NULL
};

36
xqf/src/xpm/gamespy3d.xpm Normal file
View File

@ -0,0 +1,36 @@
/* XPM */
static char * gamespy3d_xpm[] = {
"16 16 17 1",
" c None",
". c #00FF00",
"+ c #00DE00",
"@ c #00AE00",
"# c #007A00",
"$ c #004A00",
"% c #002E00",
"& c #39E939",
"* c #355635",
"= c #BDF4BD",
"- c #FFFFFF",
"; c #EFEFEF",
"> c #BFBFBF",
", c #B8B8B8",
"' c #7A7A7A",
") c #373737",
"! c #000000",
">>>>>!!-!!>>>>>>",
">>>>),,-,,'!>>>>",
">>>),*%'%*',!>>>",
">>),!$...@!),!>>",
">!,!!#...@$!')>>",
">')!%##$$#.@%,!>",
"!-!$.....@@%!,!!",
"---!%#%##%!!'--'",
"!,!%$$!##$@%!,!!",
"!')+.!!!#..$),!>",
">),%.#!!#..!,)>>",
">!)=.@!!#..&,!>>",
">>!)=&@@+&='-)>>",
">>>!!'---'!!);)>",
">>>>>!!-!!>>!);)",
">>>>>>!-!>>>>!)-"};

View File

@ -280,7 +280,7 @@ void source_ctree_show_node_status (GtkWidget *ctree, struct master *m) {
gtk_ctree_get_node_info (GTK_CTREE (ctree), node, NULL, NULL,
NULL, NULL, NULL, NULL, &is_leaf, &expanded);
gtk_ctree_set_node_info (GTK_CTREE (ctree), node, m->name, 4,
gtk_ctree_set_node_info (GTK_CTREE (ctree), node, _(m->name), 4,
(pix)? pix->pix : NULL, (pix)? pix->mask : NULL,
(pix)? pix->pix : NULL, (pix)? pix->mask : NULL,
is_leaf, expanded);

View File

@ -57,6 +57,7 @@
#define T2_DEFAULT_PORT 28000 /* Tribes 2 */
#define HR_DEFAULT_PORT 28910 /* Heretic2 */
#define UN_DEFAULT_PORT 7777 /* Unreal */
#define GPS_DEFAULT_PORT 27888 /* Gamespy Generic */
#define QWM_DEFAULT_PORT 27000 /* QuakeWorld */
#define Q2M_DEFAULT_PORT 27900 /* Quake2 master */
@ -99,6 +100,7 @@ enum server_type {
#ifdef QSTAT_HAS_UNREAL_SUPPORT
UN_SERVER,
#endif
GPS_SERVER,
UNKNOWN_SERVER
};