?? battle_command.c
字號:
int magic_array = -1; magic_array = MAGIC_getMagicArray( magicindex ); magicarg = MAGIC_getChar( magic_array, MAGIC_OPTION ); if( magicarg != NULL && strstr( magicarg, "SKILL") != NULL ) { int mp = ITEM_getInt( itemindex, ITEM_MAGICUSEMP ); if( MAGIC_AttSkill( charaindex, ToNo, magic_array, mp) == FALSE ) { CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_WAIT ); CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK ); } }else {#endif CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM2, ToNo ); CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_JYUJYUTU ); CHAR_SETWORKINT_LOW( charaindex, CHAR_WORKBATTLECOM3, magicindex ); CHAR_SETWORKINT_HIGH( charaindex, CHAR_WORKBATTLECOM3, iNum ); CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK ); //sprintf( szBuffer, "Command(%s)(咒術)", CHAR_getUseName( charaindex ) );#ifdef _ITEM_ATTSKILLMAGIC }#endif } }else{ EscapeFree = 0; CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_WAIT ); CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK ); //sprintf( szBuffer, "Command(%s)(待機)", CHAR_getUseName( charaindex ) ); } endFlg = 1; }else if( strncmp( command, "I|", 1 ) == 0 ){ int iNum = -1, ToNo = -1; int valid = 0, itemindex = -1; if( checkErrorStatus( charaindex) ) { BattleCommandDispach( fd, "N"); return; } EscapeFree = 0; if( sscanf( command+2, "%X|%X", &iNum, &ToNo ) != 2 ){ iNum = -1; ToNo = -1; } itemindex = CHAR_getItemIndex( charaindex, iNum ); if ( !ITEM_CHECKINDEX( itemindex) ) valid=-1; if (valid >= 0) valid = ITEM_isTargetValid( charaindex, itemindex, ToNo ); if (valid < 0 ) { CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_WAIT ); CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK ); } else { CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM2, ToNo ); CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_ITEM ); CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM3, iNum ); CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK ); //sprintf( szBuffer, "Command(%s)(道具)", CHAR_getUseName( charaindex ) ); endFlg = 1; } }else if( strncmp( command, "@", 1 ) == 0 ){ //sprintf( szBuffer, "Command(%s)(通用)", CHAR_getUseName( charaindex ) ); CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK ); endFlg = 1; CHAR_setInt( charaindex, CHAR_MP, min( 100, CHAR_getInt( charaindex, CHAR_MP ) + 30 ) ); }else#ifdef _PROFESSION_SKILL // WON ADD 人物職業技能 if( strncmp( command, "P", 1 ) == 0 ){ int iNum=-1, ToNo=-1; int skillindex=-1; int char_pskill=-1, profession_skill=-1, Pskillid=-1; if( checkErrorStatus( charaindex) ) { BattleCommandDispach( fd, "N"); return; } EscapeFree = 0; if( sscanf( command+2, "%X|%X", &iNum, &ToNo ) < 1 ){ iNum = -1; ToNo = -1; } if( CHAR_getWorkInt( charaindex, CHAR_WORKBATTLEMODE) == BATTLE_CHARMODE_NONE ){ print("\n\n 非法封包(19001)(%s)(%s)\n\n", CHAR_getChar(charaindex, CHAR_CDKEY), CHAR_getChar(charaindex, CHAR_NAME) );#ifdef _PROSKILL_ERR_KICK saacproto_ACKick_send( acfd, CHAR_getChar(charaindex,CHAR_CDKEY), getFdidFromCharaIndex( charaindex), 1);#endif return; }#ifdef _PROSKILL_OPTIMUM // Robin fix cancel 此處略過職業檢查, 改在 PROFESSION_SKILL_Use 中檢查 // 人物的職業 char_pskill = CHAR_getInt( charaindex, PROFESSION_CLASS ); // 技能的職業 skillindex = PROFESSION_SKILL_GetArray( charaindex, iNum); Pskillid = PROFESSION_SKILL_getskillArray( skillindex); profession_skill = PROFESSION_SKILL_getInt( Pskillid, PROFESSION_SKILL_PROFESSION_CLASS); if( (char_pskill > 0) && (char_pskill == profession_skill) ){#else if( 1 ) {#endif if( PROFESSION_SKILL_Use( charaindex, iNum, ToNo, NULL ) == 1 ){ //sprintf( szBuffer, "Command(%s)(職業技能)", CHAR_getUseName( charaindex ) ); endFlg = 1; }else{ print("\n職業技能失敗!! "); CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_WAIT ); CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK ); //sprintf( szBuffer, "Command(%s)(待機)", CHAR_getUseName( charaindex ) ); #ifdef _PROSKILL_ERR_KICK saacproto_ACKick_send( acfd, CHAR_getChar(charaindex,CHAR_CDKEY), getFdidFromCharaIndex( charaindex), 1);#endif } }else{ print("\n改封包??職業技能ID不正確:%s:%d:%d \n", CHAR_getChar( charaindex, CHAR_CDKEY), char_pskill, profession_skill); CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_WAIT ); CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK ); //sprintf( szBuffer, "Command(%s)(待機)", CHAR_getUseName( charaindex ) );#ifdef _PROSKILL_ERR_KICK saacproto_ACKick_send( acfd, CHAR_getChar(charaindex,CHAR_CDKEY), getFdidFromCharaIndex( charaindex), 1);#endif } EscapeFree = 0; }else#endif { //sprintf( szBuffer, "Command(%s)(失敗)", CHAR_getUseName( charaindex ) ); endFlg = 2; } if( endFlg ){ BATTLE_ActSettingSend( battleindex ); if( endFlg==1 ){ int fd; if( CHAR_getInt( charaindex, CHAR_WHICHTYPE)==CHAR_TYPEPLAYER ){ fd = CHAR_getWorkInt( charaindex, CHAR_WORKFD); CONNECT_SetBattleRecvTime( fd, &NowTime); } } } { //if( BATTLE_CHECKINDEX( battleindex ) == TRUE ){ // BATTLE_BroadCast( battleindex, szBuffer, CHAR_COLORWHITE ) ; //} } if( BattleArray[battleindex].turn == 0 ){ BattleArray[battleindex].flg |= EscapeFree; }else{ BattleArray[battleindex].flg &= EscapeFree; }}void BATTLE_ActSettingSend( int battleindex ){ int pindex, k = 0, i, j, charaindex; int endBit = 0; char szBA[256]; BATTLE_ENTRY *pEntry; BATTLE *pBattle; for( j = 0; j < 2; j ++ ){ pEntry = BattleArray[battleindex].Side[j].Entry; for( i = 0; i < BATTLE_ENTRY_MAX; i ++ ){ pindex = pEntry[i].charaindex; // 戊穴件玉 匹五化中兇日 if( CHAR_getWorkInt( pindex, CHAR_WORKBATTLEMODE ) == BATTLE_CHARMODE_C_OK ){ endBit |= 1 << k; // 申永玄 化月 }else // 襯分勻兇日濮覆 井允 if( CHAR_getInt( pindex, CHAR_WHICHTYPE ) == CHAR_TYPEENEMY ) { endBit |= 1 << k; // 申永玄 化月 } k ++; } } sprintf( szBA, "BA|%X|%X|", endBit, BattleArray[battleindex].turn );// print( "%s\n", szBA ); //今日卞蟈夠伙□皿仄化霜月 for( j = 0; j < 2; j ++ ){ pEntry = BattleArray[battleindex].Side[j].Entry; for( i = 0; i < BATTLE_ENTRY_MAX; i ++ ){ pindex = pEntry[i].charaindex; if( CHAR_CHECKINDEX( pindex ) == FALSE )continue; // 輔爵仄兇化及平乓仿卞反霜日卅中 if( CHAR_getWorkInt( pindex, CHAR_WORKBATTLEMODE ) == BATTLE_CHARMODE_RESCUE )continue; // 皿伊奶乩□分勻兇日 if( CHAR_getInt( pindex, CHAR_WHICHTYPE ) == CHAR_TYPEPLAYER ){ // 戊穴件玉霜月 BATTLE_CommandSend( pindex, szBA ); } } } // 棋爵仄化中月諦卞手霜月 pBattle = BattleArray[battleindex].pNext; for( ; pBattle ; pBattle = pBattle->pNext ){ // 仇及失玉伊旦互懇仄中井民尼永弁 if( BATTLE_CHECKADDRESS( pBattle ) == FALSE ){ fprint( "err:觀戰battle address錯誤(%p)\n", pBattle ); break; } // 蟈夠卞霜耨 for( i = 0; i < BATTLE_ENTRY_MAX; i ++ ){ charaindex = pBattle->Side[0].Entry[i].charaindex; if( CHAR_CHECKINDEX( charaindex ) == FALSE )continue; if( CHAR_getInt( charaindex, CHAR_WHICHTYPE ) != CHAR_TYPEPLAYER )continue; // 戊穴件玉霜月 BATTLE_CommandSend( pindex, szBA ); } }}BOOL BATTLE_IsHide( int charaindex ){ if( CHAR_getWorkInt( charaindex, CHAR_WORKBATTLECOM1 ) == BATTLE_COM_S_EARTHROUND0 ){ return TRUE; } return FALSE;}//*******************************************************//// 田玄伙及戊穴件玉毛弁仿奶失件玄卞霜月//BOOL BATTLE_CommandSend( int charaindex, char *pszCommand )////********************************************************{ if( CHAR_CHECKINDEX( charaindex ) == FALSE )return FALSE; if( getfdFromCharaIndex( charaindex ) < 0 )return FALSE; lssproto_B_send( getfdFromCharaIndex( charaindex ), pszCommand ); return TRUE;}BOOL BATTLE_MakeCharaString( int battleindex, char *pszCommand, int size){ int i, j, iOffset, charaindex, flg; BATTLE_ENTRY *pEntry; char szBuffer[4096]="", *pszTop, *pszLast; char szEscapeName[128], szEscapeTitle[128]; char szEscapePetName[128]; int rideflg = 0, petindex = -1, petlevel, pethp, petmaxhp; if( BATTLE_CHECKINDEX( battleindex ) == FALSE )return FALSE; pszTop = pszCommand; pszLast = pszCommand+size-1;#if 1 sprintf( szBuffer, "BC|%X|", BattleArray[battleindex].field_att );#else sprintf( szBuffer, "BC|" );#endif STRCPY_TAIL( pszTop, pszLast, szBuffer ); for( j = 0; j < 2; j ++ ){ if( j == 1 ){ iOffset = SIDE_OFFSET; // 輊仇丹礎扔奶玉及樺寧反皿仿旦允月 }else{ iOffset = 0; } pEntry = BattleArray[battleindex].Side[j].Entry; for( i = 0; i < BATTLE_ENTRY_MAX; i ++ ){ charaindex = pEntry[i].charaindex; if( CHAR_CHECKINDEX( charaindex ) == FALSE )continue; if( CHAR_getWorkInt( charaindex, CHAR_WORKBATTLEFLG ) & CHAR_BATTLEFLG_ULTIMATE )continue; flg = 0; if( CHAR_getWorkInt( charaindex, CHAR_WORKBATTLEMODE ) == BATTLE_CHARMODE_INIT ) flg |= BC_FLG_NEW; if( CHAR_getWorkInt( charaindex, CHAR_WORKBATTLEMODE ) == BATTLE_CHARMODE_RESCUE ) flg |= BC_FLG_NEW; if( CHAR_getFlg( charaindex, CHAR_ISDIE ) == TRUE ){ flg |= BC_FLG_DEAD; }else if( CHAR_getWorkInt( charaindex, CHAR_WORKPOISON ) > 0 ){ flg |= BC_FLG_POISON; }else#ifdef _MAGIC_WEAKEN // 虛弱 if( CHAR_getWorkInt( charaindex, CHAR_WORKWEAKEN ) > 0 ){ flg |= BC_FLG_WEAKEN; }else #endif#ifdef _MAGIC_DEEPPOISON // 劇毒 if( CHAR_getWorkInt( charaindex, CHAR_WORKDEEPPOISON ) > 0 ){ flg |= BC_FLG_DEEPPOISON; }else#endif#ifdef _MAGIC_NOCAST // 沉默 if( CHAR_getWorkInt( charaindex, CHAR_WORKNOCAST ) > 0 ){ flg |= BC_FLG_NOCAST; }else#endif#ifdef _MAGIC_BARRIER // 魔障 if( CHAR_getWorkInt( charaindex, CHAR_WORKBARRIER ) > 0 ){ flg |= BC_FLG_BARRIER; }else #endif if( CHAR_getWorkInt( charaindex, CHAR_WORKPARALYSIS ) > 0 ){ flg |= BC_FLG_PARALYSIS; }else if( CHAR_getWorkInt( charaindex, CHAR_WORKSLEEP ) > 0 ){ flg |= BC_FLG_SLEEP; }else if( CHAR_getWorkInt( charaindex, CHAR_WORKSTONE ) > 0 ){ flg |= BC_FLG_STONE; }else if( CHAR_getWorkInt( charaindex, CHAR_WORKDRUNK ) > 0 ){ flg |= BC_FLG_DRUNK; }else if( CHAR_getWorkInt( charaindex, CHAR_WORKCONFUSION ) > 0 ){ flg |= BC_FLG_CONFUSION; } if( CHAR_getInt( charaindex, CHAR_WHICHTYPE ) == CHAR_TYPEPLAYER ){ flg |= BC_FLG_PLAYER; } if( CHAR_getWorkInt( charaindex, CHAR_WORKBATTLEFLG ) & CHAR_BATTLEFLG_REVERSE ){ flg |= BC_FLG_REVERSE; } if( BATTLE_IsHide( charaindex ) == TRUE ){ flg |= BC_FLG_HIDE; }#ifdef _PET_SKILL_SARS // WON ADD 毒煞蔓延 if( CHAR_getWorkInt( charaindex, CHAR_WORKSARS ) > 0 ){ flg |= BC_FLG_SARS; }#endif#ifdef _PROFESSION_SKILL // WON ADD 人物職業技能 if( CHAR_getWorkInt( charaindex, CHAR_WORKDIZZY ) > 0 ){ flg |= BC_FLG_DIZZY; // 暈眩 } if( CHAR_getWorkInt( charaindex, CHAR_WORKENTWINE ) > 0 ){ flg |= BC_FLG_ENTWINE; // 樹根纏繞 } if( CHAR_getWorkInt( charaindex, CHAR_WORKDRAGNET ) > 0 ){ flg |= BC_FLG_DRAGNET; // 天羅地網 } if( CHAR_getWorkInt( charaindex, CHAR_WORKICECRACK ) > 0 ){ // flg |= BC_FLG_ICECRACK; // 冰爆術
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -