commit of a modified version of [ Patch ] games bug fix

This commit is contained in:
pandaemonium 2007-08-08 18:10:22 +00:00
parent 10fc28a405
commit 10511d9926
4 changed files with 40 additions and 39 deletions

View file

@ -483,14 +483,20 @@ extern int channel_add_connection(t_channel * channel, t_connection * connection
for (user=channel_get_first(channel); user; user=channel_get_next())
{
message_send_text(connection,message_type_adduser,user,NULL);
message_send_text(user,message_type_join,connection,NULL);
/* In WOL gamechannels we send JOINGAME ack explicitely to self */
if (conn_wol_get_ingame(connection)==0)
message_send_text(user,message_type_join,connection,NULL);
}
else
message_send_text(connection,message_type_join,connection,NULL);
else {
if (conn_wol_get_ingame(connection)==0)
message_send_text(connection,message_type_join,connection,NULL);
}
if (conn_is_irc_variant(connection))
if (conn_is_irc_variant(connection)) {
if (conn_wol_get_ingame(connection)==0)
message_send_text(connection,message_type_namreply,connection,NULL);
}
conn_wol_set_ingame(connection,0);
/* please don't remove this notice */
if (channel->log)
message_send_text(connection,message_type_info,connection,prefs_get_log_notice());

View file

@ -3812,8 +3812,7 @@ extern void conn_wol_set_ingame(t_connection * c, int ingame)
return;
}
if (ingame)
c->protocol.wol.ingame = ingame;
c->protocol.wol.ingame = ingame;
}
extern int conn_wol_get_ingame(t_connection * c)
@ -3864,8 +3863,7 @@ extern void conn_wol_set_codepage(t_connection * c, int codepage)
return;
}
if (codepage)
c->protocol.wol.codepage = codepage;
c->protocol.wol.codepage = codepage;
}
extern int conn_wol_get_codepage(t_connection * c)
@ -3887,8 +3885,7 @@ extern void conn_wol_set_game_type(t_connection * c, int gameType)
return;
}
if (gameType)
c->protocol.wol.gameType = gameType;
c->protocol.wol.gameType = gameType;
}
extern int conn_wol_get_game_type(t_connection * c)
@ -3939,8 +3936,7 @@ extern void conn_wol_set_findme(t_connection * c, int findme)
return;
}
if (findme)
c->protocol.wol.findme = findme;
c->protocol.wol.findme = findme;
}
extern int conn_wol_get_findme(t_connection * c)
@ -3962,8 +3958,7 @@ extern void conn_wol_set_pageme(t_connection * c, int pageme)
return;
}
if (pageme)
c->protocol.wol.pageme = pageme;
c->protocol.wol.pageme = pageme;
}
extern int conn_wol_get_pageme(t_connection * c)

View file

