RPG in City/플러그인스크립트

리버티게임, 모두가 만들어가는 자유로운 게임
< RPG in City
Senouis (토론 | 기여)님의 2023년 7월 22일 (토) 18:34 판 (새 문서: function RPGinCity(){ var usernameStr = mw.user.getName(); var currentpage = mw.config.get("wgPageName"); var pagenode = currentpage.split('/'); console.log("사용자:"+ usernameStr + "/RPG_in_City.json"); if (pagenode[0] !== "RPG_in_City"){ if (currentpage !== "사용자:"+ usernameStr + "/RPG_in_City.json") { console.log("Current page is "+ currentpage +", not playing RPG in City"); return; } } var fullbasepagename = ""; for (var node = 0 ; node < pagenode.l...)
(차이) ← 이전 판 | 최신판 (차이) | 다음 판 → (차이)

function RPGinCity(){ var usernameStr = mw.user.getName(); var currentpage = mw.config.get("wgPageName"); var pagenode = currentpage.split('/'); console.log("사용자:"+ usernameStr + "/RPG_in_City.json"); if (pagenode[0] !== "RPG_in_City"){ if (currentpage !== "사용자:"+ usernameStr + "/RPG_in_City.json") { console.log("Current page is "+ currentpage +", not playing RPG in City"); return; } } var fullbasepagename = ""; for (var node = 0 ; node < pagenode.length - 2; node++){ fullbasepagename = fullbasepagename + pagenode[node] + "/"; } fullbasepagename = fullbasepagename + pagenode[pagenode.length - 2]; console.log(fullbasepagename);

/* function RPGinCity_Title() { var startbuttondiv = document.getElementById("RPGinCityStart"); var loadbuttondiv = document.getElementById("RPGinCityLoad"); if (startbuttondiv !== null && loadbuttondiv !== null){ if (usernameStr === null) {

startbuttondiv.innerHTML = "

로그인이 필요합니다

";

} else { var UserDBTitle = new mw.Title("사용자:"+usernameStr+"/RPG in City.json");

startbuttondiv.innerHTML = "

<a href=\""+mw.util.getUrl(UserDBTitle.toText(),{action: 'edit', preload : '틀:RPG_in_City_DB_양식', summary:'생성'})+ "\">시작하기</a>

"; loadbuttondiv.innerHTML = "

<a href=\""+mw.util.getUrl(UserDBTitle.toText())+ "\">계속하기</a>

";

} } } */

   /*

function RPGinCity_GoToCheckpoint () { var JSONDatalist = document.getElementsByClassName("mw-json-value"); if (currentpage === ("사용자:"+usernameStr+"/RPG_in_City.json") && JSONDatalist.length !== 0) { var MWContent = document.getElementById("mw-content-text"); var GotoLink= document.createElement("a"); GotoLink.href = mw.util.getUrl((JSONDatalist[0].innerText.substring(1, JSONDatalist[0].innerText.length-1))); console.log(GotoLink.href); GotoLink.innerText = "게임 계속하기"; MWContent.appendChild(GotoLink); } } */ function RPGinCity_pushFightInfo(targetUri, Mhp, Ehp, Jam, PJam, BanBomb, Etype, Elevel, Turn) { targetUri.extend({mhp:Mhp}); targetUri.extend({ehp:Ehp}); targetUri.extend({j:Jam}); targetUri.extend({bj:PJam}); targetUri.extend({bb:BanBomb}); targetUri.extend({etype:Etype}); targetUri.extend({elevel:Elevel}); targetUri.extend({turn:Turn}); return targetUri; }

function RPGinCity_HandleBattle(jsonfile) { var Battlelink = new mw.Uri(window.location.href); console.log("building battle phase..."); var queryparams = Battlelink.query; // 이제 필요한 값을 구해 화면에 표시한다. // 플레이어 체력부터... var mhp = 0; var playerhealth = document.getElementById("RPGinCity-playerhealth"); if (isNaN(queryparams.mhp)) { mhp = jsonfile.체력; } else { mhp = queryparams.mhp; // mhp는 이전 문서의 값을 받는다. } playerhealth.innerText = mhp; //적의 레벨 var enemylevel = document.getElementById("RPGinCity-enemylevel"); enemylevel.innerText = queryparams.elevel; // elevel는 항상 undefined이 아니다. //적의 체력 var enemyhealth = document.getElementById("RPGinCity-enemyhealth"); enemyhealth.innerText = queryparams.ehp; // ep는 항상 undefined이 아니다. //공격 페이즈 var nextPhaseUri = new mw.Uri("https://liberty.banipest.com/index.php?title="+currentpage);

       console.log("nextPhaseUri is "+nextPhaseUri);

var attackEnemy = document.getElementById("RPGinCity-attackEnemy"); var attackPower = Math.round(Math.random() * jsonfile.레벨*3) + jsonfile.무기; var attackEnemyUri = RPGinCity_pushFightInfo(nextPhaseUri.clone(), mhp, (queryparams.ehp - attackPower) >= 0?queryparams.ehp - attackPower : 0, queryparams.j, queryparams.bj, queryparams.bb, queryparams.etype, queryparams.elevel, 2);

       console.log(attackEnemyUri.toString());

if (attackEnemy !== undefined && attackEnemy !== null){

           var attackEnemyLink = document.createElement("a");
           attackEnemyLink.href = attackEnemyUri.toString();
           attackEnemyLink.innerHTML="그냥 공격!";
           attackEnemy.appendChild(attackEnemyLink);
       }

var useJam = document.getElementById("RPGinCity-useJam"); var useJamUri = RPGinCity_pushFightInfo(nextPhaseUri.clone(), jsonfile.체력, queryparams.ehp, queryparams.j, queryparams.bj, queryparams.bb, queryparams.etype, queryparams.elevel, 2); if (useJam !== undefined && useJam !== null) {

           var useJamLink = document.createElement("a");
           useJamLink.href = useJamUri.toString();
           useJamLink.innerHTML="잼으로 회복!";
           useJam.appendChild(useJamLink);
       }

var usePJ = document.getElementById("RPGinCity-usePJ"); var usePJUri = RPGinCity_pushFightInfo(nextPhaseUri.clone(), mhp, queryparams.ehp > 20 ? queryparams.ehp - 20 : 0, queryparams.j, queryparams.bj, queryparams.bb, queryparams.etype, queryparams.elevel, 2); if (usePJ !== undefined && usePJ !== null) {

           var usePJLink = document.createElement("a");
           usePJLink.href = usePJUri.toString();
           usePJLink.innerHTML="배쨈 열기!";
           usePJ.appendChild(usePJLink);
       }

var useBanbomb = document.getElementById("RPGinCity-useBanbomb"); var useBanbombUri = RPGinCity_pushFightInfo(nextPhaseUri.clone(), mhp, queryparams.ehp/2, queryparams.j, queryparams.bj, queryparams.bb, queryparams.etype, queryparams.elevel, 2); if (useBanbomb !== undefined && useBanbomb !== null) {

           var useBanbombLink = document.createElement("a");
           useBanbombLink.href = useBanbombUri.toString();
           useBanbombLink.innerHTML="차단폭탄!";
           useBanbomb.appendChild(useBanbombLink);
       }

//방어 페이즈 var Blocking = document.getElementById("RPGinCity-Block"); var BlockingUri = RPGinCity_pushFightInfo(nextPhaseUri.clone(), mhp- Math.round(Math.random() * queryparams.elevel * 0.75), queryparams.ehp , queryparams.j, queryparams.bj, queryparams.bb, queryparams.etype, queryparams.elevel, 1); if (Blocking !== undefined && Blocking !== null) {

           var BlockingLink = document.createElement("a");
           BlockingLink.href = BlockingUri.toString();
           BlockingLink.innerHTML="방어";
           Blocking.appendChild(BlockingLink);
       }

var FailRunning = document.getElementById("RPGinCity-FailRunning"); var FailRunningUri = RPGinCity_pushFightInfo(nextPhaseUri.clone(), mhp - Math.round(Math.random() * queryparams.elevel), queryparams.ehp, queryparams.j, queryparams.bj, queryparams.bb, queryparams.etype, queryparams.elevel, 1);

       console.log(FailRunningUri.toString());

if (FailRunning !== undefined && FailRunning !== null) {

           var FailRunningLink = document.createElement("a");
           FailRunningLink.href = FailRunningUri.toString();
           FailRunningLink.innerHTML="도망치자!";
           FailRunning.appendChild(FailRunningLink);
       }

var RunFromEnemy = document.getElementById("RPGinCity-RunFromEnemy"); var MustKill = document.getElementById("mustKill"); if (RunFromEnemy !== undefined && RunFromEnemy !== null && (MustKill === undefined || MustKill === null))RunFromEnemy.style.visibility = "visible"; }

function RPGinCity_SaveHandle(saveGameHandle) { var api = new mw.Api(); var Templink = new mw.Uri(window.location.href); var queryparams = Templink.query; switch (saveGameHandle.innerText){ case "서브퀘스트완료": new mw.Api().edit("사용자:"+usernameStr+"/RPG_in_City.json", function (revision) { var jsondata = JSON.parse(revision.content); jsondata.추가1 = 0;

                   jsondata.경험치 = jsondata.경험치 + 100;

jsondata.최근페이지 = fullbasepagename; return {text: JSON.stringify(jsondata), summary: "서브퀘스트완료"}; } ).then(function () { alert( 'Saved!' ); document.getElementById("RPGinCity-searchphase").style.display = "block"; }); break; case "서브퀘스트수행": new mw.Api().edit("사용자:"+usernameStr+"/RPG_in_City.json", function (revision) { var jsondata = JSON.parse(revision.content); var questID = document.getElementById("RPGinCity-questID"); if (questID !== undefined && questID !== null){ jsondata.추가1 = parseInt(questID.innerText); jsondata.최근페이지 = fullbasepagename; } return {text: JSON.stringify(jsondata), summary: "서브퀘스트수행"}; } ).then(function () { alert( 'Saved!' ); document.getElementById("RPGinCity-searchphase").style.display = "block"; }); break; case "메인퀘스트수행": new mw.Api().edit("사용자:"+usernameStr+"/RPG_in_City.json", function (revision) { var jsondata = JSON.parse(revision.content); var mainQuestPoint = document.getElementById("mainQuestPoint"); if (mainQuestPoint !== undefined && mainQuestPoint !== null) jsondata.최근페이지 = mainQuestPoint.innerText; var questID = document.getElementById("questID"); if (questID !== undefined && questID !== null)jsondata.추가2 = parseInt(questID.innerText); return {text: JSON.stringify(jsondata), summary: "메인퀘스트수행"}; } ).then(function () { alert( 'Saved!' ); document.getElementById("RPGinCity-searchphase").style.display = "block"; }); break; case "동부요금지불": new mw.Api().edit("사용자:"+usernameStr+"/RPG_in_City.json", function (revision) { var jsondata = JSON.parse(revision.content); jsondata.돈 -= 500*1; jsondata.추가2 = 5*1; // force to parse it a number jsondata.최근페이지 = "RPG in City/만남의 광장"; return {text: JSON.stringify(jsondata), summary: "동부요금지불"}; } ).then(function () { alert( 'Saved!' ); document.getElementById("RPGinCity-searchphase").style.display = "block"; }); break; case "전투승리": new mw.Api().edit("사용자:"+usernameStr+"/RPG_in_City.json", function (revision) { var jsondata = JSON.parse(revision.content); jsondata.체력 = parseInt(queryparams.mhp); jsondata.경험치 += queryparams.elevel*4; jsondata.돈 += queryparams.elevel*5; jsondata.최근페이지 = currentpage.substring(0, currentpage.length-3); return {text: JSON.stringify(jsondata), summary: "전투승리"}; } ).then(function () { alert( 'Saved!' ); document.getElementById("RPGinCity-searchphase").style.display = "block"; }); break; case "레벨업": new mw.Api().edit("사용자:"+usernameStr+"/RPG_in_City.json", function (revision) { var jsondata = JSON.parse(revision.content); jsondata.레벨 += (jsondata.경험치 - jsondata.경험치 % 128)/128; jsondata.경험치 = jsondata.경험치 % 128; return {text: JSON.stringify(jsondata), summary: "레벨업"}; } ).then(function () { alert( 'Saved!' ); if (currentpage !== "RPG in City/레벨 업")document.getElementById("RPGinCity-searchphase").style.display = "block"; }); break; case "회복": new mw.Api().edit("사용자:"+usernameStr+"/RPG_in_City.json", function (revision) { var jsondata = JSON.parse(revision.content); jsondata.체력 = jsondata.레벨 * 16; return {text: JSON.stringify(jsondata), summary: "회복"}; } ).then(function () { alert( 'Saved!' ); document.getElementById("RPGinCity-searchphase").style.display = "block"; }); break; case "결제": new mw.Api().edit("사용자:"+usernameStr+"/RPG_in_City.json", function (revision) { var jsondata = JSON.parse(revision.content); jsondata.잼 += queryparams.j*1; jsondata.배쨈 += queryparams.bj*1; jsondata.차단폭탄 += queryparams.bb*1; jsondata.무기 += queryparams.weapon*1; jsondata.돈 -= 50* queryparams.j + 75*queryparams.bj + 150*queryparams.bb + 1000 * queryparams.weapon; jsondata.최근페이지 = currentpage.substring(0, currentpage.length-3); return {text: JSON.stringify(jsondata), summary: "결제"}; } ).then(function () { alert( 'Saved!' ); document.getElementById("RPGinCity-searchphase").style.display = "block"; }); break; default: alert( 'No proper parameters' ); break; } }

function RPGinCity_HandleStore(jsondata, storeNumber) { var i = storeNumber; var Jam = document.getElementsByClassName("RPGinCity-JamAmount")[i]; if (Jam !== undefined && Jam !== null && Jam.innerText === "") Jam.innerText = "0"; var PearJam = document.getElementsByClassName("RPGinCity-PearJamAmount")[i]; if (PearJam !== undefined && PearJam !== null && PearJam.innerText === "") PearJam.innerText = "0"; var BB = document.getElementsByClassName("RPGinCity-BanBombAmount")[i]; if (BB !== undefined && BB !== null && BB.innerText === "") BB.innerText = "0"; var WeaponLevelUp = document.getElementsByClassName("RPGinCity-WeaponLevelUp")[i]; if (WeaponLevelUp !== undefined && WeaponLevelUp !== null && WeaponLevelUp.innerText === "") WeaponLevelUp.innerText = "0"; var BuyButton = document.getElementsByClassName("RPGinCity-BuyButton")[i]; if (BuyButton !== undefined && BuyButton !== null) { if (50 * parseInt(Jam.innerText) + 75 * parseInt(PearJam.innerText) + 150* parseInt(BB.innerText) + 1000*parseInt(WeaponLevelUp.innerText) > jsondata.돈) { BuyButton.innerText = "돈이 부족하다. 나가서 돈을 구해오자."; } BuyButton.style.visibility = "visible"; } }

function RPGinCity_Callback_fetchUserInformation(jsonfile) { // 정보 틀 관련 var playerinfo = document.getElementsByClassName("RPGinCity-Playerinfo"); var LevelUpButton = document.getElementById("RPGinCity-LevelUp"); if ( playerinfo !== undefined && playerinfo !== null && playerinfo.length > 0) { playerinfo[0].innerText = jsonfile['레벨']; playerinfo[1].innerText = jsonfile['체력']; playerinfo[2].innerText = jsonfile['경험치']; playerinfo[3].innerText = jsonfile['잼']; playerinfo[4].innerText = jsonfile['배쨈']; playerinfo[5].innerText = jsonfile['차단폭탄']; playerinfo[6].innerText = jsonfile['돈']; playerinfo[7].innerText = jsonfile['무기']; if (LevelUpButton !== undefined && LevelUpButton !== null && jsonfile.경험치 > 128 && jsonfile.레벨 + jsonfile.경험치 /128 <= 50) {

               var levelup = document.createElement("a");
               levelup.href = "https://liberty.banipest.com/index.php?title=RPG_in_City/레벨_업&lastgamepage=" + currentpage;
               levelup.innerHTML = "레벨업하기";

LevelUpButton.appendChild(levelup); } } // RPG in City/집 쉬기 기능 var RestingInHouse = document.getElementById("RPGinCity-House"); if (RestingInHouse !== undefined && RestingInHouse != null) { if (jsonfile.체력 < jsonfile.레벨 * 16){

               document.getElementById("RPGinCity-needRest").innerHTML = "너는 한숨 자고 개운한 마음으로 이곳을 나가려고 한다.\n";
               var resting = document.createElement("a");
               resting.href = "https://liberty.banipest.com/index.php/"+currentpage+"/회복";
               resting.innerHTML = "\n쉬기";

RestingInHouse.appendChild(resting); } else {

               RestingInHouse.innerHTML = "너는 몸 상태가 좋아 여기에 머물지 않기로 결정했다.";
           }

RestingInHouse.style.visibility = "visible"; } // RPG in City 전투 관련 스크립트 var inBattle = document.getElementById("RPGinCity-Fight"); if (inBattle !== undefined && inBattle !== null){ RPGinCity_HandleBattle(jsonfile); } // 전투 틀 처리 완료 // 일반적인 상점(문서 내에 단 한 개 존재) 처리 var storeHandle = document.getElementById("RiCStore"); if (storeHandle !== undefined && storeHandle !== null){ RPGinCity_HandleStore(jsonfile, 0); } //동부2구역구 - 중부구역구 이동 가능 여부 처리 var DowntownRoadOpen = document.getElementById("DowntownRoad"); if (DowntownRoadOpen !== undefined && DowntownRoadOpen !== null) { if (jsonfile.추가2 < 60) { DowntownRoadOpen.innerText = "이런!!! 다운타운 로드는 반달로 인해 막혀있다."; } DowntownRoadOpen.style.visibility = "visible"; } //남부 1구역구 메인퀘스트 var south1st = document.getElementById("south1st"); if (south1st !== undefined && south1st !== null) { var displaypart; if (jsonfile.추가2 < 10){ displaypart = document.getElementById("beforeBossfight"); displaypart.style.display = "block"; } else { displaypart = document.getElementById("afterBossfight"); displaypart.style.display = "block"; } } //중부구역구 var toWest = document.getElementById("toWest"); if (toWest !== undefined && toWest !== null) { if (jsonfile.추가2 < 25) { toWest.innerText = "서부 구역구 방향으로 가기 - <중부 구역구가 파괴된 시점에서 서부 구역구를 분리하는 장벽은 강력한 반달러들로 인해 봉쇄 상태를 유지하고 있다>"; } toWest.style.visibility = "visible"; } var toCentralOffice = document.getElementById("toCentralOffice"); if (toCentralOffice !== undefined && toCentralOffice !== null) { if (jsonfile.추가2 < 40) { toCentralOffice.innerText = "시청으로 들어가기 - < 시청에 들어갈 방법을 찾아야 한다 >"; } toCentralOffice.style.visibility = "visible"; } var peacefulCentral = document.getElementById("peacefulCentral"); var dangerousCentral = document.getElementById("dangerousCentral"); if (peacefulCentral !== undefined && peacefulCentral !== null && dangerousCentral !== undefined && dangerousCentral !== null) { if (jsonfile.추가2 >= 70) { peacefulCentral.style.visibility = "visible"; } else { dangerousCentral.style.visibility = "visible"; } } // 중부 구역구 대피소 퀘스트 var rescuePeregirl = document.getElementsByClassName("rescuePeregirl"); if (rescuePeregirl !== undefined && rescuePeregirl !== null && rescuePeregirl.length > 0) { if (jsonfile.추가2 < 15) { rescuePeregirl[1].remove(); rescuePeregirl[0].style.display = "block"; } else if (jsonfile.추가2 === 20) { rescuePeregirl[0].remove(); rescuePeregirl[0].style.display = "block"; } else { rescuePeregirl[0].remove(); rescuePeregirl[0].remove(); rescuePeregirl[0].style.display = "block"; } } var meetPeregirl = document.getElementsByClassName("meetPeregirl"); if (meetPeregirl !== undefined && meetPeregirl !== null && meetPeregirl.length > 0) { if (jsonfile.추가2 < 20) { meetPeregirl[0].style.display = "block"; } else { meetPeregirl[0].remove(); meetPeregirl[0].style.display = "block"; } } //남부 1구역구 상점, 문서 구조상 좀 구현이 복잡하여 분리한다. var south1stStore = document.getElementsByClassName("south1stStore"); if (south1stStore !== undefined && south1stStore !== null && south1stStore.length > 0) { if (jsonfile.추가2 < 10) { south1stStore[0].style.display = "block"; RPGinCity_HandleStore(jsonfile, 0); } else { south1stStore[1].style.display = "block"; RPGinCity_HandleStore(jsonfile, 1); } } //시청 안의 산토끼 몰매 맞고 가나요~ var cityOffice = document.getElementsByClassName("cityOffice"); if (cityOffice !== undefined && cityOffice !== null && cityOffice.length > 0) { if (jsonfile.추가2 < 70) { cityOffice[0].style.display = "block"; } else { cityOffice[1].style.display = "block"; } } var cityOfficeInternal = document.getElementsByClassName("cityOfficeInternal"); if (cityOfficeInternal !== undefined && cityOfficeInternal !== null && cityOfficeInternal.length > 0) { if (jsonfile.추가2 >= 65) { cityOfficeInternal[0].style.display = "block"; } else { cityOfficeInternal[1].style.display = "block"; } } var cityOffice3F = document.getElementsByClassName("cityOffice3F"); if (cityOffice3F !== undefined && cityOffice3F !== null && cityOffice3F.length > 0) { if (jsonfile.추가2 >= 65) { cityOffice3F[0].style.display = "block"; } else { cityOffice3F[1].style.display = "block"; } } var mayorRoom = document.getElementsByClassName("mayorRoom"); if (mayorRoom !== undefined && mayorRoom !== null && mayorRoom.length > 0) { if (jsonfile.추가2 >= 70) { mayorRoom[0].style.display = "block"; } else { mayorRoom[1].style.display = "block"; } } // 서브 퀘스트 관련 var subQuestContent = document.getElementById("SubQuestContent"); var parentNode; if (subQuestContent !== undefined && subQuestContent !== null){ parentNode = subQuestContent.parentElement; } if (parentNode !== undefined && parentNode !== null && subQuestContent !== undefined && subQuestContent !== null) { if (jsonfile.추가1 !== 0) { parentNode.removeChild( subQuestContent ); } else { subQuestContent.style.display = "block"; } } var subQuestEnd = document.getElementById("SubQuestEnd"); if (parentNode !== undefined && parentNode !== null &&subQuestEnd !== undefined && subQuestEnd !== null) { if (jsonfile.추가1 !== 1) { parentNode.removeChild( subQuestEnd ); } else { subQuestEnd.style.display = "block"; } } var subQuestNotEnd = document.getElementsByClassName("SubQuestNotEnd"); if (parentNode !== undefined && parentNode !== null && subQuestNotEnd !== undefined && subQuestNotEnd !== null) { if (jsonfile.추가1 < 2) { parentNode.removeChild( subQuestNotEnd[0] ); } else { subQuestNotEnd[0].style.display = "block"; } } // 자동 세이브 처리 - 가장 마지막에 와야 하는 것 var saveGameHandle = document.getElementById("RPGinCity-saveGame"); if (saveGameHandle !== undefined && saveGameHandle !== null) { console.log("Saving..."); RPGinCity_SaveHandle(saveGameHandle); } }


// ----------------------------------------------------Main------------------------------------------------------------

// RPGinCity_Title();

// if (currentpage === "사용자:"+usernameStr+"/RPG_in_City.json"){ // RPGinCity_GoToCheckpoint(); // } // else if (currentpage.substring(0,11) === "RPG_in_City") { // in game but not in title screen var api = new mw.Api(); console.log("fetching player info..."); fetch("https://liberty.banipest.com/index.php?title="+"사용자:"+usernameStr+"/RPG_in_City.json"+"&action=raw") .then(function(response) { if (!response.ok) { // make the promise be rejected if we didn't get a 2xx response throw new Error("Not 2xx response", {cause: response}); } return response.json(); }) .then(function(response) { var parsedata = response; RPGinCity_Callback_fetchUserInformation(parsedata); } ) .catch(function(e){ console.log(e); document.getElementById("RPGinCityLoad").style.display = "none"; }); // } } $(RPGinCity);