/* ÔÊÍÍ»¯¼°±Ø¡õØ©ÈÓ¡õÌï¡õ±å ˪£Û int flag : 1·ÖÔÈÐ×ÈÕ˪ññÝç±å·´ÔÆÈÊÈÕئÖÐ */ void gmsvBroadcast( int fd, char *p1, char *p2, char *p3 , int flag ) { int i,c=0; for(i=0;i<MAXCONNECTION;i++){ if( ( flag == 1 ) && ( i == fd ) )continue; if( gs[i].use && gs[i].name[0] ){ saacproto_Broadcast_send( i, p1,p2,p3); c++; } } /* #if 1 { char fn[1000]; FILE *fp; snprintf( fn, sizeof(fn), "%s/broadcast.log" , logdir ); fp = fopen( fn,"a" ); if(fp){ fprintf( fp, "From %s(%d) Id:[%s] Char:[%s] Mesg:[%s]\n", gs[fd].name, fd, p1,p2,p3 ); fclose(fp); } } #endif */ }
void ADDRESSBOOK_DispatchMessage( char *cd, char *nm, char *value, int mode) { int i; char work[256]; int online,level,duelpoint, faceimagenumber, transmigration; int playernum = CHAR_getPlayerMaxNum(); int ret; getStringFromIndexWithDelim( value, "|" , 1 , work , sizeof( work )); online = atoi( work); getStringFromIndexWithDelim( value, "|" , 2 , work , sizeof( work )); level = atoi( work); getStringFromIndexWithDelim( value, "|" , 3 , work , sizeof( work )); duelpoint = atoi( work); getStringFromIndexWithDelim( value, "|" , 4 , work , sizeof( work )); faceimagenumber = atoi( work); ret = getStringFromIndexWithDelim( value, "|" , 5 , work , sizeof( work )); if( ret ) { transmigration = atoi( work); } else { transmigration = 0; } if( online == getServernumber()) { for( i = 0 ; i < playernum ; i++) { if( CHAR_CHECKINDEX( i )) { char *c = CHAR_getChar( i, CHAR_CDKEY); char *n = CHAR_getChar( i, CHAR_NAME); if( c == NULL || n == NULL ) continue; if( strcmp( c , cd ) == 0 && strcmp( n, nm ) == 0 ) { break; } } } if( i == playernum ) { online = 0; saacproto_Broadcast_send( acfd,cd, nm, "offline", 1); } } for( i = 0 ; i < playernum ; i++) { if( CHAR_CHECKINDEX( i )) { int j; for( j = 0 ; j < ADDRESSBOOK_MAX ; j++) { ADDRESSBOOK_entry *ae; ae = CHAR_getAddressbookEntry( i ,j ); if( ae && ae->use == TRUE && strcmp( ae->cdkey , cd ) == 0 && strcmp( ae->charname, nm ) == 0 ) { if( mode == 0 ) { ae->use = FALSE; }else { ae->online = online; ae->level = level; ae->duelpoint = duelpoint; ae->graphicsno = faceimagenumber; ae->transmigration = transmigration; } ADDRESSBOOK_sendAddressbookTableOne( i,j ); break; } } } } }
void ADDRESSBOOK_notifyLoginLogout( int cindex , int flg ) { int i; char *cd=NULL; char *nm = CHAR_getChar( cindex , CHAR_NAME ); int playernum = CHAR_getPlayerMaxNum(); if( !CHAR_CHECKINDEX( cindex ) )return; cd = CHAR_getChar( cindex, CHAR_CDKEY); CHAR_send_DpDBUpdate_AddressBook( cindex, flg ); for( i = 0 ; i < playernum ; i++){ if( CHAR_CHECKINDEX( i) && i != cindex ) { int j; for( j = 0 ; j<ADDRESSBOOK_MAX ; j++){ ADDRESSBOOK_entry *ae; ae = CHAR_getAddressbookEntry( i , j ); if( ae && ae->use == TRUE && strcmp( ae->cdkey , cd ) == 0 && strcmp( ae->charname, nm ) == 0 ){ ae->online = (flg == 0 ) ? 0: getServernumber(); ae->level = CHAR_getInt( cindex , CHAR_LV ); ae->duelpoint = CHAR_getInt( cindex, CHAR_DUELPOINT); ae->graphicsno = CHAR_getInt( cindex, CHAR_FACEIMAGENUMBER ); ae->transmigration = CHAR_getInt( cindex, CHAR_TRANSMIGRATION); ADDRESSBOOK_sendAddressbookTableOne( i,j ); break; } } } } if( flg == 0 ){ saacproto_Broadcast_send( acfd,cd, nm, "offline", 1); }else if( flg == 1 ) { for( i = 0 ; i < ADDRESSBOOK_MAX; i++ ){ int j; ADDRESSBOOK_entry* ae; ae = CHAR_getAddressbookEntry( cindex, i ); if( ae->use == 0 )continue; ae->online = 0; for( j=0 ; j < playernum ; j++ ) { if( CHAR_CHECKINDEX( j) && strcmp( ae->cdkey, CHAR_getChar( j, CHAR_CDKEY)) == 0 && strcmp( ae->charname, CHAR_getChar( j, CHAR_NAME) )== 0){ ae->level = CHAR_getInt( j, CHAR_LV ); ae->graphicsno = CHAR_getInt( j, CHAR_FACEIMAGENUMBER ); ae->online = getServernumber(); ae->transmigration = CHAR_getInt( j, CHAR_TRANSMIGRATION); break; } } if( j == playernum) { #ifndef _DEATH_CONTEND char buff[512]; char escapebuf[1024]; ae->online = 0; snprintf( buff, sizeof(buff), "%s_%s", ae->cdkey, ae->charname); makeEscapeString( buff, escapebuf, sizeof(escapebuf)); saacproto_DBGetEntryString_send( acfd, DB_ADDRESSBOOK, escapebuf, 0,0); #endif } } ADDRESSBOOK_sendAddressbookTable(cindex); saacproto_Broadcast_send( acfd,cd, nm, "online", 1); saacproto_MessageFlush_send( acfd, cd, nm); } }