@ -711,7 +711,6 @@ static int _handle_list_command(t_connection * conn, int numparams, char ** para
if (numparams == 0) {
/* This is Westwood Chat LIST command */
/* FIXME: We send only chat channels (no gamechannels for CnC, RedAlert and CnC Sole Survivor) */
eventlog(eventlog_level_debug,__FUNCTION__,"[** WOL **] LIST WCHAT");
LIST_TRAVERSE_CONST(channellist(),curr) {
@ -846,13 +845,7 @@ static int _handle_join_command(t_connection * conn, int numparams, char ** para
irc_send(conn,ERR_NOSUCHCHANNEL,":JOIN failed"); /* FIXME: be more precise; what is the real error code for that? */
}
else {
char temp[MAX_IRC_MESSAGE_LEN];
t_channel * channel;
channel = conn_get_channel(conn);
channel_set_userflags(conn);
wolname=irc_convert_channel(channel);
}
}
if (e)
@ -1286,7 +1279,8 @@ static int _handle_joingame_command(t_connection * conn, int numparams, char **
char temp[MAX_IRC_MESSAGE_LEN];
channel_set_userflags(conn);
message_send_text(conn,message_wol_joingame,conn,gameOptions); /* we have to send the JOINGAME acknowledgement */
// message_send_text(conn,message_wol_joingame,conn,gameOptions); /* we have to send the JOINGAME acknowledgement */
channel_message_send(channel,message_wol_joingame,conn,gameOptions);
wolname=irc_convert_channel(channel);
if ((topic = channel_get_topic(channel_get_name(channel)))) {
@ -1332,6 +1326,8 @@ static int _handle_joingame_command(t_connection * conn, int numparams, char **
}
eventlog(eventlog_level_debug,__FUNCTION__,"[** WOL **] JOINGAME [Game Options] (%s)",_temp);
conn_wol_set_ingame(conn,1);
e = irc_get_listelems(params[0]);
if ((e)&&(e[0])) {
char const * wolname = irc_convert_ircname(e[0]);
@ -1366,7 +1362,8 @@ static int _handle_joingame_command(t_connection * conn, int numparams, char **
channel_set_max(channel,std::atoi(params[2]));
channel_wol_set_game_type(channel,std::atoi(params[3]));
channel_wol_set_game_tournament(channel,std::atoi(params[6]));
channel_wol_set_game_extension(channel,params[7]);
if (params[7])
channel_wol_set_game_extension(channel,params[7]);
message_send_text(conn,message_wol_joingame,conn,_temp); /* we have to send the JOINGAME acknowledgement */
wolname=irc_convert_channel(channel);

View file

@ -650,14 +650,13 @@ extern int irc_message_format(t_packet * packet, t_message_type type, t_connecti
channel = conn_get_channel(me);
if((conn_get_wol(dst) == 1) && (conn_get_clienttag(dst) != CLIENTTAG_WCHAT_UINT))
{
if((conn_get_wol(dst) == 1) && (conn_get_clienttag(dst) != CLIENTTAG_WCHAT_UINT)) {
char temp[MAX_IRC_MESSAGE_LEN];
t_clan * clan;
unsigned int clanid = 0;
std::memset(temp,0,sizeof(temp));
/**
/**
* For WOLv2 the channel JOIN output must be like the following:
* user!WWOL@hostname JOIN :clanID,longIP channelName
*/
@ -675,11 +674,10 @@ extern int irc_message_format(t_packet * packet, t_message_type type, t_connecti
std::memset(temp,0,sizeof(temp));
if (conn_wol_get_ingame(me) == 1) {
std::sprintf(temp,"2 %u %u 1 1 %u :%s", channel_get_length(channel), channel_wol_get_game_type(channel), channel_wol_get_game_tournament(channel), irc_convert_channel(channel));
std::sprintf(temp,"2 %u %u 1 1 %u :", channel_get_length(channel), channel_wol_get_game_type(channel), channel_wol_get_game_tournament(channel));
msg = irc_message_preformat(&from,"JOINGAME",temp,irc_convert_channel(channel));
}
else
{
else {
msg = irc_message_preformat(&from,"JOIN","\r",irc_convert_channel(channel));
}
}
@ -931,7 +929,6 @@ int irc_send_rpl_namreply_internal(t_connection * c, t_channel const * channel){
std::strcat(flg,"+");
if ((std::strlen(temp)+((!first)?(1):(0))+std::strlen(flg)+std::strlen(name)+1)<=sizeof(temp)) {
if (!first) std::strcat(temp," ");
if((conn_get_wol(c) == 1)) {
if ((channel_wol_get_game_owner(channel) != NULL) && (std::strcmp(channel_wol_get_game_owner(channel),name) == 0)) {
std::strcat(temp,"@");
@ -942,20 +939,22 @@ int irc_send_rpl_namreply_internal(t_connection * c, t_channel const * channel){
}
if (conn_get_clienttag(c) != CLIENTTAG_WCHAT_UINT) {
/* BATTLECLAN Support */
char _temp[MAX_IRC_MESSAGE_LEN];
std::memset(_temp,0,sizeof(_temp));
t_clan * clan = account_get_clan(conn_get_account(m));
unsigned int clanid = 0;
if (clan)
clanid = clan_get_clanid(clan);
std::sprintf(temp,"%s%s,%u,%u",temp,name,clanid,conn_get_addr(m));
std::sprintf(_temp,"%s,%u,%u",name,clanid,conn_get_addr(m));
std::strcat(temp,_temp);
}
else {
std::sprintf(temp,"%s%s",temp,name);
std::strcat(temp,name);
}
}
else
{
else {
std::strcat(temp,flg);
std::strcat(temp,name);
}
@ -1105,6 +1104,7 @@ extern int irc_send_motd(t_connection * conn)
char * line, * formatted_line;
char send_line[MAX_IRC_MESSAGE_LEN];
char motd_failed = 0;
bool first = true;
if (!conn) {
eventlog(eventlog_level_error,__FUNCTION__,"got NULL connection");
@ -1113,14 +1113,17 @@ extern int irc_send_motd(t_connection * conn)
tempname = conn_get_loggeduser(conn);
irc_send(conn,RPL_MOTDSTART,":-");
if ((filename = prefs_get_motdfile())) {
if ((fp = std::fopen(filename,"r"))) {
while ((line=file_get_line(fp))) {
if ((formatted_line = message_format_line(conn,line))) {
formatted_line[0]=' ';
std::sprintf(send_line,":-%s",formatted_line);
if (first) {
irc_send(conn,RPL_MOTDSTART,send_line);
first = false;
}
else
irc_send(conn,RPL_MOTD,send_line);
xfree(formatted_line);
}
@ -1136,7 +1139,7 @@ extern int irc_send_motd(t_connection * conn)
motd_failed = 1;
if (motd_failed) {
irc_send(conn,RPL_MOTD,":- Failed to load motd, sending default motd ");
irc_send(conn,RPL_MOTDSTART,":- Failed to load motd, sending default motd ");
irc_send(conn,RPL_MOTD,":- ====================================================== ");
irc_send(conn,RPL_MOTD,":- http://www.pvpgn.org ");
irc_send(conn,RPL_MOTD,":- ====================================================== ");