微信扫一扫 分享朋友圈

已有 2021 人浏览分享

[服務器教學] 如何寫出每支帳號限領一次獎勵腳本

[複製鏈接]

站長

Rank: 12Rank: 12Rank: 12

1767

威望

2954

金錢

106

A幣
主題
1315
帖子
2441
精華
3
綜合社群主題發文量
262
電玩社群主題發文量
1
娛樂社群主題發文量
4
技術社群主題發文量
26
閱讀權限
200
註冊時間
2013-1-28

我是傳奇贊助感謝勳章精華作者勳章

  • TA的每日心情

    2023-10-27 16:33
  • 簽到天數: 381 天

    連續簽到: 1 天

    [LV.9]以壇為家II

    TWAICL 發表於  2019-7-25 15:04:36 | 顯示全部樓層 | 閱讀模式




    【相關網址】
     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步驟是如何寫出
     方法的,並不會難懂,與資料庫對照著看,很容易明白。

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

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







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

    區域版主

    Rank: 10Rank: 10Rank: 10

    921

    威望

    196

    金錢

    176

    A幣
    主題
    150
    帖子
    309
    精華
    0
    綜合社群主題發文量
    135
    電玩社群主題發文量
    10
    娛樂社群主題發文量
    6
    技術社群主題發文量
    11
    閱讀權限
    100
    註冊時間
    2018-1-6

    社群建設勳章傑出貢獻勳章

  • TA的每日心情

    2021-6-17 14:24
  • 簽到天數: 322 天

    連續簽到: 0 天

    [LV.8]以壇為家I

    利金顫 發表於 2019-7-25 16:50:05 | 顯示全部樓層
    很棒,感謝版大教學
    您需要登錄後才可以回帖 登錄 | 註冊會員

    本版積分規則

    2441

    發文

    2954

    金錢

    106

    A幣

    ----------榮譽勳章----------

    我是傳奇 贊助感謝勳章 精華作者勳章

    熱門推薦
    圖文推薦
    • 聯繫我們

    小黑屋|AICL社群娛樂集團

    GMT+8, 2024-5-4 04:41 , 網路刷新 0.090816 秒 .

    歡迎來到 AICL網路社群

    版權AICL社群所有 2011-2021.

    Total:123 Today:213 Online:322