사용자:이의섭/common.js

리버티게임, 모두가 만들어가는 자유로운 게임
< 사용자:이의섭
백괴게임>이의섭님의 2018년 7월 21일 (토) 21:08 판 (플러그인 UncyBeat설치)
(차이) ← 이전 판 | 최신판 (차이) | 다음 판 → (차이)

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

  • 파이어폭스 / 사파리: 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 끝 */

/** 플러그인 Cirno***************************
* 실험실
* 버전 => 초회판
* 작성자 : 이의섭
* JSON => Cirno = {"name":"Cirno","descript":"실험실","version":"초회판","local":true,"creat":"이의섭","state":"사용자:이의섭/놀이터","executable":true}; 
*/ 
function plugin_Cirno(){
  if($("[data-name='Cirno']").length >= 1){
		  // 이부분에 코드 입력 //
if(documentTitle === "사용자:이의섭/놀이터"){
    
$(function() {

  var messageSpace = document.getElementById("message");
  var battleSpace = document.getElementById("battle");
  var hpSpace = document.getElementById("hpbar");

  battleSpace.innerHTML = '<canvas id="cvs" width="150" height="150">게임 화면입니다. 만약 이 화면이 정상적으로 출력되지 않는다면 망한 겁니다.</canvas>';

  var canvasBody = document.getElementById("cvs");
  var canvas = canvasBody.getContext("2d");

  var sheet = document.createElement('style');
  sheet.innerHTML = "canvas {border: 10px solid white;}";
  document.body.appendChild(sheet);


  var x, y, size, speed;
  x = 800;
  y = 600;
  size = 10;
  speed = 5;

  function drawHeart() {
    canvas.fillStyle = "red";
    canvas.beginPath();
    canvas.moveTo(x - size, y);
    canvas.lineTo(x - size, y - size/2);
    canvas.lineTo(x - (size / 2), y - size);
    canvas.lineTo(x, y - size/2);
    canvas.lineTo(x + (size / 2), y - size);
    canvas.lineTo(x + size, y - size/2);
    canvas.lineTo(x + size, y);
    canvas.lineTo(x, y + size);
    canvas.lineTo(x - size, y);
    canvas.fill();
    canvas.closePath();
  }
	
  var isKeyDown = [];
  
  function onKeyDown(e){
  	isKeyDown[e.keyCode] = true;
    console.log("Down " + e.keyCode);
  }
  
  function onKeyUp(e){
  	isKeyDown[e.keyCode] = false;
    console.log("Up " + e.keyCode);
  }
  
  function moveHeart(){
  	if(isKeyDown[37]){
    	x  = Math.max(x-speed, 10);
    }
    if(isKeyDown[38]){
    	y  = Math.max(y-speed, 10);
    }
    if(isKeyDown[39]){
    	x  = Math.min(x+speed, 140);
    }
    if(isKeyDown[40]){
    	y  = Math.min(y+speed, 140);
    }
  }
  
  window.addEventListener("keydown",onKeyDown,false);
	window.addEventListener("keyup",onKeyUp,false);
  
  setInterval(moveHeart, 30);
  
  var type_speed = 100;


  var stringToType = text1;
  var i = 0;

  function switchString() {
    if (stringToType === text1) stringToType = text2;
    else if (stringToType === text2) stringToType = text3;
    else if (stringToType === text3) stringToType = text4;
    else if (stringToType === text4) stringToType = text5;
    else if (stringToType === text5) stringToType = text6;
    else if (stringToType === text6) stringToType = text7;
    else if (stringToType === text7) stringToType = text8;
    else if (stringToType === text8) stringToType = text9;
    else if (stringToType === text9){
    	generateBullets();
      return;
    }

    else if (stringToType === text10) stringToType = text11;
    else if (stringToType === text11){
    	generateBullets();
      return;
    }

    else if (stringToType === text12){
    	messageSpace.innerHTML = '<span style="color:yellow">플라위</span>: ' + text13;
    	generateBullets();
      return;
    }

    else if (stringToType === text14) stringToType = text15;
    else if (stringToType === text15) stringToType = text30;

    else if (stringToType === text21) stringToType = text22;
    else if (stringToType === text22) stringToType = text23;
    else if (stringToType === text23) stringToType = text30;

    else{
    	generateUltraBullets();
      return;
    }
  	messageSpace.innerHTML = '<span style="color:yellow">플라위</span>: ';

    typeMessage();
  }
	
  messageSpace.innerHTML = '<span style="color:yellow">플라위</span>: ';
  
  function typeMessage() {
    if (i == stringToType.length) {
      setTimeout(switchString, 1000);
      i=0;
      return;
    } else {
      messageSpace.innerHTML += stringToType[i];
      setTimeout(typeMessage, type_speed);
      i++;
    }
  }
  
  var haveToGenerateBullet = 0;
  var bulletY;
  var hp=20;
  
  function generateBullets(){
  	haveToGenerateBullet = 1;
    bulletY = -10;
    setTimeout(cancelGenerateBullets, 3000);
  }
  
  function cancelGenerateBullets(){
  	haveToGenerateBullet = 0;
  	if(hp == 20){
    	if(stringToType === text9){
      	stringToType = text10;
        i=0;
				messageSpace.innerHTML = '<span style="color:yellow">플라위</span>: ';
        typeMessage();
        return;
      }
    	if(stringToType === text11){
      	stringToType = text12;
        i=0;
				messageSpace.innerHTML = '<span style="color:yellow">플라위</span>: ';
        typeMessage();
        return;
      }
    	if(stringToType === text12){
      	stringToType = text14;
        i=0;
				messageSpace.innerHTML = '<span style="color:yellow">플라위</span>: ';
        typeMessage();
        return;
      }
    }
  }
  
  function drawBullet(){
  	for(i=30; i<=120; i+=30){
    	canvas.beginPath();
    	canvas.arc(i, bulletY, 4, 0, Math.PI*2);
      canvas.fillStyle = "white";
      canvas.fill();
      
      if((i-x)*(i-x)+(bulletY-y)*(bulletY-y)<size*size){
      	console.log("collide");
        stringToType = text21;
        typeSpeed = 300;
        i=0;
				messageSpace.innerHTML = '<span style="color:yellow">플라위</span>: ';
        hp -= 19;
      	cancelGenerateBullets();
        typeMessage();
        return;
			}
      
    }
    bulletY += 1.6;
  }
	
	function changeHPbar(){
  	hpSpace.innerHTML = "LV 1 | HP "+hp+"/20";
  }
	
  var haveToGenerateUltraBullet;
  
  function generateUltraBullets(){
  	haveToGenerateUltraBullet = 1;
    bulletY = -10;
  }
  
  function drawUltraBullet(){
  	for(i=10; i<=140; i+=10){
    	canvas.beginPath();
    	canvas.arc(i, bulletY, 4, 0, Math.PI*2);
      canvas.fillStyle = "white";
      canvas.fill();
      
      if((i-x)*(i-x)+(bulletY-y)*(bulletY-y)<size*size){
      	console.log("collide");
      	haveToGenerateUltraBullet = 0;
        hp = 20;
        messageSpace.innerHTML = '<a href="https://game.uncyclopedia.kr/wiki/Cirno: The Challenge/폐허/입구2/토리엘">계속하기</a>';
        return;
			}
      
    }
    bulletY += 1.6;
  }
  
  function drawCanvas(){
  	canvas.clearRect(0, 0, 150, 150);
  	
  	drawHeart();
    if(haveToGenerateBullet === 1) drawBullet();
    if(haveToGenerateUltraBullet === 1) drawUltraBullet();
  }
  
	setInterval(drawCanvas, 30);
  setInterval(changeHPbar);
  
  typeMessage();
});

}

 // 여기까지 코드 입력 //

		
  }

}
$( plugin_Cirno )


