OK論壇

 找回密碼
 註冊
查看: 1474|回復: 0

羅剎破凰擊源碼修改

 關閉 [複製鏈接]
  • TA的每日心情
    開心
    2018-1-18 03:10 PM
  • 簽到天數: 189 天

    連續簽到: 1 天

    [LV.7]常住居民III

    發表於 2015-2-6 22:21:50 | 顯示全部樓層 |閱讀模式
    本帖最後由 盧卡斯 於 2015-2-8 07:51 PM 編輯

    由於官方版本的羅剎破凰擊 HP bonus 部份為無視抗人,
    但是在Rathena/Hercules/3ceam/SEAR 中,羅剎破凰擊 HP bonus 部份均為有視抗人。
    故現在希望可以藉修改源碼以修復此問題。
    已考慮過的解決方法,
    1. 在skill.c 的 case SR_GATEOFHELL 中新增status_zap 的function 以達到直接把對方的HP吸取而忽略抗人,但傷害顯示方式便會有別於官方。
    2. 在使用技能時再觸發另一技能,SR_GATEOFHELL_BONUS,然後在skill_db中設置成無視抗人的屬性,傷害顯示方式一樣是有別於官方。
    故暫時排除以上兩個方法。

    希望有人能提供可行的解決方法,不要求閣下提供完整的源碼diff (如果有當然最好)

    以下為羅剎破凰擊相關的源碼,
    skill.c
    1. case SR_GATEOFHELL:
    2.                 skill_attack(BF_WEAPON,src,src,bl,skill_id,skill_lv,tick,flag);
    3.                 break;
    複製代碼
    1.   case SR_GATEOFHELL:
    2.                         if( sd->spiritball > 0 )
    3.                                 sd->spiritball_old = require.spiritball;
    4.                         break;
    複製代碼
    1.   case SR_GATEOFHELL:
    2.                         if( sc && sc->data[SC_COMBO] && sc->data[SC_COMBO]->val1 == SR_FALLENEMPIRE )
    3.                                 req.sp -= req.sp * 10 / 100;
    4.                         break;
    複製代碼
    battle.c
    1. if (skill_id == SR_GATEOFHELL) {
    2.                 if (skill_lv < 5)
    3.                         return BF_SHORT;
    4.                 else
    5.                         return BF_LONG;
    6.         }
    複製代碼
    1.     case SR_GATEOFHELL:
    2.                                 case KO_BAKURETSU:
    3.                                         wd.damage = battle_attr_fix(src, target, wd.damage, ELE_NEUTRAL, tstatus->def_ele, tstatus->ele_lv);
    4.                                         break;
    複製代碼
    1.   case SR_GATEOFHELL:
    2.                         if( sc && sc->data[SC_COMBO] && sc->data[SC_COMBO]->val1 == SR_FALLENEMPIRE )
    3.                                 skillratio += 700 * skill_lv;
    4.                         else
    5.                                 skillratio += 400 * skill_lv;
    6.                         RE_LVL_DMOD(100);
    7.                         break;
    複製代碼
    1.   case SR_GATEOFHELL: {
    2.                         struct status_data *sstatus = status_get_status_data(src);
    3.                         ATK_ADD(wd.damage, wd.damage2, sstatus->max_hp - status_get_hp(src));
    4.                         if(sc && sc->data[SC_COMBO] && sc->data[SC_COMBO]->val1 == SR_FALLENEMPIRE) {
    5.                                 ATK_ADD(wd.damage, wd.damage2, (sstatus->max_sp * (1 + skill_lv * 2 / 10)) + 40 * status_get_lv(src));
    6.                         } else
    7.                                 ATK_ADD(wd.damage, wd.damage2, (sstatus->sp * (1 + skill_lv * 2 / 10)) + 10 * status_get_lv(src));
    8.                 }
    複製代碼
    回復

    使用道具 舉報

    您需要登錄後才可以回帖 登錄 | 註冊

    本版積分規則

    Archiver|手機版|小黑屋|OK討論區

    GMT+8, 2024-4-25 04:42 AM , Processed in 0.046967 second(s), 19 queries , Gzip On.

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.

    快速回復 返回頂部 返回列表