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

📄 battle_item.c

📁 石器时代2.0完整版源代码.已经加入新功能. 在REDHAT9下GCC3.4编译成功.
💻 C
📖 第 1 页 / 共 2 页
字号:
#include "version.h"#include <string.h>#include "char.h"#include "char_base.h"#include "battle.h"#include "battle_event.h"#include "battle_item.h"#include "battle_magic.h"#include "item_event.h"#include "log.h"#include "anim_tbl.h"#include "npcutil.h"#include "magic_base.h"#include "lssproto_serv.h"int BATTLE_ItemUseDelete(	int charaindex,	int haveitemindex){	int itemindex;    itemindex = CHAR_getItemIndex( charaindex, haveitemindex);	if( ITEM_CHECKINDEX( itemindex ) == FALSE ) return 0;	{		LogItem(			CHAR_getChar( charaindex, CHAR_NAME ),			CHAR_getChar( charaindex, CHAR_CDKEY ),#ifdef _add_item_log_name  // WON ADD 在item的log中增加item名称			itemindex,#else       		ITEM_getInt( itemindex, ITEM_ID ),#endif			"BattleUse(战斗中使用掉的道具)",	       	CHAR_getInt( charaindex,CHAR_FLOOR),			CHAR_getInt( charaindex,CHAR_X ),        	CHAR_getInt( charaindex,CHAR_Y ),			ITEM_getChar( itemindex, ITEM_UNIQUECODE),					ITEM_getChar( itemindex, ITEM_NAME),					ITEM_getInt( itemindex, ITEM_ID)		);	}	CHAR_DelItemMess( charaindex, haveitemindex, 0);	return 0;}#ifdef _IMPRECATE_ITEMvoid ITEM_useImprecate( int charaindex, int toNo, int haveitemindex ){	int i;	int battleindex, attackNo,itemindex;	char *arg;	char buf[256];	struct tagImprecate {		char fun[256];		int intfun;	};	struct tagImprecate ImList[3] ={		{"咒",BD_KIND_CURSE},{"恩",BD_KIND_BESTOW},{"祝",BD_KIND_WISHES} };	if( !CHAR_CHECKINDEX( charaindex) ) return;	battleindex = CHAR_getWorkInt( charaindex, CHAR_WORKBATTLEINDEX );	if( (attackNo = BATTLE_Index2No( battleindex, charaindex )) < 0 ){		print( "ANDY attackNo=%d\n", attackNo);		return;	}    itemindex = CHAR_getItemIndex( charaindex, haveitemindex);    if(!ITEM_CHECKINDEX(itemindex)) return;	arg = ITEM_getChar(itemindex, ITEM_ARGUMENT );	if( arg == "\0" ){		print( "ANDY ITEM id:%d=>arg err\n", ITEM_getInt( itemindex, ITEM_ID));		return;	}	for( i=0; i<3; i++)	{		if( strstr( arg, ImList[i].fun ) != 0 )	{			char buf1[256];			int kind,powers, rounds, HealedEffect;			if( NPC_Util_GetStrFromStrWithDelim( arg, ImList[i].fun, buf, sizeof( buf)) == NULL )continue;			kind = ImList[i].intfun;			if( getStringFromIndexWithDelim( buf,"x", 1, buf1, sizeof( buf1)) == FALSE ) continue;			powers = atoi( buf1);			if( getStringFromIndexWithDelim( buf,"x", 2, buf1, sizeof( buf1)) == FALSE ) continue;			rounds = atoi( buf1);			HealedEffect = SPR_hoshi;			BATTLE_ImprecateRecovery(				battleindex, attackNo, toNo, kind, powers,				rounds, SPR_item3, HealedEffect );			CHAR_setItemIndex(charaindex, haveitemindex ,-1);			CHAR_sendItemDataOne( charaindex, haveitemindex);			ITEM_endExistItemsOne( itemindex );			break;		}	}}#endif#ifdef _ITEM_MAGICRECOVERYvoid ITEM_useMRecovery_Battle( int charaindex, int toNo, int haveitemindex ){	int battleindex, attackNo, itemindex;	int turn=0, magicid, marray;	char buf1[256];	char *arg=NULL;	battleindex = CHAR_getWorkInt( charaindex, CHAR_WORKBATTLEINDEX );	if( BATTLE_CHECKINDEX( battleindex ) == FALSE ) return;	if( (attackNo =  BATTLE_Index2No( battleindex, charaindex )) == -1 ) return;    itemindex = CHAR_getItemIndex( charaindex, haveitemindex);    if(!ITEM_CHECKINDEX(itemindex)) return;	arg = ITEM_getChar( itemindex, ITEM_ARGUMENT );	if( getStringFromIndexWithDelim( arg, ":", 2, buf1, sizeof(buf1)) ==FALSE ) return;	turn = atoi( buf1);	if( getStringFromIndexWithDelim( arg, ":", 1, buf1, sizeof(buf1)) ==FALSE ) return;	if( strstr( buf1, "全" ) != NULL ){	}else{	}	magicid = ITEM_getInt( itemindex, ITEM_MAGICID);	marray = MAGIC_getMagicArray( magicid);	if( marray == -1 ) return;	if( IsBATTLING( charaindex ) == TRUE ){		int i, status=-1;		char *magicarg=NULL, *pszP=NULL;		magicarg = MAGIC_getChar( marray, MAGIC_OPTION );		pszP = magicarg;		for( ;status == -1 && pszP[0] != '\0'; pszP++ ){			for( i = 1; i < BATTLE_MD_END; i ++ ){				if( strncmp( pszP, aszMagicDef[i], 2 ) == 0 ){					status = i;					pszP +=2;					break;				}			}		}		if( status == -1 ) return;		BATTLE_MultiMagicDef( battleindex, attackNo, toNo,			status, turn, MAGIC_EFFECT_USER, SPR_difence );		LogItem(			CHAR_getChar( charaindex, CHAR_NAME ),			CHAR_getChar( charaindex, CHAR_CDKEY ),#ifdef _add_item_log_name  // WON ADD 在item的log中增加item名称			itemindex,#else       		ITEM_getInt( itemindex, ITEM_ID ),#endif			"BattleUse(战斗中使用掉的道具)",	       	CHAR_getInt( charaindex,CHAR_FLOOR),			CHAR_getInt( charaindex,CHAR_X ),        	CHAR_getInt( charaindex,CHAR_Y ),			ITEM_getChar( itemindex, ITEM_UNIQUECODE),					ITEM_getChar( itemindex, ITEM_NAME),					ITEM_getInt( itemindex, ITEM_ID)		);	}	CHAR_DelItemMess( charaindex, haveitemindex, 0);}#endif#ifdef _ITEM_USEMAGICvoid ITEM_useMagic_Battle( int charaindex, int toNo, int haveitemindex ){	int itemindex,itemmaxuse;    char *arg=NULL;    itemindex = CHAR_getItemIndex( charaindex, haveitemindex);	if(!ITEM_CHECKINDEX(itemindex)) return;	arg = ITEM_getChar( itemindex, ITEM_ARGUMENT );	CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM2, toNo );	CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_JYUJYUTU );	CHAR_SETWORKINT_LOW( charaindex, CHAR_WORKBATTLECOM3, atoi(arg) );	CHAR_SETWORKINT_HIGH( charaindex, CHAR_WORKBATTLECOM3, 0 );	CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK );	MAGIC_DirectUse(				charaindex,				CHAR_GETWORKINT_LOW( charaindex, CHAR_WORKBATTLECOM3 ),				CHAR_getWorkInt( charaindex, CHAR_WORKBATTLECOM2 ),				CHAR_GETWORKINT_HIGH( charaindex, CHAR_WORKBATTLECOM3 )	);	itemmaxuse = ITEM_getInt( itemindex, ITEM_DAMAGEBREAK);	if( itemmaxuse > 0 )	    ITEM_setInt( itemindex, ITEM_DAMAGEBREAK, itemmaxuse-1 );    else{		LogItem(			CHAR_getChar( charaindex, CHAR_NAME ),			CHAR_getChar( charaindex, CHAR_CDKEY ),#ifdef _add_item_log_name  // WON ADD 在item的log中增加item名称			itemindex,#else       		ITEM_getInt( itemindex, ITEM_ID ),#endif			"BattleUse(战斗中使用掉的道具)",	       	CHAR_getInt( charaindex,CHAR_FLOOR),			CHAR_getInt( charaindex,CHAR_X ),        	CHAR_getInt( charaindex,CHAR_Y ),			ITEM_getChar( itemindex, ITEM_UNIQUECODE),					ITEM_getChar( itemindex, ITEM_NAME),					ITEM_getInt( itemindex, ITEM_ID)		);	    CHAR_DelItemMess( charaindex, haveitemindex, 0);	}}#endifvoid ITEM_useRecovery_Battle( int charaindex, int toNo, int haveitemindex ){	int power = 0, per = 0, HealedEffect=0;	int battleindex, attackNo,itemindex, kind = BD_KIND_HP;	char *p = NULL, *arg;    itemindex = CHAR_getItemIndex( charaindex, haveitemindex);    if(!ITEM_CHECKINDEX(itemindex)) return;	arg = ITEM_getChar(itemindex, ITEM_ARGUMENT );	if( (p = strstr( arg, "体" )) != NULL )	{		kind = BD_KIND_HP;	}	else if( (p = strstr( arg, "气" )) != NULL )	{		kind = BD_KIND_MP;	}	else#ifdef _ITEM_UNBECOMEPIG    if( (p = strstr( arg, "解猪" )) != NULL ){        kind = BD_KIND_UNBECOMEPIG;		HealedEffect = 100608; //特效编号	}	else#endif#ifdef _ITEM_LVUPUP	if( (p = strstr( arg, "LVUPUP" )) != NULL ){	    return;	}	else#endif#ifdef _ITEM_PROPERTY    if( (p = strstr( arg, "PROPERTY" )) != NULL ){	    kind = BD_KIND_PROPERTY;		HealedEffect = 100608; //特效编号		if( strstr( arg, "+" ) )			power = 1;		else if( strstr( arg, "-" ) )			power = 2;	}	else#endif#ifdef _ITEM_ADDPETEXP    if( (p = strstr( arg, "GETEXP" )) != NULL ){        return;	}	else#endif		return;#ifdef _ITEM_UNBECOMEPIG    if( HealedEffect != 100608 ){#endif	    if( sscanf( p+2, "%d", &power ) != 1 )		    power = 0;	    if( power <= 100 )		    HealedEffect = SPR_heal;//SPR_hoshi		else if( power <= 300 )		    HealedEffect = SPR_heal2;	    else		    HealedEffect = SPR_heal3;#ifdef _ITEM_UNBECOMEPIG	}#endif	battleindex = CHAR_getWorkInt( charaindex, CHAR_WORKBATTLEINDEX );	attackNo = BATTLE_Index2No( battleindex, charaindex );	if( attackNo < 0 )return;	BATTLE_MultiRecovery( battleindex, attackNo, toNo,kind, power, per, SPR_item3, HealedEffect );	{		LogItem(			CHAR_getChar( charaindex, CHAR_NAME ),			CHAR_getChar( charaindex, CHAR_CDKEY ),#ifdef _add_item_log_name  // WON ADD 在item的log中增加item名称			itemindex,#else       		ITEM_getInt( itemindex, ITEM_ID ),#endif			"BattleUse(战斗中使用掉的道具)",	       	CHAR_getInt( charaindex,CHAR_FLOOR),			CHAR_getInt( charaindex,CHAR_X ),        	CHAR_getInt( charaindex,CHAR_Y ),			ITEM_getChar( itemindex, ITEM_UNIQUECODE),					ITEM_getChar( itemindex, ITEM_NAME),					ITEM_getInt( itemindex, ITEM_ID)		);	}	CHAR_DelItemMess( charaindex, haveitemindex, 0);}void ITEM_useStatusChange_Battle(	int charaindex,	int toNo,	int haveitemindex){	int turn = 0, i;	int battleindex, attackNo,itemindex, status = -1, Success = 15;	int ReceveEffect;	char *pszP = NULL, *arg;	char szTurn[] = "turn";	char szSuccess[] = "成";    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 = 0; i < BATTLE_ST_END; i ++ ){			if( strncmp( pszP, aszStatus[i], 2 ) == 0 ){				status = i;				pszP +=2;				break;			}		}	}	if( status == -1 ) return ;	if( ( pszP = strstr( arg, szTurn ) ) != NULL){		pszP += sizeof( szTurn );		sscanf( pszP, "%d", &turn );	}	if( ( pszP = strstr( arg, szSuccess ) ) != NULL){		pszP += sizeof( szSuccess );		sscanf( pszP, "%d", &Success );	}	battleindex = CHAR_getWorkInt( charaindex, CHAR_WORKBATTLEINDEX );	attackNo = BATTLE_Index2No( battleindex, charaindex );	if( status == BATTLE_ST_NONE ){		ReceveEffect = SPR_tyusya;	}else{		ReceveEffect = SPR_hoshi;	}	BATTLE_MultiStatusChange( battleindex, attackNo, toNo,		status, turn, SPR_item3, ReceveEffect, Success );	BATTLE_ItemUseDelete( charaindex, haveitemindex );}void ITEM_useStatusRecovery_Battle(	int charaindex, 	// 银匀凶谛及奶件犯永弁旦	int toNo, 			// 银歹木月谛及  寞	int haveitemindex 	// 银丹谛及失奶  丞及    寞){	int i;	int battleindex, attackNo,itemindex, status = -1;	int ReceveEffect;	char *pszP = NULL, *arg;	// 失奶  丞互丐月井升丹井    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 = 0; i < BATTLE_ST_END; i ++ ){			// 躲绊疋永正伉井"			if( strncmp( pszP, aszStatus[i], 2 ) == 0 ){				status = i;				pszP +=2;				break;			}		}	}	// 躲绊卅中及匹撩  	if( status == -1 ) return ;	//------- 仇仇井日荚汊质   -----------	battleindex = CHAR_getWorkInt( charaindex, CHAR_WORKBATTLEINDEX );	attackNo = BATTLE_Index2No( battleindex, charaindex );	ReceveEffect = SPR_tyusya;	//   月午五反仇木	// 蝈够	BATTLE_MultiStatusRecovery( battleindex, attackNo, toNo,		status, SPR_item3, ReceveEffect );	// 爵    卞失奶  丞互壅尹凶桦宁及隋骚质  	BATTLE_ItemUseDelete( charaindex, haveitemindex );}void ITEM_useMagicDef_Battle(	int charaindex,	int toNo,	int haveitemindex){	int turn = 0, i;	int battleindex, attackNo,itemindex, status = -1;	char *pszP = NULL, *arg;	char szTurn[] = "turn";    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_MD_END; i ++ ){			if( strncmp( pszP, aszMagicDef[i], 2 ) == 0 ){				status = i;				pszP +=2;				break;			}		}	}	if( status == -1 ) return ;	if( ( pszP = strstr( arg, szTurn ) ) != NULL){		pszP += sizeof( szTurn );		sscanf( pszP, "%d", &turn );	}	battleindex = CHAR_getWorkInt( charaindex, CHAR_WORKBATTLEINDEX );	attackNo = BATTLE_Index2No( battleindex, charaindex );	BATTLE_MultiMagicDef( battleindex, attackNo, toNo,		status, turn, SPR_item3, SPR_difence );	BATTLE_ItemUseDelete( charaindex, haveitemindex );}//--------------------------------------------------------------//  由仿丢□正  凳失奶  丞毛银匀凶桦宁及质  //--------------------------------------------------------------// 爵    及桦宁void ITEM_useParamChange_Battle(	int charaindex, 	// 银匀凶谛及奶件犯永弁旦	int toNo, 			// 银歹木月谛及  寞	int haveitemindex 	// 银丹谛及失奶  丞及    寞){	int i;	int battleindex, attackNo,itemindex;	int pow, par = 0;	int kind = -1;	char *pszP = NULL, *arg;	// 失奶  丞互丐月井升丹井    itemindex = CHAR_getItemIndex( charaindex, haveitemindex);    if(!ITEM_CHECKINDEX(itemindex)) return;	// 由仿丢□正毛潸  	arg = ITEM_getChar(itemindex, ITEM_ARGUMENT );	pszP = arg;	// 躲绊毛潸  	for( ;kind == -1 && pszP[0] != 0; pszP++ ){		for( i = 1; i < BATTLE_MD_END; i ++ ){			// 躲绊疋永正伉井"			if( strncmp( pszP, aszParamChange[i], 2 ) == 0 ){				kind = i;				pszP +=2;				break;			}		}	}	// 躲绊卅中及匹撩  	if( kind == -1 ) return ;	if( strstr( pszP, "%" ) ){	// 仇及桦宁反⊙煌遥		par = 1;	}	if( sscanf( pszP, "%d", &pow ) != 1 ){		// 窒禾奶件玄丐仆月井		pow = 30;	}	//------- 仇仇井日质   -----------	battleindex = CHAR_getWorkInt( charaindex, CHAR_WORKBATTLEINDEX );	attackNo = BATTLE_Index2No( battleindex, charaindex );	// 蝈够	BATTLE_MultiParamChange( battleindex, attackNo, toNo,		kind, pow, par, SPR_item3, SPR_hoshi );	// 爵    卞失奶  丞互壅尹凶桦宁及隋骚质  	BATTLE_ItemUseDelete( charaindex, haveitemindex );}//--------------------------------------------------------------//  白奴□伙玉箪岭  凳失奶  丞毛银匀凶桦宁及质  

⌨️ 快捷键说明

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