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

📄 battle.c

📁 石器时代2.0完整版源代码.已经加入新功能. 在REDHAT9下GCC3.4编译成功.
💻 C
📖 第 1 页 / 共 5 页
字号:
	case ITEM_AXE:		wepon = 0;break;	case ITEM_CLUB:		wepon = 100;break;	case ITEM_SPEAR:	wepon = 200;break;	case ITEM_BOW:		wepon = 2498;break;	case ITEM_BOOMERANG:wepon = 500;break;	case ITEM_BOUNDTHROW:wepon = 600;break;	case ITEM_BREAKTHROW:wepon = 700;break;	}	itemindex =	CHAR_getItemIndex( charaindex, CHAR_ARM );	if( ITEM_CHECKINDEX( itemindex ) == TRUE ){		ITEM_endExistItemsOne( itemindex );	}	if( wepon >= 0 ){		itemindex = ITEM_makeItemAndRegist( wepon ) ;		CHAR_setItemIndex( charaindex, CHAR_ARM, itemindex );		ITEM_setWorkInt( itemindex, ITEM_WORKCHARAINDEX, charaindex );		ITEM_setWorkInt( itemindex, ITEM_WORKOBJINDEX, -1 );	}	switch( DoujyouWeponTbl[work] ){	case -1:	case ITEM_AXE:	case ITEM_CLUB:	case ITEM_SPEAR:		return 0;	}	return 1;}static int BattleERSkill1[]={3, 10, 11, 12, 30, 31, 40, 41, 50, 51, 52, 60, 61, 80, 90, 110, 120, 150, 210,303, 309, 315, 321, 503, 504, 506, 507, 541, 542, 543, 544, 545, 546, 547, 575, 579, 580,606, 613, 615 };static int BattleERSkill2[]={12, 13, 20, 41, 52, 152, 210, 306, 312, 318, 324, 325, 500, 501, 502, 505,508, 541, 542, 543, 544, 545, 546, 547, 576, 580, 594, 606, 613, 616 };void BATTLE_EnemyRandowSetSkill( int enemyindex, int skillType){	int i;	switch( skillType){	case 1:		for( i=0; i<7; i++){			int skillarray, skillID, Ri;			Ri = RAND( 0, arraysizeof( BattleERSkill1) - 1 );			skillID = BattleERSkill1[Ri];			skillarray = PETSKILL_getPetskillArray( skillID);			if( PETSKILL_CHECKINDEX( skillarray) == FALSE ){				CHAR_setPetSkill( enemyindex, i, 1);				//andy_log				print("ANDY EnemyRandowSetSkill( ) skillID:%d array:%d err \n",					skillID, skillarray	);				continue;			}			CHAR_setPetSkill( enemyindex, i, skillID);		}		break;	case 2:		for( i=0; i<7; i++){			int skillarray, skillID, Ri;			Ri = RAND( 0, arraysizeof( BattleERSkill2) - 1 );			skillID = BattleERSkill2[Ri];			skillarray = PETSKILL_getPetskillArray( skillID);			if( PETSKILL_CHECKINDEX( skillarray) == FALSE ){				CHAR_setPetSkill( enemyindex, i, 1);				//andy_log				print("ANDY *EnemyRandowSetSkill( ) skillID:%d array:%d err \n",					skillID, skillarray	);				continue;			}			CHAR_setPetSkill( enemyindex, i, skillID);		}		break;    default : return;        break;	}}int BATTLE_CreateVsEnemy( int charaindex, int mode, int npcindex ){	int battleindex, iRet = 0,  enemyindex, i, pindex;	int	*enemytable = NULL, fd, field_no, baselevel = 0;	int skillType=0;	int EnemyList[20];	if( CHAR_CHECKINDEX( charaindex ) == FALSE )return BATTLE_ERR_CHARAINDEX;	if( CHAR_getWorkInt( charaindex, CHAR_WORKBATTLEMODE ) != BATTLE_CHARMODE_NONE ){		CHAR_talkToCli( charaindex, -1, "二重遭遇。", CHAR_COLORYELLOW );		return BATTLE_ERR_ALREADYBATTLE;	}	battleindex = BATTLE_CreateBattle(  );	if( battleindex < 0 )return BATTLE_ERR_NOTASK;	if( CHAR_CHECKINDEX( npcindex) ){		skillType = CHAR_getWorkInt( npcindex, CHAR_NPCWORKINT11);	}	field_no = BATTLE_getBattleFieldNo(		CHAR_getInt( charaindex, CHAR_FLOOR ) ,		CHAR_getInt( charaindex, CHAR_X ) ,		CHAR_getInt( charaindex, CHAR_Y ) );	if( field_no > BATTLE_MAP_MAX || field_no < 0 ){		field_no = RAND( 0, BATTLE_MAP_MAX );	}	BattleArray[battleindex].Side[0].type = BATTLE_S_TYPE_PLAYER;	BattleArray[battleindex].Side[1].type = BATTLE_S_TYPE_ENEMY;	BattleArray[battleindex].leaderindex = charaindex;	BattleArray[battleindex].type = BATTLE_TYPE_P_vs_E;	BattleArray[battleindex].createindex = npcindex;	BattleArray[battleindex].field_no = field_no;	//andy_edit 2002/10/23	/*	if( (iRet = BATTLE_PartyNewEntry( charaindex, battleindex, 0 ) ) ){		goto BATTLE_CreateVsEnemy_End;	}	*/	BattleArray[battleindex].Side[0].flg &= ~BSIDE_FLG_HELP_OK;	if( mode == 0 ) {		enemytable = ENEMY_getEnemy( charaindex,								   CHAR_getInt( charaindex, CHAR_X),								   CHAR_getInt( charaindex, CHAR_Y));	}else if( mode == 1 ) {		enemytable = NPC_Util_getEnemy( npcindex, charaindex);	}else if( mode == 2 ) {		enemytable = Doujyou_GetEnemy( npcindex, charaindex );		baselevel = CHAR_getInt( npcindex, CHAR_LV );		BattleArray[battleindex].norisk = 1;	}	if( enemytable == NULL ) {		iRet = BATTLE_ERR_NOENEMY;		goto BATTLE_CreateVsEnemy_End;	}	for( i = 0; *(enemytable+i)!= -1 && i < arraysizeof( EnemyList )-1; i ++ ){		EnemyList[i] = *(enemytable+i);	}	EnemyList[i] = -1;#ifdef _BATTLE_TIMESPEED	fd = getfdFromCharaIndex( charaindex );	BattleArray[battleindex].CreateTime = time(NULL);	BattleArray[battleindex].flgTime = 200; // 1/100 sec#endif	for( i = 0; EnemyList[i] != -1; i ++ ){		int work;		enemyindex = ENEMY_createEnemy( EnemyList[i], baselevel );	if( skillType > 0 ){		//int ENEMY_RandomChange( int enemyindex, int tempno ){		BATTLE_EnemyRandowSetSkill( enemyindex, skillType);	}		if( enemyindex < 0 ){			iRet = BATTLE_ERR_NOENEMY;			goto BATTLE_CreateVsEnemy_End;		}		if( mode == 2 ){			if( i == 0 ){				CHAR_setInt( enemyindex, CHAR_BASEBASEIMAGENUMBER,					CHAR_getInt( npcindex, CHAR_BASEBASEIMAGENUMBER ) );				CHAR_setInt( enemyindex, CHAR_BASEIMAGENUMBER,					CHAR_getInt( npcindex, CHAR_BASEBASEIMAGENUMBER ) );				CHAR_setChar( enemyindex, CHAR_NAME,					CHAR_getChar( npcindex, CHAR_NAME ) );				CHAR_complianceParameter( enemyindex );			}		}		if( ( iRet = BATTLE_NewEntry( enemyindex,  battleindex, 1 ) ) ){			goto BATTLE_CreateVsEnemy_End;		}		if( CHAR_getInt( enemyindex, CHAR_DUELPOINT ) > 0 ){			BattleArray[battleindex].dpbattle = 1;		}		work = CHAR_getInt( enemyindex, CHAR_BASEBASEIMAGENUMBER );		if( 100466 <= work && work <= 100471 ){			CHAR_setWorkInt( enemyindex, CHAR_WORKBATTLEFLG,				CHAR_getWorkInt( enemyindex, CHAR_WORKBATTLEFLG ) | CHAR_BATTLEFLG_ABIO );			print( "(%s)无生物\n", CHAR_getUseName( enemyindex ) );		}	}	//andy_edit 2002/10/23	if( (iRet = BATTLE_PartyNewEntry( charaindex, battleindex, 0 ) ) ){		goto BATTLE_CreateVsEnemy_End;	}	{		BATTLE_ENTRY *pEntry, EntryWork;		pEntry = BattleArray[battleindex].Side[1].Entry;		for( i = 0; i < 5; i ++ ){			EntryWork = pEntry[i];			pEntry[i] = pEntry[i+5];			pEntry[i+5] = EntryWork;			pEntry[i].bid = i + SIDE_OFFSET;			pEntry[i+5].bid = i + 5 + SIDE_OFFSET;		}	}BATTLE_CreateVsEnemy_End:;	fd = getfdFromCharaIndex( charaindex);	if( iRet ){		BATTLE_ExitAll( battleindex );		BATTLE_DeleteBattle( battleindex );		if( fd != -1 )lssproto_EN_send( fd, FALSE, field_no );	}else{		if( fd != -1 ){			if( BattleArray[battleindex].dpbattle ){				lssproto_EN_send( fd, BATTLE_TYPE_DP_BATTLE, field_no );			}else{				if( mode == 1 ){					lssproto_EN_send( fd, BATTLE_TYPE_BOSS_BATTLE, field_no );				}else{					lssproto_EN_send( fd, BattleArray[battleindex].type, field_no );				}			}		}else	{			BATTLE_ExitAll( battleindex );			BATTLE_DeleteBattle( battleindex );			return iRet;		}		for( i = 1; i < CHAR_PARTYMAX; i ++ ){			pindex = CHAR_getWorkInt( charaindex, i + CHAR_WORKPARTYINDEX1 );			if( CHAR_CHECKINDEX( pindex ) == FALSE )continue;			if( CHAR_getWorkInt( pindex, CHAR_WORKBATTLEMODE ) ==				BATTLE_CHARMODE_FINAL ) continue;			fd = getfdFromCharaIndex(pindex);			if( fd != -1 ){				if( mode == 1 ){					lssproto_EN_send( fd, BATTLE_TYPE_BOSS_BATTLE, field_no );				}else{					lssproto_EN_send( fd, BattleArray[battleindex].type, field_no );				}			}		}		if( CHAR_getWorkInt( charaindex, CHAR_WORKACTION) != -1 ) {			CHAR_sendWatchEvent(					CHAR_getWorkInt( charaindex, CHAR_WORKOBJINDEX),					CHAR_ACTSTAND,					NULL, 0, FALSE);			CHAR_setWorkInt( charaindex, CHAR_WORKACTION, -1);		}		CHAR_sendBattleEffect( charaindex, ON);		for( i = 1; i < CHAR_PARTYMAX; i ++ ){			pindex = CHAR_getWorkInt( charaindex, i + CHAR_WORKPARTYINDEX1 );			if( CHAR_CHECKINDEX( pindex ) == FALSE )continue;			if( CHAR_getWorkInt( pindex, CHAR_WORKACTION) != -1 ) {				CHAR_sendWatchEvent(						CHAR_getWorkInt( pindex, CHAR_WORKOBJINDEX),						CHAR_ACTSTAND,						NULL, 0, FALSE);				CHAR_setWorkInt( pindex, CHAR_WORKACTION, -1);			}			CHAR_sendBattleEffect( pindex, ON);		}	}	return iRet;}int BATTLE_CreateVsPlayer( int charaindex0, int charaindex1 ){	int battleindex, pindex, field_no,	i, j, charaindex[2],	parent[2], fd,	iRet = 0;	if( CHAR_CHECKINDEX( charaindex0 ) == FALSE )return BATTLE_ERR_CHARAINDEX;	if( CHAR_CHECKINDEX( charaindex1 ) == FALSE )return BATTLE_ERR_CHARAINDEX;	if( CHAR_getWorkInt( charaindex0, CHAR_WORKBATTLEMODE ) != BATTLE_CHARMODE_NONE ){		CHAR_talkToCli( charaindex0, -1, "二重遭遇。", CHAR_COLORYELLOW );		CHAR_talkToCli( charaindex1, -1, "二重遭遇。", CHAR_COLORYELLOW );		return BATTLE_ERR_ALREADYBATTLE;	}	if( CHAR_getWorkInt( charaindex1, CHAR_WORKBATTLEMODE ) != BATTLE_CHARMODE_NONE ){		CHAR_talkToCli( charaindex0, -1, "二重遭遇。", CHAR_COLORYELLOW );		CHAR_talkToCli( charaindex1, -1, "二重遭遇。", CHAR_COLORYELLOW );		return BATTLE_ERR_ALREADYBATTLE;	}	field_no = BATTLE_getBattleFieldNo(		CHAR_getInt( charaindex0, CHAR_FLOOR ) ,		CHAR_getInt( charaindex0, CHAR_X ),		CHAR_getInt( charaindex0, CHAR_Y ) );	charaindex[0] = charaindex0;	charaindex[1] = charaindex1;	for( j = 0; j < 2; j ++ ){		if( CHAR_getWorkInt( charaindex[j], CHAR_WORKBATTLEMODE ) != 0 ){			return BATTLE_ERR_ALREADYBATTLE;		}	}	for( j = 0; j < 2; j ++ ){		if( CHAR_getWorkInt( charaindex[j], CHAR_WORKPARTYMODE ) == CHAR_PARTY_LEADER ){			parent[j] = charaindex[j];		}else			if( CHAR_getWorkInt( charaindex[j], CHAR_WORKPARTYMODE ) == CHAR_PARTY_CLIENT ){				parent[j] = CHAR_getWorkInt( charaindex[j], CHAR_WORKPARTYINDEX1 );			}else{				parent[j] = -1;			}	}	if( parent[0] != -1 && parent[0] == parent[1] ){		return BATTLE_ERR_SAMEPARTY;	}	battleindex = BATTLE_CreateBattle( );	if( battleindex < 0 )return BATTLE_ERR_NOTASK;	BattleArray[battleindex].Side[0].type = BATTLE_S_TYPE_PLAYER;	BattleArray[battleindex].Side[1].type = BATTLE_S_TYPE_PLAYER;	BattleArray[battleindex].leaderindex = charaindex0;#ifdef _AUTO_PK	strcpy(BattleArray[battleindex].leadercdkey,CHAR_getChar(charaindex0,CHAR_CDKEY));	strcpy(BattleArray[battleindex].leadername,CHAR_getChar(charaindex0,CHAR_NAME));	BattleArray[battleindex].rivalindex = charaindex1;	strcpy(BattleArray[battleindex].rivalcdkey,CHAR_getChar(charaindex1,CHAR_CDKEY));	strcpy(BattleArray[battleindex].rivalname,CHAR_getChar(charaindex1,CHAR_NAME));#endif	BattleArray[battleindex].type = BATTLE_TYPE_P_vs_P;	BattleArray[battleindex].dpbattle = 1;	BattleArray[battleindex].field_no = field_no;#ifdef _BATTLE_TIMESPEED	BattleArray[battleindex].CreateTime = time(NULL);#endif	for( j = 0; j < 2; j ++ ){		iRet = BATTLE_PartyNewEntry( charaindex[j], battleindex, j );		if( iRet ){			goto BATTLE_CreateVsPlayer_End;		}		BattleArray[battleindex].Side[j].flg &= ~BSIDE_FLG_HELP_OK;	}BATTLE_CreateVsPlayer_End:;	if( iRet ){		BATTLE_ExitAll( battleindex );		BATTLE_DeleteBattle( battleindex );		fd = getfdFromCharaIndex(charaindex[0]);		if( fd != -1 )lssproto_EN_send( fd, FALSE, field_no );	}else{		for( j = 0; j < 2; j ++ ){			fd = getfdFromCharaIndex(charaindex[j]);			if( fd != -1 )lssproto_EN_send( fd, BattleArray[battleindex].type, field_no );			if( CHAR_getWorkInt( charaindex[j], CHAR_WORKACTION) != -1 ) {				CHAR_sendWatchEvent(						CHAR_getWorkInt( charaindex[j], CHAR_WORKOBJINDEX),						CHAR_ACTSTAND,						NULL, 0, FALSE);				CHAR_setWorkInt( charaindex[j], CHAR_WORKACTION, -1);			}			CHAR_sendBattleEffect( charaindex[j], ON);			for( i = 1; i < CHAR_PARTYMAX; i ++ ){				pindex = CHAR_getWorkInt( charaindex[j], i + CHAR_WORKPARTYINDEX1 );				if( CHAR_CHECKINDEX( pindex ) == FALSE )continue;				if( CHAR_getWorkInt( pindex, CHAR_WORKBATTLEMODE ) ==					BATTLE_CHARMODE_FINAL ) continue;				fd = getfdFromCharaIndex(pindex);				if( fd != -1 )lssproto_EN_send( fd, BattleArray[battleindex].type, field_no );				if( CHAR_getWorkInt( pindex, CHAR_WORKACTION) != -1 ) {					CHAR_sendWatchEvent(							CHAR_getWorkInt( pindex, CHAR_WORKOBJINDEX),							CHAR_ACTSTAND,							NULL, 0, FALSE);					CHAR_setWorkInt( pindex, CHAR_WORKACTION, -1);				}				CHAR_sendBattleEffect( pindex, ON );			}		}	}	return iRet;}//*********************************************************//// 棋爵迕田玄伙正旦弁毛馨笛[玄永皿及戚卞涩烂允月//int BATTLE_WatchLink( int topbattleindex, int battleindex )//////*********************************************************{	BATTLE *pWork, *pTop;	if( BATTLE_CHECKINDEX( battleindex ) == FALSE ){		fprint( "err:battle index 奇怪(%d)\n", battleindex );		return FALSE;	}	if( BATTLE_CHECKINDEX( topbattleindex ) == FALSE ){		fprint( "err:battle index 奇怪(%d)\n", topbattleindex );		return FALSE;	}	pTop = &BattleArray[topbattleindex];	if( BATTLE_CHECKADDRESS( pTop ) == FALSE ){		fprint( "err:battle address 奇怪(%p)\n", pTop );		return FALSE;	}	pWork = pTop->pNext;	// 田永弁失永皿	if( pWork ){		if( BATTLE_CHECKADDRESS( pWork ) == FALSE ){			fprint( "err:battle address 奇怪(%p)\n", pWork );			return FALSE;		}	}	// 愤坌毛蟆及戚卞允月	pTop->pNext = &BattleArray[battleindex];	// 愤坌及蟆田玄伙毛涩烂	BattleArray[battleindex].pBefore = pTop;	// 愤坌及戚田玄伙毛涩烂	BattleArray[battleindex].pNext = pWork;	// 戚及蟆反愤坌	if( pWork ){		pWork->pBefore = &BattleArray[battleindex];	}	return TRUE;}//*********************************************************//// 棋爵迕田玄伙正旦弁毛夫午勾  仁//int BATTLE_WatchUnLink( int battleindex )//////*********************************************************{	BATTLE *pTop;	if( BATTLE_CHECKINDEX( battleindex ) == FALSE ){		fprint( "err:battle index 奇怪(%d)\n", battleindex );		return FALSE;	}	// 愤坌毛蟆及田玄伙	pTop = BattleArray[battleindex].pBefore;	if( pTop ){		if( BATTLE_CHECKADDRESS( pTop ) == FALSE ){			fprint( "err:battle address 奇怪(%p)\n", pTop );		}else{			// 勾卅亢卅云仄			pTop->pNext = BattleArray[battleindex].pNext;		}	}	if( BattleArray[battleindex].pNext ){		if( BATTLE_CHECKADDRESS( BattleArray[battleindex].pNext ) == FALSE ){			fprint( "err:battle address 奇怪(%p)\n", BattleArray[battleindex].pNext );		}else{			BattleArray[battleindex].pNext->pBefore = pTop;		}	}	// 愤坌及蟆田玄伙毛涩烂	BattleArray[battleindex].pBefore = NULL;	// 愤坌及戚田玄伙反  仄	BattleArray[battleindex].pNext = NULL;	return TRUE;}//*********************************************************//// 棋爵迕卞田玄伙正旦弁毛综岳允月//int BATTLE_CreateForWatcher( int charaindex, int topbattleindex )////    曰袄 BATTLE_ERR////*********************************************************{	int battleindex, field_no , pindex,	i, fd,	iRet = 0;	// 由仿丢□正民尼永弁	if( CHAR_CHECKINDEX( charaindex ) == FALSE )return BATTLE_ERR_CHARAINDEX;	if( CHAR_getWorkInt( charaindex, CHAR_WORKBATTLEMODE ) != BATTLE_CHARMODE_NONE ){		CHAR_talkToCli( charaindex, -1, "二重遭遇。", CHAR_COLORYELLOW );		return BATTLE_ERR_ALREADYBATTLE;	}	// 允匹卞爵    匹卅中井	if( CHAR_getWorkInt( charaindex, CHAR_WORKBATTLEMODE ) != 0 ){		return BATTLE_ERR_ALREADYBATT

⌨️ 快捷键说明

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