📄 char_talk.c.bak
字号:
break; } } else { if( mode == 1 ) { if( strcmp( DebugCDKey[i].cdkey, cdkey) == 0 ) { DebugCDKey[i].use = FALSE; DebugCDKey[i].cdkey[0] = '\0'; found = TRUE; } } } } if( !found ) return -1; return i;}static CHATMAGICFUNC CHAR_getChatMagicFuncPointer(char* name, BOOL isDebug){ int i; int hash = hashpjw( name ); for( i=0 ; i<arraysizeof(CHAR_cmtbl) ; i++ ) if( CHAR_cmtbl[i].hash == hash && CHAR_cmtbl[i].isdebug == isDebug && strcmp( CHAR_cmtbl[i].magicname, name ) == 0 ) return CHAR_cmtbl[i].func; return NULL;}int CHAR_getChatMagicFuncLevel(char* name,BOOL isDebug){ int i; int hash = hashpjw( name ); for( i=0 ; i<arraysizeof(CHAR_cmtbl) ; i++ ) if( CHAR_cmtbl[i].hash == hash && CHAR_cmtbl[i].isdebug == isDebug && strcmp( CHAR_cmtbl[i].magicname, name ) == 0 ) return CHAR_cmtbl[i].level; return -1;}int CHAR_getChatMagicFuncNameAndString( int ti, char* name, char *usestring, int level, BOOL isDebug){ if( name == NULL || usestring == NULL ) return -1; if( ti < 0 || ti >= arraysizeof( CHAR_cmtbl) ) return -1; if( CHAR_cmtbl[ ti].isdebug == isDebug && CHAR_cmtbl[ ti].level <= level ){ sprintf( name,"%s", CHAR_cmtbl[ ti].magicname ); sprintf( usestring, "%s", CHAR_cmtbl[ ti].usestring ); return 1; } return 0;}int CHAR_getChatMagicFuncMaxNum( void){ return arraysizeof( CHAR_cmtbl);}/*------------------------------------------------------------ * 民乓永玄 芊 * 娄醒 * charaindex int 平乓仿奶件犯永弁旦 * message char* 丢永本□斥 * isDebug BOOL 犯田永弘民乓永玄 芊井升丹井 * 忒曰袄 * 卅仄 ------------------------------------------------------------*/static BOOL CHAR_useChatMagic( int charaindex, char* data, BOOL isDebug){ char magicname[256]; int ret; int i; int gmLevel = 0, magicLevel; CHATMAGICFUNC func;#ifdef _GMRELOAD extern struct GMINFO gminfo[GMMAXNUM];#else#endif char *p = CHAR_getChar( charaindex, CHAR_CDKEY); if( !p ) { fprint( "err nothing cdkey\n"); return FALSE; } if( getChatMagicCDKeyCheck() == 1 ){ //第一次确认GM帐号 if( CHAR_getWorkInt( charaindex, CHAR_WORKFLG) & WORKFLG_DEBUGMODE ) { gmLevel = CHAR_getWorkInt( charaindex, CHAR_WORKGMLEVEL); }else{#ifdef _GMRELOAD for (i = 0; i < GMMAXNUM; i++){ if (strcmp( p, gminfo[i].cdkey) == 0){ gmLevel = gminfo[i].level; CHAR_setWorkInt( charaindex, CHAR_WORKGMLEVEL, gmLevel); break; } }#else#endif if( i >= GMMAXNUM ){ for( i = 0; i < DEBUGCDKEYNUM; i ++ ) { if( DebugCDKey[i].use && strcmp( p, DebugCDKey[i].cdkey) == 0 ) { break; } } if( i >= DEBUGCDKEYNUM ) return FALSE; } } }else { gmLevel = 3; CHAR_setWorkInt( charaindex, CHAR_WORKGMLEVEL, gmLevel); } ret = getStringFromIndexWithDelim( data, " ", 1, magicname, sizeof( magicname)); if( ret == FALSE)return FALSE; // Robin 0618 chaeck GM Level magicLevel = CHAR_getChatMagicFuncLevel( magicname, isDebug); if( gmLevel < magicLevel ) return FALSE; func = CHAR_getChatMagicFuncPointer(magicname,isDebug); if( func ){ LogGM( CHAR_getUseName( charaindex), CHAR_getChar( charaindex, CHAR_CDKEY), data, CHAR_getInt( charaindex, CHAR_FLOOR), CHAR_getInt( charaindex, CHAR_X), CHAR_getInt( charaindex, CHAR_Y) ); func( charaindex, data + strlen( magicname)+1); return TRUE; }else{ return FALSE; }}/*------------------------------------------------------------ * 祥汹井日汔毛菲户月 * 娄醒 * volume int 祥汹 * 忒曰袄 * 穴永皿匹及穴旦 ------------------------------------------------------------*/static int CHAR_getRangeFromVolume( int volume ){ static int chatvol[]={ 3,5,7,9,11,13,15,17,19,21,23,25,27,29,31 }; if( volume < 0 )return 0; else if( arraysizeof( chatvol ) <= volume ) { return chatvol[arraysizeof(chatvol)-1]; } return chatvol[volume];}/*------------------------------------------------------------ * 擘及示伉亘□丞毛茧月[条卅中支曰井凶[ * 娄醒 * mesg char* 仄扎屯月蜕邯 * 忒曰袄 * -1 及午五反仇公仇公 * 0 及午五反孔勾丹 * 1 方曰云云五中午}仃勾卞勾中化中月 ! 及醒 ------------------------------------------------------------*/static int CHAR_getVolume( char* mesg ){ int stringlen = strlen( mesg ); if( stringlen == 0 ) return 0; else if( stringlen == 1 ){ if ( mesg[ 0 ] == '!' ) return 1; else return 0; } else if ( stringlen == 2 ) { if ( mesg[ 1 ] == '!' ) { if ( mesg[ 0 ] == '!' ) return 2; else return 1; } else return 0; }else{ /* 3动晓 */ if( mesg[stringlen-1] == '.' ){ /* 仇公仇公及第 岭丐曰 */ if( mesg[stringlen-2] == '.' && mesg[stringlen-3] == '.' ){ /* 仇公仇公 */ return -1; } return 0; }else{ /* 仇仇井日 ! 毛醒尹月*/ int exnum=0; int i; for( i=stringlen-1; i>=0 ; i-- ){ if( mesg[i] != '!' ) break; else exnum++; } return exnum; } }}/*------------------------------------------------------------ * 丢永本□斥及 井日丢永本□斥及 坌毛潸曰请允 * 娄醒 * message char* 丢永本□斥 * kind char* p or s or i卅及丢永本□斥 * kindlen int kind 及赢今 * body char** 丢永本□斥 及禾奶件正□及伞 桦赭 * 忒曰袄 * 卅仄 ------------------------------------------------------------*/void CHAR_getMessageBody(char* message,char* kind,int kindlen,char** body){ int firstchar; /* 1 侬 毛切之匀仁[1 侬匹丐月仇午反lssproto.html互忡据 */ // Nuke +1: For invalid message attack *body = 0; firstchar = message[0]; if( firstchar == 'P' || firstchar == 'S' || firstchar == 'D' // CoolFish: Trade 2001/4/18 || firstchar == 'C' || firstchar == 'T' || firstchar == 'W' // CoolFish: Family 2001/5/28 || firstchar == 'A' || firstchar == 'J' || firstchar == 'E' || firstchar == 'M' || firstchar == 'B' || firstchar == 'X' || firstchar == 'R' || firstchar == 'L' ){ if( kindlen >= 2 ){ kind[0] = firstchar; kind[1] = '\0'; } else { return; } } else { return; } *body = message + 2;}static BOOL CHAR_Talk_check( int talkerindex, int talkedindex, int micflg ){#if 1 if( !CHAR_getFlg( talkerindex, CHAR_ISPARTYCHAT )){ int talker_b_mode = CHAR_getWorkInt( talkerindex, CHAR_WORKBATTLEMODE); int talked_b_mode = CHAR_getWorkInt( talkedindex, CHAR_WORKBATTLEMODE); if( talker_b_mode != BATTLE_CHARMODE_NONE && CHAR_getInt( talkedindex, CHAR_WHICHTYPE) != CHAR_TYPEPLAYER){ return FALSE; } if( micflg != 0 )return TRUE; if( talker_b_mode != BATTLE_CHARMODE_NONE && talked_b_mode != BATTLE_CHARMODE_NONE){ if( CHAR_getWorkInt( talkerindex, CHAR_WORKBATTLEINDEX) != CHAR_getWorkInt( talkedindex, CHAR_WORKBATTLEINDEX)){ return FALSE; } }else if( talker_b_mode != BATTLE_CHARMODE_NONE || talked_b_mode != BATTLE_CHARMODE_NONE){ return FALSE; } return TRUE; } if( CHAR_getInt( talkerindex, CHAR_WHICHTYPE) == CHAR_TYPEPLAYER) { int talker_b_mode = CHAR_getWorkInt( talkerindex, CHAR_WORKBATTLEMODE); int talked_b_mode = CHAR_getWorkInt( talkedindex, CHAR_WORKBATTLEMODE); if( talker_b_mode != BATTLE_CHARMODE_NONE && CHAR_getInt( talkedindex, CHAR_WHICHTYPE) != CHAR_TYPEPLAYER){ return FALSE; } if( micflg != 0 )return TRUE; if( CHAR_getWorkInt( talkerindex, CHAR_WORKPARTYMODE) != CHAR_PARTY_NONE ){ if( CHAR_getWorkInt( talkedindex, CHAR_WORKPARTYMODE) != CHAR_PARTY_NONE){ if( CHAR_getWorkInt( talkerindex, CHAR_WORKPARTYINDEX1) == CHAR_getWorkInt( talkedindex, CHAR_WORKPARTYINDEX1) ){ return TRUE; } } }else { if( talker_b_mode != BATTLE_CHARMODE_NONE && talked_b_mode != BATTLE_CHARMODE_NONE){ if( CHAR_getWorkInt( talkerindex, CHAR_WORKBATTLEINDEX) != CHAR_getWorkInt( talkedindex, CHAR_WORKBATTLEINDEX)){ return FALSE; } }else if( talker_b_mode != BATTLE_CHARMODE_NONE || talked_b_mode != BATTLE_CHARMODE_NONE){ return FALSE; } return TRUE; } } return FALSE;#else int MyBattleMode; int ToBattleMode; MyBattleMode = CHAR_getWorkInt( talkerindex, CHAR_WORKBATTLEMODE); ToBattleMode = CHAR_getWorkInt( talkedindex, CHAR_WORKBATTLEMODE); /* 爵 及凛 */ if( MyBattleMode == BATTLE_CHARMODE_NONE ) { if( ToBattleMode == BATTLE_CHARMODE_NONE ) { return TRUE; } else { return FALSE; } } /* 爵 及凛 */ else { /* 爵 仄化中卅中谛卞反霜日卅中[ */ if( ToBattleMode == BATTLE_CHARMODE_NONE) { return FALSE; } /* 元爵 匹 元扔奶玉及谛卞仄井霜耨请 卅中 */ if( CHAR_getWorkInt( talkerindex, CHAR_WORKBATTLEINDEX) == CHAR_getWorkInt( talkedindex, CHAR_WORKBATTLEINDEX) && CHAR_getWorkInt( talkerindex, CHAR_WORKBATTLESIDE) == CHAR_getWorkInt( talkedindex, CHAR_WORKBATTLESIDE ) ) { return TRUE; } else { return FALSE; } } return FALSE;#endif}void CHAR_Talk( int fd, int index,char* message,int color, int area ){ char firstToken[64]; char messageeraseescape[512]; char* messagebody; int mesgvolume=0; int lastvolume=0; int fl,x,y; int stringlen; int micflg = 0; int fmindexi = CHAR_getWorkInt( index, CHAR_WORKFMINDEXI ); int channel = CHAR_getWorkInt( index, CHAR_WORKFMCHANNEL ); int quickchannel = CHAR_getWorkInt( index, CHAR_WORKFMCHANNELQUICK ); { char *cdkey = CHAR_getChar( index, CHAR_CDKEY); char *charname = CHAR_getChar( index, CHAR_NAME); if( strlen(message) > 3 ){ if( CHAR_getWorkInt( index, CHAR_WORKFLG) & WORKFLG_DEBUGMODE ) { // shan begin if(strstr( message, "[")&&strstr( message, "]")){ }else{ // original LogTalk( charname, cdkey, CHAR_getInt( index, CHAR_FLOOR), CHAR_getInt( index, CHAR_X), CHAR_getInt( index, CHAR_Y), message ); } // end } } } //bg|0|r0|fc|d4B8|p0|bn|10|bt|10| // Nuke +1 08/27: For invalid message attack if ( *message == 0 ) return ; CHAR_getMessageBody(message,firstToken,sizeof(firstToken), &messagebody); // Nuke +1: For invalid message attack if ( !messagebody ) return ; strcpysafe( messageeraseescape,sizeof(messageeraseescape), messagebody ); makeStringFromEscaped( messageeraseescape ); stringlen = strlen( messageeraseescape ); if ( stringlen <= 0 ) return ; if( messageeraseescape[0] == '[' && messageeraseescape[stringlen-1] == ']' ){ char gm[128]; char* pass = strstr( messageeraseescape+1, getChatMagicPasswd()); // Arminius: limit ip +2 unsigned long ip; int a,b,c,d,ck; messageeraseescape[stringlen-1] = '\0'; // Arminius: limit ip ip=CONNECT_get_userip(fd); a=(ip % 0x100); ip=ip / 0x100; b=(ip % 0x100); ip=ip / 0x100; c=(ip % 0x100); ip=ip / 0x100; d=(ip % 0x100); if( pass == messageeraseescape+1 ){ if(CHAR_useChatMagic( index,messageeraseescape + 1 + strlen(getChatMagicPasswd()) + 1, TRUE)){ print( "\n账号:%s 名字:%s\n来自ip:%d.%d.%d.%d\n使用GM命令%s]\n",CHAR_getChar( index, CHAR_CDKEY), CHAR_getChar( index, CHAR_NAME), a, b, c, d,messageeraseescape); sprintf( gm, "您使用GM命令%s]已成功", messageeraseescape); CHAR_talkToCli( index, -1,gm, CHAR_COLORYELLOW ); } }else{ if( CHAR_getWorkInt( index, CHAR_WORKFLG ) & WORKFLG_DEBUGMODE ) { if(CHAR_useChatMagic( index,messageeraseescape + 1,TRUE)){ print( "\n账号:%s 名字:%s\n来自ip:%d.%d.%d.%d\n使用GM命令%s]\n",CHAR_getChar( index, CHAR_CDKEY), CHAR_getChar( index, CHAR_NAME), a, b, c, d,messageeraseescape); sprintf( gm, "您使用GM命令%s]已成功", messageeraseescape); CHAR_talkToCli( index, -1,gm, CHAR_COLORYELLOW ); } }else{#ifdef _GM_ITEM
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -