사용자:Senouis/RPGinCity.js: 두 판 사이의 차이

리버티게임, 모두가 만들어가는 자유로운 게임
imported>Senouis
편집 요약 없음
imported>Senouis
잔글편집 요약 없음
340번째 줄: 340번째 줄:
south1stStore[0].style.display = "block";
south1stStore[0].style.display = "block";
} else {
} else {
south1stStore[0].style.display = "block";
south1stStore[1].style.display = "block";
}
}
}
}

2020년 12월 3일 (목) 13:11 판

const usernameStr = mw.user.getName();
const currentpage = mw.config.get("wgPageName");
console.log(currentpage);


function RPGinCity_Title() {
	let startbuttondiv = document.getElementById("RPGinCityStart");
	if (startbuttondiv !== null){
		if (usernameStr === null) {
			startbuttondiv.innerHTML = "<p>로그인이 필요합니다</p>";
		} else {
			let UserDBTitle = new mw.Title("사용자:"+usernameStr+"/RPG in City.json", 2);
			if (UserDBTitle.exists === true){
				startbuttondiv.innerHTML = "<p><big><a href=\""+mw.util.getUrl(UserDBTitle.toText())+ "\">계속하기</a></big></p>";
			} else {
				startbuttondiv.innerHTML = "<p><big><a href=\""+mw.util.getUrl(UserDBTitle.toText(),{action: 'edit', preload : '틀:RPG_in_City_DB_양식', summary:'생성'})+ "\">새 데이터 만들기</a></big></p>";
			}
		}
	}
}

function RPGinCity_GoToCheckpoint () {
	let JSONDatalist = document.getElementsByClassName("mw-json-value");
	if (currentpage === ("사용자:"+usernameStr+"/RPG_in_City.json") && JSONDatalist.length !== 0) {
		let MWContent = document.getElementById("mw-content-text"); 
		let 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) {
	let Battlelink = new mw.Uri(window.location.href);
	console.log("building battle phase...");
	let queryparams = Battlelink.query;
	// 이제 필요한 값을 구해 화면에 표시한다.
	// 플레이어 체력부터...
	let mhp = 0;
	let playerhealth = document.getElementById("playerhealth");
	if (isNaN(queryparams.mhp)) {
		mhp = jsonfile.체력;
	} else {
		mhp = queryparams.mhp; // mhp는 이전 문서의 값을 받는다.
	}
	playerhealth.innerText = mhp;
	//적의 레벨
	let enemylevel = document.getElementById("enemylevel");
	enemylevel.innerText = queryparams.elevel; // elevel는 항상 undefined이 아니다.
	//적의 체력
	let enemyhealth = document.getElementById("enemyhealth");
	enemyhealth.innerText = queryparams.ehp; // ep는 항상 undefined이 아니다.
	//공격 페이즈
	let nextPhaseUri = new mw.Uri("https://libertygame.miraheze.org/w/index.php?title="+currentpage);
	let attackEnemy = document.getElementById("attackEnemy");
	let attackPower = Math.round(Math.random() * jsonfile.레벨*3) + jsonfile.무기;
	let 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);
	if (attackEnemy !== undefined && attackEnemy !== null)attackEnemy.innerHTML="<a href=\"" + attackEnemyUri.toString() + "\">그냥 공격!</a>";
	let useJam = document.getElementById("useJam");
	let useJamUri = RPGinCity_pushFightInfo(nextPhaseUri.clone(), jsonfile.체력, queryparams.ehp, queryparams.j, queryparams.bj, queryparams.bb, queryparams.etype, queryparams.elevel, 2);
	if (useJam !== undefined && useJam !== null)useJam.innerHTML="<a href=\"" + useJamUri.toString() + "\">잼으로 회복!</a>";
	let usePJ = document.getElementById("usePJ");
	let 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)usePJ.innerHTML="<a href=\"" + usePJUri.toString() + "\">배쨈 열기!</a>";
	let useBanbomb = document.getElementById("useBanbomb");
	let 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)useBanbomb.innerHTML="<a href=\"" + useBanbombUri.toString() + "\">차단폭탄!</a>";
	//방어 페이즈
	let Blocking = document.getElementById("Block");
	let 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)Blocking.innerHTML="<a href=\"" + BlockingUri.toString() + "\">방어</a>";
	let FailRunning = document.getElementById("FailRunning");
	let 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);
	if (FailRunning !== undefined && FailRunning !== null)FailRunning.innerHTML="<a href=\"" + FailRunningUri.toString() + "\">도망치자!</a>";
	let RunFromEnemy = document.getElementById("RunFromEnemy");
	if (RunFromEnemy !== undefined && RunFromEnemy !== null)RunFromEnemy.style.visibility = "visible";
}