/** 플러그인 inputform***************************
* 완전한 입력기를 구현합니다.
* 버전 => 1.3
* 작성자 : [[사용자:Gustmd7410|Gustmd7410]] 
* JSON => inputform = {"name":"inputform","descript":"완전한 입력기를 구현합니다.","version":"1.3","local":false,"creat":"Gustmd7410","state":"틀:입력 상자/플러그인","executable":true}; 
*/ 
function plugin_inputform(){
		  // 이부분에 코드 입력 //
function parseQuery(param) {
	return JSON.parse('{' + decodeURI(param.replace('?', '').replace(/([-~!*.:/'()%+\w]+)=([-~!*.:/'()%+\w]*)/g, '"$1": "$2"').replace(/&/g, ', ')) + '}');
}

mw.loader.using('oojs-ui-core').done(function() {
	function toBool(value) {
	    switch(value) {
	        case undefined: return false;
	        case '': return true;
	    }
	}
	
	function toArray(value) {
	    if(value) return value.split(' ');
	    else return undefined;
	}
	
	$('.input-form').each(function() {
	    var container = this;
	    $(this).html(new $('<form />', {
	        class: $(container).data('class'),
	        id: $(container).data('id'),
	        style: $(container).data('style'),
	        'accept-charset': 'UTF-8',
	        action: '/w/index.php',
	        method: 'GET',
	        autocomplete: toBool($(container).data('autocomplete')),
	        novalidate: toBool($(container).data('novalidate')),
	        html: $(container).html()
	    })[0].outerHTML);
	    
	    var before = (toBool($(this).data('pass'))) ? parseQuery(location.search) : undefined;
	    var urlget = ($(this).data('get')) ? parseQuery($(this).data('get')) : undefined;
	    var page = new URL('?title=' + $(this).data('title'), $(this).find('form')[0].action);
	    var title = (parseQuery(page.search).title) ? parseQuery(page.search) : undefined;
	    var qdata = $.extend({}, before, urlget, title);
	    if(page.hash) $(this).find('form')[0].action += page.hash.replace(/%/g, '.');
	    for(var key in qdata) {
	    	$(container).find('form').prepend($('<input />', {
	    		type: 'hidden',
	    		name: key,
	    		value: qdata[key]
	    	})[0].outerHTML);
	    }
	});
	
	$('.input-field').each(function() {
	    var container = this;
	    function validate() {
	    	if($(container).data('validatetype') == 'RegExp') {
	    		var value = $(container).data('validate').substr(1).split('/');
	    		return RegExp(value[0], value[1]);
	    	} else return $(container).data('validate');
	    }
	    
        $(this).html(new OO.ui.TextInputWidget({
            accessKey: $(container).data('accessKey'),
            autocomplete: toBool($(container).data('autocomplete')),
            autofocus: toBool($(container).data('autofocus')),
            classes: toArray($(container).data('classes')),
            disabled: toBool($(container).data('disabled')),
            flags: toArray($(container).data('flags')),
            icon: $(container).data('icon'),
            iconTitle: $(container).data('iconTitle'),
            id: $(container).data('id'),
            indicator: $(container).data('indicator'),
            indicatorTitle: $(container).data('indicatorTitle'),
            inputId: $(container).data('inputId'),
            maxLength: Number($(container).data('maxLength')),
            name: $(container).data('name'),
            placeholder: $(container).data('placeholder'),
            readOnly: toBool($(container).data('readOnly')),
            required: toBool($(container).data('required')),
            spellcheck: toBool($(container).data('spellcheck')),
            tabIndex: Number($(container).data('tabIndex')),
            text: $(container).data('text'),
            title: $(container).data('title'),
            type: $(container).data('type'),
            validate: validate(),
            value: $(container).data('value')
        }).$element);
        $(this).find('*').css({
        	display: 'inline',
        	width: 'auto'
        });
	});
	
	$('.input-button').each(function() {
	    var container = this;
        $(container).html(new OO.ui.ButtonInputWidget({
            accessKey: $(container).data('accessKey'),
            classes: toArray($(container).data('classes')),
            disabled: toBool($(container).data('disabled')),
            flags: toArray($(container).data('flags')),
            framed: toBool($(container).data('framed')),
            icon: $(container).data('icon'),
            iconTitle: $(container).data('iconTitle'),
            id: $(container).data('id'),
            indicator: $(container).data('indicator'),
            indicatorTitle: $(container).data('indicatorTitle'),
            inputId: $(container).data('inputId'),
            label: $(container).data('label'),
            name: $(container).data('name'),
            tabIndex: Number($(container).data('tabIndex')),
            text: $(container).data('text'),
            title: $(container).data('title'),
            type: $(container).data('type'),
            value: $(container).data('value')
        }).$element);
        $(this).find('*').css({
        	display: 'inline'
        });
	});
	
	noPlugin('input');
});
 // 여기까지 코드 입력 //

		
}
$( plugin_inputform );
/* inputform 끝 */


