?? battle.c
字號:
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 人物職業(yè)技能 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 //將媚惑術(shù)中招時間清除為-1 CHAR_setWorkInt( charaindex, CHAR_WORKFOXROUND, -1 ); #endif#ifdef _PROFESSION_ADDSKILL //結(jié)界清除 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 // 離開戰(zhàn)斗時將媚惑術(shù)造成的變身效果清除 //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);//復(fù)原#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, "因戰(zhàn)斗中倒地,活動積分不予計算。"); 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, "戰(zhàn)斗時間已累積%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, "戰(zhàn)斗滿1小時時間取得10分,總共取得%d績分。", nScore+10); CHAR_talkToCli( charaindex, -1, buf, CHAR_COLORYELLOW); } }else{ sprintf( buf, "因此場戰(zhàn)斗取得經(jīng)驗值不足,活動積分不予計算。"); CHAR_talkToCli( charaindex, -1, buf, CHAR_COLORYELLOW); } }else{ if( CHAR_getWorkInt( charaindex, CHAR_WORKBATTLECOM1) == BATTLE_COM_ESCAPE){ char buf[256]; sprintf( buf, "因戰(zhàn)斗逃跑,活動積分不予計算。"); 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 人物職業(yè)技能 // 遺忘 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, "總?cè)雸鰰r間%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{
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -