您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Greasy Fork is available in English.
custom_edited library to use
当前为
此脚本不应直接安装。它是供其他脚本使用的外部库,要使用该库请加入元指令 // @require https://update.greasyfork.icu/scripts/18325/115899/custom_edited.js
doLog = function() { }; log("Logging killed.", "initialize"); animatedCoins.init = function(b, a, e, g) { if (isWeb()) { var c, d, f, h, k = { images: ["/images/animations/coin_flip.png"], animations: { all: [0, 32] }, frames: { regX: 0, height: 60, count: 33, regY: 0, width: 61 } }, m = { images: ["/images/animations/coin_sparkle.png"], animations: { all: { frames: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14] } }, frames: [ [0, 0, 128, 128, 0, 0, 0], [128, 0, 128, 128, 0, 0, 0], [256, 0, 128, 128, 0, 0, 0], [384, 0, 128, 128, 0, 0, 0], [512, 0, 128, 128, 0, 0, 0], [640, 0, 128, 128, 0, 0, 0], [768, 0, 128, 128, 0, 0, 0], [896, 0, 128, 128, 0, 0, 0], [0, 128, 128, 128, 0, 0, 0], [128, 128, 128, 128, 0, 0, 0], [256, 128, 128, 128, 0, 0, 0], [384, 128, 128, 128, 0, 0, 0], [512, 128, 128, 128, 0, 0, 0], [640, 128, 128, 128, 0, 0, 0], [768, 128, 128, 128, 0, 0, 0] ] }, l, n, p = false; //EXTENDER :: Modification, seriously? // bugfix: b.offset is undefined (offset from button to silver visually) if (null === b || void 0 === b || b.length == 0) { return; } else if (null === a || void 0 === a) { return; } else { if (null === e || void 0 === e) e = [ 0, 0 ]; if (null === g || void 0 === g) g = [0, 0]; d = $("<canvas>").attr({ id: "animatedCoins", "class": "coinCanvasAnimation", width: "130", height: "120" }).prependTo($("body")); c = d[0]; h = $("<canvas>").attr({ id: "animatedCoinsSparkle", "class": "coinCanvasAnimation", width: "130", height: "120" }).prependTo($("body")); f = h[0]; c = new createjs.Stage(c); f = new createjs.Stage(f); null === b.offset() ? (h.remove(), d.remove(), console.warn("animatedCoins: startingElement.offset() is null. Exiting script.")) : null === a.offset() ? (h.remove(), d.remove(), console.warn("animatedCoins: endingElement.offset() is null. Exiting script.")) : (d.offset({ left: b.offset().left + e[0], top: b.offset().top + e[1] }), h.offset({ left: b.offset().left + e[0], top: b.offset().top + e[1] }), e = new createjs.SpriteSheet(k), m = new createjs.SpriteSheet(m), l = new createjs.Sprite(e), l.x = 30, l.y = 25, n = new createjs.Sprite(m), l.on("animationend", function(c, f) { c.visible = false; doLog("animation end"); null === b.offset() ? (h.remove(), d.remove(), console.error("animatedCoins: startingElement.offset() is null")) : null === a.offset() ? (h.remove(), d.remove(), console.error("animatedCoins: endingElement.offset() is null")) : (h.offset({ left: a.offset().left + g[0], top: a.offset().top + g[1] }), n.visible = true, n.gotoAndPlay("all"), l.stop(), p = true); }), n.on("animationend", function(a, b) { n.visible = false; p && (n.stop(), d.fadeOut(500, function(a) { d.remove(); }), h.remove()); }), l.gotoAndPlay("all"), n.gotoAndPlay("all"), f.addChild(n), c.addChild(l), createjs.Ticker.setFPS(30), createjs.Ticker.addEventListener("tick", c), createjs.Ticker.addEventListener("tick", f), $(d).animate({ left: a.offset().left + g[0], top: a.offset().top + g[1] }, 1E3)); } } }; log("Animated coins fixed.", "initialize"); doInstantSpeedUp = function doInstantSpeedUp(c, a, callback) { var b = buildingById(c), d = getCurrentSpeedUpType(b.producing_archetype_id, b.recipe_symbol); // EXTENDER :: Modification if (instantSpeedCost(b.build_remaining, d) > 0) { console.log('EXTENDER :: The instant speed up costs money. Exiting...'); return false; } if (false == hasGold(instantSpeedCost(b.build_remaining, d), function() { doInstantSpeedUp(c, true, callback); }, a) && true != a) return false; playSound("coins"); return speedBuild(-1, c, callback); }; log("Instant speed up returns if gold is required.", "initialize"); doFinishProduction = function doFinishProduction(b, callback) { var a = buildingByItemId(b), c = itemFromId(a.producing_archetype_id); userContext.lastFinish = a.symbol; doLog("doFinishProduction: building_id=" + b + " symbol=" + a.symbol + " producing=" + c.symbol); "Upgrade" !== c.slot && (analytics.track("Production Finish", { building_symbol: a.symbol, item_symbol: c.symbol, item_category: c.slot }), analytics.wizardtrack("Production Finish", { building_symbol: a.symbol, item_symbol: c.symbol, item_category: c.slot })); var d = "finish-" + b; userLock(d) && (playSound("build"), isWeb() && $("#collect_" + a.symbol).html(""), $.ajax({ url: "/play/finish_production/" + b, dataType: "JSON", success: function(a) { //console.debug("Logging server response for doFinishProduction: ", a); doLog("doFinishProduction: succeess "); freeLock(d); var c = buildingByItemId(b, a.building); userContext.playerData.character = a.character; userContext.playerData.user.money = a.user.money; userContext.playerData.stat.onboarding = a.stat.onboarding; userContext.playerData.stat.num_items_produced = a.stat.num_items_produced; userContext.playerData.stat.produced_stone = a.stat.produced_stone; userContext.playerData.stat.building_upgrades_finished = a.stat.building_upgrades_finished; c.producing_archetype_id = null; c.modifier = null; c.recipe_symbol = null; var f = extractItemBySymbol(playerInventory, c.symbol); f.effective_upgrade_level = a.building.effective_upgrade_level; f.producing_archetype_id = null; f.modifier = null; f.recipe_symbol = null; // EXTENDER :: Modification, execute current code ONLY if there's a produced item returned! if (a.produced_item) { if (userContext.intCurrentRecipeIndex = null, doLog("doFinishProduction: data.produced_item.id=" + a.produced_item.id + " quantity=" + a.produced_item.quantity), insertInventoryFromItem(playerInventory, a.produced_item), theNewItem = extractItemById(playerInventory, a.produced_item.id), 1 == a.is_loot) { 0 < a.enhanced_loot_roll ? dialogAlert({ style: "alert", text: "The result of your production (enhanced) is: " + a.produced_full_name, items: [theNewItem], heading: "You have produced...", button1: "Okay" }) : dialogAlert({ style: "alert", text: "The result of your production is: " + a.produced_full_name, items: [theNewItem], heading: "You have produced...", button1: "Okay" }); } else if (0 < a.affix_chance) { var m; m = "" + ("You have a " + a.affix_chance_from_stats + "% chance to produce a superior-quality item from your talents, equipment and buildings."); a.bonus_item_name && (m += " Your " + a.bonus_item_name + " adds another +" + a.affix_chance_from_bonus + "% chance to produce a superior-quality item from your talents, equipment and buildings."); m = a.affix_roll1 <= a.affix_chance && a.affix_roll2 <= a.affix_chance ? m + "<p/>Critical Success! You obtained a superb result!" : a.affix_roll1 > a.affix_chance && a.affix_roll2 > a.affix_chance ? m + "<p/>You obtained a normal result." : m + "<p/>Success! You obtained a good result."; dialogAlert({ style: "alert", text: m, items: [theNewItem], heading: a.produced_full_name, button1: "Okay" }); } userContext.newBldgOrUpgrade = true; var q; "Upgrade" != theNewItem.slot ? (userContext.newProducedItem = theNewItem, isWeb() && $("#collect_" + f.symbol).html(renderUpgradeCollect(f)), isWeb() && $("#build_panel_action_" + f.id).html(renderBuildPanelAction(f)), isWeb() && $("#speed_button_" + f.id).hide()) : q = theNewItem.symbol; isWeb() ? (renderBuildingInventory(userContext.playerData), renderBuildingsOnScreen(userContext.playerData)) : (f = null, f = null == q ? { symbol: c.symbol, status: "idle" } : { symbol: c.symbol, status: "idle", upgrade: q }, iosSignal("finish_production", "update", f), isAndroid() && mobileCooldownDataSignal([{ mode: "building", symbol: c.symbol }]), refreshActiveBuildingPanel(), $("#building_tab_prod, .buildingupgradetree").fadeTo("slow", "1")); uiEvent("do_finish_production"); uiEvent("building_panel_" + userContext.activeBuildingPanel); a.produced_item && ("stacks_of_coins" == a.produced_item.symbol ? retrievePlayerData(!0, function (a) { userContext.playerData.quests = a.quests; reRenderQuestActionItems() }) : "stacks_of_coins" == a.produced_item.symbol && (userContext.playerData.stat.ftpe_decorative_blade = 1)); "Upgrade" == theNewItem.slot && (buildingUpgradePanel(c.symbol), userContext.playerData.stat[c.symbol + "_upgrades_finished"] = void 0 == userContext.playerData.stat[c.symbol + "_upgrades_finished"] ? 1 : userContext.playerData.stat[c.symbol + "_upgrades_finished"] + 1); updatePlayerInfo(userContext.playerData); updateAllStatus(); } else { // EXTENDER :: Modification ... console.debug("This building is still producing! Building: ", a.building); } if (typeof callback == "function") { //console.debug("Calling callback... "); callback(a); // pass response } } })); }; log("Finish production and call callback if any. Fix bug.", "initialize");