function RPGinCity_SaveHandle(saveGameHandle) {
	let Templink = new mw.Uri(window.location.href);
	let queryparams = Templink.query;
	switch (saveGameHandle.innerText){
		case "서브퀘스트완료":
			new mw.Api().edit("사용자:"+usernameStr+"/RPG_in_City.json", function (revision) {
				let jsondata = JSON.parse(revision.content);
				jsondata.추가1 = 0;
				return {text: JSON.stringify(jsondata), summary: "서브퀘스트완료"};
			}
			).then(function () {
			    alert( 'Saved!' );
			    saveGameHandle.innerHTML="<a href=\"https://libertygame.miraheze.org/w/index.php?title="+ "사용자:"+usernameStr+"/RPG_in_City.json\">저장 확인하기</a>";
			});
			break;
		case "서브퀘스트수행":
			new mw.Api().edit("사용자:"+usernameStr+"/RPG_in_City.json", function (revision) {
				let jsondata = JSON.parse(revision.content);
				let questID = document.getElementById("questID");
				if (questID !== undefined && questID !== null)jsondata.추가1 = parseInt(questID.innerText);
				return {text: JSON.stringify(jsondata), summary: "서브퀘스트수행"};
			}
			).then(function () {
			    alert( 'Saved!' );
			    saveGameHandle.innerHTML="<a href=\"https://libertygame.miraheze.org/w/index.php?title="+ "사용자:"+usernameStr+"/RPG_in_City.json\">저장 확인하기</a>";
			});
			break;
		case "메인퀘스트수행":
			new mw.Api().edit("사용자:"+usernameStr+"/RPG_in_City.json", function (revision) {
				let jsondata = JSON.parse(revision.content);
				let mainQuestPoint = document.getElementById("mainQuestPoint");
				if (mainQuestPoint !== undefined && mainQuestPoint !== null) jsondata.최근페이지 = mainQuestPoint.innerText;
				let questID = document.getElementById("questID");
				if (questID !== undefined && questID !== null)jsondata.추가2 = parseInt(questID.innerText);
				return {text: JSON.stringify(jsondata), summary: "메인퀘스트수행"};
			}
			).then(function () {
			    alert( 'Saved!' );
			    saveGameHandle.innerHTML="<a href=\"https://libertygame.miraheze.org/w/index.php?title="+ "사용자:"+usernameStr+"/RPG_in_City.json\">저장 확인하기</a>";
			});
			break;
		case "동부요금지불":
			new mw.Api().edit("사용자:"+usernameStr+"/RPG_in_City.json", function (revision) {
				let 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!' );
			    saveGameHandle.innerHTML="<a href=\"https://libertygame.miraheze.org/w/index.php?title="+ "사용자:"+usernameStr+"/RPG_in_City.json\">저장 확인하기</a>";
			});
			break;
		case "전투승리":
			new mw.Api().edit("사용자:"+usernameStr+"/RPG_in_City.json", function (revision) {
				let 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!' );
			    saveGameHandle.innerHTML="<a href=\"https://libertygame.miraheze.org/w/index.php?title="+ "사용자:"+usernameStr+"/RPG_in_City.json\">저장 확인하기</a>";
			});
			break;
		case "레벨업":
			new mw.Api().edit("사용자:"+usernameStr+"/RPG_in_City.json", function (revision) {
				let jsondata = JSON.parse(revision.content);
				jsondata.레벨 += (jsondata.경험치 - jsondata.경험치 % 128)/128
				jsondata.경험치 = jsondata.경험치 % 128;
				return {text: JSON.stringify(jsondata), summary: "레벨업"};
			}
			).then(function () {
			    alert( 'Saved!' );
			    saveGameHandle.innerHTML="<a href=\"https://libertygame.miraheze.org/w/index.php?title="+ "사용자:"+usernameStr+"/RPG_in_City.json\">저장 확인하기</a>";
			});
			break;
		case "회복":
			new mw.Api().edit("사용자:"+usernameStr+"/RPG_in_City.json", function (revision) {
				let jsondata = JSON.parse(revision.content);
				jsondata.체력 = jsondata.레벨 * 16;
				return {text: JSON.stringify(jsondata), summary: "회복"};
			}
			).then(function () {
			    alert( 'Saved!' );
			    saveGameHandle.innerHTML="<a href=\"https://libertygame.miraheze.org/w/index.php?title="+ "사용자:"+usernameStr+"/RPG_in_City.json\">저장 확인하기</a>";
			});
			break;
		case "결제":
			new mw.Api().edit("사용자:"+usernameStr+"/RPG_in_City.json", function (revision) {
				let 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!' );
			    saveGameHandle.innerHTML="<a href=\"https://libertygame.miraheze.org/w/index.php?title="+ "사용자:"+usernameStr+"/RPG_in_City.json\">저장 확인하기</a>";
			});
			break;
		default:
			    alert( 'No proper parameters' );
			break;
	}
}

