📄 pet_skill.c
字号:
{ 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;}#endifint 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_MAGICint PETSKILL_AttackMagic( int charaindex, int toindex, int array, char *data){ char *pszP; char szMagic[] = "magic"; char szItem[] = "item"; int magic = 313,item = 19659; // magic id预设为火魔法等级一,item index预设为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 _PETSKILL_EXPLODEint PETSKILL_Explode( int charaindex, int toNo, int array, char *data ){ char *pszOption, *pszP; float fPer = 0.01; int strdef; CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM2, toNo ); CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK ); if( BattleArray[CHAR_getWorkInt( charaindex, CHAR_WORKBATTLEINDEX )].type != BATTLE_TYPE_P_vs_P ){ CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_ATTACK ); return TRUE; } else CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_S_EXPLODE ); 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_WORKFIXDEX,(CHAR_getWorkInt(charaindex,CHAR_WORKFIXDEX)+strdef)); } 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;}#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 == NULL ) 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 == NULL ) 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 == NULL ) 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 == NULL ) 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 == NULL ) 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)) == NULL ) { 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;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -