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

📄 battle_item.c

📁 石器时代8.0服务端完整源代码。可以直接编译
💻 C
📖 第 1 页 / 共 3 页
字号:
#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 == NULL ){		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;#ifdef _PREVENT_TEAMATTACK //光镜守..不得使用敌方		int 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, toNo) == 0 ){//不同边				int battleindex = CHAR_getWorkInt( charaindex, CHAR_WORKBATTLEINDEX );				BATTLE_NoAction( battleindex, BATTLE_Index2No( battleindex, charaindex) );				CHAR_talkToCli( charaindex, -1, "光镜守..不得施予非玩家敌方。", CHAR_COLORYELLOW);				return;			}		}#endif				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 ){#ifdef _CHANGEITEMUSE	 // Syu ADD 调整战斗中使用料理设定	int power1 = 0;#endif	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 );#ifdef _CHANGEITEMUSE	 // Syu ADD 调整战斗中使用料理设定	if( ((p = strstr( arg, "体" )) != NULL) && ((p = strstr( arg,"气")) != NULL))	{		kind = BD_KIND_HP_MP;		p = strstr( arg,"气");		if( sscanf( p+2, "%d", &power1 ) != 1 )		{			power1 = 0;		}		p = strstr( arg,"体");	}	else if( (p = strstr( arg, "体" )) != NULL )#else	if( (p = strstr( arg, "体" )) != NULL )#endif	{		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;#ifdef _CHANGEITEMUSE	 // Syu ADD 调整战斗中使用料理设定	BATTLE_MultiRecovery( battleindex, attackNo, toNo,		kind, power, per, SPR_item3, HealedEffect , power1);#else	BATTLE_MultiRecovery( battleindex, attackNo, toNo,		kind, power, per, SPR_item3, HealedEffect );#endif	{		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){

⌨️ 快捷键说明

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