📄 pet_skill.c
字号:
#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 + -