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

📄 pet_skill.c

📁 石器时代8.0服务端完整源代码。可以直接编译
💻 C
📖 第 1 页 / 共 5 页
字号:
}#endif#ifdef _MAGICPET_SKILLint PETSKILL_SetMagicPet( int charaindex, int toNo, int array, char *data ){	int nums=0;	if( CHAR_CHECKINDEX( charaindex ) == FALSE )		return FALSE;	nums = CHAR_getWorkInt( charaindex, CHAR_MAGICPETMP);	if( nums >= 3 ){		int toindex = CHAR_getWorkInt( charaindex, CHAR_WORKPLAYERINDEX);		CHAR_talkToCli( toindex, -1, "此技能单场限用叁次。", CHAR_COLORYELLOW);		return FALSE;	}	CHAR_setWorkInt( charaindex, CHAR_MAGICPETMP, nums );	CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_S_SETMAGICPET);	CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM2, toNo );	CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK );	CHAR_SETWORKINT_LOW( charaindex, CHAR_WORKBATTLECOM3, array);//记录属性	return TRUE;}#endif#ifdef _PETSKILL_FIXITEMint PETSKILL_Fixitem( int index, int toNo, int array, char *data){	int charaindex, petid;	int fixindex=-1, fixno=-1;	int i, j, itemno;#define MAXFIXITEM 2	int		itemindexs[MAXFIXITEM]={-1,-1};	int		itemnos[MAXFIXITEM]={-1,-1};	if( !CHAR_CHECKINDEX( index) ) return FALSE;	if( CHAR_getInt( index, CHAR_WHICHTYPE) != CHAR_TYPEPET ) return FALSE;	charaindex = CHAR_getWorkInt( index, CHAR_WORKPLAYERINDEX);	if( !CHAR_CHECKINDEX( charaindex) ) return FALSE;	if( CHAR_getWorkInt( charaindex, CHAR_WORKBATTLEMODE ) != BATTLE_CHARMODE_NONE )		return FALSE;	petid = CHAR_getInt( charaindex, CHAR_PETID);	for( i = 0; i < 15; i ++ ) {		char buf[256];		int itemtype=-1;		int itemindex;		if( getStringFromIndexWithDelim( data , "|", i+1, buf,  sizeof( buf ) ) == FALSE ) break;		itemno = atoi( buf);		if( !CHAR_CHECKITEMINDEX( charaindex, itemno) ) continue;		itemindex = CHAR_getItemIndex( charaindex, itemno);		if( !ITEM_CHECKINDEX( itemindex) ) continue;		if( i >= MAXFIXITEM )	{			CHAR_talkToCli( charaindex, -1, "修复每次只能选择两个物品。", CHAR_COLORYELLOW);			return FALSE;		}		for( j=0; j< MAXFIXITEM; j++ ) {			if( itemindexs[j] == itemindex )	{				print("修复物品index相同 ERROR !!\n");				return FALSE;			}		}		itemtype = ITEM_getInt( itemindex, ITEM_TYPE);		if( itemtype == ITEM_DISH )	{			CHAR_talkToCli( charaindex, -1, "料理不能做修复。", CHAR_COLORYELLOW);			return FALSE;		}		if( (itemtype >= ITEM_FIST && itemtype <= ITEM_AMULET) || 			itemtype == ITEM_BOOMERANG || itemtype == ITEM_BOUNDTHROW || itemtype == ITEM_BREAKTHROW){			if( !ITEM_CHECKINDEX( fixindex))	{				fixindex = itemindex;				fixno = itemno;			}else	{				CHAR_talkToCli( charaindex, -1, "修复每次只能选择一个武器或防具。", CHAR_COLORYELLOW);				return FALSE;			}		}		itemindexs[i] = itemindex;		itemnos[i] = itemno;	}	if( !ITEM_CHECKINDEX( fixindex) )	{		CHAR_talkToCli( charaindex, -1, "修复必须选择一个武器或防具。", CHAR_COLORYELLOW);		return FALSE;	}	if( PETSKILL_ITEM_FixItem( charaindex, fixindex, itemindexs ) == FALSE ){		return FALSE;	}else	{		for( i=0; i< MAXFIXITEM; i++) {			if( !ITEM_CHECKINDEX( itemindexs[i]) )break;			if( fixindex == itemindexs[i] ) continue;			CHAR_setItemIndex( charaindex, itemnos[i] ,-1);			CHAR_sendItemDataOne( charaindex, itemnos[i] );			ITEM_endExistItemsOne( itemindexs[i]);		}	}   	CHAR_sendItemDataOne( charaindex, fixno );	CHAR_complianceParameter( charaindex );	CHAR_send_P_StatusString( charaindex, CHAR_P_STRING_ATK | CHAR_P_STRING_DEF 		| CHAR_P_STRING_QUICK | CHAR_P_STRING_CHARM );	CHAR_talkToCli( charaindex, -1, "修复完成。", CHAR_COLORYELLOW);	return TRUE;}#endif#ifdef _PETSKILL_TIMIDint PETSKILL_BattleTimid( int charaindex, int toNo, int array, char *data ){	if( !CHAR_CHECKINDEX( charaindex) ) return FALSE;	if( CHAR_getInt( charaindex, CHAR_WHICHTYPE) == CHAR_TYPEPLAYER ) return FALSE;	CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_S_TIMID );	CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM2, toNo );	CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK );	CHAR_setWorkInt( charaindex, CHAR_WORKATTACKPOWER, ( CHAR_getWorkInt( charaindex, CHAR_WORKFIXSTR)*0.7) );	CHAR_setWorkInt( charaindex, CHAR_WORKDEFENCEPOWER, ( CHAR_getWorkInt( charaindex, CHAR_WORKFIXTOUGH)*0.4) );	CHAR_setWorkInt( charaindex, CHAR_WORKQUICK, ( CHAR_getWorkInt( charaindex, CHAR_WORKFIXDEX)*0.8) );	CHAR_SETWORKINT_LOW( charaindex, CHAR_WORKBATTLECOM3, array);//记录属性	return TRUE;}#endif#ifdef _PETSKILL_2TIMIDint PETSKILL_2BattleTimid( int charaindex, int toNo, int array, char *data ){	char *pszOption=NULL;	char *pszP;	float fPer=0;	if( !CHAR_CHECKINDEX( charaindex) ) return FALSE;	CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_S_2TIMID );	CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM2, toNo );	CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK );	pszOption = PETSKILL_getChar( array, PETSKILL_OPTION );	if( pszOption == NULL ) return FALSE;	if( (pszP = strstr( pszOption, "-攻%" ) ) != NULL ){		sscanf( pszP+4, "%f", &fPer );		fPer=(fPer/100);		CHAR_setWorkInt( charaindex, CHAR_WORKATTACKPOWER, (CHAR_getWorkInt( charaindex, CHAR_WORKFIXSTR)*fPer) );	}	if( (pszP = strstr( pszOption, "+攻%" ) ) != NULL ){		sscanf( pszP+4, "%f", &fPer );		fPer=(fPer/100);		CHAR_setWorkInt( charaindex, CHAR_WORKATTACKPOWER, CHAR_getWorkInt( charaindex, CHAR_WORKFIXSTR)+(CHAR_getWorkInt( charaindex, CHAR_WORKFIXSTR)*fPer) );	}	if( (pszP = strstr( pszOption, "-防%" ) ) != NULL ){		sscanf( pszP+4, "%f", &fPer );		fPer=(fPer/100);		CHAR_setWorkInt( charaindex, CHAR_WORKDEFENCEPOWER, ( CHAR_getWorkInt( charaindex, CHAR_WORKFIXTOUGH)*fPer) );	}	if( (pszP = strstr( pszOption, "+防%" ) ) != NULL ){		sscanf( pszP+4, "%f", &fPer );		fPer=(fPer/100);		CHAR_setWorkInt( charaindex, CHAR_WORKDEFENCEPOWER, CHAR_getWorkInt( charaindex, CHAR_WORKFIXTOUGH)+(CHAR_getWorkInt( charaindex, CHAR_WORKFIXTOUGH)*fPer) );	}	if( (pszP = strstr( pszOption, "-敏%" ) ) != NULL ){		sscanf( pszP+4, "%f", &fPer );		fPer=(fPer/100);		CHAR_setWorkInt( charaindex, CHAR_WORKQUICK, ( CHAR_getWorkInt( charaindex, CHAR_WORKFIXDEX)*fPer) );	}	if( (pszP = strstr( pszOption, "+敏%" ) ) != NULL ){		sscanf( pszP+4, "%f", &fPer );		fPer=(fPer/100);		CHAR_setWorkInt( charaindex, CHAR_WORKQUICK, CHAR_getWorkInt( charaindex, CHAR_WORKFIXDEX)+(CHAR_getWorkInt( charaindex, CHAR_WORKFIXDEX)*fPer) );	}	CHAR_SETWORKINT_LOW( charaindex, CHAR_WORKBATTLECOM3, array);//记录属性	return TRUE;}#endif#ifdef _PETSKILL_ANTINTERint PETSKILL_AntInter( int charaindex, int toNo, int array, char* data){	if( !CHAR_CHECKINDEX( charaindex) ) return FALSE;		CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_S_ANTINTER);	CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM2, toNo );	CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK );	CHAR_SETWORKINT_LOW( charaindex, CHAR_WORKBATTLECOM3, array);//记录属性	return TRUE;}#endif#ifdef _PETSKILL_PROPERTYint PETSKILL_BattleProperty( int charaindex, int toNo, int array, char *data ){	if( !CHAR_CHECKINDEX( charaindex) ) return FALSE;	if( CHAR_getInt( charaindex, CHAR_WHICHTYPE) == CHAR_TYPEPLAYER ) return FALSE;	CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_S_PROPERTYSKILL );	CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM2, toNo );	CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK );//	CHAR_setWorkInt( charaindex, CHAR_WORKATTACKPOWER, ( CHAR_getWorkInt( charaindex, CHAR_WORKFIXSTR)*0.7) );//	CHAR_setWorkInt( charaindex, CHAR_WORKDEFENCEPOWER, ( CHAR_getWorkInt( charaindex, CHAR_WORKFIXTOUGH)*0.5) );//	CHAR_setWorkInt( charaindex, CHAR_WORKQUICK, ( CHAR_getWorkInt( charaindex, CHAR_WORKFIXDEX)*0.95) );	CHAR_SETWORKINT_LOW( charaindex, CHAR_WORKBATTLECOM3, array);//记录属性	return TRUE;}#endif#ifdef _PETSKILL_TEARint PETSKILL_BattleTearDamage( int charaindex, int toNo, int array, char *data ){	if( !CHAR_CHECKINDEX( charaindex) ) return FALSE;	if( CHAR_getInt( charaindex, CHAR_WHICHTYPE) == CHAR_TYPEPLAYER ) return FALSE;	CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_S_PETSKILLTEAR );	CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM2, toNo );	CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK );	CHAR_setWorkInt( charaindex, CHAR_WORKATTACKPOWER, ( CHAR_getWorkInt( charaindex, CHAR_WORKFIXSTR)*0.9) );	CHAR_setWorkInt( charaindex, CHAR_WORKDEFENCEPOWER, ( CHAR_getWorkInt( charaindex, CHAR_WORKFIXTOUGH)*0.8) );	CHAR_SETWORKINT_LOW( charaindex, CHAR_WORKBATTLECOM3, array);//记录属性	return TRUE;}#endif#ifdef _BATTLE_LIGHTTAKEint PETSKILL_Lighttakeed( int charaindex, int toNo, int array, char *data ){	if( !CHAR_CHECKINDEX( charaindex) ) return FALSE;	if( CHAR_getInt( charaindex, CHAR_WHICHTYPE) == CHAR_TYPEPLAYER ) return FALSE;	CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_S_LIGHTTAKE );	CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM2, toNo );	CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK );	CHAR_setWorkInt( charaindex, CHAR_WORKATTACKPOWER, (CHAR_getWorkInt( charaindex, CHAR_WORKFIXSTR)*0.7) );	CHAR_setWorkInt( charaindex, CHAR_WORKDEFENCEPOWER, (CHAR_getWorkInt( charaindex, CHAR_WORKFIXTOUGH)*0.5) );//	CHAR_setWorkInt( charaindex, CHAR_WORKQUICK, (CHAR_getWorkInt( charaindex, CHAR_WORKFIXDEX)*0.95) );	CHAR_SETWORKINT_LOW( charaindex, CHAR_WORKBATTLECOM3, array);//记录属性	return TRUE;}#endif#ifdef _BATTLE_ATTCRAZEDint PETSKILL_AttackCrazed( int charaindex, int toNo, int array, char *data ){	char *pszOption=NULL;	if( !CHAR_CHECKINDEX( charaindex) ) return FALSE;	if( CHAR_getInt( charaindex, CHAR_WHICHTYPE) == CHAR_TYPEPLAYER ) return FALSE;	CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_S_ATTCRAZED );	CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM2, toNo );	CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK );	CHAR_setWorkInt( charaindex, CHAR_WORKATTACKPOWER, (CHAR_getWorkInt( charaindex, CHAR_WORKFIXSTR)*0.8) );	CHAR_setWorkInt( charaindex, CHAR_WORKDEFENCEPOWER, (CHAR_getWorkInt( charaindex, CHAR_WORKFIXTOUGH)*0.7) );	pszOption = PETSKILL_getChar( array, PETSKILL_OPTION );	if( pszOption == NULL ) return FALSE;	CHAR_SETWORKINT_LOW( charaindex, CHAR_WORKBATTLECOM3, array);//记录属性	CHAR_SETWORKINT_HIGH( charaindex, CHAR_WORKBATTLECOM3, atoi(pszOption));	return TRUE;}#endif#ifdef _SHOOTCHESTNUT	// Syu ADD 宠技:丢栗子int PETSKILL_AttackShoot( int charaindex, int toNo, int array, char *data ){	//int n = RAND ( 3 , 5 ) ; 	int n ; 	int loyal = CHAR_getWorkInt( charaindex, CHAR_WORKFIXAI );	char bb1[16] , bb2[16] ; 	char *buf = NULL ; 	if( !CHAR_CHECKINDEX( charaindex) ) return FALSE;	if( CHAR_getInt( charaindex, CHAR_WHICHTYPE) == CHAR_TYPEPLAYER ) return FALSE;	CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_S_ATTSHOOT );	CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM2, toNo );	CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK );	buf = PETSKILL_getChar( array , PETSKILL_OPTION ) ; 	if ( buf == NULL ) return FALSE;	getStringFromIndexWithDelim( buf , "|", 1 , bb1 , sizeof( bb1 ) );	getStringFromIndexWithDelim( buf , "|", 2 , bb2 , sizeof( bb2 ) );	n = RAND ( atoi(bb1) , atoi(bb2) ) ; 	if ( loyal >= 100 ) {		if ( RAND ( 1 , 300 ) > 299 )			n = 8 ;		else if ( (CHAR_getInt( charaindex , CHAR_HP )) < 20 && ( RAND ( 1 , 50 ) > 49 ) )			n = 8 ; 	}/*	if ( n != 8 )		CHAR_setWorkInt( charaindex, CHAR_WORKATTACKPOWER, (CHAR_getWorkInt( charaindex, CHAR_WORKFIXSTR) * 1.2 / n ) );	else 		CHAR_setWorkInt( charaindex, CHAR_WORKATTACKPOWER, (CHAR_getWorkInt( charaindex, CHAR_WORKFIXSTR) * 1.2 / 4 ) );	CHAR_setWorkInt( charaindex, CHAR_WORKDEFENCEPOWER, (CHAR_getWorkInt( charaindex, CHAR_WORKFIXTOUGH) * 1) );*/	CHAR_SETWORKINT_LOW( charaindex, CHAR_WORKBATTLECOM3, array);//记录属性	CHAR_SETWORKINT_HIGH( charaindex, CHAR_WORKBATTLECOM3, n);	return TRUE;}#endif#ifdef _PET_SKILL_SARS				// WON ADD 毒煞蔓延int PETSKILL_Sars( int charaindex, int toNo, int array, char *data ){	char *pszOption, *pszP;	int status = -1, i = 0, turn = 3;	char szTurn[] = "turn";	CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_S_SARS );	CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM2, toNo );	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, status );	CHAR_SETWORKINT_HIGH( charaindex, CHAR_WORKBATTLECOM3, turn );	return TRUE;}#endif#ifdef _SONIC_ATTACK				// WON ADD 音波攻击int PETSKILL_Sonic( int charaindex, int toNo, int array, char *data ){	CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_S_SONIC );	CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM2, toNo );	CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK );	CHAR_SETWORKINT_LOW( charaindex, CHAR_WORKBATTLECOM3, array);	//记录属性	return TRUE;}#endif#ifdef _PETSKILL_REGRETint PETSKILL_Regret( int charaindex, int toNo, int array, char *data ){	char *pszOption, *pszP;	int strdef;	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_REGRET );	CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM2, toNo );	CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK );	CHAR_SETWORKINT_LOW( charaindex, CHAR_WORKBATTLECOM3, array);	//记录属性	return TRUE;}#endif#ifdef _PETSKILL_GYRATEint PETSKILL_Gyrate( int charaindex, int toNo, int array, char *data ){	char *pszOption, *pszP;	float fPer = 0.01;	int strdef=0;	CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_S_GYRATE );	CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM2, toNo ); //攻击对象  23,24,25,26 为单排	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));	}	CHAR_SETWORKINT_LOW( charaindex, CHAR_WORKBATTLECOM3, array);	//记录属性	return TRUE;}#endif#ifdef _PETSKILL_ACUPUNCTUREint PETSKILL_Acupuncture( int charaindex, int toNo, int array, char *data ){	CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_S_ACUPUNCTURE );	CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM2, toNo );	CHAR_se

⌨️ 快捷键说明

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