Greasy Fork is available in English.

无剑Mud辅修

无剑Mud辅修,由在线版移植而来,順便《略改》

Este script no debería instalarse directamente. Es una biblioteca que utilizan otros scripts mediante la meta-directiva de inclusión // @require https://update.greasyfork.org/scripts/483658/1354126/%E6%97%A0%E5%89%91Mud%E8%BE%85%E4%BF%AE.js

// ==UserScript==
// @name              无剑Mud辅修
// @description       无剑Mud辅修,由在线版移植而来,順便《略改》
// @namespace         http://tampermonkey.net/
// @version           1.1.71
// @author            燕飞,东方鸣,懒人
// @match             http://*.xxmud.cn/*
// @match             http://*.guaji321.cn/*
// @match             http://lib10.cn/*
// @match             http://orchin.cn/*
// @match             http://*.yytou.cn/*
// @match             http://*.yytou.com/*
// @match             http://118.178.84.7/*
// @grant             unsafeWindow
// @grant             GM_info
// @grant             GM_setClipboard
// @grant             GM_xmlhttpRequest
// @connect           update.greasyfork.org
// @run-at            document-end
// @compatible        Chrome >= 80
// @compatible        Edge >= 80
// @compatible        Firefox PC >= 74
// @compatible        Opera >= 67
// @compatible        Safari MacOS >= 13.1
// @compatible        Firefox Android >= 79
// @compatible        Opera Android >= 57
// @compatible        Safari iOS >= 13.4
// @compatible        WebView Android >= 80
// ==/UserScript==

"use strict";

if (document.domain == "orchin.cn") {
  var params = new URLSearchParams(location.href.split("?")[1]);
  var host = params.get("ws_host");
  params["delete"]("ws_host");
  location.replace("http://" + host + "?" + params.toString());
}
function _slicedToArray(arr, i) {
  return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();
}
function _nonIterableRest() {
  throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
}
function _iterableToArrayLimit(arr, i) {
  var _i = null == arr ? null : "undefined" != typeof Symbol && arr[Symbol.iterator] || arr["@@iterator"];
  if (null != _i) {
    var _s,
      _e,
      _x,
      _r,
      _arr = [],
      _n = !0,
      _d = !1;
    try {
      if (_x = (_i = _i.call(arr)).next, 0 === i) {
        if (Object(_i) !== _i) return;
        _n = !1;
      } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0);
    } catch (err) {
      _d = !0, _e = err;
    } finally {
      try {
        if (!_n && null != _i["return"] && (_r = _i["return"](), Object(_r) !== _r)) return;
      } finally {
        if (_d) throw _e;
      }
    }
    return _arr;
  }
}
function _arrayWithHoles(arr) {
  if (Array.isArray(arr)) return arr;
}
function _typeof(obj) {
  "@babel/helpers - typeof";

  return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) {
    return typeof obj;
  } : function (obj) {
    return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
  }, _typeof(obj);
}
function _toConsumableArray(arr) {
  return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();
}
function _nonIterableSpread() {
  throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
}
function _iterableToArray(iter) {
  if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter);
}
function _arrayWithoutHoles(arr) {
  if (Array.isArray(arr)) return _arrayLikeToArray(arr);
}
function _createForOfIteratorHelper(o, allowArrayLike) {
  var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"];
  if (!it) {
    if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") {
      if (it) o = it;
      var i = 0;
      var F = function F() { };
      return {
        s: F,
        n: function n() {
          if (i >= o.length) return {
            done: true
          };
          return {
            done: false,
            value: o[i++]
          };
        },
        e: function e(_e2) {
          throw _e2;
        },
        f: F
      };
    }
    throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
  }
  var normalCompletion = true,
    didErr = false,
    err;
  return {
    s: function s() {
      it = it.call(o);
    },
    n: function n() {
      var step = it.next();
      normalCompletion = step.done;
      return step;
    },
    e: function e(_e3) {
      didErr = true;
      err = _e3;
    },
    f: function f() {
      try {
        if (!normalCompletion && it["return"] != null) it["return"]();
      } finally {
        if (didErr) throw err;
      }
    }
  };
}
function _unsupportedIterableToArray(o, minLen) {
  if (!o) return;
  if (typeof o === "string") return _arrayLikeToArray(o, minLen);
  var n = Object.prototype.toString.call(o).slice(8, -1);
  if (n === "Object" && o.constructor) n = o.constructor.name;
  if (n === "Map" || n === "Set") return Array.from(o);
  if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);
}
function _arrayLikeToArray(arr, len) {
  if (len == null || len > arr.length) len = arr.length;
  for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];
  return arr2;
}

// 取消屏蔽
var KEYWORD_PATTERNS = g_gmain.KEYWORD_PATTERNS;
g_gmain.KEYWORD_PATTERNS = [];
function __(c, w) {
  return c;
}
unsafeWindow.init = function () {
  PLU.YFUI = YFUI;
  PLU.UTIL = UTIL;
  GM_xmlhttpRequest({
    method: "GET",
    url: "https://update.greasyfork.org/scripts/486271/%E6%97%A0%E5%89%91Mud%E8%BE%85%E4%BF%AE%E6%95%B0%E6%8D%AE.js?t=".concat(Date.now()),
    nocache: true,
    onload: function onload(res) {
      eval(res.responseText);
      PLU.YFD = unsafeWindow.YFD;
      var waitGameSI = setInterval(function () {
        if (unsafeWindow.g_obj_map && g_obj_map.get("msg_attrs")) {
          clearInterval(waitGameSI);
          PLU.init();
        }
      }, 500);
    }
  });
};
// 本地化
function _(c, t) {
  return navigator.language == "zh-CN" || !t ? c : t;
}

//=================================================================================
// UTIL模块
//=================================================================================
unsafeWindow.PLU = {
  //version: GM_info.script.version + "(24.02.02)",
  accId: null,
  nickName: null,
  battleData: null,
  MPFZ: {},
  TODO: [],
  //待办列表
  STO: {},
  SIT: {},
  ONOFF: {},
  STATUS: {
    inBattle: 0,
    isBusy: 0
  },
  CACHE: {
    autoDZ: 1,
    autoHYC: 1,
    auto9H: 1,
    autoLX: 1,
    autoBF: 1,
    autoB6: 1,
    autoB5F: 1,
    autoDY: 0,
    autoCaicha: 0,
    develop: 0,
    puzzleTimeOut: 60
  },
  FLK: null,
  TMP: {
    autotask: false,
    iBatchAskModel: 0
  },
  logHtml: "",
  signInMaps: null,
  //================================================================================================
  init: function init() {
    this.accId = UTIL.getAccId();
    this.developerMode =
      //专属
      UTIL.getMem("CACHE") && JSON.parse(UTIL.getMem("CACHE")).developer || ["3909055(1)","3091591(8)","6740379(1)","6768697(1)","4521232(1)", "4020484(1)", "4512928(1)", "2904280(8)", "8432667(1)", "8432616(1)"].includes(this.accId);
    this.PersonalMode =
      //个人
      UTIL.getMem("CACHE") && JSON.parse(UTIL.getMem("CACHE")).developer || ["3070884(1)", "4512928(1)", "6768697(1)", "3028780(1)", "7525192(1)", "6740379(1)", "3028233(1)", "6740205(1)", "2904280(8)", "3091591(8)", "3613445(1)", "3093761(8)", "3091552(8)", "3091552(8)", "3107986(8)", "4020484(1)", " "].includes(this.accId);
    if (this.developerMode) {
      this.GM_info = GM_info;
      UTIL.addSysListener("developer", function (b, type, subtype, msg) {
        if (type && type == "attrs_changed") return;
        if (type && type == "channel" && subtype == "rumor") return;
        console.log(b);
      });
    }
    this.initMenu();
    this.initTickTime();
    this.initStorage();
    this.initHistory();
    this.initSocketMsgEvent();
    this.initVersion();
    addEventListener("keydown", function (key) {
      if (key.altKey || key.ctrlKey || key.metaKey || key.shiftKey) return; // 不考虑组合键
      if (document.activeElement && document.activeElement.tagName == "INPUT") return;
      switch (key.keyCode) {
        case 81:
          // q
          clickButton("nw");
          break;
        case 87:
          // w
          clickButton("n");
          break;
        case 69:
          // e
          clickButton("ne");
          break;
        case 65:
          // a
          clickButton("w");
          break;
        case 83:
          // s
          clickButton("s");
          break;
        case 68:
          // d
          clickButton("e");
          break;
        case 90:
          // z
          clickButton("sw");
          break;
        case 67:
          // c
          clickButton("se");
          break;
        case 66:
          // B
          clickButton("items");
          break;
        case 75:
          // k
          clickButton("skills");
          break;
        case 86:
          // v
          clickButton("vip");
          break;
      }
    });
  },
  //================================================================================================
  initVersion() {
    this.nickName = g_obj_map.get("msg_attrs").get("name");
    YFUI.writeToOut(
      `<span style='color:yellow;'>
            +===========================+
                 脚本名称:无剑Mud辅修    版本:${this.version}
                 脚本开发:燕飞,东方鸣,懒人
                 当前角色:${this.nickName}${this.developerMode ? "(已开启开发者模式)" : ""}${unsafeWindow.customMode ? "(已开启自定义模式)" : ""}
                 角色 ID:${this.accId}
         +===========================+</span>`
    );
    var playerName = this.removeColorCode(this.nickName); //窗口标题
    document.title = playerName;
    YFUI.writeToOut("<span style='color:#FFF;'>监听设定:</span>");
    var autosets = "";
    if (PLU.getCache("autoDZ") == 1) autosets += "连续打坐, ";
    if (PLU.getCache("autoHYC") == 1) autosets += "连续睡床, ";
    if (PLU.getCache("auto9H") == 1) autosets += "持续九花, ";
    if (PLU.getCache("autoDY") == 1) autosets += "持续钓鱼, ";
    if (PLU.getCache("autoCaicha") == 1) autosets += "持续采茶, ";
    if (PLU.getCache("autoLX") == 1) autosets += "连续练习, ";
    if (PLU.getCache("autoBF") == 1) autosets += "加入帮四, ";
    if (PLU.getCache("autoB6") == 1) autosets += "加入帮六, ";
    if (PLU.getCache("autoB5F") == 1) autosets += "帮五跟杀, ";
    //if (PLU.getCache("listenPuzzle") == 1) autosets += "暴击谜题, ";
    YFUI.writeToOut("<span style='color:#CFF;'>" + autosets + "</span>");
    if (PLU.getCache("autoTP") == 1) {
      YFUI.writeToOut("<span style='color:#CFF;'>自动突破: <span style='color:#FF9;'>" + PLU.getCache("autoTP_keys") + "</span></span>");
    }
    if (PLU.getCache("listenQL") == 1) {
      YFUI.writeToOut("<span style='color:#CFF;'>自动青龙: <span style='color:#FF9;'>" + PLU.getCache("listenQL_keys") + "</span></span>");
    }
    if (PLU.getCache("listenKFQL") == 1) {
      YFUI.writeToOut("<span style='color:#CFF;'>跨服青龙: <span style='color:#FF9;'>" + PLU.getCache("listenKFQL_keys") + "</span></span>");
    }
    if (PLU.getCache("listenTF") == 1) {
      YFUI.writeToOut("<span style='color:#CFF;'>自动逃犯: <span style='color:#FF9;'>" + PLU.getCache("listenTF_keys") + "</span></span>");
    }
    if (!g_gmain.is_fighting) {
      PLU.getSkillsList(function (allSkills, tupoSkills) {
        var _g_obj_map$get;
        if (tupoSkills.length > 0) {
          YFUI.writeToOut("<span style='color:white;'>突破中技能:</span>");
          var topos = "";
          tupoSkills.forEach(function (sk, i) {
            topos += "<span style='color:#CCF;min-width:100px;display:inline-block;'>" + (i + 1) + " : " + sk.name + "</span>";
          });
          YFUI.writeToOut("<span style='color:#CCF;'> " + topos + "</span>");
          YFUI.writeToOut("<span style='color:yellow;'>+------------------------------+</span>");
        } else {
          YFUI.writeToOut("<span style='color:white;'>突破中技能: 无</span>");
          YFUI.writeToOut("<span style='color:yellow;'>+------------------------------+</span>");
        }
        var lxSkill = ((_g_obj_map$get = g_obj_map.get("msg_attrs")) === null || _g_obj_map$get === void 0 ? void 0 : _g_obj_map$get.get("practice_skill")) || 0;
        if (lxSkill) {
          var sk = allSkills.find(function (s) {
            return s.key == lxSkill;
          });
          if (sk) {
            YFUI.writeToOut("<span style='color:white;'>练习中技能: <span style='color:#F0F;'>" + sk.name + "</span> (" + sk.level + ")</span>");
            YFUI.writeToOut("<span style='color:yellow;'>+------------------------------+</span>");
          }
        } else {
          YFUI.writeToOut("<span style='color:white;'>练习中技能: 无</span>");
          YFUI.writeToOut("<span style='color:yellow;'>+------------------------------+</span>");
        }
      });
    }
  },
  removeColorCode: function removeColorCode(name) {
    //去除角色名的彩色代码
    return name.replace(/\[[0-9;]*[mG]/g, "");
  },
  //================================================================================================
  initSocketMsgEvent: function initSocketMsgEvent() {
    if (!gSocketMsg) {
      console.log("%c%s", "background:#C33;color:#FFF;", " ERROR:Not found gSocketMsg!! ");
      return;
    }
    gSocketMsg.YFBackupDispatchMsg = gSocketMsg.dispatchMessage;
    gSocketMsg.dispatchMessage = function (b) {
      gSocketMsg.YFBackupDispatchMsg(b);
      var type = b.get("type");
      var subtype = b.get("subtype");
      var msg = b.get("msg");
      UTIL.sysDispatchMsg(b, type, subtype, msg);
    };
    gSocketMsg.change_skill_button = function (m, is_del) {
      var m_vs_info = g_obj_map.get("msg_vs_info"),
        m2 = g_obj_map.get("msg_attrs");
      if (!m_vs_info || !m2) return 0;
      if (is_del) {
        g_obj_map.remove("skill_button" + is_del);
        return 1;
      }
      var id = this.get_combat_user_id();
      if (id != m.get("uid")) return 0;
      var pos = parseInt(m.get("pos"));
      if (pos <= 0 || pos > this._skill_btn_cnt) return 0;
      g_obj_map.put("skill_button" + pos, m);
      this.refresh_skill_button();
    };
    PLU.initListeners();
    if (unsafeWindow.clickButton) {
      var proxy_clickButton = unsafeWindow.clickButton;
      unsafeWindow.clickButton = function () {
        var args = arguments;
        if (PLU.developerMode) {
          console.log(args);
        }
        // 指令录制
        if (PLU.TMP.cmds && !g_gmain.is_fighting && ["attrs", "none", "jh", "fb", "prev_combat", "home_prompt", "jhselect", "fbselect", "send_chat"].indexOf(args[0]) < 0 && args[0].indexOf("look_npc ") && !args[0].match(/^(jh|fb)go /) && args[0].indexOf("go_chat")) {
          if (args[0].indexOf("go southeast.") == 0 || args[0].indexOf("go southwest.") == 0 || args[0].indexOf("go northeast.") == 0 || args[0].indexOf("go northwest.") == 0) PLU.TMP.cmds.push(args[0][3] + args[0][8]); else if (args[0].indexOf("go east.") == 0 || args[0].indexOf("go west.") == 0 || args[0].indexOf("go south.") == 0 || args[0].indexOf("go north.") == 0) PLU.TMP.cmds.push(args[0][3]); else PLU.TMP.cmds.push(args[0]);
        }
        if (args[0].indexOf("ask ") == 0) {
          UTIL.addSysListener("ask", function (b, type, subtype, msg) {
            if (type == "jh" && subtype == "info" || UTIL.inHome()) {
              UTIL.delSysListener("ask");
            }
            if (type != "main_msg" || msg.indexOf("嗯,相遇即是缘,你是练武奇才,我送点东西给你吧。") == -1) return;
            proxy_clickButton(args[0]);
            UTIL.delSysListener("ask");
          });
          setTimeout(function () {
            UTIL.delSysListener("ask");
          }, 500);
          proxy_clickButton(args[0]);
        }
        // 解除聊天屏蔽,对非脚本玩家可用
        else if (PLU.developerMode && args[0].indexOf("chat ") == 0) {
          var msg = args[0].substring(5);
          var _iterator = _createForOfIteratorHelper(KEYWORD_PATTERNS),
            _step;
          try {
            for (_iterator.s(); !(_step = _iterator.n()).done;) {
              var PATTERN = _step.value;
              msg = msg.replace(PATTERN, function (s) {
                return Array.from(s).join("\f");
              });
            }
          } catch (err) {
            _iterator.e(err);
          } finally {
            _iterator.f();
          }
          proxy_clickButton("chat " + msg);
        }
        // 解除四海商店限制
        else if ((args[0].indexOf("reclaim recl ") == 0 || args[0].indexOf("reclaim buy ") == 0) && !args[0].match(" page ")) {
          var cmd = args[0].match(/^reclaim (recl|buy) (\d+) (go )?(.+)$/);
          if (cmd[1]) {
            var n = Number(cmd[2]);
            switch (cmd[1]) {
              case "recl":
                for (; n > 50000; n -= 50000) {
                  proxy_clickButton("reclaim recl 50000 go ".concat(cmd[4]), 1);
                }
                proxy_clickButton("reclaim recl ".concat(n, " go ").concat(cmd[4]), 1);
                break;
              case "buy":
                for (; n > 50000; n -= 50000) {
                  proxy_clickButton("reclaim buy 50000 go ".concat(cmd[4]), 1);
                }
                proxy_clickButton("reclaim buy ".concat(n, " go ").concat(cmd[4]), 1);
                break;
            }
          }
        } else {
          proxy_clickButton.apply(void 0, _toConsumableArray(args));
        }
        if (PLU.TMP.leaderTeamSync) {
          PLU.commandTeam(args);
        }
      };
    }
  },
  //================================================================================================
  initMenu: function initMenu() {
    YFUI.init();
    YFUI.addBtn({
      id: "ro",
      text: "▲隐",
      style: {
        width: "30px",
        opacity: ".6",
        background: "#333",
        color: "#FFF",
        border: "1px solid #CCC",
        borderRadius: "8px 0 0 0"
      },
      onclick: function onclick($btn) {
        $("#pluginMenus").toggle();
        $("#pluginMenus").is(":hidden") ? $btn.text("▼显") : $btn.text("▲隐");
        $(".menu").hide();
      }
    });
    YFUI.addBtnGroup({
      id: "pluginMenus"
    });
    //Paths
    var PathsArray = [];
    PathsArray.push({
      id: "bt_home",
      groupId: "pluginMenus",
      text: "首页",
      style: {
        background: "#FFFF99",
        padding: "5px 2px",
        width: "40px"
      },
      onclick: function onclick(e) {
        $(".menu").hide();
        PLU.STATUS.isBusy = false;
        clickButton("home", 1);
      }
    });
    var citysArray = PLU.YFD.cityList.map(function (c, i) {
      return {
        id: "bt_jh_" + (i + 1),
        text: c,
        extend: "jh " + (i + 1)
      };
    });
    PathsArray.push({
      id: "bt_citys",
      text: "地图",
      style: {
        background: "#FFE",
        width: "40px",
        padding: "5px 2px"
      },
      menuStyle: {
        width: "240px",
        "margin-top": "-25px"
      },
      children: citysArray
    });
    var qlArray = PLU.YFD.qlList.map(function (p, i) {
      return {
        id: "bt_ql_" + (i + 1),
        text: p.n,
        extend: {
          func: function func() {
            return PLU.execActions(PLU.minPath(PLU.queryRoomPath(), p.v));
          }
        },
        style: {
          "background-color": "#CFF"
        }
      };
    });
    if (PLU.developerMode) qlArray.push({
      id: "bt_ql_xunluo",
      text: "巡逻",
      extend: {
        func: PLU.qlxl
      },
      style: {
        "background-color": "#CFF"
      }
    });
    PathsArray.push({
      id: "bt_qls",
      text: "青龙",
      style: {
        background: "#DFF",
        width: "40px",
        padding: "5px 2px"
      },
      menuStyle: {
        width: "160px",
        "margin-top": "-50px"
      },
      children: qlArray
    });
    var mjArray = PLU.YFD.mjList.map(function (p, i) {
      return {
        id: "bt_mj_" + (i + 1),
        text: p.n,
        extend: p.v,
        style: {
          "background-color": "#EFD"
        }
      };
    });
    PathsArray.push({
      id: "bt_mjs",
      text: "秘境",
      style: {
        background: "#EFD",
        width: "40px",
        padding: "5px 2px"
      },
      menuStyle: {
        width: "160px",
        "margin-top": "-75px"
      },
      children: mjArray
    });
    PLU.autoChushi = function () {
      var family = g_obj_map.get("msg_attrs") && g_obj_map.get("msg_attrs").get("family_name");
      var master = PLU.YFD.masterList.slice(0, 32).find(function (e) {
        return e["in"] == family;
      });
      if (master == undefined) return;
      var npc = PLU.queryNpc("^" + master.npc.slice(-1)[0] + "$", true);
      if (!npc.length) return;
      var way = npc[0].way;
      //PLU.ONOFF["bt_kg_teamSync"] = 0;
      PLU.execActions(way, function () {
        var npc = UTIL.findRoomNpcReg("^" + master.npc.slice(-1)[0] + "$");
        if (!npc) return;
        var key = npc.key;
        PLU.execActions("apprentice " + key, function () {
          PLU.autoFight({
            targetKey: key,
            fightKind: "fight",
            autoSkill: "multi",
            onEnd: function onEnd() {
              PLU.execActions("chushi " + key, function () {
                if (family == "铁雪山庄") PLU.execActions("chushi resort_master");
              });
            },
            onFail: function onFail() {
              PLU.autoFight({
                targetKey: key,
                fightKind: "chushi",
                autoSkill: "multi",
                onEnd: function onEnd() {
                  PLU.execActions("chushi " + key);
                }
              });
            }
          });
        });
      });
    };
    var masterArray = PLU.YFD.masterList.map(function (p, i) {
      if (i == 32) return {
        id: "bt_master_33",
        text: p.n,
        extend: p.v,
        style: {
          "background-color": "#FBB",
          width: "88px",
          padding: "5px 2px"
        }
      };
      var colr = i < 10 ? "#FCF" : i < 20 ? "#CFF" : "#FFC";
      return {
        id: "bt_master_" + (i + 1),
        text: p.n,
        children: function () {
          if (!PLU.developerMode) return [];
          return [{
            id: "bt_master_" + (i + 1) + "_0",
            text: "拜入" + p.n,
            extend: {
              func: function func() {
                return send_prompt(" 是否确定要加入" + p["in"] + "\n\n\n\n", "home apprentice " + p["in"], "确定", 0);
              }
            },
            style: {
              "background-color": colr
            }
          }];
        }().concat(p.npc.map(function (name, j) {
          return {
            id: "bt_master_" + (i + 1) + "_" + (j + 1),
            text: name.split("@").slice(-1)[0],
            extend: PLU.queryNpc(name + "道", true)[0].way,
            style: {
              "background-color": colr
            }
          };
        })),
        style: {
          "background-color": colr,
          width: "40px",
          padding: "5px 2px"
        },
        menuStyle: function () {
          if (i & 1) return {
            right: "101px",
            width: "160px"
          };
          return {
            width: "160px"
          };
        }()
      };
    });
    PathsArray.push({
      id: "bt_masters",
      text: "师门",
      style: {
        background: "#FCF",
        width: "40px",
        padding: "5px 2px"
      },
      menuStyle: {
        width: "96px",
        "margin-top": "-125px"
      },
      children: masterArray
    });
    var dailyArray = PLU.YFD.dailyList.map(function (p, i) {
      var colr = i < 2 ? "#DDFFDD" : i < 8 ? "#FFC" : i < 22 ? "#FCF" : "#CFF";
      return {
        id: "bt_daily_" + (i + 1),
        text: p.n,
        extend: p.v,
        style: {
          "background-color": colr
        }
      };
    });
    PathsArray.push({
      id: "bt_daily",
      text: "日常",
      style: {
        background: "#FED",
        width: "40px",
        padding: "5px 2px"
      },
      menuStyle: {
        width: "160px",
        "margin-top": "-125px"
      },
      children: dailyArray
    });
    var usualArray = PLU.YFD.usualList.map(function (p, i) {
      var sty = p.style || {
        "background-color": "#CDF"
      };
      return {
        id: "bt_usual_" + (i + 1),
        text: p.n,
        extend: p.v,
        style: sty
      };
    });
    PathsArray.push({
      id: "bt_usual",
      text: "常用",
      style: {
        background: "#CDF",
        width: "40px",
        padding: "5px 2px"
      },
      menuStyle: {
        width: "160px",
        "margin-top": "-210px"
      },
      children: usualArray
    });
    var cts = [],
      libCity = PLU.YFD.mapsLib.Npc.filter(function (e) {
        if (!cts.includes(e.jh)) {
          cts.push(e.jh);
          return true;
        }
        return false;
      }).map(function (e) {
        return e.jh;
      });
    var queryJHMenu = libCity.map(function (c, i) {
      return {
        id: "bt_queryjh_" + (i + 1),
        text: c,
        style: {
          width: "50px",
          whiteSpace: "nowrap",
          overflow: "hidden",
          fontSize: "12px"
        },
        extend: {
          func: PLU.queryJHMenu,
          param: c
        }
      };
    });
    var queryArray = [{
      id: "bt_queryJHList",
      text: "章节",
      children: queryJHMenu,
      style: {
        width: "40px",
        "background-color": "#9ED"
      },
      menuStyle: {
        width: "180px",
        "margin-top": "-180px"
      }
    }, {
      id: "bt_queryHistory",
      text: "历史",
      style: {
        width: "40px",
        "background-color": "#FDD"
      },
      extend: {
        func: PLU.toQueryHistory
      }
    }, {
      id: "bt_queryNpc",
      text: "寻人",
      style: {
        width: "40px",
        "background-color": "#FDD"
      },
      extend: {
        func: PLU.toQueryNpc
      }
    }, {
      id: "bt_pathNpc",
      text: "扫图",
      style: {
        width: "40px",
        "background-color": "#FE9"
      },
      extend: {
        func: PLU.toPathNpc
      }
    }, ];
    PathsArray.push({
      id: "bt_query",
      text: "查找",
      style: {
        background: "#9ED",
        width: "40px",
        padding: "5px 2px"
      },
      menuStyle: {
        "margin-top": "-30px"
      },
      children: queryArray
    });
    YFUI.addMenu({
      id: "m_paths",
      groupId: "pluginMenus",
      text: "导航",
      style: {
        background: "#CCFFFF",
        width: "40px",
        padding: "5px 2px"
      },
      multiCol: true,
      menuStyle: {
        width: "80px",
        "margin-top": "-25px"
      },
      children: PathsArray,
      onclick: function onclick($btn, $box) {
        if ($btn.$extend) {
          $(".menu").hide();
          if ($btn.$extend.func) {
            if ($btn.$extend.param) $btn.$extend.func($btn, $btn.$extend.param); else $btn.$extend.func($btn);
            return;
          }
          PLU.execActions($btn.$extend, function () {
            if ($btn.text() == "去哈日") PLU.goHaRi();
            if ($btn.text() == "杭界山") PLU.goHJS();
          });
          // clickButton($btn.$extend)
        }
      }
    });
    //auto do something
    var somethingArray = [];
    somethingArray.push({
      id: "bt_autoTeach",
      text: "传授技能",
      extend: {
        func: PLU.toAutoTeach
      },
      style: {
        background: "#BFF"
      }
    });
    somethingArray.push({
      id: "bt_autoUpgrade",
      text: "升级游侠",
      extend: {
        func: PLU.toAutoUpgrade
      },
      style: {
        background: "#BFF"
      }
    });
    somethingArray.push({
      id: "hr_null2",
      text: "",
      style: {
        display: "none"
      },
      boxStyle: {
        display: "block",
        height: "5px"
      }
    });
    somethingArray.push({
      id: "bt_autoLearn",
      text: "一键学习",
      extend: {
        func: PLU.toAutoLearn
      },
      style: {
        background: "#FBF"
      }
    });
    somethingArray.push({
      id: "bt_autoChuaiMo",
      text: "自动揣摩",
      extend: {
        func: PLU.toAutoChuaiMo
      },
      style: {
        background: "#FBF"
      }
    });
    somethingArray.push({
      id: "hr_null2",
      text: "",
      style: {
        display: "none"
      },
      boxStyle: {
        display: "block",
        height: "5px"
      }
    });
    somethingArray.push({
      id: "bt_loopScript",
      text: "循环执行",
      extend: {
        func: PLU.toLoopScript
      },
      style: {
        background: "#FBB"
      }
    });
    somethingArray.push({
      id: "bt_loopKillByN",
      text: "计数击杀",
      extend: {
        func: PLU.toLoopKillByN
      },
      style: {
        background: "#FBB"
      }
    });
    somethingArray.push({
      id: "bt_waitCDKill",
      text: "倒计时杀",
      extend: {
        func: PLU.toWaitCDKill
      },
      style: {
        background: "#FBB"
      }
    });
    somethingArray.push({
      id: "bt_loopKillName",
      text: "名字连杀",
      extend: {
        func: PLU.toLoopKillName
      },
      style: {
        background: "#FBB"
      }
    });
    somethingArray.push({
      id: "bt_loopClick",
      text: "自动点击",
      extend: {
        func: PLU.toLoopClick
      },
      style: {
        background: "#FBB"
      }
    });
    somethingArray.push({
      id: "bt_loopSlowClick",
      text: "慢速点击",
      extend: {
        func: PLU.toLoopSlowClick
      },
      style: {
        background: "#FBB"
      }
    });
    somethingArray.push({
      id: "bt_autoLianXi",
      text: "自动练习",
      extend: {
        func: PLU.toAutoLianXi
      },
      style: {
        background: "#FBF"
      }
    });
    somethingArray.push({
      id: "bt_record",
      text: "指令录制",
      extend: {
        func: PLU.toRecord
      },
      style: {
        background: "#FBB"
      }
    });
    somethingArray.push({
      id: "hr_null2",
      text: "",
      style: {
        display: "none"
      },
      boxStyle: {
        display: "block",
        height: "5px"
      }
    });
    somethingArray.push({
      id: "bt_sellLaji",
      text: "批量出售",
      extend: {
        func: PLU.toSellLaji
      },
      style: {
        background: "#DEF"
      }
    });
    somethingArray.push({
      id: "bt_splitItem",
      text: "批量分解",
      extend: {
        func: PLU.toSplitItem
      },
      style: {
        background: "#DEF"
      }
    });
    somethingArray.push({
      id: "bt_putStore",
      text: "批量入库",
      extend: {
        func: PLU.toPutStore
      },
      style: {
        background: "#DEF"
      }
    });
    somethingArray.push({
      id: "bt_autoUse",
      text: "批量使用",
      extend: {
        func: PLU.toAutoUse
      },
      style: {
        background: "#DEF"
      }
    });
    somethingArray.push({
      id: "bt_combineGem",
      text: "合成宝石",
      extend: {
        func: PLU.openCombineGem
      },
      style: {
        background: "#DEF"
      }
    });
    somethingArray.push({
      id: "bt_autoMasterGem",
      text: "一键合天神",
      extend: {
        func: PLU.autoMasterGem
      },
      style: {
        background: "#DEF"
      }
    });
    somethingArray.push({
      id: "hr_null2",
      text: "",
      style: {
        display: "none"
      },
      boxStyle: {
        display: "block",
        height: "5px"
      }
    });
    somethingArray.push({
      id: "bt_autoXTL1",
      text: "刷琅嬛玉洞",
      extend: {
        func: PLU.autoXTL1
      },
      style: {
        background: "#FED"
      }
    });
    somethingArray.push({
      id: "bt_autoXTL2",
      text: "刷山崖",
      extend: {
        func: PLU.autoXTL2
      },
      style: {
        background: "#FED"
      }
    });
    somethingArray.push({//小龙人
        id: "bt_kg_finddragon",
        text: "找龙人",
        extend: {
          func: PLU.toFindDragon
        },
        style: {
          background: "#EBC"
        }
    });
    somethingArray.push({
      id: "bt_autoERG",
      text: "刷恶人谷",
      extend: {
        func: PLU.autoERG
      },
      style: {
        background: "#FED"
      }
    });

    if (PLU.developerMode) somethingArray.push({
      id: "bt_searchBangQS",
      text: "扫暴击",
      extend: {
        func: PLU.scanPuzzle
      },
      style: {
        background: "#BBF"
      }
    });

    somethingArray.push({
      id: "hr_null2",
      text: "",
      style: {
        display: "none"
      },
      boxStyle: {
        display: "block",
        height: "5px"
      }
    });
    somethingArray.push({
      id: "bt_autoGetKey",
      text: "自动捡物品",
      extend: {
        func: PLU.toAutoGetKey
      },
      style: {
        background: "#EBC"
      }
    });
    somethingArray.push({
      id: "bt_autoMoke",
      text: "一键摹刻",
      extend: {
        func: PLU.toAutoMoke
      },
      style: {
        background: "#EFD"
      }
    });
    somethingArray.push({
      id: "bt_autoKillZYY",
      text: "刷祝玉妍",
      extend: {
        func: PLU.toAutoKillZYY
      },
      style: {
        background: "#FBF"
      }
    });
    somethingArray.push({
      id: "bt_autoJHYL",
      text: "九花原料",
      extend: {
        func: PLU.buyJHYL
      },
      style: {
        background: "#DEF"
      }
    });
    somethingArray.push({
      id: "bt_loopReadBase",
      text: "读技能书",
      extend: {
        func: PLU.toLoopReadBase
      },
      style: {
        background: "#FBB"
      }
    });
    somethingArray.push({
      id: "bt_checkYouxia",
      text: "技能检查",
      extend: {
        func: PLU.checkYouxia
      },
      style: {
        background: "#DEF"
      }
    });
    somethingArray.push({
      id: "bt_searchFamilyQS",
      text: "搜师门任务",
      extend: {
        func: PLU.toSearchFamilyQS
      },
      style: {
        background: "#BBF"
      }
    });
    somethingArray.push({
      id: "bt_searchBangQS",
      text: "搜帮派任务",
      extend: {
        func: PLU.toSearchBangQS
      },
      style: {
        background: "#BBF"
      }
    });
    somethingArray.push({
      id: "bt_autoFB11",
      text: "自动本11",
      extend: {
        func: PLU.autoFB11
      },
      style: {
        background: "#FC9"
      }
    });
    somethingArray.push({
      id: "bt_autoFB10",
      text: "自动本10",
      extend: {
        func: PLU.autoFB10
      },
      style: {
        background: "#FED"
      }
    });
    somethingArray.push({
      id: "bt_autoaskTianmd",
      text: "讨天命",
      extend: {
        func: PLU.askTianmd
      },
      style: {
        background: "#55ffff"
      }
    });
    somethingArray.push({
      id: "bt_autoyoumhy",
      text: "幽冥后院",
      extend: {
        func: PLU.autoyoumhy
      },
      style: {
        background: "#FED"
      }
    });
    YFUI.addMenu({
      id: "m_autoDoSomething",
      groupId: "pluginMenus",
      text: "自动",
      style: {
        width: "40px"
      },
      multiCol: true,
      menuStyle: {
        width: "160px",
        "margin-top": "-61px"
      },
      children: somethingArray,
      onclick: function onclick($btn, $box) {
        if ($btn.$extend) {
          $(".menu").hide();
          $btn.$extend.func($btn);
        }
      }
    });
    //listens
    var listensArray = [];
    listensArray.push({
      id: "bt_autoBF",
      text: "自动帮四",
      extend: {
        key: "autoBF"
      },
      style: {
        background: "#EDC"
      }
    });
    listensArray.push({
      id: "bt_autoB6",
      text: "自动帮六",
      extend: {
        key: "autoB6"
      },
      style: {
        background: "#ECD"
      }
    });
    listensArray.push({
      id: "bt_autoB5F",
      text: "帮五跟杀",
      extend: {
        key: "autoB5F"
      },
      style: {
        background: "#CEF"
      }
    });
    listensArray.push({
      id: "bt_autoTP",
      text: "持续突破",
      extend: {
        key: "autoTP"
      },
      style: {
        background: "#BEF"
      }
    });
    listensArray.push({
      id: "bt_autoHYC",
      text: "持续睡床",
      extend: {
        key: "autoHYC"
      },
      style: {
        background: "#CEC"
      }
    });
    listensArray.push({
      id: "bt_autoDZ",
      text: "持续打坐",
      extend: {
        key: "autoDZ"
      },
      style: {
        background: "#CEC"
      }
    });
    listensArray.push({
      id: "bt_autoLX",
      text: "持续练习",
      extend: {
        key: "autoLX"
      },
      style: {
        background: "#CEC"
      }
    });
    listensArray.push({
      id: "bt_autoConnect",
      text: "自动重连",
      extend: {
        key: "autoConnect"
      },
      style: {
        background: "#FED"
      }
    });
    listensArray.push({
      id: "bt_autoDY",
      text: "持续钓鱼",
      extend: {
        key: "autoDY"
      },
      style: {
        background: "#BEF"
      }
    });
    
    listensArray.push({
      id: "bt_auto9H",
      text: "持续九花",
      extend: {
        key: "auto9H"
      },
      style: {
        background: "#BEF"
      }
    });
    listensArray.push({
      id: "bt_autoCaicha",
      text: "持续采茶",
      extend: {
        key: "autoCaicha"
      },
      style: {
        background: "#BEF"
      }
    });
    listensArray.push({
      id: "bt_autoQuitTeam",
      text: "进塔离队",
      extend: {
        key: "autoQuitTeam"
      },
      style: {
        background: "#EEF"
      }
    });
    listensArray.push({
      id: "bt_autoSignIn",
      text: "定时签到",
      extend: {
        key: "autoSignIn"
      },
      style: {
        background: "#BEF"
      }
    });
    
    listensArray.push({
      id: "hr_listen",
      text: "",
      style: {
        width: "160px",
        opacity: 0
      },
      boxStyle: {
        "font-size": 0
      }
    });
    listensArray.push({
      id: "bt_listenQL",
      text: "本服青龙",
      extend: {
        key: "listenQL"
      }
    });
    listensArray.push({
      id: "bt_listenKFQL",
      text: "广场青龙",
      extend: {
        key: "listenKFQL"
      }
    });
    listensArray.push({
      id: "bt_listenYX",
      text: "游侠",
      extend: {
        key: "listenYX"
      }
    });
    listensArray.push({
      id: "bt_listenTF",
      text: "夜魔逃犯",
      extend: {
        key: "listenTF"
      }
    });
    /*
    listensArray.push({
      id: "bt_listenPuzzle",
      text: "暴击谜题",
      extend: {
        key: "listenPuzzle"
      }
    });
    */
    listensArray.push({
      id: "bt_showMPFZ",
      text: "纷争显示",
      extend: {
        func: PLU.showMPFZ
      },
      style: {
        background: "#EEEEFF"
      }
    });
    listensArray.push({
      id: "bt_listenChat",
      text: "闲聊",
      extend: {
        key: "listenChat"
      }
    });
    YFUI.addMenu({
      id: "m_listens",
      groupId: "pluginMenus",
      text: "监听",
      style: {
        background: "#DDFFDD",
        width: "40px"
      },
      multiCol: true,
      menuStyle: {
        width: "160px",
        "margin-top": "-25px"
      },
      children: listensArray,
      onclick: function onclick($btn, $box) {
        if ($btn.$extend) PLU.setListen($btn, $btn.$extend.key);
      }
    });
    //fightset
    var fightSetsArray = [];
    fightSetsArray.push({
      id: "bt_enableSkills",
      text: "技 能 组",
      style: {
        background: "#FBE"
      },
      menuStyle: {
        "margin-top": "-25px"
      },
      children: [{
        id: "bt_enableSkill1",
        text: "技能组1",
        extend: {
          key: "enable1"
        }
      }, {
        id: "bt_enableSkill2",
        text: "技能组2",
        extend: {
          key: "enable2"
        }
      }, {
        id: "bt_enableSkill3",
        text: "技能组3",
        extend: {
          key: "enable3"
        }
      }]
    });
    fightSetsArray.push({
      id: "bt_wearEquip",
      text: "装备切换",
      style: {
        background: "#FEB"
      },
      children: [{
        id: "bt_wearEquip1",
        text: "装备组1",
        extend: {
          key: "equip1"
        },
        canSet: true
      }, {
        id: "bt_wearEquip2",
        text: "装备组2",
        extend: {
          key: "equip2"
        },
        canSet: true
      }, {
        id: "bt_zbjianshen",
        text: "剑神套",
        extend: {
          key: "zbjianshentao"
        },
        style: {
          background: "#FEB"
        },
      }, {
        id: "bt_zbchuidiao",
        text: "垂钓套",
        extend: {
          key: "zbchuidiaotao"
        },
        style: {
          background: "#FBE"
        },
      }, {
        id: "bt_zbxianzhe",
        text: "贤者套",
        extend: {
          key: "zbxianzhetao"
        },
        style: {
          background: "#CCF"
        },
      }]
    });
    fightSetsArray.push({
      id: "bt_followKill",
      text: "跟杀设置",
      extend: {
        key: "followKill"
      },
      style: {
        background: "#FCC"
      }
    });
    fightSetsArray.push({
      id: "bt_autoCure",
      text: "血蓝设置",
      extend: {
        key: "autoCure"
      },
      style: {
        background: "#CCF"
      }
    });
    fightSetsArray.push({
      id: "bt_autoPerform",
      text: "技能设置",
      extend: {
        key: "autoPerform"
      },
      style: {
        background: "#CFC"
      }
    });
    YFUI.addMenu({
      id: "m_fightsets",
      groupId: "pluginMenus",
      text: "战斗",
      style: {
        background: "#FFDDDD",
        width: "40px"
      },
      //multiCol: true,
      menuStyle: {
        width: "80px",
        "margin-top": "-50px"
      },
      children: fightSetsArray,
      onclick: function onclick($btn, $box, BtnMode) {
        if ($btn.$extend) {
          if ($btn.$extend.key && PLU.getCache($btn.$extend.key) == 0) $(".menu").hide();
          if ($btn.$extend.key.match("enable")) return PLU.setSkillGroup($btn.$extend.key.substr(-1));
          if ($btn.$extend.key.match("equip")) {
            var equipKey = "equip_" + $btn.$extend.key.substr(-1) + "_keys";
            var equipsStr = PLU.getCache(equipKey);
            $(".menu").hide();
            if (equipsStr && BtnMode != "setting") {
              return PLU.wearEquip(equipsStr);
            }
            return PLU.setWearEquip($btn.$extend.key.substr(-1));
          }
          if ($btn.$extend.key == "zbjianshentao") return PLU.zbjianshen($btn, $btn.$extend.key);
          if ($btn.$extend.key == "zbchuidiaotao") return PLU.zbchuidiao($btn, $btn.$extend.key);
          if ($btn.$extend.key == "zbxianzhetao") return PLU.zbxianzhe($btn, $btn.$extend.key);
          if ($btn.$extend.key == "followKill") return PLU.setFightSets($btn, $btn.$extend.key);
          if ($btn.$extend.key == "autoCure") return PLU.setAutoCure($btn, $btn.$extend.key);
          if ($btn.$extend.key == "autoPerform") return PLU.setAutoPerform($btn, $btn.$extend.key);
          if ($btn.$extend.key == "autoPerform") return PLU.setAutoPerform($btn, $btn.$extend.key);
        }
      }
    });
    // puzzle
    var puzzleArray = [];
    if (PLU.developerMode) puzzleArray.push({
      id: "bt_puzzle_key",
      text: "通告设置",
      extend: {
        key: ""
      }
    });
    puzzleArray.push({
      id: "bt_puzzle_Key",
      text: "密码设置",
      extend: {
        func: PLU.puzzleKey
      }
    });
    if (PLU.developerMode) puzzleArray.push({
      id: "bt_puzzle_key",
      text: "进度设置",
      extend: {
        func: PLU.key
      }
    });
    puzzleArray.push({
      id: "bt_puzzle_key",
      text: "超时设置",
      extend: {
        func: PLU.puzzleTimeOut
      }
    });
    /*
    if (PLU.developerMode) YFUI.addMenu({
      id: "m_puzzle",
      groupId: "pluginMenus",
      text: "谜题",
      style: {
        background: "#CCC",
        width: "40px"
      },
      menuStyle: {
        "margin-top": "-75px"
      },
      children: puzzleArray,
      onclick: function onclick($btn, $box) {
        if ($btn.$extend) {
          $(".menu").hide();
          $btn.$extend.func($btn);
        }
      }
    });
    */
    //Sign
    var signArray = [];
    signArray.push({
      id: "bt_answerQues",
      text: "自动答题",
      extend: {
        func: PLU.answerQues
      },
      style: {
        background: "#DEF"
      },
    });
    signArray.push({
      id: "bt_autoAskQixia",
      text: "自动问奇侠",
      extend: {
        func: PLU.toAutoAskQixia
      }
    });
    signArray.push({
      id: "bt_autoVisitQixia",
      text: "亲近奇侠",
      style: {
        background: "#CFC"
      },
      extend: {
        func: PLU.toAutoVisitQixia
      }
    });
    signArray.push({
      id: "hr_dlus",
      text: "",
      style: {
        width: "240px",
        opacity: 0
      }
    });
    signArray.push({
      id: "bt_ricrw",
      text: "日常周常",
      extend: {
        key: "ricrw"
      },
      style: {
        background: "#FBE"
      }
    });
    signArray.push({
      id: "bt_sign",
      text: "一键签到",
      extend: {
        key: "signIn"
      },
      style: {
        background: "#CCFFFF"
      }
    });
    YFUI.addMenu({
      id: "m_signs",
      groupId: "pluginMenus",
      text: "签到",
      style: {
        background: "#DDFFFF",
        width: "40px"
      },
      menuStyle: {
        "margin-top": "-92px"
      },
      children: signArray,
      onclick: function onclick($btn, $box) {
        if ($btn.$extend) {
          if ($btn.$extend.key == "signIn") {
            $(".menu").hide();
            return PLU.toSignIn();
          } else if ($btn.$extend.key == "autoSignIn") {
            return PLU.setListen($btn, $btn.$extend.key);
          } else if ($btn.$extend.key == "ricrw") {
            $(".menu").hide();
            return PLU.toricrw();
          } else if ($btn.$extend.key == "autoricrw") {
            return PLU.setListen($btn, $btn.$extend.key);
          } else {
            $(".menu").hide();
            $btn.$extend.func($btn);
          }
        }
      }
    });
    //sys
    var sysArray = [];
    sysArray.push({
      id: "bt_openTeam",
      text: "开队伍",
      children: [{
        id: "bt_openTeam1",
        text: "加入队伍",
        extend: {
            func: PLU.asJirudw
        },
        style: {
            background: "#DEF"
        },
      }, {
        id: "bt_openTeam2",
        text: "退出队伍",
        extend: "team quit",
      }, {
        id: "bt_openTeam3",
        text: "重开队伍",
        extend: "team create",
        style: {
          background: "#00ff00"
        },
      }
    ]
    });
    sysArray.push({
      id: "bt_openFudi",
      text: "开府邸",
      extend: "fudi"
    });
    sysArray.push({
      id: "bt_openShop",
      text: "开商城",
      extend: "shop"
    });
    sysArray.push({
      id: "bt_openJFShop",
      text: "积分商城",
      extend: "shop xf_shop"
    });
    sysArray.push({
      id: "bt_open4HShop",
      text: "四海商店",
      children: [{
        id: "bt_open4HShop1",
        text: "回收",
        extend: "reclaim recl"
      }, {
        id: "bt_open4HShop2",
        text: "兑换",
        extend: "reclaim buy"
    }, {
        id: "bt_open4HShop3",
        text: "宝箱兑换",
        extend: "reclaim change"//event_1_4500617
      }
    ]
    });
    sysArray.push({
      id: "bt_clanShop",
      text: "帮派商店",
      extend: "clan;clan_shop;"
    });
    sysArray.push({
      id: "bt_clanShop",
      text: "浣花剑阵",
      extend: "hhjz;"
    });
    sysArray.push({
        id: "bt_huanpf",
        text: "换皮肤",
        extend: {
          func: PLU.huanpf
        },
        style: {
          background: "#DEF"
        }
      });
    /*
    sysArray.push({
        id: "bt_cuiquShop",
        text: "熔炼",
        extend: "event_1_15136162;",
        style: { background: "#DEF"},
      });
    sysArray.push({
        id: "bt_cuiquShop",
        text: "萃取",
        extend: "event_1_33471583;",
        style: {
            background: "#DEF"
        },
    });
        */
    sysArray.push({
      id: "hr_sys",
      text: "",
      style: {
        width: "160px",
        opacity: 0
      },
      boxStyle: {
        "font-size": 0
      }
    });
    sysArray.push({
      id: "bt_intervene",
      text: "杀隐藏怪",
      extend: {
        func: PLU.intervene
      }
    });
    sysArray.push({
      id: "bt_openQixia",
      text: "奇侠列表",
      extend: "open jhqx"
    });
    sysArray.push({
        id: "bt_openzbei",
        text: "装备兑换",
        style: {
          background: "#DEF"
        },
        children: [{
          id: "bt_openzbei1",
          text: "购买斩龙",
          extend: { func: PLU.buyzl10 },
        }, {
          id: "bt_openzbei2",
          text: "兑换胤天",
          extend: { func: PLU.dhyt11 },
        }, {
          id: "bt_openzbei3",
          text: "兑换皇天",
          extend: { func: PLU.dhht12 },
      }, {
          id: "bt_openzbei8",
          text: "兑换冰材",
          extend: { func: PLU.dhbingy },
        }, {
          id: "bt_openzbei4",
          text: "打造冰月",
          extend: { func: PLU.dzbingy },
        }, {
          id: "bt_openzbei5",
          text: "兑换剑神",
          extend: { func: PLU.dhjians },
          style: {  background: "#FEB" },
        }, {
          id: "bt_openzbei6",
          text: "兑换垂钓",
          extend: { func: PLU.dhchuid },
          style: {  background: "#FBE" },
        }, {
          id: "bt_openzbei7",
          text: "兑换贤者",
          extend: { func: PLU.dhzxianz },
          style: {  background: "#CCF" },
        }
       ]
      });
    
    sysArray.push({
      id: "bt_task",
      text: "谜题列表",
      extend: "task_quest"
    });
    sysArray.push({
        id: "bt_openfscail",
        text: "取飞升材料",
        style: { background: "#DEF"},
        children: [{
          id: "bt_openfscail1",
          text: "金身材料",
          extend: "items get_store /obj/book/neigongxinfamiji;items get_store /obj/shop/jiuzhuanshendan;items get_store /obj/book/jiuyinxuanbingjiancanye;items get_store /obj/shop/wulingchangye;items get_store /obj/shop/wulingchangye;items get_store /obj/baoshi/huangbaoshi8;items get_store /obj/med/jinengtianshu;items info obj_lzjsj;"
        }, {
          id: "bt_openfscail2",
          text: "龙爪材料",
          extend: "items get_store /obj/book/pujigedoumiji;items get_store /obj/shop/jiuzhuanshendan;items get_store /obj/book/tianshanfeijiancanye;items get_store /obj/shop/wulingchangye;items get_store /obj/baoshi/lanbaoshi8;items get_store /obj/med/jinengtianshu;items info obj_zlzs;"
        }, {
          id: "bt_openfscail3",
          text: "湿剑材料",
          extend: "items get_store /obj/book/jibenjianfamiji;items get_store /obj/shop/jiuzhuanshendan;items get_store /obj/book/baifashenjiancanye;items get_store /obj/shop/wulingchangye;items get_store /obj/baoshi/zishuijing8;items get_store /obj/med/jinengtianshu;items info obj_shjj;"
        }, {
            id: "bt_openfscail4",
            text: "强身材料",
            extend: "items get_store /obj/book/neigongxinfamiji;items get_store /obj/shop/jiuzhuanshendan;items get_store /obj/book/xiaoyunlongtengjiancanye;items get_store /obj/shop/wulingchangye;items get_store /obj/baoshi/hongbaoshi8;items get_store /obj/med/jinengtianshu;items info obj_lsqss;"
        }, {
            id: "bt_openfscail5",
            text: "万剑材料",
            extend: "items get_store /obj/yushi/dixisui1;items get_store /obj/yushi/donghaibi1;items get_store /obj/yushi/jiutianluo1;items get_store /obj/yushi/juzimo1;items get_store /obj/yushi/kunlunyin1;items get_store /obj/yushi/longtingpo1;items get_store /obj/yushi/xuanyuanlie1;items get_store /obj/baoshi/hongbaoshi8;items get_store /obj/baoshi/lvbaoshi8;items get_store /obj/baoshi/huangbaoshi8;items get_store /obj/shop/wjgz_miji;items info obj_wjgz_miji;"
        }, {
            id: "bt_openfscail6",
            text: "如来材料",
            extend: "items get_store /obj/yushi/dixisui1;items get_store /obj/yushi/donghaibi1;items get_store /obj/yushi/jiutianluo1;items get_store /obj/yushi/juzimo1;items get_store /obj/yushi/kunlunyin1;items get_store /obj/yushi/longtingpo1;items get_store /obj/yushi/xuanyuanlie1;items get_store /obj/baoshi/hongbaoshi8;items get_store /obj/baoshi/lvbaoshi8;items get_store /obj/baoshi/huangbaoshi8;items get_store /obj/shop/rlzj_miji;items info obj_rlzj_miji;"
        }, {
            id: "bt_openfscail7",
            text: "仙步材料",
            extend: "items get_store /obj/yushi/dixisui1;items get_store /obj/yushi/donghaibi1;items get_store /obj/yushi/jiutianluo1;items get_store /obj/yushi/juzimo1;items get_store /obj/yushi/kunlunyin1;items get_store /obj/yushi/longtingpo1;items get_store /obj/yushi/xuanyuanlie1;items get_store /obj/baoshi/hongbaoshi8;items get_store /obj/baoshi/lvbaoshi8;items get_store /obj/baoshi/huangbaoshi8;items get_store /obj/shop/zydsb_miji;items info obj_zydsb_miji;"
        }
      ]
      });
      sysArray.push({
        id: "bt_cleartask",
        text: "清谜题",
        extend: "auto_tasks cancel"
      });
    
    sysArray.push({
      id: "hr_sys",
      text: "",
      style: {
        width: "160px",
        opacity: 0
      },
      boxStyle: {
        "font-size": 0
      }
    });
    
    sysArray.push({
      id: "set_profile",
      text: "个人设置",
      extend: { key: "profileSetting" },
      style: { background: "#EEEEFF" },
    });
    sysArray.push({
      id: "bt_log",
      text: "消息日志",
      extend: {
        func: PLU.showLog
      },
      style: {
        background: "#99CC00"
      }
    });
    sysArray.push({
      id: "bt_upset",
      text: "备份设置",
      extend: {
        func: PLU.backupSetting
      },
      style: {
        background: "#FFAAAA"
      }
    });
    sysArray.push({
      id: "bt_dlset",
      text: "载入设置",
      extend: {
        func: PLU.loadSetting
      },
      style: {
        background: "#FFCC00"
      }
    });
    YFUI.addMenu({
      id: "m_sys",
      groupId: "pluginMenus",
      text: "工具",
      multiCol: true,
      style: { background: "#FFFFDD", width: "40px" },
      menuStyle: { width: "160px", "margin-top": "-117px" },
      children: sysArray,
      onclick($btn, $box) {
        if ($btn.$extend) {
          if ($btn.$extend.key == "profileSetting") {
            $(".menu").hide();
            return PLU.profileSetting();
          } else if ($btn.$extend && $btn.$extend.func) {
            $(".menu").hide();
            $btn.$extend.func($btn);
          } else if ($btn.$extend) {
            $(".menu").hide();
            PLU.execActions($btn.$extend);
          }
        }
      },
    });
    //个人增加
    var SgerenArray = [];
    SgerenArray.push({
      id: "bt_autoQuyijiy",
      text: "取一级玉",
      extend: {
        func: PLU.Quyijiy
      }
    });
    SgerenArray.push({
      id: "bt_autoQuTianss",
      text: "取天神",
      extend: {
        func: PLU.QuTianss
      },
      style: {
        background: "#ff5555"
      }
    });
    SgerenArray.push({
      id: "bt_autoDianLiCai",
      text: "文庙超投",
      extend: {
        func: PLU.DianLiCai
      },
      style: {
        background: "#FBE"
      }
    });
    SgerenArray.push({
      id: "bt_autoQuLiCai",
      text: "取理财",
      extend: {
        func: PLU.QuLiCai
      },
      style: {
        background: "#bbbb00"
      }
    });
    SgerenArray.push({
      id: "bt_autoXuelian",
      text: "买雪莲",
      extend: {
        func: PLU.buyXueLian
      },
      style: {
        background: "#DEF"
      }
    });
    SgerenArray.push({
      id: "bt_autoeatHuoG",
      text: "吃火锅",
      extend: {
        func: PLU.eatHuoG
      },
      style: {
        background: "#55ffff"
      }
    });
    SgerenArray.push({
      id: "bt_autobuping",
      text: "吃补品",
      extend: {
        func: PLU.eatbuping
      },
      style: {
        background: "#DEF"
      }
    });
    SgerenArray.push({
      id: "bt_autoLLBao",
      text: "礼包",
      extend: {
        func: PLU.LLBao
      },
      style: {
        background: "#DEF"
      }
    });
   
    //SgerenArray.push({ id: "bt_autoaskTianmd", text: "讨天命", extend: { func: PLU.askTianmd }, style: { background: "#55ffff" } });
    //SgerenArray.push({ id: "bt_autoChuangLou", text: "闯楼", extend: { func: PLU.autoChuangLou }, style: { background: "#DEF" } });
    SgerenArray.push({
      id: "bt_autoLongsjs",
      text: "龙神祭祀",
      extend: {
        func: PLU.Longsjs
      },
      style: {
        background: "#55ffff"
      }
    });
    SgerenArray.push({
      id: "bt_autoYandijd",
      text: "炎帝祭典",
      extend: {
        func: PLU.Yandijd
      },
      style: {
        background: "#55ffff"
      }
    });
    SgerenArray.push({
      id: "bt_autoeatSans",
      text: "用三生",
      extend: {
        func: PLU.eatSans
      },
      style: {
        background: "#55ffff"
      }
    });
    SgerenArray.push({
      id: "bt_autocaomeibs",
      text: "草莓冰沙",
      extend: {
        func: PLU.caomeibs
      },
      style: {
        background: "#FBE"
      }
    });
    
    SgerenArray.push({
      id: "bt_autochoujiang",
      text: "去抽奖",
      extend: {
        func: PLU.choujiang
      },
      style: {
        background: "#FFFF55"
      },
    });
    SgerenArray.push({
      id: "bt_autogivehuf",
      text: "交虎符",
      extend: {
        func: PLU.givehuf
      },
      style: {
        background: "#E19100"
      },
    });
    SgerenArray.push({
      id: "bt_antoxuetyz",
      text: "雪亭驿站",
      extend: {
        func: PLU.xuetyz
      },
      style: {
        background: "#DDFFDD"
      },
    });
    SgerenArray.push({
        id: "bt_antoLongsyj",
        text: "龙神遗迹",
        extend: {
          func: PLU.Longsyj
        },
        style: {
          background: "#DDFFDD"
        },
      });
      SgerenArray.push({
        id: "bt_autokillXLR",
        text: "刷小龙人",
        extend: {
          func: PLU.killXLR
        },
        style: {
          background: "#FFFF99"
        },
      });
      SgerenArray.push({
        id: "bt_autoningjlp",
        text: "凝聚力魄",
        extend: {
          func: PLU.ningjlp
        },
        style: {
          background: "#FBB"
        },
      });
      SgerenArray.push({
        id: "bt_autosaoxlr",
        text: "打小龙人",
        extend: {
          func: PLU.saoxlr
        },
        //style: {background: "#FFFF99"},
      });
      
      SgerenArray.push({
        id: "bt_autonstbj",
        text: "石头暴击",
        extend: {
          func: PLU.saodbjst
        },
        //style: {background: "#FBB"},
      });
      /*
      SgerenArray.push({
        id: "bt_autoqiangss",
        text: "学强身术",
        extend: {
          func: PLU.LZqiangss
        },
        style: {
          background: "#DEF"
        },
      });  */
    //if (PLU.PersonalMode) {
    YFUI.addMenu({
      id: "m_Sgeren",
      groupId: "pluginMenus",
      text: "个人",
      multiCol: true,
      style: {
        background: "#FBE",
        width: "40px"
      },
      menuStyle: {
        width: "160px",
        "margin-top": "-117px"
      },
      children: SgerenArray,
      onclick: function onclick($btn, $box) {
        if ($btn.$extend && $btn.$extend.func) {
          $(".menu").hide();
          $btn.$extend.func($btn);
        } else if ($btn.$extend) {
          $(".menu").hide();
          PLU.execActions($btn.$extend);
        }
      }
    });
    //}
    //================================================================================
    //  活动
    //================================================================================
    // let activeArray=[]
    // activeArray.push({id:"bt_goShop1", text:"去小二", extend:"jh 1;"})
    // activeArray.push({id:"bt_buyItem1", text:"买四样", extend:"#21 buy_npc_item go 0;#21 buy_npc_item go 1;#21 buy_npc_item go 2;#21 buy_npc_item go 3;"})
    // activeArray.push({id:"bt_goShop2", text:"去掌柜", extend:"jh 5;n;n;n;w;", style:{background:"#FDD"}})
    // activeArray.push({id:"bt_buyItem2", text:"买红粉", extend:"#6 buy_npc_item go 0;", style:{background:"#FDD"}})
    // activeArray.push({id:"bt_goShop3", text:"去小贩", extend:"jh 2;n;n;n;n;e;", style:{background:"#DEF"}})
    // activeArray.push({id:"bt_buyItem3", text:"买黄粉", extend:"#6 event_1_17045611 go 0;", style:{background:"#DEF"}})
    // activeArray.push({id:"bt_goShop4", text:"去峨眉", extend:"jh 8;w;nw;n;n;n;n;e;e;n;n;e;kill?看山弟子;n;n;n;n;w;", style:{background:"#EFE"}})
    // activeArray.push({id:"bt_buyItem4", text:"买蓝粉", extend:"#6 event_1_39153184 go 0;", style:{background:"#EFE"}})
    // activeArray.push({id:"bt_goAll", text:"一键买材料", extend:"jh 1;#21 buy_npc_item go 0;#21 buy_npc_item go 1;#21 buy_npc_item go 2;#21 buy_npc_item go 3;jh 5;n;n;n;w;#6 buy_npc_item go 0;jh 2;n;n;n;n;e;#6 event_1_17045611 go 0;jh 8;w;nw;n;n;n;n;e;e;n;n;e;kill?看山弟子;n;n;n;n;w;#6 event_1_39153184 go 0;", style:{background:"#9F9"}})
    // activeArray.push({id:"bt_goShoot", text:"去放烟花", extend:"jh 2;n;n;n;", style:{background:"#FD9"}})
    // // activeArray.push({id:"bt_n", text:"", style:{opacity:0}})
    // // activeArray.push({id:"hr_sys", text:"", style:{width:"160px",opacity:0}, boxStyle:{"font-size":0}})
    // activeArray.push({id:"bt_goShoot1", text:"一键璀璨", extend:"#5 event_1_99582507;#15 event_1_48376442;", style:{background:"#F9D"}})
    // activeArray.push({id:"bt_goShoot2", text:"一键四款", extend:"#5 event_1_74166959;#5 event_1_10053782;#5 event_1_25918230;#5 event_1_48376442;", style:{background:"#D9F"}})
    // YFUI.addMenu({
    //     id: "m_active",
    //     groupId:"pluginMenus",
    //     text: "元宵",
    //     multiCol: true,
    //     style:{"background":"#FFFF55","width":"40px","margin-top":"25px"},
    //     menuStyle: {width: "160px","margin-top":"-22px"},
    //     children: activeArray,
    //     onclick($btn,$box){
    //         if($btn.$extend && $btn.$extend.func){
    //             //$(".menu").hide()
    //             $btn.$extend.func($btn)
    //         }else if($btn.$extend){
    //             //$(".menu").hide()
    // 			PLU.execActions($btn.$extend,()=>{
    // 				YFUI.writeToOut("<span style='color:#FFF;'>========== OK ==========</span>")
    // 			})
    // 		}
    //     }
    // })
    //========实验田===================================================
    if (PLU.developerMode) {
      var flagArray = [];
      flagArray.push({
        id: "bt_npcDataUpdate",
        text: "数据更新",
        extend: {
          func: PLU.npcDataUpdate
        }
      });
      flagArray.push({
        id: "bt_pathNpc",
        text: "全图谜题",
        extend: {
          func: PLU.toQueryMiTi
        },
        style: {
          "background-color": "#00bbbb"
        },
      });
      flagArray.push({
        id: "bt_puzzle_key",
        text: "通告设置",
        extend: {
          key: ""
        }
      });
      flagArray.push({
        id: "bt_puzzle_Key",
        text: "密码设置",
        extend: {
          func: PLU.puzzleKey
        }
      });
      flagArray.push({
        id: "bt_puzzle_key",
        text: "进度设置",
        extend: {
        func: PLU.key
        }
      });
      flagArray.push({
        id: "bt_puzzle_key",
      text: "超时设置",
      extend: {
        func: PLU.puzzleTimeOut
        }
      });


      YFUI.addMenu({
        id: "m_flag",
        groupId: "pluginMenus",
        text: "专属",
        multiCol: true,
        style: {
          background: "#FBB",
          width: "40px"
        },
        menuStyle: {
          width: "160px",
          "margin-top": "-117px"
        },
        children: flagArray,
        onclick: function onclick($btn, $box) {
          if ($btn.$extend && $btn.$extend.func) {
            $(".menu").hide();
            $btn.$extend.func($btn);
          } else if ($btn.$extend) {
            $(".menu").hide();
            PLU.execActions($btn.$extend);
          }
        }
      });
    }
    //================================================================================
    //================================================================================
    var gh = parseInt($("#page").height() * $("#page").height() * 0.00025);
    YFUI.addBtn({
      id: "bt_col_null",
      groupId: "pluginMenus",
      text: "",
      style: {
        background: "transparent",
        height: gh + "px",
        width: "0px",
        visibility: "hidden"
      },
      boxStyle: {
        "pointer-events": "none"
      }
    });
    //战斗按钮
    YFUI.addBtn({
      id: "bt_kg_autoEscape",
      groupId: "pluginMenus",
      text: "逃跑",
      style: {
        background: "#DDCCEE",
        height: "20px",
        width: "40px"
      },
      // boxStyle:{"margin-bottom":"15px"},
      onclick: function onclick($btn) {
        var btnFlag = PLU.setBtnRed($btn);
        if (btnFlag) {
          PLU.autoEscape({
            onEnd: function onEnd() {
              PLU.setBtnRed($btn);
            }
          });
        } else UTIL.delSysListener("onAutoEscape");
      }
    });
    YFUI.addBtn({
      id: "bt_kg_loopKill",
      groupId: "pluginMenus",
      text: "循环杀",
      style: {
        background: "#EECCCC",
        height: "20px",
        width: "40px"
      },
      // boxStyle:{"margin-bottom":"15px"},
      onclick: function onclick($btn) {
        PLU.toLoopKill($btn);
      }
    });
    YFUI.addBtn({
      id: "bt_kg_teamSync",
      groupId: "pluginMenus",
      text: "同步",
      style: {
        background: "#DDCCEE",
        height: "20px",
        width: "40px"
      },
      boxStyle: {
        "margin-bottom": "15px"
      },
      onclick: function onclick($btn) {
        PLU.toggleTeamSync($btn);
      }
    });
    YFUI.addBtn({
      id: "bt_kg_followKill",
      groupId: "pluginMenus",
      text: "跟杀",
      style: {
        background: "#FFDDDD",
        height: "25px",
        width: "40px"
      },
      onclick: function onclick($btn) {
        PLU.toggleFollowKill($btn, "followKill");
      }
    });
    YFUI.addBtn({
      id: "bt_kg_autoCure",
      groupId: "pluginMenus",
      text: "血蓝",
      style: {
        background: "#CCCCFF",
        height: "25px",
        width: "40px"
      },
      onclick: function onclick($btn) {
        PLU.toggleAutoCure($btn, "autoCure");
      }
    });
    YFUI.addBtn({
      id: "bt_kg_autoPerform",
      groupId: "pluginMenus",
      text: "连招",
      style: {
        background: "#FFCCFF",
        height: "25px",
        width: "40px"
      },
      onclick: function onclick($btn) {
        PLU.toggleAutoPerform($btn, "autoPerform");
      }
    });
    //monitor
    var momaxW = $("#page").width() - $("#out").width() > 4 && $("#out").width() > 634 ? 475 : Math.floor($("#out").width() * 0.75);
    var leftSty = $("#page").width() - $("#out").width() > 4 && $("#page").width() > 634 ? "79px" : "12%";
    YFUI.addBtnGroup({
      id: "topMonitor",
      style: {
        position: "fixed",
        top: 0,
        left: leftSty,
        width: "75%",
        height: "15px",
        maxWidth: momaxW + "px",
        lineHeight: "1.2",
        fontSize: "11px",
        textAlign: "left",
        color: "#FF9",
        background: "rgba(0,0,0,0)",
        display: "none"
      }
    });
  },
  //================================================================================================
  getCache: function getCache(key) {
    var _PLU$CACHE$key;
    return (_PLU$CACHE$key = PLU.CACHE[key]) !== null && _PLU$CACHE$key !== void 0 ? _PLU$CACHE$key : "";
  },
  //================================================================================================
  setCache: function setCache(key, val) {
    PLU.CACHE[key] = val;
    UTIL.setMem("CACHE", JSON.stringify(PLU.CACHE));
    return val;
  },
  //================================================================================================
  initStorage: function initStorage() {
    if (!UTIL.getMem("CACHE")) UTIL.setMem("CACHE", JSON.stringify(PLU.CACHE));
    var caObj,
      ca = UTIL.getMem("CACHE");
    try {
      caObj = JSON.parse(ca);
    } catch (err) { }
    if (caObj) {
      PLU.CACHE = caObj;
      var listen = ["listenPuzzle", "listenChat", "listenQL", "listenTF", "listenKFQL", "listenYX", "autoDZ","autoHYC", "auto9H", "autoDY", "autoCaicha","autoTP", "autoLX", "autoBF", "autoB5F", "autoB6", "autoConnect", "autoSignIn", "autoQuitTeam"];
      for (var i = 0, len = listen.length; i < len; i++) {
        if (PLU.getCache(listen[i]) == 1) PLU.setListen($("#btn_bt_" + listen[i]), listen[i], 1);
      }
      if (PLU.getCache("listenPuzzle") == 0) {
        PLU.TMP.autotask = false;
      }
      if (PLU.getCache("followKill") == 1) {
        PLU.toggleFollowKill($("#btn_bt_kg_followKill"), "followKill", 1);
      }
      if (PLU.getCache("autoCure") == 1) {
        PLU.toggleAutoCure($("#btn_bt_kg_autoCure"), "autoCure", 1);
      }
      if (PLU.getCache("autoPerform") >= 1) {
        PLU.toggleAutoPerform($("#btn_bt_kg_autoPerform"), "autoPerform", PLU.getCache("autoPerform"));
      }
      if (PLU.getCache("showTopMonitor") == 1) {
        PLU.showMPFZ($("#btn_bt_showMPFZ"));
      }
    }
  },
  //================================================================================================
  initHistory: function initHistory() {
    //---------------------
    document.addEventListener("addLog", PLU.updateShowLog);
    //---------------------
    var hisArr = [],
      hstr = UTIL.getMem("HISTORY");
    if (hstr) try {
      hisArr = JSON.parse(hstr);
    } catch (err) { }
    if (hisArr && hisArr.length) {
      var nowTs = new Date().getTime();
      var newArr = hisArr.filter(function (h) {
        UTIL.log(Object.assign({}, h, {
          isHistory: true
        }));
        if (nowTs - h.time > 43200000) return false;
        return true;
      });
      UTIL.logHistory = newArr;
      UTIL.setMem("HISTORY", JSON.stringify(newArr));
    }
    PLU.MPFZ = UTIL.getMem("MPFZ") ? JSON.parse(UTIL.getMem("MPFZ")) : {};
  },
  //================================================================================================
  initListeners: function initListeners() {
    //监听战斗消息
    UTIL.addSysListener("listenAllFight", function (b, type, subtype, msg) {
      if (type == "vs") {
        switch (subtype) {
          case "vs_info":
            if (b.containsKey("is_watcher")) {
              PLU.STATUS.inBattle = 2;
              break;
            }
            PLU.STATUS.inBattle = 1;
            if (!PLU.battleData) PLU.battleData = {
              skills: {},
              xdz: 0,
              myPos: 0,
              mySide: "",
              performTime: 0,
              cureTimes: 0
            };
            for (var i = b.elements.length - 1; i > -1; i--) {
              var val = b.elements[i].value + "";
              if (!val || val.indexOf(PLU.accId) < 0) continue;
              PLU.battleData.myPos = b.elements[i].key.charAt(7);
              PLU.battleData.mySide = b.elements[i].key.substring(0, 3);
              break;
            }
            PLU.STATUS.isBusy = true;
            break;
          case "ready_skill":
            if (b.get("uid").indexOf(PLU.accId) < 0 || b.get("skill") == "fight_item") break;
            if (!PLU.battleData) PLU.battleData = {
              skills: {},
              xdz: 0,
              myPos: 0,
              mySide: "",
              performTime: 0,
              cureTimes: 0
            };
            PLU.battleData.skills[b.get("pos") - 1] = {
              name: UTIL.filterMsg(b.get("name")),
              skill: b.get("skill"),
              xdz: b.get("xdz"),
              key: "playskill " + b.get("pos")
            };
            break;
          case "add_xdz":
            if (b.get("uid").indexOf(PLU.accId) < 0) break;
            if (!PLU.battleData) PLU.battleData = {
              skills: {},
              xdz: 0,
              myPos: 0,
              mySide: "",
              performTime: 0,
              cureTimes: 0
            };
            PLU.battleData.xdz = parseInt(b.get("xdz"));
            if (PLU.STATUS.inBattle == 1 && PLU.battleData && PLU.battleData.xdz > 1) {
              PLU.checkUseSkills();
            }
            break;
          case "playskill":
            if (b.get("uid").indexOf(PLU.accId) < 0) break;
            if (!PLU.battleData) PLU.battleData = {
              skills: {},
              xdz: 0,
              myPos: 0,
              mySide: "",
              performTime: 0,
              cureTimes: 0
            };
            var x = PLU.battleData.xdz - parseInt(b.get("lose_xdz"));
            if (parseInt(b.get("lose_xdz"))) PLU.battleData.xdz = x > 0 ? x : 0;
            break;
          case "out_watch":
            PLU.STATUS.inBattle = 0;
            PLU.STATUS.isBusy = false;
            break;
          case "combat_result":
            PLU.STATUS.inBattle = 0;
            PLU.battleData = null;
            PLU.STATUS.isBusy = false;
            if (PLU.TMP.loopUseSkill) {
              clearInterval(PLU.TMP.loopUseSkill);
              PLU.TMP.loopUseSkill = null;
            }
            break;
          default:
            break;
        }
        if (PLU.STATUS.inBattle == 1 && !PLU.TMP.loopUseSkill) {
          PLU.TMP.loopUseSkill = setInterval(function () {
            if (PLU.STATUS.inBattle == 1 && PLU.battleData && PLU.battleData.xdz > 1) {
              PLU.checkUseSkills();
            }
          }, 250);
        }
      }
      if (g_gmain.is_fighting && PLU.STATUS.inBattle == 1) {
        if (type == "vs" || type == "attrs_changed") {
          //自动疗伤及自动技能
          if (PLU.battleData && PLU.battleData.xdz > 1 && PLU.STATUS.inBattle == 1) {
            PLU.checkUseSkills();
          }
        }
      }
    });
    //监听场景消息
    UTIL.addSysListener("listenNotice", function (b, type, subtype, msg) {
      if (type != "notice" && type != "main_msg") return;
      if (msg.match(/闲聊|告诉|队伍/)) return;
      var msgTxt = UTIL.filterMsg(msg);
      if (msgTxt.match("你打坐完毕") && PLU.getCache("autoDZ") == 1) {
        if (UTIL.inHome()) clickButton("exercise", 0); else PLU.TODO.push({
          type: "cmds",
          cmds: "exercise",
          timeout: new Date().getTime() + 8 * 60 * 60 * 1000
        });
      } else if ((msgTxt.match("你从寒玉床上爬起") || msgTxt.match("你从地髓石乳中出来")) && PLU.getCache("autoHYC") == 1) {
        if (UTIL.inHome()) PLU.execActions("golook_room;sleep_hanyuchuang;home"); else PLU.TODO.push({
          type: "cmds",
          cmds: "golook_room;sleep_hanyuchuang;home",
          timeout: new Date().getTime() + 8 * 60 * 60 * 1000
        });
     } else if ((msgTxt.match("你停止了修炼。")) && PLU.getCache("autoHYC") == 1) {
        if (UTIL.inHome()) PLU.execActions("xls practice;"); else PLU.TODO.push({
          type: "cmds",
          cmds: "xls practice;",
          timeout: new Date().getTime() + 8 * 60 * 60 * 1000
        }); 
      } else if ((msgTxt.match("你今天江湖悬红榜任务数量已经达到上限,请明天再来吧。")) && PLU.getCache("autoHYC") == 1) {
        PLU.execActions("items use obj_xuankongling;log?继续刷;");
      } else if (msgTxt.match("你今天使用九花玉露丸次数已经达到上限了")) {
        YFUI.writeToOut("<span style='color:yellow;'>九花玉露丸次数已达到上限!取消监听九花玉露丸...</span>");
        PLU.setListen($("#btn_bt_auto9H"), "auto9H", 0);
      } else if (msgTxt.match("九花玉露丸效果:") && PLU.getCache("auto9H") == 1) {
        PLU.execActions("items use obj_jiuhuayulouwan");
      /* xls practice  //开始闭关
      } else if((msgTxt.match("获得:力贯九天丸x1") || msgTxt.match("获得:力贯九天丸x1")) && PLU.getCache("autoFD") == 1){
        PLU.execActions("fudi houshan fetch;fudi shennong fetch;fudi shennong make 1;fudi shennong make 2;fudi shennong make 3;fudi shennong make 4;fudi shennong make 5;");
        YFUI.writeToOut("<span style='color:yellow;'>====收获府邸完成====</span>");
      
      } else if (msgTxt.match("毒发作了!") && !g_gmain.is_fighting) {
        var faminame = g_obj_map.get("msg_attrs") && g_obj_map.get("msg_attrs").get("family_name");
        if (faminame !== "铁雪山庄") {
          PLU.execActions("items use ice lotus"); //解毒
        }
      */
      } else if (type == "notice" && msg.indexOf("每日武林知识问答次数已经达到限额")>-1) {
        PLU.execActions("home;");
      } else if (msgTxt.match("病人终于心满意足")) {
        PLU.execActions("event_1_12050280;");
      } else if (msgTxt.match("本届比武大会第一名")) {
        if (UTIL.inHome()) clickButton("swords get_drop go;home;", 0); else PLU.TODO.push({
          type: "cmds",
          cmds: "swords get_drop go;home;",
          timeout: new Date().getTime() + 8 * 60 * 60 * 1000
        });
      } else if (msgTxt.includes("领取(.*)周奖励获得") || msgTxt.includes("领取(.*)通关奖励获得")) {
        if (!msgTxt.includes("拱辰楼") || !msgTxt.includes("试炼塔")) {
            PLU.execActions("=300;home;");
        }
      } else if (msgTxt.includes("今天的游戏次数已达到上限了")) {
        PLU.execActions(";home");
        YFUI.writeToOut("<span style='color:yellow;'>---次数用完,明天再来---</span>");
      } else if (msgTxt.includes("你走着走着,不知不觉来到了(.*)楼")) {
        // curName == "风花楼" ||curName == "雪月楼" ||curName == "双树楼"
        PLU.execActions("ak;=500;ka;");
      } else if (msgTxt.match(/此技能已经达到500级了/) && PLU.getCache("autoLX") == 1) {
        if (UTIL.inHome()) PLU.autoLianXi();
      } else if (msgTxt.match(/你的(.*)成功向前突破了/) && PLU.getCache("autoTP") == 1) {
        if (UTIL.inHome()) PLU.toToPo(); else {
          var checktp = PLU.TODO.find(function (e) {
            return e.cmds == "toToPo";
          });
          if (!checktp) PLU.TODO.push({
            type: "func",
            cmds: "toToPo",
            timeout: new Date().getTime() + 8 * 60 * 60 * 1000
          });
        }
      } else if (msgTxt.match("你现在正突破") && msgTxt.match("同时突破") || msgTxt.match("此次突破需要")) {
        //突破失败
        PLU.TMP.stopToPo = true;
      } else if (msgTxt.match("青龙会组织:")) {
        //本服青龙
        var l = msgTxt.match(/青龙会组织:(.*)正在\003href;0;([\w\d\s]+)\003(.*)\0030\003施展力量,本会愿出(.*)的战利品奖励给本场战斗的最终获胜者。/);
        if (l && l.length > 3) {
          UTIL.log({
            msg: "【青龙】" + l[3].padStart(5) + " - " + l[1].padEnd(4) + "  奖品:" + l[4],
            type: "QL",
            time: new Date().getTime()
          });
          if (PLU.getCache("listenQL") == 1) {
            var keysStr = PLU.getCache("listenQL_keys").split("|")[1].split(",").map(function (e) {
              return e == "*" ? ".*" : e.replace("*", "\\*");
            }).join("|");
            var reg = new RegExp(keysStr);
            if (l[4].match(reg) && UTIL.inHome()) {
              PLU.goQinglong(l[1], l[3], PLU.getCache("listenQL_keys").split("|")[0], false);
            }
          }
        }
      } else if (msgTxt.match("这是你今天完成的第")) {
        //逃犯完成
        var _l = msgTxt.match(/这是你今天完成的第(\d)\/\d场逃犯任务/);
        if (_l && _l.length > 0 && _l[1] == 5) {
          YFUI.writeToOut('<span style="color:yellow;">逃犯任务已达到上限!取消逃犯监听...</span>');
          UTIL.log({
            msg: " 逃犯任务已达到上限!取消逃犯监听...",
            type: "TIPS",
            time: new Date().getTime()
          });
          PLU.setListen($("#btn_bt_listenTF"), "listenTF", 0);
        }
      } else if (msgTxt.match("对你悄声道:你现在去") && !PLU.TMP.autoQixiaMijing) {
        //奇侠说秘境
        var _l2 = msgTxt.match(/(.*)对你悄声道:你现在去(.*),应当会有发现/);
        if (_l2 && _l2.length > 2) {
          var placeData = PLU.YFD.mjList.find(function (e) {
            return e.n == _l2[2];
          });
          if (placeData) {
            YFUI.writeToOut("<span>奇侠秘境: <a style='text-decoration:underline;color:yellow;cursor:pointer;' onclick='PLU.execActions(\"" + placeData.v + "\")'>" + placeData.n + "</a></span>");
            YFUI.showPop({
              title: "奇侠秘境",
              text: "秘境:" + placeData.n,
              okText: "去秘境",
              onOk: function onOk() {
                PLU.execActions(placeData.v + ";find_task_road secret;", function () {
                  YFUI.writeToOut("<span>:: <a style='text-decoration:underline;color:yellow;cursor:pointer;' onclick='clickButton(\"open jhqx\", 0)'>奇侠列表</a></span>");
                });
              },
              onNo: function onNo() { }
            });
          }
        }
      } else if (msgTxt.match("你赢了这场宝藏秘图之战!")) {
        PLU.execActions("clan bzmt puzz");
      } else if (msgTxt.match("开启了帮派副本")) {
        if (PLU.getCache("autoBF") == 1) {
          //帮四开启
          var ll = msg.match(/开启了帮派副本.*十月围城.*【(.*)】/);
          if (ll) {
            var n = "一二三".indexOf(ll[1]);
            UTIL.log({
              msg: "【帮四】帮四(" + ll[1] + ")开启 ",
              type: "BF",
              time: new Date().getTime()
            });
            if (n >= 0) {
              if (!g_gmain.is_fighting) {
                PLU.toBangFour(n + 1);
              } else {
                var checktodo = PLU.TODO.find(function (e) {
                  return e.cmds == "toBangFour";
                });
                if (!checktodo) PLU.TODO.push({
                  type: "func",
                  cmds: "toBangFour",
                  param: n + 1,
                  timeout: new Date().getTime() + 5 * 60 * 1000
                });
              }
            }
          }
        }
        if (PLU.getCache("autoB6") == 1) {
          //帮六开启
          var ls = msg.match(/开启了帮派副本.*蛮荒七神寨.*/);
          if (ls) {
            if (!g_gmain.is_fighting) {
              PLU.toBangSix();
            } else {
              var _checktodo = PLU.TODO.find(function (e) {
                return e.cmds == "toBangSix";
              });
              if (!_checktodo) PLU.TODO.push({
                type: "func",
                cmds: "toBangSix",
                param: "",
                timeout: new Date().getTime() + 5 * 60 * 1000
              });
            }
          }
        }
      } else if (msgTxt.match("十月围城】帮派副本胜利")) {
        //帮四完成
        PLU.STO.bangFourTo && clearTimeout(PLU.STO.bangFourTo);
        if (!g_gmain.is_fighting) {
          setTimeout(function () {
            PLU.execActions("home;");
          }, 2000);
        }
      } else if (msgTxt.match("蛮荒七神寨】帮派副本胜利")) {
        //帮六完成
        PLU.STO.bangSixTo && clearTimeout(PLU.STO.bangSixTo);
        if (!g_gmain.is_fighting) {
          setTimeout(function () {
            PLU.execActions("home;");
          }, 2000);
        }
      } else if (msgTxt.match("你今天进入此副本的次数已达到上限了")) {
        //帮四六无法进入
        PLU.STO.bangFourTo && clearTimeout(PLU.STO.bangFourTo);
        PLU.STO.bangSixTo && clearTimeout(PLU.STO.bangSixTo);
        UTIL.log({
          msg: " !!副本超量!!",
          type: "TIPS",
          time: new Date().getTime()
        });
      } else if (msgTxt.match(/你已进入帮派副本\*\*可汗金帐\*\*/) && PLU.getCache("autoB5F") == 1) {
        //帮五进入
        PLU.inBangFiveEvent();
      } else if (msgTxt.match("成功消灭了守将府内的所有敌人")) {
        //帮二完成
        var _l3 = msgTxt.match(/守城成功】(.*)成功消灭了守将府内的所有敌人,帮派副本完成/);
        if (_l3 && _l3.length > 1 && !g_gmain.is_fighting) {
          setTimeout(function () {
            PLU.execActions("home;");
          }, 3000);
        }
      } else if (msgTxt.match("你没有精良鱼饵,无法钓鱼")) {
        //钓鱼完成
        if (!UTIL.inHome() && !g_gmain.is_fighting) {
          if (PLU.getCache("autoDY") == 1) {
            var attr = g_obj_map.get("msg_attrs");
            if (attr.get("yuanbao") >= PLU.getCache("autoDY_key") + 50) PLU.execActions("shop buy shop45_N_10;diaoyu;"); else setTimeout(function () {
              PLU.execActions("home;");
              PLU.setCache("autoDY", 0);
            }, 1000);
          }
        } else setTimeout(function () {
          PLU.execActions("home;");
          PLU.setCache("autoDY", 0);
        }, 1000);
      } else if (msgTxt.match("你没有茶篓,无法采茶")) {
        //采茶完成
        if (!UTIL.inHome() && !g_gmain.is_fighting) {
          if (PLU.getCache("autoCaicha") == 1) {
            var attr = g_obj_map.get("msg_attrs");
            if (attr.get("yuanbao") >= PLU.getCache("autoCaicha_key") + 50) PLU.execActions("shop buy shop44_N_10;diaoyu;"); else setTimeout(function () {
              PLU.execActions("home;");
              PLU.setCache("autoCaicha", 0);
              YFUI.writeToOut("<span style='color:yellow;'>=====完成采茶=====</span>");
            }, 1000);
          }
        } else setTimeout(function () {
          PLU.execActions("home;");
          PLU.setCache("autoCaicha", 0);
        }, 1000);
     } else if (msgTxt.match("你今天采得太多了,明天再来吧...")) { //采茶完成
        PLU.execActions("home;");
        PLU.setCache("autoCaicha", 0);
        YFUI.writeToOut("<span style='color:yellow;'>=====完成采茶=====</span>");
    }
    });
    //监听频道消息
    UTIL.addSysListener("listenChannel", function (b, type, subtype, msg) {
      if (type != "channel" || subtype != "sys") return;
      var msgTxt = UTIL.filterMsg(msg);
      //本服逃犯
      if (msgTxt.match("慌不择路") && msgTxt.indexOf("跨服") < 0) {
        var l = msgTxt.match(/系统】([一-龥|\*]+).*慌不择路,逃往了(.*)-\003href;0;([\w\d\s]+)\003([一-龥]+)/);
        if (l && l.length > 4) {
          UTIL.log({
            msg: "【逃犯】" + l[2] + "-" + l[4] + " : " + l[1],
            type: "TF",
            time: new Date().getTime()
          });
          //111
          if (PLU.getCache("listenTF") == 1 && UTIL.inHome()) {
            if (!PLU.TMP.lis_TF_list) {
              PLU.splitTFParam();
            }
            if (PLU.TMP.lis_TF_list.includes(l[1])) {
              var idx = PLU.TMP.lis_TF_list.findIndex(function (k) {
                return k == l[1];
              });
              if (idx >= 0) {
                var gb = Number(PLU.getCache("listenTF_keys").split("|")[0]) || 0;
                PLU.goTaofan(l[1], l[2], l[3], gb, PLU.TMP.lis_TF_force[idx]);
              }
            }
          }
        }
      } else if (msgTxt.match("跨服时空")) {
        //广场青龙
        var _l4 = msgTxt.match(/跨服:(.*)逃到了跨服时空(.*)之中,青龙会组织悬赏(.*)惩治恶人,众位英雄快来诛杀。/);
        if (_l4 && _l4.length > 3) {
          UTIL.log({
            msg: "【跨服青龙】" + _l4[2] + " - " + _l4[1].padEnd(8) + "  奖品:" + _l4[3],
            type: "KFQL",
            time: new Date().getTime()
          });
          if (PLU.getCache("listenKFQL") == 1) {
            var keysStr = PLU.getCache("listenKFQL_keys").split("|")[1].split(",").map(function (e) {
              return e == "*" ? ".*" : e.replace("*", "\\*");
            }).join("|");
            var reg = new RegExp(keysStr);
            if (PLU.developerMode && _l4[3].match(reg) && UTIL.inHome()) {
              UTIL.addSysListener("KuaFu", function (b, type, subtype, msg) {
                if (b.get("map_id") == "kuafu") {
                  UTIL.delSysListener("KuaFu");
                  PLU.goQinglong(_l4[1], _l4[2], PLU.getCache("listenKFQL_keys").split("|")[0], true);
                }
              });
              setTimeout(function () {
                clickButton("change_server world;");
              }, 500);
            }
          }
        }
      } else if (msgTxt.match("江湖纷争")) {
        //江湖纷争
        var fz = msgTxt.match(/【江湖纷争】:(.*)(门派|流派)的(.*)剑客伤害同门,欺师灭组,判师而出,却有(.*)坚持此种另有别情而强行庇护,两派纷争在(.*)-(.*)一触即发,江湖同门速速支援!/);
        if (!fz) return;
        var ro = fz[3];
        var pl = fz[5] + "-" + fz[6];
        var vs = fz[1] + " VS " + fz[4];
        var tp = fz[2];
        var logType = tp == "门派" ? "MPFZ" : "LPFZ";
        UTIL.log({
          msg: "【" + tp + "之争】 " + ro + "  地点:[" + pl + "]  " + vs,
          type: logType,
          time: new Date().getTime()
        });
        if (tp == "门派") {
          var nowTime = new Date().getTime();
          for (var k in PLU.MPFZ) {
            if (k < nowTime) delete PLU.MPFZ[k];
          }
          var extime = new Date().getTime() + 1560000;
          PLU.MPFZ[extime] = {
            n: ro,
            p: pl,
            v: vs,
            t: new Date().getTime()
          };
          UTIL.setMem("MPFZ", JSON.stringify(PLU.MPFZ));
        }
      } else if (msgTxt.match("出来闯荡江湖了")) {
        //游侠
        var yx = msgTxt.match(/【系统】游侠会:听说(.*)出来闯荡江湖了,目前正在前往(.*)的路上/);
        if (!yx) return;
        var yn = $.trim(yx[1]);
        var yp = yx[2];
        var yr = "";
        PLU.YFD.youxiaList.forEach(function (g) {
          if (g.v.includes(yn)) yr = g.n;
        });
        UTIL.log({
          msg: "【游侠-" + yr + "】 " + yn + "  地点:[" + yp + "]  ",
          type: "YX",
          time: new Date().getTime()
        });
        if (PLU.getCache("listenYX") == 1 && UTIL.inHome()) {
          if (!PLU.TMP.listenYX_list) {
            PLU.TMP.listenYX_list = PLU.getCache("listenYX_keys").split(",");
          }
          if (PLU.TMP.listenYX_list && PLU.TMP.listenYX_list.includes(yn)) {
            var jhName = PLU.fixJhName(yp);
            var jhMap = PLU.YFD.mapsLib.Map.find(function (e) {
              return e.name == jhName;
            });
            if (!jhMap) return; else {
              var ways = jhMap.way.split(";");
              PLU.goFindYouxia({
                paths: ways,
                idx: 0,
                objectNPC: yn
              });
            }
          }
        }
      }
    });
    //监听场景
    UTIL.addSysListener("listenRoomInfo", function (b, type, subtype, msg) {
      if (type == "prompt" && msg.indexOf("想要加入你的") >= 0) {
        PLU.execActions(b.get("cmd1"));
        PLU.execActions("prev;prev");
      }
      if (type == "notice" && subtype == "notify_fail" && msg.indexOf("必须杀完所有的怪物才可以打开宝箱") >= 0) {
        PLU.execActions("ak;;ka;;event_1_68529291;");
      }
      if (type == "notice" && msg.indexOf("完成子关卡*八戒神殿*获得武林名望值x50") >= 0) {
        var mapNamefb = UTIL.filterMsg(g_obj_map.get("msg_room").get("short"));
        if (mapNamefb.match(/本源之心/)) {
          setTimeout(function () {
            PLU.execActions("home;");
          }, 2500);
        }
      }
      if (type != "jh") return;
      //奇侠加按钮
      $("#out .out>button.cmd_click3").each(function (i, e) {
        if (PLU.YFD.qixiaList.includes(e.innerText)) {
          var snpc = e.outerHTML.match(/clickButton\('look_npc (\w+)'/i);
          if (snpc && snpc.length >= 2) {
            $(e).css({
              position: "relative"
            });
            var $btnAsk = $('<span style="position:absolute;display:inline-block;left:0;top:0;padding:3% 5%;text-align:center;background:#39F;color:#fff;border-radius:3px;font-size:1.2em;">问<span>');
            var $btnGold = $('<span style="position:absolute;display:inline-block;right:0;bottom:0;padding:3% 5%;text-align:center;background:#F93;color:#fff;border-radius:3px;font-size:1.2em;">金<span>');
            $(e).append($btnAsk);
            $(e).append($btnGold);
            $btnAsk.click(function (e) {
              e.stopPropagation();
              PLU.execActions("ask " + snpc[1] + ";");
            });
            $btnGold.click(function (e) {
              e.stopPropagation();
              var ename = snpc[1].split("_")[0];
              PLU.execActions("auto_zsjd20_" + ename + ";golook_room");
            });
          }
        }
      });
      //监听入队灵鹫和塔
      if (type == "jh" && subtype == "info" && PLU.getCache("autoQuitTeam") == 1) {
        var sn = g_obj_map.get("msg_room").get("short");
        if (sn.match(/灵鹫宫(\D+)层/) || sn.match(/拱辰楼(\D+)层/) || sn.match(/陈异叔(\D+)层/) || sn.match(/无为寺(\D+)层/) || sn.match(/一品堂(\D+)层/) || sn.match(/名将堂(\D+)层/) || sn.match(/魔皇殿(\D+)层/) || sn.match(/藏典塔(\D+)层/) || sn.match(/无相楼(\D+)层/) || sn.match(/葬剑谷(\D+)层/) || sn.match(/霹雳堂(\D+)层/) || sn.match(/铸剑洞(\D+)层/) || sn.match(/剑楼(\D+)层/) || sn.match(/红螺寺(\D+)层/) || sn.match(/通天塔(\D+)层/)) {
          //退出队伍
          var quitTeamPrevTimeOut = setTimeout(function () {
            UTIL.delSysListener("quitTeamPrev");
          }, 5000);
          UTIL.addSysListener("quitTeamPrev", function (b, type, subtype, msg) {
            if (type == "team" && subtype == "info") {
              UTIL.delSysListener("quitTeamPrev");
              clearTimeout(quitTeamPrevTimeOut);
              clickButton("prev");
            }
          });
          clickButton("team quit");
        }
      }
      //刷新后恢复监听帮五
      if (type == "jh" && subtype == "info" && PLU.TMP.listenBangFive == undefined) {
        var roomName = UTIL.filterMsg(g_obj_map.get("msg_room").get("short"));
        if (roomName.match(/蒙古高原|成吉思汗的金帐/)) {
          PLU.inBangFiveEvent();
        } else {
          PLU.TMP.listenBangFive = false;
        }
      }
      return;
    });
    /*
    UTIL.addSysListener("useCard", function (b, type, subtype, msg) {
      if (type == "notice" && subtype == "notify_fail" && msg.indexOf("今日已达到谜题数量限制。") >= 0) {
        PLU.execActions("items use obj_mitiling;#5 items use miticska");
      }
    });
    // 谜题密码

    UTIL.addSysListener("key", (b, type, subtype, msg) => {
      if (type != "channel" || subtype != "tell") return;
      let key = msg.match(/告诉你:谜题密码:(\d+)/)[1];
      if (key)
        PLU.TODO.push({
          type: "cmds",
          cmds: "jh 1;e;n;n;n;n;w;event_1_65953349 " + key + ";home;",
          timeout: new Date().getTime() + 8 * 60 * 60 * 1000,
        });
    });
    */
    // 监听闲聊
    UTIL.addSysListener("listenChat", function (b, type, subtype, msg) {
      if (type != "channel" || subtype != "chat") return;
      /** UNICODE 15.0
       * CJK Radicals Supplement 2E80–2EFF
       * CJK Unified Ideographs (Han) 4E00–9FFF
       * CJK Extension A 3400-4DBF
       * CJK Extension B 20000–2A6DF
       * CJK Extension C 2A700–2B739
       * CJK Extension D 2B740–2B81D
       * CJK Extension E 2B820–2CEA1
       * CJK Extension F 2CEB0–2EBE0
       * CJK Extension G 30000–3134A
       * CJK Extension H 31350–323AF
       */
      msg = msg.replace("\f", "");
      var text = msg.match(/^[^:]+:.*?([⺀-⻿㐀-䶿一-鿿\-,”'!!]+道:.+)\x1B\[2;37;0m/);
      if (text) {
        text = text[1];
        if (text.match(/柴绍|李秀宁|大鹳淜洲/)) {
          /**
           * 李秀宁昨天捡到了我几十辆银子
           * 李秀宁鬼鬼祟祟的叫人生疑
           * 李秀宁竟对我横眉瞪眼的
           * 竟然吃了李秀宁的亏
           * 李秀宁竟敢得罪我
           * 被李秀宁抢走了
           * 李秀宁好大胆
           * 想找李秀宁
           * 藏在了(天龙寺-)?大鹳淜洲
           * 想要一件天罗紫芳衣
           */
          UTIL.log({
            msg: "【谜题-天命丹】" + text,
            type: "TIPS",
            time: new Date().getTime()
          });
        } else if (text.match(/阴九幽|潜龙|谷底石室/)) {
          UTIL.log({
            msg: "【谜题-鬼杀剑】" + text,
            type: "TIPS",
            time: new Date().getTime()
          });
        } else if (text.match(/打坐老僧|牟尼楼|牟尼洞/)) {
          UTIL.log({
            msg: "【谜题-700级读书识字】" + text,
            type: "TIPS",
            time: new Date().getTime()
          });
        } else if (text.match(/本恒禅师|无相堂/)) {
          UTIL.log({
            msg: "【谜题-木棉袈裟】" + text,
            type: "TIPS",
            time: new Date().getTime()
          });
        } else if (text.match(/天罗紫芳衣/)) {
          UTIL.log({
            msg: "【谜题-天命丹】" + text,
            type: "TIPS",
            time: new Date().getTime()
          });
        } else if (text.match(/鬼杀剑|金凤翅盔/)) {
          UTIL.log({
            msg: "【谜题-鬼杀剑】" + text,
            type: "TIPS",
            time: new Date().getTime()
          });
        } else if (text.match(/麻布僧衣/)) {
          UTIL.log({
            msg: "【谜题-700级读书识字】" + text,
            type: "TIPS",
            time: new Date().getTime()
          });
        } else if (text.match(/追风棍|木棉袈裟/)) {
          UTIL.log({
            msg: "【谜题-木棉袈裟】" + text,
            type: "TIPS",
            time: new Date().getTime()
          });
        }
      }
      var text2 = msg.match(/[^:]+:(.+)\x1B\[2;37;0m/)[1];
      if (PLU.getCache("listenChat") == 1 && text2 != "哈哈,我也来闯荡江湖啦!" && text2 != "哈哈,我去也……") YFUI.writeToOut(msg);
      var text3 = msg.match(/^[^:]+:(.+道):(.+)\x1B\[2;37;0m/);
      if (text3) var tmp = PLU.queryNpc(text3[1], true); else {
        var _text = msg.match(/^[^:]+:(.+)的谜题\x1B\[2;37;0m/);
        if (_text) var tmp = PLU.queryNpc(_text[1] + "道", true);
      }
      if (tmp && tmp.length && PLU.getCache("listenPuzzle") == 1) {
        PLU.TMP.autotask = true;
        var _iterator2 = _createForOfIteratorHelper(tmp),
          _step2;
        try {
          for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
            var _ref, _npc$name_new;
            var npc = _step2.value;
            PLU.TODO.push({
              type: "func",
              cmds: "execActions",
              param: [npc.way, function (code, name) {
                var npcObj = UTIL.findRoomNpc(name, 0, 1);
                if (npcObj) PLU.execActions("ask " + npcObj.key);
              }, (_ref = (_npc$name_new = npc.name_new) !== null && _npc$name_new !== void 0 ? _npc$name_new : npc.name_tw) !== null && _ref !== void 0 ? _ref : npc.name],
              timeout: new Date().getTime() + 15 * 60 * 1000
            });
          }
        } catch (err) {
          _iterator2.e(err);
        } finally {
          _iterator2.f();
        }
      }
    });
    //----------监听练习----------------------------
    UTIL.addSysListener("listenPractice", function (b, type, subtype, msg) {
      if (type == "practice" && subtype == "stop_practice" && PLU.getCache("autoLX") == 1) {
        var skillId = b.get("sid"),
          lxcmds = "enable " + skillId + ";practice " + skillId;
        if (UTIL.inHome()) PLU.execActions(lxcmds); else PLU.TODO.push({
          type: "cmds",
          cmds: lxcmds,
          timeout: new Date().getTime() + 8 * 60 * 60 * 1000
        });
      }
    });
    //----------------------------------------------
    //----------------------------------------------
    //监听剑阵
    UTIL.addSysListener("listenJianzhen", function (b, type, subtype, msg) {
      if (type != "notice") return;
      if (msg.indexOf("阵升级完毕!") < 0) return;
      var msgTxt = UTIL.filterMsg(msg);
      if (msgTxt.match(/(.*)阵升级完毕!成功升级到/)) {
        setTimeout(function () {
          var _g_obj_map$get2;
          var jzcmds = "hhjz xiulian go;;;hhjz speedup go;";
          var room = (_g_obj_map$get2 = g_obj_map.get("msg_room")) === null || _g_obj_map$get2 === void 0 ? void 0 : _g_obj_map$get2.get("short");
          PLU.execActions(jzcmds);
          /*
          if (room == "桃溪" || room == "后山茶园" || UTIL.inHome()) PLU.execActions(jzcmds); else PLU.TODO.push({
            type: "cmds",
            cmds: jzcmds,
            timeout: new Date().getTime() + 8 * 60 * 60 * 1000
          });
            */
        }, 8000);
      }
    });
    //监听跟杀
    UTIL.addSysListener("listenFightKill", function (b, type, subtype, msg) {
      if (type != "main_msg" || !msg) return;
      if (msg.indexOf("对著") < 0) return;
      if (PLU.getCache("followKill") != 1) return;
      var msgTxt = UTIL.filterMsg(msg);
      var matchKill = msgTxt.match(/(.*)对著(.*)喝道:「(.*)!今日不是你死就是我活!」/);
      if (matchKill && $.trim(matchKill[1]) != "你" && $.trim(matchKill[2]) != "你" && !g_gmain.is_fighting) {
        PLU.toCheckFollowKill($.trim(matchKill[1]), $.trim(matchKill[2]), "kill", msgTxt);
        return;
      }
      var matchFight = msgTxt.match(/(.*)对著(.*)说道:(.*),领教(.*)的高招!/);
      if (matchFight && $.trim(matchFight[1]) != "你" && $.trim(matchFight[2]) != "你" && !g_gmain.is_fighting) {
        PLU.toCheckFollowKill($.trim(matchFight[1]), $.trim(matchFight[2]), "fight", msgTxt);
        return;
      }
    });
    //test
    UTIL.addSysListener("testListener", function (b, type, subtype, msg) {
      if (type == "g_login" && subtype == "login_ret" && msg == "1") {
        YFUI.writeToOut("<span style='color:#FFF;background:#F00;'>[" + UTIL.getNow() + "] 断线重连了 </span>");
        PLU.TMP.reConnectTime = 0;
      }
    });
    UTIL.addSysListener("disconnect", function (b, type, subtype, msg) {
      if (type == "disconnect" && subtype == "change") {
        console.log("%c%s", "color:#F00", ">>>>>>>sock disconnected");
        //sock && sock.close(); sock = 0
        if (PLU.getCache("autoConnect") == 1) {
          var recTime = Number(PLU.getCache("autoConnect_keys"));
          if (recTime) g_gmain.g_delay_connect = recTime;
        }
      }
    });
    unsafeWindow.sock.on("telnet_connected", function () {
      console.log("%c%s", "color:#0F0", ">>>>>>>sock connected");
    });
    UTIL.addSysListener("YXSkillsListener", function (b, type, subtype, msg) {
      if (type != "show_html_page") return;
      if (msg.indexOf("须传授技能") < 0) return;
      var list = msg.match(/\x1B\[1;36m(\d+)\/(\d+)[\s\S]{1,200}(fudi juxian up_skill .* 10)/g);
      var outList = null;
      if (list && list.length) {
        outList = list.map(function (s) {
          var r = s.match(/\x1B\[1;36m(\d+)\/(\d+)[\s\S]{1,200}(fudi juxian up_skill .* 10)/);
          return {
            lvl: r[1],
            max: r[2],
            cmd: r[3] + "0"
          };
        });
      }
      PLU.TMP.CUR_YX_SKILLS = outList;
      var matchNameLine = msg.match(/<span class="out2">([\s\S]+)<\/span><span class="out2">/);
      var npcNameLine = matchNameLine ? UTIL.filterMsg(matchNameLine[1]) : "";
      var dg = npcNameLine.match(/(\d+)级/)[1];
      PLU.TMP.CUR_YX_LEVEL = Number(dg);
      var nn = msg.match(/fudi juxian upgrade (\S+) 1/)[1];
      PLU.TMP.CUR_YX_ENG = nn;
    });
    UTIL.addSysListener("masterSkillsListener", function (b, type, subtype, msg) {
      if (type != "master_skills" || subtype != "list") return;
      var masterSkills = PLU.parseSkills(b);
      PLU.TMP.MASTER_ID = b.get("id");
      PLU.TMP.MASTER_SKILLS = masterSkills;
    });
  },
  //================================================================================================
  initTickTime: function initTickTime() {
    setInterval(function () {
      var nowDate = new Date();
      var nowTime = nowDate.getTime();
      if (PLU.TODO.length > 0 && !PLU.STATUS.isBusy && UTIL.inHome()) {
        //待办
        var ctd = PLU.TODO.shift();
        if (nowDate.getTime() < ctd.timeout) {
          if (ctd.type == "cmds") {
            PLU.execActions(ctd.cmds);
          } else if (ctd.type == "func") {
            var _PLU;
            if (ctd.param) (_PLU = PLU)[ctd.cmds].apply(_PLU, _toConsumableArray(ctd.param)); else PLU[ctd.cmds]();
          }
        }
      }
      if ($("#topMonitor").text() != "") $("#topMonitor").empty();
      var bi = 0;
      for (var k in PLU.MPFZ) {
        if (k < nowTime) delete PLU.MPFZ[k]; else {
          var f = PLU.MPFZ[k];
          var dt = Math.floor((k - nowTime) / 1000);
          var flo = bi % 2 == 1 ? "float:right;text-align:right;" : "";
          $("#topMonitor").append('<div title="'.concat(f.v, '" style="display:inline-block;width:40%;').concat(flo, '">').concat(f.n.substr(0, 1), ' <span style="color:#9CF;">[').concat(f.p, ']</span> <span style="color:#DDD;">').concat(dt, "</span></div>"));
          bi++;
        }
      }
      if (PLU.ONOFF["btn_bt_waitCDKill"] && PLU.TMP.DATA_MPFZ) PLU.toCheckAndWaitCDKill(nowTime);
    }, 1000);
  },
  //================================================================================================
  toSignIn: function toSignIn() {
    var _PLU$getCache;
    if (!this.signInMaps) this.initSignInMaps();
    var ckeds = ((_PLU$getCache = PLU.getCache("signInArray")) === null || _PLU$getCache === void 0 ? void 0 : _PLU$getCache.split(",")) || this.signInMaps.map(function (e, i) {
      return i;
    });
    var htm = '<div style="display:flex;flex-direction:row;flex-wrap: wrap;justify-content: space-between;width: 100%;align-content: flex-start;line-height:2;">';
    this.signInMaps.forEach(function (e, i) {
      if (!e.n) htm += '<span style="width:92px;">&nbsp;</span>'; else htm += '<span><button class="signInBtn" data-sid="'.concat(i, '" style="font-size:12px;padding:1px 2px;cursor:pointer;">GO</button>\n            <label data-id="').concat(i, '" style="font-size:13px;margin:0 3px 5px 0;">').concat(e.n, '<input type="checkbox" name="signInId" value="').concat(i, '"\n             ').concat(ckeds.includes(i + "") || e.f ? "checked" : "", " ").concat(e.f ? "disabled" : "", " /></label></span>");
    });
    htm += '</div><button class="signInAll" style="cursor:pointer;position:absolute;left:15px;bottom:10px;">全选</button>';
    YFUI.showPop({
      title: "签到",
      text: htm,
      width: "360px",
      okText: "一键签到",
      onOk: function onOk(e) {
        var checkeds = [];
        e.find('input[name="signInId"]:checked').each(function (i, b) {
          checkeds.push(b.value);
        });
        PLU.setCache("auto9H", 1);
        PLU.setCache("signInArray", checkeds.join(","));
        PLU.goSign(checkeds);
      },
      onNo: function onNo() { },
      afterOpen: function afterOpen($el) {
        $el.find(".signInBtn").click(function (e) {
          var btnSid = $(e.currentTarget).attr("data-sid");
          PLU.goSign(btnSid);
        });
        $el.find(".signInAll").click(function (e) {
          $el.find('input[name="signInId"]').each(function () {
            $(this).prop("checked", true);
          });
        });
      }
    });
  },
  //================================================================================================
  toricrw: function toricrw() {
    var _PLU$getCache2;
    if (!this.rcrenwu) this.initrichangrenwu();
    var ckeds = ((_PLU$getCache2 = PLU.getCache("signInArrayrc")) === null || _PLU$getCache2 === void 0 ? void 0 : _PLU$getCache2.split(",")) || this.rcrenwu.map(function (e, i) {
      return i;
    });
    var htm = '<div style="display:flex;flex-direction:row;flex-wrap: wrap;justify-content: space-between;width: 100%;align-content: flex-start;line-height:2;">';
    this.rcrenwu.forEach(function (e, i) {
      if (!e.n) htm += '<span style="width:92px;">&nbsp;</span>'; else htm += '<span><button class="signInBtn" data-sid="'.concat(i, '" style="font-size:12px;padding:1px 2px;cursor:pointer;">GO</button>\n            <label data-id="').concat(i, '" style="font-size:13px;margin:0 3px 5px 0;">').concat(e.n, '<input type="checkbox" name="signInId" value="').concat(i, '"\n             ').concat(ckeds.includes(i + "") || e.f ? "checked" : "", " ").concat(e.f ? "disabled" : "", " /></label></span>");
    });
    htm += '</div><button class="signInAll" style="cursor:pointer;position:absolute;left:15px;bottom:10px;">全选</button>';
    YFUI.showPop({
      title: "日常周常",
      text: htm,
      width: "360px",
      okText: "开始",
      onOk: function onOk(e) {
        var checkeds = [];
        e.find('input[name="signInId"]:checked').each(function (i, b) {
          checkeds.push(b.value);
        });
        PLU.setCache("signInArrayrc", checkeds.join(","));
        PLU.goSign(checkeds, true);
      },
      onNo: function onNo() { },
      afterOpen: function afterOpen($el) {
        $el.find(".signInBtn").click(function (e) {
          var btnSid = $(e.currentTarget).attr("data-sid");
          PLU.goSign(btnSid, true);
        });
        $el.find(".signInAll").click(function (e) {
          $el.find('input[name="signInId"]').each(function () {
            $(this).prop("checked", true);
          });
        });
      }
    });
  },
  //================================================================================================
  autoSwords: function autoSwords(callback) {//论剑
    UTIL.addSysListener("sword", function (b, type, subtype, msg) {
      if (type != "notice" || msg.indexOf("试剑") == -1) return;
      if (msg.indexOf("5/5") > 0 || !msg.indexOf("你今天试剑次数已达限额")) {
        UTIL.delSysListener("sword");
        callback && callback();
      } else PLU.execActions("swords fight_test go");
    });
    PLU.execActions("swords;swords select_member heimuya_dfbb;swords select_member qingcheng_mudaoren;swords select_member tangmen_madam;swords fight_test go");
  },
  //================================================================================================
  autoGetVipReward: function autoGetVipReward(callback) {
    var _vipInfo$get, _vipInfo$get2, _vipInfo$get3, _vipInfo$get4, _vipInfo$get5, _vipInfo$get6, _vipInfo$get7, _vipInfo$get8, _vipInfo$get9, _vipInfo$get10, _vipInfo$get11;
    var acts = "";
    var vipInfo = g_obj_map.get("msg_vip");
    if (vipInfo.get("get_vip_drops") == 0) acts += "vip drops;";
    if (vipInfo.get("finish_sort") % 1000 < 5) acts += "#5 vip finish_sort;";
    if (vipInfo.get("finish_dig") % 1000 < 10) acts += "#10 vip finish_dig;";
    if (vipInfo.get("finish_diaoyu") % 1000 < 10) acts += "#10 vip finish_diaoyu;";
    if (vipInfo.get("do_task_num") % 1000 < 10) acts += "#10 vip finish_big_task;";
    if (vipInfo.get("family_quest_count") % 1000 < 25) acts += "#25 vip finish_family;";
    if (vipInfo.get("finish_fenzheng") % 1000 < 5) acts += "#5 vip finish_fenzheng;";     
    if (g_obj_map.get("msg_clan_view") && vipInfo.get("clan_quest_count") % 1000 < 20) acts += "#20 vip finish_clan;";
    if ((_vipInfo$get = vipInfo.get("saodang_fb_1")) !== null && _vipInfo$get !== void 0 && _vipInfo$get.split(",")[2] || 0 % 1000 < 4) acts += "#4 vip finish_fb dulongzhai;";
    if ((_vipInfo$get2 = vipInfo.get("saodang_fb_2")) !== null && _vipInfo$get2 !== void 0 && _vipInfo$get2.split(",")[2] || 0 % 1000 < 4) acts += "#4 vip finish_fb junying;";
    if ((_vipInfo$get3 = vipInfo.get("saodang_fb_3")) !== null && _vipInfo$get3 !== void 0 && _vipInfo$get3.split(",")[2] || 0 % 1000 < 4) acts += "#4 vip finish_fb beidou;";
    if ((_vipInfo$get4 = vipInfo.get("saodang_fb_4")) !== null && _vipInfo$get4 !== void 0 && _vipInfo$get4.split(",")[2] || 0 % 1000 < 4) acts += "#4 vip finish_fb youling;";
    if ((_vipInfo$get5 = vipInfo.get("saodang_fb_5")) !== null && _vipInfo$get5 !== void 0 && _vipInfo$get5.split(",")[2] || 0 % 1000 < 3) acts += "#3 vip finish_fb siyu;";
    if ((_vipInfo$get6 = vipInfo.get("saodang_fb_6")) !== null && _vipInfo$get6 !== void 0 && _vipInfo$get6.split(",")[2] || 0 % 1000 < 3) acts += "#3 vip finish_fb changleweiyang;";
    if ((_vipInfo$get7 = vipInfo.get("saodang_fb_7")) !== null && _vipInfo$get7 !== void 0 && _vipInfo$get7.split(",")[2] || 0 % 1000 < 3) acts += "#3 vip finish_fb heishuihuangling;";
    if ((_vipInfo$get8 = vipInfo.get("saodang_fb_8")) !== null && _vipInfo$get8 !== void 0 && _vipInfo$get8.split(",")[2] || 0 % 1000 < 3) acts += "#3 vip finish_fb jiandangfenglingdu;";
    if ((_vipInfo$get9 = vipInfo.get("saodang_fb_9")) !== null && _vipInfo$get9 !== void 0 && _vipInfo$get9.split(",")[2] || 0 % 1000 < 3) acts += "#3 vip finish_fb tianshanlongxue;";
    if ((_vipInfo$get10 = vipInfo.get("saodang_fb_10")) !== null && _vipInfo$get10 !== void 0 && _vipInfo$get10.split(",")[2] || 0 % 1000 < 3) acts += "#3 vip finish_fb sizhanguangmingding;";
    if ((_vipInfo$get11 = vipInfo.get("saodang_fb_11")) !== null && _vipInfo$get11 !== void 0 && _vipInfo$get11.split(",")[2] || 0 % 1000 < 3) acts += "#3 vip finish_fb bajieshendian;";
    acts += "home;";
    PLU.execActions(acts, function () {
      callback && callback();
    });
  },
  autoShaodan: function autoShaodan(callback) {
    var _vipInfo$get12, _vipInfo$get13, _vipInfo$get14, _vipInfo$get15, _vipInfo$get16, _vipInfo$get17, _vipInfo$get18, _vipInfo$get19, _vipInfo$get20, _vipInfo$get21, _vipInfo$get22;
    var acts = "";
    var vipInfo = g_obj_map.get("msg_vip");
    var isVip = vipInfo.get("vip_tm") > 0;
    if ((_vipInfo$get12 = vipInfo.get("saodang_fb_1")) !== null && _vipInfo$get12 !== void 0 && _vipInfo$get12.split(",")[2] || 0 % 1000 < 4) {
      if (isVip) acts += "#4 vip finish_fb dulongzhai;"; else acts += "team create;fb 1;;ak;n;;n;;n;;n;;ka;" + "team create;fb 1;;ak;n;;n;;n;;n;;ka;";
    }
    if ((_vipInfo$get13 = vipInfo.get("saodang_fb_2")) !== null && _vipInfo$get13 !== void 0 && _vipInfo$get13.split(",")[2] || 0 % 1000 < 4) if (isVip) acts += "#4 vip finish_fb junying;"; else acts += "team create;fb 2;;ak;;e;n;event_1_48728674;fb 2;e;s;event_1_41361248;fb 2;e;e;;event_1_43484736;;ka;@赫造基的尸体;@严廷殷的尸体;" + "team create;fb 2;;ak;;e;n;event_1_48728674;fb 2;e;s;event_1_41361248;fb 2;e;e;;event_1_43484736;;ka;@赫造基的尸体;@严廷殷的尸体;";
    if ((_vipInfo$get14 = vipInfo.get("saodang_fb_3")) !== null && _vipInfo$get14 !== void 0 && _vipInfo$get14.split(",")[2] || 0 % 1000 < 4) {
      if (isVip) acts += "#4 vip finish_fb beidou;"; else acts += "team create;fb 3;w;;ak;e;s;;n;e;;event_1_9777898;;ka;@天枢剑客的尸体;" + "team create;fb 3;w;;ak;e;s;;n;e;;event_1_9777898;;ka;@天枢剑客的尸体;";
    }
    if ((_vipInfo$get15 = vipInfo.get("saodang_fb_4")) !== null && _vipInfo$get15 !== void 0 && _vipInfo$get15.split(",")[2] || 0 % 1000 < 4) {
      if (isVip) acts += "#4 vip finish_fb youling;"; else acts += "team create;fb 4;n;;ak;n;;n;;n;;n;;ka;" + "team create;fb 4;n;;ak;n;;n;;n;;n;;ka;";
    }
    if ((_vipInfo$get16 = vipInfo.get("saodang_fb_5")) !== null && _vipInfo$get16 !== void 0 && _vipInfo$get16.split(",")[2] || 0 % 1000 < 3) {
      if (isVip) acts += "#3 vip finish_fb siyu;"; else acts += "team create;fb 5;event_1_26662342;ak;se;;nw;nw;event_1_15727082;;nw;;se;se;event_1_12238479;;sw;;ne;ne;event_1_889199;;ne;;sw;sw;;;;;;;event_1_77337496;;ka;";
    }
    if ((_vipInfo$get17 = vipInfo.get("saodang_fb_6")) !== null && _vipInfo$get17 !== void 0 && _vipInfo$get17.split(",")[2] || 0 % 1000 < 3) {
      if (isVip) acts += "#3 vip finish_fb changleweiyang;"; else acts += "team create;fb 6;event_1_94101353;ak;event_1_8221898;;event_1_18437151;;event_1_74386803;;event_1_39816829;event_1_92691681;event_1_19998221;event_1_62689078;;event_1_85127800;;ask changleweiyang_jiangzuodajiang;event_1_39026868;;s;;ka;";
    }
    if ((_vipInfo$get18 = vipInfo.get("saodang_fb_7")) !== null && _vipInfo$get18 !== void 0 && _vipInfo$get18.split(",")[2] || 0 % 1000 < 3) if (isVip) acts += "#3 vip finish_fb heishuihuangling;"; else acts += "team create;fb 7;event_1_20980858;;ak;fb 7;event_1_81463220;;fb 7;event_1_5770640;;fb 7;event_1_56340108;;event_1_21387224;s;;ka;event_1_94902320;";
    if ((_vipInfo$get19 = vipInfo.get("saodang_fb_8")) !== null && _vipInfo$get19 !== void 0 && _vipInfo$get19.split(",")[2] || 0 % 1000 < 3) if (isVip) acts += "#3 vip finish_fb jiandangfenglingdu;"; else acts += "team create;fb 8;ak;n;n;fb 8;e;e;fb 8;w;w;fb 8;s;s;event_1_28034211;ka;event_1_17257217;";
    if ((_vipInfo$get20 = vipInfo.get("saodang_fb_9")) !== null && _vipInfo$get20 !== void 0 && _vipInfo$get20.split(",")[2] || 0 % 1000 < 3) if (isVip) acts += "#3 vip finish_fb tianshanlongxue;"; else acts += "team create;fb 9;;ak;n;;n;;n;;n;;n;;ka;";
    if ((_vipInfo$get21 = vipInfo.get("saodang_fb_10")) !== null && _vipInfo$get21 !== void 0 && _vipInfo$get21.split(",")[2] || 0 % 1000 < 3) if (isVip) acts += "#3 vip finish_fb sizhanguangmingding;"; else acts += "team create;fb 10;;ak;n;;n;;n;;n;;n;;ka;";
    if ((_vipInfo$get22 = vipInfo.get("saodang_fb_11")) !== null && _vipInfo$get22 !== void 0 && _vipInfo$get22.split(",")[2] || 0 % 1000 < 3) if (isVip) acts += "#3 vip finish_fb bajieshendian;"; else acts += "team create;fb 11;;ak;n;;n;;n;;n;;n;;ka;";
    acts += "home;";
    PLU.execActions(acts, function () {
      callback && callback();
    });
  },
  //================================================================================================
  getClanInfo: function getClanInfo(callback) {
    var openClanTimeout = setTimeout(function () {
      UTIL.delSysListener("listenOpenClan");
      callback && callback(0);
    }, 5000);
    UTIL.addSysListener("listenOpenClan", function (b, type, subtype, msg) {
      if (type == "clan") {
        UTIL.delSysListener("listenOpenClan");
        clearTimeout(openClanTimeout);
        clickButton("prev");
        //console.log(g_obj_map.get("msg_clan_view"))
        callback && callback(1);
      }
    });
    clickButton("clan");
  },
  getVipInfo: function getVipInfo(callback) {
    var openVipTimeout = setTimeout(function () {
      UTIL.delSysListener("listenOpenVip");
      callback && callback(0);
    }, 5000);
    UTIL.addSysListener("listenOpenVip", function (b, type, subtype, msg) {
      if (type == "vip") {
        UTIL.delSysListener("listenOpenVip");
        clearTimeout(openVipTimeout);
        clickButton("prev");
        //console.log(g_obj_map.get("msg_vip"))
        callback && callback(1);
      }
    });
    clickButton("vip");
  },
  //================================================================================================
  goSign: function goSign(param, rcrenwu) {
    if (!param) {
      return YFUI.writeToOut("<span style='color:#FFF;'>=====结束====记得换套装哦==</span>");
    } else if (param.length == 0) {
      return YFUI.writeToOut("<span style='color:#FFF;'>=====签到结束====记得换套装哦==</span>");
    }
    var sid = null;
    if (_typeof(param) == "object") {
      sid = param.shift();
    } else {
      sid = param;
      param = null;
    }
    var signD = (rcrenwu ? PLU.rcrenwu : PLU.signInMaps)[sid];
    if (signD.c != undefined) {
      if (signD.c()) {
        if (signD.fn) {
          signD.fn(function () {
            PLU.goSign(param, rcrenwu);
          });
        } else if (signD.go) {
          PLU.execActions(signD.go, function () {
            PLU.goSign(param, rcrenwu);
          });
        }
      } else {
        PLU.goSign(param, rcrenwu);
      }
    } else {
      if (signD.fn) {
        signD.fn(function () {
          PLU.goSign(param, rcrenwu);
        });
      } else if (signD.go) {
        PLU.execActions(signD.go, function () {
          PLU.goSign(param, rcrenwu);
        });
      }
    }
  },
  //================================================================================================
  initSignInMaps: function initSignInMaps() {
    var _this = this;
    this.getVipInfo(function (b) {
      _this.getClanInfo(function (a) { });
    });
    this.signInMaps = [{
      n: "扬州签到",
      f: true,
      go: "jh 5;n;n;n;w;look_npc yangzhou_yangzhou4;sign7;home;"
    }, {
      n: "每日礼包",
      f: true,
      go: "jh 1;event_1_57222966;event_1_48246976;event_1_85373703;home;fudi houshan fetch;fudi juxian mpay;fudi juxian fetch_zhuguo;home;swords report go;"
    }, {
      n: "潜龙礼包", 
      f: true,
      go: "jh 1;event_1_16472313;event_1_38436482;w;event_1_26383297;event_1_21318613;home;"
    }, {
      n: "分享奖励",
      f: true,
      go: "share_ok 1;share_ok 2;share_ok 3;share_ok 4;share_ok 5;share_ok 7;home;clan fb open shenshousenlin;clan fb open daxuemangongdao;clan fb open longwulianmoge;clan fb open_go2 kehanjinzhang2;"
    }, {
      n: "南诏投资",
      f: true,
      go: "jh 54;#4 nw;#2 w;#4 n;#2 e;n;#2 e;event_1_62143505 go;;;event_1_62143505 get;event_1_63750325 get;home;"
    }, {
      n: "消费积分",
      f: true,
      go: "jh 1;e;n;e;e;event_1_44731074;event_1_8041045;event_1_8041045;event_1_29721519;home;"
    }, {
      n: "打坐睡床",
      f: true,
      go: "home;exercise stop;exercise;golook_room;sleep_hanyuchuang;fudi shennong fetch;home;"
    }, {
      n: "买引路蜂",
      f: true,
      go: "shop money_buy mny_shop2_N_10;home;vip;"
    }, {
      n: "续约会员",
      go: "jh 1;event_1_45018293;home;"
    }, {
      n: "领取工资",
      f: true,
      go: "home;work click maikuli;work click duancha;work click dalie;work click baobiao;work click maiyi;work click xuncheng;work click datufei;work click dalei;work click kangjijinbin;work click zhidaodiying;work click dantiaoqunmen;work click shenshanxiulian;work click jianmenlipai;work click dubawulin;work click youlijianghu;work click yibangmaoxiang;work click zhengzhanzhongyuan;work click taofamanyi;public_op3;home;"
    }, {
      n: "爬楼奖励",
      f: true,
      go: "home;cangjian get_all;xueyin_shenbinggu blade get_all;xueyin_shenbinggu unarmed get_all;xueyin_shenbinggu throwing get_all;xueyin_shenbinggu spear get_all;xueyin_shenbinggu hammer get_all;xueyin_shenbinggu axe get_all;xueyin_shenbinggu whip get_all;xueyin_shenbinggu stick get_all;xueyin_shenbinggu staff get_all;home;"
    }, {
      n: "吃九花丸",
      go: "items use obj_jiuhuayulouwan;home;"
    }, {
      n: "银两上香",
      c: function c() {
        return !!g_obj_map.get("msg_clan_view");
      },
      go: "#20 clan incense yx;home;"
    }, {
      n: "VIP 福利",
      c: function c() {
        return g_obj_map.get("msg_vip") && g_obj_map.get("msg_vip").get("vip_tm") > 0 && g_obj_map.get("msg_vip").get("get_vip_drops") == 0;
      },
      go: "vip drops;home;"
    }, {
      n: "VIP 暴击",
      c: function c() {
        return g_obj_map.get("msg_vip") && g_obj_map.get("msg_vip").get("vip_tm") > 0 && g_obj_map.get("msg_vip").get("do_task_num") % 1000 < 10;
      },
      fn: PLU.saodbj
    }, {
      n: "VIP 师门",
      c: function c() {
        return g_obj_map.get("msg_vip") && g_obj_map.get("msg_vip").get("vip_tm") > 0 && g_obj_map.get("msg_vip").get("family_quest_count") % 1000 < 25;
      },
      fn: PLU.saodsm
    }, {
      n: "VIP 帮派",
      c: function c() {
        return g_obj_map.get("msg_vip") && g_obj_map.get("msg_vip").get("vip_tm") > 0 && g_obj_map.get("msg_clan_view") && g_obj_map.get("msg_vip").get("clan_quest_count") % 1000 < 20;
      },
      go: "#20 vip finish_clan;#3 clan fb go_saodang shenshousenlin;#3 clan fb go_saodang daxuemangongdao;#3 clan fb go_saodang longwulianmoge;#3 clan fb go_saodang kehanjinzhang2;"
    }, {
      n: "VIP 排行",
      c: function c() {
        return g_obj_map.get("msg_vip") && g_obj_map.get("msg_vip").get("vip_tm") > 0 && g_obj_map.get("msg_vip").get("finish_sort") % 1000 < 5;
      },
      go: "#5 vip finish_sort;"
    }, {
      n: "VIP 寻宝",
      c: function c() {
        return g_obj_map.get("msg_vip") && g_obj_map.get("msg_vip").get("vip_tm") > 0 && g_obj_map.get("msg_vip").get("finish_dig") % 1000 < 10;
      },
      go: "#10 vip finish_dig;"
    }, {
      n: "VIP 钓鱼",
      c: function c() {
        return g_obj_map.get("msg_vip") && g_obj_map.get("msg_vip").get("vip_tm") > 0 && g_obj_map.get("msg_vip").get("finish_diaoyu") % 1000 < 10;
      },
      go: "#10 vip finish_diaoyu;"
    },
    //{n:'VIP 扫荡',c:function(){return g_obj_map.get("msg_vip")&&g_obj_map.get("msg_vip").get("vip_tm")>0},fn:PLU.autoVipShaodan},
    {
      n: "扫荡副本",
      fn: PLU.autoShaodan
    }, {
      n: "VIP 纷争",
      c: function c() {
        return g_obj_map.get("msg_vip") && g_obj_map.get("msg_vip").get("vip_tm") > 0 && g_obj_map.get("msg_vip").get("finish_fenzheng") % 1000 < 5;
      },
      go: "#5 vip finish_fenzheng;"
    }, {
      n: "打小龙人",
      fn: PLU.saoxlr
    }, {
      n: "玄铁采矿",
      go: "jh 26;w;w;n;e;e;event_1_18075497;w;w;n;event_1_14435995;home;jh 35;nw;nw;nw;n;ne;nw;w;nw;e;e;e;e;e;se;n;n;w;n;w;event_1_53278632;sousuo;sousuo;home;"
    }, {
      n: "求教阿不",
      go: "jh 31;n;se;e;se;s;s;sw;se;se;e;nw;e;ne;n;ne;n;n;n;n;n;n;n;n;n;w;w;event_1_57281457;event_1_10395181;;home;"
    }, {
      n: "绝情鳄鱼",
      go: "jh 37;n;e;e;nw;nw;w;n;e;n;e;e;e;ne;ne;ne;se;n;event_1_97487911;home;"
    }, {
      n: "少林渡劫",
      go: "jh 13;e;s;s;w;w;w;;event_1_38874360;;kill?渡风神识;;home;"
    }, {
      n: "天山七侠",
      fn: PLU.TianShan7Xia
    }, {
      n: "明教毒魔",
      go: "jh 18;n;nw;n;n;n;n;n;ne;n;n;n;n;n;n;n;n;n;w;nw;nw;event_1_70957287;;kill?九幽毒魔;;home;"
    },
    //{ n: "侠客看书", go: "jh 36;yell;e;ne;ne;ne;e;e;e;event_1_9179222;e;event_1_11720543;home;" },
    //{ n: "白驼闯阵", go: "jh 21;n;n;n;n;w;;ak;w;;w;ka;w;;fight baituo_junzhongzhushuai;home;" },
    //{ n: "青城孽龙", go: "jh 15;n;nw;w;nw;n;event_1_14401179;;kill?孽龙之灵;home;" },
    //{ n: "峨眉解围", go: "jh 8;ne;e;e;e;n;;kill?赤豹死士;n;n;;kill?黑鹰死士;n;n;;kill?金狼大将;home;" },
    //{ n: "大昭岩画", go: "jh 26;w;w;n;w;w;w;n;n;place?阴山岩画;event_1_12853448;home;" },
    //{ n: "恒山盗贼", go: "jh 9;event_1_20960851;;kill?杀神寨匪首;home;" },
    //{n: "白驮奇袭",go: "jh 21;n;n;n;n;e;e;e;e;e;e;e;s;s;event_1_66710076;s;e;ne;e;se;n;event_1_53430818;n;;kill?豹军主帅;s;s;nw;n;n;;kill?虎军主帅;s;s;se;e;e;e;;kill?鹰军主帅;w;w;w;nw;w;nw;event_1_89411813;;kill?颉利;home;"},
    //{ n: "十八木人", go: "jh 41;se;e;e;se;se;se;se;se;se;event_1_57976870;n;n;n;event_1_91914705;e;e;e;e;#2 vent_1_85950082;home;" },
    //{ n: "西安采莲", go: "jh 2;#19 n;e;n;n;n;w;event_1_31320275;home;" },
    {
      n: "论剑试剑",
      fn: PLU.autoSwords
    }, {
      n: "唐门冰月",
      fn: PLU.autoBingyue
    }, {
      n: "垂钓一夏",
      go: "jh 5;n;w;event_1_3144437;home;"
    }, {
      n: "华山祭酒",
      go: "jh 4;n;n;n;n;n;n;n;n;n;e;n;n;n;n;n;event_1_355715;event_1_355715;;"
    }, {
      n: "领取矿镐",
      fn: PLU.DailyOres
    },{
      n: "清明礼包",
      go: "jh 1;#4 w;n;event_1_85364899;home;"
    }, {
      n: "龙辰礼包",
      go: "items get_store /obj/quest/jinyuhufusuipian;=200;jh 1;e;#3 n;n;w;event_1_90287255 go go_lsyj;#6 event_1_56364978;#6 event_1_49251725;home;"
    },{
    n: "自动答题",
    fn: PLU.loopAnswerQues
    }, {
      n: "",
      go: "home;"
    }];
  },
  //================================================================================================
  initrichangrenwu: function initrichangrenwu() {
    var _this = this;
    this.getVipInfo(function (b) {
      _this.getClanInfo(function (a) { });
    });
    this.rcrenwu = [
      //{ n: "副本十一", fn: PLU.killFB11 },
      {
        n: "副本十一",
        go: "fb 11;ak;nw;=400;se;n;=400;s;ne;=400;sw;e;=400;w;se;=400;nw;s;=400;n;sw;=400;ne;w;=400;w;=400;e;e;nw;nw;=400;se;se;n;n;=400;s;s;ne;ne;=400;sw;sw;e;e;=400;w;w;se;se;=400;nw;nw;s;s;=400;n;n;sw;sw;=4000;ka;vs:event_1_68529291;"
      }, {
        n: "幽冥后院",
        go: "jh 45;ne;ne;n;n;ne;ne;e;ne;#5 n;ne;ne;#3 n;nw;nw;n;#5 e;event_1_77775145 ymsz_houyuan;se;ak;=400;se;=400;s;=400;w;=400;e;e;=400;w;s;=400;s;=400;s;=400;w;=400;e;e;=400;s;=400;n;e;=400;e;=400;n;=400;s;e;=400;e;=400;n;=500;ka;"
      }, {
        n: "西凉铁剑",
        go: "jh 47;ne;n;n;n;ne;ne;e;e;e;e;ne;n;ne;n;n;n;n;n;nw;nw;ne;n;ne;n;vs:event_1_10117215;"
      }, {
        n: "四大绝杀",
        go: "jh 44;n;n;n;n;e;ne;ne;ne;n;n;n;n;n;nw;nw;nw;w;n;n;n;n;e;n;n;n;n;n;w;w;n;n;n;n;n;n;n;n;vs:event_1_33144912;"
      }, {
        n: "剑宫白猿",
        go: "rank go 204;e;s;s;s;s;s;s;s;s;w;w;n;n;n;n;nw;nw;nw;n;n;n;vs:event_1_79113775;"
      }, {
        n: "十八木人",
        go: "jh 41;se;e;e;se;se;se;se;se;se;event_1_57976870;n;n;n;event_1_91914705;e;e;e;vs:event_1_85950082;"
      }, {
        n: "阎王十殿",
        go: "rank go 223;nw;event_1_42827171;=200;kill yanwangshidian_zhuanlunwang;ak;;ka;;vs:event_1_45876452;=3500;vs:event_1_45876452;"
      }, {
        n: "格斗五十",
        fn: PLU.gedou50
      }, {
        n: "生死双修",
        fn: PLU.piapiapia
      }, {
        n: "讨天命丹",
        fn: PLU.askTianmd
      }, {
        n: "天龙塔林",
        fn: PLU.killtalin
      }, {
        n: "拱辰十三",
        go: "jh 1;e;#4 n;w;event_1_90287255 go 9;n;#3 w;n;event_1_63249896;=500;ak;=500;ka;=500;event_1_23639130;=500;golook_room"
      }, {
        n: "南诏宝斋",
        fn: PLU.rongbaoz
      }, {
        n: "南诏奏乐",
        fn: PLU.nanzzouy
      }, {
        n: "南诏问诊",
        fn: PLU.nanzwenz
      }, {
        n: "修补长城",
        go: "rank go 311;s;s;sw;se;se;se;e;se;se;sw;sw;=500;event_1_71928780;"
      }, {
        n: "西夏灵鹫",
        go: "rank go 311;event_1_57364318;=500;ak;;ka;=500;event_1_86741439;"
      }, {
        n: "西夏哈日",
        fn: PLU.goHaRi
      }, {
        n: "西夏九翼",
        go: "rank go 311;s;s;sw;log?自己换装备打吧;"
      }, {
        n: "",
        go: "home;"
      },
    ];
  },
  //================================================================================================
  TianShan7Xia: function TianShan7Xia(callback) {
    PLU.execActions("jh 39;ne;e;n;ne;ne;n;ne;nw;ne;nw;event_1_17801939;place?星星峡;ne;ne;nw;nw", function () {
      PLU.autoFight({
        targetKey: "\nevent_1_37376258",
        // 懒的改函数了,直接注入(
        fightKind: " ",
        onFail: function onFail() {
          PLU.execActions("home;", function () {
            callback && callback();
          });
        },
        onEnd: function onEnd() {
          PLU.execActions("home;", function () {
            callback && callback();
          });
        }
      });
    });
  },
   //================================================================================================
   answerQues($btn){
    let btnFlag = PLU.setBtnRed($btn)
    if(!btnFlag) {
        PLU.STO.ansTo && clearTimeout(PLU.STO.ansTo);
        return UTIL.delSysListener("onAnswerQuestions")
    }
    YFUI.showPop({
        title:"答题",
        text:"是否开始答题?",
        onOk(){
            PLU.loopAnswerQues($btn)
        },
        onNo(){
            PLU.setBtnRed($btn,0)
        }
    })
},
//================================================================================================
loopAnswerQues($btn){
    let setAnswerTimeout=function(){
        PLU.STO.ansTo && clearTimeout(PLU.STO.ansTo);
        PLU.STO.ansTo = setTimeout(()=>{
            UTIL.delSysListener("onAnswerQuestions")
            PLU.setBtnRed($btn,0)
            YFUI.writeToOut("<span style='color:#FFF;'>--答案超时!--</span>")
            return
        },5000)
    };
    UTIL.addSysListener("onAnswerQuestions", function(b, type, subtype, msg) {
        if (type == "notice" && msg.indexOf("每日武林知识问答次数已经达到限额")>-1) {
            UTIL.delSysListener("onAnswerQuestions")
            PLU.STO.ansTo && clearTimeout(PLU.STO.ansTo);
            PLU.setBtnRed($btn,0)
            YFUI.showPop({
                title:"答题结束",
                text:"是否回首页?",
                autoOk:10,
                onOk(){
                    clickButton("home")
                },
                onNo(){}
            })
            return;
        }
        if (type != "show_html_page") return;
        var qs = msg.split("\n");
        if (!qs) return;
          if (qs[0].indexOf("知识问答第") < 0)  return;
        setAnswerTimeout()
        var qus = "";
        for (var i = 1; i < qs.length; i++) {
            qus = $.trim(UTIL.filterMsg(qs[i]));
            if (qus.length > 0) break;
        }
        if (qus.indexOf("回答正确")>=0) {
            clickButton('question')
            return;
        }
        var answer = PLU.getAnswer2Question(qus);
        if (answer == null){
            UTIL.delSysListener("onAnswerQuestions")
            PLU.STO.ansTo && clearTimeout(PLU.STO.ansTo);
            PLU.setBtnRed($btn,0)
            YFUI.writeToOut("<span style='color:#FFF;'>--未找到答案:"+qus+"--</span>")
            return
        }
        setTimeout(()=>{
            clickButton("question " + answer);
        },300)
    })
    setAnswerTimeout()
    clickButton('question')
},
//================================================================================================
getAnswer2Question(localQuestion) {
    var answer = YFD.QuestAnsLibs[localQuestion]
    if (answer) return answer;
    var halfQuestion = localQuestion.substring(localQuestion.length / 2)
    for (var quest in YFD.QuestAnsLibs) {
      if (quest.indexOf(halfQuestion) == 0) {
        return YFD.QuestAnsLibs[quest];
      }
    }
    return null;
},
/*
  loopAnswerQues: function (_loopAnswerQues) {
    function loopAnswerQues(_x) {
      return _loopAnswerQues.apply(this, arguments);
    }
    loopAnswerQues.toString = function () {
      return _loopAnswerQues.toString();
    };
    return loopAnswerQues;
  }(function (callback) {
    var setAnswerTimeout = function setAnswerTimeout() {
      PLU.STO.ansTo && clearTimeout(PLU.STO.ansTo);
      PLU.STO.ansTo = setTimeout(function () {
        UTIL.delSysListener("onAnswerQuestions");
        YFUI.writeToOut("<span style='color:#FFF;'>--答案超时!--</span>");
      }, 5000);
    };
    UTIL.addSysListener("onAnswerQuestions", function (b, type, subtype, msg) {
      if (type == "notice" && msg.indexOf("每日武林知识问答次数已经达到限额") > -1) {
        if (callback) callback(); else clickButton("home");
        UTIL.delSysListener("onAnswerQuestions");
        PLU.STO.ansTo && clearTimeout(PLU.STO.ansTo);
        return;
      }
      if (type != "show_html_page") return;
      var qs = msg.split("\n");
      if (!qs) return;
      if (qs[0].indexOf("知识问答第") < 0) return;
      setAnswerTimeout();
      var qus = "";
      for (var i = 1; i < qs.length; i++) {
        qus = $.trim(UTIL.filterMsg(qs[i]));
        if (qus.length > 0) break;
      }
      if (qus.indexOf("回答正确") >= 0) {
        clickButton("question");
        return;
      }
      var answer = PLU.getAnswer2Question(qus);
      if (answer == null) {
        UTIL.delSysListener("onAnswerQuestions");
        PLU.STO.ansTo && clearTimeout(PLU.STO.ansTo);
        PLU.setBtnRed($btn, 0);
        YFUI.writeToOut("<span style='color:#FFF;'>--未找到答案:" + qus + "--</span>");
        return;
      }
      setTimeout(function () {
        clickButton("question " + answer);
      }, 300);
    });
    PUL.loopAnswerQues;
    setAnswerTimeout();
    clickButton("question");
  }),
  //================================================================================================
  getAnswer2Question: function getAnswer2Question(localQuestion) {
    var answer = PLU.YFD.QuestAnsLibs[localQuestion];
    if (answer) return answer;
    var halfQuestion = localQuestion.substring(localQuestion.length / 2);
    for (var quest in PLU.YFD.QuestAnsLibs) {
      if (quest.indexOf(halfQuestion) == 0) {
        return PLU.YFD.QuestAnsLibs[quest];
      }
    }
    return null;
  },
  */
  //================================================================================================
  autoBingyue: function autoBingyue(callback) {
    PLU.execActions("jh 14;w;n;n;n;n;event_1_32682066;;;", function () {
      setTimeout(function () {
        PLU.killBingYue(function () {
          if (callback) callback(); else clickButton("home");
        });
      });
    });
  },
  //================================================================================================
  killBingYue: function killBingYue(endCallback) {
    if (parseInt(PLU.getCache("autoPerform")) < 1) {
      PLU.toggleAutoPerform($("#btn_bt_kg_autoPerform"), "autoPerform", 1);
    }
    var tryKill = function tryKill(kname, cb, er) {
      PLU.autoFight({
        targetName: kname,
        fightKind: "kill",
        onFail: function onFail() {
          er && er();
        },
        onEnd: function onEnd() {
          cb && cb();
        }
      });
    };
    PLU.execActions("event_1_48044005;;;;", function () {
      tryKill("冰麟兽", function () {
        PLU.execActions("event_1_95129086;;;;", function () {
          tryKill("玄武机关兽", function () {
            PLU.execActions("event_1_17623983;event_1_41741346;;;;", function () {
              tryKill("九幽魔灵", function () {
                PLU.execActions("s;;;;", function () {
                  tryKill("冰月仙人", function () {
                    endCallback && endCallback();
                  }, function () {
                    endCallback && endCallback();
                  });
                });
              }, function () {
                endCallback && endCallback();
              });
            });
          }, function () {
            endCallback && endCallback();
          });
        });
      }, function () {
        endCallback && endCallback();
      });
    });
  },
  //================================================================================================
  autoXTL1: function autoXTL1() {
    clickButton("team create");
    PLU.killLHYD(function (err) {
      return YFUI.writeToOut("<span style='color:#FFF;'>--结束--" + err + "</span>");
    });
  },
  autoXTL2: function autoXTL2() {
    clickButton("team create");
    PLU.killSY(function (err) {
      return YFUI.writeToOut("<span style='color:#FFF;'>--结束--" + err + "</span>");
    });
  },
  autoFB11: function autoFB11() {
    //clickButton("team create");
    YFUI.showPop({
      title: "副本11",
      text: "请自行组队,准备好可以开始",
      onOk: function onOk(val) {
        PLU.killFB11(function (err) {
          return YFUI.writeToOut("<span style='color:#FFF;'>--结束--" + err + "</span>");
        });
      },
      onNo: function onNo() { }
    });
  },
  autoFB10: function autoFB10() {
    clickButton("team create");
    PLU.killFB10(function (err) {
      return YFUI.writeToOut("<span style='color:#FFF;'>--结束--" + err + "</span>");
    });
  },
  autoyoumhy: function autoyoumhy() {
    clickButton("team create");
    PLU.killyoumhy(function (err) {
      return YFUI.writeToOut("<span style='color:#FFF;'>--结束--" + err + "</span>");
    });
  },
  autoERG: function autoERG() {
    PLU.killERG(function (err) {
      return YFUI.writeToOut("<span style='color:#FFF;'>--结束--" + err + "</span>");
    });
  },
  //================================================================================================
  scanPuzzle: function scanPuzzle() {
    PLU.TMP.autoscan = true;
    PLU.TMP.autotask = true;
    UTIL.addSysListener("reload", function (b, type, subtype, msg) {
      if (type == "notice" && subtype == "notify_fail" && msg == "你的背包里没有这个物品。\n") location.reload();
    });
    if (!PLU.TMP.index) PLU.TMP.index = 0;
    PLU.TMP.func = function () {
      PLU.execActions(PLU.linkPath(PLU.queryRoomPath(), PLU.YFD.mapsLib.Npc_New[PLU.TMP.index].way), function () {
        PLU.execActions(";;ask " + PLU.YFD.mapsLib.Npc_New[PLU.TMP.index].id, function () {
          PLU.TMP.puzzleTimeOut = setTimeout(function () {
            if (!PLU.TMP.puzzleWating.status) {
              PLU.TMP.index++;
              PLU.TMP.func();
            }
          }, PLU.getCache("puzzleTimeOut") * 1000);
        });
      });
    };
    PLU.TMP.func();
  },
  puzzleKey: function puzzleKey() {
    YFUI.showInput({
      title: "密码设置",
      text: "此设置跨角色共享<br>指定暴击密码由谁提交(输入角色ID)",
      value: localStorage.getItem("masterAcc") || PLU.accId,
      onOk: function onOk(val) {
        localStorage.setItem("masterAcc", String(val));
      },
      onNo: function onNo() { }
    });
  },
  puzzleTimeOut: function puzzleTimeOut() {
    YFUI.showInput({
      title: "超时设置",
      text: "一条谜题最多耗时(单位:秒),0为不超时,暂不推荐设置为0",
      value: PLU.getCache("puzzleTimeOut") || 60,
      onOk: function onOk(val) {
        PLU.setCache("puzzleTimeOut", val);
      },
      onNo: function onNo() { }
    });
  },
  path4FHMJ: function path4FHMJ(endCallback) {
    PLU.execActions("jh");
    if (g_obj_map.get("msg_jh_list") && g_obj_map.get("msg_jh_list").get("finish43") == 0) {
      return "jh 1;e;n;n;n;n;w;event_1_90287255 go 6;e;s;sw;se;ne;se;s;";
    } else {
      return "jh 43;sw;sw;sw;s;se;se;se;e;s;sw;se;ne;se;;s;";
    }
  },
  //琅嬛玉洞
  killLHYD: function killLHYD(endCallback) {
    PLU.execActions(PLU.path4FHMJ() + ";event_1_52732806", function (f) {
      if (!f) return endCallback && endCallback(1);
      PLU.execActions("kill langhuanyudong_qixing;;kill langhuanyudong_benkuangxiao;;sw;;kill murong_tuboguoshi;;;get?吐蕃国师的尸体;;", function (f2) {
        if (!f2) return endCallback && endCallback(2);
        PLU.execActions("ne;n;;event_1_96023188;w;event_1_39972900;w;event_1_92817399;w;event_1_91110342;s;event_1_74276536;se;event_1_14726005;se;se;;;", function () {
          var sd = g_obj_map.get("msg_room").elements.find(function (e) {
            return e.value.indexOf("扫荡") >= 0;
          });
          if (sd) {
            var cmd_sd = g_obj_map.get("msg_room").get(sd.key.split("_")[0]);
            PLU.doSaoDang("langhuanyudong", cmd_sd, function () {
              PLU.killLHYD(endCallback);
            });
          } else {
            endCallback && endCallback(5);
          }
        });
      });
    });
  },
  //山崖
  killSY: function killSY(endCallback) {
    PLU.execActions(PLU.path4FHMJ() + "event_1_64526228", function (f) {
      if (!f) return endCallback && endCallback(1);
      PLU.execActions("kill shanya_muzhaoxue;;kill shanya_qiongduwu;;kill shanya_yuanzhenheshang;;;", function (f2) {
        if (!f2) return endCallback && endCallback(2);
        PLU.execActions("w;event_1_61179401;n;event_1_93134350;n;event_1_60227051;n;event_1_66986009;;kill mingjiao_mengmianrentoumu;;;;get?蒙面人头目的尸体;;", function () {
          PLU.execActions("n;event_1_53067175;n;event_1_58530809;w;event_1_86449371;event_1_66983665;;", function () {
            var sd = g_obj_map.get("msg_room").elements.find(function (e) {
              return e.value.indexOf("扫荡") >= 0;
            });
            if (sd) {
              var cmd_sd = g_obj_map.get("msg_room").get(sd.key.split("_")[0]);
              PLU.doSaoDang("shanya", cmd_sd, function () {
                PLU.killSY(endCallback);
              });
            } else {
              endCallback && endCallback(5);
            }
          });
        });
      });
    });
  },
  // 恶人谷
  killERG: function killERG(endCallback) {
    var flag = false;
    PLU.execActions("rank go 236;", function (f) {
      if (!f) return endCallback && endCallback(1);
      PLU.execActions("nw;n;n;n;n;n;n;wait#kill tianlongsi_lidazui;get?李大嘴的尸体;", function (f2) {
        if (!f2) return endCallback && endCallback(2);
        PLU.execActions("nw;nw;n;wait#kill tianlongsi_baikaixin;get?白开心的尸体;", function (f3) {
          if (!f3) return endCallback && endCallback(3);
          PLU.execActions("home;items use tianlongsi_nanguagu;items use tianlongsi_sanxiangmenmgzhuling;");
        });
      });
    });
  },
  buyJHYL: function buyJHYL() {
    UTIL.addSysListener("9HYL", function (b, type, subtype, msg) {
      if (type != "show_html_page") return;
      var sp = msg.match(/你有四海商票\[1;32mx(\d+)\[2;37;0m/);
      if (!sp) return;
      sp = sp[1];
      if (sp < 21750) return YFUI.writeToOut("<span style='color:#FF0;'>--你的商票不足21750--</span>"); else PLU.execActions("reclaim buy 27 go 45;" +
        // 矢车菊
        "reclaim buy 46 go 45;" +
        // 雪英
        "reclaim buy 45 go 45;" +
        // 忘忧草
        "reclaim buy 29 go 15;" +
        // 凤凰木
        "reclaim buy 36 go 5;" +
        // 洛神花
        "reclaim buy 31 go 45;" +
        // 君影草
        "reclaim buy 32 go 45;" +
        // 仙客来
        "reclaim buy 33 go 15;" +
        // 凌霄花
        "reclaim buy 34 go 15;" + (
          // 夕雾草
          UTIL.inHome() ? "go_lookroom" : "home"));
      UTIL.delSysListener("9HYL");
    });
    PLU.execActions("reclaim recl");
  },
  //============日常任务===================================================================
  LZqiangss: function LZqiangss() {//龙族强身术
    var xueqsscs=10;
    YFUI.showInput({
      title: "龙族强身术",
      text: "请输入你要学习的次数,默认是10次=100级",
      value: 10,
      onOk: function onOk(val) {
        xueqsscs = parseInt(val);
        PLU.execActions("event_1_95170966");//10次
      },
      onNo: function onNo() {
        UTIL.delSysListener("LZqiangss");
      },
    });
    if ((xueqsscs && type === "notice" && msg.indexOf("消耗:潜能x5000亿,武林名望值x1000") !== -1)) {
      setTimeout(function () {
        //PLU.execActions("event_1_44239995")//1次
        PLU.execActions("event_1_95170966");//10次
        xueqsscs--;
      }, 200);
    }
    else if (type === "notice" && (msg.indexOf("没有足够的") !== -1 || msg.indexOf("不够") !== -1)) {
      UTIL.delSysListener("LZqiangss");
      setTimeout(function () {
        UTIL.delSysListener("LZqiangss");
        YFUI.writeToOut("<span style='color:yellow;'>=====完成学习龙族强身术=====</span>");
      }, 500);
    }
    setTimeout(function () {
      PLU.execActions("items get_store /obj/book/xiaoyunlongtengjiancanye"); //霄云龙腾剑残页
      PLU.execActions("items get_store /obj/baoshi/hongbaoshi8"); //天神红宝石
      PLU.execActions("items get_store /obj/book/neigongxinfamiji"); //内功心法秘籍
      PLU.execActions("items get_store /obj/shop/wulingchangye"); //武林至高绝学残页
      PLU.execActions("items get_store /obj/med/jinengtianshu"); //技能天书
      PLU.execActions("items get_store /obj/shop/jiuzhuanshendan"); //九转神丹
    }, 250);
  },

  tiejian: function tiejian() {
    //西凉铁剑
    PLU.execActions("jh 47;ne;n;n;n;ne;ne;e;e;e;e;ne;n;ne;n;n;n;n;n;nw;nw;ne;n;ne;n;event_1_10117215;;");
  },
  baiyuan: function baiyuan() {
    //剑宫白猿
    PLU.execActions("rank go 204;e;s;s;s;s;s;s;s;s;w;w;n;n;n;n;nw;nw;nw;n;n;n;event_1_79113775;;");
  },
  yanwang10: function yanwang10() {
    //阎王十殿
    PLU.execActions("rank go 223;nw;event_1_42827171;ak;;ka;event_1_45876452;;");
  },
  gedou50: function gedou50(callback) {
    // 格斗五十
    var sjindi = 1;
    UTIL.addSysListener("gedou50", function (b, type, subtype, msg) {
      if (type == "notice") {
        var msgTxt = UTIL.filterMsg(msg);
        if (msgTxt.match("你抽到了")) {
          if (msgTxt.match(/此轮游戏结束/)) {
            PLU.execActions("event_1_36867949 get;event_1_36867949 pay;event_1_36867949 take;"); //拿钱走人再开
          }
          var sjindi = msgTxt.match(/奖池提升至(\d+)金锭/);
          var sjindiNumber = sjindi[1];
          if (sjindiNumber >= 30) {
            YFUI.writeToOut("<span style='color:#FFF;'>--到达--</span>"); //到达地下格斗场
            UTIL.delSysListener("gedou50");
            PLU.execActions("event_1_36867949 get;event_1_23520182;event_1_70249808 go 50;=24400;;attrs;", callback);
          } else {
            PLU.execActions("=300;event_1_36867949 take;"); //抽牌
          }
        }
      }
    });
    PLU.execActions("rank go 195;event_1_36867949 pay;event_1_36867949 take;");
  },
  gongcheng13: function gongcheng13() {
    //拱辰13
    PLU.execActions("jh 1;e;#4 n;w;event_1_90287255 go 9;n;#3 w;n;event_1_63249896;ak;;ka;;event_1_23639130;;");
  },
  rongbaoz: function rongbaoz(callback) {
    var _g_obj_map$get3;
    //荣宝斋
    PLU.execActions("golook_room;");
    var curName = UTIL.filterMsg(((_g_obj_map$get3 = g_obj_map.get("msg_room")) === null || _g_obj_map$get3 === void 0 ? void 0 : _g_obj_map$get3.get("short")) || "");
    if (curName == "拱辰楼十三层") {
      PLU.execActions("event_1_87723605;=500;s;w;w;#10 s;w;w;n;event_1_27429615;", callback);
    } else {
      PLU.execActions("jh 1;e;#4 n;w;event_1_90287255 go 9;n;#5 w;#10 s;w;w;n;event_1_27429615;", callback);
    }
  },
  nanzzouy: function nanzzouy(callback) {
    var _g_obj_map$get4;
    //南诏奏乐
    PLU.execActions("golook_room;");
    var curName = UTIL.filterMsg(((_g_obj_map$get4 = g_obj_map.get("msg_room")) === null || _g_obj_map$get4 === void 0 ? void 0 : _g_obj_map$get4.get("short")) || "");
    if (curName == "容宝斋") {
      PLU.execActions("s;e;e;n;n;w;n;event_1_41100562;;", callback);
    } else {
      PLU.execActions("jh 1;e;#4 n;w;event_1_90287255 go 9;n;#5 w;#8 s;w;n;event_1_41100562;;attrs;", callback);
    }
  },
  killtalin: function killtalin(callback) {
    var _g_obj_map$get5;
    //天龙塔林
    PLU.execActions("golook_room;");
    var curName = UTIL.filterMsg(((_g_obj_map$get5 = g_obj_map.get("msg_room")) === null || _g_obj_map$get5 === void 0 ? void 0 : _g_obj_map$get5.get("short")) || "");
    var cmd = "";
    if (curName == "大鹳淜洲") {
      cmd = "w;sw;s;s;sw;sw;sw;get tianlongsi_putiguo;se;se;se;ne;get tianlongsi_xiaoxianglu;ne;ne;;get tianlongsi_putiguo;nw;nw;nw;";
    } else {
      cmd = "rank go 236;nw;n;n;n;n;n;n;nw;nw;n;n;nw;nw;n;n;nw;ne;event_1_1996692;event_1_10567243;w;sw;s;s;sw;sw;sw;get tianlongsi_putiguo;se;se;se;ne;get tianlongsi_xiaoxianglu;ne;ne;;get tianlongsi_putiguo;nw;nw;nw;";
    }
    PLU.execActions(cmd, function () {
      PLU.execActions("ak;ka;=1500;home;", callback);
      YFUI.writeToOut("<span style='color:#FFF;'>--塔林完成--</span>");
      callback && callback();
    });
  },
  askTianmd: function askTianmd(callback) {
    //讨天命丹
    var countttmd = 0;
    PLU.execActions("rank go 236;nw;n;n;n;n;n;n;nw;nw;n;n;nw;nw;n;n;nw;ne;event_1_1996692;event_1_10567243", function () {
      UTIL.addSysListener("asktmd", function (b, type, subtype, msg) {
        if (type == "notice" && msg.startsWith("你得到天命丹x1")) {
          countttmd++;
          YFUI.writeToOut("<span style='color:yellow;'>=====获得天命丹:" + countttmd + " 次=====</span>");
          if (countttmd >= 10) {
            UTIL.delSysListener("asktmd");
            YFUI.writeToOut("<span style='color:yellow;'>=====讨天命丹完成=====</span>");
            PLU.execActions("golook_room;", function () {
              callback && callback();
            });
          }
        } else if (type == "main_msg" && msg.indexOf("柴绍") >= 0) {
          PLU.execActions(";ask tianlongsi_chaishao;");
        }
      });
      PLU.execActions("ask tianlongsi_chaishao");
    });
  },
  //============周常任务===================================================================
  nanzwenz: function nanzwenz(callback) {
    var _g_obj_map$get6;
    // 南诏问诊
    PLU.execActions("golook_room;");
    var curName = UTIL.filterMsg(((_g_obj_map$get6 = g_obj_map.get("msg_room")) === null || _g_obj_map$get6 === void 0 ? void 0 : _g_obj_map$get6.get("short")) || "");
    var addNanzwenzListener = function addNanzwenzListener() {
        UTIL.addSysListener("nanzwenz", function (b, type, subtype, msg) {
          if (type === "main_msg") {
            var msgTxt = UTIL.filterMsg(msg);
            if (msgTxt.match("问诊完成,获得") || msgTxt.match("你完成了每周的问诊任务")) {
              UTIL.delSysListener("nanzwenz");
              PLU.execActions("log?完成问诊;", callback);
            } else if (msgTxt.match("你正在诊治中,请耐心对待病人。") || msgTxt.match("于是你拿起医圣的银针")) {
              PLU.execActions("=2400;event_1_27222525;");
            }
          }
        });
        PLU.execActions("event_1_27222525;");
      };
    if (curName === "元帅府") {
      PLU.execActions("s;e;#8 n;w;w;s", addNanzwenzListener);
    } else {
      PLU.execActions("jh 1;e;n;n;n;n;w;event_1_90287255 go 9;n;#7 w;s;event_1_12050280;", addNanzwenzListener);
    }
  },
  piapiapia: function piapiapia(callback) {
    PLU.execActions("rank go 233;#3 s;e;ne;event_1_66728795", function () {
      UTIL.addSysListener("waitVS", function(b, type, subtype, msg) {
        if (type == "vs" && subtype == "vs_info") {
          UTIL.delSysListener("waitVS");
          PLU.autoFight({
            targetCommand: "none",
            onFail: function onFail() {
              setTimeout(callback, 1000);
            },
            onEnd: function onEnd() {
              setTimeout(callback, 500);
            }
          });
        }
      })
    });
  },
  //======个人====================================================================================
  saoxlr: function saoxlr(callback) {//刷小龙人
      PLU.execActions("items get_store /obj/shop/meiguihua;items info meigui hua;jh 2;event_1_69287816;ak;");
    UTIL.addSysListener("saoxlr", function (b, type, subtype, msg,) {
      if (type == "items" && subtype == "info" && UTIL.filterMsg(b.get("name")) == "玫瑰花" || type == "notice" && subtype == "notify_fail" && msg.indexOf("你的背包里没有这个物品") == 0) {
        UTIL.delSysListener("meigui");
        var meigui = parseInt(b.get("amount")) || 0;
        if (meigui < 140) {
          PLU.execActions("#".concat(Math.ceil((140 - meigui) / 10), " shop buy shop28_N_10"));
        }
       } else if ((type === "jh" && subtype === "info")) {
            PLU.execActions("=1500;kill snow_xiaolongren;");
        } else if ((type === "vs" && subtype === "text" && msg.indexOf("\n\x1B[1;33m小龙人\x1B[2;37;0m死了。") !== -1)) {
            setTimeout(function () {
              PLU.execActions("=1500;kill snow_xiaolongren;");
            }, 400);
        } else if ((type === "notice" && msg.indexOf("你今天挑战太多了") !== -1)) {
          UTIL.delSysListener("saoxlr");
          PLU.execActions("ka;log?完成小龙人;home;", callback);
        }
      });
    },
  
    saodsm: function saodsm(callback) {//扫荡VIP师门
      PLU.execActions("items get_store /obj/shop/shimenling;items info obj_shimenling;");
      UTIL.addSysListener("saodsm", function (b, type, subtype, msg) {
        if ((type === "items" && subtype === "info" && UTIL.filterMsg(b.get("name")) === "师门令") || (type === "notice" && subtype === "notify_fail" && msg.indexOf("你的仓库里没有这个物品") === 0)) {
            PLU.execActions("items use obj_shimenling;");
          } else if ((type === "notice" && msg.indexOf("使用师门令成功,师门任务次数+") !== -1)) {
            setTimeout(function () {
              PLU.execActions("items use obj_shimenling;");
            }, 200);
          } else if ((type === "notice" && subtype === "notify_fail" && msg.indexOf("你目前不能使用师门令") !== -1)) {
            setTimeout(function () {
              PLU.execActions("vip finish_family;");
            }, 200);
          } else if ((type === "notice" && msg.indexOf("本源无上心经残页x1") !== -1)) {
            setTimeout(function () {
              PLU.execActions("vip finish_family;");
            }, 200);
        } else if ((type === "notice" && subtype === "notify_fail" && msg.indexOf("今日师门任务已做完。") !== -1)) {
          UTIL.delSysListener("saodsm");
          PLU.execActions("log?完成VIP师门;", callback);
        }
      });
    },
    saodbjst: function saodbjst(callback) {//吃石头点暴击
        PLU.execActions("event_1_69809751;event_1_88152825;items info obj_mitiling;");
        UTIL.addSysListener("saodbjst", function (b, type, subtype, msg) {
            if ((type === "items" && subtype === "info" && UTIL.filterMsg(b.get("name")) === "谜题令")) {
                PLU.execActions("items use obj_mitiling;");
            } else if ((type === "notice" && msg.indexOf("使用谜题令成功,可使用谜题卡次数+") !== -1)) {
                setTimeout(function () {
                  PLU.execActions("items use obj_mitiling;");
                }, 200);
            } else if ((type === "notice" && subtype === "notify_fail" && msg.indexOf("你目前不能使用\x1B[1;32m谜题令") !== -1)) {
                setTimeout(function () {
                  PLU.execActions("vip finish_big_task;");
                }, 200);
            } else if ((type === "main_msg" && msg.indexOf("恭喜你,额外获得") !== -1)) {
                setTimeout(function () {
                  PLU.execActions("vip buy_task;vip finish_big_task;");
                }, 200);
            } else if ((type === "notice" && msg.indexOf("今日谜题任务已做完。") !== -1)) {
                UTIL.delSysListener("saodbjst");
                PLU.execActions("log?完成VIP暴击扫荡第二次;", callback);
            }
        });
    },
  saodbj: function saodbj(callback) {//扫荡VIP暴击
        PLU.execActions("wear obj_zhongzuiduxing;wear obj_qingtianwanshi;wear obj_lankeyimeng;wear obj_shanyecunfu;wear obj_xianzhe-xianglian;wear obj_xianzhe-shouzhuo;wear obj_xianzhe-jiezhi;items get_store /obj/shop/mitiling;items info obj_mitiling;");
        UTIL.addSysListener("saodbj", function (b, type, subtype, msg) {
            if ((type === "items" && subtype === "info" && UTIL.filterMsg(b.get("name")) === "谜题令")) {
                PLU.execActions("items use obj_mitiling;");
            } else if ((type === "notice" && msg.indexOf("使用谜题令成功,可使用谜题卡次数+") !== -1)) {
                setTimeout(function () {
                  PLU.execActions("items use obj_mitiling;");
                }, 200);
            } else if ((type === "notice" && subtype === "notify_fail" && msg.indexOf("你目前不能使用\x1B[1;32m谜题令") !== -1)) {
                setTimeout(function () {
                  PLU.execActions("vip finish_big_task;");
                }, 200);
            } else if ((type === "main_msg" && msg.indexOf("恭喜你,额外获得") !== -1)) {
                setTimeout(function () {
                  PLU.execActions("vip buy_task;vip finish_big_task;");
                }, 200);
            } else if ((type === "notice" && msg.indexOf("今日谜题任务已做完。") !== -1)) {
                UTIL.delSysListener("saodbj");
                PLU.execActions("log?完成VIP暴击扫荡;", callback);
            }
        });
    },
    DailyOres(callback) {
      PLU.execActions("jh 2;#10 n;#2 w;event_1_85264690;items info obj_tbg;");
      UTIL.addSysListener("DailyOres", function (b, type, subtype, msg) {
        if ((type === "items" && subtype === "info" && UTIL.filterMsg(b.get("name")) === "探宝镐")) {
          PLU.execActions("#2 w;event_1_37287831;event_1_49475184;home;", callback);
        } else if (type == "notice" && subtype == "notify_fail" && msg.indexOf("你的背包里没有这个物品") == 0) {
          PLU.execActions("home;", callback);
        }
      });
    },
  buyzl10: function buyzl11() {//买斩龙套
    var ybjifen = g_obj_map.get("msg_attrs") && g_obj_map.get("msg_attrs").get("xf_score");
    YFUI.writeToOut("<span style='color:#7FFF00;'>当前消费积分: ".concat(ybjifen || "未知", "</span>"));
      YFUI.showPop({
        title: "买斩龙套",
        text: "请先确认你有足够的消费积分,购买斩龙套需要49.2W积分,不够请取消。",
        onOk: function onOk(val) {
            setTimeout(function () {
                PLU.execActions("shop xf_buy xf_shop51;shop xf_buy xf_shop52;shop xf_buy xf_shop48;shop xf_buy xf_shop47;shop xf_buy xf_shop46;shop xf_buy xf_shop44;shop xf_buy xf_shop43;moke equip_armor10;moke equip_boots10;moke equip_finger10;moke equip_head10;moke equip_neck10;moke equip_wrists10;moke equip_waist10;");
              }, 400);
        },
        onNo: function onNo() { }
      });
  },
  dhyt11: function dhyt11() {//兑换胤天套
    YFUI.showPop({
        title: "兑换胤天",
        text: "请先确认你有足够的11阶装备碎片,不够请取消,游四海那里直接兑换5000再来。",
        onOk: function onOk(val) {
            setTimeout(function () {
                PLU.execActions("items get_store /obj/quest/hat_suipian11;items get_store /obj/quest/waist_suipian11;items get_store /obj/quest/shield_suipian11;items get_store /obj/quest/blade_suipian11;items get_store /obj/quest/sword_suipian11;items get_store /obj/quest/unarmed_suipian11;items get_store /obj/quest/throwing_suipian11;items get_store /obj/quest/staff_suipian11;items get_store /obj/quest/stick_suipian11;items get_store /obj/quest/whip_suipian11;items get_store /obj/quest/axe_suipian11;items get_store /obj/quest/necklace_suipian11;items get_store /obj/quest/hammer_suipian11;items get_store /obj/quest/spear_suipian11;items get_store /obj/quest/wrists_suipian11;items get_store /obj/quest/finger_suipian11;items get_store /obj/quest/boots_suipian11;items get_store /obj/quest/cloth_suipian11;items get_store /obj/quest/armor_suipian11;items get_store /obj/quest/dagger_suipian11;items get_store /obj/quest/surcoat_suipian11;jh 1;e;n;n;w;#40 event_1_58404606;"+
                "jh 3;s;e;n;duihuan_mieshen_go gift1;duihuan_mieshen_go gift10;duihuan_mieshen_go gift2;duihuan_mieshen_go gift3;duihuan_mieshen_go gift4;duihuan_mieshen_go gift5;duihuan_mieshen_go gift7;moke equip_armor11;moke equip_boots11;moke equip_finger11;moke equip_wrists11;moke equip_neck11;moke equip_waist11;moke equip_head11;");
              }, 400);
        },
        onNo: function onNo() { }
      });
  },
  dhht12: function dhht12() {//兑换皇天套
    YFUI.showPop({
        title: "换12阶皇天",
        text: "请先确认你有足够的12阶装备碎片,不够请取消,游四海那里直接兑换5000再来。",
        onOk: function onOk(val) {
            setTimeout(function () {
                PLU.execActions("items get_store /obj/shop/dog_liquan;items get_store /obj/quest/hat_suipian12;items get_store /obj/quest/waist_suipian12;items get_store /obj/quest/shield_suipian12;items get_store /obj/quest/blade_suipian12;items get_store /obj/quest/sword_suipian12;items get_store /obj/quest/unarmed_suipian12;items get_store /obj/quest/throwing_suipian12;items get_store /obj/quest/staff_suipian12;items get_store /obj/quest/stick_suipian12;items get_store /obj/quest/whip_suipian12;items get_store /obj/quest/axe_suipian12;items get_store /obj/quest/necklace_suipian12;items get_store /obj/quest/hammer_suipian12;items get_store /obj/quest/spear_suipian12;items get_store /obj/quest/wrists_suipian12;items get_store /obj/quest/finger_suipian12;items get_store /obj/quest/boots_suipian12;items get_store /obj/quest/cloth_suipian12;items get_store /obj/quest/armor_suipian12;items get_store /obj/quest/dagger_suipian12;items get_store /obj/quest/surcoat_suipian12;"+
                "jh 3;s;e;n;duihuan_eq12_go gift1;duihuan_eq12_go gift10;duihuan_eq12_go gift2;duihuan_eq12_go gift3;duihuan_eq12_go gift4;duihuan_eq12_go gift5;duihuan_eq12_go gift7;moke equip_armor12;moke equip_boots12;moke equip_finger12;moke equip_wrists12;moke equip_neck12;moke equip_waist12;moke equip_head12;");
              }, 400);
        },
        onNo: function onNo() { }
      });
  },
  dhbingy: function dhbingy() {//兑换冰月材料
    PLU.execActions("reclaim buy;");
    UTIL.addSysListener("dhbingy", function (b, type, subtype, msg) {
        if (type != "show_html_page") return;
        var sp = msg.match(/你有四海商票\[1;32mx(\d+)\[2;37;0m/);
        //YFUI.writeToOut("<span style='color:#7FFF00;'>".concat(sp || "未知", "</span>"));
    });
    YFUI.showPop({
        title: "兑换冰月材料",
        text: "需要762万四海商票,不够请取消,游四海那里兑换点天神再来。<br>\n    <span>材料需要:700长生石,1400冰月羽。<br>\n    <span>材料足够的请取消,直接打造。",
        onOk: function onOk(val) {
            setTimeout(function () {
                PLU.execActions("reclaim buy 10 700;reclaim buy 11 1400;");
              }, 200);
        },
        onNo: function onNo() { }
      });
   },
  dzbingy: function dzbingy() {//打造冰月套
    YFUI.showPop({
        title: "打造冰月",
        text: "请先确认你有冰月材料,不够请取消,点击兑换冰材再来。",
        onOk: function onOk(val) {
            setTimeout(function () {
                PLU.execActions("wear equip_moke_head12;wear equip_moke_waist12;wear equip_moke_neck12;wear equip_moke_wrists12;wear equip_moke_finger12;wear equip_moke_boots12;wear equip_moke_armor12;jh 33;sw;sw;s;s;s;s;w;w;w;w;w;n;w;se;by_upgrade 1 equip_moke_waist12;by_upgrade 1 equip_moke_wrists12;by_upgrade 1 equip_moke_neck12;by_upgrade 1 equip_moke_head12;by_upgrade 1 equip_moke_armor12;by_upgrade 1 equip_moke_finger12;wear equip_by_neck12;wear equip_by_wrists12;wear equip_by_waist12;jh 14;w;n;n;n;n;#100 by_upgrade 2 equip_by_waist12;#100 by_upgrade 2 equip_by_wrists12;#100 by_upgrade 2 equip_by_neck12;jh 26;w;w;w;w;w;n;#100 by_upgrade 3 equip_by_waist12;#100 by_upgrade 3 equip_by_wrists12;#100 by_upgrade 3 equip_by_neck12;"+
                "jh 33;sw;sw;s;s;s;s;w;w;w;w;w;n;w;se;by_upgrade 1 equip_moke_head12;by_upgrade 1 equip_moke_armor12;by_upgrade 1 equip_moke_finger12;by_upgrade 1 equip_moke_boots12;wear equip_by_boots12;wear equip_by_finger12;wear equip_by_armor12;wear equip_by_head12;jh 14;w;n;n;n;n;#100 by_upgrade 2 equip_by_head12;#100 by_upgrade 2 equip_by_armor12;#100 by_upgrade 2 equip_by_finger12;#100 by_upgrade 2 equip_by_boots12;jh 26;w;w;w;w;w;n;#100 by_upgrade 3 equip_by_head12;#100 by_upgrade 3 equip_by_armor12;#100 by_upgrade 3 equip_by_finger12;#100 by_upgrade 3 equip_by_boots12;remove equip_by_boots12;remove equip_by_finger12;remove equip_by_armor12;remove equip_by_head12;remove equip_by_neck12;remove equip_by_waist12;remove equip_by_wrists12;#100 by_upgrade 3 equip_by_surcoat11;#100 by_upgrade 3 equip_by_yupei12;");
              }, 200);
        },
        onNo: function onNo() { }
      });
   },
  dhjians: function dhjians() {//兑换剑神套
    YFUI.showPop({
        title: "兑换兑换剑神套",
        text: "请装备好材料再点确认。",
        onOk: function onOk(val) {
            setTimeout(function () {
            PLU.execActions("jh 2;n;n;n;n;n;n;n;n;n;n;n;n;n;n;n;n;w;w;w;w;n;n;n;n;;n;n;n;items upgrade_13shoushi go 0;items upgrade_13shoushi go 1;items upgrade_13shoushi go 2;items upgrade_13shoushi go 3;items upgrade_13shoushi go 4;items upgrade_13shoushi go 5;items upgrade_13shoushi go 6;home;"+
      "#4 imbed obj_jianxinbumie wear huangbaoshi8;#2 imbed obj_jianxinbumie wear lanbaoshi8;imbed obj_jianxinbumie wear lvbaoshi8;"+
      "#4 imbed obj_jianyironghen wear hongbaoshi8;#2 imbed obj_jianyironghen wear lanbaoshi8;imbed obj_jianyironghen wear lvbaoshi8;"+
      "#4 imbed obj_jiandaozhangcun wear lanbaoshi8;#3 imbed obj_jiandaozhangcun wear lvbaoshi8;"+
      "#4 imbed obj_wuyinglou-xianglian wear lanbaoshi8;#3 imbed obj_wuyinglou-xianglian wear lvbaoshi8;"+
      "#4 imbed obj_wuyinglou-shouzhuo wear hongbaoshi8;#2 imbed obj_wuyinglou-shouzhuo wear lanbaoshi8;imbed obj_wuyinglou-shouzhuo wear lvbaoshi8;"+
      "#4 imbed obj_wuyinglou-jiezhi wear hongbaoshi8;#2 imbed obj_wuyinglou-jiezhi wear lvbaoshi8;imbed obj_wuyinglou-jiezhi wear lanbaoshi8;"+
      "#4 imbed obj_wuwozhijian wear lanbaoshi8;#3 imbed obj_wuwozhijian wear lvbaoshi8;"+
      "wear obj_jianyironghen;wear obj_wuyinglou-jiezhi;wear obj_jianxinbumie;wear obj_jiandaozhangcun;wear obj_wuyinglou-xianglian;wear obj_wuwozhijian;wear obj_wuyinglou-shouzhuo;");
        }, 200);
        },
        onNo: function onNo() { }
      });
   },
  dhchuid: function dhchuid() {//兑换垂钓套
    YFUI.showPop({
        title: "兑换垂钓套",
        text: "请装备好材料再点确认。",
        onOk: function onOk(val) {
            setTimeout(function () {
               PLU.execActions("jh 2;n;n;n;n;n;n;n;n;n;n;n;n;n;n;n;n;w;w;w;w;n;n;n;n;;n;n;n;items upgrade_13shoushi go 7;items upgrade_13shoushi go 8;items upgrade_13shoushi go 9;items upgrade_13shoushi go 10;items upgrade_13shoushi go 11;items upgrade_13shoushi go 12;items upgrade_13shoushi go 13;home;"+
               "log?没得装备没写完,只能兑换,后面自己打宝石穿装备;");
    }, 200);
},
onNo: function onNo() { }
});
},
  dhzxianz: function dhzxianz() {//兑换贤者套
    YFUI.showPop({
        title: "兑换贤者套",
        text: "请装备好材料再点确认。",
        onOk: function onOk(val) {
    setTimeout(function () {
        PLU.execActions("jh 2;n;n;n;n;n;n;n;n;n;n;n;n;n;n;n;n;w;w;w;w;n;n;n;n;;n;n;n;items upgrade_13shoushi go 14;items upgrade_13shoushi go 15;items upgrade_13shoushi go 16;items upgrade_13shoushi go 17;items upgrade_13shoushi go 18;items upgrade_13shoushi go 19;items upgrade_13shoushi go 20;home;"+
        "#4 imbed obj_zhongzuiduxing wear hongbaoshi8;#2 imbed obj_zhongzuiduxing wear lanbaoshi8;imbed obj_zhongzuiduxing wear lvbaoshi8;"+
        "#4 imbed obj_qingtianwanshi wear lanbaoshi8;#3 imbed obj_qingtianwanshi wear lvbaoshi8;"+
        "#4 imbed obj_lankeyimeng wear huangbaoshi8;#2 imbed obj_lankeyimeng wear lanbaoshi8;imbed obj_lankeyimeng wear lvbaoshi8;"+
        "#4 imbed obj_shanyecunfu wear lanbaoshi8;#3 imbed obj_shanyecunfu wear lvbaoshi8;"+
        "#4 imbed obj_xianzhe-xianglian wear lanbaoshi8;#3 imbed obj_xianzhe-xianglian wear lvbaoshi8;"+
        "#4 imbed obj_xianzhe-shouzhuo wear hongbaoshi8;#2 imbed obj_xianzhe-shouzhuo wear lanbaoshi8;imbed obj_xianzhe-shouzhuo wear lvbaoshi8;"+
        "#4 imbed obj_xianzhe-jiezhi wear hongbaoshi8;#2 imbed obj_xianzhe-jiezhi wear lvbaoshi8;imbed obj_xianzhe-jiezhi wear lanbaoshi8;"+
        "wear obj_zhongzuiduxing;wear obj_qingtianwanshi;wear obj_lankeyimeng;wear obj_shanyecunfu;wear obj_xianzhe-xianglian;wear obj_xianzhe-shouzhuo;wear obj_xianzhe-jiezhi;"
        );
      }, 200);
     },
    onNo: function onNo() { }
   });
  },
  ningjlp: function ningjlp() {//凝聚力魄
    PLU.execActions("jh 1;event_1_87882130 go 0;event_1_87882130 go 1;event_1_87882130 go 2;event_1_87882130 go 3;event_1_87882130 go 4;event_1_87882130 go 5;event_1_87882130 go 6;event_1_87882130 go 7;event_1_87882130 go 8;event_1_87882130 go 9;event_1_87882130 go 10;event_1_87882130 go 11;event_1_87882130 go 12;");
  },
  xuetyz: function xuetyz() {//雪亭驿
    PLU.execActions("jh 1;e;#3 n;n;w;");
  },
  Longsyj: function Longsyj() {//龙神遗迹
    PLU.execActions("jh 1;e;#3 n;n;w;event_1_90287255 go go_lsyj;");
  },
  choujiang: function choujiang() {//抽奖
    var countProte = 0; // 统计神秘渔护的数量
    var countTalisman = 0; // 统计龙神试炼锦囊的数量
    var countLSDBag = 0; // 统计龙神试炼福袋的数量
    var countcj=100;
    UTIL.addSysListener("choujjuan", function (b, type, subtype, msg) {
      if ((type === "items" && subtype === "info" && UTIL.filterMsg(b.get("name")) === "抽奖券") ||
          (type === "notice" && subtype === "notify_fail" && msg.indexOf("你的背包里没有这个物品") === 0)) {
        var choujjuan = parseInt(b.get("amount")) || 0;
        YFUI.writeToOut("<span style='color:#FFFF55;'>当前抽奖卷数量: " + choujjuan + "</span>");
        if (!choujjuan) {
          UTIL.delSysListener("choujjuan");
          return;
        }
        YFUI.showInput({
          title: "抽奖",
          text: "请确保抽奖卷足够,默认为100=1000次抽奖",
          value: 100,
          onOk: function onOk(valcj) {
            countcj = parseInt(valcj)
            PLU.execActions("jh 1;go_choujiang 10");
          },
          onNo: function onNo() {
            UTIL.delSysListener("choujjuan");
          },
        });
      }
      else if ((countcj && type === "notice" && msg.indexOf("抽奖10次额外获得") !== -1)) {
        setTimeout(function () {
        PLU.execActions("go_choujiang 10")
        countcj--;
      }, 200);
      }
      else if (type === "notice" && ((msg.indexOf("没有足够的抽奖卷") !== -1) ||(msg.indexOf("剩余抽奖次数不够") !== -1) || msg.indexOf("抽奖次数已经用完") !== -1)) {
        UTIL.delSysListener("choujjuan");
        setTimeout(function () {
          UTIL.delSysListener("choujjuan");
          PLU.execActions("home;=300;");
          YFUI.writeToOut("<span style='color:yellow;'>=====完成抽奖=====</span>");
          YFUI.writeToOut("<span style='color:#FF0000;'>获得神秘渔护: " + countProte + "</span>");
          YFUI.writeToOut("<span style='color:#FF0000;'>获得龙神试炼锦囊: " + countTalisman + "</span>");
          YFUI.writeToOut("<span style='color:#FF0000;'>获得龙神试炼福袋: " + countLSDBag + "</span>");
        }, 500);
      }
      // 监听抽奖获得物品的消息
      else if (type === "notice" && msg.indexOf("抽奖") !== -1) {
        var regexMyProte = /神秘[\s\S]*?渔[\s\S]*?护[\s\S]*?x(\d+)/;
        var regexTalisman = /龙[\s\S]*?神[\s\S]*?试炼[\s\S]*?锦囊[\s\S]*?x(\d+)/;
        var regexLSDBag = /龙[\s\S]*?神[\s\S]*?试炼[\s\S]*?福袋[\s\S]*?x(\d+)/;

        if (regexMyProte.test(msg)) {
          var quantity = parseInt(regexMyProte.exec(msg)[1]) || 1;
          countProte += quantity;
        }
        if (regexTalisman.test(msg)) {
          var quantity = parseInt(regexTalisman.exec(msg)[1]) || 1;
          countTalisman += quantity;
        }
        if (regexLSDBag.test(msg)) {
          var quantity = parseInt(regexLSDBag.exec(msg)[1]) || 1;
          countLSDBag += quantity;
        }
      }
      else if (!countcj) {
        UTIL.delSysListener("choujjuan");
        setTimeout(function () {
            UTIL.delSysListener("choujjuan");
            PLU.execActions("hoem;=300;");
            YFUI.writeToOut("<span style='color:yellow;'>=====完成抽奖=====</span>");
            YFUI.writeToOut("<span style='color:#FF0000;'>获得神秘渔护: " + countProte + "</span>");
            YFUI.writeToOut("<span style='color:#FF0000;'>获得龙神试炼锦囊: " + countTalisman + "</span>");
            YFUI.writeToOut("<span style='color:#FF0000;'>获得龙神试炼福袋: " + countLSDBag + "</span>");
          }, 500);

      }
    });
    setTimeout(function () {
      PLU.execActions("items get_store /obj/shop/choujiangquan;items info obj_choujiangquan;");
    }, 250);
  },

  givehuf: function givehuf() {
    //交虎符
    PLU.execActions("jh 1;e;#3 n;n;w;event_1_90287255 go go_lsyj;=200;items get_store /obj/quest/jinyuhufusuipian;#6 event_1_56364978;#6 event_1_49251725;");
  },
  huanpf: function huanpf() {
    //换皮肤
    YFUI.showInput({
      title: "换皮肤",
      text: '请输入你要选的皮肤,<br>\n              <span>1:极简之风<br>\n              <span style="color:#578DC9;">2:碧海奇侠<br>\n              <span style="color:#8F7D5C;">3:大漠飞鹰<br>\n              ',
      value: "1",
      // 默认值为1
      onOk: function onOk(val) {
        PLU.execActions("skin_select ".concat(val)); // 使用输入的值换皮肤
      },

      onNo: function onNo() { }
    });
  },
  zbjianshen: function zbjianshen() {
    //剑神套
    PLU.execActions("wear obj_jianxinbumie;wear obj_jianyironghen;wear obj_jiandaozhangcun;wear obj_wuyinglou-xianglian;wear obj_wuyinglou-shouzhuo;wear obj_wuyinglou-jiezhi;wear obj_wuwozhijian;log?剑神套穿戴完毕!;");
  },
  zbchuidiao: function zbchuidiao() {
    //垂钓套
    PLU.execActions("wear obj_fushenbanxian;wear obj_yinqingruanque;wear obj_chuidiaozhe-shouzhuo;wear obj_chuidiaozhe-xianglian;wear obj_chuidiaozhe-jiezhi;wear obj_hanjianguyin;wear obj_zhouyebufen;log?垂钓套穿戴完毕!;");
  },
  zbxianzhe: function zbxianzhe() {
    //贤者套
    PLU.execActions("wear obj_zhongzuiduxing;wear obj_qingtianwanshi;wear obj_lankeyimeng;wear obj_shanyecunfu;wear obj_xianzhe-xianglian;wear obj_xianzhe-shouzhuo;wear obj_xianzhe-jiezhi;log?贤者套穿戴完毕!;");
  },
  caomeibs: function caomeibs() {
    //草莓冰沙
    PLU.execActions("items use obj_caomeibingsha");
  },
  eatbuping: function eatbuping() {
    //吃补品
    PLU.execActions("items use tianlongsi_nanguagu;items use tianlongsi_sanxiangmenmgzhuling;items use obj_molitang;items use obj_yuanxiao;items use obj_jiuhuayulouwan;items use obj_qiaoguoer;items use obj_lanlingmeijiu;items use obj_bingtanghulu;");
  },
  Qubaos: function Qubaos() {
    PLU.execActions("items get_store /obj/baoshi/lvbaoshi2;" +
      //绿宝石裂开
      "items get_store /obj/baoshi/lvbaoshi3;" +
      //绿宝石
      "items get_store /obj/baoshi/lvbaoshi4;" +
      //绿宝石无暇
      "items get_store /obj/baoshi/lvbaoshi5;" +
      //绿宝石完美
      "items get_store /obj/baoshi/lvbaoshi6;" +
      //绿宝石君王
      "items get_store /obj/baoshi/lvbaoshi7;" +
      //绿宝石皇帝
      "items get_store /obj/baoshi/hongbaoshi2;" +
      //红宝石裂开
      "items get_store /obj/baoshi/hongbaoshi3;" +
      //红宝石
      "items get_store /obj/baoshi/hongbaoshi4;" +
      //红宝石无暇
      "items get_store /obj/baoshi/hongbaoshi5;" +
      //红宝石完美
      "items get_store /obj/baoshi/hongbaoshi6;" +
      //红宝石君王
      "items get_store /obj/baoshi/hongbaoshi7;" +
      //红宝石皇帝
      "items get_store /obj/baoshi/lanbaoshi2;" +
      //蓝宝石裂开
      "items get_store /obj/baoshi/lanbaoshi3;" +
      //蓝宝石
      "items get_store /obj/baoshi/lanbaoshi4;" +
      //蓝宝石无暇
      "items get_store /obj/baoshi/lanbaoshi5;" +
      //蓝宝石完美
      "items get_store /obj/baoshi/lanbaoshi6;" +
      //蓝宝石君王
      "items get_store /obj/baoshi/lanbaoshi7;" +
      //蓝宝石皇帝
      "items get_store /obj/baoshi/huangbaoshi2;" +
      //黄宝石裂开
      "items get_store /obj/baoshi/huangbaoshi3;" +
      //黄宝石
      "items get_store /obj/baoshi/huangbaoshi4;" +
      //黄宝石无暇
      "items get_store /obj/baoshi/huangbaoshi5;" +
      //黄宝石完美
      "items get_store /obj/baoshi/huangbaoshi6;" +
      //黄宝石君王
      "items get_store /obj/baoshi/huangbaoshi7;" +
      //黄宝石皇帝
      "items get_store /obj/baoshi/zishuijing2;" +
      //紫宝石裂开
      "items get_store /obj/baoshi/zishuijing3;" +
      //紫宝石
      "items get_store /obj/baoshi/zishuijing4;" +
      //紫宝石无暇
      "items get_store /obj/baoshi/zishuijing5;" +
      //紫宝石完美
      "items get_store /obj/baoshi/zishuijing6;" +
      //紫宝石君王
      "items get_store /obj/baoshi/zishuijing7;" //紫宝石皇帝
    );
  },

  Quyijiy: function Quyijiy() {//取一级玉
    PLU.execActions("items get_store /obj/yushi/dixisui1;" +
      "items get_store /obj/yushi/donghaibi1;" +
      "items get_store /obj/yushi/jiutianluo1;" +
      "items get_store /obj/yushi/juzimo1;" +
      "items get_store /obj/yushi/kunlunyin1;" +
      "items get_store /obj/yushi/longtingpo1;" +
      "items get_store /obj/yushi/xuanyuanlie1;" 
    );
  },
  QuTianss: function QuTianss() {
    PLU.execActions("items get_store /obj/baoshi/lvbaoshi8;" +//绿宝石天神
      "items get_store /obj/baoshi/hongbaoshi8;" +//红宝石天神
      "items get_store /obj/baoshi/lanbaoshi8;" +//蓝宝石天神
      "items get_store /obj/baoshi/huangbaoshi8;" +//黄宝石天神
      "items get_store /obj/baoshi/zishuijing8;" //紫宝石天神
    );
  },

  buyXueLian: function buyXueLian() {
    PLU.execActions("jh 1;e;n;n;n;w;" + "#10 buy /map/snow/npc/obj/ice_lotus_N_10 from snow_herbalist;" +//购买100雪莲
      "home;");
  },
  LLBao: function LLBao() {
    PLU.execActions("jh 2;#7 n;lq_chunhui_lb;lq_fuai_lb;" +//礼包:春晖 父爱
      "jh 1;sd_2024_lb;sd_2024_ch;" +//礼包:元旦
      "home;");
  },
  eatHuoG: function eatHuoG() {
    PLU.execActions("items use obj_bingjilinghuoguo1;" //吃火锅
    );
  },

  QuLiCai: function QuLiCai() {
    PLU.execActions("items get_store /obj/shop/jiuzhuanshendan;" +
      //九转神丹
      "items get_store /obj/baoshi/huangbaoshi8;" //黄宝石天神
    );
  },

  DianLiCai: function DianLiCai() {
    PLU.execActions("event_1_62143505 go;" +
      //超级投资
      "event_1_62143505 get;event_1_63750325 get;" //领收益
    );
  },

  autoChuangLou: function autoChuangLou(endcallback) {
    UTIL.addSysListener("sword", function (b, type, subtype, msg) {
      if (msg.includes("战斗结束") || msg.includes("戰鬥結束")) {
        // PLU.execActions("prev_combat;cangjian kill");//执行prev_combat和cangjian kill命令,挑战剑楼
      }
    });
    //PLU.execActions("prev_combat"); // 执行prev_combat命令
  },

  asJirudw: function asJirudw() {
    YFUI.showInput({
      title: "队伍加入",
      text: "请输入你要加入队伍的角色ID: 比如:3070884(1)  4512928(1)",
      value: PLU.getCache("defaultValue") || "3070884(1)",
      onOk: function onOk(val) {
        PLU.setCache("defaultValue", val);
        PLU.execActions("team join u".concat(val)); // 加入队伍
      },
      onNo: function onNo() { }
    });
  },
  asJirudwdm: function asJirudwdm() {
    PLU.execActions("team join u3070884(1);prev;" // 加入队伍
    );
  },

  eatSans: function eatSans() {
    //使用三生石
    PLU.execActions("items get_store /obj/shop/sanshengshi;event_1_66830905;");
  },
  Longsjs: function Longsjs() {
    //龙神祭祀
    PLU.execActions("jh 5;#6 n;w;event_1_69751810;event_1_43899943;event_1_43899943 go 6;home;");
  },
  Yandijd: function Yandijd() {
    //炎帝祭典
    PLU.execActions("jh 5;#6 n;w;event_1_69751810;event_1_43899943;event_1_43899943 go 5;home;");
  },
  //全杀了
  allkill: function allkill(params) {
    var npcs = UTIL.getRoomAllNpc().filter(function (e) {
      return !(["金甲符兵", "玄阴符兵", "玄陰符兵"].indexOf(e.name) >= 0);
    });
    //let npcs = UTIL.getRoomAllNpc().filter(e=>!(UTIL.filterMsg(e.name).match(/(金甲|玄阴)符兵/)))
    //let npcs = UTIL.getRoomAllNpc()
    if (npcs.length) {
      PLU.autoFight({
        targetKey: npcs[0].key,
        onEnd: function onEnd() {
          setTimeout(function () {
            PLU.allkill(params);
          }, 500);
        }
      });
    } else {
      params.idx++;
      if (params.paths[params.idx] != "ka") {
        params.paths.splice(params.idx + 1, 0, "ak");
      } else {
        params.idx++;
      }
      setTimeout(function () {
        //PLU.allkill(params);
        PLU.actions(params);
      }, 400);
    }
  },
  //================================================================================================
  execActions: function execActions(str, endcallback, params) {
    var acs = str.split(";");
    acs = acs.map(function (e) {
      var np = e.match(/^#(\d+)\s(.*)/);
      if (np) {
        var r = [];
        for (var i = 0; i < np[1]; i++) r.push(np[2]);
        return r;
      }
      return e;
    }).flat();
    acs = acs.map(function (e) {
      if (PLU.YFD.pathCmds[e]) return PLU.YFD.pathCmds[e] + "." + UTIL.rnd();
      return e;
    });
    PLU.actions({
      paths: acs,
      idx: 0,
      onPathsEnd: function onPathsEnd() {
        PLU.STATUS.isBusy = false;
        endcallback && endcallback(true, params);
      },
      onPathsFail: function onPathsFail() {
        PLU.STATUS.isBusy = false;
        endcallback && endcallback(false, params);
      }
    });
  },
  //================================================================================================
  actions: function actions(params) {
    PLU.STATUS.isBusy = true;
    //params:{paths,idx,onPathsEnd,onPathsFail}
    if (params.idx >= params.paths.length) {
      return params.onPathsEnd && params.onPathsEnd();
    }
    var curAct = params.paths[params.idx];
    // 等
    if (!curAct || curAct.startsWith("=")) {
      setTimeout(function () {
        params.idx++;
        PLU.actions(params);
      }, parseInt(curAct.substring(1)) || 250);
      return;
    }
    // 优先处理移动
    if (curAct.startsWith("go")) {
      clickButton(curAct);
      setTimeout(function () {
        params.idx++;
        PLU.actions(params);
      }, 500);
      return;
    }
    // 书面通知
    if (curAct.indexOf("log?") > -1) {
      YFUI.writeToOut("<span style='color:yellow;'>==" + curAct.substring(4) + "==</span>");
      params.idx++;
      PLU.actions(params);
      return;
    }
    //等待复活
    if (curAct.indexOf("wait#") > -1 || curAct.indexOf("wait ") > -1) {
      var _npc = curAct.substring(curAct.indexOf(" ") + curAct.indexOf("?") + 2);
      if (UTIL.getRoomAllNpc().some(function (e) {
        return e.name == _npc || e.key == _npc;
      })) {
        if (params.paths[params.idx].indexOf("wait ") > -1) params.idx++; else params.paths[params.idx] = params.paths[params.idx].substring(5);
        PLU.actions(params);
      } else UTIL.addSysListener("wait", function (b, type, subtype, msg) {
        if (UTIL.inHome()) {
          UTIL.delSysListener("wait");
          params.idx = params.paths.length;
          PLU.actions(params);
        }
        if (type != "jh") return;
        if (subtype == "info") {
          UTIL.delSysListener("wait");
          params.idx = params.paths.length;
          PLU.actions(params);
        }
        if (subtype != "new_npc") return;
        if (b.get("id") == _npc || b.get("name") == _npc) {
          UTIL.delSysListener("wait");
          if (curAct.indexOf("wait ") > -1) params.idx++; else params.paths[params.idx] = params.paths[params.idx].substring(5);
          PLU.actions(params);
        }
      });
      return;
    }
    //对话
    if (curAct.indexOf("ask#") > -1) {
      if (curAct.indexOf("?") > -1) {
        var _UTIL$findRoomNpc;
        var npc = (_UTIL$findRoomNpc = UTIL.findRoomNpc(curAct.substring(curAct.indexOf("?") + 1), 0, 1)) === null || _UTIL$findRoomNpc === void 0 ? void 0 : _UTIL$findRoomNpc.key;
      } else {
        var npc = curAct.substring(curAct.indexOf(" ") + 1);
      }
      npc && clickButton("ask " + npc);
      params.paths[params.idx] = params.paths[params.idx].substring(4);
      PLU.actions(params);
      return;
    }
    //去比试
    if (curAct.indexOf("fight?") > -1 || curAct.indexOf("fight ") > -1) {
      var kt = parseInt(PLU.getCache("autoPerform")) < 1 ? "multi" : "";
      PLU.autoFight({
        targetName: curAct.indexOf("fight?") > -1 ? curAct.substring(6) : null,
        targetKey: curAct.indexOf("fight ") > -1 ? curAct.substring(6) : null,
        fightKind: "fight",
        autoSkill: kt,
        onFail: function onFail() {
          setTimeout(function () {
            params.idx++;
            PLU.actions(params);
          }, 500);
        },
        onEnd: function onEnd() {
          setTimeout(function () {
            params.idx++;
            PLU.actions(params);
          }, 500);
        }
      });
      return;
    }
    //去杀
    if (curAct.indexOf("kill?") > -1 || curAct.indexOf("kill ") > -1) {
      var _kt = parseInt(PLU.getCache("autoPerform")) < 1 ? "multi" : "";
      PLU.autoFight({
        targetName: curAct.indexOf("kill?") > -1 ? curAct.substring(5) : null,
        targetKey: curAct.indexOf("kill ") > -1 ? curAct.substring(5) : null,
        autoSkill: _kt,
        onFail: function onFail() {
          setTimeout(function () {
            params.idx++;
            PLU.actions(params);
          }, 500);
        },
        onEnd: function onEnd() {
          setTimeout(function () {
            params.idx++;
            PLU.actions(params);
          }, 500);
        }
      });
      return;
    }
    // 去摸尸体
    if (curAct.indexOf("get?") > -1) {
      UTIL.getItemFrom(curAct.substring(4));
      setTimeout(function () {
        params.idx++;
        PLU.actions(params);
      }, 500);
      return;
    }
    // 去摸尸体
    if (curAct.indexOf("@") > -1) {
      UTIL.getItemFrom(curAct.substring(1));
      setTimeout(function () {
        params.idx++;
        PLU.actions(params);
      }, 500);
      return;
    }
    // 叫船
    if (curAct.indexOf("yell") > -1) {
      var yellBoatTimeout = setTimeout(function (e) {
        clearTimeout(yellBoatTimeout);
        UTIL.delSysListener("goYellBoat");
        params.idx++;
        PLU.actions(params);
      }, 120000);
      UTIL.addSysListener("goYellBoat", function (b, type, subtype, msg) {
        if (type == "main_msg" && msg.indexOf("还没有达到这") > -1) {
          setTimeout(function () {
            clearTimeout(yellBoatTimeout);
            UTIL.delSysListener("goYellBoat");
            PLU.actions(params);
          }, 2000);
          return;
        }
        if (type == "notice" && msg.indexOf("这儿没有船可以喊") > -1) {
          setTimeout(function () {
            clearTimeout(yellBoatTimeout);
            UTIL.delSysListener("goYellBoat");
            params.idx++;
            PLU.actions(params);
          }, 500);
          return;
        }
        if (type != "jh" || subtype != "info") return;
        var _iterator3 = _createForOfIteratorHelper(b.keys()),
          _step3;
        try {
          for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
            var key = _step3.value;
            var val = b.get(key);
            if (val.indexOf("yell") < 0) continue;
            clearTimeout(yellBoatTimeout);
            UTIL.delSysListener("goYellBoat");
            params.idx++;
            PLU.actions(params);
            break;
          }
        } catch (err) {
          _iterator3.e(err);
        } finally {
          _iterator3.f();
        }
      });
      clickButton(curAct);
      return;
    }
    if (curAct.indexOf("vs:")>-1) {
        PLU.autoFight({
          targetCommand: curAct.substring(3) || "none",
          onFail: function onFail() {
            setTimeout(function () {
              params.idx++;
              PLU.actions(params);
            }, 500);
          },
          onEnd: function onEnd() {
            setTimeout(function () {
              params.idx++;
              PLU.actions(params);
            }, 500);
          }
        });
        return;
      }
    //函式
    if (curAct.indexOf("eval_") > -1) {
      eval(curAct.substring(5));
      setTimeout(function () {
        params.idx++;
        PLU.actions(params);
      }, 500);
      return;
    }
    //检查地点重走
    if (curAct.indexOf("place?") > -1) {
      var pName = curAct.split(/[?:]/)[1];
      var curName = UTIL.filterMsg(g_obj_map.get("msg_room").get("short") || "");
      var backStep = curAct.split(/[?:]/)[2];
      // 未到达指定地,重新走
      if (pName != curName) {
        if (parseInt(backStep)) {
          //退后几步
          params.idx -= Number(backStep);
        } else if (backStep) {
          var _params$paths;
          (_params$paths = params.paths).slice.apply(_params$paths, [params.idx, 0].concat(_toConsumableArray(backStep.split(","))));
          console.debug(params);
        } else {
          params.idx = 0;
        }
        PLU.actions(params);
        return;
      }
      // 已到达指定地点,继续下一个
      params.idx++;
      PLU.actions(params);
      return;
    }
    //迷宫
    if (curAct.match(/^(.+):(.+\^.+)$/)) {
      var cmd = curAct.match(/^(.+):(.+\^.+)$/);
      PLU.execActions(PLU.YFD.mapsLib.Labyrinth[cmd[1]][cmd[2]], function () {
        params.idx++;
        PLU.actions(params);
      });
      return;
    }
    //称号飞修正
    if (curAct.indexOf("rank go") > -1) {
      var m = curAct.match(/rank go (\d+)/);
      if (m && m[1]) {
        curAct = "rank go " + (Number(m[1]) + 1);
      }
    }
    //look,ask,
    if (curAct.match(/look|ask|get|buy|home|prev|moke|sort|share|sign|sleep|exercise|clan|work|chushi |vip |event_|lq_|wear |wield |remove |unwield/)) {
      if (curAct == "ask?lama_master") {
        UTIL.addSysListener("lama", function (b, type, subtype, msg) {
          if (type == "main_msg") if (msg.indexOf("葛伦师傅在幻境之中") == -1) clickButton("ask lama_master"); else {
            params.idx++;
            PLU.actions(params);
            UTIL.delSysListener("lama");
          }
        });
        clickButton("ask lama_master");
      } else {
        clickButton(curAct);
        setTimeout(function () {
          params.idx++;
          PLU.actions(params);
        }, 300);
      }
      return;
    }
    // 全杀了
    if (curAct.indexOf("ak") > -1) {
      PLU.allkill(params);
      return;
    }
    if (curAct == "飞雪连天射白鹿,笑书神侠倚碧鸳。") {
      if (PLU.developerMode) {
        PLU.setCache("developer", 0);
        YFUI.writeToOut("<span style='color:white;'>==已关闭开发者模式部分功能,刷新后关闭开发者模式全部功能==</span>");
        setTimeout(function () {
          return location.reload();
        }, 300);
      } else {
        YFUI.showPop({
          title: "!!!警告!!!",
          text: "你将开启本脚本开发者模式<br>" + "开发者模式功能清单:<br>" + "浏览器控制台(F12)输出按键指令、变量g_obj_map的实时变化<br>" + "闲聊允许向非脚本玩家打印屏蔽词(屏蔽词不会转为“*”,单字、特殊字符除外)<br>" + "可在非首页、非师傅所在地拜入门派,包括未开图的隐藏门派(掌握空间法则(误))<br>" + "显示全自动暴击开关(掌握时间法则(延长寿命(<br>" + "<b>专属功能可能会使你触摸到轮回法则(夏格艾迪剑),是否继续?</b>",
          okText: "继续",
          onOk: function onOk() {
            PLU.setCache("developer", 1);
            location.reload();
          },
          onNo: function onNo() {
            params.idx++;
            PLU.actions(params);
          }
        });
      }
      return;
    }
    //行动
    PLU.go({
      action: curAct,
      onEnd: function onEnd() {
        if (params.idx + 1 >= params.paths.length) {
          return params.onPathsEnd && params.onPathsEnd();
        }
        params.idx++;
        PLU.actions(params);
      },
      onFail: function onFail(flag, msg) {
        if (flag && PLU.STATUS.inBattle) {
          PLU.autoEscape({
            onEnd: function onEnd() {
              setTimeout(function () {
                PLU.actions(params);
              }, 1000);
            }
          });
          return;
        } else if (flag) {
          if (PLU.STO.REGO) {
            clearTimeout(PLU.STO.REGO);
            PLU.STO.REGO = null;
          }
          PLU.STO.REGO = setTimeout(function () {
            params.idx++;
            PLU.actions(params);
          }, 1000);
        } else {
          params.onPathsFail && params.onPathsFail(msg);
        }
      }
    });
  },
  //================================================================================================
  go: function go(_ref2) {
    var action = _ref2.action,
      onEnd = _ref2.onEnd,
      onFail = _ref2.onFail;
    if (!action) return onEnd && onEnd(false);
    var clearGoTimeout = function clearGoTimeout(timeoutKey) {
      clearTimeout(timeoutKey);
      timeoutKey = null;
      UTIL.delSysListener("goMove");
    };
    var goTimeout = setTimeout(function () {
      clearGoTimeout(goTimeout);
      onEnd && onEnd(false);
    }, 2000);
    UTIL.addSysListener("goMove", function (b, type, subtype, msg) {
      if (type == "notice" && subtype == "notify_fail") {
        if (msg.indexOf("你正忙着呢") > -1) {
          clearGoTimeout(goTimeout);
          return onFail && onFail(true);
        }
        if (msg.indexOf("无法走动") > -1 || msg.indexOf("没有这个方向") > -1 || msg.indexOf("只有VIP才可以直接去往此地") > -1 || msg.indexOf("你什么都没发觉") > -1 || msg.indexOf("就此钻入恐有辱墓主") > -1 || msg.indexOf("你虽知这松林内有乾坤,但并没发现任何线索") > -1 || msg.indexOf("此地图还未解锁,请先通关前面的地图。") > -1) {
          clearGoTimeout(goTimeout);
          return onFail && onFail(false, msg);
        }
      }
      if (type == "unknow_command" || type == "jh" && subtype == "info") {
        clearGoTimeout(goTimeout);
        setTimeout(function () {
          onEnd && onEnd(true);
        }, 200);
        return;
      }
    });
    clickButton(action);
  },
  //================================================================================================
  fastExec: function fastExec(str, endcallback) {
    var acs = str.split(";");
    acs = acs.map(function (e) {
      var np = e.match(/^#(\d+)\s(.*)/);
      if (np) {
        var r = [];
        for (var i = 0; i < np[1]; i++) r.push(np[2]);
        return r;
      }
      return e;
    }).flat();
    acs = acs.map(function (e) {
      if (PLU.YFD.pathCmds[e]) return PLU.YFD.pathCmds[e] + "." + UTIL.rnd();
      return e;
    });
    var fastFunc = function fastFunc(acts, idx) {
      if (idx >= acts.length) {
        setTimeout(function () {
          endcallback && endcallback(true);
        }, 1000);
        return;
      }
      var curAct = acts[idx];
      if (!curAct) return fastFunc(acts, idx + 1);
      clickButton(curAct);
      setTimeout(function () {
        fastFunc(acts, idx + 1);
      }, 200);
      return;
    };
    fastFunc(acs, 0);
  },
  //================================================================================================
  selectSkills: function selectSkills(skillName) {
    if (!PLU.battleData || !PLU.battleData.skills) return null;
    var keys = Object.keys(PLU.battleData.skills);
    if (skillName) {
      for (var i = 0; i < keys.length; i++) {
        var sk = PLU.battleData.skills[keys[i]];
        if (sk && sk.name && sk.name.match(skillName)) return sk;
      }
    } else {
      var n = Math.floor(keys.length * Math.random());
      return PLU.battleData.skills[keys[n]];
    }
    return null;
  },
  //================================================================================================
  autoFight: function autoFight(params) {
    var _params$fightKind, _params$targetCommand;
    if (PLU.STO.autoF) {
      clearTimeout(PLU.STO.autoF);
      PLU.STO.autoF = null;
    }
    if (!params.targetKey && !params.targetName && !params.targetCommand) {
      params.onFail && params.onFail(0);
      YFUI.writeToOut("<span style='color:#FFF;'>--战斗参数缺失--</span>");
      return;
    }
    if (params.targetName && !params.targetKey) {
      var npcObj = UTIL.findRoomNpc(params.targetName, false, true);
      if (npcObj) {
        params.targetKey = npcObj.key;
      } else {
        params.onFail && params.onFail(1);
        YFUI.writeToOut("<span style='color:#FFF;'>--找不到NPC--</span>");
        return;
      }
    }
    var fightAct = (_params$fightKind = params.fightKind) !== null && _params$fightKind !== void 0 ? _params$fightKind : "kill";
    var performTime = 0;
    UTIL.addSysListener("onAutoFight", function (b, type, subtype, msg) {
      if (type == "vs" && subtype == "vs_info") {
        setTimeout(function () {
          if (params.autoSkill && PLU.battleData) PLU.battleData.autoSkill = params.autoSkill;
        }, 100);
        if (PLU.TMP.loopCheckFight) {
          clearInterval(PLU.TMP.loopCheckFight);
          PLU.TMP.loopCheckFight = null;
        }
        PLU.TMP.loopCheckFight = setInterval(function () {
          if (!g_gmain.is_fighting) {
            UTIL.delSysListener("onAutoFight");
            if (PLU.STO.autoF) {
              clearTimeout(PLU.STO.autoF);
              PLU.STO.autoF = null;
            }
            if (PLU.TMP.loopCheckFight) {
              clearInterval(PLU.TMP.loopCheckFight);
              PLU.TMP.loopCheckFight = null;
            }
            params.onEnd && params.onEnd();
          }
        }, 2000);
        params.onStart && params.onStart();
      } else if (type == "vs" && (subtype == "add_xdz" || subtype == "text" || subtype == "attack")) {
        var curTime = new Date().getTime();
        if (curTime - performTime < 500) return;
        performTime = curTime;
        var useSkill = null;
        if (params.autoSkill) {
          if (!PLU.battleData || PLU.battleData.xdz < 2) return;
          if (params.autoSkill == "item") {
            if (PLU.battleData.xdz >= 6) useSkill = {
              key: "playskill 7"
            }; else useSkill = {};
          } else if (params.autoSkill == "dodge") {
            if (PLU.battleData.xdz > 9) useSkill = PLU.selectSkills(/乾坤大挪移|凌波微步|无影毒阵|九妙飞天术/);
          } else if (params.autoSkill == "multi") {
            if (PLU.battleData.xdz > 2) useSkill = PLU.selectSkills(/破军棍法|千影百伤棍|八荒功|月夜鬼萧|打狗棒法|朝天一棍/);
          } else if (params.autoSkill == "fast") {
            if (PLU.battleData.xdz >= 2) useSkill = PLU.selectSkills(/吸星大法|斗转星移|无影毒阵|空明拳|乾坤大挪移/);
          }
          if (!useSkill) {
            if (PLU.getCache("autoPerform") >= 1) {
              PLU.battleData.autoSkill = "";
              return;
            }
            if (params.autoSkill) PLU.battleData.autoSkill = "";
            useSkill = PLU.selectSkills();
          }
          if (params.onFighting) {
            var block = params.onFighting(useSkill);
            if (block) return;
          }
          useSkill && clickButton(useSkill.key, 0);
        } else {
          params.onFighting && params.onFighting();
        }
      } else if (type == "vs" && subtype == "combat_result") {
        performTime = 0;
        UTIL.delSysListener("onAutoFight");
        if (PLU.STO.autoF) {
          clearTimeout(PLU.STO.autoF);
          PLU.STO.autoF = null;
        }
        if (PLU.TMP.loopCheckFight) {
          clearInterval(PLU.TMP.loopCheckFight);
          PLU.TMP.loopCheckFight = null;
        }
        //clickButton("prev_combat");
        params.onEnd && params.onEnd();
      } else if (type == "notice" && subtype == "notify_fail") {
        var errCode = 0;
        if (msg.indexOf("没有这个人") > -1) {
          errCode = 1;
        } else if (msg.indexOf("你正忙着呢") > -1) {
          errCode = 2;
        } else if (msg.indexOf("已经超量") > -1) {
          errCode = 3;
        } else if (msg.indexOf("已达到上限") > -1 || msg.indexOf("挑战太多了") > -1) {
          errCode = 4;
        } else if (msg.indexOf("太多人了") > -1) {
          errCode = 5;
        } else if (msg.indexOf("不能战斗") > -1 || msg.indexOf("不能加入这个战场") > -1) {
          errCode = 6;
        } else if (msg.indexOf("秒后才能攻击这个人") > -1) {
          var sat = msg.match(/(\d+)秒后才能攻击这个人/);
          if (sat) errCode = "delay_" + sat[1]; else errCode = 77;
        } else if (msg.indexOf("先观察一下") > -1) {
          errCode = 88;
        } else {
          if (!PLU.STATUS.inBattle) {
            errCode = 99;
          }
        }
        if (errCode) UTIL.delSysListener("onAutoFight");
        if (PLU.STO.autoF) {
          clearTimeout(PLU.STO.autoF);
          PLU.STO.autoF = null;
        }
        if (PLU.TMP.loopCheckFight) {
          clearInterval(PLU.TMP.loopCheckFight);
          PLU.TMP.loopCheckFight = null;
        }
        params.onFail && params.onFail(errCode);
      }
    });
    PLU.STO.autoF = setTimeout(function () {
      PLU.STO.autoF = null;
      if (!g_gmain.is_fighting) {
        UTIL.delSysListener("onAutoFight");
        if (PLU.TMP.loopCheckFight) {
          clearInterval(PLU.TMP.loopCheckFight);
          PLU.TMP.loopCheckFight = null;
        }
        return params.onFail && params.onFail(100);
      }
    }, 300000);
    if (params.targetCommand != "none") {
        clickButton((_params$targetCommand = params.targetCommand) !== null && _params$targetCommand !== void 0 ? _params$targetCommand : fightAct + " " + params.targetKey, 0);
      }
    },
  //================================================================================================
  autoEscape: function autoEscape(params) {
    if (!PLU.STATUS.inBattle) return params.onEnd && params.onEnd();
    var lastEscapeTime = new Date().getTime();
    UTIL.addSysListener("onAutoEscape", function (b, type, subtype, msg) {
      if (type == "vs" && subtype == "combat_result") {
        UTIL.delSysListener("onAutoEscape");
        clickButton("prev_combat");
        return params.onEnd && params.onEnd();
      } else if (type == "vs" && (subtype == "add_xdz" || subtype == "text" || subtype == "attack")) {
        var nt = new Date().getTime();
        if (nt - lastEscapeTime > 500) {
          lastEscapeTime = nt;
          clickButton("escape");
        }
      }
    });
  },
  //================================================================================================
  setBtnRed: function setBtnRed($btn, flag, sColr) {
    if (!PLU.ONOFF[$btn[0].id + "_color"]) {
      PLU.ONOFF[$btn[0].id + "_color"] = $btn.css("background-color");
      var carr = PLU.ONOFF[$btn[0].id + "_color"].split(/[\D\s]+/);
      carr.pop();
      carr.shift();
      if (carr[0] == carr[1] && carr[1] == carr[2]) {
        carr[1] = carr[1] - 32;
        carr[2] = carr[2] - 32;
      }
      var m = carr.reduce(function (a, b) {
        return (Number(a) + Number(b)) / 2;
      });
      var narr = carr.map(function (e) {
        return Math.min(e - 96 + 4 * (e - m), 256);
      });
      PLU.ONOFF[$btn[0].id + "_colorDark"] = "rgb(" + narr.join(",") + ")";
    }
    if (flag == undefined) {
      if (PLU.ONOFF[$btn[0].id]) {
        PLU.ONOFF[$btn[0].id] = 0;
        $btn.css({
          background: PLU.ONOFF[$btn[0].id + "_color"],
          color: "#000"
        });
        return 0;
      } else {
        PLU.ONOFF[$btn[0].id] = 1;
        $btn.css({
          background: PLU.ONOFF[$btn[0].id + "_colorDark"],
          color: "#FFF"
        });
        return 1;
      }
    } else {
      PLU.ONOFF[$btn[0].id] = flag;
      var colr = sColr || PLU.ONOFF[$btn[0].id + "_color"],
        fcolr = "#000";
      if (flag) {
        colr = sColr || PLU.ONOFF[$btn[0].id + "_colorDark"];
        fcolr = "#FFF";
      }
      $btn.css({
        background: colr,
        color: fcolr
      });
      return flag;
    }
  },
  getBtnRed: function getBtnRed($btn) {
    if (PLU.ONOFF[$btn[0].id]) return 1;
    return 0;
  },
  //================================================================================================
  toAutoChuaiMo: function toAutoChuaiMo($btn) {
    var btnFlag = PLU.setBtnRed($btn);
    if (!btnFlag) {
      PLU.STATUS.isBusy = false;
      PLU.TMP.CMSkill = null;
      return;
    }
    YFUI.showPop({
      title: "自动揣摩技能",
      text: "一键自动揣摩所有能揣摩的技能!(除了六阴追魂剑法)",
      onOk: function onOk() {
        PLU.autoChuaiMo();
      },
      onNo: function onNo() {
        PLU.setBtnRed($btn, 0);
      }
    });
  },
  //================================================================================================
  toAutoLianXi: function toAutoLianXi($btn) {
    var btnFlag = PLU.setBtnRed($btn);
    if (!btnFlag) {
      PLU.STATUS.isBusy = false;
      PLU.TMP.CMSkill = null;
      return;
    }
    YFUI.showPop({
      title: "自动练习技能",
      text: "开启自动练习技能!(除了六阴剑、九阴爪、九阴刀)",
      onOk: function onOk() {
        PLU.autoLianXi();
      },
      onNo: function onNo() {
        PLU.setBtnRed($btn, 0);
      }
    });
  },
  //================================================================================================
  /*
  toAutoGetKey: function toAutoGetKey($btn) {
    var btnFlag = PLU.setBtnRed($btn);
    if (!btnFlag) {
      return UTIL.delSysListener("listenGetKey");
    }
    clickButton("get yin yaoshi");
    UTIL.addSysListener("listenGetKey", function (b, type, subtype, msg) {
      if (g_obj_map.get("msg_room") && g_obj_map.get("msg_room").get("short").match(/匾后/)) {
        if (type == "jh") {
          if (subtype == "new_item") {
            if (b.get("id") == "yin yaoshi") clickButton("get yin yaoshi");
          } else if (subtype == "info") {
            clickButton("get yin yaoshi");
          }
        }
      }
    });
  },
  */
  toAutoGetKey: function toAutoGetKey($btn) {
    var btnFlag = PLU.setBtnRed($btn);
    if (!btnFlag) {
        return;
    }
    UTIL.addSysListener("listgetdaoju", function (b, type, subtype, msg) {
        if (type == "jh" && subtype == "new_item") {
            var autogetNames = PLU.getCache("getdaoju") || "钥匙,天山雪莲";
            autogetNames = autogetNames.split(",");
            var namesw = b.get("name");
            for (var i = autogetNames.length - 1; i >= 0; i--) {
                if (namesw.indexOf(autogetNames[i]) > -1) {
                    go("get " + b.get("id"));
                }
            }
        }
    });
    YFUI.showInput({
        title: "捡取物品",
        text: '格式:捡取物品名称<br>\n ',
        value: PLU.getCache("getdaoju") || "钥匙,天山雪莲",
        onOk: function onOk(val) {
            if (!$.trim(val)) return;
            var str = $.trim(val);
            PLU.setCache("getdaoju", str);
        },
        onNo: function onNo() {
            PLU.setBtnRed($btn, 0);
            UTIL.delSysListener("listgetdaoju");
        },
    });
},


  //================================================================================================
  toAutoMoke: function toAutoMoke($btn) {
    var btnFlag = PLU.setBtnRed($btn);
    if (!btnFlag) {
      PLU.STATUS.isBusy = false;
      return;
    }
    PLU.getAllItems(function (list) {
      var daoItems = list.find(function (it) {
        return !!it.name.match("玄铁刻刀");
      });
      var daoNum = (daoItems === null || daoItems === void 0 ? void 0 : daoItems.num) || 0;
      var eqItems = list.filter(function (it) {
        return !!(it.key.match(/(equip|weapon)_\S+([8-9]|[10-12])/) && !it.key.match("_moke_") && !it.key.match("_xinwu") && !it.key.match("_barcer"));
      });
      var myNum = 0;
      eqItems && eqItems.forEach(function (eq) {
        myNum += eq.num;
      });
      console.log(eqItems);
      YFUI.showPop({
        title: "自动摹刻所有明月",
        text: "一键自动摹刻所有明月装备!<br><span style='color:#F00;font-weight:bold;'>注意准备足够的刻刀!!!</span><br>当前玄铁刻刀数量 <span style='color:#F00;'>" + daoNum + "</span><br>当前未摹刻明月装备数量 <span style='color:#F00;'>" + myNum + "</span>",
        onOk: function onOk() {
          PLU.autoMoke(eqItems);
        },
        onNo: function onNo() {
          PLU.setBtnRed($btn, 0);
        }
      });
    });
  },
  autoMoke: function autoMoke(eqList) {
    if (!PLU.ONOFF["btn_bt_autoMoke"]) return YFUI.writeToOut("<span style='color:#F0F;'> ==摹刻暂停!== </span>");
    if (eqList && eqList.length > 0) {
      var eq = eqList.pop(),
        mokeCmds = "";
      mokeCmds;
      for (var i = 0; i < eq.num; i++) {
        mokeCmds += "moke " + eq.key + ";";
      }
      PLU.execActions(mokeCmds, function () {
        return PLU.autoMoke(eqList);
      });
    } else {
      PLU.setBtnRed($("#btn_bt_autoMoke"), 0);
      YFUI.writeToOut("<span style='color:yellow;'> ==摹刻完毕!== </span>");
    }
  },
  //================================================================================================
  toAutoKillZYY: function toAutoKillZYY($btn) {
    var btnFlag = PLU.setBtnRed($btn);
    if (!btnFlag) {
      return UTIL.delSysListener("listenLoopKillZYY");
    }
    YFUI.showPop({
      title: "自动去刷祝玉妍",
      text: "自动去刷祝玉妍!<br><span style='color:#FFF;background:#F00;font-weight:bold;'>----- 注意: -----</span><br><span style='color:#F00;font-weight:bold;'>1、准备足够的邪帝舍利!!!<br>2、不要有队伍!!!<br>3、切记要打开自动技能阵!!!<br>4、要上足够的保险卡!!!</span>",
      onOk: function onOk() {
        PLU.execActions("rank go 232;s;s;;;", function () {
          PLU.loopKillZYY();
        });
      },
      onNo: function onNo() {
        PLU.setBtnRed($btn, 0);
        UTIL.delSysListener("listenLoopKillZYY");
      }
    });
  },
  loopKillZYY: function loopKillZYY() {
    UTIL.addSysListener("listenLoopKillZYY", function (b, type, subtype, msg) {
      if (type == "vs" && subtype == "combat_result") {
        if (!PLU.ONOFF["btn_bt_autoKillZYY"]) {
          PLU.execActions(";;;n;", function () {
            YFUI.writeToOut("<span style='color:yellow;'>=====刷祝玉妍结束!!=====</span>");
            UTIL.delSysListener("listenLoopKillZYY");
          });
        } else {
          PLU.execActions(";;;n;s");
        }
      }
    });
    clickButton("s");
  },
  //================================================================================================
  toAutoFB11: function toAutoFB11($btn) {
    var btnFlag = PLU.setBtnRed($btn);
    if (!btnFlag) {
      return UTIL.delSysListener("listenFB11");
    }
    YFUI.showPop({
      title: "自动副本11",
      text: '自动打副本11!<br>\n                    <span style=\'color:#F00;font-weight:bold;\'>----- 选择要打的门 -----</span><br>\n                    <div style="font-size:12px;line-height:2;box">\n                    <label style="display:inline-block;width: 31%;text-align:center;border:1px solid #333;">8 懒惰<input type="checkbox" name="chkfb11" value="nw" checked/></label>\n                    <label style="display:inline-block;width: 31%;text-align:center;border:1px solid #333;">1非时食<input type="checkbox" name="chkfb11" value="n" checked/></label>\n                    <label style="display:inline-block;width: 31%;text-align:center;border:1px solid #333;">2 杀生<input type="checkbox" name="chkfb11" value="ne" checked/></label>\n                    <br>\n                    <label style="display:inline-block;width: 31%;text-align:center;border:1px solid #333;">7 奢华<input type="checkbox" name="chkfb11" value="w" checked/></label>\n                    <span style="display:inline-block;width: 31%;color:#999;text-align:center;border:1px solid transparent;">初心之地</span>\n                    <label style="display:inline-block;width: 31%;text-align:center;border:1px solid #333;">3 偷盗<input type="checkbox" name="chkfb11" value="e" checked/></label>\n                    <br>\n                    <label style="display:inline-block;width: 31%;text-align:center;border:1px solid #333;">6 饮酒<input type="checkbox" name="chkfb11" value="sw" checked/></label>\n                    <label style="display:inline-block;width: 31%;text-align:center;border:1px solid #333;">5 妄语<input type="checkbox" name="chkfb11" value="s" checked/></label>\n                    <label style="display:inline-block;width: 31%;text-align:center;border:1px solid #333;">4 淫邪<input type="checkbox" name="chkfb11" value="se" checked/></label><br>\n                    </div>\n                    <span style=\'color:#F00;font-weight:bold;\'>1、在副本外开始脚本<br>2、记得要组队<br></span>',
      okText: "开始",
      onOk: function onOk() {
        var chks = $('input[name="chkfb11"]:checked');
        var selects = [];
        $.each(chks, function (i, e) {
          selects.push(e.value);
        });
        if (selects.length == 0) return false;
        console.log(selects);
        //PLU.TMP.chkTmpList=[]
        //PLU.execActions('rank go 232;s;s;;;', ()=>{
        PLU.autoToFB11(selects);
        //})
        //UTIL.findRoomNpcReg
      },

      onNo: function onNo() {
        PLU.setBtnRed($btn, 0);
        UTIL.delSysListener("listenFB11");
      }
    });
  },
  autoToFB11: function autoToFB11() { },
  killAllNpc: function killAllNpc(callback) {
    var npcObj = UTIL.findRoomNpcReg("");
    if (npcObj) {
      var needAutoSkill = PLU.getCache("autoPerform") >= 1 ? null : "multi";
      PLU.autoFight({
        targetKey: npcObj.key,
        fightKind: "kill",
        autoSkill: needAutoSkill,
        onFail: function onFail() {
          setTimeout(function (t) {
            PLU.killAllNpc(callback);
          }, 1000);
        },
        onEnd: function onEnd() {
          setTimeout(function (t) {
            PLU.killAllNpc(callback);
          }, 500);
        }
      });
    } else {
      callback && callback();
    }
  },
  killyoumhy: function killyoumhy(endCallback) {
    var flag = false;
    PLU.execActions("jh 45;ne;ne;n;n;ne;ne;e;ne;#5 n;ne;ne;#3 n;nw;nw;n;#5 e;event_1_77775145 ymsz_houyuan;", function (f) {
      if (!f) return endCallback && endCallback(1);
      PLU.execActions("se;ak;=300;;se;=300;;s;=300;;w;=300;;e;=300;e;=300;;w=300;;s=300;;;s=300;;;s=300;;;w;=300;;e;=300;e;=300;;s=300;;;n;=300;e;;=300;e;;=300;n;=300;;s=300;;e=300;;;e=300;;;n;=300;attrs;;attrs;;attrs;;attrs;;attrs;;attrs;;ka;;", function (f2) {
        if (!f2) return endCallback && endCallback(2);
        PLU.execActions("=300;home;");
      });
    });
  },
  killFB11: function killFB11(endCallback) {
    var flag = false;
    PLU.execActions("fb 11;", function (f) {
      if (!f) return endCallback && endCallback(1);
      setTimeout(function () {
        PLU.execActions("nw;kill bajieshendian_zhushajun;se;n;kill bajieshendian_shishenyiya;s;ne;kill bajieshendian_shashenyanmin;sw;e;kill bajieshendian_daoshenwentao;w;se;kill bajieshendian_xieshenyecha;nw;s;kill bajieshendian_shangbaozheng;n;sw;kill bajieshendian_libai;ne;w;kill bajieshendian_yangguang;w;kill bajieshendian_yingzheng;e;e;nw;nw;kill bajieshendian_chengzhuanlaozhu;se;se;n;n;kill bajieshendian_penzhu;s;s;ne;ne;kill bajieshendian_shashenbaiqi;sw;sw;e;e;kill bajieshendian_daoshenwudaojianjun;w;w;se;se;kill bajieshendian_xieshenxintian;nw;nw;s;s;kill bajieshendian_maxinkong;n;n;sw;sw;kill bajieshendian_jiushenyidi;kill bajieshendian_luanzhixinmo;", function (f2) {      
        if (!f2) return endCallback && endCallback(2);
        setTimeout(function () {
          PLU.execActions("=2400;event_1_68529291;");
        }, 2000);
      });
      }, 2000);
    });
  },
  killFB10: function killFB10(endCallback) {
    var flag = false;
    PLU.execActions("fb 10;", function (f) {
      if (!f) return endCallback && endCallback(1);
      PLU.execActions("event_1_31980331;ak;;fb 10;event_1_23348240;;;fb 10;event_1_84015482;;;fb 10;event_1_25800358;;;event_1_24864938;;;fb 10;event_1_31980331;event_1_98378977;;;event_1_5376728;;event_1_43541317;;ka;event_1_5914414;", function (f2) {
        if (!f2) return endCallback && endCallback(2);
        PLU.execActions("home;");
      });
    });
  },
  //================================================================================================
  checkYouxia: function checkYouxia($btn) {
    YFUI.showPop({
      title: "检查入室游侠技能",
      text: '选择需要的对应技能:<br>\n                <div style="font-size:15px;">\n                    <label style="display:inline-block;">内功:<input type="checkbox" name="chkskiyx" value="内功" checked/></label>&nbsp;\n                    <label style="display:inline-block;">轻功:<input type="checkbox" name="chkskiyx" value="轻功" checked/></label>&nbsp;\n                    <label style="display:inline-block;">剑法:<input type="checkbox" name="chkskiyx" value="剑法" checked/></label>&nbsp;\n                    <label style="display:inline-block;">掌法:<input type="checkbox" name="chkskiyx" value="掌法" checked/></label>&nbsp;\n                    <label style="display:inline-block;">刀法:<input type="checkbox" name="chkskiyx" value="刀法" checked/></label>&nbsp;\n                    <label style="display:inline-block;">暗器:<input type="checkbox" name="chkskiyx" value="暗器"/></label>&nbsp;\n                    <label style="display:inline-block;">鞭法:<input type="checkbox" name="chkskiyx" value="鞭法"/></label>&nbsp;\n                    <label style="display:inline-block;">枪法:<input type="checkbox" name="chkskiyx" value="枪法"/></label>&nbsp;\n                    <label style="display:inline-block;">锤法:<input type="checkbox" name="chkskiyx" value="锤法"/></label>&nbsp;\n                    <label style="display:inline-block;">斧法:<input type="checkbox" name="chkskiyx" value="斧法"/></label>\n                </div>',
      onOk: function onOk() {
        var chks = $('input[name="chkskiyx"]:checked');
        var selects = [];
        PLU.TMP.chkTmpList = [];
        $.each(chks, function (i, e) {
          selects.push(e.value);
        });
        PLU.getSkillsList(function (allSkills, tupoSkills) {
          PLU.getYouxiaList(function (yxs) {
            PLU.checkMySkills(allSkills, yxs, selects);
          });
        });
      },
      onNo: function onNo() { }
    });
  },
  checkMySkills: function checkMySkills(mySkills, myYouxia, checkList) {
    // console.log(mySkills, myYouxia, checkList)
    var clstr = "";
    checkList.forEach(function (c) {
      return clstr += "【" + c[0] + "】";
    });
    YFUI.writeToOut("<span style='color:#FFF;'>--技能检测 <span style='color:yellow;'>" + clstr + "</span>--</span>");
    checkList.forEach(function (cn) {
      var carr = PLU.YFD.youxiaSkillMap.filter(function (r) {
        return r.type == cn;
      });
      carr.forEach(function (n) {
        PLU.checkPreSKill(n, mySkills, myYouxia);
      });
    });
    if (PLU.TMP.chkTmpList.length == 0) {
      YFUI.writeToOut("<span style='color:yellow;'>检查的技能都准备好了!</span>");
    }
  },
  checkPreSKill: function checkPreSKill(node, mySkills, myYouxia) {
    var ms = mySkills.find(function (s) {
      return s.name == node.skill;
    });
    if (!ms && !PLU.TMP.chkTmpList.includes(node.skill)) {
      PLU.TMP.chkTmpList.push(node.skill);
      var clr = node.kind == "宗师" || node.kind == "侠客" ? "#E93" : "#36E";
      var htm = '<span style="color:' + clr + ';">【' + node.type[0] + "】" + node.skill + " ";
      //htm+= ms?'<span style="color:#3F3;display:inline-block;">('+ms.level+')</span>':'(缺)';
      htm += '<span style="color:#F00;display:inline-block;">(未学)</span>';
      var myx = myYouxia.find(function (y) {
        return y.name.match(node.name);
      });
      htm += " - " + (myx ? '<span style="color:#3F3;display:inline-block;">' + myx.name + "[" + myx.level + "]</span>" : '<span style="color:#F36;display:inline-block;">需要:<span style="color:#FFF;background:' + clr + ';"> ' + node.kind + "-" + node.name + " </span></span>");
      htm += "</span>";
      YFUI.writeToOut(htm);
    }
    if (node.pre) {
      node.pre.forEach(function (n) {
        PLU.checkPreSKill(n, mySkills, myYouxia);
      });
    }
  },
  getYouxiaList: function getYouxiaList(callback) {
    UTIL.addSysListener("getYouxiaList", function (b, type, subtype, msg) {
      if (type != "fudi" && subtype != "juxian") return;
      UTIL.delSysListener("getYouxiaList");
      clickButton("prev");
      var youxias = [];
      for (var i = 0; i < 41; i++) {
        var str = b.get("yx" + i);
        if (str) {
          var attr = str.split(",");
          var ns = UTIL.filterMsg(attr[1]).split("】");
          var nam = ns.length > 1 ? ns[1] : ns[0];
          youxias.push({
            key: attr[0],
            name: nam,
            level: Number(attr[4]),
            kind: attr[3]
          });
        }
      }
      callback(youxias);
    });
    clickButton("fudi juxian");
  },
  //================================================================================================
  toAutoLearn: function toAutoLearn($btn) {
    if (!PLU.TMP.MASTER_SKILLS) {
      return YFUI.showPop({
        title: "缺少数据",
        text: "需要打开师傅技能界面"
        // onOk(){
        // },
      });
    }
    // console.log(PLU.TMP.MASTER_ID, PLU.TMP.MASTER_SKILLS)
    var needSkills = [];
    PLU.getSkillsList(function (allSkills, tupoSkills) {
      PLU.TMP.MASTER_SKILLS.forEach(function (ms) {
        var sk = allSkills.find(function (s) {
          return s.key == ms.key;
        }) || {
          level: 0
        };
        if (sk.level < ms.level) {
          needSkills.push({
            key: ms.key,
            name: ms.name,
            lvl: ms.level - sk.level,
            cmd: "learn " + ms.key + " from " + PLU.TMP.MASTER_ID + " to 10"
          });
        }
      });
      //console.log(needSkills.map(e=>e.name))
      loopLearn(needSkills);
    });
    var curSkill = null;
    UTIL.addSysListener("loopLearnSkill", function (b, type, subtype, msg) {
      if (type == "notice" && msg.indexOf("不愿意教你") >= 0) {
        //UTIL.delSysListener("loopLearnSkill");
        if (curSkill) curSkill.lvl = -1;
      }
      return;
    });
    var loopLearn = function loopLearn(list) {
      if (list.length > 0) {
        if (list[0].lvl > 0) {
          list[0].lvl -= 10;
          curSkill = list[0];
          clickButton(list[0].cmd);
        } else {
          list.shift();
        }
        setTimeout(function () {
          loopLearn(list);
        }, 200);
      } else {
        UTIL.delSysListener("loopLearnSkill");
        YFUI.writeToOut("<span style='color:#FFF;'>----自动学习结束,记得检查噢!----</span>");
      }
    };
  },
  //================================================================================================
  autoChuaiMo: function autoChuaiMo() {
    if (!PLU.ONOFF["btn_bt_autoChuaiMo"]) return;
    PLU.STATUS.isBusy = true;
    if (!PLU.TMP.CMSkill) {
      PLU.getSkillsList(function (allSkills, tupoSkills) {
        if (!PLU.TMP.CANTCMS) PLU.TMP.CANTCMS = [];
        PLU.TMP.CMSkill = allSkills.find(function (e) {
          return e.level >= 500 && e.level < 600 && e.name != "六阴追魂剑法" && (e.kind == "attack" || e.kind == "recovery" || e.kind == "force") && !PLU.TMP.CANTCMS.includes(e.name);
        });
        if (!PLU.TMP.CMSkill) {
          PLU.STATUS.isBusy = false;
          PLU.TMP.CMSkill = null;
          PLU.setBtnRed($("#btn_bt_autoChuaiMo"), 0);
        } else {
          clickButton("enable " + PLU.TMP.CMSkill.key);
          UTIL.addSysListener("listenChuaiMo", function (b, type, subtype, msg) {
            if (type == "notice" && (msg.indexOf("揣摩最高等级为") >= 0 || msg.indexOf("这项技能不能揣摩") >= 0)) {
              UTIL.delSysListener("listenChuaiMo");
              if (msg.indexOf("这项技能不能揣摩") >= 0) {
                PLU.TMP.CANTCMS.push(PLU.TMP.CMSkill.name);
              }
              YFUI.writeToOut("<span style='color:#FFF;'>--揣摩结束--</span>");
              PLU.TMP.CMSkill = null;
            }
            return;
          });
        }
        PLU.autoChuaiMo();
      });
    } else {
      clickButton("chuaimo go," + PLU.TMP.CMSkill.key, 0);
      setTimeout(function (e) {
        PLU.autoChuaiMo();
      }, 250);
    }
  },
  //================================================================================================
  autoLianXi: function (_autoLianXi) {
    function autoLianXi() {
      return _autoLianXi.apply(this, arguments);
    }
    autoLianXi.toString = function () {
      return _autoLianXi.toString();
    };
    return autoLianXi;
  }(function () {
    PLU.STATUS.isBusy = true; // 设置状态为忙碌
    PLU.getSkillsList(function (allSkills, tupoSkills) {
      // 获取技能列表
      PLU.TMP.CANTLXS = PLU.TMP.CANTLXS || []; // 初始化无法练习的技能列表
      PLU.TMP.LXISkill = allSkills.find(function (skill) {
        return skill.level >= 200 && skill.level < 500 && !PLU.TMP.CANTLXS.includes(skill.name) && !["基本钩法", "基本戟法", "六阴追魂剑法", "天魔焚身", "纵意登仙步", "九阴噬骨刀"].includes(skill.name) && ["attack", "recovery"].includes(skill.kind);
      });
      if (!PLU.TMP.LXISkill) {
        // 如果没有找到合适的技能
        PLU.STATUS.isBusy = false;
        return;
      }
      clickButton("enable " + PLU.TMP.LXISkill.key); // 启用找到的技能
      UTIL.addSysListener("listenLianXi", function (b, type, subtype, msg) {
        if (type === "notice") {
          if (msg.includes("练习已经不能提高了") || msg.includes("这项技能不能练习")) {
            // 处理练习结束的情况
            UTIL.delSysListener("listenLianXi");
            if (msg.includes("这项技能不能练习")) {
              PLU.TMP.CANTLXS.push(PLU.TMP.LXISkill.name);
            }
            clearTimeout(PLU.TMP.timer);
            PLU.STATUS.isBusy = false;
            PLU.TMP.LXISkill = null;
          } else if (msg.includes("你开始练习")) {
            // 如果正在练习其他技能
            UTIL.delSysListener("listenLianXi");
            YFUI.writeToOut("<span style='color:#FFF;'>--开始练习--</span>");
            clearTimeout(PLU.TMP.timer);
            PLU.STATUS.isBusy = false;
            PLU.TMP.LXISkill = null;
          }
        }
      });
      clickButton("practice " + PLU.TMP.LXISkill.key, 100); // 开始练习技能
      PLU.TMP.timer = setTimeout(autoLianXi, 250); // 设置定时器,250毫秒后继续练习
    });
  }),

  //================================================================================================
  toAutoTeach: function toAutoTeach($btn) {
    var btnFlag = PLU.setBtnRed($btn);
    if (!btnFlag) {
      PLU.STATUS.isBusy = false;
      PLU.TMP.TeachSkill = null;
      return;
    }
    YFUI.showPop({
      title: "自动传授游侠技能",
      text: "一键自动传授游侠技能!<b style='color:#F00;'>需要点开游侠技能界面,需要传授的技能不能为0级</b>",
      onOk: function onOk() {
        PLU.autoTeach();
      },
      onNo: function onNo() {
        PLU.setBtnRed($btn, 0);
      }
    });
  },
  //================================================================================================
  autoTeach: function autoTeach() {
    if (!PLU.ONOFF["btn_bt_autoTeach"]) return;
    PLU.STATUS.isBusy = true;
    if (PLU.TMP.CUR_YX_SKILLS) {
      var ac = PLU.TMP.CUR_YX_SKILLS.find(function (e) {
        return Number(e.lvl) > 0 && Number(e.lvl) < Number(e.max);
      });
      if (ac) {
        clickButton(ac.cmd, 0);
        setTimeout(function (e) {
          PLU.autoTeach();
        }, 200);
      } else {
        YFUI.writeToOut("<span style='color:#FFF;'>--传授结束--</span>");
        PLU.STATUS.isBusy = false;
        PLU.setBtnRed($("#btn_bt_autoTeach"), 0);
      }
    } else {
      PLU.STATUS.isBusy = false;
      PLU.setBtnRed($("#btn_bt_autoTeach"), 0);
    }
  },
  //================================================================================================
  toAutoUpgrade: function toAutoUpgrade($btn) {
    var btnFlag = PLU.setBtnRed($btn);
    if (!btnFlag) {
      PLU.STATUS.isBusy = false;
      PLU.TMP.TeachSkill = null;
      return;
    }
    YFUI.showPop({
      title: "自动升级游侠等级",
      text: "一键升级游侠等级!<b style='color:#F00;'>需要点开游侠技能界面</b>",
      onOk: function onOk() {
        PLU.autoUpgrade();
      },
      onNo: function onNo() {
        PLU.setBtnRed($btn, 0);
      }
    });
  },
  // 今天提升鸠摩智等级的次数已达到上限了。
  //不能提升阿朱的等级。
  //游侠等级超过上限了。
  //================================================================================================
  autoUpgrade: function autoUpgrade() {
    if (!PLU.ONOFF["btn_bt_autoUpgrade"]) return;
    PLU.STATUS.isBusy = true;
    if (PLU.TMP.CUR_YX_LEVEL && PLU.TMP.CUR_YX_SKILLS && PLU.TMP.CUR_YX_ENG) {
      if (PLU.TMP.CUR_YX_SKILLS.length > 4 && PLU.TMP.CUR_YX_LEVEL < 2000) {
        var canUpgrade = true;
        UTIL.addSysListener("listenAutoUpgrade", function (b, type, subtype, msg) {
          if (type == "notice" && (msg.indexOf("等级的次数已达到上限了") >= 0 || msg.indexOf("不能提升") >= 0 || msg.indexOf("等级超过上限了") >= 0)) {
            UTIL.delSysListener("listenAutoUpgrade");
            canUpgrade = false;
            PLU.STATUS.isBusy = false;
            YFUI.writeToOut("<span style='color:#FFF;'>--升级结束--</span>");
            PLU.setBtnRed($("#btn_bt_autoUpgrade"), 0);
          }
          return;
        });
        clickButton("fudi juxian upgrade go " + PLU.TMP.CUR_YX_ENG + " 100");
        setTimeout(function (e) {
          if (canUpgrade) PLU.autoUpgrade();
        }, 500);
      } else {
        YFUI.writeToOut("<span style='color:#FFF;'>--升级结束--</span>");
        PLU.STATUS.isBusy = false;
        PLU.setBtnRed($("#btn_bt_autoUpgrade"), 0);
      }
    } else {
      PLU.STATUS.isBusy = false;
      PLU.setBtnRed($("#btn_bt_autoUpgrade"), 0);
    }
  },
  //================================================================================================
  toLoopKillByN: function toLoopKillByN($btn) {
    var btnFlag = PLU.setBtnRed($btn);
    if (!btnFlag) {
      $("#btn_bt_loopKillByN").text("计数击杀");
      return;
    }
    clickButton("golook_room");
    YFUI.showInput({
      title: "计数击杀",
      text: "输入数量,确定后单击怪!!(数量后带小数点为比试)",
      value: PLU.getCache("lookKillNum") || 20,
      onOk: function onOk(val) {
        if (!Number(val)) return;
        setTimeout(function (o) {
          $(document).one("click", function (o) {
            var snpc = $(o.target).closest("button")[0].outerHTML.match(/clickButton\('look_npc (\w+)'/i);
            if (snpc && snpc.length >= 2) {
              var kf = String(val).indexOf(".") > 0 ? "fight" : "kill";
              PLU.setCache("lookKillNum", Number(val));
              PLU.loopKillByN(snpc[1], parseInt(val), kf);
            } else {
              PLU.setBtnRed($btn, 0);
            }
          });
        }, 500);
      },
      onNo: function onNo() {
        PLU.setBtnRed($btn, 0);
      }
    });
  },
  //================================================================================================
  loopKillByN: function loopKillByN(npcId, killN, killorfight) {
    if (killN <= 0 || !PLU.ONOFF["btn_bt_loopKillByN"]) return;
    $("#btn_bt_loopKillByN").text("停(" + killN + ")");
    PLU.autoFight({
      targetKey: npcId,
      fightKind: killorfight,
      autoSkill: "fast",
      onFail: function onFail() {
        setTimeout(function (t) {
          PLU.loopKillByN(npcId, killN, killorfight);
        }, 500);
      },
      onEnd: function onEnd() {
        if (killN <= 1) {
          PLU.setBtnRed($("#btn_bt_loopKillByN"), 0);
          $("#btn_bt_loopKillByN").text("计数击杀");
          clickButton("home", 1);
          return;
        } else {
          setTimeout(function (t) {
            PLU.loopKillByN(npcId, killN - 1, killorfight);
          }, 500);
        }
      }
    });
  },
  //================================================================================================
  toLoopKillName: function toLoopKillName($btn) {
    var btnFlag = PLU.setBtnRed($btn);
    if (!btnFlag) {
      $("#btn_bt_loopKillName").text("名字连杀");
      return;
    }
    YFUI.showInput({
      title: "名字连杀",
      text: '格式:次数|人物词组<br>\n                        次数:省略则默认1次<br>\n                        人物词组:以英文逗号分割多个关键词<br>\n                        <span style="color:red;">例如:</span><br>\n                        [例1] <span style="color:blue;">99|铁狼军,银狼军,金狼军,金狼将,十夫长,百夫长,千夫长</span><br>\n                        [例2] <span style="color:blue;">醉汉,收破烂的</span>;\n                        ',
      value: PLU.getCache("lookKillNames") || "299|铁狼军,银狼军,金狼军,金狼将,十夫长,百夫长,千夫长",
      onOk: function onOk(val) {
        if (!$.trim(val)) return;
        var str = $.trim(val),
          times = 1,
          names = "",
          arr = str.split("|");
        if (arr.length > 1) {
          times = Number(arr[0]) || 1;
          names = arr[1];
        } else {
          names = arr[0];
        }
        PLU.setCache("lookKillNames", str);
        PLU.loopKillName(names, Number(times));
      },
      onNo: function onNo() {
        PLU.setBtnRed($btn, 0);
      }
    });
  },
  //================================================================================================
  loopKillName: function loopKillName(names, killN) {
    if (killN <= 0 || !PLU.ONOFF["btn_bt_loopKillName"]) return;
    $("#btn_bt_loopKillName").text("停击杀(" + killN + ")");
    var npcObj = null,
      namesArr = names.split(",");
    for (var i = 0; i < namesArr.length; i++) {
      npcObj = UTIL.findRoomNpc(namesArr[i], false, true);
      if (npcObj) break;
    }
    if (npcObj) {
      var needAutoSkill = PLU.getCache("autoPerform") >= 1 ? null : "multi";
      PLU.autoFight({
        targetKey: npcObj.key,
        fightKind: "kill",
        autoSkill: needAutoSkill,
        onFail: function onFail() {
          setTimeout(function (t) {
            PLU.loopKillName(names, killN);
          }, 1000);
        },
        onEnd: function onEnd() {
          if (killN <= 1) {
            PLU.setBtnRed($("#btn_bt_loopKillName"), 0);
            $("#btn_bt_loopKillName").text("名字连杀");
            return;
          } else {
            setTimeout(function (t) {
              PLU.loopKillName(names, killN - 1);
            }, 1000);
          }
        }
      });
    } else {
      setTimeout(function (t) {
        PLU.loopKillName(names, killN);
      }, 2000);
    }
  },
  //================================================================================================
  toLoopKill: function toLoopKill($btn) {
    var btnFlag = PLU.setBtnRed($btn);
    if (!btnFlag) {
      // $("#btn_bt_kg_loopKill").text('循环杀')
      return;
    }
    YFUI.showInput({
      title: "循环杀",
      text: '格式:名字词组<br>\n                        名字词组:以英文逗号分割多个关键词, <b style="color:red;">可模糊匹配!</b><br>\n                        <span style="color:red;">不需要战斗时建议关闭以节省性能!!</span><br>\n                        [例1] <span style="color:blue;">铁狼军,银狼军,金狼军,金狼将,十夫长,百夫长,千夫长,蛮荒铁,蛮荒银,蛮荒金,寨近卫,蛮荒近卫</span><br>\n                        ',
      type: "textarea",
      value: PLU.getCache("lookKillKeys") || "怯薛军,蒙古突骑,草原枪骑,重装铁骑,狼军,狼将,夫长,蛮荒,近卫",
      onOk: function onOk(val) {
        if (!$.trim(val)) return;
        var str = $.trim(val),
          names = str.split(/[,,#]/);
        PLU.setCache("lookKillKeys", str);
        PLU.loopKills(str);
      },
      onNo: function onNo() {
        PLU.setBtnRed($btn, 0);
      }
    });
  },
  //================================================================================================
  loopKills: function loopKills(names) {
    if (!PLU.ONOFF["btn_bt_kg_loopKill"]) return;
    // $("#btn_bt_kg_loopKill").text('停循环');
    var npcObj = null,
      namesArr = names.split(/[,,#]/);
    for (var i = 0; i < namesArr.length; i++) {
      npcObj = UTIL.findRoomNpcReg(namesArr[i]);
      if (npcObj) break;
    }
    if (npcObj) {
      var needAutoSkill = PLU.getCache("autoPerform") >= 1 ? null : "multi";
      PLU.autoFight({
        targetKey: npcObj.key,
        fightKind: "kill",
        autoSkill: needAutoSkill,
        onFail: function onFail() {
          setTimeout(function (t) {
            PLU.loopKills(names);
          }, 1000);
        },
        onEnd: function onEnd() {
          setTimeout(function (t) {
            PLU.loopKills(names);
          }, 500);
        }
      });
    } else {
      setTimeout(function (t) {
        PLU.loopKills(names);
      }, 1000);
    }
  },
  //================================================================================================
  toLoopReadBase: function toLoopReadBase($btn) {
    var btnFlag = PLU.setBtnRed($btn);
    if (!btnFlag) {
      // $("#btn_bt_loopReadBase").text('读技能书')
      return;
    }
    YFUI.showInput({
      title: "读书还神",
      text: '格式:比试NPC名称|基础秘籍名称<br>\n                        比试NPC名称:要比试进行回神的NPC名字<br>\n                        基础秘籍名称:基础秘籍名称关键词<br>\n                        <span style="color:red;">战斗必刷道具栏必须用还神丹</span><br>\n                        <span style="color:red;">例如:</span><br>\n                        [例1] <span style="color:blue;">地痞|基本剑法秘籍</span>\n                        ',
      value: PLU.getCache("loopReadBase") || "地痞|基本剑法秘籍",
      onOk: function onOk(val) {
        if (!$.trim(val)) return;
        var str = $.trim(val),
          npcName = "",
          bookName = "",
          arr = str.split("|");
        if (arr.length > 1) {
          npcName = arr[0];
          bookName = arr[1];
          PLU.setCache("loopReadBase", str);
          PLU.getAllItems(function (list) {
            var bookItem = list.find(function (it) {
              return !!it.name.match(bookName);
            });
            var reN = Math.floor(g_obj_map.get("msg_attrs").get("max_shen_value") / 55) || 1;
            console.log(npcName, bookItem.key, reN);
            if (bookItem) {
              PLU.toggleAutoPerform($("#btn_bt_kg_autoPerform"), "autoPerform", 0);
              PLU.loopReadBase(npcName, bookItem.key, reN);
            }
          });
        } else {
          PLU.setBtnRed($btn, 0);
          return;
        }
      },
      onNo: function onNo() {
        PLU.setBtnRed($btn, 0);
      }
    });
  },
  loopReadBase: function loopReadBase(npcName, bookKey, reN) {
    //你使用了一本
    //你的神值不足:10以上。
    //你目前不能使用
    //使用技能等级为
    if (!PLU.ONOFF["btn_bt_loopReadBase"]) {
      UTIL.delSysListener("listenLoopReadBase");
      YFUI.writeToOut("<span style='color:#FFF;'>--读基本技能书停止--</span>");
      PLU.setBtnRed($("#btn_bt_loopReadBase"), 0);
      return;
    }
    UTIL.addSysListener("listenLoopReadBase", function (b, type, subtype, msg) {
      if (type == "main_msg" && msg.indexOf("你使用了一本") >= 0) {
        UTIL.delSysListener("listenLoopReadBase");
        setTimeout(function () {
          PLU.loopReadBase(npcName, bookKey, reN);
        }, 500);
      } else if (type == "notice" && msg.indexOf("你的神值不足") >= 0) {
        UTIL.delSysListener("listenLoopReadBase");
        setTimeout(function () {
          var refreshNumber = 0;
          PLU.autoFight({
            targetName: npcName,
            fightKind: "fight",
            autoSkill: "item",
            onStart: function onStart() {
              console.log("start fight==");
            },
            onFighting: function onFighting(ps) {
              if (refreshNumber >= reN) return true;
              if (ps && ps.key == "playskill 7") {
                refreshNumber++;
                console.log(ps.key, refreshNumber, reN);
                if (refreshNumber >= reN) {
                  PLU.autoEscape({});
                }
              }
            },
            onFail: function onFail(err) {
              console.log(err);
              setTimeout(function () {
                PLU.loopReadBase(npcName, bookKey, reN);
              }, 1000);
            },
            onEnd: function onEnd(e) {
              setTimeout(function () {
                PLU.loopReadBase(npcName, bookKey, reN);
              }, 1000);
            }
          });
        }, 500);
      } else if (type == "notice" && msg.indexOf("使用技能等级为") >= 0) {
        UTIL.delSysListener("listenLoopReadBase");
        YFUI.writeToOut("<span style='color:#FFF;'>--读基本技能书结束--</span>");
        PLU.setBtnRed($("#btn_bt_loopReadBase"), 0);
      } else if (type == "notice" && msg.indexOf("你的背包里没有这个物品") >= 0) {
        YFUI.writeToOut("<span style='color:#FFF;'>--读基本技能书停止--</span>");
        PLU.setBtnRed($("#btn_bt_loopReadBase"), 0);
      }
      return;
    });
    var cmds = "items use " + bookKey;
    PLU.execActions(cmds);
  },
  //================================================================================================
  toSearchFamilyQS: function toSearchFamilyQS($btn) {
    var btnFlag = PLU.setBtnRed($btn);
    if (!btnFlag) return;
    YFUI.showInput({
      title: "搜索师门任务",
      text: '格式:任务包含的关键字,多个以英文逗号分隔<br>\n                        <span style="color:red;">例如:</span><br>\n                        [例1] <span style="color:blue;">硫磺,黝黑山洞</span>\n            [例2] <span style="color:blue;">茅山,</span>\n                        ',
      value: PLU.getCache("searchFamilyQS") || "硫磺,黝黑山洞",
      onOk: function onOk(val) {
        if (!$.trim(val)) return;
        var str = $.trim(val),
          arr = str.split(",");
        if (arr.length > 1) {
          var _g_obj_map;
          PLU.setCache("searchFamilyQS", str);
          clickButton("family_quest", 0);
          PLU.TMP.master = (_g_obj_map = g_obj_map) === null || _g_obj_map === void 0 || (_g_obj_map = _g_obj_map.get("msg_attrs")) === null || _g_obj_map === void 0 ? void 0 : _g_obj_map.get("master_name");
          PLU.loopSearchFamilyQS(arr);
        } else {
          PLU.setBtnRed($btn, 0);
          return;
        }
      },
      onNo: function onNo() {
        PLU.setBtnRed($btn, 0);
      }
    });
  },
  loopSearchFamilyQS: function loopSearchFamilyQS(keys, cmd) {
    if (!PLU.ONOFF["btn_bt_searchFamilyQS"]) {
      UTIL.delSysListener("listenLoopSearchFamilyQS");
      YFUI.writeToOut("<span style='color:#FFF;'>--停止搜索--</span>");
      PLU.setBtnRed($("#btn_bt_searchFamilyQS"), 0);
      return;
    }
    UTIL.addSysListener("listenLoopSearchFamilyQS", function (b, type, subtype, msg) {
      if (type == "main_msg") {
        if (msg.indexOf("".concat(PLU.TMP.master, "一拂袖")) >= 0 || msg.indexOf("你现在没有师门任务。") >= 0) {
          UTIL.delSysListener("listenLoopSearchFamilyQS");
          setTimeout(function () {
            PLU.loopSearchFamilyQS(keys);
          }, 250);
        } else if (msg.indexOf("你现在的任务是") >= 0 || msg.indexOf(PLU.TMP.master) >= 0) {
          UTIL.delSysListener("listenLoopSearchFamilyQS");
          var qsStr = msg.replace(/\x03(0)?|href;0;|[\033|\27|\0x1b]\[[0-9|;]+m/gi, "");
          for (var i = 0; i < keys.length; i++) {
            var key = $.trim(keys[i]);
            if (key && qsStr.indexOf(key) >= 0) {
              YFUI.writeToOut("<span style='color:#FF0;'>========= 结束搜索 =========</span>");
              delete PLU.TMP.master;
              PLU.setBtnRed($("#btn_bt_searchFamilyQS"), 0);
              break;
            } else {
              setTimeout(function () {
                PLU.loopSearchFamilyQS(keys, "family_quest cancel go");
              }, 250);
            }
          }
        }
      }
    });
    if (cmd) clickButton(cmd); else clickButton("family_quest", 0);
  },
  //================================================================================================
  toSearchBangQS: function toSearchBangQS($btn) {
    var btnFlag = PLU.setBtnRed($btn);
    if (!btnFlag) return;
    YFUI.showInput({
      title: "搜索帮派任务",
      text: '格式:任务包含的关键字,多个以英文逗号分隔<br>\n                        <span style="color:red;">例如:</span><br>\n                        [例1] <span style="color:blue;">硫磺,黝黑山洞</span>\n                        ',
      value: PLU.getCache("searchBangQS") || "硫磺,黝黑山洞",
      onOk: function onOk(val) {
        if (!$.trim(val)) return;
        var str = $.trim(val),
          arr = str.split(",");
        if (arr.length > 1) {
          PLU.setCache("searchBangQS", str);
          clickButton("clan scene", 0);
          PLU.loopSearchBangQS(arr);
        } else {
          PLU.setBtnRed($btn, 0);
          return;
        }
      },
      onNo: function onNo() {
        PLU.setBtnRed($btn, 0);
      }
    });
  },
  loopSearchBangQS: function loopSearchBangQS(keys, cmd) {
    if (!PLU.ONOFF["btn_bt_searchBangQS"]) {
      UTIL.delSysListener("listenLoopSearchBangQS");
      YFUI.writeToOut("<span style='color:#FFF;'>--停止搜索--</span>");
      PLU.setBtnRed($("#btn_bt_searchBangQS"), 0);
      return;
    }
    UTIL.addSysListener("listenLoopSearchBangQS", function (b, type, subtype, msg) {
      if (type == "main_msg") {
        if (msg.indexOf("帮派使者一拂袖") >= 0 || msg.indexOf("帮派使者:现在没有任务") >= 0) {
          UTIL.delSysListener("listenLoopSearchBangQS");
          setTimeout(function () {
            PLU.loopSearchBangQS(keys);
          }, 250);
        } else if (msg.indexOf("你现在的任务是") >= 0 || msg.indexOf("帮派使者:") >= 0) {
          UTIL.delSysListener("listenLoopSearchBangQS");
          var qsStr = msg.replace(/\x03(0)?|href;0;|[\033|\27|\0x1b]\[[0-9|;]+m/gi, "");
          for (var i = 0; i < keys.length; i++) {
            var key = $.trim(keys[i]);
            if (key && qsStr.indexOf(key) >= 0) {
              YFUI.writeToOut("<span style='color:#FF0;'>========= 结束搜索 =========</span>");
              PLU.setBtnRed($("#btn_bt_searchBangQS"), 0);
              break;
            } else {
              setTimeout(function () {
                PLU.loopSearchBangQS(keys, "clan cancel_task go");
              }, 250);
            }
          }
        }
      }
    });
    if (cmd) clickButton(cmd); else clickButton("clan task", 0);
  },
  //================================================================================================
  toLoopClick: function toLoopClick($btn) {
    var btnFlag = PLU.setBtnRed($btn);
    if (!btnFlag) {
      $("#btn_bt_loopClick").text("自动点击");
      return;
    }
    YFUI.showInput({
      title: "自动点击",
      text: "输入自动点击的次数,确定后点击要点按钮",
      value: PLU.getCache("autoClickNum") || 20,
      onOk: function onOk(val) {
        if (!Number(val)) return;
        setTimeout(function (o) {
          $(document).one("click", function (o) {
            var snpc = $(o.target).closest("button")[0].outerHTML.match(/clickButton\([\'\"](.+)[\'\"](,\s*(\d+))*\)/i);
            if (snpc && snpc.length >= 2) {
              var _snpc$;
              var param = (_snpc$ = snpc[3]) !== null && _snpc$ !== void 0 ? _snpc$ : 0;
              PLU.setCache("autoClickNum", Number(val));
              PLU.loopClick(snpc[1], param, Number(val));
            } else {
              PLU.setBtnRed($btn, 0);
            }
          });
        }, 500);
      },
      onNo: function onNo() {
        PLU.setBtnRed($btn, 0);
      }
    });
  },
  //================================================================================================
  loopClick: function loopClick(btnCmd, param, clickNum) {
    if (!clickNum || clickNum < 1 || !PLU.ONOFF["btn_bt_loopClick"]) {
      PLU.setBtnRed($("#btn_bt_loopClick"), 0);
      $("#btn_bt_loopClick").text("连续点击");
      return;
    }
    $("#btn_bt_loopClick").text("停点击(" + clickNum + ")");
    clickButton(btnCmd, param);
    clickNum--;
    setTimeout(function () {
      PLU.loopClick(btnCmd, param, clickNum);
    }, 250);
  },
  //================================================================================================
  loopSlowClick: function loopSlowClick(btnCmd, param, clickNum, delay) {
    if (!delay) delay = 1000;
    if (!clickNum || clickNum < 1 || !PLU.ONOFF["btn_bt_loopSlowClick"]) {
      PLU.setBtnRed($("#btn_bt_loopSlowClick"), 0);
      $("#btn_bt_loopSlowClick").text("慢速点击");
      return;
    }
    $("#btn_bt_loopSlowClick").text("停(" + clickNum + ")");
    clickButton(btnCmd, param);
    clickNum--;
    setTimeout(function () {
      PLU.loopSlowClick(btnCmd, param, clickNum, delay);
    }, delay);
  },
  //================================================================================================
  toLoopSlowClick: function toLoopSlowClick($btn) {
    var btnFlag = PLU.setBtnRed($btn);
    if (!btnFlag) {
      $("#btn_bt_loopSlowClick").text("自动点击");
      return;
    }
    YFUI.showPop({
      title: "自动点击",
      text: '输入自动点击的次数,输入点击速度,确定后点击游戏中要点的按钮<br>\n                        <div style=\'margin:10px 0;\'>\n                            <span>速度(几秒一次): </span>\n                            <input id="slowClickSec" value="0.5" style="font-size:16px;height:30px;width:15%;"></input>\n                            <span>次数: </span>\n                            <input id="slowClickTimes" value="'.concat(PLU.getCache("autoClickNum") || 20, '" style="font-size:16px;height:26px;width:40%;"></input>\n                        </div>'),
      onOk: function onOk() {
        var times = Number($("#slowClickTimes").val()),
          delay = Number($("#slowClickSec").val());
        if (Number(times) <= 0 || Number(delay) <= 0) return;
        setTimeout(function (o) {
          $(document).one("click", function (o) {
            var snpc = $(o.target).closest("button")[0].outerHTML.match(/clickButton\([\'\"](.+)[\'\"](,\s*(\d+))*\)/i);
            if (snpc && snpc.length >= 2) {
              var _snpc$2;
              var param = (_snpc$2 = snpc[3]) !== null && _snpc$2 !== void 0 ? _snpc$2 : 0;
              PLU.setCache("autoClickNum", times);
              PLU.loopSlowClick(snpc[1], param, times, delay * 1000);
            } else {
              PLU.setBtnRed($btn, 0);
            }
          });
        }, 500);
      },
      onNo: function onNo() {
        PLU.setBtnRed($btn, 0);
      }
    });
  },
  toRecord: function toRecord($btn) {
    var btnFlag = PLU.setBtnRed($btn);
    if (btnFlag) {
      PLU.TMP.cmds = [];
      $("#btn_record").text("停止录制");
      return;
    }
    var cmds = PLU.TMP.cmds;
    delete PLU.TMP.cmds;
    // 指令壓縮算法
    var count = 1;
    for (var index = 0; index < cmds.length; index++) {
      if (cmds[index] == cmds[index + 1]) {
        count++;
        continue;
      }
      if (count >= 2 + cmds[index].length == 1) {
        index -= count - 1;
        cmds.splice(index, count, "#" + count + " " + cmds[index]);
      }
      count = 1;
    }
    cmds = cmds.map(function (e) {
      var res = e.match(/#\d+ ((jh|fb) \d+)/);
      return res ? res[1] : e;
    }).join(";");
    YFUI.showPop({
      title: "指令详情",
      text: cmds,
      okText: "复制",
      onOk: function onOk() {
        if (GM_setClipboard) GM_setClipboard(cmds); else YFUI.writeToOut("<span>权限不足!</span>");
        $("#btn_record").text("指令录制");
      }
    });
  },
  //================================================================================================
  autoMasterGem: function autoMasterGem($btn) {
    var btnFlag = PLU.setBtnRed($btn);
    if (!btnFlag) {
      $("#btn_bt_autoMasterGem").text("一键合天神");
      return;
    }
    var arr = ["碎裂的", "裂开的", "无前缀", "无暇的", "完美的", "君王的", "皇帝的"];
    var sel1 = '<select id="startGemLvl" style="font-size:16px;height:30px;width:25%;">';
    arr.forEach(function (p, pi) {
      sel1 += '<option value="' + pi + '" ' + (pi == 0 ? "selected" : "") + ">" + p + "</option>";
    });
    sel1 += "</select>";
    YFUI.showPop({
      title: "一键合天神",
      text: "选择合成起始宝石等级,选择速度(请根据网速和游戏速度选择),确定后自动向上合成所有<br>\n                        <div style='margin:10px 0;'>\n                            <span>起始等级: </span>".concat(sel1, '\n                            <span>速度(秒): </span>\n                            <select id="combineSec" style="font-size:16px;height:30px;width:15%;">\n                                <option selected>0.5</option>\n                                <option>1</option>\n                                <option>2</option>\n                                <option>3</option>\n                            </select>\n                        </div>'),
      width: "382px",
      okText: "开始",
      onOk: function onOk() {
        var startLvl = Number($("#startGemLvl").val()),
          delay = Number($("#combineSec").val());
        PLU.autoCombineMasterGem(startLvl, delay * 1000);
      },
      onNo: function onNo() {
        PLU.setBtnRed($btn, 0);
      }
    });
  },
  autoCombineMasterGem: function autoCombineMasterGem(startLvl, delay, gemCode, count) {
    if (!PLU.ONOFF["btn_bt_autoMasterGem"]) {
      PLU.setBtnRed($("#btn_bt_autoMasterGem"), 0);
      $("#btn_bt_autoMasterGem").text("一键合天神");
      YFUI.writeToOut("<span style='color:white;'>==停止合成宝石!==</span>");
      return;
    }
    if (!UTIL.sysListeners["listenCombineMasterGem"]) {
      UTIL.addSysListener("listenCombineMasterGem", function (b, type, subtype, msg) {
        if (type == "notice" && msg.indexOf("合成宝石需要") >= 0) {
          UTIL.delSysListener("listenCombineMasterGem");
          YFUI.writeToOut("<span style='color:#F00;'>--缺少银两, 合成结束--</span>");
          PLU.setBtnRed($("#btn_bt_autoMasterGem"), 0);
        }
        return;
      });
    }
    //合成宝石需要5万银两。
    //没有这么多的完美的蓝宝石
    if (!gemCode || count < 3) {
      PLU.getGemList(function (gemList) {
        // console.log(gemList)
        var g = gemList.find(function (e) {
          return e.key.indexOf("" + (startLvl + 1)) > 0 && e.num >= 3;
        });
        if (g) {
          PLU.autoCombineMasterGem(startLvl, delay, g.key, g.num);
        } else {
          if (startLvl < 6) PLU.autoCombineMasterGem(startLvl + 1, delay); else {
            PLU.setBtnRed($("#btn_bt_autoMasterGem"), 0);
            YFUI.writeToOut("<span style='color:white;'>==合成宝石结束!==</span>");
          }
        }
      });
    } else {
      var cd = delay / 4 | 250,
        n = 1;
      cd = cd > 250 ? cd : 250;
      if (count >= 30000) {
        n = 10000;
        cd = delay;
      } else if (count >= 15000) {
        n = 5000;
        cd = delay;
      } else if (count >= 9000) {
        n = 3000;
        cd = delay;
      } else if (count >= 3000) {
        n = 1000;
        cd = delay;
      } else if (count >= 300) {
        n = 100;
        cd = delay;
      } else if (count >= 150) {
        n = 50;
        cd = delay;
      } else if (count >= 90) {
        n = 30;
        cd = delay / 2 | 0;
      } else if (count >= 30) {
        n = 10;
        cd = delay / 3 | 0;
      }
      var cmd = "items hecheng " + gemCode + "_N_" + n + "";
      clickButton(cmd);
      setTimeout(function () {
        PLU.autoCombineMasterGem(startLvl, delay, gemCode, count - n * 3);
      }, cd);
    }
  },
  //================================================================================================
  toSellLaji: function toSellLaji($btn) {
    var btnFlag = PLU.setBtnRed($btn);
    if (!btnFlag) {
      //$("#btn_bt_sellLaji").text('清理垃圾')
      return;
    }
    var defaultList = "破烂衣服,水草,木盾,铁盾,藤甲盾,青铜盾,鞶革,军袍,麻带,破披风,长斗篷,牛皮带,锦缎腰带,丝质披风,逆钩匕,匕首,铁甲,重甲,精铁甲,逆钩匕,银丝甲,梅花匕,软甲衣,羊角匕,金刚杖,白蟒鞭,天寒项链,天寒手镯,新月棍,天寒戒,天寒帽,天寒鞋,金弹子,拜月掌套,斩空刀,飞羽剑,七星宝戒,迷幻经纶,长剑,鹿皮小靴,铁手镯,银手镯,丝绸马褂,钢剑,布鞋,布衣,铁项链,银项链,单刀,丝绸衣,竹剑,松子,黑棋子,白棋子,沉虹刀,丝衣,木棍,钢刀,铁戒,银戒,船篙";
    YFUI.showInput({
      title: "清理垃圾",
      text: '格式:物品词组<br>\n                        物品词组:以英文逗号分割多个关键词<br>\n                        <span style="color:red;">例如:</span><br>\n                        [例1] <span style="color:blue;">'.concat(defaultList, "</span><br>\n                        "),
      value: PLU.getCache("sellItemNames") || defaultList,
      type: "textarea",
      onOk: function onOk(val) {
        if (!$.trim(val)) return;
        var str = $.trim(val);
        PLU.setCache("sellItemNames", str);
        var keysList = str.split(",");
        var itemsTimeOut = setTimeout(function () {
          UTIL.delSysListener("listItems");
        }, 5000);
        UTIL.addSysListener("listItems", function (b, type, subtype, msg) {
          if (type != "items") return;
          UTIL.delSysListener("listItems");
          clearTimeout(itemsTimeOut);
          clickButton("prev");
          var iId = 1,
            itemList = [];
          while (b.get("items" + iId)) {
            var it = UTIL.filterMsg(b.get("items" + iId)).split(",");
            if (it && it.length > 4 && it[3] == "0" && keysList.includes(it[1])) itemList.push({
              key: it[0],
              name: it[1],
              num: Number(it[2])
            });
            iId++;
          }
          PLU.loopSellItems(itemList);
        });
        clickButton("items", 0);
      },
      onNo: function onNo() {
        PLU.setBtnRed($btn, 0);
      }
    });
  },
  //================================================================================================
  loopSellItems: function loopSellItems(itemList) {
    if (itemList.length <= 0) {
      PLU.setBtnRed($("#btn_bt_sellLaji"), 0);
      return YFUI.writeToOut("<span style='color:#F66;'>--无出售物件!--</span>");
    }
    var ac = [];
    itemList.forEach(function (it) {
      var ct = it.num;
      while (ct > 0) {
        if (ct >= 10000) {
          ac.push("items sell " + it.key + "_N_10000");
          ct -= 10000;
        } else if (ct >= 1000) {
          ac.push("items sell " + it.key + "_N_1000");
          ct -= 1000;
        } else if (ct >= 100) {
          ac.push("items sell " + it.key + "_N_100");
          ct -= 100;
        } else if (ct >= 50) {
          ac.push("items sell " + it.key + "_N_50");
          ct -= 50;
        } else if (ct >= 10) {
          ac.push("items sell " + it.key + "_N_10");
          ct -= 10;
        } else {
          ac.push("items sell " + it.key + "");
          ct -= 1;
        }
      }
    });
    var acs = ac.join(";");
    PLU.fastExec(acs, function () {
      PLU.setBtnRed($("#btn_bt_sellLaji"), 0);
      YFUI.writeToOut("<span style='color:white;'>==出售完成!==</span>");
    });
  },
  //================================================================================================
  toSplitItem: function toSplitItem($btn) {
    var btnFlag = PLU.setBtnRed($btn);
    if (!btnFlag) return;
    var defaultList = "玄武盾,破军盾,金丝宝甲衣,夜行披风,羊毛斗篷,残雪戒,残雪项链,残雪手镯,残雪鞋,金丝甲,宝玉甲,月光宝甲,虎皮腰带,沧海护腰,红光匕,毒龙鞭,玉清棍,霹雳掌套,血屠刀,生死符,残雪帽,星河剑,疯魔杖,天寒匕,无心匕,明月戒,明月鞋,明月帽,明月手镯,明月项链,软猬甲,月光宝甲衣,扬文,碧磷鞭,倚天剑,屠龙刀";
    YFUI.showInput({
      title: "分解装备",
      text: '格式:物品词组<br>\n                        物品词组:以英文逗号分割多个关键词<br>\n                        <span style="color:red;">例如:</span><br>\n                        [例1] <span style="color:blue;">'.concat(defaultList, "</span><br>\n                        "),
      value: PLU.getCache("splitItemNames") || defaultList,
      type: "textarea",
      onOk: function onOk(val) {
        if (!$.trim(val)) return;
        var str = $.trim(val);
        PLU.setCache("splitItemNames", str);
        var keysList = str.split(",");
        var itemsTimeOut = setTimeout(function () {
          UTIL.delSysListener("listItems_si");
        }, 5000);
        UTIL.addSysListener("listItems_si", function (b, type, subtype, msg) {
          if (type != "items") return;
          UTIL.delSysListener("listItems_si");
          clearTimeout(itemsTimeOut);
          clickButton("prev");
          var iId = 1,
            itemList = [];
          while (b.get("items" + iId)) {
            var it = UTIL.filterMsg(b.get("items" + iId)).split(",");
            if (it && it.length > 4 && it[3] == "0" && keysList.includes(it[1])) itemList.push({
              key: it[0],
              name: it[1],
              num: Number(it[2])
            });
            iId++;
          }
          PLU.loopSplitItem(itemList);
        });
        clickButton("items", 0);
      },
      onNo: function onNo() {
        PLU.setBtnRed($btn, 0);
      }
    });
  },
  //================================================================================================
  loopSplitItem: function loopSplitItem(itemList) {
    if (itemList.length <= 0) {
      PLU.setBtnRed($("#btn_bt_splitItem"), 0);
      return YFUI.writeToOut("<span style='color:#F66;'>--无分解物件!--</span>");
    }
    var ac = [];
    itemList.forEach(function (it) {
      var ct = it.num;
      while (ct > 0) {
        if (ct >= 100) {
          ac.push("items splite " + it.key + "_N_100");
          ct -= 100;
        } else if (ct >= 50) {
          ac.push("items splite " + it.key + "_N_50");
          ct -= 50;
        } else if (ct >= 10) {
          ac.push("items splite " + it.key + "_N_10");
          ct -= 10;
        } else {
          ac.push("items splite " + it.key + "");
          ct -= 1;
        }
      }
    });
    var acs = ac.join(";");
    PLU.fastExec(acs, function () {
      PLU.setBtnRed($("#btn_bt_splitItem"), 0);
      YFUI.writeToOut("<span style='color:white;'>==分解完成!==</span>");
    });
  },
  //================================================================================================
  toPutStore: function toPutStore($btn) {
    var btnFlag = PLU.setBtnRed($btn);
    if (!btnFlag) return;
    var defaultList = "树枝,碎片,璞玉,青玉,墨玉,白玉,秘籍木盒,锦袋,瑞雪针扣,武穆遗书,隐武竹笺,空识卷轴,技能书,开元宝票,霹雳弹,舞鸢尾,百宜雪梅,宝石,宝箱,技能天书,钥匙,玄重铁,武林至高绝学残页,九转,采掘许可,提速卡,采掘许可,礼券";
    YFUI.showInput({
      title: "物品入库",
      text: '格式:物品词组<br>\n                        物品词组:以英文逗号分割多个关键词<br>\n                        <span style="color:red;">例如:</span><br>\n                        [例1] <span style="color:blue;">'.concat(defaultList, "</span><br>\n                        "),
      value: PLU.getCache("putStoreNames") || defaultList,
      type: "textarea",
      onOk: function onOk(val) {
        if (!$.trim(val)) return;
        var str = $.trim(val);
        PLU.setCache("putStoreNames", str);
        var keysList = str.split(",").join("|");
        var itemsTimeOut = setTimeout(function () {
          UTIL.delSysListener("listItems_ps");
        }, 5000);
        UTIL.addSysListener("listItems_ps", function (b, type, subtype, msg) {
          if (type != "items") return;
          UTIL.delSysListener("listItems_ps");
          clearTimeout(itemsTimeOut);
          clickButton("prev");
          var iId = 1,
            itemList = [];
          while (b.get("items" + iId)) {
            var it = UTIL.filterMsg(b.get("items" + iId)).split(",");
            if (it && it.length > 4 && it[3] == "0" && it[1].match(keysList) && it[1] != "青龙碎片" && it[1] != "玄铁碎片") itemList.push({
              key: it[0],
              name: it[1],
              num: Number(it[2])
            });
            iId++;
          }
          PLU.loopPutStore(itemList);
        });
        clickButton("items", 0);
      },
      onNo: function onNo() {
        PLU.setBtnRed($btn, 0);
      }
    });
  },
  //================================================================================================
  loopPutStore: function loopPutStore(itemList) {
    if (itemList.length <= 0) {
      PLU.setBtnRed($("#btn_bt_putStore"), 0);
      return YFUI.writeToOut("<span style='color:#F66;'>--无物件入库!--</span>");
    }
    var ac = [];
    itemList.forEach(function (it) {
      ac.push("items put_store " + it.key + "");
    });
    PLU.fastExec(ac.join(";"), function () {
      PLU.setBtnRed($("#btn_bt_putStore"), 0);
      YFUI.writeToOut("<span style='color:white;'>==入库完成!==</span>");
    });
  },
  //================================================================================================
  toAutoUse: function toAutoUse($btn) {
    var btnFlag = PLU.setBtnRed($btn);
    if (!btnFlag) return;
    var defaultList = "*神秘宝箱,灵草,紫芝,狂暴丹,小还丹,大还丹,高级大还丹,高级狂暴丹,高级乾坤再造丹,百年灵草,百年紫芝,特级大还丹,特级狂暴丹,特级乾坤再造丹,千年灵草,千年紫芝,顶级大还丹,顶级狂暴补丸,顶级乾坤补丸,万年灵草,万年紫芝";
    YFUI.showInput({
      title: "物品使用",
      text: '格式:物品词组<br>\n                        物品词组:以英文逗号分割多个关键词, 只能单个使用的物品前面加*星号<br>\n                        <span style="color:red;">例如:</span><br>\n                        [例1] <span style="color:blue;">'.concat(defaultList, "</span><br>\n                        "),
      value: PLU.getCache("autoUseNames") || defaultList,
      type: "textarea",
      onOk: function onOk(val) {
        if (!$.trim(val)) return;
        var str = $.trim(val);
        PLU.setCache("autoUseNames", str);
        var keysList = str.split(",");
        var itemsTimeOut = setTimeout(function () {
          UTIL.delSysListener("listItems_au");
        }, 5000);
        UTIL.addSysListener("listItems_au", function (b, type, subtype, msg) {
          if (type != "items") return;
          UTIL.delSysListener("listItems_au");
          clearTimeout(itemsTimeOut);
          clickButton("prev");
          var iId = 1,
            itemList = [];
          while (b.get("items" + iId)) {
            var it = UTIL.filterMsg(b.get("items" + iId)).split(",");
            if (!it[1]) continue;
            if (it && it.length > 4 && it[3] == "0") {
              if (keysList.includes(it[1])) itemList.push({
                key: it[0],
                name: it[1],
                num: Number(it[2]),
                multi: true
              }); else if (keysList.includes("*" + it[1])) itemList.push({
                key: it[0],
                name: it[1],
                num: Number(it[2]),
                multi: false
              });
            }
            iId++;
          }
          PLU.loopAutoUse(itemList);
        });
        clickButton("items", 0);
      },
      onNo: function onNo() {
        PLU.setBtnRed($btn, 0);
      }
    });
  },
  //================================================================================================
  loopAutoUse: function loopAutoUse(itemList) {
    if (itemList.length <= 0) {
      PLU.setBtnRed($("#btn_bt_autoUse"), 0);
      return YFUI.writeToOut("<span style='color:#F66;'>--无物件使用!--</span>");
    }
    var ac = [];
    itemList.forEach(function (it) {
      var ct = it.num;
      while (ct > 0) {
        if (it.multi && ct >= 100) {
          ac.push("items use " + it.key + "_N_100");
          ct -= 100;
        } else if (it.multi && ct >= 50) {
          ac.push("items use " + it.key + "_N_50");
          ct -= 50;
        } else if (it.multi && ct >= 10) {
          ac.push("items use " + it.key + "_N_10");
          ct -= 10;
        } else {
          ac.push("items use " + it.key + "");
          ct -= 1;
        }
      }
    });
    PLU.fastExec(ac.join(";"), function () {
      PLU.setBtnRed($("#btn_bt_autoUse"), 0);
      YFUI.writeToOut("<span style='color:white;'>==使用完成!==</span>");
    });
  },
  //================================================================================================
  toLoopScript: function toLoopScript($btn) {
    var btnFlag = PLU.setBtnRed($btn);
    if (!btnFlag) {
      $("#btn_bt_loopScript").text("循环执行");
      PLU.STO.loopScTo && clearTimeout(PLU.STO.loopScTo) && delete PLU.STO.loopScTo;
      return;
    }
    YFUI.showInput({
      title: "循环执行",
      text: '格式:循环次数@时间间隔|执行指令<br>\n                        循环次数:省略则默认1次<br>\n                        时间间隔:省略则默认5(5秒)<br>\n                        执行指令:以分号分隔的指令<br>\n                        <span style="color:red;">例如</span><br>\n                        [例1] 3@5|jh 1;e;n;home;<br>\n                        [例2] jh 5;n;n;n;w;sign7;\n                        ',
      value: PLU.getCache("loopScript") || "home;",
      type: "textarea",
      onOk: function onOk(val) {
        if (!$.trim(val)) return;
        var str = $.trim(val),
          scripts = "",
          times = 1,
          interval = 5,
          arr = str.split("|");
        if (arr.length > 1) {
          scripts = arr[1];
          if (arr[0].indexOf("@") >= 0) {
            times = Number(arr[0].split("@")[0]) || 1;
            interval = Number(arr[0].split("@")[1]) || 5;
          } else {
            times = Number(arr[0]) || 1;
          }
        } else {
          scripts = arr[0];
        }
        PLU.setCache("loopScript", str);
        PLU.loopScript(scripts, times, interval);
      },
      onNo: function onNo() {
        PLU.setBtnRed($btn, 0);
      }
    });
  },
  //================================================================================================
  loopScript: function loopScript(scripts, times, interval) {
    times--;
    $("#btn_bt_loopScript").text("停执行(" + times + ")");
    PLU.execActions(scripts, function () {
      if (times <= 0 || !PLU.ONOFF["btn_bt_loopScript"]) {
        PLU.setBtnRed($("#btn_bt_loopScript"), 0);
        $("#btn_bt_loopScript").text("循环执行");
        PLU.STO.loopScTo && clearTimeout(PLU.STO.loopScTo) && delete PLU.STO.loopScTo;
        return;
      } else {
        PLU.STO.loopScTo = setTimeout(function () {
          PLU.loopScript(scripts, times, interval);
        }, interval * 1000);
      }
    });
  },
  //================================================================================================
  toAutoAskQixia: function toAutoAskQixia($btn, autoTime) {
    if (g_gmain.is_fighting) return;
    var btnFlag = PLU.setBtnRed($btn);
    if (!btnFlag) return;
    $(".menu").hide();
    clickButton("open jhqx", 0);
    YFUI.showPop({
      title: "自动访问奇侠",
      text: "自动对话所有有亲密度的奇侠<br>请在做完20次赞助金锭后再进行<br><b style='color:#F00;'>是否现在进行?</b>",
      autoOk: autoTime !== null && autoTime !== void 0 ? autoTime : null,
      onOk: function onOk() {
        var jhqxTimeOut = setTimeout(function () {
          UTIL.delSysListener("listQixia");
          PLU.setBtnRed($btn, 0);
        }, 5000);
        UTIL.addSysListener("listQixia", function (b, type, subtype, msg) {
          if (type != "show_html_page" || msg.indexOf("江湖奇侠成长信息") < 0) return;
          UTIL.delSysListener("listQixia");
          clearTimeout(jhqxTimeOut);
          var listHtml = msg;
          clickButton("prev");
          var str = "find_task_road qixia (\\d+)\x03(.{2,4})\x030\x03\\((\\d+)\\)(.{15,25}朱果)?.{30,50}(已出师|未出世)",
            //let str = "find_task_road qixia (\\d+)\x03(.{2,4})\x030\x03\\((\\d+)\\)(.{15,25}朱果?.{30,50}已出师)",
            rg1 = new RegExp(str, "g"),
            rg2 = new RegExp(str),
            visQxs = [];
          listHtml.match(rg1).forEach(function (e) {
            var a = e.match(rg2);
            if (a) visQxs.push({
              key: a[1],
              name: a[2],
              num: Number(a[3]),
              link: "find_task_road qixia " + a[1],
              fast: a[4] ? "open jhqx " + a[1] : null
            });
          });
          visQxs = visQxs.sort(function (a, b) {
            if (a.fast && b.num >= 25000) return -1; else return 2;
          });
          visQxs.reverse();
          PLU.toAskQixia(visQxs, 0);
        });
        clickButton("open jhqx", 0);
      },
      onNo: function onNo() {
        PLU.setBtnRed($btn, 0);
      }
    });
  },
  //================================================================================================
  toAskQixia: function toAskQixia(qxList, idx) {
    clickButton("home");
    if (idx >= qxList.length || !PLU.ONOFF["btn_bt_autoAskQixia"]) {
      PLU.setBtnRed($("#btn_bt_autoAskQixia"), 0);
      YFUI.writeToOut("<span style='color:#FFF;'>--奇侠访问结束!--</span>");
      YFUI.writeToOut("<span style='color:yellow;'> 今日一共获得玄铁令x" + PLU.TMP.todayGetXT + "</span>");
      UTIL.log({
        msg: " 今日一共获得玄铁令x " + PLU.TMP.todayGetXT + "  ",
        type: "TIPS",
        time: new Date().getTime()
      });
      return;
    }
    var qxObj = qxList[idx];
    if (qxObj.fast) {
      clickButton(qxObj.fast, 0);
      setTimeout(function () {
        PLU.toAskQixia(qxList, idx + 1);
      }, 500);
    } else {
      PLU.execActions(qxObj.link + ";golook_room;", function () {
        var objNpc = UTIL.findRoomNpc(qxObj.name, false, true);
        if (objNpc) {
          PLU.execActions("ask " + objNpc.key + ";ask " + objNpc.key + ";ask " + objNpc.key + ";ask " + objNpc.key + ";ask " + objNpc.key + ";golook_room;", function () {
            setTimeout(function () {
              PLU.toAskQixia(qxList, idx + 1);
            }, 500);
          });
        } else {
          YFUI.writeToOut("<span style='color:#FFF;'>--找不到奇侠:" + qxObj.name + "--</span>");
          setTimeout(function () {
            PLU.toAskQixia(qxList, idx + 1);
          }, 500);
        }
      });
    }
  },
  //================================================================================================
  getQixiaList: function getQixiaList(callback) {
    var jhQixiaTimeOut = setTimeout(function () {
      UTIL.delSysListener("getlistQixia");
    }, 5000);
    UTIL.addSysListener("getlistQixia", function (b, type, subtype, msg) {
      if (type != "show_html_page" || msg.indexOf("江湖奇侠成长信息") < 0) return;
      UTIL.delSysListener("getlistQixia");
      clearTimeout(jhQixiaTimeOut);
      unsafeWindow.ttttt = msg;
      var listHtml = msg.replace(/\x03(0)?|href;0;|[\033|\27|\0x1b]\[[0-9|;]+m/gi, "");
      clickButton("prev");
      var str = "find_task_road qixia (\\d+)(.{2,4})(\\((\\d*)\\))?(open jhqx \\d+朱果)?<\\/td><td.{20,35}>(.{1,10})<\\/td><td.{20,35}>(.{1,15})<\\/td><td .{20,40}领悟(.{2,10})<\\/td><\\/tr>";
      var rg1 = new RegExp(str, "g"),
        rg2 = new RegExp(str),
        qxList = [];
      listHtml.match(rg1).forEach(function (e) {
        var a = e.match(rg2);
        if (a) qxList.push({
          index: a[1],
          name: a[2],
          num: Number(a[4]) || 0,
          link: "find_task_road qixia " + a[1],
          fast: a[5] ? "open jhqx " + a[1] : null,
          inJh: a[6] && a[6].indexOf("未出世") < 0 ? true : false
        });
      });
      callback && callback(qxList);
    });
    clickButton("open jhqx", 0);
  },
  //================================================================================================
  toAutoVisitQixia: function toAutoVisitQixia($btn) {
    if (g_gmain.is_fighting) return;
    var btnFlag = PLU.setBtnRed($btn);
    if (!btnFlag) {
      //$("#btn_bt_autoVisitQixia").text('亲近奇侠')
      PLU.TMP.autoQixiaMijing = false;
      return;
    }
    $(".menu").hide();
    clickButton("open jhqx", 0);
    YFUI.showInput({
      title: "奇侠秘境",
      text: '请输入要提升亲密度的游侠的姓名<br>\n                        格式:金锭数量|游侠姓名@目标友好度<br>\n                        金锭数量:给予1或5或15金锭,可省略则只对话<br>\n                        游侠姓名:只能输入一个游侠姓名<br>\n                        目标友好度:省略则以可学技能的友好度为目标<br>\n                        <span style="color:red;">例如</span><br>\n                        [例1] 15|风无痕 <span style="color:blue;">访问风无痕赠与15金锭</span><br>\n                        [例2] 火云邪神 <span style="color:blue;">访问火云邪神对话</span><br>\n                        [例2] 15|步惊鸿@30000 <span style="color:blue;">访问步惊鸿对话赠与15金锭到30000友好度</span><br>\n                        ' + '<div style="text-align:right;"><label>自动挖宝:<input type="checkbox" id="to_if_auwb" name="awb" value="1"/></label><label>不要扫荡秘境:<input type="checkbox" id="if_auto_mj" name="noamj" value="1"/></label></div>',
      value: PLU.getCache("visitQixiaName") || "15|风无痕@40000",
      onOk: function onOk(val) {
        if (!$.trim(val)) return;
        var str = $.trim(val),
          arr = str.split("|"),
          giveNum = 15,
          qxName = "",
          objectFN = 0;
        var ifAutoMj = $("#if_auto_mj").is(":checked");
        var ifAutoWb = $("#if_auto_wb").is(":checked");
        
        if (arr.length > 1) {
          giveNum = Number(arr[0]) || 15;
          var nn = arr[1].split("@");
          qxName = nn[0].trim();
          if (nn.length > 1) objectFN = Number(nn[1]);
        } else {
          giveNum = 0;
          var _nn = arr[0].split("@");
          qxName = _nn[0].trim();
          if (_nn.length > 1) objectFN = Number(_nn[1]);
        }
        PLU.setCache("visitQixiaName", str);
        PLU.TMP.todayGetXT = 0;
        UTIL.delSysListener("listenVisitNotice");
        PLU.STO.listenVisit && clearTimeout(PLU.STO.listenVisit);
        PLU.TMP.goingQixiaMijing = false;
        PLU.tryVisitQixia(qxName, giveNum, objectFN, ifAutoMj, ifAutoWb, function (err) {
          if (err) {
            if (err.code == 1) {
              PLU.setBtnRed($btn, 0);
              UTIL.delSysListener("listenVisitNotice");
              PLU.toAutoAskQixia($("#btn_bt_autoAskQixia"), 10);
              YFUI.writeToOut("<span style='color:yellow;'> 今日一共获得玄铁令x" + PLU.TMP.todayGetXT + "</span>");
              UTIL.log({
                msg: " 今日一共获得玄铁令x " + PLU.TMP.todayGetXT + "  ",
                type: "TIPS",
                time: new Date().getTime()
              });
            } else {
              YFUI.showPop({
                title: "提示",
                text: "<b style='color:#F00;'>" + err.msg + "</b>",
                onOk: function onOk() {
                  PLU.setBtnRed($btn, 0);
                  PLU.toAutoVisitQixia($btn);
                },
                onX: function onX() {
                  PLU.setBtnRed($btn, 0);
                }
              });
            }
          }
        });
      },
      onNo: function onNo() {
        PLU.setBtnRed($btn, 0);
      },
      onX: function onX() {
        PLU.setBtnRed($btn, 0);
      }
    });
  },
  //================================================================================================
  tryVisitQixia: function tryVisitQixia(qxName, giveNum, objectFN, ifAutoMj, ifAutoWb, callback) {
    PLU.TMP.autoQixiaMijing = true;
    //发现
    PLU.getQixiaList(function (qxlist) {
      var testDone = qxlist.find(function (e) {
        return !!e.fast;
      });
      if (testDone) {
        PLU.STO.listenVisit && clearTimeout(PLU.STO.listenVisit);
        callback && callback({
          code: 1,
          msg: "今日奇侠友好度操作已经完毕"
        });
        return;
      }
      var qx = qxlist.find(function (e) {
        return e.name == qxName;
      });
      if (!qx) {
        callback && callback({
          code: 2,
          msg: "没有这个奇侠!"
        });
        return;
      }
      if (!qx.inJh) {
        callback && callback({
          code: 3,
          msg: "这个奇侠还没出师!"
        });
        return;
      }
      var objectFriendNum = objectFN !== null && objectFN !== void 0 ? objectFN : PLU.YFD.qixiaFriend.find(function (e) {
        return e.name == qxName;
      }).skillFN;
      if (qx.num >= objectFriendNum) {
        callback && callback({
          code: 4,
          msg: "奇侠友好度已足够"
        });
        return;
      }
      var listenVisitTimeout = function listenVisitTimeout() {
        if (!PLU.TMP.goingQixiaMijing) PLU.tryVisitQixia(qxName, giveNum, objectFN, ifAutoMj, ifAutoWb, callback);
      };
      UTIL.delSysListener("listenVisitNotice");
      //监听场景消息
      UTIL.addSysListener("listenVisitNotice", function (b, type, subtype, msg) {
        if (type != "notice" && type != "main_msg") return;
        var msgTxt = UTIL.filterMsg(msg);
        if (msgTxt.match("对你悄声道:你现在去")) {
          //奇侠说秘境
          var l = msgTxt.match(/(.*)对你悄声道:你现在去(.*),应当会有发现/);
          if (l && l.length > 2) {
            PLU.TMP.goingQixiaMijing = true;
            var placeData = PLU.YFD.mjList.find(function (e) {
              return e.n == l[2];
            });
            if (placeData) {
              PLU.execActions(placeData.v + ";;find_task_road secret;;", function () {
                setTimeout(function () {
                  var mapid = g_obj_map.get("msg_room").get("map_id");
                  var shortName = g_obj_map.get("msg_room").get("short");
                  YFUI.writeToOut("<span style='color:#FFF;'>--地图ID:" + mapid + "--</span>");
                  if (mapid == "public") {
                    PLU.execActions("secret_op1;", function () {
                      PLU.TMP.goingQixiaMijing = false;
                      PLU.tryVisitQixia(qxName, giveNum, objectFN, ifAutoMj, ifAutoWb, callback);
                    });
                  } else if (ifAutoMj) {
                    UTIL.delSysListener("listenVisitNotice");
                    PLU.setBtnRed($("#btn_bt_autoVisitQixia"), 0);
                    YFUI.writeToOut("<span style='color:yellow;'> ===== 进入了秘境! ===== </span>");
                  } else {
                    var ss = g_obj_map.get("msg_room").elements.find(function (e) {
                      return e.value == "仔细搜索";
                    });
                    if (ss) {
                      var cmd_ss = g_obj_map.get("msg_room").get(ss.key.split("_")[0]);
                      PLU.execActions(cmd_ss + ";;", function () {
                        if (ifAutoWb) {
                          var wb = g_obj_map.get("msg_room").elements.find(function (e) {
                            return e.value.indexOf("秘境挖宝") >= 0;
                          });
                          if (wb) {
                            PLU.execActions("mijing_wb;;");
                          }
                        }
                        var sd = g_obj_map.get("msg_room").elements.find(function (e) {
                          return e.value.indexOf("扫荡") >= 0;
                        });
                        if (sd) {
                          var cmd_sd = g_obj_map.get("msg_room").get(sd.key.split("_")[0]);
                          PLU.doSaoDang(mapid, cmd_sd, function () {
                            PLU.TMP.goingQixiaMijing = false;
                            PLU.tryVisitQixia(qxName, giveNum, objectFN, ifAutoMj, ifAutoWb, callback);
                          });
                        } else if (shortName == "无尽深渊") {
                          PLU.goWuJinShenYuan(function () {
                            PLU.TMP.goingQixiaMijing = false;
                            PLU.tryVisitQixia(qxName, giveNum, objectFN, ifAutoMj, ifAutoWb, callback);
                          });
                        } else {
                          UTIL.delSysListener("listenVisitNotice");
                          PLU.setBtnRed($("#btn_bt_autoVisitQixia"), 0);
                          YFUI.writeToOut("<span style='color:yellow;'> ===进入了未通关秘境!=== </span>");
                        }
                      });
                    }
                  }
                }, 1500);
              });
            }
            return;
          }
        }
        var vis = msgTxt.match(/今日亲密度操作次数\((\d+)\/20\)/);
        if (vis) {
          PLU.STO.listenVisit && clearTimeout(PLU.STO.listenVisit);
          setTimeout(function () {
            if (!PLU.TMP.goingQixiaMijing) {
              PLU.STO.listenVisit = setTimeout(listenVisitTimeout, 4000);
              var objNpc = UTIL.findRoomNpc(qxName, false, true);
              if (objNpc) {
                PLU.doVisitAction(objNpc.key, giveNum);
              } else {
                YFUI.writeToOut("<span style='color:#FFF;'>--找不到奇侠!--</span>");
                setTimeout(function () {
                  PLU.tryVisitQixia(qxName, giveNum, objectFN, ifAutoMj, ifAutoWb, callback);
                }, 500);
              }
            }
          }, 500);
          return;
        }
        if (msgTxt.match("今日做了太多关于亲密度的操作")) {
          PLU.STO.listenVisit && clearTimeout(PLU.STO.listenVisit);
          callback && callback({
            code: 1,
            msg: "今日奇侠友好度操作已经完毕"
          });
          return;
        }
        if (msgTxt.match(/今日奇侠赠送次数(\d+)\/(\d+),.*赠送次数(\d+)\/(\d+)/)) {
          PLU.STO.listenVisit && clearTimeout(PLU.STO.listenVisit);
          callback && callback({
            code: 1,
            msg: "今日奇侠友好度操作已经完毕"
          });
          return;
        }
        if (msgTxt.match("扫荡成功,获得:")) {
          var xtnum = parseInt(msgTxt.split("、")[0].split("玄铁令x")[1]);
          if (xtnum) PLU.TMP.todayGetXT += xtnum;
          xtnum && YFUI.writeToOut("<span>--玄铁令+" + xtnum + "--</span>");
          return;
        }
        if (msgTxt.match("你开始四处搜索……你找到了")) {
          var _xtnum = parseInt(msgTxt.split("、")[0].split("玄铁令x")[1]);
          if (_xtnum) PLU.TMP.todayGetXT += _xtnum;
          _xtnum && YFUI.writeToOut("<span>--玄铁令+" + _xtnum + "--</span>");
          return;
        }
      });
      PLU.execActions(qx.link + ";;", function () {
        var objNpc = UTIL.findRoomNpc(qxName, false, true);
        if (objNpc) {
          PLU.STO.listenVisit = setTimeout(listenVisitTimeout, 3000);
          PLU.doVisitAction(objNpc.key, giveNum);
        } else {
          YFUI.writeToOut("<span style='color:#FFF;'>--找不到奇侠:" + qxName + "--</span>");
          setTimeout(function () {
            PLU.tryVisitQixia(qxName, giveNum, objectFN, ifAutoMj, ifAutoWb, callback);
          }, 500);
        }
      });
    });
  },
  //================================================================================================
  doVisitAction: function doVisitAction(qxKey, giveNum) {
    if (giveNum == 0) {
      PLU.execActions("ask " + qxKey + ";");
    } else if (giveNum == 1) {
      PLU.execActions("auto_zsjd_" + qxKey.split("_")[0] + ";");
    } else if (giveNum == 5) {
      PLU.execActions("auto_zsjd5_" + qxKey.split("_")[0] + ";");
    } else {
      PLU.execActions("auto_zsjd20_" + qxKey.split("_")[0] + ";");
    }
  },
  //================================================================================================
  doSaoDang: function doSaoDang(mapid, cmd, callback) {
    UTIL.addSysListener("listenVisitSaodang", function (b, type, subtype, msg) {
      if (type != "prompt") return;
      var xtnum = parseInt(msg.split("、")[0].split("玄铁令x")[1]);
      if (["yaowanggu", "leichishan"].includes(mapid)) {
        if (xtnum < 5) return setTimeout(function () {
          clickButton(cmd);
        }, 300);
      } else if (["liandanshi", "lianhuashanmai", "qiaoyinxiaocun", "duzhanglin", "shanya", "langhuanyudong", "dixiamigong"].includes(mapid)) {
        if (xtnum < 3) return setTimeout(function () {
          clickButton(cmd);
        }, 300);
      }
      UTIL.delSysListener("listenVisitSaodang");
      PLU.execActions(cmd + " go;", function () {
        callback && callback();
      });
    });
    setTimeout(function () {
      clickButton(cmd);
    }, 300);
  },
  //================================================================================================
  goWuJinShenYuan: function goWuJinShenYuan(endcallback) {
    //无尽深渊
    var paths = "e;e;s;w;w;s;s;e;n;e;s;e;e;n;w;n;e;n;w".split(";");
    var sidx = 0;
    var gostep = function gostep(pathArray, stepFunc) {
      var ca = pathArray[sidx];
      PLU.execActions(ca + "", function () {
        stepFunc && stepFunc();
        sidx++;
        if (sidx >= pathArray.length) {
          endcallback && endcallback();
        } else {
          setTimeout(function () {
            gostep(pathArray, stepFunc);
          }, 250);
        }
      });
    };
    gostep(paths, function () {
      var fc = g_obj_map.get("msg_room").elements.find(function (e) {
        return e.value == "翻查";
      });
      if (fc) {
        var cmd_fc = g_obj_map.get("msg_room").get(fc.key.split("_")[0]);
        PLU.execActions(cmd_fc + "");
      }
    });
  },
  //================================================================================================
  toWaitCDKill: function toWaitCDKill($btn) {
    var btnFlag = PLU.setBtnRed($btn);
    if (!btnFlag) {
      //$("#btn_bt_waitCDKill").text('')
      return;
    }
    clickButton("golook_room");
    YFUI.showPop({
      title: "倒计时叫杀门派纷争",
      text: "倒计时最后5秒叫杀最近结束时间的门派纷争!,确定后单击NPC<br>",
      onOk: function onOk() {
        setTimeout(function (o) {
          $(document).one("click", function (o) {
            var npcbtn = $(o.target).closest("button");
            var snpc = npcbtn[0].outerHTML.match(/clickButton\('look_npc (\w+)'/i);
            if (snpc && snpc.length >= 2) {
              var nowTime = new Date().getTime(),
                cMPFZ = null;
              for (var k in PLU.MPFZ) {
                if (!cMPFZ || cMPFZ.t > PLU.MPFZ[k].t) cMPFZ = PLU.MPFZ[k];
              }
              if (cMPFZ) {
                PLU.TMP.DATA_MPFZ = Object.assign({}, cMPFZ, {
                  killId: snpc[1]
                });
                YFUI.showPop({
                  title: "倒计时叫杀门派纷争",
                  text: '<div style="line-height:2;">人物:' + npcbtn.text() + "<br>地点:" + PLU.TMP.DATA_MPFZ.p + "<br>对决:" + PLU.mp2icon(PLU.TMP.DATA_MPFZ.v) + "</div>",
                  okText: "好的",
                  onOk: function onOk() { },
                  onNo: function onNo() {
                    PLU.TMP.DATA_MPFZ = null;
                    PLU.setBtnRed($btn, 0);
                  }
                });
              }
            } else {
              PLU.TMP.DATA_MPFZ = null;
              PLU.setBtnRed($btn, 0);
            }
          });
        }, 500);
      },
      onNo: function onNo() {
        PLU.TMP.DATA_MPFZ = null;
        PLU.setBtnRed($btn, 0);
      }
    });
  },
  //================================================================================================
  mp2icon: function mp2icon(mplist) {
    var htm = "",
      zfarr = mplist.split(" VS "),
      zarr = zfarr[0].split("、"),
      farr = zfarr[1].split("、");
    zarr.forEach(function (zm) {
      htm += '<span style="display:inline-block;background:#F66;border-radius:2px;padding:0 2px;margin:1px;color:#FFF;">' + zm + "</span>";
    });
    htm += '<span style="color:#FFF;background:#F00;font-weight:bold;border-radius:50%;padding:2px;">VS</span>';
    farr.forEach(function (fm) {
      htm += '<span style="display:inline-block;background:#66F;border-radius:2px;padding:0 2px;margin:1px;color:#FFF;">' + fm + "</span>";
    });
    return htm;
  },
  //================================================================================================
  toCheckAndWaitCDKill: function toCheckAndWaitCDKill(nowTime) {
    var k = PLU.TMP.DATA_MPFZ.t + 1560000;
    var dt = Math.floor((k - nowTime) / 1000);
    if (dt == 5) {
      YFUI.writeToOut("<span style='color:#F99;'>--最后5秒,进入战斗!--</span>");
      //PLU.TMP.DATA_MPFZ = null
      //PLU.setBtnRed($btn,0)
      PLU.autoFight({
        targetKey: PLU.TMP.DATA_MPFZ.killId,
        fightKind: "kill",
        onFail: function onFail() {
          PLU.TMP.DATA_MPFZ = null;
          PLU.setBtnRed($("#btn_bt_waitCDKill"), 0);
          setTimeout(function (t) {
            PLU.autoChushi();
          }, 500);
        },
        onEnd: function onEnd() {
          PLU.TMP.DATA_MPFZ = null;
          PLU.setBtnRed($("#btn_bt_waitCDKill"), 0);
          setTimeout(function (t) {
            PLU.autoChushi();
          }, 500);
        }
      });
    }
  },
  //================================================================================================
  setListen: function setListen($btn, listenKey, stat) {
    var btnFlag = 0;
    if (stat != undefined) {
      btnFlag = PLU.setBtnRed($btn, stat);
      PLU.setCache(listenKey, stat);
      return;
    } else {
      btnFlag = PLU.setBtnRed($btn);
    }
    if (!btnFlag) {
      PLU.setCache(listenKey, 0);
      return;
    }
    if (listenKey == "listenQL") {
      //监听青龙
      YFUI.showInput({
        title: "监听本服青龙",
        text: '格式:击杀类型|物品词组<br>\n                            击杀类型:0杀守方(好人),1杀攻方(坏人)。<br>\n                            物品词组:以英文逗号分割多个关键词<br>\n                            <span style="color:red;">例如:</span><br>\n                            [例1] <span style="color:blue;">0|斩龙,斩龙宝镯,碎片</span><br>\n                            [例2] <span style="color:blue;">1|*</span>;\n                            ',
        value: PLU.getCache(listenKey + "_keys") || "0|斩龙,开天宝棍,天罡掌套,龙皮至尊甲衣",
        type: "textarea",
        onOk: function onOk(val) {
          var str = $.trim(val);
          if (!str || str.indexOf("|") < 0) return PLU.setBtnRed($btn, 0);
          PLU.setCache(listenKey + "_keys", str);
          PLU.setCache(listenKey, 1);
        },
        onNo: function onNo() {
          PLU.setCache(listenKey, 0);
          PLU.setBtnRed($btn, 0);
        }
      });
    } else if (listenKey == "listenTF") {
      //监听夜魔
      YFUI.showInput({
        title: "监听逃犯",
        text: '格式:击杀类型|逃犯词组<br>\n                            击杀类型:0杀守方(逃犯),1杀攻方(捕快)。<br>\n                            逃犯词组:以英文逗号分割多个关键词<br>\n                            <span style="color:#F00;">【新人】以#开头则等候他人开杀再进</span><br>\n                            <span style="color:#933;">例如:</span><br>\n                            [例1] <span style="color:blue;">0|夜魔*段老大,#夜魔*流寇</span>\n                            ',
        value: PLU.getCache(listenKey + "_keys") || "0|夜魔*段老大,夜魔*二娘,#夜魔*岳老三,#夜魔*云老四,#夜魔*流寇,#夜魔*恶棍,#夜魔*剧盗",
        type: "textarea",
        onOk: function onOk(val) {
          var str = $.trim(val);
          if (!str || str.indexOf("|") < 0) return PLU.setBtnRed($btn, 0);
          PLU.setCache(listenKey + "_keys", str);
          PLU.setCache(listenKey, 1);
          PLU.splitTFParam();
        },
        onNo: function onNo() {
          PLU.setCache(listenKey, 0);
          PLU.setBtnRed($btn, 0);
        }
      });
    } else if (listenKey == "listenKFQL") {
      //监听跨服青龙
      YFUI.showInput({
        title: "监听跨服青龙",
        text: '格式:击杀类型|物品词组<br>\n                            击杀类型:0杀守方(好人),1杀攻方(坏人)。<br>\n                            物品词组:以英文逗号分割多个关键词<br>\n                            <span style="color:red;">例如:</span><br>\n                            [例1] <span style="color:blue;">0|斩龙,斩龙宝镯,碎片</span><br>\n                            [例2] <span style="color:blue;">1|*</span>;\n                            ',
        value: PLU.getCache(listenKey + "_keys") || "1|斩龙,开天宝棍,天罡掌套,龙皮至尊甲衣",
        type: "textarea",
        onOk: function onOk(val) {
          var str = $.trim(val);
          if (!str || str.indexOf("|") < 0) return PLU.setBtnRed($btn, 0);
          PLU.setCache(listenKey + "_keys", str);
          PLU.setCache(listenKey, 1);
        },
        onNo: function onNo() {
          PLU.setCache(listenKey, 0);
          PLU.setBtnRed($btn, 0);
        }
      });
    } else if (listenKey == "listenYX") {
      var _ref3;
      //监听游侠
      YFUI.showInput({
        title: "监听游侠",
        text: '格式:游侠词组<br>\n                游侠词组:以英文逗号分割多个关键词<br>\n                <span style="color:red;">例如:</span><br>\n                 [例1] <span style="color:blue;">王语嫣,厉工,金轮法王,虚夜月,云梦璃,叶孤城</span><br>\n                ',
        value: PLU.getCache(listenKey + "_keys") || (_ref3 = []).concat.apply(_ref3, _toConsumableArray(PLU.YFD.youxiaList.map(function (e) {
          return e.v;
        }))).join(","),
        type: "textarea",
        onOk: function onOk(val) {
          var str = $.trim(val);
          if (!str) return PLU.setBtnRed($btn, 0);
          PLU.setCache(listenKey + "_keys", str);
          PLU.setCache(listenKey, 1);
        },
        onNo: function onNo() {
          PLU.setCache(listenKey, 0);
          PLU.setBtnRed($btn, 0);
        }
      });
    } else if (listenKey == "autoTP") {
      //监听突破
      YFUI.showInput({
        title: "持续突破",
        text: '请输入需要自动突破的技能,以英文逗号分割,自动突破将在当前全部突破完后才开始。<br>\n                以1|开头使用金刚舍利加速<br>\n                 以2|开头使用通天丸加速<br>\n                 以3|开头使用突破宝典加速<br>\n                 以4|开头使用三生石加速(未开发)<br>\n                 <span style="color:red;">例如:</span><br>\n                 [例1] <span style="color:blue;">千影百伤棍,1|排云掌法,2|无相金刚掌,3|降龙十八掌,独孤九剑</span>\n                 ',
        value: PLU.getCache(listenKey + "_keys") || "1|千影百伤棍,1|排云掌法,1|不动明王诀",
        type: "textarea",
        onOk: function onOk(val) {
          var str = $.trim(val);
          if (!str) return PLU.setBtnRed($btn, 0);
          PLU.setCache(listenKey + "_keys", str);
          PLU.setCache(listenKey, 1);
          PLU.getSkillsList(function (allSkills, tupoSkills) {
            if (tupoSkills.length == 0) {
              PLU.toToPo();
            }
          });
        },
        onNo: function onNo() {
          PLU.setCache(listenKey, 0);
          PLU.setBtnRed($btn, 0);
        }
      });
    } else if (listenKey == "autoDY") {//监听钓鱼
      var yuanbao = g_obj_map.get("msg_attrs") && g_obj_map.get("msg_attrs").get("yuanbao");
      var yuanbaoStr = Math.floor(yuanbao).toString(); // 将元宝数量转换为字符串
      var deductedYuanbao = yuanbaoStr.length >= 5 ? Number(yuanbaoStr.slice(-5)) : 0; // 取后5位数作为扣除的元宝数量
      var targetYuanbao = yuanbao - deductedYuanbao; // 计算保留的元宝数量
      YFUI.writeToOut("<span style='color:#7FFF00;'>当前元宝数量: ".concat(yuanbao || "未知", "</span>"));
      YFUI.showInput({
        title: "持续钓鱼",
        text: "请输入需要保留的元宝数,默认为去掉元宝后五位后取整",
        value: targetYuanbao,
        // 默认值为元宝数量减去扣除的元宝数量
        onOk: function onOk(val) {
          var num = Number($.trim(val));
          PLU.setCache(listenKey + "_key", num);
          PLU.setCache(listenKey, 1);
          var room = g_obj_map.get("msg_room");
          if (room) room = room.get("short");
          if (room != "桃溪" || UTIL.inHome()) {
            var path = ["team create;rank go 233;#6 s", "sw;se", "sw", "se", "s", "s"];
            // 人满是啥提示...,不知道...(那就随机选位置吧(
            PLU.execActions(path.slice(0, Math.floor(Math.random() * 6) + 1).join(";") + ";diaoyu");
          }
        },
        onNo: function onNo() {
          PLU.setCache(listenKey, 0);
          PLU.setBtnRed($btn, 0);
        }
      });
    } else if (listenKey == "autoCaicha") {//监听采茶
        var yuanbao = g_obj_map.get("msg_attrs") && g_obj_map.get("msg_attrs").get("yuanbao");
        var yuanbaoStr = Math.floor(yuanbao).toString(); // 将元宝数量转换为字符串
        var deductedYuanbao = yuanbaoStr.length >= 5 ? Number(yuanbaoStr.slice(-5)) : 0; // 取后5位数作为扣除的元宝数量
        var targetYuanbao = yuanbao - deductedYuanbao; // 计算保留的元宝数量
        YFUI.writeToOut("<span style='color:#7FFF00;'>当前元宝数量: ".concat(yuanbao || "未知", "</span>"));
        YFUI.showInput({
          title: "持续采茶",
          text: "请输入需要保留的元宝数,默认为去掉元宝后五位后取整",
          value: targetYuanbao,
          onOk: function onOk(val) {
            var num = Number($.trim(val));
            PLU.setCache(listenKey + "_key", num);
            PLU.setCache(listenKey, 1);
            var room = g_obj_map.get("msg_room");
            if (room) room = room.get("short");
            if (room != "后山茶园" || UTIL.inHome()) {
              var path = ["team create;rank go 234;#3 s;e;ne;e;ne;ne;e;e;", "w", "w;w", "e", "e", "e;e"];
              PLU.execActions(path.slice(0, Math.floor(Math.random() * 6) + 1).join(";") + ";diaoyu");
            }
          },
          onNo: function onNo() {
            PLU.setCache(listenKey, 0);
            PLU.setBtnRed($btn, 0);
          }
        });  
    } else if (listenKey == "autoConnect") {
      YFUI.showInput({
        title: "自动重连",
        text: '请输入断线后自动重连的时间,重连方式为到时间自动刷新页面。<br>单位为秒,0代表不自动重连。<br>\n                <span style="color:red;">例如:</span><br>\n               [例1] <span style="color:blue;">60</span> 代表60秒后刷新页面\n                            ',
        value: PLU.getCache(listenKey + "_keys") || "0",
        //type:"textarea",
        onOk: function onOk(val) {
          var v = Number(val);
          if (val == "") return PLU.setBtnRed($btn, 0);
          PLU.setCache(listenKey + "_keys", v);
          PLU.setCache(listenKey, 1);
        },
        onNo: function onNo() {
          PLU.setCache(listenKey, 0);
          PLU.setBtnRed($btn, 0);
        }
      });
    } else if (listenKey == "autoSignIn") {
      //YFUI.showPop(
      YFUI.showPop({
        title: "定时一键签到",
        text: '请输入自动签到的时间。<br>\n                <div><span style="font-size:18px;line-height:2;">每日: </span><input id="autoSignInTime" type="time" style="font-size:20px;border-radius:5px;margin:10px 0"/></div>\n                        ',
        onOk: function onOk() {
          var v = $.trim($("#autoSignInTime").val());
          if (v == "") return PLU.setBtnRed($btn, 0);
          PLU.setCache(listenKey, 1);
        },
        onNo: function onNo() {
          PLU.setCache(listenKey, 0);
          PLU.setBtnRed($btn, 0);
        }
      });
    } else if (listenKey == "autoQuitTeam") {
      //进塔离队
      YFUI.showPop({
        title: "进塔自动离队",
        text: "是否进塔自动离队?<br>",
        onOk: function onOk() {
          PLU.setCache(listenKey, 1);
        },
        onNo: function onNo() {
          PLU.setCache(listenKey, 0);
          PLU.setBtnRed($btn, 0);
        }
      });
    } else {
      PLU.setCache(listenKey, 1);
      return;
    }
  },
  //================================================================================================
  //================================================================================================
  splitTFParam: function splitTFParam() {
    var ltl = (PLU.getCache("listenTF_keys").split("|")[1] || "").split(",");
    PLU.TMP.lis_TF_list = [];
    PLU.TMP.lis_TF_force = [];
    ltl.map(function (e, i) {
      if (e.charAt(0) == "#") {
        PLU.TMP.lis_TF_list.push(e.substring(1));
        PLU.TMP.lis_TF_force.push(0);
      } else {
        PLU.TMP.lis_TF_list.push(e);
        PLU.TMP.lis_TF_force.push(1);
      }
    });
  },
  //================================================================================================
  goQinglong: function goQinglong(npcName, place, gb, kf) {
    var placeData = PLU.YFD.qlList.find(function (e) {
      return e.n == place;
    });
    if (kf || UTIL.inHome() && placeData) {
      PLU.execActions(placeData.v + ";golook_room", function () {
        var objNpc = UTIL.findRoomNpc(npcName, !Number(gb));
        if (objNpc) {
          PLU.killQinglong(objNpc.key, 0);
        } else {
          YFUI.writeToOut("<span style='color:#FFF;'>--寻找目标失败!--</span>");
          PLU.execActions("golook_room;home");
        }
      });
    }
  },
  //================================================================================================
  killQinglong: function killQinglong(npcId, tryNum) {
    PLU.autoFight({
      targetKey: npcId,
      fightKind: "kill",
      autoSkill: "random",
      onFail: function onFail(errCode) {
        if (errCode >= 88 && tryNum < 100) {
          setTimeout(function () {
            PLU.killQinglong(npcId, tryNum + 1);
          }, 250);
          return;
        }
        YFUI.writeToOut("<span style='color:#FFF;'>--抢青龙失败!--</span>");
        PLU.execActions("home;");
      },
      onEnd: function onEnd() {
        PLU.execActions("prev_combat;home;");
      }
    });
  },
  //================================================================================================
  goTaofan: function goTaofan(npcName, npcPlace, flyLink, gb, force) {
    if (UTIL.inHome()) {
      var ctn = 0,
        gocmd = flyLink;
      PLU.YFD.cityList.forEach(function (e, i) {
        if (e == npcPlace) ctn = i + 1;
      });
      if (ctn > 0) gocmd = "jh " + ctn;
      PLU.execActions(gocmd + ";golook_room;", function (e) {
        setTimeout(function (t) {
          PLU.killTaofan(npcName, -Number(gb), force, 0);
        }, 1000);
      });
    }
  },
  //================================================================================================
  killTaofan: function killTaofan(npcName, gb, force, tryCount) {
    console.debug(gb);
    var npcObj = UTIL.findRoomNpc(npcName, gb);
    if (npcObj) {
      if (force) {
        PLU.autoFight({
          targetKey: npcObj.key,
          fightKind: "kill",
          autoSkill: "random",
          onFail: function onFail(errCode) {
            if (errCode == 4) {
              YFUI.writeToOut("<span style='color:#FFF;'>--已达到上限!取消逃犯监听!--</span>");
              PLU.setListen($("#btn_bt_listenTF"), "listenTF", 0);
            } else if (errCode > 1 && tryCount < 36) {
              setTimeout(function () {
                PLU.killTaofan(npcName, gb, force, tryCount + 1);
              }, 500);
              return;
            }
            PLU.execActions("golook_room;home;");
          },
          onEnd: function onEnd() {
            PLU.execActions("prev_combat;home;");
          }
        });
      } else {
        PLU.waitDaLaoKill({
          targetId: npcObj.key,
          onFail: function onFail(ec) { },
          onOk: function onOk() {
            PLU.autoFight({
              targetKey: npcObj.key,
              fightKind: "kill",
              autoSkill: "random",
              onFail: function onFail(errCode) {
                if (errCode == 4) {
                  YFUI.writeToOut("<span style='color:#FFF;'>--已达到上限!取消逃犯监听--</span>");
                  PLU.setListen($("#btn_bt_listenTF"), "listenTF", 0);
                } else YFUI.writeToOut("<span style='color:#FFF;'>--'ERR=" + errCode + "--</span>");
                PLU.execActions("golook_room;home;");
              },
              onEnd: function onEnd() {
                PLU.execActions("prev_combat;home;");
              }
            });
          }
        });
      }
    } else {
      YFUI.writeToOut("<span style='color:#FFF;'>--找不到NPC!--</span>");
      if (tryCount < 4) {
        return setTimeout(function () {
          PLU.killTaofan(npcName, gb, force, tryCount + 1);
        }, 500);
      }
      PLU.execActions("golook_room;home;");
    }
  },
  //================================================================================================
  waitDaLaoKill: function waitDaLaoKill(_ref4) {
    var targetId = _ref4.targetId,
      onOk = _ref4.onOk,
      onFail = _ref4.onFail;
    var tryTimes = 0;
    UTIL.addSysListener("lookNpcWait", function (b, type, subtype, msg) {
      if (type == "notice" && subtype == "notify_fail" && msg.indexOf("没有这个人") >= 0) {
        YFUI.writeToOut("<span style='color:#FFF;'>--目标已丢失!--</span>");
        UTIL.delSysListener("lookNpcWait");
        return onFail && onFail(1);
      }
      if (type == "look_npc") {
        var desc = UTIL.filterMsg(b.get("long"));
        var lookInfo = desc.match(/[他|她]正与 (\S*)([\S\s]*) 激烈争斗中/);
        if (lookInfo && lookInfo.length > 2 && $.trim(lookInfo[2]) != "") {
          YFUI.writeToOut("<span style='color:#9F9;'>--目标已被大佬攻击,可以跟进--</span>");
          UTIL.delSysListener("lookNpcWait");
          return onOk && onOk();
        }
        tryTimes++;
        if (tryTimes > 30) {
          UTIL.delSysListener("lookNpcWait");
          return onFail && onFail(30);
        } else {
          setTimeout(function () {
            clickButton("look_npc " + targetId);
          }, 500);
        }
      }
      //如提前进入战斗可能是因为杀气, 逃跑后继续
      if (type == "vs" && subtype == "vs_info" && b.get("vs2_pos1") != targetId) {
        PLU.autoEscape({
          onEnd: function onEnd() {
            setTimeout(function () {
              clickButton("look_npc " + targetId);
            }, 500);
          }
        });
      }
    });
    clickButton("look_npc " + targetId);
  },
  //================================================================================================
  //================================================================================================
  fixJhName: function fixJhName(name) {
    switch (name) {
      case "白驼山":
        return "白驮山";
      case "黑木崖":
        return "魔教";
      case "光明顶":
        return "明教";
      case "铁血大旗门":
        return "大旗门";
      case "梅庄":
        return "寒梅庄";
    }
    return name;
  },
  //================================================================================================
  goFindYouxia: function goFindYouxia(params) {
    //{paths,idx,objectNPC}
    if (params.idx >= params.paths.length) {
      setTimeout(function () {
        PLU.execActions("home");
      }, 500);
      YFUI.writeToOut("<span style='color:#FFF;'>--找不到游侠!...已搜索完地图--</span>");
      return;
    }
    var acs = [params.paths[params.idx]];
    PLU.actions({
      paths: acs,
      idx: 0,
      onPathsEnd: function onPathsEnd() {
        setTimeout(function () {
          var npcObj = UTIL.findRoomNpc(params.objectNPC, false, true);
          if (npcObj) {
            YFUI.writeToOut("<span style='color:#FFF;'>--游侠已找到--</span>");
            PLU.killYouXia(npcObj.key, 0);
          } else {
            params.idx++;
            PLU.goFindYouxia(params);
          }
        }, 300);
      },
      onPathsFail: function onPathsFail() {
        setTimeout(function () {
          PLU.execActions("home");
        }, 500);
        YFUI.writeToOut("<span style='color:#FFF;'>--找不到游侠!...路径中断--</span>");
        return;
      }
    });
  },
  //================================================================================================
  killYouXia: function killYouXia(npcId, tryNum) {
    PLU.autoFight({
      targetKey: npcId,
      fightKind: "kill",
      autoSkill: "multi",
      onFail: function onFail(errCode) {
        if (String(errCode).indexOf("delay_") >= 0) {
          var mc = String(errCode).match(/delay_(\d+)/);
          if (mc) {
            var wtime = 500 + 1000 * Number(mc[1]);
            PLU.execActions("follow_play " + npcId + ";");
            YFUI.writeToOut("<span style='color:#FFF;'>▶开始尝试做游侠跟班!!</span>");
            setTimeout(function () {
              PLU.execActions("follow_play none", function () {
                YFUI.writeToOut("<span style='color:#FFF;'>◼停止做游侠跟班!!准备开杀!!</span>");
                PLU.killYouXia(npcId, tryNum + 1);
              });
            }, wtime);
            return;
          }
        } else if (errCode >= 88 && tryNum < 44) {
          setTimeout(function () {
            PLU.killYouXia(npcId, tryNum + 1);
          }, 1000);
          return;
        } else if (errCode == 1) {
          YFUI.writeToOut("<span style='color:#F99;'>--现场找不到游侠了!--</span>");
        } else {
          YFUI.writeToOut("<span style='color:#F99;'>--攻击游侠失败!--</span>");
        }
        PLU.execActions("home;");
      },
      onEnd: function onEnd() {
        PLU.execActions("prev_combat;home;");
      }
    });
  },
  //================================================================================================
  getSkillsList: function getSkillsList(callback) {
    UTIL.addSysListener("getSkillsList", function (b, type, subtype, msg) {
      if (type != "skills" && subtype != "list") return;
      UTIL.delSysListener("getSkillsList");
      clickButton("prev");
      var all = [],
        tupo = [];
      all = PLU.parseSkills(b);
      all.forEach(function (skill) {
        if (skill.state >= 4) {
          tupo.push(skill);
        }
      });
      callback(all, tupo);
    });
    clickButton("skills");
  },
  //================================================================================================
  parseSkills: function parseSkills(b) {
    var allSkills = [];
    for (var i = b.elements.length - 1; i > -1; i--) {
      if (b.elements[i].key && b.elements[i].key.match(/skill(\d+)/)) {
        var attr = b.elements[i].value.split(",");
        var skill = {
          key: attr[0],
          name: $.trim(UTIL.filterMsg(attr[1])),
          level: Number(attr[2]),
          kind: attr[4],
          prepare: Number(attr[5]),
          state: Number(attr[6]),
          from: attr[7]
        };
        allSkills.push(skill);
      }
    }
    allSkills = allSkills.sort(function (a, b) {
      if (a.kind == "known") return -1; else if (b.kind != "known" && a.from == "基础武功") return -1; else if (b.kind != "known" && b.from != "基础武功" && a.kind == "force") return -1; else return 1;
    });
    return allSkills;
  },
  //================================================================================================
  toToPo: function toToPo() {
    setTimeout(function () {
      if (UTIL.inHome()) {
        PLU.getSkillsList(function (allSkills, tupoSkills) {
          if (tupoSkills.length > 0) {
            if (PLU.STO.outSkillList) clearTimeout(PLU.STO.outSkillList);
            PLU.STO.outSkillList = setTimeout(function () {
              PLU.STO.outSkillList = null;
              if (!!$("#out_top").height() && $("#out_top .outtitle").text() == "我的技能") clickButton("home");
            }, 200);
            return;
          }
          var tpArr = PLU.getCache("autoTP_keys").split(",");
          var tpList = [];
          tpArr.forEach(function (s) {
            var sk = {};
            var cs = s.match(/((\d)\|)?(.*)/);
            if (cs) {
              sk.name = cs[3];
              sk.sp = Number(cs[2]);
            } else {
              sk.name = s;
              sk.sp = 0;
            }
            var skobj = allSkills.find(function (e) {
              return e.name.match(sk.name);
            });
            if (skobj) tpList.push(Object.assign({}, skobj, sk));
          });
          PLU.TMP.stopToPo = false;
          PLU.toPo(tpList, 0);
        });
      }
    }, 500);
  },
  //================================================================================================
  toPo: function toPo(tpList, skIdx) {
    if (skIdx < tpList.length && !PLU.TMP.stopToPo) {
      var acts = "enable " + tpList[skIdx].key + ";tupo go," + tpList[skIdx].key + ";";
      if (tpList[skIdx].sp == 1) acts += "tupo_speedup4_1 " + tpList[skIdx].key + " go;"; else if (tpList[skIdx].sp == 2) acts += "tupo_speedup3_1 " + tpList[skIdx].key + " go;"; else if (tpList[skIdx].sp == 3) acts += "tupo_up " + tpList[skIdx].key + " go;"; else if (tpList[skIdx].sp == 4) acts += "items info obj_sanshengshi;event_1_66830905 " + tpList[skIdx].key + " go;";
      PLU.execActions(acts, function () {
        setTimeout(function () {
          if (PLU.STO.outSkillList) clearTimeout(PLU.STO.outSkillList);
          PLU.STO.outSkillList = null;
          PLU.toPo(tpList, skIdx + 1);
        }, 300);
      });
    } else {
      YFUI.writeToOut("<span style='color:yellow;'> ==突破完毕!== </span>");
      clickButton("home");
    }
  },
  //================================================================================================
  toBangFour: function toBangFour(n) {
    UTIL.log({
      msg: " 进入帮四(" + n + ") ",
      type: "TIPS",
      time: new Date().getTime()
    });
    PLU.STO.bangFourTo && clearTimeout(PLU.STO.bangFourTo);
    PLU.STO.bangFourTo = setTimeout(function () {
      clickButton("home");
    }, 30 * 60 * 1000);
    clickButton("clan fb enter shiyueweiqiang-" + n, 0);
  },
  toBangSix: function toBangSix() {
    UTIL.log({
      msg: " 进入帮六 ",
      type: "TIPS",
      time: new Date().getTime()
    });
    PLU.STO.bangSixTo && clearTimeout(PLU.STO.bangSixTo);
    PLU.STO.bangSixTo = setTimeout(function () {
      clickButton("home");
    }, 30 * 60 * 1000);
    clickButton("clan fb enter manhuanqishenzhai", 0);
  },
  //================================================================================================
  inBangFiveEvent: function inBangFiveEvent() {
    PLU.toggleFollowKill($("#btn_bt_kg_followKill"), "followKill", 1);
    var moving = false;
    PLU.TMP.listenBangFive = true;
    UTIL.addSysListener("listenBangFive", function (b, type, subtype, msg) {
      if (!moving && type == "jh" && (subtype == "dest_npc" || subtype == "info")) {
        moving = true;
        var roomName = UTIL.filterMsg(g_obj_map.get("msg_room").get("short"));
        if (roomName.match(/蒙古高原|成吉思汗的金帐/) && !UTIL.roomHasNpc()) {
          PLU.execActions(";;n;", function () {
            moving = false;
          });
        } else {
          moving = false;
        }
      }
      if (type == "home" && subtype == "index") {
        UTIL.delSysListener("listenBangFive");
        YFUI.writeToOut("<span style='color:white;'> ==帮五完毕!== </span>");
        PLU.execActions("golook_room;home");
      }
    });
  },
  intervene: function intervene($btn) {
    var btnFlag = PLU.setBtnRed($btn);
    if (!btnFlag) {
      UTIL.delSysListener("intervene");
      UTIL.delSysListener("score");
      return;
    }
    var Fight = function Fight(b, num) {
      PLU.autoFight({
        targetKey: b.get("vs2_pos" + num),
        fightKind: "fight",
        onEnd: function onEnd() {
          UTIL.delSysListener("intervene");
          UTIL.delSysListener("score");
          PLU.setBtnRed($btn);
        },
        onFail: function onFail() {
          PLU.autoFight({
            targetKey: b.get("vs2_pos" + num),
            onEnd: function onEnd() {
              UTIL.delSysListener("intervene");
              UTIL.delSysListener("score");
              PLU.setBtnRed($btn);
            },
            onFail: function onFail() {
              if (num <= 7) {
                Fight(++num);
              } else {
                UTIL.delSysListener("intervene");
                UTIL.delSysListener("score");
              }
            }
          });
        }
      });
    };
    UTIL.addSysListener("intervene", function (b, type, subtype, msg) {
      if (type == "vs" && subtype == "vs_info") {
        UTIL.delSysListener("intervene");
        UTIL.delSysListener("score");
        Fight(b, 1);
      }
    });
    UTIL.addSysListener("score", function (b, type, subtype, msg) {
      if (type == "score" && subtype == "user") {
        if (b.get("long").indexOf("激烈争斗中...") == -1) {
          PLU.execActions("score " + b.get("id"));
          return;
        }
        UTIL.delSysListener("score");
        PLU.execActions("watch_vs " + b.get("id"));
      }
    });
    YFUI.showPop({
      title: "杀隐藏怪",
      text: "自动观战,自动加入战斗<br>确认后,点开要跟的玩家页面",
      onNo: function onNo() {
        UTIL.delSysListener("intervene");
        UTIL.delSysListener("score");
        PLU.setBtnRed($btn);
      }
    });
  },
  // 字符串相似度算法
  getSimilarity: function getSimilarity(str1, str2) {
    var sameNum = 0;
    for (var i = 0; i < str1.length; i++) for (var j = 0; j < str2.length; j++) if (str1[i] === str2[j]) {
      sameNum++;
      break;
    }
    var length = Math.max(str1.length, str2.length);
    return sameNum / length * 100 || 0;
  },
  npcDataUpdate: function npcDataUpdate() {
    var wayList = _toConsumableArray(new Set(PLU.YFD.mapsLib.Npc.map(function (e) {
      return e.way;
    })));
    if (PLU.YFD.mapsLib.Npc_New[PLU.YFD.mapsLib.Npc_New.length - 1]) var i = wayList.indexOf(PLU.YFD.mapsLib.Npc_New[PLU.YFD.mapsLib.Npc_New.length - 1].way); else var i = 0;
    PLU.UTIL.addSysListener("look_npc", function (b, type, subtype, msg) {
      var _PLU$YFD$cityId$roomI, _b$get;
      if (type != "look_npc") return;
      if (b.get("id").indexOf("bad_target_") == 0) return;
      if (b.get("id").indexOf("hero_") == 0) return;
      if (b.get("id").indexOf("eren_") == 0) return;
      if (b.get("id").indexOf("bukuai") == 0) return;
      if (PLU.YFD.qixiaList.includes(ansi_up.ansi_to_text(b.get("name")))) return;
      var roomInfo = g_obj_map.get("msg_room");
      var jh = (_PLU$YFD$cityId$roomI = PLU.YFD.cityId[roomInfo.get("map_id")]) !== null && _PLU$YFD$cityId$roomI !== void 0 ? _PLU$YFD$cityId$roomI : roomInfo.get("map_id");
      var curName = UTIL.filterMsg(roomInfo.get("short") || "");
      PLU.YFD.mapsLib.Npc_New.push({
        jh: jh,
        loc: curName,
        name_new: ansi_up.ansi_to_text(b.get("name")),
        id: b.get("id") || "",
        desc: ansi_up.ansi_to_text((_b$get = b.get("long")) === null || _b$get === void 0 ? void 0 : _b$get.split("\n")[1]),
        way: wayList[i]
      });
    });
    func = function (_func) {
      function func() {
        return _func.apply(this, arguments);
      }
      func.toString = function () {
        return _func.toString();
      };
      return func;
    }(function () {
      PLU.execActions(wayList[i], function () {
        var _iterator4 = _createForOfIteratorHelper(PLU.UTIL.getRoomAllNpc()),
          _step4;
        try {
          for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
            var npc = _step4.value;
            PLU.execActions("look_npc " + npc.key);
          }
        } catch (err) {
          _iterator4.e(err);
        } finally {
          _iterator4.f();
        }
        setTimeout(function () {
          i++;
          func();
        }, 1500);
      });
    });
    func();
  },
  //================================================================================================
  checkUseSkills: function checkUseSkills() {
    var curTime = new Date().getTime();
    if (!PLU.battleData.performTime || curTime - PLU.battleData.performTime >= 400) {
      PLU.battleData.performTime = curTime;
      if (!PLU.battleData.mySide) {
        var vsInfo = g_obj_map.get("msg_vs_info");
        for (var i = vsInfo.elements.length - 1; i > -1; i--) {
          var val = vsInfo.elements[i].value + "";
          if (!val || val.indexOf(PLU.accId) < 0) continue;
          PLU.battleData.myPos = vsInfo.elements[i].key.charAt(7);
          PLU.battleData.mySide = vsInfo.elements[i].key.substring(0, 3);
          break;
        }
      }
      if (PLU.getCache("pSetting_快速连招") == "true") {
        if (PLU.getCache("autoPerform") >= 1) {
          PLU.AutoCombat();
        }
      } else {
        if (PLU.battleData.mySide) {
          if (PLU.getCache("autoCure") == 1) {
            PLU.checkAutoCure();
          }
          if (PLU.getCache("autoPerform") >= 1) {
            PLU.checkAutoPerform();
          }
        }
      }
    }
  },
  //================================================================================================
  setAutoCure: function setAutoCure($btn, listenKey, stat) {
    if (listenKey == "autoCure") {
      //自动加血蓝
      YFUI.showInput({
        title: "自动加血加蓝",
        text: '格式:血百分比|加血技能,蓝百分比|加蓝技能,以英文逗号分割,每样只能设置一个技能。<br>\n                <span style="color:red;">例如:</span><br>\n                [例1] <span style="color:blue;">50|道种心魔经,10|不动明王诀</span><br> 血低于50%自动加血,蓝低于10%自动加蓝<br>\n                [例2] <span style="color:blue;">50|白首太玄经,30|紫血大法</span><br> 血低于50%自动加血,蓝低于30%自动加蓝<br>\n                [例3] <span style="color:blue;">30|紫血大法</span><br> 血低于30%自动加血技能,不自动加蓝<br>\n                            ',
        value: PLU.getCache(listenKey + "_keys") || "50|道种心魔经,10|不动明王诀",
        onOk: function onOk(val) {
          var str = $.trim(val);
          PLU.setCache(listenKey + "_keys", str);
          PLU.splitCureSkills();
        },
        onNo: function onNo() { }
      });
    }
  },
  toggleAutoCure: function toggleAutoCure($btn, listenKey, stat) {
    var btnFlag = 0;
    if (stat != undefined) {
      btnFlag = PLU.setBtnRed($btn, stat);
      PLU.setCache(listenKey, stat);
    } else {
      btnFlag = PLU.setBtnRed($btn);
    }
    if (!btnFlag) {
      return PLU.setCache(listenKey, 0);
    } else {
      PLU.setCache(listenKey, 1);
      setTimeout(function () {
        YFUI.writeToOut("<span style='color:yellow;'>自动血蓝: " + PLU.getCache(listenKey + "_keys") + " </span>");
      }, 100);
    }
  },
  //================================================================================================
  splitCureSkills: function splitCureSkills() {
    var kf = (PLU.getCache("autoCure_keys") || "").split(",");
    PLU.TMP.autoCure_percent = "";
    PLU.TMP.autoCure_skills = "";
    PLU.TMP.autoCure_force_percent = "";
    PLU.TMP.autoCure_force_skills = "";
    if (kf.length > 0) {
      var acp = kf[0].split("|");
      PLU.TMP.autoCure_percent = Number(acp[0]) || 50;
      PLU.TMP.autoCure_skills = acp[1];
      if (kf.length > 1) {
        var acf = kf[1].split("|");
        PLU.TMP.autoCure_force_percent = Number(acf[0]) || 10;
        PLU.TMP.autoCure_force_skills = acf[1];
      }
    }
  },
  //================================================================================================
  checkAutoCure: function checkAutoCure() {
    var vsInfo = g_obj_map.get("msg_vs_info");
    var userInfo = g_obj_map.get("msg_attrs");
    var keePercent = (100 * Number(vsInfo.get(PLU.battleData.mySide + "_kee" + PLU.battleData.myPos)) / Number(userInfo.get("max_kee"))).toFixed(2);
    var forcePercent = (100 * Number(vsInfo.get(PLU.battleData.mySide + "_force" + PLU.battleData.myPos)) / Number(userInfo.get("max_force"))).toFixed(2);
    if (!PLU.TMP.autoCure_percent) {
      PLU.splitCureSkills();
    }
    if (PLU.TMP.autoCure_force_skills && Number(forcePercent) < PLU.TMP.autoCure_force_percent) {
      PLU.autoCureByKills(PLU.TMP.autoCure_force_skills, forcePercent);
    } else if (PLU.TMP.autoCure_skills && Number(keePercent) < PLU.TMP.autoCure_percent && PLU.battleData.cureTimes < 3) {
      PLU.autoCureByKills(PLU.TMP.autoCure_skills, forcePercent);
    }
  },
  //================================================================================================
  autoCureByKills: function autoCureByKills(skill, forcePercent) {
    if (PLU.battleData && PLU.battleData.xdz > 2) {
      var rg = new RegExp(skill);
      var useSkill = PLU.selectSkills(rg);
      if (useSkill) {
        clickButton(useSkill.key, 0);
        if (Number(forcePercent) > 1) PLU.battleData.cureTimes++;
      }
    }
  },
  //================================================================================================
  setAutoPerform: function setAutoPerform($btn, listenKey, stat) {
    if (listenKey == "autoPerform") {
      //自动技能
      var skillsList = [];
      try {
        skillsList = JSON.parse(PLU.getCache(listenKey + "_keysList"));
      } catch (error) {
        skillsList = ["6|千影百伤棍,燎原百破", "", "", "", "3|剑"];
      }
      YFUI.showInput({
        title: "自动技能",
        text: '格式:触发气值|技能词组,以英文逗号分割多个关键词。<br>\n                            <span style="color:red;">例如:</span><br>\n                            [例1] <span style="color:blue;">9|千影百伤棍,九天龙吟剑法,排云掌法</span><br> 气大于等于9时自动使用技能<br>\n                            ',
        value: skillsList,
        inputs: ["技能1", "技能2", "技能3", "技能4"],
        onOk: function onOk(val) {
          PLU.setCache(listenKey + "_keysList", JSON.stringify(val));
          if (PLU.getCache(listenKey)) {
            PLU.setPerformSkill(PLU.getCache(listenKey));
          }
        },
        onNo: function onNo() { }
      });
    }
  },
  toggleAutoPerform: function toggleAutoPerform($btn, listenKey, stat) {
    var curIdx = Number(PLU.getCache(listenKey));
    if (stat != undefined) {
      if (stat > 0) {
        PLU.setBtnRed($btn, 1);
        PLU.setPerformSkill(stat);
      } else PLU.setBtnRed($btn, 0);
      $btn.text(["连招", "技一", "技二", "技三", "技四"][stat]);
      PLU.setCache(listenKey, stat);
      if (stat > 0) PLU.TMP.lastAutoPerformSet = stat;
    } else {
      var nowTime = Date.now();
      if (curIdx == 0 && nowTime - (PLU.TMP.lastClickAutoPerform || 0) < 350) {
        curIdx = PLU.TMP.lastAutoPerformSet || 1;
        curIdx++;
        if (curIdx > 4) curIdx = 1;
      } else {
        curIdx = curIdx == 0 ? PLU.TMP.lastAutoPerformSet || 1 : 0;
      }
      PLU.TMP.lastClickAutoPerform = nowTime;
      if (curIdx > 0) PLU.TMP.lastAutoPerformSet = curIdx;
      PLU.setCache(listenKey, curIdx);
      if (curIdx == 0) {
        PLU.setBtnRed($btn, 0);
        $btn.text("连招");
      } else {
        PLU.setBtnRed($btn, 1);
        $btn.text(["连招", "技一", "技二", "技三", "技四"][curIdx]);
        PLU.setPerformSkill(curIdx);
      }
    }
  },
  setPerformSkill: function setPerformSkill(idx) {
    var skillsList = [];
    idx = idx - 1;
    try {
      skillsList = JSON.parse(PLU.getCache("autoPerform_keysList"));
    } catch (error) {
      skillsList = [];
    }
    var str = skillsList[idx] || "";
    var aps = str.split("|");
    if (aps && aps.length == 2) {
      PLU.TMP.autoPerform_xdz = Number(aps[0]);
      PLU.TMP.autoPerform_skills = aps[1].split(",");
    } else {
      PLU.TMP.autoPerform_xdz = 0;
      PLU.TMP.autoPerform_skills = [];
    }
    setTimeout(function () {
      var setCh = ["一", "二", "三", "四"][idx];
      YFUI.writeToOut("<span style='color:yellow;'>自动技能[" + setCh + "] : " + str + " </span><br><span style='color:white;'>** 双击自动技能按钮切换技能设置 **</span>");
    }, 100);
  },
  //================================================================================================
  AutoCombat() {
    // if(PLU.battleData.autoSkill) return;
    if (!PLU.TMP.autoPerform_xdz) return;
    // if(!PLU.TMP.autoPerform_xdz){
    //     let aps = PLU.getCache("autoPerform_keys").split('|')
    //     PLU.TMP.autoPerform_xdz = Number(aps[0])
    //     PLU.TMP.autoPerform_skills = aps[1].split(',')
    //}
    let skillIdA = ['1', '2', '3', '4', '5', '6', '7'];
    let skillArr = PLU.TMP.autoPerform_skills;
    // 回血
    if (PLU.getCache("autoCure") == 1) {
      let vsInfo = g_obj_map.get("msg_vs_info");
      let userInfo = g_obj_map.get("msg_attrs");
      let keePercent = ((100 * Number(vsInfo.get(PLU.battleData.mySide + "_kee" + PLU.battleData.myPos))) / Number(userInfo.get("max_kee"))).toFixed(2);
      let forcePercent = ((100 * Number(vsInfo.get(PLU.battleData.mySide + "_force" + PLU.battleData.myPos))) / Number(userInfo.get("max_force"))).toFixed(2);
      if (!PLU.TMP.autoCure_percent) {
        PLU.splitCureSkills();
      }
      if (PLU.TMP.autoCure_force_skills && Number(forcePercent) < PLU.TMP.autoCure_force_percent) {
        PLU.autoCureByKills(PLU.TMP.autoCure_force_skills, forcePercent);
      } else if (PLU.TMP.autoCure_skills && Number(keePercent) < PLU.TMP.autoCure_percent && PLU.battleData.cureTimes < 3) {
        PLU.autoCureByKills(PLU.TMP.autoCure_skills, forcePercent);
      }
    }
    PLU.battleData.xdz = gSocketMsg.get_xdz();
    if (PLU.battleData.xdz >= PLU.TMP.autoPerform_xdz) {
      //console.log('自动技能:' + skillArr + '\n当前行动值: ' + PLU.battleData.xdz);
      $.each(skillArr, function (index, val) {
        var skillName = val;

        for (var i = 0; i < skillIdA.length; i++) {
          var btnNum = skillIdA[i];
          var btn = $('#skill_' + btnNum);
          var btnName = btn.text();

          if (btnName.indexOf(skillName) > -1 ) {
            btn.find('button').trigger('click');
            break;
          }
        }
      });
    }
    
    

    // if (PLU.battleData.xdz >= PLU.TMP.autoPerform_xdz) {
      // if (PLU.TMP.autoPerform_skills && PLU.TMP.autoPerform_skills.length > 0) {
        // PLU.TMP.autoPerform_skills.forEach((skn, idx) => {
          // let useSkill = PLU.selectSkills(skn);
          // if (useSkill) {
            // setTimeout((e) => {
              // clickButton(useSkill.key, 0);
            // }, idx * 100);
          // }
        // });
      // }
    // }
  },
  //================================================================================================
  checkAutoPerform: function checkAutoPerform() {
    // if(PLU.battleData.autoSkill) return;
    if (!PLU.TMP.autoPerform_xdz) return;
    // if(!PLU.TMP.autoPerform_xdz){
    //     let aps = PLU.getCache("autoPerform_keys").split('|')
    //     PLU.TMP.autoPerform_xdz = Number(aps[0])
    //     PLU.TMP.autoPerform_skills = aps[1].split(',')
    // }
    if (PLU.battleData.xdz >= PLU.TMP.autoPerform_xdz) {
      if (PLU.TMP.autoPerform_skills && PLU.TMP.autoPerform_skills.length > 0) {
        PLU.TMP.autoPerform_skills.forEach(function (skn, idx) {
          var useSkill = PLU.selectSkills(skn);
          if (useSkill) {
            setTimeout(function (e) {
              clickButton(useSkill.key, 0);
            }, idx * 100);
          }
        });
      }
    }
  },
  //================================================================================================
  setFightSets: function setFightSets($btn, listenKey, stat) {
    if (listenKey == "followKill") {
      //开跟杀
      YFUI.showInput({
        title: "开跟杀",
        text: '格式:跟杀的人名词组,以英文逗号分割多个关键词,人名前带*为反跟杀。<br>\n                            <span style="color:red;">例如:</span><br>\n                            [例1] <span style="color:blue;">步惊鸿,*醉汉</span><br> 步惊鸿攻击(杀or比试)谁我攻击谁;谁攻击醉汉我攻击谁<br>\n                            ',
        value: PLU.getCache(listenKey + "_keys") || "☆,★,人",
        //type:"textarea",
        onOk: function onOk(val) {
          var str = $.trim(val);
          PLU.setCache(listenKey + "_keys", str);
          PLU.splitFollowKillKeys();
        },
        onNo: function onNo() { }
      });
    }
  },
  toggleFollowKill: function toggleFollowKill($btn, listenKey, stat) {
    var btnFlag = 0;
    if (stat != undefined) {
      btnFlag = PLU.setBtnRed($btn, stat);
      PLU.setCache(listenKey, stat);
    } else {
      btnFlag = PLU.setBtnRed($btn);
    }
    if (!btnFlag) {
      return PLU.setCache(listenKey, 0);
    } else {
      PLU.splitFollowKillKeys();
      PLU.setCache(listenKey, 1);
      setTimeout(function () {
        YFUI.writeToOut("<span style='color:yellow;'>自动跟杀: " + PLU.getCache(listenKey + "_keys") + " </span>");
      }, 100);
    }
  },
  //================================================================================================
  splitFollowKillKeys: function splitFollowKillKeys() {
    var keystr = PLU.getCache("followKill_keys") || "";
    var keys = keystr.split(/[,,]/);
    PLU.FLK = {
      followList: [],
      defendList: []
    };
    keys.forEach(function (e) {
      if (!e) return;
      if (e.charAt(0) == "*") {
        PLU.FLK.defendList.push(e.substring(1));
      } else {
        PLU.FLK.followList.push(e);
      }
    });
  },
  //================================================================================================
  toCheckFollowKill: function toCheckFollowKill(attacker, defender, fightType, msgText) {
    if (!PLU.FLK) PLU.splitFollowKillKeys();
    for (var i = 0; i < PLU.FLK.followList.length; i++) {
      var flname = PLU.FLK.followList[i];
      if (attacker.match(flname)) {
        PLU.autoFight({
          targetName: defender,
          fightKind: fightType,
          onFail: function onFail() { },
          onEnd: function onEnd() { }
        });
        return;
      }
    }
    for (var _i = 0; _i < PLU.FLK.defendList.length; _i++) {
      var dfname = PLU.FLK.defendList[_i];
      if (defender.match(dfname)) {
        PLU.autoFight({
          targetName: attacker,
          fightKind: fightType,
          onFail: function onFail() { },
          onEnd: function onEnd() { }
        });
        return;
      }
    }
  },
  //================================================================================================
  startSync: function startSync($btn) {
    PLU.getTeamInfo(function (t) {
      if (!t) PLU.setBtnRed($btn); else {
        YFUI.writeToOut("<span style='color:yellow;'>===队伍同步开始" + (t.is_leader ? ", <b style='color:#F00;'>我是队长</b>" : "") + " ===</span>");
        if (t.is_leader) {
          PLU.TMP.leaderTeamSync = true;
        } else {
          PLU.listenTeamSync(t.leaderId);
        }
      }
    });
  },
  toggleTeamSync: function toggleTeamSync($btn) {
    var btnFlag = PLU.setBtnRed($btn);
    if (btnFlag) {
      if (PLU.TMP.firstSync) PLU.startSync($btn); else {
        YFUI.showPop({
          title: "队伍同步",
          text: "<b style='color:#F00;'>入队后再打开队伍同步!!</b><br>队长发布指令, 队员监听同步指令!",
          okText: "同步",
          onOk: function onOk(e) {
            PLU.TMP.firstSync = 1;
            PLU.startSync($btn);
          },
          onNo: function onNo() {
            PLU.setBtnRed($btn);
          },
          onX: function onX() {
            PLU.setBtnRed($btn);
          }
        });
      }
    } else {
      PLU.TMP.leaderTeamSync = false;
      UTIL.delSysListener("syncTeamChannel");
    }
  },
  //================================================================================================
  commandTeam: function commandTeam(args) {
    if (!PLU.TMP.leaderTeamSync) return;
    if (!g_gmain.is_fighting && !args[0].match(/team chat|send_chat|attr|watch\_vs/)) {
      var cmdStr = args[0].replace(/\s/g, "$");
      clickButton("team chat synCmd=" + cmdStr);
      clickButton("send_chat", 0);
    }
  },
  //================================================================================================
  listenTeamSync: function listenTeamSync(leaderId) {
    UTIL.addSysListener("syncTeamChannel", function (b, type, subtype, msg) {
      if (type != "main_msg" || !msg.match(/\003href;0;team\003【队伍】\0030\003/)) return;
      var l = msg.match(/\003href;0;team\003【队伍】.*href;0;score ([\w\(\)]+)\003(.*)\0030\003:(.*)/);
      if (l && l[1] == leaderId) {
        var synCmd = l[3].replace("synCmd=", "").replace("。", ".").replace(/\$/g, " ");
        clickButton(synCmd);
      }
    });
  },
  //================================================================================================
  getTeamInfo: function getTeamInfo(callback) {
    UTIL.addSysListener("checkTeam", function (b, type, subtype, msg) {
      if (type != "team" && subtype != "info") return;
      UTIL.delSysListener("checkTeam");
      if (b.get("team_id")) {
        if (b.get("is_member_of") == "1") {
          callback && callback({
            is_leader: parseInt(b.get("is_leader")),
            leaderId: b.get("member1").split(",")[0]
          });
        } else {
          callback && callback(0);
        }
      } else {
        callback && callback(0);
      }
      clickButton("prev");
    });
    clickButton("team");
  },
  //================================================================================================
  setSkillGroup: function setSkillGroup(idx) {
    if (g_gmain.is_fighting) return;
    $(".menu").hide();
    var lsgTimeOut = setTimeout(function () {
      UTIL.delSysListener("loadSkillGroup");
    }, 5000);
    UTIL.addSysListener("loadSkillGroup", function (b, type, subtype, msg) {
      if (type != "enable" && subtype !== "list") return;
      UTIL.delSysListener("loadSkillGroup");
      clearTimeout(lsgTimeOut);
      clickButton("prev");
    });
    clickButton("enable mapped_skills restore go " + idx);
  },
  //================================================================================================
  setWearEquip: function setWearEquip(idx) {
    if (g_gmain.is_fighting) return;
    $(".menu").hide();
    var equipKey = "equip_" + idx + "_keys";
    YFUI.showInput({
      title: "装备组-" + idx,
      text: '格式:武器装备词组,以英文逗号分割多个关键词,<br>\n                        <span style="color:#D60;">武器名前必须带上*,入脉武器名前带**。<br>\n                        卸下武器名前带上#。</span><br>\n                        <span style="color:red;">例如:</span><br>\n                        [例1] <span style="color:blue;">#风泉之剑,*离别钩,*倾宇破穹棍,**驭风腾云,霸天圣袍,紫贪狼戒</span><br>\n                        [例2] <span style="color:blue;">*风泉之剑,**雨叶魔枪,木棉袈裟,龙渊扳指,大士无双帽,天玑九玄冠,博睿扳指,崆峒不老戒,杨柳怨羌笛,*妙韵梨花萧</span><br>\n                        ',
      value: PLU.getCache(equipKey) || "",
      type: "textarea",
      onOk: function onOk(val) {
        var str = $.trim(val);
        if (!str) return;
        PLU.setCache(equipKey, str);
        PLU.wearEquip(str);
      },
      onNo: function onNo() { }
    });
  },
  wearEquip: function wearEquip(equipsStr) {
    PLU.getAllItems(function (list) {
      var equips = equipsStr.split(","),
        equipCmds = "";
      var equipArr = equips.forEach(function (e) {
        var eqObj = {};
        if (e.substr(0, 1) == "#") {
          eqObj = {
            type: -1,
            name: e.substr(1)
          };
        } else if (e.substr(0, 2) == "**") {
          eqObj = {
            type: 2,
            name: e.substr(2)
          };
        } else if (e.substr(0, 1) == "*") {
          eqObj = {
            type: 1,
            name: e.substr(1)
          };
        } else {
          eqObj = {
            type: 0,
            name: e
          };
        }
        var bagItem = list.find(function (it) {
          return !!it.name.match(eqObj.name);
        });
        if (bagItem) {
          if (eqObj.type == -1) equipCmds += "unwield " + bagItem.key + ";"; else if (eqObj.type == 2) equipCmds += "wield " + bagItem.key + " rumai;"; else if (eqObj.type == 1) equipCmds += "wield " + bagItem.key + ";"; else equipCmds += "wear " + bagItem.key + ";";
        }
      });
      PLU.execActions(equipCmds, function () {
        YFUI.writeToOut("<span style='color:yellow;'> ==装备完毕!== </span>");
        if (g_gmain.is_fighting) gSocketMsg.go_combat();
      });
    });
  },
  //================================================================================================
  showLog: function showLog() {
    if ($("#myTools_InfoPanel").length > 0) return $("#myTools_InfoPanel").remove();
    var $logPanel = YFUI.showInfoPanel({
      text: "",
      onOpen: function onOpen() {
        $("#myTools_InfoPanel .infoPanel-wrap").html(PLU.logHtml);
        $("#myTools_InfoPanel .infoPanel-wrap").scrollTop($("#myTools_InfoPanel .infoPanel-wrap")[0].scrollHeight);
      },
      onNo: function onNo() {
        PLU.logHtml = "";
        UTIL.logHistory = [];
        UTIL.setMem("HISTORY", JSON.stringify(this.logHistory));
        $("#myTools_InfoPanel .infoPanel-wrap").empty();
      },
      onClose: function onClose() { }
    });
  },
  //================================================================================================
  updateShowLog: function updateShowLog(e) {
    var html = '<div style="'.concat(e.ext.style, '">').concat(UTIL.getNow(e.ext.time), " ").concat(e.ext.msg, "</div>");
    PLU.logHtml += html;
    if ($("#myTools_InfoPanel").length < 1) return;
    $("#myTools_InfoPanel .infoPanel-wrap").append(html);
    $("#myTools_InfoPanel .infoPanel-wrap").scrollTop($("#myTools_InfoPanel .infoPanel-wrap")[0].scrollHeight);
  },
  //================================================================================================
  goHJS: function goHJS(where, npc) {
    var roomInfo = g_obj_map.get("msg_room");
    var curName = UTIL.filterMsg(roomInfo.get("short") || "");
    var act = "";
    if (curName == "青苔石阶" && roomInfo.get("northwest") == "青苔石阶") act = "nw"; else if (curName == "青苔石阶" && roomInfo.get("northeast") == "青苔石阶") act = "ne"; else if (curName == "青苔石阶" && roomInfo.get("southwest") == "青苔石阶") act = "sw"; else if (curName == "榆叶林" && roomInfo.get("north") == "榆叶林") act = "n"; else if (curName == "榆叶林" && roomInfo.get("south") == "榆叶林") act = "s"; else if (curName == "世外桃源" && where == "镜星府") act = "nw"; else if (curName == "世外桃源" && where == "荣威镖局") act = "ne"; else if (curName == "世外桃源" && where == "碧落城") act = "s";
    if (act) PLU.execActions(act, function () {
      var npcObj = roomInfo.get("npc1");
      if (npcObj) {
        var npcName = npcObj.split(",")[1];
      }
      if (npc && (npcName && npcName != npc || !npcObj)) PLU.execActions("jh 2;n;n;e;s;luoyang317_op1;go_hjs go;se;se;ne;w;n;", function () {
        PLU.goHJS(where, npc);
      }); else PLU.goHJS(where, npc);
    });
  },
  //================================================================================================
  goHaRi: function goHaRi(callback) {//西夏哈日
    var roomInfo = g_obj_map.get("msg_room")  || new Map();
    var curName = UTIL.filterMsg(roomInfo.get("short") || "");
    var act = "";
    if (curName == "沙漠迷宫") {
      if (roomInfo.get("east") == "沙漠迷宫") act = "e"; else if (roomInfo.get("north") == "沙漠迷宫") act = "n"; else if (roomInfo.get("west") == "沙漠迷宫") act = "w"; else if (roomInfo.get("south") == "沙漠迷宫") act = "s";
      if (act) PLU.execActions(act, function () {
        setTimeout(function () {
          PLU.goHaRi(callback);
        }, 250);
      });
    } else if (curName == "荒漠") {
      PLU.execActions("n;n;nw;n;ne;", function () {
        YFUI.writeToOut("<span style='color:#FFF;'>--到达--</span>");
        PLU.autoFight({
          targetCommand: "event_1_28045408",
          onEnd: function onEnd() {
            PLU.execActions("say 自己看", function () {
              YFUI.writeToOut("<span style='color:#FFF;'>--击杀哈日--</span>");
              callback && callback();
            });
        }
      });
    });
    } else {
      PLU.execActions("rank go 311;s;s;sw;se;se;se;e;se;se;ne;", function () {
        setTimeout(function () {
          PLU.goHaRi(callback);
        }, 250);
      });
    }
  },
  //================================================================================================
  queryJHMenu: function queryJHMenu($btn, jhname) {
    var npcList = PLU.YFD.mapsLib.Npc.filter(function (e) {
      return e.jh == jhname;
    });
    npcList.forEach(function (e) {
      var str = [e.jh, e.loc, e.name].filter(function (s) {
        return !!s;
      }).join("-");
      YFUI.writeToOut("<span><a style='text-decoration:underline;color:yellow;cursor:pointer;' onclick='PLU.goNpcWay(\"" + str + '","' + e.way + "\")'>" + str + "</a> &nbsp;&nbsp;<a style='text-decoration:underline;color:yellow;cursor:pointer;' onclick='PLU.showNpcWay(\"" + str + '","' + e.way + "\")'>路徑詳情</a></span>");
    });
    YFUI.writeToOut("<span>----------</span>");
  },
  //================================================================================================
  toQueryNpc: function toQueryNpc() {
    YFUI.showInput({
      title: "查找NPC",
      text: "输入NPC名字,可模糊匹配,支持<a target='_blank' href='https://www.runoob.com/regexp/regexp-syntax.html'>正则表达式</a>,同时支持简体(不包括地址名)和繁体<br>" + "正则表达式之外语法例子:<br>" + "[例1] 开封@毒蛇<br>" + "[例2] 星宿海@百龙山@毒蛇" + "[例3] ^.?(男|女)[孩童]",
      value: PLU.getCache("prevSearchStr") || "^.?(男|女)[孩童]",
      onOk: function onOk(val) {
        if (!$.trim(val)) return;
        var str = $.trim(val);
        PLU.setCache("prevSearchStr", str);
        PLU.queryNpc(str + "道");
      },
      onNo: function onNo() { }
    });
  },
  // 查询房间路径
  queryRoomPath: function queryRoomPath() {
    var _g_obj_map2;
    if (UTIL.inHome()) return;
    var jh = PLU.YFD.cityId[(_g_obj_map2 = g_obj_map) === null || _g_obj_map2 === void 0 || (_g_obj_map2 = _g_obj_map2.get("msg_room")) === null || _g_obj_map2 === void 0 ? void 0 : _g_obj_map2.get("map_id")];
    if (jh) {
      var _g_obj_map3, _PLU$queryNpc$;
      var room = ansi_up.ansi_to_text((_g_obj_map3 = g_obj_map) === null || _g_obj_map3 === void 0 || (_g_obj_map3 = _g_obj_map3.get("msg_room")) === null || _g_obj_map3 === void 0 ? void 0 : _g_obj_map3.get("short"));
      return (_PLU$queryNpc$ = PLU.queryNpc(jh + "@" + room + "@.*道", true)[0]) === null || _PLU$queryNpc$ === void 0 ? void 0 : _PLU$queryNpc$.way;
    }
  },
  // 链接两个路径终点
  linkPath: function linkPath(pathA, pathB) {
    if (!pathA) return pathB;
    var arrayA = pathA.split(";");
    var arrayB = pathB.split(";");
    var len = Math.min(arrayA.length, arrayB.length);
    for (var index = 0; index < len; index++) if (arrayA[index] != arrayB[index]) break;
    if (!index) return pathB;
    return arrayA.slice(index).reverse().map(function (e) {
      var cmd = e.match(/^(#\d+ )?([ns]?[we]?)$/);
      if (cmd) {
        if (!cmd[1]) cmd[1] = "";
        if (cmd[2].indexOf("n") == 0) {
          var way = cmd[2].replace("n", "s");
        } else {
          var way = cmd[2].replace("s", "n");
        }
        if (way.indexOf("w") >= 0) {
          way = way.replace("w", "e");
        } else {
          way = way.replace("e", "w");
        }
        return cmd[1] + way;
      }
      // 迷宫反走
      cmd = e.match(/^(.+):(.+)\^(.+)$/);
      if (cmd) return cmd[1] + ":" + cmd[3] + "^" + cmd[2];
      return e;
    }).concat(arrayB.slice(index)).join(";");
  },
  // 最短路径
  minPath: function minPath(pathA, pathB) {
    var linkPath = PLU.linkPath(pathA, pathB);
    if (linkPath == "" || linkPath == pathB) return linkPath;
    var a = linkPath.split(";");
    var len = a.length;
    for (var index = 0; index < len; index++) {
      var cmd = a[index].match(/^(.+):(.+\^.+)$/);
      if (cmd) a[index] = PLU.YFD.mapsLib.Labyrinth[cmd[1]][cmd[2]];
    }
    a = a.join(";").split(";");
    var b = pathB.split(";");
    len = b.length;
    for (var index = 0; index < len; index++) {
      var _cmd = b[index].match(/^(.+):(.+\^.+)$/);
      if (_cmd) b[index] = PLU.YFD.mapsLib.Labyrinth[_cmd[1]][_cmd[2]];
    }
    b = b.join(";").split(";");
    return a.length <= b.length ? linkPath : pathB;
  },
  //================================================================================================
  formatNpcData: function formatNpcData(text) {
    var npc = text.match(/^(.*)@(.*)@(.*)道$/);
    if (npc) {
      var jh = npc[1];
      var loc = npc[2];
      var name = "^" + npc[3] + "$";
    } else {
      npc = text.match(/^([^*-]*)[@*-](.*)道$/);
      if (npc) {
        if (npc[1] == "茶圣" || npc[1] == "青衣剑士") {
          var name = "^" + npc[1] + "-" + npc[2] + "$";
        } else {
          var jh = npc[1];
          var name = "^" + npc[2] + "$";
        }
      } else {
        npc = text.match(/^(.*)道$/);
        if (npc) {
          var name = npc[1];
        } else {
          var name = text;
        }
      }
    }
    return [jh, loc, name];
  },
  queryNpc: function queryNpc(name, quiet) {
    if (!name) return;
    var _PLU$formatNpcData = PLU.formatNpcData(name),
      _PLU$formatNpcData2 = _slicedToArray(_PLU$formatNpcData, 3),
      jh = _PLU$formatNpcData2[0],
      loc = _PLU$formatNpcData2[1],
      tmpName = _PLU$formatNpcData2[2];
    name = tmpName;
    var npcLib = PLU.YFD.mapsLib.Npc;
    var findList = npcLib.filter(function (e) {
      if (e.jh == jh && e.loc == loc && (e.name.match(name) || e.name_tw && e.name_tw.match(name) || e.name_new && e.name_new.match(name))) return true;
      return false;
    });
    if (findList.length == 0) findList = npcLib.filter(function (e) {
      if ((e.jh == jh || !jh) && (e.name.match(name) || e.name_tw && e.name_tw.match(name) || e.name_new && e.name_new.match(name))) return true;
      return false;
    });
    if (findList.length == 0) findList = npcLib.filter(function (e) {
      if (e.name.match(name) || e.name_tw && e.name_tw.match(name) || e.name_new && e.name_new.match(name)) return true;
      return false;
    });
    var res = [];
    if (findList && findList.length > 0) {
      findList.forEach(function (e) {
        var str = [e.jh, e.loc, _(e.name, e.name_tw)].filter(function (s) {
          return !!s;
        }).join("-");
        if (!quiet) YFUI.writeToOut("<span><a style='text-decoration:underline;color:yellow;cursor:pointer;' onclick='PLU.goNpcWay(\"" + str + '","' + e.way + "\")'>" + str + "</a> &nbsp;&nbsp;<a style='text-decoration:underline;color:yellow;cursor:pointer;' onclick='PLU.showNpcWay(\"" + str + '","' + e.way + "\")'>路径详情</a></span>");
        res.push(e);
      });
      if (!quiet) YFUI.writeToOut("<span>----------</span>");
    } else if (!quiet) {
      YFUI.writeToOut("<span style='color:#F66;'>查询不到相关数据</span>");
    }
    return res;
  },
  //================================================================================================
  toPathNpc: function toPathNpc() {
    var defaultMapId = PLU.getCache("pathFindMap") || "1";
    var citys = PLU.YFD.cityList.map(function (c, i) {
      var issel = i + 1 == defaultMapId ? "selected" : "";
      return '<option value="' + (i + 1) + '" ' + issel + ">" + c + "</option>";
    }).join("");
    YFUI.showPop({
      title: "全图找NPC",
      text: '选择地图, 输入NPC名字,可模糊匹配<br>\n                <div style=\'margin:10px 0;\'>\n                    <span>地图: </span>\n                    <select id="pathFindMap" style="font-size:15px;height:32px;width:81%;border:1px solid #444;">\n                        '.concat(citys, '\n                    </select>\n                </div>\n                <div style=\'margin:10px 0;\'>\n                    <span>名字: </span>\n                    <input id="pathFindNpc" value="').concat(PLU.getCache("pathFindNpc") || "小龙人", '" style="font-size:14px;height:26px;width:80%;border:1px solid #444;"></input>\n                </div>'),
      onOk: function onOk() {
        var mapStr = $.trim($("#pathFindMap").val()),
          npcStr = $.trim($("#pathFindNpc").val());
        if (!npcStr) return;
        PLU.setCache("pathFindMap", mapStr);
        PLU.setCache("pathFindNpc", npcStr);
        var jhMap = PLU.YFD.mapsLib.Map[parseInt(mapStr) - 1];
        if (!jhMap) {
          return YFUI.writeToOut("<span style='color:#F66;'>---无地图数据---</span>");
        } else {
          var ways = jhMap.way.split(";");
          console.log({
            paths: ways,
            idx: 0,
            objectNPC: npcStr
          });
          PLU.goPathFindNpc({
            paths: ways,
            idx: 0,
            objectNPC: npcStr
          });
        }
      },
      onNo: function onNo() { }
    });
  },
  goPathFindNpc: function goPathFindNpc(params) {
    //goFindYouxia
    if (params.idx >= params.paths.length) {
      if (params.count) {
        params.idx = 0;
        setTimeout(function () {
          PLU.goPathFindNpc(params);
        }, 500);
      } else {
        setTimeout(function () {
          PLU.execActions("home");
        }, 100);
        YFUI.writeToOut("<span style='color:#FFF;'>--找不到目标NPC!...已搜索完地图--</span>");
        return;
      }
    }
    var acs = [params.paths[params.idx]];
    PLU.actions({
      paths: acs,
      idx: 0,
      onPathsEnd: function onPathsEnd() {
        setTimeout(function () {
          var npcObj = UTIL.findRoomNpcReg(params.objectNPC);
          if (npcObj) {
            YFUI.writeToOut("<span style='color:#FFF;'>--目标NPC已找到--</span>");
            if (params.count) PLU.autoFight({
              targetKey: npcObj.key,
              autoSkill: "multi",
              onEnd: function onEnd() {
                params.count--;
                params.idx++;
                PLU.goPathFindNpc(params);
              },
              onFail: function onFail(code) {
                if (code == 4) {
                  params.callback && params.callback();
                } else if (code == 6) {
                  params.idx++;
                  PLU.goPathFindNpc(params);
                } else if (code == 0) YFUI.writeToOut("<span style='color:#FFF;'>--你太菜了,放弃吧--</span>");
              }
            });
          } else {
            params.idx++;
            PLU.goPathFindNpc(params);
          }
        }, 100);
      },
      onPathsFail: function onPathsFail(msg) {
        if (params.count) {
          params.idx = params.paths.indexOf(params.paths.find(function (e, i) {
            return i >= params.idx && e.startsWith("jh");
          }));
          if (params.idx < 0) params.idx = 0;
          setTimeout(function () {
            PLU.goPathFindNpc(params);
          }, 500);
        } else {
          setTimeout(function () {
            PLU.execActions("home");
          }, 500);
          YFUI.writeToOut("<span style='color:#FFF;'>--找不到目标NPC!...路径中断--</span>");
        }
        return;
      }
    });
  },

  killXLR: function killXLR($btn) {
    let btnFlag = PLU.setBtnRed($btn);
    if (!btnFlag) {
      PLU.TMP.findDragon = false;
      return;
    }
    $btn.css("background-color", "blue");
    var stopFlag = false;
      YFUI.showInput({
        title: "刷小龙人",
        text: "请输入章节[例1] 1,3-5<br>[例2] 1-15",
        value: PLU.getCache("XLRpath") || "1-15",
        onOk: function onOk(val) {
          PLU.setCache("XLRpath", val);
          var ways = val.split(",").map(function (v) {
            var _PLU$YFD$mapsLib$Map;
            if (String(v).indexOf("-") > 0) {
              var m = v.split("-");
              var start = parseInt(m[0]) - 1;
              var end = parseInt(m[1]);
              var paths = [];
              for (var i = start; i < end; i++) {
                var path = PLU.YFD.mapsLib.Map[i % PLU.YFD.mapsLib.Map.length].way;
                paths.push(path);
              }
              return paths.join(";");
            } else {
              return (_PLU$YFD$mapsLib$Map = PLU.YFD.mapsLib.Map[parseInt(v) - 1]) === null || _PLU$YFD$mapsLib$Map === void 0 ? void 0 : _PLU$YFD$mapsLib$Map.way;
            }
          }).join(";").split(";");
          UTIL.addSysListener("meigui", function (b, type, subtype, msg) {
            if (type == "items" && subtype == "info" && UTIL.filterMsg(b.get("name")) == "玫瑰花" || type == "notice" && subtype == "notify_fail" && msg.indexOf("你的背包里没有这个物品") == 0) {
              UTIL.delSysListener("meigui");
              var meigui = parseInt(b.get("amount")) || 0;
              if (meigui < 140) {
                PLU.execActions("#".concat(Math.ceil((140 - meigui) / 10), " shop buy shop28_N_10"));
              }
              PLU.goPathFindNpc({
                paths: ways,
                idx: 0,
                objectNPC: "小龙人",
                count: 11,
                callback: function callback() {
                  stopFlag = true;
                  YFUI.writeToOut("<span style='color:yellow;'>=====完成挑战小龙人=====</span>");
                  PLU.execActions("home");
                }
              });
            }
          });
          setTimeout(function (){
            PLU.execActions("items get_store /obj/shop/meiguihua;items info meigui hua;")
          }, 250);
        },
        onNo() {
          stopFlag = true;
          PLU.setBtnRed($btn, 0);
        },
      });
    },
  
  //================================================================================================
  toFindDragon($btn) {
    let btnFlag = PLU.setBtnRed($btn);
    if (!btnFlag) {
      //YFUI.writeToOut("<span style='color:#FFF;'>-------Stop Find Dragon-------</span>")
      PLU.TMP.findDragon = false;
      return;
    } else {
      let htm = `<div style='margin:0 0 10px 0;'>
                  <span>起始地图: </span>
                  <div style="font-size:12px;display:flex;flex-direction:row;flex-wrap: wrap;justify-content: flex-start;width: 100%;align-content: flex-start;line-height:2;margin-bottom:10px;" >
                      <label style="width:20%"><input type="radio" name="findDragon_start" value="1" checked>1雪亭镇</label>
                      <label style="width:20%"><input type="radio" name="findDragon_start" value="2">2洛阳</label>
                      <label style="width:20%"><input type="radio" name="findDragon_start" value="3">3华山村</label>
                      <label style="width:20%"><input type="radio" name="findDragon_start" value="4">4华山</label>
                      <label style="width:20%"><input type="radio" name="findDragon_start" value="5">5扬州</label>
                      <label style="width:20%"><input type="radio" name="findDragon_start" value="6">6丐帮</label>
                      <label style="width:20%"><input type="radio" name="findDragon_start" value="7">7乔阴县</label>
                      <label style="width:20%"><input type="radio" name="findDragon_start" value="8">8峨眉山</label>
                      <label style="width:20%"><input type="radio" name="findDragon_start" value="9">9恒山</label>
                      <label style="width:20%"><input type="radio" name="findDragon_start" value="10">10武当山</label>
                      <label style="width:20%"><input type="radio" name="findDragon_start" value="11">11晚月庄</label>
                      <label style="width:20%"><input type="radio" name="findDragon_start" value="12">12水烟阁</label>
                      <label style="width:20%"><input type="radio" name="findDragon_start" value="13">13少林寺</label>
                      <label style="width:20%"><input type="radio" name="findDragon_start" value="14">14唐门</label>
                      <label style="width:20%"><input type="radio" name="findDragon_start" value="15">15青城山</label>
                  </div>
                  <span>搜图顺序: </span>
                  <select id="findDragon_SearchOrder" style="font-size:16px;height:30px;width:30%;">
                      <option selected value="1">顺序</option>
                      <option value="-1">倒序</option>
                  </select>
              </div>`;
      YFUI.showPop({
        title: "找小龙人",
        text: htm,
        width: "400px",
        okText: "开始",
        onOk(e) {
          setTimeout(function () {
            PLU.execActions("items get_store /obj/shop/meiguihua;items info meigui hua;");
            UTIL.addSysListener("meigui", function (b, type, subtype, msg) {
            if ((type == "items" && subtype == "info" && UTIL.filterMsg(b.get("name")) == "玫瑰花") || (type == "notice" && subtype == "notify_fail" && msg.indexOf("你的背包里没有这个物品") == 0)) {
              UTIL.delSysListener("meigui");
              var meigui = parseInt(b.get("amount")) || 0;
              if (meigui < 140) {
                PLU.execActions("#".concat(Math.ceil((140 - meigui) / 10), " shop buy shop28_N_10"));
              }
            }
          });
        }, 240);
          let start = $(e.find('input[name="findDragon_start"]:checked')).val();
          let order = Number($('#findDragon_SearchOrder').val());
          //YFUI.writeToOut("<span style='color:#FFF;'>-------Find Dragon-------</span>")
          YFUI.writeToOut(`<span style='color:#FFF;'>--start jh ${start}   --search order:${order}</span>`);
          PLU.findDragonMaps(Number(start), Number(order));
        },
        onNo() {
          PLU.setBtnRed($btn);
        }
      });
    }
  },

async findDragonMaps(startCity, order){
    PLU.TMP.findDragon = true
    let curCity = startCity,
        endCity = startCity-order
    endCity = endCity<1 ? 15 : endCity>15 ? 1 : endCity
    let isExceedChallenge = false; // Added variable to track if the challenge limit is exceeded
    do {
        let jhMap = YFD.mapsLib.Map.find(e=>e.jh==curCity)
        if(jhMap){
            YFUI.writeToOut("<span style='color:#FFF;'>--开始搜索地图 jh "+curCity+"--</span>");
            let paths = jhMap.way.split(";")
            let npcName = '小龙人'
            let res = await PLU.mapFindNpc(paths, npcName)
            if(res=='end'){
                YFUI.writeToOut("<span style='color:#FFF;'>--任务完成--</span>");
                //YFUI.writeToOut("<span style='color:yellow;'>=====完成小龙人=====<span>");
                break
            }else{
                curCity = curCity+order
                curCity = curCity<1 ? 15 : curCity>15 ? 1 : curCity
            }
        }
    } while (curCity!=endCity && PLU.TMP.findDragon);
    if (!isExceedChallenge) { // Added condition to check if the challenge limit is exceeded
        YFUI.writeToOut("<span style='color:yellow;'>=====完成小龙人=====<span>");
    }
    //YFUI.writeToOut("<span style='color:#FFF;'>--搜索完成--</span>")
    PLU.execActions("home")
    PLU.setBtnRed($("#btn_bt_kg_finddragon"),0)
},
async mapFindNpc(paths,NPCName){
    return new Promise(async (resolve,reject)=>{
        let idx = 0, preIdx = -1, res=''
        while (idx < paths.length) {
            try {
                if(preIdx!=idx) await PLU.stepPath(paths[idx])
            } catch (error) {
                resolve('noway')
                break
            }
            preIdx = idx
            let fnpc = UTIL.findRoomNpc(NPCName,false,true)
            if(fnpc){
                try {
                    let kiilres = await PLU.toKillNpc(fnpc.key)
                    if(kiilres=='noflower'){
                        PLU.execActions("shop buy shop28_N_10;shop buy shop28_N_10;")
                        await PLU.waitTime()
                    }else if(kiilres=='next'){
                        idx++
                    }else if(kiilres=='ok'){
                        //idx++
                    }else{
                        idx++
                    }
                } catch (error) {
                    resolve('end')
                    break
                }
            }else{
                idx++
            }
            if(!PLU.TMP.findDragon) { res='break';resolve('end');break;}
        }
        if(!res) resolve('next')
    })
},
async stepPath(act){
    return new Promise((resolve,reject)=>{
        PLU.actions({
            paths:[act],
            idx:0,
            onPathsEnd(){
                setTimeout(()=>{
                    resolve()
                },200)
            },
            onPathsFail(){
                reject()
            }
        })
    })
},
async toKillNpc(npcId){
    return new Promise((resolve,reject)=>{
        PLU.autoFight({
            targetKey:npcId,
            fightKind:'kill',
            // autoSkill:'fast',
            onFail(errCode){
                if(errCode==9){
                    resolve("next")
                } else if(errCode==10){
                    resolve("noflower")
                } else if(errCode==11){
                    reject("end")
                }else{
                    resolve(false)
                }
            },
            onEnd(){
                setTimeout(()=>{
                    resolve('ok')
                },500)
            }
        })
    })
},
async waitTime(t=1000){
    return new Promise((resolve,reject)=>{
        setTimeout(()=>{
            resolve()
        },t)
    })
},
  //================================================================================================
  toQueryMiTi: function toQueryMiTi() {
    var defaultMapId = PLU.getCache("pathFindMiTi") || "1";
    var citys = PLU.YFD.cityList.map(function (c, i) {
      var issel = i + 1 == defaultMapId ? "selected" : "";
      return '<option value="' + (i + 1) + '" ' + issel + ">" + c + "</option>";
    }).join("");
    YFUI.showPop({
      title: "全图找谜题",
      text: '选择地图, 输入关键词(人物,地点,物品)列表(英文逗号隔开)<br>可模糊匹配<br>\n            <div style=\'margin:10px 0;\'>\n              <span>去哪找: </span>\n              <select id="pathFindMap" style="font-size:15px;height:32px;width:81%;border:1px solid #444;">\n                '.concat(citys, '\n              </select>\n            </div>\n            <div style=\'margin:10px 0;\'>\n              <span>要找啥: </span>\n              <input id="pathFindKeyword" value="').concat(PLU.getCache("pathFindKeyword") || "柴绍,李秀宁,大鹳淜洲,天罗紫芳衣", '" style="font-size:14px;height:26px;width:80%;border:1px solid #444;"></input>\n            </div>'),
      onOk: function onOk() {
        var mapStr = $.trim($("#pathFindMap").val()),
          KeywordStr = $.trim($("#pathFindKeyword").val());
        if (!KeywordStr) return;
        PLU.setCache("pathFindMap", mapStr);
        PLU.setCache("pathFindKeyword", KeywordStr);
        var jhMap = PLU.YFD.mapsLib.Map[parseInt(mapStr) - 1];
        if (!jhMap) {
          return YFUI.writeToOut("<span style='color:#F66;'>---无地图数据---</span>");
        } else {
          var ways = jhMap.way.split(";");
          console.log({
            paths: ways,
            idx: 0,
            objectKeyword: KeywordStr
          });
          PLU.MiTiArray = [];
          PLU.goPathFindMiTi({
            paths: ways,
            idx: 0,
            objectKeyword: KeywordStr
          });
        }
      },
      onNo: function onNo() { }
    });
  },
  goPathFindMiTi: function goPathFindMiTi(params) {
    //goFindYouxia
    if (params.idx >= params.paths.length) {
      setTimeout(function () {
        PLU.execActions("home");
      }, 100);
      YFUI.writeToOut("<span style='color:#FFF;'>--找不到目标谜题!...已搜索完地图--</span>");
      return;
    }
    var acs = [params.paths[params.idx]];
    PLU.actions({
      paths: acs,
      idx: 0,
      onPathsEnd: function onPathsEnd() {
        var npcArray = UTIL.getRoomAllNpc();
        UTIL.addSysListener("MiTi", function (b, type, subtype, msg) {
          if (type != "main_msg") return;
          if (msg.match(params.objectKeyword)) PLU.MiTiArray.push(msg);
        });
        var _iterator5 = _createForOfIteratorHelper(npcArray),
          _step5;
        try {
          for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
            var npc = _step5.value;
            PLU.execActions("auto_tasks cancel;ask " + npc.key);
          }
        } catch (err) {
          _iterator5.e(err);
        } finally {
          _iterator5.f();
        }
        UTIL.delSysListener("MiTi");
        if (PLU.MiTiArray.length) {
          YFUI.writeToOut("<span style='color:#FFF;'>--目标谜题已找到--</span>");
          return;
        } else {
          setTimeout(function () {
            params.idx++;
            PLU.goPathFindMiTi(params);
          }, 500);
        }
      },
      onPathsFail: function onPathsFail() {
        setTimeout(function () {
          PLU.execActions("home");
        }, 500);
        YFUI.writeToOut("<span style='color:#FFF;'>--路径中断--</span>");
        return;
      }
    });
  },
  //================================================================================================
  goNpcWay: function goNpcWay(desc, way) {
    var goList = PLU.getCache("prevQueryList") || [];
    var newList = goList.filter(function (e) {
      return e.desc != desc;
    });
    var len = newList.unshift({
      desc: desc,
      way: way
    });
    if (len > 10) newList.length = 10;
    PLU.setCache("prevQueryList", newList);
    PLU.execActions(way);
  },
  //================================================================================================
  showNpcWay: function showNpcWay(desc, way) {
    var text = "<span style='color:blue;background:rgba(255,255,244,0.8);padding:1px 10px;display:inline-block;word-break:break-all;'>" + way + "</span></br>";
    var way2 = PLU.linkPath(PLU.queryRoomPath(), way);
    var way3 = PLU.minPath(PLU.queryRoomPath(), way);
    if (way != way2) {
      text += "<span style='color:blue;background:rgba(255,255,244,0.8);padding:1px 10px;display:inline-block;word-break:break-all;'>同图路径(?):" + way2 + "</span></br>";
      text += "<span style='color:blue;background:rgba(255,255,244,0.8);padding:1px 10px;display:inline-block;word-break:break-all;'>最短路径(?):" + way3 + "</span></br>";
    }
    YFUI.showPop({
      title: "路径详情:" + desc,
      text: text,
      autoOk: 10,
      okText: "关闭",
      noText: "前往",
      onOk: function onOk() { },
      onNo: function onNo() {
        PLU.goNpcWay(desc, way);
      }
    });
  },
  //================================================================================================
  toQueryHistory: function toQueryHistory() {
    var prevList = PLU.getCache("prevQueryList") || [];
    if (prevList.length == 0) return YFUI.writeToOut("<span style='color:#F66;'>---无历史数据---</span>");
    for (var i = prevList.length - 1; i >= 0; i--) {
      var e = prevList[i];
      YFUI.writeToOut("<span><a style='text-decoration:underline;color:yellow;cursor:pointer;' onclick='PLU.goNpcWay(\"" + e.desc + '","' + e.way + "\")'>" + e.desc + "</a> &nbsp;&nbsp;<a style='text-decoration:underline;color:yellow;cursor:pointer;' onclick='PLU.showNpcWay(\"" + e.desc + '","' + e.way + "\")'>路径详情</a></span>");
    }
    YFUI.writeToOut("<span>----------</span>");
  },
  //================================================================================================
  showMPFZ: function showMPFZ($btn) {
    var btnFlag = PLU.setBtnRed($btn);
    if (!btnFlag) {
      $("#topMonitor").hide();
      $("#btn_bt_showMPFZ").text("纷争显示");
      PLU.setCache("showTopMonitor", 0);
      return;
    }
    $("#topMonitor").show();
    $("#btn_bt_showMPFZ").text("纷争隐藏");
    PLU.setCache("showTopMonitor", 1);
  },
  //================================================================================================
  openCombineGem: function openCombineGem() {
    var htm = "<div>";
    PLU.YFD.gemType.forEach(function (t, ti) {
      htm += "<div>";
      PLU.YFD.gemPrefix.forEach(function (p, pi) {
        if (pi > 2) htm += '<button onclick="PLU.combineGem(' + ti + "," + pi + ')" style="color:' + t.color + ';width:18%;margin:2px 1%;padding:3px;">' + (p.substr(0, 2) + t.name.substr(0, 1)) + "</button>";
      });
      htm += "</div>";
    });
    htm += "</div>";
    htm += '<div style="margin:10px 0 0 3px;position:absolute;left:15px;bottom:10px;">每次连续合成最多 <input id="maxCombine" type="number" value="1" style="width:50px;height:25px;line-height:25px;" maxlength="3" min=1 max=9999 oninput="if(value.length>4)value=value.substr(0,4)"/> 颗宝石。</div>';
    YFUI.showPop({
      title: "合成宝石",
      text: htm,
      width: "382px",
      okText: "关闭",
      onOk: function onOk() { }
    });
  },
  //================================================================================================
  combineGem: function combineGem(type, grade) {
    if (PLU.TMP.combineTooFast) return YFUI.writeToOut("<span style='color:#F66;'>--点击不要太快!--</span>");
    PLU.TMP.combineTooFast = setTimeout(function () {
      PLU.TMP.combineTooFast = null;
    }, 600000);
    var targetNum = parseInt($("#maxCombine").val()) || 1;
    var getNum = 0;
    var countString = function countString(combineNum, gemCode) {
      var combineStr = "";
      if (combineNum % 3 != 0) return "";
      combineStr += "items hecheng " + gemCode + "_N_" + Math.floor(combineNum / 3) + ";";
      return combineStr;
    };
    var needGem = function needGem(gemGrade, needNum, gemList) {
      var _objGem$num;
      if (gemGrade < 0) return null;
      var gemName = PLU.YFD.gemPrefix[gemGrade] + PLU.YFD.gemType[type].name;
      var gemCode = PLU.YFD.gemType[type].key + "" + (gemGrade + 1);
      var objGem = gemList.find(function (e) {
        return e.name == gemName;
      });
      var gemNum = (_objGem$num = objGem === null || objGem === void 0 ? void 0 : objGem.num) !== null && _objGem$num !== void 0 ? _objGem$num : 0;
      if (gemNum >= needNum) {
        return countString(needNum, gemCode);
      } else {
        var dtNum = needNum - gemNum;
        var next = needGem(gemGrade - 1, 3 * dtNum, gemList);
        if (next) return next + countString(needNum, gemCode);
        return null;
      }
    };
    var countCombine = function countCombine(cb) {
      PLU.getGemList(function (gemList) {
        var runStr = needGem(grade - 1, 3, gemList);
        if (runStr) {
          PLU.fastExec(runStr + "items", function () {
            YFUI.writeToOut("<span style='color:white;'>==合成宝石x1==</span>");
            getNum++;
            targetNum--;
            if (targetNum > 0) {
              countCombine(function () {
                cb && cb(true);
              });
            } else {
              cb && cb(true);
            }
          });
        } else {
          YFUI.writeToOut("<span style='color:#F66;'>--没有足够的宝石!--</span>");
          cb && cb(false);
        }
      });
    };
    countCombine(function (end) {
      clearTimeout(PLU.TMP.combineTooFast);
      PLU.TMP.combineTooFast = null;
      YFUI.writeToOut("<span style='color:white;'>==合成宝石结束! 得到宝石x" + getNum + "==</span>");
    });
  },
  //================================================================================================
  getGemList: function getGemList(callback) {
    var getItemsTimeOut = setTimeout(function () {
      UTIL.delSysListener("getListItems");
    }, 5000);
    UTIL.addSysListener("getListItems", function (b, type, subtype, msg) {
      if (type != "items" || subtype != "list") return;
      UTIL.delSysListener("getListItems");
      clearTimeout(getItemsTimeOut);
      //clickButton("prev");
      var iId = 1,
        itemList = [];
      while (b.get("items" + iId)) {
        var it = UTIL.filterMsg(b.get("items" + iId)).split(",");
        if (it && it.length > 4 && it[3] == "0" && it[1].match("宝石")) itemList.push({
          key: it[0],
          name: it[1],
          num: Number(it[2])
        });
        iId++;
      }
      callback && callback(itemList);
    });
    clickButton("items", 0);
  },
  //================================================================================================
  getAllItems: function getAllItems(callback) {
    var getItemsTimeOut = setTimeout(function () {
      UTIL.delSysListener("getListItems");
    }, 5000);
    UTIL.addSysListener("getListItems", function (b, type, subtype, msg) {
      if (type != "items" || subtype != "list") return;
      UTIL.delSysListener("getListItems");
      clearTimeout(getItemsTimeOut);
      clickButton("prev");
      var iId = 1,
        itemList = [];
      while (b.get("items" + iId)) {
        var it = UTIL.filterMsg(b.get("items" + iId)).split(",");
        if (it && it.length > 4) itemList.push({
          key: it[0],
          name: it[1],
          num: Number(it[2]),
          equipped: it[3] == "0"
        });
        iId++;
      }
      callback && callback(itemList);
    });
    clickButton("items", 0);
  },
  //================================================================================================
  profileSetting() {
    if (!this.pSettingMaps) this.initpSettingMaps();
    let ckeds = PLU.getCache("pSettingArray")?.split(",") || this.pSettingMaps.map((e, i) => i);

    let htm = '<div style="display:flex;flex-direction:row;flex-wrap: wrap;justify-content: space-between;width: 100%;align-content: flex-start;line-height:2;">';
    this.pSettingMaps.forEach((e, i) => {
      if (!e.n) htm += '<span style="width:92px;">&nbsp;</span>';
      else
        htm += `<span><label data-id="${i}" style="font-size:13px;margin:0 3px 5px 0;">${e.n}<input type="checkbox" name="pSettingId" value="${i}"
           ${ckeds.includes(i + "") || e.f ? "checked" : ""} ${e.f ? "disabled" : ""} /></label></span>`;
    });
    YFUI.showPop({
      title: "个人设置",
      text: htm,
      width: "260px",
      okText: "完成",
      onOk(e) {
        let checkeds = [];
        e.find('input[name="pSettingId"]:checked').each((i, b) => {
          checkeds.push(b.value);
        });
        PLU.setCache("pSettingArray", checkeds.join(","));
        PLU.saveSetting(checkeds);
        console.log(checkeds);
      },
      onNo() { },
      afterOpen($el) {
        $el.find(".pSettingAll").click((e) => {
          $el.find('input[name="pSettingId"]').each(function () {
            $(this).prop("checked", true);
          });
        });
      },
    });
  },
  //================================================================================================
  saveSetting(checkeds) {
    for (let psid in PLU.pSettingMaps) {
      let pSettingD = PLU.pSettingMaps[psid];
      let pms = (checkeds.includes(psid)) ? "true" : "false";
      PLU.setCache("pSetting_" + pSettingD.n, pms);
      console.log(PLU.getCache("pSetting_" + pSettingD.n))
    }
  },
  //================================================================================================
  initpSettingMaps() {
    let _this = this;
    this.pSettingMaps = [
      {
        n: "快速连招",
      },
    ];
  },
  //================================================================================================
  backupSetting: function backupSetting() {
    var config = {};
    config.GM = GM_info;
    config.GM.scriptMetaStr = undefined;
    config.GM.script.header = undefined;
    config.PLU = {};
    config.PLU.CACHE = UTIL.getMem("CACHE");
    config.PLU.HISTORY = UTIL.getMem("HISTORY");
    config.PLU.STATUS = PLU.STATUS;
    config.PLU.TMP = PLU.TMP;
    var reader = new FileReader();
    reader.readAsDataURL(new Blob([JSON.stringify(config)], {
      type: "application/json"
    }));
    reader.onload = function (e) {
      var a = document.createElement("a");
      a.download = "无剑配置_" + PLU.nickName + "_" + PLU.accId + "_" + new Date().getTime() + ".json";
      a.style.display = "none";
      a.href = reader.result;
      a.click();
    };
  },
  //================================================================================================
  loadSetting: function loadSetting() {
    var input = document.createElement("input");
    input.type = "file";
    input.id = "config";
    input.accept = "application/json";
    input.style.display = "none";
    input.onchange = function () {
      var reader = new FileReader();
      reader.readAsText(input.files[0]);
      reader.onload = function (e) {
        var config = JSON.parse(reader.result);
        UTIL.setMem("CACHE", config.PLU.CACHE);
        UTIL.setMem("HISTORY", config.PLU.HISTORY);
        PLU.initStorage();
        PLU.TMP = config.PLU.TMP;
        PLU.STATUS = config.PLU.STATUS;
        YFUI.writeToOut("<span style='color:yellow;'>====加载完成====</span>");
      };
    };
    input.click();
  }
};
//=================================================================================
// UTIL模块
//=================================================================================
unsafeWindow.UTIL = {
  //================
  accId: null,
  sysListeners: {},
  logHistory: [],
  //================
  getUrlParam: function getUrlParam(key) {
    var res = null,
      au = location.search.split("?"),
      sts = au[au.length - 1].split("&");
    sts.forEach(function (p) {
      if (p.split("=").length > 1 && key == p.split("=")[0]) res = unescape(p.split("=")[1]);
    });
    return res;
  },
  getAccId: function getAccId() {
    this.accId = this.getUrlParam("id");
    return this.accId;
  },
  setMem: function setMem(key, data) {
    localStorage.setItem("PLU_" + this.accId + "_" + key, data);
  },
  getMem: function getMem(key) {
    return localStorage.getItem("PLU_" + this.accId + "_" + key);
  },
  rnd: function rnd() {
    return Math.floor(Math.random() * 1000000);
  },
  getuuid: function getuuid() {
    return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function (c) {
      var r = Math.random() * 16 | 0,
        v = c == "x" ? r : r & 0x3 | 0x8;
      return v.toString(16);
    });
  },
  getNow: function getNow(timestamp) {
    var date = timestamp ? new Date(timestamp) : new Date();
    var Y = date.getFullYear();
    var M = (date.getMonth() + 1 + "").padStart(2, "0");
    var D = (date.getDate() + "").padStart(2, "0");
    var h = (date.getHours() + "").padStart(2, "0");
    var m = (date.getMinutes() + "").padStart(2, "0");
    var s = (date.getSeconds() + "").padStart(2, "0");
    return M + "-" + D + " " + h + ":" + m + ":" + s;
  },
  log: function log(_ref5) {
    var msg = _ref5.msg,
      type = _ref5.type,
      time = _ref5.time,
      isHistory = _ref5.isHistory;
    var style = "color:#333";
    if (type == "TF") {
      var co = msg.match("夜魔") ? "#F0F" : "#666";
      style = "color:" + co;
    } else if (type == "QL") {
      style = "color:#00F";
    } else if (type == "MPFZ") {
      style = "color:#F60";
    } else if (type == "LPFZ") {
      style = "color:#033";
    } else if (type == "KFQL") {
      style = "color:#F00;background:#FF9;";
    } else if (type == "YX") {
      var co2 = msg.match("宗师】") ? "#00F" : msg.match("侠客】") ? "#08F" : msg.match("魔尊】") ? "#F00" : msg.match("邪武】") ? "#F80" : "#999";
      style = "color:" + co2 + ";background:#CFC;";
    } else if (type == "BF") {
      style = "color:#FFF;background:#93C;";
    } else if (type == "TIPS") {
      style = "color:#29F";
    }
    //console.log('%c%s',style,this.getNow(time)+msg)
    if (!isHistory) {
      this.logHistory.push({
        msg: msg,
        type: type,
        time: time
      });
      this.setMem("HISTORY", JSON.stringify(this.logHistory));
    }
    var evt = new Event("addLog");
    evt.ext = {
      msg: msg,
      type: type,
      time: time,
      style: style
    };
    document.dispatchEvent(evt);
  },
  filterMsg: function filterMsg(s) {
    if (typeof s == "string") return s.replace(/[\033|\27|\0x1b]\[[0-9|;]+m/gi, "");
    return "";
  },
  sysDispatchMsg: function sysDispatchMsg(b, type, subtype, msg) {
    for (var key in this.sysListeners) {
      this.sysListeners[key](b, type, subtype, msg);
    }
  },
  addSysListener: function addSysListener(key, fn) {
    this.sysListeners[key] = fn;
  },
  delSysListener: function delSysListener(key) {
    delete this.sysListeners[key];
  },
  findRoomNpc: function findRoomNpc(npcName, gb, searchAll) {
    console.debug(npcName);
    var roomInfo = g_obj_map.get("msg_room");
    if (!roomInfo) return null;
    for (var i = roomInfo.elements.length - 1; i >= 0; i--) {
      var bNpc = this.getSpNpcByIdx(roomInfo, i, searchAll);
      if (bNpc && bNpc.name == npcName) {
        if (!gb) return bNpc; else {
          var gNpc = this.getSpNpcByIdx(roomInfo, i - 1);
          if (gNpc) return gNpc;
        }
      }
    }
    return null;
  },
  roomHasNpc: function roomHasNpc() {
    var roomInfo = g_obj_map.get("msg_room");
    var res = false;
    if (!roomInfo) return null;
    for (var i = roomInfo.elements.length - 1; i >= 0; i--) {
      if (roomInfo.elements[i].key.match("npc")) {
        res = true;
        break;
      }
    }
    return res;
  },
  getRoomAllNpc: function getRoomAllNpc() {
    var roomInfo = g_obj_map.get("msg_room");
    var res = [];
    if (!roomInfo) return res;
    for (var i = roomInfo.elements.length - 1; i >= 0; i--) {
      var npc = roomInfo.elements[i].key.match(/npc(\d+)/);
      if (npc) {
        var infoArr = roomInfo.elements[i].value.split(",");
        var name = this.filterMsg(infoArr[1]);
        res.push({
          name: name,
          key: infoArr[0]
        });
      }
    }
    return res;
  },
  findRoomNpcReg: function findRoomNpcReg(npcName) {
    var roomInfo = g_obj_map.get("msg_room");
    if (!roomInfo) return null;
    for (var i = roomInfo.elements.length - 1; i >= 0; i--) {
      var npc = roomInfo.elements[i].key.match(/npc(\d+)/);
      if (npc) {
        var infoArr = roomInfo.elements[i].value.split(",");
        var name = this.filterMsg(infoArr[1]);
        if (name.match(npcName)) return {
          name: name,
          key: infoArr[0]
        };
      }
    }
    return null;
  },
  getSpNpcByIdx: function getSpNpcByIdx(roomInfo, idx, searchAll) {
    var npcInfo = roomInfo.get("npc" + idx);
    if (npcInfo) {
      var infoArr = npcInfo.split(",");
      var name = this.filterMsg(infoArr[1]);
      if (searchAll) return {
        name: name,
        key: infoArr[0]
      };
      if (name != infoArr[1]) return {
        name: name,
        key: infoArr[0]
      };
    }
    return null;
  },
  getItemFrom: function getItemFrom(name) {
    var _g_obj_map$get7;
    if (g_gmain.is_fighting) return;
    var item = (_g_obj_map$get7 = g_obj_map.get("msg_room")) === null || _g_obj_map$get7 === void 0 ? void 0 : _g_obj_map$get7.elements.find(function (it) {
      return it.key.substring(0, 4) == "item" && it.value.indexOf(name) >= 0;
    });
    if (item) {
      clickButton("get " + item.value.split(",")[0]);
    }
  },
  inHome: function inHome() {
    return gSocketMsg._is_in_home;
  }
};
//=================================================================================
// UI模块
//=================================================================================
unsafeWindow.YFUI = {
  init: function init() {
    var maxW = $("#out").width() > 634 ? 634 : $("#out").width();
    console.log($("#page").width(), $("#out").width());
    var rightStyle = $("#page").width() - $("#out").width() > 4 ? "left:" + (maxW - 76 + 4) + "px;" : "right:0;";
    this.$Panel = $('<div id="WJPlug_Panel" style="pointer-events:none;position:absolute;z-index:9999;' + rightStyle + ';top:5.5%;font-size:12px;line-height:1.2;text-align:right;list-style:none;">');
    $("body").append(this.$Panel);
  },
  addBtnGroup: function addBtnGroup(_ref6) {
    var id = _ref6.id,
      style = _ref6.style;
    var $box = $('<div id="' + id + '" style="position:relative;"></div>');
    style && $box.css(style);
    this.$Panel.append($box);
    return $box;
  },
  addBtn: function addBtn(_ref7) {
    var id = _ref7.id,
      groupId = _ref7.groupId,
      text = _ref7.text,
      onclick = _ref7.onclick,
      style = _ref7.style,
      boxStyle = _ref7.boxStyle,
      extend = _ref7.extend,
      children = _ref7.children,
      canSet = _ref7.canSet;
    var $box = $('<div id="' + id + '" class="btn-box" style="position:relative;pointer-events:auto;"></div>');
    var $btn = $('<button id="btn_' + id + '" style="padding:4px 2px;box-sizing:content-box;margin:1px 1px;border:1px solid #333;border-radius:4px;width:68px;">' + text + "</button>");
    style && $btn.css(style);
    boxStyle && $box.css(boxStyle);
    $btn.$extend = extend;
    $btn.click(function (e) {
      onclick && onclick($btn, $box);
    });
    $box.append($btn);
    if (children) $box.append($('<b style="position:absolute;left:1px;top:3px;font-size:12px;">≡</b>'));
    if (canSet) {
      var $setbtn = $('<i style="position:absolute;right:-8px;top:2px;font-size:14px;background:#333;color:#fff;font-style:normal;;line-height:1;border:1px solid #CCC;border-radius:100%;padding:2px 6px;cursor:pointer;">S</i>');
      $box.append($setbtn);
      $setbtn.click(function (e) {
        onclick && onclick($btn, $box, "setting");
      });
    }
    groupId ? $("#" + groupId).append($box) : this.$Panel.append($box);
    $box.$button = $btn;
    return $box;
  },
  addMenu: function addMenu(_ref8) {
    var id = _ref8.id,
      groupId = _ref8.groupId,
      text = _ref8.text,
      extend = _ref8.extend,
      style = _ref8.style,
      menuStyle = _ref8.menuStyle,
      multiCol = _ref8.multiCol,
      onclick = _ref8.onclick,
      children = _ref8.children;
    //{text,id,btnId}
    var $btnBox = this.addBtn({
      id: id,
      groupId: groupId,
      text: text,
      extend: extend,
      style: style,
      children: children
    }),
      _this = this;
    function addMenuToBtn(_ref9) {
      var btnId = _ref9.btnId,
        $parent = _ref9.$parent,
        list = _ref9.list,
        menuStyle = _ref9.menuStyle;
      var $listBox = $('<div id="menu_' + btnId + '" class="menu" style="position:absolute;top:0;right:' + $parent.width() + 'px;display:none;"></div>');
      $parent.append($listBox);
      list && list.forEach(function (sub) {
        var btnOpt = Object.assign({}, sub, {
          groupId: "menu_" + btnId
        });
        if (!btnOpt.onclick) {
          btnOpt.onclick = onclick;
        }
        if (multiCol) btnOpt.boxStyle = Object.assign({}, {
          display: "inline-block"
        }, btnOpt.boxStyle);
        var $subBtnBox = _this.addBtn(btnOpt);
        if (sub.children) $subBtnBox.$list = addMenuToBtn({
          btnId: sub.id,
          $parent: $subBtnBox,
          list: sub.children,
          menuStyle: sub.menuStyle
        });
      });
      $parent.$button.click(function (e) {
        $listBox.toggle().css({
          right: $parent.width() + 5
        });
        menuStyle && $listBox.css(menuStyle);
        $listBox.is(":visible") && $listBox.parent().siblings(".btn-box").find(".menu").hide();
        onclick && onclick($parent.$button, $parent);
      });
      return $listBox;
    }
    $btnBox.$list = addMenuToBtn({
      btnId: id,
      $parent: $btnBox,
      list: children,
      menuStyle: menuStyle
    });
    return $btnBox;
  },
  showPop: function showPop(params) {
    if ($("#myTools_popup").length) $("#myTools_popup").remove();
    params = params || {};
    var okText = params.okText || "确定",
      noText = params.noText || "取消",
      _this = this;
    _this.SI_autoOk && clearInterval(_this.SI_autoOk);
    _this.SI_autoOk = null;
    var ph = '<div style="z-index:9999;position:fixed;top: 40%;left:50%;width:100%;height:0;font-size:14px;" id="myTools_popup">\n            <div class="popup-content" style="width:'.concat(params.width || "70%", ';max-width:512px;background: rgba(255,255,255,.8);border:1px solid #999999;border-radius: 10px;transform: translate(-50%,-50%) scale(.1,.1);transition:all .1s;">\n            <div style="padding: 10px 15px;"><span style="font-weight:700;">').concat(params.title || "", '</span><span style="float:right;color:#666;cursor:pointer;" class="btncl">✖</span></div>\n            <div style="padding: 0 15px;line-height:1.5;max-height:500px;overflow-y:auto;">').concat(params.text || "", '</div>\n            <div style="text-align:right;padding: 10px;">');
    if (params.onNo) ph += '<button style="margin-right: 15px;padding: 5px 20px;border: 1px solid #000;border-radius:5px;" class="btnno">'.concat(noText, "</button>");
    ph += '<button style="padding: 5px 20px;background-color: #963;color:#FFF;border: 1px solid #000;border-radius: 5px;" class="btnok">'.concat(okText, "</button>\n            </div></div></div>");
    var $ph = $(ph);
    $("body").append($ph);
    setTimeout(function () {
      $ph.find(".popup-content").css({
        transform: "translate(-50%,-50%) scale(1,1)"
      });
      params.afterOpen && params.afterOpen($ph);
    }, 100);
    if (params.autoOk) {
      var autoCloseN = Number(params.autoOk);
      $("#myTools_popup .btnok").text(okText + "(" + autoCloseN + "s)");
      _this.SI_autoOk = setInterval(function () {
        autoCloseN--;
        $("#myTools_popup .btnok").text(okText + "(" + autoCloseN + "s)");
        if (autoCloseN < 1) {
          $ph.find(".btnok").click();
        }
      }, 1000);
    } else if (params.autoNo) {
      var _autoCloseN = Number(params.autoNo);
      $("#myTools_popup .btnno").text(noText + "(" + _autoCloseN + "s)");
      _this.SI_autoOk = setInterval(function () {
        _autoCloseN--;
        $("#myTools_popup .btnno").text(noText + "(" + _autoCloseN + "s)");
        if (_autoCloseN < 1) {
          $ph.find(".btnno").click();
        }
      }, 1000);
    }
    $ph.find(".btncl").click(function (e) {
      _this.SI_autoOk && clearInterval(_this.SI_autoOk);
      params.onX && params.onX();
      $ph.remove();
    });
    $ph.find(".btnno").click(function (e) {
      _this.SI_autoOk && clearInterval(_this.SI_autoOk);
      params.onNo && params.onNo();
      $ph.remove();
    });
    $ph.find(".btnok").click(function (e) {
      _this.SI_autoOk && clearInterval(_this.SI_autoOk);
      params.onOk && params.onOk($ph);
      $ph.remove();
    });
  },
  showInput: function showInput(params) {
    var popParams = Object.assign({}, params);
    var inpstyle = "font-size:14px;line-height:1.5;width:100%;padding:5px;border:1px solid #999;border-radius:5px;margin:5px 0;outline:none;box-sizing:border-box;";
    if (params.inputs && params.inputs.length > 1) {
      for (var i = 0; i < params.inputs.length; i++) {
        var val = params.value[i] || "";
        popParams.text += '<div><div style="width:20%;float:left;margin:5px 0;line-height:2;text-align:right;">'.concat(params.inputs[i], ': </div><div style="width:73%;margin-left:21%;">');
        popParams.text += params.type == "textarea" ? '<textarea id="myTools_popup_input_'.concat(i, '" rows="4" style="').concat(inpstyle, '">').concat(val, "</textarea></div></div>") : '<input id="myTools_popup_input_'.concat(i, '" type="text" value="').concat(val, '" style="').concat(inpstyle, '"/></div></div>');
      }
      popParams.onOk = function () {
        var val = [];
        for (var _i2 = 0; _i2 < params.inputs.length; _i2++) {
          val.push($("#myTools_popup_input_" + _i2).val());
        }
        params.onOk(val);
      };
    } else {
      popParams.text += params.type == "textarea" ? '<div><textarea id="myTools_popup_input" rows="4" style="'.concat(inpstyle, '">').concat(params.value || "", "</textarea></div>") : '<div><input id="myTools_popup_input" type="text" value="'.concat(params.value || "", '" style="').concat(inpstyle, '"/></div>');
      popParams.onOk = function () {
        var val = $("#myTools_popup_input").val();
        params.onOk(val);
      };
    }
    this.showPop(popParams);
  },
  showInfoPanel: function showInfoPanel(params) {
    if ($("#myTools_InfoPanel").length) $("#myTools_InfoPanel").remove();
    params = params || {};
    var okText = params.okText || "关闭",
      noText = params.noText || "清空",
      _this = this;
    var $ph = $('<div style="z-index:9900;position:fixed;top:10%;left:0;width:100%;height:0;font-size:12px;" id="myTools_InfoPanel">\n            <div class="infoPanel-content" style="width:'.concat(params.width || "75%", ';max-width:512px;height:620px;background: rgba(255,255,255,.9);border:1px solid #999;border-radius:0 10px 10px 0;transform: translate(-100%,0);transition:all .1s;">\n                <div style="padding: 10px 15px;"><span style="font-weight:700;">').concat(params.title || "", '</span><span style="float:right;color:#666;cursor:pointer;" class="btncl">✖</span></div>\n                <div style="padding: 0 15px;line-height:1.5;height:550px;overflow-y:auto;" class="infoPanel-wrap">').concat(params.text || "", '</div>\n                <div style="text-align:right;padding: 10px;">\n                <button style="padding: 5px 20px;background-color: #969;color:#FFF;border: 1px solid #000;border-radius: 5px;margin-right:25px;" class="btnno">').concat(noText, '</button>\n                <button style="padding: 5px 20px;background-color: #963;color:#FFF;border: 1px solid #000;border-radius: 5px;" class="btnok">').concat(okText, "</button>\n                </div>\n            </div></div>"));
    $("body").append($ph);
    setTimeout(function () {
      $ph.find(".infoPanel-content").css({
        transform: "translate(0,0)"
      });
      params.onOpen && params.onOpen();
    }, 100);
    $ph.find(".btncl").click(function (e) {
      params.onClose && params.onClose();
      $ph.remove();
    });
    $ph.find(".btnok").click(function (e) {
      params.onOk && params.onOk();
      params.onClose && params.onClose();
      $ph.remove();
    });
    $ph.find(".btnno").click(function (e) {
      params.onNo && params.onNo();
    });
    return $ph;
  },
  writeToOut: function writeToOut(html) {
    var m = new unsafeWindow.Map();
    m.put("type", "main_msg");
    m.put("subtype", "html");
    m.put("msg", html);
    gSocketMsg.dispatchMessage(m);
  }
};
if (GM_info.script.name != "无剑Mud辅修(OL)") {
  PLU.version = GM_info.script.version;
  unsafeWindow.init();
} else GM_xmlhttpRequest({
  method: "GET",
  responseType: "json",
  url: "https://update.greasyfork.org/scripts/483658.json?t=".concat(Date.now()),
  nocache: true,
  onload: function onload(res) {
    PLU.version = JSON.parse(res.responseText)["version"];
    if (!unsafeWindow.customMode) unsafeWindow.init();
  }
});