function RPGinCity_HandleStore(jsondata) {
	let StoreTemplates = document.getElementsByClassName("RiCStore");
	for (let i = 0 ; i < StoreTemplates.length; i++) {
		let Jam = document.getElementsByClassName("JamAmount")[i];
		if (Jam !== undefined && Jam !== null && Jam.innerText === "") Jam.innerText = "0";
		let PearJam = document.getElementsByClassName("PearJamAmount")[i];
		if (PearJam !== undefined && PearJam !== null && PearJam.innerText === "") PearJam.innerText = "0";
		let BB = document.getElementsByClassName("BanBombAmount")[i];
		if (BB !== undefined && BB !== null && BB.innerText === "") BB.innerText = "0";
		let WeaponLevelUp = document.getElementsByClassName("WeaponLevelUp")[i];
		if (WeaponLevelUp !== undefined && WeaponLevelUp !== null && WeaponLevelUp.innerText === "") WeaponLevelUp.innerText = "0";
		let BuyButton = document.getElementsByClassName("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) {
	let basepagename = document.getElementById("basepagename");
	// 정보 틀 관련
	let playerinfo = document.getElementsByClassName("Playerinfo");
	let LevelUpButton = document.getElementById("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) {
			LevelUpButton.innerHTML = "<a href= \"https://libertygame.miraheze.org/wiki/RPG_in_City/레벨_업\">레벨 업!</a>";
		}
	}
	// RPG in City/집 쉬기 기능
	let RestingInHouse = document.getElementById("House");
	if (RestingInHouse !== undefined && RestingInHouse != null) {
		if (jsonfile.체력 < jsonfile.레벨 * 16){
			RestingInHouse.innerHTML = "너는 한숨 자고 개운한 마음으로 이곳을 나가려고 한다.\n<a href=\"https://libertygame.miraheze.org/wiki/RPG_in_City/"+currentpage+"/회복\">쉬기</a>";
		}
		RestingInHouse.style.visibility = "visible";
	}
	// RPG in City 전투 관련 스크립트
	let inBattle = document.getElementById("Fight");
	if (inBattle !== undefined && inBattle !== null){ 
		RPGinCity_HandleBattle(jsonfile);
	} // 전투 틀 처리 완료
	// 자동 세이브 처리
	let saveGameHandle = document.getElementById("saveGame");
	if (saveGameHandle !== undefined && saveGameHandle !== null) {
		console.log("Saving...");
		RPGinCity_SaveHandle(saveGameHandle);
	}
	// 상점 처리
	let storeHandle = document.getElementById("RiCStore");
	if (storeHandle !== undefined && storeHandle !== null){
		RPGinCity_HandleStore(jsonfile);
	}
	//동부2구역구 - 중부구역구 이동 가능 여부 처리
	let DowntownRoadOpen = document.getElementById("DowntownRoad");
	if (DowntownRoadOpen !== undefined && DowntownRoadOpen !== null) {
		if (jsonfile.추가2 < 60) {
			DowntownRoadOpen.innerText = "이런!!! 다운타운 로드는 반달로 인해 막혀있다.";
		}
		DowntownRoadOpen.style.visibility = "visible";
	}
	//남부 1구역구 메인퀘스트
	let south1st = document.getElementById("south1st");
	if (south1st !== undefined && south1st !== null) {
		let displaypart;
		if (jsonfile.추가2 < 10){
			displaypart = document.getElementById("beforeBossfight");
			displaypart.style.visibility = "visible";
		} else {
			displaypart = document.getElementById("afterBossfight");
			displaypart.style.visibility = "visible";
		}
	}
	//중부구역구
	let toWest = document.getElementById("toWest");
	if (toWest !== undefined && toWest !== null) {
		if (jsonfile.추가2 < 25) {
			toWest.innerText = "서부 구역구 방향으로 가기 - <중부 구역구가 파괴된 시점에서 서부 구역구를 분리하는 장벽은 강력한 반달러들로 인해 봉쇄 상태를 유지하고 있다>";
		}
		toWest.style.visibility = "visible";
	}
	let toCentralOffice = document.getElementById("toCentralOffice");
	if (toCentralOffice !== undefined && toCentralOffice !== null) {
		if (jsonfile.추가2 < 40) {
			toCentralOffice.innerText = "시청으로 들어가기 - < 시청에 들어갈 방법을 찾아야 한다 >";
		}
		toCentralOffice.style.visibility = "visible";
	}
	let peacefulCentral = document.getElementById("peacefulCentral");
	let 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";
		}
	}
	// 중부 구역구 대피소 퀘스트
	let 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";
		}
	}
	let 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구역구 상점, 문서 구조상 좀 구현이 복잡하다.
	let south1stStore = document.getElementsByClassName("south1stStore");
	if (south1stStore !== undefined && south1stStore !== null && south1stStore.length > 0) {
		if (jsonfile.추가2 < 10) {
			south1stStore[0].style.display = "block";
		} else {
			south1stStore[1].style.display = "block";
		}
	}
}


// ----------------------------------------------------Main------------------------------------------------------------
if (currentpage === "RPG in City") {
	RPGinCity_Title();
}
else 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
	console.log("fetching player info...");
	fetch("https://libertygame.miraheze.org/w/index.php?title="+"사용자:"+usernameStr+"/RPG_in_City.json"+"&action=raw")
		.then(response => response.json())
		.then(response => RPGinCity_Callback_fetchUserInformation(response));
}