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

📄 battle.c.bak

📁 石器时代8.0服务端完整源代码。可以直接编译
💻 BAK
📖 第 1 页 / 共 5 页
字号:
				pBattle->iEntryBack2[k] = pBattle->Side[j].Entry[i].charaindex;			}else{				pBattle->iEntryBack[k] = -1;				pBattle->iEntryBack2[k] = -1;			}			k ++;		}	}	return 0;}int BATTLE_NewEntry(	int charaindex,	int battleindex,	int side){	BATTLE_ENTRY *pEntry;	BATTLE *pBattle;	int i, iEntryMax, iEntryFirst;	if( BATTLE_CHECKSIDE( side ) == FALSE )return BATTLE_ERR_PARAM;	if( BATTLE_CHECKINDEX( battleindex ) == FALSE )return BATTLE_ERR_BATTLEINDEX;	if( CHAR_CHECKINDEX( charaindex ) == FALSE )return BATTLE_ERR_CHARAINDEX;	pBattle = &BattleArray[battleindex];	if( pBattle->use == FALSE )return BATTLE_ERR_NOUSE;	if( side < 0 || side > 1 ){		return BATTLE_ERR_PARAM;	}	switch( CHAR_getInt( charaindex, CHAR_WHICHTYPE ) ){		int work;	case CHAR_TYPEPLAYER:		if( pBattle->Side[side].type != BATTLE_S_TYPE_PLAYER ){			return BATTLE_ERR_TYPE;		}		iEntryFirst = 0;		iEntryMax = BATTLE_PLAYER_MAX;		break;	case CHAR_TYPEENEMY:		if( pBattle->Side[side].type != BATTLE_S_TYPE_ENEMY ){			return BATTLE_ERR_TYPE;		}		iEntryFirst = 0;		iEntryMax = BATTLE_ENTRY_MAX;		break;	case CHAR_TYPEPET:		if( pBattle->Side[side].type != BATTLE_S_TYPE_PLAYER ){			return BATTLE_ERR_TYPE;		}		work = CHAR_getWorkInt( charaindex, CHAR_WORKPLAYERINDEX );		pEntry = pBattle->Side[side].Entry;		work =  BATTLE_Index2No( battleindex, work );		 work -= side * SIDE_OFFSET;		 work += 5;		iEntryFirst = work;		iEntryMax = work+1;		break;	default:		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 _PROFESSION_SKILL			// WON ADD 人物职业技能	CHAR_setWorkInt( charaindex, CHAR_WORKTRAP, 0 );	//陷阱		BATTLE_ProfessionStatus_init( battleindex, charaindex );#endif#ifdef _PETSKILL_ACUPUNCTURE    CHAR_setWorkInt( charaindex, CHAR_WORKACUPUNCTURE, 0 );//针刺外皮#endif#ifdef _PETSKILL_RETRACE    CHAR_setWorkInt( charaindex, CHAR_WORKRETRACE, 0 );//追迹攻击#endif#ifdef _PETSKILL_BECOMEFOX //将媚惑术中招时间清除为-1     CHAR_setWorkInt( charaindex, CHAR_WORKFOXROUND, -1 ); #endif#ifdef _PROFESSION_ADDSKILL 	//结界清除    CHAR_setWorkInt( charaindex, CHAR_WORKFIXEARTHAT_BOUNDARY, 0 );	CHAR_setWorkInt( charaindex, CHAR_WORKFIXWATERAT_BOUNDARY, 0 );	CHAR_setWorkInt( charaindex, CHAR_WORKFIXFIREAT_BOUNDARY, 0 );	CHAR_setWorkInt( charaindex, CHAR_WORKFIXWINDAT_BOUNDARY, 0 );	CHAR_setWorkInt( charaindex, CHAR_DOOMTIME, 0 );//世界末日集气	CHAR_setWorkInt( charaindex, CHAR_WORK_com1, 0 );	CHAR_setWorkInt( charaindex, CHAR_WORK_toNo, 0 );	CHAR_setWorkInt( charaindex, CHAR_WORK_mode, 0 );	CHAR_setWorkInt( charaindex, CHAR_WORK_skill_level, 0 );	CHAR_setWorkInt( charaindex, CHAR_WORK_array, 0 );#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 _PROFESSION_ADDSKILL	CHAR_setWorkInt( charaindex, CHAR_DOOMTIME, 0 );//世界末日集气#endif#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 _ACTION_BULLSCR#ifndef _BULL_CUTBULLSCR					{						if( CHAR_getInt( charaindex, CHAR_ABULLSTART) == 10 ){							char buf[256];							sprintf( buf, "因战斗中倒地,活动积分不予计算。");							CHAR_talkToCli( charaindex, -1, buf, CHAR_COLORYELLOW);						}					}#endif#endif#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#ifdef _ACTION_BULLSCR#ifndef _BULL_CUTBULLSCR					if( CHAR_getInt( charaindex, CHAR_ABULLSTART) == 10 &&							BattleArray[battleindex].CreateTime > 0 )	{						if( CHAR_getWorkInt( charaindex, CHAR_WORKBATTLECOM1) != BATTLE_COM_ESCAPE &&							CHAR_getWorkInt( charaindex, CHAR_WORKBATTLEWATCH ) != 1 )	{							char buf[256];							unsigned int Dtimes;							int ntime, deftime=0,Scount=0;							int nowtime = (unsigned int)time(NULL);//CHAR_BULLSHOWCOUNT							Scount = CHAR_getWorkInt( charaindex, CHAR_BULLSHOWCOUNT);							if( Scount < 0 ) Scount = 0;							ntime = CHAR_getInt( charaindex, CHAR_ABULLTIME);							Dtimes = BattleArray[battleindex].CreateTime;							deftime = (nowtime - (int)Dtimes)-5;							if( ntime < 0 ) ntime = 0;							if( deftime > (60*60) ) deftime = (60*60);							if( deftime < 0 ) deftime = 0;							if(	CHAR_getWorkInt( charaindex, CHAR_WORKGETEXP) >								(BattleArray[battleindex].enemynum * 2) || 									BattleArray[battleindex].type == BATTLE_TYPE_P_vs_P){								ntime = (ntime + deftime);								Scount += deftime;								if( Scount >= (5*60) ){									Scount = 0;									sprintf( buf, "战斗时间已累积%d分%d秒。", ntime/60, ntime%60);									CHAR_talkToCli( charaindex, -1, buf, CHAR_COLORYELLOW);								}								CHAR_setWorkInt( charaindex, CHAR_BULLSHOWCOUNT, Scount);								CHAR_setInt( charaindex, CHAR_ABULLTIME, ntime);								if( ntime >= (60*60) ){//活动一小时								//if( ntime > 10 ){//测试加快 //CHAR_setWorkInt( charaindex, CHAR_WORKGETEXP, 0 );									int nScore = CHAR_getInt( charaindex, CHAR_ABULLSCORE);									ntime = ntime - (60*60);									ntime = ( ntime<0)?0:ntime;									CHAR_setInt( charaindex, CHAR_ABULLTIME, ntime);									CHAR_setInt( charaindex, CHAR_ABULLSCORE, nScore+10 );									sprintf( buf, "战斗满1小时时间取得10分,总共取得%d绩分。", nScore+10);									CHAR_talkToCli( charaindex, -1, buf, CHAR_COLORYELLOW);								}							}else{								sprintf( buf, "因此场战斗取得经验值不足,活动积分不予计算。");								CHAR_talkToCli( charaindex, -1, buf, CHAR_COLORYELLOW);							}						}else{							if( CHAR_getWorkInt( charaindex, CHAR_WORKBATTLECOM1) == BATTLE_COM_ESCAPE){								char buf[256];								sprintf( buf, "因战斗逃跑,活动积分不予计算。");								CHAR_talkToCli( charaindex, -1, buf, CHAR_COLORYELLOW);							}						}					}					//BattleArray[battleindex].CreateTime = 0;#endif#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#ifdef _PROFESSION_SKILL			// WON ADD 人物职业技能					// 遗忘					if( CHAR_getWorkInt( petindex, CHAR_WORKOBLIVION ) > 0 ) // Robin fix					{						int pet_no = CHAR_getInt( charaindex, CHAR_DEFAULTPET );						CHAR_setWorkInt( petindex, CHAR_WORKOBLIVION, 0 );						// 宠物编号						sprintf( szPet, "W%d", pet_no);						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;#ifdef _CHANNEL_MODIFY					if( CHAR_getFlg( charaindex, CHAR_ISTELL)) flg |= CHAR_FS_TELL;					if( CHAR_getFlg( charaindex, CHAR_ISFM)) flg |= CHAR_FS_FM;					if( CHAR_getFlg( charaindex, CHAR_ISOCC)) flg |= CHAR_FS_OCC;					if( CHAR_getFlg( charaindex, CHAR_ISCHAT)) flg |= CHAR_FS_CHAT;					if( CHAR_getFlg( charaindex, CHAR_ISSAVE)) flg |= CHAR_FS_SAVE;#endif					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{

⌨️ 快捷键说明

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