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

📄 battle_command.c

📁 石器时代8.0服务端完整源代码。可以直接编译
💻 C
📖 第 1 页 / 共 3 页
字号:
#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"#ifdef _PROFESSION_SKILL			// WON ADD 人物职业技能#include "profession_skill.h"#endifint 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;

⌨️ 快捷键说明

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