您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Restores the mouse from TankTrouble Classic back into TankTrouble Online
// ==UserScript== // @name Classic Mouse // @author commander // @description Restores the mouse from TankTrouble Classic back into TankTrouble Online // @namespace https://github.com/asger-finding/tanktrouble-userscripts // @version 0.0.1 // @license GPL-3.0 // @match https://tanktrouble.com/* // @match https://beta.tanktrouble.com/* // @exclude *://classic.tanktrouble.com/ // @run-at document-end // @grant none // @noframes // ==/UserScript== /* eslint-disable new-cap */ /* eslint-disable complexity */ UIConstants.CLASSIC_MOUSE_INPUT = { ROTATION_DEAD_ANGLE: 0.1, POSITION_DEAD_DISTANCE: 180 }; MouseInputManager.method('update', function() { this._super(); const game = GameManager.getGame(); if (game) { let forwardState = false; const backState = false; const leftState = []; const rightState = []; let fireState = false; const gameBounds = game.scale.bounds; const gameScale = game.scale.scaleFactor; this.mouseX = (MouseInputManager.mousePageX - gameBounds.x) * gameScale.x; this.mouseY = (MouseInputManager.mousePageY - gameBounds.y) * gameScale.y; if (game.input.enabled && MouseInputManager.mouseActivated) { if (game.state.getCurrentState().getTankSprite) { const tankSprite = game.state.getCurrentState().getTankSprite(this.playerId); if (tankSprite) { const relativeToTank = tankSprite.toLocal(new Phaser.Point(this.mouseX, this.mouseY)); const angle = Phaser.Math.angleBetween(0, 0, relativeToTank.x, relativeToTank.y); const distance = Math.abs((angle / Math.PI) + 0.5); const rotationSpeedMultiplier = distance > 0.1 ? Math.max(Math.min(distance * 12, 4), 1) : 1; leftState.push(angle + (Math.PI * 0.5) < -UIConstants.CLASSIC_MOUSE_INPUT.ROTATION_DEAD_ANGLE, rotationSpeedMultiplier); rightState.push(angle + (Math.PI * 0.5) > UIConstants.CLASSIC_MOUSE_INPUT.ROTATION_DEAD_ANGLE, rotationSpeedMultiplier); forwardState = relativeToTank.getMagnitude() > UIConstants.CLASSIC_MOUSE_INPUT.POSITION_DEAD_DISTANCE / UIConstants.GAME_ASSET_SCALE; fireState ||= KeyboardInputManager.leftMouseDown || game.input.mousePointer.leftButton.isDown; } } } let stateChanged = false; stateChanged ||= this.storedStates.forward !== forwardState; stateChanged ||= this.storedStates.fire !== fireState; stateChanged ||= !leftState.every((el, i) => this.storedStates.left[i] === el); stateChanged ||= !rightState.every((el, i) => this.storedStates.right[i] === el); const gameController = GameManager.getGameController(); if (stateChanged && gameController) { const inputState = InputState.withState(this.playerId, forwardState, backState, leftState, rightState, fireState); gameController.setInputState(inputState); } this.storedStates.forward = forwardState; this.storedStates.back = backState; this.storedStates.left = leftState; this.storedStates.right = rightState; this.storedStates.fire = fireState; } }); Tank.method('setTankState', function(tankState) { this.playerId = tankState.getPlayerId(); this.x = tankState.getX(); this.y = tankState.getY(); this.forward = tankState.getForward(); this.back = tankState.getBack(); this.rotation = tankState.getRotation(); this.fireDown = tankState.getFireDown(); this.locked = tankState.getLocked(); const left = tankState.getLeft(); const right = tankState.getRight(); [this.left, this.rotationSpeedMultiplier] = Array.isArray(left) ? left : [left, 1.0]; [this.right, this.rotationSpeedMultiplier] = Array.isArray(right) ? right : [right, 1.0]; if (this.b2dbody) { this.b2dbody.SetPosition(Box2D.Common.Math.b2Vec2.Make(this.x, this.y)); this.b2dbody.SetAngle(this.rotation); this.update(); } }); Tank.method('update', function() { this.x = this.b2dbody.GetPosition().x; this.y = this.b2dbody.GetPosition().y; this.rotation = this.b2dbody.GetAngle(); if (this.locked) { this.b2dbody.SetLinearVelocity(Box2D.Common.Math.b2Vec2.Make(0.0, 0.0)); this.b2dbody.SetAngularVelocity(0.0); } else { this._computeSpeed(); this._computeRotationSpeed(); const speedX = Math.sin(this.rotation) * this.speed; const speedY = -Math.cos(this.rotation) * this.speed; this.b2dbody.SetLinearVelocity(Box2D.Common.Math.b2Vec2.Make(speedX, speedY)); this.b2dbody.SetAngularVelocity(this.rotationSpeed * (this.rotationSpeedMultiplier || 1)); } });
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址