2013年6月1日 星期六

【Java教學】【★★★★★】經驗加倍藥水總整合

由於新手可能爬文都只爬到部分章節~或是之前範例程式碼(只有寫出200%其它要自己新增)
也或許近日小弟一直被詢問到此類問題,故發出此篇教學~希望能解決大家的困擾~也能暫緩讓小弟休息一下!
小弟只是將部分散亂的章節重新再整理一遍而已並非原創,然而原創我也不知道是哪位大大~


廢話不多說~我直接講重點~!!

整合的地方為CITEMUSE整段程式碼整合,不需要再寫入一堆else if(itemId==xxx) !!

進入教學:


****O**P**Q**L**O****【【步驟1】】********************

server/server/model/skill/L1SkillId.java

直接拉到最下面 在最後 } 的上面加入以下

public static final int EDD1 = 991000; //經驗1.5
public static final int EDD2 = 991001; //
經驗2
public static final int EDD3 = 991002; //
經驗3

再來左上角找到儲存~按下去!


****O**P**Q**L**O****【【步驟2】】********************

server/server/clientpackets/C_itemUSe.java

搜尋 import static l1j.server.server.model.skill.L1SkillId.WIND_WALK;

在下方加入

import static l1j.server.server.model.skill.L1SkillId.EDD1;
import static l1j.server.server.model.skill.L1SkillId.EDD2;
import static l1j.server.server.model.skill.L1SkillId.EDD3;


****O**P**Q**L**O****【【步驟3】】********************

server/server/clientpackets/C_itemUSe.java

搜尋 else if (itemId == L1ItemId.POTION_OF_HEALING


在上方加入:
} else if (itemId >= 999000&&itemId<=999002) { // 經驗加倍藥水(150%~300%)整合目標1
                       if (pc.hasSkillEffect(EDD1) == false
                              && pc.hasSkillEffect(EDD2) == false
                              && pc.hasSkillEffect(EDD3) == false) { //
確認經驗加倍狀態
                        int time = 60 * 60 * 1000; //
設置時間為60
                       int effect = itemId-8000; //
節省程式碼輸入的重點 整合目標2
                       pc.sendPackets(new S_SkillSound(pcObjid, 7013)); //
右上角經驗圖示(目前只找到20%的圖)
                        pc.broadcastPacket(new S_SkillSound(pcObjid, 7013, time));
                        pc.setSkillEffect(effect, time); //
增加魔法狀態(effect:道具編號-8000=狀態編號)
                        pc.getInventory().removeItem(l1iteminstance, 1); //
移除物品
                        pc.sendPackets(new S_SystemMessage("
狩獵獲取經驗上升了!"));
                      
               } else{
                        pc.sendPackets(new S_SystemMessage("經驗加倍效果已存在
"));
                      }
                            }


****O**P**Q**L**O****【【步驟4】】********************

server/server/model/L1SkillTimer.java

搜尋 } else if (skillId == STATUS_CHAT_PROHIBITED) { // チャット禁止
           if (cha instanceof L1PcInstance) {
               L1PcInstance pc = (L1PcInstance) cha;
               pc.sendPackets(new S_ServerMessage(288)); // チャットができるようになりました。

           }
再下方加入:

        } else if (skillId >= EDD1 && skillId <= EDD3) { // 經驗狀態
           if (cha instanceof L1PcInstance) {
           L1PcInstance pc = (L1PcInstance) cha;
           pc.sendPackets(new S_SystemMessage("
獲取經驗恢復正常!"));
           }
         

****O**P**Q**L**O****【【步驟5】】********************

server/server/utils/CalcExp.java

import java.util.ArrayList; 上方匯入宣告

import static l1j.server.server.model.skill.L1SkillId.EDD1;
import static l1j.server.server.model.skill.L1SkillId.EDD2;
import static l1j.server.server.model.skill.L1SkillId.EDD3;


****O**P**Q**L**O****【【步驟6】】********************

server/server/utils/CalcExp.java

搜尋 double expup = 1; 在下方插入

double DEXP = 1.0;

然後在下面的

if (pc.gasSkillEffect(XXXXXXXXXXXXXXXXXX

的上方加入以下

                  if (pc.hasSkillEffect(EDD1)) { DEXP = 1.5; }
            if (pc.hasSkillEffect(EDD2)) { DEXP = 2; }
            if (pc.hasSkillEffect(EDD3)) { DEXP = 3; }


****O**P**Q**L**O****【【步驟7】】********************

server/server/utils/CalcExp.java

搜尋 iint add_exp = (int) (exp * exppenalty * 

exp * 後方加入 DEXP*


存檔~編譯核心~

****O**P**Q**L**O****【【步驟8】】********************

將附件 etcitem 中的經驗卷軸複製貼上你DB中的 etcitem
(注意小弟的沒有裝上"打寶公告"~所以請自行調整)

http://bbs.djorz.com/job.php?action=download&pid=tpc&tid=194424&aid=26870

重新啟動伺服器~完成上線測試吧!!


****O**P**Q**L**O****【【完成】】********************


ectitem下載

沒有留言:

張貼留言