Right Sided Combat

Moves the weapon/item panel from the left side of the attack screen to the right of the character model.

이 스크립트를 설치하려면 Tampermonkey, Greasemonkey 또는 Violentmonkey와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 Tampermonkey와 같은 확장 프로그램을 설치해야 합니다.

이 스크립트를 설치하려면 Tampermonkey 또는 Violentmonkey와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 Tampermonkey 또는 Userscripts와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 Tampermonkey와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 유저 스크립트 관리자 확장 프로그램이 필요합니다.

(이미 유저 스크립트 관리자가 설치되어 있습니다. 설치를 진행합니다!)

Advertisement:

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

(이미 유저 스타일 관리자가 설치되어 있습니다. 설치를 진행합니다!)

Advertisement:

// ==UserScript==
// @name Right Sided Combat
// @namespace right-sided-combat
// @version 1.0.3
// @author peas [3400805]
// @description Moves the weapon/item panel from the left side of the attack screen to the right of the character model.
// @match https://www.torn.com/page.php?sid=attack*
// @run-at document-end
// @license MIT
// ==/UserScript==


(function () {
    'use strict';

    function isAttackPage() {
        return window.location.href.indexOf('sid=attack') !== -1;
    }

    var repositioned = false;
    var pollTimer    = null;

    function reposition() {
        if (repositioned || !isAttackPage()) return;

        // The fight layout container uses CSS module naming: playerArea___HASH
        // Match on the stable "playerArea" prefix — the hash suffix changes per deploy
        var playerArea = document.querySelector('[class*="playerArea"]');
        if (!playerArea || playerArea.children.length < 2) return;

        // Identify which child is the weapons panel and which is the character/fight panel.
        // The character panel contains "start fight"; the weapons panel doesn't.
        var weaponsPanel = null;
        var fightPanel   = null;

        for (var i = 0; i < playerArea.children.length; i++) {
            var child = playerArea.children[i];
            if (child.textContent.toLowerCase().indexOf('start fight') !== -1) {
                fightPanel = child;
            } else {
                weaponsPanel = child;
            }
        }

        if (!weaponsPanel || !fightPanel) return;

        // Ensure container stays in horizontal flex layout
        playerArea.style.flexDirection = 'row';

        // appendChild moves weaponsPanel to the end → right side of character
        playerArea.appendChild(weaponsPanel);

        repositioned = true;
    }

    function startPolling() {
        if (!isAttackPage()) return;
        repositioned = false;
        clearInterval(pollTimer);

        pollTimer = setInterval(function () {
            if (repositioned) { clearInterval(pollTimer); return; }
            reposition();
        }, 200);

        setTimeout(function () { clearInterval(pollTimer); }, 15000);
    }

    function onNavigate() {
        repositioned = false;
        startPolling();
    }

    startPolling();
    window.addEventListener('hashchange', onNavigate);
    window.addEventListener('popstate',   onNavigate);

    var lastUrl = window.location.href;
    setInterval(function () {
        if (window.location.href !== lastUrl) {
            lastUrl = window.location.href;
            onNavigate();
        }
    }, 500);

})();