?? 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 + -