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

📄 pet_skill.c

📁 石器时代8.0服务端完整源代码。可以直接编译
💻 C
📖 第 1 页 / 共 5 页
字号:
{	int ret, ownerindex;		// Robin 0521 debug	ownerindex = CHAR_getWorkInt( charaindex, CHAR_WORKPLAYERINDEX);		if( CHAR_getWorkInt( ownerindex, CHAR_WORKBATTLEMODE ) != BATTLE_CHARMODE_NONE ){		print(" Merge_Alchemist_ErrB:fd=%d ", ownerindex);		return FALSE;	}	ret = ITEM_mergeItem_merge( CHAR_getWorkInt( charaindex, CHAR_WORKPLAYERINDEX),							CHAR_getInt( charaindex, CHAR_PETID), data, charaindex, 1);	return ret;}#endifint PETSKILL_NoGuard(	int charaindex,	int toNo,	int array,	char *data){	char *pszOption, *pszP;	int Duck = 0, Counter = 0, Critical = 0;	CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_S_NOGUARD );	CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM2, toNo );	CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK );	pszOption = PETSKILL_getChar( array, PETSKILL_OPTION );	if( (pszP = strstr( pszOption, "避%" ) ) != NULL ){		sscanf( pszP+3, "%d", &Duck );		CHAR_SETWORKINT_HIGH( charaindex, CHAR_WORKBATTLECOM3, Duck );	}	if( (pszP = strstr( pszOption, "击%" ) ) != NULL ){		sscanf( pszP+3, "%d", &Counter );	}	if( (pszP = strstr( pszOption, "心%" ) ) != NULL ){		sscanf( pszP+3, "%d", &Critical );	}	CHAR_SETWORKINT_LOW( charaindex, CHAR_WORKBATTLECOM3,		(Counter << 8) + Critical );	return TRUE;}#ifdef __ATTACK_MAGICint PETSKILL_AttackMagic(	int charaindex,	int toindex,	int array,	char *data){	char *pszP;	char szMagic[] = "magic";	char szItem[] = "item";	int magic = 313,item = 19659;	// magic id预设为火魔法等级一,item index预设为19659	// 取得宠物技能命令	pszP = PETSKILL_getChar( array, PETSKILL_OPTION );	// 取得施放的魔法的magic id	if((pszP = strstr(pszP,szMagic)) != NULL)	{		pszP += sizeof(szMagic);		sscanf(pszP,"%d",&magic);	}	// 取得有此魔法属性的item index	if((pszP = strstr(pszP,szItem)) != NULL)	{		pszP += sizeof(szItem);		sscanf(pszP,"%d",&item);	}	// 设定宠物技能为魔法	CHAR_setWorkInt(charaindex,CHAR_WORKBATTLECOM1,BATTLE_COM_S_ATTACK_MAGIC );	// 攻击目标设定	CHAR_setWorkInt(charaindex,CHAR_WORKBATTLECOM2,toindex);	// 设定所使用的是那一种魔法	CHAR_SETWORKINT_LOW(charaindex,CHAR_WORKBATTLECOM3,magic);	// 设定所使用的魔法的道具	CHAR_SETWORKINT_HIGH(charaindex,CHAR_WORKBATTLECOM3,item);	// 命令下达完毕	CHAR_setWorkInt(charaindex,CHAR_WORKBATTLEMODE,BATTLE_CHARMODE_C_OK );	return TRUE;}#endif#ifdef _PSKILL_FALLGROUND	//落马术int PETSKILL_FallGround( int charaindex, int toNo, int array, char *data ){	char *pszOption, *pszP;	float fPer = 0.01;	int strdef;	CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_S_FALLRIDE );	CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM2, toNo );	CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK );	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));	}	return TRUE;}	//BATTLE_COM_S_DAMAGETOHP#endif#ifdef _PETSKILL_EXPLODEint PETSKILL_Explode( int charaindex, int toNo, int array, char *data ){	char *pszOption, *pszP;	float fPer = 0.01;	int strdef;	CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM2, toNo );	CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK );	if( BattleArray[CHAR_getWorkInt( charaindex, CHAR_WORKBATTLEINDEX )].type != BATTLE_TYPE_P_vs_P ){		CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_ATTACK );		return TRUE;	}	else		CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_S_EXPLODE );		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_WORKFIXDEX,(CHAR_getWorkInt(charaindex,CHAR_WORKFIXDEX)+strdef));	}	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));	}	return TRUE;}#endif#ifdef _PRO_BATTLEENEMYSKILLint ENEMYSKILL_ReLife( int enemyindex, int toNo, int array, char *data ){	CHAR_setWorkInt( enemyindex, CHAR_WORKBATTLECOM1, BATTLE_COM_S_ENEMYRELIFE );	CHAR_setWorkInt( enemyindex, CHAR_WORKBATTLECOM2, toNo );	CHAR_setWorkInt( enemyindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK );	return TRUE;}int ENEMYSKILL_ReHP( int enemyindex, int toNo, int array, char *data ){	CHAR_setWorkInt( enemyindex, CHAR_WORKBATTLECOM1, BATTLE_COM_S_ENEMYREHP );	CHAR_setWorkInt( enemyindex, CHAR_WORKBATTLECOM2, toNo );	CHAR_setWorkInt( enemyindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK );	return TRUE;}int ENEMYSKILL_EnemyHelp( int enemyindex, int toNo, int array, char *data ){	CHAR_setWorkInt( enemyindex, CHAR_WORKBATTLECOM1, BATTLE_COM_S_ENEMYHELP );	CHAR_setWorkInt( enemyindex, CHAR_WORKBATTLECOM2, toNo );	CHAR_setWorkInt( enemyindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK );	return TRUE;}#endif#ifdef _SKILL_DAMAGETOHP	//嗜血技 { "PETSKILL_DamageToHp",	PETSKILL_DamageToHp, 0},int PETSKILL_DamageToHp( int charaindex, int toNo, int array, char *data ){	char *pszOption;	char buf1[256];	int strdef;	float def=0.00;	CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_S_DAMAGETOHP );	CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM2, toNo );	CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK );	CHAR_SETWORKINT_LOW(charaindex,CHAR_WORKBATTLECOM3, array);	//记录技能	pszOption = PETSKILL_getChar( array, PETSKILL_OPTION );	if( pszOption == NULL ) return FALSE;	if( getStringFromIndexWithDelim( pszOption, "|", 1, buf1, sizeof( buf1)) == FALSE )		return FALSE;	strdef = CHAR_getWorkInt(charaindex,CHAR_WORKFIXSTR);	def = (atoi( buf1)/100);	strdef = strdef - (int)(strdef*def);	CHAR_setWorkInt( charaindex, CHAR_WORKATTACKPOWER, strdef);	return TRUE;}#endif#ifdef _Skill_MPDAMAGEint PETSKILL_MpDamage( int charaindex, int toNo, int array, char *data ){	char *pszOption;	char buf1[256];	int strdef;	float def=0.00;	CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_S_MPDAMAGE );	CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM2, toNo );	CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK );	CHAR_SETWORKINT_LOW(charaindex,CHAR_WORKBATTLECOM3, array);	////记录技能	pszOption = PETSKILL_getChar( array, PETSKILL_OPTION );	if( pszOption == NULL ) return FALSE;	if( getStringFromIndexWithDelim( pszOption, "|", 1, buf1, sizeof( buf1)) == FALSE )		return FALSE;	def = (float)(atoi( buf1)/100);	strdef = CHAR_getWorkInt(charaindex,CHAR_WORKFIXSTR);	strdef = strdef - (int)( strdef*def);	CHAR_setWorkInt( charaindex, CHAR_WORKATTACKPOWER, strdef);	return TRUE;}#endif#ifdef _SKILL_TOOTHint PETSKILL_ToothCrushe( int charaindex, int toNo, int array, char *data ){	//char *pszOption;	//char buf1[256];	//int strdef;	//float def=0.00;	CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_S_TOOTHCRUSHE );	CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM2, toNo );	CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK );	CHAR_SETWORKINT_LOW( charaindex, CHAR_WORKBATTLECOM3, array);	//记录技能/*	pszOption = PETSKILL_getChar( array, PETSKILL_OPTION );	if( pszOption == NULL ) return FALSE;	if( getStringFromIndexWithDelim( pszOption, "|", 1, buf1, sizeof( buf1)) == FALSE )		return FALSE;	def = (float)(atoi( buf1)/100);	strdef = CHAR_getWorkInt(charaindex,CHAR_WORKFIXSTR);	strdef = strdef - (int)( strdef*def);	CHAR_setWorkInt( charaindex, CHAR_WORKATTACKPOWER, strdef);*/	return TRUE;}#endif#ifdef _PSKILL_MODIFYint PETSKILL_Modifyattack( int charaindex, int toNo, int array, char *data ){	//char *pszOption;	//char buf1[256];	//int strdef;	//float def=0.00;	CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_S_MODIFYATT );	CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM2, toNo );	CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK );	CHAR_SETWORKINT_LOW( charaindex, CHAR_WORKBATTLECOM3, array);	//记录技能/*	pszOption = PETSKILL_getChar( array, PETSKILL_OPTION );	if( pszOption == NULL ) return FALSE;	if( getStringFromIndexWithDelim( pszOption, "|", 1, buf1, sizeof( buf1)) == FALSE )		return FALSE;	def = (float)(atoi( buf1)/100);	strdef = CHAR_getWorkInt(charaindex,CHAR_WORKFIXSTR);	strdef = strdef - (int)( strdef*def);	CHAR_setWorkInt( charaindex, CHAR_WORKATTACKPOWER, strdef);*/	return TRUE;}#endif#ifdef _PSKILL_MDFYATTACKint PETSKILL_Mdfyattack( int charaindex, int toNo, int array, char *data ){	char *pszOption;	char buf1[256];	char MNodify[][36]={"EA","WA","FI","WI"};	int nums, i;	CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_S_MDFYATTACK);	CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM2, toNo );	CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK );	CHAR_SETWORKINT_LOW( charaindex, CHAR_WORKBATTLECOM3, array);//记录属性	pszOption = PETSKILL_getChar( array, PETSKILL_OPTION );	if( pszOption == NULL ) return FALSE;	if( getStringFromIndexWithDelim( pszOption, "|", 1, buf1, sizeof( buf1)) == FALSE )		return FALSE;	for( i=0; i<4; i++)	{		if( strcmp( buf1, MNodify[i]) ) continue;		break;	}	if( i == 4 ) return FALSE;	CHAR_SETWORKINT_LOW( charaindex, CHAR_WORKBATTLECOM4, i);//记录属性	if( getStringFromIndexWithDelim( pszOption, "|", 2, buf1, sizeof( buf1)) == FALSE )		return FALSE;	nums=atoi( buf1);	CHAR_SETWORKINT_HIGH( charaindex, CHAR_WORKBATTLECOM4, nums);//记录数值	return TRUE;}#endif#ifdef _ITEM_INSLAYint PETSKILL_Inslay( int index, int toNo, int array, char *data){	int charaindex, petid;	int inslayindex=-1, inslayno=-1;	int i, j, itemno;#define MAXINSLAY 4	int		itemindexs[MAXINSLAY]={-1,-1,-1,-1};	int		itemnos[MAXINSLAY]={-1,-1,-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];		char *buf1;		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 >= MAXINSLAY )	{			CHAR_talkToCli( charaindex, -1, "精工每次只能选择四个物品。", CHAR_COLORYELLOW);			return FALSE;		}		for( j=0; j< MAXINSLAY; j++ ) {			if( itemindexs[j] == itemindex )	{				print("精工物品index相同 ERROR !!\n");				return FALSE;			}		}		if( (buf1 = ITEM_getChar( itemindex, ITEM_TYPECODE)) == NULL )	{			print(" ITEM_TYPECODE == NULL 错误 !!\n");			return FALSE;		}		if( !strcmp( buf1, "\0") || !strcmp( buf1, "NULL") )	{			CHAR_talkToCli( charaindex, -1, "这样物品不适合精工。", CHAR_COLORYELLOW);			return FALSE;		}		if( strstr( buf1, "INSLAY") != 0 )	{			if( !ITEM_CHECKINDEX( inslayindex))	{				inslayindex = itemindex;				inslayno = itemno;			}else	{				CHAR_talkToCli( charaindex, -1, "精工每次只能选择一个武器或防具。", CHAR_COLORYELLOW);				return FALSE;			}		}		itemindexs[i] = itemindex;		itemnos[i] = itemno;	}	if( !ITEM_CHECKINDEX( inslayindex) )	{		CHAR_talkToCli( charaindex, -1, "精工必须选择一个武器或防具。", CHAR_COLORYELLOW);		return FALSE;	}	for( i=0; i< MAXINSLAY; i++) {		if( !ITEM_CHECKINDEX( itemindexs[i]) )break;		if( inslayindex == itemindexs[i] ) continue;		if( PETSKILL_ITEM_inslay( charaindex, inslayindex, itemindexs[i] ) == FALSE ){			return FALSE;		}		CHAR_DelItem( charaindex, itemnos[i]);/*		CHAR_setItemIndex( charaindex, itemnos[i] ,-1);		CHAR_sendItemDataOne( charaindex, itemnos[i] );		ITEM_endExistItemsOne( itemindexs[i]);*/	}   	CHAR_sendItemDataOne( charaindex, inslayno );	CHAR_complianceParameter( charaindex );	CHAR_send_P_StatusString( charaindex, CHAR_P_STRING_ATK | CHAR_P_STRING_DEF 		| CHAR_P_STRING_QUICK | CHAR_P_STRING_CHARM );	return TRUE;}#endif#ifdef _MAGIC_SUPERWALLint	PETSKILL_MagicStatusChange( int charaindex, int toindex, int array, char *data ){	if( CHAR_CHECKINDEX( charaindex ) == FALSE )	return FALSE;	CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_S_SUPERWALL);	CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM2, toindex );	CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK );	CHAR_SETWORKINT_LOW( charaindex, CHAR_WORKBATTLECOM3, array);//记录属性	return TRUE;}#endif#ifdef _PETSKILL_SETDUCKint PETSKILL_SetDuck( int charaindex, int toNo, int array, char *data ){	if( CHAR_CHECKINDEX( charaindex ) == FALSE )		return FALSE;	CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_S_SETDUCK);	CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM2, toNo );	CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK );	CHAR_SETWORKINT_LOW( charaindex, CHAR_WORKBATTLECOM3, array);//记录属性	CHAR_setWorkInt( charaindex, CHAR_MAGICPETMP, 0 );	return TRUE;

⌨️ 快捷键说明

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