2745 lines
83 KiB
C
2745 lines
83 KiB
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"
|
||
#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 _PET_BIANSHEN
|
||
{ "PETSKILL_Set_Vary", PETSKILL_Set_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
|
||
{ "PETSKILL_ZiYun1", PETSKILL_ZiYun1, 0},
|
||
|
||
};
|
||
|
||
/*----------------------------------------------------------------------*/
|
||
|
||
|
||
/* 湘 民尼永弁]失弁本旦楮溢 */
|
||
/*----------------------------------------------------------------------*/
|
||
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 "\0";
|
||
if( !PETSKILL_CHECKCHARDATAINDEX( element)) return "\0";
|
||
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;
|
||
}
|
||
strcpysafe( buf,sizeof(buf), &line[i]);
|
||
}
|
||
if( i != 0 ) {
|
||
strcpysafe( line,sizeof(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 ++;
|
||
}
|
||
|
||
}
|
||
fclose(f);
|
||
|
||
PETSKILL_petskillnum = petskill_readlen;
|
||
|
||
|
||
print( "有效宠物技能数是 %d...", PETSKILL_petskillnum );
|
||
|
||
/* hash 及瓒 */
|
||
for( i = 0; i < arraysizeof( PETSKILL_functbl); i ++ ) {
|
||
PETSKILL_functbl[i].hash = hashpjw( PETSKILL_functbl[i].functionname);
|
||
}
|
||
/*
|
||
#ifdef _CFREE_petskill
|
||
for( i=0; i <PETSKILL_petskillnum ; i++ ){
|
||
for( j = PETSKILL_NAME; j < PETSKILL_DATACHARNUM; j ++ ){
|
||
print( "%s ", PETSKILL_getChar( i, j));
|
||
}
|
||
print( "\n");
|
||
for( j = PETSKILL_ID; j < PETSKILL_DATAINTNUM; j ++ ){
|
||
print( "%d ", PETSKILL_getInt( i, j));
|
||
}
|
||
print( "\n-------------------------------------------------\n");
|
||
|
||
}
|
||
#endif
|
||
*/
|
||
|
||
return TRUE;
|
||
}
|
||
/*------------------------------------------------------------------------
|
||
* Petskill及涩烂白央奶伙 心 仄
|
||
*-----------------------------------------------------------------------*/
|
||
BOOL PETSKILL_reinitPetskill( void )
|
||
{
|
||
freeMemory( PETSKILL_petskill);
|
||
return( PETSKILL_initPetskill( getPetskillfile()));
|
||
}
|
||
/*------------------------------------------------------------------------
|
||
* PETSKILL_ID井日骄侬毛襞月楮醒
|
||
* 忒曰袄
|
||
* 岳 : 骄侬
|
||
* 撩 : -1
|
||
*-----------------------------------------------------------------------*/
|
||
int PETSKILL_getPetskillArray( int petskillid)
|
||
{
|
||
#ifdef _PETSKILL_OPTIMUM // 查询宠技ID改为阵列式
|
||
if( petskillid >= 0 && petskillid < PETSKILL_petskillnum )
|
||
return PETSKILL_petskill[petskillid].data[PETSKILL_ID];
|
||
#else
|
||
int i;
|
||
for( i = 0; i < PETSKILL_petskillnum; i ++ ) {
|
||
if( PETSKILL_petskill[i].data[PETSKILL_ID] == petskillid ) {
|
||
return i;
|
||
}
|
||
}
|
||
#endif
|
||
return -1;
|
||
}
|
||
/*------------------------------------------------------------
|
||
* 矢永玄 及楮醒 井日禾奶件正□毛忒允
|
||
* 娄醒
|
||
* name char* 热诸及 蟆
|
||
* 忒曰袄
|
||
* 楮醒尺及禾奶件正[卅中桦宁卞反NULL
|
||
------------------------------------------------------------*/
|
||
PETSKILL_CALLFUNC PETSKILL_getPetskillFuncPointer(char* name )
|
||
{
|
||
int i;
|
||
int hash = hashpjw( name );
|
||
for( i = 0 ; i< arraysizeof( PETSKILL_functbl) ; i++ ) {
|
||
if( PETSKILL_functbl[i].hash == hash ) {
|
||
if( strcmp( PETSKILL_functbl[i].functionname, name ) == 0 ) {
|
||
return PETSKILL_functbl[i].func;
|
||
}
|
||
}
|
||
}
|
||
return NULL;
|
||
}
|
||
|
||
int PETSKILL_Use(
|
||
int charaindex,
|
||
int havepetskill,
|
||
int toindex,
|
||
char *data
|
||
//BOOL isCLI // Robin 2001/02/26 if owner is player
|
||
)
|
||
{
|
||
int array, petskillid;
|
||
int ret;
|
||
PETSKILL_CALLFUNC func;
|
||
int playcharaindex;
|
||
playcharaindex = CHAR_getCharPet(CHAR_getWorkInt(charaindex,CHAR_WORKPLAYERINDEX),CHAR_getInt(CHAR_getWorkInt(charaindex,CHAR_WORKPLAYERINDEX),CHAR_RIDEPET));
|
||
petskillid = CHAR_getPetSkill( charaindex, havepetskill);
|
||
if(playcharaindex==charaindex){
|
||
if(petskillid!=0 && petskillid!=1 && petskillid!=2)
|
||
petskillid=0;
|
||
}
|
||
#ifdef _FIXWOLF // Syu ADD 修正狼人变身Bug
|
||
if( petskillid == 600 ){
|
||
if ( CHAR_getInt ( charaindex , CHAR_BASEIMAGENUMBER) == 101428 )
|
||
petskillid = -1;
|
||
}
|
||
#endif
|
||
|
||
array = PETSKILL_getPetskillArray( petskillid);
|
||
if( array == -1 ) return FALSE;
|
||
#ifndef _OPEN_E_PETSKILL
|
||
if(PETSKILL_getInt(array, PETSKILL_ILLEGAL)){
|
||
if( (CHAR_getInt(charaindex, CHAR_WHICHTYPE)==CHAR_TYPEPET) ){
|
||
//print(" CHAR_TYPEPET:%d ", charaindex);
|
||
return FALSE;
|
||
}
|
||
}
|
||
#endif
|
||
#ifdef _PETSKILL_CHECKTYPE
|
||
#define _SKILLTYPE_NONE 0x01
|
||
#define _SKILLTYPE_BATTLE 0x02
|
||
if( (CHAR_getInt(charaindex, CHAR_WHICHTYPE)==CHAR_TYPEPET) &&
|
||
(PETSKILL_getInt( array, PETSKILL_USETYPE) & _SKILLTYPE_BATTLE) > 0){
|
||
int masterindex = CHAR_getWorkInt( charaindex, CHAR_WORKPLAYERINDEX);
|
||
if( !CHAR_CHECKINDEX( masterindex) ) return FALSE;
|
||
if( CHAR_getWorkInt( masterindex, CHAR_WORKBATTLEMODE) == BATTLE_CHARMODE_NONE ){
|
||
return FALSE;
|
||
}
|
||
}
|
||
#endif
|
||
func = PETSKILL_getPetskillFuncPointer( PETSKILL_getChar( array, PETSKILL_FUNCNAME) );
|
||
if( func ) {
|
||
ret = func( charaindex, toindex, array, data );
|
||
}else {
|
||
ret = FALSE;
|
||
}
|
||
return ret;
|
||
}
|
||
|
||
|
||
int _PETSKILL_GetArray( char *file, int line, int charaindex, int havepetskill )
|
||
{
|
||
int petskillid,array;
|
||
|
||
petskillid = CHAR_getPetSkill( charaindex, havepetskill);
|
||
if( petskillid == -1 ) {
|
||
return -1;
|
||
}
|
||
|
||
array = PETSKILL_getPetskillArray( petskillid);
|
||
|
||
return array;
|
||
}
|
||
|
||
|
||
//----------------------------------------------------------------------
|
||
int PETSKILL_ContinuationAttack(
|
||
int charaindex,
|
||
int toindex,
|
||
int array,
|
||
char *data
|
||
|
||
)
|
||
{
|
||
#ifdef _FIX_ContinuationAttack
|
||
if(toindex<0 || toindex>=BATTLE_ENTRY_MAX*2){
|
||
print("err:N段攻击的击目标索引异常 %d ", toindex);
|
||
return FALSE;
|
||
}
|
||
#endif
|
||
#ifdef _PETSKILL_NONO_FIX
|
||
if(CHAR_getWorkInt(charaindex,CHAR_WORKFIXAI)>=40 && CHAR_getWorkInt(charaindex,CHAR_WORKBATTLEMODE)!=BATTLE_CHARMODE_NONE && CHAR_getInt(charaindex, CHAR_WHICHTYPE)==CHAR_TYPEPET){
|
||
CHAR_setWorkInt(charaindex,CHAR_WORKATTACKPOWER,CHAR_getWorkInt(charaindex,CHAR_WORKFIXSTR));
|
||
CHAR_setWorkInt(charaindex,CHAR_WORKDEFENCEPOWER,CHAR_getWorkInt(charaindex,CHAR_WORKFIXTOUGH));
|
||
CHAR_setWorkInt(charaindex,CHAR_WORKQUICK,CHAR_getWorkInt(charaindex,CHAR_WORKFIXDEX));
|
||
}
|
||
#endif
|
||
char *pszOption;
|
||
int N = 1;
|
||
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_S_RENZOKU );
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM2, toindex );
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK );
|
||
|
||
pszOption = PETSKILL_getChar( array, PETSKILL_OPTION );
|
||
if( sscanf( pszOption, "%d", &N ) == 1 ){
|
||
if( N < 1 || N > 10 )N = 1;
|
||
}else{
|
||
N = 1;
|
||
}
|
||
|
||
CHAR_SETWORKINT_LOW( charaindex, CHAR_WORKBATTLECOM3, N );
|
||
|
||
return TRUE;
|
||
}
|
||
|
||
int PETSKILL_ChargeAttack(
|
||
int charaindex,
|
||
int toindex,
|
||
int array,
|
||
char *data
|
||
)
|
||
{
|
||
char *pszOption, *pszP;
|
||
int N = 1, Per = 0;
|
||
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_S_CHARGE );
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM2, toindex );
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK );
|
||
pszOption = PETSKILL_getChar( array, PETSKILL_OPTION );
|
||
if( sscanf( pszOption, "%d", &N ) == 1 ){
|
||
if( N < 1 || N > 10 )N = 1;
|
||
}else{
|
||
N = 1;
|
||
}
|
||
if( (pszP = strstr( pszOption, "攻%" ) ) != NULL ){
|
||
sscanf( pszP+3, "%d", &Per );
|
||
}
|
||
CHAR_SETWORKINT_LOW( charaindex, CHAR_WORKBATTLECOM3, N );
|
||
CHAR_SETWORKINT_HIGH( charaindex, CHAR_WORKBATTLECOM3, Per );
|
||
return TRUE;
|
||
}
|
||
|
||
int PETSKILL_Guardian(
|
||
int charaindex,
|
||
int toNo,
|
||
int array,
|
||
char *data
|
||
)
|
||
{
|
||
char *pszOption, *pszP;
|
||
int
|
||
battleindex, side, pos, ownerpos,
|
||
strdef, flg;
|
||
float fPer = 0.01;
|
||
|
||
pszOption = PETSKILL_getChar( array, PETSKILL_OPTION );
|
||
|
||
if( (pszP = strstr( pszOption, "攻%" ) ) != NULL ){
|
||
sscanf( pszP+3, "%f", &fPer );
|
||
fPer=(fPer/100);
|
||
strdef=CHAR_getWorkInt(charaindex,CHAR_WORKFIXSTR);
|
||
strdef=(int)(strdef * fPer);
|
||
CHAR_setWorkInt(charaindex,CHAR_WORKATTACKPOWER,(CHAR_getWorkInt(charaindex,CHAR_WORKFIXSTR)+strdef));
|
||
}
|
||
|
||
if( (pszP = strstr( pszOption, "防%" ) ) != NULL ){
|
||
sscanf( pszP+3, "%f", &fPer );
|
||
fPer=(fPer/100);
|
||
strdef=CHAR_getWorkInt(charaindex,CHAR_WORKFIXTOUGH);
|
||
strdef=(int)(strdef * fPer);
|
||
CHAR_setWorkInt(charaindex,CHAR_WORKDEFENCEPOWER,(CHAR_getWorkInt(charaindex,CHAR_WORKFIXTOUGH)+strdef));
|
||
}
|
||
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_S_GUARDIAN_ATTACK );
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM2, toNo );
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK );
|
||
|
||
flg = CHAR_getWorkInt( charaindex, CHAR_WORKBATTLEFLG );
|
||
flg |= CHAR_BATTLEFLG_GUARDIAN;
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEFLG, flg );
|
||
|
||
battleindex = CHAR_getWorkInt( charaindex, CHAR_WORKBATTLEINDEX );
|
||
|
||
pos = BATTLE_Index2No( battleindex, charaindex );
|
||
|
||
if( (pszP = strstr( pszOption, "COM:" ) ) != NULL
|
||
&& strstr( pszP+4, "防御" ) != NULL
|
||
){
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_GUARD );
|
||
|
||
side = ( toNo >= SIDE_OFFSET )?( 1 ):( 0 );
|
||
ownerpos = toNo - side * SIDE_OFFSET;
|
||
|
||
if( 0 <= ownerpos && ownerpos < SIDE_OFFSET ){
|
||
BattleArray[battleindex].Side[side].Entry[ownerpos].guardian = pos;
|
||
}
|
||
|
||
}else{
|
||
side = CHAR_getWorkInt( charaindex, CHAR_WORKBATTLESIDE );
|
||
ownerpos = pos - 5;
|
||
ownerpos -= side * SIDE_OFFSET;
|
||
|
||
if( ownerpos < 0 || ownerpos > 19 ){
|
||
}else{
|
||
BattleArray[battleindex].Side[side].Entry[ownerpos].guardian = pos;
|
||
}
|
||
}
|
||
|
||
return TRUE;
|
||
}
|
||
|
||
int PETSKILL_Mighty(
|
||
int charaindex,
|
||
int toindex,
|
||
int array,
|
||
char *data
|
||
)
|
||
{
|
||
#ifdef _PETSKILL_NONO_FIX
|
||
if(CHAR_getWorkInt(charaindex,CHAR_WORKFIXAI)>=40 && CHAR_getWorkInt(charaindex,CHAR_WORKBATTLEMODE)!=BATTLE_CHARMODE_NONE && CHAR_getInt(charaindex, CHAR_WHICHTYPE)==CHAR_TYPEPET){
|
||
CHAR_setWorkInt(charaindex,CHAR_WORKATTACKPOWER,CHAR_getWorkInt(charaindex,CHAR_WORKFIXSTR));
|
||
CHAR_setWorkInt(charaindex,CHAR_WORKDEFENCEPOWER,CHAR_getWorkInt(charaindex,CHAR_WORKFIXTOUGH));
|
||
CHAR_setWorkInt(charaindex,CHAR_WORKQUICK,CHAR_getWorkInt(charaindex,CHAR_WORKFIXDEX));
|
||
}
|
||
#endif
|
||
char *pszOption, *pszP;
|
||
int iBai = 0, iDuck = 0;
|
||
float fBai = 2.00;
|
||
float fPer = 0.01;
|
||
int strdef,i;
|
||
char szTurn[] = "turn";
|
||
char *hetStatus[]={"全", "毒", "麻", "眠", "石", "醉", "乱", "虚", "剧", "障", "默"};
|
||
pszOption = PETSKILL_getChar( array, PETSKILL_OPTION );
|
||
for(i=0;i<11;i++){
|
||
if((pszP = strstr( pszOption, hetStatus[i] ) ) != NULL) break;
|
||
}
|
||
if(i == 11) i=0;
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM5, i);
|
||
if((pszP = strstr( pszOption, szTurn ) ) != NULL){
|
||
pszP += sizeof( szTurn );
|
||
sscanf( pszP, "%d", &i );
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM6, i);
|
||
}else{
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM6, 1);
|
||
}
|
||
|
||
if((pszP = strstr( pszOption, "成" ) ) != NULL){
|
||
sscanf( pszP+3, "%d", &i );
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM7, i);
|
||
}else{
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM7, 60);
|
||
}
|
||
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_S_MIGHTY );
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM2, toindex );
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK );
|
||
|
||
if( (pszP = strstr( pszOption, "倍" ) ) != NULL ){
|
||
sscanf( pszP+2, "%f", &fBai );
|
||
iBai = (int)(fBai * 100);
|
||
}
|
||
CHAR_SETWORKINT_LOW( charaindex, CHAR_WORKBATTLECOM3, iBai );
|
||
pszOption = PETSKILL_getChar( array, PETSKILL_OPTION );
|
||
if( ( pszP = strstr( pszOption, "避" ) ) != NULL){
|
||
sscanf( pszP+2, "%d", &iDuck );
|
||
}
|
||
if( (pszP = strstr( pszOption, "攻%" ) ) != NULL ){
|
||
sscanf( pszP+3, "%f", &fPer );
|
||
fPer=(fPer/100);
|
||
strdef=CHAR_getWorkInt(charaindex,CHAR_WORKFIXSTR);
|
||
strdef=(int)(strdef * fPer);
|
||
CHAR_setWorkInt(charaindex,CHAR_WORKATTACKPOWER,(CHAR_getWorkInt(charaindex,CHAR_WORKFIXSTR)+strdef));
|
||
}
|
||
|
||
if( (pszP = strstr( pszOption, "防%" ) ) != NULL ){
|
||
sscanf( pszP+3, "%f", &fPer );
|
||
fPer=(fPer/100);
|
||
strdef=CHAR_getWorkInt(charaindex,CHAR_WORKFIXTOUGH);
|
||
strdef=(int)(strdef * fPer);
|
||
CHAR_setWorkInt(charaindex,CHAR_WORKDEFENCEPOWER,(CHAR_getWorkInt(charaindex,CHAR_WORKFIXTOUGH)+strdef));
|
||
}
|
||
|
||
if( (pszP = strstr( pszOption, "敏%" ) ) != NULL ){
|
||
sscanf( pszP+3, "%f", &fPer );
|
||
fPer=(fPer/100);
|
||
strdef=CHAR_getWorkInt(charaindex,CHAR_WORKFIXDEX);
|
||
strdef=(int)(strdef * fPer);
|
||
CHAR_setWorkInt(charaindex,CHAR_WORKQUICK,(CHAR_getWorkInt(charaindex,CHAR_WORKFIXDEX)+strdef));
|
||
}
|
||
CHAR_SETWORKINT_HIGH( charaindex, CHAR_WORKBATTLECOM3, iDuck );
|
||
return TRUE;
|
||
}
|
||
|
||
|
||
|
||
int PETSKILL_PowerBalance(
|
||
int charaindex,
|
||
int toindex,
|
||
int array,
|
||
char *data
|
||
)
|
||
{
|
||
char *pszOption="\0", *pszP;
|
||
float fPer = 0.01;
|
||
int strdef;
|
||
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_S_POWERBALANCE);
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM2, toindex );
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK );
|
||
|
||
pszOption = PETSKILL_getChar( array, PETSKILL_OPTION );
|
||
|
||
if( pszOption == "\0" ) {
|
||
print("\n pszOption == NULL ");
|
||
return FALSE;
|
||
}
|
||
if( (pszP = strstr( pszOption, "攻%" ) ) != NULL ){
|
||
sscanf( pszP+3, "%f", &fPer );
|
||
fPer=(fPer/100);
|
||
strdef=CHAR_getWorkInt(charaindex,CHAR_WORKFIXSTR);
|
||
strdef=(int)(strdef * fPer);
|
||
CHAR_setWorkInt(charaindex,CHAR_WORKATTACKPOWER,(CHAR_getWorkInt(charaindex,CHAR_WORKFIXSTR)+strdef));
|
||
}
|
||
|
||
if( (pszP = strstr( pszOption, "防%" ) ) != NULL ){
|
||
sscanf( pszP+3, "%f", &fPer );
|
||
fPer=(fPer/100);
|
||
strdef=CHAR_getWorkInt(charaindex,CHAR_WORKFIXTOUGH);
|
||
strdef=(int)(strdef * fPer);
|
||
CHAR_setWorkInt(charaindex,CHAR_WORKDEFENCEPOWER,(CHAR_getWorkInt(charaindex,CHAR_WORKFIXTOUGH)+strdef));
|
||
}
|
||
|
||
if( (pszP = strstr( pszOption, "敏%" ) ) != NULL ){
|
||
sscanf( pszP+3, "%f", &fPer );
|
||
fPer=(fPer/100);
|
||
strdef=CHAR_getWorkInt(charaindex,CHAR_WORKFIXDEX);
|
||
strdef=(int)(strdef * fPer);
|
||
CHAR_setWorkInt(charaindex,CHAR_WORKQUICK,(CHAR_getWorkInt(charaindex,CHAR_WORKFIXDEX)+strdef));
|
||
}
|
||
|
||
return TRUE;
|
||
}
|
||
|
||
//----------------------------------------------------------------------
|
||
int PETSKILL_StatusChange(
|
||
int charaindex,
|
||
int toindex,
|
||
int array,
|
||
char *data
|
||
|
||
)
|
||
{
|
||
char *pszOption, *pszP;
|
||
float fPer = 0.01;
|
||
int strdef;
|
||
int status = -1, i = 0, turn = 3;
|
||
char szTurn[] = "turn";
|
||
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_S_STATUSCHANGE );
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM2, toindex );
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK );
|
||
|
||
pszOption = PETSKILL_getChar( array, PETSKILL_OPTION );
|
||
pszP = pszOption;
|
||
|
||
for( ;status == -1 && pszP[0] != 0; pszP++ ){
|
||
for( i = 1; i < BATTLE_ST_END; i ++ ){
|
||
if( strncmp( pszP, aszStatus[i], 2 ) == 0 ){
|
||
status = i;
|
||
pszP +=2;
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
|
||
if( ( pszP = strstr( pszP, szTurn ) ) != NULL){
|
||
pszP += sizeof( szTurn );
|
||
sscanf( pszP, "%d", &turn );
|
||
}
|
||
|
||
CHAR_SETWORKINT_LOW( charaindex, CHAR_WORKBATTLECOM3, i );
|
||
CHAR_SETWORKINT_HIGH( charaindex, CHAR_WORKBATTLECOM3, turn );
|
||
|
||
if( (pszP = strstr( pszOption, "攻%" ) ) != NULL ){
|
||
sscanf( pszP+3, "%f", &fPer );
|
||
fPer=(fPer/100);
|
||
strdef=CHAR_getWorkInt(charaindex,CHAR_WORKFIXSTR);
|
||
strdef=(int)(strdef * fPer);
|
||
CHAR_setWorkInt(charaindex,CHAR_WORKATTACKPOWER,
|
||
(CHAR_getWorkInt(charaindex,CHAR_WORKFIXSTR)+strdef) );
|
||
}
|
||
|
||
if( (pszP = strstr( pszOption, "防%" ) ) != NULL ){
|
||
sscanf( pszP+3, "%f", &fPer );
|
||
fPer=(fPer/100);
|
||
|
||
strdef=CHAR_getWorkInt(charaindex,CHAR_WORKFIXTOUGH);
|
||
strdef=(int)(strdef * fPer);
|
||
CHAR_setWorkInt(charaindex,CHAR_WORKDEFENCEPOWER,
|
||
(CHAR_getWorkInt(charaindex,CHAR_WORKFIXTOUGH)+strdef));
|
||
}
|
||
|
||
|
||
return TRUE;
|
||
|
||
}
|
||
|
||
#ifdef _VARY_WOLF
|
||
|
||
int PETSKILL_Vary( int cindex, int tindex, int id, char* data)
|
||
{
|
||
char *pszOption="\0", *pszP;
|
||
float fPer = 0.01;
|
||
int a_dep;
|
||
int d_dep;
|
||
int i;
|
||
int petid[4] = {981,982,983,984};
|
||
|
||
for( i=0; i<4; i++) {
|
||
if( CHAR_getInt( cindex, CHAR_PETID) == petid[i] ) break;
|
||
}
|
||
if( i>= 4 ) return FALSE;
|
||
|
||
CHAR_setWorkInt( cindex, CHAR_WORKBATTLECOM1, BATTLE_COM_S_VARY);
|
||
CHAR_setWorkInt( cindex, CHAR_WORKBATTLECOM2, tindex );
|
||
CHAR_setWorkInt( cindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK );
|
||
|
||
pszOption = PETSKILL_getChar( id, PETSKILL_OPTION );
|
||
|
||
|
||
if(pszOption=="\0"){
|
||
//print("\n pszOption==NULL");
|
||
return FALSE;
|
||
}
|
||
if( (pszP = strstr( pszOption, "攻%" ) ) != NULL ){
|
||
sscanf( pszP+3, "%f", &fPer );
|
||
CHAR_setWorkInt( cindex, CHAR_SKILLSTRPOWER, fPer);
|
||
fPer = fPer / 100;
|
||
a_dep = CHAR_getWorkInt( cindex, CHAR_WORKFIXSTR);
|
||
a_dep = (int)(a_dep * fPer);
|
||
CHAR_setWorkInt( cindex, CHAR_WORKATTACKPOWER, CHAR_getWorkInt( cindex, CHAR_WORKFIXSTR) + a_dep);
|
||
|
||
}
|
||
if( (pszP = strstr( pszOption, "敏%" ) ) != NULL ){
|
||
sscanf( pszP+3, "%f", &fPer );
|
||
CHAR_setWorkInt( cindex, CHAR_SKILLDEXPOWER, fPer);
|
||
fPer = fPer / 100;
|
||
d_dep = CHAR_getWorkInt( cindex, CHAR_WORKFIXDEX);
|
||
d_dep = (int)(d_dep * fPer);
|
||
CHAR_setWorkInt( cindex, CHAR_WORKQUICK, CHAR_getWorkInt( cindex, CHAR_WORKFIXDEX) + d_dep);
|
||
|
||
}
|
||
CHAR_setInt( cindex, CHAR_BASEIMAGENUMBER, 101428);
|
||
CHAR_setWorkInt( cindex, CHAR_WORKTURN, 0);
|
||
|
||
return TRUE;
|
||
}
|
||
#endif
|
||
|
||
|
||
#ifdef _SKILL_WILDVIOLENT_ATT
|
||
|
||
int PETSKILL_WildViolentAttack(
|
||
int charaindex,
|
||
int toindex,
|
||
int array,
|
||
char *data
|
||
|
||
)
|
||
{
|
||
char *pszOption="\0", *pszP;
|
||
float fPer = 0.01;
|
||
int strdef=0;
|
||
int iDuck = 0;
|
||
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_S_WILDVIOLENTATTACK);
|
||
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM2, toindex );
|
||
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK );
|
||
|
||
pszOption = PETSKILL_getChar( array, PETSKILL_OPTION );
|
||
|
||
if( pszOption == "\0" ) {
|
||
//print("\n pszOption == NULL ");
|
||
return FALSE;
|
||
}
|
||
//读取攻值
|
||
if( (pszP = strstr( pszOption, "攻%" ) ) != NULL ){
|
||
sscanf( pszP+3, "%f", &fPer );
|
||
fPer=(fPer/100);
|
||
|
||
//设定修正值
|
||
strdef=CHAR_getWorkInt(charaindex,CHAR_WORKFIXSTR);
|
||
strdef=(int)(strdef * fPer);
|
||
CHAR_setWorkInt(charaindex,CHAR_WORKATTACKPOWER,(CHAR_getWorkInt(charaindex,CHAR_WORKFIXSTR)+strdef));
|
||
}
|
||
//读取防值
|
||
if( (pszP = strstr( pszOption, "防%" ) ) != NULL ){
|
||
sscanf( pszP+3, "%f", &fPer );
|
||
fPer=(fPer/100);
|
||
|
||
//设定修正值
|
||
strdef=CHAR_getWorkInt(charaindex,CHAR_WORKFIXTOUGH);
|
||
strdef=(int)(strdef * fPer);
|
||
CHAR_setWorkInt(charaindex,CHAR_WORKDEFENCEPOWER,(CHAR_getWorkInt(charaindex,CHAR_WORKFIXTOUGH)+strdef));
|
||
}
|
||
//读取避值
|
||
if( ( pszP = strstr( pszOption, "避" ) ) != NULL){
|
||
sscanf( pszP+2, "%d", &iDuck );
|
||
}
|
||
// 膜恳毛忡绣
|
||
CHAR_SETWORKINT_HIGH( charaindex, CHAR_WORKBATTLECOM3, iDuck );
|
||
|
||
return TRUE;
|
||
}
|
||
#endif
|
||
|
||
#ifdef _SKILL_SACRIFICE
|
||
int PETSKILL_Sacrifice(
|
||
int charaindex,
|
||
int toindex,
|
||
int array,
|
||
char *data
|
||
|
||
)
|
||
{
|
||
char buf[256];
|
||
|
||
if(CHAR_getInt(charaindex,CHAR_HP) > CHAR_getWorkInt(charaindex,CHAR_WORKMAXHP)*0.2 )
|
||
{
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_S_SACRIFICE);
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM2, toindex );
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK );
|
||
}
|
||
else
|
||
{
|
||
|
||
sprintf(buf, "%s自身耐久力不足 救援失败!!", CHAR_getChar( charaindex, CHAR_NAME ));
|
||
CHAR_talkToCli( CHAR_getWorkInt(charaindex, CHAR_WORKPLAYERINDEX), -1, buf, CHAR_COLORYELLOW);
|
||
return FALSE;
|
||
}
|
||
return TRUE;
|
||
}
|
||
#endif
|
||
#ifdef _SKILL_REFRESH
|
||
int PETSKILL_Refresh(
|
||
int charaindex,
|
||
int toindex,
|
||
int array,
|
||
char *data
|
||
|
||
)
|
||
{
|
||
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_S_REFRESH);
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM2, toindex );
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK );
|
||
CHAR_SETWORKINT_LOW( charaindex, CHAR_WORKBATTLECOM3, array);
|
||
return TRUE;
|
||
}
|
||
#endif
|
||
#ifdef _SKILL_WEAKEN //vincent宠技:虚弱
|
||
int PETSKILL_Weaken(
|
||
int charaindex,
|
||
int toindex,
|
||
int array,
|
||
char *data
|
||
|
||
)
|
||
{
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_S_WEAKEN);
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM2, toindex );
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK );
|
||
CHAR_SETWORKINT_LOW( charaindex, CHAR_WORKBATTLECOM3, array);
|
||
return TRUE;
|
||
}
|
||
#endif
|
||
#ifdef _SKILL_DEEPPOISON //vincent宠技:剧毒
|
||
int PETSKILL_Deeppoison(
|
||
int charaindex,
|
||
int toindex,
|
||
int array,
|
||
char *data
|
||
|
||
)
|
||
{
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_S_DEEPPOISON);
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM2, toindex );
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK );
|
||
CHAR_SETWORKINT_LOW( charaindex, CHAR_WORKBATTLECOM3, array);
|
||
return TRUE;
|
||
}
|
||
#endif
|
||
|
||
#ifdef _SKILL_BARRIER //vincent宠技:魔障
|
||
int PETSKILL_Barrier(
|
||
int charaindex,
|
||
int toindex,
|
||
int array,
|
||
char *data
|
||
|
||
)
|
||
{
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_S_BARRIER);
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM2, toindex );
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK );
|
||
CHAR_SETWORKINT_LOW( charaindex, CHAR_WORKBATTLECOM3, array);
|
||
return TRUE;
|
||
}
|
||
#endif
|
||
|
||
#ifdef _SKILL_NOCAST //vincent宠技:沉默
|
||
int PETSKILL_Nocast(
|
||
int charaindex,
|
||
int toindex,
|
||
int array,
|
||
char *data
|
||
|
||
)
|
||
{
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_S_NOCAST);
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM2, toindex );
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK );
|
||
CHAR_SETWORKINT_LOW( charaindex, CHAR_WORKBATTLECOM3, array);
|
||
return TRUE;
|
||
}
|
||
#endif
|
||
|
||
#ifdef _SKILL_ROAR //vincent宠技:大吼
|
||
int PETSKILL_Roar(
|
||
int charaindex,
|
||
int toindex,
|
||
int array,
|
||
char *data
|
||
|
||
)
|
||
{
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_S_ROAR);
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM2, toindex );
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK );
|
||
CHAR_SETWORKINT_LOW( charaindex, CHAR_WORKBATTLECOM3, array);
|
||
return TRUE;
|
||
}
|
||
#endif
|
||
|
||
#ifdef _SKILL_GUARDBREAK2//破除防御2 vincent add 2002/05/20
|
||
int PETSKILL_GuardBreak2(
|
||
int charaindex,
|
||
int toNo,
|
||
int array,
|
||
char *data
|
||
|
||
)
|
||
{
|
||
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_S_GBREAK2 );
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM2, toNo );
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK );
|
||
|
||
return TRUE;
|
||
|
||
}
|
||
#endif
|
||
|
||
//*******************************************************
|
||
int PETSKILL_NormalAttack(
|
||
int charaindex,
|
||
int toindex,
|
||
int array,
|
||
char *data
|
||
|
||
)
|
||
{
|
||
#ifdef _PETSKILL_NONO_FIX
|
||
if(CHAR_getWorkInt(charaindex,CHAR_WORKFIXAI)>=40 && CHAR_getWorkInt(charaindex,CHAR_WORKBATTLEMODE)!=BATTLE_CHARMODE_NONE && CHAR_getInt(charaindex, CHAR_WHICHTYPE)==CHAR_TYPEPET){
|
||
CHAR_setWorkInt(charaindex,CHAR_WORKATTACKPOWER,CHAR_getWorkInt(charaindex,CHAR_WORKFIXSTR));
|
||
CHAR_setWorkInt(charaindex,CHAR_WORKDEFENCEPOWER,CHAR_getWorkInt(charaindex,CHAR_WORKFIXTOUGH));
|
||
CHAR_setWorkInt(charaindex,CHAR_WORKQUICK,CHAR_getWorkInt(charaindex,CHAR_WORKFIXDEX));
|
||
}
|
||
#endif
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_ATTACK );
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM2, toindex );
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK );
|
||
|
||
return TRUE;
|
||
|
||
}
|
||
|
||
int PETSKILL_NormalGuard(
|
||
int charaindex,
|
||
int toindex,
|
||
int array,
|
||
char *data
|
||
|
||
)
|
||
{
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_GUARD );
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM2, toindex );
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK );
|
||
|
||
return TRUE;
|
||
|
||
}
|
||
|
||
|
||
int PETSKILL_None(
|
||
int charaindex,
|
||
int toindex,
|
||
int array,
|
||
char *data
|
||
)
|
||
{
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_NONE );
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM2, toindex );
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK );
|
||
|
||
return TRUE;
|
||
}
|
||
|
||
|
||
int PETSKILL_EarthRound(
|
||
int charaindex,
|
||
int toNo,
|
||
int array,
|
||
char *data
|
||
)
|
||
{
|
||
char *pszOption, *pszP;
|
||
float fPer = 0.01;
|
||
#ifdef _FIX_EARTHROUND
|
||
if(toNo<0 || toNo>=BATTLE_ENTRY_MAX*2){
|
||
print("err:地球一周攻击目标索引异常 %d ", toNo);
|
||
return FALSE;
|
||
}
|
||
#endif
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_S_EARTHROUND1 );
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM2, toNo );
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK );
|
||
pszOption = PETSKILL_getChar( array, PETSKILL_OPTION );
|
||
|
||
if( (pszP = strstr( pszOption, "攻%" ) ) != NULL ){
|
||
sscanf( pszP+3, "%f", &fPer );
|
||
CHAR_setWorkInt(charaindex,CHAR_WORKBATTLECOM3, (int)fPer );
|
||
}
|
||
|
||
|
||
return TRUE;
|
||
|
||
}
|
||
|
||
|
||
int PETSKILL_GuardBreak(
|
||
int charaindex,
|
||
int toNo,
|
||
int array,
|
||
char *data
|
||
|
||
)
|
||
{
|
||
char *pszOption, *pszP;
|
||
float fPer = 0.01;
|
||
int strdef;
|
||
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_S_GBREAK );
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM2, toNo );
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK );
|
||
|
||
pszOption = PETSKILL_getChar( array, PETSKILL_OPTION );
|
||
|
||
if( (pszP = strstr( pszOption, "攻%" ) ) != NULL ){
|
||
sscanf( pszP+3, "%f", &fPer );
|
||
fPer=(fPer/100);
|
||
|
||
strdef=CHAR_getWorkInt(charaindex,CHAR_WORKFIXSTR);
|
||
strdef=(int)(strdef * fPer);
|
||
CHAR_setWorkInt(charaindex,CHAR_WORKATTACKPOWER,(CHAR_getWorkInt(charaindex,CHAR_WORKFIXSTR)+strdef));
|
||
}
|
||
|
||
|
||
return TRUE;
|
||
|
||
}
|
||
#ifdef _SKILL_SPEEDY_ATT//疾速攻击 vincent add 2002/05/20
|
||
int PETSKILL_SpeedyAttack(
|
||
int charaindex,
|
||
int toNo,
|
||
int array,
|
||
char *data
|
||
|
||
)
|
||
{
|
||
char *pszOption="\0", *pszP;
|
||
float fPer = 0.01;
|
||
int strdef=0;
|
||
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_S_SPEEDYATTACK );
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM2, toNo );
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK );
|
||
|
||
pszOption = PETSKILL_getChar( array, PETSKILL_OPTION );
|
||
|
||
if( pszOption == "\0" ) {
|
||
//print("\n pszOption == NULL ");
|
||
return FALSE;
|
||
}
|
||
|
||
//读取防值
|
||
if( (pszP = strstr( pszOption, "防%" ) ) != NULL ){
|
||
sscanf( pszP+3, "%f", &fPer );
|
||
fPer=(fPer/100);
|
||
|
||
//设定修正值
|
||
strdef=CHAR_getWorkInt(charaindex,CHAR_WORKFIXTOUGH);
|
||
strdef=(int)(strdef * fPer);
|
||
CHAR_setWorkInt(charaindex,CHAR_WORKDEFENCEPOWER,(CHAR_getWorkInt(charaindex,CHAR_WORKFIXTOUGH)+strdef));
|
||
}
|
||
|
||
return TRUE;
|
||
|
||
}
|
||
#endif
|
||
|
||
int PETSKILL_Abduct(
|
||
int charaindex,
|
||
int toNo,
|
||
int array,
|
||
char *data
|
||
)
|
||
{
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_S_ABDUCT );
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM2, toNo );
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK );
|
||
CHAR_SETWORKINT_LOW( charaindex, CHAR_WORKBATTLECOM3, array);
|
||
|
||
return TRUE;
|
||
}
|
||
|
||
int PETSKILL_Steal(
|
||
int charaindex,
|
||
int toNo,
|
||
int array,
|
||
char *data
|
||
)
|
||
{
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_S_STEAL );
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM2, toNo );
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK );
|
||
return TRUE;
|
||
}
|
||
|
||
#ifdef _BATTLESTEAL_FIX
|
||
int PETSKILL_StealMoney( int charaindex, int toNo, int array, char *data)
|
||
{
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_S_STEALMONEY );
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM2, toNo );
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK );
|
||
return TRUE;
|
||
}
|
||
#endif
|
||
|
||
//*******************************************************
|
||
// 檗 -- 失奶 丞宁岳
|
||
//
|
||
int PETSKILL_Merge(
|
||
int charaindex,
|
||
int toNo,
|
||
int array,
|
||
char *data
|
||
)
|
||
{
|
||
int ret, ownerindex;
|
||
|
||
// Robin 0521 debug
|
||
ownerindex = CHAR_getWorkInt( charaindex, CHAR_WORKPLAYERINDEX);
|
||
if( CHAR_getWorkInt( ownerindex, CHAR_WORKBATTLEMODE ) != BATTLE_CHARMODE_NONE ){
|
||
print(" Merge_ErrB:fd=%d ", ownerindex);
|
||
return FALSE;
|
||
}
|
||
ret = ITEM_mergeItem_merge( CHAR_getWorkInt( charaindex, CHAR_WORKPLAYERINDEX),
|
||
CHAR_getInt( charaindex, CHAR_PETID), data, charaindex, 0);
|
||
return ret;
|
||
}
|
||
|
||
#ifdef _ALCHEMIST
|
||
int PETSKILL_Alchemist(
|
||
int charaindex,
|
||
int toNo,
|
||
int array,
|
||
char *data
|
||
)
|
||
{
|
||
int ret, ownerindex;
|
||
|
||
// Robin 0521 debug
|
||
ownerindex = CHAR_getWorkInt( charaindex, CHAR_WORKPLAYERINDEX);
|
||
if( CHAR_getWorkInt( ownerindex, CHAR_WORKBATTLEMODE ) != BATTLE_CHARMODE_NONE ){
|
||
//print(" Merge_Alchemist_ErrB:fd=%d ", ownerindex);
|
||
return FALSE;
|
||
}
|
||
ret = ITEM_mergeItem_merge( CHAR_getWorkInt( charaindex, CHAR_WORKPLAYERINDEX),
|
||
CHAR_getInt( charaindex, CHAR_PETID), data, charaindex, 1);
|
||
return ret;
|
||
}
|
||
#endif
|
||
|
||
int PETSKILL_NoGuard(
|
||
int charaindex,
|
||
int toNo,
|
||
int array,
|
||
char *data
|
||
|
||
)
|
||
{
|
||
char *pszOption, *pszP;
|
||
int Duck = 0, Counter = 0, Critical = 0;
|
||
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_S_NOGUARD );
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM2, toNo );
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK );
|
||
pszOption = PETSKILL_getChar( array, PETSKILL_OPTION );
|
||
if( (pszP = strstr( pszOption, "避%" ) ) != NULL ){
|
||
sscanf( pszP+3, "%d", &Duck );
|
||
CHAR_SETWORKINT_HIGH( charaindex, CHAR_WORKBATTLECOM3, Duck );
|
||
}
|
||
if( (pszP = strstr( pszOption, "击%" ) ) != NULL ){
|
||
sscanf( pszP+3, "%d", &Counter );
|
||
}
|
||
if( (pszP = strstr( pszOption, "心%" ) ) != NULL ){
|
||
sscanf( pszP+3, "%d", &Critical );
|
||
}
|
||
CHAR_SETWORKINT_LOW( charaindex, CHAR_WORKBATTLECOM3,
|
||
(Counter << 8) + Critical );
|
||
|
||
return TRUE;
|
||
}
|
||
|
||
#ifdef _ATTACK_MAGIC
|
||
|
||
int PETSKILL_AttackMagic(
|
||
int charaindex,
|
||
int toindex,
|
||
int array,
|
||
char *data
|
||
)
|
||
{
|
||
char *pszP;
|
||
char szMagic[] = "magic";
|
||
char szItem[] = "item";
|
||
int magic = 313; // magic id预设为火魔法等级一,item index预设为19659
|
||
// int item = 19659;
|
||
// 取得宠物技能命令
|
||
pszP = PETSKILL_getChar( array, PETSKILL_OPTION );
|
||
|
||
// 取得施放的魔法的magic id
|
||
if((pszP = strstr(pszP,szMagic)) != NULL)
|
||
{
|
||
pszP += sizeof(szMagic);
|
||
sscanf(pszP,"%d",&magic);
|
||
}
|
||
/*
|
||
// 取得有此魔法属性的item index
|
||
if((pszP = strstr(pszP,szItem)) != NULL)
|
||
{
|
||
pszP += sizeof(szItem);
|
||
sscanf(pszP,"%d",&item);
|
||
}
|
||
*/
|
||
// 设定宠物技能为魔法
|
||
CHAR_setWorkInt(charaindex,CHAR_WORKBATTLECOM1,BATTLE_COM_S_ATTACK_MAGIC );
|
||
// 攻击目标设定
|
||
CHAR_setWorkInt(charaindex,CHAR_WORKBATTLECOM2,toindex);
|
||
// 设定所使用的是那一种魔法
|
||
CHAR_SETWORKINT_LOW(charaindex,CHAR_WORKBATTLECOM3,magic);
|
||
// 设定所使用的魔法的道具
|
||
// CHAR_SETWORKINT_HIGH(charaindex,CHAR_WORKBATTLECOM3,item);
|
||
// 命令下达完毕
|
||
CHAR_setWorkInt(charaindex,CHAR_WORKBATTLEMODE,BATTLE_CHARMODE_C_OK );
|
||
|
||
return TRUE;
|
||
}
|
||
|
||
#endif
|
||
|
||
#ifdef _PSKILL_FALLGROUND //落马术
|
||
int PETSKILL_FallGround( int charaindex, int toNo, int array, char *data )
|
||
{
|
||
char *pszOption, *pszP;
|
||
float fPer = 0.01;
|
||
int strdef;
|
||
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_S_FALLRIDE );
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM2, toNo );
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK );
|
||
|
||
pszOption = PETSKILL_getChar( array, PETSKILL_OPTION );
|
||
if( (pszP = strstr( pszOption, "攻%" ) ) != NULL ){
|
||
sscanf( pszP+3, "%f", &fPer );
|
||
fPer=(fPer/100);
|
||
strdef=CHAR_getWorkInt(charaindex,CHAR_WORKFIXSTR);
|
||
strdef=(int)(strdef * fPer);
|
||
CHAR_setWorkInt(charaindex,CHAR_WORKATTACKPOWER,(CHAR_getWorkInt(charaindex,CHAR_WORKFIXSTR)+strdef));
|
||
}
|
||
return TRUE;
|
||
|
||
} //BATTLE_COM_S_DAMAGETOHP
|
||
#endif
|
||
|
||
#ifdef _PRO_BATTLEENEMYSKILL
|
||
int ENEMYSKILL_ReLife( int enemyindex, int toNo, int array, char *data )
|
||
{
|
||
CHAR_setWorkInt( enemyindex, CHAR_WORKBATTLECOM1, BATTLE_COM_S_ENEMYRELIFE );
|
||
CHAR_setWorkInt( enemyindex, CHAR_WORKBATTLECOM2, toNo );
|
||
CHAR_setWorkInt( enemyindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK );
|
||
return TRUE;
|
||
}
|
||
|
||
int ENEMYSKILL_ReHP( int enemyindex, int toNo, int array, char *data )
|
||
{
|
||
CHAR_setWorkInt( enemyindex, CHAR_WORKBATTLECOM1, BATTLE_COM_S_ENEMYREHP );
|
||
CHAR_setWorkInt( enemyindex, CHAR_WORKBATTLECOM2, toNo );
|
||
CHAR_setWorkInt( enemyindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK );
|
||
return TRUE;
|
||
}
|
||
|
||
int ENEMYSKILL_EnemyHelp( int enemyindex, int toNo, int array, char *data )
|
||
{
|
||
CHAR_setWorkInt( enemyindex, CHAR_WORKBATTLECOM1, BATTLE_COM_S_ENEMYHELP );
|
||
CHAR_setWorkInt( enemyindex, CHAR_WORKBATTLECOM2, toNo );
|
||
CHAR_setWorkInt( enemyindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK );
|
||
return TRUE;
|
||
}
|
||
|
||
#endif
|
||
|
||
#ifdef _SKILL_DAMAGETOHP //嗜血技 { "PETSKILL_DamageToHp", PETSKILL_DamageToHp, 0},
|
||
int PETSKILL_DamageToHp( int charaindex, int toNo, int array, char *data )
|
||
{
|
||
char *pszOption;
|
||
char buf1[256];
|
||
int strdef;
|
||
float def=0.00;
|
||
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_S_DAMAGETOHP );
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM2, toNo );
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK );
|
||
CHAR_SETWORKINT_LOW(charaindex,CHAR_WORKBATTLECOM3, array); //记录技能
|
||
pszOption = PETSKILL_getChar( array, PETSKILL_OPTION );
|
||
|
||
if( pszOption == "\0" ) return FALSE;
|
||
if( getStringFromIndexWithDelim( pszOption, "|", 1, buf1, sizeof( buf1)) == FALSE )
|
||
return FALSE;
|
||
|
||
strdef = CHAR_getWorkInt(charaindex,CHAR_WORKFIXSTR);
|
||
def = (atoi( buf1)/100);
|
||
strdef = strdef - (int)(strdef*def);
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKATTACKPOWER, strdef);
|
||
|
||
return TRUE;
|
||
|
||
}
|
||
#endif
|
||
|
||
#ifdef _Skill_MPDAMAGE
|
||
int PETSKILL_MpDamage( int charaindex, int toNo, int array, char *data )
|
||
{
|
||
char *pszOption;
|
||
char buf1[256];
|
||
int strdef;
|
||
float def=0.00;
|
||
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_S_MPDAMAGE );
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM2, toNo );
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK );
|
||
CHAR_SETWORKINT_LOW(charaindex,CHAR_WORKBATTLECOM3, array); ////记录技能
|
||
|
||
pszOption = PETSKILL_getChar( array, PETSKILL_OPTION );
|
||
if( pszOption == "\0" ) return FALSE;
|
||
if( getStringFromIndexWithDelim( pszOption, "|", 1, buf1, sizeof( buf1)) == FALSE )
|
||
return FALSE;
|
||
|
||
def = (float)(atoi( buf1)/100);
|
||
strdef = CHAR_getWorkInt(charaindex,CHAR_WORKFIXSTR);
|
||
strdef = strdef - (int)( strdef*def);
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKATTACKPOWER, strdef);
|
||
|
||
return TRUE;
|
||
}
|
||
#endif
|
||
|
||
|
||
#ifdef _SKILL_TOOTH
|
||
int PETSKILL_ToothCrushe( int charaindex, int toNo, int array, char *data )
|
||
{
|
||
//char *pszOption;
|
||
//char buf1[256];
|
||
//int strdef;
|
||
//float def=0.00;
|
||
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_S_TOOTHCRUSHE );
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM2, toNo );
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK );
|
||
CHAR_SETWORKINT_LOW( charaindex, CHAR_WORKBATTLECOM3, array); //记录技能
|
||
/*
|
||
pszOption = PETSKILL_getChar( array, PETSKILL_OPTION );
|
||
if( pszOption == "\0" ) return FALSE;
|
||
if( getStringFromIndexWithDelim( pszOption, "|", 1, buf1, sizeof( buf1)) == FALSE )
|
||
return FALSE;
|
||
|
||
def = (float)(atoi( buf1)/100);
|
||
strdef = CHAR_getWorkInt(charaindex,CHAR_WORKFIXSTR);
|
||
strdef = strdef - (int)( strdef*def);
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKATTACKPOWER, strdef);
|
||
*/
|
||
return TRUE;
|
||
}
|
||
#endif
|
||
#ifdef _PSKILL_MODIFY
|
||
int PETSKILL_Modifyattack( int charaindex, int toNo, int array, char *data )
|
||
{
|
||
//char *pszOption;
|
||
//char buf1[256];
|
||
//int strdef;
|
||
//float def=0.00;
|
||
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_S_MODIFYATT );
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM2, toNo );
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK );
|
||
CHAR_SETWORKINT_LOW( charaindex, CHAR_WORKBATTLECOM3, array); //记录技能
|
||
/*
|
||
pszOption = PETSKILL_getChar( array, PETSKILL_OPTION );
|
||
if( pszOption == "\0" ) return FALSE;
|
||
if( getStringFromIndexWithDelim( pszOption, "|", 1, buf1, sizeof( buf1)) == FALSE )
|
||
return FALSE;
|
||
|
||
def = (float)(atoi( buf1)/100);
|
||
strdef = CHAR_getWorkInt(charaindex,CHAR_WORKFIXSTR);
|
||
strdef = strdef - (int)( strdef*def);
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKATTACKPOWER, strdef);
|
||
*/
|
||
return TRUE;
|
||
}
|
||
#endif
|
||
|
||
#ifdef _PSKILL_MDFYATTACK
|
||
int PETSKILL_Mdfyattack( int charaindex, int toNo, int array, char *data )
|
||
{
|
||
char *pszOption;
|
||
char buf1[256];
|
||
char MNodify[][36]={"EA","WA","FI","WI"};
|
||
int nums, i;
|
||
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_S_MDFYATTACK);
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM2, toNo );
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK );
|
||
CHAR_SETWORKINT_LOW( charaindex, CHAR_WORKBATTLECOM3, array);//记录属性
|
||
|
||
pszOption = PETSKILL_getChar( array, PETSKILL_OPTION );
|
||
if( pszOption == "\0" ) return FALSE;
|
||
if( getStringFromIndexWithDelim( pszOption, "|", 1, buf1, sizeof( buf1)) == FALSE )
|
||
return FALSE;
|
||
for( i=0; i<4; i++) {
|
||
if( strcmp( buf1, MNodify[i]) ) continue;
|
||
break;
|
||
}
|
||
if( i == 4 ) return FALSE;
|
||
CHAR_SETWORKINT_LOW( charaindex, CHAR_WORKBATTLECOM4, i);//记录属性
|
||
if( getStringFromIndexWithDelim( pszOption, "|", 2, buf1, sizeof( buf1)) == FALSE )
|
||
return FALSE;
|
||
nums=atoi( buf1);
|
||
CHAR_SETWORKINT_HIGH( charaindex, CHAR_WORKBATTLECOM4, nums);//记录数值
|
||
return TRUE;
|
||
}
|
||
#endif
|
||
|
||
#ifdef _ITEM_INSLAY
|
||
int PETSKILL_Inslay( int index, int toNo, int array, char *data)
|
||
{
|
||
int charaindex, petid;
|
||
|
||
int inslayindex=-1, inslayno=-1;
|
||
int i, j, itemno;
|
||
#define MAXINSLAY 4
|
||
int itemindexs[MAXINSLAY]={-1,-1,-1,-1};
|
||
int itemnos[MAXINSLAY]={-1,-1,-1,-1};
|
||
|
||
if( !CHAR_CHECKINDEX( index) ) return FALSE;
|
||
if( CHAR_getInt( index, CHAR_WHICHTYPE) != CHAR_TYPEPET ) return FALSE;
|
||
charaindex = CHAR_getWorkInt( index, CHAR_WORKPLAYERINDEX);
|
||
if( !CHAR_CHECKINDEX( charaindex) ) return FALSE;
|
||
|
||
if( CHAR_getWorkInt( charaindex, CHAR_WORKBATTLEMODE ) != BATTLE_CHARMODE_NONE )
|
||
return FALSE;
|
||
petid = CHAR_getInt( charaindex, CHAR_PETID);
|
||
|
||
|
||
for( i = 0; i < 15; i ++ ) {
|
||
char buf[256];
|
||
char *buf1;
|
||
int itemindex;
|
||
if( getStringFromIndexWithDelim( data , "|", i+1, buf, sizeof( buf ) ) == FALSE ) break;
|
||
itemno = atoi( buf);
|
||
if( !CHAR_CHECKITEMINDEX( charaindex, itemno) ) continue;
|
||
itemindex = CHAR_getItemIndex( charaindex, itemno);
|
||
if( !ITEM_CHECKINDEX( itemindex) ) continue;
|
||
|
||
if( i >= MAXINSLAY ) {
|
||
CHAR_talkToCli( charaindex, -1, "精工每次只能选择四个物品。", CHAR_COLORYELLOW);
|
||
return FALSE;
|
||
}
|
||
for( j=0; j< MAXINSLAY; j++ ) {
|
||
if( itemindexs[j] == itemindex ) {
|
||
//print("精工物品index相同 ERROR !!\n");
|
||
return FALSE;
|
||
}
|
||
}
|
||
if( (buf1 = ITEM_getChar( itemindex, ITEM_TYPECODE)) == "\0" ) {
|
||
//print(" ITEM_TYPECODE == NULL 错误 !!\n");
|
||
return FALSE;
|
||
}
|
||
if( !strcmp( buf1, "\0") || !strcmp( buf1, "NULL") ) {
|
||
CHAR_talkToCli( charaindex, -1, "这样物品不适合精工。", CHAR_COLORYELLOW);
|
||
return FALSE;
|
||
}
|
||
if( strstr( buf1, "INSLAY") != 0 ) {
|
||
if( !ITEM_CHECKINDEX( inslayindex)) {
|
||
inslayindex = itemindex;
|
||
inslayno = itemno;
|
||
}else {
|
||
CHAR_talkToCli( charaindex, -1, "精工每次只能选择一个武器或防具。", CHAR_COLORYELLOW);
|
||
return FALSE;
|
||
}
|
||
}
|
||
itemindexs[i] = itemindex;
|
||
itemnos[i] = itemno;
|
||
}
|
||
|
||
if( !ITEM_CHECKINDEX( inslayindex) ) {
|
||
CHAR_talkToCli( charaindex, -1, "精工必须选择一个武器或防具。", CHAR_COLORYELLOW);
|
||
return FALSE;
|
||
}
|
||
|
||
for( i=0; i< MAXINSLAY; i++) {
|
||
if( !ITEM_CHECKINDEX( itemindexs[i]) )break;
|
||
if( inslayindex == itemindexs[i] ) continue;
|
||
if( PETSKILL_ITEM_inslay( charaindex, inslayindex, itemindexs[i] ) == FALSE ){
|
||
return FALSE;
|
||
}
|
||
CHAR_DelItem( charaindex, itemnos[i]);
|
||
/*
|
||
CHAR_setItemIndex( charaindex, itemnos[i] ,-1);
|
||
CHAR_sendItemDataOne( charaindex, itemnos[i] );
|
||
ITEM_endExistItemsOne( itemindexs[i]);
|
||
*/
|
||
}
|
||
|
||
CHAR_sendItemDataOne( charaindex, inslayno );
|
||
CHAR_complianceParameter( charaindex );
|
||
CHAR_send_P_StatusString( charaindex, CHAR_P_STRING_ATK | CHAR_P_STRING_DEF
|
||
| CHAR_P_STRING_QUICK | CHAR_P_STRING_CHARM );
|
||
|
||
return TRUE;
|
||
}
|
||
|
||
#endif
|
||
|
||
#ifdef _MAGIC_SUPERWALL
|
||
int PETSKILL_MagicStatusChange( int charaindex, int toindex, int array, char *data )
|
||
{
|
||
if( CHAR_CHECKINDEX( charaindex ) == FALSE ) return FALSE;
|
||
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_S_SUPERWALL);
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM2, toindex );
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK );
|
||
CHAR_SETWORKINT_LOW( charaindex, CHAR_WORKBATTLECOM3, array);//记录属性
|
||
|
||
return TRUE;
|
||
}
|
||
|
||
#endif
|
||
|
||
#ifdef _PETSKILL_SETDUCK
|
||
int PETSKILL_SetDuck( int charaindex, int toNo, int array, char *data )
|
||
{
|
||
if( CHAR_CHECKINDEX( charaindex ) == FALSE )
|
||
return FALSE;
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_S_SETDUCK);
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM2, toNo );
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK );
|
||
CHAR_SETWORKINT_LOW( charaindex, CHAR_WORKBATTLECOM3, array);//记录属性
|
||
|
||
|
||
CHAR_setWorkInt( charaindex, CHAR_MAGICPETMP, 0 );
|
||
return TRUE;
|
||
}
|
||
#endif
|
||
|
||
#ifdef _MAGICPET_SKILL
|
||
int PETSKILL_SetMagicPet( int charaindex, int toNo, int array, char *data )
|
||
{
|
||
int nums=0;
|
||
if( CHAR_CHECKINDEX( charaindex ) == FALSE )
|
||
return FALSE;
|
||
|
||
nums = CHAR_getWorkInt( charaindex, CHAR_MAGICPETMP);
|
||
if( nums >= 3 ){
|
||
int toindex = CHAR_getWorkInt( charaindex, CHAR_WORKPLAYERINDEX);
|
||
CHAR_talkToCli( toindex, -1, "此技能单场限用三次。", CHAR_COLORYELLOW);
|
||
return FALSE;
|
||
}
|
||
CHAR_setWorkInt( charaindex, CHAR_MAGICPETMP, nums );
|
||
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_S_SETMAGICPET);
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM2, toNo );
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK );
|
||
CHAR_SETWORKINT_LOW( charaindex, CHAR_WORKBATTLECOM3, array);//记录属性
|
||
return TRUE;
|
||
}
|
||
#endif
|
||
|
||
#ifdef _PETSKILL_FIXITEM
|
||
int PETSKILL_Fixitem( int index, int toNo, int array, char *data)
|
||
{
|
||
int charaindex, petid;
|
||
|
||
int fixindex=-1, fixno=-1;
|
||
int i, j, itemno;
|
||
#define MAXFIXITEM 2
|
||
int itemindexs[MAXFIXITEM]={-1,-1};
|
||
int itemnos[MAXFIXITEM]={-1,-1};
|
||
|
||
if( !CHAR_CHECKINDEX( index) ) return FALSE;
|
||
if( CHAR_getInt( index, CHAR_WHICHTYPE) != CHAR_TYPEPET ) return FALSE;
|
||
charaindex = CHAR_getWorkInt( index, CHAR_WORKPLAYERINDEX);
|
||
if( !CHAR_CHECKINDEX( charaindex) ) return FALSE;
|
||
|
||
if( CHAR_getWorkInt( charaindex, CHAR_WORKBATTLEMODE ) != BATTLE_CHARMODE_NONE )
|
||
return FALSE;
|
||
petid = CHAR_getInt( charaindex, CHAR_PETID);
|
||
|
||
|
||
for( i = 0; i < 15; i ++ ) {
|
||
char buf[256];
|
||
int itemtype=-1;
|
||
int itemindex;
|
||
if( getStringFromIndexWithDelim( data , "|", i+1, buf, sizeof( buf ) ) == FALSE ) break;
|
||
itemno = atoi( buf);
|
||
if( !CHAR_CHECKITEMINDEX( charaindex, itemno) ) continue;
|
||
itemindex = CHAR_getItemIndex( charaindex, itemno);
|
||
if( !ITEM_CHECKINDEX( itemindex) ) continue;
|
||
|
||
if( i >= MAXFIXITEM ) {
|
||
CHAR_talkToCli( charaindex, -1, "修复每次只能选择两个物品。", CHAR_COLORYELLOW);
|
||
return FALSE;
|
||
}
|
||
for( j=0; j< MAXFIXITEM; j++ ) {
|
||
if( itemindexs[j] == itemindex ) {
|
||
//print("修复物品index相同 ERROR !!\n");
|
||
return FALSE;
|
||
}
|
||
}
|
||
itemtype = ITEM_getInt( itemindex, ITEM_TYPE);
|
||
if( itemtype == ITEM_DISH ) {
|
||
CHAR_talkToCli( charaindex, -1, "料理不能做修复。", CHAR_COLORYELLOW);
|
||
return FALSE;
|
||
}
|
||
|
||
if( (itemtype >= ITEM_FIST && itemtype <= ITEM_AMULET) ||
|
||
itemtype == ITEM_BOOMERANG || itemtype == ITEM_BOUNDTHROW || itemtype == ITEM_BREAKTHROW
|
||
#ifdef _ITEM_EQUITSPACE
|
||
|| itemtype == ITEM_WBELT
|
||
|| itemtype == ITEM_WSHIELD
|
||
|| itemtype == ITEM_WSHOES
|
||
#endif
|
||
#ifdef _EQUIT_NEWGLOVE
|
||
|| itemtype == ITEM_WGLOVE
|
||
#endif
|
||
#ifdef _PET_ITEM
|
||
#ifndef _TAKE_ITEMDAMAGE_FOR_PET
|
||
|| (itemtype >= ITEM_PET_HEAD && itemtype <= ITEM_PET_FEET)
|
||
#endif
|
||
#endif
|
||
){
|
||
if( !ITEM_CHECKINDEX( fixindex)) {
|
||
fixindex = itemindex;
|
||
fixno = itemno;
|
||
}else {
|
||
CHAR_talkToCli( charaindex, -1, "修复每次只能选择一个武器或防具。", CHAR_COLORYELLOW);
|
||
return FALSE;
|
||
}
|
||
}
|
||
|
||
itemindexs[i] = itemindex;
|
||
itemnos[i] = itemno;
|
||
}
|
||
|
||
if( !ITEM_CHECKINDEX( fixindex) ) {
|
||
CHAR_talkToCli( charaindex, -1, "修复必须选择一个武器或防具。", CHAR_COLORYELLOW);
|
||
return FALSE;
|
||
}
|
||
|
||
if( PETSKILL_ITEM_FixItem( charaindex, fixindex, itemindexs ) == FALSE ){
|
||
return FALSE;
|
||
}else {
|
||
for( i=0; i< MAXFIXITEM; i++) {
|
||
if( !ITEM_CHECKINDEX( itemindexs[i]) )break;
|
||
if( fixindex == itemindexs[i] ) continue;
|
||
CHAR_setItemIndex( charaindex, itemnos[i] ,-1);
|
||
CHAR_sendItemDataOne( charaindex, itemnos[i] );
|
||
ITEM_endExistItemsOne( itemindexs[i]);
|
||
}
|
||
}
|
||
|
||
CHAR_sendItemDataOne( charaindex, fixno );
|
||
CHAR_complianceParameter( charaindex );
|
||
CHAR_send_P_StatusString( charaindex, CHAR_P_STRING_ATK | CHAR_P_STRING_DEF
|
||
| CHAR_P_STRING_QUICK | CHAR_P_STRING_CHARM );
|
||
CHAR_talkToCli( charaindex, -1, "修复完成。", CHAR_COLORYELLOW);
|
||
return TRUE;
|
||
}
|
||
#endif
|
||
|
||
#ifdef _PETSKILL_TIMID
|
||
int PETSKILL_BattleTimid( int charaindex, int toNo, int array, char *data )
|
||
{
|
||
if( !CHAR_CHECKINDEX( charaindex) ) return FALSE;
|
||
if( CHAR_getInt( charaindex, CHAR_WHICHTYPE) == CHAR_TYPEPLAYER ) return FALSE;
|
||
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_S_TIMID );
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM2, toNo );
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK );
|
||
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKATTACKPOWER, ( CHAR_getWorkInt( charaindex, CHAR_WORKFIXSTR)*0.7) );
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKDEFENCEPOWER, ( CHAR_getWorkInt( charaindex, CHAR_WORKFIXTOUGH)*0.4) );
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKQUICK, ( CHAR_getWorkInt( charaindex, CHAR_WORKFIXDEX)*0.8) );
|
||
CHAR_SETWORKINT_LOW( charaindex, CHAR_WORKBATTLECOM3, array);//记录属性
|
||
|
||
return TRUE;
|
||
}
|
||
#endif
|
||
#ifdef _PETSKILL_2TIMID
|
||
int PETSKILL_2BattleTimid( int charaindex, int toNo, int array, char *data )
|
||
{
|
||
char *pszOption="\0";
|
||
char *pszP;
|
||
float fPer=0;
|
||
if( !CHAR_CHECKINDEX( charaindex) ) return FALSE;
|
||
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_S_2TIMID );
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM2, toNo );
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK );
|
||
|
||
pszOption = PETSKILL_getChar( array, PETSKILL_OPTION );
|
||
if( pszOption == "\0" ) return FALSE;
|
||
if( (pszP = strstr( pszOption, "-攻%" ) ) != NULL ){
|
||
sscanf( pszP+4, "%f", &fPer );
|
||
fPer=(fPer/100);
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKATTACKPOWER, (CHAR_getWorkInt( charaindex, CHAR_WORKFIXSTR)*fPer) );
|
||
}
|
||
if( (pszP = strstr( pszOption, "+攻%" ) ) != NULL ){
|
||
sscanf( pszP+4, "%f", &fPer );
|
||
fPer=(fPer/100);
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKATTACKPOWER, CHAR_getWorkInt( charaindex, CHAR_WORKFIXSTR)+(CHAR_getWorkInt( charaindex, CHAR_WORKFIXSTR)*fPer) );
|
||
}
|
||
if( (pszP = strstr( pszOption, "-防%" ) ) != NULL ){
|
||
sscanf( pszP+4, "%f", &fPer );
|
||
fPer=(fPer/100);
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKDEFENCEPOWER, ( CHAR_getWorkInt( charaindex, CHAR_WORKFIXTOUGH)*fPer) );
|
||
}
|
||
if( (pszP = strstr( pszOption, "+防%" ) ) != NULL ){
|
||
sscanf( pszP+4, "%f", &fPer );
|
||
fPer=(fPer/100);
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKDEFENCEPOWER, CHAR_getWorkInt( charaindex, CHAR_WORKFIXTOUGH)+(CHAR_getWorkInt( charaindex, CHAR_WORKFIXTOUGH)*fPer) );
|
||
}
|
||
if( (pszP = strstr( pszOption, "-敏%" ) ) != NULL ){
|
||
sscanf( pszP+4, "%f", &fPer );
|
||
fPer=(fPer/100);
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKQUICK, ( CHAR_getWorkInt( charaindex, CHAR_WORKFIXDEX)*fPer) );
|
||
}
|
||
if( (pszP = strstr( pszOption, "+敏%" ) ) != NULL ){
|
||
sscanf( pszP+4, "%f", &fPer );
|
||
fPer=(fPer/100);
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKQUICK, CHAR_getWorkInt( charaindex, CHAR_WORKFIXDEX)+(CHAR_getWorkInt( charaindex, CHAR_WORKFIXDEX)*fPer) );
|
||
}
|
||
|
||
CHAR_SETWORKINT_LOW( charaindex, CHAR_WORKBATTLECOM3, array);//记录属性
|
||
|
||
return TRUE;
|
||
}
|
||
#endif
|
||
#ifdef _PETSKILL_ANTINTER
|
||
int PETSKILL_AntInter( int charaindex, int toNo, int array, char* data)
|
||
{
|
||
if( !CHAR_CHECKINDEX( charaindex) ) return FALSE;
|
||
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_S_ANTINTER);
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM2, toNo );
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK );
|
||
|
||
CHAR_SETWORKINT_LOW( charaindex, CHAR_WORKBATTLECOM3, array);//记录属性
|
||
return TRUE;
|
||
}
|
||
#endif
|
||
|
||
#ifdef _PETSKILL_PROPERTY
|
||
int PETSKILL_BattleProperty( int charaindex, int toNo, int array, char *data )
|
||
{
|
||
if( !CHAR_CHECKINDEX( charaindex) ) return FALSE;
|
||
if( CHAR_getInt( charaindex, CHAR_WHICHTYPE) == CHAR_TYPEPLAYER ) return FALSE;
|
||
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_S_PROPERTYSKILL );
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM2, toNo );
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK );
|
||
|
||
// CHAR_setWorkInt( charaindex, CHAR_WORKATTACKPOWER, ( CHAR_getWorkInt( charaindex, CHAR_WORKFIXSTR)*0.7) );
|
||
// CHAR_setWorkInt( charaindex, CHAR_WORKDEFENCEPOWER, ( CHAR_getWorkInt( charaindex, CHAR_WORKFIXTOUGH)*0.5) );
|
||
// CHAR_setWorkInt( charaindex, CHAR_WORKQUICK, ( CHAR_getWorkInt( charaindex, CHAR_WORKFIXDEX)*0.95) );
|
||
CHAR_SETWORKINT_LOW( charaindex, CHAR_WORKBATTLECOM3, array);//记录属性
|
||
|
||
return TRUE;
|
||
}
|
||
#endif
|
||
|
||
#ifdef _PETSKILL_TEAR
|
||
int PETSKILL_BattleTearDamage( int charaindex, int toNo, int array, char *data )
|
||
{
|
||
if( !CHAR_CHECKINDEX( charaindex) ) return FALSE;
|
||
if( CHAR_getInt( charaindex, CHAR_WHICHTYPE) == CHAR_TYPEPLAYER ) return FALSE;
|
||
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_S_PETSKILLTEAR );
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM2, toNo );
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK );
|
||
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKATTACKPOWER, ( CHAR_getWorkInt( charaindex, CHAR_WORKFIXSTR)*0.9) );
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKDEFENCEPOWER, ( CHAR_getWorkInt( charaindex, CHAR_WORKFIXTOUGH)*0.8) );
|
||
CHAR_SETWORKINT_LOW( charaindex, CHAR_WORKBATTLECOM3, array);//记录属性
|
||
return TRUE;
|
||
}
|
||
#endif
|
||
|
||
|
||
#ifdef _BATTLE_LIGHTTAKE
|
||
int PETSKILL_Lighttakeed( int charaindex, int toNo, int array, char *data )
|
||
{
|
||
if( !CHAR_CHECKINDEX( charaindex) ) return FALSE;
|
||
if( CHAR_getInt( charaindex, CHAR_WHICHTYPE) == CHAR_TYPEPLAYER ) return FALSE;
|
||
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_S_LIGHTTAKE );
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM2, toNo );
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK );
|
||
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKATTACKPOWER, (CHAR_getWorkInt( charaindex, CHAR_WORKFIXSTR)*0.7) );
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKDEFENCEPOWER, (CHAR_getWorkInt( charaindex, CHAR_WORKFIXTOUGH)*0.5) );
|
||
// CHAR_setWorkInt( charaindex, CHAR_WORKQUICK, (CHAR_getWorkInt( charaindex, CHAR_WORKFIXDEX)*0.95) );
|
||
CHAR_SETWORKINT_LOW( charaindex, CHAR_WORKBATTLECOM3, array);//记录属性
|
||
return TRUE;
|
||
}
|
||
#endif
|
||
|
||
#ifdef _BATTLE_ATTCRAZED
|
||
int PETSKILL_AttackCrazed( int charaindex, int toNo, int array, char *data )
|
||
{
|
||
char *pszOption="\0",*pszP;
|
||
int attnum,strdef,d_dep;
|
||
float fPer = 0.01;
|
||
if( !CHAR_CHECKINDEX( charaindex) ) return FALSE;
|
||
if( CHAR_getInt( charaindex, CHAR_WHICHTYPE) == CHAR_TYPEPLAYER ) return FALSE;
|
||
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_S_ATTCRAZED );
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM2, toNo );
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK );
|
||
|
||
// CHAR_setWorkInt( charaindex, CHAR_WORKATTACKPOWER, (CHAR_getWorkInt( charaindex, CHAR_WORKFIXSTR)*0.8) );
|
||
// CHAR_setWorkInt( charaindex, CHAR_WORKDEFENCEPOWER, (CHAR_getWorkInt( charaindex, CHAR_WORKFIXTOUGH)*0.7) );
|
||
|
||
pszOption = PETSKILL_getChar( array, PETSKILL_OPTION );
|
||
if( pszOption == "\0" ) return FALSE;
|
||
|
||
//读取攻值
|
||
if( (pszP = strstr( pszOption, "攻%" ) ) != NULL ){
|
||
sscanf( pszP+3, "%f", &fPer );
|
||
fPer=(fPer/100);
|
||
|
||
//设定修正值
|
||
strdef=CHAR_getWorkInt(charaindex,CHAR_WORKFIXSTR);
|
||
strdef=(int)(strdef * fPer);
|
||
CHAR_setWorkInt(charaindex,CHAR_WORKATTACKPOWER,(CHAR_getWorkInt(charaindex,CHAR_WORKFIXSTR)+strdef));
|
||
}
|
||
|
||
if( (pszP = strstr( pszOption, "防%" ) ) != NULL ){
|
||
sscanf( pszP+3, "%f", &fPer );
|
||
fPer=(fPer/100);
|
||
strdef=CHAR_getWorkInt(charaindex,CHAR_WORKFIXTOUGH);
|
||
strdef=(int)(strdef * fPer);
|
||
CHAR_setWorkInt(charaindex,CHAR_WORKDEFENCEPOWER,(CHAR_getWorkInt(charaindex,CHAR_WORKFIXTOUGH)+strdef));
|
||
}
|
||
|
||
if( (pszP = strstr( pszOption, "敏%" ) ) != NULL ){
|
||
sscanf( pszP+3, "%f", &fPer );
|
||
CHAR_setWorkInt( charaindex, CHAR_SKILLDEXPOWER, fPer);
|
||
fPer = fPer / 100;
|
||
d_dep = CHAR_getWorkInt( charaindex, CHAR_WORKFIXDEX);
|
||
d_dep = (int)(d_dep * fPer);
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKQUICK, CHAR_getWorkInt( charaindex, CHAR_WORKFIXDEX) + d_dep);
|
||
}
|
||
|
||
if( (pszP = strstr( pszOption, "次" ) ) != NULL ){
|
||
sscanf( pszP+3, "%d", &attnum );
|
||
CHAR_SETWORKINT_HIGH( charaindex, CHAR_WORKBATTLECOM3, attnum);
|
||
}
|
||
|
||
CHAR_SETWORKINT_LOW( charaindex, CHAR_WORKBATTLECOM3, array);//记录属性
|
||
//CHAR_SETWORKINT_HIGH( charaindex, CHAR_WORKBATTLECOM3, atoi(pszOption));
|
||
return TRUE;
|
||
}
|
||
#endif
|
||
|
||
#ifdef _SHOOTCHESTNUT // Syu ADD 宠技:丢栗子
|
||
int PETSKILL_AttackShoot( int charaindex, int toNo, int array, char *data )
|
||
{
|
||
//int n = RAND ( 3 , 5 ) ;
|
||
int n ;
|
||
int loyal = CHAR_getWorkInt( charaindex, CHAR_WORKFIXAI );
|
||
char bb1[16] , bb2[16] ;
|
||
char *buf = "\0" ;
|
||
if( !CHAR_CHECKINDEX( charaindex) ) return FALSE;
|
||
if( CHAR_getInt( charaindex, CHAR_WHICHTYPE) == CHAR_TYPEPLAYER ) return FALSE;
|
||
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_S_ATTSHOOT );
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM2, toNo );
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK );
|
||
|
||
buf = PETSKILL_getChar( array , PETSKILL_OPTION ) ;
|
||
if ( buf == "\0" ) return FALSE;
|
||
getStringFromIndexWithDelim( buf , "|", 1 , bb1 , sizeof( bb1 ) );
|
||
getStringFromIndexWithDelim( buf , "|", 2 , bb2 , sizeof( bb2 ) );
|
||
n = RAND ( atoi(bb1) , atoi(bb2) ) ;
|
||
if ( loyal >= 100 ) {
|
||
if ( RAND ( 1 , 300 ) > 299 )
|
||
n = 8 ;
|
||
else if ( (CHAR_getInt( charaindex , CHAR_HP )) < 20 && ( RAND ( 1 , 50 ) > 49 ) )
|
||
n = 8 ;
|
||
}
|
||
/*
|
||
if ( n != 8 )
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKATTACKPOWER, (CHAR_getWorkInt( charaindex, CHAR_WORKFIXSTR) * 1.2 / n ) );
|
||
else
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKATTACKPOWER, (CHAR_getWorkInt( charaindex, CHAR_WORKFIXSTR) * 1.2 / 4 ) );
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKDEFENCEPOWER, (CHAR_getWorkInt( charaindex, CHAR_WORKFIXTOUGH) * 1) );
|
||
*/
|
||
CHAR_SETWORKINT_LOW( charaindex, CHAR_WORKBATTLECOM3, array);//记录属性
|
||
CHAR_SETWORKINT_HIGH( charaindex, CHAR_WORKBATTLECOM3, n);
|
||
return TRUE;
|
||
}
|
||
#endif
|
||
|
||
#ifdef _PET_SKILL_SARS // WON ADD 毒煞蔓延
|
||
int PETSKILL_Sars( int charaindex, int toNo, int array, char *data )
|
||
{
|
||
|
||
char *pszOption, *pszP;
|
||
int status = -1, i = 0, turn = 3;
|
||
char szTurn[] = "turn";
|
||
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_S_SARS );
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM2, toNo );
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK );
|
||
|
||
pszOption = PETSKILL_getChar( array, PETSKILL_OPTION );
|
||
pszP = pszOption;
|
||
|
||
for( ;status == -1 && pszP[0] != 0; pszP++ ){
|
||
for( i = 1; i < BATTLE_ST_END; i ++ ){
|
||
if( strncmp( pszP, aszStatus[i], 2 ) == 0 ){
|
||
status = i;
|
||
pszP +=2;
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
|
||
if( ( pszP = strstr( pszP, szTurn ) ) != NULL){
|
||
pszP += sizeof( szTurn );
|
||
sscanf( pszP, "%d", &turn );
|
||
}
|
||
|
||
CHAR_SETWORKINT_LOW( charaindex, CHAR_WORKBATTLECOM3, status );
|
||
CHAR_SETWORKINT_HIGH( charaindex, CHAR_WORKBATTLECOM3, turn );
|
||
|
||
return TRUE;
|
||
|
||
|
||
}
|
||
#endif
|
||
|
||
#ifdef _SONIC_ATTACK // WON ADD 音波攻击
|
||
int PETSKILL_Sonic( int charaindex, int toNo, int array, char *data )
|
||
{
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_S_SONIC );
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM2, toNo );
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK );
|
||
|
||
CHAR_SETWORKINT_LOW( charaindex, CHAR_WORKBATTLECOM3, array); //记录属性
|
||
return TRUE;
|
||
|
||
}
|
||
#endif
|
||
#ifdef _PETSKILL_REGRET
|
||
int PETSKILL_Regret( int charaindex, int toNo, int array, char *data )
|
||
{
|
||
char *pszOption, *pszP;
|
||
int strdef,d_dep;
|
||
float fPer = 0.01;
|
||
pszOption = PETSKILL_getChar( array, PETSKILL_OPTION );
|
||
if( (pszP = strstr( pszOption, "攻%" ) ) != NULL ){
|
||
sscanf( pszP+3, "%f", &fPer );
|
||
fPer=(fPer/100);
|
||
strdef=CHAR_getWorkInt(charaindex,CHAR_WORKFIXSTR);
|
||
strdef=(int)(strdef * fPer);
|
||
CHAR_setWorkInt(charaindex,CHAR_WORKATTACKPOWER,(CHAR_getWorkInt(charaindex,CHAR_WORKFIXSTR)+strdef));
|
||
}
|
||
|
||
if( (pszP = strstr( pszOption, "防%" ) ) != NULL ){
|
||
sscanf( pszP+3, "%f", &fPer );
|
||
fPer=(fPer/100);
|
||
strdef=CHAR_getWorkInt(charaindex,CHAR_WORKFIXTOUGH);
|
||
strdef=(int)(strdef * fPer);
|
||
CHAR_setWorkInt(charaindex,CHAR_WORKDEFENCEPOWER,(CHAR_getWorkInt(charaindex,CHAR_WORKFIXTOUGH)+strdef));
|
||
}
|
||
if( (pszP = strstr( pszOption, "敏%" ) ) != NULL ){
|
||
sscanf( pszP+3, "%f", &fPer );
|
||
CHAR_setWorkInt( charaindex, CHAR_SKILLDEXPOWER, fPer);
|
||
fPer = fPer / 100;
|
||
d_dep = CHAR_getWorkInt( charaindex, CHAR_WORKFIXDEX);
|
||
d_dep = (int)(d_dep * fPer);
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKQUICK, CHAR_getWorkInt( charaindex, CHAR_WORKFIXDEX) + d_dep);
|
||
}
|
||
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_S_REGRET );
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM2, toNo );
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK );
|
||
|
||
CHAR_SETWORKINT_LOW( charaindex, CHAR_WORKBATTLECOM3, array); //记录属性
|
||
return TRUE;
|
||
|
||
}
|
||
#endif
|
||
|
||
#ifdef _PETSKILL_GYRATE
|
||
int PETSKILL_Gyrate( int charaindex, int toNo, int array, char *data )
|
||
{
|
||
char *pszOption="\0", *pszP;
|
||
float fPer = 0.01;
|
||
int strdef=0;
|
||
char szTurn[] = "turn";
|
||
int d_dep,i=0;
|
||
int randi=0;
|
||
//char *hetStatus[]={"全", "毒", "麻", "眠", "石", "醉", "乱", "虚", "剧", "障", "默"};
|
||
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_S_GYRATE );
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM2, toNo ); //攻击对象 23,24,25,26 为单排
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK );
|
||
|
||
pszOption = PETSKILL_getChar( array, PETSKILL_OPTION );
|
||
|
||
if( pszOption == "\0" ) {
|
||
//print("\n pszOption == NULL ");
|
||
return FALSE;
|
||
}
|
||
#ifdef _PSKILL_GYRATE
|
||
for(i=0;i<BATTLE_ST_END;i++){
|
||
if((pszP = strstr( pszOption, aszStatus[i] ) ) != NULL) break;
|
||
}
|
||
if(i==BATTLE_ST_END){
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM5, 0);
|
||
}else{
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM5, i);
|
||
}
|
||
if((pszP = strstr( pszOption, szTurn ) ) != NULL){
|
||
pszP += sizeof( szTurn );
|
||
sscanf( pszP, "%d", &i );
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM6, i);
|
||
}else{
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM6, 1);
|
||
}
|
||
|
||
if((pszP = strstr( pszOption, "成" ) ) != NULL){
|
||
sscanf( pszP+3, "%d", &i );
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM7, i);
|
||
// randi=RAND(1,100);
|
||
// if(randi>i){
|
||
// CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM5, 0);
|
||
// }
|
||
}else{
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM7, 60);
|
||
// randi=RAND(1,100);
|
||
// if(randi>60){
|
||
// CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM5, 0);
|
||
// }
|
||
}
|
||
#endif
|
||
//读取攻值
|
||
if( (pszP = strstr( pszOption, "攻%" ) ) != NULL ){
|
||
sscanf( pszP+3, "%f", &fPer );
|
||
fPer=(fPer/100);
|
||
|
||
//设定修正值
|
||
strdef=CHAR_getWorkInt(charaindex,CHAR_WORKFIXSTR);
|
||
strdef=(int)(strdef * fPer);
|
||
CHAR_setWorkInt(charaindex,CHAR_WORKATTACKPOWER,(CHAR_getWorkInt(charaindex,CHAR_WORKFIXSTR)+strdef));
|
||
}
|
||
#ifdef _PSKILL_GYRATE
|
||
if( (pszP = strstr( pszOption, "防%" ) ) != NULL ){
|
||
sscanf( pszP+3, "%f", &fPer );
|
||
fPer=(fPer/100);
|
||
strdef=CHAR_getWorkInt(charaindex,CHAR_WORKFIXTOUGH);
|
||
strdef=(int)(strdef * fPer);
|
||
CHAR_setWorkInt(charaindex,CHAR_WORKDEFENCEPOWER,(CHAR_getWorkInt(charaindex,CHAR_WORKFIXTOUGH)+strdef));
|
||
}
|
||
|
||
if( (pszP = strstr( pszOption, "敏%" ) ) != NULL ){
|
||
sscanf( pszP+3, "%f", &fPer );
|
||
CHAR_setWorkInt( charaindex, CHAR_SKILLDEXPOWER, fPer);
|
||
fPer = fPer / 100;
|
||
d_dep = CHAR_getWorkInt( charaindex, CHAR_WORKFIXDEX);
|
||
d_dep = (int)(d_dep * fPer);
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKQUICK, CHAR_getWorkInt( charaindex, CHAR_WORKFIXDEX) + d_dep);
|
||
}
|
||
#endif
|
||
CHAR_SETWORKINT_LOW( charaindex, CHAR_WORKBATTLECOM3, array); //记录属性
|
||
return TRUE;
|
||
}
|
||
#endif
|
||
|
||
#ifdef _PETSKILL_ACUPUNCTURE
|
||
int PETSKILL_Acupuncture( int charaindex, int toNo, int array, char *data )
|
||
{
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_S_ACUPUNCTURE );
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM2, toNo );
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK );
|
||
|
||
CHAR_SETWORKINT_LOW( charaindex, CHAR_WORKBATTLECOM3, array); //记录属性
|
||
return TRUE;
|
||
}
|
||
#endif
|
||
|
||
#ifdef _PETSKILL_RETRACE
|
||
int PETSKILL_Retrace( int charaindex, int toNo, int array, char *data )
|
||
{
|
||
//char *pszOption="\0", *pszP;
|
||
//float fPer = 0.01;
|
||
//int strdef=0;
|
||
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_S_RETRACE );
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM2, toNo );
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK );
|
||
|
||
/* pszOption = PETSKILL_getChar( array, PETSKILL_OPTION );
|
||
|
||
if( pszOption == "\0" ) {
|
||
print("\n pszOption == NULL ");
|
||
return FALSE;
|
||
}
|
||
|
||
//读取攻值
|
||
if( (pszP = strstr( pszOption, "攻%" ) ) != NULL ){
|
||
sscanf( pszP+3, "%f", &fPer );
|
||
fPer=(fPer/100);
|
||
//设定修正值
|
||
strdef=CHAR_getWorkInt(charaindex,CHAR_WORKFIXSTR);
|
||
strdef=(int)(strdef * fPer);
|
||
CHAR_setWorkInt(charaindex,CHAR_WORKATTACKPOWER,(CHAR_getWorkInt(charaindex,CHAR_WORKFIXSTR)+strdef));
|
||
}
|
||
*/
|
||
CHAR_SETWORKINT_LOW( charaindex, CHAR_WORKBATTLECOM3, array); //记录属性
|
||
return TRUE;
|
||
}
|
||
#endif
|
||
|
||
#ifdef _PETSKILL_HECTOR
|
||
int PETSKILL_Hector( int charaindex, int toNo, int array, char *data )
|
||
{
|
||
char *pszOption="\0", *pszP;
|
||
float fPer = 0.01;
|
||
int strdef;
|
||
char szTurn[] = "turn";
|
||
int d_dep,i=0;
|
||
char *hetStatus[]={"全", "毒", "麻", "眠", "石", "醉", "乱", "虚", "剧", "障", "默"};
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_S_HECTOR );
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM2, toNo );
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK );
|
||
|
||
pszOption = PETSKILL_getChar( array, PETSKILL_OPTION );
|
||
|
||
if( pszOption == "\0" ) {
|
||
//print("\n pszOption == NULL ");
|
||
return FALSE;
|
||
}
|
||
for(i=0;i<11;i++){
|
||
if((pszP = strstr( pszOption, hetStatus[i] ) ) != NULL) break;
|
||
}
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM5, i);
|
||
if((pszP = strstr( pszOption, szTurn ) ) != NULL){
|
||
pszP += sizeof( szTurn );
|
||
sscanf( pszP, "%d", &i );
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM6, i);
|
||
}else{
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM6, 1);
|
||
}
|
||
|
||
if((pszP = strstr( pszOption, "成" ) ) != NULL){
|
||
sscanf( pszP+3, "%d", &i );
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM7, i);
|
||
}else{
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM7, 60);
|
||
}
|
||
|
||
//读取攻值
|
||
if( (pszP = strstr( pszOption, "攻%" ) ) != NULL ){
|
||
sscanf( pszP+3, "%f", &fPer );
|
||
fPer=(fPer/100);
|
||
|
||
//设定修正值
|
||
strdef=CHAR_getWorkInt(charaindex,CHAR_WORKFIXSTR);
|
||
strdef=(int)(strdef * fPer);
|
||
CHAR_setWorkInt(charaindex,CHAR_WORKATTACKPOWER,(CHAR_getWorkInt(charaindex,CHAR_WORKFIXSTR)+strdef));
|
||
}
|
||
|
||
if( (pszP = strstr( pszOption, "防%" ) ) != NULL ){
|
||
sscanf( pszP+3, "%f", &fPer );
|
||
fPer=(fPer/100);
|
||
strdef=CHAR_getWorkInt(charaindex,CHAR_WORKFIXTOUGH);
|
||
strdef=(int)(strdef * fPer);
|
||
CHAR_setWorkInt(charaindex,CHAR_WORKDEFENCEPOWER,(CHAR_getWorkInt(charaindex,CHAR_WORKFIXTOUGH)+strdef));
|
||
}
|
||
|
||
if( (pszP = strstr( pszOption, "敏%" ) ) != NULL ){
|
||
sscanf( pszP+3, "%f", &fPer );
|
||
CHAR_setWorkInt( charaindex, CHAR_SKILLDEXPOWER, fPer);
|
||
fPer = fPer / 100;
|
||
d_dep = CHAR_getWorkInt( charaindex, CHAR_WORKFIXDEX);
|
||
d_dep = (int)(d_dep * fPer);
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKQUICK, CHAR_getWorkInt( charaindex, CHAR_WORKFIXDEX) + d_dep);
|
||
}
|
||
|
||
CHAR_SETWORKINT_LOW( charaindex, CHAR_WORKBATTLECOM3, array); //记录属性
|
||
|
||
return TRUE;
|
||
}
|
||
#endif
|
||
|
||
#ifdef _PETSKILL_FIREKILL
|
||
int PETSKILL_Firekill( int charaindex, int toNo, int array, char *data )
|
||
{
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_S_FIREKILL );
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM2, toNo );
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK );
|
||
|
||
CHAR_SETWORKINT_LOW( charaindex, CHAR_WORKBATTLECOM3, array); //记录属性
|
||
|
||
return TRUE;
|
||
}
|
||
#endif
|
||
|
||
#ifdef _PETSKILL_DAMAGETOHP
|
||
int PETSKILL_DamageToHp2( int charaindex, int toNo, int array, char *data )
|
||
{
|
||
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_S_DAMAGETOHP2 );
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM2, toNo );
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK );
|
||
CHAR_SETWORKINT_LOW(charaindex,CHAR_WORKBATTLECOM3, array); //记录技能
|
||
/* pszOption = PETSKILL_getChar( array, PETSKILL_OPTION );
|
||
|
||
if( pszOption == "\0" ) return FALSE;
|
||
|
||
strdef = CHAR_getWorkInt(charaindex,CHAR_WORKFIXSTR);
|
||
def = (atoi( pszOption)/100);
|
||
strdef = strdef - (int)(strdef*def);
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKATTACKPOWER, strdef);
|
||
*/
|
||
|
||
return TRUE;
|
||
|
||
}
|
||
#endif
|
||
|
||
#ifdef _PETSKILL_BECOMEFOX
|
||
int PETSKILL_BecomeFox( int charaindex, int toNo, int array, char* data)
|
||
{
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_S_BECOMEFOX);
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM2, toNo );
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK );
|
||
CHAR_SETWORKINT_LOW(charaindex,CHAR_WORKBATTLECOM3, array); //记录技能
|
||
|
||
return TRUE;
|
||
}
|
||
#endif
|
||
|
||
#ifdef _PETSKILL_BECOMEPIG
|
||
int PETSKILL_BecomePig( int charaindex, int toNo, int array, char* data)
|
||
{
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_S_BECOMEPIG);
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM2, toNo );
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK );
|
||
CHAR_SETWORKINT_LOW( charaindex, CHAR_WORKBATTLECOM3, array); //记录属性
|
||
return TRUE;
|
||
}
|
||
#endif
|
||
|
||
#ifdef _PETSKILL_LER
|
||
int PETSKILL_BatFly(int charaindex,int toNo,int array,char* data)
|
||
{
|
||
CHAR_setWorkInt(charaindex,CHAR_WORKBATTLECOM1,BATTLE_COM_S_BAT_FLY);
|
||
CHAR_setWorkInt(charaindex,CHAR_WORKBATTLECOM2,toNo);
|
||
CHAR_setWorkInt(charaindex,CHAR_WORKBATTLEMODE,BATTLE_CHARMODE_C_OK);
|
||
CHAR_SETWORKINT_LOW(charaindex,CHAR_WORKBATTLECOM3,array);
|
||
return TRUE;
|
||
}
|
||
|
||
int PETSKILL_DivideAttack( int charaindex, int toNo, int array, char* data)
|
||
{
|
||
CHAR_setWorkInt(charaindex,CHAR_WORKBATTLECOM1,BATTLE_COM_S_DIVIDE_ATTACK);
|
||
CHAR_setWorkInt(charaindex,CHAR_WORKBATTLECOM2,toNo);
|
||
CHAR_setWorkInt(charaindex,CHAR_WORKBATTLEMODE,BATTLE_CHARMODE_C_OK);
|
||
CHAR_SETWORKINT_LOW(charaindex,CHAR_WORKBATTLECOM3,array);
|
||
return TRUE;
|
||
}
|
||
#endif
|
||
|
||
#ifdef _PETSKILL_BATTLE_MODEL
|
||
int PETSKILL_BattleModel(int charaindex, int toindex, int array, char* data)
|
||
{
|
||
float fPer;
|
||
int i,iType,iObjectNum,iValue,strdef,d_dep;
|
||
char *pszOption="\0",*pszP,szData[32],szData2[32];
|
||
|
||
pszOption = PETSKILL_getChar(array,PETSKILL_OPTION);
|
||
if(pszOption == "\0"){
|
||
//printf("PETSKILL_BattleModel: 读取 PETSKILL_OPTION 错误!!(数组:%d,文件:%s,第%d行)\n",array,__FILE__,__LINE__);
|
||
return FALSE;
|
||
}
|
||
|
||
// 取得攻击类型
|
||
if(getStringFromIndexWithDelim(pszOption,"|",1,szData,sizeof(szData)) == FALSE){
|
||
//printf("PETSKILL_BattleModel: no type data!!(文件:%s,第%d行)\n",__FILE__,__LINE__);
|
||
return FALSE;
|
||
}
|
||
iType = atoi(szData);
|
||
// 取得攻击物件数量
|
||
if(getStringFromIndexWithDelim(pszOption,"|",2,szData,sizeof(szData)) == FALSE){
|
||
//printf("PETSKILL_BattleModel: no object number data!!(文件:%s,第%d行)\n",__FILE__,__LINE__);
|
||
return FALSE;
|
||
}
|
||
iObjectNum = atoi(szData);
|
||
if(iObjectNum <= 0) iObjectNum = RAND(1,10);
|
||
else if(iObjectNum > 10) iObjectNum = 10;
|
||
// 取得能力增减
|
||
if(getStringFromIndexWithDelim(pszOption,"|",6,szData,sizeof(szData)) != FALSE){
|
||
// 检查设定
|
||
if(CHAR_getWorkInt(charaindex,CHAR_WORKPETSKILLBT)==0 && CHAR_getWorkInt(charaindex,CHAR_WORKBATTLEINDEX)>-1){
|
||
//读取攻值
|
||
if( (pszP = strstr( szData, "攻%" ) ) != NULL ){
|
||
sscanf( pszP+3, "%f", &fPer );
|
||
fPer=(fPer/100);
|
||
|
||
//设定修正值
|
||
strdef=CHAR_getWorkInt(charaindex,CHAR_WORKFIXSTR);
|
||
strdef=(int)(strdef * fPer);
|
||
CHAR_setWorkInt(charaindex,CHAR_WORKATTACKPOWER,(CHAR_getWorkInt(charaindex,CHAR_WORKFIXSTR)+strdef));
|
||
}
|
||
#ifdef _PSKILL_BATTLE_MODEL
|
||
if( (pszP = strstr( szData, "防%" ) ) != NULL ){
|
||
sscanf( pszP+3, "%f", &fPer );
|
||
fPer=(fPer/100);
|
||
strdef=CHAR_getWorkInt(charaindex,CHAR_WORKFIXTOUGH);
|
||
strdef=(int)(strdef * fPer);
|
||
CHAR_setWorkInt(charaindex,CHAR_WORKDEFENCEPOWER,(CHAR_getWorkInt(charaindex,CHAR_WORKFIXTOUGH)+strdef));
|
||
}
|
||
|
||
if( (pszP = strstr( szData, "敏%" ) ) != NULL ){
|
||
sscanf( pszP+3, "%f", &fPer );
|
||
CHAR_setWorkInt( charaindex, CHAR_SKILLDEXPOWER, fPer);
|
||
fPer = fPer / 100;
|
||
d_dep = CHAR_getWorkInt( charaindex, CHAR_WORKFIXDEX);
|
||
d_dep = (int)(d_dep * fPer);
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKQUICK, CHAR_getWorkInt( charaindex, CHAR_WORKFIXDEX) + d_dep);
|
||
}
|
||
#endif
|
||
}
|
||
}
|
||
CHAR_setWorkInt(charaindex,CHAR_WORKPETSKILLBT,1);
|
||
CHAR_setWorkInt(charaindex,CHAR_WORKBATTLEMODE,BATTLE_CHARMODE_C_OK);
|
||
CHAR_setWorkInt(charaindex,CHAR_WORKBATTLECOM1,BATTLE_COM_S_BATTLE_MODEL);
|
||
CHAR_SETWORKINT_LOW(charaindex,CHAR_WORKBATTLECOM2,iType); // 记录攻击类型
|
||
CHAR_SETWORKINT_HIGH(charaindex,CHAR_WORKBATTLECOM2,iObjectNum); // 记录攻击物件数量
|
||
CHAR_setWorkInt(charaindex,CHAR_WORKBATTLECOM3,array);
|
||
return TRUE;
|
||
}
|
||
#endif
|
||
|
||
#ifdef _PETSKILL_SHOWMERCY
|
||
int PETSKILL_ShowMercy( int charaindex, int toNo, int array, char* data)
|
||
{
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_S_SHOWMERCY);
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM2, toNo );
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK );
|
||
|
||
return TRUE;
|
||
}
|
||
#endif
|
||
|
||
#ifdef _PETSKILL_COMBINED
|
||
int PETSKILL_Combined( int charaindex, int toNo, int array, char* data)
|
||
{
|
||
char *pszOption="\0";
|
||
char combined[32];
|
||
int kill[10],count,i;
|
||
char killstr[32],countstr[32];
|
||
|
||
pszOption = PETSKILL_getChar( array, PETSKILL_OPTION );
|
||
if( pszOption == "\0" ) return FALSE;
|
||
|
||
strcpysafe( combined,sizeof(combined), " " );
|
||
getStringFromIndexWithDelim( pszOption, "|", 1, combined, sizeof( combined));
|
||
if( strcmp( combined, "综合法" ) == 0 ){
|
||
if( getStringFromIndexWithDelim( pszOption, "|", 2, countstr, sizeof( countstr)) == FALSE )
|
||
return FALSE;
|
||
count = atoi(countstr);
|
||
if( count > 10 )
|
||
count = 10;
|
||
for(i=0;i<count;i++){
|
||
if( getStringFromIndexWithDelim( pszOption, "|", 3+i, killstr, sizeof( killstr)) )
|
||
kill[i] = atoi(killstr);
|
||
}
|
||
}
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM2, toNo );
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_JYUJYUTU );
|
||
CHAR_SETWORKINT_LOW( charaindex, CHAR_WORKBATTLECOM3, kill[rand()%count] );
|
||
CHAR_SETWORKINT_HIGH( charaindex, CHAR_WORKBATTLECOM3, 0 );
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK );
|
||
|
||
return TRUE;
|
||
}
|
||
#endif
|
||
|
||
int PETSKILL_ZiYun1(
|
||
int charaindex,
|
||
int toindex,
|
||
int array,
|
||
char *data
|
||
|
||
)
|
||
{
|
||
char *pszOption,szData[32],*pszP;
|
||
int attcnt=1,ming=100,i,strdef,d_dep;
|
||
float fPer;
|
||
char szTurn[] = "turn";
|
||
char *hetStatus[]={"全", "毒", "麻", "眠", "石", "醉", "乱", "虚", "剧", "障", "默"};
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_S_ZIYUN1 );
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM2, toindex );
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK );
|
||
|
||
pszOption = PETSKILL_getChar( array, PETSKILL_OPTION );
|
||
if(getStringFromIndexWithDelim(pszOption,"|",1,szData,sizeof(szData)) == FALSE){
|
||
attcnt = atoi(szData);
|
||
}
|
||
if(getStringFromIndexWithDelim(pszOption,"|",2,szData,sizeof(szData)) == FALSE){
|
||
ming = atoi(szData);
|
||
}
|
||
if(getStringFromIndexWithDelim(pszOption,"|",3,szData,sizeof(szData)) == FALSE){
|
||
if( (pszP = strstr( szData, "攻%" ) ) != NULL ){
|
||
sscanf( pszP+3, "%f", &fPer );
|
||
fPer=(fPer/100);
|
||
|
||
//设定修正值
|
||
strdef=CHAR_getWorkInt(charaindex,CHAR_WORKFIXSTR);
|
||
strdef=(int)(strdef * fPer);
|
||
CHAR_setWorkInt(charaindex,CHAR_WORKATTACKPOWER,(CHAR_getWorkInt(charaindex,CHAR_WORKFIXSTR)+strdef));
|
||
}
|
||
|
||
if( (pszP = strstr( szData, "防%" ) ) != NULL ){
|
||
sscanf( pszP+3, "%f", &fPer );
|
||
fPer=(fPer/100);
|
||
strdef=CHAR_getWorkInt(charaindex,CHAR_WORKFIXTOUGH);
|
||
strdef=(int)(strdef * fPer);
|
||
CHAR_setWorkInt(charaindex,CHAR_WORKDEFENCEPOWER,(CHAR_getWorkInt(charaindex,CHAR_WORKFIXTOUGH)+strdef));
|
||
}
|
||
|
||
if( (pszP = strstr( szData, "敏%" ) ) != NULL ){
|
||
sscanf( pszP+3, "%f", &fPer );
|
||
CHAR_setWorkInt( charaindex, CHAR_SKILLDEXPOWER, fPer);
|
||
fPer = fPer / 100;
|
||
d_dep = CHAR_getWorkInt( charaindex, CHAR_WORKFIXDEX);
|
||
d_dep = (int)(d_dep * fPer);
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKQUICK, CHAR_getWorkInt( charaindex, CHAR_WORKFIXDEX) + d_dep);
|
||
}
|
||
}
|
||
if(getStringFromIndexWithDelim(pszOption,"|",4,szData,sizeof(szData)) == FALSE){
|
||
for(i=0;i<11;i++){
|
||
if((pszP = strstr( pszOption, hetStatus[i] ) ) != NULL) break;
|
||
}
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM5, i);
|
||
if((pszP = strstr( pszOption, szTurn ) ) != NULL){
|
||
pszP += sizeof( szTurn );
|
||
sscanf( pszP, "%d", &i );
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM6, i);
|
||
}else{
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM6, 1);
|
||
}
|
||
|
||
if((pszP = strstr( pszOption, "成" ) ) != NULL){
|
||
sscanf( pszP+3, "%d", &i );
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM7, i);
|
||
}else{
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM7, 60);
|
||
}
|
||
}
|
||
|
||
CHAR_SETWORKINT_LOW( charaindex, CHAR_WORKBATTLECOM3, attcnt );
|
||
CHAR_SETWORKINT_HIGH( charaindex, CHAR_WORKBATTLECOM3, ming );
|
||
return TRUE;
|
||
}
|
||
|