⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 char_talk.c.bak

📁 石器时代2.0完整版源代码.已经加入新功能. 在REDHAT9下GCC3.4编译成功.
💻 BAK
📖 第 1 页 / 共 3 页
字号:
				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 + -