?? battle.c
字號:
} ToList[j] = -1; cnt = j; } else if( toNo == TARGET_SIDE_1 ) { for( j = 0, i = SIDE_OFFSET; i < SIDE_OFFSET*2; i ++ ) { if( BATTLE_TargetCheck( battleindex, i ) == TRUE ) { ToList[j] = i; j ++ ; } } ToList[j] = -1; cnt = j; } else if( toNo == TARGET_ALL ){ for( j = 0, i = 0; i < SIDE_OFFSET*2; i ++, j ++ ){ if( BATTLE_TargetCheck( battleindex, i ) == TRUE ){ ToList[j] = i; j ++ ; } } ToList[i] = -1; cnt = j; } else { ToList[0] = toNo; ToList[1] = -1; cnt = 1; } return 1;#endif}void BATTLE_MultiListDead( int battleindex, int toNo, int ToList[] ){ int j, i; if( 0 <= toNo && toNo <= 19 ){ if( BATTLE_TargetCheckDead( battleindex, toNo ) == TRUE ){ ToList[0] = toNo; ToList[1] = -1; }else{ ToList[0] = -1; ToList[1] = -1; } }else if( toNo == TARGET_SIDE_0 ){ for( j = 0, i = 0; i < SIDE_OFFSET; i ++){ if( BATTLE_TargetCheckDead( battleindex, i ) == TRUE ){ ToList[j] = i; j ++ ; } } ToList[j] = -1; }else if( toNo == TARGET_SIDE_1 ){ for( j = 0, i = SIDE_OFFSET; i < SIDE_OFFSET*2; i ++ ){ if( BATTLE_TargetCheckDead( battleindex, i ) == TRUE ){ ToList[j] = i; j ++ ; } } ToList[j] = -1; }else{ if( toNo == TARGET_ALL ){#ifdef _FIX_ARRAYBUG for( j = 0, i = 0; i < SIDE_OFFSET*2; i ++){#else for( j = 0, i = 0; i < SIDE_OFFSET*2; i ++, j ++ ){#endif if( BATTLE_TargetCheckDead( battleindex, i ) == TRUE ){ ToList[j] = i; j ++ ; } }#ifdef _FIX_ITEMRELIFE // WON ADD 修正替身娃娃問題 ToList[j] = -1;#else ToList[i] = -1;#endif }else{ ToList[0] = toNo; ToList[1] = -1; } }}BOOL BATTLE_IsThrowWepon( int itemindex){ int itemtype; if( ITEM_CHECKINDEX( itemindex ) == FALSE ){ return FALSE; } itemtype = ITEM_getInt( itemindex, ITEM_TYPE ); if( itemtype == ITEM_BOOMERANG || itemtype == ITEM_BOW || itemtype == ITEM_BREAKTHROW || itemtype == ITEM_BOUNDTHROW ){ return TRUE; }else{ return FALSE; }}int BATTLE_ClearGetExp( int charaindex ){ int i, pindex; if( CHAR_CHECKINDEX( charaindex ) == FALSE ){ return BATTLE_ERR_CHARAINDEX; } CHAR_setWorkInt( charaindex, CHAR_WORKGETEXP, 0 ); for( i = 0; i < CHAR_MAXPETHAVE; i ++ ){ pindex = CHAR_getCharPet( charaindex, i ); if( CHAR_CHECKINDEX( pindex ) == FALSE )continue; CHAR_setWorkInt( pindex, CHAR_WORKGETEXP, 0 ); } return 0;}INLINE void _BATTLE_ExitAll( char *file, int line, int battleindex){ int j,i, charaindex; for( j = 0; j < 2; j ++ ){ for( i = 0; i < BATTLE_ENTRY_MAX; i ++ ){ charaindex = BattleArray[battleindex].Side[j].Entry[i].charaindex; if( CHAR_CHECKINDEX( charaindex ) == FALSE )continue; BATTLE_Exit( charaindex, battleindex ); CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_NONE ); } }}void BATTLE_AllCharaFinishSet( int battleindex ){ int j,i, charaindex; for( j = 0; j < 2; j ++ ){ for( i = 0; i < BATTLE_ENTRY_MAX; i ++ ){ charaindex = BattleArray[battleindex].Side[j].Entry[i].charaindex; if( CHAR_CHECKINDEX( charaindex ) == FALSE )continue; CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_FINAL ); } }}BOOL BATTLE_IsCharge( int charaindex ){ int com; com = CHAR_getWorkInt( charaindex, CHAR_WORKBATTLECOM1 ); if( com == BATTLE_COM_S_CHARGE || com == BATTLE_COM_S_EARTHROUND1 || com == BATTLE_COM_S_EARTHROUND0 #ifdef _PROFESSION_ADDSKILL || CHAR_getWorkInt( charaindex, CHAR_DOOMTIME ) > 0#endif ){ return TRUE; } return FALSE;}void BATTLE_AllCharaCWaitSet( int battleindex ){ int j,i, charaindex; for( j = 0; j < 2; j ++ ){ for( i = 0; i < BATTLE_ENTRY_MAX; i ++ ){ charaindex = BattleArray[battleindex].Side[j].Entry[i].charaindex; if( CHAR_CHECKINDEX( charaindex ) == FALSE )continue; if( BATTLE_IsCharge( charaindex ) == TRUE ){ }else{ CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_NONE ); } CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_WAIT ); } }}void BATTLE_AllCharaWatchWaitSet( int battleindex ){ int i, charaindex; for( i = 0; i < BATTLE_ENTRY_MAX; i ++ ){ charaindex = BattleArray[battleindex].Side[0].Entry[i].charaindex; if( CHAR_CHECKINDEX( charaindex ) == FALSE )continue; if( CHAR_getWorkInt( charaindex, CHAR_WORKBATTLEMODE ) != BATTLE_CHARMODE_WATCHINIT ){ CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_WAIT ); } }}void BATTLE_SurpriseSet( int battleindex, int side){ BATTLE_ENTRY *pEntry; int i, charaindex; pEntry = BattleArray[battleindex].Side[side].Entry; for( i = 0; i < BATTLE_ENTRY_MAX; i ++ ){ charaindex = pEntry[i].charaindex; if( CHAR_CHECKINDEX( charaindex ) == FALSE )continue; if( CHAR_getInt( charaindex, CHAR_WHICHTYPE ) == CHAR_TYPEPET ){ CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_NONE ); CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK ); } }}BOOL BATTLE_initBattleArray( int battlenum){ int i; BATTLE_battlenum = battlenum; BattleArray = allocateMemory( sizeof( BATTLE ) * BATTLE_battlenum ); if( BattleArray == NULL ) return FALSE; for( i = 0 ; i < BATTLE_battlenum ; i ++ ){ memset( &BattleArray[i], 0 , sizeof( BATTLE )); } return TRUE;}static void EntryInit( BATTLE_ENTRY *pEntry ){ int i; pEntry->charaindex = -1; pEntry->bid = -1; pEntry->escape = 0; for( i = 0; i < GETITEM_MAX; i ++ ){ pEntry->getitem[i] = -1; }}int BATTLE_CreateBattle( void ){ int battleindex, i, j; BATTLE *pBattle; battleindex = BATTLE_SearchTask( ); // NUKE 0701 if( battleindex < 0 )return -1; pBattle = &BattleArray[battleindex]; // NUKE 0701 if (pBattle==NULL) return -1; pBattle->use = TRUE; pBattle->mode = BATTLE_MODE_INIT; pBattle->turn = 0; pBattle->dpbattle = 0; pBattle->norisk = 0; pBattle->flg = 0; pBattle->field_att = BATTLE_ATTR_NONE; pBattle->att_count = 0; for( j = 0; j < 2; j ++ ){ for( i = 0; i < BATTLE_ENTRY_MAX; i ++ ){ EntryInit( &pBattle->Side[j].Entry[i] ); } } for( i = 0; i < BATTLE_ENTRY_MAX*2; i ++ ){ pBattle->iEntryBack[i] = -1; pBattle->iEntryBack2[i] = -1; } pBattle->WinFunc = NULL;#ifdef _DEATH_CONTEND//計算勝敗func pBattle->PkFunc = NULL; pBattle->battlemap = -1;#endif pBattle->pNext = NULL; pBattle->pBefore = NULL; pBattle->battleindex = battleindex; Total_BattleNum ++;#ifdef _BATTLECOMMAND_TIME pBattle->PartTime = 0;#endif#ifdef _PROFESSION_ADDSKILL //冰爆術存放/* pBattle->ice_count = 0; for( i = 0; i < 20; i ++ ){ pBattle->ice_bout[i]=0; pBattle->ice_use[i]=FALSE; pBattle->ice_toNo[i]=0; pBattle->ice_level[i]=0; pBattle->ice_array[i]=0; pBattle->ice_attackNo[i]=0; pBattle->ice_charaindex[i]=-1; }*/#endif return battleindex;}static int BATTLE_SearchTask( void ){ int i, j; i = BATTLE_searchCnt; for( j = 0; j < BATTLE_battlenum; j ++ ){ if( i >= BATTLE_battlenum ) i = 0; if( BattleArray[i].use == FALSE ){ BATTLE_searchCnt = i + 1; return i; } i ++; } return -1;}void BATTLE_DeleteItem( int battleindex ){ int i, j, k; BATTLE_ENTRY *pEntry; for( j = 0; j < 2; j ++ ){ for( i = 0; i < BATTLE_ENTRY_MAX; i ++ ){ pEntry = &BattleArray[battleindex].Side[j].Entry[i]; for( k = 0; k < GETITEM_MAX; k ++ ){ if( pEntry->getitem[k] >= 0 ){ print( "// 找尋(消去)道具(%d),(%s)\n", pEntry->getitem[k], ITEM_getAppropriateName(pEntry->getitem[k]) ); ITEM_endExistItemsOne( pEntry->getitem[k] ); } } } }}int BATTLE_DeleteBattle( int battleindex){ int i, j; BATTLE *pBattle; if( BATTLE_CHECKINDEX( battleindex ) == FALSE ){ fprint( "err:battle index error\n" ); return BATTLE_ERR_BATTLEINDEX; } if( BATTLE_WatchUnLink( battleindex ) == FALSE ){ fprint( "err:battle link 不脫離\n" ); } pBattle = &BattleArray[battleindex]; pBattle->use = FALSE; pBattle->mode = BATTLE_MODE_NONE; BATTLE_DeleteItem( battleindex ); for( j = 0; j < 2; j ++ ){ for( i = 0; i < BATTLE_ENTRY_MAX; i ++ ){ EntryInit( &pBattle->Side[j].Entry[i] ); } } Total_BattleNum--; return 0;}int BATTLE_No2Index( int battleindex, int bid){ BATTLE_ENTRY *pEntry; if( BATTLE_CHECKINDEX( battleindex ) == FALSE )return -1; if( BATTLE_CHECKNO( bid ) == FALSE )return -1; if( bid >= 10 ){ pEntry = BattleArray[battleindex].Side[1].Entry; bid -= SIDE_OFFSET; }else{ pEntry = BattleArray[battleindex].Side[0].Entry; } if( CHAR_CHECKINDEX( pEntry[bid].charaindex ) == FALSE )return -1; return pEntry[bid].charaindex;}#ifdef _Item_ReLifeActint BATTLE_getBattleDieIndex( int battleindex, int bid ){ BATTLE_ENTRY *pEntry; if( BATTLE_CHECKINDEX( battleindex ) == FALSE )return -1; if( BATTLE_CHECKNO( bid ) == FALSE )return -1; if( bid >= 10 ){ pEntry = BattleArray[battleindex].Side[1].Entry; bid -= SIDE_OFFSET; }else{ pEntry = BattleArray[battleindex].Side[0].Entry; } if( CHAR_CHECKINDEX( pEntry[bid].charaindex ) == FALSE )return -1; if( pEntry[bid].flg & BENT_FLG_ULTIMATE ) return -1; return pEntry[bid].charaindex;}#endif#ifdef _PROFESSION_ADDSKILLBOOL BATTLE_BattleUltimate( int battleindex, int bid ) //檢查此位 上是否被打飛{ BATTLE_ENTRY *pEntry; if( BATTLE_CHECKINDEX( battleindex ) == FALSE )return FALSE; if( BATTLE_CHECKNO( bid ) == FALSE )return FALSE; if( bid >= 10 ){ pEntry = BattleArray[battleindex].Side[1].Entry; bid -= SIDE_OFFSET; }else{ pEntry = BattleArray[battleindex].Side[0].Entry; } if( pEntry[bid].flg & BENT_FLG_ULTIMATE ) return TRUE; else return TRUE;}#endifint BATTLE_Index2No( int battleindex, int charaindex){ BATTLE_ENTRY *pEntry; int i, j; if( BATTLE_CHECKINDEX( battleindex ) == FALSE )return -1; if( CHAR_CHECKINDEX( charaindex ) == FALSE )return -1; for( j = 0; j < 2; j ++ ){ pEntry = BattleArray[battleindex].Side[j].Entry; for( i = 0; i < BATTLE_ENTRY_MAX; i ++ ){ if( pEntry[i].charaindex == charaindex ){ return i + j * SIDE_OFFSET; } } } return -1;}char *BATTLE_CharTitle( int charaindex ){ char *pName; static char Len0Buff[2] = ""; if( CHAR_getInt( charaindex, CHAR_WHICHTYPE ) == CHAR_TYPEPET ){ pName = Len0Buff; }else{ pName = CHAR_getChar( charaindex, CHAR_OWNTITLE ); if( pName[0] == 0 ){ pName = Len0Buff; } } return pName;}int BATTLE_CharaBackUp( int battleindex ){ int i, j, k, charaindex; BATTLE *pBattle; if( BATTLE_CHECKINDEX( battleindex ) == FALSE ){ return BATTLE_ERR_BATTLEINDEX; } pBattle = &BattleArray[battleindex]; k = 0; for( j = 0; j < 2; j ++ ){ k = j * SIDE_OFFSET; for( i = 0; i < BATTLE_ENTRY_MAX/2; i ++ ){ charaindex = pBattle->Side[j].Entry[i].charaindex; if( CHAR_CHECKINDEX( charaindex ) == TRUE && CHAR_getInt( charaindex, CHAR_WHICHTYPE ) == CHAR_TYPEPLAYER ){ pBattle->iEntryBack[k] = pBattle->Side[j].Entry[i].charaindex;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -