Code edit (22 edits merged)
Please save this source code
User prompt
Please fix the bug: 'Promise is not a constructor' in or related to this line: 'return new Promise(function (r, o) {' Line Number: 846
User prompt
Please fix the bug: 'Promise is not a constructor' in or related to this line: 'return new Promise(function (r, o) {' Line Number: 846
Code edit (1 edits merged)
Please save this source code
/**** * Classes ****/ // Create a new class for the anvil object var Anvil = Container.expand(function () { var self = Container.call(this); // Attach 'anvil' asset to the 'Anvil' object var anvilGraphics = self.attachAsset('anvil', { anchorX: 0.6, anchorY: 0.6, alpha: 0.0 // Make the anvil fully transparent }); // Initialize the click counter self.clickCounter = storage.forgingSkill; // Make the 'Anvil' object interactive self.interactive = true; // Define the 'down' event handler self.down = function (x, y, obj) { // Increment the click counter self.clickCounter++; // Add a 5% chance for a multi-click event to increase forging skill by 5 var shans = 0.02; if (storage.multiclickupgrade) { shans += 0.02; } if (Math.random() < 0.02) { self.clickCounter += 5; // Create a new asset at the center of the screen var newAsset = game.addChild(LK.getAsset('multyclick', { anchorX: 0.5, anchorY: 0.5 })); // Position the new asset at the center of the screen newAsset.x = 2048 / 2; newAsset.y = 2732 / 2; // Animate the scaling of the new asset tween(newAsset, { scaleX: 2, scaleY: 2 }, { duration: 500, easing: tween.easeInOut, onFinish: function onFinish() { newAsset.destroy(); // Remove the asset after the animation } }); } // Update the text object with the click counter and label counterText.setText('Forging skill: ' + self.clickCounter); // Persist the click counter storage.forgingSkill = self.clickCounter; // Change the color of the counter text based on the click counter if (self.clickCounter >= 1000 && self.clickCounter < 2000) { counterText.tint = 0x00FF00; // Green } else if (self.clickCounter >= 2000 && self.clickCounter < 15000) { counterText.tint = 0x0000FF; // Blue } else if (self.clickCounter >= 15000 && self.clickCounter < 30000) { counterText.tint = 0x800080; // Purple } else if (self.clickCounter >= 30000) { counterText.tint = 0xcc7c04; // Purple } if (storage.forgingSkill >= 100 && storage.help == 1) { if (quest && typeof quest.destroy === 'function') { quest.destroy(); } quest = false; setHelp(1); } }; }); // Create a new class for the BlueCristal object var BlueCristal = Container.expand(function () { var self = Container.call(this); // Attach 'blueCristal' asset to the 'BlueCristal' object var blueCristalGraphics = self.attachAsset('blueCristal', { anchorX: 0.5, anchorY: 0.5, interactive: true // Make the blueCristal interactive }); // Define the 'down' event handler for blueCristal self.down = function (x, y, obj) { // Increment the score by 1 blueCrystallScore += 1; if (blueCrystallScore >= 100 && storage.help == 6) { if (quest && typeof quest.destroy === 'function') { quest.destroy(); } quest = false; } LK.setScore(blueCrystallScore); storage.blueCrystallScore = blueCrystallScore; // Update the score text scoreTxt.setText('Blue Crystall: ' + LK.getScore()); scoreTxt.visible = true; // Ensure the score text remains visible }; }); // Create a new class for the BlueCrystalIngot object var BlueCrystalIngot = Container.expand(function () { var self = Container.call(this); var blueCrystalIngotGraphics = self.attachAsset('blueCrystalIngot', { anchorX: 0.5, anchorY: 0.5, interactive: true }); self.down = function (x, y, obj) { if (blueCrystallScore >= 10) { blueCrystalIngotScore += 1; storage.growthRate += 10; growthRateText.setText('Growth rate: ' + storage.growthRate); blueCrystalIngotScoreTxt.setText('BlueCrystalIngot: ' + blueCrystalIngotScore); storage.blueCrystalIngotScore = blueCrystalIngotScore; blueCrystallScore -= 10; if (blueCrystallScore < 0) { blueCrystallScore = 0; } storage.blueCrystallScore = blueCrystallScore; LK.setScore(blueCrystallScore); scoreTxt.setText('Blue Crystall: ' + LK.getScore()); // Добавляем проверку для квеста 9 if (blueCrystalIngotScore >= 10 && storage.help == 9) { quest.destroy(); quest = false; } } }; }); // Create a new class for the Door object var Door = Container.expand(function () { var self = Container.call(this); // Attach 'Door' asset to the 'Door' object var doorGraphics = self.attachAsset('Door', { anchorX: 0.5, anchorY: 0.5 }); // Make the 'Door' object interactive self.interactive = true; // Define the 'down' event handler self.down = function (x, y, obj) { if (storage.help == 2) { if (quest && typeof quest.destroy === 'function') { quest.destroy(); } quest = false; } if (storage.help == 8) { if (quest && typeof quest.destroy === 'function') { quest.destroy(); } quest = false; } LK.getSound('doors').play(); // Remove the existing hammer hammer.destroy(); // Create a new screen game.magicNursery = game.addChild(new Container()); // Attach 'magicNurseryBackground' asset to the 'magicNursery' object var magicNurseryBackground = game.magicNursery.attachAsset('magicNurseryBackground', { anchorX: 0.5, anchorY: 0.5, interactive: false, // Disable interactivity to prevent blurring on click scaleX: 2, // Double the size horizontally scaleY: 2 // Double the size vertically }); // Recreate the hammer asset magicNurseryBackground.x = 2048 / 2; magicNurseryBackground.y = 2732 / 2; // Attach 'ForgeOfMatter' asset to the 'magicNursery' object var forgeOfMatter = game.magicNursery.attachAsset('ForgeOfMatter', { anchorX: 0.5, anchorY: 0.5, interactive: true, scaleX: 3, // Increase the size horizontally scaleY: 3, // Increase the size vertically alpha: 0.0 // Make the ForgeOfMatter fully transparent }); // Create and add a new instance of the BlueCrystalIngot class var blueCrystalIngot = game.magicNursery.addChild(new BlueCrystalIngot()); //{P.1} // Position the blueCrystalIngot asset in the bottom-left corner blueCrystalIngot.x = 200 + blueCrystalIngot.width / 2; blueCrystalIngot.y = 2500 - blueCrystalIngot.height / 2; // Create and add a new instance of the RedCrystalIngot class var redCrystalIngot = game.magicNursery.addChild(new RedCrystalIngot()); // Center the redCrystalIngot asset in the magicNursery screen redCrystalIngot.x = 1300 / 2 + 350; // Move the redCristalIngot asset 100 pixels to the right redCrystalIngot.y = 4820 / 2; // Create and add a new instance of the GreenCrystalIngot class var greenCrystalIngotInstance = game.magicNursery.addChild(new GreenCrystalIngot()); // Position the greenCrystalIngotInstance asset to the right of the blueCrystalIngot asset greenCrystalIngotInstance.x = blueCrystalIngot.x + blueCrystalIngot.width + greenCrystalIngotInstance.width / 2 + 40; greenCrystalIngotInstance.y = blueCrystalIngot.y; // Center the growthRate asset in the magicNursery screen var growthRate = game.magicNursery.addChild(LK.getAsset('growthRate', { anchorX: 0.7, anchorY: 0.7 })); growthRate.x = 780; growthRate.y = 1500; // Define the 'down' event handler for ForgeOfMatter forgeOfMatter.down = function (x, y, obj) { // Increment the click counter storage.growthRate++; // Update the text object with the click counter and label growthRateText.setText('Growth rate: ' + storage.growthRate); if (storage.growthRate >= 50 && storage.help == 3) { if (quest && typeof quest.destroy === 'function') { quest.destroy(); } quest = false; } }; forgeOfMatter.x = 1100 / 1.5; forgeOfMatter.y = 2000 / 1.5; // Hide the game screen gameScreen.visible = false; // Show the forging skill counter when transitioning to magicNursery counterText.visible = true; // Hide the map when switching to the magic nursery screen map.visible = false; // Add a new object 'Door2' var door2 = game.magicNursery.addChild(new Door2()); // Position 'Door2' to the right, between the center and the edge of the screen door2.x = 2048 * 0.75; door2.y = 2732 * 0.9; setHelp(2); setHelp(8); hammer = game.addChild(LK.getAsset('hammer', { anchorX: 0.5, anchorY: 0.5, scaleX: -1 })); }; }); // Create a new class for the Door2 object var Door2 = Container.expand(function () { var self = Container.call(this); // Attach 'Door' asset to the 'Door2' object var doorGraphics = self.attachAsset('Door', { anchorX: 0.5, anchorY: 0.5 }); // Make the 'Door2' object interactive self.interactive = true; // Define the 'down' event handler self.down = function (x, y, obj) { LK.getSound('doors').play(); hammer.destroy(); gameScreen.visible = true; map.visible = true; counterText.visible = true; game.magicNursery.visible = false; growthRateText.visible = true; // Если квест 9 не завершается, показываем другие подсказки setHelp(0); setHelp(1); setHelp(3); setHelp(9); hammer = game.addChild(LK.getAsset('hammer', { anchorX: 0.5, anchorY: 0.5, scaleX: -1 })); }; }); // Create a new class for the GreenCristal object var GreenCristal = Container.expand(function () { var self = Container.call(this); // Attach 'greenCristal' asset to the 'GreenCristal' object var greenCristalGraphics = self.attachAsset('greenCristal', { anchorX: 0.5, anchorY: 0.5, interactive: true // Make the greenCristal interactive }); // Define the 'down' event handler for greenCristal self.down = function (x, y, obj) { // Increment the score by 1 greenCrystallScore += 1; LK.setScore(greenCrystallScore); storage.greenCrystallScore = greenCrystallScore; // Update the score text greenScoreTxt.setText('Green Crystall: ' + greenCrystallScore); greenScoreTxt.visible = true; // Ensure the score text remains visible }; }); // Create a new class for the GreenCrystalIngot object var GreenCrystalIngot = Container.expand(function () { var self = Container.call(this); // Attach 'greenCrystalIngot' asset to the 'GreenCrystalIngot' object var greenCrystalIngotGraphics = self.attachAsset('greenCrystalIngot', { anchorX: 0.5, anchorY: 0.5, interactive: true // Make the greenCrystalIngot interactive }); // Define the 'down' event handler for greenCrystalIngot self.down = function (x, y, obj) { if (storage.growthRate >= 2000 && greenCrystallScore >= 15) { storage.growthRate += 10; // Increment growth rate by 10 growthRateText.setText('Growth rate: ' + storage.growthRate); // Update the growth rate display // Increment the GreenCrystalIngot score by 1 greenCrystalIngotScore += 1; greenCrystalIngotScoreTxt.setText('GreenCrystalIngot: ' + greenCrystalIngotScore); storage.greenCrystalIngotScore = greenCrystalIngotScore; // Decrement the GreenCristal score by 100 greenCrystallScore -= 15; if (greenCrystallScore < 0) { greenCrystallScore = 0; } storage.greenCrystallScore = greenCrystallScore; // Persist the decrement greenScoreTxt.setText('Green Crystall: ' + greenCrystallScore); } }; }); var Help = Container.expand(function () { var self = Container.call(this); var helpGraphics = self.attachAsset('help', { anchorX: 0.5, anchorY: 0.5, interactive: true }); self.down = function (x, y, obj) {}; }); // Create a new class for the RecipesScreen object var RecipesScreen = Container.expand(function () { var self = Container.call(this); }); // Create a new class for the RedCristal object var RedCristal = Container.expand(function () { var self = Container.call(this); // Attach 'redCristal' asset to the 'RedCristal' object var redCristalGraphics = self.attachAsset('redCristal', { anchorX: 0.5, anchorY: 0.5, interactive: true // Make the redCristal interactive }); // Define the 'down' event handler for redCristal self.down = function (x, y, obj) { // Increment the score by 1 redCrystallScore += 1; LK.setScore(redCrystallScore); storage.redCrystallScore = redCrystallScore; // Update the score text redScoreTxt.setText('Red Crystall: ' + redCrystallScore); redScoreTxt.visible = true; // Ensure the score text remains visible }; }); // Create a new class for the RedCrystalIngot object var RedCrystalIngot = Container.expand(function () { var self = Container.call(this); // Attach 'redCristalIngot' asset to the 'RedCrystalIngot' object var redCrystalIngotGraphics = self.attachAsset('redCristalIngot', { anchorX: 0.5, anchorY: 0.5, interactive: true // Make the redCrystalIngot interactive }); // Define the 'down' event handler for redCrystalIngot self.down = function (x, y, obj) { // Decrement the RedCristal score by 100 if (storage.growthRate >= 9000 && redCrystallScore >= 20) { // Increment the RedCrystalIngot score by 1 redCrystalIngotScore += 1; storage.growthRate += 20; // Increment growth rate by 20 growthRateText.setText('Growth rate: ' + storage.growthRate); // Update the growth rate display redCrystalIngotScoreTxt.setText('RedCrystalIngot: ' + redCrystalIngotScore); storage.redCrystalIngotScore = redCrystalIngotScore; redCrystallScore -= 20; storage.redCrystallScore = redCrystallScore; // Persist the decrement redScoreTxt.setText('Red Crystall: ' + redCrystallScore); } }; }); var RedCrystalTwoHandedSword = Container.expand(function () { var self = Container.call(this); // Attach 'redcrystaltwo-handedswordrecipe' asset to the 'RedCrystalTwoHandedSword' object var redCrystalTwoHandedSwordGraphics = self.attachAsset('redcrystaltwo-handedswordrecipe', { anchorX: 0.5, anchorY: 0.5, interactive: true // Make the redCrystalTwoHandedSword interactive }); }); /**** * Initialize Game ****/ // Create a new text object to display the click counter var game = new LK.Game({ backgroundColor: 0x000000 }); /**** * Game Code ****/ //{0.1} function _typeof2(o) { "@babel/helpers - typeof"; return _typeof2 = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof2(o); } function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return e; }; var t, e = {}, r = Object.prototype, n = r.hasOwnProperty, o = Object.defineProperty || function (t, e, r) { t[e] = r.value; }, i = "function" == typeof Symbol ? Symbol : {}, a = i.iterator || "@@iterator", c = i.asyncIterator || "@@asyncIterator", u = i.toStringTag || "@@toStringTag"; function define(t, e, r) { return Object.defineProperty(t, e, { value: r, enumerable: !0, configurable: !0, writable: !0 }), t[e]; } try { define({}, ""); } catch (t) { define = function define(t, e, r) { return t[e] = r; }; } function wrap(t, e, r, n) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype), c = new Context(n || []); return o(a, "_invoke", { value: makeInvokeMethod(t, r, c) }), a; } function tryCatch(t, e, r) { try { return { type: "normal", arg: t.call(e, r) }; } catch (t) { return { type: "throw", arg: t }; } } e.wrap = wrap; var h = "suspendedStart", l = "suspendedYield", f = "executing", s = "completed", y = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var p = {}; define(p, a, function () { return this; }); var d = Object.getPrototypeOf, v = d && d(d(values([]))); v && v !== r && n.call(v, a) && (p = v); var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p); function defineIteratorMethods(t) { ["next", "throw", "return"].forEach(function (e) { define(t, e, function (t) { return this._invoke(e, t); }); }); } function AsyncIterator(t, e) { function invoke(r, o, i, a) { var c = tryCatch(t[r], t, o); if ("throw" !== c.type) { var u = c.arg, h = u.value; return h && "object" == _typeof2(h) && n.call(h, "__await") ? e.resolve(h.__await).then(function (t) { invoke("next", t, i, a); }, function (t) { invoke("throw", t, i, a); }) : e.resolve(h).then(function (t) { u.value = t, i(u); }, function (t) { return invoke("throw", t, i, a); }); } a(c.arg); } var r; o(this, "_invoke", { value: function value(t, n) { function callInvokeWithMethodAndArg() { return new e(function (e, r) { invoke(t, n, e, r); }); } return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(e, r, n) { var o = h; return function (i, a) { if (o === f) { throw Error("Generator is already running"); } if (o === s) { if ("throw" === i) { throw a; } return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var c = n.delegate; if (c) { var u = maybeInvokeDelegate(c, n); if (u) { if (u === y) { continue; } return u; } } if ("next" === n.method) { n.sent = n._sent = n.arg; } else if ("throw" === n.method) { if (o === h) { throw o = s, n.arg; } n.dispatchException(n.arg); } else { "return" === n.method && n.abrupt("return", n.arg); } o = f; var p = tryCatch(e, r, n); if ("normal" === p.type) { if (o = n.done ? s : l, p.arg === y) { continue; } return { value: p.arg, done: n.done }; } "throw" === p.type && (o = s, n.method = "throw", n.arg = p.arg); } }; } function maybeInvokeDelegate(e, r) { var n = r.method, o = e.iterator[n]; if (o === t) { return r.delegate = null, "throw" === n && e.iterator["return"] && (r.method = "return", r.arg = t, maybeInvokeDelegate(e, r), "throw" === r.method) || "return" !== n && (r.method = "throw", r.arg = new TypeError("The iterator does not provide a '" + n + "' method")), y; } var i = tryCatch(o, e.iterator, r.arg); if ("throw" === i.type) { return r.method = "throw", r.arg = i.arg, r.delegate = null, y; } var a = i.arg; return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, "return" !== r.method && (r.method = "next", r.arg = t), r.delegate = null, y) : a : (r.method = "throw", r.arg = new TypeError("iterator result is not an object"), r.delegate = null, y); } function pushTryEntry(t) { var e = { tryLoc: t[0] }; 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e); } function resetTryEntry(t) { var e = t.completion || {}; e.type = "normal", delete e.arg, t.completion = e; } function Context(t) { this.tryEntries = [{ tryLoc: "root" }], t.forEach(pushTryEntry, this), this.reset(!0); } function values(e) { if (e || "" === e) { var r = e[a]; if (r) { return r.call(e); } if ("function" == typeof e.next) { return e; } if (!isNaN(e.length)) { var o = -1, i = function next() { for (; ++o < e.length;) { if (n.call(e, o)) { return next.value = e[o], next.done = !1, next; } } return next.value = t, next.done = !0, next; }; return i.next = i; } } throw new TypeError(_typeof2(e) + " is not iterable"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, "constructor", { value: GeneratorFunctionPrototype, configurable: !0 }), o(GeneratorFunctionPrototype, "constructor", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, "GeneratorFunction"), e.isGeneratorFunction = function (t) { var e = "function" == typeof t && t.constructor; return !!e && (e === GeneratorFunction || "GeneratorFunction" === (e.displayName || e.name)); }, e.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, "GeneratorFunction")), t.prototype = Object.create(g), t; }, e.awrap = function (t) { return { __await: t }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () { return this; }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(wrap(t, r, n, o), i); return e.isGeneratorFunction(r) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, defineIteratorMethods(g), define(g, u, "Generator"), define(g, a, function () { return this; }), define(g, "toString", function () { return "[object Generator]"; }), e.keys = function (t) { var e = Object(t), r = []; for (var n in e) { r.push(n); } return r.reverse(), function next() { for (; r.length;) { var t = r.pop(); if (t in e) { return next.value = t, next.done = !1, next; } } return next.done = !0, next; }; }, e.values = values, Context.prototype = { constructor: Context, reset: function reset(e) { if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = "next", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) { for (var r in this) { "t" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t); } } }, stop: function stop() { this.done = !0; var t = this.tryEntries[0].completion; if ("throw" === t.type) { throw t.arg; } return this.rval; }, dispatchException: function dispatchException(e) { if (this.done) { throw e; } var r = this; function handle(n, o) { return a.type = "throw", a.arg = e, r.next = n, o && (r.method = "next", r.arg = t), !!o; } for (var o = this.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i.completion; if ("root" === i.tryLoc) { return handle("end"); } if (i.tryLoc <= this.prev) { var c = n.call(i, "catchLoc"), u = n.call(i, "finallyLoc"); if (c && u) { if (this.prev < i.catchLoc) { return handle(i.catchLoc, !0); } if (this.prev < i.finallyLoc) { return handle(i.finallyLoc); } } else if (c) { if (this.prev < i.catchLoc) { return handle(i.catchLoc, !0); } } else { if (!u) { throw Error("try statement without catch or finally"); } if (this.prev < i.finallyLoc) { return handle(i.finallyLoc); } } } } }, abrupt: function abrupt(t, e) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var o = this.tryEntries[r]; if (o.tryLoc <= this.prev && n.call(o, "finallyLoc") && this.prev < o.finallyLoc) { var i = o; break; } } i && ("break" === t || "continue" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null); var a = i ? i.completion : {}; return a.type = t, a.arg = e, i ? (this.method = "next", this.next = i.finallyLoc, y) : this.complete(a); }, complete: function complete(t, e) { if ("throw" === t.type) { throw t.arg; } return "break" === t.type || "continue" === t.type ? this.next = t.arg : "return" === t.type ? (this.rval = this.arg = t.arg, this.method = "return", this.next = "end") : "normal" === t.type && e && (this.next = e), y; }, finish: function finish(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.finallyLoc === t) { return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y; } } }, "catch": function _catch(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.tryLoc === t) { var n = r.completion; if ("throw" === n.type) { var o = n.arg; resetTryEntry(r); } return o; } } throw Error("illegal catch attempt"); }, delegateYield: function delegateYield(e, r, n) { return this.delegate = { iterator: values(e), resultName: r, nextLoc: n }, "next" === this.method && (this.arg = t), y; } }, e; } function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); } function _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new LK.Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; } function loadModules() { return _loadModules.apply(this, arguments); } function _loadModules() { _loadModules = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee() { var tween, storage; return _regeneratorRuntime().wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: _context.prev = 1; _context.next = 5; return LK.import("@upit/tween.v1"); case 5: tween = _context.sent; _context.next = 9; return LK.import("@upit/storage.v1", { forgingSkill: 0, growthRate: 0, blueCrystallScore: 0, greenCrystalIngotScore: 0, blueSwords: 0, greenAxes: 0, redCrystalTwoHandedSwords: 0, blueswordsclick: 0, greenAxeClicks: 0, redCrystalTwoHandedSwordClicks: 0, automineblueCrystallClicked: false, autominegreenCrystallClicked: false, autogrowthRateClicked: false, multiclickupgrade: false, theBlacksmithsApprentice: false, automineredCrystallClicked: false, lastgametime: 0, help: 0 }); case 9: storage = _context.sent; console.log("Модули загружены успешно!"); _context.next = 18; break; case 14: _context.prev = 14; _context.t0 = _context["catch"](1); console.error("Ошибка при загрузке модулей:", _context.t0); case 18: case "end": return _context.stop(); } } }, _callee, null, [[1, 14]]); })); return _loadModules.apply(this, arguments); } loadModules(); function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } var helpObj = false; var helpText = false; var substrate = false; var quest = false; function setHelp(idhelp) { if (idhelp < storage.help && helpObj) { helpObj.destroy(); substrate.destroy(); helpText.destroy(); } if (storage.help == idhelp && !quest && typeof helparray[storage.help] != 'undefined') { if (helpObj) { helpObj.destroy(); substrate.destroy(); helpText.destroy(); } helpObj = new Help(); if (helparray && helparray[storage.help]) { helpObj.x = helparray[storage.help].coords[0]; helpObj.y = helparray[storage.help].coords[1]; helpText = new Text2(helparray[storage.help].text, { size: 50, fill: helparray[storage.help].color }); } if (helparray[storage.help].coords[0] < 2048 / 2) { helpText.x = helparray[storage.help].coords[0] + helpObj.width / 2 + 10; } else { helpText.x = helparray[storage.help].coords[0] - helpObj.width / 2 - 10 - helpText.width; } if (helparray[storage.help].coords[1] < 2732 / 2) { helpText.y = helparray[storage.help].coords[1] + helpObj.height / 2 + 10; } else { helpText.y = helparray[storage.help].coords[1] - helpObj.height / 2 - 10; } var questtext = helparray[storage.help].text; if (typeof helparray[storage.help].quest != 'undefined') { questtext = helparray[storage.help].quest; } if (helparray[storage.help]) { quest = new Text2(' QUEST\n' + questtext, { size: 50, fill: helparray[storage.help].color }); } quest.x = 625; quest.y = 100; game.addChild(quest); substrate = game.attachAsset('substrate', { anchorX: 0.5, anchorY: 0.5, alpha: helparray[storage.help].substrate.alfa }); substrate.x = helpText.x + helpText.width / 2; substrate.y = helpText.y + helpText.height / 2; substrate.width = helpText.width; substrate.height = helparray[storage.help].substrate.height; game.addChild(helpObj); var _animateHelp = function animateHelp(helpObj) { tween(helpObj, { scaleX: 0.5, scaleY: 0.5 }, { duration: 1500, easing: tween.easeInOut, onFinish: function onFinish() { tween(helpObj, { scaleX: 1, scaleY: 1 }, { duration: 1500, easing: tween.easeInOut, onFinish: function onFinish() { _animateHelp(helpObj); } }); } }); }; _animateHelp(helpObj); game.addChild(substrate); game.addChild(helpText); // Убираем автоматическое завершение квеста для квеста 11 helpObj.down = function (x, y, obj) { storage.help++; helpObj.destroy(); substrate.destroy(); helpText.destroy(); }; return helpObj; } } function setquest() { if (storage.help > 1 && !quest) { if (helparray && helparray[storage.help]) { var questtext = helparray[storage.help].text; if (typeof helparray[storage.help].quest != 'undefined') { questtext = helparray[storage.help].quest; } } if (helparray[storage.help]) { quest = new Text2(' QUEST\n' + questtext, { size: 50, fill: helparray[storage.help].color }); } quest.x = 625; quest.y = 100; game.addChild(quest); } } var helparray = [{ 'coords': [850, 2732 / 2 + 450], 'text': 'Click on the anvil to improve \nyour Forging skill by 100!', 'color': 'white', 'substrate': { 'alfa': 0.5, 'height': 110 } }, { 'coords': [2048 * 0.75, 2732 * 0.9], 'text': 'Now go to the foundry!', 'color': 'white', 'substrate': { 'alfa': 0.5, 'height': 55 } }, { 'coords': [720, 2732 / 2 + 100], 'text': 'Click on the foundry and raise the \nGrowth rate to 50!\nThen go out to the forge!', 'color': 'white', 'substrate': { 'alfa': 0.5, 'height': 160 } }, { 'coords': [390, 2732 - 300], 'text': 'This is a map you can use to \ntravel the world!', 'color': 'white', 'substrate': { 'alfa': 0.5, 'height': 110 } }, { 'coords': [885, 1220], 'text': 'Go to the crystal mine\n for resources!', 'color': 'white', 'substrate': { 'alfa': 0.5, 'height': 55 } }, { 'coords': [1100, 1000], 'text': 'There are three types of \ncrystals growing in \nthe mine, now we need to \nget 100 blue crystals to forge \nour first sword!', 'color': 'white', 'substrate': { 'alfa': 0.6, 'height': 275 } }, { 'coords': [1030, 1350], 'text': 'Go back to the forge!', 'color': 'white', 'substrate': { 'alfa': 0.5, 'height': 55 } }, { 'coords': [2048 * 0.75, 2732 * 0.9], 'text': "It's time to melt the crystals!", 'color': 'white', 'substrate': { 'alfa': 0.5, 'height': 55 } }, { 'coords': [310, 2732 - 320], 'text': "Click to melt the crystals! \npay attention to the counters on top! \nMelting crystals increases your Growth rate! \nCome back to the forge when you've smelted \n10 blue crystalingots.", 'color': 'white', //'quest': 'go 10 crystal', 'substrate': { 'alfa': 0.5, 'height': 275 } }, { 'coords': [980, 2732 - 300], 'text': "This is your blacksmith's book!", 'color': 'white', 'substrate': { 'alfa': 0.5, 'height': 55 } }, { 'coords': [630, 1050], 'text': 'Follow the recipe and click on \nthe sword 100 clicks to forge it! \nThen exploreother recipes and \nreturn to the map!', 'color': 'white', 'substrate': { 'alfa': 0.5, 'height': 235 } }, { 'coords': [780, 1500], 'text': "Let's go to the city to sell our sword! \nThe main thing is not to get lost on the way!", 'color': 'white', 'substrate': { 'alfa': 0.5, 'height': 110 } }, { 'coords': [1500, 1300], 'text': "Wow, you're already here! \nCome to the store!", 'color': 'white', 'substrate': { 'alfa': 0.5, 'height': 110 } }, { 'coords': [1028, 2732 - 280], 'text': "Click here and you will \nsell all forged weapons! \nConvenient, isn't it!? \nYou'll find something else \ninteresting to wear in the store.", 'color': 'white', 'substrate': { 'alfa': 0.5, 'height': 275 } }, { 'coords': [1024, 1800], 'text': "Improve your skills! Forge \ndifferent weapons! become the most \nfamous blacksmith in these parts, \nand the richest of course!", 'color': 'white', 'substrate': { 'alfa': 0.5, 'height': 220 } }]; var goldScore = storage.goldScore || 0; var goldScoreTxt = new Text2('Gold: ' + goldScore, { size: 50, fill: 0xFFFFFF }); goldScoreTxt.anchor.set(0, 0); goldScoreTxt.y = 0; if (typeof counterText !== 'undefined') { goldScoreTxt.x = counterText.width + 10; // Position to the right of the Forging skill counter } else { goldScoreTxt.x = 550; // Default position if counterText is undefined } LK.gui.topLeft.addChild(goldScoreTxt); var redCrystalIngotScore = storage.redCrystalIngotScore || 0; var redCrystalIngotScoreTxt = new Text2('RedCrystalIngot: ' + redCrystalIngotScore, { size: 50, fill: 0xFFFFFF }); redCrystalIngotScoreTxt.anchor.set(1, 0); redCrystalIngotScoreTxt.y = 100; // Position below the GreenCrystalIngot score LK.gui.topRight.addChild(redCrystalIngotScoreTxt); var mineInsideBackground; var blueCrystallScore = storage.blueCrystallScore || 0; var automineblueCrystallClicked = storage.automineblueCrystallClicked; var autominegreenCrystallClicked = storage.autominegreenCrystallClicked; var autominegreenCrystallClicked = storage.autominegreenCrystallClicked; var automineredCrystallClicked = storage.automineredCrystallClicked; var autogrowthRateClicked = storage.autogrowthRateClicked; var scoreTxt = new Text2('Blue Crystall: ' + blueCrystallScore, { size: 50, fill: 0xFFFFFF }); scoreTxt.anchor.set(0, 0); scoreTxt.y = 100; // Move the score text 100 pixels down LK.gui.topLeft.addChild(scoreTxt); var greenCrystallScore = storage.greenCrystallScore || 0; var greenScoreTxt = new Text2('Green Crystall: ' + greenCrystallScore, { size: 50, fill: 0xFFFFFF }); greenScoreTxt.anchor.set(0, 0); greenScoreTxt.y = 150; // Position below the Blue Crystall score LK.gui.topLeft.addChild(greenScoreTxt); var greenCrystalIngotScore = storage.greenCrystalIngotScore || 0; var greenCrystalIngotScoreTxt = new Text2('GreenCrystalIngot: ' + greenCrystalIngotScore, { size: 50, fill: 0xFFFFFF }); greenCrystalIngotScoreTxt.anchor.set(1, 0); greenCrystalIngotScoreTxt.y = 50; // Position below the BlueCrystalIngot score LK.gui.topRight.addChild(greenCrystalIngotScoreTxt); var blueCristal; // Define blueCristal in the global scope to fix the reference error var greenCristal; // Define greenCristal in the global scope to fix the reference error var redCristal; // Define redCristal in the global scope to fix the reference error var blueCrystalIngotScore = storage.blueCrystalIngotScore || 0; //{1Z.1} var redCrystallScore = storage.redCrystallScore || 0; var blueCrystalIngotScoreTxt = new Text2('BlueCrystalIngot: ' + blueCrystalIngotScore, { size: 50, fill: 0xFFFFFF }); blueCrystalIngotScoreTxt.anchor.set(1, 0); blueCrystalIngotScoreTxt.y = 0; LK.gui.topRight.addChild(blueCrystalIngotScoreTxt); var redScoreTxt = new Text2('Red Crystall: ' + redCrystallScore, { size: 50, fill: 0xFFFFFF }); redScoreTxt.anchor.set(0, 0); redScoreTxt.y = 200; // Position below the Green Crystall score LK.gui.topLeft.addChild(redScoreTxt); var map = game.addChild(LK.getAsset('Map', { anchorX: 0.5, anchorY: 0.5 })); map.x = 400; map.y = 2450; map.visible = false; // Initialize the map as invisible // Make the map interactive map.interactive = true; // Define the 'down' event handler for the map map.down = function (x, y, obj) { setHelp(-1); hammer.destroy(); if (storage.forgingSkill >= 10 && storage.help == 4) { if (quest && typeof quest.destroy === 'function') { quest.destroy(); } quest = false; } // Hide the map asset when transitioning to the map screen LK.getSound('mapaudio').play(); map.visible = false; // Hide the mineInsideBackground if it exists if (mineInsideBackground) { mineInsideBackground.visible = false; mineInsideBackground.destroy(); // Ensure it is completely removed } if (redCristal) { redCristal.visible = false; //{1Z.1} redCristal.destroy(); // Ensure it is completely removed } //{1Z.3} if (blueCristal) { blueCristal.visible = false; //{1X.1} blueCristal.destroy(); // Ensure it is completely removed } //{1X.3} if (greenCristal) { greenCristal.visible = false; //{1Y.1} greenCristal.destroy(); // Ensure it is completely removed } //{1Y.3} var mapScreen = game.addChild(new Container()); // Attach 'mapbackground' asset to the mapScreen var mapBackground = mapScreen.attachAsset('mapbackground', { anchorX: 0.5, //{1h.1} anchorY: 0.5, //{1h.2} interactive: false // Ensure mapbackground does not block cursor interaction }); //{1h.3} // Add 'citymap' asset to the center of the screen var cityMap = mapScreen.attachAsset('citymap', { anchorX: 0.5, anchorY: 0.5, interactive: true // Make the 'citymap' asset interactive }); cityMap.x = -250; cityMap.y = 160; // Define the 'down' event handler for cityMap cityMap.down = function (x, y, obj) { hammer.destroy(); setHelp(-1); // Create a new screen without background var isolatedScreen = game.addChild(new Container()); // Hide the current map screen mapScreen.visible = false; console.log(storage.help); if (storage.help == 12) { quest.destroy(); quest = false; } // Add 'citybackground' asset to the center of the isolatedScreen var cityBackground = isolatedScreen.attachAsset('citybackground', { anchorX: 0.5, anchorY: 0.5 }); cityBackground.x = 0; cityBackground.y = 0; // Add 'map' asset to the isolatedScreen var mapAsset = isolatedScreen.attachAsset('Map', { anchorX: 0.5, anchorY: 0.5, interactive: true // Make the 'map' asset interactive }); mapAsset.x = -650; mapAsset.y = 1100; // Define the 'down' event handler for mapAsset mapAsset.down = function (x, y, obj) { // Transition back to the citymap screen isolatedScreen.visible = false; // Hide the current isolated screen mapScreen.visible = true; // Show the citymap screen cityBackground.visible = false; // Ensure citybackground is hidden mapBackground.visible = true; }; // Add 'shop' asset to the center of the isolatedScreen var shop = isolatedScreen.attachAsset('shop', { anchorX: 0.5, anchorY: 0.5, interactive: true // Make the 'shop' asset interactive }); shop.x = 490; shop.y = -20; setHelp(12); // Define the 'down' event handler for shop shop.down = function (x, y, obj) { hammer.destroy(); LK.getSound('shopin').play(); // Create a new screen without background var shopScreen = game.addChild(new Container()); // Hide the current isolated screen isolatedScreen.visible = false; // Position the shopScreen at the center shopScreen.x = 2048 / 2; shopScreen.y = 2732 / 2; if (storage.help == 13) { if (quest && typeof quest.destroy === 'function') { quest.destroy(); } quest = false; } // Add 'new tools' asset to the center of the shopScreen var newTools = shopScreen.attachAsset('newTools', { anchorX: 0.5, anchorY: 0.5 }); newTools.x = -650; newTools.y = 1100; newTools.interactive = true; // Make the newTools asset interactive newTools.down = function (x, y, obj) { hammer.destroy(); setHelp(-1); // Create a new isolated screen without a background var isolatedScreen = game.addChild(new Container()); // Attach 'newToolsBackground' asset to the isolatedScreen var newToolsBackground = isolatedScreen.attachAsset('newToolsBackground', { anchorX: 0.5, anchorY: 0.5 }); newToolsBackground.x = 0; newToolsBackground.y = 0; if (!storage.theBlacksmithsApprentice) { // Attach 'Theblacksmithsapprentice' asset to the center of the isolatedScreen var theBlacksmithsApprentice = isolatedScreen.attachAsset('Theblacksmithsapprentice', { anchorX: 0.5, //{4C.1} anchorY: 0.5, //{4C.2} interactive: true // Make the Theblacksmithsapprentice interactive }); //{4C.3} theBlacksmithsApprentice.x = 400; theBlacksmithsApprentice.y = 200; theBlacksmithsApprentice.clicked = storage.theBlacksmithsApprentice; // Define the 'down' event handler for theBlacksmithsApprentice theBlacksmithsApprentice.down = function (x, y, obj) { // Increment forgingSkill by 1 every second if (goldScore >= 1500 && !theBlacksmithsApprentice.clicked) { goldScore -= 1500; goldScoreTxt.setText('Gold: ' + goldScore); storage.goldScore = goldScore; theBlacksmithsApprentice.clicked = true; var intervalId = LK.setInterval(function () { storage.forgingSkill += 1; counterText.setText('Forging skill: ' + storage.forgingSkill); }, 1000); // Store the intervalId in the theBlacksmithsApprentice object for potential future use theBlacksmithsApprentice.intervalId = intervalId; storage.theBlacksmithsApprentice = true; theBlacksmithsApprentice.visible = false; apprenticeText.visible = false; apprenticeCostText.visible = false; } }; // Add text "The blacksmith's apprentice +1" below the Theblacksmithsapprentice asset var apprenticeText = new Text2("The blacksmith's \napprentice +1", { size: 50, fill: 0x030303 }); apprenticeText.anchor.set(0.5, 0.5); apprenticeText.x = theBlacksmithsApprentice.x; apprenticeText.y = theBlacksmithsApprentice.y + 170; // Position below the Theblacksmithsapprentice asset isolatedScreen.addChild(apprenticeText); // Add text "1500G" below the 'The blacksmith's apprentice +1' text var apprenticeCostText = new Text2('1500G', { size: 50, fill: 0x030303 }); apprenticeCostText.anchor.set(0.5, 0.5); apprenticeCostText.x = apprenticeText.x; apprenticeCostText.y = apprenticeText.y + 70; // Position below the 'The blacksmith's apprentice +1' text isolatedScreen.addChild(apprenticeCostText); } // Attach 'newToolsout' asset to the center of the isolatedScreen var newToolsOut = isolatedScreen.attachAsset('newToolsout', { anchorX: 0.5, anchorY: 0.5 }); newToolsOut.x = 0; newToolsOut.y = 1100; newToolsOut.interactive = true; // Make the newToolsOut asset interactive//{4F.1} if (!storage.automineblueCrystallClicked) { // Attach 'automineblueCrystall' asset to the center of the isolatedScreen var automineblueCrystall = isolatedScreen.attachAsset('automineblueCrystall', { anchorX: 0.5, //{4F.2} anchorY: 0.5, //{4F.3} interactive: true // Make the automineblueCrystall interactive }); //{4F.4} automineblueCrystall.x = -400; automineblueCrystall.y = -600; automineblueCrystall.clicked = storage.automineblueCrystallClicked; // Define the 'down' event handler for automineblueCrystall automineblueCrystall.down = function (x, y, obj) { // Increment blueCrystallScore by 1 every second if (goldScore >= 500 && !automineblueCrystall.clicked) { automineblueCrystall.clicked = true; goldScore -= 500; goldScoreTxt.setText('Gold: ' + goldScore); storage.goldScore = goldScore; var intervalId = LK.setInterval(function () { blueCrystallScore += 1; LK.setScore(blueCrystallScore); storage.blueCrystallScore = blueCrystallScore; scoreTxt.setText('Blue Crystall: ' + LK.getScore()); }, 1000); // Store the intervalId in the automineblueCrystall object for potential future use automineblueCrystall.intervalId = intervalId; storage.automineblueCrystallClicked = true; // Persist the click state automineblueCrystall.visible = false; mineBlueCrystallText.visible = false; mineBlueCrystallCostText.visible = false; } }; // Add text "Mine Blue Crystall +1" below the automineblueCrystall asset var mineBlueCrystallText = new Text2('Mine Blue Crystall +1', { size: 50, fill: 0x030303 }); mineBlueCrystallText.anchor.set(0.5, 0.5); mineBlueCrystallText.x = automineblueCrystall.x; mineBlueCrystallText.y = automineblueCrystall.y + 150; // Position below the automineblueCrystall asset isolatedScreen.addChild(mineBlueCrystallText); // Add text "500G" below the 'Mine Blue Crystall +1' text var mineBlueCrystallCostText = new Text2('500G', { size: 50, //{58.1} fill: 0x030303 //{58.2} }); //{58.3} mineBlueCrystallCostText.anchor.set(0.5, 0.5); mineBlueCrystallCostText.x = mineBlueCrystallText.x; mineBlueCrystallCostText.y = mineBlueCrystallText.y + 50; // Position below the 'Mine Blue Crystall +1' text isolatedScreen.addChild(mineBlueCrystallCostText); } if (!storage.autominegreenCrystallClicked) { // Attach 'autominegreenCrystall' asset to the center of the isolatedScreen var autominegreenCrystall = isolatedScreen.attachAsset('autominegreenCrystall', { anchorX: 0.5, anchorY: 0.5, interactive: true // Make the autominegreenCrystall interactive }); autominegreenCrystall.x = -400; autominegreenCrystall.y = -200; // Define the 'down' event handler for autominegreenCrystall autominegreenCrystall.clicked = storage.autominegreenCrystallClicked; autominegreenCrystall.down = function (x, y, obj) { // Increment greenCrystallScore by 1 every second if (goldScore >= 1000 && !autominegreenCrystall.clicked) { autominegreenCrystall.clicked = true; goldScore -= 1000; goldScoreTxt.setText('Gold: ' + goldScore); storage.goldScore = goldScore; var intervalId = LK.setInterval(function () { greenCrystallScore += 1; storage.greenCrystallScore = greenCrystallScore; greenScoreTxt.setText('Green Crystall: ' + greenCrystallScore); }, 1000); // Store the intervalId in the autominegreenCrystall object for potential future use autominegreenCrystall.intervalId = intervalId; storage.autominegreenCrystallClicked = true; // Persist the click state autominegreenCrystall.visible = false; mineGreenCrystallText.visible = false; mineGreenCrystallCostText.visible = false; } }; // Add text "Mine Green Crystall +1" below the autominegreenCrystall asset var mineGreenCrystallText = new Text2('Mine Green Crystall +1', { size: 50, fill: 0x030303 }); mineGreenCrystallText.anchor.set(0.5, 0.5); mineGreenCrystallText.x = autominegreenCrystall.x; mineGreenCrystallText.y = autominegreenCrystall.y + 150; // Lower the position below the autominegreenCrystall asset isolatedScreen.addChild(mineGreenCrystallText); // Add text "1000G" below the 'Mine Green Crystall +1' text var mineGreenCrystallCostText = new Text2('1000G', { size: 50, //{5c.1} fill: 0x030303 //{5c.2} }); //{5c.3} mineGreenCrystallCostText.anchor.set(0.5, 0.5); mineGreenCrystallCostText.x = mineGreenCrystallText.x; mineGreenCrystallCostText.y = mineGreenCrystallText.y + 50; // Position below the 'Mine Green Crystall +1' text isolatedScreen.addChild(mineGreenCrystallCostText); } if (!storage.automineredCrystallClicked) { // Attach 'automineredCrystall' asset to the center of the isolatedScreen var automineredCrystall = isolatedScreen.attachAsset('automineredCrystall', { anchorX: 0.5, anchorY: 0.5, interactive: true // Make the automineredCrystall interactive }); automineredCrystall.x = -400; automineredCrystall.y = 200; // Define the 'down' event handler for automineredCrystall automineredCrystall.down = function (x, y, obj) { // Increment redCrystallScore by 1 every second if (goldScore >= 2000 && !automineredCrystall.clicked) { automineredCrystall.clicked = true; goldScore -= 2000; goldScoreTxt.setText('Gold: ' + goldScore); storage.goldScore = goldScore; var intervalId = LK.setInterval(function () { redCrystallScore += 1; storage.redCrystallScore = redCrystallScore; redScoreTxt.setText('Red Crystall: ' + redCrystallScore); }, 1000); // Store the intervalId in the automineredCrystall object for potential future use automineredCrystall.intervalId = intervalId; storage.automineredCrystallClicked = true; // Persist the click state automineredCrystall.visible = false; mineRedCrystallText.visible = false; mineRedCrystallCostText.visible = false; } }; // Add text "Mine Red Crystall +1" below the automineredCrystall asset var mineRedCrystallText = new Text2('Mine Red Crystall +1', { size: 50, fill: 0x030303 }); mineRedCrystallText.anchor.set(0.5, 0.5); mineRedCrystallText.x = automineredCrystall.x; mineRedCrystallText.y = automineredCrystall.y + 140; // Position below the automineredCrystall asset isolatedScreen.addChild(mineRedCrystallText); // Add text "2000G" below the 'Mine Red Crystall +1' text var mineRedCrystallCostText = new Text2('2000G', { size: 50, //{55.1} fill: 0x030303 //{55.2} }); //{55.3} mineRedCrystallCostText.anchor.set(0.5, 0.5); mineRedCrystallCostText.x = mineRedCrystallText.x; mineRedCrystallCostText.y = mineRedCrystallText.y + 50; // Position below the 'Mine Red Crystall +1' text isolatedScreen.addChild(mineRedCrystallCostText); } if (!storage.multiclickupgrade) { // Attach 'multiclickupgrade' asset to the center of the isolatedScreen var multiclickupgrade = isolatedScreen.attachAsset('multiclickupgrade', { anchorX: 0.5, anchorY: 0.5, interactive: true // Make the multiclickupgrade interactive }); multiclickupgrade.x = 400; multiclickupgrade.y = -200; // Define the 'down' event handler for multiclickupgrade multiclickupgrade.down = function (x, y, obj) { // Deduct 700 gold when clicked if (goldScore >= 700 && !storage.multiclickupgrade) { goldScore -= 700; goldScoreTxt.setText('Gold: ' + goldScore); storage.goldScore = goldScore; storage.multiclickupgrade = true; multiclickupgrade.visible = false; increasedChanceText.visible = false; increasedChanceCostText.visible = false; } }; // Add text "Increased chance of successful forging +5%" below the multiclickupgrade asset var increasedChanceText = new Text2('Increased chance of \nsuccessful forging +5%', { size: 50, fill: 0x030303 }); increasedChanceText.anchor.set(0.5, 0.5); increasedChanceText.x = multiclickupgrade.x; increasedChanceText.y = multiclickupgrade.y + 170; // Position below the multiclickupgrade asset isolatedScreen.addChild(increasedChanceText); // Add text "700G" below the 'Increased chance of successful forging +5%' text var increasedChanceCostText = new Text2('700G', { size: 50, //{4Z.1} fill: 0x030303 //{4Z.2} }); //{4Z.3} increasedChanceCostText.anchor.set(0.5, 0.5); increasedChanceCostText.x = increasedChanceText.x; increasedChanceCostText.y = increasedChanceText.y + 70; // Position below the 'Increased chance of successful forging +5%' text isolatedScreen.addChild(increasedChanceCostText); } if (!storage.autogrowthRateClicked) { // Attach 'autogrowthRate' asset to the center of the isolatedScreen var autogrowthRate = isolatedScreen.attachAsset('autogrowthRate', { anchorX: 0.5, anchorY: 0.5, interactive: true // Make the autogrowthRate interactive }); autogrowthRate.x = 400; autogrowthRate.y = -600; autogrowthRate.clicked = storage.autogrowthRateClicked; // Define the 'down' event handler for autogrowthRate autogrowthRate.down = function (x, y, obj) { // Increment growthRateCounter by 1 every second if (goldScore >= 2000 && !autogrowthRate.clicked) { autogrowthRate.clicked = true; goldScore -= 2000; goldScoreTxt.setText('Gold: ' + goldScore); storage.goldScore = goldScore; var intervalId = LK.setInterval(function () { growthRateCounter += 1; growthRateText.setText('Growth rate: ' + growthRateCounter); storage.growthRate = growthRateCounter; }, 1000); // Store the intervalId in the autogrowthRate object for potential future use autogrowthRate.intervalId = intervalId; storage.autogrowthRateClicked = true; // Persist the click state autogrowthRate.visible = false; automaticMeltingText.visible = false; automaticMeltingCostText.visible = false; } }; // Add text "Automatic melting +1" below the autogrowthRate asset var automaticMeltingText = new Text2('Automatic melting +1', { size: 50, fill: 0x030303 }); automaticMeltingText.anchor.set(0.5, 0.5); automaticMeltingText.x = autogrowthRate.x; automaticMeltingText.y = autogrowthRate.y + 150; // Position below the autogrowthRate asset isolatedScreen.addChild(automaticMeltingText); // Add text "2000G" below the 'Automatic melting +1' text var automaticMeltingCostText = new Text2('2000G', { size: 50, fill: 0x030303 }); automaticMeltingCostText.anchor.set(0.5, 0.5); automaticMeltingCostText.x = automaticMeltingText.x; automaticMeltingCostText.y = automaticMeltingText.y + 50; // Position below the 'Automatic melting +1' text isolatedScreen.addChild(automaticMeltingCostText); } newToolsOut.down = function (x, y, obj) { LK.getSound('booksaudio').play(); // Transition to the newTools screen isolatedScreen.visible = false; // Hide the current isolated screen shopScreen.visible = true; // Show the newTools screen }; // Hide the current shop screen shopScreen.visible = false; // Position the isolatedScreen at the center isolatedScreen.x = 2048 / 2; isolatedScreen.y = 2732 / 2; hammer = game.addChild(LK.getAsset('hammer', { anchorX: 0.5, anchorY: 0.5, scaleX: -1 })); }; // Add 'shopout' asset to the shopScreen var shopBackground = shopScreen.attachAsset('shopbackground', { anchorX: 0.5, anchorY: 0.5 }); shopBackground.x = 0; shopBackground.y = 0; // Add 'new buildings' asset to the center of the shopScreen var newBuildings = shopScreen.attachAsset('sellweapons', { anchorX: 0.5, anchorY: 0.5, interactive: true // Make the 'sellweapons' asset interactive }); // Define the 'down' event handler for sellweapons newBuildings.down = function (x, y, obj) { if (storage.help == 14) { if (quest && typeof quest.destroy === 'function') { quest.destroy(); } quest = false; } // Сохраняем начальные значения для проверки условия var initialBlueSwords = storage.blueSwords; var initialGreenAxes = storage.greenAxes; var initialRedTwoHandedSwords = storage.redCrystalTwoHandedSwords; // Увеличиваем золото и обнуляем запасы оружия goldScore += storage.blueSwords * 50; storage.blueSwords = 0; goldScore += storage.greenAxes * 150; storage.greenAxes = 0; goldScore += storage.redCrystalTwoHandedSwords * 600; storage.redCrystalTwoHandedSwords = 0; goldScoreTxt.setText('Gold: ' + goldScore); storage.goldScore = goldScore; // Проверяем наличие оружия до обнуления и запускаем звук с анимацией if (initialBlueSwords > 0 || initialGreenAxes > 0 || initialRedTwoHandedSwords > 0) { LK.getSound('gold').play(); // Создаём 5 монет, летящих вверх for (var i = 0; i < 5; i++) { var goldAsset = game.addChild(LK.getAsset('goldstore', { anchorX: 0.5, anchorY: 0.5 })); goldAsset.x = shopScreen.x + newBuildings.x + (Math.random() * 50 - 25); // Случайное смещение по X goldAsset.y = shopScreen.y + newBuildings.y; (function (goldAsset) { var speed = 3 + Math.random() * 3; // Случайная скорость от 3 до 6 goldAsset.update = function () { goldAsset.y -= speed; }; LK.setTimeout(function () { goldAsset.destroy(); }, 1000); })(goldAsset); } } }; newBuildings.x = 0; newBuildings.y = 1100; // Add 'shopout' asset to the shopScreen var shopOut = shopScreen.attachAsset('shopout', { anchorX: 0.5, anchorY: 0.5, interactive: true // Make the 'shopout' asset interactive }); shopOut.x = 650; shopOut.y = 1100; // Define the 'down' event handler for shopOut shopOut.down = function (x, y, obj) { setHelp(14); LK.getSound('doors').play(); shopScreen.visible = false; // Hide the current shop screen mapBackground.visible = false; // Ensure the mapbackground asset is hidden mapScreen.visible = true; // Show the citymap screen isolatedScreen.visible = true; // Ensure the isolated screen is visible }; setHelp(13); hammer = game.addChild(LK.getAsset('hammer', { anchorX: 0.5, anchorY: 0.5, scaleX: -1 })); }; // Position the isolatedScreen at the center isolatedScreen.x = 2048 / 2; isolatedScreen.y = 2732 / 2; hammer = game.addChild(LK.getAsset('hammer', { anchorX: 0.5, anchorY: 0.5, scaleX: -1 })); }; // Attach 'anvilmap' asset to the mapScreen on the top layer var anvilMap = mapScreen.attachAsset('anvilmap', { anchorX: 0.5, anchorY: 0.5, interactive: true }); // Attach 'mine' asset to the mapScreen on the top layer var mine = mapScreen.attachAsset('mine', { anchorX: 0.5, anchorY: 0.5, interactive: true }); mine.x -= 150; // Move the mine asset 150 pixels to the left mine.y -= 150; // Move the mine asset 150 pixels higher // Make mine interactive and define the 'down' event handler mine.down = function (x, y, obj) { if (storage.help == 5) { if (quest && typeof quest.destroy === 'function') { quest.destroy(); } quest = false; } hammer.destroy(); setHelp(-1); // Create a new screen for the mine var mineScreen = game.addChild(new Container()); // Make the map visible after transitioning to the mine screen map.visible = true; // Hide the current map screen mapScreen.visible = false; // Disable the active background background.visible = false; // Attach 'mineinsidebackground' asset to the mineScreen on the bottom layer mineInsideBackground = mineScreen.attachAsset('mineinsidebackground', { anchorX: 0.5, anchorY: 0.5, interactive: false, zIndex: -1 // Ensure it is on the bottom layer }); setHelp(5); // Create and add a new instance of the RedCristal class redCristal = mineScreen.addChild(new RedCristal()); // Position the redCristal asset redCristal.x -= 510; // Move 100 pixels to the left redCristal.y += 490; // Move 100 pixels lower // Create and add a new instance of the GreenCristal class greenCristal = mineScreen.addChild(new GreenCristal()); // Position the greenCristal asset greenCristal.x -= -510; // Move 100 pixels to the left greenCristal.y += 10; // Move 100 pixels lower // Create and add a new instance of the BlueCristal class blueCristal = mineScreen.addChild(new BlueCristal()); // Position the blueCristal asset blueCristal.x += 490; // Move 100 pixels to the right blueCristal.y += -60; // Move 100 pixels lower // Position the blueCristal asset blueCristal.x -= 410; // Move 100 pixels to the left blueCristal.y -= 310; // Move 100 pixels lower // Position the mineScreen at the center mineScreen.x = 2048 / 2; //{1E.1} mineScreen.y = 2732 / 2; //{1E.2} hammer = game.addChild(LK.getAsset('hammer', { anchorX: 0.5, anchorY: 0.5, scaleX: -1 })); }; // Make anvilMap interactive and define the 'down' event handler anvilMap.down = function (x, y, obj) { if (storage.help == 7) { if (quest && typeof quest.destroy === 'function') { quest.destroy(); } quest = false; } setHelp(-1); // Show the Anvil screen gameScreen.visible = true; // Make the map visible after transitioning to the anvil map map.visible = true; // Attach 'gameScreenBackground' asset to the 'gameScreen' object gameScreenBackground = gameScreen.attachAsset('gameScreenBackground', { anchorX: 0.5, anchorY: 0.5 }); setHelp(0); setHelp(1); setHelp(7); setHelp(10); // Attach 'recipes' asset to the 'gameScreenBackground' object var recipes = gameScreenBackground.attachAsset('recipes', { anchorX: 0.5, anchorY: 0.5 }); // Center the 'recipes' asset on the gameScreenBackground recipes.x = gameScreenBackground.width / 2 - 1050; //{3u.1} recipes.y = gameScreenBackground.height / 2 + 150; //{3v.1} // Hide the mineinsidebackground when exiting the mine screen if (mineInsideBackground) { mineInsideBackground.visible = false; mineInsideBackground.destroy(); // Ensure it is completely removed } if (mineInsideBackground) { mineInsideBackground.visible = false; mineInsideBackground.destroy(); // Ensure it is completely removed } if (blueCristal) { blueCristal.visible = false; //{1X.1} blueCristal.destroy(); // Ensure it is completely removed } //{1X.3} if (greenCristal) { greenCristal.visible = false; //{1Y.1} greenCristal.destroy(); // Ensure it is completely removed } //{1Y.3} if (redCristal) { redCristal.visible = false; //{1Z.1} redCristal.destroy(); // Ensure it is completely removed } //{1Z.3} // Hide the map screen mapScreen.visible = false; // Show the counter display counterText.visible = true; // Show the Growth rate counter when transitioning to anvilmap growthRateText.visible = true; }; setHelp(-1); // Hide the current game screen gameScreen.visible = false; // Disable the active background background.visible = false; // Attach a new background or asset to the mapScreen if needed // Example: mapScreen.attachAsset('newBackground', { anchorX: 0.5, anchorY: 0.5 }); // Position the mapScreen at the center mapScreen.x = 2048 / 2; mapScreen.y = 2732 / 2; setHelp(3); setHelp(4); setHelp(6); if (storage.help == 11 && quest) { quest = false; } setHelp(11); hammer = game.addChild(LK.getAsset('hammer', { anchorX: 0.5, anchorY: 0.5, scaleX: -1 })); }; var growthRateText; var growthRateCounter = storage.growthRate; // Initialize growth rate counter from storage var background = game.addChild(new Container()); background.width = 2048; background.height = 2732; background.x = 2048 / 2; background.y = 2732 / 2; var backgroundGraphics = background.attachAsset('background', { anchorX: 0.5, anchorY: 0.5 }); var gameScreen = game.addChild(new Container()); //{1h.1} var newGame = game.addChild(new Container()); newGame.x = 2650 / 2 + 100; //{3d.1} newGame.y = 2680 * 4.2 / 5; //{3d.1} // Attach 'title' asset to the start screen var title = game.addChild(LK.getAsset('title', { anchorX: 0.5, anchorY: 0.5 })); title.x = 2048 / 2; title.y = 3200 / 5; // Attach 'newGameText' asset to the 'New Game' object var newGameText = newGame.attachAsset('newGameText', { anchorX: 0.5, anchorY: 0.5, stroke: 0xFFFFFF, // White color strokeThickness: 5 // 5px thickness }); // Attach 'continueText' asset to the game object var continueText = game.addChild(LK.getAsset('continueText', { anchorX: 0.5, anchorY: 0.5 })); continueText.x = newGame.x - newGame.width - 500; // Increase the distance between newGame and continueText continueText.y = newGame.y; // Align vertically with newGame continueText.interactive = true; continueText.down = function (x, y, obj) { startgame(); }; var greenAxeClicks = storage.greenAxeClicks; var redCrystalTwoHandedSwordClicks = storage.redCrystalTwoHandedSwordClicks; function startgame() { setquest(); title.destroy(); hammer.destroy(); // Create a new game screen gameScreen = game.addChild(new Container()); gameScreen.x = 2048 / 2; gameScreen.y = 2732 / 2; // Attach 'gameScreenBackground' asset to the 'gameScreen' object gameScreenBackground = gameScreen.attachAsset('gameScreenBackground', { anchorX: 0.5, anchorY: 0.5 }); // Attach 'recipes' asset to the 'gameScreenBackground' object var recipes = gameScreenBackground.attachAsset('recipes', { anchorX: 0.5, anchorY: 0.5, interactive: true // Make the recipes asset interactive }); // Remove 'continueText' asset when transitioning to new game // Define the 'down' event handler for recipes recipes.down = function (x, y, obj) { setHelp(-1); hammer.destroy(); LK.getSound('booksaudio').play(); // Create a new screen for the recipes var recipesScreen = game.addChild(new RecipesScreen()); map.visible = false; // Hide the map asset after transitioning to the recipes screen if (storage.help == 10) { if (quest && typeof quest.destroy === 'function') { quest.destroy(); } quest = false; } // Add 'recipesbackground' asset to the center of the screen var recipesBackground = recipesScreen.attachAsset('recipesbackground', { anchorX: 0.5, anchorY: 0.5 }); recipesBackground.x = 2048 / 2; recipesBackground.y = 2932 / 2; // Add 'bluecrystalswordrecipe' asset to the center of the screen var bluecrystalswordrecipe = recipesScreen.attachAsset('bluecrystalswordrecipe', { anchorX: 0.5, anchorY: 0.5 }); bluecrystalswordrecipe.x = 1248 / 2; bluecrystalswordrecipe.y = 2132 / 2; bluecrystalswordrecipe.down = function () { if (storage.forgingSkill >= 10 && storage.blueCrystalIngotScore >= 10) { storage.blueswordsclick += 1; } if (storage.blueswordsclick >= 10) { storage.blueswordsclick = 0; storage.blueSwords += 1; blueSwordsText.setText(storage.blueSwords.toString()); storage.forgingSkill += 100; counterText.setText('Forging skill: ' + storage.forgingSkill); if (storage.blueCrystalIngotScore >= 10) { storage.blueCrystalIngotScore -= 10; blueCrystalIngotScore = storage.blueCrystalIngotScore; blueCrystalIngotScoreTxt.setText('BlueCrystalIngot: ' + blueCrystalIngotScore); } // Проверка квеста 11: срабатывает после создания меча if (storage.help == 11 && storage.blueSwords >= 1) { if (quest && typeof quest.destroy === 'function') { quest.destroy(); } quest = false; } } blueCrystalSwordClicks.setText('(current ' + storage.blueswordsclick + ')'); }; setHelp(10); // Add 'Swords in stock' text asset to the center of the screen var swordsInStockText = new Text2('Swords in stock', { size: 50, fill: 0x000000 // Black color }); swordsInStockText.anchor.set(0.5, 0.5); swordsInStockText.x = 1248 / 2; swordsInStockText.y = 2732 / 2 + 400; var axeInStockText = new Text2('Axe in stock', { size: 50, fill: 0x000000 // Black color }); axeInStockText.anchor.set(0.5, 0.5); axeInStockText.x = 2848 / 2; axeInStockText.y = 2732 / 2 + 400; // Align with 'Swords in stock' text recipesScreen.addChild(axeInStockText); recipesScreen.addChild(swordsInStockText); // Display the number of blue swords in stock var blueSwordsText = new Text2(storage.blueSwords.toString(), { size: 50, fill: 0x000000 // Black color }); blueSwordsText.anchor.set(0.5, 0.5); blueSwordsText.x = 1248 / 2; blueSwordsText.y = swordsInStockText.y + 80; // Position below the 'Swords in stock' text recipesScreen.addChild(blueSwordsText); // Add 'Axe of Green Crystals recipe' asset to the center of the screen var axeOfGreenCrystalsRecipe = recipesScreen.attachAsset('axeOfGreenCrystalsRecipe', { anchorX: 0.5, anchorY: 0.5 }); axeOfGreenCrystalsRecipe.x = 2848 / 2; axeOfGreenCrystalsRecipe.y = 2132 / 2; axeOfGreenCrystalsRecipe.down = function () { if (storage.forgingSkill >= 4000 && storage.greenCrystalIngotScore >= 15) { greenAxeClicks += 1; } if (greenAxeClicks >= 15) { greenAxeClicks = 0; storage.greenAxes += 1; // Увеличиваем количество зелёных топоров в хранилище greenAxesText.setText(storage.greenAxes.toString()); storage.forgingSkill += 150; // Добавляем 150 к навыку ковки counterText.setText('Forging skill: ' + storage.forgingSkill); // Обновляем отображение навыка ковки if (storage.greenCrystalIngotScore >= 15) { storage.greenCrystalIngotScore -= 15; // Вычитаем 15 из greenCrystalIngotScore greenCrystalIngotScore = storage.greenCrystalIngotScore; // Сохраняем новое значение в хранилище greenCrystalIngotScoreTxt.setText('GreenCrystalIngot: ' + greenCrystalIngotScore); // Обновляем текстовое отображение } } greenAxeClicksText.setText('(current ' + greenAxeClicks + ')'); storage.greenAxeClicks = greenAxeClicks; }; // Add 'Axe in stock' text asset to the center of the screen var axeInStockText = new Text2('Axe in stock', { size: 50, fill: 0x000000 // Black color }); axeInStockText.anchor.set(0.5, 0.5); axeInStockText.x = 2848 / 2; recipesScreen.addChild(axeInStockText); // Display the number of green axes in stock var greenAxesText = new Text2(storage.greenAxes.toString(), { size: 50, fill: 0x000000 // Black color }); greenAxesText.anchor.set(0.5, 0.5); greenAxesText.x = 2848 / 2; greenAxesText.y = swordsInStockText.y + 80; // Position below the 'Swords in stock' text recipesScreen.addChild(greenAxesText); // Add 'Green Axe clicks' text asset to the center of the screen var greenAxeClicksText = new Text2('(current ' + greenAxeClicks + ')', { size: 50, fill: 0x000000, alpha: 0.5 // Set transparency }); greenAxeClicksText.anchor.set(0.5, 0.5); greenAxeClicksText.x = 2848 / 2 - 150; greenAxeClicksText.y = 2732 / 2 + 330; recipesScreen.addChild(greenAxeClicksText); // Add 'Blue crystal sword description' text asset to the center of the screen var blueCrystalSwordDescription = new Text2('"Blue Crystal Sword"\n Forging Skill 100.\n 10 blue crystal ingots +\n 10 clicks on the recipe', { size: 50, fill: 0x000000, alpha: 0.5 // Set transparency }); blueCrystalSwordDescription.anchor.set(0.5, 0.5); blueCrystalSwordDescription.x = 1248 / 2; blueCrystalSwordDescription.y = 2732 / 2 + 200; recipesScreen.addChild(blueCrystalSwordDescription); var blueCrystalSwordClicks = new Text2('(current ' + storage.blueswordsclick + ')', { size: 50, fill: 0x000000, alpha: 0.5 // Set transparency }); blueCrystalSwordClicks.anchor.set(0.5, 0.5); blueCrystalSwordClicks.x = 1248 / 2 - 150; blueCrystalSwordClicks.y = 2732 / 2 + 330; recipesScreen.addChild(blueCrystalSwordClicks); // Add 'axeOfGreenCrystals description' text asset to the center of the screen var axeOfGreenCrystalsDescription = new Text2('"Axe of Green Crystals"\n Forging Skill 4k.\n 15 green crystal ingots +\n 15 clicks on the recipe', { size: 50, fill: 0x000000, alpha: 0.5 // Set transparency }); axeOfGreenCrystalsDescription.anchor.set(0.5, 0.5); axeOfGreenCrystalsDescription.x = 2890 / 2; axeOfGreenCrystalsDescription.y = 2732 / 2 + 200; recipesScreen.addChild(axeOfGreenCrystalsDescription); // Add 'recipesnext' asset to the center of the screen var recipesNext = recipesScreen.attachAsset('recipesnext', { anchorX: 0.5, anchorY: 0.5 //{4F.1} }); //{4G.1} recipesNext.x = 3248 / 2; recipesNext.y = 5000 / 2; // Make the 'recipesnext' asset interactive recipesNext.interactive = true; hammer = game.addChild(LK.getAsset('hammer', { anchorX: 0.5, anchorY: 0.5, scaleX: -1 })); // Define the 'down' event handler for recipesNext recipesNext.down = function (x, y, obj) { // Create a new screen for the next section var nextScreen = game.addChild(new Container()); LK.getSound('paper').play(); // Remove the current background recipesScreen.visible = false; // Add 'recipesnextbackgr1' asset to the center of the screen var recipesNextBackgr1 = nextScreen.attachAsset('recipesnextbackgr1', { anchorX: 0.5, anchorY: 0.5 }); recipesNextBackgr1.x = 2048 / 2; recipesNextBackgr1.y = 2732 / 2; // Remove the existing hammer hammer.destroy(); // Add 'recipesprev' asset to the center of the screen var recipesPrev = nextScreen.attachAsset('recipesprev', { anchorX: 0.5, anchorY: 0.5, interactive: true // Make the 'recipesprev' asset interactive }); recipesPrev.x = 888 / 2; recipesPrev.y = 5000 / 2; // Define the 'down' event handler for recipesPrev recipesPrev.down = function (x, y, obj) { LK.getSound('paper').play(); // Transition back to the recipes screen nextScreen.visible = false; // Hide the current screen recipesScreen.visible = true; // Show the recipes screen }; // Add 'blueingotrecipe' asset to the center of the screen var blueingotrecipe = nextScreen.attachAsset('blueingotrecipe', { anchorX: 0.5, anchorY: 0.5 }); blueingotrecipe.x = 1450; blueingotrecipe.y = 750; // Add text under the 'blueingotrecipe' asset var blueIngotRecipeText = new Text2('"BlueCrystalIngot"\n Growth rate 100.\n 10 Blue Crystal', { size: 50, fill: 0x000000 // Black color }); blueIngotRecipeText.anchor.set(0.5, 0.5); blueIngotRecipeText.x = blueingotrecipe.x; blueIngotRecipeText.y = blueingotrecipe.y + 150; // Position below the 'blueingotrecipe' asset nextScreen.addChild(blueIngotRecipeText); // Add 'greeningotrecipe' asset to the center of the screen var greeningotrecipe = nextScreen.attachAsset('greeningotrecipe', { anchorX: 0.5, anchorY: 0.5 }); greeningotrecipe.x = 1450; greeningotrecipe.y = 1150; // Add text under the 'greeningotrecipe' asset var greeningotrecipeText = new Text2('"Greeningotrecipe"\n Growth rate 2000.\n 10 Green Crystal', { size: 50, fill: 0x000000 // Black color }); greeningotrecipeText.anchor.set(0.5, 0.5); greeningotrecipeText.x = greeningotrecipe.x; greeningotrecipeText.y = greeningotrecipe.y + 160; // Position below the 'greeningotrecipe' asset nextScreen.addChild(greeningotrecipeText); // Add 'redingotrecipe' asset to the center of the screen var redingotrecipe = nextScreen.attachAsset('redingotrecipe', { anchorX: 0.5, anchorY: 0.5 }); redingotrecipe.x = 1450; redingotrecipe.y = 1500; // Add text under the 'redingotrecipe' asset var redingotrecipeText = new Text2('"Redingotrecipe"\n Growth rate 7000.\n 10 Green Crystal', { size: 50, fill: 0x000000 // Black color }); redingotrecipeText.anchor.set(0.5, 0.5); redingotrecipeText.x = redingotrecipe.x; redingotrecipeText.y = redingotrecipe.y + 150; // Position below the 'redingotrecipe' asset nextScreen.addChild(redingotrecipeText); // Add 'redcrystaltwo-handedswordrecipe' asset to the center of the screen var redCrystalTwoHandedSwordRecipe = nextScreen.attachAsset('redcrystaltwo-handedswordrecipe', { anchorX: 0.5, anchorY: 0.5 }); redCrystalTwoHandedSwordRecipe.x = 1248 / 2; redCrystalTwoHandedSwordRecipe.y = 2132 / 2; redCrystalTwoHandedSwordRecipe.down = function () { if (storage.forgingSkill >= 10000 && storage.redCrystalIngotScore >= 75) { redCrystalTwoHandedSwordClicks += 1; } if (redCrystalTwoHandedSwordClicks >= 20) { redCrystalTwoHandedSwordClicks = 0; storage.redCrystalTwoHandedSwords += 1; // Увеличение количества мечей в storage redCrystalTwoHandedSwordsText.setText(storage.redCrystalTwoHandedSwords.toString()); storage.forgingSkill += 200; // Добавление опыта кузнечного дела counterText.setText('Forging skill: ' + storage.forgingSkill); storage.redCrystalIngotScore -= 75; // Вычитаем 75 инготов из storage redCrystalIngotScore = storage.redCrystalIngotScore; // Обновляем локальную переменную redCrystalIngotScoreTxt.setText('RedCrystalIngot: ' + redCrystalIngotScore); // Обновляем отображение } redCrystalTwoHandedSwordClicksText.setText('(current ' + redCrystalTwoHandedSwordClicks + ')'); storage.redCrystalTwoHandedSwordClicks = redCrystalTwoHandedSwordClicks; }; // Add 'Red Crystal Two-Handed Sword in stock' text asset to the center of the screen var redCrystalTwoHandedSwordsText = new Text2(storage.redCrystalTwoHandedSwords.toString(), { size: 50, fill: 0x000000 // Black color }); redCrystalTwoHandedSwordsText.anchor.set(0.5, 0.5); redCrystalTwoHandedSwordsText.x = 1248 / 2; var redCrystalTwoHandedSwordDescription = new Text2('"Redcrystaltwo-\n handedswordrecipe"\n Forging Skill 10k.\n 75 red crystal ingots +\n 20 clicks on the anvil', { size: 50, fill: 0x000000 // Black color }); redCrystalTwoHandedSwordDescription.anchor.set(0.5, 0.5); redCrystalTwoHandedSwordDescription.x = 1248 / 2; redCrystalTwoHandedSwordDescription.y = 2732 / 2 + 100; nextScreen.addChild(redCrystalTwoHandedSwordDescription); // Add 'Two-hand Swords in stock' text asset to the center of the screen var twoHandSwordsInStockText = new Text2('Two-hand Swords in stock', { size: 50, fill: 0x000000 // Black color }); twoHandSwordsInStockText.anchor.set(0.5, 0.5); twoHandSwordsInStockText.x = 1248 / 2; twoHandSwordsInStockText.y = redCrystalTwoHandedSwordDescription.y + 250; // Position below the description nextScreen.addChild(twoHandSwordsInStockText); redCrystalTwoHandedSwordsText.y = redCrystalTwoHandedSwordDescription.y + 300; // Position further below the description nextScreen.addChild(redCrystalTwoHandedSwordsText); // Add a new text box with black text under the 'redcrystaltwo-handedswordrecipe' asset var redCrystalTwoHandedSwordClicksText = new Text2('(current ' + redCrystalTwoHandedSwordClicks + ')', { size: 50, fill: 0x000000, alpha: 0.5 }); redCrystalTwoHandedSwordClicksText.anchor.set(0.5, 0.5); redCrystalTwoHandedSwordClicksText.x = 1248 / 2 - 135; redCrystalTwoHandedSwordClicksText.y = 2732 / 2 + 260; nextScreen.addChild(redCrystalTwoHandedSwordClicksText); hammer = game.addChild(LK.getAsset('hammer', { anchorX: 0.5, anchorY: 0.5, scaleX: -1 })); }; // Attach 'recipesout' asset to the 'RecipesScreen' object var recipesOutGraphics = recipesScreen.attachAsset('recipesout', { anchorX: 0.5, anchorY: 0.5 }); // Center the 'recipesout' asset on the screen recipesOutGraphics.x = 2048 / 2; recipesOutGraphics.y = 2732 / 2 + 1100; // Make the 'recipesout' asset interactive recipesOutGraphics.interactive = true; LK.getSound('paper').play(); // Define the 'down' event handler for recipesOutGraphics recipesOutGraphics.down = function (x, y, obj) { // Hide the 'recipesout' asset recipesOutGraphics.visible = false; // Transition to the 'gameScreen' gameScreen.visible = true; // Make the map visible after transitioning to the recipesout screen map.visible = true; // Hide the current recipes screen recipesScreen.visible = false; setHelp(0); setHelp(1); setHelp(3); setHelp(7); }; // Hide the current game screen gameScreen.visible = false; }; // Center the 'recipes' asset on the gameScreenBackground recipes.x = gameScreenBackground.width / 2 - 1050; //{3u.1} recipes.y = gameScreenBackground.height / 2 + 150; //{3v.1} // Make the map visible when 'New Game' is clicked map.visible = true; // Hide the main menu newGame.visible = false; continueText.visible = false; // Disable the background background.visible = false; // Create a new instance of the Anvil class var anvil = gameScreen.addChild(new Anvil()); // Initialize the anvil click counter from storage anvil.clickCounter = storage.forgingSkill; counterText.setText('Forging skill: ' + anvil.clickCounter); // Position 'The anvil' at the location of the anvil on the gameScreenBackground anvil.x = gameScreenBackground.x - 100; // Adjust x-coordinate based on the anvil's position on the background anvil.y = gameScreenBackground.y + 500; // Add a new object 'Magic Nursery' var magicNursery = gameScreen.addChild(new Door()); // Position 'Magic Nursery' to the left and up magicNursery.x = 2048 / 4; magicNursery.y = 2732 / 2.5; setHelp(0); setHelp(1); setHelp(3); setHelp(7); setHelp(9); hammer = game.addChild(LK.getAsset('hammer', { anchorX: 0.5, anchorY: 0.5, scaleX: -1 })); } // Make the 'New Game' object clickable newGame.interactive = true; newGame.down = function (x, y, obj) { if (newgameclearInterval.length > 0) { for (var i = 0; i < newgameclearInterval.length; i++) { LK.clearInterval(newgameclearInterval[i]); } } storage.automineblueCrystallClicked = false; storage.autominegreenCrystallClicked = false; storage.automineredCrystallClicked = false; storage.autogrowthRateClicked = false; storage.theBlacksmithsApprentice = false; storage.multiclickupgrade = false; storage.help = 0; // Reset all saved data storage.forgingSkill = 0; storage.growthRate = 0; storage.blueCrystalIngotScore = 0; storage.blueCrystallScore = 0; storage.greenCrystalIngotScore = 0; storage.redCrystallScore = 0; storage.redCrystalIngotScore = 0; storage.greenCrystallScore = 0; storage.greenCrystalIngotScore = 0; storage.blueSwords = 0; storage.goldScore = 0; storage.blueswordsclick = 0; storage.greenAxeClicks = 0; storage.redCrystalTwoHandedSwordClicks = 0; // Reset current variables redCrystalIngotScore = 0; blueCrystallScore = 0; greenCrystallScore = 0; greenCrystalIngotScore = 0; blueCrystalIngotScore = 0; redCrystallScore = 0; growthRateCounter = 0; goldScore = 0; growthRateText.setText('Growth rate: ' + storage.growthRate); counterText.setText('Forging skill: ' + storage.forgingSkill); scoreTxt.setText('Blue Crystall: ' + blueCrystallScore); greenScoreTxt.setText('Green Crystall: ' + greenCrystallScore); redScoreTxt.setText('Red Crystall: ' + redCrystallScore); blueCrystalIngotScoreTxt.setText('BlueCrystalIngot: ' + storage.blueCrystalIngotScore); greenCrystalIngotScoreTxt.setText('GreenCrystalIngot: ' + storage.greenCrystalIngotScore); redCrystalIngotScoreTxt.setText('RedCrystalIngot: ' + storage.redCrystallScore); goldScoreTxt.setText('Gold: ' + goldScore); startgame(); }; // Create a new text object to display the click counter var counterText = new Text2('Forging skill: ' + storage.forgingSkill, { size: 50, fill: 0xFFFFFF }); // Position the text object at the top right corner of the screen counterText.anchor.set(0, 0); LK.gui.topLeft.addChild(counterText); counterText.y = 0; counterText.x = 0; growthRateText = new Text2('Growth rate: ' + growthRateCounter, { size: 50, fill: 0xFFFFFF }); growthRateText.anchor.set(0, 0); LK.gui.topLeft.addChild(growthRateText); growthRateText.y = counterText.height - 6; // Move the growth rate text 2 pixels higher growthRateText.x = 0; // Initialize hammer asset var hammer; hammer = game.addChild(LK.getAsset('hammer', { anchorX: 0.5, anchorY: 0.5, scaleX: -1 })); // Function to make the hammer follow the mouse/touch position function updateHammerPosition(x, y) { if (hammer) { hammer.x = x; hammer.y = y; } } var newgameclearInterval = []; if (automineblueCrystallClicked) { var intervalId = LK.setInterval(function () { blueCrystallScore += 1; LK.setScore(blueCrystallScore); storage.blueCrystallScore = blueCrystallScore; scoreTxt.setText('Blue Crystall: ' + LK.getScore()); }, 1000); newgameclearInterval.push(intervalId); } if (autominegreenCrystallClicked) { var intervalId = LK.setInterval(function () { greenCrystallScore += 1; storage.greenCrystallScore = greenCrystallScore; greenScoreTxt.setText('Green Crystall: ' + greenCrystallScore); }, 1000); newgameclearInterval.push(intervalId); } if (automineredCrystallClicked) { var intervalId = LK.setInterval(function () { redCrystallScore += 1; storage.redCrystallScore = redCrystallScore; redScoreTxt.setText('Red Crystall: ' + redCrystallScore); }, 1000); newgameclearInterval.push(intervalId); } if (autogrowthRateClicked) { var intervalId = LK.setInterval(function () { growthRateCounter += 1; growthRateText.setText('Growth rate: ' + growthRateCounter); storage.growthRate = growthRateCounter; }, 1000); newgameclearInterval.push(intervalId); } if (storage.theBlacksmithsApprentice) { var intervalId = LK.setInterval(function () { storage.forgingSkill += 1; counterText.setText('Forging skill: ' + storage.forgingSkill); }, 1000); newgameclearInterval.push(intervalId); } var seconds = Math.floor(Date.now() / 1000); seconds = seconds - storage.lastgametime; if (seconds * 60 * 5 > 18000) { seconds = 18000; } if (seconds > 0) { if (storage.automineblueCrystallClicked) { blueCrystallScore += seconds; storage.blueCrystallScore += seconds; } if (storage.autominegreenCrystallClicked) { greenCrystallScore += seconds; storage.greenCrystallScore += seconds; } if (storage.automineredCrystallClicked) { redCrystallScore += seconds; storage.redCrystallScore += seconds; } if (storage.autogrowthRateClicked) { growthRateCounter += seconds; storage.growthRate += seconds; } if (storage.theBlacksmithsApprentice) { storage.forgingSkill += seconds; } } var intervalId = LK.setInterval(function () { storage.lastgametime = Math.floor(Date.now() / 1000); }, 1000); // Make the cursor follow the mouse/touch position game.move = function (x, y, obj) { updateHammerPosition(x, y); }; // Animate cursor rotation on click game.down = function (x, y, obj) { LK.getSound('hammer').play(); tween(hammer, { rotation: -Math.PI / 2 }, { duration: 125, easing: tween.easeInOut, onFinish: function onFinish() { // Create stars around the hammer for 0.25 seconds for (var i = 0; i < 5; i++) { var star = game.addChild(LK.getAsset('star', { anchorX: 0.5, anchorY: 0.5 })); star.x = hammer.x - hammer.width / 2 + Math.random() * 100 - 25; star.y = hammer.y + hammer.height / 2 + Math.random() * 100 - 25; (function (star) { // Make the star move upwards star.update = function () { star.y -= 5; // Move the star upwards by 5 pixels per frame if (star.x < hammer.x) { star.x += 2; // Move the star slightly to the right if on the left side of the hammer } else { star.x -= 2; // Move the star slightly to the left if on the right side of the hammer } }; LK.setTimeout(function () { star.destroy(); }, 250); })(star); } tween(hammer, { rotation: 0 }, { duration: 125, easing: tween.easeInOut }); } }); };
===================================================================
--- original.js
+++ change.js
@@ -1,30 +1,5 @@
/****
-* Plugins
-****/
-var tween = LK.import("@upit/tween.v1");
-var storage = LK.import("@upit/storage.v1", {
- forgingSkill: 0,
- growthRate: 0,
- blueCrystallScore: 0,
- greenCrystalIngotScore: 0,
- blueSwords: 0,
- greenAxes: 0,
- redCrystalTwoHandedSwords: 0,
- blueswordsclick: 0,
- greenAxeClicks: 0,
- redCrystalTwoHandedSwordClicks: 0,
- automineblueCrystallClicked: false,
- autominegreenCrystallClicked: false,
- autogrowthRateClicked: false,
- multiclickupgrade: false,
- theBlacksmithsApprentice: false,
- automineredCrystallClicked: false,
- lastgametime: 0,
- help: 0
-});
-
-/****
* Classes
****/
// Create a new class for the anvil object
var Anvil = Container.expand(function () {
@@ -320,9 +295,9 @@
interactive: true // Make the greenCrystalIngot interactive
});
// Define the 'down' event handler for greenCrystalIngot
self.down = function (x, y, obj) {
- if (storage.growthRate >= 3000 && greenCrystallScore >= 15) {
+ if (storage.growthRate >= 2000 && greenCrystallScore >= 15) {
storage.growthRate += 10; // Increment growth rate by 10
growthRateText.setText('Growth rate: ' + storage.growthRate); // Update the growth rate display
// Increment the GreenCrystalIngot score by 1
greenCrystalIngotScore += 1;
@@ -417,8 +392,453 @@
/****
* Game Code
****/
//{0.1}
+function _typeof2(o) {
+ "@babel/helpers - typeof";
+ return _typeof2 = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) {
+ return typeof o;
+ } : function (o) {
+ return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o;
+ }, _typeof2(o);
+}
+function _regeneratorRuntime() {
+ "use strict";
+ /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */
+ _regeneratorRuntime = function _regeneratorRuntime() {
+ return e;
+ };
+ var t,
+ e = {},
+ r = Object.prototype,
+ n = r.hasOwnProperty,
+ o = Object.defineProperty || function (t, e, r) {
+ t[e] = r.value;
+ },
+ i = "function" == typeof Symbol ? Symbol : {},
+ a = i.iterator || "@@iterator",
+ c = i.asyncIterator || "@@asyncIterator",
+ u = i.toStringTag || "@@toStringTag";
+ function define(t, e, r) {
+ return Object.defineProperty(t, e, {
+ value: r,
+ enumerable: !0,
+ configurable: !0,
+ writable: !0
+ }), t[e];
+ }
+ try {
+ define({}, "");
+ } catch (t) {
+ define = function define(t, e, r) {
+ return t[e] = r;
+ };
+ }
+ function wrap(t, e, r, n) {
+ var i = e && e.prototype instanceof Generator ? e : Generator,
+ a = Object.create(i.prototype),
+ c = new Context(n || []);
+ return o(a, "_invoke", {
+ value: makeInvokeMethod(t, r, c)
+ }), a;
+ }
+ function tryCatch(t, e, r) {
+ try {
+ return {
+ type: "normal",
+ arg: t.call(e, r)
+ };
+ } catch (t) {
+ return {
+ type: "throw",
+ arg: t
+ };
+ }
+ }
+ e.wrap = wrap;
+ var h = "suspendedStart",
+ l = "suspendedYield",
+ f = "executing",
+ s = "completed",
+ y = {};
+ function Generator() {}
+ function GeneratorFunction() {}
+ function GeneratorFunctionPrototype() {}
+ var p = {};
+ define(p, a, function () {
+ return this;
+ });
+ var d = Object.getPrototypeOf,
+ v = d && d(d(values([])));
+ v && v !== r && n.call(v, a) && (p = v);
+ var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p);
+ function defineIteratorMethods(t) {
+ ["next", "throw", "return"].forEach(function (e) {
+ define(t, e, function (t) {
+ return this._invoke(e, t);
+ });
+ });
+ }
+ function AsyncIterator(t, e) {
+ function invoke(r, o, i, a) {
+ var c = tryCatch(t[r], t, o);
+ if ("throw" !== c.type) {
+ var u = c.arg,
+ h = u.value;
+ return h && "object" == _typeof2(h) && n.call(h, "__await") ? e.resolve(h.__await).then(function (t) {
+ invoke("next", t, i, a);
+ }, function (t) {
+ invoke("throw", t, i, a);
+ }) : e.resolve(h).then(function (t) {
+ u.value = t, i(u);
+ }, function (t) {
+ return invoke("throw", t, i, a);
+ });
+ }
+ a(c.arg);
+ }
+ var r;
+ o(this, "_invoke", {
+ value: function value(t, n) {
+ function callInvokeWithMethodAndArg() {
+ return new e(function (e, r) {
+ invoke(t, n, e, r);
+ });
+ }
+ return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg();
+ }
+ });
+ }
+ function makeInvokeMethod(e, r, n) {
+ var o = h;
+ return function (i, a) {
+ if (o === f) {
+ throw Error("Generator is already running");
+ }
+ if (o === s) {
+ if ("throw" === i) {
+ throw a;
+ }
+ return {
+ value: t,
+ done: !0
+ };
+ }
+ for (n.method = i, n.arg = a;;) {
+ var c = n.delegate;
+ if (c) {
+ var u = maybeInvokeDelegate(c, n);
+ if (u) {
+ if (u === y) {
+ continue;
+ }
+ return u;
+ }
+ }
+ if ("next" === n.method) {
+ n.sent = n._sent = n.arg;
+ } else if ("throw" === n.method) {
+ if (o === h) {
+ throw o = s, n.arg;
+ }
+ n.dispatchException(n.arg);
+ } else {
+ "return" === n.method && n.abrupt("return", n.arg);
+ }
+ o = f;
+ var p = tryCatch(e, r, n);
+ if ("normal" === p.type) {
+ if (o = n.done ? s : l, p.arg === y) {
+ continue;
+ }
+ return {
+ value: p.arg,
+ done: n.done
+ };
+ }
+ "throw" === p.type && (o = s, n.method = "throw", n.arg = p.arg);
+ }
+ };
+ }
+ function maybeInvokeDelegate(e, r) {
+ var n = r.method,
+ o = e.iterator[n];
+ if (o === t) {
+ return r.delegate = null, "throw" === n && e.iterator["return"] && (r.method = "return", r.arg = t, maybeInvokeDelegate(e, r), "throw" === r.method) || "return" !== n && (r.method = "throw", r.arg = new TypeError("The iterator does not provide a '" + n + "' method")), y;
+ }
+ var i = tryCatch(o, e.iterator, r.arg);
+ if ("throw" === i.type) {
+ return r.method = "throw", r.arg = i.arg, r.delegate = null, y;
+ }
+ var a = i.arg;
+ return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, "return" !== r.method && (r.method = "next", r.arg = t), r.delegate = null, y) : a : (r.method = "throw", r.arg = new TypeError("iterator result is not an object"), r.delegate = null, y);
+ }
+ function pushTryEntry(t) {
+ var e = {
+ tryLoc: t[0]
+ };
+ 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e);
+ }
+ function resetTryEntry(t) {
+ var e = t.completion || {};
+ e.type = "normal", delete e.arg, t.completion = e;
+ }
+ function Context(t) {
+ this.tryEntries = [{
+ tryLoc: "root"
+ }], t.forEach(pushTryEntry, this), this.reset(!0);
+ }
+ function values(e) {
+ if (e || "" === e) {
+ var r = e[a];
+ if (r) {
+ return r.call(e);
+ }
+ if ("function" == typeof e.next) {
+ return e;
+ }
+ if (!isNaN(e.length)) {
+ var o = -1,
+ i = function next() {
+ for (; ++o < e.length;) {
+ if (n.call(e, o)) {
+ return next.value = e[o], next.done = !1, next;
+ }
+ }
+ return next.value = t, next.done = !0, next;
+ };
+ return i.next = i;
+ }
+ }
+ throw new TypeError(_typeof2(e) + " is not iterable");
+ }
+ return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, "constructor", {
+ value: GeneratorFunctionPrototype,
+ configurable: !0
+ }), o(GeneratorFunctionPrototype, "constructor", {
+ value: GeneratorFunction,
+ configurable: !0
+ }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, "GeneratorFunction"), e.isGeneratorFunction = function (t) {
+ var e = "function" == typeof t && t.constructor;
+ return !!e && (e === GeneratorFunction || "GeneratorFunction" === (e.displayName || e.name));
+ }, e.mark = function (t) {
+ return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, "GeneratorFunction")), t.prototype = Object.create(g), t;
+ }, e.awrap = function (t) {
+ return {
+ __await: t
+ };
+ }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () {
+ return this;
+ }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) {
+ void 0 === i && (i = Promise);
+ var a = new AsyncIterator(wrap(t, r, n, o), i);
+ return e.isGeneratorFunction(r) ? a : a.next().then(function (t) {
+ return t.done ? t.value : a.next();
+ });
+ }, defineIteratorMethods(g), define(g, u, "Generator"), define(g, a, function () {
+ return this;
+ }), define(g, "toString", function () {
+ return "[object Generator]";
+ }), e.keys = function (t) {
+ var e = Object(t),
+ r = [];
+ for (var n in e) {
+ r.push(n);
+ }
+ return r.reverse(), function next() {
+ for (; r.length;) {
+ var t = r.pop();
+ if (t in e) {
+ return next.value = t, next.done = !1, next;
+ }
+ }
+ return next.done = !0, next;
+ };
+ }, e.values = values, Context.prototype = {
+ constructor: Context,
+ reset: function reset(e) {
+ if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = "next", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) {
+ for (var r in this) {
+ "t" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t);
+ }
+ }
+ },
+ stop: function stop() {
+ this.done = !0;
+ var t = this.tryEntries[0].completion;
+ if ("throw" === t.type) {
+ throw t.arg;
+ }
+ return this.rval;
+ },
+ dispatchException: function dispatchException(e) {
+ if (this.done) {
+ throw e;
+ }
+ var r = this;
+ function handle(n, o) {
+ return a.type = "throw", a.arg = e, r.next = n, o && (r.method = "next", r.arg = t), !!o;
+ }
+ for (var o = this.tryEntries.length - 1; o >= 0; --o) {
+ var i = this.tryEntries[o],
+ a = i.completion;
+ if ("root" === i.tryLoc) {
+ return handle("end");
+ }
+ if (i.tryLoc <= this.prev) {
+ var c = n.call(i, "catchLoc"),
+ u = n.call(i, "finallyLoc");
+ if (c && u) {
+ if (this.prev < i.catchLoc) {
+ return handle(i.catchLoc, !0);
+ }
+ if (this.prev < i.finallyLoc) {
+ return handle(i.finallyLoc);
+ }
+ } else if (c) {
+ if (this.prev < i.catchLoc) {
+ return handle(i.catchLoc, !0);
+ }
+ } else {
+ if (!u) {
+ throw Error("try statement without catch or finally");
+ }
+ if (this.prev < i.finallyLoc) {
+ return handle(i.finallyLoc);
+ }
+ }
+ }
+ }
+ },
+ abrupt: function abrupt(t, e) {
+ for (var r = this.tryEntries.length - 1; r >= 0; --r) {
+ var o = this.tryEntries[r];
+ if (o.tryLoc <= this.prev && n.call(o, "finallyLoc") && this.prev < o.finallyLoc) {
+ var i = o;
+ break;
+ }
+ }
+ i && ("break" === t || "continue" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null);
+ var a = i ? i.completion : {};
+ return a.type = t, a.arg = e, i ? (this.method = "next", this.next = i.finallyLoc, y) : this.complete(a);
+ },
+ complete: function complete(t, e) {
+ if ("throw" === t.type) {
+ throw t.arg;
+ }
+ return "break" === t.type || "continue" === t.type ? this.next = t.arg : "return" === t.type ? (this.rval = this.arg = t.arg, this.method = "return", this.next = "end") : "normal" === t.type && e && (this.next = e), y;
+ },
+ finish: function finish(t) {
+ for (var e = this.tryEntries.length - 1; e >= 0; --e) {
+ var r = this.tryEntries[e];
+ if (r.finallyLoc === t) {
+ return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y;
+ }
+ }
+ },
+ "catch": function _catch(t) {
+ for (var e = this.tryEntries.length - 1; e >= 0; --e) {
+ var r = this.tryEntries[e];
+ if (r.tryLoc === t) {
+ var n = r.completion;
+ if ("throw" === n.type) {
+ var o = n.arg;
+ resetTryEntry(r);
+ }
+ return o;
+ }
+ }
+ throw Error("illegal catch attempt");
+ },
+ delegateYield: function delegateYield(e, r, n) {
+ return this.delegate = {
+ iterator: values(e),
+ resultName: r,
+ nextLoc: n
+ }, "next" === this.method && (this.arg = t), y;
+ }
+ }, e;
+}
+function asyncGeneratorStep(n, t, e, r, o, a, c) {
+ try {
+ var i = n[a](c),
+ u = i.value;
+ } catch (n) {
+ return void e(n);
+ }
+ i.done ? t(u) : Promise.resolve(u).then(r, o);
+}
+function _asyncToGenerator(n) {
+ return function () {
+ var t = this,
+ e = arguments;
+ return new LK.Promise(function (r, o) {
+ var a = n.apply(t, e);
+ function _next(n) {
+ asyncGeneratorStep(a, r, o, _next, _throw, "next", n);
+ }
+ function _throw(n) {
+ asyncGeneratorStep(a, r, o, _next, _throw, "throw", n);
+ }
+ _next(void 0);
+ });
+ };
+}
+function loadModules() {
+ return _loadModules.apply(this, arguments);
+}
+function _loadModules() {
+ _loadModules = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
+ var tween, storage;
+ return _regeneratorRuntime().wrap(function _callee$(_context) {
+ while (1) {
+ switch (_context.prev = _context.next) {
+ case 0:
+ _context.prev = 1;
+ _context.next = 5;
+ return LK.import("@upit/tween.v1");
+ case 5:
+ tween = _context.sent;
+ _context.next = 9;
+ return LK.import("@upit/storage.v1", {
+ forgingSkill: 0,
+ growthRate: 0,
+ blueCrystallScore: 0,
+ greenCrystalIngotScore: 0,
+ blueSwords: 0,
+ greenAxes: 0,
+ redCrystalTwoHandedSwords: 0,
+ blueswordsclick: 0,
+ greenAxeClicks: 0,
+ redCrystalTwoHandedSwordClicks: 0,
+ automineblueCrystallClicked: false,
+ autominegreenCrystallClicked: false,
+ autogrowthRateClicked: false,
+ multiclickupgrade: false,
+ theBlacksmithsApprentice: false,
+ automineredCrystallClicked: false,
+ lastgametime: 0,
+ help: 0
+ });
+ case 9:
+ storage = _context.sent;
+ console.log("Модули загружены успешно!");
+ _context.next = 18;
+ break;
+ case 14:
+ _context.prev = 14;
+ _context.t0 = _context["catch"](1);
+ console.error("Ошибка при загрузке модулей:", _context.t0);
+ case 18:
+ case "end":
+ return _context.stop();
+ }
+ }
+ }, _callee, null, [[1, 14]]);
+ }));
+ return _loadModules.apply(this, arguments);
+}
+loadModules();
function _typeof(o) {
"@babel/helpers - typeof";
return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) {
return typeof o;
@@ -558,9 +978,9 @@
'text': 'Click on the foundry and raise the \nGrowth rate to 50!\nThen go out to the forge!',
'color': 'white',
'substrate': {
'alfa': 0.5,
- 'height': 145
+ 'height': 160
}
}, {
'coords': [390, 2732 - 300],
'text': 'This is a map you can use to \ntravel the world!',
@@ -619,13 +1039,13 @@
'height': 55
}
}, {
'coords': [630, 1050],
- 'text': 'Follow the recipe and\n click on the sword \nto forge it! Then explore other recipes and \nreturn to the map!',
+ 'text': 'Follow the recipe and click on \nthe sword 100 clicks to forge it! \nThen exploreother recipes and \nreturn to the map!',
'color': 'white',
'substrate': {
'alfa': 0.5,
- 'height': 110
+ 'height': 235
}
}, {
'coords': [780, 1500],
'text': "Let's go to the city to sell our sword! \nThe main thing is not to get lost on the way!",
@@ -635,13 +1055,13 @@
'height': 110
}
}, {
'coords': [1500, 1300],
- 'text': "Wow, you're already here! Come to the store!",
+ 'text': "Wow, you're already here! \nCome to the store!",
'color': 'white',
'substrate': {
'alfa': 0.5,
- 'height': 55
+ 'height': 110
}
}, {
'coords': [1028, 2732 - 280],
'text': "Click here and you will \nsell all forged weapons! \nConvenient, isn't it!? \nYou'll find something else \ninteresting to wear in the store.",
@@ -1521,12 +1941,12 @@
});
bluecrystalswordrecipe.x = 1248 / 2;
bluecrystalswordrecipe.y = 2132 / 2;
bluecrystalswordrecipe.down = function () {
- if (storage.forgingSkill >= 100 && storage.blueCrystalIngotScore >= 10) {
+ if (storage.forgingSkill >= 10 && storage.blueCrystalIngotScore >= 10) {
storage.blueswordsclick += 1;
}
- if (storage.blueswordsclick >= 100) {
+ if (storage.blueswordsclick >= 10) {
storage.blueswordsclick = 0;
storage.blueSwords += 1;
blueSwordsText.setText(storage.blueSwords.toString());
storage.forgingSkill += 100;
@@ -1583,9 +2003,9 @@
axeOfGreenCrystalsRecipe.down = function () {
if (storage.forgingSkill >= 4000 && storage.greenCrystalIngotScore >= 15) {
greenAxeClicks += 1;
}
- if (greenAxeClicks >= 150) {
+ if (greenAxeClicks >= 15) {
greenAxeClicks = 0;
storage.greenAxes += 1; // Увеличиваем количество зелёных топоров в хранилище
greenAxesText.setText(storage.greenAxes.toString());
storage.forgingSkill += 150; // Добавляем 150 к навыку ковки
@@ -1626,9 +2046,9 @@
greenAxeClicksText.x = 2848 / 2 - 150;
greenAxeClicksText.y = 2732 / 2 + 330;
recipesScreen.addChild(greenAxeClicksText);
// Add 'Blue crystal sword description' text asset to the center of the screen
- var blueCrystalSwordDescription = new Text2('"Blue Crystal Sword"\n Forging Skill 100.\n 10 blue crystal ingots +\n 100 clicks on the recipe', {
+ var blueCrystalSwordDescription = new Text2('"Blue Crystal Sword"\n Forging Skill 100.\n 10 blue crystal ingots +\n 10 clicks on the recipe', {
size: 50,
fill: 0x000000,
alpha: 0.5 // Set transparency
});
@@ -1645,9 +2065,9 @@
blueCrystalSwordClicks.x = 1248 / 2 - 150;
blueCrystalSwordClicks.y = 2732 / 2 + 330;
recipesScreen.addChild(blueCrystalSwordClicks);
// Add 'axeOfGreenCrystals description' text asset to the center of the screen
- var axeOfGreenCrystalsDescription = new Text2('"Axe of Green Crystals"\n Forging Skill 4k.\n 15 green crystal ingots +\n 150 clicks on the recipe', {
+ var axeOfGreenCrystalsDescription = new Text2('"Axe of Green Crystals"\n Forging Skill 4k.\n 15 green crystal ingots +\n 15 clicks on the recipe', {
size: 50,
fill: 0x000000,
alpha: 0.5 // Set transparency
});
@@ -1758,13 +2178,13 @@
redCrystalTwoHandedSwordRecipe.down = function () {
if (storage.forgingSkill >= 10000 && storage.redCrystalIngotScore >= 75) {
redCrystalTwoHandedSwordClicks += 1;
}
- if (redCrystalTwoHandedSwordClicks >= 200) {
+ if (redCrystalTwoHandedSwordClicks >= 20) {
redCrystalTwoHandedSwordClicks = 0;
storage.redCrystalTwoHandedSwords += 1; // Увеличение количества мечей в storage
redCrystalTwoHandedSwordsText.setText(storage.redCrystalTwoHandedSwords.toString());
- storage.forgingSkill += 210; // Добавление опыта кузнечного дела
+ storage.forgingSkill += 200; // Добавление опыта кузнечного дела
counterText.setText('Forging skill: ' + storage.forgingSkill);
storage.redCrystalIngotScore -= 75; // Вычитаем 75 инготов из storage
redCrystalIngotScore = storage.redCrystalIngotScore; // Обновляем локальную переменную
redCrystalIngotScoreTxt.setText('RedCrystalIngot: ' + redCrystalIngotScore); // Обновляем отображение
@@ -1778,9 +2198,9 @@
fill: 0x000000 // Black color
});
redCrystalTwoHandedSwordsText.anchor.set(0.5, 0.5);
redCrystalTwoHandedSwordsText.x = 1248 / 2;
- var redCrystalTwoHandedSwordDescription = new Text2('"Redcrystaltwo-\n handedswordrecipe"\n Forging Skill 10k.\n 75 red crystal ingots +\n 200 clicks on the anvil', {
+ var redCrystalTwoHandedSwordDescription = new Text2('"Redcrystaltwo-\n handedswordrecipe"\n Forging Skill 10k.\n 75 red crystal ingots +\n 20 clicks on the anvil', {
size: 50,
fill: 0x000000 // Black color
});
redCrystalTwoHandedSwordDescription.anchor.set(0.5, 0.5);