/[LeafOK_CVS]/pvpgn-1.7.4/src/d2cs/handle_d2cs.c
ViewVC logotype

Diff of /pvpgn-1.7.4/src/d2cs/handle_d2cs.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

Revision 1.2 by sysadm, Sat Jun 10 16:21:03 2006 UTC Revision 1.7 by sysadm, Thu Jun 22 05:32:44 2006 UTC
# Line 72  Line 72 
72  #include "compat/mkdir.h"  #include "compat/mkdir.h"
73  #include "d2charfile.h"  #include "d2charfile.h"
74  #include "connection.h"  #include "connection.h"
75    #include "d2charstatus.h"
76  #include "game.h"  #include "game.h"
77  #include "bnetd.h"  #include "bnetd.h"
78  #include "d2cs_protocol.h"  #include "d2cs_protocol.h"
# Line 283  static int on_client_creategamereq(t_con Line 284  static int on_client_creategamereq(t_con
284          unsigned int    seqno, reply;          unsigned int    seqno, reply;
285          unsigned int    pos;          unsigned int    pos;
286          t_elem          * elem;          t_elem          * elem;
287          char checksum_con;          t_charstatus    * cs;
           
288    
289                    
290          pos=sizeof(t_client_d2cs_creategamereq);          pos=sizeof(t_client_d2cs_creategamereq);
# Line 303  static int on_client_creategamereq(t_con Line 303  static int on_client_creategamereq(t_con
303                  return -1;                  return -1;
304          }          }
305    
         /* get checknum from client, by sowater */  
         checksum_con=d2cs_conn_get_checknum(c);  
   
           
