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

📄 battle_item.c

📁 石器时代8.0服务端完整源代码。可以直接编译
💻 C
📖 第 1 页 / 共 3 页
字号:
}#endif#ifdef _ITEM_REFRESH //vincent 解除异常状态道具void ITEM_useRefresh_Effect( charaindex, toindex, haveitemindex){	int i,itemindex,ReceveEffect;	char  *arg;//	char szBuffer[128]="";	int status = -1,attackNo,index2;	int battleindex;	char *pszP;//print("\nvincent--ITEM_useRefresh_Effect");	// 检查物品	itemindex = CHAR_getItemIndex(charaindex,haveitemindex);	if(!ITEM_CHECKINDEX(itemindex)) return;	arg = ITEM_getChar(itemindex, ITEM_ARGUMENT );	pszP = arg;	// 躲绊毛潸  	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;			}		}	}//print("\nvincent-->status:%d",status);	// 躲绊卅中及匹撩  	if( status == -1 ) return;	// 田玄伙  寞	battleindex = CHAR_getWorkInt( charaindex, CHAR_WORKBATTLEINDEX );	index2 = BATTLE_No2Index( battleindex, toindex);//被击中目标之index	attackNo = BATTLE_Index2No( battleindex, charaindex );//    defNo = BATTLE_Index2No( battleindex, index2 );//print("\nvincent-->charaindex:%d,attackNo:%d,index2:%d,defNo:%d,",charaindex,attackNo,index2,defNo);    /* 平乓仿弁正□及赭    伉旦玄井日壅蛔 */    CHAR_setItemIndex(charaindex, haveitemindex ,-1);	CHAR_sendItemDataOne( charaindex, haveitemindex);/* 失奶  丞凳蕙 *///	if( CHAR_getWorkInt( charaindex, StatusTbl[status] ) > 0 ){//		ReceveEffect = SPR_tyusya;//	}else{//		ReceveEffect = SPR_hoshi;//	}	ReceveEffect = SPR_tyusya;//打针	BATTLE_MultiStatusRecovery( battleindex, attackNo, toindex,		status, MAGIC_EFFECT_USER, ReceveEffect );	/* 壅允 */	ITEM_endExistItemsOne( itemindex );////////////////////////////	BATTLE_MultiList( battleindex, defNo, ToList );//		 for( i = 0; ToList[i] != -1; i ++ ){//		toindex = BATTLE_No2Index( battleindex, ToList[i] );////			}		////////////////////////////}#endif#ifdef _ITEM_ADDEXP	//vincent 经验提升void ITEM_useAddexp_Effect( charaindex, toindex, haveitemindex){	int itemindex,power,vtime;	//,pindex	char *p = NULL, *arg;	char szBuffer[1024]="";	itemindex = CHAR_getItemIndex(charaindex,haveitemindex);	// 检查物品	if(!ITEM_CHECKINDEX(itemindex)) return;	arg = ITEM_getChar(itemindex, ITEM_ARGUMENT );	if( (p = strstr( arg, "增" )) != NULL ){        sscanf( p+2, "%d", &power );	}	if( (p = strstr( arg, "分" )) != NULL ){		sscanf( p+2, "%d", &vtime );	}	if( p == NULL )return;#ifdef _ITEM_ADDEXP2 // 智果时间可以累加	{		int point;		point = CHAR_getWorkInt( charaindex, CHAR_WORKITEM_ADDEXP)					* (int)(CHAR_getWorkInt( charaindex, CHAR_WORKITEM_ADDEXPTIME)/60);		if( point >= 72000) {			CHAR_talkToCli( charaindex, -1, "智慧之果累计时间及效果已达上限。", CHAR_COLORYELLOW);			return;		}		point += (power * vtime);		point = min( point, 72000);		vtime = (int)(point / power);#ifdef _LOG_OTHER		sprintf( szBuffer, "使用智慧之果 %d\t累积效果= 分数%d 能力%d% 时间%d分 ",				ITEM_getInt( itemindex, ITEM_ID ), point, power, vtime);		LogOther( 			CHAR_getChar( charaindex, CHAR_CDKEY),			CHAR_getChar( charaindex, CHAR_NAME),			szBuffer );#endif		//CHAR_setInt( charaindex, CHAR_ADDEXPPOWER, power);		//CHAR_setInt( charaindex, CHAR_ADDEXPTIME,vtime*60 );		//sprintf(szBuffer, "测试讯息:目前分数%d 时间%d秒。", point, vtime*60);		//CHAR_talkToCli(charaindex,-1,szBuffer,CHAR_COLORRED);	}#endif	CHAR_setWorkInt( charaindex, CHAR_WORKITEM_ADDEXP, power);	CHAR_setWorkInt( charaindex, CHAR_WORKITEM_ADDEXPTIME,vtime*60 );	//清除道具	BATTLE_ItemUseDelete(charaindex,haveitemindex);	//sprintf(szBuffer, "学习经验的能力提升了%d%", power);	sprintf(szBuffer, "学习经验的能力提升了%d%,时效剩馀%d分钟。", power, vtime);	CHAR_talkToCli(charaindex,-1,szBuffer,CHAR_COLORYELLOW);}#endif//Terry add 2001/12/24#ifdef _ITEM_FIRECRACKERvoid ITEM_useFirecracker_Battle( charaindex, toindex, haveitemindex){	int itemindex, battleindex, masteridx=-1, index2;		char szWork[128];#ifdef _FIX_FIRECRACKER	int petid=-1, i=1;	BOOL FINDPET=FALSE;	char *buff1;	char token[256], buf1[256];#else	int PetEscape = 0;#endif	itemindex = CHAR_getItemIndex(charaindex,haveitemindex);	// 检查物品	if(!ITEM_CHECKINDEX(itemindex)) return;	battleindex = CHAR_getWorkInt(charaindex,CHAR_WORKBATTLEINDEX);#ifdef _FIX_FIRECRACKER	index2 = BATTLE_No2Index( battleindex, toindex);	if( !CHAR_CHECKINDEX( index2) ) return;	{		int attackNo = BATTLE_Index2No( battleindex, charaindex );		int safeSide = 0;		int MySide_start, MySide_end;		if( attackNo >= 10 )			safeSide = 1;		MySide_start = safeSide*SIDE_OFFSET;		MySide_end = ((safeSide*SIDE_OFFSET) + SIDE_OFFSET);		if( (toindex >= MySide_start) && (toindex<MySide_end) ){	//同边			return;		}	}	if( BATTLE_Index2No( battleindex, charaindex ) == toindex ){		BATTLE_ItemUseDelete(charaindex,haveitemindex);//用在自身		return;	}	if( CHAR_getInt( index2, CHAR_WHICHTYPE) == CHAR_TYPEPLAYER ) {		petid = -1;//作用在人物	}else if( CHAR_getInt( index2, CHAR_WHICHTYPE) == CHAR_TYPEPET ) {		masteridx = BATTLE_No2Index(battleindex,toindex-5);//作用在宠物		if( !CHAR_CHECKINDEX( masteridx) ) return;		petid = CHAR_getInt(index2,CHAR_PETID);//宠物id	}else if( CHAR_getInt( index2, CHAR_WHICHTYPE) == CHAR_TYPEENEMY ) {		petid = CHAR_getInt(index2,CHAR_PETID);	}	if( (buff1 = ITEM_getChar( itemindex, ITEM_ARGUMENT)) == NULL ) return;	memset( token, 0, sizeof( token));	if( NPC_Util_GetStrFromStrWithDelim( buff1, "KPET", token, sizeof( token) ) == NULL) {		print( "Can't get KPET: %s!!\n", buff1);		return;	}	// won fix	while( getStringFromIndexWithDelim( token,"_", i, buf1, sizeof( buf1)) != FALSE )	{	//while( getStringFromIndexWithDelim( token,"|", i, buf1, sizeof( buf1)) != FALSE )	{		i++;		if( petid == atoi( buf1) ){//年兽判别			FINDPET = TRUE;			break;		}	}	sprintf(szWork,"BB|a%X|w3|r%X|f0|d0|p0|FF|",BATTLE_Index2No(battleindex,charaindex),toindex);	BATTLESTR_ADD(szWork);//丢出鞭炮的动画//送讯息至玩家	if( FINDPET == TRUE )	{//若为年兽		char buf4[255];		sprintf( buf4, "%s被吓跑了!", CHAR_getChar( index2, CHAR_NAME));		BATTLE_Exit(index2,battleindex);//离开战斗		if( CHAR_CHECKINDEX( masteridx) ){			CHAR_setInt(masteridx,CHAR_DEFAULTPET,-1);//无参战宠			CHAR_talkToCli( masteridx,-1, buf4, CHAR_COLORYELLOW);		}		sprintf(szWork,"BQ|e%X|",toindex);//逃跑动画		BATTLESTR_ADD(szWork);		CHAR_talkToCli( charaindex,-1, buf4, CHAR_COLORYELLOW);	}else	{		CHAR_talkToCli( charaindex, -1, "什麽事都没发生。", CHAR_COLORYELLOW);	}	BATTLE_ItemUseDelete( charaindex, haveitemindex);//删除鞭炮#else	index2 = BATTLE_No2Index(battleindex,toindex);	// 被炸到的是否为宠物	if(CHAR_getInt(index2,CHAR_WHICHTYPE) == CHAR_TYPEPET) {		// 如果被炸的是年兽		if(CHAR_getInt(index2,CHAR_PETID) >= 901 && CHAR_getInt(index2,CHAR_PETID) <= 904){			// 取得目标的正後方的角色的index			masteridx = BATTLE_No2Index(battleindex,toindex-5);			// 如果对战的是玩家			if(CHAR_getInt(masteridx,CHAR_WHICHTYPE) == CHAR_TYPEPLAYER) PetEscape = 1;			else																									       print("\n年兽在遇敌时出现");		}	}		// 如果不是炸自己	if(BATTLE_Index2No(battleindex,charaindex) != toindex)	{		sprintf(szWork,"BB|a%X|w3|r%X|f0|d0|p0|FF|",BATTLE_Index2No(battleindex,charaindex),toindex);		BATTLESTR_ADD(szWork);		if(PetEscape)		{			BATTLE_Exit(index2,battleindex);			CHAR_setInt(masteridx,CHAR_DEFAULTPET,-1);			sprintf(szWork,"BQ|e%X|",toindex);			BATTLESTR_ADD(szWork);			CHAR_talkToCli(masteridx,-1,"年兽被吓跑了!",CHAR_COLORWHITE);			CHAR_talkToCli(charaindex,-1,"年兽被吓跑了!",CHAR_COLORWHITE);		}	}	CHAR_talkToCli(charaindex,-1,"什麽事都没发生。",CHAR_COLORWHITE);	CHAR_talkToCli(charaindex,-1,"道具消失了。",CHAR_COLORWHITE);	// 使用後道具消失	BATTLE_ItemUseDelete(charaindex,haveitemindex);#endif}#endif//Terry end//气绝状态回复耐力,复加复活(光,镜,守)精灵 参数同魔法(光,镜,守)精灵,但只能在战斗之使用,用完就没了 //参数 例如:耐力值 吸 turn 1#ifdef  _FEV_ADD_NEW_ITEM			// FEV ADD 增加复活守精void ITEM_ResAndDef( int charaindex, int toindex, int haveitemindex ){	int itemindex, battleindex, attackNo, par = 0, pow = 0, ReceveEffect;	char *buffer = NULL;	char *magicarg = NULL;	char *magicarg2 = NULL;	char *magicarg3 = NULL;	char magicarg4[200];    char *pszP = NULL; 	char delim[] = " ";//协助分解字串的区隔字元	int status = -1, i, turn = 3;	char szTurn[] = "turn";	// 失奶  丞互丐月井升丹井    itemindex = CHAR_getItemIndex( charaindex, haveitemindex);    if(!ITEM_CHECKINDEX(itemindex)) return;	buffer = ITEM_getChar(itemindex, ITEM_ARGUMENT );//整串字串	pszP = strtok(buffer, delim);//第一个参数    magicarg = strtok(NULL, delim);//第二个参数	magicarg2 = strtok(NULL, delim);//第叁个参数	magicarg3 = strtok(NULL, delim);//第四个参数    sprintf(magicarg4,"%s %s %s",magicarg,magicarg2,magicarg3);	magicarg = (char*)magicarg4;	//光镜守..不得使用敌方	battleindex = CHAR_getWorkInt( charaindex, CHAR_WORKBATTLEINDEX );	if( CHAR_getInt( charaindex, CHAR_WHICHTYPE ) == CHAR_TYPEPLAYER		//&& BattleArray[battleindex].type != BATTLE_TYPE_P_vs_P 		){		if( BATTLE_CheckSameSide( charaindex, toindex) == 0 ){//不同边			battleindex = CHAR_getWorkInt( charaindex, CHAR_WORKBATTLEINDEX );			BATTLE_NoAction( battleindex, BATTLE_Index2No( battleindex, charaindex) );			CHAR_talkToCli( charaindex, -1, "光镜守..不得施予非玩家敌方。", CHAR_COLORYELLOW);			return;		}	}	//在气绝状态回复耐力	if( strstr( pszP, "%" ) ){		par = 1;	}		if( sscanf( pszP, "%d", &pow ) != 1 ){		pow = 0;	}      	attackNo = BATTLE_Index2No( battleindex, charaindex );   	//选择代表的特效	if( pow <= 0 ){		ReceveEffect = SPR_fukkatu3;	}else	if( pow <= 100 ){		ReceveEffect = SPR_fukkatu1;	}else	if( pow <= 300 ){		ReceveEffect = SPR_fukkatu2;	}else{		ReceveEffect = SPR_fukkatu3;	}	BATTLE_MultiRessurect( battleindex, attackNo, toindex,		pow, par, SPR_item3, ReceveEffect );    	//(光,镜,守)精灵	// 躲绊毛潸  	for( ;status == -1 && magicarg[0] != 0; magicarg++ ){		for( i = 1; i < BATTLE_MD_END; i ++ ){			// 躲绊疋永正伉井"			if( strncmp( magicarg, aszMagicDef[i], 2 ) == 0 ){				status = i;				pszP +=2;				break;			}		}	}	// 躲绊卅中及匹撩  	if( status == -1 ) return;	// 窒荚  凳今六月井"	if( ( magicarg = strstr( magicarg, szTurn ) ) != NULL){		magicarg += sizeof( szTurn );		sscanf( magicarg, "%d", &turn );	}	//print("次数:%d",turn);	// 田玄伙  寞	battleindex = CHAR_getWorkInt( charaindex, CHAR_WORKBATTLEINDEX );	attackNo =  BATTLE_Index2No( battleindex, charaindex );	// 蝈够	BATTLE_MultiMagicDef( battleindex, attackNo, toindex,		status, turn, MAGIC_EFFECT_USER, SPR_difence );	BATTLE_ItemUseDelete( charaindex, haveitemindex );}#endif 

⌨️ 快捷键说明

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