📄 addressbook.c
字号:
}static BOOL ADDRESSBOOK_makeEntryFromCharaindex( int charaindex, ADDRESSBOOK_entry* ae){ char *cdkey; if( !CHAR_CHECKINDEX(charaindex) ) return FALSE; memset( ae,0,sizeof(ADDRESSBOOK_entry) ); cdkey = CHAR_getChar( charaindex, CHAR_CDKEY); if( cdkey == "\0" ){ print( "ADDRESSBOOK_makeEntryFromCharaindex:" " strange! getcdkeyFromCharaIndex returns NULL!" " charaindex: %d\n" , charaindex ); return FALSE; } strcpysafe( ae->cdkey , sizeof( ae->cdkey ),cdkey); strcpysafe( ae->charname,sizeof( ae->charname), CHAR_getChar(charaindex,CHAR_NAME) ); ae->level = CHAR_getInt( charaindex , CHAR_LV ); ae->duelpoint = CHAR_getInt( charaindex, CHAR_DUELPOINT); ae->graphicsno = CHAR_getInt( charaindex , CHAR_FACEIMAGENUMBER ); ae->online = getServernumber(); ae->use = TRUE; ae->transmigration = CHAR_getInt( charaindex, CHAR_TRANSMIGRATION); return TRUE;}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) { 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); } } ADDRESSBOOK_sendAddressbookTable(cindex); saacproto_Broadcast_send( acfd,cd, nm, "online", 1); saacproto_MessageFlush_send( acfd, cd, nm); }}BOOL ADDRESSBOOK_sendAddressbookTable( int cindex ){ int stringlen=0; int i; if( !CHAR_CHECKINDEX( cindex ) )return FALSE; for( i=0 ; i<ADDRESSBOOK_MAX ; i++){ ADDRESSBOOK_entry *ae; ae = CHAR_getAddressbookEntry( cindex , i ); if( ae && ae->use ){ char tmp[CHARNAMELEN+32]; char charname_escaped[CHARNAMELEN*2]; makeEscapeString( ae->charname, charname_escaped , sizeof(charname_escaped )); /* 银迕白仿弘| 蟆|伊矛伙|仿奶白|白仿弘 */ snprintf( tmp , sizeof( tmp ), "%d|%s|%d|%d|%d|%d|%d|" , ae->use, charname_escaped , ae->level , ae->duelpoint,ae->online,ae->graphicsno, ae->transmigration); strcpysafe ( ADDRESSBOOK_returnstring + stringlen , sizeof(ADDRESSBOOK_returnstring) - stringlen, tmp ); stringlen += strlen( tmp ); if( stringlen >= sizeof(ADDRESSBOOK_returnstring) ) { break; } }else{ /*银匀化卅中犯□正手冲徇及心匹霜月 */ char tmp[32]; snprintf( tmp , sizeof( tmp ), "|||||||" ); strcpysafe ( ADDRESSBOOK_returnstring + stringlen , sizeof(ADDRESSBOOK_returnstring) - stringlen, tmp ); stringlen += strlen( tmp ); if( stringlen >= sizeof(ADDRESSBOOK_returnstring)) { break; } } } dchop( ADDRESSBOOK_returnstring, "|" ); { int fd; fd = getfdFromCharaIndex( cindex ); if( fd == -1 ) return FALSE; lssproto_AB_send( fd, ADDRESSBOOK_returnstring ); } return TRUE;}BOOL ADDRESSBOOK_sendAddressbookTableOne( int cindex, int num ){ int stringlen=0; ADDRESSBOOK_entry *ae; if( !CHAR_CHECKINDEX( cindex ) )return FALSE; if( num < 0 || num > ADDRESSBOOK_MAX) return FALSE; ae = CHAR_getAddressbookEntry( cindex , num ); if( ae && ae->use ){ char tmp[CHARNAMELEN+32]; char charname_escaped[CHARNAMELEN*2]; makeEscapeString( ae->charname, charname_escaped , sizeof(charname_escaped )); snprintf( tmp , sizeof( tmp ), "%d|%s|%d|%d|%d|%d|%d|" , ae->use, charname_escaped , ae->level , ae->duelpoint,ae->online,ae->graphicsno, ae->transmigration); strcpysafe ( ADDRESSBOOK_returnstring + stringlen , sizeof(ADDRESSBOOK_returnstring) - stringlen, tmp ); stringlen += strlen( tmp ); if( stringlen >= sizeof(ADDRESSBOOK_returnstring) ) { return FALSE; } }else{ char tmp[32]; snprintf( tmp , sizeof( tmp ), "|||||||" ); strcpysafe ( ADDRESSBOOK_returnstring + stringlen , sizeof(ADDRESSBOOK_returnstring) - stringlen, tmp ); stringlen += strlen( tmp ); if( stringlen >= sizeof(ADDRESSBOOK_returnstring)) { return FALSE; } } { int fd; fd = getfdFromCharaIndex( cindex ); if( fd == -1 ) return FALSE; lssproto_ABI_send( fd, num, ADDRESSBOOK_returnstring ); } return TRUE;}/*------------------------------------------------------------ * 夫午勾及失玉伊旦皮永弁巨件玄伉毛} 侬 卞卅云允[ * 仇木反平乓仿忡绣迕卅及匹弁仿奶失件玄卞霜耨允月方曰手恳割 * 卅手及匹丐月 邰互丐月[ * 娄醒 * a ADDRESSBOOK_entry* 侬 卞仄凶中厌瞻 尺及禾奶件正 * 忒曰袄 * char * ------------------------------------------------------------*/char *ADDRESSBOOK_makeAddressbookString( ADDRESSBOOK_entry *a ){ char work1[256], work2[256]; if( a->use == 0 ){ /* 坞巨件玄伉分匀凶日坞 侬 */ ADDRESSBOOK_returnstring[0] = '\0'; return ADDRESSBOOK_returnstring; } makeEscapeString( a->cdkey, work1, sizeof( work1 )); makeEscapeString( a->charname , work2 , sizeof( work2 )); snprintf( ADDRESSBOOK_returnstring, sizeof( ADDRESSBOOK_returnstring ), "%s|%s|%d|%d|%d|%d", work1, work2, a->level, a->duelpoint, a->graphicsno,a->transmigration); return ADDRESSBOOK_returnstring;}/*------------------------------------------------------------ * 侬 祭今木化中月失玉伊旦皮永弁巨件玄伉毛}厌瞻 卞卅云允[ * 仇及瑛绊厌瞻 及use动陆及树 反敦僬卞卅月[ * 娄醒 * in char* 侬 * a ADDRESSBOOK_entry* 犯□正毛璋户月赭 * 忒曰袄 * 勾友卞TRUE ------------------------------------------------------------*/BOOL ADDRESSBOOK_makeAddressbookEntry( char *in , ADDRESSBOOK_entry *a ){ char work1[256], work2[256] , work3[256] , work4[256],work5[256],work6[256]; int ret; if( strlen( in ) == 0 ){ memset( a,0,sizeof(ADDRESSBOOK_entry) ); a->use = 0; return TRUE; } getStringFromIndexWithDelim( in, "|" , 1 , work1 , sizeof( work1 )); getStringFromIndexWithDelim( in, "|" , 2 , work2 , sizeof( work2 )); getStringFromIndexWithDelim( in, "|" , 3 , work3 , sizeof( work3 )); getStringFromIndexWithDelim( in, "|" , 4 , work4 , sizeof( work4 )); getStringFromIndexWithDelim( in, "|" , 5 , work5 , sizeof( work5 )); work6[0] = '\0'; ret = getStringFromIndexWithDelim( in, "|" , 6 , work6 , sizeof( work6 )); if( ret == FALSE ) { a->transmigration = 0; } else { a->transmigration = atoi( work6); } a->use = 1; makeStringFromEscaped( work1 ); makeStringFromEscaped( work2 ); strcpysafe( a->cdkey , sizeof(a->cdkey) , work1 ); strcpysafe( a->charname , sizeof(a->charname), work2 ); a->level = atoi( work3 ); a->duelpoint = atoi( work4 ); a->graphicsno = atoi( work5 ); return FALSE;}void ADDRESSBOOK_addAddressBook( int meindex, int toindex){ char tmpstring[CHARNAMELEN + ADDRESSBOOK_FIXEDMESSAGE_MAXLEN]; int hisblank; int myblank; int myaddindex, toaddindex; int dir; char *cdkey; hisblank = ADDRESSBOOK_findBlankEntry( toindex ); if( hisblank < 0 ) { CHAR_talkToCli( meindex, -1, ADDRESSBOOK_HISTABLEFULL, CHAR_COLORWHITE); return ; } myblank = ADDRESSBOOK_findBlankEntry( meindex ); if( myblank < 0 ){ CHAR_talkToCli( meindex , -1, ADDRESSBOOK_MYTABLEFULL, CHAR_COLORWHITE ); return ; } cdkey = CHAR_getChar( toindex, CHAR_CDKEY); myaddindex = ADDRESSBOOK_getIndexInAddressbook( meindex, cdkey, CHAR_getChar( toindex, CHAR_NAME)); cdkey = CHAR_getChar( meindex, CHAR_CDKEY); toaddindex = ADDRESSBOOK_getIndexInAddressbook( toindex, cdkey, CHAR_getChar(meindex, CHAR_NAME)); if( myaddindex < 0 ){ ADDRESSBOOK_entry hisentry; if( ADDRESSBOOK_makeEntryFromCharaindex(toindex,&hisentry) == FALSE ){ return ; } CHAR_setAddressbookEntry( meindex, myblank,&hisentry ); snprintf( tmpstring, sizeof( tmpstring), toaddindex < 0 ? ADDRESSBOOK_ADDED: ADDRESSBOOK_GIVEADDRESS, hisentry.charname); CHAR_talkToCli( meindex , -1,tmpstring, CHAR_COLORWHITE ); ADDRESSBOOK_sendAddressbookTableOne( meindex, myblank); }else{ snprintf( tmpstring, sizeof( tmpstring), ADDRESSBOOK_TAKEADDRESS1, CHAR_getChar( toindex, CHAR_NAME)); CHAR_talkToCli( meindex, -1, tmpstring, CHAR_COLORWHITE); } if( toaddindex < 0 ) { ADDRESSBOOK_entry meae; if( ADDRESSBOOK_makeEntryFromCharaindex(meindex,&meae) == FALSE) { return; } CHAR_setAddressbookEntry( toindex, hisblank,&meae ); snprintf( tmpstring , sizeof( tmpstring), myaddindex < 0 ? ADDRESSBOOK_ADDED : ADDRESSBOOK_GIVEADDRESS, CHAR_getChar( meindex, CHAR_NAME ) ); CHAR_talkToCli( toindex, -1, tmpstring, CHAR_COLORWHITE); ADDRESSBOOK_sendAddressbookTableOne( toindex , hisblank); }else { if( myaddindex < 0 ) { snprintf( tmpstring , sizeof( tmpstring), ADDRESSBOOK_TAKEADDRESS2, CHAR_getChar( meindex, CHAR_NAME ) ); CHAR_talkToCli( toindex, -1, tmpstring, CHAR_COLORWHITE); } } dir = NPC_Util_GetDirCharToChar( toindex, meindex, 0); if( dir != -1) { if( CHAR_getInt( toindex, CHAR_DIR) != dir) { CHAR_setInt( toindex, CHAR_DIR, dir); } CHAR_sendWatchEvent( CHAR_getWorkInt( toindex, CHAR_WORKOBJINDEX), CHAR_ACTNOD,NULL,0,TRUE); CHAR_setWorkInt( toindex, CHAR_WORKACTION, CHAR_ACTNOD); CHAR_sendWatchEvent( CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX), CHAR_ACTNOD,NULL,0,TRUE); CHAR_setWorkInt( meindex, CHAR_WORKACTION, CHAR_ACTNOD); } return;}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 == "\0" || n == "\0" ) 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; } } } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -