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

📄 pet_skill.c

📁 石器时代8.0服务端完整源代码。可以直接编译
💻 C
📖 第 1 页 / 共 5 页
字号:
#include "version.h"#include <stdio.h>#include <string.h>#include "common.h"#include "buf.h"#include "configfile.h"#include "char_base.h"#include "char_data.h"#include "pet_skill.h"#include "battle.h"#include "battle_event.h"#include "battle_magic.h"#include "item.h"#include "item_gen.h"#include "char_talk.h"/*======================================================================== * 矢永玄及  卞勾中化及末□旦 宠物的各式技能 *========================================================================*/static Petskill	*PETSKILL_petskill;static int		PETSKILL_petskillnum;typedef struct tagPetskill_PetskillFunctionTable{	char			*functionname;		/*	涩烂白央奶伙卞踏仁楮醒及  蟆 */	PETSKILL_CALLFUNC	func;				/*    端卞裟太请今木月楮醒 */	int				hash;				/*  hash */	int				status;				/*  仇及戊穴件玉毛矢永玄互隙烂仄凶执 */}PETSKILL_PetskillFunctionTable;/*   毛  支仄凶日仇仇卞瓒  允月仪 */static PETSKILL_PetskillFunctionTable PETSKILL_functbl[] = {	{ "PETSKILL_None",				PETSKILL_None,		0 },	{ "PETSKILL_NormalAttack",		PETSKILL_NormalAttack,	0 },	{ "PETSKILL_NormalGuard",		PETSKILL_NormalGuard,	0 },	{ "PETSKILL_ContinuationAttack",PETSKILL_ContinuationAttack,	0 },	{ "PETSKILL_ChargeAttack",		PETSKILL_ChargeAttack,			0 },	{ "PETSKILL_Guardian",			PETSKILL_Guardian,		0 },	{ "PETSKILL_PowerBalance",		PETSKILL_PowerBalance,		0 },	{ "PETSKILL_Mighty",			PETSKILL_Mighty,		0 },	{ "PETSKILL_StatusChange",		PETSKILL_StatusChange,	0 },	{ "PETSKILL_EarthRound",		PETSKILL_EarthRound,	0 },	{ "PETSKILL_GuardBreak",		PETSKILL_GuardBreak,	0 },#ifdef _SKILL_GUARDBREAK2//破除防御2 vincent add 2002/05/20	{ "PETSKILL_GuardBreak2",		PETSKILL_GuardBreak2,	0 },#endif	{ "PETSKILL_Abduct",			PETSKILL_Abduct,		0 },	{ "PETSKILL_Steal",				PETSKILL_Steal,			0 },	{ "PETSKILL_Merge",				PETSKILL_Merge,			0 },#ifdef _ALCHEMIST	{ "PETSKILL_Alchemist",			PETSKILL_Merge,			0 },#endif	{ "PETSKILL_NoGuard",			PETSKILL_NoGuard,		0 },#ifdef _ITEM_INSLAY	{ "PETSKILL_Inslay",			PETSKILL_Inslay,		0 },#endif#ifdef _PETSKILL_FIXITEM	{ "PETSKILL_Fixitem",			PETSKILL_Fixitem,		0 },#endif#ifdef _MAGIC_SUPERWALL	{ "PETSKILL_MagicStatusChange" , PETSKILL_MagicStatusChange, 0},#endif// Terry add 2001/11/05#ifdef __ATTACK_MAGIC	{ "PETSKILL_AttackMagic",	PETSKILL_AttackMagic,0},#endif#ifdef _PSKILL_FALLGROUND	{ "PETSKILL_FallGround",	PETSKILL_FallGround, 0},#endif#ifdef _PETSKILL_EXPLODE	{ "PETSKILL_Explode",	PETSKILL_Explode, 0},#endif#ifdef _BATTLESTEAL_FIX	{ "PETSKILL_StealMoney",	PETSKILL_StealMoney,	0 },#endif#ifdef _PRO_BATTLEENEMYSKILL	{ "ENEMYSKILL_ReLife",	ENEMYSKILL_ReLife, 0},	{ "ENEMYSKILL_ReHP",	ENEMYSKILL_ReHP, 0},	{ "ENEMYSKILL_EnemyHelp",	ENEMYSKILL_EnemyHelp, 0},#endif#ifdef _SKILL_DAMAGETOHP	{ "PETSKILL_DamageToHp",	PETSKILL_DamageToHp, 0},#endif#ifdef _PETSKILL_TIMID	{ "PETSKILL_BattleTimid",	PETSKILL_BattleTimid, 0},#endif#ifdef _PETSKILL_2TIMID	{ "PETSKILL_2BattleTimid",	PETSKILL_2BattleTimid, 0},#endif#ifdef _PETSKILL_ANTINTER	{ "PETSKILL_AntInter",	PETSKILL_AntInter, 0},#endif#ifdef _PETSKILL_PROPERTY	{ "PETSKILL_BattleProperty",	PETSKILL_BattleProperty, 0},#endif#ifdef _PETSKILL_TEAR	{ "PETSKILL_BattleTearDamage",	PETSKILL_BattleTearDamage, 0},#endif#ifdef _BATTLE_LIGHTTAKE	{ "PETSKILL_Lighttakeed",	PETSKILL_Lighttakeed, 0},#endif#ifdef _BATTLE_ATTCRAZED	{ "PETSKILL_AttackCrazed",	PETSKILL_AttackCrazed, 0},#endif#ifdef _SHOOTCHESTNUT	// Syu ADD 宠技:丢栗子	{ "PETSKILL_AttackShoot",	PETSKILL_AttackShoot, 0},#endif#ifdef _Skill_MPDAMAGE	{ "PETSKILL_MpDamage",	PETSKILL_MpDamage, 0},#endif#ifdef _SKILL_TOOTH	{ "PETSKILL_ToothCrushe",	PETSKILL_ToothCrushe, 0},#endif#ifdef _PETSKILL_SETDUCK	{ "PETSKILL_SetDuck",	PETSKILL_SetDuck, 0},#endif#ifdef _MAGICPET_SKILL	{ "PETSKILL_SetMagicPet",	PETSKILL_SetMagicPet, 0},#endif#ifdef _PSKILL_MODIFY	{ "PETSKILL_Modifyattack",	PETSKILL_Modifyattack, 0},#endif#ifdef _PSKILL_MDFYATTACK	{ "PETSKILL_Mdfyattack",	PETSKILL_Mdfyattack, 0},#endif#ifdef _VARY_WOLF	{ "PETSKILL_Vary", PETSKILL_Vary, 0},#endif#ifdef _SKILL_WILDVIOLENT_ATT    { "PETSKILL_WildViolentAttack",	PETSKILL_WildViolentAttack, 0},//vincent add 2002/05/16#endif#ifdef _SKILL_SPEEDY_ATT    { "PETSKILL_SpeedyAttack",	PETSKILL_SpeedyAttack, 0},//vincent add 2002/05/20#endif#ifdef _SKILL_SACRIFICE      { "PETSKILL_Sacrifice",	PETSKILL_Sacrifice, 0},//vincent add 2002/05/30#endif#ifdef _SKILL_REFRESH    { "PETSKILL_Refresh",	PETSKILL_Refresh, 0},//vincent add 2002/08/08#endif#ifdef _SKILL_WEAKEN  //vincent宠技:虚弱    { "PETSKILL_Weaken",	PETSKILL_Weaken, 0},//vincent add 2002/07/11#endif#ifdef _SKILL_DEEPPOISON  //vincent宠技:剧毒     { "PETSKILL_Deeppoison",	PETSKILL_Deeppoison, 0},//vincent add 2002/07/16#endif#ifdef _SKILL_BARRIER  //vincent宠技:魔障     { "PETSKILL_Barrier",	PETSKILL_Barrier, 0},//vincent add 2002/07/16#endif#ifdef _SKILL_NOCAST  //vincent宠技:沉默     { "PETSKILL_Nocast",	PETSKILL_Nocast, 0},//vincent add 2002/07/16#endif#ifdef _SKILL_ROAR //vincent宠技:大吼    { "PETSKILL_Roar",	PETSKILL_Roar, 0},//vincent add 2002/07/11#endif	#ifdef _PET_SKILL_SARS				// WON ADD 毒煞蔓延	{ "PETSKILL_Sars",	PETSKILL_Sars, 0},#endif#ifdef _SONIC_ATTACK				// WON ADD 音波攻击	{ "PETSKILL_Sonic",	PETSKILL_Sonic, 0},#endif#ifdef _PETSKILL_REGRET	{ "PETSKILL_Regret",	PETSKILL_Regret, 0},#endif#ifdef _PETSKILL_GYRATE    { "PETSKILL_Gyrate", PETSKILL_Gyrate, 0},#endif 	#ifdef _PETSKILL_ACUPUNCTURE //针刺外皮    { "PETSKILL_Acupuncture", PETSKILL_Acupuncture, 0},#endif#ifdef _PETSKILL_RETRACE	{ "PETSKILL_Retrace", PETSKILL_Retrace, 0},#endif#ifdef _PETSKILL_HECTOR    { "PETSKILL_Hector", PETSKILL_Hector, 0},#endif#ifdef _PETSKILL_FIREKILL    { "PETSKILL_Firekill", PETSKILL_Firekill, 0},#endif#ifdef _PETSKILL_DAMAGETOHP	{ "PETSKILL_DamageToHp2",	PETSKILL_DamageToHp2, 0},#endif#ifdef _PETSKILL_BECOMEFOX	{ "PETSKILL_BecomeFox",	PETSKILL_BecomeFox, 0},#endif#ifdef _PETSKILL_BECOMEPIG    { "PETSKILL_BecomePig",	PETSKILL_BecomePig, 0},#endif#ifdef _PETSKILL_SHOWMERCY    { "PETSKILL_ShowMercy",	PETSKILL_ShowMercy, 0},#endif#ifdef _PETSKILL_COMBINED    { "PETSKILL_Combined",	PETSKILL_Combined, 0},#endif#ifdef _PETSKILL_LER		{ "PETSKILL_BatFly",	PETSKILL_BatFly, 0},		{ "PETSKILL_DivideAttack",	PETSKILL_DivideAttack, 0},#endif#ifdef _PETSKILL_BATTLE_MODEL		{ "PETSKILL_BattleModel",	PETSKILL_BattleModel, 0},#endif};/*----------------------------------------------------------------------*//* 湘  民尼永弁]失弁本旦楮溢 *//*----------------------------------------------------------------------*/INLINE BOOL PETSKILL_CHECKINDEX( int index ){    if( PETSKILL_petskillnum<=index || index<0 )return FALSE;    return TRUE;}/*----------------------------------------------------------------------*/static INLINE BOOL PETSKILL_CHECKINTDATAINDEX( int index){	if( PETSKILL_DATAINTNUM <= index || index < 0 ) return FALSE;	return TRUE;}/*----------------------------------------------------------------------*/static INLINE BOOL PETSKILL_CHECKCHARDATAINDEX( int index){	if( PETSKILL_DATACHARNUM <= index || index < 0 ) return FALSE;	return TRUE;}/*----------------------------------------------------------------------*/INLINE int PETSKILL_getInt( int index, PETSKILL_DATAINT element){	return PETSKILL_petskill[index].data[element];}/*----------------------------------------------------------------------*/INLINE int PETSKILL_setInt( int index, PETSKILL_DATAINT element, int data){	int buf;	buf = PETSKILL_petskill[index].data[element];	PETSKILL_petskill[index].data[element]=data;	return buf;}/*----------------------------------------------------------------------*/INLINE char* PETSKILL_getChar( int index, PETSKILL_DATACHAR element){	if( !PETSKILL_CHECKINDEX( index)) return NULL;	if( !PETSKILL_CHECKCHARDATAINDEX( element)) return NULL;	return PETSKILL_petskill[index].string[element].string;}/*----------------------------------------------------------------------*/INLINE BOOL PETSKILL_setChar( int index ,PETSKILL_DATACHAR element, char* new ){    if(!PETSKILL_CHECKINDEX(index))return FALSE;    if(!PETSKILL_CHECKCHARDATAINDEX(element))return FALSE;    strcpysafe( PETSKILL_petskill[index].string[element].string,                sizeof(PETSKILL_petskill[index].string[element].string),                new );    return TRUE;}/*---------------------------------------------------------------------- * 矢永玄  及醒毛襞月[ *---------------------------------------------------------------------*/int PETSKILL_getPetskillNum( void){	return PETSKILL_petskillnum;}#ifdef _CFREE_petskill#define PETSKILL_STARTINTNUM	7 //PETSKILL_DATACHARNUM+1#else #define	PETSKILL_STARTINTNUM		5#endif/*---------------------------------------------------------------------- * 矢永玄  及涩烂白央奶伙毛  戈//初始宠技 *---------------------------------------------------------------------*/BOOL PETSKILL_initPetskill( char *filename){    FILE*   f;    char    line[256];    int     linenum=0;    int     petskill_readlen=0;	int		i,j;	int		max_skillid =0;    f = fopen(filename,"r");    if( f == NULL ){        print( "file open error\n");        return FALSE;    }    PETSKILL_petskillnum=0;    /*  引内  躲卅垫互窒垫丐月井升丹井譬屯月    *///读曲宠技总数    while( fgets( line, sizeof( line ), f ) ){		char    token[256];        linenum ++;        if( line[0] == '#' )continue;        /* comment */        if( line[0] == '\n' )continue;       /* none    */        chomp( line );        PETSKILL_petskillnum++;#ifdef _PETSKILL_OPTIMUM // Robin 取出最大宠技ID		if( getStringFromIndexWithDelim( line, ",", PETSKILL_STARTINTNUM, token, sizeof(token)) == FALSE )			continue;		//print("\n 宠技ID:%d %s ", atoi( token), line);		max_skillid = max( atoi( token), max_skillid);#endif    }    if( fseek( f, 0, SEEK_SET ) == -1 ){        fprint( "寻找失败\n" );        fclose(f);        return FALSE;    }#ifdef _PETSKILL_OPTIMUM // 宠技Table数为 最大技能ID +1	PETSKILL_petskillnum = max_skillid +1;//	print("\n 最大宠技ID = %d\n", max_skillid);#endif    PETSKILL_petskill = allocateMemory( sizeof(struct tagPetskill)                                   * PETSKILL_petskillnum );    if( PETSKILL_petskill == NULL ){        fprint( "无法分配内存 %d\n" ,                sizeof(struct tagPetskill)*PETSKILL_petskillnum);        fclose( f );        return FALSE;    }	/* 赓渝祭 */    for( i = 0; i < PETSKILL_petskillnum; i ++ ) {    	for( j = 0; j < PETSKILL_DATAINTNUM; j ++ ) {    		PETSKILL_setInt( i,j,-1);    	}    	for( j = 0; j < PETSKILL_DATACHARNUM; j ++ ) {    		PETSKILL_setChar( i,j,"");    	}    }    /*  引凶  心  允    */    linenum = 0;    while( fgets( line, sizeof( line ), f ) ){        linenum ++;        if( line[0] == '#' )continue;        /* comment */        if( line[0] == '\n' )continue;       /* none    */                                                chomp( line );        /*  垫毛帮溥允月    */        /*  引内 tab 毛 " " 卞  五晶尹月    */        replaceString( line, '\t' , ' ' );        /* 燮  及旦矢□旦毛潸月[*/{        char    buf[256];        for( i = 0; i < strlen( line); i ++) {            if( line[i] != ' ' ) {                break;            }            strcpy( buf, &line[i]);        }        if( i != 0 ) {            strcpy( line, buf);        }}{        char    token[256];        int     ret;#ifdef _PETSKILL_OPTIMUM // 读取本行宠技的ID, 直接以宠技ID当Table index		ret = getStringFromIndexWithDelim( line, ",", PETSKILL_STARTINTNUM, token, sizeof(token));		if( ret==FALSE ){			fprint("文件语法错误:%s 第%d行\n",filename,linenum);			break;		}		petskill_readlen = atoi( token);#endif		for( i = 0; i < PETSKILL_DATACHARNUM; i ++ ) {	        /*    侬  迕玄□弁件毛苇月    */	        ret = getStringFromIndexWithDelim( line,",", i + 1, token,sizeof(token));	        if( ret==FALSE ){	            fprint("文件语法错误:%s 第%d行\n",filename,linenum);	            break;	        }	        PETSKILL_setChar( petskill_readlen, i, token);		}        /* 4勾  动嫦反醒袄犯□正 */        for( i = PETSKILL_STARTINTNUM; i < PETSKILL_DATAINTNUM+PETSKILL_STARTINTNUM; i ++ ) {            ret = getStringFromIndexWithDelim( line,",",i,token,                                               sizeof(token));            if( ret==FALSE ){                fprint("文件语法错误:%s 第%d行\n",filename,linenum);                break;            }            if( strlen( token) != 0 ) {	            PETSKILL_setInt( petskill_readlen, i - PETSKILL_STARTINTNUM, atoi( token));			}        }        if( i < PETSKILL_DATAINTNUM+PETSKILL_STARTINTNUM ) continue;        #ifdef _CFREE_petskill		if(line[0]=='E')	PETSKILL_setInt( petskill_readlen, PETSKILL_ILLEGAL, 1);#else		// Robin 2001/02/26 +1 set_illegal_Skill		if(line[0]=='T')	PETSKILL_setInt( petskill_readlen, PETSKILL_ILLEGAL, 1);#endif        //print("Id:%d illegal:%d\n",PETSKILL_getInt(petskill_readlen,PETSKILL_ID),PETSKILL_getInt(petskill_readlen,PETSKILL_ILLEGAL));				petskill_readlen ++;}		

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -