สคริปต์นี้ไม่ควรถูกติดตั้งโดยตรง มันเป็นคลังสำหรับสคริปต์อื่น ๆ เพื่อบรรจุด้วยคำสั่งเมทา // @require https://update.greasyfork.org/scripts/399258/787087/BossTab.js
/**************************** Boss Tab ****************************************/
// @tabversion 20180706
Tabs.Boss = {
tabOrder: 2120,
tabLabel : 'Boss',
tabColor : 'brown',
ValidBoss: false,
isBusy: false,
myDiv : null,
timer : null,
CurrentBoss : null,
CurrentConquest : null,
TokensLeft : 0,
championId : 0,
Options: {
MaxLevel:0,
StopIfDefeated:true,
},
init : function (div){
var t = Tabs.Boss;
t.myDiv = div;
if (!Options.BossOptions) {
Options.BossOptions = t.Options;
}
else {
for (var y in t.Options) {
if (!Options.BossOptions.hasOwnProperty(y)) {
Options.BossOptions[y] = t.Options[y];
}
}
}
t.CheckEvent(t.show);
t.CheckConquest();
},
CheckEvent : function (notify) {
var t = Tabs.Boss;
t.CurrentBoss = uW.cm.BossModel.getEvent();
if (!t.CurrentBoss.eventId) {
setTimeout (function () { t.CheckEvent(notify); }, 1000);
return;
}
if (t.CurrentBoss.state == 0) {
t.StartBossBattle(notify);
notify = null;
}
var now = uW.unixtime();
var end = parseIntNan(t.CurrentBoss.endTime);
var elem = ById("bttcBoss");
if (end-now>0) {
t.ValidBoss = true;
elem.setAttribute("style","color:#f00");
}
else {
t.ValidBoss = false;
// elem.setAttribute("style","display:none");
}
if (notify) { notify(); }
},
StartBossBattle : function(notify) {
var t = Tabs.Boss;
var params = uW.Object.clone(uW.g_ajaxparams);
params.eventId = uW.cm.BossModel.getEventId();
params.userId = uW.tvuid;
new MyAjaxRequest(uW.g_ajaxpath+"ajax/championBossBegin.php"+uW.g_ajaxsuffix,{
method:"post",
parameters:params,
onSuccess:function(rslt) {
if (rslt.ok){
OldTokens = parseIntNan(uW.ksoItems[t.CurrentBoss.tokenItemId].count);
rslt.state = 1;
uW.cm.BossModel.updateEvent(uWCloneInto(rslt));
Seed.items["i"+t.CurrentBoss.tokenItemId] = parseIntNan(uW.ksoItems[t.CurrentBoss.tokenItemId].count);
actionLog(Number(parseIntNan(rslt.tokens)-OldTokens)+' '+uW.itemlist["i"+t.CurrentBoss.tokenItemId].name+' Collected','BOSS');
if (notify) { notify(); }
}
}
},true);
},
eventDoBoss: function () {
var t = Tabs.Boss;
var div = $("pbboss_info");
var params = uW.Object.clone(uW.g_ajaxparams);
params.champid = t.championId;
params.eventId = uW.cm.BossModel.getEventId();
params.tokenCost = t.CurrentBoss.cost;
params.userId = uW.tvuid;
params.tokens = parseIntNan(uW.ksoItems[t.CurrentBoss.tokenItemId].count)
new MyAjaxRequest(uW.g_ajaxpath+"ajax/championBossFight.php"+uW.g_ajaxsuffix,{
method:"post",
parameters:params,
onSuccess:function(rslt) {
if (rslt.ok){
t.TokensLeft = t.TokensLeft - t.CurrentBoss.cost;
var FightText = "";
if (parseIntNan(rslt.health)>0) {
FightText = uW.g_js_strings.boss["tier_names_"+t.getBossTier(t.CurrentBoss.level)]+' - '+uW.g_js_strings.commonstr.level+' '+t.CurrentBoss.level+' - <b>'+tx('Defeat')+'! </b>'+tx('Remaining Health')+': '+parseIntNan(rslt.health)+"%";
if (Options.BossOptions.StopIfDefeated) {
FightText = '<span style="color:#800;">'+tx('Boss Battle Stopped')+'</span><br>'+FightText;
ById('pbBossCancel').firstChild.innerHTML = uW.g_js_strings.commonstr.close;
t.isBusy = false;
}
}
else {
FightText = uW.g_js_strings.boss["tier_names_"+t.getBossTier(t.CurrentBoss.level)]+' - '+uW.g_js_strings.commonstr.level+' '+t.CurrentBoss.level+' - <b>'+tx('Victory')+'! </b>';
if (rslt.loot) {
var loot={};
for (var i=0;i<rslt.loot.length;i++) {
if (typeof loot[rslt.loot[i].itemId] !== "undefined") {
loot[rslt.loot[i].itemId] += +rslt.loot[i].quantity;
} else {
loot[rslt.loot[i].itemId] = +rslt.loot[i].quantity;
}
FightText = '<span>'+tx('You received')+' '+rslt.loot[i].quantity+' '+ uW.itemlist["i"+rslt.loot[i].itemId].name+'</span><br>'+FightText;
}
uW.update_inventory(uWCloneInto(loot));
}
}
div.innerHTML = '<span>'+FightText+'</span><br>'+div.innerHTML;
uW.ksoItems[t.CurrentBoss.tokenItemId].count=parseIntNan(rslt.tokens);
Seed.items["i"+t.CurrentBoss.tokenItemId] = parseIntNan(uW.ksoItems[t.CurrentBoss.tokenItemId].count);
CM.BossModel.updateEvent(uWCloneInto(rslt));
if (parseIntNan(rslt.health)<=0) {
params.userId=uW.tvuid;
params.eventId = uW.cm.BossModel.getEventId();
new MyAjaxRequest(uW.g_ajaxpath+"ajax/championBossNext.php"+uW.g_ajaxsuffix,{method:"post",parameters:params,
onSuccess:function(rslt) {
if (rslt.ok){
CM.BossModel.updateEvent(uWCloneInto(rslt));
setTimeout(t.nextfight, 500);
}
else {
div.innerHTML = '<span style="color:#800;">'+tx('Server Error')+' '+rslt.debug+'</span><br>'+div.innerHTML;
ById('pbBossCancel').firstChild.innerHTML = uW.g_js_strings.commonstr.close;
t.isBusy = false;
}
},
onFailure: function () {
div.innerHTML = '<span style="color:#800;">'+tx('Server Error')+'!</span><br>'+div.innerHTML;
ById('pbBossCancel').firstChild.innerHTML = uW.g_js_strings.commonstr.close;
t.isBusy = false;
},
},true);
}
else {
setTimeout(t.nextfight, 500);
}
}
else {
div.innerHTML = '<span style="color:#800;">'+tx('Server Error')+' '+rslt.debug+'</span><br>'+div.innerHTML;
ById('pbBossCancel').firstChild.innerHTML = uW.g_js_strings.commonstr.close;
t.isBusy = false;
// try and fix
params.userId=uW.tvuid;
params.eventId = uW.cm.BossModel.getEventId();
new MyAjaxRequest(uW.g_ajaxpath+"ajax/championBossNext.php"+uW.g_ajaxsuffix,{method:"post",parameters:params,
onSuccess:function(rslt) {
if (rslt.ok){
CM.BossModel.updateEvent(uWCloneInto(rslt));
}
else {
div.innerHTML = '<span style="color:#800;">'+tx('Server Error')+' '+rslt.debug+'</span><br>'+div.innerHTML;
ById('pbBossCancel').firstChild.innerHTML = uW.g_js_strings.commonstr.close;
t.isBusy = false;
}
},
onFailure: function () {
div.innerHTML = '<span style="color:#800;">'+tx('Server Error')+'!</span><br>'+div.innerHTML;
ById('pbBossCancel').firstChild.innerHTML = uW.g_js_strings.commonstr.close;
t.isBusy = false;
},
},true);
}
},
onFailure: function () {
div.innerHTML = '<span style="color:#800;">'+tx('Server Error')+'!</span><br>'+div.innerHTML;
ById('pbBossCancel').firstChild.innerHTML = uW.g_js_strings.commonstr.close;
t.isBusy = false;
},
},true);
},
show : function (){
var t = Tabs.Boss;
if (!t.isBusy) {
var m = '<DIV class=divHeader align=center>'+uW.g_js_strings.boss.modal_title.toUpperCase()+'</div>';
m += '<div style="min-height:400px;">';
if (t.ValidBoss) {
var str = t.CurrentBoss.bossArtString;
var now = uW.unixtime();
var end = parseIntNan(t.CurrentBoss.endTime);
var elem = ById("bttcBoss");
if (end-now>0) {
m += '<br><DIV align=center>';
m += uW.g_js_strings.boss.quest_ends.replace("%1$s","")+' <span btBossEndTime>'+timestr(end-now)+'</span><br><br>';
m += '<b>'+uW.g_js_strings.boss["name_"+str]+'</b><br>';
m += uW.g_js_strings.boss["description_"+str]+'<br><br>';
m += uW.g_js_strings.boss["tier_names_"+t.getBossTier(t.CurrentBoss.level)]+' - '+uW.g_js_strings.commonstr.level+' '+t.CurrentBoss.level+'<br><br>';
m += '</div><div align=center><table class=xtab>';
m += '<TR><td align=right>'+uW.itemlist["i"+t.CurrentBoss.tokenItemId].name+': </td><td><b>'+(Seed.items["i"+t.CurrentBoss.tokenItemId]?Seed.items["i"+t.CurrentBoss.tokenItemId]:0)+'</b></td></tr>';
m += '<TR><td align=right>'+tx('Cost per Battle')+': </td><td><b>'+t.CurrentBoss.cost+'</b></td></tr>';
m += '<TR><td align=right>'+tx('Amount to Use')+':</td><td><INPUT size=4 id=btBossItemAmount type=text value="'+t.TokensLeft+'"></td></tr>';
m += '</table></div><DIV align=center>'+uW.g_js_strings.boss.yourChampion+': <select id=btBossChamp>';
var champ = Seed.champion.champions;
for (var ch=0;ch<champ.length;ch++) {
currentch=champ[ch];
m += '<option value="'+currentch.championId+'" '+((currentch.championId==t.championId)?'selected':'')+'>'+currentch.name + '</option>';
}
m+='</select></div>';
m+='<br><br><center><input type=button value="'+uW.g_js_strings.modal_mmb.playnow+'" id=btBossStart></center>';
}
else {
m += '<br><div align=center>'+tx('No active event')+'</div>';
}
}
else {
m += '<br><div align=center>'+tx('No active event')+'</div>';
}
m += '</div>';
m += '<div align=center><div style="position:absolute;bottom:0px;width:'+GlobalOptions.btWinSize.x+'px;"><br><hr>';
m += '<form action="https://www.paypal.com/cgi-bin/webscr" method="post" target="_blank">\
<input type="hidden" name="cmd" value="_s-xclick">\
<input type="hidden" name="hosted_button_id" value="8VEDPV3X9X82L">\
<input type="image" src="https://www.paypalobjects.com/en_US/GB/i/btn/btn_donateCC_LG.gif" border="0" name="submit" alt="PayPal – The safer, easier way to pay online!">\
<img alt="" border="0" src="https://www.paypalobjects.com/en_GB/i/scr/pixel.gif" width="1" height="1">\
</form>';
m += '<br>'+tx('This additional tab has been provided free of charge for the benefit of players. Please donate to help with future support and development of this and other features')+'.<br>'+tx('Thanks')+', Barbarossa.<br> </div></div>';
t.myDiv.innerHTML = m;
ResetFrameSize('btMain',100,GlobalOptions.btWinSize.x);
if (t.ValidBoss) {
ById('btBossItemAmount').addEventListener('change', function(){
t.TokensLeft = parseIntNan(ById('btBossItemAmount').value);
ById('btBossItemAmount').value = t.TokensLeft;
} , false);
ById('btBossStart').addEventListener('click', function(){t.start();} , false);
}
}
else { // reset curtain position..
t.setCurtain(true);
}
},
getBossTier : function(lvl) {
var t = Tabs.Boss;
for (var k=0;k<t.CurrentBoss.tiers.length;k++) {
if (lvl>=t.CurrentBoss.tiers[k][0] && lvl<=t.CurrentBoss.tiers[k][1]) {
return k;
}
}
return (t.CurrentBoss.tiers.length-1); // must be highest level!
},
setPopup: function (onoff) {
var t = Tabs.Boss;
if (onoff) {
var div = document.createElement('div');
div.id = 'ptBossPop';
div.style.backgroundColor = '#fff';
div.style.zindex = mainPop.div.zIndex + 2;
div.style.opacity = '1';
div.style.border = '3px outset black';
div.style.width = (GlobalOptions.btWinSize.x-200)+'px';
div.style.height = '300px';
div.style.display = 'block';
div.style.position = 'absolute';
div.style.top = '100px';
div.style.left = '100px';
t.myDiv.appendChild(div);
return div;
} else {
t.myDiv.removeChild(ById('ptBossPop'));
}
},
setCurtain: function (onoff) {
var t = Tabs.Boss;
if (onoff) {
var off = getAbsoluteOffsets(t.myDiv);
var curtain = ById('ptBossCurtain');
if (!curtain) {
curtain = document.createElement('div');
curtain.id = 'ptBossCurtain';
curtain.style.zindex = mainPop.div.zIndex + 1;
curtain.style.backgroundColor = "#000000";
curtain.style.opacity = '0.5';
curtain.style.display = 'block';
curtain.style.position = 'absolute';
t.myDiv.appendChild(curtain);
}
curtain.style.width = (t.myDiv.clientWidth+4) + 'px';
curtain.style.height = (t.myDiv.clientHeight+4) + 'px';
curtain.style.top = off.top + 'px';
curtain.style.left = off.left + 'px';
} else {
t.myDiv.removeChild(ById('ptBossCurtain'));
}
},
e_Cancel: function () {
var t = Tabs.Boss;
if (t.isBusy) {
t.isBusy = false;
var div = $("pbboss_info");
div.innerHTML += "<br><span>"+tx('Cancelled')+"!</span>";
ById('pbBossCancel').firstChild.innerHTML = uW.g_js_strings.commonstr.close;
return;
}
t.setCurtain(false);
t.setPopup(false);
t.show();
},
start : function (){
var t = Tabs.Boss;
t.championId = ById("btBossChamp").value;
if ((t.championId!=0) && (t.TokensLeft>=t.CurrentBoss.cost)) {
t.isBusy = true;
t.setCurtain(true);
var popDiv = t.setPopup(true);
popDiv.innerHTML = '<TABLE class=xtab width=100% height=100%><TR><TD align=center>\
<DIV class=divHeader align=center>'+tx('Boss Battle Results')+'...</div>\
<DIV id=pbboss_info style="padding:10px; height:225px; max-height:225px; overflow-y:auto"></div>\
</td></tr><TR><TD align=center>' + strButton20(uW.g_js_strings.commonstr.cancel, 'id=pbBossCancel') + '</td></tr></table>';
ById('pbBossCancel').addEventListener('click', t.e_Cancel, false);
t.nextfight();
}
},
nextfight : function (){
var t = Tabs.Boss;
if(!t.isBusy)
return;
var div = $("pbboss_info");
if(t.TokensLeft<t.CurrentBoss.cost){
if (div) {
div.innerHTML = "<span>"+tx('Completed')+"!</span><br>"+div.innerHTML;
ById('pbBossCancel').firstChild.innerHTML = 'Close';
}
t.isBusy = false;
return;
}
t.eventDoBoss();
},
CheckConquest : function (notify) {
var t = Tabs.Boss;
try {
t.CurrentConquest = uW.cm.TroopModel.getEvent();
}
catch (e) { logerr(e); return; }
if (!t.CurrentConquest.eventId) {
setTimeout (function () { t.CheckConquest(notify); }, 1000);
return;
}
if (t.CurrentConquest.state == 0) {
t.StartTroopConquest(notify);
notify = null;
}
if (notify) { notify(); }
},
StartTroopConquest : function(notify) {
var t = Tabs.Boss;
var params = uW.Object.clone(uW.g_ajaxparams);
params.eventId = uW.cm.TroopModel.getEventId();
params.userId = uW.tvuid;
new MyAjaxRequest(uW.g_ajaxpath+"ajax/troopEventBegin.php"+uW.g_ajaxsuffix,{
method:"post",
parameters:params,
onSuccess:function(rslt) {
if (rslt.ok){
OldTokens = parseIntNan(uW.ksoItems[t.CurrentConquest.idToken].count);
rslt.state = 1;
uW.cm.TroopModel.updateEvent(uWCloneInto(rslt));
Seed.items["i"+t.CurrentConquest.idToken] = parseIntNan(uW.ksoItems[t.CurrentConquest.idToken].count);
actionLog(Number(parseIntNan(rslt.tokens)-OldTokens)+' '+uW.itemlist["i"+t.CurrentConquest.idToken].name+' Collected','CONQUEST');
if (notify) { notify(); }
}
}
},true);
},
}