您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
command : !send [value] / for the spawn bot | !f / follow | !wood (food stone gold) / farm the resources | !aim / for aim bot to the cursor | !dc multibox / disconnect the bot and self
当前为
// ==UserScript== // @name MultiBox 2.0 [Bots] Action Like The Player // @version 2 // @description command : !send [value] / for the spawn bot | !f / follow | !wood (food stone gold) / farm the resources | !aim / for aim bot to the cursor | !dc multibox / disconnect the bot and self // @author Ha Thu // @namespace https://cheatx.ygto.com/ // @match *://moomoo.io/* // @match *://dev.moomoo.io/* // @match *://sandbox.moomoo.io/* // @require https://cdn.jsdelivr.net/npm/[email protected]/dist/msgpack.min.js // @require https://cdn.jsdelivr.net/npm/[email protected]/fontfaceobserver.standalone.min.js // @icon https://cheatx.ygto.com/cxteam.png // @grant none // ==/UserScript== // I M P O R T A N T ! // READ THIS // You may use vpn to spawn bot cuz develop limit ip now // My Discord : harryhathu._. // Yea That me again Ha Thu the villian of bots function getEl(id) { return document.getElementById(id); } (function () { 'use strict'; const style = document.createElement('style'); style.innerHTML = ` #modMenu { position: fixed; top: 50%; left: 50%; transform: translate(-50%, -50%); width: 460px; height: 420px; background: #1c1c1c; border-radius: 12px; box-shadow: 0 8px 20px rgba(0, 0, 0, 0.5); padding: 20px; color: white; font-family: Arial, sans-serif; opacity: 0; z-index: 10000; transition: opacity 0.8s ease; pointer-events: none; } #modMenu.show { opacity: 1; pointer-events: all; } #modMenu.hide { opacity: 0; pointer-events: none; } #modMenu .header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 20px; } #modMenu .header .title { font-size: 22px; font-weight: bold; display: flex; align-items: center; } #modMenu .header .version { font-size: 14px; margin-left: 8px; color: #4caf50; opacity: 0.9; } #modMenu .search-icon { font-size: 24px; color: #999; cursor: pointer; transition: color 0.3s ease, transform 0.3s ease; } #modMenu .search-icon:hover { color: #4caf50; transform: scale(1.1); } #modMenu .search-bar { display: none; margin-top: 5px; background: #2c2c2c; border-radius: 8px; padding: 8px 12px; transition: max-height 0.3s ease, padding 0.3s ease, margin-top 0.3s ease; max-height: 0; overflow: hidden; } #modMenu .search-bar.open { display: block; max-height: 50px; padding: 8px 12px; margin-top: 5px; } #modMenu .search-bar input { width: 100%; border: none; background: transparent; color: white; font-size: 14px; outline: none; } #modMenu .tabs { display: flex; justify-content: space-between; margin-bottom: 15px; transition: margin-top 0.3s ease; } #modMenu .tab { flex: 1; text-align: center; padding: 10px; margin: 0 5px; background: #333; border-radius: 8px; transition: background 0.3s ease, transform 0.2s ease; font-size: 14px; cursor: pointer; } #modMenu .tab:hover { background: #555; transform: scale(1.05); } #modMenu .tab.active { background: #4caf50; color: white; } #modMenu .content { height: 240px; overflow-y: auto; display: none; transition: opacity 0.3s ease; } #modMenu .content.active { display: block; opacity: 1; } #modMenu .content.inactive { opacity: 0; } .toggle { display: flex; justify-content: space-between; align-items: center; margin: 12px 0; font-size: 16px; } .toggle-switch { position: relative; width: 50px; height: 25px; background: #ccc; border-radius: 50px; cursor: pointer; transition: background 0.3s ease; } .toggle-switch::before { content: ''; position: absolute; width: 23px; height: 23px; background: white; border-radius: 50%; top: 1px; left: 1px; transition: transform 0.3s ease; } .toggle-switch.active { background: #4caf50; } .toggle-switch.active::before { transform: translateX(25px); } .toggle-switch input { display: none; } `; document.head.appendChild(style); const menu = document.createElement('div'); menu.id = 'modMenu'; menu.innerHTML = ` <div class="header"> <div class="title"> CheatCore<span class="version">v1</span> </div> <div class="search-icon" id="searchIcon">🔍</div> </div> <div class="search-bar" id="searchBar"> <input type="text" placeholder="Search functions..." id="functionSearch"> </div> <div class="tabs"> <div class="tab active" data-tab="bots">Bots</div> <div class="tab" data-tab="combat">Visuals</div> <div class="tab" data-tab="modules">Modules</div> </div> <div class="content active" id="content-bots"> <div class="toggle"> Enable Auto Spawn <div class="toggle-switch" data-option="autoSpawn"> <input type="checkbox" id="autoSpawn"> </div> </div> </div> <div class="content" id="content-combat"> <div class="toggle"> Disable Wiggle <div class="toggle-switch" data-option="disableWiggle"> <input type="checkbox" id="disableWiggle"> </div> </div> <div class="toggle"> Disable Hit Animation <div class="toggle-switch" data-option="disableHitAnimation"> <input type="checkbox" id="disableHitAnimation"> </div> </div> <div class="toggle"> Draw Player In Near <div class="toggle-switch" data-option="drawplayer"> <input type="checkbox" id="drawplayer"> </div> </div> </div> <div class="content" id="content-modules"> <div class="toggle"> Draw Tracers(Useless) <div class="toggle-switch" data-option="tracers"> <input type="checkbox" id="tracers"> </div> </div> </div> `; document.body.appendChild(menu); document.querySelectorAll('.tab').forEach(tab => { tab.addEventListener('click', () => { document.querySelectorAll('.tab').forEach(t => t.classList.remove('active')); tab.classList.add('active'); document.querySelectorAll('.content').forEach(content => content.classList.remove('active')); document.getElementById(`content-${tab.dataset.tab}`).classList.add('active'); }); }); document.querySelectorAll('.toggle-switch').forEach(toggle => { toggle.addEventListener('click', () => { const checkbox = toggle.querySelector('input'); checkbox.checked = !checkbox.checked; toggle.classList.toggle('active', checkbox.checked); const option = toggle.dataset.option; console.log(`${option}: ${checkbox.checked ? 'Enabled' : 'Disabled'}`); }); }); let isMenuVisible = false; document.addEventListener('keydown', (e) => { if (e.key === 'Escape') { isMenuVisible = !isMenuVisible; menu.classList.toggle('show', isMenuVisible); menu.classList.toggle('hide', !isMenuVisible); } }); document.getElementById('searchIcon').addEventListener('click', () => { const searchBar = document.getElementById('searchBar'); const tabs = document.querySelector('.tabs'); searchBar.classList.toggle('open'); tabs.style.marginTop = searchBar.classList.contains('open') ? '30px' : '0px'; if (searchBar.classList.contains('open')) { document.getElementById('functionSearch').focus(); } }); document.getElementById('functionSearch').addEventListener('input', function () { const searchTerm = this.value.toLowerCase(); document.querySelectorAll('.toggle').forEach(toggle => { const text = toggle.textContent.toLowerCase(); toggle.style.display = text.includes(searchTerm) ? 'flex' : 'none'; }); }); })(); let angles = []; let point = {x: null, y: null, x2: null, y2: null} let healToggle = true; let hatToggle = false; let empToggle = false; let ws; let cvs; let width; let height; let mouseX; let mouseY; let dir; let primary; let secondary; let foodType; let wallType; let spikeType; let millType; let mineType; let boostType; let turretType; let spawnpadType; let healer; let spiker; let trapper; let miller; let crashing; let playerFollowerGlobal; let ffs; let ffsps; let sockets = {}; let bots = {}; let closed; let myPlayer = {}; let pointer = true; let pointingOnPosition = {}; let enemiesNear; let players = {}; let isEnemyNear; let nearestEnemy; let nearestEnemyAngle; let autoaim = false; let autoAttackWithAim3 = false; let autoInsta; let JustDied; let normalHat; let normalAcc; let oldHat; let oldAcc; let cursor = false; let weapons = [{ id: 0, type: 0, name: "tool hammer", desc: "tool for gathering all resources", src: "hammer_1", length: 140, width: 140, xOff: -3, yOff: 18, dmg: 25, range: 65, gather: 1, speed: 300 }, { id: 1, type: 0, age: 2, name: "hand axe", desc: "gathers resources at a higher rate", src: "axe_1", length: 140, width: 140, xOff: 3, yOff: 24, dmg: 30, spdMult: 1, range: 70, gather: 2, speed: 400 }, { id: 2, type: 0, age: 8, pre: 1, name: "great axe", desc: "deal more damage and gather more resources", src: "great_axe_1", length: 140, width: 140, xOff: -8, yOff: 25, dmg: 35, spdMult: 1, range: 75, gather: 4, speed: 400 }, { id: 3, type: 0, age: 2, name: "short sword", desc: "increased attack power but slower move speed", src: "sword_1", iPad: 1.3, length: 130, width: 210, xOff: -8, yOff: 46, dmg: 35, spdMult: .85, range: 110, gather: 1, speed: 300 }, { id: 4, type: 0, age: 8, pre: 3, name: "katana", desc: "greater range and damage", src: "samurai_1", iPad: 1.3, length: 130, width: 210, xOff: -8, yOff: 59, dmg: 40, spdMult: .8, range: 118, gather: 1, speed: 300 }, { id: 5, type: 0, age: 2, name: "polearm", desc: "long range melee weapon", src: "spear_1", iPad: 1.3, length: 130, width: 210, xOff: -8, yOff: 53, dmg: 45, knock: .2, spdMult: .82, range: 142, gather: 1, speed: 700 }, { id: 6, type: 0, age: 2, name: "bat", desc: "fast long range melee weapon", src: "bat_1", iPad: 1.3, length: 110, width: 180, xOff: -8, yOff: 53, dmg: 20, knock: .7, range: 110, gather: 1, speed: 300 }, { id: 7, type: 0, age: 2, name: "daggers", desc: "really fast short range weapon", src: "dagger_1", iPad: .8, length: 110, width: 110, xOff: 18, yOff: 0, dmg: 20, knock: .1, range: 65, gather: 1, hitSlow: .1, spdMult: 1.13, speed: 100 }] let hats = [{ id: 51, name: "Moo Cap", price: 0, scale: 120, desc: "coolest mooer around" }, { id: 50, name: "Apple Cap", price: 0, scale: 120, desc: "apple farms remembers" }, { id: 28, name: "Moo Head", price: 0, scale: 120, desc: "no effect" }, { id: 29, name: "Pig Head", price: 0, scale: 120, desc: "no effect" }, { id: 30, name: "Fluff Head", price: 0, scale: 120, desc: "no effect" }, { id: 36, name: "Pandou Head", price: 0, scale: 120, desc: "no effect" }, { id: 37, name: "Bear Head", price: 0, scale: 120, desc: "no effect" }, { id: 38, name: "Monkey Head", price: 0, scale: 120, desc: "no effect" }, { id: 44, name: "Polar Head", price: 0, scale: 120, desc: "no effect" }, { id: 35, name: "Fez Hat", price: 0, scale: 120, desc: "no effect" }, { id: 42, name: "Enigma Hat", price: 0, scale: 120, desc: "join the enigma army" }, { id: 43, name: "Blitz Hat", price: 0, scale: 120, desc: "hey everybody i'm blitz" }, { id: 49, name: "Bob XIII Hat", price: 0, scale: 120, desc: "like and subscribe" }, { id: 57, name: "Pumpkin", price: 50, scale: 120, desc: "Spooooky" }, { id: 8, name: "Bummle Hat", price: 100, scale: 120, desc: "no effect" }, { id: 2, name: "Straw Hat", price: 500, scale: 120, desc: "no effect" }, { id: 15, name: "Winter Cap", price: 600, scale: 120, desc: "allows you to move at normal speed in snow", coldM: 1 }, { id: 5, name: "Cowboy Hat", price: 1e3, scale: 120, desc: "no effect" }, { id: 4, name: "Ranger Hat", price: 2e3, scale: 120, desc: "no effect" }, { id: 18, name: "Explorer Hat", price: 2e3, scale: 120, desc: "no effect" }, { id: 31, name: "Flipper Hat", price: 2500, scale: 120, desc: "have more control while in water", watrImm: !0 }, { id: 1, name: "Marksman Cap", price: 3e3, scale: 120, desc: "increases arrow speed and range", aMlt: 1.3 }, { id: 10, name: "Bush Gear", price: 3e3, scale: 160, desc: "allows you to disguise yourself as a bush" }, { id: 48, name: "Halo", price: 3e3, scale: 120, desc: "no effect" }, { id: 6, name: "Soldier Helmet", price: 4e3, scale: 120, desc: "reduces damage taken but slows movement", spdMult: .94, dmgMult: .75 }, { id: 23, name: "Anti Venom Gear", price: 4e3, scale: 120, desc: "makes you immune to poison", poisonRes: 1 }, { id: 13, name: "Medic Gear", price: 5e3, scale: 110, desc: "slowly regenerates health over time", healthRegen: 3 }, { id: 9, name: "Miners Helmet", price: 5e3, scale: 120, desc: "earn 1 extra gold per resource", extraGold: 1 }, { id: 32, name: "Musketeer Hat", price: 5e3, scale: 120, desc: "reduces cost of projectiles", projCost: .5 }, { id: 7, name: "Bull Helmet", price: 6e3, scale: 120, desc: "increases damage done but drains health", healthRegen: -5, dmgMultO: 1.5, spdMult: .96 }, { id: 22, name: "Emp Helmet", price: 6e3, scale: 120, desc: "turrets won't attack but you move slower", antiTurret: 1, spdMult: .7 }, { id: 12, name: "Booster Hat", price: 6e3, scale: 120, desc: "increases your movement speed", spdMult: 1.16 }, { id: 26, name: "Barbarian Armor", price: 8e3, scale: 120, desc: "knocks back enemies that attack you", dmgK: .6 }, { id: 21, name: "Plague Mask", price: 1e4, scale: 120, desc: "melee attacks deal poison damage", poisonDmg: 5, poisonTime: 6 }, { id: 46, name: "Bull Mask", price: 1e4, scale: 120, desc: "bulls won't target you unless you attack them", bullRepel: 1 }, { id: 14, name: "Windmill Hat", topSprite: !0, price: 1e4, scale: 120, desc: "generates points while worn", pps: 1.5 }, { id: 11, name: "Spike Gear", topSprite: !0, price: 1e4, scale: 120, desc: "deal damage to players that damage you", dmg: .45 }, { id: 53, name: "Turret Gear", topSprite: !0, price: 1e4, scale: 120, desc: "you become a walking turret", turret: { proj: 1, range: 700, rate: 2500 }, spdMult: .7 }, { id: 20, name: "Samurai Armor", price: 12e3, scale: 120, desc: "increased attack speed and fire rate", atkSpd: .78 }, { id: 58, name: "Dark Knight", price: 12e3, scale: 120, desc: "restores health when you deal damage", healD: .4 }, { id: 27, name: "Scavenger Gear", price: 15e3, scale: 120, desc: "earn double points for each kill", kScrM: 2 }, { id: 40, name: "Tank Gear", price: 15e3, scale: 120, desc: "increased damage to buildings but slower movement", spdMult: .3, bDmg: 3.3 }, { id: 52, name: "Thief Gear", price: 15e3, scale: 120, desc: "steal half of a players gold when you kill them", goldSteal: .5 }, { id: 55, name: "Bloodthirster", price: 2e4, scale: 120, desc: "Restore Health when dealing damage. And increased damage", healD: .25, dmgMultO: 1.2 }, { id: 56, name: "Assassin Gear", price: 2e4, scale: 120, desc: "Go invisible when not moving. Can't eat. Increased speed", noEat: !0, spdMult: 1.1, invisTimer: 1e3 }] let msgpack5 = window.msgpack; //msgpack hahah document.msgpack = msgpack5; let autoAttack; let freeze; function dist(a, b){ return Math.sqrt( Math.pow((b.y-a[2]), 2) + Math.pow((b.x-a[1]), 2) ); } function acc(id) { doNewSend(["c", [1, id, 1]]); doNewSend(["c", [0, 0, 1]]); doNewSend(["c", [0, id, 1]]); } function hat(id) { doNewSend(["c", [1, id, 0]]); doNewSend(["c", [0, id, 0]]); } let treeList = [], bushList = [], stoneList = [], goldList = [], followingfarm = false, followingtype = null, LED = Date.now(), playerss = [] let handleMessage = function(e) { let temp = msgpack5.decode(new Uint8Array(e.data)); let data = null; if(temp.length > 1) { data = [temp[0], ...temp[1]]; if (data[1] instanceof Array){ data = data; } } else { data = temp; } let item = data[0]; if(!data) {return}; if (item == "io-init") { const touchscreen = document.getElementById('touch-controls-fullscreen'); let cvs = document.getElementById("gameCanvas"); //setTimeout(() => { if (document.getElementById("mainMenu")) { document.getElementById("mainMenu").remove(); } }, 5000); let width = touchscreen.clientWidth; let height = touchscreen.clientHeight; $(window).resize(function() { width = touchscreen.clientWidth; height = touchscreen.clientHeight; }); let place = (e, t = dir) => { doNewSend(['z', [e, null]]); doNewSend(['F', [1, t]]); doNewSend(['F', [0, t]]); doNewSend(['z', [1]]); } let placeForAll = (e, t = dir) => { sendForAll(['z', [e, null]]); sendForAll(['F', [1, t]]); sendForAll(['F', [0, t]]); sendForAll(['z', [1]]); } touchscreen.addEventListener('mousemove', e => { mouseX = e.clientX; mouseY = e.clientY; dir = Math.atan2(event.clientY - height / 2, event.clientX - width / 2) if (!autoaim && Date.now() - LED > 63) { LED = Date.now() if(followingfarm == true) { doNewSend(['D', [dir]]); } else { if(autoattack == true) { for (let i in sockets) { if(sockets[i].attack2 == false) { sockets[i].oldSend(new Uint8Array(Array.from(msgpack5.encode(e)))); } } } else { if(cursor == true) { doNewSend(["D", [dir]]) for(let i in bots) { sockets[i].oldSend(new Uint8Array(Array.from(msgpack5.encode(["D", [Math.atan2((myPlayer.y - bots[i].y) + mouseY - (height / 2), (myPlayer.x - bots[i].x) + mouseX - (width / 2))]])))) } } else { sendForAll(["D", [dir]]) } } } } }) document.key22 = 1; document.addEventListener('keydown', e => { if (document.key22 !== e.keyCode) { document.key22 = e.keyCode; if (document.activeElement.tagName.toLowerCase() !== "input" && document.activeElement.tagName.toLowerCase() !== "textarea" && !document.getElementById('chatHolder').offsetParent) { if (e.keyCode == 82) { if(e.repeat) return autoaim=true; doNewSend(["D", [cursor?(Math.atan2(mouseY - height / 2, mouseX - width / 2)):nearestEnemyAngle]]) doNewSend(["K", [1]]) doNewSend(["z", [15, 1]]) setTimeout(() => { autoaim=false doNewSend(["K", [1]]) }, 130) } if (e.keyCode == 70) { if(e.repeat) return sendForAll(["z", [boostType]]) } if (e.keyCode == 86) { if(e.repeat) return sendForAll(["z", [spikeType]]) } /*if (e.keyCode == 89) { healer = true; } if (e.keyCode == 86) { spiker = true; } if (e.keyCode == 70) { trapper = true; } if (e.keyCode == 54) { miller = true; } if (e.keyCode == 0) { healToggle = !healToggle; } if (e.keyCode == 39) { hatToggle = !hatToggle; } if (e.keyCode == 40) { empToggle = !empToggle; }*/ if (e.keyCode == 80) { pointer = !pointer; } /*if (e.keyCode == 84) { autoaim = true; doNewSend(["13c", [1, 6, 0]]); doNewSend(["13c", [1, 7, 0]]); doNewSend(["13c", [1, 53, 0]]); autoAttackWithAim3 = true; doNewSend(['c', [1]]) doNewSend(["H", [5]]); doNewSend(["H", [17]]); doNewSend(["H", [31]]); doNewSend(["H", [23]]); doNewSend(["H", [9]]); doNewSend(["H", [18]]); doNewSend(['5', [9, true]]); doNewSend(["13c", [0, 53, 0]]); setTimeout(() => { doNewSend(['6', [12]]); }, 130); setTimeout(() => { doNewSend(['6', [15]]) doNewSend(['5', [secondary, true]]); setTimeout(() => { sendForAll(['5', [primary, true]]) if (!empToggle) { doNewSend(["13c", [1, 6, 0]]); doNewSend(["13c", [0, 6, 0]]); } if (empToggle) { doNewSend(["13c", [1, 22, 0]]); doNewSend(["13c", [0, 22, 0]]); } autoaim = false; autoAttackWithAim3 = false; doNewSend(['c', [0]]) doNewSend(["2", [dir]]); }, 270); }, 210); } if (e.keyCode == 0) { for (let i=0;i<180;i++) { let angle = toRad(i*2); place(boostType, angle); } } if (e.keyCode == 0) { for (let i=0;i<4;i++) { let angle = toRad(i * 90); place(spikeType, angle); } } if (e.keyCode == 77) { if (myPlayer.y < 2400) { doNewSend(["13c", [1, 15, 0]]); doNewSend(["13c", [0, 15, 0]]); } else if (myPlayer.y > 6850 && myPlayer.y < 7550) { doNewSend(["13c", [1, 31, 0]]); doNewSend(["13c", [0, 31, 0]]); } else { doNewSend(["13c", [1, 12, 0]]); doNewSend(["13c", [0, 12, 0]]); } doNewSend(["13c", [1, 0, 1]]); doNewSend(["13c", [0, 0, 1]]); } if (e.keyCode == 37) { sendForAll(["H", [8]]); sendForAll(["H", [3]]); sendForAll(["H", [5]]); } if(e.keyCode == 39) { sendForAll(["H", [8]]); sendForAll(["H", [4]]); sendForAll(["H", [5]]); sendForAll(["H", [10]]); sendForAll(["H", [28]]); sendForAll(["H", [10]]); } if(e.keyCode == 16) { sendForAll(["13c", [0, 0, 0]]); sendForAll(["13c", [0, 0, 1]]); } if (e.keyCode == 38) { sendForAll(["H", [5]]); sendForAll(["H", [17]]); sendForAll(["H", [31]]); sendForAll(["H", [23]]); sendForAll(["H", [13]]); sendForAll(["H", [18]]); sendForAll(["H", [28]]); } if (e.keyCode == 120) { sendForAll(["H", [4]]); sendForAll(["H", [15]]); } if (e.keyCode == 90) { sendForAll(["13c", [0, 0, 1]]); sendForAll(["13c", [1, 40, 0]]); sendForAll(["13c", [0, 40, 0]]); } if (e.keyCode == 32) { if (!empToggle) { sendForAll(["13c", [0, 0, 1]]); sendForAll(["13c", [1, 6, 0]]); sendForAll(["13c", [0, 6, 0]]); } if (empToggle) { sendForAll(["13c", [1, 22, 0]]); sendForAll(["13c", [0, 22, 0]]); } } if (e.keyCode == 66) { sendForAll(["13c", [0, 0, 1]]); sendForAll(["13c", [1, 7, 0]]); sendForAll(["13c", [0, 7, 0]]); } if (e.keyCode == 45) { doNewSend(["13c", [1, 6, 0]]); doNewSend(["13c", [1, 7, 0]]); doNewSend(["13c", [1, 53, 0]]); autoInsta = true; } if (e.keyCode == 46) { autoInsta = false; } if (e.keyCode == 85) { sendForAll(["13c", [1, 20, 0]]); sendForAll(["13c", [0, 20, 0]]); } if (e.keyCode == 114) { sendForAll(["H", [28]]); } if (e.keyCode == 115) { sendForAll(["H", [4]]); sendForAll(["H", [25]]); }*/ } } }) document.addEventListener('keyup', e => { document.key22 = null; if (e.keyCode == 81) { healer = false; } if (e.keyCode == 86) { spiker = false; } if (e.keyCode == 70) { trapper = false; } if (e.keyCode == 54) { miller = false; } }) setInterval(() => { if (autoaim) { doNewSend(['D', [nearestEnemyAngle]]); } if (autoAttackWithAim3) { doNewSend(['F', [1]]); } if (crashing && !closed) { for (let e = 0; e < 1000; e++) { let result = new Uint8Array(Math.round(Math.random() * 18));for (let i = 0; i < result.length; i++) {if (i == 0) {result[i] = Math.round(Math.random() * 256);} else {if (i == 1) {result[i] = Math.round(Math.random() * 256);} else {if (i == 2) {result[i] = Math.round(Math.random() * 128);} else {if (i == 3) {result[i] = Math.round(Math.random() * 85);} else {if (i == 4) {result[i] = Math.round(Math.random() * 64);} else {if (i == 5) {result[i] = Math.round(Math.random() * 51);} else {if (i == 6) {result[i] = Math.round(Math.random() * 42);} else {if (i == 7) {result[i] = Math.round(Math.random() * 36);} else {if (i == 8) {result[i] = Math.round(Math.random() * 32);} else {if (i == 9) {result[i] = Math.round(Math.random() * 28);} else {if (i == 10) {result[i] = Math.round(Math.random() * 25);} else {if (i == 11) {result[i] = Math.round(Math.random() * 23);} else {if (i == 12) {result[i] = Math.round(Math.random() * 21);} else {if (i == 13) {result[i] = Math.round(Math.random() * 19);} else {if (i == 14) {result[i] = Math.round(Math.random() * 18);} else {if (i == 15) {result[i] = Math.round(Math.random() * 17);} else {if (i == 16) {result[i] = Math.round(Math.random() * 16);} else {if (i == 17) {result[i] = Math.round(Math.random() * 15);}}}}}}}}}}}}}}}}}}}ws.oldSend(result); } } if (healer) { place(foodType, null); } if (spiker) { place(spikeType, null); } if (trapper) { place(boostType, null); } if (miller) { place(millType, null); } }, 100) primary = 0; foodType = 0; wallType = 3; spikeType = 6; millType = 10; myPlayer.weapon = 0; doNewSend(['M', [{name: localStorage.moo_name, moofoll: "1", skin: 4}]]); setTimeout(() => { let kk; let host = "127.0.0.1" !== location.hostname && !location.hostname.startsWith("192.168."); for (let i2 = 0; i2 < 4; i2++) { const urlBase = document.ws.url.split("token=")[0]; const token = encodeURIComponent("alt:" + $i); wsType(`${urlBase}token=${token}`); } }, 100); } if (item == "C" && !myPlayer.id) { myPlayer.id = data[1]; } if (item == "D") { playerss.push({ sid: data[1][1], name: data[1][2] }) } if (item == "E") { let t = playerss.findIndex(e=>e.sid==data[1]) if(t !== undefined) { playerss.splice(t, 1) } } if (item == "H") { for(let i = 0; i < data[1].length/8; i++) { let objectData = data[1].slice(8*i, 8*i+8) if(objectData[6] == null) { if(objectData[5] == 0) { treeList.push({ x: objectData[1], y: objectData[2] }) } else if (objectData[5] == 1) { bushList.push({ x: objectData[1], y: objectData[2] }) } else if (objectData[5] == 2) { stoneList.push({ x: objectData[1], y: objectData[2] }) } else if (objectData[5] == 3) { goldList.push({ x: objectData[1], y: objectData[2] }) } } } } if (item == "N") { if(data[1] == "kills") { sendForAll(["6", ["gg - Get Deleted"]], true) } } if (item == "P") { primary = 0; foodType = 0; wallType = 3; spikeType = 6; millType = 10; if (!autoAttack && !freeze) { doNewSend(['M', [{name: localStorage.moo_name, moofoll: "1", skin: 4}]]); } else { JustDied = true; } let e = setInterval(() => { if(document.getElementById('mainMenu').style.display == "block") { clearInterval(e) document.getElementById('mainMenu').style.display = "none" } }) } if (JustDied) { if (!autoAttack && !freeze) { JustDied = false; doNewSend(['M', [{name: localStorage.moo_name, moofoll: "1", skin: 4}]]); } } if (item == "X") { //console.log(data) } if (item == "a") { enemiesNear = []; players = {}; for(let i = 0; i < data[1].length / 13; i++) { let playerInfo = data[1].slice(13*i, 13*i+13); if(playerInfo[0] == myPlayer.id) { myPlayer.x = playerInfo[1]; myPlayer.y = playerInfo[2]; myPlayer.dir = playerInfo[3]; myPlayer.object = playerInfo[4]; myPlayer.clan = playerInfo[7]; myPlayer.isLeader = playerInfo[8]; myPlayer.hat = playerInfo[9]; myPlayer.accessory = playerInfo[10]; myPlayer.isSkull = playerInfo[11]; } else if(playerInfo[7] !== myPlayer.clan || playerInfo[7] === null) { enemiesNear.push(playerInfo); } let U = players[playerInfo[0]] if(U && (U.clan !== myPlayer.clan && myPlayer.clan !== null || myPlayer.clan == null)) { if(Math.sqrt(Math.pow(U.x - playerInfo[1], 2)+Math.pow(U.y - playerInfo[2], 2)) >= 70 && (Math.abs(Math.atan2(playerInfo[2] - U.y, playerInfo[1] - U.x) - Math.atan2(playerInfo[2] - myPlayer.y, playerInfo[1] - myPlayer.x)) % (2 * Math.PI)) < Math.PI/4) { let dir = Math.atan2(playerInfo[2] - myPlayer.y, playerInfo[1] - myPlayer.x) if(boostType) { sendForAll(["z", [boostType]]) sendForAll(["F", [1, dir]]) sendForAll(["z", [boostType]]) sendForAll(["F", [1, dir+Math.PI/2]]) sendForAll(["z", [boostType]]) sendForAll(["F", [1, dir-Math.PI/2]]) sendForAll(["z", [boostType]]) sendForAll(["F", [1, dir+Math.PI]]) sendForAll(["F", [0]]) sendForAll(["z", [null]]) } else { sendForAll(["z", [spikeType]]) sendForAll(["F", [1, dir]]) sendForAll(["z", [spikeType]]) sendForAll(["F", [1, dir+Math.PI/2]]) sendForAll(["z", [spikeType]]) sendForAll(["F", [1, dir-Math.PI/2]]) sendForAll(["z", [spikeType]]) sendForAll(["F", [1, dir+Math.PI]]) sendForAll(["F", [0]]) sendForAll(["z", [null]]) } } } players[playerInfo[0]] = { id: playerInfo[0], x: playerInfo[1], y: playerInfo[2], dir: playerInfo[3], object: playerInfo[4], weapon: playerInfo[5], clan: playerInfo[7], isLeader: playerInfo[8], hat: playerInfo[9], accessory: playerInfo[10], isSkull: playerInfo[11] }; } isEnemyNear = false; if(enemiesNear) { nearestEnemy = enemiesNear.sort((a,b) => dist(a, myPlayer) - dist(b, myPlayer))[0]; } if(nearestEnemy) { nearestEnemyAngle = Math.atan2(nearestEnemy[2]-myPlayer.y, nearestEnemy[1]-myPlayer.x); if(Math.sqrt(Math.pow((myPlayer.y-nearestEnemy[2]), 2) + Math.pow((myPlayer.x-nearestEnemy[1]), 2)) < 500) { isEnemyNear = true; if(autoaim == false && myPlayer.hat != 7 && myPlayer.hat != 53) { normalHat = 6; if(primary != 8) { normalAcc = 19; } }; } } /*if (autoaim) { doNewSend(['2', [nearestEnemyAngle]]); }*/ if (autoAttackWithAim3) { doNewSend(['F', [1]]); } if(isEnemyNear == false && autoaim == false) { normalAcc = 0; if (myPlayer.y < 2400){ normalHat = 15; } else if (myPlayer.y > 6850 && myPlayer.y < 7550){ normalHat = 31; } else { normalHat = 12; } } if(hatToggle) { if(oldHat != normalHat) { hat(normalHat); } if(oldAcc != normalAcc) { acc(normalAcc); } oldHat = normalHat; oldAcc = normalAcc } if (nearestEnemy && autoInsta) { if (Math.sqrt(Math.pow((myPlayer.y-nearestEnemy[2]), 2) + Math.pow((myPlayer.x-nearestEnemy[1]), 2)) < 215) { autoInsta = false; autoaim = true; doNewSend(['9', [nearestEnemyAngle]]); setTimeout(() => { doNewSend(['9', []]); doNewSend(['c', [0, 11, 1]]); }, 300) doNewSend(['K', [1]]); if (myPlayer.weapon == 0) { doNewSend(["H", [5]]); doNewSend(["H", [17]]); doNewSend(["H", [31]]); doNewSend(["H", [23]]); doNewSend(["H", [10]]); doNewSend(["H", [18]]); doNewSend(["H", [28]]); } doNewSend(["H", [15]]); doNewSend(['c', [0, 0, 1]]) doNewSend(['c', [0, 19, 1]]) doNewSend(['c', [0, 7, 0]]) doNewSend(["z", [primary, 1]]); for (let i = 0; i < 25; i++) { doNewSend(['F', [1, nearestEnemyAngle]]); } setTimeout(() => { doNewSend(['c', [0, 53, 0]]); doNewSend(["z", [15, 1]]); doNewSend(["z", [secondary, 1]]); setTimeout(() => { autoaim = false; doNewSend(["z", [primary, 1]]); if (!empToggle) { doNewSend(["c", [1, 6, 0]]); doNewSend(["c", [0, 6, 0]]); } if (empToggle) { doNewSend(["c", [1, 22, 0]]); doNewSend(["c", [0, 22, 0]]); } doNewSend(['K', [1]]); doNewSend(['F', [0]]); }, 270); }, 130); } } if (pointer) { pointingOnPosition = {x: myPlayer.x, y: myPlayer.y}; } } if (item == "V") { if (data[2]) { primary = data[1][0]; secondary = data[1][1] || null; } else { for (let i = 0; i < data[1].length; i++) { for (let i2 = 0; i2 < 3; i2++) { if (i2 == data[1][i]) { foodType = data[1][i]; } } for (let i2 = 3; i2 < 6; i2++) { if (i2 == data[1][i]) { wallType = data[1][i]; } } for (let i2 = 6; i2 < 10; i2++) { if (i2 == data[1][i]) { spikeType = data[1][i]; } } for (let i2 = 10; i2 < 13; i2++) { if (i2 == data[1][i]) { millType = data[1][i]; } } for (let i2 = 13; i2 < 15; i2++) { if (i2 == data[1][i]) { mineType = data[1][i]; } } for (let i2 = 15; i2 < 17; i2++) { if (i2 == data[1][i]) { boostType = data[1][i]; } } for (let i2 = 17; i2 < 23; i2++) { if (i2 == data[1][i] && i2 !== 20) { turretType = data[1][i]; } } spawnpadType = 20; } } } //player receive if (item == "6") { if (data[2].toLocaleLowerCase() == '!dc multibox' && data[1] == myPlayer.id) { // crash crashing = true; } if (data[2].toLocaleLowerCase() == '!come' && data[1] == myPlayer.id) { playerFollowerGlobal = true; } if (data[2].toLocaleLowerCase() == '!stop' && data[1] == myPlayer.id) { playerFollowerGlobal = false; } if (data[2].toLocaleLowerCase() == '!go' && data[1] == myPlayer.id) { //lazy to do mouse move ffs = true; } if (data[2].toLocaleLowerCase() == '!stopp' && data[1] == myPlayer.id) { ffs = false; } if (data[2].toLowerCase() == "!aim" && data[1] == myPlayer.id) { // aim to cursor cursor = !cursor } if (data[2].toLowerCase() == "!f" && data[1] == myPlayer.id) { // follow playerFollowerGlobal = true followingfarm = false ffs = false for (let i in sockets) { sockets[i].attack = false } autoattack = false } if (data[2].toLowerCase().startsWith("!let") && data[1] == myPlayer.id) { // come let pl = playerss.find(e=>e.name.toLowerCase().startsWith(data[2].slice(5).toLowerCase())) friend.push(pl.sid) } if (data[2].toLowerCase() == "!rlet" && data[1] == myPlayer.id) { friend = [] } if (data[2].toLowerCase().includes("!send") && data[1] == myPlayer.id) { // send bot if(!isNaN(data[2].slice(6))) { for (let i2 = 0; i2 < data[2].slice(6); i2++) { const urlBase = document.ws.url.split("token=")[0]; const token = encodeURIComponent("alt:" + $i); wsType(`${urlBase}token=${token}`); } } } if (data[2].toLocaleLowerCase() == '!-' && data[1] == myPlayer.id) { setTimeout(() => { let kk; let host = "127.0.0.1" !== location.hostname && !location.hostname.startsWith("192.168."); for (let i2 = 0; i2 < 4; i2++) { const urlBase = document.ws.url.split("token=")[0]; const token = encodeURIComponent("alt:" + $i); wsType(`${urlBase}token=${token}`); } }, 100); } } if(data[0] == "O" && data[1] == myPlayer.id) { if(data[2] > 0) { if (healToggle) { setTimeout(() => { doNewSend(['z', [foodType, null]]); doNewSend(['F', [1]]); doNewSend(['F', [0]]); doNewSend(['z', [null]]); }, 100); } } } } function toRad(angle) { return angle * (Math.PI / 180); } let doNewSend = (e) => { ws.oldSend(new Uint8Array(Array.from(msgpack5.encode(e)))); } let commandList = ["!wood", "!food", "!stone", "!gold", "~age", "~wood", "~food", "~stone", "~gold", "!attack on", "!attack off"] WebSocket.prototype.oldSend = WebSocket.prototype.send; WebSocket.prototype.send = function(m) { if (!ws) { ws = this; document.ws = this; this.addEventListener('message', e => { handleMessage(e); }); this.addEventListener('close', () => { closed = true; }); } if (!closed) { if (msgpack5.decode(m)[0] !== "D" && msgpack5.decode(m)[0] !== "F" && msgpack5.decode(m)[0] !== "9" && msgpack5.decode(m)[0] !== "6" && msgpack5.decode(m)[0] !== "H" && msgpack5.decode(m)[0] !== "z" && msgpack5.decode(m)[0] !== "c" && msgpack5.decode(m)[0] !== "K") { this.oldSend(m); } if (msgpack5.decode(m)[0] == "F") { sendForAll(msgpack5.decode(m)); } if (msgpack5.decode(m)[0] == "H") { sendForAll(msgpack5.decode(m), true); } if (msgpack5.decode(m)[0] == "z") { sendForAll(msgpack5.decode(m)); } if (msgpack5.decode(m)[0] == "K") { if (msgpack5.decode(m)[1][0] == 1) { autoAttack = !autoAttack; } if (msgpack5.decode(m)[1][0] == 0) { freeze = !freeze; } sendForAll(msgpack5.decode(m), true); } if (msgpack5.decode(m)[0] == "6") { try { this.oldSend(m); if (msgpack5.decode(m)[1][0].toLocaleLowerCase() !== '!f' && msgpack5.decode(m)[1][0].toLocaleLowerCase() !== '!fs' && msgpack5.decode(m)[1][0].toLocaleLowerCase().split(" ")[0] !== '!join' && msgpack5.decode(m)[1][0].toLocaleLowerCase().split(" ")[0] !== '!leave' && msgpack5.decode(m)[1][0].toLocaleLowerCase().split(" ")[0] !== '!bye' && !commandList.includes(msgpack5.decode(m)[1][0].toLocaleLowerCase()) && !(msgpack5.decode(m)[1][0].toLocaleLowerCase().startsWith("!let") || msgpack5.decode(m)[1][0].toLocaleLowerCase().startsWith("!rlet"))) { for (let i in sockets) { sockets[i].oldSend(m); } } } catch (err) {} } if (msgpack5.decode(m)[0] == "c") { sendForAll(msgpack5.decode(m), true); } if (msgpack5.decode(m)[0] == "9") { this.oldSend(m); for (let i in sockets) { if (!sockets[i].playerFollower && !playerFollowerGlobal && !ffs) { sockets[i].oldSend(m); } } } } } let sendForAll = (e, count) => { doNewSend(e); try { if(Object.keys(sockets).filter(e=>e!=undefined).length > 0 && (!count?followingfarm == false:true)) { for (let i in sockets) { sockets[i].oldSend(new Uint8Array(Array.from(msgpack5.encode(e)))); } } } catch (err) { } }; let friend = [] let autoattack = false function wsType(e) { let ws = new WebSocket(e); console.log(e); ws.playerFollower = true; ws.autoAttackWithAim3; ws.autoAttackWithAim4 = [false, null]; ws.autoAttackWithAim5 = [false, null] ws.attack = false ws.autoattack2 = false let bot = {}, age = 1; let attacking = false, attacking2 = false ws.binaryType = "arraybuffer"; let doNewSend = (e) => { ws.connected && (ws.oldSend(new Uint8Array(Array.from(msgpack5.encode(e))))); } let msgFnc = (e) => { let temp = msgpack5.decode(new Uint8Array(e.data)); let data = null; if(temp.length > 1) { data = [temp[0], ...temp[1]]; if (data[1] instanceof Array){ data = data; } } else { data = temp; } let item = data[0]; if(!data) {return}; if (item == "io-init") { ws.connected = !0 let place = (e, t = dir) => { doNewSend(['z', [e, null]]); doNewSend(['F', [1, t]]); doNewSend(['F', [0, t]]); doNewSend(['z', [null]]); } function storeEquip(id, index) { doNewSend(["c", [0, id, index]]); } function storeBuy(id, index) { doNewSend(["c", [1, id, index]]); } ws.key23 = null; document.addEventListener('keydown', e => { if (ws.key23 !== e.keyCode && ws.connected) { ws.key23 = e.keyCode; if (document.activeElement.tagName.toLowerCase() !== "input" && document.activeElement.tagName.toLowerCase() !== "textarea" && !document.getElementById('chatHolder').offsetParent) { if (e.keyCode == 82) { if(e.repeat) return ws.autoaim = true doNewSend(["D", [cursor?(Math.atan2((myPlayer.y - bot.y) + mouseY - (height / 2), (myPlayer.x - bot.x) + mouseX - (width / 2))):ws.nearestEnemyAngle]]) doNewSend(["K", [1]]) doNewSend(["z", [15, 1]]) setTimeout(() => { ws.autoaim = false doNewSend(["K", [1]]) }, 130) } /*if (e.keyCode == 84) { ws.autoaim = true; doNewSend(["13c", [1, 6, 0]]); doNewSend(["13c", [1, 7, 0]]); doNewSend(["13c", [1, 53, 0]]); doNewSend(["13c", [1, 21, 0]]); ws.autoAttackWithAim3 = true; doNewSend(['c', [1]]) doNewSend(["H", [5]]); doNewSend(["H", [17]]); doNewSend(["H", [31]]); doNewSend(["H", [23]]); doNewSend(["H", [9]]); doNewSend(["H", [18]]); doNewSend(['5', [9, true]]); doNewSend(["13c", [0, 53, 0]]); setTimeout(() => { doNewSend(['6', [12]]); }, 130); setTimeout(() => { doNewSend(['6', [15]]) doNewSend(['5', [secondary, true]]); setTimeout(() => { sendForAll(['5', [primary, true]]) if (!empToggle) { doNewSend(["13c", [1, 6, 0]]); doNewSend(["13c", [0, 6, 0]]); } if (empToggle) { doNewSend(["13c", [1, 22, 0]]); doNewSend(["13c", [0, 22, 0]]); } ws.autoaim = false; ws.autoAttackWithAim3 = false; doNewSend(['c', [0]]) doNewSend(["2", [dir]]); }, 300); }, 210); } if (e.keyCode == 79) { for (let i=0;i<180;i++) { let angle = toRad(i*2); place(boostType, angle); } } if (e.keyCode == 76) { for (let i=0;i<4;i++) { let angle = toRad(i * 90); place(spikeType, angle); } } if (e.keyCode == 77) { if (bot.y < 2400) { doNewSend(["13c", [1, 15, 0]]); doNewSend(["13c", [0, 15, 0]]); } else if (bot.y > 6850 && bot.y < 7550) { doNewSend(["13c", [1, 31, 0]]); doNewSend(["13c", [0, 31, 0]]); } else { doNewSend(["13c", [1, 12, 0]]); doNewSend(["13c", [0, 12, 0]]); } doNewSend(["13c", [1, 11, 1]]); doNewSend(["13c", [0, 11, 1]]); }*/ /*if (e.keyCode == 45) { doNewSend(['ch', ['Autoinsta:true']]); doNewSend(["13c", [1, 6, 0]]); doNewSend(["13c", [1, 7, 0]]); doNewSend(["13c", [1, 53, 0]]); ws.autoInsta = true; } if (e.keyCode == 46) { doNewSend(['ch', ['Autoinsta:false']]); ws.autoInsta = false; }*/ } } }) document.addEventListener('keyup', e => { ws.key23 = null; }) //setInterval(() => { /*if (healer) { place(ws.foodType, null); } if (spiker) { place(ws.spikeType, null); } if (trapper) { place(ws.boostType, null); } if (miller) { place(ws.millType, null); }*/ //}, 100) ws.primary = 0; ws.foodType = 0; ws.wallType = 3; ws.spikeType = 6; ws.millType = 10; doNewSend(['M', [{name: localStorage.moo_name, moofoll: "lol", skin: 4}]]); } let place2 = (e, t = dir) => { doNewSend(['z', [e, null]]); doNewSend(['F', [1, t]]); doNewSend(['F', [0, t]]); doNewSend(['z', [null]]); } if (item == "C" && !bot.id) { bot.id = data[1]; if (sockets) { sockets[data[1]] = ws; bots[data[1]] = bot; } } if (item == "P") { ws.primary = 0; ws.foodType = 0; ws.wallType = 3; ws.spikeType = 6; ws.millType = 10; age = 1; if (!autoAttack && !freeze) { doNewSend(['M', [{name: localStorage.moo_name, moofoll: "acool", skin: 4}]]); } else { ws.JustDied = true; } } if (ws.JustDied) { if (!autoAttack && !freeze) { ws.JustDied = false; doNewSend(['M', [{name: localStorage.moo_name, moofoll: "u GaY", skin: 4}]]); } } if (item == "a") { ws.enemiesNear = []; ws.players = {}; for(let i = 0; i < data[1].length / 13; i++) { let playerInfo = data[1].slice(13*i, 13*i+13); if(playerInfo[0] == bot.id) { bot.x = playerInfo[1]; bot.y = playerInfo[2]; bot.dir = playerInfo[3]; bot.object = playerInfo[4]; bot.weapon = playerInfo[5]; bot.clan = playerInfo[7]; bot.isLeader = playerInfo[8]; bot.hat = playerInfo[9]; bot.accessory = playerInfo[10]; bot.isSkull = playerInfo[11]; } else if(playerInfo[7] !== bot.clan || playerInfo[7] === null) { ws.enemiesNear.push(playerInfo); } ws.players[playerInfo[0]] = { id: playerInfo[0], x: playerInfo[1], y: playerInfo[2], dir: playerInfo[3], object: playerInfo[4], weapon: playerInfo[5], clan: playerInfo[7], isLeader: playerInfo[8], hat: playerInfo[9], accessory: playerInfo[10], isSkull: playerInfo[11] }; } bots[bot.id] = bot //place2(ws.millType, null); if(ws.enemiesNear) { ws.nearestEnemy = ws.enemiesNear.sort((a,b) => dist(a, bot) - dist(b, bot))[0]; } if(ws.nearestEnemy) { ws.nearestEnemyAngle = Math.atan2(ws.nearestEnemy[2]-bot.y, ws.nearestEnemy[1]-bot.x); if(ws.attack == true) { if(Math.sqrt(Math.pow(ws.nearestEnemy[1] - bot.x, 2)+Math.pow(ws.nearestEnemy[2] - bot.y, 2)) <= 240) { ws.autoattack2 = true if(bot.weapon !== ws.primary) { bot.weapon = ws.primary doNewSend(["z", [ws.primary, 1]]) } ws.autoAttackWithAim5 = [true, ws.nearestEnemyAngle] } else { if(ws.autoattack2 == true) { ws.autoattack2 = false ws.autoAttackWithAim5 = [false, null] doNewSend(["F", [0]]) } } doNewSend(["9", [ws.nearestEnemyAngle]]) } } else { if(ws.autoattack2 == true) { ws.autoattack2 = false ws.autoAttackWithAim5 = [false, null] doNewSend(["F", [0]]) doNewSend(["9", [null]]) } } if (ws.nearestEnemy && ws.nearestEnemy.length) { if(Math.sqrt(Math.pow((bot.y-ws.nearestEnemy[2]), 2) + Math.pow((bot.x-ws.nearestEnemy[1]), 2)) < 500) { ws.isEnemyNear = true; if(!ws.autoaim && bot.hat != 7 && bot.hat != 53) { ws.normalHat = 6; if(ws.primary != 8) { ws.normalAcc = 21; } } else { ws.isEnemyNear = false; } }; } if(!ws.isEnemyNear && !ws.autoaim) { ws.normalAcc = 11; if (bot.y < 2400){ ws.normalHat = 15; } else if (bot.y > 6850 && bot.y < 7550){ ws.normalHat = 31; } else { ws.normalHat = 12; } } if(hatToggle) { if(ws.oldHat != ws.normalHat) { doNewSend(['c', [1, ws.normalHat, 0]]); doNewSend(['c', [0, ws.normalHat, 0]]); } if(ws.oldAcc != ws.normalAcc) { doNewSend(['c', [1, ws.normalAcc, 1]]); doNewSend(['c', [0, ws.normalAcc, 1]]); } ws.oldHat = ws.normalHat; ws.oldAcc = ws.normalAcc; } if (ws.nearestEnemy && ws.autoInsta) { if (Math.sqrt(Math.pow((bot.y-ws.nearestEnemy[2]), 2) + Math.pow((bot.x-ws.nearestEnemy[1]), 2)) < 215) { ws.autoInsta = false; ws.autoaim = true; doNewSend(['9', [ws.nearestEnemyAngle]]); setTimeout(() => { doNewSend(['9', []]); doNewSend(['c', [0, 11, 1]]); }, 300) doNewSend(['c', [0, 0, 1]]) doNewSend(['c', [0, 19, 1]]) doNewSend(['c', [0, 7, 0]]) doNewSend(["z", [ws.primary, 1]]); for (let i = 0; i < 25; i++) { doNewSend(['F', [1, ws.nearestEnemyAngle]]); } setTimeout(() => { doNewSend(['c', [0, 53, 0]]); doNewSend(["z", [ws.secondary, 1]]); setTimeout(() => { ws.autoaim = false; doNewSend(["z", [ws.primary, 1]]); if (!empToggle) { doNewSend(["c", [1, 6, 0]]); doNewSend(["c", [0, 6, 0]]); } if (empToggle) { doNewSend(["c", [1, 22, 0]]); doNewSend(["c", [0, 22, 0]]); } doNewSend(['K', [1]]); doNewSend(['F', [0]]); }, 270); }, 130); } } if ((ws.playerFollower || playerFollowerGlobal) && !followingfarm && !ws.autoattack2) { if (Math.sqrt(Math.pow((bot.y - pointingOnPosition.y), 2) + Math.pow((bot.x - pointingOnPosition.x), 2)) < (Object.keys(sockets).filter(e=>e!=undefined).length > 3 ? 160 : 105)) { doNewSend(['9', []]); } else { doNewSend(['9', [Math.atan2(pointingOnPosition.y - bot.y, pointingOnPosition.x - bot.x)]]); } } else if (followingfarm == true && followingtype !== null) { if(followingtype == "wood") { let nearestWood = treeList.sort((a, b) => {return Math.sqrt(Math.pow(a.x - myPlayer.x, 2)+Math.pow(a.y - myPlayer.y, 2)) - Math.sqrt(Math.pow(b.x - myPlayer.x, 2)+Math.pow(b.y - myPlayer.y, 2))})[0] if(Math.sqrt(Math.pow(nearestWood.x - bot.x, 2) + Math.pow(nearestWood.y - bot.y, 2)) < 165) { doNewSend(["9", [null]]) ws.autoAttackWithAim4 = [true, Math.atan2(nearestWood.y - bot.y, nearestWood.x - bot.x)] } else { doNewSend(["9", [Math.atan2(nearestWood.y - bot.y, nearestWood.x - bot.x)]]) } } else if (followingtype == "bush") { let nearestBush = bushList.sort((a, b) => {return Math.sqrt(Math.pow(a.x - myPlayer.x, 2)+Math.pow(a.y - myPlayer.y, 2)) - Math.sqrt(Math.pow(b.x - myPlayer.x, 2)+Math.pow(b.y - myPlayer.y, 2))})[0] if(Math.sqrt(Math.pow(nearestBush.x - bot.x, 2) + Math.pow(nearestBush.y - bot.y, 2)) < 100) { doNewSend(["9", [null]]) ws.autoAttackWithAim4 = [true, Math.atan2(nearestBush.y - bot.y, nearestBush.x - bot.x)] } else { doNewSend(["9", [Math.atan2(nearestBush.y - bot.y, nearestBush.x - bot.x)]]) } } else if (followingtype == "stone") { let nearestStone = stoneList.sort((a, b) => {return Math.sqrt(Math.pow(a.x - myPlayer.x, 2)+Math.pow(a.y - myPlayer.y, 2)) - Math.sqrt(Math.pow(b.x - myPlayer.x, 2)+Math.pow(b.y - myPlayer.y, 2))})[0] if(Math.sqrt(Math.pow(nearestStone.x - bot.x, 2) + Math.pow(nearestStone.y - bot.y, 2)) < 140) { doNewSend(["9", [null]]) ws.autoAttackWithAim4 = [true, Math.atan2(nearestStone.y - bot.y, nearestStone.x - bot.x)] } else { doNewSend(["9", [Math.atan2(nearestStone.y - bot.y, nearestStone.x - bot.x)]]) } } else if (followingtype == "gold") { let nearestGold = goldList.sort((a, b) => {return Math.sqrt(Math.pow(a.x - myPlayer.x, 2)+Math.pow(a.y - myPlayer.y, 2)) - Math.sqrt(Math.pow(b.x - myPlayer.x, 2)+Math.pow(b.y - myPlayer.y, 2))})[0] if(Math.sqrt(Math.pow(nearestGold.x - bot.x, 2) + Math.pow(nearestGold.y - bot.y, 2)) < 140) { doNewSend(["9", [null]]) ws.autoAttackWithAim4 = [true, Math.atan2(nearestGold.y - bot.y, nearestGold.x - bot.x)] } else { doNewSend(["9", [Math.atan2(nearestGold.y - bot.y, nearestGold.x - bot.x)]]) } } } else if (followingfarm == false && followingtype !== null) { followingtype = null ws.autoAttackWithAim4 = [false, null] doNewSend(["F", [0]]) } if (ffs) { if (ffsps !== Math.atan2((myPlayer.y - bot.y) + mouseY - (height / 2), (myPlayer.x- bot.x) + mouseX - (width / 2))) { ffsps = Math.atan2((myPlayer.y - bot.y) + mouseY - (height / 2), (myPlayer.x- bot.x) + mouseX - (width / 2)); if (!ws.autoaim) { doNewSend(['D', [ffsps]]); } doNewSend(['9', [ffsps]]); } } /*if (ws.autoaim) { doNewSend(['2', [ws.nearestEnemyAngle]]); }*/ if (ws.autoAttackWithAim4[0] == true && followingfarm == true) { attacking = true doNewSend(['F', [1, ws.autoAttackWithAim4[1]]]); doNewSend(['D', [ws.autoAttackWithAim4[1]]]) } else if (followingfarm == false && attacking == true) { attacking = false doNewSend(["F", [0]]) } if (ws.autoAttackWithAim5[0] == true && ws.attack == true) { attacking2 = true doNewSend(['F', [1, ws.autoAttackWithAim5[1]]]); doNewSend(['D', [ws.autoAttackWithAim5[1]]]) } else if (ws.attack == false && attacking2 == true) { attacking2 = false doNewSend(["F", [0]]) } } if (item == "N") { if(data[1] == "kills") { sendForAll(["6", ["gg - Get Deleted"]], true) } bot && (bot[data[1]] = data[2]) } if (item == "6") { if(data[1] == myPlayer.id || friend.includes(data[1])) { if(data[2].toLowerCase() == "~age") { doNewSend(["6", [age.toString()]]) } if (data[2].toLowerCase() == "!wood") { followingfarm = true followingtype = "wood" } if (data[2].toLowerCase() == "!food") { followingfarm = true followingtype = "bush" } if (data[2].toLowerCase() == "!stone") { followingfarm = true followingtype = "stone" } if (data[2].toLowerCase() == "!gold") { followingfarm = true followingtype = "gold" } if (data[2].toLowerCase() == "~wood") { doNewSend(["6", [bot.wood?bot.wood.toString():"100"]]) } if (data[2].toLowerCase() == "~food") { doNewSend(["6", [bot.food?bot.food.toString():"100"]]) } if (data[2].toLowerCase() == "~stone") { doNewSend(["6", [bot.stone?bot.stone.toString():"100"]]) } if (data[2].toLowerCase() == "~gold") { doNewSend(["6", [bot.points?bot.points.toString():"100"]]) } if (data[2].toLowerCase() == "!attack on") { ws.attack = true autoattack = true } else if (data[2].toLowerCase() == "!attack off") { ws.attack = false ws.autoAttackWithAim4 = [false, null] doNewSend(["F", [0]]) autoattack = false } if (data[2].toLowerCase().startsWith("!b")) { let hat = hats.find(e=>e.name.toLowerCase().startsWith(data[2].slice(3))) if(hat !== undefined) { if(bot.points >= hat.price) { doNewSend(["c", [1, hat.id, 0]]) doNewSend(["6", ["Bought" + hat.name]]) } else { doNewSend(["6", ["Not Enough Gold"]]) } } else { doNewSend(["6", ["Hat Is Undefined"]]) } } } } if (item == "T") { null != data[3] && (age = data[3]) } if (item == "V") { if (data[2]) { ws.primary = data[1][0]; ws.secondary = data[1][1] || null; } else { for (let i = 0; i < data[1].length; i++) { for (let i2 = 0; i2 < 3; i2++) { if (i2 == data[1][i]) { ws.foodType = data[1][i]; } } for (let i2 = 3; i2 < 6; i2++) { if (i2 == data[1][i]) { ws.wallType = data[1][i]; } } for (let i2 = 6; i2 < 10; i2++) { if (i2 == data[1][i]) { ws.spikeType = data[1][i]; } } for (let i2 = 10; i2 < 13; i2++) { if (i2 == data[1][i]) { ws.millType = data[1][i]; } } for (let i2 = 13; i2 < 15; i2++) { if (i2 == data[1][i]) { ws.mineType = data[1][i]; } } for (let i2 = 15; i2 < 17; i2++) { if (i2 == data[1][i]) { ws.boostType = data[1][i]; } } for (let i2 = 17; i2 < 23; i2++) { if (i2 == data[1][i] && i2 !== 20) { ws.turretType = data[1][i]; } } ws.spawnpadType = 20; } } } if (item == "6") { let ch = data; if (ch[2].toLocaleLowerCase() == '!"' && ch[1] == myPlayer.id) { ws.playerFollower = true; doNewSend(['9', []]); } if (ch[2].toLocaleLowerCase() == '!*' && ch[1] == myPlayer.id) { ws.playerFollower = false; doNewSend(['9', []]); } if (ch[2].toLocaleLowerCase() == '!+' && ch[1] == myPlayer.id) { ws.playerFollower = false; doNewSend(['9', []]); } if (ch[2].toLocaleLowerCase() == '!close' && ch[1] == myPlayer.id) { ws.close(); } if ((ch[2].toLocaleLowerCase()).split(' ')[0] == '!join' && ch[1] == myPlayer.id) { doNewSend(['b', [ch[2].toLocaleLowerCase().split(' ')[1]]]); } if ((ch[2].toLocaleLowerCase()).split(' ')[0] == '!leave' && ch[1] == myPlayer.id) { doNewSend(['N', [null]]); } } if (item == "g") { if (data[1].owner == myPlayer.id) { setTimeout(() => { doNewSend(['b', [data[1].sid]]); }, 100); } } if(data[0] == "O" && data[1] == bot.id) { if(data[2] > 0) { setTimeout(() => { doNewSend(['z', [ws.foodType, null]]); doNewSend(['F', [1]]); doNewSend(['F', [0]]); doNewSend(['z', [null]]); }, 100) } } } ws.onmessage = (e) => { msgFnc(e); } ws.onclose = () => { delete sockets[bot.id] delete bots[bot.id] ws.connected = !1 } } (function () { const t = document.createElement("link").relList; if (t && t.supports && t.supports("modulepreload")) { return; } for (const s of document.querySelectorAll("link[rel=\"modulepreload\"]")) { n(s); } new MutationObserver(s => { for (const r of s) { if (r.type === "childList") { for (const o of r.addedNodes) { if (o.tagName === "LINK" && o.rel === "modulepreload") { n(o); } } } } }).observe(document, { childList: true, subtree: true }); function i(s) { const r = {}; if (s.integrity) { r.integrity = s.integrity; } if (s.referrerPolicy) { r.referrerPolicy = s.referrerPolicy; } if (s.crossOrigin === "use-credentials") { r.credentials = "include"; } else if (s.crossOrigin === "anonymous") { r.credentials = "omit"; } else { r.credentials = "same-origin"; } return r; } function n(s) { if (s.ep) { return; } s.ep = true; const r = i(s); fetch(s.href, r); } })(); var Ct = 4294967295; function al(e, t, i) { var n = i / 4294967296; var s = i; e.setUint32(t, n); e.setUint32(t + 4, s); } function zo(e, t, i) { var n = Math.floor(i / 4294967296); var s = i; e.setUint32(t, n); e.setUint32(t + 4, s); } function Bo(e, t) { var i = e.getInt32(t); var n = e.getUint32(t + 4); return i * 4294967296 + n; } function ll(e, t) { var i = e.getUint32(t); var n = e.getUint32(t + 4); return i * 4294967296 + n; } var Vn; var Nn; var Un; var Rn = (typeof process === "undefined" || ((Vn = process == null ? undefined : process.env) === null || Vn === undefined ? undefined : Vn.TEXT_ENCODING) !== "never") && typeof TextEncoder !== "undefined" && typeof TextDecoder !== "undefined"; function vr(e) { for (var t = e.length, i = 0, n = 0; n < t;) { var s = e.charCodeAt(n++); if (s & 4294967168) { if (!(s & 4294965248)) { i += 2; } else { if (s >= 55296 && s <= 56319 && n < t) { var r = e.charCodeAt(n); if ((r & 64512) === 56320) { ++n; s = ((s & 1023) << 10) + (r & 1023) + 65536; } } if (s & 4294901760) { i += 4; } else { i += 3; } } } else { i++; continue; } } return i; } function cl(e, t, i) { for (var n = e.length, s = i, r = 0; r < n;) { var o = e.charCodeAt(r++); if (o & 4294967168) { if (!(o & 4294965248)) { t[s++] = o >> 6 & 31 | 192; } else { if (o >= 55296 && o <= 56319 && r < n) { var l = e.charCodeAt(r); if ((l & 64512) === 56320) { ++r; o = ((o & 1023) << 10) + (l & 1023) + 65536; } } if (o & 4294901760) { t[s++] = o >> 18 & 7 | 240; t[s++] = o >> 12 & 63 | 128; t[s++] = o >> 6 & 63 | 128; } else { t[s++] = o >> 12 & 15 | 224; t[s++] = o >> 6 & 63 | 128; } } } else { t[s++] = o; continue; } t[s++] = o & 63 | 128; } } var Oi = Rn ? new TextEncoder() : undefined; var hl = Rn ? typeof process !== "undefined" && ((Nn = process == null ? undefined : process.env) === null || Nn === undefined ? undefined : Nn.TEXT_ENCODING) !== "force" ? 200 : 0 : Ct; function ul(e, t, i) { t.set(Oi.encode(e), i); } function fl(e, t, i) { Oi.encodeInto(e, t.subarray(i)); } var dl = Oi != null && Oi.encodeInto ? fl : ul; var pl = 4096; function Ho(e, t, i) { for (var n = t, s = n + i, r = [], o = ""; n < s;) { var l = e[n++]; if (!(l & 128)) { r.push(l); } else if ((l & 224) === 192) { var c = e[n++] & 63; r.push((l & 31) << 6 | c); } else if ((l & 240) === 224) { var c = e[n++] & 63; var a = e[n++] & 63; r.push((l & 31) << 12 | c << 6 | a); } else if ((l & 248) === 240) { var c = e[n++] & 63; var a = e[n++] & 63; var f = e[n++] & 63; var d = (l & 7) << 18 | c << 12 | a << 6 | f; if (d > 65535) { d -= 65536; r.push(d >>> 10 & 1023 | 55296); d = d & 1023 | 56320; } r.push(d); } else { r.push(l); } if (r.length >= pl) { o += String.fromCharCode.apply(String, r); r.length = 0; } } if (r.length > 0) { o += String.fromCharCode.apply(String, r); } return o; } var ml = Rn ? new TextDecoder() : null; var gl = Rn ? typeof process !== "undefined" && ((Un = process == null ? undefined : process.env) === null || Un === undefined ? undefined : Un.TEXT_DECODER) !== "force" ? 200 : 0 : Ct; function yl(e, t, i) { var n = e.subarray(t, t + i); return ml.decode(n); } var en = function () { function e(t, i) { this.type = t; this.data = i; } return e; }(); var wl = globalThis && globalThis.__extends || function () { function e(t, i) { e = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (n, s) { n.__proto__ = s; } || function (n, s) { for (var r in s) { if (Object.prototype.hasOwnProperty.call(s, r)) { n[r] = s[r]; } } }; return e(t, i); } return function (t, i) { if (typeof i != "function" && i !== null) { throw new TypeError("Class extends value " + String(i) + " is not a constructor or null"); } e(t, i); function n() { this.constructor = t; } t.prototype = i === null ? Object.create(i) : (n.prototype = i.prototype, new n()); }; }(); var Je = function (e) { wl(t, e); function t(i) { var n = e.call(this, i) || this; var s = Object.create(t.prototype); Object.setPrototypeOf(n, s); Object.defineProperty(n, "name", { configurable: true, enumerable: false, value: t.name }); return n; } return t; }(Error); var vl = -1; var kl = 4294967295; var xl = 17179869183; function bl(e) { var t = e.sec; var i = e.nsec; if (t >= 0 && i >= 0 && t <= xl) { if (i === 0 && t <= kl) { var n = new Uint8Array(4); var s = new DataView(n.buffer); s.setUint32(0, t); return n; } else { var r = t / 4294967296; var o = t & 4294967295; var n = new Uint8Array(8); var s = new DataView(n.buffer); s.setUint32(0, i << 2 | r & 3); s.setUint32(4, o); return n; } } else { var n = new Uint8Array(12); var s = new DataView(n.buffer); s.setUint32(0, i); zo(s, 4, t); return n; } } function Sl(e) { var t = e.getTime(); var i = Math.floor(t / 1000); var n = (t - i * 1000) * 1000000; var s = Math.floor(n / 1000000000); return { sec: i + s, nsec: n - s * 1000000000 }; } function Il(e) { if (e instanceof Date) { var t = Sl(e); return bl(t); } else { return null; } } function Tl(e) { var t = new DataView(e.buffer, e.byteOffset, e.byteLength); switch (e.byteLength) { case 4: { var i = t.getUint32(0); var n = 0; return { sec: i, nsec: n }; } case 8: { var s = t.getUint32(0); var r = t.getUint32(4); var i = (s & 3) * 4294967296 + r; var n = s >>> 2; return { sec: i, nsec: n }; } case 12: { var i = Bo(t, 4); var n = t.getUint32(0); return { sec: i, nsec: n }; } default: throw new Je(`Unrecognized data size for timestamp (expected 4, 8, or 12): ${e.length}`); } } function Ml(e) { var t = Tl(e); return new Date(t.sec * 1000 + t.nsec / 1000000); } var El = { type: vl, encode: Il, decode: Ml }; var Lo = function () { function e() { this.builtInEncoders = []; this.builtInDecoders = []; this.encoders = []; this.decoders = []; this.register(El); } e.prototype.register = function (t) { var i = t.type; var n = t.encode; var s = t.decode; if (i >= 0) { this.encoders[i] = n; this.decoders[i] = s; } else { var r = 1 + i; this.builtInEncoders[r] = n; this.builtInDecoders[r] = s; } }; e.prototype.tryToEncode = function (t, i) { for (var n = 0; n < this.builtInEncoders.length; n++) { var s = this.builtInEncoders[n]; if (s != null) { var r = s(t, i); if (r != null) { var o = -1 - n; return new en(o, r); } } } for (var n = 0; n < this.encoders.length; n++) { var s = this.encoders[n]; if (s != null) { var r = s(t, i); if (r != null) { var o = n; return new en(o, r); } } } if (t instanceof en) { return t; } else { return null; } }; e.prototype.decode = function (t, i, n) { var s = i < 0 ? this.builtInDecoders[-1 - i] : this.decoders[i]; if (s) { return s(t, i, n); } else { return new en(i, t); } }; e.defaultCodec = new e(); return e; }(); function yn(e) { if (e instanceof Uint8Array) { return e; } else if (ArrayBuffer.isView(e)) { return new Uint8Array(e.buffer, e.byteOffset, e.byteLength); } else if (e instanceof ArrayBuffer) { return new Uint8Array(e); } else { return Uint8Array.from(e); } } function Cl(e) { if (e instanceof ArrayBuffer) { return new DataView(e); } var t = yn(e); return new DataView(t.buffer, t.byteOffset, t.byteLength); } var Pl = 100; var $l = 2048; var Rl = function () { function e(t, i, n, s, r, o, l, c) { if (t === undefined) { t = Lo.defaultCodec; } if (i === undefined) { i = undefined; } if (n === undefined) { n = Pl; } if (s === undefined) { s = $l; } if (r === undefined) { r = false; } if (o === undefined) { o = false; } if (l === undefined) { l = false; } if (c === undefined) { c = false; } this.extensionCodec = t; this.context = i; this.maxDepth = n; this.initialBufferSize = s; this.sortKeys = r; this.forceFloat32 = o; this.ignoreUndefined = l; this.forceIntegerToFloat = c; this.pos = 0; this.view = new DataView(new ArrayBuffer(this.initialBufferSize)); this.bytes = new Uint8Array(this.view.buffer); } e.prototype.reinitializeState = function () { this.pos = 0; }; e.prototype.encodeSharedRef = function (t) { this.reinitializeState(); this.doEncode(t, 1); return this.bytes.subarray(0, this.pos); }; e.prototype.encode = function (t) { this.reinitializeState(); this.doEncode(t, 1); return this.bytes.slice(0, this.pos); }; e.prototype.doEncode = function (t, i) { if (i > this.maxDepth) { throw new Error(`Too deep objects in depth ${i}`); } if (t == null) { this.encodeNil(); } else if (typeof t == "boolean") { this.encodeBoolean(t); } else if (typeof t == "number") { this.encodeNumber(t); } else if (typeof t == "string") { this.encodeString(t); } else { this.encodeObject(t, i); } }; e.prototype.ensureBufferSizeToWrite = function (t) { var i = this.pos + t; if (this.view.byteLength < i) { this.resizeBuffer(i * 2); } }; e.prototype.resizeBuffer = function (t) { var i = new ArrayBuffer(t); var n = new Uint8Array(i); var s = new DataView(i); n.set(this.bytes); this.view = s; this.bytes = n; }; e.prototype.encodeNil = function () { this.writeU8(192); }; e.prototype.encodeBoolean = function (t) { if (t === false) { this.writeU8(194); } else { this.writeU8(195); } }; e.prototype.encodeNumber = function (t) { if (Number.isSafeInteger(t) && !this.forceIntegerToFloat) { if (t >= 0) { if (t < 128) { this.writeU8(t); } else if (t < 256) { this.writeU8(204); this.writeU8(t); } else if (t < 65536) { this.writeU8(205); this.writeU16(t); } else if (t < 4294967296) { this.writeU8(206); this.writeU32(t); } else { this.writeU8(207); this.writeU64(t); } } else if (t >= -32) { this.writeU8(t + 32 | 224); } else if (t >= -128) { this.writeU8(208); this.writeI8(t); } else if (t >= -32768) { this.writeU8(209); this.writeI16(t); } else if (t >= -2147483648) { this.writeU8(210); this.writeI32(t); } else { this.writeU8(211); this.writeI64(t); } } else if (this.forceFloat32) { this.writeU8(202); this.writeF32(t); } else { this.writeU8(203); this.writeF64(t); } }; e.prototype.writeStringHeader = function (t) { if (t < 32) { this.writeU8(160 + t); } else if (t < 256) { this.writeU8(217); this.writeU8(t); } else if (t < 65536) { this.writeU8(218); this.writeU16(t); } else if (t < 4294967296) { this.writeU8(219); this.writeU32(t); } else { throw new Error(`Too long string: ${t} bytes in UTF-8`); } }; e.prototype.encodeString = function (t) { var i = 5; var n = t.length; if (n > hl) { var s = vr(t); this.ensureBufferSizeToWrite(i + s); this.writeStringHeader(s); dl(t, this.bytes, this.pos); this.pos += s; } else { var s = vr(t); this.ensureBufferSizeToWrite(i + s); this.writeStringHeader(s); cl(t, this.bytes, this.pos); this.pos += s; } }; e.prototype.encodeObject = function (t, i) { var n = this.extensionCodec.tryToEncode(t, this.context); if (n != null) { this.encodeExtension(n); } else if (Array.isArray(t)) { this.encodeArray(t, i); } else if (ArrayBuffer.isView(t)) { this.encodeBinary(t); } else if (typeof t == "object") { this.encodeMap(t, i); } else { throw new Error(`Unrecognized object: ${Object.prototype.toString.apply(t)}`); } }; e.prototype.encodeBinary = function (t) { var i = t.byteLength; if (i < 256) { this.writeU8(196); this.writeU8(i); } else if (i < 65536) { this.writeU8(197); this.writeU16(i); } else if (i < 4294967296) { this.writeU8(198); this.writeU32(i); } else { throw new Error(`Too large binary: ${i}`); } var n = yn(t); this.writeU8a(n); }; e.prototype.encodeArray = function (t, i) { var n = t.length; if (n < 16) { this.writeU8(144 + n); } else if (n < 65536) { this.writeU8(220); this.writeU16(n); } else if (n < 4294967296) { this.writeU8(221); this.writeU32(n); } else { throw new Error(`Too large array: ${n}`); } for (var s = 0, r = t; s < r.length; s++) { var o = r[s]; this.doEncode(o, i + 1); } }; e.prototype.countWithoutUndefined = function (t, i) { for (var n = 0, s = 0, r = i; s < r.length; s++) { var o = r[s]; if (t[o] !== undefined) { n++; } } return n; }; e.prototype.encodeMap = function (t, i) { var n = Object.keys(t); if (this.sortKeys) { n.sort(); } var s = this.ignoreUndefined ? this.countWithoutUndefined(t, n) : n.length; if (s < 16) { this.writeU8(128 + s); } else if (s < 65536) { this.writeU8(222); this.writeU16(s); } else if (s < 4294967296) { this.writeU8(223); this.writeU32(s); } else { throw new Error(`Too large map object: ${s}`); } for (var r = 0, o = n; r < o.length; r++) { var l = o[r]; var c = t[l]; if (!(this.ignoreUndefined && c === undefined)) { this.encodeString(l); this.doEncode(c, i + 1); } } }; e.prototype.encodeExtension = function (t) { var i = t.data.length; if (i === 1) { this.writeU8(212); } else if (i === 2) { this.writeU8(213); } else if (i === 4) { this.writeU8(214); } else if (i === 8) { this.writeU8(215); } else if (i === 16) { this.writeU8(216); } else if (i < 256) { this.writeU8(199); this.writeU8(i); } else if (i < 65536) { this.writeU8(200); this.writeU16(i); } else if (i < 4294967296) { this.writeU8(201); this.writeU32(i); } else { throw new Error(`Too large extension object: ${i}`); } this.writeI8(t.type); this.writeU8a(t.data); }; e.prototype.writeU8 = function (t) { this.ensureBufferSizeToWrite(1); this.view.setUint8(this.pos, t); this.pos++; }; e.prototype.writeU8a = function (t) { var i = t.length; this.ensureBufferSizeToWrite(i); this.bytes.set(t, this.pos); this.pos += i; }; e.prototype.writeI8 = function (t) { this.ensureBufferSizeToWrite(1); this.view.setInt8(this.pos, t); this.pos++; }; e.prototype.writeU16 = function (t) { this.ensureBufferSizeToWrite(2); this.view.setUint16(this.pos, t); this.pos += 2; }; e.prototype.writeI16 = function (t) { this.ensureBufferSizeToWrite(2); this.view.setInt16(this.pos, t); this.pos += 2; }; e.prototype.writeU32 = function (t) { this.ensureBufferSizeToWrite(4); this.view.setUint32(this.pos, t); this.pos += 4; }; e.prototype.writeI32 = function (t) { this.ensureBufferSizeToWrite(4); this.view.setInt32(this.pos, t); this.pos += 4; }; e.prototype.writeF32 = function (t) { this.ensureBufferSizeToWrite(4); this.view.setFloat32(this.pos, t); this.pos += 4; }; e.prototype.writeF64 = function (t) { this.ensureBufferSizeToWrite(8); this.view.setFloat64(this.pos, t); this.pos += 8; }; e.prototype.writeU64 = function (t) { this.ensureBufferSizeToWrite(8); al(this.view, this.pos, t); this.pos += 8; }; e.prototype.writeI64 = function (t) { this.ensureBufferSizeToWrite(8); zo(this.view, this.pos, t); this.pos += 8; }; return e; }(); function Wn(e) { return `${e < 0 ? "-" : ""}0x${Math.abs(e).toString(16).padStart(2, "0")}`; } var Al = 16; var Dl = 16; var Ol = function () { function e(t, i) { if (t === undefined) { t = Al; } if (i === undefined) { i = Dl; } this.maxKeyLength = t; this.maxLengthPerKey = i; this.hit = 0; this.miss = 0; this.caches = []; for (var n = 0; n < this.maxKeyLength; n++) { this.caches.push([]); } } e.prototype.canBeCached = function (t) { return t > 0 && t <= this.maxKeyLength; }; e.prototype.find = function (t, i, n) { var s = this.caches[n - 1]; e: for (var r = 0, o = s; r < o.length; r++) { for (var l = o[r], c = l.bytes, a = 0; a < n; a++) { if (c[a] !== t[i + a]) { continue e; } } return l.str; } return null; }; e.prototype.store = function (t, i) { var n = this.caches[t.length - 1]; var s = { bytes: t, str: i }; if (n.length >= this.maxLengthPerKey) { n[Math.random() * n.length | 0] = s; } else { n.push(s); } }; e.prototype.decode = function (t, i, n) { var s = this.find(t, i, n); if (s != null) { this.hit++; return s; } this.miss++; var r = Ho(t, i, n); var o = Uint8Array.prototype.slice.call(t, i, i + n); this.store(o, r); return r; }; return e; }(); var _l = globalThis && globalThis.__awaiter || function (e, t, i, n) { function s(r) { if (r instanceof i) { return r; } else { return new i(function (o) { o(r); }); } } return new (i || (i = Promise))(function (r, o) { function l(f) { try { a(n.next(f)); } catch (d) { o(d); } } function c(f) { try { a(n.throw(f)); } catch (d) { o(d); } } function a(f) { if (f.done) { r(f.value); } else { s(f.value).then(l, c); } } a((n = n.apply(e, t || [])).next()); }); }; var Xn = globalThis && globalThis.__generator || function (e, t) { var i = { label: 0, sent: function () { if (r[0] & 1) { throw r[1]; } return r[1]; }, trys: [], ops: [] }; var n; var s; var r; var o; o = { next: l(0), throw: l(1), return: l(2) }; if (typeof Symbol == "function") { o[Symbol.iterator] = function () { return this; }; } return o; function l(a) { return function (f) { return c([a, f]); }; } function c(a) { if (n) { throw new TypeError("Generator is already executing."); } for (; i;) { try { n = 1; if (s && (r = a[0] & 2 ? s.return : a[0] ? s.throw || ((r = s.return) && r.call(s), 0) : s.next) && !(r = r.call(s, a[1])).done) { return r; } s = 0; if (r) { a = [a[0] & 2, r.value]; } switch (a[0]) { case 0: case 1: r = a; break; case 4: i.label++; return { value: a[1], done: false }; case 5: i.label++; s = a[1]; a = [0]; continue; case 7: a = i.ops.pop(); i.trys.pop(); continue; default: r = i.trys; if (!(r = r.length > 0 && r[r.length - 1]) && (a[0] === 6 || a[0] === 2)) { i = 0; continue; } if (a[0] === 3 && (!r || a[1] > r[0] && a[1] < r[3])) { i.label = a[1]; break; } if (a[0] === 6 && i.label < r[1]) { i.label = r[1]; r = a; break; } if (r && i.label < r[2]) { i.label = r[2]; i.ops.push(a); break; } if (r[2]) { i.ops.pop(); } i.trys.pop(); continue; } a = t.call(e, i); } catch (f) { a = [6, f]; s = 0; } finally { n = r = 0; } } if (a[0] & 5) { throw a[1]; } return { value: a[0] ? a[1] : undefined, done: true }; } }; var kr = globalThis && globalThis.__asyncValues || function (e) { if (!Symbol.asyncIterator) { throw new TypeError("Symbol.asyncIterator is not defined."); } var t = e[Symbol.asyncIterator]; var i; if (t) { return t.call(e); } else { e = typeof __values == "function" ? __values(e) : e[Symbol.iterator](); i = {}; n("next"); n("throw"); n("return"); i[Symbol.asyncIterator] = function () { return this; }; return i; } function n(r) { i[r] = e[r] && function (o) { return new Promise(function (l, c) { o = e[r](o); s(l, c, o.done, o.value); }); }; } function s(r, o, l, c) { Promise.resolve(c).then(function (a) { r({ value: a, done: l }); }, o); } }; var ai = globalThis && globalThis.__await || function (e) { if (this instanceof ai) { this.v = e; return this; } else { return new ai(e); } }; var zl = globalThis && globalThis.__asyncGenerator || function (e, t, i) { if (!Symbol.asyncIterator) { throw new TypeError("Symbol.asyncIterator is not defined."); } var n = i.apply(e, t || []); var s; var r = []; s = {}; o("next"); o("throw"); o("return"); s[Symbol.asyncIterator] = function () { return this; }; return s; function o(u) { if (n[u]) { s[u] = function (p) { return new Promise(function (w, x) { if (!(r.push([u, p, w, x]) > 1)) { l(u, p); } }); }; } } function l(u, p) { try { c(n[u](p)); } catch (w) { d(r[0][3], w); } } function c(u) { if (u.value instanceof ai) { Promise.resolve(u.value.v).then(a, f); } else { d(r[0][2], u); } } function a(u) { l("next", u); } function f(u) { l("throw", u); } function d(u, p) { u(p); r.shift(); if (r.length) { l(r[0][0], r[0][1]); } } }; function Bl(e) { var t = typeof e; return t === "string" || t === "number"; } var Ii = -1; var Ys = new DataView(new ArrayBuffer(0)); var Hl = new Uint8Array(Ys.buffer); var Ss = function () { try { Ys.getInt8(0); } catch (e) { return e.constructor; } throw new Error("never reached"); }(); var xr = new Ss("Insufficient data"); var Ll = new Ol(); var Fl = function () { function e(t, i, n, s, r, o, l, c) { if (t === undefined) { t = Lo.defaultCodec; } if (i === undefined) { i = undefined; } if (n === undefined) { n = Ct; } if (s === undefined) { s = Ct; } if (r === undefined) { r = Ct; } if (o === undefined) { o = Ct; } if (l === undefined) { l = Ct; } if (c === undefined) { c = Ll; } this.extensionCodec = t; this.context = i; this.maxStrLength = n; this.maxBinLength = s; this.maxArrayLength = r; this.maxMapLength = o; this.maxExtLength = l; this.keyDecoder = c; this.totalPos = 0; this.pos = 0; this.view = Ys; this.bytes = Hl; this.headByte = Ii; this.stack = []; } e.prototype.reinitializeState = function () { this.totalPos = 0; this.headByte = Ii; this.stack.length = 0; }; e.prototype.setBuffer = function (t) { this.bytes = yn(t); this.view = Cl(this.bytes); this.pos = 0; }; e.prototype.appendBuffer = function (t) { if (this.headByte === Ii && !this.hasRemaining(1)) { this.setBuffer(t); } else { var i = this.bytes.subarray(this.pos); var n = yn(t); var s = new Uint8Array(i.length + n.length); s.set(i); s.set(n, i.length); this.setBuffer(s); } }; e.prototype.hasRemaining = function (t) { return this.view.byteLength - this.pos >= t; }; e.prototype.createExtraByteError = function (t) { var i = this; var n = i.view; var s = i.pos; return new RangeError(`Extra ${n.byteLength - s} of ${n.byteLength} byte(s) found at buffer[${t}]`); }; e.prototype.decode = function (t) { this.reinitializeState(); this.setBuffer(t); var i = this.doDecodeSync(); if (this.hasRemaining(1)) { throw this.createExtraByteError(this.pos); } return i; }; e.prototype.decodeMulti = function (t) { return Xn(this, function (i) { switch (i.label) { case 0: this.reinitializeState(); this.setBuffer(t); i.label = 1; case 1: if (this.hasRemaining(1)) { return [4, this.doDecodeSync()]; } else { return [3, 3]; } case 2: i.sent(); return [3, 1]; case 3: return [2]; } }); }; e.prototype.decodeAsync = function (t) { var i; var n; var s; var r; return _l(this, undefined, undefined, function () { var o; var l; var c; var a; var f; var d; var u; var p; return Xn(this, function (w) { switch (w.label) { case 0: o = false; w.label = 1; case 1: w.trys.push([1, 6, 7, 12]); i = kr(t); w.label = 2; case 2: return [4, i.next()]; case 3: n = w.sent(); if (!!n.done) { return [3, 5]; } c = n.value; if (o) { throw this.createExtraByteError(this.totalPos); } this.appendBuffer(c); try { l = this.doDecodeSync(); o = true; } catch (x) { if (!(x instanceof Ss)) { throw x; } } this.totalPos += this.pos; w.label = 4; case 4: return [3, 2]; case 5: return [3, 12]; case 6: a = w.sent(); s = { error: a }; return [3, 12]; case 7: w.trys.push([7,, 10, 11]); if (n && !n.done && (r = i.return)) { return [4, r.call(i)]; } else { return [3, 9]; } case 8: w.sent(); w.label = 9; case 9: return [3, 11]; case 10: if (s) { throw s.error; } return [7]; case 11: return [7]; case 12: if (o) { if (this.hasRemaining(1)) { throw this.createExtraByteError(this.totalPos); } return [2, l]; } f = this; d = f.headByte; u = f.pos; p = f.totalPos; throw new RangeError(`Insufficient data in parsing ${Wn(d)} at ${p} (${u} in the current buffer)`); } }); }); }; e.prototype.decodeArrayStream = function (t) { return this.decodeMultiAsync(t, true); }; e.prototype.decodeStream = function (t) { return this.decodeMultiAsync(t, false); }; e.prototype.decodeMultiAsync = function (t, i) { return zl(this, arguments, function () { var s; var r; var o; var l; var c; var a; var f; var d; var u; return Xn(this, function (p) { switch (p.label) { case 0: s = i; r = -1; p.label = 1; case 1: p.trys.push([1, 13, 14, 19]); o = kr(t); p.label = 2; case 2: return [4, ai(o.next())]; case 3: l = p.sent(); if (!!l.done) { return [3, 12]; } c = l.value; if (i && r === 0) { throw this.createExtraByteError(this.totalPos); } this.appendBuffer(c); if (s) { r = this.readArraySize(); s = false; this.complete(); } p.label = 4; case 4: p.trys.push([4, 9,, 10]); p.label = 5; case 5: return [4, ai(this.doDecodeSync())]; case 6: return [4, p.sent()]; case 7: p.sent(); if (--r === 0) { return [3, 8]; } else { return [3, 5]; } case 8: return [3, 10]; case 9: a = p.sent(); if (!(a instanceof Ss)) { throw a; } return [3, 10]; case 10: this.totalPos += this.pos; p.label = 11; case 11: return [3, 2]; case 12: return [3, 19]; case 13: f = p.sent(); d = { error: f }; return [3, 19]; case 14: p.trys.push([14,, 17, 18]); if (l && !l.done && (u = o.return)) { return [4, ai(u.call(o))]; } else { return [3, 16]; } case 15: p.sent(); p.label = 16; case 16: return [3, 18]; case 17: if (d) { throw d.error; } return [7]; case 18: return [7]; case 19: return [2]; } }); }); }; e.prototype.doDecodeSync = function () { e: for (;;) { var t = this.readHeadByte(); var i = undefined; if (t >= 224) { i = t - 256; } else if (t < 192) { if (t < 128) { i = t; } else if (t < 144) { var n = t - 128; if (n !== 0) { this.pushMapState(n); this.complete(); continue e; } else { i = {}; } } else if (t < 160) { var n = t - 144; if (n !== 0) { this.pushArrayState(n); this.complete(); continue e; } else { i = []; } } else { var s = t - 160; i = this.decodeUtf8String(s, 0); } } else if (t === 192) { i = null; } else if (t === 194) { i = false; } else if (t === 195) { i = true; } else if (t === 202) { i = this.readF32(); } else if (t === 203) { i = this.readF64(); } else if (t === 204) { i = this.readU8(); } else if (t === 205) { i = this.readU16(); } else if (t === 206) { i = this.readU32(); } else if (t === 207) { i = this.readU64(); } else if (t === 208) { i = this.readI8(); } else if (t === 209) { i = this.readI16(); } else if (t === 210) { i = this.readI32(); } else if (t === 211) { i = this.readI64(); } else if (t === 217) { var s = this.lookU8(); i = this.decodeUtf8String(s, 1); } else if (t === 218) { var s = this.lookU16(); i = this.decodeUtf8String(s, 2); } else if (t === 219) { var s = this.lookU32(); i = this.decodeUtf8String(s, 4); } else if (t === 220) { var n = this.readU16(); if (n !== 0) { this.pushArrayState(n); this.complete(); continue e; } else { i = []; } } else if (t === 221) { var n = this.readU32(); if (n !== 0) { this.pushArrayState(n); this.complete(); continue e; } else { i = []; } } else if (t === 222) { var n = this.readU16(); if (n !== 0) { this.pushMapState(n); this.complete(); continue e; } else { i = {}; } } else if (t === 223) { var n = this.readU32(); if (n !== 0) { this.pushMapState(n); this.complete(); continue e; } else { i = {}; } } else if (t === 196) { var n = this.lookU8(); i = this.decodeBinary(n, 1); } else if (t === 197) { var n = this.lookU16(); i = this.decodeBinary(n, 2); } else if (t === 198) { var n = this.lookU32(); i = this.decodeBinary(n, 4); } else if (t === 212) { i = this.decodeExtension(1, 0); } else if (t === 213) { i = this.decodeExtension(2, 0); } else if (t === 214) { i = this.decodeExtension(4, 0); } else if (t === 215) { i = this.decodeExtension(8, 0); } else if (t === 216) { i = this.decodeExtension(16, 0); } else if (t === 199) { var n = this.lookU8(); i = this.decodeExtension(n, 1); } else if (t === 200) { var n = this.lookU16(); i = this.decodeExtension(n, 2); } else if (t === 201) { var n = this.lookU32(); i = this.decodeExtension(n, 4); } else { throw new Je(`Unrecognized type byte: ${Wn(t)}`); } this.complete(); for (var r = this.stack; r.length > 0;) { var o = r[r.length - 1]; if (o.type === 0) { o.array[o.position] = i; o.position++; if (o.position === o.size) { r.pop(); i = o.array; } else { continue e; } } else if (o.type === 1) { if (!Bl(i)) { throw new Je("The type of key must be string or number but " + typeof i); } if (i === "__proto__") { throw new Je("The key __proto__ is not allowed"); } o.key = i; o.type = 2; continue e; } else { o.map[o.key] = i; o.readCount++; if (o.readCount === o.size) { r.pop(); i = o.map; } else { o.key = null; o.type = 1; continue e; } } } return i; } }; e.prototype.readHeadByte = function () { if (this.headByte === Ii) { this.headByte = this.readU8(); } return this.headByte; }; e.prototype.complete = function () { this.headByte = Ii; }; e.prototype.readArraySize = function () { var t = this.readHeadByte(); switch (t) { case 220: return this.readU16(); case 221: return this.readU32(); default: { if (t < 160) { return t - 144; } throw new Je(`Unrecognized array type byte: ${Wn(t)}`); } } }; e.prototype.pushMapState = function (t) { if (t > this.maxMapLength) { throw new Je(`Max length exceeded: map length (${t}) > maxMapLengthLength (${this.maxMapLength})`); } this.stack.push({ type: 1, size: t, key: null, readCount: 0, map: {} }); }; e.prototype.pushArrayState = function (t) { if (t > this.maxArrayLength) { throw new Je(`Max length exceeded: array length (${t}) > maxArrayLength (${this.maxArrayLength})`); } this.stack.push({ type: 0, size: t, array: new Array(t), position: 0 }); }; e.prototype.decodeUtf8String = function (t, i) { var n; if (t > this.maxStrLength) { throw new Je(`Max length exceeded: UTF-8 byte length (${t}) > maxStrLength (${this.maxStrLength})`); } if (this.bytes.byteLength < this.pos + i + t) { throw xr; } var s = this.pos + i; var r; if (this.stateIsMapKey() && !((n = this.keyDecoder) === null || n === undefined) && n.canBeCached(t)) { r = this.keyDecoder.decode(this.bytes, s, t); } else if (t > gl) { r = yl(this.bytes, s, t); } else { r = Ho(this.bytes, s, t); } this.pos += i + t; return r; }; e.prototype.stateIsMapKey = function () { if (this.stack.length > 0) { var t = this.stack[this.stack.length - 1]; return t.type === 1; } return false; }; e.prototype.decodeBinary = function (t, i) { if (t > this.maxBinLength) { throw new Je(`Max length exceeded: bin length (${t}) > maxBinLength (${this.maxBinLength})`); } if (!this.hasRemaining(t + i)) { throw xr; } var n = this.pos + i; var s = this.bytes.subarray(n, n + t); this.pos += i + t; return s; }; e.prototype.decodeExtension = function (t, i) { if (t > this.maxExtLength) { throw new Je(`Max length exceeded: ext length (${t}) > maxExtLength (${this.maxExtLength})`); } var n = this.view.getInt8(this.pos + i); var s = this.decodeBinary(t, i + 1); return this.extensionCodec.decode(s, n, this.context); }; e.prototype.lookU8 = function () { return this.view.getUint8(this.pos); }; e.prototype.lookU16 = function () { return this.view.getUint16(this.pos); }; e.prototype.lookU32 = function () { return this.view.getUint32(this.pos); }; e.prototype.readU8 = function () { var t = this.view.getUint8(this.pos); this.pos++; return t; }; e.prototype.readI8 = function () { var t = this.view.getInt8(this.pos); this.pos++; return t; }; e.prototype.readU16 = function () { var t = this.view.getUint16(this.pos); this.pos += 2; return t; }; e.prototype.readI16 = function () { var t = this.view.getInt16(this.pos); this.pos += 2; return t; }; e.prototype.readU32 = function () { var t = this.view.getUint32(this.pos); this.pos += 4; return t; }; e.prototype.readI32 = function () { var t = this.view.getInt32(this.pos); this.pos += 4; return t; }; e.prototype.readU64 = function () { var t = ll(this.view, this.pos); this.pos += 8; return t; }; e.prototype.readI64 = function () { var t = Bo(this.view, this.pos); this.pos += 8; return t; }; e.prototype.readF32 = function () { var t = this.view.getFloat32(this.pos); this.pos += 4; return t; }; e.prototype.readF64 = function () { var t = this.view.getFloat64(this.pos); this.pos += 8; return t; }; return e; }(); var Vt = typeof globalThis !== "undefined" ? globalThis : typeof window !== "undefined" ? window : typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : {}; function An(e) { if (e && e.__esModule && Object.prototype.hasOwnProperty.call(e, "default")) { return e.default; } else { return e; } } var Fo = { exports: {} }; var xe = Fo.exports = {}; var Qe; var je; function Is() { throw new Error("setTimeout has not been defined"); } function Ts() { throw new Error("clearTimeout has not been defined"); } (function () { try { if (typeof setTimeout == "function") { Qe = setTimeout; } else { Qe = Is; } } catch { Qe = Is; } try { if (typeof clearTimeout == "function") { je = clearTimeout; } else { je = Ts; } } catch { je = Ts; } })(); function Vo(e) { if (Qe === setTimeout) { return (// TOLOOK setTimeout(e, 0) ); } if ((Qe === Is || !Qe) && setTimeout) { Qe = setTimeout; return (// TOLOOK setTimeout(e, 0) ); } try { return Qe(e, 0); } catch { try { return Qe.call(null, e, 0); } catch { return Qe.call(this, e, 0); } } } function Vl(e) { if (je === clearTimeout) { return clearTimeout(e); } if ((je === Ts || !je) && clearTimeout) { je = clearTimeout; return clearTimeout(e); } try { return je(e); } catch { try { return je.call(null, e); } catch { return je.call(this, e); } } } var ct = []; var li = false; var $t; var on = -1; function Nl() { if (!(!li || !$t)) { li = false; if ($t.length) { ct = $t.concat(ct); } else { on = -1; } if (ct.length) { No(); } } } function No() { if (!li) { var e = Vo(Nl); li = true; for (var t = ct.length; t;) { $t = ct; ct = []; for (; ++on < t;) { if ($t) { $t[on].run(); } } on = -1; t = ct.length; } $t = null; li = false; Vl(e); } } xe.nextTick = function (e) { var t = new Array(arguments.length - 1); if (arguments.length > 1) { for (var i = 1; i < arguments.length; i++) { t[i - 1] = arguments[i]; } } ct.push(new Uo(e, t)); if (ct.length === 1 && !li) { Vo(No); } }; function Uo(e, t) { this.fun = e; this.array = t; } Uo.prototype.run = function () { this.fun.apply(null, this.array); }; xe.title = "browser"; xe.browser = true; xe.env = {}; xe.argv = []; xe.version = ""; xe.versions = {}; function ft() {} xe.on = ft; xe.addListener = ft; xe.once = ft; xe.off = ft; xe.removeListener = ft; xe.removeAllListeners = ft; xe.emit = ft; xe.prependListener = ft; xe.prependOnceListener = ft; xe.listeners = function (e) { return []; }; xe.binding = function (e) { throw new Error("process.binding is not supported"); }; xe.cwd = function () { return "/"; }; xe.chdir = function (e) { throw new Error("process.chdir is not supported"); }; xe.umask = function () { return 0; }; var Ul = Fo.exports; const Ms = An(Ul); const Wl = 1920; const Xl = 1080; const ql = 9; const Wo = Ms && Ms.argv.indexOf("--largeserver") != -1 ? 80 : 40; const Gl = Wo + 10; const Yl = 6; const Kl = 3000; const Zl = 10; const Jl = 5; const Ql = 50; const jl = 4.5; const ec = 15; const tc = 0.9; const ic = 3000; const nc = 60; const sc = 35; const rc = 3000; const oc = 500; const ac = Ms && {}.IS_SANDBOX; const lc = 100; const cc = Math.PI / 2.6; const hc = 10; const uc = 0.25; const fc = Math.PI / 2; const dc = 35; const pc = 0.0016; const mc = 0.993; const gc = 34; const yc = ["#bf8f54", "#cbb091", "#896c4b", "#fadadc", "#ececec", "#c37373", "#4c4c4c", "#ecaff7", "#738cc3", "#8bc373"]; const wc = 7; const vc = 0.06; const kc = ["Sid", "Steph", "Bmoe", "Romn", "Jononthecool", "Fiona", "Vince", "Nathan", "Nick", "Flappy", "Ronald", "Otis", "Pepe", "Mc Donald", "Theo", "Fabz", "Oliver", "Jeff", "Jimmy", "Helena", "Reaper", "Ben", "Alan", "Naomi", "XYZ", "Clever", "Jeremy", "Mike", "Destined", "Stallion", "Allison", "Meaty", "Sophia", "Vaja", "Joey", "Pendy", "Murdoch", "Theo", "Jared", "July", "Sonia", "Mel", "Dexter", "Quinn", "Milky"]; const xc = Math.PI / 3; const an = [{ id: 0, src: "", xp: 0, val: 1 }, { id: 1, src: "_g", xp: 3000, val: 1.1 }, { id: 2, src: "_d", xp: 7000, val: 1.18 }, { id: 3, src: "_r", poison: true, xp: 12000, val: 1.18 }]; const bc = function (e) { const t = e.weaponXP[e.weaponIndex] || 0; for (let i = an.length - 1; i >= 0; --i) { if (t >= an[i].xp) { return an[i]; } } }; const Sc = ["wood", "food", "stone", "points"]; const Ic = 7; const Tc = 9; const Mc = 3; const Ec = 32; const Cc = 7; const Pc = 724; const $c = 114; const Rc = 0.0011; const Ac = 0.0001; const Dc = 1.3; const Oc = [150, 160, 165, 175]; const _c = [80, 85, 95]; const zc = [80, 85, 90]; const Bc = 2400; const Hc = 0.75; const Lc = 15; const Ks = 14400; const Fc = 40; const Vc = 2200; const Nc = 0.6; const Uc = 1; const Wc = 0.3; const Xc = 0.3; const qc = 1440000; const Zs = 320; const Gc = 100; const Yc = 2; const Kc = 3200; const Zc = 1440; const Jc = 0.2; const Qc = -1; const jc = Ks - Zs - 120; const eh = Ks - Zs - 120; const T = { maxScreenWidth: Wl, maxScreenHeight: Xl, serverUpdateRate: ql, maxPlayers: Wo, maxPlayersHard: Gl, collisionDepth: Yl, minimapRate: Kl, colGrid: Zl, clientSendRate: Jl, healthBarWidth: Ql, healthBarPad: jl, iconPadding: ec, iconPad: tc, deathFadeout: ic, crownIconScale: nc, crownPad: sc, chatCountdown: rc, chatCooldown: oc, inSandbox: ac, maxAge: lc, gatherAngle: cc, gatherWiggle: hc, hitReturnRatio: uc, hitAngle: fc, playerScale: dc, playerSpeed: pc, playerDecel: mc, nameY: gc, skinColors: yc, animalCount: wc, aiTurnRandom: vc, cowNames: kc, shieldAngle: xc, weaponVariants: an, fetchVariant: bc, resourceTypes: Sc, areaCount: Ic, treesPerArea: Tc, bushesPerArea: Mc, totalRocks: Ec, goldOres: Cc, riverWidth: Pc, riverPadding: $c, waterCurrent: Rc, waveSpeed: Ac, waveMax: Dc, treeScales: Oc, bushScales: _c, rockScales: zc, snowBiomeTop: Bc, snowSpeed: Hc, maxNameLength: Lc, mapScale: Ks, mapPingScale: Fc, mapPingTime: Vc, volcanoScale: Zs, innerVolcanoScale: Gc, volcanoAnimalStrength: Yc, volcanoAnimationDuration: Kc, volcanoAggressionRadius: Zc, volcanoAggressionPercentage: Jc, volcanoDamagePerSecond: Qc, volcanoLocationX: jc, volcanoLocationY: eh, MAX_ATTACK: Nc, MAX_SPAWN_DELAY: Uc, MAX_SPEED: Wc, MAX_TURN_SPEED: Xc, DAY_INTERVAL: qc }; const th = new Rl(); const ih = new Fl(); const me = { socket: null, connected: false, socketId: -1, connect: function (e, t, i) { if (this.socket) { return; } const n = this; try { let s = false; const r = e; this.socket = new WebSocket(e); this.socket.binaryType = "arraybuffer"; this.socket.onmessage = function (o) { var a = new Uint8Array(o.data); const l = ih.decode(a); const c = l[0]; var a = l[1]; if (c == "io-init") { n.socketId = a[0]; } else { i[c].apply(undefined, a); } }; this.socket.onopen = function () { n.connected = true; t(); }; this.socket.onclose = function (o) { n.connected = false; if (o.code == 4001) { t("Invalid Connection"); } else if (!s) { t("disconnected"); } }; this.socket.onerror = function (o) { if (this.socket && this.socket.readyState != WebSocket.OPEN) { s = true; console.error("Socket error", arguments); t("Socket error"); } }; } catch (s) { console.warn("Socket connection error:", s); t(s); } }, send: function (e) { const t = Array.prototype.slice.call(arguments, 1); const i = th.encode([e, t]); if (this.socket) { this.socket.send(i); } }, socketReady: function () { return this.socket && this.connected; }, close: function () { if (this.socket) { this.socket.close(); } this.socket = null; this.connected = false; } }; var Xo = Math.abs; const nh = Math.sqrt; var Xo = Math.abs; const sh = Math.atan2; const qn = Math.PI; const rh = function (e, t) { return Math.floor(Math.random() * (t - e + 1)) + e; }; const oh = function (e, t) { return Math.random() * (t - e + 1) + e; }; const ah = function (e, t, i) { return e + (t - e) * i; }; const lh = function (e, t) { if (e > 0) { e = Math.max(0, e - t); } else if (e < 0) { e = Math.min(0, e + t); } return e; }; const ch = function (e, t, i, n) { return nh((i -= e) * i + (n -= t) * n); }; const hh = function (e, t, i, n) { return sh(t - n, e - i); }; const uh = function (e, t) { const i = Xo(t - e) % (qn * 2); if (i > qn) { return qn * 2 - i; } else { return i; } }; const fh = function (e) { return typeof e == "number" && !isNaN(e) && isFinite(e); }; const dh = function (e) { return e && typeof e == "string"; }; const ph = function (e) { if (e > 999) { return (e / 1000).toFixed(1) + "k"; } else { return e; } }; const mh = function (e) { return e.charAt(0).toUpperCase() + e.slice(1); }; const gh = function (e, t) { if (e) { return parseFloat(e.toFixed(t)); } else { return 0; } }; const yh = function (e, t) { return parseFloat(t.points) - parseFloat(e.points); }; const wh = function (e, t, i, n, s, r, o, l) { let c = s; let a = o; if (s > o) { c = o; a = s; } if (a > i) { a = i; } if (c < e) { c = e; } if (c > a) { return false; } let f = r; let d = l; const u = o - s; if (Math.abs(u) > 1e-7) { const p = (l - r) / u; const w = r - p * s; f = p * c + w; d = p * a + w; } if (f > d) { const p = d; d = f; f = p; } if (d > n) { d = n; } if (f < t) { f = t; } return !(f > d); }; const qo = function (e, t, i) { const n = e.getBoundingClientRect(); const s = n.left + window.scrollX; const r = n.top + window.scrollY; const o = n.width; const l = n.height; const c = t > s && t < s + o; const a = i > r && i < r + l; return c && a; }; const ln = function (e) { const t = e.changedTouches[0]; e.screenX = t.screenX; e.screenY = t.screenY; e.clientX = t.clientX; e.clientY = t.clientY; e.pageX = t.pageX; e.pageY = t.pageY; }; const Go = function (e, t) { const i = !t; let n = false; const s = false; e.addEventListener("touchstart", lt(r), s); e.addEventListener("touchmove", lt(o), s); e.addEventListener("touchend", lt(l), s); e.addEventListener("touchcancel", lt(l), s); e.addEventListener("touchleave", lt(l), s); function r(c) { ln(c); window.setUsingTouch(true); if (i) { c.preventDefault(); c.stopPropagation(); } if (e.onmouseover) { e.onmouseover(c); } n = true; } function o(c) { ln(c); window.setUsingTouch(true); if (i) { c.preventDefault(); c.stopPropagation(); } if (qo(e, c.pageX, c.pageY)) { if (!n) { if (e.onmouseover) { e.onmouseover(c); } n = true; } } else if (n) { if (e.onmouseout) { e.onmouseout(c); } n = false; } } function l(c) { ln(c); window.setUsingTouch(true); if (i) { c.preventDefault(); c.stopPropagation(); } if (n) { if (e.onclick) { e.onclick(c); } if (e.onmouseout) { e.onmouseout(c); } n = false; } } }; const vh = function (e) { for (; e.hasChildNodes();) { e.removeChild(e.lastChild); } }; const kh = function (e) { const t = document.createElement(e.tag || "div"); function i(n, s) { if (e[n]) { t[s] = e[n]; } } i("text", "textContent"); i("html", "innerHTML"); i("class", "className"); for (const n in e) { switch (n) { case "tag": case "text": case "html": case "class": case "style": case "hookTouch": case "parent": case "children": continue; } t[n] = e[n]; } if (t.onclick) { t.onclick = lt(t.onclick); } if (t.onmouseover) { t.onmouseover = lt(t.onmouseover); } if (t.onmouseout) { t.onmouseout = lt(t.onmouseout); } if (e.style) { t.style.cssText = e.style; } if (e.hookTouch) { Go(t); } if (e.parent) { e.parent.appendChild(t); } if (e.children) { for (let n = 0; n < e.children.length; n++) { t.appendChild(e.children[n]); } } return t; }; const Yo = function (e) { if (e && typeof e.isTrusted == "boolean") { return e.isTrusted; } else { return true; } }; const lt = function (e) { return function (t) { if (t && t instanceof Event && Yo(t)) { e(t); } }; }; const xh = function (e) { let t = ""; const i = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; for (let n = 0; n < e; n++) { t += i.charAt(Math.floor(Math.random() * i.length)); } return t; }; const bh = function (e, t) { let i = 0; for (let n = 0; n < e.length; n++) { if (e[n] === t) { i++; } } return i; }; const A = { randInt: rh, randFloat: oh, lerp: ah, decel: lh, getDistance: ch, getDirection: hh, getAngleDist: uh, isNumber: fh, isString: dh, kFormat: ph, capitalizeFirst: mh, fixTo: gh, sortByPoints: yh, lineInRect: wh, containsPoint: qo, mousifyTouchEvent: ln, hookTouchEvents: Go, removeAllChildren: vh, generateElement: kh, eventIsTrusted: Yo, checkTrusted: lt, randomString: xh, countInArray: bh }; const Sh = function () { this.init = function (e, t, i, n, s, r, o) { this.x = e; this.y = t; this.color = o; this.scale = i; this.startScale = this.scale; this.maxScale = i * 1.5; this.scaleSpeed = 0.7; this.speed = n; this.life = s; this.text = r; }; this.update = function (e) { if (this.life) { this.life -= e; this.y -= this.speed * e; this.scale += this.scaleSpeed * e; if (this.scale >= this.maxScale) { this.scale = this.maxScale; this.scaleSpeed *= -1; } else if (this.scale <= this.startScale) { this.scale = this.startScale; this.scaleSpeed = 0; } if (this.life <= 0) { this.life = 0; } } }; this.render = function (e, t, i) { e.fillStyle = this.color; e.font = this.scale + "px Hammersmith One"; e.fillText(this.text, this.x - t, this.y - i); }; }; const Ih = function () { this.texts = []; this.update = function (e, t, i, n) { t.textBaseline = "middle"; t.textAlign = "center"; for (let s = 0; s < this.texts.length; ++s) { if (this.texts[s].life) { this.texts[s].update(e); this.texts[s].render(t, i, n); } } }; this.showText = function (e, t, i, n, s, r, o) { let l; for (let c = 0; c < this.texts.length; ++c) { if (!this.texts[c].life) { l = this.texts[c]; break; } } if (!l) { l = new Sh(); this.texts.push(l); } l.init(e, t, i, n, s, r, o); }; }; const Th = function (e, t) { let i; this.sounds = []; this.active = true; this.play = function (n, s, r) { if (!(!s || !this.active)) { i = this.sounds[n]; if (!i) { i = new Howl({ src: ".././sound/" + n + ".mp3" }); this.sounds[n] = i; } if (!r || !i.isPlaying) { i.isPlaying = true; i.play(); i.volume((s || 1) * e.volumeMult); i.loop(r); } } }; this.toggleMute = function (n, s) { i = this.sounds[n]; if (i) { i.mute(s); } }; this.stop = function (n) { i = this.sounds[n]; if (i) { i.stop(); i.isPlaying = false; } }; }; const br = Math.floor; const Sr = Math.abs; const Ti = Math.cos; const Mi = Math.sin; const Mh = Math.sqrt; function Eh(e, t, i, n, s, r) { this.objects = t; this.grids = {}; this.updateObjects = []; let o; let l; const c = n.mapScale / n.colGrid; this.setObjectGrids = function (u) { const p = Math.min(n.mapScale, Math.max(0, u.x)); const w = Math.min(n.mapScale, Math.max(0, u.y)); for (let x = 0; x < n.colGrid; ++x) { o = x * c; for (let b = 0; b < n.colGrid; ++b) { l = b * c; if (p + u.scale >= o && p - u.scale <= o + c && w + u.scale >= l && w - u.scale <= l + c) { if (!this.grids[x + "_" + b]) { this.grids[x + "_" + b] = []; } this.grids[x + "_" + b].push(u); u.gridLocations.push(x + "_" + b); } } } }; this.removeObjGrid = function (u) { let p; for (let w = 0; w < u.gridLocations.length; ++w) { p = this.grids[u.gridLocations[w]].indexOf(u); if (p >= 0) { this.grids[u.gridLocations[w]].splice(p, 1); } } }; this.disableObj = function (u) { u.active = false; if (r) { if (u.owner && u.pps) { u.owner.pps -= u.pps; } this.removeObjGrid(u); const p = this.updateObjects.indexOf(u); if (p >= 0) { this.updateObjects.splice(p, 1); } } }; this.hitObj = function (u, p) { for (let w = 0; w < s.length; ++w) { if (s[w].active) { if (u.sentTo[s[w].id]) { if (u.active) { if (s[w].canSee(u)) { r.send(s[w].id, "L", i.fixTo(p, 1), u.sid); } } else { r.send(s[w].id, "Q", u.sid); } } if (!u.active && u.owner == s[w]) { s[w].changeItemCount(u.group.id, -1); } } } }; const a = []; let f; this.getGridArrays = function (u, p, w) { o = br(u / c); l = br(p / c); a.length = 0; try { if (this.grids[o + "_" + l]) { a.push(this.grids[o + "_" + l]); } if (u + w >= (o + 1) * c) { f = this.grids[o + 1 + "_" + l]; if (f) { a.push(f); } if (l && p - w <= l * c) { f = this.grids[o + 1 + "_" + (l - 1)]; if (f) { a.push(f); } } else if (p + w >= (l + 1) * c) { f = this.grids[o + 1 + "_" + (l + 1)]; if (f) { a.push(f); } } } if (o && u - w <= o * c) { f = this.grids[o - 1 + "_" + l]; if (f) { a.push(f); } if (l && p - w <= l * c) { f = this.grids[o - 1 + "_" + (l - 1)]; if (f) { a.push(f); } } else if (p + w >= (l + 1) * c) { f = this.grids[o - 1 + "_" + (l + 1)]; if (f) { a.push(f); } } } if (p + w >= (l + 1) * c) { f = this.grids[o + "_" + (l + 1)]; if (f) { a.push(f); } } if (l && p - w <= l * c) { f = this.grids[o + "_" + (l - 1)]; if (f) { a.push(f); } } } catch {} return a; }; let d; this.add = function (u, p, w, x, b, $, v, S, R) { d = null; for (var G = 0; G < t.length; ++G) { if (t[G].sid == u) { d = t[G]; break; } } if (!d) { for (var G = 0; G < t.length; ++G) { if (!t[G].active) { d = t[G]; break; } } } if (!d) { d = new e(u); t.push(d); } if (S) { d.sid = u; } d.init(p, w, x, b, $, v, R); if (r) { this.setObjectGrids(d); if (d.doUpdate) { this.updateObjects.push(d); } } }; this.disableBySid = function (u) { for (let p = 0; p < t.length; ++p) { if (t[p].sid == u) { this.disableObj(t[p]); break; } } }; this.removeAllItems = function (u, p) { for (let w = 0; w < t.length; ++w) { if (t[w].active && t[w].owner && t[w].owner.sid == u) { this.disableObj(t[w]); } } if (p) { p.broadcast("R", u); } }; this.fetchSpawnObj = function (u) { let p = null; for (let w = 0; w < t.length; ++w) { d = t[w]; if (d.active && d.owner && d.owner.sid == u && d.spawnPoint) { p = [d.x, d.y]; this.disableObj(d); r.broadcast("Q", d.sid); if (d.owner) { d.owner.changeItemCount(d.group.id, -1); } break; } } return p; }; this.checkItemLocation = function (u, p, w, x, b, $, v) { for (let S = 0; S < t.length; ++S) { const R = t[S].blocker ? t[S].blocker : t[S].getScale(x, t[S].isItem); if (t[S].active && i.getDistance(u, p, t[S].x, t[S].y) < w + R) { return false; } } return !(!$ && b != 18 && p >= n.mapScale / 2 - n.riverWidth / 2 && p <= n.mapScale / 2 + n.riverWidth / 2); }; this.addProjectile = function (u, p, w, x, b) { const $ = items.projectiles[b]; let v; for (let S = 0; S < projectiles.length; ++S) { if (!projectiles[S].active) { v = projectiles[S]; break; } } if (!v) { v = new Projectile(s, i); projectiles.push(v); } v.init(b, u, p, w, $.speed, x, $.scale); }; this.checkCollision = function (u, p, w) { w = w || 1; const x = u.x - p.x; const b = u.y - p.y; let $ = u.scale + p.scale; if (Sr(x) <= $ || Sr(b) <= $) { $ = u.scale + (p.getScale ? p.getScale() : p.scale); let v = Mh(x * x + b * b) - $; if (v <= 0) { if (p.ignoreCollision) { if (p.trap && !u.noTrap && p.owner != u && !(p.owner && p.owner.team && p.owner.team == u.team)) { u.lockMove = true; p.hideFromEnemy = false; } else if (p.boostSpeed) { u.xVel += w * p.boostSpeed * (p.weightM || 1) * Ti(p.dir); u.yVel += w * p.boostSpeed * (p.weightM || 1) * Mi(p.dir); } else if (p.healCol) { u.healCol = p.healCol; } else if (p.teleport) { u.x = i.randInt(0, n.mapScale); u.y = i.randInt(0, n.mapScale); } } else { const S = i.getDirection(u.x, u.y, p.x, p.y); i.getDistance(u.x, u.y, p.x, p.y); if (p.isPlayer) { v = v * -1 / 2; u.x += v * Ti(S); u.y += v * Mi(S); p.x -= v * Ti(S); p.y -= v * Mi(S); } else { u.x = p.x + $ * Ti(S); u.y = p.y + $ * Mi(S); u.xVel *= 0.75; u.yVel *= 0.75; } if (p.dmg && p.owner != u && !(p.owner && p.owner.team && p.owner.team == u.team)) { u.changeHealth(-p.dmg, p.owner, p); const R = (p.weightM || 1) * 1.5; u.xVel += R * Ti(S); u.yVel += R * Mi(S); if (p.pDmg && !(u.skin && u.skin.poisonRes)) { u.dmgOverTime.dmg = p.pDmg; u.dmgOverTime.time = 5; u.dmgOverTime.doer = p.owner; } if (u.colDmg && p.health) { if (p.changeHealth(-u.colDmg)) { this.disableObj(p); } this.hitObj(p, i.getDirection(u.x, u.y, p.x, p.y)); } } } if (p.zIndex > u.zIndex) { u.zIndex = p.zIndex; } return true; } } return false; }; } function Ch(e, t, i, n, s, r, o, l, c) { this.addProjectile = function (a, f, d, u, p, w, x, b, $) { const v = r.projectiles[w]; let S; for (let R = 0; R < t.length; ++R) { if (!t[R].active) { S = t[R]; break; } } if (!S) { S = new e(i, n, s, r, o, l, c); S.sid = t.length; t.push(S); } S.init(w, a, f, d, p, v.dmg, u, v.scale, x); S.ignoreObj = b; S.layer = $ || v.layer; S.src = v.src; return S; }; } function Ph(e, t, i, n, s, r, o, l, c) { this.aiTypes = [{ id: 0, src: "cow_1", killScore: 150, health: 500, weightM: 0.8, speed: 0.00095, turnSpeed: 0.001, scale: 72, drop: ["food", 50] }, { id: 1, src: "pig_1", killScore: 200, health: 800, weightM: 0.6, speed: 0.00085, turnSpeed: 0.001, scale: 72, drop: ["food", 80] }, { id: 2, name: "Bull", src: "bull_2", hostile: true, dmg: 20, killScore: 1000, health: 1800, weightM: 0.5, speed: 0.00094, turnSpeed: 0.00074, scale: 78, viewRange: 800, chargePlayer: true, drop: ["food", 100] }, { id: 3, name: "Bully", src: "bull_1", hostile: true, dmg: 20, killScore: 2000, health: 2800, weightM: 0.45, speed: 0.001, turnSpeed: 0.0008, scale: 90, viewRange: 900, chargePlayer: true, drop: ["food", 400] }, { id: 4, name: "Wolf", src: "wolf_1", hostile: true, dmg: 8, killScore: 500, health: 300, weightM: 0.45, speed: 0.001, turnSpeed: 0.002, scale: 84, viewRange: 800, chargePlayer: true, drop: ["food", 200] }, { id: 5, name: "Quack", src: "chicken_1", dmg: 8, killScore: 2000, noTrap: true, health: 300, weightM: 0.2, speed: 0.0018, turnSpeed: 0.006, scale: 70, drop: ["food", 100] }, { id: 6, name: "MOOSTAFA", nameScale: 50, src: "enemy", hostile: true, dontRun: true, fixedSpawn: true, spawnDelay: 60000, noTrap: true, colDmg: 100, dmg: 40, killScore: 8000, health: 18000, weightM: 0.4, speed: 0.0007, turnSpeed: 0.01, scale: 80, spriteMlt: 1.8, leapForce: 0.9, viewRange: 1000, hitRange: 210, hitDelay: 1000, chargePlayer: true, drop: ["food", 100] }, { id: 7, name: "Treasure", hostile: true, nameScale: 35, src: "crate_1", fixedSpawn: true, spawnDelay: 120000, colDmg: 200, killScore: 5000, health: 20000, weightM: 0.1, speed: 0, turnSpeed: 0, scale: 70, spriteMlt: 1 }, { id: 8, name: "MOOFIE", src: "wolf_2", hostile: true, fixedSpawn: true, dontRun: true, hitScare: 4, spawnDelay: 30000, noTrap: true, nameScale: 35, dmg: 10, colDmg: 100, killScore: 3000, health: 7000, weightM: 0.45, speed: 0.0015, turnSpeed: 0.002, scale: 90, viewRange: 800, chargePlayer: true, drop: ["food", 1000] }, { id: 9, name: "💀MOOFIE", src: "wolf_2", hostile: true, fixedSpawn: true, dontRun: true, hitScare: 50, spawnDelay: 60000, noTrap: true, nameScale: 35, dmg: 12, colDmg: 100, killScore: 3000, health: 9000, weightM: 0.45, speed: 0.0015, turnSpeed: 0.0025, scale: 94, viewRange: 1440, chargePlayer: true, drop: ["food", 3000], minSpawnRange: 0.85, maxSpawnRange: 0.9 }, { id: 10, name: "💀Wolf", src: "wolf_1", hostile: true, fixedSpawn: true, dontRun: true, hitScare: 50, spawnDelay: 30000, dmg: 10, killScore: 700, health: 500, weightM: 0.45, speed: 0.00115, turnSpeed: 0.0025, scale: 88, viewRange: 1440, chargePlayer: true, drop: ["food", 400], minSpawnRange: 0.85, maxSpawnRange: 0.9 }, { id: 11, name: "💀Bully", src: "bull_1", hostile: true, fixedSpawn: true, dontRun: true, hitScare: 50, dmg: 20, killScore: 5000, health: 5000, spawnDelay: 100000, weightM: 0.45, speed: 0.00115, turnSpeed: 0.0025, scale: 94, viewRange: 1440, chargePlayer: true, drop: ["food", 800], minSpawnRange: 0.85, maxSpawnRange: 0.9 }]; this.spawn = function (a, f, d, u) { if (!this.aiTypes[u]) { console.error("missing ai type", u); return this.spawn(a, f, d, 0); } let p; for (let w = 0; w < e.length; ++w) { if (!e[w].active) { p = e[w]; break; } } if (!p) { p = new t(e.length, s, i, n, o, r, l, c); e.push(p); } p.init(a, f, d, u, this.aiTypes[u]); return p; }; } const Nt = Math.PI * 2; const Gn = 0; function $h(e, t, i, n, s, r, o, l) { this.sid = e; this.isAI = true; this.nameIndex = s.randInt(0, r.cowNames.length - 1); this.init = function (d, u, p, w, x) { this.x = d; this.y = u; this.startX = x.fixedSpawn ? d : null; this.startY = x.fixedSpawn ? u : null; this.xVel = 0; this.yVel = 0; this.zIndex = 0; this.dir = p; this.dirPlus = 0; this.index = w; this.src = x.src; if (x.name) { this.name = x.name; } if ((this.name || "").startsWith("💀")) { this.isVolcanoAi = true; } this.weightM = x.weightM; this.speed = x.speed; this.killScore = x.killScore; this.turnSpeed = x.turnSpeed; this.scale = x.scale; this.maxHealth = x.health; this.leapForce = x.leapForce; this.health = this.maxHealth; this.chargePlayer = x.chargePlayer; this.viewRange = x.viewRange; this.drop = x.drop; this.dmg = x.dmg; this.hostile = x.hostile; this.dontRun = x.dontRun; this.hitRange = x.hitRange; this.hitDelay = x.hitDelay; this.hitScare = x.hitScare; this.spriteMlt = x.spriteMlt; this.nameScale = x.nameScale; this.colDmg = x.colDmg; this.noTrap = x.noTrap; this.spawnDelay = x.spawnDelay; this.minSpawnRange = x.minSpawnRange; this.maxSpawnRange = x.maxSpawnRange; this.hitWait = 0; this.waitCount = 1000; this.moveCount = 0; this.targetDir = 0; this.active = true; this.alive = true; this.runFrom = null; this.chargeTarget = null; this.dmgOverTime = {}; }; this.getVolcanoAggression = function () { const d = s.getDistance(this.x, this.y, r.volcanoLocationX, r.volcanoLocationY); const u = d > r.volcanoAggressionRadius ? 0 : r.volcanoAggressionRadius - d; return 1 + r.volcanoAggressionPercentage * (1 - u / r.volcanoAggressionRadius); }; let c = 0; this.update = function (d) { if (this.active) { if (this.spawnCounter) { this.spawnCounter -= d * 1 * this.getVolcanoAggression(); if (this.spawnCounter <= 0) { this.spawnCounter = 0; if (this.minSpawnRange || this.maxSpawnRange) { const V = r.mapScale * this.minSpawnRange; const F = r.mapScale * this.maxSpawnRange; this.x = s.randInt(V, F); this.y = s.randInt(V, F); } else { this.x = this.startX || s.randInt(0, r.mapScale); this.y = this.startY || s.randInt(0, r.mapScale); } } return; } c -= d; if (c <= 0) { if (this.dmgOverTime.dmg) { this.changeHealth(-this.dmgOverTime.dmg, this.dmgOverTime.doer); this.dmgOverTime.time -= 1; if (this.dmgOverTime.time <= 0) { this.dmgOverTime.dmg = 0; } } c = 1000; } let v = false; let S = 1; if (!this.zIndex && !this.lockMove && this.y >= r.mapScale / 2 - r.riverWidth / 2 && this.y <= r.mapScale / 2 + r.riverWidth / 2) { S = 0.33; this.xVel += r.waterCurrent * d; } if (this.lockMove) { this.xVel = 0; this.yVel = 0; } else if (this.waitCount > 0) { this.waitCount -= d; if (this.waitCount <= 0) { if (this.chargePlayer) { let V; let F; let _; for (var u = 0; u < i.length; ++u) { if (i[u].alive && !(i[u].skin && i[u].skin.bullRepel)) { _ = s.getDistance(this.x, this.y, i[u].x, i[u].y); if (_ <= this.viewRange && (!V || _ < F)) { F = _; V = i[u]; } } } if (V) { this.chargeTarget = V; this.moveCount = s.randInt(8000, 12000); } else { this.moveCount = s.randInt(1000, 2000); this.targetDir = s.randFloat(-Math.PI, Math.PI); } } else { this.moveCount = s.randInt(4000, 10000); this.targetDir = s.randFloat(-Math.PI, Math.PI); } } } else if (this.moveCount > 0) { var p = this.speed * S * (1 + r.MAX_SPEED * Gn) * this.getVolcanoAggression(); if (this.runFrom && this.runFrom.active && !(this.runFrom.isPlayer && !this.runFrom.alive)) { this.targetDir = s.getDirection(this.x, this.y, this.runFrom.x, this.runFrom.y); p *= 1.42; } else if (this.chargeTarget && this.chargeTarget.alive) { this.targetDir = s.getDirection(this.chargeTarget.x, this.chargeTarget.y, this.x, this.y); p *= 1.75; v = true; } if (this.hitWait) { p *= 0.3; } if (this.dir != this.targetDir) { this.dir %= Nt; const V = (this.dir - this.targetDir + Nt) % Nt; const F = Math.min(Math.abs(V - Nt), V, this.turnSpeed * d); const _ = V - Math.PI >= 0 ? 1 : -1; this.dir += _ * F + Nt; } this.dir %= Nt; this.xVel += p * d * Math.cos(this.dir); this.yVel += p * d * Math.sin(this.dir); this.moveCount -= d; if (this.moveCount <= 0) { this.runFrom = null; this.chargeTarget = null; this.waitCount = this.hostile ? 1500 : s.randInt(1500, 6000); } } this.zIndex = 0; this.lockMove = false; var w; const R = s.getDistance(0, 0, this.xVel * d, this.yVel * d); const G = Math.min(4, Math.max(1, Math.round(R / 40))); const X = 1 / G; for (var u = 0; u < G; ++u) { if (this.xVel) { this.x += this.xVel * d * X; } if (this.yVel) { this.y += this.yVel * d * X; } w = t.getGridArrays(this.x, this.y, this.scale); for (var x = 0; x < w.length; ++x) { for (let F = 0; F < w[x].length; ++F) { if (w[x][F].active) { t.checkCollision(this, w[x][F], X); } } } } let W = false; if (this.hitWait > 0 && (this.hitWait -= d, this.hitWait <= 0)) { W = true; this.hitWait = 0; if (this.leapForce && !s.randInt(0, 2)) { this.xVel += this.leapForce * Math.cos(this.dir); this.yVel += this.leapForce * Math.sin(this.dir); } var w = t.getGridArrays(this.x, this.y, this.hitRange); var b; var $; for (let F = 0; F < w.length; ++F) { for (var x = 0; x < w[F].length; ++x) { b = w[F][x]; if (b.health) { $ = s.getDistance(this.x, this.y, b.x, b.y); if ($ < b.scale + this.hitRange) { if (b.changeHealth(-this.dmg * 5)) { t.disableObj(b); } t.hitObj(b, s.getDirection(this.x, this.y, b.x, b.y)); } } } } for (var x = 0; x < i.length; ++x) { if (i[x].canSee(this)) { l.send(i[x].id, "J", this.sid); } } } if (v || W) { var b; var $; let _; for (var u = 0; u < i.length; ++u) { b = i[u]; if (b && b.alive) { $ = s.getDistance(this.x, this.y, b.x, b.y); if (this.hitRange) { if (!this.hitWait && $ <= this.hitRange + b.scale) { if (W) { _ = s.getDirection(b.x, b.y, this.x, this.y); b.changeHealth(-this.dmg * (1 + r.MAX_ATTACK * Gn) * this.getVolcanoAggression()); b.xVel += Math.cos(_) * 0.6; b.yVel += Math.sin(_) * 0.6; this.runFrom = null; this.chargeTarget = null; this.waitCount = 3000; this.hitWait = s.randInt(0, 2) ? 0 : 600; } else { this.hitWait = this.hitDelay; } } } else if ($ <= this.scale + b.scale) { _ = s.getDirection(b.x, b.y, this.x, this.y); b.changeHealth(-this.dmg * (1 + r.MAX_ATTACK * Gn) * this.getVolcanoAggression()); b.xVel += Math.cos(_) * 0.55; b.yVel += Math.sin(_) * 0.55; } } } } if (this.xVel) { this.xVel *= Math.pow(r.playerDecel, d); } if (this.yVel) { this.yVel *= Math.pow(r.playerDecel, d); } const M = this.scale; if (this.x - M < 0) { this.x = M; this.xVel = 0; } else if (this.x + M > r.mapScale) { this.x = r.mapScale - M; this.xVel = 0; } if (this.y - M < 0) { this.y = M; this.yVel = 0; } else if (this.y + M > r.mapScale) { this.y = r.mapScale - M; this.yVel = 0; } if (this.isVolcanoAi) { if (this.chargeTarget && (s.getDistance(this.chargeTarget.x, this.chargeTarget.y, r.volcanoLocationX, r.volcanoLocationY) || 0) > r.volcanoAggressionRadius) { this.chargeTarget = null; } if (this.xVel) { if (this.x < r.volcanoLocationX - r.volcanoAggressionRadius) { this.x = r.volcanoLocationX - r.volcanoAggressionRadius; this.xVel = 0; } else if (this.x > r.volcanoLocationX + r.volcanoAggressionRadius) { this.x = r.volcanoLocationX + r.volcanoAggressionRadius; this.xVel = 0; } } if (this.yVel) { if (this.y < r.volcanoLocationY - r.volcanoAggressionRadius) { this.y = r.volcanoLocationY - r.volcanoAggressionRadius; this.yVel = 0; } else if (this.y > r.volcanoLocationY + r.volcanoAggressionRadius) { this.y = r.volcanoLocationY + r.volcanoAggressionRadius; this.yVel = 0; } } } } }; this.canSee = function (d) { if (!d || d.skin && d.skin.invisTimer && d.noMovTimer >= d.skin.invisTimer) { return false; } const u = Math.abs(d.x - this.x) - d.scale; const p = Math.abs(d.y - this.y) - d.scale; return u <= r.maxScreenWidth / 2 * 1.3 && p <= r.maxScreenHeight / 2 * 1.3; }; let a = 0; let f = 0; this.animate = function (d) { if (this.animTime > 0) { this.animTime -= d; if (this.animTime <= 0) { this.animTime = 0; this.dirPlus = 0; a = 0; f = 0; } else if (f == 0) { a += d / (this.animSpeed * r.hitReturnRatio); this.dirPlus = s.lerp(0, this.targetAngle, Math.min(1, a)); if (a >= 1) { a = 1; f = 1; } } else { a -= d / (this.animSpeed * (1 - r.hitReturnRatio)); this.dirPlus = s.lerp(0, this.targetAngle, Math.max(0, a)); } } }; this.startAnim = function () { this.animTime = this.animSpeed = 600; this.targetAngle = Math.PI * 0.8; a = 0; f = 0; }; this.changeHealth = function (d, u, p) { if (this.active && (this.health += d, p && (this.hitScare && !s.randInt(0, this.hitScare) ? (this.runFrom = p, this.waitCount = 0, this.moveCount = 2000) : this.hostile && this.chargePlayer && p.isPlayer ? (this.chargeTarget = p, this.waitCount = 0, this.moveCount = 8000) : this.dontRun || (this.runFrom = p, this.waitCount = 0, this.moveCount = 2000)), d < 0 && this.hitRange && s.randInt(0, 1) && (this.hitWait = 500), u && u.canSee(this) && d < 0 && l.send(u.id, "8", Math.round(this.x), Math.round(this.y), Math.round(-d), 1), this.health <= 0)) { if (this.spawnDelay) { this.spawnCounter = this.spawnDelay; this.x = -1000000; this.y = -1000000; } else if (this.minSpawnRange || this.maxSpawnRange) { const w = r.mapScale * this.minSpawnRange; const x = r.mapScale * this.maxSpawnRange; this.x = s.randInt(w, x); this.y = s.randInt(w, x); } else { this.x = this.startX || s.randInt(0, r.mapScale); this.y = this.startY || s.randInt(0, r.mapScale); } this.health = this.maxHealth; this.runFrom = null; if (u && (o(u, this.killScore), this.drop)) { for (let w = 0; w < this.drop.length;) { u.addResource(r.resourceTypes.indexOf(this.drop[w]), this.drop[w + 1]); w += 2; } } } }; } function Rh(e) { this.sid = e; this.init = function (t, i, n, s, r, o, l) { o = o || {}; this.sentTo = {}; this.gridLocations = []; this.active = true; this.doUpdate = o.doUpdate; this.x = t; this.y = i; this.dir = n; this.xWiggle = 0; this.yWiggle = 0; this.scale = s; this.type = r; this.id = o.id; this.owner = l; this.name = o.name; this.isItem = this.id != null; this.group = o.group; this.health = o.health; this.layer = 2; if (this.group != null) { this.layer = this.group.layer; } else if (this.type == 0) { this.layer = 3; } else if (this.type == 2) { this.layer = 0; } else if (this.type == 4) { this.layer = -1; } this.colDiv = o.colDiv || 1; this.blocker = o.blocker; this.ignoreCollision = o.ignoreCollision; this.dontGather = o.dontGather; this.hideFromEnemy = o.hideFromEnemy; this.friction = o.friction; this.projDmg = o.projDmg; this.dmg = o.dmg; this.pDmg = o.pDmg; this.pps = o.pps; this.zIndex = o.zIndex || 0; this.turnSpeed = o.turnSpeed; this.req = o.req; this.trap = o.trap; this.healCol = o.healCol; this.teleport = o.teleport; this.boostSpeed = o.boostSpeed; this.projectile = o.projectile; this.shootRange = o.shootRange; this.shootRate = o.shootRate; this.shootCount = this.shootRate; this.spawnPoint = o.spawnPoint; }; this.changeHealth = function (t, i) { this.health += t; return this.health <= 0; }; this.getScale = function (t, i) { t = t || 1; return this.scale * (this.isItem || this.type == 2 || this.type == 3 || this.type == 4 ? 1 : t * 0.6) * (i ? 1 : this.colDiv); }; this.visibleToPlayer = function (t) { return !this.hideFromEnemy || this.owner && (this.owner == t || this.owner.team && t.team == this.owner.team); }; this.update = function (t) { if (this.active) { if (this.xWiggle) { this.xWiggle *= Math.pow(0.99, t); } if (this.yWiggle) { this.yWiggle *= Math.pow(0.99, t); } //if (this.turnSpeed) { // this.dir += this.turnSpeed * t; //} } }; } const de = [{ id: 0, name: "food", layer: 0 }, { id: 1, name: "walls", place: true, limit: 30, layer: 0 }, { id: 2, name: "spikes", place: true, limit: 15, layer: 0 }, { id: 3, name: "mill", place: true, limit: 7, sandboxLimit: 299, layer: 1 }, { id: 4, name: "mine", place: true, limit: 1, layer: 0 }, { id: 5, name: "trap", place: true, limit: 6, layer: -1 }, { id: 6, name: "booster", place: true, limit: 12, sandboxLimit: 299, layer: -1 }, { id: 7, name: "turret", place: true, limit: 2, layer: 1 }, { id: 8, name: "watchtower", place: true, limit: 12, layer: 1 }, { id: 9, name: "buff", place: true, limit: 4, layer: -1 }, { id: 10, name: "spawn", place: true, limit: 1, layer: -1 }, { id: 11, name: "sapling", place: true, limit: 2, layer: 0 }, { id: 12, name: "blocker", place: true, limit: 3, layer: -1 }, { id: 13, name: "teleporter", place: true, limit: 2, sandboxLimit: 299, layer: -1 }]; const Ah = [{ indx: 0, layer: 0, src: "arrow_1", dmg: 25, speed: 1.6, scale: 103, range: 1000 }, { indx: 1, layer: 1, dmg: 25, scale: 20 }, { indx: 0, layer: 0, src: "arrow_1", dmg: 35, speed: 2.5, scale: 103, range: 1200 }, { indx: 0, layer: 0, src: "arrow_1", dmg: 30, speed: 2, scale: 103, range: 1200 }, { indx: 1, layer: 1, dmg: 16, scale: 20 }, { indx: 0, layer: 0, src: "bullet_1", dmg: 50, speed: 3.6, scale: 160, range: 1400 }]; const Dh = [{ id: 0, type: 0, name: "tool hammer", desc: "tool for gathering all resources", src: "hammer_1", length: 140, width: 140, xOff: -3, yOff: 18, dmg: 25, range: 65, gather: 1, speed: 300 }, { id: 1, type: 0, age: 2, name: "hand axe", desc: "gathers resources at a higher rate", src: "axe_1", length: 140, width: 140, xOff: 3, yOff: 24, dmg: 30, spdMult: 1, range: 70, gather: 2, speed: 400 }, { id: 2, type: 0, age: 8, pre: 1, name: "great axe", desc: "deal more damage and gather more resources", src: "great_axe_1", length: 140, width: 140, xOff: -8, yOff: 25, dmg: 35, spdMult: 1, range: 75, gather: 4, speed: 400 }, { id: 3, type: 0, age: 2, name: "short sword", desc: "increased attack power but slower move speed", src: "sword_1", iPad: 1.3, length: 130, width: 210, xOff: -8, yOff: 46, dmg: 35, spdMult: 0.85, range: 110, gather: 1, speed: 300 }, { id: 4, type: 0, age: 8, pre: 3, name: "katana", desc: "greater range and damage", src: "samurai_1", iPad: 1.3, length: 130, width: 210, xOff: -8, yOff: 59, dmg: 40, spdMult: 0.8, range: 118, gather: 1, speed: 300 }, { id: 5, type: 0, age: 2, name: "polearm", desc: "long range melee weapon", src: "spear_1", iPad: 1.3, length: 130, width: 210, xOff: -8, yOff: 53, dmg: 45, knock: 0.2, spdMult: 0.82, range: 142, gather: 1, speed: 700 }, { id: 6, type: 0, age: 2, name: "bat", desc: "fast long range melee weapon", src: "bat_1", iPad: 1.3, length: 110, width: 180, xOff: -8, yOff: 53, dmg: 20, knock: 0.7, range: 110, gather: 1, speed: 300 }, { id: 7, type: 0, age: 2, name: "daggers", desc: "really fast short range weapon", src: "dagger_1", iPad: 0.8, length: 110, width: 110, xOff: 18, yOff: 0, dmg: 20, knock: 0.1, range: 65, gather: 1, hitSlow: 0.1, spdMult: 1.13, speed: 100 }, { id: 8, type: 0, age: 2, name: "stick", desc: "great for gathering but very weak", src: "stick_1", length: 140, width: 140, xOff: 3, yOff: 24, dmg: 1, spdMult: 1, range: 70, gather: 7, speed: 400 }, { id: 9, type: 1, age: 6, name: "hunting bow", desc: "bow used for ranged combat and hunting", src: "bow_1", req: ["wood", 4], length: 120, width: 120, xOff: -6, yOff: 0, projectile: 0, spdMult: 0.75, speed: 600 }, { id: 10, type: 1, age: 6, name: "great hammer", desc: "hammer used for destroying structures", src: "great_hammer_1", length: 140, width: 140, xOff: -9, yOff: 25, dmg: 10, spdMult: 0.88, range: 75, sDmg: 7.5, gather: 1, speed: 400 }, { id: 11, type: 1, age: 6, name: "wooden shield", desc: "blocks projectiles and reduces melee damage", src: "shield_1", length: 120, width: 120, shield: 0.2, xOff: 6, yOff: 0, spdMult: 0.7 }, { id: 12, type: 1, age: 8, pre: 9, name: "crossbow", desc: "deals more damage and has greater range", src: "crossbow_1", req: ["wood", 5], aboveHand: true, armS: 0.75, length: 120, width: 120, xOff: -4, yOff: 0, projectile: 2, spdMult: 0.7, speed: 700 }, { id: 13, type: 1, age: 9, pre: 12, name: "repeater crossbow", desc: "high firerate crossbow with reduced damage", src: "crossbow_2", req: ["wood", 10], aboveHand: true, armS: 0.75, length: 120, width: 120, xOff: -4, yOff: 0, projectile: 3, spdMult: 0.7, speed: 230 }, { id: 14, type: 1, age: 6, name: "mc grabby", desc: "steals resources from enemies", src: "grab_1", length: 130, width: 210, xOff: -8, yOff: 53, dmg: 0, steal: 250, knock: 0.2, spdMult: 1.05, range: 125, gather: 0, speed: 700 }, { id: 15, type: 1, age: 9, pre: 12, name: "musket", desc: "slow firerate but high damage and range", src: "musket_1", req: ["stone", 10], aboveHand: true, rec: 0.35, armS: 0.6, hndS: 0.3, hndD: 1.6, length: 205, width: 205, xOff: 25, yOff: 0, projectile: 5, hideProjectile: true, spdMult: 0.6, speed: 1500 }]; const Zt = [{ group: de[0], name: "apple", desc: "restores 20 health when consumed", req: ["food", 10], consume: function (e) { return e.changeHealth(20, e); }, scale: 22, holdOffset: 15 }, { age: 3, group: de[0], name: "cookie", desc: "restores 40 health when consumed", req: ["food", 15], consume: function (e) { return e.changeHealth(40, e); }, scale: 27, holdOffset: 15 }, { age: 7, group: de[0], name: "cheese", desc: "restores 30 health and another 50 over 5 seconds", req: ["food", 25], consume: function (e) { if (e.changeHealth(30, e) || e.health < 100) { e.dmgOverTime.dmg = -10; e.dmgOverTime.doer = e; e.dmgOverTime.time = 5; return true; } else { return false; } }, scale: 27, holdOffset: 15 }, { group: de[1], name: "wood wall", desc: "provides protection for your village", req: ["wood", 10], projDmg: true, health: 380, scale: 50, holdOffset: 20, placeOffset: -5 }, { age: 3, group: de[1], name: "stone wall", desc: "provides improved protection for your village", req: ["stone", 25], health: 900, scale: 50, holdOffset: 20, placeOffset: -5 }, { age: 7, pre: 1, group: de[1], name: "castle wall", desc: "provides powerful protection for your village", req: ["stone", 35], health: 1500, scale: 52, holdOffset: 20, placeOffset: -5 }, { group: de[2], name: "spikes", desc: "damages enemies when they touch them", req: ["wood", 20, "stone", 5], health: 400, dmg: 20, scale: 49, spritePadding: -23, holdOffset: 8, placeOffset: -5 }, { age: 5, group: de[2], name: "greater spikes", desc: "damages enemies when they touch them", req: ["wood", 30, "stone", 10], health: 500, dmg: 35, scale: 52, spritePadding: -23, holdOffset: 8, placeOffset: -5 }, { age: 9, pre: 1, group: de[2], name: "poison spikes", desc: "poisons enemies when they touch them", req: ["wood", 35, "stone", 15], health: 600, dmg: 30, pDmg: 5, scale: 52, spritePadding: -23, holdOffset: 8, placeOffset: -5 }, { age: 9, pre: 2, group: de[2], name: "spinning spikes", desc: "damages enemies when they touch them", req: ["wood", 30, "stone", 20], health: 500, dmg: 45, turnSpeed: 0.003, scale: 52, spritePadding: -23, holdOffset: 8, placeOffset: -5 }, { group: de[3], name: "windmill", desc: "generates gold over time", req: ["wood", 50, "stone", 10], health: 400, pps: 1, turnSpeed: 0.0016, spritePadding: 25, iconLineMult: 12, scale: 45, holdOffset: 20, placeOffset: 5 }, { age: 5, pre: 1, group: de[3], name: "faster windmill", desc: "generates more gold over time", req: ["wood", 60, "stone", 20], health: 500, pps: 1.5, turnSpeed: 0.0025, spritePadding: 25, iconLineMult: 12, scale: 47, holdOffset: 20, placeOffset: 5 }, { age: 8, pre: 1, group: de[3], name: "power mill", desc: "generates more gold over time", req: ["wood", 100, "stone", 50], health: 800, pps: 2, turnSpeed: 0.005, spritePadding: 25, iconLineMult: 12, scale: 47, holdOffset: 20, placeOffset: 5 }, { age: 5, group: de[4], type: 2, name: "mine", desc: "allows you to mine stone", req: ["wood", 20, "stone", 100], iconLineMult: 12, scale: 65, holdOffset: 20, placeOffset: 0 }, { age: 5, group: de[11], type: 0, name: "sapling", desc: "allows you to farm wood", req: ["wood", 150], iconLineMult: 12, colDiv: 0.5, scale: 110, holdOffset: 50, placeOffset: -15 }, { age: 4, group: de[5], name: "pit trap", desc: "pit that traps enemies if they walk over it", req: ["wood", 30, "stone", 30], trap: true, ignoreCollision: true, hideFromEnemy: true, health: 500, colDiv: 0.2, scale: 50, holdOffset: 20, placeOffset: -5 }, { age: 4, group: de[6], name: "boost pad", desc: "provides boost when stepped on", req: ["stone", 20, "wood", 5], ignoreCollision: true, boostSpeed: 1.5, health: 150, colDiv: 0.7, scale: 45, holdOffset: 20, placeOffset: -5 }, { age: 7, group: de[7], doUpdate: true, name: "turret", desc: "defensive structure that shoots at enemies", req: ["wood", 200, "stone", 150], health: 800, projectile: 1, shootRange: 700, shootRate: 2200, scale: 43, holdOffset: 20, placeOffset: -5 }, { age: 7, group: de[8], name: "platform", desc: "platform to shoot over walls and cross over water", req: ["wood", 20], ignoreCollision: true, zIndex: 1, health: 300, scale: 43, holdOffset: 20, placeOffset: -5 }, { age: 7, group: de[9], name: "healing pad", desc: "standing on it will slowly heal you", req: ["wood", 30, "food", 10], ignoreCollision: true, healCol: 15, health: 400, colDiv: 0.7, scale: 45, holdOffset: 20, placeOffset: -5 }, { age: 9, group: de[10], name: "spawn pad", desc: "you will spawn here when you die but it will dissapear", req: ["wood", 100, "stone", 100], health: 400, ignoreCollision: true, spawnPoint: true, scale: 45, holdOffset: 20, placeOffset: -5 }, { age: 7, group: de[12], name: "blocker", desc: "blocks building in radius", req: ["wood", 30, "stone", 25], ignoreCollision: true, blocker: 300, health: 400, colDiv: 0.7, scale: 45, holdOffset: 20, placeOffset: -5 }, { age: 7, group: de[13], name: "teleporter", desc: "teleports you to a random point on the map", req: ["wood", 60, "stone", 60], ignoreCollision: true, teleport: true, health: 200, colDiv: 0.7, scale: 45, holdOffset: 20, placeOffset: -5 }]; for (let e = 0; e < Zt.length; ++e) { Zt[e].id = e; if (Zt[e].pre) { Zt[e].pre = e - Zt[e].pre; } } const L = { groups: de, projectiles: Ah, weapons: Dh, list: Zt }; const Oh = ["ahole", "anus", "ash0le", "ash0les", "asholes", "ass", "Ass Monkey", "Assface", "assh0le", "assh0lez", "asshole", "assholes", "assholz", "asswipe", "azzhole", "bassterds", "bastard", "bastards", "bastardz", "basterds", "basterdz", "Biatch", "bitch", "bitches", "Blow Job", "boffing", "butthole", "buttwipe", "c0ck", "c0cks", "c0k", "Carpet Muncher", "cawk", "cawks", "Clit", "cnts", "cntz", "cock", "cockhead", "cock-head", "cocks", "CockSucker", "cock-sucker", "crap", "cum", "cunt", "cunts", "cuntz", "dick", "dild0", "dild0s", "dildo", "dildos", "dilld0", "dilld0s", "dominatricks", "dominatrics", "dominatrix", "dyke", "enema", "f u c k", "f u c k e r", "fag", "fag1t", "faget", "fagg1t", "faggit", "faggot", "fagg0t", "fagit", "fags", "fagz", "faig", "faigs", "fart", "flipping the bird", "fuck", "fucker", "fuckin", "fucking", "fucks", "Fudge Packer", "fuk", "Fukah", "Fuken", "fuker", "Fukin", "Fukk", "Fukkah", "Fukken", "Fukker", "Fukkin", "g00k", "God-damned", "h00r", "h0ar", "h0re", "hells", "hoar", "hoor", "hoore", "jackoff", "jap", "japs", "jerk-off", "jisim", "jiss", "jizm", "jizz", "knob", "knobs", "knobz", "kunt", "kunts", "kuntz", "Lezzian", "Lipshits", "Lipshitz", "masochist", "masokist", "massterbait", "masstrbait", "masstrbate", "masterbaiter", "masterbate", "masterbates", "Motha Fucker", "Motha Fuker", "Motha Fukkah", "Motha Fukker", "Mother Fucker", "Mother Fukah", "Mother Fuker", "Mother Fukkah", "Mother Fukker", "mother-fucker", "Mutha Fucker", "Mutha Fukah", "Mutha Fuker", "Mutha Fukkah", "Mutha Fukker", "n1gr", "nastt", "nigger;", "nigur;", "niiger;", "niigr;", "orafis", "orgasim;", "orgasm", "orgasum", "oriface", "orifice", "orifiss", "packi", "packie", "packy", "paki", "pakie", "paky", "pecker", "peeenus", "peeenusss", "peenus", "peinus", "pen1s", "penas", "penis", "penis-breath", "penus", "penuus", "Phuc", "Phuck", "Phuk", "Phuker", "Phukker", "polac", "polack", "polak", "Poonani", "pr1c", "pr1ck", "pr1k", "pusse", "pussee", "pussy", "puuke", "puuker", "qweir", "recktum", "rectum", "retard", "sadist", "scank", "schlong", "screwing", "semen", "sex", "sexy", "Sh!t", "sh1t", "sh1ter", "sh1ts", "sh1tter", "sh1tz", "shit", "shits", "shitter", "Shitty", "Shity", "shitz", "Shyt", "Shyte", "Shytty", "Shyty", "skanck", "skank", "skankee", "skankey", "skanks", "Skanky", "slag", "slut", "sluts", "Slutty", "slutz", "son-of-a-bitch", "tit", "turd", "va1jina", "vag1na", "vagiina", "vagina", "vaj1na", "vajina", "vullva", "vulva", "w0p", "wh00r", "wh0re", "whore", "xrated", "xxx", "b!+ch", "bitch", "blowjob", "clit", "arschloch", "fuck", "shit", "ass", "asshole", "b!tch", "b17ch", "b1tch", "bastard", "bi+ch", "boiolas", "buceta", "c0ck", "cawk", "chink", "cipa", "clits", "cock", "cum", "cunt", "dildo", "dirsa", "ejakulate", "fatass", "fcuk", "fuk", "fux0r", "hoer", "hore", "jism", "kawk", "l3itch", "l3i+ch", "masturbate", "masterbat*", "masterbat3", "motherfucker", "s.o.b.", "mofo", "nazi", "nigga", "nigger", "nutsack", "phuck", "pimpis", "pusse", "pussy", "scrotum", "sh!t", "shemale", "shi+", "sh!+", "slut", "smut", "teets", "tits", "boobs", "b00bs", "teez", "testical", "testicle", "titt", "w00se", "jackoff", "wank", "whoar", "whore", "*damn", "*dyke", "*fuck*", "*shit*", "@$$", "amcik", "andskota", "arse*", "assrammer", "ayir", "bi7ch", "bitch*", "bollock*", "breasts", "butt-pirate", "cabron", "cazzo", "chraa", "chuj", "Cock*", "cunt*", "d4mn", "daygo", "dego", "dick*", "dike*", "dupa", "dziwka", "ejackulate", "Ekrem*", "Ekto", "enculer", "faen", "fag*", "fanculo", "fanny", "feces", "feg", "Felcher", "ficken", "fitt*", "Flikker", "foreskin", "Fotze", "Fu(*", "fuk*", "futkretzn", "gook", "guiena", "h0r", "h4x0r", "hell", "helvete", "hoer*", "honkey", "Huevon", "hui", "injun", "jizz", "kanker*", "kike", "klootzak", "kraut", "knulle", "kuk", "kuksuger", "Kurac", "kurwa", "kusi*", "kyrpa*", "lesbo", "mamhoon", "masturbat*", "merd*", "mibun", "monkleigh", "mouliewop", "muie", "mulkku", "muschi", "nazis", "nepesaurio", "nigger*", "orospu", "paska*", "perse", "picka", "pierdol*", "pillu*", "pimmel", "piss*", "pizda", "poontsee", "poop", "porn", "p0rn", "pr0n", "preteen", "pula", "pule", "puta", "puto", "qahbeh", "queef*", "rautenberg", "schaffer", "scheiss*", "schlampe", "schmuck", "screw", "sh!t*", "sharmuta", "sharmute", "shipal", "shiz", "skribz", "skurwysyn", "sphencter", "spic", "spierdalaj", "splooge", "suka", "b00b*", "testicle*", "titt*", "twat", "vittu", "wank*", "wetback*", "wichser", "wop*", "yed", "zabourah"]; const _h = { words: Oh }; var zh = { "4r5e": 1, "5h1t": 1, "5hit": 1, a55: 1, anal: 1, anus: 1, ar5e: 1, arrse: 1, arse: 1, ass: 1, "ass-fucker": 1, asses: 1, assfucker: 1, assfukka: 1, asshole: 1, assholes: 1, asswhole: 1, a_s_s: 1, "b!tch": 1, b00bs: 1, b17ch: 1, b1tch: 1, ballbag: 1, balls: 1, ballsack: 1, bastard: 1, beastial: 1, beastiality: 1, bellend: 1, bestial: 1, bestiality: 1, "bi+ch": 1, biatch: 1, bitch: 1, bitcher: 1, bitchers: 1, bitches: 1, bitchin: 1, bitching: 1, bloody: 1, "blow job": 1, blowjob: 1, blowjobs: 1, boiolas: 1, bollock: 1, bollok: 1, boner: 1, boob: 1, boobs: 1, booobs: 1, boooobs: 1, booooobs: 1, booooooobs: 1, breasts: 1, buceta: 1, bugger: 1, bum: 1, "bunny fucker": 1, butt: 1, butthole: 1, buttmuch: 1, buttplug: 1, c0ck: 1, c0cksucker: 1, "carpet muncher": 1, cawk: 1, chink: 1, cipa: 1, cl1t: 1, clit: 1, clitoris: 1, clits: 1, cnut: 1, cock: 1, "cock-sucker": 1, cockface: 1, cockhead: 1, cockmunch: 1, cockmuncher: 1, cocks: 1, cocksuck: 1, cocksucked: 1, cocksucker: 1, cocksucking: 1, cocksucks: 1, cocksuka: 1, cocksukka: 1, cok: 1, cokmuncher: 1, coksucka: 1, coon: 1, cox: 1, crap: 1, cum: 1, cummer: 1, cumming: 1, cums: 1, cumshot: 1, cunilingus: 1, cunillingus: 1, cunnilingus: 1, cunt: 1, cuntlick: 1, cuntlicker: 1, cuntlicking: 1, cunts: 1, cyalis: 1, cyberfuc: 1, cyberfuck: 1, cyberfucked: 1, cyberfucker: 1, cyberfuckers: 1, cyberfucking: 1, d1ck: 1, damn: 1, dick: 1, dickhead: 1, dildo: 1, dildos: 1, dink: 1, dinks: 1, dirsa: 1, dlck: 1, "dog-fucker": 1, doggin: 1, dogging: 1, donkeyribber: 1, doosh: 1, duche: 1, dyke: 1, ejaculate: 1, ejaculated: 1, ejaculates: 1, ejaculating: 1, ejaculatings: 1, ejaculation: 1, ejakulate: 1, "f u c k": 1, "f u c k e r": 1, f4nny: 1, fag: 1, fagging: 1, faggitt: 1, faggot: 1, faggs: 1, fagot: 1, fagots: 1, fags: 1, fanny: 1, fannyflaps: 1, fannyfucker: 1, fanyy: 1, fatass: 1, fcuk: 1, fcuker: 1, fcuking: 1, feck: 1, fecker: 1, felching: 1, fellate: 1, fellatio: 1, fingerfuck: 1, fingerfucked: 1, fingerfucker: 1, fingerfuckers: 1, fingerfucking: 1, fingerfucks: 1, fistfuck: 1, fistfucked: 1, fistfucker: 1, fistfuckers: 1, fistfucking: 1, fistfuckings: 1, fistfucks: 1, flange: 1, fook: 1, fooker: 1, fuck: 1, fucka: 1, fucked: 1, fucker: 1, fuckers: 1, fuckhead: 1, fuckheads: 1, fuckin: 1, fucking: 1, fuckings: 1, fuckingshitmotherfucker: 1, fuckme: 1, fucks: 1, fuckwhit: 1, fuckwit: 1, "fudge packer": 1, fudgepacker: 1, fuk: 1, fuker: 1, fukker: 1, fukkin: 1, fuks: 1, fukwhit: 1, fukwit: 1, fux: 1, fux0r: 1, f_u_c_k: 1, gangbang: 1, gangbanged: 1, gangbangs: 1, gaylord: 1, gaysex: 1, goatse: 1, God: 1, "god-dam": 1, "god-damned": 1, goddamn: 1, goddamned: 1, hardcoresex: 1, hell: 1, heshe: 1, hoar: 1, hoare: 1, hoer: 1, homo: 1, hore: 1, horniest: 1, horny: 1, hotsex: 1, "jack-off": 1, jackoff: 1, jap: 1, "jerk-off": 1, jism: 1, jiz: 1, jizm: 1, jizz: 1, kawk: 1, knob: 1, knobead: 1, knobed: 1, knobend: 1, knobhead: 1, knobjocky: 1, knobjokey: 1, kock: 1, kondum: 1, kondums: 1, kum: 1, kummer: 1, kumming: 1, kums: 1, kunilingus: 1, "l3i+ch": 1, l3itch: 1, labia: 1, lust: 1, lusting: 1, m0f0: 1, m0fo: 1, m45terbate: 1, ma5terb8: 1, ma5terbate: 1, masochist: 1, "master-bate": 1, masterb8: 1, "masterbat*": 1, masterbat3: 1, masterbate: 1, masterbation: 1, masterbations: 1, masturbate: 1, "mo-fo": 1, mof0: 1, mofo: 1, mothafuck: 1, mothafucka: 1, mothafuckas: 1, mothafuckaz: 1, mothafucked: 1, mothafucker: 1, mothafuckers: 1, mothafuckin: 1, mothafucking: 1, mothafuckings: 1, mothafucks: 1, "mother fucker": 1, motherfuck: 1, motherfucked: 1, motherfucker: 1, motherfuckers: 1, motherfuckin: 1, motherfucking: 1, motherfuckings: 1, motherfuckka: 1, motherfucks: 1, muff: 1, mutha: 1, muthafecker: 1, muthafuckker: 1, muther: 1, mutherfucker: 1, n1gga: 1, n1gger: 1, nazi: 1, nigg3r: 1, nigg4h: 1, nigga: 1, niggah: 1, niggas: 1, niggaz: 1, nigger: 1, niggers: 1, nob: 1, "nob jokey": 1, nobhead: 1, nobjocky: 1, nobjokey: 1, numbnuts: 1, nutsack: 1, orgasim: 1, orgasims: 1, orgasm: 1, orgasms: 1, p0rn: 1, pawn: 1, pecker: 1, penis: 1, penisfucker: 1, phonesex: 1, phuck: 1, phuk: 1, phuked: 1, phuking: 1, phukked: 1, phukking: 1, phuks: 1, phuq: 1, pigfucker: 1, pimpis: 1, piss: 1, pissed: 1, pisser: 1, pissers: 1, pisses: 1, pissflaps: 1, pissin: 1, pissing: 1, pissoff: 1, poop: 1, porn: 1, porno: 1, pornography: 1, pornos: 1, prick: 1, pricks: 1, pron: 1, pube: 1, pusse: 1, pussi: 1, pussies: 1, pussy: 1, pussys: 1, rectum: 1, retard: 1, rimjaw: 1, rimming: 1, "s hit": 1, "s.o.b.": 1, sadist: 1, schlong: 1, screwing: 1, scroat: 1, scrote: 1, scrotum: 1, semen: 1, sex: 1, "sh!+": 1, "sh!t": 1, sh1t: 1, shag: 1, shagger: 1, shaggin: 1, shagging: 1, shemale: 1, "shi+": 1, shit: 1, shitdick: 1, shite: 1, shited: 1, shitey: 1, shitfuck: 1, shitfull: 1, shithead: 1, shiting: 1, shitings: 1, shits: 1, shitted: 1, shitter: 1, shitters: 1, shitting: 1, shittings: 1, shitty: 1, skank: 1, slut: 1, sluts: 1, smegma: 1, smut: 1, snatch: 1, "son-of-a-bitch": 1, spac: 1, spunk: 1, s_h_i_t: 1, t1tt1e5: 1, t1tties: 1, teets: 1, teez: 1, testical: 1, testicle: 1, tit: 1, titfuck: 1, tits: 1, titt: 1, tittie5: 1, tittiefucker: 1, titties: 1, tittyfuck: 1, tittywank: 1, titwank: 1, tosser: 1, turd: 1, tw4t: 1, twat: 1, twathead: 1, twatty: 1, twunt: 1, twunter: 1, v14gra: 1, v1gra: 1, vagina: 1, viagra: 1, vulva: 1, w00se: 1, wang: 1, wank: 1, wanker: 1, wanky: 1, whoar: 1, whore: 1, willies: 1, willy: 1, xrated: 1, xxx: 1 }; var Hh = /\b(4r5e|5h1t|5hit|a55|anal|anus|ar5e|arrse|arse|ass|ass-fucker|asses|assfucker|assfukka|asshole|assholes|asswhole|a_s_s|b!tch|b00bs|b17ch|b1tch|ballbag|balls|ballsack|bastard|beastial|beastiality|bellend|bestial|bestiality|bi\+ch|biatch|bitch|bitcher|bitchers|bitches|bitchin|bitching|bloody|blow job|blowjob|blowjobs|boiolas|bollock|bollok|boner|boob|boobs|booobs|boooobs|booooobs|booooooobs|breasts|buceta|bugger|bum|bunny fucker|butt|butthole|buttmuch|buttplug|c0ck|c0cksucker|carpet muncher|cawk|chink|cipa|cl1t|clit|clitoris|clits|cnut|cock|cock-sucker|cockface|cockhead|cockmunch|cockmuncher|cocks|cocksuck|cocksucked|cocksucker|cocksucking|cocksucks|cocksuka|cocksukka|cok|cokmuncher|coksucka|coon|cox|crap|cum|cummer|cumming|cums|cumshot|cunilingus|cunillingus|cunnilingus|cunt|cuntlick|cuntlicker|cuntlicking|cunts|cyalis|cyberfuc|cyberfuck|cyberfucked|cyberfucker|cyberfuckers|cyberfucking|d1ck|damn|dick|dickhead|dildo|dildos|dink|dinks|dirsa|dlck|dog-fucker|doggin|dogging|donkeyribber|doosh|duche|dyke|ejaculate|ejaculated|ejaculates|ejaculating|ejaculatings|ejaculation|ejakulate|f u c k|f u c k e r|f4nny|fag|fagging|faggitt|faggot|faggs|fagot|fagots|fags|fanny|fannyflaps|fannyfucker|fanyy|fatass|fcuk|fcuker|fcuking|feck|fecker|felching|fellate|fellatio|fingerfuck|fingerfucked|fingerfucker|fingerfuckers|fingerfucking|fingerfucks|fistfuck|fistfucked|fistfucker|fistfuckers|fistfucking|fistfuckings|fistfucks|flange|fook|fooker|fuck|fucka|fucked|fucker|fuckers|fuckhead|fuckheads|fuckin|fucking|fuckings|fuckingshitmotherfucker|fuckme|fucks|fuckwhit|fuckwit|fudge packer|fudgepacker|fuk|fuker|fukker|fukkin|fuks|fukwhit|fukwit|fux|fux0r|f_u_c_k|gangbang|gangbanged|gangbangs|gaylord|gaysex|goatse|God|god-dam|god-damned|goddamn|goddamned|hardcoresex|hell|heshe|hoar|hoare|hoer|homo|hore|horniest|horny|hotsex|jack-off|jackoff|jap|jerk-off|jism|jiz|jizm|jizz|kawk|knob|knobead|knobed|knobend|knobhead|knobjocky|knobjokey|kock|kondum|kondums|kum|kummer|kumming|kums|kunilingus|l3i\+ch|l3itch|labia|lust|lusting|m0f0|m0fo|m45terbate|ma5terb8|ma5terbate|masochist|master-bate|masterb8|masterbat*|masterbat3|masterbate|masterbation|masterbations|masturbate|mo-fo|mof0|mofo|mothafuck|mothafucka|mothafuckas|mothafuckaz|mothafucked|mothafucker|mothafuckers|mothafuckin|mothafucking|mothafuckings|mothafucks|mother fucker|motherfuck|motherfucked|motherfucker|motherfuckers|motherfuckin|motherfucking|motherfuckings|motherfuckka|motherfucks|muff|mutha|muthafecker|muthafuckker|muther|mutherfucker|n1gga|n1gger|nazi|nigg3r|nigg4h|nigga|niggah|niggas|niggaz|nigger|niggers|nob|nob jokey|nobhead|nobjocky|nobjokey|numbnuts|nutsack|orgasim|orgasims|orgasm|orgasms|p0rn|pawn|pecker|penis|penisfucker|phonesex|phuck|phuk|phuked|phuking|phukked|phukking|phuks|phuq|pigfucker|pimpis|piss|pissed|pisser|pissers|pisses|pissflaps|pissin|pissing|pissoff|poop|porn|porno|pornography|pornos|prick|pricks|pron|pube|pusse|pussi|pussies|pussy|pussys|rectum|retard|rimjaw|rimming|s hit|s.o.b.|sadist|schlong|screwing|scroat|scrote|scrotum|semen|sex|sh!\+|sh!t|sh1t|shag|shagger|shaggin|shagging|shemale|shi\+|shit|shitdick|shite|shited|shitey|shitfuck|shitfull|shithead|shiting|shitings|shits|shitted|shitter|shitters|shitting|shittings|shitty|skank|slut|sluts|smegma|smut|snatch|son-of-a-bitch|spac|spunk|s_h_i_t|t1tt1e5|t1tties|teets|teez|testical|testicle|tit|titfuck|tits|titt|tittie5|tittiefucker|titties|tittyfuck|tittywank|titwank|tosser|turd|tw4t|twat|twathead|twatty|twunt|twunter|v14gra|v1gra|vagina|viagra|vulva|w00se|wang|wank|wanker|wanky|whoar|whore|willies|willy|xrated|xxx)\b/gi; var Lh = { object: zh, array: 0, regex: Hh }; const Fh = _h.words; const Vh = Lh.array; class Nh { constructor(t = {}) { Object.assign(this, { list: t.emptyList && [] || Array.prototype.concat.apply(Fh, [Vh, t.list || []]), exclude: t.exclude || [], splitRegex: t.splitRegex || /\b/, placeHolder: t.placeHolder || "*", regex: t.regex || /[^a-zA-Z0-9|\$|\@]|\^/g, replaceRegex: t.replaceRegex || /\w/g }); } isProfane(t) { return this.list.filter(i => { const n = new RegExp(`\\b${i.replace(/(\W)/g, "\\$1")}\\b`, "gi"); return !this.exclude.includes(i.toLowerCase()) && n.test(t); }).length > 0 || false; } replaceWord(t) { return t.replace(this.regex, "").replace(this.replaceRegex, this.placeHolder); } clean(t) { return t.split(this.splitRegex).map(i => this.isProfane(i) ? this.replaceWord(i) : i).join(this.splitRegex.exec(t)[0]); } addWords() { let t = Array.from(arguments); this.list.push(...t); t.map(i => i.toLowerCase()).forEach(i => { if (this.exclude.includes(i)) { this.exclude.splice(this.exclude.indexOf(i), 1); } }); } removeWords() { this.exclude.push(...Array.from(arguments).map(t => t.toLowerCase())); } } var Uh = Nh; const Wh = An(Uh); const Ko = new Wh(); const Xh = ["jew", "black", "baby", "child", "white", "porn", "pedo", "trump", "clinton", "hitler", "nazi", "gay", "pride", "sex", "pleasure", "touch", "poo", "kids", "rape", "white power", "nigga", "nig nog", "doggy", "rapist", "boner", "nigger", "nigg", "finger", "nogger", "nagger", "nig", "fag", "gai", "pole", "stripper", "penis", "vagina", "pussy", "nazi", "hitler", "stalin", "burn", "chamber", "cock", "peen", "dick", "spick", "nieger", "die", "satan", "n|ig", "nlg", "cunt", "c0ck", "fag", "lick", "condom", "anal", "shit", "phile", "little", "kids", "free KR", "tiny", "sidney", "ass", "kill", ".io", "(dot)", "[dot]", "mini", "whiore", "whore", "faggot", "github", "1337", "666", "satan", "senpa", "discord", "d1scord", "mistik", ".io", "senpa.io", "sidney", "sid", "senpaio", "vries", "asa"]; Ko.addWords(...Xh); const Ir = Math.abs; const Ut = Math.cos; const Wt = Math.sin; const Tr = Math.pow; const qh = Math.sqrt; function Gh(e, t, i, n, s, r, o, l, c, a, f, d, u, p) { this.id = e; this.sid = t; this.tmpScore = 0; this.team = null; this.skinIndex = 0; this.tailIndex = 0; this.hitTime = 0; this.tails = {}; for (var w = 0; w < f.length; ++w) { if (f[w].price <= 0) { this.tails[f[w].id] = 1; } } this.skins = {}; for (var w = 0; w < a.length; ++w) { if (a[w].price <= 0) { this.skins[a[w].id] = 1; } } this.points = 0; this.dt = 0; this.hidden = false; this.itemCounts = {}; this.isPlayer = true; this.pps = 0; this.moveDir = undefined; this.skinRot = 0; this.lastPing = 0; this.iconIndex = 0; this.skinColor = 0; this.spawn = function (v) { this.active = true; this.alive = true; this.lockMove = false; this.lockDir = false; this.minimapCounter = 0; this.chatCountdown = 0; this.shameCount = 0; this.shameTimer = 0; this.sentTo = {}; this.gathering = 0; this.autoGather = 0; this.animTime = 0; this.animSpeed = 0; this.mouseState = 0; this.buildIndex = -1; this.weaponIndex = 0; this.dmgOverTime = {}; this.noMovTimer = 0; this.maxXP = 300; this.XP = 0; this.age = 1; this.kills = 0; this.upgrAge = 2; this.upgradePoints = 0; this.x = 0; this.y = 0; this.zIndex = 0; this.xVel = 0; this.yVel = 0; this.slowMult = 1; this.dir = 0; this.dirPlus = 0; this.targetDir = 0; this.targetAngle = 0; this.maxHealth = 100; this.health = this.maxHealth; this.scale = i.playerScale; this.speed = i.playerSpeed; this.resetMoveDir(); this.resetResources(v); this.items = [0, 3, 6, 10]; this.weapons = [0]; this.shootCount = 0; this.weaponXP = []; this.reloads = {}; this.timeSpentNearVolcano = 0; }; this.resetMoveDir = function () { this.moveDir = undefined; }; this.resetResources = function (v) { for (let S = 0; S < i.resourceTypes.length; ++S) { this[i.resourceTypes[S]] = v ? 100 : 0; } }; this.addItem = function (v) { const S = c.list[v]; if (S) { for (let R = 0; R < this.items.length; ++R) { if (c.list[this.items[R]].group == S.group) { if (this.buildIndex == this.items[R]) { this.buildIndex = v; } this.items[R] = v; return true; } } this.items.push(v); return true; } return false; }; this.setUserData = function (v) { if (v) { this.name = "unknown"; let S = v.name + ""; S = S.slice(0, i.maxNameLength); S = S.replace(/[^\w:\(\)\/? -]+/gmi, " "); S = S.replace(/[^\x00-\x7F]/g, " "); S = S.trim(); let R = false; const G = S.toLowerCase().replace(/\s/g, "").replace(/1/g, "i").replace(/0/g, "o").replace(/5/g, "s"); for (const X of Ko.list) { if (G.indexOf(X) != -1) { R = true; break; } } if (S.length > 0 && !R) { this.name = S; } this.skinColor = 0; if (i.skinColors[v.skin]) { this.skinColor = v.skin; } } }; this.getData = function () { return [this.id, this.sid, this.name, n.fixTo(this.x, 2), n.fixTo(this.y, 2), n.fixTo(this.dir, 3), this.health, this.maxHealth, this.scale, this.skinColor]; }; this.setData = function (v) { this.id = v[0]; this.sid = v[1]; this.name = v[2]; this.x = v[3]; this.y = v[4]; this.dir = v[5]; this.health = v[6]; this.maxHealth = v[7]; this.scale = v[8]; this.skinColor = v[9]; }; let x = 0; this.update = function (v) { if (!this.alive) { return; } if ((n.getDistance(this.x, this.y, i.volcanoLocationX, i.volcanoLocationY) || 0) < i.volcanoAggressionRadius) { this.timeSpentNearVolcano += v; if (this.timeSpentNearVolcano >= 1000) { this.changeHealth(i.volcanoDamagePerSecond, null); d.send(this.id, "8", Math.round(this.x), Math.round(this.y), i.volcanoDamagePerSecond, -1); this.timeSpentNearVolcano %= 1000; } } if (this.shameTimer > 0) { this.shameTimer -= v; if (this.shameTimer <= 0) { this.shameTimer = 0; this.shameCount = 0; } } x -= v; if (x <= 0) { const _ = (this.skin && this.skin.healthRegen ? this.skin.healthRegen : 0) + (this.tail && this.tail.healthRegen ? this.tail.healthRegen : 0); if (_) { this.changeHealth(_, this); } if (this.dmgOverTime.dmg) { this.changeHealth(-this.dmgOverTime.dmg, this.dmgOverTime.doer); this.dmgOverTime.time -= 1; if (this.dmgOverTime.time <= 0) { this.dmgOverTime.dmg = 0; } } if (this.healCol) { this.changeHealth(this.healCol, this); } x = 1000; } if (!this.alive) { return; } if (this.slowMult < 1) { this.slowMult += v * 0.0008; if (this.slowMult > 1) { this.slowMult = 1; } } this.noMovTimer += v; if (this.xVel || this.yVel) { this.noMovTimer = 0; } if (this.lockMove) { this.xVel = 0; this.yVel = 0; } else { let _ = (this.buildIndex >= 0 ? 0.5 : 1) * (c.weapons[this.weaponIndex].spdMult || 1) * (this.skin && this.skin.spdMult || 1) * (this.tail && this.tail.spdMult || 1) * (this.y <= i.snowBiomeTop ? this.skin && this.skin.coldM ? 1 : i.snowSpeed : 1) * this.slowMult; if (!this.zIndex && this.y >= i.mapScale / 2 - i.riverWidth / 2 && this.y <= i.mapScale / 2 + i.riverWidth / 2) { if (this.skin && this.skin.watrImm) { _ *= 0.75; this.xVel += i.waterCurrent * 0.4 * v; } else { _ *= 0.33; this.xVel += i.waterCurrent * v; } } let D = this.moveDir != null ? Ut(this.moveDir) : 0; let z = this.moveDir != null ? Wt(this.moveDir) : 0; const N = qh(D * D + z * z); if (N != 0) { D /= N; z /= N; } if (D) { this.xVel += D * this.speed * _ * v; } if (z) { this.yVel += z * this.speed * _ * v; } } this.zIndex = 0; this.lockMove = false; this.healCol = 0; let R; const G = n.getDistance(0, 0, this.xVel * v, this.yVel * v); const X = Math.min(4, Math.max(1, Math.round(G / 40))); const W = 1 / X; let M = {}; for (var V = 0; V < X; ++V) { if (this.xVel) { this.x += this.xVel * v * W; } if (this.yVel) { this.y += this.yVel * v * W; } R = r.getGridArrays(this.x, this.y, this.scale); for (let _ = 0; _ < R.length; ++_) { for (let D = 0; D < R[_].length && !(R[_][D].active && !M[R[_][D].sid] && r.checkCollision(this, R[_][D], W) && (M[R[_][D].sid] = true, !this.alive)); ++D); if (!this.alive) { break; } } if (!this.alive) { break; } } for (var F = o.indexOf(this), V = F + 1; V < o.length; ++V) { if (o[V] != this && o[V].alive) { r.checkCollision(this, o[V]); } } if (this.xVel) { this.xVel *= Tr(i.playerDecel, v); if (this.xVel <= 0.01 && this.xVel >= -0.01) { this.xVel = 0; } } if (this.yVel) { this.yVel *= Tr(i.playerDecel, v); if (this.yVel <= 0.01 && this.yVel >= -0.01) { this.yVel = 0; } } if (this.x - this.scale < 0) { this.x = this.scale; } else if (this.x + this.scale > i.mapScale) { this.x = i.mapScale - this.scale; } if (this.y - this.scale < 0) { this.y = this.scale; } else if (this.y + this.scale > i.mapScale) { this.y = i.mapScale - this.scale; } if (this.buildIndex < 0) { if (this.reloads[this.weaponIndex] > 0) { this.reloads[this.weaponIndex] -= v; this.gathering = this.mouseState; } else if (this.gathering || this.autoGather) { let _ = true; if (c.weapons[this.weaponIndex].gather != null) { this.gather(o); } else if (c.weapons[this.weaponIndex].projectile != null && this.hasRes(c.weapons[this.weaponIndex], this.skin ? this.skin.projCost : 0)) { this.useRes(c.weapons[this.weaponIndex], this.skin ? this.skin.projCost : 0); this.noMovTimer = 0; var F = c.weapons[this.weaponIndex].projectile; const z = this.scale * 2; const N = this.skin && this.skin.aMlt ? this.skin.aMlt : 1; if (c.weapons[this.weaponIndex].rec) { this.xVel -= c.weapons[this.weaponIndex].rec * Ut(this.dir); this.yVel -= c.weapons[this.weaponIndex].rec * Wt(this.dir); } s.addProjectile(this.x + z * Ut(this.dir), this.y + z * Wt(this.dir), this.dir, c.projectiles[F].range * N, c.projectiles[F].speed * N, F, this, null, this.zIndex); } else { _ = false; } this.gathering = this.mouseState; if (_) { this.reloads[this.weaponIndex] = c.weapons[this.weaponIndex].speed * (this.skin && this.skin.atkSpd || 1); } } } }; this.addWeaponXP = function (v) { if (!this.weaponXP[this.weaponIndex]) { this.weaponXP[this.weaponIndex] = 0; } this.weaponXP[this.weaponIndex] += v; }; this.earnXP = function (v) { if (this.age < i.maxAge) { this.XP += v; if (this.XP >= this.maxXP) { if (this.age < i.maxAge) { this.age++; this.XP = 0; this.maxXP *= 1.2; } else { this.XP = this.maxXP; } this.upgradePoints++; d.send(this.id, "U", this.upgradePoints, this.upgrAge); d.send(this.id, "T", this.XP, n.fixTo(this.maxXP, 1), this.age); } else { d.send(this.id, "T", this.XP); } } }; this.changeHealth = function (v, S) { if (v > 0 && this.health >= this.maxHealth) { return false; } if (v < 0 && this.skin) { v *= this.skin.dmgMult || 1; } if (v < 0 && this.tail) { v *= this.tail.dmgMult || 1; } if (v < 0) { this.hitTime = Date.now(); } this.health += v; if (this.health > this.maxHealth) { v -= this.health - this.maxHealth; this.health = this.maxHealth; } if (this.health <= 0) { this.kill(S); } for (let R = 0; R < o.length; ++R) { if (this.sentTo[o[R].id]) { d.send(o[R].id, "O", this.sid, this.health); } } if (S && S.canSee(this) && !(S == this && v < 0)) { d.send(S.id, "8", Math.round(this.x), Math.round(this.y), Math.round(-v), 1); } return true; }; this.kill = function (v) { if (v && v.alive) { v.kills++; if (v.skin && v.skin.goldSteal) { u(v, Math.round(this.points / 2)); } else { u(v, Math.round(this.age * 100 * (v.skin && v.skin.kScrM ? v.skin.kScrM : 1))); } d.send(v.id, "N", "kills", v.kills, 1); } this.alive = false; d.send(this.id, "P"); p(); }; this.addResource = function (v, S, R) { if (!R && S > 0) { this.addWeaponXP(S); } if (v == 3) { u(this, S, true); } else { this[i.resourceTypes[v]] += S; d.send(this.id, "N", i.resourceTypes[v], this[i.resourceTypes[v]], 1); } }; this.changeItemCount = function (v, S) { this.itemCounts[v] = this.itemCounts[v] || 0; this.itemCounts[v] += S; d.send(this.id, "S", v, this.itemCounts[v]); }; this.buildItem = function (v) { const S = this.scale + v.scale + (v.placeOffset || 0); const R = this.x + S * Ut(this.dir); const G = this.y + S * Wt(this.dir); if (this.canBuild(v) && !(v.consume && this.skin && this.skin.noEat) && (v.consume || r.checkItemLocation(R, G, v.scale, 0.6, v.id, false, this))) { let X = false; if (v.consume) { if (this.hitTime) { const W = Date.now() - this.hitTime; this.hitTime = 0; if (W <= 120) { this.shameCount++; if (this.shameCount >= 8) { this.shameTimer = 30000; this.shameCount = 0; } } else { this.shameCount -= 2; if (this.shameCount <= 0) { this.shameCount = 0; } } } if (this.shameTimer <= 0) { X = v.consume(this); } } else { X = true; if (v.group.limit) { this.changeItemCount(v.group.id, 1); } if (v.pps) { this.pps += v.pps; } r.add(r.objects.length, R, G, this.dir, v.scale, v.type, v, false, this); } if (X) { this.useRes(v); this.buildIndex = -1; } } }; this.hasRes = function (v, S) { for (let R = 0; R < v.req.length;) { if (this[v.req[R]] < Math.round(v.req[R + 1] * (S || 1))) { return false; } R += 2; } return true; }; this.useRes = function (v, S) { if (!i.inSandbox) { for (let R = 0; R < v.req.length;) { this.addResource(i.resourceTypes.indexOf(v.req[R]), -Math.round(v.req[R + 1] * (S || 1))); R += 2; } } }; this.canBuild = function (v) { const S = i.inSandbox ? v.group.sandboxLimit || Math.max(v.group.limit * 3, 99) : v.group.limit; if (S && this.itemCounts[v.group.id] >= S) { return false; } else if (i.inSandbox) { return true; } else { return this.hasRes(v); } }; this.gather = function () { this.noMovTimer = 0; this.slowMult -= c.weapons[this.weaponIndex].hitSlow || 0.3; if (this.slowMult < 0) { this.slowMult = 0; } const v = i.fetchVariant(this); const S = v.poison; const R = v.val; const G = {}; let X; let W; let M; let V; const F = r.getGridArrays(this.x, this.y, c.weapons[this.weaponIndex].range); for (let D = 0; D < F.length; ++D) { for (var _ = 0; _ < F[D].length; ++_) { M = F[D][_]; if (M.active && !M.dontGather && !G[M.sid] && M.visibleToPlayer(this) && (X = n.getDistance(this.x, this.y, M.x, M.y) - M.scale, X <= c.weapons[this.weaponIndex].range && (W = n.getDirection(M.x, M.y, this.x, this.y), n.getAngleDist(W, this.dir) <= i.gatherAngle))) { G[M.sid] = 1; if (M.health) { if (M.changeHealth(-c.weapons[this.weaponIndex].dmg * R * (c.weapons[this.weaponIndex].sDmg || 1) * (this.skin && this.skin.bDmg ? this.skin.bDmg : 1), this)) { for (let z = 0; z < M.req.length;) { this.addResource(i.resourceTypes.indexOf(M.req[z]), M.req[z + 1]); z += 2; } r.disableObj(M); } } else { if (M.name === "volcano") { this.hitVolcano(c.weapons[this.weaponIndex].gather); } else { this.earnXP(c.weapons[this.weaponIndex].gather * 4); const z = c.weapons[this.weaponIndex].gather + (M.type == 3 ? 4 : 0); this.addResource(M.type, z); } if (this.skin && this.skin.extraGold) { this.addResource(3, 1); } } V = true; r.hitObj(M, W); } } } for (var _ = 0; _ < o.length + l.length; ++_) { M = o[_] || l[_ - o.length]; if (M != this && M.alive && !(M.team && M.team == this.team) && (X = n.getDistance(this.x, this.y, M.x, M.y) - M.scale * 1.8, X <= c.weapons[this.weaponIndex].range && (W = n.getDirection(M.x, M.y, this.x, this.y), n.getAngleDist(W, this.dir) <= i.gatherAngle))) { let z = c.weapons[this.weaponIndex].steal; if (z && M.addResource) { z = Math.min(M.points || 0, z); this.addResource(3, z); M.addResource(3, -z); } let N = R; if (M.weaponIndex != null && c.weapons[M.weaponIndex].shield && n.getAngleDist(W + Math.PI, M.dir) <= i.shieldAngle) { N = c.weapons[M.weaponIndex].shield; } const Y = c.weapons[this.weaponIndex].dmg; const K = Y * (this.skin && this.skin.dmgMultO ? this.skin.dmgMultO : 1) * (this.tail && this.tail.dmgMultO ? this.tail.dmgMultO : 1); const ie = (M.weightM || 1) * 0.3 + (c.weapons[this.weaponIndex].knock || 0); M.xVel += ie * Ut(W); M.yVel += ie * Wt(W); if (this.skin && this.skin.healD) { this.changeHealth(K * N * this.skin.healD, this); } if (this.tail && this.tail.healD) { this.changeHealth(K * N * this.tail.healD, this); } if (M.skin && M.skin.dmg) { this.changeHealth(-Y * M.skin.dmg, M); } if (M.tail && M.tail.dmg) { this.changeHealth(-Y * M.tail.dmg, M); } if (M.dmgOverTime && this.skin && this.skin.poisonDmg && !(M.skin && M.skin.poisonRes)) { M.dmgOverTime.dmg = this.skin.poisonDmg; M.dmgOverTime.time = this.skin.poisonTime || 1; M.dmgOverTime.doer = this; } if (M.dmgOverTime && S && !(M.skin && M.skin.poisonRes)) { M.dmgOverTime.dmg = 5; M.dmgOverTime.time = 5; M.dmgOverTime.doer = this; } if (M.skin && M.skin.dmgK) { this.xVel -= M.skin.dmgK * Ut(W); this.yVel -= M.skin.dmgK * Wt(W); } M.changeHealth(-K * N, this, this); } } this.sendAnimation(V ? 1 : 0); }; this.hitVolcano = function (v) { const S = 5 + Math.round(v / 3.5); this.addResource(2, S); this.addResource(3, S); }; this.sendAnimation = function (v) { for (let S = 0; S < o.length; ++S) { if (this.sentTo[o[S].id] && this.canSee(o[S])) { d.send(o[S].id, "K", this.sid, v ? 1 : 0, this.weaponIndex); } } }; let b = 0; let $ = 0; this.animate = function (v) { if (this.animTime > 0) { this.animTime -= v; if (this.animTime <= 0) { this.animTime = 0; this.dirPlus = 0; b = 0; $ = 0; } else if ($ == 0) { b += v / (this.animSpeed * i.hitReturnRatio); this.dirPlus = n.lerp(0, this.targetAngle, Math.min(1, b)); if (b >= 1) { b = 1; $ = 1; } } else { b -= v / (this.animSpeed * (1 - i.hitReturnRatio)); this.dirPlus = n.lerp(0, this.targetAngle, Math.max(0, b)); } } }; this.startAnim = function (v, S) { this.animTime = this.animSpeed = c.weapons[S].speed; this.targetAngle = v ? -i.hitAngle : -Math.PI; b = 0; $ = 0; }; this.canSee = function (v) { if (!v || v.skin && v.skin.invisTimer && v.noMovTimer >= v.skin.invisTimer) { return false; } const S = Ir(v.x - this.x) - v.scale; const R = Ir(v.y - this.y) - v.scale; return S <= i.maxScreenWidth / 2 * 1.3 && R <= i.maxScreenHeight / 2 * 1.3; }; } const Yh = [{ id: 45, name: "Shame!", dontSell: true, price: 0, scale: 120, desc: "hacks are for losers" }, { id: 51, name: "Moo Cap", price: 0, scale: 120, desc: "coolest mooer around" }, { id: 50, name: "Apple Cap", price: 0, scale: 120, desc: "apple farms remembers" }, { id: 28, name: "Moo Head", price: 0, scale: 120, desc: "no effect" }, { id: 29, name: "Pig Head", price: 0, scale: 120, desc: "no effect" }, { id: 30, name: "Fluff Head", price: 0, scale: 120, desc: "no effect" }, { id: 36, name: "Pandou Head", price: 0, scale: 120, desc: "no effect" }, { id: 37, name: "Bear Head", price: 0, scale: 120, desc: "no effect" }, { id: 38, name: "Monkey Head", price: 0, scale: 120, desc: "no effect" }, { id: 44, name: "Polar Head", price: 0, scale: 120, desc: "no effect" }, { id: 35, name: "Fez Hat", price: 0, scale: 120, desc: "no effect" }, { id: 42, name: "Enigma Hat", price: 0, scale: 120, desc: "join the enigma army" }, { id: 43, name: "Blitz Hat", price: 0, scale: 120, desc: "hey everybody i'm blitz" }, { id: 49, name: "Bob XIII Hat", price: 0, scale: 120, desc: "like and subscribe" }, { id: 57, name: "Pumpkin", price: 50, scale: 120, desc: "Spooooky" }, { id: 8, name: "Bummle Hat", price: 100, scale: 120, desc: "no effect" }, { id: 2, name: "Straw Hat", price: 500, scale: 120, desc: "no effect" }, { id: 15, name: "Winter Cap", price: 600, scale: 120, desc: "allows you to move at normal speed in snow", coldM: 1 }, { id: 5, name: "Cowboy Hat", price: 1000, scale: 120, desc: "no effect" }, { id: 4, name: "Ranger Hat", price: 2000, scale: 120, desc: "no effect" }, { id: 18, name: "Explorer Hat", price: 2000, scale: 120, desc: "no effect" }, { id: 31, name: "Flipper Hat", price: 2500, scale: 120, desc: "have more control while in water", watrImm: true }, { id: 1, name: "Marksman Cap", price: 3000, scale: 120, desc: "increases arrow speed and range", aMlt: 1.3 }, { id: 10, name: "Bush Gear", price: 3000, scale: 160, desc: "allows you to disguise yourself as a bush" }, { id: 48, name: "Halo", price: 3000, scale: 120, desc: "no effect" }, { id: 6, name: "Soldier Helmet", price: 4000, scale: 120, desc: "reduces damage taken but slows movement", spdMult: 0.94, dmgMult: 0.75 }, { id: 23, name: "Anti Venom Gear", price: 4000, scale: 120, desc: "makes you immune to poison", poisonRes: 1 }, { id: 13, name: "Medic Gear", price: 5000, scale: 110, desc: "slowly regenerates health over time", healthRegen: 3 }, { id: 9, name: "Miners Helmet", price: 5000, scale: 120, desc: "earn 1 extra gold per resource", extraGold: 1 }, { id: 32, name: "Musketeer Hat", price: 5000, scale: 120, desc: "reduces cost of projectiles", projCost: 0.5 }, { id: 7, name: "Bull Helmet", price: 6000, scale: 120, desc: "increases damage done but drains health", healthRegen: -5, dmgMultO: 1.5, spdMult: 0.96 }, { id: 22, name: "Emp Helmet", price: 6000, scale: 120, desc: "turrets won't attack but you move slower", antiTurret: 1, spdMult: 0.7 }, { id: 12, name: "Booster Hat", price: 6000, scale: 120, desc: "increases your movement speed", spdMult: 1.16 }, { id: 26, name: "Barbarian Armor", price: 8000, scale: 120, desc: "knocks back enemies that attack you", dmgK: 0.6 }, { id: 21, name: "Plague Mask", price: 10000, scale: 120, desc: "melee attacks deal poison damage", poisonDmg: 5, poisonTime: 6 }, { id: 46, name: "Bull Mask", price: 10000, scale: 120, desc: "bulls won't target you unless you attack them", bullRepel: 1 }, { id: 14, name: "Windmill Hat", topSprite: true, price: 10000, scale: 120, desc: "generates points while worn", pps: 1.5 }, { id: 11, name: "Spike Gear", topSprite: true, price: 10000, scale: 120, desc: "deal damage to players that damage you", dmg: 0.45 }, { id: 53, name: "Turret Gear", topSprite: true, price: 10000, scale: 120, desc: "you become a walking turret", turret: { proj: 1, range: 700, rate: 2500 }, spdMult: 0.7 }, { id: 20, name: "Samurai Armor", price: 12000, scale: 120, desc: "increased attack speed and fire rate", atkSpd: 0.78 }, { id: 58, name: "Dark Knight", price: 12000, scale: 120, desc: "restores health when you deal damage", healD: 0.4 }, { id: 27, name: "Scavenger Gear", price: 15000, scale: 120, desc: "earn double points for each kill", kScrM: 2 }, { id: 40, name: "Tank Gear", price: 15000, scale: 120, desc: "increased damage to buildings but slower movement", spdMult: 0.3, bDmg: 3.3 }, { id: 52, name: "Thief Gear", price: 15000, scale: 120, desc: "steal half of a players gold when you kill them", goldSteal: 0.5 }, { id: 55, name: "Bloodthirster", price: 20000, scale: 120, desc: "Restore Health when dealing damage. And increased damage", healD: 0.25, dmgMultO: 1.2 }, { id: 56, name: "Assassin Gear", price: 20000, scale: 120, desc: "Go invisible when not moving. Can't eat. Increased speed", noEat: true, spdMult: 1.1, invisTimer: 1000 }]; const Kh = [{ id: 12, name: "Snowball", price: 1000, scale: 105, xOff: 18, desc: "no effect" }, { id: 9, name: "Tree Cape", price: 1000, scale: 90, desc: "no effect" }, { id: 10, name: "Stone Cape", price: 1000, scale: 90, desc: "no effect" }, { id: 3, name: "Cookie Cape", price: 1500, scale: 90, desc: "no effect" }, { id: 8, name: "Cow Cape", price: 2000, scale: 90, desc: "no effect" }, { id: 11, name: "Monkey Tail", price: 2000, scale: 97, xOff: 25, desc: "Super speed but reduced damage", spdMult: 1.35, dmgMultO: 0.2 }, { id: 17, name: "Apple Basket", price: 3000, scale: 80, xOff: 12, desc: "slowly regenerates health over time", healthRegen: 1 }, { id: 6, name: "Winter Cape", price: 3000, scale: 90, desc: "no effect" }, { id: 4, name: "Skull Cape", price: 4000, scale: 90, desc: "no effect" }, { id: 5, name: "Dash Cape", price: 5000, scale: 90, desc: "no effect" }, { id: 2, name: "Dragon Cape", price: 6000, scale: 90, desc: "no effect" }, { id: 1, name: "Super Cape", price: 8000, scale: 90, desc: "no effect" }, { id: 7, name: "Troll Cape", price: 8000, scale: 90, desc: "no effect" }, { id: 14, name: "Thorns", price: 10000, scale: 115, xOff: 20, desc: "no effect" }, { id: 15, name: "Blockades", price: 10000, scale: 95, xOff: 15, desc: "no effect" }, { id: 20, name: "Devils Tail", price: 10000, scale: 95, xOff: 20, desc: "no effect" }, { id: 16, name: "Sawblade", price: 12000, scale: 90, spin: true, xOff: 0, desc: "deal damage to players that damage you", dmg: 0.15 }, { id: 13, name: "Angel Wings", price: 15000, scale: 138, xOff: 22, desc: "slowly regenerates health over time", healthRegen: 3 }, { id: 19, name: "Shadow Wings", price: 15000, scale: 138, xOff: 22, desc: "increased movement speed", spdMult: 1.1 }, { id: 18, name: "Blood Wings", price: 20000, scale: 178, xOff: 26, desc: "restores health when you deal damage", healD: 0.2 }, { id: 21, name: "Corrupt X Wings", price: 20000, scale: 178, xOff: 26, desc: "deal damage to players that damage you", dmg: 0.25 }]; const Zo = { hats: Yh, accessories: Kh }; function Zh(e, t, i, n, s, r, o) { this.init = function (a, f, d, u, p, w, x, b, $) { this.active = true; this.indx = a; this.x = f; this.y = d; this.dir = u; this.skipMov = true; this.speed = p; this.dmg = w; this.scale = b; this.range = x; this.owner = $; if (o) { this.sentTo = {}; } }; const l = []; let c; this.update = function (a) { if (this.active) { let d = this.speed * a; let u; if (this.skipMov) { this.skipMov = false; } else { this.x += d * Math.cos(this.dir); this.y += d * Math.sin(this.dir); this.range -= d; if (this.range <= 0) { this.x += this.range * Math.cos(this.dir); this.y += this.range * Math.sin(this.dir); d = 1; this.range = 0; this.active = false; } } if (o) { for (var f = 0; f < e.length; ++f) { if (!this.sentTo[e[f].id] && e[f].canSee(this)) { this.sentTo[e[f].id] = 1; o.send(e[f].id, "X", r.fixTo(this.x, 1), r.fixTo(this.y, 1), r.fixTo(this.dir, 2), r.fixTo(this.range, 1), this.speed, this.indx, this.layer, this.sid); } } l.length = 0; for (var f = 0; f < e.length + t.length; ++f) { c = e[f] || t[f - e.length]; if (c.alive && c != this.owner && !(this.owner.team && c.team == this.owner.team) && r.lineInRect(c.x - c.scale, c.y - c.scale, c.x + c.scale, c.y + c.scale, this.x, this.y, this.x + d * Math.cos(this.dir), this.y + d * Math.sin(this.dir))) { l.push(c); } } const p = i.getGridArrays(this.x, this.y, this.scale); for (let w = 0; w < p.length; ++w) { for (let x = 0; x < p[w].length; ++x) { c = p[w][x]; u = c.getScale(); if (c.active && this.ignoreObj != c.sid && this.layer <= c.layer && l.indexOf(c) < 0 && !c.ignoreCollision && r.lineInRect(c.x - u, c.y - u, c.x + u, c.y + u, this.x, this.y, this.x + d * Math.cos(this.dir), this.y + d * Math.sin(this.dir))) { l.push(c); } } } if (l.length > 0) { let w = null; let x = null; let b = null; for (var f = 0; f < l.length; ++f) { b = r.getDistance(this.x, this.y, l[f].x, l[f].y); if (x == null || b < x) { x = b; w = l[f]; } } if (w.isPlayer || w.isAI) { const $ = (w.weightM || 1) * 0.3; w.xVel += $ * Math.cos(this.dir); w.yVel += $ * Math.sin(this.dir); if (w.weaponIndex == null || !(n.weapons[w.weaponIndex].shield && r.getAngleDist(this.dir + Math.PI, w.dir) <= s.shieldAngle)) { w.changeHealth(-this.dmg, this.owner, this.owner); } } else { if (w.projDmg && w.health && w.changeHealth(-this.dmg)) { i.disableObj(w); } for (var f = 0; f < e.length; ++f) { if (e[f].active) { if (w.sentTo[e[f].id]) { if (w.active) { if (e[f].canSee(w)) { o.send(e[f].id, "L", r.fixTo(this.dir, 2), w.sid); } } else { o.send(e[f].id, "Q", w.sid); } } if (!w.active && w.owner == e[f]) { e[f].changeItemCount(w.group.id, -1); } } } } this.active = false; for (var f = 0; f < e.length; ++f) { if (this.sentTo[e[f].id]) { o.send(e[f].id, "Y", this.sid, r.fixTo(x, 1)); } } } } } }; } var Jo = { exports: {} }; var Qo = { exports: {} }; (function () { var e = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; var t = { rotl: function (i, n) { return i << n | i >>> 32 - n; }, rotr: function (i, n) { return i << 32 - n | i >>> n; }, endian: function (i) { if (i.constructor == Number) { return t.rotl(i, 8) & 16711935 | t.rotl(i, 24) & 4278255360; } for (var n = 0; n < i.length; n++) { i[n] = t.endian(i[n]); } return i; }, randomBytes: function (i) { for (var n = []; i > 0; i--) { n.push(Math.floor(Math.random() * 256)); } return n; }, bytesToWords: function (i) { for (var n = [], s = 0, r = 0; s < i.length; s++, r += 8) { n[r >>> 5] |= i[s] << 24 - r % 32; } return n; }, wordsToBytes: function (i) { for (var n = [], s = 0; s < i.length * 32; s += 8) { n.push(i[s >>> 5] >>> 24 - s % 32 & 255); } return n; }, bytesToHex: function (i) { for (var n = [], s = 0; s < i.length; s++) { n.push((i[s] >>> 4).toString(16)); n.push((i[s] & 15).toString(16)); } return n.join(""); }, hexToBytes: function (i) { for (var n = [], s = 0; s < i.length; s += 2) { n.push(parseInt(i.substr(s, 2), 16)); } return n; }, bytesToBase64: function (i) { for (var n = [], s = 0; s < i.length; s += 3) { for (var r = i[s] << 16 | i[s + 1] << 8 | i[s + 2], o = 0; o < 4; o++) { if (s * 8 + o * 6 <= i.length * 8) { n.push(e.charAt(r >>> (3 - o) * 6 & 63)); } else { n.push("="); } } } return n.join(""); }, base64ToBytes: function (i) { i = i.replace(/[^A-Z0-9+\/]/ig, ""); for (var n = [], s = 0, r = 0; s < i.length; r = ++s % 4) { if (r != 0) { n.push((e.indexOf(i.charAt(s - 1)) & Math.pow(2, r * -2 + 8) - 1) << r * 2 | e.indexOf(i.charAt(s)) >>> 6 - r * 2); } } return n; } }; Qo.exports = t; })(); var Jh = Qo.exports; var Es = { utf8: { stringToBytes: function (e) { return Es.bin.stringToBytes(unescape(encodeURIComponent(e))); }, bytesToString: function (e) { return decodeURIComponent(escape(Es.bin.bytesToString(e))); } }, bin: { stringToBytes: function (e) { for (var t = [], i = 0; i < e.length; i++) { t.push(e.charCodeAt(i) & 255); } return t; }, bytesToString: function (e) { for (var t = [], i = 0; i < e.length; i++) { t.push(String.fromCharCode(e[i])); } return t.join(""); } } }; var Mr = Es; /*! * Determine if an object is a Buffer * * @author Feross Aboukhadijeh <https://feross.org> * @license MIT */ function Qh(e) { return e != null && (jo(e) || jh(e) || !!e._isBuffer); } function jo(e) { return !!e.constructor && typeof e.constructor.isBuffer == "function" && e.constructor.isBuffer(e); } function jh(e) { return typeof e.readFloatLE == "function" && typeof e.slice == "function" && jo(e.slice(0, 0)); } (function () { var e = Jh; var t = Mr.utf8; var i = Qh; var n = Mr.bin; function s(r, o) { if (r.constructor == String) { if (o && o.encoding === "binary") { r = n.stringToBytes(r); } else { r = t.stringToBytes(r); } } else if (i(r)) { r = Array.prototype.slice.call(r, 0); } else if (!Array.isArray(r) && r.constructor !== Uint8Array) { r = r.toString(); } for (var l = e.bytesToWords(r), c = r.length * 8, a = 1732584193, f = -271733879, d = -1732584194, u = 271733878, p = 0; p < l.length; p++) { l[p] = (l[p] << 8 | l[p] >>> 24) & 16711935 | (l[p] << 24 | l[p] >>> 8) & 4278255360; } l[c >>> 5] |= 128 << c % 32; l[(c + 64 >>> 9 << 4) + 14] = c; for (var w = s._ff, x = s._gg, b = s._hh, $ = s._ii, p = 0; p < l.length; p += 16) { var v = a; var S = f; var R = d; var G = u; a = w(a, f, d, u, l[p + 0], 7, -680876936); u = w(u, a, f, d, l[p + 1], 12, -389564586); d = w(d, u, a, f, l[p + 2], 17, 606105819); f = w(f, d, u, a, l[p + 3], 22, -1044525330); a = w(a, f, d, u, l[p + 4], 7, -176418897); u = w(u, a, f, d, l[p + 5], 12, 1200080426); d = w(d, u, a, f, l[p + 6], 17, -1473231341); f = w(f, d, u, a, l[p + 7], 22, -45705983); a = w(a, f, d, u, l[p + 8], 7, 1770035416); u = w(u, a, f, d, l[p + 9], 12, -1958414417); d = w(d, u, a, f, l[p + 10], 17, -42063); f = w(f, d, u, a, l[p + 11], 22, -1990404162); a = w(a, f, d, u, l[p + 12], 7, 1804603682); u = w(u, a, f, d, l[p + 13], 12, -40341101); d = w(d, u, a, f, l[p + 14], 17, -1502002290); f = w(f, d, u, a, l[p + 15], 22, 1236535329); a = x(a, f, d, u, l[p + 1], 5, -165796510); u = x(u, a, f, d, l[p + 6], 9, -1069501632); d = x(d, u, a, f, l[p + 11], 14, 643717713); f = x(f, d, u, a, l[p + 0], 20, -373897302); a = x(a, f, d, u, l[p + 5], 5, -701558691); u = x(u, a, f, d, l[p + 10], 9, 38016083); d = x(d, u, a, f, l[p + 15], 14, -660478335); f = x(f, d, u, a, l[p + 4], 20, -405537848); a = x(a, f, d, u, l[p + 9], 5, 568446438); u = x(u, a, f, d, l[p + 14], 9, -1019803690); d = x(d, u, a, f, l[p + 3], 14, -187363961); f = x(f, d, u, a, l[p + 8], 20, 1163531501); a = x(a, f, d, u, l[p + 13], 5, -1444681467); u = x(u, a, f, d, l[p + 2], 9, -51403784); d = x(d, u, a, f, l[p + 7], 14, 1735328473); f = x(f, d, u, a, l[p + 12], 20, -1926607734); a = b(a, f, d, u, l[p + 5], 4, -378558); u = b(u, a, f, d, l[p + 8], 11, -2022574463); d = b(d, u, a, f, l[p + 11], 16, 1839030562); f = b(f, d, u, a, l[p + 14], 23, -35309556); a = b(a, f, d, u, l[p + 1], 4, -1530992060); u = b(u, a, f, d, l[p + 4], 11, 1272893353); d = b(d, u, a, f, l[p + 7], 16, -155497632); f = b(f, d, u, a, l[p + 10], 23, -1094730640); a = b(a, f, d, u, l[p + 13], 4, 681279174); u = b(u, a, f, d, l[p + 0], 11, -358537222); d = b(d, u, a, f, l[p + 3], 16, -722521979); f = b(f, d, u, a, l[p + 6], 23, 76029189); a = b(a, f, d, u, l[p + 9], 4, -640364487); u = b(u, a, f, d, l[p + 12], 11, -421815835); d = b(d, u, a, f, l[p + 15], 16, 530742520); f = b(f, d, u, a, l[p + 2], 23, -995338651); a = $(a, f, d, u, l[p + 0], 6, -198630844); u = $(u, a, f, d, l[p + 7], 10, 1126891415); d = $(d, u, a, f, l[p + 14], 15, -1416354905); f = $(f, d, u, a, l[p + 5], 21, -57434055); a = $(a, f, d, u, l[p + 12], 6, 1700485571); u = $(u, a, f, d, l[p + 3], 10, -1894986606); d = $(d, u, a, f, l[p + 10], 15, -1051523); f = $(f, d, u, a, l[p + 1], 21, -2054922799); a = $(a, f, d, u, l[p + 8], 6, 1873313359); u = $(u, a, f, d, l[p + 15], 10, -30611744); d = $(d, u, a, f, l[p + 6], 15, -1560198380); f = $(f, d, u, a, l[p + 13], 21, 1309151649); a = $(a, f, d, u, l[p + 4], 6, -145523070); u = $(u, a, f, d, l[p + 11], 10, -1120210379); d = $(d, u, a, f, l[p + 2], 15, 718787259); f = $(f, d, u, a, l[p + 9], 21, -343485551); a = a + v >>> 0; f = f + S >>> 0; d = d + R >>> 0; u = u + G >>> 0; } return e.endian([a, f, d, u]); } s._ff = function (r, o, l, c, a, f, d) { var u = r + (o & l | ~o & c) + (a >>> 0) + d; return (u << f | u >>> 32 - f) + o; }; s._gg = function (r, o, l, c, a, f, d) { var u = r + (o & c | l & ~c) + (a >>> 0) + d; return (u << f | u >>> 32 - f) + o; }; s._hh = function (r, o, l, c, a, f, d) { var u = r + (o ^ l ^ c) + (a >>> 0) + d; return (u << f | u >>> 32 - f) + o; }; s._ii = function (r, o, l, c, a, f, d) { var u = r + (l ^ (o | ~c)) + (a >>> 0) + d; return (u << f | u >>> 32 - f) + o; }; s._blocksize = 16; s._digestsize = 16; Jo.exports = function (r, o) { if (r == null) { throw new Error("Illegal argument " + r); } var l = e.wordsToBytes(s(r, o)); if (o && o.asBytes) { return l; } else if (o && o.asString) { return n.bytesToString(l); } else { return e.bytesToHex(l); } }; })(); var eu = Jo.exports; const tu = An(eu); var Yn; var Er; function It() { if (Er) { return Yn; } Er = 1; function e(t, i, n, s, r, o) { return { tag: t, key: i, attrs: n, children: s, text: r, dom: o, domSize: undefined, state: undefined, events: undefined, instance: undefined }; } e.normalize = function (t) { if (Array.isArray(t)) { return e("[", undefined, undefined, e.normalizeChildren(t), undefined, undefined); } else if (t == null || typeof t == "boolean") { return null; } else if (typeof t == "object") { return t; } else { return e("#", undefined, undefined, String(t), undefined, undefined); } }; e.normalizeChildren = function (t) { var i = []; if (t.length) { for (var n = t[0] != null && t[0].key != null, s = 1; s < t.length; s++) { if ((t[s] != null && t[s].key != null) !== n) { throw new TypeError(n && (t[s] != null || typeof t[s] == "boolean") ? "In fragments, vnodes must either all have keys or none have keys. You may wish to consider using an explicit keyed empty fragment, m.fragment({key: ...}), instead of a hole." : "In fragments, vnodes must either all have keys or none have keys."); } } for (var s = 0; s < t.length; s++) { i[s] = e.normalize(t[s]); } } return i; }; Yn = e; return Yn; } var iu = It(); function ea() { var e = arguments[this]; var t = this + 1; var i; if (e == null) { e = {}; } else if (typeof e != "object" || e.tag != null || Array.isArray(e)) { e = {}; t = this; } if (arguments.length === t + 1) { i = arguments[t]; if (!Array.isArray(i)) { i = [i]; } } else { for (i = []; t < arguments.length;) { i.push(arguments[t++]); } } return iu("", e.key, e, i); } var Dn = {}.hasOwnProperty; var nu = It(); var su = ea; var Jt = Dn; var ru = /(?:(^|#|\.)([^#\.\[\]]+))|(\[(.+?)(?:\s*=\s*("|'|)((?:\\["'\]]|.)*?)\5)?\])/g; var ta = {}; function Cr(e) { for (var t in e) { if (Jt.call(e, t)) { return false; } } return true; } function ou(e) { for (var t, i = "div", n = [], s = {}; t = ru.exec(e);) { var r = t[1]; var o = t[2]; if (r === "" && o !== "") { i = o; } else if (r === "#") { s.id = o; } else if (r === ".") { n.push(o); } else if (t[3][0] === "[") { var l = t[6]; if (l) { l = l.replace(/\\(["'])/g, "$1").replace(/\\\\/g, "\\"); } if (t[4] === "class") { n.push(l); } else { s[t[4]] = l === "" ? l : l || true; } } } if (n.length > 0) { s.className = n.join(" "); } return ta[e] = { tag: i, attrs: s }; } function au(e, t) { var i = t.attrs; var n = Jt.call(i, "class"); var s = n ? i.class : i.className; t.tag = e.tag; t.attrs = {}; if (!Cr(e.attrs) && !Cr(i)) { var r = {}; for (var o in i) { if (Jt.call(i, o)) { r[o] = i[o]; } } i = r; } for (var o in e.attrs) { if (Jt.call(e.attrs, o) && o !== "className" && !Jt.call(i, o)) { i[o] = e.attrs[o]; } } if (s != null || e.attrs.className != null) { i.className = s != null ? e.attrs.className != null ? String(e.attrs.className) + " " + String(s) : s : e.attrs.className != null ? e.attrs.className : null; } if (n) { i.class = null; } for (var o in i) { if (Jt.call(i, o) && o !== "key") { t.attrs = i; break; } } return t; } function lu(e) { if (e == null || typeof e != "string" && typeof e != "function" && typeof e.view != "function") { throw Error("The selector must be either a string or a component."); } var t = su.apply(1, arguments); if (typeof e == "string" && (t.children = nu.normalizeChildren(t.children), e !== "[")) { return au(ta[e] || ou(e), t); } else { t.tag = e; return t; } } var ia = lu; var cu = It(); function hu(e) { if (e == null) { e = ""; } return cu("<", undefined, undefined, e, undefined, undefined); } var uu = It(); var fu = ea; function du() { var e = fu.apply(0, arguments); e.tag = "["; e.children = uu.normalizeChildren(e.children); return e; } var Js = ia; Js.trust = hu; Js.fragment = du; var pu = Js; var cn = { exports: {} }; var Kn; var Pr; function na() { if (Pr) { return Kn; } Pr = 1; function e(t) { if (!(this instanceof e)) { throw new Error("Promise must be called with 'new'."); } if (typeof t != "function") { throw new TypeError("executor must be a function."); } var i = this; var n = []; var s = []; var r = a(n, true); var o = a(s, false); var l = i._instance = { resolvers: n, rejectors: s }; var c = typeof setImmediate == "function" ? setImmediate : setTimeout; function a(d, u) { return function p(w) { var x; try { if (u && w != null && (typeof w == "object" || typeof w == "function") && typeof (x = w.then) == "function") { if (w === i) { throw new TypeError("Promise can't be resolved with itself."); } f(x.bind(w)); } else { c(function () { if (!u && d.length === 0) { console.error("Possible unhandled promise rejection:", w); } for (var b = 0; b < d.length; b++) { d[b](w); } n.length = 0; s.length = 0; l.state = u; l.retry = function () { p(w); }; }); } } catch (b) { o(b); } }; } function f(d) { var u = 0; function p(x) { return function (b) { if (!(u++ > 0)) { x(b); } }; } var w = p(o); try { d(p(r), w); } catch (x) { w(x); } } f(t); } e.prototype.then = function (t, i) { var n = this; var s = n._instance; function r(a, f, d, u) { f.push(function (p) { if (typeof a != "function") { d(p); } else { try { o(a(p)); } catch (w) { if (l) { l(w); } } } }); if (typeof s.retry == "function" && u === s.state) { s.retry(); } } var o; var l; var c = new e(function (a, f) { o = a; l = f; }); r(t, s.resolvers, o, true); r(i, s.rejectors, l, false); return c; }; e.prototype.catch = function (t) { return this.then(null, t); }; e.prototype.finally = function (t) { return this.then(function (i) { return e.resolve(t()).then(function () { return i; }); }, function (i) { return e.resolve(t()).then(function () { return e.reject(i); }); }); }; e.resolve = function (t) { if (t instanceof e) { return t; } else { return new e(function (i) { i(t); }); } }; e.reject = function (t) { return new e(function (i, n) { n(t); }); }; e.all = function (t) { return new e(function (i, n) { var s = t.length; var r = 0; var o = []; if (t.length === 0) { i([]); } else { for (var l = 0; l < t.length; l++) { (function (c) { function a(f) { r++; o[c] = f; if (r === s) { i(o); } } if (t[c] != null && (typeof t[c] == "object" || typeof t[c] == "function") && typeof t[c].then == "function") { t[c].then(a, n); } else { a(t[c]); } })(l); } } }); }; e.race = function (t) { return new e(function (i, n) { for (var s = 0; s < t.length; s++) { t[s].then(i, n); } }); }; Kn = e; return Kn; } var Ei = na(); if (typeof window !== "undefined") { if (typeof window.Promise === "undefined") { window.Promise = Ei; } else if (!window.Promise.prototype.finally) { window.Promise.prototype.finally = Ei.prototype.finally; } cn.exports = window.Promise; } else if (typeof Vt !== "undefined") { if (typeof Vt.Promise === "undefined") { Vt.Promise = Ei; } else if (!Vt.Promise.prototype.finally) { Vt.Promise.prototype.finally = Ei.prototype.finally; } cn.exports = Vt.Promise; } else { cn.exports = Ei; } var sa = cn.exports; var Zn = It(); function mu(e) { var t = e && e.document; var i; var n = { svg: "http://www.w3.org/2000/svg", math: "http://www.w3.org/1998/Math/MathML" }; function s(m) { return m.attrs && m.attrs.xmlns || n[m.tag]; } function r(m, h) { if (m.state !== h) { throw new Error("'vnode.state' must not be modified."); } } function o(m) { var h = m.state; try { return this.apply(h, arguments); } finally { r(m, h); } } function l() { try { return t.activeElement; } catch { return null; } } function c(m, h, g, I, E, O, q) { for (var Z = g; Z < I; Z++) { var U = h[Z]; if (U != null) { a(m, U, E, q, O); } } } function a(m, h, g, I, E) { var O = h.tag; if (typeof O == "string") { h.state = {}; if (h.attrs != null) { yi(h.attrs, h, g); } switch (O) { case "#": f(m, h, E); break; case "<": u(m, h, I, E); break; case "[": p(m, h, g, I, E); break; default: w(m, h, g, I, E); } } else { b(m, h, g, I, E); } } function f(m, h, g) { h.dom = t.createTextNode(h.children); N(m, h.dom, g); } var d = { caption: "table", thead: "table", tbody: "table", tfoot: "table", tr: "tbody", th: "tr", td: "tr", colgroup: "table", col: "colgroup" }; function u(m, h, g, I) { var E = h.children.match(/^\s*?<(\w+)/im) || []; var O = t.createElement(d[E[1]] || "div"); if (g === "http://www.w3.org/2000/svg") { O.innerHTML = "<svg xmlns=\"http://www.w3.org/2000/svg\">" + h.children + "</svg>"; O = O.firstChild; } else { O.innerHTML = h.children; } h.dom = O.firstChild; h.domSize = O.childNodes.length; h.instance = []; for (var q = t.createDocumentFragment(), Z; Z = O.firstChild;) { h.instance.push(Z); q.appendChild(Z); } N(m, q, I); } function p(m, h, g, I, E) { var O = t.createDocumentFragment(); if (h.children != null) { var q = h.children; c(O, q, 0, q.length, g, null, I); } h.dom = O.firstChild; h.domSize = O.childNodes.length; N(m, O, E); } function w(m, h, g, I, E) { var O = h.tag; var q = h.attrs; var Z = q && q.is; I = s(h) || I; var U = I ? Z ? t.createElementNS(I, O, { is: Z }) : t.createElementNS(I, O) : Z ? t.createElement(O, { is: Z }) : t.createElement(O); h.dom = U; if (q != null) { zt(h, q, I); } N(m, U, E); if (!Y(h) && h.children != null) { var j = h.children; c(U, j, 0, j.length, g, null, I); if (h.tag === "select" && q != null) { Be(h, q); } } } function x(m, h) { var g; if (typeof m.tag.view == "function") { m.state = Object.create(m.tag); g = m.state.view; if (g.$$reentrantLock$$ != null) { return; } g.$$reentrantLock$$ = true; } else { m.state = undefined; g = m.tag; if (g.$$reentrantLock$$ != null) { return; } g.$$reentrantLock$$ = true; m.state = m.tag.prototype != null && typeof m.tag.prototype.view == "function" ? new m.tag(m) : m.tag(m); } yi(m.state, m, h); if (m.attrs != null) { yi(m.attrs, m, h); } m.instance = Zn.normalize(o.call(m.state.view, m)); if (m.instance === m) { throw Error("A view cannot return the vnode it received as argument"); } g.$$reentrantLock$$ = null; } function b(m, h, g, I, E) { x(h, g); if (h.instance != null) { a(m, h.instance, g, I, E); h.dom = h.instance.dom; h.domSize = h.dom != null ? h.instance.domSize : 0; } else { h.domSize = 0; } } function $(m, h, g, I, E, O) { if (!(h === g || h == null && g == null)) { if (h == null || h.length === 0) { c(m, g, 0, g.length, I, E, O); } else if (g == null || g.length === 0) { K(m, h, 0, h.length); } else { var q = h[0] != null && h[0].key != null; var Z = g[0] != null && g[0].key != null; var U = 0; var j = 0; if (!q) { for (; j < h.length && h[j] == null;) { j++; } } if (!Z) { for (; U < g.length && g[U] == null;) { U++; } } if (q !== Z) { K(m, h, j, h.length); c(m, g, U, g.length, I, E, O); } else if (Z) { for (var Ce = h.length - 1, pe = g.length - 1, Bt, be, ue, Ie, re, ki; Ce >= j && pe >= U && (Ie = h[Ce], re = g[pe], Ie.key === re.key);) { if (Ie !== re) { v(m, Ie, re, I, E, O); } if (re.dom != null) { E = re.dom; } Ce--; pe--; } for (; Ce >= j && pe >= U && (be = h[j], ue = g[U], be.key === ue.key);) { j++; U++; if (be !== ue) { v(m, be, ue, I, _(h, j, E), O); } } for (; Ce >= j && pe >= U && !(U === pe || be.key !== re.key || Ie.key !== ue.key);) { ki = _(h, j, E); D(m, Ie, ki); if (Ie !== ue) { v(m, Ie, ue, I, ki, O); } if (++U <= --pe) { D(m, be, E); } if (be !== re) { v(m, be, re, I, E, O); } if (re.dom != null) { E = re.dom; } j++; Ce--; Ie = h[Ce]; re = g[pe]; be = h[j]; ue = g[U]; } for (; Ce >= j && pe >= U && Ie.key === re.key;) { if (Ie !== re) { v(m, Ie, re, I, E, O); } if (re.dom != null) { E = re.dom; } Ce--; pe--; Ie = h[Ce]; re = g[pe]; } if (U > pe) { K(m, h, j, Ce + 1); } else if (j > Ce) { c(m, g, U, pe + 1, I, E, O); } else { var Mt = E; var xi = pe - U + 1; var gt = new Array(xi); var Ht = 0; var fe = 0; var Lt = 2147483647; var nt = 0; var Bt; var Ft; for (fe = 0; fe < xi; fe++) { gt[fe] = -1; } for (fe = pe; fe >= U; fe--) { if (Bt == null) { Bt = M(h, j, Ce + 1); } re = g[fe]; var st = Bt[re.key]; if (st != null) { Lt = st < Lt ? st : -1; gt[fe - U] = st; Ie = h[st]; h[st] = null; if (Ie !== re) { v(m, Ie, re, I, E, O); } if (re.dom != null) { E = re.dom; } nt++; } } E = Mt; if (nt !== Ce - j + 1) { K(m, h, j, Ce + 1); } if (nt === 0) { c(m, g, U, pe + 1, I, E, O); } else if (Lt === -1) { Ft = F(gt); Ht = Ft.length - 1; fe = pe; Ft = F(gt); Ht = Ft.length - 1; fe = pe; for (; fe >= U; fe--) { ue = g[fe]; if (gt[fe - U] === -1) { a(m, ue, I, O, E); } else if (Ft[Ht] === fe - U) { Ht--; } else { D(m, ue, E); } if (ue.dom != null) { E = g[fe].dom; } } } else { for (fe = pe; fe >= U; fe--) { ue = g[fe]; if (gt[fe - U] === -1) { a(m, ue, I, O, E); } if (ue.dom != null) { E = g[fe].dom; } } } } } else { var vi = h.length < g.length ? h.length : g.length; for (U = U < j ? U : j; U < vi; U++) { be = h[U]; ue = g[U]; if (!(be === ue || be == null && ue == null)) { if (be == null) { a(m, ue, I, O, _(h, U + 1, E)); } else if (ue == null) { ie(m, be); } else { v(m, be, ue, I, _(h, U + 1, E), O); } } } if (h.length > vi) { K(m, h, U, h.length); } if (g.length > vi) { c(m, g, U, g.length, I, E, O); } } } } } function v(m, h, g, I, E, O) { var q = h.tag; var Z = g.tag; if (q === Z) { g.state = h.state; g.events = h.events; if (Ln(g, h)) { return; } if (typeof q == "string") { if (g.attrs != null) { wi(g.attrs, g, I); } switch (q) { case "#": S(h, g); break; case "<": R(m, h, g, O, E); break; case "[": G(m, h, g, I, E, O); break; default: X(h, g, I, O); } } else { W(m, h, g, I, E, O); } } else { ie(m, h); a(m, g, I, O, E); } } function S(m, h) { if (m.children.toString() !== h.children.toString()) { m.dom.nodeValue = h.children; } h.dom = m.dom; } function R(m, h, g, I, E) { if (h.children !== g.children) { ae(m, h); u(m, g, I, E); } else { g.dom = h.dom; g.domSize = h.domSize; g.instance = h.instance; } } function G(m, h, g, I, E, O) { $(m, h.children, g.children, I, E, O); var q = 0; var Z = g.children; g.dom = null; if (Z != null) { for (var U = 0; U < Z.length; U++) { var j = Z[U]; if (j != null && j.dom != null) { if (g.dom == null) { g.dom = j.dom; } q += j.domSize || 1; } } if (q !== 1) { g.domSize = q; } } } function X(m, h, g, I) { var E = h.dom = m.dom; I = s(h) || I; if (h.tag === "textarea" && h.attrs == null) { h.attrs = {}; } pt(h, m.attrs, h.attrs, I); if (!Y(h)) { $(E, m.children, h.children, g, null, I); } } function W(m, h, g, I, E, O) { g.instance = Zn.normalize(o.call(g.state.view, g)); if (g.instance === g) { throw Error("A view cannot return the vnode it received as argument"); } wi(g.state, g, I); if (g.attrs != null) { wi(g.attrs, g, I); } if (g.instance != null) { if (h.instance == null) { a(m, g.instance, I, O, E); } else { v(m, h.instance, g.instance, I, E, O); } g.dom = g.instance.dom; g.domSize = g.instance.domSize; } else if (h.instance != null) { ie(m, h.instance); g.dom = undefined; g.domSize = 0; } else { g.dom = h.dom; g.domSize = h.domSize; } } function M(m, h, g) { for (var I = Object.create(null); h < g; h++) { var E = m[h]; if (E != null) { var O = E.key; if (O != null) { I[O] = h; } } } return I; } var V = []; function F(m) { for (var h = [0], g = 0, I = 0, E = 0, O = V.length = m.length, E = 0; E < O; E++) { V[E] = m[E]; } for (var E = 0; E < O; ++E) { if (m[E] !== -1) { var q = h[h.length - 1]; if (m[q] < m[E]) { V[E] = q; h.push(E); continue; } g = 0; I = h.length - 1; for (; g < I;) { var Z = (g >>> 1) + (I >>> 1) + (g & I & 1); if (m[h[Z]] < m[E]) { g = Z + 1; } else { I = Z; } } if (m[E] < m[h[g]]) { if (g > 0) { V[E] = h[g - 1]; } h[g] = E; } } } g = h.length; I = h[g - 1]; for (; g-- > 0;) { h[g] = I; I = V[I]; } V.length = 0; return h; } function _(m, h, g) { for (; h < m.length; h++) { if (m[h] != null && m[h].dom != null) { return m[h].dom; } } return g; } function D(m, h, g) { var I = t.createDocumentFragment(); z(m, I, h); N(m, I, g); } function z(m, h, g) { for (; g.dom != null && g.dom.parentNode === m;) { if (typeof g.tag != "string") { g = g.instance; if (g != null) { continue; } } else if (g.tag === "<") { for (var I = 0; I < g.instance.length; I++) { h.appendChild(g.instance[I]); } } else if (g.tag !== "[") { h.appendChild(g.dom); } else if (g.children.length === 1) { g = g.children[0]; if (g != null) { continue; } } else { for (var I = 0; I < g.children.length; I++) { var E = g.children[I]; if (E != null) { z(m, h, E); } } } break; } } function N(m, h, g) { if (g != null) { m.insertBefore(h, g); } else { m.appendChild(h); } } function Y(m) { if (m.attrs == null || m.attrs.contenteditable == null && m.attrs.contentEditable == null) { return false; } var h = m.children; if (h != null && h.length === 1 && h[0].tag === "<") { var g = h[0].children; if (m.dom.innerHTML !== g) { m.dom.innerHTML = g; } } else if (h != null && h.length !== 0) { throw new Error("Child node of a contenteditable must be trusted."); } return true; } function K(m, h, g, I) { for (var E = g; E < I; E++) { var O = h[E]; if (O != null) { ie(m, O); } } } function ie(m, h) { var g = 0; var I = h.state; var E; var O; if (typeof h.tag != "string" && typeof h.state.onbeforeremove == "function") { var q = o.call(h.state.onbeforeremove, h); if (q != null && typeof q.then == "function") { g = 1; E = q; } } if (h.attrs && typeof h.attrs.onbeforeremove == "function") { var q = o.call(h.attrs.onbeforeremove, h); if (q != null && typeof q.then == "function") { g |= 2; O = q; } } r(h, I); if (!g) { Se(h); J(m, h); } else { if (E != null) { function Z() { if (g & 1) { g &= 2; if (!g) { U(); } } } E.then(Z, Z); } if (O != null) { function Z() { if (g & 2) { g &= 1; if (!g) { U(); } } } O.then(Z, Z); } } function U() { r(h, I); Se(h); J(m, h); } } function ae(m, h) { for (var g = 0; g < h.instance.length; g++) { m.removeChild(h.instance[g]); } } function J(m, h) { for (; h.dom != null && h.dom.parentNode === m;) { if (typeof h.tag != "string") { h = h.instance; if (h != null) { continue; } } else if (h.tag === "<") { ae(m, h); } else { if (h.tag !== "[" && (m.removeChild(h.dom), !Array.isArray(h.children))) { break; } if (h.children.length === 1) { h = h.children[0]; if (h != null) { continue; } } else { for (var g = 0; g < h.children.length; g++) { var I = h.children[g]; if (I != null) { J(m, I); } } } } break; } } function Se(m) { if (typeof m.tag != "string" && typeof m.state.onremove == "function") { o.call(m.state.onremove, m); } if (m.attrs && typeof m.attrs.onremove == "function") { o.call(m.attrs.onremove, m); } if (typeof m.tag != "string") { if (m.instance != null) { Se(m.instance); } } else { var h = m.children; if (Array.isArray(h)) { for (var g = 0; g < h.length; g++) { var I = h[g]; if (I != null) { Se(I); } } } } } function zt(m, h, g) { if (m.tag === "input" && h.type != null) { m.dom.setAttribute("type", h.type); } var I = h != null && m.tag === "input" && h.type === "file"; for (var E in h) { Ve(m, E, null, h[E], g, I); } } function Ve(m, h, g, I, E, O) { if (!(h === "key" || h === "is" || I == null || mt(h) || g === I && !ne(m, h) && typeof I != "object" || h === "type" && m.tag === "input")) { if (h[0] === "o" && h[1] === "n") { return gi(m, h, I); } if (h.slice(0, 6) === "xlink:") { m.dom.setAttributeNS("http://www.w3.org/1999/xlink", h.slice(6), I); } else if (h === "style") { pi(m.dom, g, I); } else if (Ne(m, h, E)) { if (h === "value") { if ((m.tag === "input" || m.tag === "textarea") && m.dom.value === "" + I && (O || m.dom === l()) || m.tag === "select" && g !== null && m.dom.value === "" + I || m.tag === "option" && g !== null && m.dom.value === "" + I) { return; } if (O && "" + I != "") { console.error("`value` is read-only on file inputs!"); return; } } m.dom[h] = I; } else if (typeof I == "boolean") { if (I) { m.dom.setAttribute(h, ""); } else { m.dom.removeAttribute(h); } } else { m.dom.setAttribute(h === "className" ? "class" : h, I); } } } function te(m, h, g, I) { if (!(h === "key" || h === "is" || g == null || mt(h))) { if (h[0] === "o" && h[1] === "n") { gi(m, h, undefined); } else if (h === "style") { pi(m.dom, g, null); } else if (Ne(m, h, I) && h !== "className" && h !== "title" && !(h === "value" && (m.tag === "option" || m.tag === "select" && m.dom.selectedIndex === -1 && m.dom === l())) && !(m.tag === "input" && h === "type")) { m.dom[h] = null; } else { var E = h.indexOf(":"); if (E !== -1) { h = h.slice(E + 1); } if (g !== false) { m.dom.removeAttribute(h === "className" ? "class" : h); } } } } function Be(m, h) { if ("value" in h) { if (h.value === null) { if (m.dom.selectedIndex !== -1) { m.dom.value = null; } } else { var g = "" + h.value; if (m.dom.value !== g || m.dom.selectedIndex === -1) { m.dom.value = g; } } } if ("selectedIndex" in h) { Ve(m, "selectedIndex", null, h.selectedIndex, undefined); } } function pt(m, h, g, I) { if (h && h === g) { console.warn("Don't reuse attrs object, use new object for every redraw, this will throw in next major"); } if (g != null) { if (m.tag === "input" && g.type != null) { m.dom.setAttribute("type", g.type); } var E = m.tag === "input" && g.type === "file"; for (var O in g) { Ve(m, O, h && h[O], g[O], I, E); } } var q; if (h != null) { for (var O in h) { if ((q = h[O]) != null && (g == null || g[O] == null)) { te(m, O, q, I); } } } } function ne(m, h) { return h === "value" || h === "checked" || h === "selectedIndex" || h === "selected" && m.dom === l() || m.tag === "option" && m.dom.parentNode === t.activeElement; } function mt(m) { return m === "oninit" || m === "oncreate" || m === "onupdate" || m === "onremove" || m === "onbeforeremove" || m === "onbeforeupdate"; } function Ne(m, h, g) { return g === undefined && (m.tag.indexOf("-") > -1 || m.attrs != null && m.attrs.is || h !== "href" && h !== "list" && h !== "form" && h !== "width" && h !== "height") && h in m.dom; } var it = /[A-Z]/g; function Ze(m) { return "-" + m.toLowerCase(); } function se(m) { if (m[0] === "-" && m[1] === "-") { return m; } else if (m === "cssFloat") { return "float"; } else { return m.replace(it, Ze); } } function pi(m, h, g) { if (h !== g) { if (g == null) { m.style.cssText = ""; } else if (typeof g != "object") { m.style.cssText = g; } else if (h == null || typeof h != "object") { m.style.cssText = ""; for (var I in g) { var E = g[I]; if (E != null) { m.style.setProperty(se(I), String(E)); } } } else { for (var I in g) { var E = g[I]; if (E != null && (E = String(E)) !== String(h[I])) { m.style.setProperty(se(I), E); } } for (var I in h) { if (h[I] != null && g[I] == null) { m.style.removeProperty(se(I)); } } } } } function mi() { this._ = i; } mi.prototype = Object.create(null); mi.prototype.handleEvent = function (m) { var h = this["on" + m.type]; var g; if (typeof h == "function") { g = h.call(m.currentTarget, m); } else if (typeof h.handleEvent == "function") { h.handleEvent(m); } if (this._ && m.redraw !== false) { (0, this._)(); } if (g === false) { m.preventDefault(); m.stopPropagation(); } }; function gi(m, h, g) { if (m.events != null) { m.events._ = i; if (m.events[h] === g) { return; } if (g != null && (typeof g == "function" || typeof g == "object")) { if (m.events[h] == null) { m.dom.addEventListener(h.slice(2), m.events, false); } m.events[h] = g; } else { if (m.events[h] != null) { m.dom.removeEventListener(h.slice(2), m.events, false); } m.events[h] = undefined; } } else if (g != null && (typeof g == "function" || typeof g == "object")) { m.events = new mi(); m.dom.addEventListener(h.slice(2), m.events, false); m.events[h] = g; } } function yi(m, h, g) { if (typeof m.oninit == "function") { o.call(m.oninit, h); } if (typeof m.oncreate == "function") { g.push(o.bind(m.oncreate, h)); } } function wi(m, h, g) { if (typeof m.onupdate == "function") { g.push(o.bind(m.onupdate, h)); } } function Ln(m, h) { do { if (m.attrs != null && typeof m.attrs.onbeforeupdate == "function") { var g = o.call(m.attrs.onbeforeupdate, m, h); if (g !== undefined && !g) { break; } } if (typeof m.tag != "string" && typeof m.state.onbeforeupdate == "function") { var g = o.call(m.state.onbeforeupdate, m, h); if (g !== undefined && !g) { break; } } return false; } while (false); m.dom = h.dom; m.domSize = h.domSize; m.instance = h.instance; m.attrs = h.attrs; m.children = h.children; m.text = h.text; return true; } var Tt; return function (m, h, g) { if (!m) { throw new TypeError("DOM element being rendered to does not exist."); } if (Tt != null && m.contains(Tt)) { throw new TypeError("Node is currently being rendered to and thus is locked."); } var I = i; var E = Tt; var O = []; var q = l(); var Z = m.namespaceURI; Tt = m; i = typeof g == "function" ? g : undefined; try { if (m.vnodes == null) { m.textContent = ""; } h = Zn.normalizeChildren(Array.isArray(h) ? h : [h]); $(m, m.vnodes, h, O, null, Z === "http://www.w3.org/1999/xhtml" ? undefined : Z); m.vnodes = h; if (q != null && l() !== q && typeof q.focus == "function") { q.focus(); } for (var U = 0; U < O.length; U++) { O[U](); } } finally { i = I; Tt = E; } }; } var ra = mu(typeof window !== "undefined" ? window : null); var $r = It(); function gu(e, t, i) { var n = []; var s = false; var r = -1; function o() { for (r = 0; r < n.length; r += 2) { try { e(n[r], $r(n[r + 1]), l); } catch (a) { i.error(a); } } r = -1; } function l() { if (!s) { s = true; t(function () { s = false; o(); }); } } l.sync = o; function c(a, f) { if (f != null && f.view == null && typeof f != "function") { throw new TypeError("m.mount expects a component, not a vnode."); } var d = n.indexOf(a); if (d >= 0) { n.splice(d, 2); if (d <= r) { r -= 2; } e(a, []); } if (f != null) { n.push(a, f); e(a, $r(f), l); } } return { mount: c, redraw: l }; } var yu = ra; var Qs = gu(yu, typeof requestAnimationFrame !== "undefined" ? requestAnimationFrame : null, typeof console !== "undefined" ? console : null); var Jn; var Rr; function oa() { if (!Rr) { Rr = 1; Jn = function (e) { if (Object.prototype.toString.call(e) !== "[object Object]") { return ""; } var t = []; for (var i in e) { n(i, e[i]); } return t.join("&"); function n(s, r) { if (Array.isArray(r)) { for (var o = 0; o < r.length; o++) { n(s + "[" + o + "]", r[o]); } } else if (Object.prototype.toString.call(r) === "[object Object]") { for (var o in r) { n(s + "[" + o + "]", r[o]); } } else { t.push(encodeURIComponent(s) + (r != null && r !== "" ? "=" + encodeURIComponent(r) : "")); } } }; } return Jn; } var Qn; var Ar; function aa() { if (Ar) { return Qn; } Ar = 1; var e = Dn; Qn = Object.assign || function (t, i) { for (var n in i) { if (e.call(i, n)) { t[n] = i[n]; } } }; return Qn; } var jn; var Dr; function js() { if (Dr) { return jn; } Dr = 1; var e = oa(); var t = aa(); jn = function (i, n) { if (/:([^\/\.-]+)(\.{3})?:/.test(i)) { throw new SyntaxError("Template parameter names must be separated by either a '/', '-', or '.'."); } if (n == null) { return i; } var s = i.indexOf("?"); var r = i.indexOf("#"); var o = r < 0 ? i.length : r; var l = s < 0 ? o : s; var c = i.slice(0, l); var a = {}; t(a, n); var f = c.replace(/:([^\/\.-]+)(\.{3})?/g, function ($, v, S) { delete a[v]; if (n[v] == null) { return $; } else if (S) { return n[v]; } else { return encodeURIComponent(String(n[v])); } }); var d = f.indexOf("?"); var u = f.indexOf("#"); var p = u < 0 ? f.length : u; var w = d < 0 ? p : d; var x = f.slice(0, w); if (s >= 0) { x += i.slice(s, o); } if (d >= 0) { x += (s < 0 ? "?" : "&") + f.slice(d, p); } var b = e(a); if (b) { x += (s < 0 && d < 0 ? "?" : "&") + b; } if (r >= 0) { x += i.slice(r); } if (u >= 0) { x += (r < 0 ? "" : "&") + f.slice(u); } return x; }; return jn; } var wu = js(); var Or = Dn; function vu(e, t, i) { var n = 0; function s(l) { return new t(l); } s.prototype = t.prototype; s.__proto__ = t; function r(l) { return function (c, a) { if (typeof c != "string") { a = c; c = c.url; } else if (a == null) { a = {}; } var f = new t(function (w, x) { l(wu(c, a.params), a, function (b) { if (typeof a.type == "function") { if (Array.isArray(b)) { for (var $ = 0; $ < b.length; $++) { b[$] = new a.type(b[$]); } } else { b = new a.type(b); } } w(b); }, x); }); if (a.background === true) { return f; } var d = 0; function u() { if (--d === 0 && typeof i == "function") { i(); } } return p(f); function p(w) { var x = w.then; w.constructor = s; w.then = function () { d++; var b = x.apply(w, arguments); b.then(u, function ($) { u(); if (d === 0) { throw $; } }); return p(b); }; return w; } }; } function o(l, c) { for (var a in l.headers) { if (Or.call(l.headers, a) && a.toLowerCase() === c) { return true; } } return false; } return { request: r(function (l, c, a, f) { var d = c.method != null ? c.method.toUpperCase() : "GET"; var u = c.body; var p = (c.serialize == null || c.serialize === JSON.serialize) && !(u instanceof e.FormData || u instanceof e.URLSearchParams); var w = c.responseType || (typeof c.extract == "function" ? "" : "json"); var x = new e.XMLHttpRequest(); var b = false; var $ = false; var v = x; var S; var R = x.abort; x.abort = function () { b = true; R.call(this); }; x.open(d, l, c.async !== false, typeof c.user == "string" ? c.user : undefined, typeof c.password == "string" ? c.password : undefined); if (p && u != null && !o(c, "content-type")) { x.setRequestHeader("Content-Type", "application/json; charset=utf-8"); } if (typeof c.deserialize != "function" && !o(c, "accept")) { x.setRequestHeader("Accept", "application/json, text/*"); } if (c.withCredentials) { x.withCredentials = c.withCredentials; } if (c.timeout) { x.timeout = c.timeout; } x.responseType = w; for (var G in c.headers) { if (Or.call(c.headers, G)) { x.setRequestHeader(G, c.headers[G]); } } x.onreadystatechange = function (X) { if (!b && X.target.readyState === 4) { try { var W = X.target.status >= 200 && X.target.status < 300 || X.target.status === 304 || /^file:\/\//i.test(l); var M = X.target.response; var V; if (w === "json") { if (!X.target.responseType && typeof c.extract != "function") { try { M = JSON.parse(X.target.responseText); } catch { M = null; } } } else if ((!w || w === "text") && M == null) { M = X.target.responseText; } if (typeof c.extract == "function") { M = c.extract(X.target, c); W = true; } else if (typeof c.deserialize == "function") { M = c.deserialize(M); } if (W) { a(M); } else { function F() { try { V = X.target.responseText; } catch { V = M; } var _ = new Error(V); _.code = X.target.status; _.response = M; f(_); } if (x.status === 0) { // TOLOOK setTimeout(function () { if (!$) { F(); } }); } else { F(); } } } catch (_) { f(_); } } }; x.ontimeout = function (X) { $ = true; var W = new Error("Request timed out"); W.code = X.target.status; f(W); }; if (typeof c.config == "function") { x = c.config(x, c, l) || x; if (x !== v) { S = x.abort; x.abort = function () { b = true; S.call(this); }; } } if (u == null) { x.send(); } else if (typeof c.serialize == "function") { x.send(c.serialize(u)); } else if (u instanceof e.FormData || u instanceof e.URLSearchParams) { x.send(u); } else { x.send(JSON.stringify(u)); } }), jsonp: r(function (l, c, a, f) { var d = c.callbackName || "_mithril_" + Math.round(Math.random() * 10000000000000000) + "_" + n++; var u = e.document.createElement("script"); e[d] = function (p) { delete e[d]; u.parentNode.removeChild(u); a(p); }; u.onerror = function () { delete e[d]; u.parentNode.removeChild(u); f(new Error("JSONP request failed")); }; u.src = l + (l.indexOf("?") < 0 ? "?" : "&") + encodeURIComponent(c.callbackKey || "callback") + "=" + encodeURIComponent(d); e.document.documentElement.appendChild(u); }) }; } var ku = sa; var xu = Qs; var bu = vu(typeof window !== "undefined" ? window : null, ku, xu.redraw); var es; var _r; function la() { if (_r) { return es; } _r = 1; function e(t) { try { return decodeURIComponent(t); } catch { return t; } } es = function (t) { if (t === "" || t == null) { return {}; } if (t.charAt(0) === "?") { t = t.slice(1); } for (var i = t.split("&"), n = {}, s = {}, r = 0; r < i.length; r++) { var o = i[r].split("="); var l = e(o[0]); var c = o.length === 2 ? e(o[1]) : ""; if (c === "true") { c = true; } else if (c === "false") { c = false; } var a = l.split(/\]\[?|\[/); var f = s; if (l.indexOf("[") > -1) { a.pop(); } for (var d = 0; d < a.length; d++) { var u = a[d]; var p = a[d + 1]; var w = p == "" || !isNaN(parseInt(p, 10)); if (u === "") { var l = a.slice(0, d).join(); if (n[l] == null) { n[l] = Array.isArray(f) ? f.length : 0; } u = n[l]++; } else if (u === "__proto__") { break; } if (d === a.length - 1) { f[u] = c; } else { var x = Object.getOwnPropertyDescriptor(f, u); if (x != null) { x = x.value; } if (x == null) { f[u] = x = w ? [] : {}; } f = x; } } } return s; }; return es; } var ts; var zr; function er() { if (zr) { return ts; } zr = 1; var e = la(); ts = function (t) { var i = t.indexOf("?"); var n = t.indexOf("#"); var s = n < 0 ? t.length : n; var r = i < 0 ? s : i; var o = t.slice(0, r).replace(/\/{2,}/g, "/"); if (o) { if (o[0] !== "/") { o = "/" + o; } if (o.length > 1 && o[o.length - 1] === "/") { o = o.slice(0, -1); } } else { o = "/"; } return { path: o, params: i < 0 ? {} : e(t.slice(i + 1, s)) }; }; return ts; } var is; var Br; function Su() { if (Br) { return is; } Br = 1; var e = er(); is = function (t) { var i = e(t); var n = Object.keys(i.params); var s = []; var r = new RegExp("^" + i.path.replace(/:([^\/.-]+)(\.{3}|\.(?!\.)|-)?|[\\^$*+.()|\[\]{}]/g, function (o, l, c) { if (l == null) { return "\\" + o; } else { s.push({ k: l, r: c === "..." }); if (c === "...") { return "(.*)"; } else if (c === ".") { return "([^/]+)\\."; } else { return "([^/]+)" + (c || ""); } } }) + "$"); return function (o) { for (var l = 0; l < n.length; l++) { if (i.params[n[l]] !== o.params[n[l]]) { return false; } } if (!s.length) { return r.test(o.path); } var c = r.exec(o.path); if (c == null) { return false; } for (var l = 0; l < s.length; l++) { o.params[s[l].k] = s[l].r ? c[l + 1] : decodeURIComponent(c[l + 1]); } return true; }; }; return is; } var ns; var Hr; function ca() { if (Hr) { return ns; } Hr = 1; var e = Dn; var t = new RegExp("^(?:key|oninit|oncreate|onbeforeupdate|onupdate|onbeforeremove|onremove)$"); ns = function (i, n) { var s = {}; if (n != null) { for (var r in i) { if (e.call(i, r) && !t.test(r) && n.indexOf(r) < 0) { s[r] = i[r]; } } } else { for (var r in i) { if (e.call(i, r) && !t.test(r)) { s[r] = i[r]; } } } return s; }; return ns; } var ss; var Lr; function Iu() { if (Lr) { return ss; } Lr = 1; var e = It(); var t = ia; var i = sa; var n = js(); var s = er(); var r = Su(); var o = aa(); var l = ca(); var c = {}; function a(f) { try { return decodeURIComponent(f); } catch { return f; } } ss = function (f, d) { var u = f == null ? null : typeof f.setImmediate == "function" ? f.setImmediate : f.setTimeout; var p = i.resolve(); var w = false; var x = false; var b = 0; var $; var v; var S = c; var R; var G; var X; var W; var M = { onbeforeupdate: function () { b = b ? 2 : 1; return !(!b || c === S); }, onremove: function () { f.removeEventListener("popstate", _, false); f.removeEventListener("hashchange", F, false); }, view: function () { if (!(!b || c === S)) { var N = [e(R, G.key, G)]; if (S) { N = S.render(N[0]); } return N; } } }; var V = z.SKIP = {}; function F() { w = false; var N = f.location.hash; if (z.prefix[0] !== "#") { N = f.location.search + N; if (z.prefix[0] !== "?") { N = f.location.pathname + N; if (N[0] !== "/") { N = "/" + N; } } } var Y = N.concat().replace(/(?:%[a-f89][a-f0-9])+/gim, a).slice(z.prefix.length); var K = s(Y); o(K.params, f.history.state); function ie(J) { console.error(J); D(v, null, { replace: true }); } ae(0); function ae(J) { for (; J < $.length; J++) { if ($[J].check(K)) { var Se = $[J].component; var zt = $[J].route; var Ve = Se; var te = W = function (Be) { if (te === W) { if (Be === V) { return ae(J + 1); } R = Be != null && (typeof Be.view == "function" || typeof Be == "function") ? Be : "div"; G = K.params; X = Y; W = null; S = Se.render ? Se : null; if (b === 2) { d.redraw(); } else { b = 2; d.redraw.sync(); } } }; if (Se.view || typeof Se == "function") { Se = {}; te(Ve); } else if (Se.onmatch) { p.then(function () { return Se.onmatch(K.params, Y, zt); }).then(te, Y === v ? null : ie); } else { te("div"); } return; } } if (Y === v) { throw new Error("Could not resolve default route " + v + "."); } D(v, null, { replace: true }); } } function _() { if (!w) { w = true; u(F); } } function D(N, Y, K) { N = n(N, Y); if (x) { _(); var ie = K ? K.state : null; var ae = K ? K.title : null; if (K && K.replace) { f.history.replaceState(ie, ae, z.prefix + N); } else { f.history.pushState(ie, ae, z.prefix + N); } } else { f.location.href = z.prefix + N; } } function z(N, Y, K) { if (!N) { throw new TypeError("DOM element being rendered to does not exist."); } $ = Object.keys(K).map(function (ae) { if (ae[0] !== "/") { throw new SyntaxError("Routes must start with a '/'."); } if (/:([^\/\.-]+)(\.{3})?:/.test(ae)) { throw new SyntaxError("Route parameter names must be separated with either '/', '.', or '-'."); } return { route: ae, component: K[ae], check: r(ae) }; }); v = Y; if (Y != null) { var ie = s(Y); if (!$.some(function (ae) { return ae.check(ie); })) { throw new ReferenceError("Default route doesn't match any known routes."); } } if (typeof f.history.pushState == "function") { f.addEventListener("popstate", _, false); } else if (z.prefix[0] === "#") { f.addEventListener("hashchange", F, false); } x = true; d.mount(N, M); F(); } z.set = function (N, Y, K) { if (W != null) { K = K || {}; K.replace = true; } W = null; D(N, Y, K); }; z.get = function () { return X; }; z.prefix = "#!"; z.Link = { view: function (N) { var Y = t(N.attrs.selector || "a", l(N.attrs, ["options", "params", "selector", "onclick"]), N.children); var K; var ie; var ae; if (Y.attrs.disabled = !!Y.attrs.disabled) { Y.attrs.href = null; Y.attrs["aria-disabled"] = "true"; } else { K = N.attrs.options; ie = N.attrs.onclick; ae = n(Y.attrs.href, N.attrs.params); Y.attrs.href = z.prefix + ae; Y.attrs.onclick = function (J) { var Se; if (typeof ie == "function") { Se = ie.call(J.currentTarget, J); } else if (!(ie == null || typeof ie != "object")) { if (typeof ie.handleEvent == "function") { ie.handleEvent(J); } } if (Se !== false && !J.defaultPrevented && (J.button === 0 || J.which === 0 || J.which === 1) && (!J.currentTarget.target || J.currentTarget.target === "_self") && !J.ctrlKey && !J.metaKey && !J.shiftKey && !J.altKey) { J.preventDefault(); J.redraw = false; z.set(ae, null, K); } }; } return Y; } }; z.param = function (N) { if (G && N != null) { return G[N]; } else { return G; } }; return z; }; return ss; } var rs; var Fr; function Tu() { if (Fr) { return rs; } Fr = 1; var e = Qs; rs = Iu()(typeof window !== "undefined" ? window : null, e); return rs; } var On = pu; var ha = bu; var ua = Qs; function Ae() { return On.apply(this, arguments); } Ae.m = On; Ae.trust = On.trust; Ae.fragment = On.fragment; Ae.Fragment = "["; Ae.mount = ua.mount; Ae.route = Tu(); Ae.render = ra; Ae.redraw = ua.redraw; Ae.request = ha.request; Ae.jsonp = ha.jsonp; Ae.parseQueryString = la(); Ae.buildQueryString = oa(); Ae.parsePathname = er(); Ae.buildPathname = js(); Ae.vnode = It(); Ae.PromisePolyfill = na(); Ae.censor = ca(); var Mu = Ae; const kt = An(Mu); function ze(e, t, i, n, s) { this.debugLog = false; this.baseUrl = e; this.lobbySize = i; this.devPort = t; this.lobbySpread = n; this.rawIPs = !!s; this.server = undefined; this.gameIndex = undefined; this.callback = undefined; this.errorCallback = undefined; } ze.prototype.regionInfo = { 0: { name: "Local", latitude: 0, longitude: 0 }, "us-east": { name: "Miami", latitude: 40.1393329, longitude: -75.8521818 }, miami: { name: "Miami", latitude: 40.1393329, longitude: -75.8521818 }, "us-west": { name: "Silicon Valley", latitude: 47.6149942, longitude: -122.4759879 }, siliconvalley: { name: "Silicon Valley", latitude: 47.6149942, longitude: -122.4759879 }, gb: { name: "London", latitude: 51.5283063, longitude: -0.382486 }, london: { name: "London", latitude: 51.5283063, longitude: -0.382486 }, "eu-west": { name: "Frankfurt", latitude: 50.1211273, longitude: 8.496137 }, frankfurt: { name: "Frankfurt", latitude: 50.1211273, longitude: 8.496137 }, au: { name: "Sydney", latitude: -33.8479715, longitude: 150.651084 }, sydney: { name: "Sydney", latitude: -33.8479715, longitude: 150.651084 }, saopaulo: { name: "São Paulo", latitude: 23.5558, longitude: 46.6396 }, sg: { name: "Singapore", latitude: 1.3147268, longitude: 103.7065876 }, singapore: { name: "Singapore", latitude: 1.3147268, longitude: 103.7065876 } }; ze.prototype.start = function (e, t, i, n) { this.callback = t; this.errorCallback = i; if (n) { return t(); } const s = this.parseServerQuery(e); if (s && s.length > 0) { this.log("Found server in query."); this.password = s[3]; this.connect(s[0], s[1], s[2]); } else { this.errorCallback("Unable to find server"); } }; ze.prototype.parseServerQuery = function (e) { const t = new URLSearchParams(location.search, true); const i = e || t.get("server"); if (typeof i != "string") { return []; } const [n, s] = i.split(":"); return [n, s, t.get("password")]; }; ze.prototype.findServer = function (e, t) { var i = this.servers[e]; for (let n = 0; n < i.length; n++) { const s = i[n]; if (s.name === t) { return s; } } console.warn("Could not find server in region " + e + " with serverName " + t + "."); }; ze.prototype.seekServer = function (e, t, i) { if (i == null) { i = "random"; } if (t == null) { t = false; } const n = ["random"]; const s = this.lobbySize; const r = this.lobbySpread; const o = this.servers[e].flatMap(function (u) { let p = 0; return u.games.map(function (w) { const x = p++; return { region: u.region, index: u.index * u.games.length + x, gameIndex: x, gameCount: u.games.length, playerCount: w.playerCount, playerCapacity: w.playerCapacity, isPrivate: w.isPrivate }; }); }).filter(function (u) { return !u.isPrivate; }).filter(function (u) { if (t) { return u.playerCount == 0 && u.gameIndex >= u.gameCount / 2; } else { return true; } }).filter(function (u) { if (i == "random") { return true; } else { return n[u.index % n.length].key == i; } }).sort(function (u, p) { return p.playerCount - u.playerCount; }).filter(function (u) { return u.playerCount < s; }); if (t) { o.reverse(); } if (o.length == 0) { this.errorCallback("No open servers."); return; } const l = Math.min(r, o.length); var f = Math.floor(Math.random() * l); f = Math.min(f, o.length - 1); const c = o[f]; const a = c.region; var f = Math.floor(c.index / c.gameCount); const d = c.index % c.gameCount; this.log("Found server."); return [a, f, d]; }; ze.prototype.connect = function (e, t, i) { if (this.connected) { return; } const n = this.findServer(e, t); if (n == null) { this.errorCallback("Failed to find server for region " + e + " and serverName " + t); return; } this.log("Connecting to server", n, "with game index", i); if (n.playerCount >= n.playerCapacity) { this.errorCallback("Server is already full."); return; } window.history.replaceState(document.title, document.title, this.generateHref(e, t, this.password)); this.server = n; this.gameIndex = i; this.log("Calling callback with address", this.serverAddress(n), "on port", this.serverPort(n)); this.callback(this.serverAddress(n), this.serverPort(n), i); if (_i) { clearInterval(_i); } }; ze.prototype.switchServer = function (e, t) { this.switchingServers = true; window.location = this.generateHref(e, t, null); }; ze.prototype.generateHref = function (e, t, i) { let n = window.location.href.split("?")[0]; n += "?server=" + e + ":" + t; if (i) { n += "&password=" + encodeURIComponent(i); } return n; }; ze.prototype.serverAddress = function (e) { if (e.region == 0) { return "localhost"; } else { return e.key + "." + e.region + "." + this.baseUrl; } }; ze.prototype.serverPort = function (e) { return e.port; }; let _i; function Eu(e) { e = e.filter(s => s.playerCount !== s.playerCapacity); const t = Math.min(...e.map(s => s.ping || Infinity)); const i = e.filter(s => s.ping === t); if (!i.length > 0) { return null; } else { return i.reduce((s, r) => s.playerCount > r.playerCount ? s : r); } } ze.prototype.processServers = function (e) { if (_i) { clearInterval(_i); } return new Promise(t => { const i = {}; const n = c => { const a = i[c]; const f = a[0]; let d = this.serverAddress(f); const u = this.serverPort(f); if (u) { d += `:${u}`; } const p = `https://${d}/ping`; const w = new Date().getTime(); return Promise.race([fetch(p).then(() => { const x = new Date().getTime() - w; a.forEach(b => { b.pings = b.pings ?? []; b.pings.push(x); if (b.pings.length > 10) { b.pings.shift(); } b.ping = Math.floor(b.pings.reduce(($, v) => $ + v, 0) / b.pings.length); }); }).catch(() => {}), new Promise(x => // TOLOOK setTimeout(() => x(), 100))]); }; const s = async () => { await Promise.all(Object.keys(i).map(n)); if (!window.blockRedraw) { kt.redraw(); } }; e.forEach(c => { i[c.region] = i[c.region] || []; i[c.region].push(c); }); for (const c in i) { i[c] = i[c].sort(function (a, f) { return f.playerCount - a.playerCount; }); } this.servers = i; let r; const [o, l] = this.parseServerQuery(); e.forEach(c => { if (o === c.region && l === c.name) { c.selected = true; r = c; } }); s().then(s).then(() => { if (r) { return; } let c = Eu(e); if (!c) { c = e[0]; } if (c) { c.selected = true; window.history.replaceState(document.title, document.title, this.generateHref(c.region, c.name, this.password)); } if (!window.blockRedraw) { kt.redraw(); } }).then(s).catch(c => {}).finally(t); _i = // TOLOOK setInterval(s, 5000); }); }; ze.prototype.ipToHex = function (e) { return e.split(".").map(i => ("00" + parseInt(i).toString(16)).substr(-2)).join("").toLowerCase(); }; ze.prototype.hashIP = function (e) { return tu(this.ipToHex(e)); }; ze.prototype.log = function () { if (this.debugLog) { return console.log.apply(undefined, arguments); } if (console.verbose) { return console.verbose.apply(undefined, arguments); } }; ze.prototype.stripRegion = function (e) { if (e.startsWith("vultr:")) { e = e.slice(6); } else if (e.startsWith("do:")) { e = e.slice(3); } return e; }; const Cu = function (e, t) { return e.concat(t); }; const Pu = function (e, t) { return t.map(e).reduce(Cu, []); }; Array.prototype.flatMap = function (e) { return Pu(e, this); }; const hn = (e, t) => { const i = t.x - e.x; const n = t.y - e.y; return Math.sqrt(i * i + n * n); }; const $u = (e, t) => { const i = t.x - e.x; const n = t.y - e.y; return Au(Math.atan2(n, i)); }; const Ru = (e, t, i) => { const n = { x: 0, y: 0 }; i = Cs(i); n.x = e.x - t * Math.cos(i); n.y = e.y - t * Math.sin(i); return n; }; const Cs = e => e * (Math.PI / 180); const Au = e => e * (180 / Math.PI); const Du = e => isNaN(e.buttons) ? e.pressure !== 0 : e.buttons !== 0; const os = new Map(); const Vr = e => { if (os.has(e)) { clearTimeout(os.get(e)); } os.set(e, // TOLOOK setTimeout(e, 100)); }; const wn = (e, t, i) => { const n = t.split(/[ ,]+/g); let s; for (let r = 0; r < n.length; r += 1) { s = n[r]; if (e.addEventListener) { e.addEventListener(s, i, false); } else if (e.attachEvent) { e.attachEvent(s, i); } } }; const Nr = (e, t, i) => { const n = t.split(/[ ,]+/g); let s; for (let r = 0; r < n.length; r += 1) { s = n[r]; if (e.removeEventListener) { e.removeEventListener(s, i); } else if (e.detachEvent) { e.detachEvent(s, i); } } }; const fa = e => { e.preventDefault(); if (e.type.match(/^touch/)) { return e.changedTouches; } else { return e; } }; const Ur = () => { const e = window.pageXOffset !== undefined ? window.pageXOffset : (document.documentElement || document.body.parentNode || document.body).scrollLeft; const t = window.pageYOffset !== undefined ? window.pageYOffset : (document.documentElement || document.body.parentNode || document.body).scrollTop; return { x: e, y: t }; }; const Wr = (e, t) => { if (t.top || t.right || t.bottom || t.left) { e.style.top = t.top; e.style.right = t.right; e.style.bottom = t.bottom; e.style.left = t.left; } else { e.style.left = t.x + "px"; e.style.top = t.y + "px"; } }; const tr = (e, t, i) => { const n = da(e); for (let s in n) { if (n.hasOwnProperty(s)) { if (typeof t == "string") { n[s] = t + " " + i; } else { let r = ""; for (let o = 0, l = t.length; o < l; o += 1) { r += t[o] + " " + i + ", "; } n[s] = r.slice(0, -2); } } } return n; }; const Ou = (e, t) => { const i = da(e); for (let n in i) { if (i.hasOwnProperty(n)) { i[n] = t; } } return i; }; const da = e => { const t = { [e]: "" }; ["webkit", "Moz", "o"].forEach(function (n) { t[n + e.charAt(0).toUpperCase() + e.slice(1)] = ""; }); return t; }; const as = (e, t) => { for (let i in t) { if (t.hasOwnProperty(i)) { e[i] = t[i]; } } return e; }; const _u = (e, t) => { const i = {}; for (let n in e) { if (e.hasOwnProperty(n) && t.hasOwnProperty(n)) { i[n] = t[n]; } else if (e.hasOwnProperty(n)) { i[n] = e[n]; } } return i; }; const Ps = (e, t) => { if (e.length) { for (let i = 0, n = e.length; i < n; i += 1) { t(e[i]); } } else { t(e); } }; const zu = (e, t, i) => ({ x: Math.min(Math.max(e.x, t.x - i), t.x + i), y: Math.min(Math.max(e.y, t.y - i), t.y + i) }); var Bu = ("ontouchstart" in window); var Hu = !!window.PointerEvent; var Lu = !!window.MSPointerEvent; var Ci = { touch: { start: "touchstart", move: "touchmove", end: "touchend, touchcancel" }, mouse: { start: "mousedown", move: "mousemove", end: "mouseup" }, pointer: { start: "pointerdown", move: "pointermove", end: "pointerup, pointercancel" }, MSPointer: { start: "MSPointerDown", move: "MSPointerMove", end: "MSPointerUp" } }; var si; var Wi = {}; if (Hu) { si = Ci.pointer; } else if (Lu) { si = Ci.MSPointer; } else if (Bu) { si = Ci.touch; Wi = Ci.mouse; } else { si = Ci.mouse; } function dt() {} dt.prototype.on = function (e, t) { var i = this; var n = e.split(/[ ,]+/g); var s; i._handlers_ = i._handlers_ || {}; for (var r = 0; r < n.length; r += 1) { s = n[r]; i._handlers_[s] = i._handlers_[s] || []; i._handlers_[s].push(t); } return i; }; dt.prototype.off = function (e, t) { var i = this; i._handlers_ = i._handlers_ || {}; if (e === undefined) { i._handlers_ = {}; } else if (t === undefined) { i._handlers_[e] = null; } else if (i._handlers_[e] && i._handlers_[e].indexOf(t) >= 0) { i._handlers_[e].splice(i._handlers_[e].indexOf(t), 1); } return i; }; dt.prototype.trigger = function (e, t) { var i = this; var n = e.split(/[ ,]+/g); var s; i._handlers_ = i._handlers_ || {}; for (var r = 0; r < n.length; r += 1) { s = n[r]; if (i._handlers_[s] && i._handlers_[s].length) { i._handlers_[s].forEach(function (o) { o.call(i, { type: s, target: i }, t); }); } } }; dt.prototype.config = function (e) { var t = this; t.options = t.defaults || {}; if (e) { t.options = _u(t.options, e); } }; dt.prototype.bindEvt = function (e, t) { var i = this; i._domHandlers_ = i._domHandlers_ || {}; i._domHandlers_[t] = function () { if (typeof i["on" + t] == "function") { i["on" + t].apply(i, arguments); } else { console.warn("[WARNING] : Missing \"on" + t + "\" handler."); } }; wn(e, si[t], i._domHandlers_[t]); if (Wi[t]) { wn(e, Wi[t], i._domHandlers_[t]); } return i; }; dt.prototype.unbindEvt = function (e, t) { var i = this; i._domHandlers_ = i._domHandlers_ || {}; Nr(e, si[t], i._domHandlers_[t]); if (Wi[t]) { Nr(e, Wi[t], i._domHandlers_[t]); } delete i._domHandlers_[t]; return this; }; function Ee(e, t) { this.identifier = t.identifier; this.position = t.position; this.frontPosition = t.frontPosition; this.collection = e; this.defaults = { size: 100, threshold: 0.1, color: "white", fadeTime: 250, dataOnly: false, restJoystick: true, restOpacity: 0.5, mode: "dynamic", zone: document.body, lockX: false, lockY: false, shape: "circle" }; this.config(t); if (this.options.mode === "dynamic") { this.options.restOpacity = 0; } this.id = Ee.id; Ee.id += 1; this.buildEl().stylize(); this.instance = { el: this.ui.el, on: this.on.bind(this), off: this.off.bind(this), show: this.show.bind(this), hide: this.hide.bind(this), add: this.addToDom.bind(this), remove: this.removeFromDom.bind(this), destroy: this.destroy.bind(this), setPosition: this.setPosition.bind(this), resetDirection: this.resetDirection.bind(this), computeDirection: this.computeDirection.bind(this), trigger: this.trigger.bind(this), position: this.position, frontPosition: this.frontPosition, ui: this.ui, identifier: this.identifier, id: this.id, options: this.options }; return this.instance; } Ee.prototype = new dt(); Ee.constructor = Ee; Ee.id = 0; Ee.prototype.buildEl = function (e) { this.ui = {}; if (this.options.dataOnly) { return this; } else { this.ui.el = document.createElement("div"); this.ui.back = document.createElement("div"); this.ui.front = document.createElement("div"); this.ui.el.className = "nipple collection_" + this.collection.id; this.ui.back.className = "back"; this.ui.front.className = "front"; this.ui.el.setAttribute("id", "nipple_" + this.collection.id + "_" + this.id); this.ui.el.appendChild(this.ui.back); this.ui.el.appendChild(this.ui.front); return this; } }; Ee.prototype.stylize = function () { if (this.options.dataOnly) { return this; } var e = this.options.fadeTime + "ms"; var t = Ou("borderRadius", "50%"); var i = tr("transition", "opacity", e); var n = { el: { position: "absolute", opacity: this.options.restOpacity, display: "block", zIndex: 999 }, back: { position: "absolute", display: "block", width: this.options.size + "px", height: this.options.size + "px", marginLeft: -this.options.size / 2 + "px", marginTop: -this.options.size / 2 + "px", background: this.options.color, opacity: ".5" }, front: { width: this.options.size / 2 + "px", height: this.options.size / 2 + "px", position: "absolute", display: "block", marginLeft: -this.options.size / 4 + "px", marginTop: -this.options.size / 4 + "px", background: this.options.color, opacity: ".5", transform: "translate(0px, 0px)" } }; as(n.el, i); if (this.options.shape === "circle") { as(n.back, t); } as(n.front, t); this.applyStyles(n); return this; }; Ee.prototype.applyStyles = function (e) { for (var t in this.ui) { if (this.ui.hasOwnProperty(t)) { for (var i in e[t]) { this.ui[t].style[i] = e[t][i]; } } } return this; }; Ee.prototype.addToDom = function () { if (this.options.dataOnly || document.body.contains(this.ui.el)) { return this; } else { this.options.zone.appendChild(this.ui.el); return this; } }; Ee.prototype.removeFromDom = function () { if (this.options.dataOnly || !document.body.contains(this.ui.el)) { return this; } else { this.options.zone.removeChild(this.ui.el); return this; } }; Ee.prototype.destroy = function () { clearTimeout(this.removeTimeout); clearTimeout(this.showTimeout); clearTimeout(this.restTimeout); this.trigger("destroyed", this.instance); this.removeFromDom(); this.off(); }; Ee.prototype.show = function (e) { var t = this; if (!t.options.dataOnly) { clearTimeout(t.removeTimeout); clearTimeout(t.showTimeout); clearTimeout(t.restTimeout); t.addToDom(); t.restCallback(); // TOLOOK setTimeout(function () { t.ui.el.style.opacity = 1; }, 0); t.showTimeout = // TOLOOK setTimeout(function () { t.trigger("shown", t.instance); if (typeof e == "function") { e.call(this); } }, t.options.fadeTime); } return t; }; Ee.prototype.hide = function (e) { var t = this; if (t.options.dataOnly) { return t; } t.ui.el.style.opacity = t.options.restOpacity; clearTimeout(t.removeTimeout); clearTimeout(t.showTimeout); clearTimeout(t.restTimeout); t.removeTimeout = // TOLOOK setTimeout(function () { var i = t.options.mode === "dynamic" ? "none" : "block"; t.ui.el.style.display = i; if (typeof e == "function") { e.call(t); } t.trigger("hidden", t.instance); }, t.options.fadeTime); if (t.options.restJoystick) { const i = t.options.restJoystick; const n = { x: i === true || i.x !== false ? 0 : t.instance.frontPosition.x, y: i === true || i.y !== false ? 0 : t.instance.frontPosition.y }; t.setPosition(e, n); } return t; }; Ee.prototype.setPosition = function (e, t) { var i = this; i.frontPosition = { x: t.x, y: t.y }; var n = i.options.fadeTime + "ms"; var s = {}; s.front = tr("transition", ["transform"], n); var r = { front: {} }; r.front = { transform: "translate(" + i.frontPosition.x + "px," + i.frontPosition.y + "px)" }; i.applyStyles(s); i.applyStyles(r); i.restTimeout = // TOLOOK setTimeout(function () { if (typeof e == "function") { e.call(i); } i.restCallback(); }, i.options.fadeTime); }; Ee.prototype.restCallback = function () { var e = this; var t = {}; t.front = tr("transition", "none", ""); e.applyStyles(t); e.trigger("rested", e.instance); }; Ee.prototype.resetDirection = function () { this.direction = { x: false, y: false, angle: false }; }; Ee.prototype.computeDirection = function (e) { var t = e.angle.radian; var i = Math.PI / 4; var n = Math.PI / 2; var s; var r; var o; if (t > i && t < i * 3 && !e.lockX) { s = "up"; } else if (t > -i && t <= i && !e.lockY) { s = "left"; } else if (t > -i * 3 && t <= -i && !e.lockX) { s = "down"; } else if (!e.lockY) { s = "right"; } if (!e.lockY) { if (t > -n && t < n) { r = "left"; } else { r = "right"; } } if (!e.lockX) { if (t > 0) { o = "up"; } else { o = "down"; } } if (e.force > this.options.threshold) { var l = {}; var c; for (c in this.direction) { if (this.direction.hasOwnProperty(c)) { l[c] = this.direction[c]; } } var a = {}; this.direction = { x: r, y: o, angle: s }; e.direction = this.direction; for (c in l) { if (l[c] === this.direction[c]) { a[c] = true; } } if (a.x && a.y && a.angle) { return e; } if (!a.x || !a.y) { this.trigger("plain", e); } if (!a.x) { this.trigger("plain:" + r, e); } if (!a.y) { this.trigger("plain:" + o, e); } if (!a.angle) { this.trigger("dir dir:" + s, e); } } else { this.resetDirection(); } return e; }; function ke(e, t) { var i = this; i.nipples = []; i.idles = []; i.actives = []; i.ids = []; i.pressureIntervals = {}; i.manager = e; i.id = ke.id; ke.id += 1; i.defaults = { zone: document.body, multitouch: false, maxNumberOfNipples: 10, mode: "dynamic", position: { top: 0, left: 0 }, catchDistance: 200, size: 100, threshold: 0.1, color: "white", fadeTime: 250, dataOnly: false, restJoystick: true, restOpacity: 0.5, lockX: false, lockY: false, shape: "circle", dynamicPage: false, follow: false }; i.config(t); if (i.options.mode === "static" || i.options.mode === "semi") { i.options.multitouch = false; } if (!i.options.multitouch) { i.options.maxNumberOfNipples = 1; } const n = getComputedStyle(i.options.zone.parentElement); if (n && n.display === "flex") { i.parentIsFlex = true; } i.updateBox(); i.prepareNipples(); i.bindings(); i.begin(); return i.nipples; } ke.prototype = new dt(); ke.constructor = ke; ke.id = 0; ke.prototype.prepareNipples = function () { var e = this; var t = e.nipples; t.on = e.on.bind(e); t.off = e.off.bind(e); t.options = e.options; t.destroy = e.destroy.bind(e); t.ids = e.ids; t.id = e.id; t.processOnMove = e.processOnMove.bind(e); t.processOnEnd = e.processOnEnd.bind(e); t.get = function (i) { if (i === undefined) { return t[0]; } for (var n = 0, s = t.length; n < s; n += 1) { if (t[n].identifier === i) { return t[n]; } } return false; }; }; ke.prototype.bindings = function () { var e = this; e.bindEvt(e.options.zone, "start"); e.options.zone.style.touchAction = "none"; e.options.zone.style.msTouchAction = "none"; }; ke.prototype.begin = function () { var e = this; var t = e.options; if (t.mode === "static") { var i = e.createNipple(t.position, e.manager.getIdentifier()); i.add(); e.idles.push(i); } }; ke.prototype.createNipple = function (e, t) { var i = this; var n = i.manager.scroll; var s = {}; var r = i.options; var o = { x: i.parentIsFlex ? n.x : n.x + i.box.left, y: i.parentIsFlex ? n.y : n.y + i.box.top }; if (e.x && e.y) { s = { x: e.x - o.x, y: e.y - o.y }; } else if (e.top || e.right || e.bottom || e.left) { var l = document.createElement("DIV"); l.style.display = "hidden"; l.style.top = e.top; l.style.right = e.right; l.style.bottom = e.bottom; l.style.left = e.left; l.style.position = "absolute"; r.zone.appendChild(l); var c = l.getBoundingClientRect(); r.zone.removeChild(l); s = e; e = { x: c.left + n.x, y: c.top + n.y }; } var a = new Ee(i, { color: r.color, size: r.size, threshold: r.threshold, fadeTime: r.fadeTime, dataOnly: r.dataOnly, restJoystick: r.restJoystick, restOpacity: r.restOpacity, mode: r.mode, identifier: t, position: e, zone: r.zone, frontPosition: { x: 0, y: 0 }, shape: r.shape }); if (!r.dataOnly) { Wr(a.ui.el, s); Wr(a.ui.front, a.frontPosition); } i.nipples.push(a); i.trigger("added " + a.identifier + ":added", a); i.manager.trigger("added " + a.identifier + ":added", a); i.bindNipple(a); return a; }; ke.prototype.updateBox = function () { var e = this; e.box = e.options.zone.getBoundingClientRect(); }; ke.prototype.bindNipple = function (e) { var t = this; var i; function n(s, r) { i = s.type + " " + r.id + ":" + s.type; t.trigger(i, r); } e.on("destroyed", t.onDestroyed.bind(t)); e.on("shown hidden rested dir plain", n); e.on("dir:up dir:right dir:down dir:left", n); e.on("plain:up plain:right plain:down plain:left", n); }; ke.prototype.pressureFn = function (e, t, i) { var n = this; var s = 0; clearInterval(n.pressureIntervals[i]); n.pressureIntervals[i] = // TOLOOK setInterval(function () { var r = e.force || e.pressure || e.webkitForce || 0; if (r !== s) { t.trigger("pressure", r); n.trigger("pressure " + t.identifier + ":pressure", r); s = r; } }.bind(n), 100); }; ke.prototype.onstart = function (e) { var t = this; var i = t.options; var n = e; e = fa(e); t.updateBox(); function s(r) { if (t.actives.length < i.maxNumberOfNipples) { t.processOnStart(r); } else if (n.type.match(/^touch/)) { Object.keys(t.manager.ids).forEach(function (o) { if (Object.values(n.touches).findIndex(function (c) { return c.identifier === o; }) < 0) { var l = [e[0]]; l.identifier = o; t.processOnEnd(l); } }); if (t.actives.length < i.maxNumberOfNipples) { t.processOnStart(r); } } } Ps(e, s); t.manager.bindDocument(); return false; }; ke.prototype.processOnStart = function (e) { var t = this; var i = t.options; var n; var s = t.manager.getIdentifier(e); var r = e.force || e.pressure || e.webkitForce || 0; var o = { x: e.pageX, y: e.pageY }; var l = t.getOrCreate(s, o); if (l.identifier !== s) { t.manager.removeIdentifier(l.identifier); } l.identifier = s; function c(f) { f.trigger("start", f); t.trigger("start " + f.id + ":start", f); f.show(); if (r > 0) { t.pressureFn(e, f, f.identifier); } t.processOnMove(e); } if ((n = t.idles.indexOf(l)) >= 0) { t.idles.splice(n, 1); } t.actives.push(l); t.ids.push(l.identifier); if (i.mode !== "semi") { c(l); } else { var a = hn(o, l.position); if (a <= i.catchDistance) { c(l); } else { l.destroy(); t.processOnStart(e); return; } } return l; }; ke.prototype.getOrCreate = function (e, t) { var i = this; var n = i.options; var s; if (/(semi|static)/.test(n.mode)) { s = i.idles[0]; if (s) { i.idles.splice(0, 1); return s; } else if (n.mode === "semi") { return i.createNipple(t, e); } else { console.warn("Coudln't find the needed nipple."); return false; } } else { s = i.createNipple(t, e); return s; } }; ke.prototype.processOnMove = function (e) { var t = this; var i = t.options; var n = t.manager.getIdentifier(e); var s = t.nipples.get(n); var r = t.manager.scroll; if (!Du(e)) { this.processOnEnd(e); return; } if (!s) { console.error("Found zombie joystick with ID " + n); t.manager.removeIdentifier(n); return; } if (i.dynamicPage) { var o = s.el.getBoundingClientRect(); s.position = { x: r.x + o.left, y: r.y + o.top }; } s.identifier = n; var l = s.options.size / 2; var c = { x: e.pageX, y: e.pageY }; if (i.lockX) { c.y = s.position.y; } if (i.lockY) { c.x = s.position.x; } var a = hn(c, s.position); var f = $u(c, s.position); var d = Cs(f); var u = a / l; var p = { distance: a, position: c }; var w; var x; if (s.options.shape === "circle") { w = Math.min(a, l); x = Ru(s.position, w, f); } else { x = zu(c, s.position, l); w = hn(x, s.position); } if (i.follow) { if (a > l) { let S = c.x - x.x; let R = c.y - x.y; s.position.x += S; s.position.y += R; s.el.style.top = s.position.y - (t.box.top + r.y) + "px"; s.el.style.left = s.position.x - (t.box.left + r.x) + "px"; a = hn(c, s.position); } } else { c = x; a = w; } var b = c.x - s.position.x; var $ = c.y - s.position.y; s.frontPosition = { x: b, y: $ }; if (!i.dataOnly) { s.ui.front.style.transform = "translate(" + b + "px," + $ + "px)"; } var v = { identifier: s.identifier, position: c, force: u, pressure: e.force || e.pressure || e.webkitForce || 0, distance: a, angle: { radian: d, degree: f }, vector: { x: b / l, y: -$ / l }, raw: p, instance: s, lockX: i.lockX, lockY: i.lockY }; v = s.computeDirection(v); v.angle = { radian: Cs(180 - f), degree: 180 - f }; s.trigger("move", v); t.trigger("move " + s.id + ":move", v); }; ke.prototype.processOnEnd = function (e) { var t = this; var i = t.options; var n = t.manager.getIdentifier(e); var s = t.nipples.get(n); var r = t.manager.removeIdentifier(s.identifier); if (s) { if (!i.dataOnly) { s.hide(function () { if (i.mode === "dynamic") { s.trigger("removed", s); t.trigger("removed " + s.id + ":removed", s); t.manager.trigger("removed " + s.id + ":removed", s); s.destroy(); } }); } clearInterval(t.pressureIntervals[s.identifier]); s.resetDirection(); s.trigger("end", s); t.trigger("end " + s.id + ":end", s); if (t.ids.indexOf(s.identifier) >= 0) { t.ids.splice(t.ids.indexOf(s.identifier), 1); } if (t.actives.indexOf(s) >= 0) { t.actives.splice(t.actives.indexOf(s), 1); } if (/(semi|static)/.test(i.mode)) { t.idles.push(s); } else if (t.nipples.indexOf(s) >= 0) { t.nipples.splice(t.nipples.indexOf(s), 1); } t.manager.unbindDocument(); if (/(semi|static)/.test(i.mode)) { t.manager.ids[r.id] = r.identifier; } } }; ke.prototype.onDestroyed = function (e, t) { var i = this; if (i.nipples.indexOf(t) >= 0) { i.nipples.splice(i.nipples.indexOf(t), 1); } if (i.actives.indexOf(t) >= 0) { i.actives.splice(i.actives.indexOf(t), 1); } if (i.idles.indexOf(t) >= 0) { i.idles.splice(i.idles.indexOf(t), 1); } if (i.ids.indexOf(t.identifier) >= 0) { i.ids.splice(i.ids.indexOf(t.identifier), 1); } i.manager.removeIdentifier(t.identifier); i.manager.unbindDocument(); }; ke.prototype.destroy = function () { var e = this; e.unbindEvt(e.options.zone, "start"); e.nipples.forEach(function (i) { i.destroy(); }); for (var t in e.pressureIntervals) { if (e.pressureIntervals.hasOwnProperty(t)) { clearInterval(e.pressureIntervals[t]); } } e.trigger("destroyed", e.nipples); e.manager.unbindDocument(); e.off(); }; function Re(e) { var t = this; t.ids = {}; t.index = 0; t.collections = []; t.scroll = Ur(); t.config(e); t.prepareCollections(); function i() { var s; t.collections.forEach(function (r) { r.forEach(function (o) { s = o.el.getBoundingClientRect(); o.position = { x: t.scroll.x + s.left, y: t.scroll.y + s.top }; }); }); } wn(window, "resize", function () { Vr(i); }); function n() { t.scroll = Ur(); } wn(window, "scroll", function () { Vr(n); }); return t.collections; } Re.prototype = new dt(); Re.constructor = Re; Re.prototype.prepareCollections = function () { var e = this; e.collections.create = e.create.bind(e); e.collections.on = e.on.bind(e); e.collections.off = e.off.bind(e); e.collections.destroy = e.destroy.bind(e); e.collections.get = function (t) { var i; e.collections.every(function (n) { i = n.get(t); return !i; }); return i; }; }; Re.prototype.create = function (e) { return this.createCollection(e); }; Re.prototype.createCollection = function (e) { var t = this; var i = new ke(t, e); t.bindCollection(i); t.collections.push(i); return i; }; Re.prototype.bindCollection = function (e) { var t = this; var i; function n(s, r) { i = s.type + " " + r.id + ":" + s.type; t.trigger(i, r); } e.on("destroyed", t.onDestroyed.bind(t)); e.on("shown hidden rested dir plain", n); e.on("dir:up dir:right dir:down dir:left", n); e.on("plain:up plain:right plain:down plain:left", n); }; Re.prototype.bindDocument = function () { var e = this; if (!e.binded) { e.bindEvt(document, "move").bindEvt(document, "end"); e.binded = true; } }; Re.prototype.unbindDocument = function (e) { var t = this; if (!Object.keys(t.ids).length || e === true) { t.unbindEvt(document, "move").unbindEvt(document, "end"); t.binded = false; } }; Re.prototype.getIdentifier = function (e) { var t; if (e) { t = e.identifier === undefined ? e.pointerId : e.identifier; if (t === undefined) { t = this.latest || 0; } } else { t = this.index; } if (this.ids[t] === undefined) { this.ids[t] = this.index; this.index += 1; } this.latest = t; return this.ids[t]; }; Re.prototype.removeIdentifier = function (e) { var t = {}; for (var i in this.ids) { if (this.ids[i] === e) { t.id = i; t.identifier = this.ids[i]; delete this.ids[i]; break; } } return t; }; Re.prototype.onmove = function (e) { var t = this; t.onAny("move", e); return false; }; Re.prototype.onend = function (e) { var t = this; t.onAny("end", e); return false; }; Re.prototype.oncancel = function (e) { var t = this; t.onAny("end", e); return false; }; Re.prototype.onAny = function (e, t) { var i = this; var n; var s = "processOn" + e.charAt(0).toUpperCase() + e.slice(1); t = fa(t); function r(l, c, a) { if (a.ids.indexOf(c) >= 0) { a[s](l); l._found_ = true; } } function o(l) { n = i.getIdentifier(l); Ps(i.collections, r.bind(null, l, n)); if (!l._found_) { i.removeIdentifier(n); } } Ps(t, o); return false; }; Re.prototype.destroy = function () { var e = this; e.unbindDocument(true); e.ids = {}; e.index = 0; e.collections.forEach(function (t) { t.destroy(); }); e.off(); }; Re.prototype.onDestroyed = function (e, t) { var i = this; if (i.collections.indexOf(t) < 0) { return false; } i.collections.splice(i.collections.indexOf(t), 1); }; const Xr = new Re(); const qr = { create: function (e) { return Xr.create(e); }, factory: Xr }; let Gr = false; const Fu = e => { if (Gr) { return; } Gr = true; const t = document.getElementById("touch-controls-left"); const i = qr.create({ zone: t }); i.on("start", e.onStartMoving); i.on("end", e.onStopMoving); i.on("move", e.onRotateMoving); const n = document.getElementById("touch-controls-right"); const s = qr.create({ zone: n }); s.on("start", e.onStartAttacking); s.on("end", e.onStopAttacking); s.on("move", e.onRotateAttacking); t.style.display = "block"; n.style.display = "block"; }; const Vu = { enable: Fu }; var Nu = Object.defineProperty; var Uu = (e, t, i) => t in e ? Nu(e, t, { enumerable: true, configurable: true, writable: true, value: i }) : e[t] = i; var Ge = (e, t, i) => Uu(e, typeof t != "symbol" ? t + "" : t, i); const pa = "KGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2NvbnN0IGY9bmV3IFRleHRFbmNvZGVyO2Z1bmN0aW9uIHAoZSl7cmV0dXJuWy4uLm5ldyBVaW50OEFycmF5KGUpXS5tYXAodD0+dC50b1N0cmluZygxNikucGFkU3RhcnQoMiwiMCIpKS5qb2luKCIiKX1hc3luYyBmdW5jdGlvbiB3KGUsdCxyKXtyZXR1cm4gcChhd2FpdCBjcnlwdG8uc3VidGxlLmRpZ2VzdChyLnRvVXBwZXJDYXNlKCksZi5lbmNvZGUoZSt0KSkpfWZ1bmN0aW9uIGIoZSx0LHI9IlNIQS0yNTYiLG49MWU2LHM9MCl7Y29uc3Qgbz1uZXcgQWJvcnRDb250cm9sbGVyLGE9RGF0ZS5ub3coKTtyZXR1cm57cHJvbWlzZTooYXN5bmMoKT0+e2ZvcihsZXQgYz1zO2M8PW47Yys9MSl7aWYoby5zaWduYWwuYWJvcnRlZClyZXR1cm4gbnVsbDtpZihhd2FpdCB3KHQsYyxyKT09PWUpcmV0dXJue251bWJlcjpjLHRvb2s6RGF0ZS5ub3coKS1hfX1yZXR1cm4gbnVsbH0pKCksY29udHJvbGxlcjpvfX1mdW5jdGlvbiBoKGUpe2NvbnN0IHQ9YXRvYihlKSxyPW5ldyBVaW50OEFycmF5KHQubGVuZ3RoKTtmb3IobGV0IG49MDtuPHQubGVuZ3RoO24rKylyW25dPXQuY2hhckNvZGVBdChuKTtyZXR1cm4gcn1mdW5jdGlvbiBnKGUsdD0xMil7Y29uc3Qgcj1uZXcgVWludDhBcnJheSh0KTtmb3IobGV0IG49MDtuPHQ7bisrKXJbbl09ZSUyNTYsZT1NYXRoLmZsb29yKGUvMjU2KTtyZXR1cm4gcn1hc3luYyBmdW5jdGlvbiBtKGUsdD0iIixyPTFlNixuPTApe2NvbnN0IHM9IkFFUy1HQ00iLG89bmV3IEFib3J0Q29udHJvbGxlcixhPURhdGUubm93KCksbD1hc3luYygpPT57Zm9yKGxldCB1PW47dTw9cjt1Kz0xKXtpZihvLnNpZ25hbC5hYm9ydGVkfHwhY3x8IXkpcmV0dXJuIG51bGw7dHJ5e2NvbnN0IGQ9YXdhaXQgY3J5cHRvLnN1YnRsZS5kZWNyeXB0KHtuYW1lOnMsaXY6Zyh1KX0sYyx5KTtpZihkKXJldHVybntjbGVhclRleHQ6bmV3IFRleHREZWNvZGVyKCkuZGVjb2RlKGQpLHRvb2s6RGF0ZS5ub3coKS1hfX1jYXRjaHt9fXJldHVybiBudWxsfTtsZXQgYz1udWxsLHk9bnVsbDt0cnl7eT1oKGUpO2NvbnN0IHU9YXdhaXQgY3J5cHRvLnN1YnRsZS5kaWdlc3QoIlNIQS0yNTYiLGYuZW5jb2RlKHQpKTtjPWF3YWl0IGNyeXB0by5zdWJ0bGUuaW1wb3J0S2V5KCJyYXciLHUscywhMSxbImRlY3J5cHQiXSl9Y2F0Y2h7cmV0dXJue3Byb21pc2U6UHJvbWlzZS5yZWplY3QoKSxjb250cm9sbGVyOm99fXJldHVybntwcm9taXNlOmwoKSxjb250cm9sbGVyOm99fWxldCBpO29ubWVzc2FnZT1hc3luYyBlPT57Y29uc3R7dHlwZTp0LHBheWxvYWQ6cixzdGFydDpuLG1heDpzfT1lLmRhdGE7bGV0IG89bnVsbDtpZih0PT09ImFib3J0IilpPT1udWxsfHxpLmFib3J0KCksaT12b2lkIDA7ZWxzZSBpZih0PT09IndvcmsiKXtpZigib2JmdXNjYXRlZCJpbiByKXtjb25zdHtrZXk6YSxvYmZ1c2NhdGVkOmx9PXJ8fHt9O289YXdhaXQgbShsLGEscyxuKX1lbHNle2NvbnN0e2FsZ29yaXRobTphLGNoYWxsZW5nZTpsLHNhbHQ6Y309cnx8e307bz1iKGwsYyxhLHMsbil9aT1vLmNvbnRyb2xsZXIsby5wcm9taXNlLnRoZW4oYT0+e3NlbGYucG9zdE1lc3NhZ2UoYSYmey4uLmEsd29ya2VyOiEwfSl9KX19fSkoKTsK"; const Wu = e => Uint8Array.from(atob(e), t => t.charCodeAt(0)); const Yr = typeof self !== "undefined" && self.Blob && new Blob([Wu(pa)], { type: "text/javascript;charset=utf-8" }); function Xu(e) { let t; try { t = Yr && (self.URL || self.webkitURL).createObjectURL(Yr); if (!t) { throw ""; } const i = new Worker(t, { name: e == null ? undefined : e.name }); i.addEventListener("error", () => { (self.URL || self.webkitURL).revokeObjectURL(t); }); return i; } catch { return new Worker("data:text/javascript;base64," + pa, { name: e == null ? undefined : e.name }); } finally { if (t) { (self.URL || self.webkitURL).revokeObjectURL(t); } } } function vn() {} function qu(e, t) { for (const i in t) { e[i] = t[i]; } return e; } function ma(e) { return e(); } function Kr() { return Object.create(null); } function Ji(e) { e.forEach(ma); } function ga(e) { return typeof e == "function"; } function Gu(e, t) { if (e != e) { return t == t; } else { return e !== t || e && typeof e == "object" || typeof e == "function"; } } function Yu(e) { return Object.keys(e).length === 0; } function Ku(e, t, i, n) { if (e) { const s = ya(e, t, i, n); return e[0](s); } } function ya(e, t, i, n) { if (e[1] && n) { return qu(i.ctx.slice(), e[1](n(t))); } else { return i.ctx; } } function Zu(e, t, i, n) { if (e[2] && n) { const s = e[2](n(i)); if (t.dirty === undefined) { return s; } if (typeof s == "object") { const r = []; const o = Math.max(t.dirty.length, s.length); for (let l = 0; l < o; l += 1) { r[l] = t.dirty[l] | s[l]; } return r; } return t.dirty | s; } return t.dirty; } function Ju(e, t, i, n, s, r) { if (s) { const o = ya(t, i, n, r); e.p(o, s); } } function Qu(e) { if (e.ctx.length > 32) { const t = []; const i = e.ctx.length / 32; for (let n = 0; n < i; n++) { t[n] = -1; } return t; } return -1; } function we(e, t) { e.appendChild(t); } function ju(e, t, i) { const n = ef(e); if (!n.getElementById(t)) { const s = Me("style"); s.id = t; s.textContent = i; tf(n, s); } } function ef(e) { if (!e) { return document; } const t = e.getRootNode ? e.getRootNode() : e.ownerDocument; if (t && t.host) { return t; } else { return e.ownerDocument; } } function tf(e, t) { we(e.head || e, t); return t.sheet; } function He(e, t, i) { e.insertBefore(t, i || null); } function _e(e) { if (e.parentNode) { e.parentNode.removeChild(e); } } function Me(e) { return document.createElement(e); } function ht(e) { return document.createElementNS("http://www.w3.org/2000/svg", e); } function nf(e) { return document.createTextNode(e); } function rt() { return nf(" "); } function ls(e, t, i, n) { e.addEventListener(t, i, n); return () => e.removeEventListener(t, i, n); } function H(e, t, i) { if (i == null) { e.removeAttribute(t); } else if (e.getAttribute(t) !== i) { e.setAttribute(t, i); } } function sf(e) { return Array.from(e.childNodes); } function Zr(e, t, i) { e.classList.toggle(t, !!i); } function rf(e, t, { bubbles: i = false, cancelable: n = false } = {}) { return new CustomEvent(e, { detail: t, bubbles: i, cancelable: n }); } function of(e) { const t = {}; e.childNodes.forEach(i => { t[i.slot || "default"] = true; }); return t; } let Xi; function zi(e) { Xi = e; } function ir() { if (!Xi) { throw new Error("Function called outside component initialization"); } return Xi; } function af(e) { ir().$$.on_mount.push(e); } function lf(e) { ir().$$.on_destroy.push(e); } function cf() { const e = ir(); return (t, i, { cancelable: n = false } = {}) => { const s = e.$$.callbacks[t]; if (s) { const r = rf(t, i, { cancelable: n }); s.slice().forEach(o => { o.call(e, r); }); return !r.defaultPrevented; } return true; }; } const Qt = []; const kn = []; let ci = []; const Jr = []; const wa = Promise.resolve(); let $s = false; function va() { if (!$s) { $s = true; wa.then(ce); } } function hf() { va(); return wa; } function Rs(e) { ci.push(e); } const cs = new Set(); let Xt = 0; function ce() { if (Xt !== 0) { return; } const e = Xi; do { try { for (; Xt < Qt.length;) { const t = Qt[Xt]; Xt++; zi(t); uf(t.$$); } } catch (t) { Qt.length = 0; Xt = 0; throw t; } zi(null); Qt.length = 0; Xt = 0; for (; kn.length;) { kn.pop()(); } for (let t = 0; t < ci.length; t += 1) { const i = ci[t]; if (!cs.has(i)) { cs.add(i); i(); } } ci.length = 0; } while (Qt.length); for (; Jr.length;) { Jr.pop()(); } $s = false; cs.clear(); zi(e); } function uf(e) { if (e.fragment !== null) { e.update(); Ji(e.before_update); const t = e.dirty; e.dirty = [-1]; if (e.fragment) { e.fragment.p(e.ctx, t); } e.after_update.forEach(Rs); } } function ff(e) { const t = []; const i = []; ci.forEach(n => e.indexOf(n) === -1 ? t.push(n) : i.push(n)); i.forEach(n => n()); ci = t; } const un = new Set(); let df; function ka(e, t) { if (e && e.i) { un.delete(e); e.i(t); } } function pf(e, t, i, n) { if (e && e.o) { if (un.has(e)) { return; } un.add(e); df.c.push(() => { un.delete(e); }); e.o(t); } } function mf(e, t, i) { const { fragment: n, after_update: s } = e.$$; if (n) { n.m(t, i); } Rs(() => { const r = e.$$.on_mount.map(ma).filter(ga); if (e.$$.on_destroy) { e.$$.on_destroy.push(...r); } else { Ji(r); } e.$$.on_mount = []; }); s.forEach(Rs); } function gf(e, t) { const i = e.$$; if (i.fragment !== null) { ff(i.after_update); Ji(i.on_destroy); if (i.fragment) { i.fragment.d(t); } i.on_destroy = i.fragment = null; i.ctx = []; } } function yf(e, t) { if (e.$$.dirty[0] === -1) { Qt.push(e); va(); e.$$.dirty.fill(0); } e.$$.dirty[t / 31 | 0] |= 1 << t % 31; } function wf(e, t, i, n, s, r, o = null, l = [-1]) { const c = Xi; zi(e); const a = e.$$ = { fragment: null, ctx: [], props: r, update: vn, not_equal: s, bound: Kr(), on_mount: [], on_destroy: [], on_disconnect: [], before_update: [], after_update: [], context: new Map(t.context || (c ? c.$$.context : [])), callbacks: Kr(), dirty: l, skip_bound: false, root: t.target || c.$$.root }; if (o) { o(a.root); } let f = false; a.ctx = i ? i(e, t.props || {}, (d, u, ...p) => { const w = p.length ? p[0] : u; if (a.ctx && s(a.ctx[d], a.ctx[d] = w)) { if (!a.skip_bound && a.bound[d]) { a.bound[d](w); } if (f) { yf(e, d); } } return u; }) : []; a.update(); f = true; Ji(a.before_update); a.fragment = n ? n(a.ctx) : false; if (t.target) { if (t.hydrate) { const d = sf(t.target); if (a.fragment) { a.fragment.l(d); } d.forEach(_e); } else if (a.fragment) { a.fragment.c(); } if (t.intro) { ka(e.$$.fragment); } mf(e, t.target, t.anchor); ce(); } zi(c); } let xa; if (typeof HTMLElement == "function") { xa = class extends HTMLElement { constructor(e, t, i) { super(); Ge(this, "$$ctor"); Ge(this, "$$s"); Ge(this, "$$c"); Ge(this, "$$cn", false); Ge(this, "$$d", {}); Ge(this, "$$r", false); Ge(this, "$$p_d", {}); Ge(this, "$$l", {}); Ge(this, "$$l_u", new Map()); this.$$ctor = e; this.$$s = t; if (i) { this.attachShadow({ mode: "open" }); } } addEventListener(e, t, i) { this.$$l[e] = this.$$l[e] || []; this.$$l[e].push(t); if (this.$$c) { const n = this.$$c.$on(e, t); this.$$l_u.set(t, n); } super.addEventListener(e, t, i); } removeEventListener(e, t, i) { super.removeEventListener(e, t, i); if (this.$$c) { const n = this.$$l_u.get(t); if (n) { n(); this.$$l_u.delete(t); } } if (this.$$l[e]) { const n = this.$$l[e].indexOf(t); if (n >= 0) { this.$$l[e].splice(n, 1); } } } async connectedCallback() { this.$$cn = true; if (!this.$$c) { let e = function (s) { return () => { let r; return { c: function () { r = Me("slot"); if (s !== "default") { H(r, "name", s); } }, m: function (o, l) { He(o, r, l); }, d: function (o) { if (o) { _e(r); } } }; }; }; await Promise.resolve(); if (!this.$$cn || this.$$c) { return; } const t = {}; const i = of(this); for (const s of this.$$s) { if (s in i) { t[s] = [e(s)]; } } for (const s of this.attributes) { const r = this.$$g_p(s.name); if (!(r in this.$$d)) { this.$$d[r] = fn(r, s.value, this.$$p_d, "toProp"); } } for (const s in this.$$p_d) { if (!(s in this.$$d) && this[s] !== undefined) { this.$$d[s] = this[s]; delete this[s]; } } this.$$c = new this.$$ctor({ target: this.shadowRoot || this, props: { ...this.$$d, $$slots: t, $$scope: { ctx: [] } } }); const n = () => { this.$$r = true; for (const s in this.$$p_d) { this.$$d[s] = this.$$c.$$.ctx[this.$$c.$$.props[s]]; if (this.$$p_d[s].reflect) { const r = fn(s, this.$$d[s], this.$$p_d, "toAttribute"); if (r == null) { this.removeAttribute(this.$$p_d[s].attribute || s); } else { this.setAttribute(this.$$p_d[s].attribute || s, r); } } } this.$$r = false; }; this.$$c.$$.after_update.push(n); n(); for (const s in this.$$l) { for (const r of this.$$l[s]) { const o = this.$$c.$on(s, r); this.$$l_u.set(r, o); } } this.$$l = {}; } } attributeChangedCallback(e, t, i) { var n; if (!this.$$r) { e = this.$$g_p(e); this.$$d[e] = fn(e, i, this.$$p_d, "toProp"); if (!((n = this.$$c) == null)) { n.$set({ [e]: this.$$d[e] }); } } } disconnectedCallback() { this.$$cn = false; Promise.resolve().then(() => { if (!this.$$cn && this.$$c) { this.$$c.$destroy(); this.$$c = undefined; } }); } $$g_p(e) { return Object.keys(this.$$p_d).find(t => this.$$p_d[t].attribute === e || !this.$$p_d[t].attribute && t.toLowerCase() === e) || e; } }; } function fn(e, t, i, n) { var s; const r = (s = i[e]) == null ? undefined : s.type; t = r === "Boolean" && typeof t != "boolean" ? t != null : t; if (!n || !i[e]) { return t; } if (n === "toAttribute") { switch (r) { case "Object": case "Array": if (t == null) { return null; } else { return JSON.stringify(t); } case "Boolean": if (t) { return ""; } else { return null; } case "Number": return t ?? null; default: return t; } } else { switch (r) { case "Object": case "Array": return t && JSON.parse(t); case "Boolean": return t; case "Number": if (t != null) { return +t; } else { return t; } default: return t; } } } function vf(e, t, i, n, s, r) { let o = class extends xa { constructor() { super(e, i, s); this.$$p_d = t; } static get observedAttributes() { return Object.keys(t).map(l => (t[l].attribute || l).toLowerCase()); } }; Object.keys(t).forEach(l => { Object.defineProperty(o.prototype, l, { get() { if (this.$$c && l in this.$$c) { return this.$$c[l]; } else { return this.$$d[l]; } }, set(c) { var a; c = fn(l, c, t); this.$$d[l] = c; if (!((a = this.$$c) == null)) { a.$set({ [l]: c }); } } }); }); n.forEach(l => { Object.defineProperty(o.prototype, l, { get() { var c; if ((c = this.$$c) == null) { return undefined; } else { return c[l]; } } }); }); e.element = o; return o; } class kf { constructor() { Ge(this, "$$"); Ge(this, "$$set"); } $destroy() { gf(this, 1); this.$destroy = vn; } $on(t, i) { if (!ga(i)) { return vn; } const n = this.$$.callbacks[t] || (this.$$.callbacks[t] = []); n.push(i); return () => { const s = n.indexOf(i); if (s !== -1) { n.splice(s, 1); } }; } $set(t) { if (this.$$set && !Yu(t)) { this.$$.skip_bound = true; this.$$set(t); this.$$.skip_bound = false; } } } const xf = "4"; if (typeof window !== "undefined") { (window.__svelte || (window.__svelte = { v: new Set() })).v.add(xf); } const ba = new TextEncoder(); function bf(e) { return [...new Uint8Array(e)].map(t => t.toString(16).padStart(2, "0")).join(""); } async function Sf(e, t = "SHA-256", i = 100000) { const n = Date.now().toString(16); if (!e) { e = Math.round(Math.random() * i); } const s = await Sa(n, e, t); return { algorithm: t, challenge: s, salt: n, signature: "" }; } async function Sa(e, t, i) { return bf(await crypto.subtle.digest(i.toUpperCase(), ba.encode(e + t))); } function If(e, t, i = "SHA-256", n = 1000000, s = 0) { const r = new AbortController(); const o = Date.now(); return { promise: (async () => { for (let l = s; l <= n; l += 1) { if (r.signal.aborted) { return null; } if ((await Sa(t, l, i)) === e) { return { number: l, took: Date.now() - o }; } } return null; })(), controller: r }; } function Tf() { try { return Intl.DateTimeFormat().resolvedOptions().timeZone; } catch {} } function Mf(e) { const t = atob(e); const i = new Uint8Array(t.length); for (let n = 0; n < t.length; n++) { i[n] = t.charCodeAt(n); } return i; } function Ef(e, t = 12) { const i = new Uint8Array(t); for (let n = 0; n < t; n++) { i[n] = e % 256; e = Math.floor(e / 256); } return i; } async function Cf(e, t = "", i = 1000000, n = 0) { const s = "AES-GCM"; const r = new AbortController(); const o = Date.now(); const l = async () => { for (let f = n; f <= i; f += 1) { if (r.signal.aborted || !c || !a) { return null; } try { const d = await crypto.subtle.decrypt({ name: s, iv: Ef(f) }, c, a); if (d) { return { clearText: new TextDecoder().decode(d), took: Date.now() - o }; } } catch {} } return null; }; let c = null; let a = null; try { a = Mf(e); const f = await crypto.subtle.digest("SHA-256", ba.encode(t)); c = await crypto.subtle.importKey("raw", f, s, false, ["decrypt"]); } catch { return { promise: Promise.reject(), controller: r }; } return { promise: l(), controller: r }; } var Q = (e => { e.ERROR = "error"; e.VERIFIED = "verified"; e.VERIFYING = "verifying"; e.UNVERIFIED = "unverified"; e.EXPIRED = "expired"; return e; })(Q || {}); function Pf(e) { ju(e, "svelte-ddsc3z", ".altcha.svelte-ddsc3z.svelte-ddsc3z{background:var(--altcha-color-base, transparent);border:var(--altcha-border-width, 1px) solid var(--altcha-color-border, #a0a0a0);border-radius:var(--altcha-border-radius, 3px);color:var(--altcha-color-text, currentColor);display:flex;flex-direction:column;max-width:var(--altcha-max-width, 260px);position:relative;text-align:left}.altcha.svelte-ddsc3z.svelte-ddsc3z:focus-within{border-color:var(--altcha-color-border-focus, currentColor)}.altcha[data-floating].svelte-ddsc3z.svelte-ddsc3z{background:var(--altcha-color-base, white);display:none;filter:drop-shadow(3px 3px 6px rgba(0, 0, 0, 0.2));left:-100%;position:fixed;top:-100%;width:var(--altcha-max-width, 260px);z-index:999999}.altcha[data-floating=top].svelte-ddsc3z .altcha-anchor-arrow.svelte-ddsc3z{border-bottom-color:transparent;border-top-color:var(--altcha-color-border, #a0a0a0);bottom:-12px;top:auto}.altcha[data-floating=bottom].svelte-ddsc3z.svelte-ddsc3z:focus-within::after{border-bottom-color:var(--altcha-color-border-focus, currentColor)}.altcha[data-floating=top].svelte-ddsc3z.svelte-ddsc3z:focus-within::after{border-top-color:var(--altcha-color-border-focus, currentColor)}.altcha[data-floating].svelte-ddsc3z.svelte-ddsc3z:not([data-state=unverified]){display:block}.altcha-anchor-arrow.svelte-ddsc3z.svelte-ddsc3z{border:6px solid transparent;border-bottom-color:var(--altcha-color-border, #a0a0a0);content:\"\";height:0;left:12px;position:absolute;top:-12px;width:0}.altcha-main.svelte-ddsc3z.svelte-ddsc3z{align-items:center;display:flex;gap:0.4rem;padding:0.7rem}.altcha-label.svelte-ddsc3z.svelte-ddsc3z{flex-grow:1}.altcha-label.svelte-ddsc3z label.svelte-ddsc3z{cursor:pointer}.altcha-logo.svelte-ddsc3z.svelte-ddsc3z{color:currentColor;opacity:0.3}.altcha-logo.svelte-ddsc3z.svelte-ddsc3z:hover{opacity:1}.altcha-error.svelte-ddsc3z.svelte-ddsc3z{color:var(--altcha-color-error-text, #f23939);display:flex;font-size:0.85rem;gap:0.3rem;padding:0 0.7rem 0.7rem}.altcha-footer.svelte-ddsc3z.svelte-ddsc3z{align-items:center;background-color:var(--altcha-color-footer-bg, transparent);display:flex;font-size:0.75rem;opacity:0.4;padding:0.2rem 0.7rem;text-align:right}.altcha-footer.svelte-ddsc3z.svelte-ddsc3z:hover{opacity:1}.altcha-footer.svelte-ddsc3z>.svelte-ddsc3z:first-child{flex-grow:1}.altcha-footer.svelte-ddsc3z a{color:currentColor}.altcha-checkbox.svelte-ddsc3z.svelte-ddsc3z{display:flex;align-items:center;height:24px;width:24px}.altcha-checkbox.svelte-ddsc3z input.svelte-ddsc3z{width:18px;height:18px;margin:0}.altcha-hidden.svelte-ddsc3z.svelte-ddsc3z{display:none}.altcha-spinner.svelte-ddsc3z.svelte-ddsc3z{animation:svelte-ddsc3z-altcha-spinner 0.75s infinite linear;transform-origin:center}@keyframes svelte-ddsc3z-altcha-spinner{100%{transform:rotate(360deg)}}"); } function Qr(e) { let t; let i; let n; return { c() { t = ht("svg"); i = ht("path"); n = ht("path"); H(i, "d", "M12,1A11,11,0,1,0,23,12,11,11,0,0,0,12,1Zm0,19a8,8,0,1,1,8-8A8,8,0,0,1,12,20Z"); H(i, "fill", "currentColor"); H(i, "opacity", ".25"); H(n, "d", "M12,4a8,8,0,0,1,7.89,6.7A1.53,1.53,0,0,0,21.38,12h0a1.5,1.5,0,0,0,1.48-1.75,11,11,0,0,0-21.72,0A1.5,1.5,0,0,0,2.62,12h0a1.53,1.53,0,0,0,1.49-1.3A8,8,0,0,1,12,4Z"); H(n, "fill", "currentColor"); H(n, "class", "altcha-spinner svelte-ddsc3z"); H(t, "width", "24"); H(t, "height", "24"); H(t, "viewBox", "0 0 24 24"); H(t, "xmlns", "http://www.w3.org/2000/svg"); }, m(s, r) { He(s, t, r); we(t, i); we(t, n); }, d(s) { if (s) { _e(t); } } }; } function $f(e) { let t; let i = e[11].label + ""; let n; return { c() { t = Me("label"); H(t, "for", n = e[4] + "_checkbox"); H(t, "class", "svelte-ddsc3z"); }, m(s, r) { He(s, t, r); t.innerHTML = i; }, p(s, r) { if (r[0] & 2048 && i !== (i = s[11].label + "")) { t.innerHTML = i; } if (r[0] & 16 && n !== (n = s[4] + "_checkbox")) { H(t, "for", n); } }, d(s) { if (s) { _e(t); } } }; } function Rf(e) { let t; let i = e[11].verifying + ""; return { c() { t = Me("span"); }, m(n, s) { He(n, t, s); t.innerHTML = i; }, p(n, s) { if (s[0] & 2048 && i !== (i = n[11].verifying + "")) { t.innerHTML = i; } }, d(n) { if (n) { _e(t); } } }; } function Af(e) { let t; let i = e[11].verified + ""; let n; let s; return { c() { t = Me("span"); n = rt(); s = Me("input"); H(s, "type", "hidden"); H(s, "name", e[4]); s.value = e[6]; }, m(r, o) { He(r, t, o); t.innerHTML = i; He(r, n, o); He(r, s, o); }, p(r, o) { if (o[0] & 2048 && i !== (i = r[11].verified + "")) { t.innerHTML = i; } if (o[0] & 16) { H(s, "name", r[4]); } if (o[0] & 64) { s.value = r[6]; } }, d(r) { if (r) { _e(t); _e(n); _e(s); } } }; } function jr(e) { let t; let i; let n; let s; let r; let o; let l; return { c() { t = Me("div"); i = Me("a"); n = ht("svg"); s = ht("path"); r = ht("path"); o = ht("path"); H(s, "d", "M2.33955 16.4279C5.88954 20.6586 12.1971 21.2105 16.4279 17.6604C18.4699 15.947 19.6548 13.5911 19.9352 11.1365L17.9886 10.4279C17.8738 12.5624 16.909 14.6459 15.1423 16.1284C11.7577 18.9684 6.71167 18.5269 3.87164 15.1423C1.03163 11.7577 1.4731 6.71166 4.8577 3.87164C8.24231 1.03162 13.2883 1.4731 16.1284 4.8577C16.9767 5.86872 17.5322 7.02798 17.804 8.2324L19.9522 9.01429C19.7622 7.07737 19.0059 5.17558 17.6604 3.57212C14.1104 -0.658624 7.80283 -1.21043 3.57212 2.33956C-0.658625 5.88958 -1.21046 12.1971 2.33955 16.4279Z"); H(s, "fill", "currentColor"); H(r, "d", "M3.57212 2.33956C1.65755 3.94607 0.496389 6.11731 0.12782 8.40523L2.04639 9.13961C2.26047 7.15832 3.21057 5.25375 4.8577 3.87164C8.24231 1.03162 13.2883 1.4731 16.1284 4.8577L13.8302 6.78606L19.9633 9.13364C19.7929 7.15555 19.0335 5.20847 17.6604 3.57212C14.1104 -0.658624 7.80283 -1.21043 3.57212 2.33956Z"); H(r, "fill", "currentColor"); H(o, "d", "M7 10H5C5 12.7614 7.23858 15 10 15C12.7614 15 15 12.7614 15 10H13C13 11.6569 11.6569 13 10 13C8.3431 13 7 11.6569 7 10Z"); H(o, "fill", "currentColor"); H(n, "width", "22"); H(n, "height", "22"); H(n, "viewBox", "0 0 20 20"); H(n, "fill", "none"); H(n, "xmlns", "http://www.w3.org/2000/svg"); H(i, "href", Ia); H(i, "target", "_blank"); H(i, "class", "altcha-logo svelte-ddsc3z"); H(i, "aria-label", l = e[11].ariaLinkLabel); }, m(c, a) { He(c, t, a); we(t, i); we(i, n); we(n, s); we(n, r); we(n, o); }, p(c, a) { if (a[0] & 2048 && l !== (l = c[11].ariaLinkLabel)) { H(i, "aria-label", l); } }, d(c) { if (c) { _e(t); } } }; } function eo(e) { let t; let i; let n; let s; function r(c, a) { if (c[7] === Q.EXPIRED) { return Of; } else { return Df; } } let o = r(e); let l = o(e); return { c() { t = Me("div"); i = ht("svg"); n = ht("path"); s = rt(); l.c(); H(n, "stroke-linecap", "round"); H(n, "stroke-linejoin", "round"); H(n, "d", "M6 18L18 6M6 6l12 12"); H(i, "width", "14"); H(i, "height", "14"); H(i, "xmlns", "http://www.w3.org/2000/svg"); H(i, "fill", "none"); H(i, "viewBox", "0 0 24 24"); H(i, "stroke-width", "1.5"); H(i, "stroke", "currentColor"); H(t, "class", "altcha-error svelte-ddsc3z"); }, m(c, a) { He(c, t, a); we(t, i); we(i, n); we(t, s); l.m(t, null); }, p(c, a) { if (o === (o = r(c)) && l) { l.p(c, a); } else { l.d(1); l = o(c); if (l) { l.c(); l.m(t, null); } } }, d(c) { if (c) { _e(t); } l.d(); } }; } function Df(e) { let t; let i = e[11].error + ""; return { c() { t = Me("div"); H(t, "title", e[5]); }, m(n, s) { He(n, t, s); t.innerHTML = i; }, p(n, s) { if (s[0] & 2048 && i !== (i = n[11].error + "")) { t.innerHTML = i; } if (s[0] & 32) { H(t, "title", n[5]); } }, d(n) { if (n) { _e(t); } } }; } function Of(e) { let t; let i = e[11].expired + ""; return { c() { t = Me("div"); H(t, "title", e[5]); }, m(n, s) { He(n, t, s); t.innerHTML = i; }, p(n, s) { if (s[0] & 2048 && i !== (i = n[11].expired + "")) { t.innerHTML = i; } if (s[0] & 32) { H(t, "title", n[5]); } }, d(n) { if (n) { _e(t); } } }; } function to(e) { let t; let i; let n = e[11].footer + ""; return { c() { t = Me("div"); i = Me("div"); H(i, "class", "svelte-ddsc3z"); H(t, "class", "altcha-footer svelte-ddsc3z"); }, m(s, r) { He(s, t, r); we(t, i); i.innerHTML = n; }, p(s, r) { if (r[0] & 2048 && n !== (n = s[11].footer + "")) { i.innerHTML = n; } }, d(s) { if (s) { _e(t); } } }; } function io(e) { let t; return { c() { t = Me("div"); H(t, "class", "altcha-anchor-arrow svelte-ddsc3z"); }, m(i, n) { He(i, t, n); e[48](t); }, p: vn, d(i) { if (i) { _e(t); } e[48](null); } }; } function _f(e) { let t; let i; let n; let s; let r; let o; let l; let c; let a; let f; let d; let u; let p; let w; let x; let b; let $; const v = e[46].default; const S = Ku(v, e, e[45], null); let R = e[7] === Q.VERIFYING && Qr(); function G(D, z) { if (D[7] === Q.VERIFIED) { return Af; } else if (D[7] === Q.VERIFYING) { return Rf; } else { return $f; } } let X = G(e); let W = X(e); let M = (e[3] !== true || e[12]) && jr(e); let V = (e[5] || e[7] === Q.EXPIRED) && eo(e); let F = e[11].footer && (e[2] !== true || e[12]) && to(e); let _ = e[1] && io(e); return { c() { if (S) { S.c(); } t = rt(); i = Me("div"); n = Me("div"); if (R) { R.c(); } s = rt(); r = Me("div"); o = Me("input"); a = rt(); f = Me("div"); W.c(); d = rt(); if (M) { M.c(); } u = rt(); if (V) { V.c(); } p = rt(); if (F) { F.c(); } w = rt(); if (_) { _.c(); } H(o, "type", "checkbox"); H(o, "id", l = e[4] + "_checkbox"); o.required = c = e[0] !== "onsubmit" && (!e[1] || e[0] !== "off"); H(o, "class", "svelte-ddsc3z"); H(r, "class", "altcha-checkbox svelte-ddsc3z"); Zr(r, "altcha-hidden", e[7] === Q.VERIFYING); H(f, "class", "altcha-label svelte-ddsc3z"); H(n, "class", "altcha-main svelte-ddsc3z"); H(i, "class", "altcha svelte-ddsc3z"); H(i, "data-state", e[7]); H(i, "data-floating", e[1]); }, m(D, z) { if (S) { S.m(D, z); } He(D, t, z); He(D, i, z); we(i, n); if (R) { R.m(n, null); } we(n, s); we(n, r); we(r, o); o.checked = e[8]; we(n, a); we(n, f); W.m(f, null); we(n, d); if (M) { M.m(n, null); } we(i, u); if (V) { V.m(i, null); } we(i, p); if (F) { F.m(i, null); } we(i, w); if (_) { _.m(i, null); } e[49](i); x = true; if (!b) { $ = [ls(o, "change", e[47]), ls(o, "change", e[13]), ls(o, "invalid", e[14])]; b = true; } }, p(D, z) { if (S && S.p && (!x || z[1] & 16384)) { Ju(S, v, D, D[45], x ? Zu(v, D[45], z, null) : Qu(D[45]), null); } if (D[7] === Q.VERIFYING) { if (!R) { R = Qr(); R.c(); R.m(n, s); } } else if (R) { R.d(1); R = null; } if (!x || z[0] & 16 && l !== (l = D[4] + "_checkbox")) { H(o, "id", l); } if (!x || z[0] & 3 && c !== (c = D[0] !== "onsubmit" && (!D[1] || D[0] !== "off"))) { o.required = c; } if (z[0] & 256) { o.checked = D[8]; } if (!x || z[0] & 128) { Zr(r, "altcha-hidden", D[7] === Q.VERIFYING); } if (X === (X = G(D)) && W) { W.p(D, z); } else { W.d(1); W = X(D); if (W) { W.c(); W.m(f, null); } } if (D[3] !== true || D[12]) { if (M) { M.p(D, z); } else { M = jr(D); M.c(); M.m(n, null); } } else if (M) { M.d(1); M = null; } if (D[5] || D[7] === Q.EXPIRED) { if (V) { V.p(D, z); } else { V = eo(D); V.c(); V.m(i, p); } } else if (V) { V.d(1); V = null; } if (D[11].footer && (D[2] !== true || D[12])) { if (F) { F.p(D, z); } else { F = to(D); F.c(); F.m(i, w); } } else if (F) { F.d(1); F = null; } if (D[1]) { if (_) { _.p(D, z); } else { _ = io(D); _.c(); _.m(i, null); } } else if (_) { _.d(1); _ = null; } if (!x || z[0] & 128) { H(i, "data-state", D[7]); } if (!x || z[0] & 2) { H(i, "data-floating", D[1]); } }, i(D) { if (!x) { ka(S, D); x = true; } }, o(D) { pf(S, D); x = false; }, d(D) { if (D) { _e(t); _e(i); } if (S) { S.d(D); } if (R) { R.d(); } W.d(); if (M) { M.d(); } if (V) { V.d(); } if (F) { F.d(); } if (_) { _.d(); } e[49](null); b = false; Ji($); } }; } const no = "Visit Altcha.org"; const Ia = "https://altcha.org/"; function so(e) { return JSON.parse(e); } function zf(e, t, i) { var n; var s; let r; let o; let l; let c; let { $$slots: a = {}, $$scope: f } = t; let { auto: d = undefined } = t; let { blockspam: u = undefined } = t; let { challengeurl: p = undefined } = t; let { challengejson: w = undefined } = t; let { debug: x = false } = t; let { delay: b = 0 } = t; let { expire: $ = undefined } = t; let { floating: v = undefined } = t; let { floatinganchor: S = undefined } = t; let { floatingoffset: R = undefined } = t; let { hidefooter: G = false } = t; let { hidelogo: X = false } = t; let { name: W = "altcha" } = t; let { maxnumber: M = 1000000 } = t; let { mockerror: V = false } = t; let { obfuscated: F = undefined } = t; let { plugins: _ = undefined } = t; let { refetchonexpire: D = true } = t; let { spamfilter: z = false } = t; let { strings: N = undefined } = t; let { test: Y = false } = t; let { verifyurl: K = undefined } = t; let { workers: ie = Math.min(16, navigator.hardwareConcurrency || 8) } = t; let { workerurl: ae = undefined } = t; const J = cf(); const Se = ["SHA-256", "SHA-384", "SHA-512"]; const zt = (s = (n = document.documentElement.lang) == null ? undefined : n.split("-")) == null ? undefined : s[0]; let Ve = false; let te; let Be = null; let pt = null; let ne = null; let mt = null; let Ne = null; let it = null; let Ze = []; let se = Q.UNVERIFIED; lf(() => { mi(); if (ne) { ne.removeEventListener("submit", Z); ne.removeEventListener("reset", U); ne.removeEventListener("focusin", q); ne = null; } if (Ne) { clearTimeout(Ne); Ne = null; } document.removeEventListener("click", I); document.removeEventListener("scroll", E); window.removeEventListener("resize", Ce); }); af(() => { h("mounted", "1.0.6"); h("workers", ie); m(); h("plugins", Ze.length ? Ze.map(y => y.constructor.pluginName).join(", ") : "none"); if (Y) { h("using test mode"); } if ($) { be($); } if (d !== undefined) { h("auto", d); } if (v !== undefined) { ue(v); } ne = te.closest("form"); if (ne) { ne.addEventListener("submit", Z, { capture: true }); ne.addEventListener("reset", U); if (d === "onfocus") { ne.addEventListener("focusin", q); } } if (d === "onload") { if (F) { Mt(); } else { yt(); } } if (r && (G || X)) { h("Attributes hidefooter and hidelogo ignored because usage with free API Keys requires attribution."); } requestAnimationFrame(() => { J("load"); }); }); function pi(y, B) { return (JSON.stringify({ algorithm: y.algorithm, challenge: y.challenge, number: B.number, salt: y.salt, signature: y.signature, test: Y ? true : undefined, took: B.took })); } function mi() { for (const y of Ze) { y.destroy(); } } function gi() { if (p && D && se === Q.VERIFIED) { yt(); } else { nt(Q.EXPIRED, c.expired); } } async function yi() { var y; if (V) { h("mocking error"); throw new Error("Mocked error."); } if (o) { h("using provided json data"); return o; } if (Y) { h("generating test challenge", { test: Y }); return Sf(typeof Y != "boolean" ? +Y : undefined); } { if (!p && ne) { const le = ne.getAttribute("action"); if (le != null && le.includes("/form/")) { i(15, p = le + "/altcha"); } } if (!p) { throw new Error("Attribute challengeurl not set."); } h("fetching challenge from", p); const B = await fetch(p, { headers: z ? { "x-altcha-spam-filter": "1" } : {} }); if (B.status !== 200) { throw new Error(`Server responded with ${B.status}.`); } const ee = B.headers.get("Expires"); const ve = B.headers.get("X-Altcha-Config"); const Le = await B.json(); const wt = new URLSearchParams((y = Le.salt.split("?")) == null ? undefined : y[1]); const Pe = wt.get("expires") || wt.get("expire"); if (Pe) { const le = new Date(+Pe * 1000); const Xe = isNaN(le.getTime()) ? 0 : le.getTime() - Date.now(); if (Xe > 0) { be(Xe); } } if (ve) { try { const le = JSON.parse(ve); if (le && typeof le == "object") { if (le.verifyurl) { le.verifyurl = new URL(le.verifyurl, new URL(p)).toString(); } xi(le); } } catch (le) { h("unable to configure from X-Altcha-Config", le); } } if (!$ && ee != null && ee.length) { const le = Date.parse(ee); if (le) { const Xe = le - Date.now(); if (Xe > 0) { be(Xe); } } } return Le; } } function wi(y) { var B; const ee = ne == null ? undefined : ne.querySelector(typeof y == "string" ? `input[name="${y}"]` : "input[type=\"email\"]:not([data-no-spamfilter])"); return ((B = ee == null ? undefined : ee.value) == null ? undefined : B.slice(ee.value.indexOf("@"))) || undefined; } function Ln() { if (z === "ipAddress") { return { blockedCountries: undefined, classifier: undefined, disableRules: undefined, email: false, expectedCountries: undefined, expectedLanguages: undefined, fields: false, ipAddress: undefined, text: undefined, timeZone: undefined }; } else if (typeof z == "object") { return z; } else { return { blockedCountries: undefined, classifier: undefined, disableRules: undefined, email: undefined, expectedCountries: undefined, expectedLanguages: undefined, fields: undefined, ipAddress: undefined, text: undefined, timeZone: undefined }; } } function Tt(y) { return [...((ne == null ? undefined : ne.querySelectorAll(y != null && y.length ? y.map(B => `input[name="${B}"]`).join(", ") : "input[type=\"text\"]:not([data-no-spamfilter]), textarea:not([data-no-spamfilter])")) || [])].reduce((B, ee) => { const ve = ee.name; const Le = ee.value; if (ve && Le) { B[ve] = /\n/.test(Le) ? Le.replace(new RegExp("(?<!\\r)\\n", "g"), `\r `) : Le; } return B; }, {}); } function m() { const y = _ !== undefined ? _.split(",") : undefined; for (const B of globalThis.altchaPlugins) { if (!y || y.includes(B.pluginName)) { Ze.push(new B({ el: te, clarify: Mt, dispatch: J, getConfiguration: gt, getFloatingAnchor: Ht, getState: Lt, log: h, reset: nt, solve: re, setState: st, setFloatingAnchor: Ft, verify: yt })); } } } function h(...y) { if (x || y.some(B => B instanceof Error)) { console[y[0] instanceof Error ? "error" : "log"]("ALTCHA", `[name=${W}]`, ...y); } } function g() { if ([Q.UNVERIFIED, Q.ERROR, Q.EXPIRED].includes(se)) { if (z && (ne == null ? undefined : ne.reportValidity()) === false) { i(8, Ve = false); } else if (F) { Mt(); } else { yt(); } } else { i(8, Ve = true); } } function I(y) { const B = y.target; if (v && B && !te.contains(B) && (se === Q.VERIFIED || d === "off" && se === Q.UNVERIFIED)) { i(9, te.style.display = "none", te); } } function E() { if (v && se !== Q.UNVERIFIED) { pe(); } } function O(y) { for (const B of Ze) { if (typeof B.onErrorChange == "function") { B.onErrorChange(mt); } } } function q(y) { if (se === Q.UNVERIFIED) { yt(); } } function Z(y) { if (ne && d === "onsubmit") { if (se === Q.UNVERIFIED) { y.preventDefault(); y.stopPropagation(); yt().then(() => { if (!(ne == null)) { ne.requestSubmit(); } }); } else if (se !== Q.VERIFIED) { y.preventDefault(); y.stopPropagation(); if (se === Q.VERIFYING) { j(); } } } else if (ne && v && d === "off" && se === Q.UNVERIFIED) { y.preventDefault(); y.stopPropagation(); i(9, te.style.display = "block", te); pe(); } } function U() { nt(); } function j() { if (se === Q.VERIFYING && c.waitAlert) { alert(c.waitAlert); } } function vi(y) { for (const B of Ze) { if (typeof B.onStateChange == "function") { B.onStateChange(se); } } if (v && se !== Q.UNVERIFIED) { requestAnimationFrame(() => { pe(); }); } i(8, Ve = se === Q.VERIFIED); } function Ce() { if (v) { pe(); } } function pe(y = 20) { if (te) { if (!pt) { pt = (S ? document.querySelector(S) : ne == null ? undefined : ne.querySelector("input[type=\"submit\"], button[type=\"submit\"], button:not([type=\"button\"]):not([type=\"reset\"])")) || ne; } if (pt) { const B = parseInt(R, 10) || 12; const ee = pt.getBoundingClientRect(); const ve = te.getBoundingClientRect(); const Le = document.documentElement.clientHeight; const wt = document.documentElement.clientWidth; const Pe = v === "auto" ? ee.bottom + ve.height + B + y > Le : v === "top"; const le = Math.max(y, Math.min(wt - y - ve.width, ee.left + ee.width / 2 - ve.width / 2)); if (Pe) { i(9, te.style.top = `${ee.top - (ve.height + B)}px`, te); } else { i(9, te.style.top = `${ee.bottom + B}px`, te); } i(9, te.style.left = `${le}px`, te); te.setAttribute("data-floating", Pe ? "top" : "bottom"); if (Be) { const Xe = Be.getBoundingClientRect(); i(10, Be.style.left = ee.left - le + ee.width / 2 - Xe.width / 2 + "px", Be); } } else { h("unable to find floating anchor element"); } } } async function Bt(y) { if (!K) { throw new Error("Attribute verifyurl not set."); } h("requesting server verification from", K); const B = { payload: y }; if (z) { const { blockedCountries: Le, classifier: wt, disableRules: Pe, email: le, expectedLanguages: Xe, expectedCountries: Fn, fields: bi, ipAddress: Si, text: ol, timeZone: wr } = Ln(); B.blockedCountries = Le; B.classifier = wt; B.disableRules = Pe; B.email = le === false ? undefined : wi(le); B.expectedCountries = Fn; B.expectedLanguages = Xe || (zt ? [zt] : undefined); B.fields = bi === false ? undefined : Tt(bi); B.ipAddress = Si === false ? undefined : Si || "auto"; B.text = ol; B.timeZone = wr === false ? undefined : wr || Tf(); } const ee = await fetch(K, { body: JSON.stringify(B), headers: { "content-type": "application/json" }, method: "POST" }); if (ee.status !== 200) { throw new Error(`Server responded with ${ee.status}.`); } const ve = await ee.json(); if (ve != null && ve.payload) { i(6, it = ve.payload); } J("serververification", ve); if (u && ve.classification === "BAD") { throw new Error("SpamFilter returned negative classification."); } } function be(y) { h("expire", y); if (Ne) { clearTimeout(Ne); Ne = null; } if (y < 1) { gi(); } else { Ne = // TOLOOK setTimeout(gi, y); } } function ue(y) { h("floating", y); if (v !== y) { i(9, te.style.left = "", te); i(9, te.style.top = "", te); } i(1, v = y === true || y === "" ? "auto" : y === false || y === "false" ? undefined : v); if (v) { if (!d) { i(0, d = "onsubmit"); } document.addEventListener("scroll", E); document.addEventListener("click", I); window.addEventListener("resize", Ce); } else if (d === "onsubmit") { i(0, d = undefined); } } function Ie(y) { if (!y.algorithm) { throw new Error("Invalid challenge. Property algorithm is missing."); } if (y.signature === undefined) { throw new Error("Invalid challenge. Property signature is missing."); } if (!Se.includes(y.algorithm.toUpperCase())) { throw new Error(`Unknown algorithm value. Allowed values: ${Se.join(", ")}`); } if (!y.challenge || y.challenge.length < 40) { throw new Error("Challenge is too short. Min. 40 chars."); } if (!y.salt || y.salt.length < 10) { throw new Error("Salt is too short. Min. 10 chars."); } } async function re(y) { let B = null; if ("Worker" in window) { try { B = await ki(y, y.maxnumber); } catch (ee) { h(ee); } if ((B == null ? undefined : B.number) !== undefined || "obfuscated" in y) { return { data: y, solution: B }; } } if ("obfuscated" in y) { const ee = await Cf(y.obfuscated, y.key, y.maxnumber); return { data: y, solution: await ee.promise }; } return { data: y, solution: await If(y.challenge, y.salt, y.algorithm, y.maxnumber || M).promise }; } async function ki(y, B = typeof Y == "number" ? Y : M, ee = Math.ceil(ie)) { const ve = []; ee = Math.min(16, Math.max(1, ee)); for (let Pe = 0; Pe < ee; Pe++) { ve.push(altchaCreateWorker(ae)); } const Le = Math.ceil(B / ee); const wt = await Promise.all(ve.map((Pe, le) => { const Xe = le * Le; return new Promise(Fn => { Pe.addEventListener("message", bi => { if (bi.data) { for (const Si of ve) { if (Si !== Pe) { Si.postMessage({ type: "abort" }); } } } Fn(bi.data); }); Pe.postMessage({ payload: y, max: Xe + Le, start: Xe, type: "work" }); }); })); for (const Pe of ve) { Pe.terminate(); } return wt.find(Pe => !!Pe) || null; } async function Mt() { if (!F) { i(7, se = Q.ERROR); return; } const y = Ze.find(B => B.constructor.pluginName === "obfuscation"); if (!y || !("clarify" in y)) { i(7, se = Q.ERROR); h("Plugin `obfuscation` not found. Import `altcha/plugins/obfuscation` to load it."); return; } if ("clarify" in y && typeof y.clarify == "function") { return y.clarify(); } } function xi(y) { if (y.obfuscated !== undefined) { i(24, F = y.obfuscated); } if (y.auto !== undefined) { i(0, d = y.auto); if (d === "onload") { if (F) { Mt(); } else { yt(); } } } if (y.blockspam !== undefined) { i(16, u = !!y.blockspam); } if (y.floatinganchor !== undefined) { i(20, S = y.floatinganchor); } if (y.delay !== undefined) { i(18, b = y.delay); } if (y.floatingoffset !== undefined) { i(21, R = y.floatingoffset); } if (y.floating !== undefined) { ue(y.floating); } if (y.expire !== undefined) { be(y.expire); i(19, $ = y.expire); } if (y.challenge) { Ie(y.challenge); o = y.challenge; } if (y.challengeurl !== undefined) { i(15, p = y.challengeurl); } if (y.debug !== undefined) { i(17, x = !!y.debug); } if (y.hidefooter !== undefined) { i(2, G = !!y.hidefooter); } if (y.hidelogo !== undefined) { i(3, X = !!y.hidelogo); } if (y.maxnumber !== undefined) { i(22, M = +y.maxnumber); } if (y.mockerror !== undefined) { i(23, V = !!y.mockerror); } if (y.name !== undefined) { i(4, W = y.name); } if (y.refetchonexpire !== undefined) { i(25, D = !!y.refetchonexpire); } if (y.spamfilter !== undefined) { i(26, z = typeof y.spamfilter == "object" ? y.spamfilter : !!y.spamfilter); } if (y.strings) { i(44, l = y.strings); } if (y.test !== undefined) { i(27, Y = typeof y.test == "number" ? y.test : !!y.test); } if (y.verifyurl !== undefined) { i(28, K = y.verifyurl); } if (y.workers !== undefined) { i(29, ie = +y.workers); } if (y.workerurl !== undefined) { i(30, ae = y.workerurl); } } function gt() { return { auto: d, blockspam: u, challengeurl: p, debug: x, delay: b, expire: $, floating: v, floatinganchor: S, floatingoffset: R, hidefooter: G, hidelogo: X, name: W, maxnumber: M, mockerror: V, obfuscated: F, refetchonexpire: D, spamfilter: z, strings: c, test: Y, verifyurl: K, workers: ie, workerurl: ae }; } function Ht() { return pt; } function fe(y) { return Ze.find(B => B.constructor.pluginName === y); } function Lt() { return se; } function nt(y = Q.UNVERIFIED, B = null) { if (Ne) { clearTimeout(Ne); Ne = null; } i(8, Ve = false); i(5, mt = B); i(6, it = null); i(7, se = y); } function Ft(y) { pt = y; } function st(y, B = null) { i(7, se = y); i(5, mt = B); } async function yt() { nt(Q.VERIFYING); await new Promise(y => // TOLOOK setTimeout(y, b || 0)); return yi().then(y => { Ie(y); h("challenge", y); return re(y); }).then(({ data: y, solution: B }) => { h("solution", B); if ("challenge" in y && B && !("clearText" in B)) { if ((B == null ? undefined : B.number) !== undefined) { if (K) { return Bt(pi(y, B)); } i(6, it = pi(y, B)); h("payload", it); } else { h("Unable to find a solution. Ensure that the 'maxnumber' attribute is greater than the randomly generated number."); throw new Error("Unexpected result returned."); } } }).then(() => { i(7, se = Q.VERIFIED); h("verified"); hf().then(() => { J("verified", { payload: it }); }); }).catch(y => { h(y); i(7, se = Q.ERROR); i(5, mt = y.message); }); } function nl() { Ve = this.checked; i(8, Ve); } function sl(y) { kn[y ? "unshift" : "push"](() => { Be = y; i(10, Be); }); } function rl(y) { kn[y ? "unshift" : "push"](() => { te = y; i(9, te); }); } e.$$set = y => { if ("auto" in y) { i(0, d = y.auto); } if ("blockspam" in y) { i(16, u = y.blockspam); } if ("challengeurl" in y) { i(15, p = y.challengeurl); } if ("challengejson" in y) { i(31, w = y.challengejson); } if ("debug" in y) { i(17, x = y.debug); } if ("delay" in y) { i(18, b = y.delay); } if ("expire" in y) { i(19, $ = y.expire); } if ("floating" in y) { i(1, v = y.floating); } if ("floatinganchor" in y) { i(20, S = y.floatinganchor); } if ("floatingoffset" in y) { i(21, R = y.floatingoffset); } if ("hidefooter" in y) { i(2, G = y.hidefooter); } if ("hidelogo" in y) { i(3, X = y.hidelogo); } if ("name" in y) { i(4, W = y.name); } if ("maxnumber" in y) { i(22, M = y.maxnumber); } if ("mockerror" in y) { i(23, V = y.mockerror); } if ("obfuscated" in y) { i(24, F = y.obfuscated); } if ("plugins" in y) { i(32, _ = y.plugins); } if ("refetchonexpire" in y) { i(25, D = y.refetchonexpire); } if ("spamfilter" in y) { i(26, z = y.spamfilter); } if ("strings" in y) { i(33, N = y.strings); } if ("test" in y) { i(27, Y = y.test); } if ("verifyurl" in y) { i(28, K = y.verifyurl); } if ("workers" in y) { i(29, ie = y.workers); } if ("workerurl" in y) { i(30, ae = y.workerurl); } if ("$$scope" in y) { i(45, f = y.$$scope); } }; e.$$.update = () => { if (e.$$.dirty[0] & 32768) { i(12, r = !!(p != null && p.includes(".altcha.org")) && !!(p != null && p.includes("apiKey=ckey_"))); } if (e.$$.dirty[1] & 1) { o = w ? so(w) : undefined; } if (e.$$.dirty[1] & 4) { i(44, l = N ? so(N) : {}); } if (e.$$.dirty[1] & 8192) { i(11, c = { ariaLinkLabel: no, error: "Verification failed. Try again later.", expired: "Verification expired. Try again.", footer: `Protected by <a href="${Ia}" target="_blank" aria-label="${l.ariaLinkLabel || no}">ALTCHA</a>`, label: "I'm not a robot", verified: "Verified", verifying: "Verifying...", waitAlert: "Verifying... please wait.", ...l }); } if (e.$$.dirty[0] & 192) { J("statechange", { payload: it, state: se }); } if (e.$$.dirty[0] & 32) { O(); } if (e.$$.dirty[0] & 128) { vi(); } }; return [d, v, G, X, W, mt, it, se, Ve, te, Be, c, r, g, j, p, u, x, b, $, S, R, M, V, F, D, z, Y, K, ie, ae, w, _, N, Mt, xi, gt, Ht, fe, Lt, nt, Ft, st, yt, l, f, a, nl, sl, rl]; } class Bf extends kf { constructor(t) { super(); wf(this, t, zf, _f, Gu, { auto: 0, blockspam: 16, challengeurl: 15, challengejson: 31, debug: 17, delay: 18, expire: 19, floating: 1, floatinganchor: 20, floatingoffset: 21, hidefooter: 2, hidelogo: 3, name: 4, maxnumber: 22, mockerror: 23, obfuscated: 24, plugins: 32, refetchonexpire: 25, spamfilter: 26, strings: 33, test: 27, verifyurl: 28, workers: 29, workerurl: 30, clarify: 34, configure: 35, getConfiguration: 36, getFloatingAnchor: 37, getPlugin: 38, getState: 39, reset: 40, setFloatingAnchor: 41, setState: 42, verify: 43 }, Pf, [-1, -1, -1]); } get auto() { return this.$$.ctx[0]; } set auto(t) { this.$$set({ auto: t }); ce(); } get blockspam() { return this.$$.ctx[16]; } set blockspam(t) { this.$$set({ blockspam: t }); ce(); } get challengeurl() { return this.$$.ctx[15]; } set challengeurl(t) { this.$$set({ challengeurl: t }); ce(); } get challengejson() { return this.$$.ctx[31]; } set challengejson(t) { this.$$set({ challengejson: t }); ce(); } get debug() { return this.$$.ctx[17]; } set debug(t) { this.$$set({ debug: t }); ce(); } get delay() { return this.$$.ctx[18]; } set delay(t) { this.$$set({ delay: t }); ce(); } get expire() { return this.$$.ctx[19]; } set expire(t) { this.$$set({ expire: t }); ce(); } get floating() { return this.$$.ctx[1]; } set floating(t) { this.$$set({ floating: t }); ce(); } get floatinganchor() { return this.$$.ctx[20]; } set floatinganchor(t) { this.$$set({ floatinganchor: t }); ce(); } get floatingoffset() { return this.$$.ctx[21]; } set floatingoffset(t) { this.$$set({ floatingoffset: t }); ce(); } get hidefooter() { return this.$$.ctx[2]; } set hidefooter(t) { this.$$set({ hidefooter: t }); ce(); } get hidelogo() { return this.$$.ctx[3]; } set hidelogo(t) { this.$$set({ hidelogo: t }); ce(); } get name() { return this.$$.ctx[4]; } set name(t) { this.$$set({ name: t }); ce(); } get maxnumber() { return this.$$.ctx[22]; } set maxnumber(t) { this.$$set({ maxnumber: t }); ce(); } get mockerror() { return this.$$.ctx[23]; } set mockerror(t) { this.$$set({ mockerror: t }); ce(); } get obfuscated() { return this.$$.ctx[24]; } set obfuscated(t) { this.$$set({ obfuscated: t }); ce(); } get plugins() { return this.$$.ctx[32]; } set plugins(t) { this.$$set({ plugins: t }); ce(); } get refetchonexpire() { return this.$$.ctx[25]; } set refetchonexpire(t) { this.$$set({ refetchonexpire: t }); ce(); } get spamfilter() { return this.$$.ctx[26]; } set spamfilter(t) { this.$$set({ spamfilter: t }); ce(); } get strings() { return this.$$.ctx[33]; } set strings(t) { this.$$set({ strings: t }); ce(); } get test() { return this.$$.ctx[27]; } set test(t) { this.$$set({ test: t }); ce(); } get verifyurl() { return this.$$.ctx[28]; } set verifyurl(t) { this.$$set({ verifyurl: t }); ce(); } get workers() { return this.$$.ctx[29]; } set workers(t) { this.$$set({ workers: t }); ce(); } get workerurl() { return this.$$.ctx[30]; } set workerurl(t) { this.$$set({ workerurl: t }); ce(); } get clarify() { return this.$$.ctx[34]; } get configure() { return this.$$.ctx[35]; } get getConfiguration() { return this.$$.ctx[36]; } get getFloatingAnchor() { return this.$$.ctx[37]; } get getPlugin() { return this.$$.ctx[38]; } get getState() { return this.$$.ctx[39]; } get reset() { return this.$$.ctx[40]; } get setFloatingAnchor() { return this.$$.ctx[41]; } get setState() { return this.$$.ctx[42]; } get verify() { return this.$$.ctx[43]; } } window.loadedScript = true; const Hf = location.hostname !== "localhost" && location.hostname !== "127.0.0.1" && !location.hostname.startsWith("192.168."); const Ta = location.hostname === "sandbox-dev.moomoo.io" || location.hostname === "sandbox.moomoo.io"; const Lf = location.hostname === "dev.moomoo.io" || location.hostname === "dev2.moomoo.io"; const As = new Ih(); let $i; let dn; let pn; const xn = location.hostname === "localhost" || location.hostname === "127.0.0.1"; const Ff = false; const nr = xn || Ff; if (Ta) { dn = "https://api-sandbox.moomoo.io"; pn = "moomoo.io"; } else if (Lf) { dn = "https://api-dev.moomoo.io"; pn = "moomoo.io"; } else { dn = "https://api.moomoo.io"; pn = "moomoo.io"; } const Vf = !nr; const xt = new ze(pn, 443, T.maxPlayers, 5, Vf); xt.debugLog = false; const Ye = { animationTime: 0, land: null, lava: null, x: T.volcanoLocationX, y: T.volcanoLocationY }; function Nf() { let e = false; (function (t) { if (/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(t) || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(t.substr(0, 4))) { e = true; } })(navigator.userAgent || navigator.vendor || window.opera); return e; } const Ma = Nf(); let bn = false; let Ds = false; function ro() { if (!(!cr || Ds)) { Ds = true; if (Hf || nr) { if ($i) { hs("alt:" + $i); } } else if ($i) { hs("alt:" + $i); } else { hs(); } } } let Os = false; function hs(e) { xt.start(In, function (t, i, n) { let r = "wss://" + t; if (xn) { r = "wss://localhost:3000"; } if (e) { r += "?token=" + encodeURIComponent(e); } me.connect(r, function (o) { if (Os) { Os = false; return; } el(); if (o) { gs(o); } else { bn = true; Pn(); } }, { A: jf, B: gs, C: _d, D: ap, E: lp, a: fp, G: Vd, H: jd, I: rp, J: sp, K: Wd, L: ep, M: tp, N: hp, O: up, P: Bd, Q: Ld, R: Hd, S: cp, T: Ya, U: Ga, V: La, X: ip, Y: np, Z: mp, g: cd, 1: fd, 2: ld, 3: hd, 4: ud, 5: xd, 6: Md, 7: yd, 8: zd, 9: md, 0: pp }); }, function (t) { console.error("Vultr error:", t); alert(`Error: ` + t); gs("disconnected"); }, xn); } function sr() { return me.connected; } function Uf() { const t = prompt("party key", In); if (t) { window.onbeforeunload = undefined; window.location.href = "/?server=" + t; } } const Wf = new Th(T); const Ea = Math.PI; const Rt = Ea * 2; Math.lerpAngle = function (e, t, i) { if (Math.abs(t - e) > Ea) { if (e > t) { t += Rt; } else { e += Rt; } } const s = t + (e - t) * i; if (s >= 0 && s <= Rt) { return s; } else { return s % Rt; } }; CanvasRenderingContext2D.prototype.roundRect = function (e, t, i, n, s) { if (i < s * 2) { s = i / 2; } if (n < s * 2) { s = n / 2; } if (s < 0) { s = 0; } this.beginPath(); this.moveTo(e + s, t); this.arcTo(e + i, t, e + i, t + n, s); this.arcTo(e + i, t + n, e, t + n, s); this.arcTo(e, t + n, e, t, s); this.arcTo(e, t, e + i, t, s); this.closePath(); return this; }; let rr; if (typeof Storage !== "undefined") { rr = true; } function _n(e, t) { if (rr) { localStorage.setItem(e, t); } } function Bi(e) { if (rr) { return localStorage.getItem(e); } else { return null; } } let Sn = Bi("moofoll"); function Xf() { if (!Sn) { Sn = true; _n("moofoll", 1); } } let Ca; let Et; let jt = 1; let Fe; let hi; let us; let oo = Date.now(); var ut; let Ke; const Oe = []; const oe = []; let tt = []; const Dt = []; const ui = []; const Pa = new Ch(Zh, ui, oe, Oe, $e, L, T, A); const ao = new Ph(Oe, $h, oe, L, null, T, A); let P; let $a; let k; let qt = 1; let fs = 0; let Ra = 0; let Aa = 0; let ot; let at; let lo; let or = 0; const ge = T.maxScreenWidth; const ye = T.maxScreenHeight; let ei; let ti; let qi = false; document.getElementById("ad-container"); const zn = document.getElementById("mainMenu"); const Hi = document.getElementById("enterGame"); const ds = document.getElementById("promoImg"); document.getElementById("partyButton"); const ps = document.getElementById("joinPartyButton"); const _s = document.getElementById("settingsButton"); const co = _s.getElementsByTagName("span")[0]; const ho = document.getElementById("allianceButton"); const uo = document.getElementById("storeButton"); const fo = document.getElementById("chatButton"); const ri = document.getElementById("gameCanvas"); const C = ri.getContext("2d"); var qf = document.getElementById("serverBrowser"); const zs = document.getElementById("nativeResolution"); const ms = document.getElementById("showPing"); document.getElementById("playMusic"); const Gi = document.getElementById("pingDisplay"); const po = document.getElementById("shutdownDisplay"); const Yi = document.getElementById("menuCardHolder"); const Li = document.getElementById("guideCard"); const fi = document.getElementById("loadingText"); const ar = document.getElementById("gameUI"); const mo = document.getElementById("actionBar"); const Gf = document.getElementById("scoreDisplay"); const Yf = document.getElementById("foodDisplay"); const Kf = document.getElementById("woodDisplay"); const Zf = document.getElementById("stoneDisplay"); const Jf = document.getElementById("killCounter"); const go = document.getElementById("leaderboardData"); const Ki = document.getElementById("nameInput"); const vt = document.getElementById("itemInfoHolder"); const yo = document.getElementById("ageText"); const wo = document.getElementById("ageBarBody"); const Gt = document.getElementById("upgradeHolder"); const tn = document.getElementById("upgradeCounter"); const We = document.getElementById("allianceMenu"); const nn = document.getElementById("allianceHolder"); const sn = document.getElementById("allianceManager"); const De = document.getElementById("mapDisplay"); const Fi = document.getElementById("diedText"); const Qf = document.getElementById("skinColorHolder"); const Te = De.getContext("2d"); De.width = 300; De.height = 300; const bt = document.getElementById("storeMenu"); const vo = document.getElementById("storeHolder"); const Yt = document.getElementById("noticationDisplay"); const Vi = Zo.hats; const Ni = Zo.accessories; var $e = new Eh(Rh, Dt, A, T); const Zi = "#525252"; const ko = "#3d3f42"; const St = 5.5; T.DAY_INTERVAL / 24; T.DAY_INTERVAL / 2; function jf(e) { tt = e.teams; } let lr = true; var cr = false; if (!nr || xn) { cr = true; } window.onblur = function () { lr = false; }; window.onfocus = function () { lr = true; if (P && P.alive) { gr(); } }; window.captchaCallbackHook = function () { cr = true; }; if (window.captchaCallbackComplete) { window.captchaCallbackHook(); } window.addEventListener("keydown", function (e) { if (e.keyCode == 32 && e.target == document.body) { e.preventDefault(); } }); ri.oncontextmenu = function () { return false; }; ["touch-controls-left", "touch-controls-right", "touch-controls-fullscreen", "storeMenu"].forEach(e => { if (document.getElementById(e)) { document.getElementById(e).oncontextmenu = function (t) { t.preventDefault(); }; } }); function gs(e) { bn = false; me.close(); hr(e); } function hr(e, t) { zn.style.display = "block"; ar.style.display = "none"; Yi.style.display = "none"; Fi.style.display = "none"; fi.style.display = "block"; fi.innerHTML = e + (t ? "<a href='javascript:window.location.href=window.location.href' class='ytLink'>reload</a>" : ""); } function ed() { Gi.hidden = true; fi.style.display = "none"; zn.style.display = "block"; Yi.style.display = "block"; bd(); id(); Fd(); fi.style.display = "none"; Yi.style.display = "block"; let e = Bi("moo_name") || ""; if (!e.length && FRVR.profile) { e = FRVR.profile.name(); if (e) { e += Math.floor(Math.random() * 90) + 9; } } Ki.value = e || ""; } function td(e) { var t; if (((t = e == null ? undefined : e.detail) == null ? undefined : t.state) === "verified") { $i = e.detail.payload, document.getElementById("altcha").remove(), document.getElementById("enterGame").innerText = "Enter Game";; Hi.classList.remove("disabled"); } } window.addEventListener("load", () => { document.getElementById("altcha_checkbox").click(); document.getElementById("enterGame").innerText = "Auto Verify Shit"; const e = document.getElementById("altcha"); if (!(e == null)) { e.addEventListener("statechange", td); } }); let rn = false; function id() { Hi.onclick = A.checkTrusted(function () { if (!Hi.classList.contains("disabled")) { hr("Connecting..."); if (sr()) { if (rn) { FRVR.ads.show("interstitial").catch(console.error).finally(Pn); } else { Pn(); rn = true; } } else if (rn) { FRVR.ads.show("interstitial").catch(console.error).finally(ro); } else { ro(); rn = true; } } }); A.hookTouchEvents(Hi); if (ds) { ds.onclick = A.checkTrusted(function () { il("https://krunker.io/?play=SquidGame_KB"); }); A.hookTouchEvents(ds); } if (ps) { ps.onclick = A.checkTrusted(function () { // TOLOOK setTimeout(function () { Uf(); }, 10); }); A.hookTouchEvents(ps); } _s.onclick = A.checkTrusted(function () { Id(); }); A.hookTouchEvents(_s); ho.onclick = A.checkTrusted(function () { dd(); }); A.hookTouchEvents(ho); uo.onclick = A.checkTrusted(function () { kd(); }); A.hookTouchEvents(uo); fo.onclick = A.checkTrusted(function () { Va(); }); A.hookTouchEvents(fo); De.onclick = A.checkTrusted(function () { Xa(); }); A.hookTouchEvents(De); } let In; const nd = { view: () => { if (!xt.servers) { return; } let e = 0; const t = Object.keys(xt.servers).map(i => { const n = xt.regionInfo[i].name; let s = 0; const r = xt.servers[i].map(o => { var u; s += o.playerCount; const l = o.selected; let c = n + " " + o.name + " [" + Math.min(o.playerCount, o.playerCapacity) + "/" + o.playerCapacity + "]"; const a = o.name; const f = l ? "selected" : ""; if (o.ping && ((u = o.pings) == null ? undefined : u.length) >= 2) { c += ` [${Math.floor(o.ping)}ms]`; } else if (!l) { c += " [?]"; } let d = { value: i + ":" + a }; if (f) { In = i + ":" + a; d.selected = true; } return kt("option", d, c); }); e += s; return [kt("option[disabled]", `${n} - ${s} players`), r, kt("option[disabled]")]; }); return kt("select", { value: In, onfocus: () => { window.blockRedraw = true; }, onblur: () => { window.blockRedraw = false; }, onchange: od }, [t, kt("option[disabled]", `All Servers - ${e} players`)]); } }; kt.mount(qf, nd); var Bs; var Hs; if (location.hostname == "sandbox.moomoo.io") { Bs = "Back to MooMoo"; Hs = "//moomoo.io/"; } else { Bs = "Try the sandbox"; Hs = "//sandbox.moomoo.io/"; } document.getElementById("altServer").innerHTML = "<a href='" + Hs + "'>" + Bs + "<i class='material-icons' style='font-size:10px;vertical-align:middle'>arrow_forward_ios</i></a>"; const sd = `${dn}/servers?v=1.26`; const Da = async () => fetch(sd).then(e => e.json()).then(async e => xt.processServers(e)).catch(e => { console.error("Failed to load server data with status code:", e); }); const rd = () => Da().then(ed).catch(e => { console.error("Failed to load."); }); window.frvrSdkInitPromise.then(() => window.FRVR.bootstrapper.complete()).then(() => rd()); const od = e => { window.blockRedraw = false; if (FRVR.channelCharacteristics.allowNavigation) { const [t, i] = e.target.value.split(":"); xt.switchServer(t, i); } else if (bn) { bn = false; Ds = false; Os = true; $n = true; me.close(); } }; document.getElementById("pre-content-container"); function ad() { FRVR.ads.show("interstitial", Pn); } window.showPreAd = ad; function Ue(e, t, i) { if (P && e) { A.removeAllChildren(vt); vt.classList.add("visible"); A.generateElement({ id: "itemInfoName", text: A.capitalizeFirst(e.name), parent: vt }); A.generateElement({ id: "itemInfoDesc", text: e.desc, parent: vt }); if (!i) { if (t) { A.generateElement({ class: "itemInfoReq", text: e.type ? "secondary" : "primary", parent: vt }); } else { for (let s = 0; s < e.req.length; s += 2) { A.generateElement({ class: "itemInfoReq", html: e.req[s] + "<span class='itemInfoReqVal'> x" + e.req[s + 1] + "</span>", parent: vt }); } const n = Ta ? e.group.sandboxLimit || Math.max(e.group.limit * 3, 99) : e.group.limit; if (e.group.limit) { A.generateElement({ class: "itemInfoLmt", text: (P.itemCounts[e.group.id] || 0) + "/" + n, parent: vt }); } } } } else { vt.classList.remove("visible"); } } let di = []; let ii = []; function ld(e, t) { di.push({ sid: e, name: t }); ur(); } function ur() { if (di[0]) { const e = di[0]; A.removeAllChildren(Yt); Yt.style.display = "block"; A.generateElement({ class: "notificationText", text: e.name, parent: Yt }); A.generateElement({ class: "notifButton", html: "<i class='material-icons' style='font-size:28px;color:#cc5151;'></i>", parent: Yt, onclick: function () { Fs(0); }, hookTouch: true }); A.generateElement({ class: "notifButton", html: "<i class='material-icons' style='font-size:28px;color:#8ecc51;'></i>", parent: Yt, onclick: function () { Fs(1); }, hookTouch: true }); } else { Yt.style.display = "none"; } } function cd(e) { tt.push(e); if (We.style.display == "block") { Qi(); } } function hd(e, t) { if (P) { P.team = e; P.isOwner = t; if (We.style.display == "block") { Qi(); } } } function ud(e) { ii = e; if (We.style.display == "block") { Qi(); } } function fd(e) { for (let t = tt.length - 1; t >= 0; t--) { if (tt[t].sid == e) { tt.splice(t, 1); } } if (We.style.display == "block") { Qi(); } } function dd() { gr(); if (We.style.display != "block") { Qi(); } else { Ls(); } } function Ls() { if (We.style.display == "block") { We.style.display = "none"; } } function Qi() { if (P && P.alive) { Bn(); bt.style.display = "none"; We.style.display = "block"; A.removeAllChildren(nn); if (P.team) { for (var e = 0; e < ii.length; e += 2) { (function (t) { const i = A.generateElement({ class: "allianceItem", style: "color:" + (ii[t] == P.sid ? "#fff" : "rgba(255,255,255,0.6)"), text: ii[t + 1], parent: nn }); if (P.isOwner && ii[t] != P.sid) { A.generateElement({ class: "joinAlBtn", text: "Kick", onclick: function () { Oa(ii[t]); }, hookTouch: true, parent: i }); } })(e); } } else if (tt.length) { for (var e = 0; e < tt.length; ++e) { (function (i) { const n = A.generateElement({ class: "allianceItem", style: "color:" + (tt[i].sid == P.team ? "#fff" : "rgba(255,255,255,0.6)"), text: tt[i].sid, parent: nn }); A.generateElement({ class: "joinAlBtn", text: "Join", onclick: function () { _a(i); }, hookTouch: true, parent: n }); })(e); } } else { A.generateElement({ class: "allianceItem", text: "No Tribes Yet", parent: nn }); } A.removeAllChildren(sn); if (P.team) { A.generateElement({ class: "allianceButtonM", style: "width: 360px", text: P.isOwner ? "Delete Tribe" : "Leave Tribe", onclick: function () { za(); }, hookTouch: true, parent: sn }); } else { A.generateElement({ tag: "input", type: "text", id: "allianceInput", maxLength: 7, placeholder: "unique name", onchange: t => { t.target.value = (t.target.value || "").slice(0, 7); }, onkeypress: t => { if (t.key === "Enter") { t.preventDefault(); Vs(); return false; } }, parent: sn }); A.generateElement({ tag: "div", class: "allianceButtonM", style: "width: 140px;", text: "Create", onclick: function () { Vs(); }, hookTouch: true, parent: sn }); } } } function Fs(e) { me.send("P", di[0].sid, e); di.splice(0, 1); ur(); } function Oa(e) { me.send("Q", e); } function _a(e) { me.send("b", tt[e].sid); } function Vs() { me.send("L", document.getElementById("allianceInput").value); } function za() { di = []; ur(); me.send("N"); } let mn; let Ri; let At; const oi = []; let Pt; function pd() { this.init = function (e, t) { this.scale = 0; this.x = e; this.y = t; this.active = true; }; this.update = function (e, t) { if (this.active) { this.scale += t * 0.05; if (this.scale >= T.mapPingScale) { this.active = false; } else { e.globalAlpha = 1 - Math.max(0, this.scale / T.mapPingScale); e.beginPath(); e.arc(this.x / T.mapScale * De.width, this.y / T.mapScale * De.width, this.scale, 0, Math.PI * 2); e.stroke(); } } }; } function md(e, t) { for (let i = 0; i < oi.length; ++i) { if (!oi[i].active) { Pt = oi[i]; break; } } if (!Pt) { Pt = new pd(); oi.push(Pt); } Pt.init(e, t); } function gd() { if (!At) { At = {}; } At.x = P.x; At.y = P.y; } function yd(e) { Ri = e; } function wd(e) { if (P && P.alive) { Te.clearRect(0, 0, De.width, De.height); Te.strokeStyle = "#fff"; Te.lineWidth = 4; for (var t = 0; t < oi.length; ++t) { Pt = oi[t]; Pt.update(Te, e); } Te.globalAlpha = 1; Te.fillStyle = "#fff"; he(P.x / T.mapScale * De.width, P.y / T.mapScale * De.height, 7, Te, true); Te.fillStyle = "rgba(255,255,255,0.35)"; if (P.team && Ri) { for (var t = 0; t < Ri.length;) { he(Ri[t] / T.mapScale * De.width, Ri[t + 1] / T.mapScale * De.height, 7, Te, true); t += 2; } } if (mn) { Te.fillStyle = "#fc5553"; Te.font = "34px Hammersmith One"; Te.textBaseline = "middle"; Te.textAlign = "center"; Te.fillText("x", mn.x / T.mapScale * De.width, mn.y / T.mapScale * De.height); } if (At) { Te.fillStyle = "#fff"; Te.font = "34px Hammersmith One"; Te.textBaseline = "middle"; Te.textAlign = "center"; Te.fillText("x", At.x / T.mapScale * De.width, At.y / T.mapScale * De.height); } } } let Ns = 0; function vd(e) { if (Ns != e) { Ns = e; fr(); } } function kd() { if (bt.style.display != "block") { bt.style.display = "block"; We.style.display = "none"; Bn(); fr(); } else { Us(); } } function Us() { if (bt.style.display == "block") { bt.style.display = "none"; Ue(); } } function xd(e, t, i) { if (i) { if (e) { P.tailIndex = t; } else { P.tails[t] = 1; } } else if (e) { P.skinIndex = t; } else { P.skins[t] = 1; } if (bt.style.display == "block") { fr(); } } function fr() { if (P) { A.removeAllChildren(vo); const e = Ns; const t = e ? Ni : Vi; for (let i = 0; i < t.length; ++i) { if (!t[i].dontSell) { (function (n) { const s = A.generateElement({ id: "storeDisplay" + n, class: "storeItem", onmouseout: function () { Ue(); }, onmouseover: function () { Ue(t[n], false, true); }, parent: vo }); A.hookTouchEvents(s, true); A.generateElement({ tag: "img", class: "hatPreview", src: "./img/" + (e ? "accessories/access_" : "hats/hat_") + t[n].id + (t[n].topSprite ? "_p" : "") + ".png", parent: s }); A.generateElement({ tag: "span", text: t[n].name, parent: s }); if (e ? !P.tails[t[n].id] : !P.skins[t[n].id]) { A.generateElement({ class: "joinAlBtn", style: "margin-top: 5px", text: "Buy", onclick: function () { Ba(t[n].id, e); }, hookTouch: true, parent: s }); A.generateElement({ tag: "span", class: "itemPrice", text: t[n].price, parent: s }); } else if ((e ? P.tailIndex : P.skinIndex) == t[n].id) { A.generateElement({ class: "joinAlBtn", style: "margin-top: 5px", text: "Unequip", onclick: function () { Ws(0, e); }, hookTouch: true, parent: s }); } else { A.generateElement({ class: "joinAlBtn", style: "margin-top: 5px", text: "Equip", onclick: function () { Ws(t[n].id, e); }, hookTouch: true, parent: s }); } })(i); } } } } function Ws(e, t) { me.send("c", 0, e, t); } function Ba(e, t) { me.send("c", 1, e, t); } function Ha() { bt.style.display = "none"; We.style.display = "none"; Bn(); } function bd() { const e = Bi("native_resolution"); ys(e ? e == "true" : typeof cordova !== "undefined"); Et = Bi("show_ping") == "true"; Gi.hidden = !Et || !qi; Bi("moo_moosic"); // TOLOOK setInterval(function () { if (window.cordova) { document.getElementById("downloadButtonContainer").classList.add("cordova"); document.getElementById("mobileDownloadButtonContainer").classList.add("cordova"); } }, 1000); Fa(); A.removeAllChildren(mo); for (var t = 0; t < L.weapons.length + L.list.length; ++t) { (function (i) { A.generateElement({ id: "actionBarItem" + i, class: "actionBarItem", style: "display:none", onmouseout: function () { Ue(); }, parent: mo }); })(t); } for (var t = 0; t < L.list.length + L.weapons.length; ++t) { (function (n) { const s = document.createElement("canvas"); s.width = s.height = 66; const r = s.getContext("2d"); r.translate(s.width / 2, s.height / 2); r.imageSmoothingEnabled = false; r.webkitImageSmoothingEnabled = false; r.mozImageSmoothingEnabled = false; if (L.weapons[n]) { r.rotate(Math.PI / 4 + Math.PI); var o = new Image(); Gs[L.weapons[n].src] = o; o.onload = function () { this.isLoaded = true; const c = 1 / (this.height / this.width); const a = L.weapons[n].iPad || 1; r.drawImage(this, -(s.width * a * T.iconPad * c) / 2, -(s.height * a * T.iconPad) / 2, s.width * a * c * T.iconPad, s.height * a * T.iconPad); r.fillStyle = "rgba(0, 0, 70, 0.1)"; r.globalCompositeOperation = "source-atop"; r.fillRect(-s.width / 2, -s.height / 2, s.width, s.height); document.getElementById("actionBarItem" + n).style.backgroundImage = "url(" + s.toDataURL() + ")"; }; o.src = "./img/weapons/" + L.weapons[n].src + ".png"; var l = document.getElementById("actionBarItem" + n); l.onmouseover = A.checkTrusted(function () { Ue(L.weapons[n], true); }); l.onclick = A.checkTrusted(function () { Ui(n, true); }); A.hookTouchEvents(l); } else { var o = yr(L.list[n - L.weapons.length], true); const a = Math.min(s.width - T.iconPadding, o.width); r.globalAlpha = 1; r.drawImage(o, -a / 2, -a / 2, a, a); r.fillStyle = "rgba(0, 0, 70, 0.1)"; r.globalCompositeOperation = "source-atop"; r.fillRect(-a / 2, -a / 2, a, a); document.getElementById("actionBarItem" + n).style.backgroundImage = "url(" + s.toDataURL() + ")"; var l = document.getElementById("actionBarItem" + n); l.onmouseover = A.checkTrusted(function () { Ue(L.list[n - L.weapons.length]); }); l.onclick = A.checkTrusted(function () { Ui(n - L.weapons.length); }); A.hookTouchEvents(l); } })(t); } Ki.onchange = i => { i.target.value = (i.target.value || "").slice(0, 15); }; Ki.onkeypress = i => { if (i.key === "Enter") { i.preventDefault(); Hi.onclick(i); return false; } }; zs.checked = Ca; zs.onchange = A.checkTrusted(function (i) { ys(i.target.checked); }); ms.checked = Et; ms.onchange = A.checkTrusted(function (i) { Et = ms.checked; Gi.hidden = !Et; _n("show_ping", Et ? "true" : "false"); }); } function La(e, t) { if (e) { if (t) { P.weapons = e; } else { P.items = e; } } for (var i = 0; i < L.list.length; ++i) { const n = L.weapons.length + i; document.getElementById("actionBarItem" + n).style.display = P.items.indexOf(L.list[i].id) >= 0 ? "inline-block" : "none"; } for (var i = 0; i < L.weapons.length; ++i) { document.getElementById("actionBarItem" + i).style.display = P.weapons[L.weapons[i].type] == L.weapons[i].id ? "inline-block" : "none"; } } function ys(e) { Ca = e; jt = e && window.devicePixelRatio || 1; zs.checked = e; _n("native_resolution", e.toString()); dr(); } function Sd() { if (ji) { Li.classList.add("touch"); } else { Li.classList.remove("touch"); } } function Id() { if (Li.classList.contains("showing")) { Li.classList.remove("showing"); co.innerText = "Settings"; } else { Li.classList.add("showing"); co.innerText = "Close"; } } function Fa() { let e = ""; for (let t = 0; t < T.skinColors.length; ++t) { if (t == or) { e += "<div class='skinColorItem activeSkin' style='background-color:" + T.skinColors[t] + "' onclick='selectSkinColor(" + t + ")'></div>"; } else { e += "<div class='skinColorItem' style='background-color:" + T.skinColors[t] + "' onclick='selectSkinColor(" + t + ")'></div>"; } } Qf.innerHTML = e; } function Td(e) { or = e; Fa(); } const Ai = document.getElementById("chatBox"); const Tn = document.getElementById("chatHolder"); function Va() { if (ji) { // TOLOOK setTimeout(function () { const e = prompt("chat message"); if (e) { xo(e); } }, 1); } else if (Tn.style.display == "block") { if (Ai.value) { xo(Ai.value); } Bn(); } else { bt.style.display = "none"; We.style.display = "none"; Tn.style.display = "block"; Ai.focus(); gr(); } Ai.value = ""; } function xo(e) { me.send("6", e.slice(0, 30)); } function Bn() { Ai.value = ""; Tn.style.display = "none"; } function Md(e, t) { const i = Hn(e); if (i) { i.chatMessage = t; i.chatCountdown = T.chatCountdown; } } window.addEventListener("resize", A.checkTrusted(dr)); function dr() { ei = window.innerWidth; ti = window.innerHeight; const e = Math.max(ei / ge, ti / ye) * jt; ri.width = ei * jt; ri.height = ti * jt; ri.style.width = ei + "px"; ri.style.height = ti + "px"; C.setTransform(e, 0, 0, e, (ei * jt - ge * e) / 2, (ti * jt - ye * e) / 2); } dr(); let ji; Ot(false); function Ot(e) { ji = e; Sd(); } window.setUsingTouch = Ot; let Ed = document.getElementById("leaderboardButton"); let Na = document.getElementById("leaderboard"); Ed.addEventListener("touchstart", () => { Na.classList.add("is-showing"); }); const pr = () => { Na.classList.remove("is-showing"); }; document.body.addEventListener("touchend", pr); document.body.addEventListener("touchleave", pr); document.body.addEventListener("touchcancel", pr); if (!Ma) { let t = function (s) { s.preventDefault(); s.stopPropagation(); Ot(false); Ra = s.clientX; Aa = s.clientY; }; let i = function (s) { Ot(false); if (Ke != 1) { Ke = 1; _t(); } }; let n = function (s) { Ot(false); if (Ke != 0) { Ke = 0; _t(); } }; var gp = t; var yp = i; var wp = n; const e = document.getElementById("touch-controls-fullscreen"); e.style.display = "block"; e.addEventListener("mousemove", t, false); e.addEventListener("mousedown", i, false); e.addEventListener("mouseup", n, false); } let Xs = false; let Ua; function Cd() { let e = 0; let t = 0; let i; if (ji) { if (!Xs) { return; } i = Ua; } for (const n in En) { const s = En[n]; e += !!ut[n] * s[0]; t += !!ut[n] * s[1]; } if (e != 0 || t != 0) { i = Math.atan2(t, e); } if (i !== undefined) { return A.fixTo(i, 2); } } let Mn; function mr() { if (P) { if (!P.lockDir && !ji) { Mn = Math.atan2(Aa - ti / 2, Ra - ei / 2); } return A.fixTo(Mn || 0, 2); } else { return 0; } } var ut = {}; var En = { 87: [0, -1], 38: [0, -1], 83: [0, 1], 40: [0, 1], 65: [-1, 0], 37: [-1, 0], 68: [1, 0], 39: [1, 0] }; function gr() { ut = {}; me.send("e"); } function Wa() { return We.style.display != "block" && Tn.style.display != "block"; } function Pd(e) { const t = e.which || e.keyCode || 0; if (t == 27) { Ha(); } else if (P && P.alive && Wa()) { if (!ut[t]) { ut[t] = 1; if (t == 69) { Ad(); } else if (t == 67) { gd(); } else if (t == 88) { Rd(); } else if (P.weapons[t - 49] != null) { Ui(P.weapons[t - 49], true); } else if (P.items[t - 49 - P.weapons.length] != null) { Ui(P.items[t - 49 - P.weapons.length]); } else if (t == 81) { Ui(P.items[0]); } else if (t == 82) { Xa(); } else if (En[t]) { Cn(); } else if (t == 32) { Ke = 1; _t(); } } } } window.addEventListener("keydown", A.checkTrusted(Pd)); function $d(e) { if (P && P.alive) { const t = e.which || e.keyCode || 0; if (t == 13) { if (We.style.display === "block") { return; } Va(); } else if (Wa() && ut[t]) { ut[t] = 0; if (En[t]) { Cn(); } else if (t == 32) { Ke = 0; _t(); } } } } window.addEventListener("keyup", A.checkTrusted($d)); function _t() { if (P && P.alive) { me.send("F", Ke, P.buildIndex >= 0 ? mr() : null); } } let ws1; function Cn() { const e = Cd(); if (ws1 == null || e == null || Math.abs(e - ws1) > 0.3) { me.send("9", e); ws1 = e; } } function Rd() { P.lockDir = P.lockDir ? 0 : 1; me.send("K", 0); } function Xa() { me.send("S", 1); } function Ad() { me.send("K", 1); } function Ui(e, t) { me.send("z", e, t); } function Pn() { Gi.hidden = !Et; window.onbeforeunload = function (e) { return "Are you sure?"; }; if (window.FRVR) { window.FRVR.tracker.levelStart("game_start"); } _n("moo_name", Ki.value); if (!qi && sr()) { qi = true; Wf.stop("menu"); hr("Loading..."); me.send("M", { name: Ki.value, moofoll: Sn, skin: or }); } Dd(); } function Dd() { var e = document.getElementById("ot-sdk-btn-floating"); if (e) { e.style.display = "none"; } } function Od() { var e = document.getElementById("ot-sdk-btn-floating"); if (e) { e.style.display = "block"; } } let $n = true; let vs = false; function _d(e) { fi.style.display = "none"; Yi.style.display = "block"; zn.style.display = "none"; ut = {}; $a = e; Ke = 0; qi = true; if ($n) { $n = false; Dt.length = 0; } if (Ma) { Vu.enable({ onStartMoving: () => { Us(); Ls(); Ot(true); Xs = true; }, onStopMoving: () => { Xs = false; Cn(); }, onRotateMoving: (t, i) => { if (!(i.force < 0.25)) { Ua = -i.angle.radian; Cn(); if (!vs) { Mn = -i.angle.radian; } } }, onStartAttacking: () => { Us(); Ls(); Ot(true); vs = true; if (P.buildIndex < 0) { Ke = 1; _t(); } }, onStopAttacking: () => { if (P.buildIndex >= 0) { Ke = 1; _t(); } Ke = 0; _t(); vs = false; }, onRotateAttacking: (t, i) => { if (!(i.force < 0.25)) { Mn = -i.angle.radian; } } }); } } function zd(e, t, i, n) { if (n === -1) { As.showText(e, t, 50, 0.18, 500, i, "#ee5551"); } else { As.showText(e, t, 50, 0.18, 500, Math.abs(i), i >= 0 ? "#fff" : "#8ecc51"); } } let gn = 99999; function Bd() { qi = false; Od(); try { factorem.refreshAds([2], true); } catch {} ar.style.display = "none"; Ha(); mn = { x: P.x, y: P.y }; fi.style.display = "none"; Fi.style.display = "block"; Fi.style.fontSize = "0px"; gn = 0; // TOLOOK setTimeout(function () { Yi.style.display = "block"; zn.style.display = "block"; Fi.style.display = "none"; }, T.deathFadeout); Da(); } function Hd(e) { if (P) { $e.removeAllItems(e); } } function Ld(e) { $e.disableBySid(e); } function qa() { Gf.innerText = P.points; Yf.innerText = P.food; Kf.innerText = P.wood; Zf.innerText = P.stone; Jf.innerText = P.kills; } const Di = {}; const ks = ["crown", "skull"]; function Fd() { for (let e = 0; e < ks.length; ++e) { const t = new Image(); t.onload = function () { this.isLoaded = true; }; t.src = "./img/icons/" + ks[e] + ".png"; Di[ks[e]] = t; } } const Kt = []; function Ga(e, t) { P.upgradePoints = e; P.upgrAge = t; if (e > 0) { Kt.length = 0; A.removeAllChildren(Gt); for (var i = 0; i < L.weapons.length; ++i) { if (L.weapons[i].age == t && (L.weapons[i].pre == null || P.weapons.indexOf(L.weapons[i].pre) >= 0)) { var n = A.generateElement({ id: "upgradeItem" + i, class: "actionBarItem", onmouseout: function () { Ue(); }, parent: Gt }); n.style.backgroundImage = document.getElementById("actionBarItem" + i).style.backgroundImage; Kt.push(i); } } for (var i = 0; i < L.list.length; ++i) { if (L.list[i].age == t && (L.list[i].pre == null || P.items.indexOf(L.list[i].pre) >= 0)) { const r = L.weapons.length + i; var n = A.generateElement({ id: "upgradeItem" + r, class: "actionBarItem", onmouseout: function () { Ue(); }, parent: Gt }); n.style.backgroundImage = document.getElementById("actionBarItem" + r).style.backgroundImage; Kt.push(r); } } for (var i = 0; i < Kt.length; i++) { (function (r) { const o = document.getElementById("upgradeItem" + r); o.onmouseover = function () { if (L.weapons[r]) { Ue(L.weapons[r], true); } else { Ue(L.list[r - L.weapons.length]); } }; o.onclick = A.checkTrusted(function () { me.send("H", r); }); A.hookTouchEvents(o); })(Kt[i]); } if (Kt.length) { Gt.style.display = "block"; tn.style.display = "block"; tn.innerHTML = "SELECT ITEMS (" + e + ")"; } else { Gt.style.display = "none"; tn.style.display = "none"; Ue(); } } else { Gt.style.display = "none"; tn.style.display = "none"; Ue(); } } function Ya(e, t, i) { if (e != null) { P.XP = e; } if (t != null) { P.maxXP = t; } if (i != null) { P.age = i; } if (i == T.maxAge) { yo.innerHTML = "MAX AGE"; wo.style.width = "100%"; } else { yo.innerHTML = "AGE " + P.age; wo.style.width = P.XP / P.maxXP * 100 + "%"; } } function Vd(e) { A.removeAllChildren(go); let t = 1; for (let i = 0; i < e.length; i += 3) { (function (n) { A.generateElement({ class: "leaderHolder", parent: go, children: [A.generateElement({ class: "leaderboardItem", style: "color:" + (e[n] == $a ? "#fff" : "rgba(255,255,255,0.6)"), text: t + ". " + (e[n + 1] != "" ? e[n + 1] : "unknown") }), A.generateElement({ class: "leaderScore", text: A.kFormat(e[n + 2]) || "0" })] }); })(i); t++; } } let bo = null; function Nd() { { if (P && (!us || hi - us >= 1000 / T.clientSendRate)) { us = hi; const a = mr(); if (bo !== a) { bo = a; me.send("D", a); } } if (gn < 120) { gn += Fe * 0.1; Fi.style.fontSize = Math.min(Math.round(gn), 120) + "px"; } if (P) { const a = A.getDistance(ot, at, P.x, P.y); const f = A.getDirection(P.x, P.y, ot, at); const d = Math.min(a * 0.01 * Fe, a); if (a > 0.05) { ot += d * Math.cos(f); at += d * Math.sin(f); } else { ot = P.x; at = P.y; } } else { ot = T.mapScale / 2; at = T.mapScale / 2; } const o = hi - 1000 / T.serverUpdateRate; for (var e, t = 0; t < oe.length + Oe.length; ++t) { k = oe[t] || Oe[t - oe.length]; if (k && k.visible) { if (k.forcePos) { k.x = k.x2; k.y = k.y2; k.dir = k.d2; } else { const a = k.t2 - k.t1; const d = (o - k.t1) / a; const u = 170; k.dt += Fe; const p = Math.min(1.7, k.dt / u); var e = k.x2 - k.x1; k.x = k.x1 + e * p; e = k.y2 - k.y1; k.y = k.y1 + e * p; k.dir = Math.lerpAngle(k.d2, k.d1, Math.min(1.2, d)); } } } const l = ot - ge / 2; const c = at - ye / 2; if (T.snowBiomeTop - c <= 0 && T.mapScale - T.snowBiomeTop - c >= ye) { C.fillStyle = "#b6db66"; C.fillRect(0, 0, ge, ye); } else if (T.mapScale - T.snowBiomeTop - c <= 0) { C.fillStyle = "#dbc666"; C.fillRect(0, 0, ge, ye); } else if (T.snowBiomeTop - c >= ye) { C.fillStyle = "#fff"; C.fillRect(0, 0, ge, ye); } else if (T.snowBiomeTop - c >= 0) { C.fillStyle = "#fff"; C.fillRect(0, 0, ge, T.snowBiomeTop - c); C.fillStyle = "#b6db66"; C.fillRect(0, T.snowBiomeTop - c, ge, ye - (T.snowBiomeTop - c)); } else { C.fillStyle = "#b6db66"; C.fillRect(0, 0, ge, T.mapScale - T.snowBiomeTop - c); C.fillStyle = "#dbc666"; C.fillRect(0, T.mapScale - T.snowBiomeTop - c, ge, ye - (T.mapScale - T.snowBiomeTop - c)); } if (!$n) { qt += fs * T.waveSpeed * Fe; if (qt >= T.waveMax) { qt = T.waveMax; fs = -1; } else if (qt <= 1) { qt = fs = 1; } C.globalAlpha = 1; C.fillStyle = "#dbc666"; To(l, c, C, T.riverPadding); C.fillStyle = "#91b2db"; To(l, c, C, (qt - 1) * 250); } /*C.lineWidth = 4; C.strokeStyle = "#000"; C.globalAlpha = 0.06; C.beginPath(); for (var i = -ot; i < ge; i += ye / 18) { if (i > 0) { C.moveTo(i, 0); C.lineTo(i, ye); } } for (let a = -at; a < ye; a += ye / 18) { if (i > 0) { C.moveTo(0, a); C.lineTo(ge, a); } } C.stroke(); C.globalAlpha = 1; C.strokeStyle = Zi;*/ Pi(-1, l, c); C.globalAlpha = 1; C.lineWidth = St; So(0, l, c); Mo(l, c, 0); C.globalAlpha = 1; for (var t = 0; t < Oe.length; ++t) { k = Oe[t]; if (k.active && k.visible) { k.animate(Fe); C.save(); C.translate(k.x - l, k.y - c); C.rotate(k.dir + k.dirPlus - Math.PI / 2); op(k, C); C.restore(); } } Pi(0, l, c); So(1, l, c); Pi(1, l, c); Mo(l, c, 1); Pi(2, l, c); Pi(3, l, c); C.fillStyle = "#000"; C.globalAlpha = 0.09; if (l <= 0) { C.fillRect(0, 0, -l, ye); } if (T.mapScale - l <= ge) { var n = Math.max(0, -c); C.fillRect(T.mapScale - l, n, ge - (T.mapScale - l), ye - n); } if (c <= 0) { C.fillRect(-l, 0, ge + l, -c); } if (T.mapScale - c <= ye) { var s = Math.max(0, -l); let a = 0; if (T.mapScale - l <= ge) { a = ge - (T.mapScale - l); } C.fillRect(s, T.mapScale - c, ge - s - a, ye - (T.mapScale - c)); } C.globalAlpha = 1; C.fillStyle = "rgba(0, 0, 70, 0.35)"; C.fillRect(0, 0, ge, ye); C.strokeStyle = ko; for (var t = 0; t < oe.length + Oe.length; ++t) { k = oe[t] || Oe[t - oe.length]; if (k.visible && (k.skinIndex != 10 || k == P || k.team && k.team == P.team)) { const f = (k.team ? "[" + k.team + "] " : "") + (k.name || ""); if (f != "") { C.font = (k.nameScale || 30) + "px Hammersmith One"; C.fillStyle = "#fff"; C.textBaseline = "middle"; C.textAlign = "center"; C.lineWidth = k.nameScale ? 11 : 8; C.lineJoin = "round"; C.strokeText(f, k.x - l, k.y - c - k.scale - T.nameY); C.fillText(f, k.x - l, k.y - c - k.scale - T.nameY); if (k.isLeader && Di.crown.isLoaded) { var r = T.crownIconScale; var s = k.x - l - r / 2 - C.measureText(f).width / 2 - T.crownPad; C.drawImage(Di.crown, s, k.y - c - k.scale - T.nameY - r / 2 - 5, r, r); } if (k.iconIndex == 1 && Di.skull.isLoaded) { var r = T.crownIconScale; var s = k.x - l - r / 2 + C.measureText(f).width / 2 + T.crownPad; C.drawImage(Di.skull, s, k.y - c - k.scale - T.nameY - r / 2 - 5, r, r); } } if (k.health > 0) { T.healthBarWidth; C.fillStyle = ko; C.roundRect(k.x - l - T.healthBarWidth - T.healthBarPad, k.y - c + k.scale + T.nameY, T.healthBarWidth * 2 + T.healthBarPad * 2, 17, 8); C.fill(); C.fillStyle = k == P || k.team && k.team == P.team ? "#8ecc51" : "#cc5151"; C.roundRect(k.x - l - T.healthBarWidth, k.y - c + k.scale + T.nameY + T.healthBarPad, T.healthBarWidth * 2 * (k.health / k.maxHealth), 17 - T.healthBarPad * 2, 7); C.fill(); } } } As.update(Fe, C, l, c); for (var t = 0; t < oe.length; ++t) { k = oe[t]; if (k.visible && k.chatCountdown > 0) { k.chatCountdown -= Fe; if (k.chatCountdown <= 0) { k.chatCountdown = 0; } C.font = "32px Hammersmith One"; const f = C.measureText(k.chatMessage); C.textBaseline = "middle"; C.textAlign = "center"; var s = k.x - l; var n = k.y - k.scale - c - 90; const p = 47; const w = f.width + 17; C.fillStyle = "rgba(0,0,0,0.2)"; C.roundRect(s - w / 2, n - p / 2, w, p, 6); C.fill(); C.fillStyle = "#fff"; C.fillText(k.chatMessage, s, n); } } } wd(Fe); } function So(e, t, i) { for (let n = 0; n < ui.length; ++n) { k = ui[n]; if (k.active && k.layer == e) { k.update(Fe); if (k.active && Za(k.x - t, k.y - i, k.scale)) { C.save(); C.translate(k.x - t, k.y - i); C.rotate(k.dir); qs(0, 0, k, C); C.restore(); } } } } const Io = {}; function qs(e, t, i, n, s) { if (i.src) { const r = L.projectiles[i.indx].src; let o = Io[r]; if (!o) { o = new Image(); o.onload = function () { this.isLoaded = true; }; o.src = "./img/weapons/" + r + ".png"; Io[r] = o; } if (o.isLoaded) { n.drawImage(o, e - i.scale / 2, t - i.scale / 2, i.scale, i.scale); } } else if (i.indx == 1) { n.fillStyle = "#939393"; he(e, t, i.scale, n); } } function Ud() { const e = ot - ge / 2; const t = at - ye / 2; Ye.animationTime += Fe; Ye.animationTime %= T.volcanoAnimationDuration; const i = T.volcanoAnimationDuration / 2; const n = 1.7 + Math.abs(i - Ye.animationTime) / i * 0.3; const s = T.innerVolcanoScale * n; C.drawImage(Ye.land, Ye.x - T.volcanoScale - e, Ye.y - T.volcanoScale - t, T.volcanoScale * 2, T.volcanoScale * 2); C.drawImage(Ye.lava, Ye.x - s - e, Ye.y - s - t, s * 2, s * 2); } function To(e, t, i, n) { const s = T.riverWidth + n; const r = T.mapScale / 2 - t - s / 2; if (r < ye && r + s > 0) { i.fillRect(0, r, ge, s); } } function Pi(e, t, i) { let n; let s; let r; for (let o = 0; o < Dt.length; ++o) { k = Dt[o]; if (k.active) { s = k.x + k.xWiggle - t; r = k.y + k.yWiggle - i; if (e == 0) { k.update(Fe); } if (k.layer == e && Za(s, r, k.scale + (k.blocker || 0))) { C.globalAlpha = k.hideFromEnemy ? 0.6 : 1; if (k.isItem) { n = yr(k); C.save(); C.translate(s, r); C.rotate(k.dir); C.drawImage(n, -(n.width / 2), -(n.height / 2)); if (k.blocker) { C.strokeStyle = "#db6e6e"; C.globalAlpha = 0.3; C.lineWidth = 6; he(0, 0, k.blocker, C, false, true); } C.restore(); } else if (k.type === 4) { Ud(); } else { n = Gd(k); C.drawImage(n, s - n.width / 2, r - n.height / 2); } } } } } function Wd(e, t, i) { k = Hn(e); if (k) { k.startAnim(t, i); } } function Mo(e, t, i) { C.globalAlpha = 1; for (let n = 0; n < oe.length; ++n) { k = oe[n]; if (k.zIndex == i) { k.animate(Fe); if (k.visible) { k.skinRot += Fe * 0.002; lo = (k == P ? mr() : k.dir) + k.dirPlus; C.save(); C.translate(k.x - e, k.y - t); C.rotate(lo); Xd(k, C); C.restore(); } } } } function Xd(e, t) { t = t || C; t.lineWidth = St; t.lineJoin = "miter"; const i = Math.PI / 4 * (L.weapons[e.weaponIndex].armS || 1); const n = e.buildIndex < 0 && L.weapons[e.weaponIndex].hndS || 1; const s = e.buildIndex < 0 && L.weapons[e.weaponIndex].hndD || 1; if (e.tailIndex > 0) { qd(e.tailIndex, t, e); } if (e.buildIndex < 0 && !L.weapons[e.weaponIndex].aboveHand) { Ro(L.weapons[e.weaponIndex], T.weaponVariants[e.weaponVariant].src, e.scale, 0, t); if (L.weapons[e.weaponIndex].projectile != null && !L.weapons[e.weaponIndex].hideProjectile) { qs(e.scale, 0, L.projectiles[L.weapons[e.weaponIndex].projectile], C); } } t.fillStyle = T.skinColors[e.skinColor]; he(e.scale * Math.cos(i), e.scale * Math.sin(i), 14); he(e.scale * s * Math.cos(-i * n), e.scale * s * Math.sin(-i * n), 14); if (e.buildIndex < 0 && L.weapons[e.weaponIndex].aboveHand) { Ro(L.weapons[e.weaponIndex], T.weaponVariants[e.weaponVariant].src, e.scale, 0, t); if (L.weapons[e.weaponIndex].projectile != null && !L.weapons[e.weaponIndex].hideProjectile) { qs(e.scale, 0, L.projectiles[L.weapons[e.weaponIndex].projectile], C); } } if (e.buildIndex >= 0) { const r = yr(L.list[e.buildIndex]); t.drawImage(r, e.scale - L.list[e.buildIndex].holdOffset, -r.width / 2); } he(0, 0, e.scale, t); if (e.skinIndex > 0) { t.rotate(Math.PI / 2); Ka(e.skinIndex, t, null, e); } } const Eo = {}; const Co = {}; let et; function Ka(e, t, i, n) { et = Eo[e]; if (!et) { const r = new Image(); r.onload = function () { this.isLoaded = true; this.onload = null; }; r.src = "./img/hats/hat_" + e + ".png"; Eo[e] = r; et = r; } let s = i || Co[e]; if (!s) { for (let r = 0; r < Vi.length; ++r) { if (Vi[r].id == e) { s = Vi[r]; break; } } Co[e] = s; } if (et.isLoaded) { t.drawImage(et, -s.scale / 2, -s.scale / 2, s.scale, s.scale); } if (!i && s.topSprite) { t.save(); t.rotate(n.skinRot); Ka(e + "_top", t, s, n); t.restore(); } } const Po = {}; const $o = {}; function qd(e, t, i) { et = Po[e]; if (!et) { const s = new Image(); s.onload = function () { this.isLoaded = true; this.onload = null; }; s.src = "./img/accessories/access_" + e + ".png"; Po[e] = s; et = s; } let n = $o[e]; if (!n) { for (let s = 0; s < Ni.length; ++s) { if (Ni[s].id == e) { n = Ni[s]; break; } } $o[e] = n; } if (et.isLoaded) { t.save(); t.translate(-20 - (n.xOff || 0), 0); if (n.spin) { t.rotate(i.skinRot); } t.drawImage(et, -(n.scale / 2), -(n.scale / 2), n.scale, n.scale); t.restore(); } } var Gs = {}; function Ro(e, t, i, n, s) { const r = e.src + (t || ""); let o = Gs[r]; if (!o) { o = new Image(); o.onload = function () { this.isLoaded = true; }; o.src = "./img/weapons/" + r + ".png"; Gs[r] = o; } if (o.isLoaded) { s.drawImage(o, i + e.xOff - e.length / 2, n + e.yOff - e.width / 2, e.length, e.width); } } const Ao = {}; function Gd(e) { const t = e.y >= T.mapScale - T.snowBiomeTop ? 2 : e.y <= T.snowBiomeTop ? 1 : 0; const i = e.type + "_" + e.scale + "_" + t; let n = Ao[i]; if (!n) { const r = document.createElement("canvas"); r.width = r.height = e.scale * 2.1 + St; const o = r.getContext("2d"); o.translate(r.width / 2, r.height / 2); o.rotate(A.randFloat(0, Math.PI)); o.strokeStyle = Zi; o.lineWidth = St; if (e.type == 0) { let l; for (var s = 0; s < 2; ++s) { l = k.scale * (s ? 0.5 : 1); qe(o, k.sid % 2 === 0 ? 5 : 7, l, l * 0.7); o.fillStyle = t ? s ? "#fff" : "#e3f1f4" : s ? "#b4db62" : "#9ebf57"; o.fill(); if (!s) { o.stroke(); } } } else if (e.type == 1) { if (t == 2) { o.fillStyle = "#606060"; qe(o, 6, e.scale * 0.3, e.scale * 0.71); o.fill(); o.stroke(); o.fillStyle = "#89a54c"; he(0, 0, e.scale * 0.55, o); o.fillStyle = "#a5c65b"; he(0, 0, e.scale * 0.3, o, true); } else { Zd(o, 6, k.scale, k.scale * 0.7); o.fillStyle = t ? "#e3f1f4" : "#89a54c"; o.fill(); o.stroke(); o.fillStyle = t ? "#6a64af" : "#c15555"; let l; const c = 4; const a = Rt / c; for (var s = 0; s < c; ++s) { l = A.randInt(k.scale / 3.5, k.scale / 2.3); he(l * Math.cos(a * s), l * Math.sin(a * s), A.randInt(10, 12), o); } } } else if (e.type == 2 || e.type == 3) { o.fillStyle = e.type == 2 ? t == 2 ? "#938d77" : "#939393" : "#e0c655"; qe(o, 3, e.scale, e.scale); o.fill(); o.stroke(); o.fillStyle = e.type == 2 ? t == 2 ? "#b2ab90" : "#bcbcbc" : "#ebdca3"; qe(o, 3, e.scale * 0.55, e.scale * 0.65); o.fill(); } n = r; Ao[i] = n; } return n; } function Do(e, t, i) { const n = e.lineWidth || 0; i /= 2; e.beginPath(); let s = Math.PI * 2 / t; for (let r = 0; r < t; r++) { e.lineTo(i + (i - n / 2) * Math.cos(s * r), i + (i - n / 2) * Math.sin(s * r)); } e.closePath(); } function Yd() { const t = T.volcanoScale * 2; const i = document.createElement("canvas"); i.width = t; i.height = t; const n = i.getContext("2d"); n.strokeStyle = "#3e3e3e"; n.lineWidth = St * 2; n.fillStyle = "#7f7f7f"; Do(n, 10, t); n.fill(); n.stroke(); Ye.land = i; const s = document.createElement("canvas"); const r = T.innerVolcanoScale * 2; s.width = r; s.height = r; const o = s.getContext("2d"); o.strokeStyle = Zi; o.lineWidth = St * 1.6; o.fillStyle = "#f54e16"; o.strokeStyle = "#f56f16"; Do(o, 10, r); o.fill(); o.stroke(); Ye.lava = s; } Yd(); const Oo = []; function yr(e, t) { let i = Oo[e.id]; if (!i || t) { const c = document.createElement("canvas"); c.width = c.height = e.scale * 2.5 + St + (L.list[e.id].spritePadding || 0); const a = c.getContext("2d"); a.translate(c.width / 2, c.height / 2); a.rotate(t ? 0 : Math.PI / 2); a.strokeStyle = Zi; a.lineWidth = St * (t ? c.width / 81 : 1); if (e.name == "apple") { a.fillStyle = "#c15555"; he(0, 0, e.scale, a); a.fillStyle = "#89a54c"; const f = -(Math.PI / 2); Kd(e.scale * Math.cos(f), e.scale * Math.sin(f), 25, f + Math.PI / 2, a); } else if (e.name == "cookie") { a.fillStyle = "#cca861"; he(0, 0, e.scale, a); a.fillStyle = "#937c4b"; for (var n = 4, s = Rt / n, r, o = 0; o < n; ++o) { r = A.randInt(e.scale / 2.5, e.scale / 1.7); he(r * Math.cos(s * o), r * Math.sin(s * o), A.randInt(4, 5), a, true); } } else if (e.name == "cheese") { a.fillStyle = "#f4f3ac"; he(0, 0, e.scale, a); a.fillStyle = "#c3c28b"; for (var n = 4, s = Rt / n, r, o = 0; o < n; ++o) { r = A.randInt(e.scale / 2.5, e.scale / 1.7); he(r * Math.cos(s * o), r * Math.sin(s * o), A.randInt(4, 5), a, true); } } else if (e.name == "wood wall" || e.name == "stone wall" || e.name == "castle wall") { a.fillStyle = e.name == "castle wall" ? "#83898e" : e.name == "wood wall" ? "#a5974c" : "#939393"; const f = e.name == "castle wall" ? 4 : 3; qe(a, f, e.scale * 1.1, e.scale * 1.1); a.fill(); a.stroke(); a.fillStyle = e.name == "castle wall" ? "#9da4aa" : e.name == "wood wall" ? "#c9b758" : "#bcbcbc"; qe(a, f, e.scale * 0.65, e.scale * 0.65); a.fill(); } else if (e.name == "spikes" || e.name == "greater spikes" || e.name == "poison spikes" || e.name == "spinning spikes") { a.fillStyle = e.name == "poison spikes" ? "#7b935d" : "#939393"; var l = e.scale * 0.6; qe(a, e.name == "spikes" ? 5 : 6, e.scale, l); a.fill(); a.stroke(); a.fillStyle = "#a5974c"; he(0, 0, l, a); a.fillStyle = "#c9b758"; he(0, 0, l / 2, a, true); } else if (e.name == "windmill" || e.name == "faster windmill" || e.name == "power mill") { a.fillStyle = "#a5974c"; he(0, 0, e.scale, a); a.fillStyle = "#c9b758"; xs(0, 0, e.scale * 1.5, 29, 4, a); a.fillStyle = "#a5974c"; he(0, 0, e.scale * 0.5, a); } else if (e.name == "mine") { a.fillStyle = "#939393"; qe(a, 3, e.scale, e.scale); a.fill(); a.stroke(); a.fillStyle = "#bcbcbc"; qe(a, 3, e.scale * 0.55, e.scale * 0.65); a.fill(); } else if (e.name == "sapling") { for (var o = 0; o < 2; ++o) { var l = e.scale * (o ? 0.5 : 1); qe(a, 7, l, l * 0.7); a.fillStyle = o ? "#b4db62" : "#9ebf57"; a.fill(); if (!o) { a.stroke(); } } } else if (e.name == "pit trap") { a.fillStyle = "#a5974c"; qe(a, 3, e.scale * 1.1, e.scale * 1.1); a.fill(); a.stroke(); a.fillStyle = Zi; qe(a, 3, e.scale * 0.65, e.scale * 0.65); a.fill(); } else if (e.name == "boost pad") { a.fillStyle = "#7e7f82"; ni(0, 0, e.scale * 2, e.scale * 2, a); a.fill(); a.stroke(); a.fillStyle = "#dbd97d"; Jd(e.scale * 1, a); } else if (e.name == "turret") { a.fillStyle = "#a5974c"; he(0, 0, e.scale, a); a.fill(); a.stroke(); a.fillStyle = "#939393"; const f = 50; ni(0, -f / 2, e.scale * 0.9, f, a); he(0, 0, e.scale * 0.6, a); a.fill(); a.stroke(); } else if (e.name == "platform") { a.fillStyle = "#cebd5f"; const f = 4; const d = e.scale * 2; const u = d / f; let p = -(e.scale / 2); for (var o = 0; o < f; ++o) { ni(p - u / 2, 0, u, e.scale * 2, a); a.fill(); a.stroke(); p += d / f; } } else if (e.name == "healing pad") { a.fillStyle = "#7e7f82"; ni(0, 0, e.scale * 2, e.scale * 2, a); a.fill(); a.stroke(); a.fillStyle = "#db6e6e"; xs(0, 0, e.scale * 0.65, 20, 4, a, true); } else if (e.name == "spawn pad") { a.fillStyle = "#7e7f82"; ni(0, 0, e.scale * 2, e.scale * 2, a); a.fill(); a.stroke(); a.fillStyle = "#71aad6"; he(0, 0, e.scale * 0.6, a); } else if (e.name == "blocker") { a.fillStyle = "#7e7f82"; he(0, 0, e.scale, a); a.fill(); a.stroke(); a.rotate(Math.PI / 4); a.fillStyle = "#db6e6e"; xs(0, 0, e.scale * 0.65, 20, 4, a, true); } else if (e.name == "teleporter") { a.fillStyle = "#7e7f82"; he(0, 0, e.scale, a); a.fill(); a.stroke(); a.rotate(Math.PI / 4); a.fillStyle = "#d76edb"; he(0, 0, e.scale * 0.5, a, true); } i = c; if (!t) { Oo[e.id] = i; } } return i; } function Kd(e, t, i, n, s) { const r = e + i * Math.cos(n); const o = t + i * Math.sin(n); const l = i * 0.4; s.moveTo(e, t); s.beginPath(); s.quadraticCurveTo((e + r) / 2 + l * Math.cos(n + Math.PI / 2), (t + o) / 2 + l * Math.sin(n + Math.PI / 2), r, o); s.quadraticCurveTo((e + r) / 2 - l * Math.cos(n + Math.PI / 2), (t + o) / 2 - l * Math.sin(n + Math.PI / 2), e, t); s.closePath(); s.fill(); s.stroke(); } function he(e, t, i, n, s, r) { n = n || C; n.beginPath(); n.arc(e, t, i, 0, Math.PI * 2); if (!r) { n.fill(); } if (!s) { n.stroke(); } } function qe(e, t, i, n) { let s = Math.PI / 2 * 3; let r; let o; const l = Math.PI / t; e.beginPath(); e.moveTo(0, -i); for (let c = 0; c < t; c++) { r = Math.cos(s) * i; o = Math.sin(s) * i; e.lineTo(r, o); s += l; r = Math.cos(s) * n; o = Math.sin(s) * n; e.lineTo(r, o); s += l; } e.lineTo(0, -i); e.closePath(); } function ni(e, t, i, n, s, r) { s.fillRect(e - i / 2, t - n / 2, i, n); if (!r) { s.strokeRect(e - i / 2, t - n / 2, i, n); } } function xs(e, t, i, n, s, r, o) { r.save(); r.translate(e, t); s = Math.ceil(s / 2); for (let l = 0; l < s; l++) { ni(0, 0, i * 2, n, r, o); r.rotate(Math.PI / s); } r.restore(); } function Zd(e, t, i, n) { let s = Math.PI / 2 * 3; const r = Math.PI / t; let o; e.beginPath(); e.moveTo(0, -n); for (let l = 0; l < t; l++) { o = A.randInt(i + 0.9, i * 1.2); e.quadraticCurveTo(Math.cos(s + r) * o, Math.sin(s + r) * o, Math.cos(s + r * 2) * n, Math.sin(s + r * 2) * n); s += r * 2; } e.lineTo(0, -n); e.closePath(); } function Jd(e, t) { t = t || C; const i = e * (Math.sqrt(3) / 2); t.beginPath(); t.moveTo(0, -i / 2); t.lineTo(-e / 2, i / 2); t.lineTo(e / 2, i / 2); t.lineTo(0, -i / 2); t.fill(); t.closePath(); } function Qd() { const e = T.mapScale / 2; $e.add(0, e, e + 200, 0, T.treeScales[3], 0); $e.add(1, e, e - 480, 0, T.treeScales[3], 0); $e.add(2, e + 300, e + 450, 0, T.treeScales[3], 0); $e.add(3, e - 950, e - 130, 0, T.treeScales[2], 0); $e.add(4, e - 750, e - 400, 0, T.treeScales[3], 0); $e.add(5, e - 700, e + 400, 0, T.treeScales[2], 0); $e.add(6, e + 800, e - 200, 0, T.treeScales[3], 0); $e.add(7, e - 260, e + 340, 0, T.bushScales[3], 1); $e.add(8, e + 760, e + 310, 0, T.bushScales[3], 1); $e.add(9, e - 800, e + 100, 0, T.bushScales[3], 1); $e.add(10, e - 800, e + 300, 0, L.list[4].scale, L.list[4].id, L.list[10]); $e.add(11, e + 650, e - 390, 0, L.list[4].scale, L.list[4].id, L.list[10]); $e.add(12, e - 400, e - 450, 0, T.rockScales[2], 2); } function jd(e) { for (let t = 0; t < e.length;) { $e.add(e[t], e[t + 1], e[t + 2], e[t + 3], e[t + 4], e[t + 5], L.list[e[t + 6]], true, e[t + 7] >= 0 ? { sid: e[t + 7] } : null); t += 8; } } function ep(e, t) { k = Qa(t); if (k) { k.xWiggle += T.gatherWiggle * Math.cos(e); k.yWiggle += T.gatherWiggle * Math.sin(e); } } function tp(e, t) { k = Qa(e); if (k) { k.dir = t; k.xWiggle += T.gatherWiggle * Math.cos(t + Math.PI); k.yWiggle += T.gatherWiggle * Math.sin(t + Math.PI); } } function ip(e, t, i, n, s, r, o, l) { if (lr) { Pa.addProjectile(e, t, i, n, s, r, null, null, o).sid = l; } } function np(e, t) { for (let i = 0; i < ui.length; ++i) { if (ui[i].sid == e) { ui[i].range = t; } } } function sp(e) { k = Ja(e); if (k) { k.startAnim(); } } function rp(e) { for (var t = 0; t < Oe.length; ++t) { Oe[t].forcePos = !Oe[t].visible; Oe[t].visible = false; } if (e) { const i = Date.now(); for (var t = 0; t < e.length;) { k = Ja(e[t]); if (k) { k.index = e[t + 1]; k.t1 = k.t2 === undefined ? i : k.t2; k.t2 = i; k.x1 = k.x; k.y1 = k.y; k.x2 = e[t + 2]; k.y2 = e[t + 3]; k.d1 = k.d2 === undefined ? e[t + 4] : k.d2; k.d2 = e[t + 4]; k.health = e[t + 5]; k.dt = 0; k.visible = true; } else { k = ao.spawn(e[t + 2], e[t + 3], e[t + 4], e[t + 1]); k.x2 = k.x; k.y2 = k.y; k.d2 = k.dir; k.health = e[t + 5]; if (!ao.aiTypes[e[t + 1]].name) { k.name = T.cowNames[e[t + 6]]; } k.forcePos = true; k.sid = e[t]; k.visible = true; } t += 7; } } } const _o = {}; function op(e, t) { const i = e.index; let n = _o[i]; if (!n) { const s = new Image(); s.onload = function () { this.isLoaded = true; this.onload = null; }; s.src = "./img/animals/" + e.src + ".png"; n = s; _o[i] = n; } if (n.isLoaded) { const s = e.scale * 1.2 * (e.spriteMlt || 1); t.drawImage(n, -s, -s, s * 2, s * 2); } } function Za(e, t, i) { return e + i >= 0 && e - i <= ge && t + i >= 0 && t - i <= ye; } function ap(e, t) { let i = dp(e[0]); if (!i) { i = new Gh(e[0], e[1], T, A, Pa, $e, oe, Oe, L, Vi, Ni); oe.push(i); } i.spawn(t ? Sn : null); i.visible = false; i.x2 = undefined; i.y2 = undefined; i.setData(e); if (t) { P = i; ot = P.x; at = P.y; La(); qa(); Ya(); Ga(0); ar.style.display = "block"; } } function lp(e) { for (let t = 0; t < oe.length; t++) { if (oe[t].id == e) { oe.splice(t, 1); break; } } } function cp(e, t) { if (P) { P.itemCounts[e] = t; } } function hp(e, t, i) { if (P) { P[e] = t; if (i) { qa(); } } } function up(e, t) { k = Hn(e); if (k) { k.health = t; } } function fp(e) { const t = Date.now(); for (var i = 0; i < oe.length; ++i) { oe[i].forcePos = !oe[i].visible; oe[i].visible = false; } for (var i = 0; i < e.length;) { k = Hn(e[i]); if (k) { k.t1 = k.t2 === undefined ? t : k.t2; k.t2 = t; k.x1 = k.x; k.y1 = k.y; k.x2 = e[i + 1]; k.y2 = e[i + 2]; k.d1 = k.d2 === undefined ? e[i + 3] : k.d2; k.d2 = e[i + 3]; k.dt = 0; k.buildIndex = e[i + 4]; k.weaponIndex = e[i + 5]; k.weaponVariant = e[i + 6]; k.team = e[i + 7]; k.isLeader = e[i + 8]; k.skinIndex = e[i + 9]; k.tailIndex = e[i + 10]; k.iconIndex = e[i + 11]; k.zIndex = e[i + 12]; k.visible = true; } i += 13; } } function dp(e) { for (let t = 0; t < oe.length; ++t) { if (oe[t].id == e) { return oe[t]; } } return null; } function Hn(e) { for (let t = 0; t < oe.length; ++t) { if (oe[t].sid == e) { return oe[t]; } } return null; } function Ja(e) { for (let t = 0; t < Oe.length; ++t) { if (Oe[t].sid == e) { return Oe[t]; } } return null; } function Qa(e) { for (let t = 0; t < Dt.length; ++t) { if (Dt[t].sid == e) { return Dt[t]; } } return null; } let ja = -1; function pp() { const e = Date.now() - ja; window.pingTime = e; Gi.innerText = "Ping: " + e + " ms"; } let bs; function el() { if (bs) { clearTimeout(bs); } if (sr()) { ja = Date.now(); me.send("0"); } bs = // TOLOOK setTimeout(el, 2500); } function mp(e) { if (e < 0) { return; } const t = Math.floor(e / 60); let i = e % 60; i = ("0" + i).slice(-2); po.innerText = "Server restarting in " + t + ":" + i; po.hidden = false; } window.requestAnimFrame = function () { return window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || function (e) { window.setTimeout(e, 1000 / 60); }; }(); function tl() { hi = Date.now(); Fe = hi - oo; oo = hi; Nd(); requestAnimFrame(tl); } Qd(); tl(); function il(e) { window.open(e, "_blank"); } window.openLink = il; window.aJoinReq = Fs; window.follmoo = Xf; window.kickFromClan = Oa; window.sendJoin = _a; window.leaveAlliance = za; window.createAlliance = Vs; window.storeBuy = Ba; window.storeEquip = Ws; window.showItemInfo = Ue; window.selectSkinColor = Td; window.changeStoreIndex = vd; window.config = T;
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址