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

📄 pet_skill.c

📁 石器时代8.0服务端完整源代码。可以直接编译
💻 C
📖 第 1 页 / 共 5 页
字号:
    }    fclose(f);    PETSKILL_petskillnum = petskill_readlen;    print( "有效宠物技能数是 %d...", PETSKILL_petskillnum );	/* hash 及瓒   */	for( i = 0; i < arraysizeof( PETSKILL_functbl); i ++ ) {		PETSKILL_functbl[i].hash = hashpjw( PETSKILL_functbl[i].functionname);	}/*#ifdef _CFREE_petskill    for( i=0; i <PETSKILL_petskillnum ; i++ ){		for( j = PETSKILL_NAME; j < PETSKILL_DATACHARNUM; j ++ ){	      print( "%s ", PETSKILL_getChar( i, j));		}		print( "\n");		for( j = PETSKILL_ID; j < PETSKILL_DATAINTNUM; j ++ ){			print( "%d ", PETSKILL_getInt( i, j));		}		print( "\n-------------------------------------------------\n");	}#endif*/    return TRUE;}/*------------------------------------------------------------------------ * Petskill及涩烂白央奶伙  心  仄 *-----------------------------------------------------------------------*/BOOL PETSKILL_reinitPetskill( void ){	freeMemory( PETSKILL_petskill);	return( PETSKILL_initPetskill( getPetskillfile()));}/*------------------------------------------------------------------------ * PETSKILL_ID井日骄侬毛襞月楮醒 * 忒曰袄 * 岳  : 骄侬 * 撩  : -1 *-----------------------------------------------------------------------*/int PETSKILL_getPetskillArray( int petskillid){#ifdef _PETSKILL_OPTIMUM // 查询宠技ID改为阵列式	if( petskillid >= 0 && petskillid < PETSKILL_petskillnum )		return PETSKILL_petskill[petskillid].data[PETSKILL_ID];#else	int		i;	for( i = 0; i < PETSKILL_petskillnum; i ++ ) {		if( PETSKILL_petskill[i].data[PETSKILL_ID] == petskillid ) {			return i;		}	}#endif	return -1;}/*------------------------------------------------------------ * 矢永玄  及楮醒  井日禾奶件正□毛忒允 * 娄醒 *  name        char*       热诸及  蟆 * 忒曰袄 *  楮醒尺及禾奶件正[卅中桦宁卞反NULL ------------------------------------------------------------*/PETSKILL_CALLFUNC PETSKILL_getPetskillFuncPointer(char* name ){    int i;    int hash = hashpjw( name );    for( i = 0 ; i< arraysizeof( PETSKILL_functbl) ; i++ ) {        if( PETSKILL_functbl[i].hash == hash ) {			if( strcmp( PETSKILL_functbl[i].functionname, name ) == 0 )  {				return PETSKILL_functbl[i].func;			}		}	}    return NULL;}int PETSKILL_Use(	int charaindex,	int havepetskill,	int toindex,	char *data	//BOOL isCLI	// Robin 2001/02/26 if owner is player){	int		array, petskillid;	int		ret,i;	PETSKILL_CALLFUNC func;    char combined[32], *pszOption;	petskillid = CHAR_getPetSkill( charaindex, havepetskill);#ifdef _FIXWOLF	 // Syu ADD 修正狼人变身Bug    if( petskillid == 600 ){		if ( CHAR_getInt ( charaindex , CHAR_BASEIMAGENUMBER) == 101428 )        petskillid = -1;	}#endif	array = PETSKILL_getPetskillArray( petskillid);	if( array == -1 ) return FALSE;	if(PETSKILL_getInt(array, PETSKILL_ILLEGAL)){				if( (CHAR_getInt(charaindex, CHAR_WHICHTYPE)==CHAR_TYPEPET) ){			print(" CHAR_TYPEPET:%d ", charaindex);			return FALSE;		}	}#ifdef _PETSKILL_CHECKTYPE#define _SKILLTYPE_NONE 0x01#define _SKILLTYPE_BATTLE 0x02	if( (CHAR_getInt(charaindex, CHAR_WHICHTYPE)==CHAR_TYPEPET) &&		(PETSKILL_getInt( array, PETSKILL_USETYPE) & _SKILLTYPE_BATTLE) > 0){		int masterindex = CHAR_getWorkInt( charaindex, CHAR_WORKPLAYERINDEX);		if( !CHAR_CHECKINDEX( masterindex) ) return FALSE;		if( CHAR_getWorkInt( masterindex, CHAR_WORKBATTLEMODE) == BATTLE_CHARMODE_NONE ){			return FALSE;		}	}#endif	func = PETSKILL_getPetskillFuncPointer( PETSKILL_getChar( array, PETSKILL_FUNCNAME) );	if( func ) {		ret = func( charaindex,  toindex,  array, data );	}else {		ret = FALSE;	}	return ret;}int _PETSKILL_GetArray( char *file, int line, int charaindex, int havepetskill ){	int		petskillid,array;	petskillid = CHAR_getPetSkill( charaindex, havepetskill);	if( petskillid == -1 ) {		return -1;	}	array = PETSKILL_getPetskillArray( petskillid);		return array;}//----------------------------------------------------------------------int PETSKILL_ContinuationAttack(	int charaindex,	int toindex,	int array,	char *data){	char *pszOption;	int N = 1;	CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_S_RENZOKU );	CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM2, toindex );	CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK );	pszOption = PETSKILL_getChar( array, PETSKILL_OPTION );	if( sscanf( pszOption, "%d", &N ) == 1 ){		if( N < 1 || N > 10 )N = 1;	}else{		N = 1;	}	CHAR_SETWORKINT_LOW( charaindex, CHAR_WORKBATTLECOM3, N );	return TRUE;}int PETSKILL_ChargeAttack(	int charaindex,	int toindex,	int array,	char *data){	char *pszOption, *pszP;	int N = 1, Per = 0;	CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_S_CHARGE );	CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM2, toindex );	CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK );	pszOption = PETSKILL_getChar( array, PETSKILL_OPTION );	if( sscanf( pszOption, "%d", &N ) == 1 ){		if( N < 1 || N > 10 )N = 1;	}else{		N = 1;	}	if( (pszP = strstr( pszOption, "攻%" ) ) != NULL ){		sscanf( pszP+3, "%d", &Per );	}	CHAR_SETWORKINT_LOW( charaindex, CHAR_WORKBATTLECOM3, N );	CHAR_SETWORKINT_HIGH( charaindex, CHAR_WORKBATTLECOM3, Per );	return TRUE;}int PETSKILL_Guardian(	int charaindex,	int toNo,	int array,	char *data){	char *pszOption, *pszP;	int		battleindex, side, pos, ownerpos,		strdef, flg;	float fPer = 0.01;	pszOption = PETSKILL_getChar( array, PETSKILL_OPTION );	if( (pszP = strstr( pszOption, "攻%" ) ) != NULL ){		sscanf( pszP+3, "%f", &fPer );		fPer=(fPer/100);		strdef=CHAR_getWorkInt(charaindex,CHAR_WORKFIXSTR);		strdef=(int)(strdef * fPer);		CHAR_setWorkInt(charaindex,CHAR_WORKATTACKPOWER,(CHAR_getWorkInt(charaindex,CHAR_WORKFIXSTR)+strdef));	}	if( (pszP = strstr( pszOption, "防%" ) ) != NULL ){		sscanf( pszP+3, "%f", &fPer );		fPer=(fPer/100);		strdef=CHAR_getWorkInt(charaindex,CHAR_WORKFIXTOUGH);		strdef=(int)(strdef * fPer);		CHAR_setWorkInt(charaindex,CHAR_WORKDEFENCEPOWER,(CHAR_getWorkInt(charaindex,CHAR_WORKFIXTOUGH)+strdef));	}	CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_S_GUARDIAN_ATTACK );	CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM2, toNo );	CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK );	flg = CHAR_getWorkInt( charaindex, CHAR_WORKBATTLEFLG );	flg |= CHAR_BATTLEFLG_GUARDIAN;	CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEFLG, flg );	battleindex = CHAR_getWorkInt( charaindex, CHAR_WORKBATTLEINDEX );	pos = BATTLE_Index2No( battleindex, charaindex );	if( (pszP = strstr( pszOption, "COM:" ) ) != NULL	&&  strstr( pszP+4, "防御" ) != NULL	){		CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_GUARD );		side = ( toNo >= SIDE_OFFSET )?( 1 ):( 0 );		ownerpos = toNo - side * SIDE_OFFSET;		if( 0 <= ownerpos && ownerpos < SIDE_OFFSET ){			BattleArray[battleindex].Side[side].Entry[ownerpos].guardian = pos;		}	}else{		side = CHAR_getWorkInt( charaindex, CHAR_WORKBATTLESIDE );		ownerpos = pos - 5;		ownerpos -= side * SIDE_OFFSET;		if( ownerpos < 0 || ownerpos > 19 ){		}else{			BattleArray[battleindex].Side[side].Entry[ownerpos].guardian = pos;		}	}	return TRUE;}int PETSKILL_Mighty(	int charaindex,	int toindex,	int array,	char *data){	char *pszOption, *pszP;	int iBai = 0, iDuck = 0;	float fBai = 2.00;	CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_S_MIGHTY );	CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM2, toindex );	CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK );	pszOption = PETSKILL_getChar( array, PETSKILL_OPTION );	if( (pszP = strstr( pszOption, "倍" ) ) != NULL ){		sscanf( pszP+2, "%f", &fBai );		iBai = (int)(fBai * 100);	}	CHAR_SETWORKINT_LOW( charaindex, CHAR_WORKBATTLECOM3, iBai );	pszOption = PETSKILL_getChar( array, PETSKILL_OPTION );	if( ( pszP = strstr( pszOption, "避" ) ) != NULL){		sscanf(	 pszP+2, "%d", &iDuck );	}	CHAR_SETWORKINT_HIGH( charaindex, CHAR_WORKBATTLECOM3, iDuck );	return TRUE;}int PETSKILL_PowerBalance(	int charaindex,	int toindex,	int array,	char *data){	char *pszOption, *pszP;	float fPer = 0.01;	int strdef;	CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_S_POWERBALANCE);	CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM2, toindex );	CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK );	pszOption = PETSKILL_getChar( array, PETSKILL_OPTION );	if( pszOption == NULL )	{		print("\n pszOption == NULL ");		return FALSE;	}	if( (pszP = strstr( pszOption, "攻%" ) ) != NULL ){		sscanf( pszP+3, "%f", &fPer );		fPer=(fPer/100);		strdef=CHAR_getWorkInt(charaindex,CHAR_WORKFIXSTR);		strdef=(int)(strdef * fPer);		CHAR_setWorkInt(charaindex,CHAR_WORKATTACKPOWER,(CHAR_getWorkInt(charaindex,CHAR_WORKFIXSTR)+strdef));	}	if( (pszP = strstr( pszOption, "防%" ) ) != NULL ){		sscanf( pszP+3, "%f", &fPer );		fPer=(fPer/100);		strdef=CHAR_getWorkInt(charaindex,CHAR_WORKFIXTOUGH);		strdef=(int)(strdef * fPer);		CHAR_setWorkInt(charaindex,CHAR_WORKDEFENCEPOWER,(CHAR_getWorkInt(charaindex,CHAR_WORKFIXTOUGH)+strdef));	}	return TRUE;}//----------------------------------------------------------------------int PETSKILL_StatusChange(	int charaindex,	int toindex,	int array,	char *data){	char *pszOption, *pszP;	float fPer = 0.01;	int strdef;	int status = -1, i = 0, turn = 3;	char szTurn[] = "turn";	CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_S_STATUSCHANGE );	CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM2, toindex );	CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK );	pszOption = PETSKILL_getChar( array, PETSKILL_OPTION );	pszP = pszOption;	for( ;status == -1 && pszP[0] != 0; pszP++ ){		for( i = 1; i < BATTLE_ST_END; i ++ ){			if( strncmp( pszP, aszStatus[i], 2 ) == 0 ){				status = i;				pszP +=2;				break;			}		}	}	if( ( pszP = strstr( pszP, szTurn ) ) != NULL){		pszP += sizeof( szTurn );		sscanf( pszP, "%d", &turn );	}	CHAR_SETWORKINT_LOW( charaindex, CHAR_WORKBATTLECOM3, i );	CHAR_SETWORKINT_HIGH( charaindex, CHAR_WORKBATTLECOM3, turn );	if( (pszP = strstr( pszOption, "攻%" ) ) != NULL ){		sscanf( pszP+3, "%f", &fPer );		fPer=(fPer/100);		strdef=CHAR_getWorkInt(charaindex,CHAR_WORKFIXSTR);		strdef=(int)(strdef * fPer);		CHAR_setWorkInt(charaindex,CHAR_WORKATTACKPOWER,			(CHAR_getWorkInt(charaindex,CHAR_WORKFIXSTR)+strdef) );	}	if( (pszP = strstr( pszOption, "防%" ) ) != NULL ){		sscanf( pszP+3, "%f", &fPer );		fPer=(fPer/100);		strdef=CHAR_getWorkInt(charaindex,CHAR_WORKFIXTOUGH);		strdef=(int)(strdef * fPer);		CHAR_setWorkInt(charaindex,CHAR_WORKDEFENCEPOWER,			(CHAR_getWorkInt(charaindex,CHAR_WORKFIXTOUGH)+strdef));	}	return TRUE;}#ifdef _VARY_WOLFint PETSKILL_Vary( int cindex, int tindex, int id, char* data){	char  *pszOption, *pszP;	float fPer = 0.01;	int a_dep;	int d_dep;	int i;	int petid[4] = {981,982,983,984};	for( i=0; i<4; i++)	{		if( CHAR_getInt( cindex, CHAR_PETID) == petid[i] ) break;	}	if( i>= 4 ) return FALSE;	CHAR_setWorkInt( cindex, CHAR_WORKBATTLECOM1, BATTLE_COM_S_VARY);	CHAR_setWorkInt( cindex, CHAR_WORKBATTLECOM2, tindex );	CHAR_setWorkInt( cindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK );	pszOption = PETSKILL_getChar( id, PETSKILL_OPTION );	if(pszOption==NULL){		print("\n pszOption==NULL");		return FALSE;	}	if( (pszP = strstr( pszOption, "攻%" ) ) != NULL ){		sscanf( pszP+3, "%f", &fPer );		CHAR_setWorkInt( cindex, CHAR_SKILLSTRPOWER, fPer);		fPer = fPer / 100;		a_dep = CHAR_getWorkInt( cindex, CHAR_WORKFIXSTR);		a_dep = (int)(a_dep * fPer);		

⌨️ 快捷键说明

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