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

📄 battle.c

📁 石器时代2.0完整版源代码.已经加入新功能. 在REDHAT9下GCC3.4编译成功.
💻 C
📖 第 1 页 / 共 5 页
字号:
		print( "不明(%s)(%d)\n",			CHAR_getUseName( charaindex ),			CHAR_getInt( charaindex, CHAR_WHICHTYPE ) );		return BATTLE_ERR_TYPE;	}	pEntry = pBattle->Side[side].Entry;	for( i = iEntryFirst; i < iEntryMax; i ++ ){		if( pEntry[i].charaindex == -1 )break;	}	if( i == iEntryMax ){		return BATTLE_ERR_ENTRYMAX;	}	EntryInit( &pEntry[i] );	pEntry[i].charaindex = charaindex;	pEntry[i].bid = i + side * SIDE_OFFSET;	CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEINDEX,		battleindex );	CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE,		BATTLE_CHARMODE_INIT );    // shan 2001/12/27 Begin		{		int fd;		if( CHAR_getInt( charaindex, CHAR_WHICHTYPE)==CHAR_TYPEPLAYER ){			fd = CHAR_getWorkInt( charaindex, CHAR_WORKFD);				CONNECT_SetBattleRecvTime( fd, &NowTime);		}			    	}	// End	CHAR_setWorkInt( charaindex, CHAR_WORKBATTLESIDE, side );	CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEFLG, 0 );	CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, -1 );	CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM2, -1 );	CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM3, -1 );	CHAR_setWorkInt( charaindex, CHAR_WORKMODATTACK, 0 );	CHAR_setWorkInt( charaindex, CHAR_WORKMODDEFENCE, 0 );	CHAR_setWorkInt( charaindex, CHAR_WORKMODQUICK, 0 );	CHAR_setWorkInt( charaindex, CHAR_WORKDAMAGEABSROB, 0 );	CHAR_setWorkInt( charaindex, CHAR_WORKDAMAGEREFLEC, 0 );	CHAR_setWorkInt( charaindex, CHAR_WORKDAMAGEVANISH, 0 );	CHAR_setWorkInt( charaindex, CHAR_WORKMODCAPTURE, 0 );	CHAR_setFlg( charaindex, CHAR_ISATTACKED, 1 );	BATTLE_BadStatusAllClr( charaindex );	CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEWATCH, 0 );#ifdef _PETSKILL_RETRACE    CHAR_setWorkInt( charaindex, CHAR_WORKRETRACE, 0 );//追迹攻击#endif#ifdef _PETSKILL_BECOMEFOX //将媚惑术中招时间清除为-1     CHAR_setWorkInt( charaindex, CHAR_WORKFOXROUND, -1 ); #endif	return 0;}INLINE int _BATTLE_Exit( char *file, int line, int charaindex ,int battleindex){	BATTLE_ENTRY  *pEntry;	int i, j, k;	BATTLE *pBattle;	char szPet[32];	if( CHAR_CHECKINDEX( charaindex ) == FALSE )return BATTLE_ERR_CHARAINDEX;	if( BATTLE_CHECKINDEX( battleindex ) == FALSE ){		return BATTLE_ERR_BATTLEINDEX;	}#ifdef _PETSKILL_BECOMEFOX // 离开战斗时将媚惑术造成的变身效果清除    //print("\n检查图号:%s,%d", CHAR_getChar( charaindex, CHAR_NAME), CHAR_getInt( charaindex, CHAR_BASEIMAGENUMBER));    	if( CHAR_getInt( charaindex, CHAR_BASEIMAGENUMBER)==101749		|| CHAR_getWorkInt( charaindex, CHAR_WORKFOXROUND ) != -1 ){ //变成小狐狸		CHAR_setInt( charaindex, CHAR_BASEIMAGENUMBER, CHAR_getInt( charaindex, CHAR_BASEBASEIMAGENUMBER) );	    CHAR_setWorkInt( charaindex, CHAR_WORKFOXROUND, -1);		//print("\n变回去:%d",CHAR_getInt( charaindex, CHAR_BASEIMAGENUMBER));	}#endif#ifdef _PETSKILL_BECOMEPIG		if( CHAR_getInt( charaindex, CHAR_BECOMEPIG) > -1 			&& CHAR_getInt( charaindex, CHAR_WHICHTYPE ) == CHAR_TYPEPLAYER ){            CHAR_setInt( charaindex, CHAR_BASEIMAGENUMBER, CHAR_getInt( charaindex, CHAR_BECOMEPIG_BBI ) );            CHAR_complianceParameter( charaindex );	        CHAR_sendCToArroundCharacter( CHAR_getWorkInt( charaindex , CHAR_WORKOBJINDEX ));	        CHAR_send_P_StatusString( charaindex , CHAR_P_STRING_BASEBASEIMAGENUMBER);		}#endif#ifdef _MAGIC_NOCAST             // 精灵:沉默	// WON ADD	if( CHAR_getInt( charaindex, CHAR_WHICHTYPE ) == CHAR_TYPEPLAYER )		lssproto_NC_send( getfdFromCharaIndex( charaindex ), 0);//复原#endif		pBattle = &BattleArray[battleindex];	if( pBattle->use == FALSE )		return BATTLE_ERR_NOUSE;	for( j = 0; j < 2; j ++ ){		pEntry = pBattle->Side[j].Entry;		for( i = 0; i < BATTLE_ENTRY_MAX; i ++ ){			if( pEntry[i].charaindex != charaindex )				continue;			pEntry[i].charaindex = -1;			pEntry[i].escape = 0;			CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_FINAL );			CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEINDEX, -1 );#ifdef _LOSE_FINCH_ 			CHAR_setWorkInt( charaindex, CHAR_WORKSPETRELIFE, 0);#endif			if( CHAR_getInt( charaindex, CHAR_WHICHTYPE ) == CHAR_TYPEENEMY ){			    CHAR_endCharOneArray( charaindex );			}else if( CHAR_getInt( charaindex, CHAR_WHICHTYPE ) == CHAR_TYPEPLAYER ){				int petindex = pEntry[i+5].charaindex;				if( CHAR_getFlg( charaindex, CHAR_ISDIE ) == TRUE					||  CHAR_getInt( charaindex, CHAR_HP ) == TRUE )				{#ifdef _FIX_SPEED_UPLEVEL	 // WON ADD 修正加速					// Robin cancel					//if( CHAR_getFlg( charaindex, CHAR_ISDIE ) == TRUE ){					//}else					{						// Robin cancel						//if( CHAR_getWorkInt( charaindex, CHAR_WORKBATTLECOM1) != BATTLE_COM_ESCAPE )						{							unsigned int Dtimes;							unsigned int battletime;							int fd = getfdFromCharaIndex( charaindex );							Dtimes = BattleArray[battleindex].CreateTime;							battletime = (unsigned int)(BattleArray[battleindex].flgTime/100);															//if( CHAR_getWorkInt( charaindex, CHAR_WORKFLG) & WORKFLG_DEBUGMODE ){							//}else							{								CheckDefBTime( charaindex, fd, Dtimes, battletime, 10);//lowTime延迟时间							}						}					}#endif					CHAR_setFlg( charaindex, CHAR_ISDIE, 0 );					CHAR_setInt( charaindex, CHAR_HP, 1 );					// CoolFish: Faily PK 2001/8/3					CHAR_setWorkInt(charaindex, CHAR_WORKFMPKFLAG, -1);				}else	{#ifdef _BATTLE_TIMESPEED					// Robin cancel					//if( CHAR_getWorkInt( charaindex, CHAR_WORKBATTLECOM1) != BATTLE_COM_ESCAPE ) 					{						unsigned int Dtimes;						unsigned int battletime;						int fd = getfdFromCharaIndex( charaindex );						Dtimes = BattleArray[battleindex].CreateTime;						battletime = (unsigned int)(BattleArray[battleindex].flgTime/100);						//if( CHAR_getWorkInt( charaindex, CHAR_WORKFLG) & WORKFLG_DEBUGMODE )	{						//}else						{							CheckDefBTime( charaindex, fd, Dtimes, battletime, 0);//lowTime延迟时间						}					}#endif				}				if( CHAR_CHECKINDEX( petindex ) == TRUE ){					pEntry[i+5].charaindex = -1;					CHAR_setWorkInt( petindex, CHAR_WORKBATTLEMODE,	BATTLE_CHARMODE_NONE );					CHAR_setWorkInt( petindex, CHAR_WORKBATTLEINDEX, -1 );				}				BATTLE_BadStatusAllClr( charaindex );				CHAR_complianceParameter( charaindex );				CHAR_Skillupsend( charaindex );				// Robin 0730				if( CHAR_getWorkInt( charaindex, CHAR_WORKPETFALL)  )				{					CHAR_setWorkInt( charaindex, CHAR_WORKPETFALL, 0 );					CHAR_setInt( charaindex, CHAR_RIDEPET, -2 );				}				CHAR_send_P_StatusString( charaindex ,					CHAR_P_STRING_HP|CHAR_P_STRING_EXP|					CHAR_P_STRING_MP|CHAR_P_STRING_DUELPOINT|					CHAR_P_STRING_CHARM	|					CHAR_P_STRING_EARTH	|					CHAR_P_STRING_WATER	|					CHAR_P_STRING_FIRE	|					CHAR_P_STRING_WIND	|					CHAR_P_STRING_RIDEPET				);				// Robin 0730				if( CHAR_getInt( charaindex, CHAR_RIDEPET ) == -2 ){					CHAR_setInt( charaindex, CHAR_RIDEPET, -1 );				}				for( k = 0; k < CHAR_MAXPETHAVE; k ++ ){					petindex = CHAR_getCharPet( charaindex, k );					if( CHAR_CHECKINDEX( petindex ) == FALSE )continue;					if( CHAR_getInt( petindex, CHAR_MAILMODE) != CHAR_PETMAIL_NONE ) continue;					if( CHAR_getFlg( petindex, CHAR_ISDIE ) == TRUE					||  CHAR_getInt( petindex, CHAR_HP ) <= 0 ){						CHAR_setFlg( petindex, CHAR_ISDIE, 0 );						CHAR_setInt( petindex, CHAR_HP, 1 );					}					CHAR_setWorkInt( petindex, CHAR_WORKBATTLEMODE,	BATTLE_CHARMODE_NONE );#ifdef _LOSE_FINCH_ 					CHAR_setWorkInt( charaindex, CHAR_WORKSPETRELIFE, 0);#endif#ifdef _VARY_WOLF					if( CHAR_getInt( petindex, CHAR_BASEBASEIMAGENUMBER) != CHAR_getInt( petindex, CHAR_BASEIMAGENUMBER) ) // Robin fix 					{						CHAR_setInt( petindex, CHAR_BASEIMAGENUMBER, CHAR_getInt( petindex, CHAR_BASEBASEIMAGENUMBER));						sprintf( szPet, "K%d", k);						CHAR_sendStatusString( charaindex , szPet);										}#endif					BATTLE_BadStatusAllClr( petindex );					CHAR_complianceParameter( petindex );					CHAR_send_K_StatusString( charaindex , k,						CHAR_K_STRING_HP|CHAR_K_STRING_EXP|						CHAR_K_STRING_AI| CHAR_K_STRING_MP |						CHAR_K_STRING_ATK | CHAR_K_STRING_DEF |						CHAR_K_STRING_QUICK |						CHAR_K_STRING_EARTH	|						CHAR_K_STRING_WATER	|						CHAR_K_STRING_FIRE	|						CHAR_K_STRING_WIND					);				}				if( BattleArray[battleindex].type == BATTLE_TYPE_P_vs_P ){					int flg = 0;					CHAR_setFlg( charaindex, CHAR_ISDUEL, 0);					if( CHAR_getFlg( charaindex, CHAR_ISPARTY)) flg |= CHAR_FS_PARTY;					if( CHAR_getFlg( charaindex, CHAR_ISDUEL)) flg |= CHAR_FS_DUEL;					if( CHAR_getFlg( charaindex, CHAR_ISPARTYCHAT)) flg |= CHAR_FS_PARTYCHAT;					if( CHAR_getFlg( charaindex, CHAR_ISTRADECARD)) flg |= CHAR_FS_TRADECARD;					lssproto_FS_send( getfdFromCharaIndex(charaindex), flg);				}							lssproto_XYD_send( getfdFromCharaIndex(charaindex),					CHAR_getInt( charaindex, CHAR_X ),					CHAR_getInt( charaindex, CHAR_Y ),					CHAR_getInt( charaindex, CHAR_DIR ) );			}			break;		}	}	CHAR_PartyUpdate( charaindex, CHAR_N_STRING_HP );#ifdef _TIME_TICKET	{		int nowtime = time(NULL);		int tickettime = CHAR_getWorkInt( charaindex, CHAR_WORKTICKETTIME);		int totaltime;		char msg[1024];		if( tickettime > 0 && tickettime < nowtime ) {			//int floor, x, y;			CHAR_talkToCli( charaindex, -1, "谢谢光顾。", CHAR_COLORYELLOW);			if( CHAR_getWorkInt( charaindex, CHAR_WORKTICKETTIMESTART) > 0 ) {				totaltime = nowtime - CHAR_getWorkInt( charaindex, CHAR_WORKTICKETTIMESTART);				sprintf( msg, "总入场时间%d分%d秒。", totaltime/60, totaltime%60);				CHAR_talkToCli( charaindex, -1, msg, CHAR_COLORYELLOW);			}			CHAR_setWorkInt( charaindex, CHAR_WORKTICKETTIME, 0);			CHAR_setWorkInt( charaindex, CHAR_WORKTICKETTIMESTART, 0);			/*if( CHAR_getElderPosition( CHAR_getInt( charaindex, CHAR_LASTTALKELDER), &floor, &x, &y ) != TRUE ) {				CHAR_warpToSpecificPoint( charaindex, 1006, 15, 15);			}			else {				CHAR_warpToSpecificPoint( charaindex, floor, x, y);			}*/			CHAR_warpToSpecificPoint( charaindex, 7001, 41, 6);		}	}#endif	return BATTLE_ERR_NONE;}int BATTLE_PetDefaultExit(	int charaindex,	int battleindex){	int pno, pindex, iRet;	if( CHAR_CHECKINDEX( charaindex ) == FALSE )return BATTLE_ERR_CHARAINDEX;	if( CHAR_getInt( charaindex, CHAR_WHICHTYPE ) != CHAR_TYPEPLAYER) return 0;	pno = CHAR_getInt( charaindex, CHAR_DEFAULTPET );	if( pno < 0 )return 0;	pindex = CHAR_getCharPet( charaindex, pno );	iRet = BATTLE_Exit( pindex, battleindex );	if( iRet ){		iRet *= -1;	}else{		return 1;	}	return iRet;}int	BATTLE_PetDefaultEntry(	int charaindex,	int battleindex,	int side){	int pindex;#if 1	int		pno;	int		ret = 0;	pno = CHAR_getInt( charaindex, CHAR_DEFAULTPET );	if( pno == -1 ) return 0;	pindex = CHAR_getCharPet( charaindex, pno );	if( CHAR_CHECKINDEX( pindex ) &&		!CHAR_getFlg( pindex, CHAR_ISDIE ) &&		CHAR_getInt( pindex, CHAR_HP ) > 0  )	{		if( BATTLE_NewEntry( pindex, battleindex, side ) ){		}else{			ret = 0;		}	}	else {		CHAR_setInt( charaindex, CHAR_DEFAULTPET, -1 );	}	return ret;#else	for( i = 0; i < CHAR_MAXPETHAVE; i ++ ){		pindex = CHAR_getCharPet( charaindex, i );		if( CHAR_CHECKINDEX( pindex ) == FALSE )continue;		if( CHAR_getFlg( pindex, CHAR_ISDIE ) == TRUE )continue;		if( CHAR_getInt( pindex, CHAR_HP ) <= 0  )continue;		if( BATTLE_NewEntry( pindex, battleindex, side ) ){		}else{			CHAR_setInt( charaindex, CHAR_DEFAULTPET, i );			break;		}	}	if( i == CHAR_MAXPETHAVE ){		CHAR_setInt( charaindex, CHAR_DEFAULTPET, -1 );	}	return 0;#endif}int BATTLE_RescueEntry(	int charaindex, int toindex	){	int iRet = 0, battleindex, fd, pindex;	char szBuffer[256]="";#ifdef _BATTLE_TIMESPEED	fd = getfdFromCharaIndex( charaindex);	if( CONNECT_getBDTime( fd) > time( NULL) )	{		return 1;	}#endif	battleindex = CHAR_getWorkInt( toindex, CHAR_WORKBATTLEINDEX );	if( !BATTLE_CHECKINDEX( battleindex) ) return 1;	if( ( fd = getfdFromCharaIndex(charaindex) ) < 0 ) return 1;	if( CHAR_getWorkInt( toindex, CHAR_WORKBATTLEMODE ) == BATTLE_CHARMODE_FINAL	||  CHAR_getWorkInt( toindex, CHAR_WORKBATTLEINDEX ) == -1 ){		iRet = 1;	}	if( BattleArray[battleindex].type == BATTLE_TYPE_P_vs_P ){		iRet = 1;	}else{		iRet = BATTLE_NewEntry(			charaindex,			battleindex,			CHAR_getWorkInt( toindex, CHAR_WORKBATTLESIDE ) );	}	if( iRet == 0 ){		CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_RESCUE );		iRet = BATTLE_PetDefaultEntry(			charaindex,			battleindex,			CHAR_getWorkInt( toindex, CHAR_WORKBATTLESIDE )		);	}	if( iRet == 0 ){		int		flg;		if( CHAR_getInt( charaindex, CHAR_DEFAULTPET ) >= 0 ){			pindex = CHAR_getCharPet( charaindex, CHAR_getInt( charaindex, CHAR_DEFAULTPET ) );			CHAR_setWorkInt( pindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_RESCUE );		}		//snprintf( szBuffer, sizeof( szBuffer ), "(%s)加入作战。",		//	CHAR_getUseName( charaindex ) );		//BATTLE_BroadCast( battleindex, szBuffer, CHAR_COLORYELLOW );		if( ( fd = getfdFromCharaIndex(charaindex) ) != -1 ){			lssproto_EN_send( fd, BattleArray[battleindex].type, BattleArray[battleindex].field_no );		}		flg = (BattleArray[battleindex].Side[			CHAR_getWorkInt( toindex, CHAR_WORKBATTLESIDE)].flg			& BSIDE_FLG_HELP_OK)? TRUE:FALSE;		lssproto_HL_send( fd, flg);		sprintf( szBuffer, "BP|%X|%X|%X",			BATTLE_Index2No( battleindex, charaindex ), BP_FLG_JOIN, CHAR_getInt(charaindex, CHAR_MP ) );		BATTLE_CommandSend( charaindex, szBuffer );	}else{		snprintf( szBuffer, sizeof( szBuffer ), "无法参战。" );        CHAR_talkToCli( charaindex, -1, szBuffer, CHAR_COLORYELLOW);		if( ( fd = getfdFromCharaIndex(charaindex) ) != -1 ){			lssproto_EN_send( fd, FALSE, BattleArray[battleindex].field_no );		}	}	BATTLE_ClearGetExp( charaindex );	return iRet;}BOOL BATTLE_RescueTry( int charaindex){    int     x,y;    OBJECT  object;    int     pfound = FALSE;    int     result = FALSE;	int		fd;	int		i;	int		cnt;	fd = getfdFromCharaIndex( charaindex);	if( fd == -1 ) return FALSE;#if 1	// 修正利用参战重复加入战斗	Robin	if( CHAR_getWorkInt( charaindex, CHAR_WORKBATTLEMODE) != BATTLE_CHARMODE_NONE) {		CHAR_talkToCli( charaindex, -1, " 重复加入战斗! ", CHAR_COLORRED);		print("\n 改封包!!重复加入战斗!:%s ", CHAR_getChar( charaindex, CHAR_CDKEY) );		//lssproto_EN_send( fd, FALSE, 0 );		return FALSE;	}#endif    if( CHAR_getWorkInt( charaindex, CHAR_WORKPARTYMODE) != CHAR_PARTY_NONE ) {		lssproto_EN_send( fd, FALSE, 0 );    	return FALSE;	}#ifdef _BATTLE_TIMESPEED	if( CONNECT_getBDTime( fd) > time( NULL) )	{		return FALSE;	}#endif	for( i = 0; i < CONNECT_WINDOWBUFSIZE; i ++ ) {        CONNECT_setBattlecharaindex(fd,i,-1);    }    CHAR_getCoordinationDir( CHAR_getInt( charaindex, CHAR_DIR ) ,                             CHAR_getInt( charaindex , CHAR_X ),                             CHAR_getInt( charaindex , CHAR_Y ) ,                             1 , &x , &y );	cnt = 0;    for( object = MAP_getTopObj( CHAR_getInt( charaindex, CHAR_FLOOR),x,y) ;         object ;         object = NEXT_OBJECT(object ) )    {        int toindex;        int objindex = GET_OBJINDEX(object);        if( OBJECT_getType( objindex) != OBJTYPE_CHARA) continue;        toindex = OBJECT_getIndex( objindex);        if( CHAR_getInt( toindex, CHAR_WHICHTYPE) != CHAR_TYPEPLAYER ) continue;        pfound = TRUE;        if( CHAR_getWorkInt( toindex, CHAR_WORKBATTLEMODE) == BATTLE_CHARMODE_NONE ){			continue;		}		if( BattleArray[ CHAR_getWorkInt( toindex, CHAR_WORKBATTLEINDEX)].type			!= BATTLE_TYPE_P_vs_E ){			continue;

⌨️ 快捷键说明

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