306          tempflag=bn_int_get(packet->u.client_d2cs_creategamereq.gameflag);          tempflag=bn_int_get(packet->u.client_d2cs_creategamereq.gameflag);
307          leveldiff=bn_byte_get(packet->u.client_d2cs_creategamereq.leveldiff);          leveldiff=bn_byte_get(packet->u.client_d2cs_creategamereq.leveldiff);
308          maxchar=bn_byte_get(packet->u.client_d2cs_creategamereq.maxchar);          maxchar=bn_byte_get(packet->u.client_d2cs_creategamereq.maxchar);
# Line 329  static int on_client_creategamereq(t_con Line 325  static int on_client_creategamereq(t_con
325                  reply=D2CS_CLIENT_CREATEGAMEREPLY_NAME_EXIST;                  reply=D2CS_CLIENT_CREATEGAMEREPLY_NAME_EXIST;
326                    
327          /* right checknum? sowater */          /* right checknum? sowater */
328          } else if((*gamedesc!=checksum_con) && (prefs_antibot_when_password()==0) && prefs_enable_antibot()) {          } else if((prefs_antibot_when_password()==0) && prefs_enable_antibot() && d2cs_conn_verify_checknum(c, *gamedesc)) {
329                  eventlog(eventlog_level_info,__FUNCTION__,"checksum %c from packet not match checksum %c from connection",*gamedesc,checksum_con);                  eventlog(eventlog_level_info,__FUNCTION__,"checksum %c from packet not match checksum from connection",*gamedesc);
330                  reply=D2CS_CLIENT_CREATEGAMEREPLY_FAILED;                  reply=D2CS_CLIENT_CREATEGAMEREPLY_FAILED;
331          /* when antibot_when_password is true, by sowater, 20051001 */          /* when antibot_when_password is true, by sowater, 20051001 */
332          } else if((*gamedesc!=checksum_con) && (strlen(gamepass)!=0) && prefs_antibot_when_password()          } else if((strlen(gamepass)!=0 || maxchar<4 || leveldiff<30) && prefs_antibot_when_password() && prefs_enable_antibot()
333                          && prefs_enable_antibot()) {                  && d2cs_conn_verify_checknum(c, *gamedesc)) {
334                  eventlog(eventlog_level_info,__FUNCTION__,"checksum %c from packet not match checksum %c from connection",*gamedesc,checksum_con);                  eventlog(eventlog_level_info,__FUNCTION__,"checksum %c from packet not match checksum from connection",*gamedesc);
335                  reply=D2CS_CLIENT_CREATEGAMEREPLY_FAILED;                  reply=D2CS_CLIENT_CREATEGAMEREPLY_FAILED;
336          } else if (!gq && gqlist_find_game(gamename)) {          } else if (!gq && gqlist_find_game(gamename)) {
337                  eventlog(eventlog_level_info,__FUNCTION__,"game name %s is already exist in game queue",gamename);                  eventlog(eventlog_level_info,__FUNCTION__,"game name %s is already exist in game queue",gamename);
# Line 357  static int on_client_creategamereq(t_con Line 353  static int on_client_creategamereq(t_con
353          } else if (!(game=d2cs_game_create(gamename,gamepass,gamedesc,gameflag))) {          } else if (!(game=d2cs_game_create(gamename,gamepass,gamedesc,gameflag))) {
354                  reply=D2CS_CLIENT_CREATEGAMEREPLY_NAME_EXIST;                  reply=D2CS_CLIENT_CREATEGAMEREPLY_NAME_EXIST;
355          } else {          } else {
356                  reply=D2CS_CLIENT_CREATEGAMEREPLY_SUCCEED;                  /* By Leaflet, 20060613 */
357                  game_set_d2gs(game,gs);                  if ((cs=charstatus_list_find_charstatus_by_charname(c->charname)) == NULL)
358                  d2gs_add_gamenum(gs, 1);                          cs = charstatus_create(c->charname);
359                  game_set_gameflag_ladder(game,ladder);  
360                  game_set_gameflag_expansion(game,expansion);                  if (time(NULL) - cs->last_create_time <= prefs_create_game_interval())
361                  game_set_created(game,0);                          cs->frequently_create_count++;
362                  game_set_leveldiff(game,leveldiff);                          
363                  game_set_charlevel(game,conn_get_charinfo_level(c));                  if (prefs_enable_antibot() && cs->frequently_create_count > prefs_frequently_create_limit()
364                  game_set_maxchar(game,maxchar);                          && d2cs_conn_verify_checknum(c, *gamedesc)) {
365                  game_set_gameflag_difficulty(game,difficulty);                          eventlog(eventlog_level_info,__FUNCTION__,"checksum %c from packet not match checksum from connection",*gamedesc);
366                  game_set_gameflag_hardcore(game,hardcore);                          reply=D2CS_CLIENT_CREATEGAMEREPLY_FAILED;
367                    } else {
368                            if (strlen(gamedesc)!=0) {
369                                    if (!d2cs_conn_verify_checknum(c, *gamedesc))
370                                            cs->frequently_create_count = 0;
371                                    else
372                                            eventlog(eventlog_level_info,__FUNCTION__,"checksum %c from packet not match checksum from connection",
373                                                    *gamedesc);
374                            }
375    
376                            if (time(NULL) - cs->last_create_time > prefs_create_game_interval())
377                            {
378                                    cs->frequently_create_count--;
379                                    if (cs->frequently_create_count<0)
380                                            cs->frequently_create_count=0;
381                            }
382                            cs->last_create_time = time(NULL);
383            
384                            reply=D2CS_CLIENT_CREATEGAMEREPLY_SUCCEED;
385                            game_set_d2gs(game,gs);
386                            d2gs_add_gamenum(gs, 1);
387                            game_set_gameflag_ladder(game,ladder);
388                            game_set_gameflag_expansion(game,expansion);
389                            game_set_created(game,0);
390                            game_set_leveldiff(game,leveldiff);
391                            game_set_charlevel(game,conn_get_charinfo_level(c));
392                            game_set_maxchar(game,maxchar);
393                            game_set_gameflag_difficulty(game,difficulty);
394                            game_set_gameflag_hardcore(game,hardcore);
395                    }
396          }          }
397    
398          seqno=bn_short_get(packet->u.client_d2cs_creategamereq.seqno);          seqno=bn_short_get(packet->u.client_d2cs_creategamereq.seqno);


Legend:
Removed lines/characters  
Changed lines/characters
  Added lines/characters

webmaster@leafok.com
ViewVC Help
Powered by ViewVC 1.3.0-beta1