📄 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 ){ 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 ){ 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 ){ 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 ){ 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 ){ return MAGIC_AttReverse_Battle( charaindex, toindex, marray, mp ); }else{ // 爵 匹卅井匀凶日 return FALSE; }}// 竣濮井日汊唾≈ 芊 豢int MAGIC_ResAndDef( 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; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -