📄 pet_skill.c
字号:
}#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++) { 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_TIMIDint 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_2TIMIDint PETSKILL_2BattleTimid( int charaindex, int toNo, int array, char *data ){ char *pszOption=NULL; 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 == NULL ) 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_ANTINTERint 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_PROPERTYint 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_TEARint 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_LIGHTTAKEint 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_ATTCRAZEDint PETSKILL_AttackCrazed( int charaindex, int toNo, int array, char *data ){ char *pszOption=NULL; 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 == NULL ) return FALSE; 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 = NULL ; 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 == NULL ) 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_REGRETint PETSKILL_Regret( int charaindex, int toNo, int array, char *data ){ char *pszOption, *pszP; int strdef; 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_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_GYRATEint PETSKILL_Gyrate( int charaindex, int toNo, int array, char *data ){ char *pszOption, *pszP; float fPer = 0.01; int strdef=0; 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 == NULL ) { 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_ACUPUNCTUREint 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_se
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -