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

📄 battle_command.c

📁 石器时代8.0服务端完整源代码。可以直接编译
💻 C
📖 第 1 页 / 共 3 页
字号:
				int magic_array = -1;				magic_array = MAGIC_getMagicArray( magicindex );				magicarg = MAGIC_getChar( magic_array, MAGIC_OPTION );				if( magicarg != NULL && 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#ifdef _PROFESSION_SKILL			// WON ADD 人物职业技能	if( strncmp( command, "P", 1 ) == 0 ){		int iNum=-1, ToNo=-1;		int skillindex=-1;		int char_pskill=-1, profession_skill=-1, Pskillid=-1;		if( checkErrorStatus( charaindex) )	{			BattleCommandDispach( fd, "N");			return;		}		EscapeFree = 0;		if( sscanf( command+2, "%X|%X", &iNum, &ToNo ) < 1 ){			iNum = -1; ToNo = -1;		}		if( CHAR_getWorkInt( charaindex, CHAR_WORKBATTLEMODE) == BATTLE_CHARMODE_NONE ){			print("\n\n 非法封包(19001)(%s)(%s)\n\n", CHAR_getChar(charaindex, CHAR_CDKEY), CHAR_getChar(charaindex, CHAR_NAME) );#ifdef _PROSKILL_ERR_KICK			saacproto_ACKick_send( acfd, CHAR_getChar(charaindex,CHAR_CDKEY), getFdidFromCharaIndex( charaindex), 1);#endif			return;		}#ifdef _PROSKILL_OPTIMUM	// Robin fix cancel 此处略过职业检查, 改在 PROFESSION_SKILL_Use 中检查		// 人物的职业		char_pskill = CHAR_getInt( charaindex, PROFESSION_CLASS );		// 技能的职业		skillindex = PROFESSION_SKILL_GetArray( charaindex, iNum);		Pskillid = PROFESSION_SKILL_getskillArray( skillindex);		profession_skill = PROFESSION_SKILL_getInt( Pskillid, PROFESSION_SKILL_PROFESSION_CLASS);		if( (char_pskill > 0) && (char_pskill == profession_skill) ){#else		if( 1 ) {#endif			if( PROFESSION_SKILL_Use( charaindex, iNum, ToNo, NULL ) == 1 ){				//sprintf( szBuffer, "Command(%s)(职业技能)", CHAR_getUseName( charaindex ) );				endFlg = 1;			}else{				print("\n职业技能失败!! ");				CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_WAIT );				CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK );				//sprintf( szBuffer, "Command(%s)(待机)", CHAR_getUseName( charaindex ) );		#ifdef _PROSKILL_ERR_KICK			saacproto_ACKick_send( acfd, CHAR_getChar(charaindex,CHAR_CDKEY), getFdidFromCharaIndex( charaindex), 1);#endif			}		}else{			print("\n改封包??职业技能ID不正确:%s:%d:%d \n",					CHAR_getChar( charaindex, CHAR_CDKEY), char_pskill, profession_skill);			CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_WAIT );			CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK );			//sprintf( szBuffer, "Command(%s)(待机)", CHAR_getUseName( charaindex ) );#ifdef _PROSKILL_ERR_KICK			saacproto_ACKick_send( acfd, CHAR_getChar(charaindex,CHAR_CDKEY), getFdidFromCharaIndex( charaindex), 1);#endif		}		EscapeFree = 0;			}else#endif	{		//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 )				== BATTLE_CHARMODE_C_OK			){				endBit |= 1 << k;	// 申永玄  化月			}else			// 衬分匀凶日濮覆  井允			if( CHAR_getInt( pindex, CHAR_WHICHTYPE ) == CHAR_TYPEENEMY )			{				endBit |= 1 << k;	// 申永玄  化月			}			k ++;		}	}	sprintf( szBA, "BA|%X|%X|", endBit, BattleArray[battleindex].turn );//	print( "%s\n", szBA );	//今日卞蝈够伙□皿仄化霜月	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_CHECKINDEX( pindex ) == FALSE )continue;			// 辅爵仄凶化及平乓仿卞反霜日卅中			if( CHAR_getWorkInt( pindex, CHAR_WORKBATTLEMODE ) == BATTLE_CHARMODE_RESCUE )continue;			// 皿伊奶乩□分匀凶日			if( CHAR_getInt( pindex, CHAR_WHICHTYPE ) == CHAR_TYPEPLAYER			){	// 戊穴件玉霜月				BATTLE_CommandSend( pindex, szBA );			}		}	}	// 棋爵仄化中月谛卞手霜月	pBattle = BattleArray[battleindex].pNext;	for( ; pBattle ; pBattle = pBattle->pNext ){		// 仇及失玉伊旦互恳仄中井民尼永弁		if( BATTLE_CHECKADDRESS( pBattle ) == FALSE ){			fprint( "err:观战battle address错误(%p)\n", pBattle );			break;		}		// 蝈够卞霜耨		for( i = 0; i < BATTLE_ENTRY_MAX; i ++ ){			charaindex = pBattle->Side[0].Entry[i].charaindex;			if( CHAR_CHECKINDEX( charaindex ) == FALSE )continue;			if( CHAR_getInt( charaindex, CHAR_WHICHTYPE ) != CHAR_TYPEPLAYER )continue;			// 戊穴件玉霜月			BATTLE_CommandSend( pindex, szBA );		}	}}BOOL BATTLE_IsHide( int charaindex ){	if( CHAR_getWorkInt( charaindex, CHAR_WORKBATTLECOM1 ) == BATTLE_COM_S_EARTHROUND0 		){		return TRUE;	}	return FALSE;}//*******************************************************////  田玄伙及戊穴件玉毛弁仿奶失件玄卞霜月//BOOL BATTLE_CommandSend( int charaindex, char *pszCommand )////********************************************************{	if( CHAR_CHECKINDEX( charaindex ) == FALSE )return FALSE;	if(	getfdFromCharaIndex( charaindex ) < 0 )return FALSE;	lssproto_B_send( getfdFromCharaIndex( charaindex ), pszCommand );		return TRUE;}BOOL BATTLE_MakeCharaString(	int battleindex,	char *pszCommand,	int	size){	int i, j, iOffset, charaindex, flg;	BATTLE_ENTRY	*pEntry;	char szBuffer[4096]="", *pszTop, *pszLast;	char szEscapeName[128], szEscapeTitle[128];	char szEscapePetName[128];	int rideflg = 0, petindex = -1, petlevel, pethp, petmaxhp;	if( BATTLE_CHECKINDEX( battleindex ) == FALSE )return FALSE;	pszTop = pszCommand;	pszLast = pszCommand+size-1;#if 1	sprintf( szBuffer, "BC|%X|", BattleArray[battleindex].field_att  );#else	sprintf( szBuffer, "BC|" );#endif	STRCPY_TAIL( pszTop, pszLast, szBuffer );	for( j = 0; j < 2; j ++ ){		if( j == 1 ){			iOffset = SIDE_OFFSET;	// 轾仇丹础扔奶玉及桦宁反皿仿旦允月		}else{			iOffset = 0;		}		pEntry = BattleArray[battleindex].Side[j].Entry;		for( i = 0; i < BATTLE_ENTRY_MAX; i ++ ){			charaindex = pEntry[i].charaindex;			if( CHAR_CHECKINDEX( charaindex ) == FALSE )continue;			if( CHAR_getWorkInt( charaindex, CHAR_WORKBATTLEFLG )				& CHAR_BATTLEFLG_ULTIMATE )continue;			flg = 0;			if( CHAR_getWorkInt( charaindex, CHAR_WORKBATTLEMODE )				== BATTLE_CHARMODE_INIT ) flg |= BC_FLG_NEW;			if( CHAR_getWorkInt( charaindex, CHAR_WORKBATTLEMODE )				== BATTLE_CHARMODE_RESCUE ) flg |= BC_FLG_NEW;			if( CHAR_getFlg( charaindex, CHAR_ISDIE ) == TRUE ){				flg |= BC_FLG_DEAD;			}else			if( CHAR_getWorkInt( charaindex, CHAR_WORKPOISON ) > 0 ){				flg |= BC_FLG_POISON;			}else#ifdef _MAGIC_WEAKEN      //   虚弱						if( CHAR_getWorkInt( charaindex, CHAR_WORKWEAKEN ) > 0 ){				flg |= BC_FLG_WEAKEN;			}else #endif#ifdef _MAGIC_DEEPPOISON  //   剧毒			if( CHAR_getWorkInt( charaindex, CHAR_WORKDEEPPOISON ) > 0 ){				flg |= BC_FLG_DEEPPOISON;			}else#endif#ifdef _MAGIC_NOCAST     //   沉默			if( CHAR_getWorkInt( charaindex, CHAR_WORKNOCAST ) > 0 ){				flg |= BC_FLG_NOCAST;			}else#endif#ifdef _MAGIC_BARRIER	  //   魔障			if( CHAR_getWorkInt( charaindex, CHAR_WORKBARRIER ) > 0 ){				flg |= BC_FLG_BARRIER;			}else #endif			if( CHAR_getWorkInt( charaindex, CHAR_WORKPARALYSIS ) > 0 ){				flg |= BC_FLG_PARALYSIS;			}else			if( CHAR_getWorkInt( charaindex, CHAR_WORKSLEEP ) > 0 ){				flg |= BC_FLG_SLEEP;			}else			if( CHAR_getWorkInt( charaindex, CHAR_WORKSTONE ) > 0 ){				flg |= BC_FLG_STONE;			}else			if( CHAR_getWorkInt( charaindex, CHAR_WORKDRUNK ) > 0 ){				flg |= BC_FLG_DRUNK;			}else			if( CHAR_getWorkInt( charaindex, CHAR_WORKCONFUSION ) > 0 ){				flg |= BC_FLG_CONFUSION;			}			if( CHAR_getInt( charaindex, CHAR_WHICHTYPE ) == CHAR_TYPEPLAYER ){				flg |= BC_FLG_PLAYER;			}			if( CHAR_getWorkInt( charaindex, CHAR_WORKBATTLEFLG ) & CHAR_BATTLEFLG_REVERSE ){				flg |= BC_FLG_REVERSE;			}			if( BATTLE_IsHide( charaindex ) == TRUE ){				flg |= BC_FLG_HIDE;			}#ifdef _PET_SKILL_SARS			// WON ADD 毒煞蔓延			if( CHAR_getWorkInt( charaindex, CHAR_WORKSARS ) > 0 ){				flg |= BC_FLG_SARS;			}#endif#ifdef _PROFESSION_SKILL			// WON ADD 人物职业技能			if( CHAR_getWorkInt( charaindex, CHAR_WORKDIZZY ) > 0 ){				flg |= BC_FLG_DIZZY;			// 晕眩				}			if( CHAR_getWorkInt( charaindex, CHAR_WORKENTWINE ) > 0 ){				flg |= BC_FLG_ENTWINE;			// 树根缠绕			}			if( CHAR_getWorkInt( charaindex, CHAR_WORKDRAGNET ) > 0 ){				flg |= BC_FLG_DRAGNET;			// 天罗地网				}			if( CHAR_getWorkInt( charaindex, CHAR_WORKICECRACK ) > 0 ){			//	flg |= BC_FLG_ICECRACK;			// 冰爆术	

⌨️ 快捷键说明

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