Greasy Fork is available in English.

ResTab

Collect Resources from alliance members courts

Script này sẽ không được không được cài đặt trực tiếp. Nó là một thư viện cho các script khác để bao gồm các chỉ thị meta // @require https://update.greasyfork.org/scripts/399270/787105/ResTab.js

/*********************************** Resources TAB ***********************************/
// @tabversion 20180619

Tabs.Resources = {
	tabOrder : 1800,
	tabLabel : 'Resources',
	resource : {1:'Food', 2:'Wood', 3:'Stone', 4:'Ore'},
	users : [],
	myDiv : null,
	doList : [], // list of gifts to accept
	accepting : false,
	city : null,
	total : {gold:0, 1:0, 2:0, 3:0, 4:0},

	init : function (div){
		var t = Tabs.Resources;
			t.myDiv = div;
		div.innerHTML = '<style>div.indent25 {padding-left:25px}</style><div class=divHeader align=center>'+tx('COLLECT RESOURCES FROM COURTLY ACTIONS')+'</div><br><TABLE cellpadding=0 cellspacing=0 class=xtab width=100%><TR><TD align=center><INPUT id="pballlist" type=submit value="'+tx('Fetch Alliance List')+'" \>&nbsp;<INPUT id="pbfrndlist" type=submit value="'+tx('Fetch Friend List')+'" \></td></tr></table><HR>\
			<DIV id=resDiv style="width:100%; min-height:400px; height:100%">';
		document.getElementById('pballlist').addEventListener ('click', function() { t.e_clickfetchlist(1); }, false);
		document.getElementById('pbfrndlist').addEventListener ('click', function() { t.e_clickfetchlist(2); }, false);
		ResetFrameSize('btMain',100,GlobalOptions.btWinSize.x);
	},

	show : function (){
	},
	hide : function (){
	},

	progress : function (msg, span, add){
		if(add)
			document.getElementById(span).innerHTML+=msg;
		else
			document.getElementById(span).innerHTML=msg;
	},

	e_clickfetchlist : function  (tt){     // (also cancel accepting)
		var t = Tabs.Resources;
		t.users = [];
		if (t.accepting){
			document.getElementById('pballlist').value = tx('Fetch Alliance List');
			document.getElementById('pbfrndlist').value = tx('Fetch Friend List');
			document.getElementById('resDiv').innerHTML+= '<BR><SPAN class=boldRed>'+tx('Cancelled')+'.</span>';
			t.accepting = false;
			return;
		}
		if (tt==1) {
			document.getElementById('resDiv').innerHTML = tx('Fetching alliance list')+' ... <span id=pbResUserListCount></span>';
		}
		else {
			document.getElementById('resDiv').innerHTML = tx('Fetching friend list')+' ... <span id=pbResUserListCount></span>';
		}

		t.fetchUserList (tt,gotUserList);

		function gotUserList(userList){
			if(userList.length < 1){
				listGifts();
				return;
			}
			document.getElementById('resDiv').innerHTML += '<BR>'+tx('Check if able to collect')+' ... <span id=pbResUserAvailCount></span>';
			t.checkDailyAction(userList, listGifts);
		}

		function listGifts (){
			t.city = Cities.cities[0];
			if (t.users.length<1){
				document.getElementById('resDiv').innerHTML = '<BR><BR><CENTER>'+tx('No players found')+'!</center>';
				return;
			}
			var m = '';
			m += '<TABLE class=xtab align=center width=100%><TR><TD width=50% align=right>'+tx('City to apply gifts to')+':</td><TD width=50% id=pbrescityselspan></td></tr>\
				<TR><TD align=right>'+tx('Select resource to collect')+':</td><TD>'+htmlSelector(t.resource, Options.getResType, 'id=pbResColType')+'</td></tr>';
			m += '<TR><TD align=right>'+tx('Select players you want to collect from and click')+':</td><TD width=250><INPUT type=submit id=pbResDo value="'+tx('Accept Resources')+'">&nbsp;\
				<SPAN id=pbResNone class=boldRed>&nbsp;</span></td></tr></table><HR><DIV class=divHeader><CENTER>'+tx('Player List')+'&nbsp;&nbsp;&nbsp;('+ t.users.length +' '+tx('found')+')</center></div><TABLE class=xtab align=center><TR valign=top>';
			m += '<TD width=10></td><TD><TABLE align=center cellpadding=2 cellspacing=0 class=xtab>\
				<TBODY id=pbResTbody style="height:250px; overflow:auto; display:block;">\
				<TR><TH class=xtabHD width=30>&nbsp;</th><TH align=left class=xtabHD width=200>'+tx('Name')+'</th><TH align=right class=xtabHD width=150>'+tx('Might')+'</th><TH align=center class=xtabHD width=50>'+tx('Select')+'</th></tr>';
			var r = 0;
			for (var i=0; i<t.users.length; i++){
				if (++r % 2) { rowClass = 'evenRow'; }
				else { rowClass = 'oddRow'; }
				m += '<TR class="'+rowClass+'"><td><img width=30 src="'+t.users[i].pic+'"></td><TD align=left>'+ t.users[i].name +'</td><TD align=right>'+ addCommas(t.users[i].might) +'</td><td align=center><INPUT type=checkbox id=pbrchk_'+ i +'></td></tr>';
			}
			m += '</tbody></table></td><TD width=10></td>';
			m += '<TD><INPUT id=pbResButAll type=submit value="'+tx('Select All')+'" style="width:100%; margin-bottom:5px"><BR><INPUT id=pbResButNone type=submit value="'+tx('Select None')+'"></td>';
			m += '</tr></table>';
			
			document.getElementById('resDiv').innerHTML = m;
			new CdispCityPicker ('pbrescitysel', document.getElementById('pbrescityselspan'), true, t.e_CityButton, t.city.idx);
			document.getElementById('pbResDo').addEventListener ('click', t.getErDone, false);
			document.getElementById('pbResButAll').addEventListener ('click', t.e_butAll, false);
			document.getElementById('pbResButNone').addEventListener ('click', t.e_butNone, false);
			ResetFrameSize('btMain',100,GlobalOptions.btWinSize.x);
		}
	},

	e_CityButton : function (city, x, y){
		var t = Tabs.Resources;
		t.city = city;
	},

	e_butAll : function (){
		var t = Tabs.Resources;
		for (var i=0; i<t.users.length; i++)
			document.getElementById('pbrchk_'+i).checked = true;
	},

	e_butNone : function (){
		var t = Tabs.Resources;
		for (var i=0; i<t.users.length; i++)
			document.getElementById('pbrchk_'+i).checked = false;
	},

	getErDone : function (){
		var t = Tabs.Resources;
		t.doList = [];
		document.getElementById('pbResNone').innerHTML = '&nbsp;';
		Options.getResType = document.getElementById('pbResColType').value;
		t.total = {gold:0, 1:0, 2:0, 3:0, 4:0};
		for (var i=0; i<t.users.length; i++){
			if (document.getElementById('pbrchk_'+i).checked)
				t.doList.push (t.users[i]);
		}
		if (t.doList.length==0){
			document.getElementById('pbResNone').innerHTML = tx('None Selected')+'!';
			return;
			}
		t.accepting = true;
		document.getElementById('pballlist').value = tx('Stop Accepting');
		document.getElementById('pbfrndlist').value = tx('Stop Accepting');
		document.getElementById('resDiv').innerHTML = '<DIV id=rsltDiv style="height:400px; max-height:400px; overflow-y:auto"><B>'+tx('Accepting from')+' '+ t.doList.length +' '+tx('users')+':</b><BR></div>';
		ResetFrameSize('btMain',100,GlobalOptions.btWinSize.x);
		t.acceptNext ();
	},

	allDone : function (msg){
		var t = Tabs.Resources;
		msg += '<BR><BR> '+tx('Total resources gained')+' : <BR>\
			'+tx('Gold')+': '+addCommas(t.total.gold)+'<BR>';
		for(var i=1; i<=4; i++){
			msg += tx(t.resource[i])+': '+addCommas(t.total[i])+'<BR>';
		}
		document.getElementById('rsltDiv').innerHTML += '<BR><BR>' + msg;
		document.getElementById('pballlist').value = tx('Fetch Alliance List');
		document.getElementById('pbfrndlist').value = tx('Fetch Friend List');
		t.accepting = false;
	},

	acceptNext : function (){
		var t = Tabs.Resources;
		var gift = t.doList.shift();
		if (gift == null){
			t.allDone (tx('Done accepting resources')+'.');
			return;
		}
		var acpDiv = document.getElementById('rsltDiv');
		var curDiv = document.createElement ('div');
		acpDiv.appendChild (curDiv);
		curDiv.innerHTML = '<B>'+tx('From')+' '+ gift.name +': ';
		var statSpan = document.createElement ('span');
		curDiv.appendChild (statSpan);
		statSpan.innerHTML = tx('Accepting')+' ... ';
		t.getCourtAction (gift, gotGiftData);

		function gotGiftData (rslt){
			if (!t.accepting)
				return;
			if (rslt.ok){
				var msg = rslt.gold +' '+tx('gold and')+' '+rslt.resource +' '+ tx(t.resource[rslt.resourcetype])+'&nbsp;&nbsp;'+tx('OK')+'.';
				actionLog ('Accepted from '+gift.name+': '+ rslt.gold +' gold and '+ rslt.resource +' '+ t.resource[rslt.resourcetype],'RESOURCES');
				statSpan.innerHTML += msg;
				t.total.gold += rslt.gold;
				t.total[rslt.resourcetype] += rslt.resource;
				t.acceptNext ();
				return;
			}

			if (rslt.msg)
				msg = '<B>'+ rslt.msg + '</b>';
			else
				msg = '<SPAN class=boldRed>ERROR: '+ rslt.ajaxErr +'</span>';

			curDiv.removeChild (statSpan);
			curDiv = document.createElement ('div');
			curDiv.className = 'indent25';
			acpDiv.appendChild (curDiv);
			curDiv.innerHTML = msg;
			t.acceptNext ();
		}
	},

	getMembersInfo : function (pageNo, notify) {
		var t = Tabs.Resources;
		var params = unsafeWindow.Object.clone(unsafeWindow.g_ajaxparams);

		params.pageNo = pageNo;
		new MyAjaxRequest(unsafeWindow.g_ajaxpath + "ajax/allianceGetMembersInfo.php" + unsafeWindow.g_ajaxsuffix, {
			method: "post",
			parameters: params,
			onSuccess: function (rslt) {
				notify (rslt);
			},
			onFailure: function (rslt) {
				notify ({errMsg:'Ajax Comm Error'});
			},
		});
	},

	getFriendsInfo : function (notify) {
		var t = Tabs.Resources;
		var params = uW.Object.clone(uW.g_ajaxparams);
		new MyAjaxRequest(uW.g_ajaxpath + "ajax/getAppFriends.php" + uW.g_ajaxsuffix, {
			method: "post",
			parameters: params,
			onSuccess: function (rslt) {
			notify (rslt);
			},
			onFailure: function (rslt) {
			notify ({errMsg:'Ajax Comm Error'});
			},
		});
	},

	getDailyAction : function (uid, notify){
		var t = Tabs.Resources;
		var params = unsafeWindow.Object.clone(unsafeWindow.g_ajaxparams);

		params.pid = uid;
		new MyAjaxRequest(unsafeWindow.g_ajaxpath + "ajax/viewCourt.php" + unsafeWindow.g_ajaxsuffix, {
		method: "post",
		parameters: params,
		onSuccess: function (rslt) {
			notify (rslt);
		},
		onFailure: function (rslt) {
			notify ({errMsg:'Ajax Comm Error'});
		},
		});
	},

	getCourtAction : function (gift, notify){
		var t = Tabs.Resources;
		var params = unsafeWindow.Object.clone(unsafeWindow.g_ajaxparams);

		params.atype = Options.getResType;
		params.toid = gift.userId;
		params.givercityid = t.city.id;
		new MyAjaxRequest(unsafeWindow.g_ajaxpath + "ajax/courtDoAction.php" + unsafeWindow.g_ajaxsuffix, {
		method: "post",
		parameters: params,
		onSuccess: function (rslt) {
			notify (rslt);
		},
		onFailure: function (rslt) {
			notify ({errMsg:'Ajax Comm Error'});
		},
		});
	},

	checkDailyAction : function (userList, notify){
		var t = Tabs.Resources;
		var count = 0;
		t.getDailyAction(userList[count].userId, parseViewCourt);

		function parseViewCourt (rslt){
			if (!rslt.ok || rslt.errMsg)
				notify ({errMsg:'Ajax Comm Error'});
			if(rslt.dailyActionFlag == 0)
				t.users.push(userList[count]);
			t.progress(count, 'pbResUserAvailCount');
			count++;
			if(count < userList.length){
				t.getDailyAction(userList[count].userId, parseViewCourt);
			} else {
				notify();
			}
		}
	},

	fetchUserList : function (tt,notify){
		var t = Tabs.Resources;
		var userList = [];
		if (tt==1) {
			t.getMembersInfo(1, parseAlliancePage);
		}
		else {
			t.getFriendsInfo(parseFriendPage);
		}

		function parseAlliancePage (rslt){
			if (!rslt.ok || rslt.errMsg)
				notify ({errMsg:'Ajax Comm Error'});
			var users = rslt.memberInfo;
			for(var k in users){
				userList.push({userId:users[k].userId, name:users[k].name, might:users[k].prestige, pic:users[k].avatarurl});
			}
			t.progress(userList.length, 'pbResUserListCount');
			if(rslt.currentPage < rslt.noOfPages){
				t.getMembersInfo((rslt.currentPage+1), parseAlliancePage);
			}
			else {
				notify(userList);
			}
		}

		function parseFriendPage (rslt){
			if (!rslt.ok || rslt.errMsg)
				notify ({errMsg:'Ajax Comm Error'});
			var users = rslt.data;
			for(var k in users){
				if (users[k].userId!=undefined)
				userList.push({userId:users[k].userId, name:users[k].displayName, might:users[k].might, pic:users[k].realPhoto});
			}
			t.progress(userList.length, 'pbResUserListCount');
			notify(userList);
		}
	},

}