盧卡斯 發表於 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 case SR_GATEOFHELL:
                skill_attack(BF_WEAPON,src,src,bl,skill_id,skill_lv,tick,flag);
                break;case SR_GATEOFHELL:
                        if( sd->spiritball > 0 )
                              sd->spiritball_old = require.spiritball;
                        break;case SR_GATEOFHELL:
                        if( sc && sc->data && sc->data->val1 == SR_FALLENEMPIRE )
                              req.sp -= req.sp * 10 / 100;
                        break;battle.c if (skill_id == SR_GATEOFHELL) {
                if (skill_lv < 5)
                        return BF_SHORT;
                else
                        return BF_LONG;
      }    case SR_GATEOFHELL:
                              case KO_BAKURETSU:
                                        wd.damage = battle_attr_fix(src, target, wd.damage, ELE_NEUTRAL, tstatus->def_ele, tstatus->ele_lv);
                                        break;case SR_GATEOFHELL:
                        if( sc && sc->data && sc->data->val1 == SR_FALLENEMPIRE )
                              skillratio += 700 * skill_lv;
                        else
                              skillratio += 400 * skill_lv;
                        RE_LVL_DMOD(100);
                        break;case SR_GATEOFHELL: {
                        struct status_data *sstatus = status_get_status_data(src);
                        ATK_ADD(wd.damage, wd.damage2, sstatus->max_hp - status_get_hp(src));
                        if(sc && sc->data && sc->data->val1 == SR_FALLENEMPIRE) {
                              ATK_ADD(wd.damage, wd.damage2, (sstatus->max_sp * (1 + skill_lv * 2 / 10)) + 40 * status_get_lv(src));
                        } else
                              ATK_ADD(wd.damage, wd.damage2, (sstatus->sp * (1 + skill_lv * 2 / 10)) + 10 * status_get_lv(src));
                }
頁: [1]
查看完整版本: 羅剎破凰擊源碼修改