2016年9月8日 星期四

設定能力值上限(萬能藥)





一共改六支檔案

1.位置 Config.java




/** CharSettings control */


// 設定能力值上限 by srwh
public static int BONUS_MT_MAX;
public static int MAX_ABILITY;
public static int MAX_ABILITY2;
public static int MAX_ABILITY3;

●●●●●●●●●●●●●●●分隔線●●●●●●●●●●●●●●●●●●●


// 可設定能力值上限 by srwh
BONUS_MT_MAX = Integer.parseInt(charSettings.getProperty(
"BONUS_MT_MAX", "25"));
MAX_ABILITY = Integer.parseInt(charSettings.getProperty("MaxAbility",
"25"));
MAX_ABILITY2 = Integer.parseInt(charSettings.getProperty("MaxAbility2",
"5"));
MAX_ABILITY3 = Integer.parseInt(charSettings.getProperty("MaxAbility3",
"25"));


●●●●●●●●●●●●●●●分隔線●●●●●●●●●●●●●●●●●●●

} else if (pName.equalsIgnoreCase("MaxAbility")){// 設定能力值上限 by srwh
MAX_ABILITY = Integer.parseInt(pValue);
} else if (pName.equalsIgnoreCase("MaxAbility2")){
MAX_ABILITY2 = Integer.parseInt(pValue);
} else if (pName.equalsIgnoreCase("MaxAbility3")){
MAX_ABILITY3 = Integer.parseInt(pValue);
} else if (pName.equalsIgnoreCase("BONUS_MT_MAX")){
BONUS_MT_MAX = Integer.parseInt(pValue);

●●●●●●●●●●●●●●●分隔線●●●●●●●●●●●●●●●●●●●

2.位置src/l1j/server/server/clientpackets/C_ItemUSe.java

else if (itemId == 40033) { // 萬能藥:力量 ,可設定能力值上限 by srwh
if (pc.getBaseStr() < Config.MAX_ABILITY3 && pc.getElixirStats() < Config.MAX_ABILITY2) {
pc.addBaseStr((byte) 1);
pc.setElixirStats(pc.getElixirStats() + 1);
pc.getInventory().removeItem(l1iteminstance, 1);
pc.sendPackets(new S_OwnCharStatus2(pc));
pc.save();
} else {
if(pc.getBaseStr() >= Config.MAX_ABILITY3)
pc.sendPackets(new S_SystemMessage("力量能力值"+Config.MAX_ABILITY3+"以後不能喝萬能藥! "));
if(pc.getElixirStats() >= Config.MAX_ABILITY2)
pc.sendPackets(new S_SystemMessage("萬能藥只能喝"+Config.MAX_ABILITY2+"瓶"));
}
}
else if (itemId == 40034) { // 萬能藥:體力
if (pc.getBaseCon() < Config.MAX_ABILITY3 && pc.getElixirStats() < Config.MAX_ABILITY2) {
pc.addBaseCon((byte) 1);
pc.setElixirStats(pc.getElixirStats() + 1);
pc.getInventory().removeItem(l1iteminstance, 1);
pc.sendPackets(new S_OwnCharStatus2(pc));
pc.save();
} else {
if(pc.getBaseCon() >= Config.MAX_ABILITY3)
pc.sendPackets(new S_SystemMessage("體力能力值"+Config.MAX_ABILITY3+"以後不能喝萬能藥! "));
if(pc.getElixirStats() >= Config.MAX_ABILITY2)
pc.sendPackets(new S_SystemMessage("萬能藥只能喝"+Config.MAX_ABILITY2+"瓶"));
}
}
else if (itemId == 40035) { // 萬能藥:敏捷
if (pc.getBaseDex() < Config.MAX_ABILITY3 && pc.getElixirStats() < Config.MAX_ABILITY2) {
pc.addBaseDex((byte) 1);
pc.resetBaseAc();
pc.setElixirStats(pc.getElixirStats() + 1);
pc.getInventory().removeItem(l1iteminstance, 1);
pc.sendPackets(new S_OwnCharStatus2(pc));
pc.save();
} else {
if(pc.getBaseDex() >= Config.MAX_ABILITY3)
pc.sendPackets(new S_SystemMessage("敏捷能力值"+Config.MAX_ABILITY3+"以後不能喝萬能藥! "));
if(pc.getElixirStats() >= Config.MAX_ABILITY2)
pc.sendPackets(new S_SystemMessage("萬能藥只能喝"+Config.MAX_ABILITY2+"瓶"));
}
}
else if (itemId == 40036) { // 萬能藥:智力
if (pc.getBaseInt() < Config.MAX_ABILITY3 && pc.getElixirStats() < Config.MAX_ABILITY2) {
pc.addBaseInt((byte) 1);
pc.setElixirStats(pc.getElixirStats() + 1);
pc.getInventory().removeItem(l1iteminstance, 1);
pc.sendPackets(new S_OwnCharStatus2(pc));
pc.save();
} else {
if(pc.getBaseInt() >= Config.MAX_ABILITY3)
pc.sendPackets(new S_SystemMessage("智力能力值"+Config.MAX_ABILITY3+"以後不能喝萬能藥! "));
if(pc.getElixirStats() >= Config.MAX_ABILITY2)
pc.sendPackets(new S_SystemMessage("萬能藥只能喝"+Config.MAX_ABILITY2+"瓶"));
}
}
else if (itemId == 40037) { // 萬能藥:精神
if (pc.getBaseWis() < Config.MAX_ABILITY3 && pc.getElixirStats() < Config.MAX_ABILITY2) {
pc.addBaseWis((byte) 1);
pc.resetBaseMr();
pc.setElixirStats(pc.getElixirStats() + 1);
pc.getInventory().removeItem(l1iteminstance, 1);
pc.sendPackets(new S_OwnCharStatus2(pc));
pc.save();
} else {
if(pc.getBaseWis() >= Config.MAX_ABILITY3)
pc.sendPackets(new S_SystemMessage("精神能力值"+Config.MAX_ABILITY3+"以後不能喝萬能藥! "));
if(pc.getElixirStats() >= Config.MAX_ABILITY2)
pc.sendPackets(new S_SystemMessage("萬能藥只能喝"+Config.MAX_ABILITY2+"瓶"));
}
}
else if (itemId == 40038) { // 萬能藥:魅力
if (pc.getBaseCha() < Config.MAX_ABILITY3 && pc.getElixirStats() < Config.MAX_ABILITY2) {
pc.addBaseCha((byte) 1);
pc.setElixirStats(pc.getElixirStats() + 1);
pc.getInventory().removeItem(l1iteminstance, 1);
pc.sendPackets(new S_OwnCharStatus2(pc));
pc.save();
} else {
if(pc.getBaseCha() >= Config.MAX_ABILITY3)
pc.sendPackets(new S_SystemMessage("魅力能力值"+Config.MAX_ABILITY3+"以後不能喝萬能藥! "));
if(pc.getElixirStats() >= Config.MAX_ABILITY2)
pc.sendPackets(new S_SystemMessage("萬能藥只能喝"+Config.MAX_ABILITY2+"瓶"));
}


●●●●●●●●●●●●●●●分隔線●●●●●●●●●●●●●●●●●●●

3.位置src/l1j/server/server/clientpackets/C_Attr.java


case 479

整段(包含其他數值)改成

            case 479: // 提昇能力值?(str、dex、int、con、wis、cha)設定能力值上限
                if (readC() == 1) {
    String s = readS();
    if (!(pc.getLevel() - 50 > pc.getBonusStats())) {
    return;
    }
    if (s.toLowerCase().equals("str".toLowerCase())) {
    if (pc.getBaseStr() < Config.BONUS_MT_MAX) { // 調整能力值上限
    pc.addBaseStr((byte) 1); //素STR值+1
    pc.setBonusStats(pc.getBonusStats() + 1);
    pc.sendPackets(new S_OwnCharStatus2(pc));
    pc.sendPackets(new S_CharVisualUpdate(pc));
    pc.save(); // DB情報書迂
    } else {
    pc.sendPackets(new S_SystemMessage("您此項能力值已達到上限,請選擇其他能力。"));
    }
    } else if (s.toLowerCase().equals("dex".toLowerCase())) {
    if (pc.getBaseDex() < Config.BONUS_MT_MAX) { // 調整能力值上限
    pc.addBaseDex((byte) 1); //素DEX值+1
    pc.resetBaseAc();
    pc.setBonusStats(pc.getBonusStats() + 1);
    pc.sendPackets(new S_OwnCharStatus2(pc));
    pc.sendPackets(new S_CharVisualUpdate(pc));
    pc.save(); // DB情報書迂
    } else {
    pc.sendPackets(new S_SystemMessage("您此項能力值已達到上限,請選擇其他能力。"));
    }
    } else if (s.toLowerCase().equals("con".toLowerCase())) {
    if (pc.getBaseCon() < Config.BONUS_MT_MAX) { // 調整能力值上限
    pc.addBaseCon((byte) 1); //素CON值+1
    pc.setBonusStats(pc.getBonusStats() + 1);
    pc.sendPackets(new S_OwnCharStatus2(pc));
    pc.sendPackets(new S_CharVisualUpdate(pc));
    pc.save(); // DB情報書迂
    } else {
    pc.sendPackets(new S_SystemMessage("您此項能力值已達到上限,請選擇其他能力。"));
    }
    } else if (s.toLowerCase().equals("int".toLowerCase())) {
    if (pc.getBaseInt() < Config.BONUS_MT_MAX) { // 調整能力值上限
    pc.addBaseInt((byte) 1); //素INT值+1
    pc.setBonusStats(pc.getBonusStats() + 1);
    pc.sendPackets(new S_OwnCharStatus2(pc));
    pc.sendPackets(new S_CharVisualUpdate(pc));
    pc.save(); // DB情報書迂
    } else {
    pc.sendPackets(new S_SystemMessage("您此項能力值已達到上限,請選擇其他能力。"));
    }
    } else if (s.toLowerCase().equals("wis".toLowerCase())) {
    if (pc.getBaseWis() < Config.BONUS_MT_MAX) { // 調整能力值上限
    pc.addBaseWis((byte) 1); //素WIS值+1
    pc.resetBaseMr();
    pc.setBonusStats(pc.getBonusStats() + 1);
    pc.sendPackets(new S_OwnCharStatus2(pc));
    pc.sendPackets(new S_CharVisualUpdate(pc));
    pc.save(); // DB情報書迂
    } else {
    pc.sendPackets(new S_SystemMessage("您此項能力值已達到上限,請選擇其他能力。"));
    }
    } else if (s.toLowerCase().equals("cha".toLowerCase())) {
    if (pc.getBaseCha() < Config.BONUS_MT_MAX) {// 調整能力值上限
    pc.addBaseCha((byte) 1); //素CHA值+1
    pc.setBonusStats(pc.getBonusStats() + 1);
    pc.sendPackets(new S_OwnCharStatus2(pc));
    pc.sendPackets(new S_CharVisualUpdate(pc));
    pc.save(); // DB情報書迂
    } else {
    pc.sendPackets(new S_SystemMessage("您此項能力值已達到上限,請選擇其他能力。"));
    }
    }
                }
                break;




4.位置src/l1j/server/server/clientpackets/C_LoginToServer.java


pc.sendPackets(new S_Karma(pc)); // 友好度

上面加入


//XXX 設定能力值上限
if ((pc.getLevel() >= 51) && ((pc.getLevel() - 50) > pc.getBonusStats())) {
if ((pc.getBaseStr() + pc.getBaseDex() + pc.getBaseCon()
+ pc.getBaseInt() + pc.getBaseWis() + pc.getBaseCha()) < (Config.BONUS_MT_MAX * 6)) {
pc.sendPackets(new S_bonusstats(pc.getId(), 1));
}
}

5.位置src/l1j/server/server/model/Instance/L1PcInstance.java


// ボーナスステータス

整段改成

// ボーナスステータス,設定能力值上限
if (getLevel() >= 51 && getLevel() - 50 > getBonusStats()) {
if ((getBaseStr() + getBaseDex() + getBaseCon() + getBaseInt()
+ getBaseWis() + getBaseCha()) < (Config.BONUS_MT_MAX * 6)) {
sendPackets(new S_bonusstats(getId(), 1));
}
}



6.位置src/l1j/server/server/model/HpRegeneration.java


// 空腹と重量のチェック
if (_pc.get_food() < 3 || isOverWeight(_pc)
|| _pc.hasSkillEffect(BERSERKERS)) {
bonus = 0;
// 装備によるHPR増加は満腹度、重量によってなくなるが、 減少である場合は満腹度、重量に関係なく効果が残る
if (equipHpr > 0) {
equipHpr = 0;
}
}

下面加入


//設定能力值上限
// 免重登能點完能力值 ,BONUS_MT_MAX*6 = 210 , BONUS_MT_MAX 為手點上限
if (_pc.getLevel() >= 51 && _pc.getLevel() - 50 > _pc.getBonusStats()) {
if ((_pc.getBaseStr() + _pc.getBaseDex() + _pc.getBaseCon() + _pc.getBaseInt()
+ _pc.getBaseWis() + _pc.getBaseCha()) < (Config.BONUS_MT_MAX * 6)) {
_pc.sendPackets(new S_Bonusstats(_pc.getId(), 1));
}
}


3 則留言:

  1. 大大您分享出來的貢獻良多,我也是從你分享出來的原始碼開始改
    想請問您一個寵物的問題
    遇到寵物會抱走的情況無法解決,領出來停留後人物走遠在點攻擊狀態
    寵物速度會異常加速,攻擊速度/走路速度 都超快

    回覆刪除
  2. 感謝分享 不知道 能否請教些 早期天堂版本的問題 我有1.63 球狀血量 版本的檔案 已中文化開成功

    回覆刪除
  3. 謝謝大大分享這麼多寶貴的知識,想懇求如何設定可以讓朋友連線來我架好的私服玩呢?
    找了很多資料但都沒有成功,還是只能單機玩~懇求指點明燈~謝謝

    回覆刪除