/** 플러그인 UncyBeat***************************
* UncyBeat
* 버전 => 0.0.6
* 작성자 : [[사용자:Bd3076|Bd3076]] 
* JSON => UncyBeat = {"name":"UncyBeat","descript":"UncyBeat","version":"0.0.6","local":true,"creat":"Bd3076","state":"UncyBeat/plugin","executable":true}; 
*/ 
function plugin_UncyBeat(){
  if($("[data-name='UncyBeat']").length >= 1){
		  // 이부분에 코드 입력 //



var getParameters = function (paramName) {
    var returnValue;

    var url = location.href;
    
    console.log(url);
    
    if(url[8] == 'f'){
      return 0;
    }

    var parameters = (url.slice(url.indexOf('?') + 1, url.length)).split('&');

    for (var i = 0; i < parameters.length; i++) {
        var varName = parameters[i].split('=')[0];
        if (varName.toUpperCase() == paramName.toUpperCase()) {
            returnValue = parameters[i].split('=')[1];
            return decodeURIComponent(returnValue);
        }
    }
};

var cvs = document.getElementById('spanArea');
cvs.innerHTML = "<canvas width='720' height='720' id='spanCanvas'></canvas>"
var canvas = document.getElementById('spanCanvas');
var ctx = canvas.getContext('2d');

var level = getParameters('level');
const levelCount = 1;

const levelNames = [
  'Dreams'
];

const levelMusicLink = [
  'https://k003.kiwi6.com/hotlink/9f13ktbumx/bensound-dreams.mp3'
];

function clearCanvas(){
  ctx.clearRect(0, 0, 720, 720);
}

function makeGameArea(){
  clearCanvas();
  ctx.strokeStyle = "black";
  ctx.strokeRect(20, 20, 680, 680);
  
  for(var i=0; i<5; i++){
  	for(var j=0; j<5; j++){
    	ctx.strokeRect(40+i*132, 40+j*132, 112, 112);
    }
  }
}

function playGameMusic(){
  console.log(level);
  var audioElement = new Audio(levelMusicLink[level]);
  var audio = audioElement.play();
  audioElement.onended = function(){
  	setTimeout(levelEnd, 3000);
  };
  console.log("can i use this music?");
}

function levelEnd(){
	
}

var x = 2;
var y = 2;
var color = 0;

function showCursor(){
	for(var i=0; i<5; i++){
  	for(var j=0; j<5; j++){
      if(i==x && j==y){
        ctx.strokeStyle = color==0?"red":"blue";
      }
      else{
        ctx.strokeStyle = "black";
      }
    	ctx.strokeRect(40+i*132, 40+j*132, 112, 112);
    }
  }
}

function makeNotes(){
  setInterval(showCursor, 30);
}

function onKeyDown(e){
  var ek = e.keyCode;
  console.log(ek);
  if(37 <= ek && ek <= 40){
  	if(ek == 37){
      if(x!=0) x--;
    }
    else if(ek==38){
      if(y!=0) y--;
    }
    else if(ek==39){
      if(x!=4) x++;
    }
    else if(ek==40){
      if(y!=4) y++;
    }
    console.log(x + "and" + y);
  }
  else if(ek==32){
  	color = !color;
  }
}

window.addEventListener("keydown", onKeyDown, false);
// window.addEventListener("keyup", onKeyUp, false);

function playGame(){
  makeGameArea();
  setTimeout(playGameMusic, 3000);
  makeNotes();
}

playGame();



 // 여기까지 코드 입력 //

		
  }

}
$( plugin_UncyBeat );
/* UncyBeat 끝 */