사용자:さいおんたく/common.js

리버티게임, 모두가 만들어가는 자유로운 게임

참고: 설정을 저장한 후에 바뀐 점을 확인하기 위해서는 브라우저의 캐시를 새로 고쳐야 합니다.

  • 파이어폭스 / 사파리: Shift 키를 누르면서 새로 고침을 클릭하거나, Ctrl-F5 또는 Ctrl-R을 입력 (Mac에서는 ⌘-R)
  • 구글 크롬: Ctrl-Shift-R키를 입력 (Mac에서는 ⌘-Shift-R)
  • 인터넷 익스플로러 / 엣지: Ctrl 키를 누르면서 새로 고침을 클릭하거나, Ctrl-F5를 입력.
  • 오페라: Ctrl-F5를 입력.
/** 플러그인 autosave***************************
* 자동저장 시스템을 위한 플러그인
* 버전 => 2.0.2
* 작성자 : [[사용자:Manymaster|Manymaster]] 
* JSON => autosave = {"name":"autosave","descript":"자동저장 시스템을 위한 플러그인","version":"2.0.2","local":false,"creat":"Manymaster","state":"틀:자동저장/플러그인","executable":true}; 
*/ 
function plugin_autosave(){
		 
/* 작동 가능한 네임스페이스 */
var safeNameSpace = [""];
/* autosave 편집모드가 아닐 경우 플러그인 종료 */
var searchParams = geturlSearch(location);
var isEditMode = searchParams.action === "edit";
var isAutosaveMode = searchParams.autosave === "1";
if (!(isEditMode && isAutosaveMode)) return "";

/* 자동 저장하기에 안전한 네임스페이스가 아닌 경우 플러그인 종료 */
var thisNamespaceNumber = mw.config.get("wgNamespaceNumber");
var nameSpaceIds = mw.config.get("wgNamespaceIds");
var isSafeNameSpace = safeNameSpace
    .map(function (namespace) { return nameSpaceIds[namespace]; })
    .some(function (nsNumber) { return nsNumber == thisNamespaceNumber; });
if (!(isSafeNameSpace)) return "";

/* 자동 인증된 사용자가 아닌 경우 플러그인 종료 */
var userGroups = mw.config.get('wgUserGroups');
var autocheck = 0;
if (userGroups) {
    for (var i = 0; i < userGroups.length; i++) {
        if (userGroups[i] === 'autoconfirmed') {
            autocheck++;
        }
    }
}
if (autocheck != 1) return "";

/* 지정된 단락에서 불러오기 */
var savetempDom = $(".game-autosave");
if ($(".game-autosave").length === 0)
    throw new Error("autosave => game-autosave를 클래스명으로 가진 돔을 찾을 수 없습니다.");
var savetemp = $(".game-autosave").html();

/* 문제가 되는 문자열 치환 */
savetemp = savetemp.replace(/(<([^>]+)>)/ig, "");
savetemp = savetemp.replace(/\n+/gi, "\n");
savetemp = savetemp.replace("\n", "");
savetemp = savetemp.replace(/&lt;/gi, "<");
savetemp = savetemp.replace(/&gt;/gi, ">");

/* 기록, 저장하고 빠져나오기 */
$("#wpTextbox1").val(savetemp);
$("#wpSave").click();
return;

/** 이 플러그인 제작을 도와주신 분들
 * Ver 2 제작자: [[사용자:BANIP|BANIP]]
 * 원 코드 작성자: [[사용자:*devunt]]
*/ 

		
}
$( plugin_autosave );
/* autosave 끝 */


