【楓之谷私服教學】如何寫出每支帳號限領一次獎勵腳本




【相關網址】
 AICL楓之谷私服論壇技術討論區:點此

【前言】
 本來在思考,是否該教學要放置論壇,並限制回文或金幣購買機制,但覺得
 該教學實際難度不高,也屬於月經文問題,因此直接提供給大家製作教學,
 該教學會使用SRC、JS、SQL,等於把私服該玩的都玩一遍,很值得服主們
 練習。

【教學開始】
 請打開IDE,並開啟自家伺服器源碼(SRC)。
 隨後,請開啟"MapleCharacter.java",新增以下兩種方法。

 此為獲取PrizeLog訊息

  
  public int getPrizeLog(String bossid) {
        Connection con1 = DatabaseConnection.getConnection();
        try {
            int ret_count = 0;
            PreparedStatement ps;
            ps = con1.prepareStatement("select count(*) from prizelog where accid = ? and bossid = ?");
            ps.setInt(1, getClient().getAccID());
            ps.setString(2, bossid);
            ResultSet rs = ps.executeQuery();
            if (rs.next()) {
                ret_count = rs.getInt(1);
            } else {
                ret_count = -1;
            }
            rs.close();
            ps.close();
            return ret_count;
        } catch (Exception Wx) {
            return -1;
        }
    }


 此為寫入PrizeLog訊息


        public void setPrizeLog(String bossid) {
        Connection con1 = DatabaseConnection.getConnection();
        try {
            PreparedStatement ps;
            ps = con1.prepareStatement("insert into prizelog (accid, bossid) values (?,?)");
            ps.setInt(1, getClient().getAccID());
            ps.setString(2, bossid);
            ps.executeUpdate();
            ps.close();
        } catch (Exception Wx) {
        }
    }


新增後,會如下圖相同



 接著,打開SQL資料庫,新增資料表,設置如下圖相同,
 prizelog 欄位請記得勾選"自動增遞"選項,名稱取為"prizelog "。



 請找任意NPC,並新增腳本,腳本內容如下。
 該腳本是很簡單的兌換腳本,只是判斷式換成判斷帳號是否領取過。


var status = 0;
//判定文字
var log = "123";
//獎品
var i = 4031579;

function start() { 
    status = -1; 
    action(1, 0, 0); 

function action(mode, type, selection) { 
    if (mode == -1) { 
        cm.dispose(); 
    } else { 
        if (mode == 0 && status == 0) { 
            cm.dispose(); 
            return; 
        } 
        if (mode == 1) 
            status++; 
        else 
            status--; 
        if (status == 0) { 
            cm.sendSimple (
                                 "#e#r[帳號獎勵]#n#k只要來找我就可以拿到獎勵一份喔!#e" +
                 "#k\r\n#L1#我要領取帳號獎勵!!!" );
        } else if (selection == 1) {
           //判定是否領取過
                        if (cm.getPlayer().getPrizeLog(log) >= 1) {
                                cm.sendOk("您的帳號已經領取過了喔!");       
                                cm.dispose();                          
                        }
           //判定等級
                        else if(cm.getPlayer().getLevel() < 10){
                                cm.sendOk("您的等級不足10");
                                cm.dispose();                  
                        }else{
                                cm.getPlayer().setPrizeLog(log);
                                cm.gainItem(i, 1);                  
                                cm.sendOk("恭喜您獲得了帳號獎勵 #r#z"+ i +"");
                        }
                        cm.dispose();
                }
    }
}


 完成上述步驟後即可完成,基本上如要研究,請研究SRC步驟是如何寫出
 方法的,並不會難懂,與資料庫對照著看,很容易明白。

 如有不懂請至論壇討論區發問。

【後記】
 本來卡納也沒這功能,發現有人發問,於是覺得不如卡納也裝一下吧??
 造福自己也造福大家,以下是實際功能畫面截圖。







 還可以做出很多變化,例如讓換的條件更多,或是增加更多兌換選項,
 但這篇主要為教學用途,其他而外的寫法是靠個人功力,還請各位服主
 多多培養實力。

沒有留言:

張貼留言