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

📄 battle_command.c

📁 石器时代2.0完整版源代码.已经加入新功能. 在REDHAT9下GCC3.4编译成功.
💻 C
📖 第 1 页 / 共 2 页
字号:
#include "version.h"#include<string.h>#include<stdlib.h>#include"char.h"#include"char_base.h"#include "battle.h"#include "pet_skill.h"#include "battle_event.h"#include "battle_command.h"#include "lssproto_serv.h"#include "magic.h"#include "magic_base.h"#include "handletime.h"int NowBattlerFd;#if 1int BATTLE_MpDown( int charaindex, int down ){	return 0;}#else{	int mp, battleindex;	// 爵  反覆谛爵井}???爵井	battleindex = CHAR_getWorkInt( charaindex, CHAR_WORKBATTLEINDEX );	if( BATTLE_CHECKINDEX( battleindex ) == FALSE )return TRUE;	// 覆谛爵元扎卅井匀凶日??	if( BattleArray[battleindex].type != BATTLE_TYPE_P_vs_P ){		return TRUE;	}	// ??毛蛹日六月井"	mp = CHAR_getInt( charaindex, CHAR_MP );	if( mp < down ){		// 蛹日六卅中及匹窒手仄卅中午允月		CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_NONE );		// 戊穴件玉OK及隙烂		CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK );		return FALSE;	}	mp -= down;	CHAR_setInt( charaindex, CHAR_MP, mp );	return TRUE;}#endifvoid BattleCommandDispach( int fd,	char *command ){	int endFlg = 0, battleindex;	int EscapeFree = BATTLE_FLG_FREEDP;	int charaindex = CONNECT_getCharaindex(fd);	char szBuffer[256]="";#ifdef _FIXWOLF	 // Syu ADD 修正狼人变身Bug	int i , j , pindex;	BATTLE_ENTRY	*pEntry;#endif	NowBattlerFd = fd;	if( CHAR_CHECKINDEX( charaindex ) == FALSE )return;	if( CHAR_getInt( charaindex, CHAR_WHICHTYPE ) != CHAR_TYPEPLAYER ){		return;	}	battleindex = CHAR_getWorkInt( charaindex, CHAR_WORKBATTLEINDEX );	if( BATTLE_CHECKINDEX( battleindex ) == FALSE ||		CHAR_getWorkInt( charaindex, CHAR_WORKBATTLEMODE) == BATTLE_CHARMODE_NONE ){		return;	}	if( BattleArray[battleindex].flg & BATTLE_FLG_CHARALOST ){		EscapeFree = 0;	}	if( strncmp( command, "U", 1 ) == 0 ){		// shan 2001/12/25 begin		EscapeFree = 0; 		if (CHAR_getWorkInt( charaindex, CHAR_WORKBATTLEWATCH )!=TRUE){			CHAR_talkToCli( charaindex, -1,                "华义大魔王使出定身法,定定定定定定把你定在战斗里。", CHAR_COLORYELLOW );            CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_GUARD );            CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK );            //sprintf( szBuffer, "Command(%s)(防御)", CHAR_getUseName( charaindex ) );            endFlg = 1;			BATTLE_MpDown( charaindex, 2 ); 		}else{			BATTLE_WatchStop( charaindex );		}		// shan end	}else	if( strncmp( command, "E", 1 ) == 0 ){		if( checkErrorStatus( charaindex) ) {			BattleCommandDispach( fd, "N");			return;		}		CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_ESCAPE );		CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK );		//sprintf( szBuffer, "Command(%s)(逃跑)", CHAR_getUseName( charaindex ) );		endFlg = 1;		BATTLE_MpDown( charaindex, 20 );	}else	if( strncmp( command, "H|", 2 ) == 0 ){		int iNum = -1, At_SoubiIndex;		if( sscanf( command+2, "%X", &iNum ) != 1		|| ( iNum < 0 || iNum >= 20 )		){			iNum = -1;		}		if( checkErrorStatus( charaindex) )	{			BattleCommandDispach( fd, "N");			return;		}		EscapeFree = 0;		CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM2, iNum );		CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_ATTACK );		At_SoubiIndex =  CHAR_getItemIndex( charaindex, CHAR_ARM );		if( ITEM_CHECKINDEX( At_SoubiIndex ) == FALSE ){		}else{			if( ITEM_getInt( At_SoubiIndex, ITEM_TYPE ) == ITEM_BOOMERANG ){				CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_BOOMERANG );#ifdef _PETSKILL_BECOMEFOX				if( CHAR_getInt( charaindex, CHAR_BASEIMAGENUMBER)==101749					|| CHAR_getWorkInt( charaindex, CHAR_WORKFOXROUND ) != -1 ){ //若是变成小狐狸不可以使用回力标				    CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_NONE );				}#endif#ifdef _PETSKILL_BECOMEPIG				if( CHAR_getInt( charaindex, CHAR_BECOMEPIG) > -1 ){//变成乌力了				    CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_ATTACK );				}#endif			}		}		CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK );		CHAR_SETWORKINT_LOW( charaindex, CHAR_WORKBATTLECOM3, 1 );		//sprintf( szBuffer, "Command(%s)(战斗)", CHAR_getUseName( charaindex ) );		endFlg = 1;		BATTLE_MpDown( charaindex, 5 );	}else	if( strncmp( command, "G", 1 ) == 0 ){		if( checkErrorStatus( charaindex) )	{			BattleCommandDispach( fd, "N");			return;		}		EscapeFree = 0;		CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_GUARD );		CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK );		sprintf( szBuffer, "Command(%s)(防御)", CHAR_getUseName( charaindex ) );		endFlg = 1;		BATTLE_MpDown( charaindex, 2 );	}else	if( strncmp( command, "N", 1 ) == 0 ){		EscapeFree = 0;		CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_WAIT );		CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK );//		sprintf( szBuffer, "Command(%s)(server托管)", CHAR_getUseName( charaindex ) );		//sprintf( szBuffer, "Command(%s)(待机)", CHAR_getUseName( charaindex ) );		endFlg = 1;	}else	if( strncmp( command, "T|", 2 ) == 0 ){		int iNum = -1;		if( checkErrorStatus( charaindex) )	{			BattleCommandDispach( fd, "N");			return;		}		EscapeFree = 0;		if( sscanf( command+2, "%X", &iNum ) != 1		|| ( iNum < 0 || iNum >= 20 )		){			iNum = -1;		}		CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM2, iNum );		CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_CAPTURE );		CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK );		//sprintf( szBuffer, "Command(%s)(捕获)", CHAR_getUseName( charaindex ) );		endFlg = 1;		BATTLE_MpDown( charaindex, 20 );	}else	if( strncmp( command, "S|", 2 ) == 0 ){		int iNum = -1;		if( checkErrorStatus( charaindex) )	{			BattleCommandDispach( fd, "N");			return;		}		EscapeFree = 0;		// shan 2002/01/08 begin		if( sscanf( command+2, "%d", &iNum ) != 1        || ( iNum < -1 || iNum >= CHAR_MAXPETHAVE )        || ( CHAR_getInt(charaindex,CHAR_RIDEPET)==iNum)		){			iNum = -1;		}		// shan end#ifdef _STANDBYPET		if( iNum >= 0) {			if( ! (CHAR_getWorkInt( charaindex, CHAR_WORKSTANDBYPET) & ( 1 << iNum)) ) {				print("\n 改封包!叫出非待机宠!!:%s ", CHAR_getChar( charaindex, CHAR_CDKEY) );				iNum = -1;			}		}#endif		CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM2, iNum );		if( iNum < 0 ){			CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_PETIN );			//sprintf( szBuffer, "Command(%s)(唤回宠物)", CHAR_getUseName( charaindex ) );		}else{			CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_PETOUT );			//sprintf( szBuffer, "Command(%s)(叫出宠物)", CHAR_getUseName( charaindex ) );		}		CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK );		endFlg = 1;		BATTLE_MpDown( charaindex, 10 );	}else	if( strncmp( command, "W|", 2 ) == 0 ){		int iNum = -1, petskillindex = -1, ToNo = -1, petnum, petindex;		if( sscanf( command+2, "%X|%X", &iNum, &ToNo ) < 1 ){			iNum = -1; ToNo = -1;		}		petnum = CHAR_getInt( charaindex, CHAR_DEFAULTPET );		petindex = CHAR_getCharPet( charaindex, petnum );		if( CHAR_CHECKINDEX( petindex ) == FALSE ){		}else{			if( iNum < 0 || iNum >= CHAR_MAXPETSKILLHAVE #ifdef _PETSKILLBUG  //Add By Syu 2002.0805				|| (CHAR_getFlg( charaindex, CHAR_ISDIE ) == TRUE )||				(CHAR_getInt( charaindex, CHAR_HP ) <= 0)#endif				|| checkErrorStatus( petindex)				)			{				//sprintf( szBuffer, "Command(%s)(自动)", CHAR_getUseName( petindex ) );				CHAR_setWorkInt( petindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK );#ifdef _PETSKILLBUG //Add By Syu 2002.0805			}else if ((CHAR_getInt(petindex, CHAR_TRANSMIGRATION)<1)				&& (  iNum>=CHAR_getInt(petindex, CHAR_SLOT) ) ) 				{				//sprintf( szBuffer, "Command(%s)(自动)", CHAR_getUseName( petindex ) );				CHAR_setWorkInt( petindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK );#endif			}else{				petskillindex = PETSKILL_GetArray( petindex, iNum);#ifdef _FIXWOLF	 // Syu ADD 修正狼人变身Bug				if( (CHAR_getPetSkill( petindex , iNum )== 600) && (ToNo == -1))				{					for( j = 0; j < 2; j ++ )					{						pEntry = BattleArray[battleindex].Side[j].Entry;						for( i = 0; i < BATTLE_ENTRY_MAX; i ++ )						{							pindex = pEntry[i].charaindex;							if( pindex == petindex)							{								ToNo=i + ( j * 10 );								break;							}						}					}				}#endif				if( petskillindex >= 0				&& PETSKILL_Use( petindex, iNum, ToNo, NULL ) == TRUE				){					//sprintf( szBuffer, "Command(%s)(石版)", CHAR_getUseName( petindex ) );					EscapeFree = 0;				}else{					//sprintf( szBuffer, "Command(%s)(自动)", CHAR_getUseName( petindex ) );					CHAR_setWorkInt( petindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK );				}			}		}		endFlg = 1;		BATTLE_MpDown( charaindex, 10 );	}else	if( strncmp( command, "J|", 1 ) == 0 ){		int iNum = -1, magicindex = -1, ToNo = -1;		int valid = -1;        int itemindex=-1;		if( checkErrorStatus( charaindex) )	{			BattleCommandDispach( fd, "N");			return;		}		EscapeFree = 0;		if( sscanf( command+2, "%X|%X", &iNum, &ToNo ) != 2 ){			iNum = -1; ToNo = -1;		}					if( iNum < CHAR_EQUIPPLACENUM && iNum >= CHAR_HEAD ){			magicindex = MAGIC_GetArrayNo( charaindex, iNum );			itemindex = CHAR_getItemIndex( charaindex, iNum );			valid = MAGIC_isTargetValid( magicindex, ToNo);			if ((valid <0 ) || ( magicindex < 0 ) || (itemindex < 0 )){				CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_WAIT );				CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK );			}else{#ifdef _ITEM_ATTSKILLMAGIC				char *magicarg;				int magic_array = -1;				magic_array = MAGIC_getMagicArray( magicindex );				magicarg = MAGIC_getChar( magic_array, MAGIC_OPTION );				if( magicarg != "\0" && strstr( magicarg, "SKILL") != NULL )	{					int mp = ITEM_getInt( itemindex, ITEM_MAGICUSEMP );					if( MAGIC_AttSkill( charaindex, ToNo, magic_array, mp) == FALSE )	{						CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_WAIT );						CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK );					}				}else	{#endif					CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM2, ToNo );					CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_JYUJYUTU );					CHAR_SETWORKINT_LOW( charaindex, CHAR_WORKBATTLECOM3, magicindex );					CHAR_SETWORKINT_HIGH( charaindex, CHAR_WORKBATTLECOM3, iNum );					CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK );					//sprintf( szBuffer, "Command(%s)(咒术)", CHAR_getUseName( charaindex ) );#ifdef _ITEM_ATTSKILLMAGIC				}#endif			}		}else{			EscapeFree = 0;			CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_WAIT );			CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK );			//sprintf( szBuffer, "Command(%s)(待机)", CHAR_getUseName( charaindex ) );		}		endFlg = 1;	}else	if( strncmp( command, "I|", 1 ) == 0 ){		int iNum = -1, ToNo = -1;		int valid = 0, itemindex = -1;		if( checkErrorStatus( charaindex) )	{			BattleCommandDispach( fd, "N");			return;		}		EscapeFree = 0;		if( sscanf( command+2, "%X|%X", &iNum, &ToNo ) != 2 ){			iNum = -1; ToNo = -1;		}		itemindex = CHAR_getItemIndex( charaindex, iNum );		if ( !ITEM_CHECKINDEX( itemindex) ) valid=-1;		if (valid >= 0) valid = ITEM_isTargetValid( charaindex, itemindex, ToNo );		if (valid < 0 ) {			CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_WAIT );			CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK );		} else {			CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM2, ToNo );			CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_ITEM );			CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM3, iNum );			CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK );			//sprintf( szBuffer, "Command(%s)(道具)", CHAR_getUseName( charaindex ) );			endFlg = 1;		}	}else	if( strncmp( command, "@", 1 ) == 0 ){		//sprintf( szBuffer, "Command(%s)(通用)", CHAR_getUseName( charaindex ) );		CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK );		endFlg = 1;		CHAR_setInt( charaindex, CHAR_MP,			min( 100, CHAR_getInt( charaindex, CHAR_MP ) + 30 ) );	}else	{		//sprintf( szBuffer, "Command(%s)(失败)", CHAR_getUseName( charaindex ) );		endFlg = 2;	}	if( endFlg ){		BATTLE_ActSettingSend( battleindex );				if( endFlg==1 ){			int fd;			if( CHAR_getInt( charaindex, CHAR_WHICHTYPE)==CHAR_TYPEPLAYER ){				fd = CHAR_getWorkInt( charaindex, CHAR_WORKFD);					CONNECT_SetBattleRecvTime( fd, &NowTime);							}		}	}	{		//if( BATTLE_CHECKINDEX( battleindex ) == TRUE ){		//	BATTLE_BroadCast( battleindex, szBuffer, CHAR_COLORWHITE ) ;		//}			}	if( BattleArray[battleindex].turn == 0 ){		BattleArray[battleindex].flg |= EscapeFree;	}else{		BattleArray[battleindex].flg &= EscapeFree;	}}void BATTLE_ActSettingSend( int battleindex ){	int pindex, k = 0, i, j, charaindex;	int endBit = 0;	char szBA[256];	BATTLE_ENTRY	*pEntry;	BATTLE	*pBattle;	for( j = 0; j < 2; j ++ ){		pEntry = BattleArray[battleindex].Side[j].Entry;		for( i = 0; i < BATTLE_ENTRY_MAX; i ++ ){			pindex = pEntry[i].charaindex;			// 戊穴件玉    匹五化中凶日			if( CHAR_getWorkInt( pindex, CHAR_WORKBATTLEMODE )

⌨️ 快捷键说明

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