2013年6月1日 星期六

【Java教學】添加GM指令 線上調整掉寶

將下列原碼新增加到\src\l1j\server\server\command\executor裡面

/*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2, or (at your option)
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*
請點此開啟連結或下載檔案
*/
package l1j.server.server.command.executor;

import java.util.StringTokenizer;
import java.util.logging.Logger;

import l1j.server.Config;
import l1j.server.server.model.L1World;
import l1j.server.server.model.Instance.L1ItemInstance;
import l1j.server.server.model.Instance.L1PcInstance;
import l1j.server.server.model.item.L1ItemId;
import l1j.server.server.serverpackets.S_SystemMessage;

public class L1ChangeDrop implements L1CommandExecutor {
   private static Logger _log = Logger.getLogger(L1ChangeDrop.class.getName());

   private L1ChangeDrop() {
   }

   public static L1CommandExecutor getInstance() {
       return new L1ChangeDrop();
   }
   
   //TODO 線上調整掉寶率 by 710410
   private Thread changeExpThread = null;

   //@Override
   public void execute(L1PcInstance pc, String cmdName, String arg) {
       try {
           StringTokenizer st = new StringTokenizer(arg);
           int index = Integer.parseInt(st.nextToken());

           String arg1 = null;
           String arg2 = null;

           if (index >= 0) {
               StringTokenizer token = new StringTokenizer(arg, " ");

               if (token.hasMoreTokens()) {
                   arg1 = token.nextToken().trim();
               }
               if (token.hasMoreTokens()) {
                   arg2 = token.nextToken().trim();
               }
           }

           if (arg1 != null && !arg1.equals("")) {
               final double rateDrop = Double.parseDouble(arg1); 
               final double oldrateDrop = Config.RATE_DROP_ITEMS; 
               if (arg2 != null && !arg2.equals("")) { 
                   final int interval = Integer.parseInt(arg2) * 60 * 1000;
                   if (this.changeExpThread == null) {
                       this.changeExpThread = new Thread() { 
                           public void run() {
                               Config.RATE_DROP_ITEMS = rateDrop; 
                               try { 
                                   sleep(interval); 
                               } catch (Exception e) {
                                   System.out.println(e); 
                               }
                               Config.RATE_DROP_ITEMS = oldrateDrop;
                           } 
                       };
                       this.changeExpThread.start(); 
                   } else {
                       this.changeExpThread.interrupt();

                       this.changeExpThread = new Thread() {
                           public void run() { 
                               Config.RATE_DROP_ITEMS = rateDrop; 
                               try { 
                                   sleep(interval); 
                               } catch (Exception e) {
                                   System.out.println(e); 
                               } 
                               Config.RATE_DROP_ITEMS = oldrateDrop;
                           } 
                       };
                       this.changeExpThread.start(); 
                   } 
               } else {
                   Config.RATE_DROP_ITEMS = rateDrop;
               } 
               try { 
                   Thread.sleep(400);
               } catch (Exception e) {
                   System.out.println(e);
               } 
               L1World.getInstance().broadcastServerMessage( 
                       "系統公告" + ": " + 
                       "掉寶率已調整為" + "【" + Config.RATE_DROP_ITEMS + " 】" + 
                       "倍" + "。");
               pc.sendPackets(new S_SystemMessage( 
                       "掉寶率已調整為" + "【" + Config.RATE_DROP_ITEMS + " 】" + 
                       "倍" + "。"));
           } else { 
               pc.sendPackets(new S_SystemMessage( 
                       "目前的掉寶率為" + "【" + Config.RATE_DROP_ITEMS + " 】" + 
                       "倍" + "。"));
           }
       } catch (Exception e) {
           pc.sendPackets(new S_SystemMessage("請輸入『.drop 倍率』。"));
       }
   }
}


記得DB內要新增掉保指令!!就大功告成囉!!趕快上線測試看看吧!!^^

沒有留言:

張貼留言