?? battle_command.c
字號:
#include "version.h"#include<string.h>#include<stdlib.h>#include"char.h"#include"char_base.h"#include "battle.h"#include "pet_skill.h"#include "battle_event.h"#include "battle_command.h"#include "lssproto_serv.h"#include "magic.h"#include "magic_base.h"#include "handletime.h"#ifdef _PROFESSION_SKILL // WON ADD 人物職業技能#include "profession_skill.h"#endifint NowBattlerFd;#if 1int BATTLE_MpDown( int charaindex, int down ){ return 0;}#else{ int mp, battleindex; // 爵 反覆諦爵井}???爵井 battleindex = CHAR_getWorkInt( charaindex, CHAR_WORKBATTLEINDEX ); if( BATTLE_CHECKINDEX( battleindex ) == FALSE )return TRUE; // 覆諦爵元扎卅井勻兇日?? if( BattleArray[battleindex].type != BATTLE_TYPE_P_vs_P ){ return TRUE; } // ??毛蛹日六月井" mp = CHAR_getInt( charaindex, CHAR_MP ); if( mp < down ){ // 蛹日六卅中及匹窒手仄卅中午允月 CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_NONE ); // 戊穴件玉OK及隙爛 CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK ); return FALSE; } mp -= down; CHAR_setInt( charaindex, CHAR_MP, mp ); return TRUE;}#endifvoid BattleCommandDispach( int fd, char *command ){ int endFlg = 0, battleindex; int EscapeFree = BATTLE_FLG_FREEDP; int charaindex = CONNECT_getCharaindex(fd); char szBuffer[256]="";#ifdef _FIXWOLF // Syu ADD 修正狼人變身Bug int i , j , pindex; BATTLE_ENTRY *pEntry;#endif NowBattlerFd = fd; if( CHAR_CHECKINDEX( charaindex ) == FALSE )return; if( CHAR_getInt( charaindex, CHAR_WHICHTYPE ) != CHAR_TYPEPLAYER ){ return; } battleindex = CHAR_getWorkInt( charaindex, CHAR_WORKBATTLEINDEX ); if( BATTLE_CHECKINDEX( battleindex ) == FALSE || CHAR_getWorkInt( charaindex, CHAR_WORKBATTLEMODE) == BATTLE_CHARMODE_NONE ){ return; } if( BattleArray[battleindex].flg & BATTLE_FLG_CHARALOST ){ EscapeFree = 0; } if( strncmp( command, "U", 1 ) == 0 ){ // shan 2001/12/25 begin EscapeFree = 0; if (CHAR_getWorkInt( charaindex, CHAR_WORKBATTLEWATCH )!=TRUE){ CHAR_talkToCli( charaindex, -1, "華義大魔王使出定身法,定定定定定定把你定在戰斗里。", CHAR_COLORYELLOW ); CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_GUARD ); CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK ); //sprintf( szBuffer, "Command(%s)(防御)", CHAR_getUseName( charaindex ) ); endFlg = 1; BATTLE_MpDown( charaindex, 2 ); }else{ BATTLE_WatchStop( charaindex ); } // shan end }else if( strncmp( command, "E", 1 ) == 0 ){ if( checkErrorStatus( charaindex) ) { BattleCommandDispach( fd, "N"); return; } CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_ESCAPE ); CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK ); //sprintf( szBuffer, "Command(%s)(逃跑)", CHAR_getUseName( charaindex ) ); endFlg = 1; BATTLE_MpDown( charaindex, 20 ); }else if( strncmp( command, "H|", 2 ) == 0 ){ int iNum = -1, At_SoubiIndex; if( sscanf( command+2, "%X", &iNum ) != 1 || ( iNum < 0 || iNum >= 20 ) ){ iNum = -1; } if( checkErrorStatus( charaindex) ) { BattleCommandDispach( fd, "N"); return; } EscapeFree = 0; CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM2, iNum ); CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_ATTACK ); At_SoubiIndex = CHAR_getItemIndex( charaindex, CHAR_ARM ); if( ITEM_CHECKINDEX( At_SoubiIndex ) == FALSE ){ }else{ if( ITEM_getInt( At_SoubiIndex, ITEM_TYPE ) == ITEM_BOOMERANG ){ CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_BOOMERANG );#ifdef _PETSKILL_BECOMEFOX if( CHAR_getInt( charaindex, CHAR_BASEIMAGENUMBER)==101749 || CHAR_getWorkInt( charaindex, CHAR_WORKFOXROUND ) != -1 ){ //若是變成小狐貍不可以使用回力標 CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_NONE ); }#endif#ifdef _PETSKILL_BECOMEPIG if( CHAR_getInt( charaindex, CHAR_BECOMEPIG) > -1 ){//變成烏力了 CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_ATTACK ); }#endif } } CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK ); CHAR_SETWORKINT_LOW( charaindex, CHAR_WORKBATTLECOM3, 1 ); //sprintf( szBuffer, "Command(%s)(戰斗)", CHAR_getUseName( charaindex ) ); endFlg = 1; BATTLE_MpDown( charaindex, 5 ); }else if( strncmp( command, "G", 1 ) == 0 ){ if( checkErrorStatus( charaindex) ) { BattleCommandDispach( fd, "N"); return; } EscapeFree = 0; CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_GUARD ); CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK ); sprintf( szBuffer, "Command(%s)(防御)", CHAR_getUseName( charaindex ) ); endFlg = 1; BATTLE_MpDown( charaindex, 2 ); }else if( strncmp( command, "N", 1 ) == 0 ){ EscapeFree = 0; CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_WAIT ); CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK );// sprintf( szBuffer, "Command(%s)(server托管)", CHAR_getUseName( charaindex ) ); //sprintf( szBuffer, "Command(%s)(待機)", CHAR_getUseName( charaindex ) ); endFlg = 1; }else if( strncmp( command, "T|", 2 ) == 0 ){ int iNum = -1; if( checkErrorStatus( charaindex) ) { BattleCommandDispach( fd, "N"); return; } EscapeFree = 0; if( sscanf( command+2, "%X", &iNum ) != 1 || ( iNum < 0 || iNum >= 20 ) ){ iNum = -1; } CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM2, iNum ); CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_CAPTURE ); CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK ); //sprintf( szBuffer, "Command(%s)(捕獲)", CHAR_getUseName( charaindex ) ); endFlg = 1; BATTLE_MpDown( charaindex, 20 ); }else if( strncmp( command, "S|", 2 ) == 0 ){ int iNum = -1; if( checkErrorStatus( charaindex) ) { BattleCommandDispach( fd, "N"); return; } EscapeFree = 0; // shan 2002/01/08 begin if( sscanf( command+2, "%d", &iNum ) != 1 || ( iNum < -1 || iNum >= CHAR_MAXPETHAVE ) || ( CHAR_getInt(charaindex,CHAR_RIDEPET)==iNum) ){ iNum = -1; } // shan end#ifdef _STANDBYPET if( iNum >= 0) { if( ! (CHAR_getWorkInt( charaindex, CHAR_WORKSTANDBYPET) & ( 1 << iNum)) ) { print("\n 改封包!叫出非待機寵!!:%s ", CHAR_getChar( charaindex, CHAR_CDKEY) ); iNum = -1; } }#endif CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM2, iNum ); if( iNum < 0 ){ CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_PETIN ); //sprintf( szBuffer, "Command(%s)(喚回寵物)", CHAR_getUseName( charaindex ) ); }else{ CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_PETOUT ); //sprintf( szBuffer, "Command(%s)(叫出寵物)", CHAR_getUseName( charaindex ) ); } CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK ); endFlg = 1; BATTLE_MpDown( charaindex, 10 ); }else if( strncmp( command, "W|", 2 ) == 0 ){ int iNum = -1, petskillindex = -1, ToNo = -1, petnum, petindex; if( sscanf( command+2, "%X|%X", &iNum, &ToNo ) < 1 ){ iNum = -1; ToNo = -1; } petnum = CHAR_getInt( charaindex, CHAR_DEFAULTPET ); petindex = CHAR_getCharPet( charaindex, petnum ); if( CHAR_CHECKINDEX( petindex ) == FALSE ){ }else{ if( iNum < 0 || iNum >= CHAR_MAXPETSKILLHAVE #ifdef _PETSKILLBUG //Add By Syu 2002.0805 || (CHAR_getFlg( charaindex, CHAR_ISDIE ) == TRUE )|| (CHAR_getInt( charaindex, CHAR_HP ) <= 0)#endif || checkErrorStatus( petindex) ) { //sprintf( szBuffer, "Command(%s)(自動)", CHAR_getUseName( petindex ) ); CHAR_setWorkInt( petindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK );#ifdef _PETSKILLBUG //Add By Syu 2002.0805 }else if ((CHAR_getInt(petindex, CHAR_TRANSMIGRATION)<1) && ( iNum>=CHAR_getInt(petindex, CHAR_SLOT) ) ) { //sprintf( szBuffer, "Command(%s)(自動)", CHAR_getUseName( petindex ) ); CHAR_setWorkInt( petindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK );#endif }else{ petskillindex = PETSKILL_GetArray( petindex, iNum);#ifdef _FIXWOLF // Syu ADD 修正狼人變身Bug if( (CHAR_getPetSkill( petindex , iNum )== 600) && (ToNo == -1)) { 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( pindex == petindex) { ToNo=i + ( j * 10 ); break; } } } }#endif if( petskillindex >= 0 && PETSKILL_Use( petindex, iNum, ToNo, NULL ) == TRUE ){ //sprintf( szBuffer, "Command(%s)(石版)", CHAR_getUseName( petindex ) ); EscapeFree = 0; }else{ //sprintf( szBuffer, "Command(%s)(自動)", CHAR_getUseName( petindex ) ); CHAR_setWorkInt( petindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK ); } } } endFlg = 1; BATTLE_MpDown( charaindex, 10 ); }else if( strncmp( command, "J|", 1 ) == 0 ){ int iNum = -1, magicindex = -1, ToNo = -1; int valid = -1; int itemindex=-1; if( checkErrorStatus( charaindex) ) { BattleCommandDispach( fd, "N"); return; } EscapeFree = 0; if( sscanf( command+2, "%X|%X", &iNum, &ToNo ) != 2 ){ iNum = -1; ToNo = -1; } if( iNum < CHAR_EQUIPPLACENUM && iNum >= CHAR_HEAD ){ magicindex = MAGIC_GetArrayNo( charaindex, iNum ); itemindex = CHAR_getItemIndex( charaindex, iNum ); valid = MAGIC_isTargetValid( magicindex, ToNo); if ((valid <0 ) || ( magicindex < 0 ) || (itemindex < 0 )){ CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_WAIT ); CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK ); }else{#ifdef _ITEM_ATTSKILLMAGIC char *magicarg;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -