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

📄 npcutil.c

📁 石器时代2.0完整版源代码.已经加入新功能. 在REDHAT9下GCC3.4编译成功.
💻 C
📖 第 1 页 / 共 3 页
字号:
	}	if( cret == NULL ) print("File:%s\n", NPC_Util_CheckAssignArgFile( index, filename));	return( cret);}int NPC_Util_GetNumFromStrWithDelim( char *srcstr, char* in){	BOOL    rc;	int     i;	char    outstr[32];	int		out = -1;	for( i = 1; ; i++ ) {		rc = getStringFromIndexWithDelim( srcstr, "|", i, outstr, sizeof(outstr));		if( rc == FALSE) break;		if( strstr( outstr, in) != NULL ) {			out = textToInt( outstr);			break;		}	}	return out;}char *NPC_Util_GetStrFromStrWithDelim( char *srcstr, char *srhstr,                                       char *buf, int buflen){	BOOL    rc;	char	*cret = NULL;	int     i;	char    outstr[1024];	char    outstr2[1024];	memset( outstr, 0, sizeof( outstr));	memset( outstr2, 0, sizeof( outstr2));	buf[0] = '\0';	for( i = 1; ; i++ ) {		rc = getStringFromIndexWithDelim( srcstr, "|", i, outstr, sizeof(outstr));		if( rc == FALSE) break;		if( strstr( outstr, srhstr) != NULL) {			rc = getStringFromIndexWithDelim( outstr, ":", 2, outstr2, sizeof(outstr2));			if( rc != FALSE ) {				strcpysafe( buf, buflen, outstr2 );				cret = buf;				break;			}		}	}	return cret;}inline double NPC_Util_sellRate( int seller ){   	return (CHAR_getInt( seller, CHAR_MERCHANTLEVEL)&0x0000ffff)*0.01;}inline double NPC_Util_buyRate( int buyer ){    return (CHAR_getInt( buyer, CHAR_MERCHANTLEVEL )>>16)*0.01;}BOOL NPC_Util_IsVisiblePlayer( int meindex){	int		chr_fl,chr_x,chr_y, i, j;	BOOL	found = FALSE;	chr_fl = CHAR_getInt( meindex, CHAR_FLOOR);	chr_x  = CHAR_getInt( meindex, CHAR_X);	chr_y  = CHAR_getInt( meindex, CHAR_Y);    for( i = chr_x-CHAR_DEFAULTSEESIZ/2 ;    	i <= chr_x+CHAR_DEFAULTSEESIZ/2 && found == FALSE; i++ ){        for( j = chr_y-CHAR_DEFAULTSEESIZ/2 ;        	j <= chr_y+CHAR_DEFAULTSEESIZ/2 && found == FALSE;             j ++ ){            OBJECT  object;			for( object = MAP_getTopObj( chr_fl, i,j);				object;				object = NEXT_OBJECT(object) )			{                int objindex = GET_OBJINDEX( object);                if( OBJECT_getType(objindex) == OBJTYPE_CHARA ){                	if( CHAR_getInt( OBJECT_getIndex(objindex),                                 CHAR_WHICHTYPE ) == CHAR_TYPEPLAYER )					{						found = TRUE;						break;					}				}			}		}	}	return( found);}BOOL NPC_Util_WordInclude( char *text , char *word ){    if( strstr( text , word ) == NULL ){        return FALSE;    } else {        return TRUE;    }}void NPC_Util_RandomToken(char *in, char *out, int outbufsize ){    int tokennum;    int i;    tokennum = 1;    for( i=0;in[i]!='\0';i++ ){        if( in[i] == ',' ) tokennum++;    }    getStringFromIndexWithDelim(in,",", rand()%tokennum+1,out,outbufsize );}void cutDotsTail( char *s ){    int l = strlen( s );    int i;    for(i=l-1;i>=0;i--){        if( s[i] == '.' ){            s[i] = 0;        } else {            break;        }    }}int NPC_Util_FrontItem( int meindex ){    int front_x, front_y,objindex,itemindex;    OBJECT obj;    CHAR_getCoordinationDir( CHAR_getInt(meindex,CHAR_DIR)                             , CHAR_getInt(meindex,CHAR_X)                             , CHAR_getInt(meindex,CHAR_Y)                             ,1, &front_x, &front_y );    for( obj=MAP_getTopObj(CHAR_getInt(meindex,CHAR_FLOOR),                           front_x,front_y );obj;        obj=NEXT_OBJECT(obj) ){        objindex = GET_OBJINDEX(obj);        if( OBJECT_getType(objindex) == OBJTYPE_ITEM ){            itemindex = OBJECT_getIndex(objindex);            if(ITEM_CHECKINDEX(itemindex) ){                return itemindex;            }else{                return -1;            }        }    }    return -1;}int NPC_Util_FrontChar( int meindex ){    int front_x, front_y,objindex,enemyindex;    OBJECT obj;    CHAR_getCoordinationDir( CHAR_getInt(meindex,CHAR_DIR)                             , CHAR_getInt(meindex,CHAR_X)                             , CHAR_getInt(meindex,CHAR_Y)                             ,1, &front_x, &front_y );    for( obj=MAP_getTopObj(CHAR_getInt(meindex,CHAR_FLOOR),                           front_x,front_y );obj;        obj=NEXT_OBJECT(obj) ){        objindex = GET_OBJINDEX(obj);        if( OBJECT_getType(objindex) == OBJTYPE_CHARA ){            enemyindex = OBJECT_getIndex(objindex);            if(CHAR_CHECKINDEX(enemyindex) ){                return enemyindex;            }        }    }    return -1;}static int	NPCUtil_enemytbl[NPC_ENEMY_ENEMYNUMBER+1];int *NPC_Util_getEnemy( int meindex, int charaindex){	int		i;	char	argstr[NPC_UTIL_GETARGSTR_BUFSIZE];	char	buf[64];	int		ret;	int		bigcnt;	int		insert;	NPC_Util_GetArgStr( meindex, argstr, sizeof( argstr));	for( i = 0; i < NPC_ENEMY_ENEMYNUMBER+1; i ++ ) {		NPCUtil_enemytbl[i] = -1;	}	if( NPC_Util_GetStrFromStrWithDelim( argstr, "enemyno", buf, sizeof( buf))		== NULL )	{		return NULL;	}	bigcnt = 0;	insert = 0;	for( i = 0; i < NPC_ENEMY_ENEMYNUMBER; i ++ ) {		int		curEnemy;		int		et_array;		char	data[128];		ret = getStringFromIndexWithDelim( buf,",", i + 1,data, sizeof(data));		if( ret == FALSE) {			break;		}		curEnemy = ENEMY_getEnemyArrayFromId( atoi( data));		if( !ENEMY_CHECKINDEX( curEnemy) ) continue;		et_array = ENEMYTEMP_getEnemyTempArray( curEnemy );		if( ENEMYTEMP_getInt( et_array, E_T_SIZE ) == E_T_SIZE_BIG) {			if( bigcnt >= 5 ) {				continue;			}			if( insert > 4 ) {				int	target_et_array;				int	flg = FALSE;				int	j;				for( j = 0; j < 5; j ++ ) {					/* 坞中化月及反云井仄中 */					if( !ENEMY_CHECKINDEX( NPCUtil_enemytbl[j])) break;					target_et_array = ENEMYTEMP_getEnemyTempArray(													NPCUtil_enemytbl[j]);					/* 云井仄中 */					if( !ENEMYTEMP_CHECKINDEX( target_et_array)) break;					if( ENEMYTEMP_getInt( target_et_array, E_T_SIZE)						== E_T_SIZE_NORMAL )					{						flg = TRUE;						break;					}				}				if( !flg) continue;				NPCUtil_enemytbl[insert] = NPCUtil_enemytbl[j];				NPCUtil_enemytbl[j] = curEnemy;			}			else {				NPCUtil_enemytbl[insert] = curEnemy;			}			bigcnt ++;		}		else {			NPCUtil_enemytbl[insert] = curEnemy;		}		insert ++;	}	return NPCUtil_enemytbl;}void  NPC_EventSetFlg(int talker,int shiftbit){	int point=0;	int array;	int shift;	/*--  -1反白仿弘卞楮溢互卅中奶矛件玄   -*/	if(shiftbit==-1) return;	array = shiftbit / 32;	shift = shiftbit % 32;	point = CHAR_getInt( talker, CHAR_ENDEVENT+array);		// Arminius 8.24 prevent wash dp	if (!(point & (1 << shift))) {	  // CoolFish: Family Adv 2001/8/4		AddFMAdv(talker, shiftbit);	}	point = point | (1 << shift);	CHAR_setInt( talker, CHAR_ENDEVENT+array, point);}BOOL NPC_EventCheckFlg(int talker,int shiftbit){	int point=0;	int array;	int shift;	/*--  -1反白仿弘卞楮溢互卅中奶矛件玄   -*/	if(shiftbit==-1) return FALSE;	array = shiftbit / 32;	shift = shiftbit % 32;	point = CHAR_getInt( talker, CHAR_ENDEVENT+array);	if( (point & (1<<shift))  == (1<<shift)){		return TRUE;	}	return FALSE;}void  NPC_NowEventSetFlg(int talker,int shiftbit){	int point=0;	int array;	int shift;	/*--  -1反白仿弘卞楮溢互卅中奶矛件玄   -*/	if(shiftbit==-1) return;	array = shiftbit / 32;	shift = shiftbit % 32;	point = CHAR_getInt( talker, CHAR_NOWEVENT+array);	point = point | (1 << shift);	point = CHAR_setInt( talker, CHAR_NOWEVENT+array,point);}void  NPC_NowEventSetFlgCls(int talker,int shiftbit){	int point=0;	int array;	int shift;	if(shiftbit==-1) return;	array = shiftbit / 32;	shift = shiftbit % 32;	point = CHAR_getInt( talker, CHAR_NOWEVENT+array);	point = point ^ (1<<shift);	CHAR_setInt(talker,CHAR_NOWEVENT+array,point);}BOOL NPC_NowEventCheckFlg(int talker,int shiftbit){	int point=0;	int array;	int shift;	if(shiftbit==-1) return FALSE;	array = shiftbit / 32;	shift = shiftbit % 32;	point = CHAR_getInt( talker, CHAR_NOWEVENT+array);	if( (point & (1<<shift))  == (1<<shift)){		return TRUE;	}	return FALSE;}void  NPC_NowEndEventSetFlgCls(int talker,int shiftbit){	int point=0;	int array;	int shift;	if(shiftbit==-1) return;	array = shiftbit / 32;	shift = shiftbit % 32;	if(NPC_NowEventCheckFlg(talker,shiftbit)==TRUE){		point = CHAR_getInt( talker, CHAR_NOWEVENT+array);		point = point ^ (1<<shift);		CHAR_setInt(talker,CHAR_NOWEVENT+array,point);	}	if(NPC_EventCheckFlg(talker,shiftbit)==TRUE){		point = CHAR_getInt( talker, CHAR_ENDEVENT+array);		point = point ^ (1<<shift);		CHAR_setInt(talker,CHAR_ENDEVENT+array,point);	}}// CoolFish: Family Adv 2001/7/29void AddFMAdv(int talker, int shiftbit){	int fmadv = 0;	char	buf[256];#ifdef _FMVER21	#else	if (CHAR_getInt(talker, CHAR_FMINDEX) < 0)	return;	if (CHAR_getInt(talker, CHAR_FMLEADERFLAG) <= 0 )	return;	if (strcmp(CHAR_getChar(talker, CHAR_FMNAME), "") == 0)	return;#endif	if (shiftbit >= arraysizeof(FMAdvTbl))		return;	else		fmadv = FMAdvTbl[shiftbit];	if (fmadv <= 0)	return;	sprintf(buf, "%d", fmadv);	#ifdef _PERSONAL_FAME	// Arminius 8.30: 家族个人声望	  CHAR_earnFame(talker, fmadv);	#endif#ifdef _FMVER21		if (CHAR_getInt(talker, CHAR_FMLEADERFLAG) > 0	   && CHAR_getInt(talker, CHAR_FMLEADERFLAG) != FMMEMBER_APPLY)	{	   // CoolFish: 2001/10/03	   int fd = getfdFromCharaIndex(talker);		 saacproto_ACFixFMData_send(acfd,			 CHAR_getChar(talker, CHAR_FMNAME),			 CHAR_getInt(talker, CHAR_FMINDEX),			 CHAR_getWorkInt(talker, CHAR_WORKFMINDEXI),			 FM_FIX_FMADV, buf,			 "",			 // CoolFish: 2001/10/03			 CHAR_getWorkInt(talker, CHAR_WORKFMCHARINDEX),			 CONNECT_getFdid(fd));	   	// CHAR_getWorkInt(talker, CHAR_WORKFMCHARINDEX), 0);	}#else	saacproto_ACFixFMData_send(acfd,	   	CHAR_getChar(talker, CHAR_FMNAME),	   	CHAR_getInt(talker, CHAR_FMINDEX),	   	CHAR_getWorkInt(talker, CHAR_WORKFMINDEXI),	   	FM_FIX_FMADV, buf, "",	   	CHAR_getWorkInt(talker, CHAR_WORKFMCHARINDEX), 0);#endif	   	}int addNpcFamilyTax( int meindex, int talkerindex, int income ){	int fmindex, fmindexi, village, npc_village, i;	char fmname[256], token[256], buf2[64];	int clifd = CHAR_getWorkInt( talkerindex, CHAR_WORKFD );	switch( (int)( CHAR_getInt( meindex, CHAR_FLOOR)/100 ) )	{		case 10:			npc_village = 1;			break;		case 20:			npc_village = 2;			break;					case 30:			npc_village = 3;			break;				case 40:			npc_village = 4;			break;#ifdef _FAMILY_MANORNUM_CHANGE		case 50:			npc_village = 5;			break;			case 60:			npc_village = 6;			break;// Syu ADD 修正四大城无税收问题		case 71:			npc_village = 6;			break;		case 72:			npc_village = 7;			break;		case 73:			npc_village = 8;			break;		case 74:			npc_village = 9;			break;		case 70:			npc_village = 7;			break;					case 80:			npc_village = 8;			break;				case 90:			npc_village = 9;			break;					case 100:			npc_village = 10;			break;					default:			return 0;	}			 sprintf( buf2, "%d", income );			 for( i=0 ; i<FMPOINTNUM ; i++ ) {				if( getStringFromIndexWithDelim(fmpointlist.pointlistarray[i], "|", 9, token, sizeof(token)) == FALSE )					continue;				village = atoi(token);				if( village == npc_village ) {					if( getStringFromIndexWithDelim(fmpointlist.pointlistarray[i], "|", 5, token, sizeof(token)) == FALSE)						return 0;					fmindex = atoi(token);// Terry add for 如果庄园没人占领则不计算					if(fmindex < 0) return 0;// end					memset( token, 0, sizeof( token));					if( getStringFromIndexWithDelim(fmpointlist.pointlistarray[i], "|", 6, token, sizeof(token)) == FALSE)						return 0;					memset( fmname, 0, sizeof( fmname));					sprintf( fmname, "%s", token);					if( getStringFromIndexWithDelim(fmpointlist.pointlistarray[i], "|", 8, token, sizeof(token)) == FALSE )						return 0;					fmindexi = atoi(token);					saacproto_ACFixFMData_send( acfd, fmname, fmindex, fmindexi,						FM_FIX_FMGOLD, buf2 , "",						CHAR_getWorkInt(meindex, CHAR_WORKFMCHARINDEX),						CONNECT_getFdid(clifd) );					//					print(" addNpcFamilyTax_fm:%s ", fmname);					return 1;				}			 }			 return 0;}#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -