⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 magic.c

📁 石器时代2.0完整版源代码.已经加入新功能. 在REDHAT9下GCC3.4编译成功.
💻 C
📖 第 1 页 / 共 2 页
字号:
#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 + -