/** 플러그인 real369***************************
* real369 플레이
* 버전 => 1.1.7
* 작성자 : [[사용자:BANIP|BANIP]] 
* JSON => real369 = {"name":"real369","descript":"real369 플레이","version":"1.1.7","local":true,"creat":"BANIP","state":"Real 369/플러그인","executable":true}; 
*/ 
function plugin_real369(){
  if($("[data-name='real369']").length >= 1){
		 /**
 * 지금 박수를 쳐야되는지 숫자를 외쳐야 하는지 알아 냅니다
 * @param {number} number 지금 순서가 몇번째인지 넣는 칸.
 * @return {number|Array[number]} 박수를 쳐야되는 상황이면 배열 안에 숫자를 담아 반환하고 아니면 파라미터를 반환.
 */
function getAnswer(number) {
    var rawNumber = number + "";
    var targetNumber = rawNumber.replace(/3|6|9/g, "");
    var diff = rawNumber.length - targetNumber.length;
    if (diff === 0)
        return number + "";
    else
        return "짝!".repeat(diff);
}
function isMobile() {
    return !(navigator.userAgent.match(/Android|iPhone|iPad|iPod/i) === null);
}
var GUI = /** @class */ (function () {
    function GUI() {
        this.domList = {
            retry: document.querySelector("#gamewrap .gamelink .retry"),
            answer: document.querySelector("#gamewrap .answer"),
            dialog: document.querySelector("#gamewrap .dialog"),
            progress: document.querySelector("#gamewrap .progress"),
            gamelink: document.querySelector("#gamewrap .gamelink")
        };
        this.bindOtherEvent();
        //this.start();
    }
    GUI.prototype.start = function () {
        this.domList.answer.innerHTML = "시작!";
        this.domList.dialog.innerHTML = "";
        this.domList.gamelink.style.display = "none";
        createGame(gui);
        input.setGame(game);
    };
    GUI.prototype.bindOtherEvent = function () {
        var _this = this;
        this.domList.retry.addEventListener("click", function () {
            if (game !== null)
                game.gameOver();
            _this.start();
        });
    };
    GUI.prototype.message = function (message) {
        var dialogNode = this.domList.dialog;
        var messageNode = document.createElement("li");
        messageNode.innerHTML = message;
        dialogNode.appendChild(messageNode);
        dialogNode.scrollTop = dialogNode.scrollHeight;
    };
    GUI.prototype.initOrder = function (userCount, startUser) {
        var orderStringCount = 8;
        var orderString = new Array(orderStringCount).fill("1")
            .map(function (v, i) { return (startUser + i) % userCount === 0 ? username : "COM" + (startUser + i) % userCount; })
            .join(" => ");
        this.message("게임이 시작되었습니다!!!");
        this.message("게임순서 : " + orderString + "...");
    };
    GUI.prototype.getProgressColor = function (progress) {
        var interval = [30, 60, 100];
        var color = ["green", "yellow", "red"];
        var index = interval.indexOf(interval.filter(function (v) { return v > progress; })[0]);
        return color[index];
    };
    GUI.prototype.resetTime = function (duration) {
        var _this = this;
        clearInterval(this.timerInterval);
        var startTime = Date.now();
        this.timerInterval = setInterval(function () {
            var now = Date.now();
            var progress = (now - startTime) / duration * 100 - 1;
            var progressColor = _this.getProgressColor(progress);
            _this.domList.progress.style.background = "linear-gradient(to right," + progressColor + " " + (100 - progress) + "%,white " + (100 - progress + 0.1) + "%)";
        }, 10);
    };
    GUI.prototype.setEnemyTurn = function (order) {
        this.nextUser = "COM" + order;
    };
    GUI.prototype.setMyTurn = function () {
        this.nextUser = username;
    };
    GUI.prototype.gameOver = function (reason, lastCount) {
        this.domList.answer.innerHTML = reason;
        this.message("게임이 끝났습니다!!");
        this.message("최종 카운트: " + lastCount);
        input.setGame(null);
        this.domList.gamelink.style.display = "block";
        clearInterval(this.timerInterval);
    };
    GUI.prototype.setNumber = function (number) {
        this.domList.answer.innerHTML = number;
    };
    GUI.prototype.sayNumber = function (number, name) {
        if (name === void 0) { name = this.nextUser; }
        this.message(name + " : " + number);
    };
    GUI.prototype.setHandClab = function (clab) {
        this.domList.answer.innerHTML = clab;
    };
    return GUI;
}());
var Game = /** @class */ (function () {
    function Game(gui, playerCount, time) {
        if (playerCount === void 0) { playerCount = 3; }
        if (time === void 0) { time = 1000; }
        this.gui = gui;
        this.playerCount = playerCount;
        this.time = time;
        this.order = Math.floor(Math.random() * playerCount);
        this.number = 1;
        gui.initOrder(playerCount, this.order);
        this.turnStart();
    }
    Game.prototype.next = function () {
        var prevNumber = getAnswer(Number(this.number));
        this.gui.sayNumber(prevNumber);
        this.order = (this.order + 1) % this.playerCount;
        this.handClab = "";
        this.number++;
        this.turnStart();
    };
    Game.prototype.turnStart = function () {
        this.gui.resetTime(this.time);
        if (this.order === 0)
            this.myTurn();
        else
            this.enemyTurn();
    };
    Game.prototype.enemyTurn = function () {
        var _this = this;
        this.gui.setEnemyTurn(this.order);
        this.turnTimeout = setTimeout(function () {
            _this.shortenTime();
            _this.next();
        }, this.time * Math.random());
    };
    Game.prototype.myTurn = function () {
        var _this = this;
        this.gui.setMyTurn();
        this.turnTimeout = setTimeout(function () {
            if (getAnswer(_this.number) === _this.handClab)
                _this.next();
            else
                _this.gameOver("시간 초과!");
        }, this.time);
    };
    Game.prototype.sayNumber = function (answer) {
        clearTimeout(this.turnTimeout);
        var reasonGameOver = null;
        if (this.order > 0)
            reasonGameOver = "내 차례가 아닌데 말해버림!";
        else if (getAnswer(this.number) === answer)
            null;
        else
            reasonGameOver = "오답!";
        if (reasonGameOver === null)
            this.next();
        else {
            gui.sayNumber(answer, username);
            this.gameOver(reasonGameOver);
        }
    };
    Game.prototype.setHandClab = function (clab) {
        this.handClab = clab;
    };
    Game.prototype.gameOver = function (reason) {
        clearTimeout(this.turnTimeout);
        this.gui.gameOver(reason, this.number);
        game = null;
    };
    Game.prototype.shortenTime = function () {
        this.time *= 0.94;
    };
    return Game;
}());
var Input = /** @class */ (function () {
    function Input(game, gui) {
        this.game = game;
        this.gui = gui;
        this.clickEventType = isMobile() ? "touchstart" : "click";
        this.resetNumber();
        this.bindKeyBoardEvent();
        this.bindKeyPadEvent();
    }
    Input.prototype.setGame = function (game) {
        this.game = game;
    };
    Input.prototype.bindKeyBoardEvent = function () {
        var _this = this;
        document.addEventListener("keydown", function (e) {
            var key = e.key;
            if (["Enter", "Space"].some(function (v) { return v === key; }))
                return _this.pressEnter();
            else if (key === "BackSpace")
                _this.number = _this.number.slice(0, -1);
            else if (isNaN(parseInt(key)))
                return;
            else
                _this.number += key;
            _this.gui.setNumber(_this.number);
        });
    };
    Input.prototype.bindKeyPadEvent = function () {
        var _this = this;
        document.querySelectorAll(".keypad .key").forEach(function (node) {
            node.addEventListener(_this.clickEventType, function (e) {
                e.preventDefault();
                _this.number += e.target.dataset.num;
                _this.gui.setNumber(_this.number);
            });
        });
        document.querySelector(".keypad .enter").addEventListener(this.clickEventType, function (e) {
            e.preventDefault();
            _this.pressEnter();
        });
        document.querySelector(".keypad .reset").addEventListener(this.clickEventType, function (e) {
            e.preventDefault();
            _this.resetNumber();
            _this.gui.setNumber(_this.number);
        });
    };
    Input.prototype.pressEnter = function () {
        var _this = this;
        if (game == null || game == undefined)
            this.gui.message("아직 게임이 시작되지 않았어요.");
        clearTimeout(this.enterTimeout);
        if (this.number == "") {
            this.enterCount++;
            var answer_1 = "짝!".repeat(this.enterCount);
            this.gui.setHandClab(answer_1);
            this.game.setHandClab(answer_1);
            this.enterTimeout = setTimeout(function () {
                if (_this.game.order === 0) {
                    _this.game.sayNumber(answer_1);
                }
                _this.resetNumber();
            }, 800);
        }
        else {
            this.game.sayNumber(this.number);
            this.resetNumber();
        }
    };
    ;
    Input.prototype.resetNumber = function () {
        this.number = "";
        this.enterCount = 0;
        this.gui.setNumber(this.number);
    };
    return Input;
}());
var game = null;
var createGame = function (gui) { return game = new Game(gui, 4, 5000); };
var username = mw.config.values.wgUserName;
var gui = new GUI();
//createGame(gui);
var input = new Input(game, gui);

		
  }

}
$( plugin_real369 );
/* real369 끝 */