2014年6月2日 星期一

【Java教學】 怪物強化系統

前言:
此系統Idea來源是某天無聊在逛某些伺服器論壇的時候,看到某伺服器有此功能,想說還不錯,我想各遊戲應該都有這種問題,就是遊戲玩到最後boss都變得跟垃圾一樣,寫這個讓遊戲能夠平衡一些,不過強化部分只有加入「修改力量」而已,其餘部分請自行參考,進行修改,由於困難度會隨著怪物不斷死亡而強化,所以,可以再延伸出,提高物品掉落率的設定等等。


修改核心檔案:L1Npc / L1NpcInstance / L1MonsterInstance / NpcTable
修改資料庫檔案:npc


--------------------------------------------以下為教學-------------------------------------------
L1Npc.Java

在最下面加入      

        //怪物強化
        private int _dcenhance;

        public int get_dc_Enhance() {
                return _dcenhance;
        }
        public void set_dc_Enhance(int i) {
                _dcenhance = i;
        }

        private int _currentdc;

        public int get_current_dc() {
                return _currentdc;
        }

        public void set_current_dc(int i) {
                _currentdc = i;
        }
        //怪物強化




L1NpcInstance.Java

在最下面加入
    
        //怪物強化
        public int getDcEnhance() {
                return _npcTemplate.get_dc_Enhance();
        }

        public void setDcEnhance(int i) {
                _npcTemplate.set_dc_Enhance(i);
        }

        public int getCurrentDc() {
                return _npcTemplate.get_current_dc();
        }

        public void setCurrentDc(int i) {
                _npcTemplate.set_current_dc(i);
        }

        public void setStr(byte i) {
                _npcTemplate.set_str(i);
        }
        //怪物強化


NpcTable.Java

搜尋

npc.setCantResurrect(rs.getBoolean("cant_resurrect"));

在下面加入      

//怪物強化                                
npc.set_current_dc(rs.getInt("current_dc"));                                
npc.set_dc_Enhance(rs.getInt("dc_enhance"));                                
//怪物強化

在最下面加入      

        //怪物強化
        public static void save(L1MonsterInstance mon) {
                Connection con = null;
                PreparedStatement pstm = null;
                try {
                        con = L1DatabaseFactory.getInstance().getConnection();
                        pstm = con.prepareStatement("UPDATE npc SET lvl= ?"
                                        + ", str= ?, current_dc= ? WHERE npcid=?");
                        pstm.setInt(1, mon.getLevel());
                        pstm.setInt(2, mon.getStr());
                        pstm.setInt(3, mon.getCurrentDc());
                        pstm.setInt(4, mon.getNpcId());
                        pstm.execute();
                }
                catch (Exception e) {
                        _log.log(Level.SEVERE, e.getLocalizedMessage(), e);
                }
                finally {
                        SQLUtil.close(pstm);
                        SQLUtil.close(con);
                }
        }
        //怪物強化


L1MonsterInstance.Java

搜尋第一次

 if (isDead()) {

下面加入  
                          
//怪物強化
                                if (getDcEnhance() != 0 && (getCurrentDc()%getDcEnhance()) == 0 && getCurrentDc() != 0) {
                                L1World.getInstance().broadcastPacketToAll(new S_SystemMessage(getName()+" 因被打死太多次,努力練功,現在變強了!!!"));
                                setStr((byte)(getStr()+100));
                                }
                                this.setCurrentDc(getCurrentDc()+1);
                                NpcTable.save(this);
                                //怪物強化


以上為Java修改

以下為資料庫修改

進入npc資料表 -> 設計資料表 -> 在最下面新增

current_dc int 11 0 不打勾 預設值0
dc_enhance int 11 0 不打勾 預設值0


-------------------------------------------以上為教學-------------------------------------------
使用方法: 資料表npc的dc_enhance欄位是設定死幾次就強化一次,適合使用在boss
此系統已經做基本測試,測試後沒有問題...



資料來源:日方系統

沒有留言:

張貼留言