RPG in City/보카통/전투
< RPG in City | 보카통
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_pushFightInfo(targetUri, Mhp, Ehp, Jam, PJam, BanBomb, Etype, Elevel, Turn) { targetUri.extend({mhp:Mhp, ehp:Ehp, j:Jam, bj:PJam, bb:BanBomb, etype:Etype, elevel:Elevel, 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://libertyga.me/index.php?title="+currentpage); console.log("nextPhaseUri is "+nextPhaseUri); var attackPower = Math.round(Math.random() * jsonfile.레벨*3) + jsonfile.무기; /* 액션 처리 메서드 */ function RiC_Action(actionElemId, uriValue, actionText) { var itemAction = document.getElementById(actionElemId); var itemActionUri = uriValue; if (itemAction) { var itemActionLink = document.createElement("a"); itemActionLink.href = itemActionUri.toString(); itemActionLink.innerHTML=actionText; itemAction.appendChild(itemActionLink); } } RiC_Action("RPGinCity-attackEnemy", RPGinCity_pushFightInfo(nextPhaseUri.clone(), mhp, (queryparams.ehp - attackPower) >= 0?queryparams.ehp - attackPower : 0, queryparams.j, queryparams.bj, queryparams.bb, queryparams.etype, queryparams.elevel, 2), "그냥 공격!"); RiC_Action("RPGinCity-useJam", RPGinCity_pushFightInfo(nextPhaseUri.clone(), jsonfile.체력, queryparams.ehp, queryparams.j, queryparams.bj, queryparams.bb, queryparams.etype, queryparams.elevel, 2), "잼으로 회복!"); RiC_Action("RPGinCity-usePJ", RPGinCity_pushFightInfo(nextPhaseUri.clone(), mhp, queryparams.ehp > 20 ? queryparams.ehp - 20 : 0, queryparams.j, queryparams.bj, queryparams.bb, queryparams.etype, queryparams.elevel, 2), "배쨈 열기!"); RiC_Action("RPGinCity-useBanbomb", RPGinCity_pushFightInfo(nextPhaseUri.clone(), mhp, queryparams.ehp/2, queryparams.j, queryparams.bj, queryparams.bb, queryparams.etype, queryparams.elevel, 2), "차단폭탄!"); //방어 페이즈 RiC_Action("RPGinCity-Block", 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), "방어"); RiC_Action("RPGinCity-FailRunning", RPGinCity_pushFightInfo(nextPhaseUri.clone(), mhp - Math.round(Math.random() * queryparams.elevel), queryparams.ehp, queryparams.j, queryparams.bj, queryparams.bb, queryparams.etype, queryparams.elevel, 1), "도망치자!"); var RunFromEnemy = document.getElementById("RPGinCity-RunFromEnemy"); var MustKill = document.getElementById("mustKill"); if (RunFromEnemy && !MustKill)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( '퀘스트 수행 완료!' ); 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( '수락 완료!' ); 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( '완료!' ); 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( '지불 완료!' ); 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( '승리!' ); 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( '저장 완료!' ); 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( '체력이 완전히 회복되었습니다!' ); 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( '결제 완료!' ); 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.차단폭탄 + 1; jsondata.최근페이지 = fullbasepagename; return {text: JSON.stringify(jsondata), summary: "폭탄지급"}; } ).then(function () { alert( '폭탄 지급 완료!' ); }); break; default: new mw.Api().edit("사용자:"+usernameStr+"/RPG_in_City.json", function (revision) { var jsondata = JSON.parse(revision.content); jsondata.최근페이지 = fullbasepagename; return {text: JSON.stringify(jsondata), summary: "폭탄지급"}; } ).then(function () { alert( '저장 완료!' ); }); 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://libertyga.me/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://libertyga.me/index.php?title="+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://libertyga.me/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);
| ||||
| ||||
|