?? magic.c
字號:
#include "version.h"#include <stdio.h>#include <string.h>#include "common.h"#include "char_base.h"#include "char_data.h"#include "item.h"#include "battle.h"#include "magic_base.h"#include "magic.h"#include "magic_field.h"#include "family.h"#include "handletime.h"#include "battle_magic.h"#include "battle_event.h"#include"lssproto_serv.h"#ifdef _ITEM_ATTSKILLMAGIC#include "pet_skill.h"#endif//#include "battle_event.h"// shan add code#define MP_RATE 0.7int MAGIC_Use( int charaindex, int haveitemindex, int toindex){ int itemindex; int magicid,marray,mp; int ret; MAGIC_CALLFUNC func; itemindex = CHAR_getItemIndex( charaindex, haveitemindex); if( !ITEM_CHECKINDEX( itemindex) ) return FALSE; magicid = ITEM_getInt( itemindex, ITEM_MAGICID); marray = MAGIC_getMagicArray( magicid); if( marray == -1 ) return FALSE; func = MAGIC_getMagicFuncPointer( MAGIC_getChar( marray, MAGIC_FUNCNAME));//MAGIC_NAME if( (mp = ITEM_getInt( itemindex, ITEM_MAGICUSEMP)) < 0 ){ print("err mp:%d -%s-%d\n", mp, ITEM_getChar( itemindex, ITEM_NAME), ITEM_getInt( itemindex, ITEM_ID) ); } // shan add begin if( CHAR_getInt( charaindex, CHAR_FMINDEX ) >= 1 ){ // 光精 if( CHAR_getInt( charaindex, CHAR_FMSPRITE ) == 0){ if( (marray >=0 && marray <=31) || (marray >= 105 && marray <=107 )) mp *= MP_RATE; } // 暗精 if( CHAR_getInt( charaindex, CHAR_FMSPRITE ) == 1){ if( marray >=32 && marray <=81 ) mp *= MP_RATE; } } // shan end if( func ) { ret = func( charaindex, toindex, marray, mp ); }else { ret = FALSE; } return ret;}int MAGIC_GetArrayNo( int charaindex, int haveitemindex){ int itemindex; int magicid; itemindex = CHAR_getItemIndex( charaindex, haveitemindex); if( !ITEM_CHECKINDEX( itemindex) ) return FALSE; magicid = ITEM_getInt( itemindex, ITEM_MAGICID); return magicid;}int MAGIC_DirectUse( int charaindex, int magicid, int toindex, int itemnum){ MAGIC_CALLFUNC func; int mp, ret, marray; int itemindex=-1;#ifdef _MAGIC_NOCAST//沉默狀態無法施法 if( CHAR_getWorkInt( charaindex, CHAR_WORKNOCAST ) > 0 ){ CHAR_talkToCli(charaindex, -1, "沉默中無法吟唱咒術", CHAR_COLORYELLOW); return FALSE; }#endif if( CHAR_getInt( charaindex, CHAR_WHICHTYPE) == CHAR_TYPEPLAYER){ itemindex = CHAR_getItemIndex( charaindex, itemnum); if( !ITEM_CHECKINDEX( itemindex) ){ print("ANDY err MAGIC_DirectUse() itemindex:%d !\n", itemindex); return FALSE; } }else{ itemindex = itemnum; } marray = MAGIC_getMagicArray( magicid ); func = MAGIC_getMagicFuncPointer( MAGIC_getChar( marray, MAGIC_FUNCNAME ) ); if( (mp = ITEM_getInt( itemindex, ITEM_MAGICUSEMP )) < 0 ){ } // shan add begin if( CHAR_getInt( charaindex, CHAR_FMINDEX ) >= 1 ){ // 光精 if( CHAR_getInt( charaindex, CHAR_FMSPRITE ) == 0){ if( (marray >=0 && marray <=31) ) mp *= MP_RATE; } // 暗精 if( CHAR_getInt( charaindex, CHAR_FMSPRITE ) == 1){ if( marray >=32 && marray <=81 ) mp *= MP_RATE; } } if( func ) { ret = func( charaindex, toindex, marray, mp ); } else { ret = FALSE; } return ret;}int MAGIC_Recovery( int charaindex, int toindex, int marray, int mp ){ int battlemode; if( CHAR_CHECKINDEX( charaindex ) == FALSE )return FALSE; battlemode = CHAR_getWorkInt( charaindex, CHAR_WORKBATTLEMODE ); if( battlemode == BATTLE_CHARMODE_INIT ){ return FALSE; } if( CHAR_getInt( charaindex, CHAR_MP ) < mp )return FALSE; CHAR_setInt( charaindex, CHAR_MP, CHAR_getInt( charaindex, CHAR_MP ) - mp ); if( IsBATTLING( charaindex ) == TRUE ){#ifdef _PREVENT_TEAMATTACK //恩惠不得 使用敵方 int battleindex = CHAR_getWorkInt( charaindex, CHAR_WORKBATTLEINDEX ); if( CHAR_getInt( charaindex, CHAR_WHICHTYPE ) == CHAR_TYPEPLAYER && BattleArray[battleindex].type != BATTLE_TYPE_P_vs_P ){ if( BATTLE_CheckSameSide( charaindex, toindex) == 0 ){//不同邊 int battleindex = CHAR_getWorkInt( charaindex, CHAR_WORKBATTLEINDEX ); BATTLE_NoAction( battleindex, BATTLE_Index2No( battleindex, charaindex) ); CHAR_talkToCli( charaindex, -1, "恩惠精靈..不得施予非玩家敵方。", CHAR_COLORYELLOW); return FALSE; } }#endif if (toindex==22){print("jinchao err\n");return FALSE;} // shan(對全體使用魔法的bug),修改者jinchao+2001/12/07 MAGIC_Recovery_Battle( charaindex, toindex, marray, mp ); }else{ if( CHAR_CHECKINDEX( toindex ) == FALSE )return FALSE; // shan(對全體使用魔法的bug),修改者jinchao+2001/12/07 MAGIC_Recovery_Field( charaindex, marray); } return TRUE;}int MAGIC_OtherRecovery( int charaindex, int toindex, int marray, int mp ){ int battlemode; if( CHAR_CHECKINDEX( charaindex ) == FALSE )return FALSE; //{撩 battlemode = CHAR_getWorkInt( charaindex, CHAR_WORKBATTLEMODE ); if( battlemode == BATTLE_CHARMODE_INIT ){ return FALSE; } if( CHAR_getInt( charaindex, CHAR_MP ) < mp )return FALSE; // 井勻兇日母丟 CHAR_setInt( charaindex, CHAR_MP, CHAR_getInt( charaindex, CHAR_MP ) - mp ); if( IsBATTLING( charaindex ) == TRUE ){#ifdef _PREVENT_TEAMATTACK //滋潤 不得使用敵方 int battleindex = CHAR_getWorkInt( charaindex, CHAR_WORKBATTLEINDEX ); if( CHAR_getInt( charaindex, CHAR_WHICHTYPE ) == CHAR_TYPEPLAYER && BattleArray[battleindex].type != BATTLE_TYPE_P_vs_P ){ if( BATTLE_CheckSameSide( charaindex, toindex) == 0 ){//不同邊 int battleindex = CHAR_getWorkInt( charaindex, CHAR_WORKBATTLEINDEX ); BATTLE_NoAction( battleindex, BATTLE_Index2No( battleindex, charaindex) ); CHAR_talkToCli( charaindex, -1, "滋潤精靈..不得施予非玩家敵方。", CHAR_COLORYELLOW); return FALSE; } }#endif MAGIC_Recovery_Battle( charaindex, toindex, marray, mp ); }else{ if( CHAR_CHECKINDEX( toindex ) == FALSE )return FALSE; //{撩 MAGIC_OtherRecovery_Field( charaindex, toindex, marray); } return TRUE;}// 白奴□伙玉及簞嶺毛 祭今六月 芊int MAGIC_FieldAttChange( int charaindex, int toindex, int marray, int mp ){ int battlemode; // INDEX民尼永弁 if( CHAR_CHECKINDEX( charaindex ) == FALSE )return FALSE; //{撩 battlemode = CHAR_getWorkInt( charaindex, CHAR_WORKBATTLEMODE ); // 爵 釩銨凜反 骰允月 if( battlemode == BATTLE_CHARMODE_INIT ){ return FALSE; } // 壅 民尼永弁 if( CHAR_getInt( charaindex, CHAR_MP ) < mp )return FALSE; // 井勻兇日母丟 // 仇及 芊反 騷卞 壅 仄化 中[穴奶瓜旦卞卅月仇午反 中 CHAR_setInt( charaindex, CHAR_MP, CHAR_getInt( charaindex, CHAR_MP ) - mp ); // 爵 分勻兇日 if( IsBATTLING( charaindex ) == TRUE ){ return MAGIC_FieldAttChange_Battle( charaindex, toindex, marray, mp ); }else{ // 爵 匹卅井勻兇日 return FALSE; }}int MAGIC_StatusChange( int charaindex, int toindex, int marray, int mp ){ int battlemode; if( CHAR_CHECKINDEX( charaindex ) == FALSE )return FALSE; battlemode = CHAR_getWorkInt( charaindex, CHAR_WORKBATTLEMODE ); if( battlemode == BATTLE_CHARMODE_INIT ){ return FALSE; } if( CHAR_getInt( charaindex, CHAR_MP ) < mp )return FALSE; CHAR_setInt( charaindex, CHAR_MP, CHAR_getInt( charaindex, CHAR_MP ) - mp ); if( IsBATTLING( charaindex ) == TRUE ){#ifdef _PREVENT_TEAMATTACK //異常狀態不得使用友方 int battleindex = CHAR_getWorkInt( charaindex, CHAR_WORKBATTLEINDEX ); if( CHAR_getInt( charaindex, CHAR_WHICHTYPE ) == CHAR_TYPEPLAYER && BattleArray[battleindex].type != BATTLE_TYPE_P_vs_P ){ if( BATTLE_CheckSameSide( charaindex, toindex) == 1 ){//同邊 int battleindex = CHAR_getWorkInt( charaindex, CHAR_WORKBATTLEINDEX ); BATTLE_NoAction( battleindex, BATTLE_Index2No( battleindex, charaindex) ); CHAR_talkToCli( charaindex, -1, "異常狀態..不得施予友方。", CHAR_COLORYELLOW); return FALSE; } }#endif return MAGIC_StatusChange_Battle( charaindex, toindex, marray, mp ); }else{ return FALSE; }}#ifdef _OTHER_MAGICSTAUTSint MAGIC_MagicStatusChange( int charaindex, int toindex, int marray, int mp ){ int battlemode; if( CHAR_CHECKINDEX( charaindex ) == FALSE ) return FALSE; battlemode = CHAR_getWorkInt( charaindex, CHAR_WORKBATTLEMODE ); if( battlemode == BATTLE_CHARMODE_INIT ){ return FALSE; } if( CHAR_getInt( charaindex, CHAR_MP ) < mp )return FALSE; CHAR_setInt( charaindex, CHAR_MP, CHAR_getInt( charaindex, CHAR_MP ) - mp ); if( IsBATTLING( charaindex ) == TRUE ){ return MAGIC_MagicStatusChange_Battle( charaindex, toindex, marray, mp ); }else{ return FALSE; }}#endif#ifdef _MAGIC_DEEPPOISON//新增ver2,主要設定毒狀態5回未解時人物會陣亡// 旦 □正旦唱橘毛芨尹月 芊int MAGIC_StatusChange2( int charaindex, int toindex, int marray, int mp ){ int battlemode; // INDEX民尼永弁 if( CHAR_CHECKINDEX( charaindex ) == FALSE )return FALSE; //{撩 battlemode = CHAR_getWorkInt( charaindex, CHAR_WORKBATTLEMODE ); // 爵 釩銨凜反 骰允月 if( battlemode == BATTLE_CHARMODE_INIT ){ return FALSE; } //扣氣 if( CHAR_getInt( charaindex, CHAR_MP ) < mp )return FALSE; CHAR_setInt( charaindex, CHAR_MP, CHAR_getInt( charaindex, CHAR_MP ) - mp ); //call func if( IsBATTLING( charaindex ) == TRUE ){ return MAGIC_StatusChange_Battle2( charaindex, toindex, marray, mp ); }else{ return FALSE; }}#endif// 旦 □正旦唱橘莢汊今六月 芊int MAGIC_StatusRecovery( int charaindex, int toindex, int marray, int mp ){ int battlemode; // INDEX民尼永弁 if( CHAR_CHECKINDEX( charaindex ) == FALSE )return FALSE; //{撩 battlemode = CHAR_getWorkInt( charaindex, CHAR_WORKBATTLEMODE ); // 爵 釩銨凜反 骰允月 if( battlemode == BATTLE_CHARMODE_INIT ){ return FALSE; } // 壅 民尼永弁 if( CHAR_getInt( charaindex, CHAR_MP ) < mp )return FALSE; // 井勻兇日母丟 // 仇及 芊反 騷卞 壅 仄化 中[穴奶瓜旦卞卅月仇午反 中 CHAR_setInt( charaindex, CHAR_MP, CHAR_getInt( charaindex, CHAR_MP ) - mp ); // 爵 分勻兇日 if( IsBATTLING( charaindex ) == TRUE ){ return MAGIC_StatusRecovery_Battle( charaindex, toindex, marray, mp ); }else{ // 爵 匹卅井勻兇日 return FALSE; }}int MAGIC_MagicDef( int charaindex, int toindex, int marray, int mp ){ int battlemode; if( CHAR_CHECKINDEX( charaindex ) == FALSE )return FALSE; battlemode = CHAR_getWorkInt( charaindex, CHAR_WORKBATTLEMODE ); if( battlemode == BATTLE_CHARMODE_INIT ){ return FALSE; } if( CHAR_getInt( charaindex, CHAR_MP ) < mp )return FALSE; CHAR_setInt( charaindex, CHAR_MP, CHAR_getInt( charaindex, CHAR_MP ) - mp ); if( IsBATTLING( charaindex ) == TRUE ){#ifdef _PREVENT_TEAMATTACK //光鏡守..不得使用敵方 int battleindex = CHAR_getWorkInt( charaindex, CHAR_WORKBATTLEINDEX ); if( CHAR_getInt( charaindex, CHAR_WHICHTYPE ) == CHAR_TYPEPLAYER /*&& BattleArray[battleindex].type != BATTLE_TYPE_P_vs_P*/ ){ if( BATTLE_CheckSameSide( charaindex, toindex) == 0 ){//不同邊 int battleindex = CHAR_getWorkInt( charaindex, CHAR_WORKBATTLEINDEX ); BATTLE_NoAction( battleindex, BATTLE_Index2No( battleindex, charaindex) ); CHAR_talkToCli( charaindex, -1, "光鏡守..不得施予敵方。", CHAR_COLORYELLOW); return FALSE; } }#endif return MAGIC_MagicDef_Battle( charaindex, toindex, marray, mp ); }else{ return FALSE; }}// 竣濮井日汊唾今六月 芊int MAGIC_Ressurect( int charaindex, int toindex, int marray, int mp ){ int battlemode; // INDEX民尼永弁 if( CHAR_CHECKINDEX( charaindex ) == FALSE )return FALSE; //{撩 battlemode = CHAR_getWorkInt( charaindex, CHAR_WORKBATTLEMODE ); // 爵 釩銨凜反 骰允月 if( battlemode == BATTLE_CHARMODE_INIT ){ return FALSE; } // 壅 民尼永弁 if( CHAR_getInt( charaindex, CHAR_MP ) < mp )return FALSE; // 井勻兇日母丟 // 仇及 芊反 騷卞 壅 仄化 中[穴奶瓜旦卞卅月仇午反 中 CHAR_setInt( charaindex, CHAR_MP, CHAR_getInt( charaindex, CHAR_MP ) - mp ); // 爵 分勻兇日 if( IsBATTLING( charaindex ) == TRUE ){ return MAGIC_Ressurect_Battle( charaindex, toindex, marray, mp ); }else{ // 爵 匹卅井勻兇日 return FALSE; }}// 簞嶺毛 鱉今六月 芊int MAGIC_AttReverse( int charaindex, int toindex, int marray, int mp ){ int battlemode; // INDEX民尼永弁 if( CHAR_CHECKINDEX( charaindex ) == FALSE )return FALSE; //{撩 battlemode = CHAR_getWorkInt( charaindex, CHAR_WORKBATTLEMODE ); // 爵 釩銨凜反 骰允月 if( battlemode == BATTLE_CHARMODE_INIT ){ return FALSE; } // 壅 民尼永弁 if( CHAR_getInt( charaindex, CHAR_MP ) < mp )return FALSE; // 井勻兇日母丟 // 仇及 芊反 騷卞 壅 仄化 中[穴奶瓜旦卞卅月仇午反 中 CHAR_setInt( charaindex, CHAR_MP, CHAR_getInt( charaindex, CHAR_MP ) - mp ); // 爵 分勻兇日 if( IsBATTLING( charaindex ) == TRUE ){
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -