{"id":1706,"date":"2023-02-26T08:22:41","date_gmt":"2023-02-26T00:22:41","guid":{"rendered":"https:\/\/wp.vicds.com\/?p=1706"},"modified":"2023-03-11T16:38:14","modified_gmt":"2023-03-11T08:38:14","slug":"uo-javascript","status":"publish","type":"post","link":"https:\/\/wp.vicds.com\/?p=1706","title":{"rendered":"uo javascript"},"content":{"rendered":"\n<p>\u4e0a\u4e0b\u99ac<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ 0x25E\u81ea\u5df1  0x115\u99ac\nif (client.findType(0x115)) {\n  player.useType(0x115);  \n} else {\n  player.useType(0x25E);\n}<\/code><\/pre>\n\n\n\n<p>\u9b54\u6cd5\u985e &#8211; web<\/p>\n\n\n\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-javascript\">while (true) {\n  var a = player.getSkill(Skills.Magery).value;\n  if (player.mana &gt; 30) {\n    if (a &gt;= 0 &amp;&amp; a &lt; 300) {\n      player.cast(Spells.Cure);\n      target.wait();\n      target.self();\n      sleep(100);      \n    }\n    if (a &gt;= 300 &amp;&amp; a &lt; 600) {\n      player.cast(Spells.GreaterHeal);\n      target.wait();\n      target.self();\n      sleep(100);\n    }\n    if (a &gt;= 600 &amp;&amp; a &lt; 800) {\n      player.cast(Spells.Invisibility);\n      target.wait();\n      target.self();\n      sleep(100);      \n    }\n    if (a &gt;= 800 &amp;&amp; a &lt; 1000) {\n      player.cast(Spells.MassDispel);\n      target.wait();\n      target.self();\n      sleep(100);      \n    }\n  } else {\n    sleep(500);\n    player.useSkill(Skills.Meditation);\n    sleep(30000);\n  }\n}<\/code><\/pre>\n\n\n\n<p>\u4f10\u6728 &#8211; \u4e0d\u80fd\u9a0e\u5ea7\u9a0e\u597d\u50cf\u6703\u64cb\u5230\u6a39 &#8211; web<\/p>\n\n\n\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-javascript\">\/\/ \u4ee5\u4e0b\u9700\u8981\u4fee\u6539\u7684\n\/\/ \u672c\u4f86\u6253\u7b97\u5beb\u8d70\u8def\u627e\u6a39\u7684, \u4f46XY\u641e\u6b7b\u6211\u4e86  0\u662fRECALL  1\u662f\u8d70\u8def\u627e\u6a39\nconst walktolj = 0;\n\/\/ \u9280\u884c\u6216\u5bb6\u7684\u7b26\u77f3\u66f8\nconst bankbook = 0x405EC38B;\n\/\/ \u9280\u884c\u88e1\u653e\u6728\u982d\u7684\u7bb1\u5b50\nconst bankbagforlog = 0x40827DEB;\n\/\/ \u6a39\u7684\u9ede\u7684\u7b26\u77f3\u66f8  \u5982\u679c\u6709\u589e\u52a0, \u81ea\u5df1\u52a0\u4e0a\u53bb\u8a18\u5f97\u6539startljbookno\nconst ljbook1 = 0x40525DC4;\nconst ljbook2 = 0x40330ABA;\nconst ljbook3 = 0x403304DF;\nconst ljbook4 = 0x40330B54;\nconst ljbook5 = 0x40330650;\nvar startljbookno = 5;\nvar startljbook = 1;\n\/\/ \u65a7\nconst axe = 0x4059ECD2;\n\/\/ recall \u5f8c\u7684\u7b49\u5f85\u6642\u9593  \u8996LAG\u60c5\u6cc1\u8abf\u6574\nconst recalltime = 4000;\n\/\/ \u6bcf\u6b21\u4f10\u6728\u7684\u7b49\u5f85\u6642\u9593  \u8996LAG\u60c5\u6cc1\u8abf\u6574\nconst chopwaittime = 1000;\n\/\/ \u4ee5\u4e0b\u4e0d\u7528\u6539\nconst logd = 0x1BDD;\n\/\/ \u9019\u500b\u503c\u52a0\u4e0a\u8ca0\u91cd, \u5927\u65bc\u6700\u5927\u503c, \u624d\u6703\u56de\u53bb\u653e\nconst plweight = 100;\n\/\/ \u8d70\u8def\u627e\u6a39\u7684\u6383\u63cf\u7bc4\u570d\nconst rx = 5;\nconst ry = 5;\n\/\/ \u4e0d\u7528\u6539\nvar ljno = 50;\n\/\/ \u639b\u4e86\u4e00\u4e0b\u767c\u73fe\u6703\u4f10\u5230\u4e00\u4e9b\u96dc\u7269\nconst amber = 0x3199;\nconst plant = 0x3190;\nconst bark = 0x318F;\nconst fungi = 0x3191;\nconst swit = 0x2F5F;\n\/\/ \u8996LAG\u60c5\u6cc1\u8abf\u6574\nconst moveitemwaittime = 0;\n\n\/\/ type0 = \u76f4\u63a5\u98db\u66f8\n\/\/ type1 = \u98db\u66f8\u88e1\u7684\u7b26\u77f3\n\/\/ no = \u9019\u500b\u662f\u98db\u66f8\u7684\u7b26\u77f3 RECALL\u662f50\u958b\u59cb 66\u7d50\u675f\n\/\/ book = book serial\n\/\/ todo \u6aa2\u67e5\u6a94\u9ede\nfunction recall(recalltype = 0, no = 0, book = 0) {\n  if (recalltype == 0) {\n    player.cast(Spells.Recall);\n    target.wait();\n    target.entity(book);\n    sleep(recalltime);\n  } else {\n    player.use(book);\n    sleep(500);\n    var gump = Gump.findOrWait(0x59, 2000);\n    gump.reply(no);\n    sleep(recalltime);\n  }\n}\n\nfunction chop() {\n  var me = client.findObject(player);\n  var me_terr = client.getTerrainList(me.x, me.y - 1);\n  \/\/ const axe = client.findType(0xF47);\n  player.use(axe);\n  target.wait();\n  var c = parseInt(&quot;0x&quot; + me_terr[1].graphic.toString(16).toUpperCase());\n  target.terrain(me.x, me.y - 1, 0, c);\n  sleep(chopwaittime);\n}\n\nfunction putlog(ljno=0,ljbook=0) {\n  player.say(&#039;bank&#039;);\n  sleep(500);\n  for (var i = 0; i &lt; player.backpack.contents.length; i++) {\n    if (player.backpack.contents[i].graphic == logd) {\n      player.moveType(logd, player.backpack, bankbagforlog);\n      sleep(moveitemwaittime);\n    } \n    if (player.backpack.contents[i].graphic == amber) {\n      player.moveType(amber, player.backpack, bankbagforlog);\n      sleep(moveitemwaittime);\n    }\n    if (player.backpack.contents[i].graphic == plant) {\n      player.moveType(plant, player.backpack, bankbagforlog);\n      sleep(moveitemwaittime);\n    }\n    if (player.backpack.contents[i].graphic == bark) {\n      player.moveType(bark, player.backpack, bankbagforlog);\n      sleep(moveitemwaittime);\n    }\n    if (player.backpack.contents[i].graphic == fungi) {\n      player.moveType(fungi, player.backpack, bankbagforlog);\n      sleep(moveitemwaittime);\n    }\n    if (player.backpack.contents[i].graphic == swit) {\n      player.moveType(swit, player.backpack, bankbagforlog);\n      sleep(moveitemwaittime);\n    }     \n  }\n  recall(1, ljno, ljbook);\n}\n\nfunction checkweight(ljno=0,ljbook=0) {\n  if (player.weight + plweight &gt; player.weightMax) {\n    recall(0, 0, bankbook);\n    putlog(ljno,ljbook);\n  }  \n}\n\nfunction checklog(no=0) {\n  \/\/ \u9019\u88e1\u8981\u6293\u6c92\u6728\u7684\u8a0a\u606f \u5982\u679c\u4e0d\u884c\u5c31\u7528journal\n  if (journal.containsText(&quot;not enough wood here to harvest&quot;)) {\n    journal.clear();\n    return true\n  }\n  journal.clear();\n}\n\nfunction nexttree() {\n  \/\/ \u9019\u88e1\u7528\u8d70\u7684\u592a\u75db\u82e6\u4e86  \u591a\u5370\u5e7e\u652f\u66f8\u5427...\n  var me = client.findObject(player);\n  for (var i = 0; i &lt; rx; i++) {\n      for (var j = 0; j &lt; ry; j++){\n        var me = client.findObject(player);\n        var terr = client.getTerrainList(me.x - i, me.y - j);\n        for (var k = 0; k &lt; terr.length; k++){\n          console.log(terr[k].graphic);\n          if (terr[k].graphic == 3277 || terr[k].graphic == 3280 || terr[k].graphic == 3283 || terr[k].graphic == 3287 || terr[k].graphic == 3289 || terr[k].graphic == 3293 || terr[k].graphic == 3302) {\n            walktonexttree(terr[k].x, (terr[k].y+1));\n          }\n        }\n        \/\/console.log(terr);\n      }\n  }\n}\n\nfunction walktonexttree(x=0, y=0) {\n  var walkToTargetX = x - me.x;\n  var walkToTargetY = y - me.y;\n  var me = client.findObject(player);\n\n  \/\/ \u9019\u88e1x\u6216y\u8981+1  \u4e0d\u7136\u6703\u76f4\u63a5\u8e29\u5728\u8eab\u4e0a\n  while (me.x != x) {\n  if (walkToTargetX &gt; 0) {\n    player.walk(Directions.East);\n  } else {\n    player.walk(Directions.West);\n  }\n  var me = client.findObject(player);\n  }\n\n  while (me.y != y) {\n    if (walkToTargetY &gt; 0) {\n      player.walk(Directions.South);\n    } else {\n      player.walk(Directions.North);\n    }\n    var me = client.findObject(player);\n  }\n}\n\n\/\/ main start\nvar ljbook = eval(&#039;ljbook&#039; + startljbook);\njournal.clear();\ncheckweight(ljno,ljbook);\nrecall(1, ljno, ljbook);\n\nwhile (true) {\n  \/\/ goto bank and check log for player bag\n  chop();\n  checkweight(ljno,ljbook);\n  var cklog = checklog();\n  if (cklog === true) {\n    \/\/ ljno\u7b26\u6587\u66f8\u76841-16\u865f\u7b26\u77f3   startljbook\u7b26\u6587\u66f81-5\u672c startljbookno\u662f\u4e00\u958b\u59cb\u8a2d\u5b9a\u6700\u591a\u5e7e\u672c\n    \/\/ \u6703\u9019\u9ebc\u641e\u662f\u56e0\u70ba\u79c1\u670d\u7684\u6a39\u91cd\u751f\u592a\u6162\u4e86  \u53ea\u597d\u53705\u672c\u4e00\u76f4\u780d\u7b49\u91cd\u751f\n    if (ljno &gt; 66) {\n      ljno = 50;\n      startljbook = startljbook + 1;\n      if (startljbook &gt; startljbookno) {\n        startljbook = 1;\n      }\n      var ljbook = eval(&#039;ljbook&#039; + startljbook);\n    } else {\n      ljno = ljno + 1;\n    }\n    \/\/ console.log(ljbook);\n    recall(1, ljno, ljbook);\n    \/\/ nexttree();\n  }\n}\n\/\/ main end<\/code><\/pre>\n\n\n\n<p>\u6316\u7926 &#8211; web<\/p>\n\n\n\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-javascript\">\/\/ \u4ee5\u4e0b\u9700\u8981\u4fee\u6539\u7684\n\/\/ \u5bb6\u6216\u9280\u884c\u7684\u7b26\u77f3\u66f8\nconst bankbook = 0x4032FF9C;\n\/\/ \u5bb6\u6216\u9280\u884c\u653e\u93df\u5b50\u7684\u888b\u5b50\u7684ID\nconst bankbagforore = 0x402A5FBF;\n\/\/ 16\u500b\u7926\u9ede\u7b26\u77f3\u66f8\u7684ID \u5728\u5b98\u7db2\u631616\u9ede\u7684\u7926\u5b8c \u7b2c1\u9ede\u5c31\u91cd\u751f\nconst mnbook = 0x40197792;\n\/\/ \u4e0d\u7528\u6539\nvar mnno = 50;\n\/\/ \u653e\u9435\u9320\u7684\u888b\u5b50\nconst ingotbag = 0x4017D6EC;\n\n\/\/ \u4ee5\u4e0b\u4e0d\u8981\u6539\n\/\/ \u5927\u7926 \u985e\u578b\nconst ore1 = 0x19B9;\n\/\/ \u4e2d\u7926\nconst ore2 = 0x19B7;\n\/\/ \u5c0f\u7926\nconst ore3 = 0x19BA;\n\/\/ \u5c0f\u5c0f\u7926\nconst ore4 = 0x19B8;\n\n\/\/ \u5bf6\u77f3\nconst tur = 0x3193;\nconst eme = 0x3194;\nconst rub = 0x3197;\nconst dia = 0x3198;\nconst cit = 0x3195;\nconst sap = 0x3192;\n\/\/ \u5c0f\u9ed1\u77f3\nconst bbr = 0xF28;\nconst ingot = 0x1BF2;\nconst ingotamount = 100;\nconst shovel = 0xF39;\nconst toolkit = 0x1EB8;\nvar toolkitcount = 0;\nvar shovelcount = 0;\nconst bank = client.findItemOnLayer(player, Layers.Bank);\n\nconst ingotinbag = 100;\nconst plweight = 100;\nconst recalltime = 4000;\nconst moveitemwaittime = 30;\n\nvar pbc = player.backpack.contents;\n\/\/ \u9019\u500b\u5305\u8981\u9031\u908a\u7bc4\u570d\u53ea\u6709\u4e00\u500b \u4e0d\u7136\u5c31\u8981\u6307\u5b9aID    \u53ef\u4ee5\u6293\u5230bank\u4e86\n\/\/ const home_backpack = client.findType(0xE79);\n\n\/\/ \u6bcf\u6b21\u7528for\u592a\u7169\u4e7e\u8106\u505a\u4e00\u500b\u51fd\u6578\nfunction findbag(itemtype=0) {\n  \n}\n\nfunction checkingot() {\n  for (var i = 0; i &lt; pbc.length; i++) {\n    if (pbc[i].graphic == ingot) {\n      if (pbc[i].amount &lt; ingotamount) {\n        player.moveType(ingot, ingotbag, player.backpack, 0, 0, 0, 0, (ingotamount - pbc[i].amount));\n      }\n    }\n  }\n}\n\nfunction checkshovel() {\n  var shovelcount = 0; \n  for (var i = 0; i &lt; pbc.length; i++) {\n    if (pbc[i].graphic == shovel) {\n      shovelcount = shovelcount + 1;\n    }\n  }\n  if (shovelcount &lt;= 1) {\n    checktinktool();\n    makeshovel();\n  }\n}\n\nfunction makeshovel() {\n  checktinktool();\n  for (var i = 0; i &lt; pbc.length; i++) {\n    if (pbc[i].graphic == toolkit) {\n      var toolkitid = pbc[i].serial;\n    }\n  }  \n  player.use(toolkitid);\n  \/\/ sleep(1000);\n  var gump = Gump.findOrWait(0x38920ABD, 5000);\n  \/\/tink tool=23     shovel=72\n  gump.reply(72);\n  sleep(1500);\n  gump.close();\n  sleep(2000);\n}\n\nfunction checktinktool() {\n  var toolkitcount = 0;\n  for (var i = 0; i &lt; pbc.length; i++) {\n    if (pbc[i].graphic == toolkit) {\n      toolkitcount = toolkitcount + 1;\n    }\n  }\n  if (toolkitcount &lt;= 1) {\n    maketinktool();\n  }\n}\n\nfunction maketinktool() {\n  for (var i = 0; i &lt; pbc.length; i++) {\n    if (pbc[i].graphic == toolkit) {\n      var toolkitid = pbc[i].serial;\n    }\n  }\n  player.use(toolkitid);\n  sleep(1000);\n  var gump = Gump.findOrWait(0x38920ABD, 5000);\n  \/\/tink tool=23     shovel=72\n  gump.reply(23);\n  sleep(1500);\n  gump.close();\n  sleep(2000);\n}\n\nfunction recall(recalltype = 0, no = 0, book = 0) {\n  if (recalltype == 0) {\n    player.cast(Spells.Recall);\n    target.wait();\n    target.entity(book);\n    sleep(recalltime);\n  } else {\n    player.use(book);\n    sleep(500);\n    var gump = Gump.findOrWait(0x59, 5000);\n    gump.reply(no);\n    sleep(recalltime);\n  }\n}\n\nfunction checkweight(mnno=0,mnbook=0) {\n  if (player.weight + plweight &gt; player.weightMax) {\n    recall(0, 0, bankbook);\n    putmine(mnno,mnbook);\n  }  \n}\n\nfunction check_coordinates(x=0, y=0) {\n  var me = client.findObject(player);\n  if (me.x == x || me.y == y) {\n    return true;\n  } else {\n    return false;\n  }\n}\n\nfunction putmine(mnno=0,mnbook=0) {\n  player.say(&#039;bank&#039;);\n  sleep(500);\n  var pbc = player.backpack.contents;\n  for (var i = 0; i &lt; player.backpack.contents.length; i++) {\n    if (pbc[i].graphic == ore1) {\n      var ore1id = pbc[i].serial;\n      \/\/ player.moveType(ore1, player.backpack, bankbagforore);\n      player.moveItem(ore1id, bankbagforore);\n      sleep(moveitemwaittime);\n    } \n    if (pbc[i].graphic == ore2) {\n      player.moveType(ore2, player.backpack, bankbagforore);\n      sleep(moveitemwaittime);\n    }\n    if (pbc[i].graphic == ore3) {\n      player.moveType(ore3, player.backpack, bankbagforore);\n      sleep(moveitemwaittime);\n    }\n    if (pbc[i].graphic == ore4) {\n      player.moveType(ore4, player.backpack, bankbagforore);\n      sleep(moveitemwaittime);\n    }\n    if (pbc[i].graphic == tur) {\n      player.moveType(tur, player.backpack, bankbagforore);\n      sleep(moveitemwaittime);\n    }\n    if (pbc[i].graphic == eme) {\n      player.moveType(eme, player.backpack, bankbagforore);\n      sleep(moveitemwaittime);\n    }\n    if (pbc[i].graphic == rub) {\n      player.moveType(rub, player.backpack, bankbagforore);\n      sleep(moveitemwaittime);\n    }\n    if (pbc[i].graphic == dia) {\n      player.moveType(dia, player.backpack, bankbagforore);\n      sleep(moveitemwaittime);\n    }\n    if (pbc[i].graphic == cit) {\n      player.moveType(cit, player.backpack, bankbagforore);\n      sleep(moveitemwaittime);\n    }\n    if (pbc[i].graphic == sap) {\n      player.moveType(sap, player.backpack, bankbagforore);\n      sleep(moveitemwaittime);\n    }\n    if (pbc[i].graphic == bbr) {\n      player.moveType(bbr, player.backpack, bankbagforore);\n      sleep(moveitemwaittime);\n    }\n  }\n  checkingot();\n  sleep(800);\n  recall(1, mnno, mnbook);\n}\n \nfunction checkore(no=0) {\n  \/\/ \u9019\u88e1\u8981\u6293\u6c92\u7926\u7684\u8a0a\u606f \u5982\u679c\u4e0d\u884c\u5c31\u7528journal\n  if (journal.containsText(&quot;There is no metal here to mine&quot;)) {\n    journal.clear();\n    return true\n  }\n  journal.clear();\n}\n\nfunction dig() {\n  for (var i = 0; i &lt; pbc.length; i++) {\n    if (pbc[i].graphic == shovel) {\n      var shovelid = player.backpack.contents[i].serial;\n    }\n  }\n  player.use(shovelid);\n  target.wait();\n  target.terrain(player.x - 1, player.y, 0);\n  sleep(500);\n\n  \/\/ todo \u9019\u88e1\u8981\u5224\u65b7\u4e00\u4e0b  \u9019\u500b\u9ede\u5230\u5e95\u7926\u5728\u54ea\u500b\u65b9\u5411\n  \/\/ \u9019\u88e1\u8981\u6293\u6c92\u7926\u7684\u8a0a\u606f \u5982\u679c\u4e0d\u884c\u5c31\u7528journal\n  \/\/console.log(journal.containsText(&quot;There is no metal here to mine&quot;));\n  \/\/journal.clear();\n}\n\n\n\n\n\/\/ main start\ncheckweight();\ncheckshovel();\nrecall(1, mnno, mnbook);\nwhile (true) {\n  checkweight();\n  checkshovel();\n  dig();\n  checkweight(mnno, mnbook);\n  var cklog = checkore();\n  if (cklog === true) {\n    if (mnno &gt; 66) {\n      mnno = 50;\n    } else {\n      mnno = mnno + 1;\n    }\n    recall(1, mnno, mnbook);\n  }\n  \/\/ console.log(cklog);\n}\n\/\/ main end\n\n\/\/ todo \u4f3a\u670d\u5668\u5b58\u6a94\u6642 \u6703\u5361\u5728\u8b80\u4e0d\u5728GUMP\n\/\/ \u628aGump.findOrWait\u8abf5000\u770b\u770b\n\n\/\/ \u9435\u9320\u4e0d\u6703\u5806\u758a\n\n\/\/ recall\u64cb\u9ede<\/code><\/pre>\n\n\n\n<p>gump test<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>player.use(0x40330ABA);\nvar gump = Gump.findOrWait(0x59);\n\/\/gump?.setTextEntry(0x01, &quot;Hello there&quot;); \nsleep(1000);\ngump.switchPage(2);\nsleep(1000);\nvar gump = Gump.findOrWait(0x59);\nsleep(1000);\ngump.reply(52);  \/\/80,90 empty 50 recall  100 gate  200 remove   300 set default<\/code><\/pre>\n\n\n\n<p>\u6316\u7926<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>const ore = 0x19b9;\nconst shovel = client.findType(0xF39);\nconst bank = client.findItemOnLayer(player, Layers.Bank);\n\/\/ \u4ee5\u4e0b\u9700\u8981\u4fee\u6539\u7684\n\/\/ \u5bb6\u6216\u9280\u884c\u7684\u7b26\u77f3\u66f8\nconst homeRune = 0x401BF55C;\n\/\/ \u5bb6\u6216\u9280\u884c\u653e\u93df\u5b50\u7684\u888b\u5b50\u7684ID\nconst homeBag = &#039;&#039;;\n\/\/ 16\u500b\u7926\u9ede\u7b26\u77f3\u66f8\u7684ID  \u627e\u4e0d\u5230CLICK\u7684\u529f\u80fd \u56e0\u6b64\u53ea\u80fd1\u672c\u66f8\u75761\u9846\u7b26\u77f3\u7528  \u5728\u5b98\u7db2\u631616\u9ede\u7684\u7926\u5b8c \u7b2c1\u9ede\u5c31\u91cd\u751f\nconst oreBook = &#091;\n  0x40110BB1,   \/\/ 1\n  0x40110D71    \/\/ 2\n];\n\n\/\/ \u9019\u500b\u5305\u8981\u9031\u908a\u7bc4\u570d\u53ea\u6709\u4e00\u500b \u4e0d\u7136\u5c31\u8981\u6307\u5b9aID    \u53ef\u4ee5\u6293\u5230bank\u4e86\n\/\/ const home_backpack = client.findType(0xE79);\n\n\nwhile (true) {\n  for (var i = 1; i++; oreBook.length) {\n    player.cast(Spells.Recall);\n    target.wait();\n    target.entity(oreBook&#091;i]);\n\n      \/\/ recall \u5f8c \u5224\u65b7\u64cb\u9ede\n    var me = client.findObject(player);\n    if (check_coordinates(me.x, me.y)) {\n      console.log(&#039;\u6a94\u9ede&#039;);\n      \/\/ \u96b1\u8eab\u4f11\u606f 12\u79d2\u5f8c\u518d\u8a66  12\u79d2\u662f\u96b1\u8eabCD\u6642\u9593\n      sleep(1000);\n    }\n  \n  }\n}\n\nfunction check_weight() {\n  if ((player.weightMax - 20) &gt; player.weight) {\n    \/\/ back to home or bank\n    player.cast(Spells.Recall);\n    target.wait();\n    target.entity(homeRune);\n    sleep(2000);\n    player.say(&quot;bank&quot;);\n    sleep(500);\n    \/\/ \u9084\u6709\u5c0f\u7926\u77f3\u8981\u52a0\u5165\n    player.moveType(ore, player.backpack, bank);\n    sleep(500);\n  }\n}\n\nfunction check_coordinates(x=0, y=0) {\n  var me = client.findObject(player);\n  if (me.x == x || me.y == y) {\n    return true;\n  } else {\n    return false;\n  }\n}\n \nfunction mine() {\n  var me = client.findObject(player);\n  var me_terr = client.getTerrainList(me.x, me.y - 1);\n \n  player.use(shovel);\n  target.wait();\n  \/\/ var c = parseInt(&quot;0x&quot; + me_terr&#091;1].graphic.toString(16).toUpperCase());\n  \/\/ \u9019\u88e1\u8981\u5224\u65b7\u4e00\u4e0b  \u9019\u500b\u9ede\u5230\u5e95\u7926\u5728\u54ea\u500b\u65b9\u5411\n  target.terrain(me.x, me.y - 1, 0);\n\n  \/\/ \u9019\u88e1\u8981\u6293\u6c92\u7926\u7684\u8a0a\u606f \u5982\u679c\u4e0d\u884c\u5c31\u7528journal\n  console.log(journal.containsText(&quot;There is no metal here to mine&quot;));\n  journal.clear();\n}\n\nfunction walk_coordinates(x = 0, y = 0) {\n  var walkToTargetX = x - me.x;\n  var walkToTargetY = y - me.y;\n  var me = client.findObject(player);\n\n  \/\/ \u9019\u88e1x\u6216y\u8981+1  \u4e0d\u7136\u6703\u76f4\u63a5\u8e29\u5728\u8eab\u4e0a\n  while (me.x != x) {\n  if (walkToTargetX &gt; 0) {\n    player.walk(Directions.East);\n  } else {\n    player.walk(Directions.West);\n  }\n  var me = client.findObject(player);\n  }\n\n  while (me.y != y) {\n    if (walkToTargetY &gt; 0) {\n      player.walk(Directions.South);\n    } else {\n      player.walk(Directions.North);\n    }\n    var me = client.findObject(player);\n  }\n}<\/code><\/pre>\n\n\n\n<p>\u79fb\u9664\u9677\u9631 &#8211; python<\/p>\n\n\n\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-python\">#Created by Pacho for Heritage server (ServUO).\n\n#   Increase this to see the gump getting solved, will make the puzzle time longer\nvisual_delay = 1\n#   Lower this if you have a good connection.\n#   Will make the logs spam more with the message telling you to wait before using another skill\ntimeout_delay = 4000\n\n####################################\n#   Data gathered during testing:\n#   Puzzle size 3\n#   From 51 to 65.7\n#   480 runs\n#   928 fails\n#   1.93 avg fails\/run\n#   0.03 avg skillgain\/run\n#   ~36 seconds avg puzzle time\n#   \n#   Puzzle size 3\n#   From 65.7 to 75\n#   393 runs\n#   758 fails\n#   1.92 avg fails\/run\n#   0.023 avg skillgain\/run\n#   ~36 seconds avg puzzle time\n#\n#   Data lost from 75 to 75.8\n#\n#   Puzzle size 3 &amp; 4 (size 4 at 80 skill and up)\n#   From 75.8 to 82.3\n#   442 runs\n#   1247 fails\n#   2.82 avg fails\/run\n#   0.0014 avg skillgain\/run\n#   ~52 seconds avg puzzle time\n#\n#   Puzzle size 4\n#   From 82.3 to 82.8   \n#   57 runs\n#   269 fails\n#   4.72 avg fails\/run\n#   0.0087 avg skillgain\/run\n#   ~72 seconds avg puzzle time\n###############################\n\n\nfrom datetime import datetime\ntrap_box = Target.PromptTarget(&quot;Target a circuit trap training kit in your inventory&quot;)\ninitial_skill = Player.GetRealSkillValue(&quot;Remove Trap&quot;)\nbox_gump = 653724266\nup = 1\nright = 2\ndown = 3\nleft = 4\nmessages = {\n    &quot;success&quot;:&quot;You successfully disarm the trap!&quot;,\n    &quot;fail&quot;:&quot;You fail to disarm the trap and reset it&quot;,\n    &quot;wait&quot;:&quot;You must wait a few moments to use another skill&quot;\n}\nrun_data = {\n    &quot;coords&quot;: [0,0],\n    &quot;used_coords&quot;: [[0,0]],\n    &quot;size&quot;: 3,\n    &quot;good_steps&quot;: [],\n    &quot;incoming_dir&quot;: left,\n    &quot;last_dir&quot;: up,\n    &quot;successive_fails&quot;: 0,\n    &quot;time_started&quot;:datetime.now()\n}\nfails = 0\nruns = 1\navg_reset_time = 0\nlast_puzzle_time = 0\n# Resets the system\ndef reset(data):\n    data[&quot;coords&quot;] = [0,0]\n    data[&quot;used_coords&quot;] = [[0,0]]\n    data[&quot;size&quot;] = 3\n    data[&quot;good_steps&quot;] = []\n    data[&quot;incoming_dir&quot;] = left\n    data[&quot;last_dir&quot;] = up\n    data[&quot;successive_fails&quot;] = 0\n    data[&quot;time_started&quot;] = datetime.now()\n    if Gumps.HasGump():\n        Gumps.CloseGump(box_gump)\n    \n#   Get the next dir\ndef getNextDir(last_dir, incoming_dir, cur_coords, used_coords, size, cycle=0):\n    # Prevents recursion from happening too much.  It shouldn&#039;t recalculate enough to go around\n    if cycle &gt; 3:\n        Misc.SendMessage(&quot;Recursion too deep! Aborting recalculation...&quot;, 0x80)\n        return last_dir\n    next_dir = (last_dir)%4 + 1\n    if (next_dir == incoming_dir) or (next_dir == left and cur_coords[0] == 0) or (next_dir == up and cur_coords[1] == 0) or (next_dir == right and cur_coords[0] == (size-1)) or (next_dir == down and cur_coords[1] == (size-1)):\n        next_dir = getNextDir(next_dir, incoming_dir, cur_coords, used_coords, size, cycle + 1)\n    displacement = getDisplacement(next_dir)\n    new_coords = [cur_coords[0] + displacement[0], cur_coords[1] + displacement[1]]\n    coords_traveled = False\n    for coord in used_coords:\n        if coord[0] == new_coords[0] and coord[1] == new_coords[1]:\n            coords_traveled = True\n            break\n    if coords_traveled:\n        next_dir = getNextDir(next_dir, incoming_dir, cur_coords, used_coords, size, cycle + 1)\n    if (cur_coords[0] == (size-1) and next_dir == up) or (cur_coords[1] == (size-1)and next_dir == left) or (cur_coords[0] == 0 and next_dir == left) or (cur_coords[1] == 0 and next_dir == up):\n        #Misc.SendMessage(&quot;Wrong way: &quot; + dirStr(next_dir) + &quot; Size: &quot; + str(size) + &quot; Coords: &quot; + str(cur_coords), 0x80)\n        next_dir = getNextDir(next_dir, incoming_dir, cur_coords, used_coords, size, cycle + 1)\n    return next_dir\ndef getDisplacement(dir):\n    if dir == up:\n        return [0, -1]\n    elif dir == right:\n        return [1, 0]\n    elif dir == down:\n        return [0, 1]\n    elif dir == left:\n        return [-1, 0]\n    else:\n        return [0, 0]\ndef getReverseDir(dir):\n    if dir == up:\n        return down\n    elif dir == right:\n        return left\n    elif dir == down:\n        return up\n    elif dir == left:\n        return right\ndef dirStr(dir):\n    if dir == up:\n        return &quot;up&quot;\n    elif dir == right:\n        return &quot;right&quot;\n    elif dir == down:\n        return &quot;down&quot;\n    elif dir == left:\n        return &quot;left&quot;\n    else:\n        return &quot;unknown: &quot; + str(dir)\n###\ndef expMovingAvg(new_val, cur_avg, n):\n    return (new_val - cur_avg)*(2\/float(n+1))+cur_avg\n###\n#Actual program\nreset(run_data)\nJournal.Clear()\nwhile Player.GetRealSkillValue(&quot;Remove Trap&quot;) &lt; Player.GetSkillCap(&quot;Remove Trap&quot;):\n    Target.Cancel()\n    gains = Player.GetRealSkillValue(&quot;Remove Trap&quot;) - initial_skill\n    Misc.SendMessage(&quot;Skill: &quot; + str(Player.GetRealSkillValue(&quot;Remove Trap&quot;)) + &quot; Skillgain since start: &quot; + str(gains), 0x60)\n    Misc.SendMessage(&quot;Runs: &quot; + str(runs) + &quot; Fails: &quot; + str(fails), 0x80)\n    Misc.SendMessage(&quot; Avg fails\/run: &quot; + str((0.0+fails)\/runs), 0x80)\n    Misc.SendMessage(&quot; Avg skillgain\/run: &quot; + str(gains\/runs), 0x80)\n    Misc.SendMessage(&quot; Avg puzzle time: &quot; + str(avg_reset_time), 0x80)\n    Player.UseSkill(&quot;Remove Trap&quot;)\n    Target.WaitForTarget(timeout_delay, False)\n    while Journal.Search(messages[&quot;wait&quot;]):\n        Journal.Clear()\n        Player.UseSkill(&quot;Remove Trap&quot;)\n        Misc.Pause(visual_delay)\n        Target.WaitForTarget(timeout_delay, False)\n    Target.TargetExecute(trap_box)\n    Gumps.WaitForGump(box_gump, timeout_delay)\n    Misc.Pause(visual_delay)\n    Journal.Clear()\n    if not Gumps.HasGump():\n        Target.Cancel()\n        continue\n    gump_data = Gumps.LastGumpRawData()\n    # Count of grey points that are possible to traverse.  Used to get the board size instead of a skill level\n    midpoint_count = gump_data.count(&quot;9720&quot;)\n    # 3x3 has 7 midpoints\n    if midpoint_count == 7:\n        run_data[&quot;size&quot;] = 3\n    else:\n        run_data[&quot;size&quot;] = 4\n    if run_data[&quot;size&quot;] == 0:\n        Misc.SendMessage(&quot;Puzzle size indeterminate, stopping script&quot;, 0x110)\n        break\n    Misc.SendMessage(&quot;Puzzle Size: &quot; + str(run_data[&quot;size&quot;]), 0x60)\n    # Executes all known good steps for this box run\n    Misc.SendMessage(&quot;Executing known steps: &quot; + str(map(lambda x : dirStr(x), run_data[&quot;good_steps&quot;])), 0x80)\n    Misc.SendMessage(&quot;Used coords: &quot; + str(run_data[&quot;used_coords&quot;]), 0x80)\n    for step in run_data[&quot;good_steps&quot;]:\n        Gumps.SendAction(box_gump, step)\n        Gumps.WaitForGump(box_gump, timeout_delay)\n        Misc.Pause(visual_delay)\n        \n    while not (Journal.Search(messages[&quot;success&quot;]) or Journal.Search(messages[&quot;fail&quot;])):\n        run_data[&quot;next_dir&quot;] = getNextDir(run_data[&quot;last_dir&quot;], run_data[&quot;incoming_dir&quot;], run_data[&quot;coords&quot;], run_data[&quot;used_coords&quot;], run_data[&quot;size&quot;])\n        Misc.SendMessage(&quot;Trying &quot; + dirStr(run_data[&quot;next_dir&quot;]) + &quot;, previous try &quot; + dirStr(run_data[&quot;last_dir&quot;]) + &quot;, came from &quot; + dirStr(run_data[&quot;incoming_dir&quot;]), 0x49)\n        Gumps.SendAction(box_gump, run_data[&quot;next_dir&quot;])\n        Gumps.WaitForGump(box_gump, timeout_delay)\n        run_data[&quot;last_dir&quot;] = run_data[&quot;next_dir&quot;]\n        if Gumps.HasGump():\n            displacement = getDisplacement(run_data[&quot;last_dir&quot;])\n            run_data[&quot;coords&quot;] = [run_data[&quot;coords&quot;][0] + displacement[0],run_data[&quot;coords&quot;][1] + displacement[1]]\n            run_data[&quot;good_steps&quot;].append(run_data[&quot;last_dir&quot;])\n            run_data[&quot;used_coords&quot;].append([run_data[&quot;coords&quot;][0], run_data[&quot;coords&quot;][1]])\n            run_data[&quot;incoming_dir&quot;] = getReverseDir(run_data[&quot;last_dir&quot;])\n            run_data[&quot;successive_fails&quot;] = 0\n            Misc.Pause(visual_delay)\n        else:\n            break\n    if Journal.Search(messages[&quot;success&quot;]):\n        Misc.SendMessage(&quot;Succeeded&quot;, 0x39)\n        runs = runs + 1\n        last_puzzle_time = datetime.now() - run_data[&quot;time_started&quot;]\n        avg_reset_time = expMovingAvg(last_puzzle_time.total_seconds(), avg_reset_time, runs-1)\n        Misc.SendMessage(&quot;Solve time: &quot; + str(last_puzzle_time), 0x39)\n        reset(run_data)\n    elif Journal.Search(messages[&quot;fail&quot;]):\n        Misc.SendMessage(&quot;Failed&quot;, 0x39)\n        run_data[&quot;successive_fails&quot;] = run_data[&quot;successive_fails&quot;]+1\n        fails = fails + 1\n        if run_data[&quot;successive_fails&quot;] &gt; 3:\n            Misc.SendMessage(&quot;Too many successive fails, resetting...&quot;, 0x80)\n            if Gumps.HasGump():\n                Gumps.CloseGump(box_gump)\n            reset(run_data)\n    else:\n        Misc.SendMessage(&quot;Timed out&quot;, 0x39)\nMisc.SendMessage(&quot;Training complete!&quot;, 0x90)<\/code><\/pre>\n\n\n\n<p>\u5305\u5305\u62c9\u6771\u897f &#8211; euo<\/p>\n\n\n\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-\">IF %NOTSTART = N\/A\n{\n  ;\u9ede\u9078\u5783\u573e\u7b52\n  try_again:\n  EVENT SYSMESSAGE SOURCE_BAG\n  wait 2\n  set #targcurs 1\n  target 20s\n  waittarget1:\n  if #targcurs = 0\n  {\n    SET %box1 #LTARGETID\n    Set #LOBJECTID #LTARGETID\n    event macro 17 0\n    wait 20\n    contpos 10 10\n    EVENT SYSMESSAGE %box1\n  }\n  if %box1 = n\/a\n  goto waittarget1\n\n\n\n  EVENT SYSMESSAGE TARGET_BAG\n  wait 2\n  set #targcurs 1\n  target 20s\n  waittarget2:\n  if #targcurs = 0\n  {\n    SET %box2 #LTARGETID\n    Set #LOBJECTID #LTARGETID\n    event macro 17 0\n    wait 20\n    contpos 250 10\n    EVENT SYSMESSAGE %box2\n  }\n  if %box2 = n\/a\n  goto waittarget2\n  \n  \n  EVENT SYSMESSAGE ITEM\n  wait 2\n  set #targcurs 1\n  target 20s\n  waittarget3:\n  if #targcurs = 0\n  {\n    SET %itema #LTARGETID\n    FINDITEM %itema C_ , %box1\n    IF #FINDKIND = 0\n    {\n      EXEVENT DRAG #FINDID #FINDSTACK\n      EXEVENT DROPC %box2\n      WAIT 20\n      SET %item #FINDTYPE\n      IGNOREITEM #FINDID\n      EVENT SYSMESSAGE %item\n    }\n\n  }\n  if %item = n\/a\n  goto waittarget3\n}\nSET %NOTSTART = True\n\n\nDROP:\nFINDITEM %item C_ , %box1\n;0 \u8868\u793a\u5728\u5305\u5305  1\u8868\u793a\u5728\u5730\u4e0a  -1\u8868\u793a\u6c92\u627e\u5230\nIF #FINDKIND = 0\n{\n    EXEVENT DRAG #FINDID #FINDSTACK\n    EXEVENT DROPC %box2\n    WAIT 20\n    IGNOREITEM #FINDID\n    goto DROP\n}\n\nELSE\n{\n    EVENT SYSMESSAGE DONE.\n    halt\n}\n\n\n\n\n<\/code><\/pre>\n\n\n\n<p>\u8ddf\u96a8 &#8211; web<\/p>\n\n\n\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-\">function walk_coordinates(x = 0, y = 0) {\n  var walkToTargetX = x - me.x;\n  var walkToTargetY = y - me.y;\n  var me = client.findObject(player);\n\n  \/\/ \u9019\u88e1x\u6216y\u8981+1  \u4e0d\u7136\u6703\u76f4\u63a5\u8e29\u5728\u8eab\u4e0a\n  while (me.x != x) {\n  if (walkToTargetX &gt; 0) {\n    player.walk(Directions.East);\n  } else {\n    player.walk(Directions.West);\n  }\n  var me = client.findObject(player);\n  }\n\n  while (me.y != y) {\n    if (walkToTargetY &gt; 0) {\n      player.walk(Directions.South);\n    } else {\n      player.walk(Directions.North);\n    }\n    var me = client.findObject(player);\n  }\n}<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>\u4e0a\u4e0b\u99ac \u9b54\u6cd5\u985e &#8211; web \u4f10\u6728 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[40],"tags":[],"class_list":["post-1706","post","type-post","status-publish","format-standard","hentry","category-fredy"],"_links":{"self":[{"href":"https:\/\/wp.vicds.com\/index.php?rest_route=\/wp\/v2\/posts\/1706","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wp.vicds.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wp.vicds.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wp.vicds.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wp.vicds.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1706"}],"version-history":[{"count":43,"href":"https:\/\/wp.vicds.com\/index.php?rest_route=\/wp\/v2\/posts\/1706\/revisions"}],"predecessor-version":[{"id":1817,"href":"https:\/\/wp.vicds.com\/index.php?rest_route=\/wp\/v2\/posts\/1706\/revisions\/1817"}],"wp:attachment":[{"href":"https:\/\/wp.vicds.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1706"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wp.vicds.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1706"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wp.vicds.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1706"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}