📄 pet_skill.c
字号:
// 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_BATTLEENEMYSKILLint 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_MPDAMAGEint 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_TOOTHint 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_MODIFYint 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_MDFYATTACKint 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_INSLAYint 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_SUPERWALLint 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_SETDUCKint 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_SKILLint 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_FIXITEMint 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){ 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++) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -