AWBW Stats

Enchanced Stats Charts for Advance Wars By Web

Bu betiği kurabilmeniz için Tampermonkey, Greasemonkey ya da Violentmonkey gibi bir kullanıcı betiği eklentisini kurmanız gerekmektedir.

Bu betiği yüklemek için Tampermonkey gibi bir uzantı yüklemeniz gerekir.

Bu betiği kurabilmeniz için Tampermonkey ya da Violentmonkey gibi bir kullanıcı betiği eklentisini kurmanız gerekmektedir.

Bu betiği kurabilmeniz için Tampermonkey ya da Userscripts gibi bir kullanıcı betiği eklentisini kurmanız gerekmektedir.

Bu betiği indirebilmeniz için ayrıca Tampermonkey gibi bir eklenti kurmanız gerekmektedir.

Bu komut dosyasını yüklemek için bir kullanıcı komut dosyası yöneticisi uzantısı yüklemeniz gerekecek.

(Zaten bir kullanıcı komut dosyası yöneticim var, kurmama izin verin!)

Bu stili yüklemek için Stylus gibi bir uzantı yüklemeniz gerekir.

Bu stili yüklemek için Stylus gibi bir uzantı kurmanız gerekir.

Bu stili yükleyebilmek için Stylus gibi bir uzantı yüklemeniz gerekir.

Bu stili yüklemek için bir kullanıcı stili yöneticisi uzantısı yüklemeniz gerekir.

Bu stili yüklemek için bir kullanıcı stili yöneticisi uzantısı kurmanız gerekir.

Bu stili yükleyebilmek için bir kullanıcı stili yöneticisi uzantısı yüklemeniz gerekir.

(Zateb bir user-style yöneticim var, yükleyeyim!)

// ==UserScript==
// @name          AWBW Stats
// @namespace     https://github.com/zielinskigr/awbw_stats/
// @version       0.2.14
// @author        zielinskigr
// @source        https://github.com/zielinskigr/awbw_stats/
// @match         https://awbw.amarriner.com/2030.php*
// @require       https://cdnjs.cloudflare.com/ajax/libs/Chart.js/3.9.1/chart.min.js
// @icon          https://raw.githubusercontent.com/zielinskigr/awbw_stats/main/res/img/stats128.png
// @description   Enchanced Stats Charts for Advance Wars By Web
// ==/UserScript==


/******/ (() => { // webpackBootstrap
var __webpack_exports__ = {};
(()=>{"use strict";async function t(t){return await new Promise((e=>setTimeout(e,t)))}async function e(t,e=0){return(await fetch("https://awbw.amarriner.com/api/game/load_replay.php",{method:"POST",body:JSON.stringify({gameId:t,turn:e,initial:!0})})).json()}const a=t=>{t.attributes=t.attributes||[],t.classes=t.classes||[],t.children=t.children||[];const e=document.createElement(t.tag);return e.classList.add(...t.classes),t.attributes.forEach((([t,a])=>{e.setAttribute(t,a)})),e.innerText="",t.children.forEach((t=>{"string"==typeof t?e.innerText+=t:e.appendChild(t)})),e},n={fundschart:{name:"Total Funds Generated",button:{id:"fundsbutton",children:"Total Funds",chartName:"fundschart"},dataset:[{name:"fundsDataSet",type:"line"}],data:"funds"},incomechart:{name:"Income",button:{id:"incomebutton",children:"Income",chartName:"incomechart"},dataset:[{name:"incomeDataSet",type:"line"}],data:"income"},ucchart:{name:"Unit Count",button:{id:"ucbutton",children:"Unit Count",chartName:"ucchart"},dataset:[{name:"ucDataSet",type:"line"}],data:"unitCount"},uvchart:{name:"Unit Value",button:{id:"uvbutton",children:"Army Value",chartName:"uvchart"},dataset:[{name:"uvDataSet",type:"line"}],data:"unitValue"},hpchart:{name:"Unit HP",button:{id:"hpbutton",children:"Unit HP",chartName:"hpchart"},dataset:[{name:"hpDataSet",type:"line"}],data:"unitHP"},capturechart:{name:"Caps",button:{id:"capturebutton",children:"Caps",chartName:"capturechart"},dataset:[{name:"captureDataSet",type:"bar"}],data:"captureCount"},damagedealtchart:{name:"Damage Dealt",button:{id:"damagedealtbutton",children:"Damage Dealt",chartName:"damagedealtchart"},dataset:[{name:"damageDealtDataSet",type:"bar"}],data:"damageDealt"}},r={1:{primary:"#F46243",secondary:"#F89F8B",tertiary:"#D4310C"},2:{primary:"#446EFF",secondary:"#99AFFF",tertiary:"#001F8F"},3:{primary:"#12D815",secondary:"#8EF690",tertiary:"#064B07"},4:{primary:"#FBD412",secondary:"#FDE986",tertiary:"#B59703"},5:{primary:"#8A3E96",secondary:"#C78BD0",tertiary:"#5D2965"},6:{primary:"#C4443D",secondary:"#CF6863",tertiary:"#9C3530"},7:{primary:"#999B98",secondary:"#C2C2C1",tertiary:"#525251"},8:{primary:"#C58950",secondary:"#DBB694",tertiary:"#8A5A2E"},9:{primary:"#FCA339",secondary:"#FDC886",tertiary:"#DD7B03"},10:{primary:"#CBDDBA",secondary:"#A2C284",tertiary:"#6F964A"},16:{primary:"#1B43BD",secondary:"#3B65E3",tertiary:"#122D7D"},17:{primary:"#FE68CF",secondary:"#FE9ADF",tertiary:"#FD0DB1"},19:{primary:"#3ACFC1",secondary:"#7CDFD5",tertiary:"#208379"},20:{primary:"#CE64FE",secondary:"#DF9AFE",tertiary:"#A602F2"},21:{primary:"#5F7C0C",secondary:"#8DBA12",tertiary:"#B3E920"},22:{primary:"#BB534F",secondary:"#C66F6C",tertiary:"#E2B7B6"}};async function s(){const s=document.getElementById("gamecontainer"),i=function(){let t=[],e=[];Object.keys(n).forEach((r=>{let s=a({tag:"div",attributes:[["id",n[r].button.id]],children:[n[r].button.children]});s.onclick=()=>{Object.keys(n).forEach((t=>{document.getElementById(n[t].button.chartName).setAttribute("style","display: none;max-width: 100%!important; width: 100%!important;")})),document.getElementById(n[r].button.chartName).setAttribute("style","display: block;max-width: 100%!important; width: 100%!important;")};let i=a({tag:"canvas",attributes:[["style","display: none;max-width: 100%!important;width: 100%!important;"],["id",n[r].button.chartName]]});t.push(s),e.push(i)}));const r=a({tag:"div",attributes:[["style","position:absolute;right: -10px;background: #ddd;padding: 5px;top: -6px;"],["id","closebutton"]],children:["X"]});r.onclick=()=>{o.remove()};const s=a({tag:"div",attributes:[["id","chartsmenu"],["style","position:relative;display: flex;flex-flow: row;justify-content: space-around;margin-top: -25px;margin-bottom: 10px;cursor: pointer;"]],children:[...t,r]}),i=a({tag:"div",attributes:[["id","chartloader"]],children:["Fetching game data, this can take up to a minute depending on game length, please wait..."]}),u=a({tag:"div",attributes:[["id","chartswrapper"],["style","position: relative; width: 100%;"]],children:[i,...e]}),o=a({tag:"div",attributes:[["id","chartscontainer"],["style","position: relative; margin-top:20px;top: 33%;max-width: 1000px;width: 100%;height: 500px;padding: 40px 20px 20px;background: #fff;overflow: hidden;display: flex;flex-flow: column;"]],children:[s,u]});return o}();let u;s.appendChild(i);try{u=await async function(){const a=new URLSearchParams(window.location.search).get("games_id"),n=await async function(a){const n=await e(a),r=n.daySelector.length;let s,i={};if(2!==n.players.length)throw new Error("Can only work on 2 players, sorry.");n.players.forEach((async t=>{i[t.id]={player:t,turnsArray:[]}}));let u=0;for(;u<r;)await t(250),s=await e(a,u),i[s.gameState.currentTurnPId].turnsArray.push(s),u++;return i}(a);let r={};const s=Object.keys(n);let i={};Object.keys(n).forEach((t=>{t==s[0]?i[t]=n[s[0]].player.order>n[s[1]].player.order?2:1:i[t]=n[s[1]].player.order>n[s[0]].player.order?2:1})),Object.keys(n).forEach((t=>{r[t]={name:n[t].turnsArray[0].gameState.players[t].users_username,turns:n[t].turnsArray.length,country:n[t].player.countries_id,turnOrder:i[t],units:[],funds:[],income:[],unitCount:[],unitValue:[],unitHP:[],unitHPCount:[],captureCount:[],damageDealt:[],damageTaken:[],coPowers:[],coPowerData:[]}}));let u=[];return Object.keys(n).forEach((t=>{let e=0;n[t].turnsArray.forEach(((a,n)=>{r[t].coPowers[n]=0,r[s[0]].units[n]=a.gameState.units,r[s[1]].units[n]=a.gameState.units,e+=a.gameState.players[t].players_income;let o=0;Object.values(a.gameState.units).forEach((e=>{e.units_players_id==t&&(o+=e.units_hit_points)}));let c=o/a.gameState.players_units_count[t].total;const d=((t,e,a,n,r,s)=>{let i=0,u=0,o=0,c=0,d=0,l={};return s.forEach((t=>{l[t]={},l[t].funds=0,l[t].turnNumber=a,l[t].turnOrder=n[e].turnOrder})),Object.values(t.actions).forEach((r=>{if("Power"===r.action&&(n[e].coPowers[a]++,r.hpChange&&(r.hpChange.hpGain&&r.hpChange.hpGain.players.forEach((t=>{Object.values(n[t].units[a]).forEach((e=>{n[t].units[a][e.units_id].units_hit_points+=r.hpChange.hpGain.hp,n[t].units[a][e.units_id].units_hit_points>=10&&(n[t].units[a][e.units_id].units_hit_points=10)}))})),r.hpChange.hpLoss&&r.hpChange.hpLoss.players.forEach((t=>{Object.values(n[t].units[a]).forEach((e=>{n[t].units[a][e.units_id].units_hit_points+=r.hpChange.hpLoss.hp,n[t].units[a][e.units_id].units_hit_points<=0&&(n[t].units[a][e.units_id].units_hit_points=0)}))}))),r.playerReplace&&Object.keys(r.playerReplace).forEach((t=>{r.playerReplace[t].players_funds&&(l[t].funds=Math.round(.333333*r.playerReplace[t].players_funds,0))}))),"Capt"===r.action&&20==r.buildingInfo.buildings_capture&&i++,"Fire"===r.action){let s=r.attacker.units_id,i=(n[e].units[a][s].units_players_id,n[e].units[a][s].units_cost),h=n[e].units[a][s].units_hit_points,p=r.attacker.units_hit_points;10!=p&&(0==p?(o=Math.round(i/10*h),n[e].units[a][s].units_hit_points=0):(o=Math.round(i/10*(h-p)),n[e].units[a][s].units_hit_points=p));let y=r.defender.units_id,m=(t.gameState.units[y].units_players_id,n[e].units[a][y].units_cost),f=n[e].units[a][y].units_hit_points,g=r.defender.units_hit_points;10!=g&&(0==g?(u=Math.round(m/10*f),n[e].units[a][y].units_hit_points=0):(u=Math.round(m/10*(f-g)),n[e].units[a][y].units_hit_points=g)),c+=u,d+=o,r.gainedFunds&&Object.keys(r.gainedFunds).forEach((t=>{l[t].funds+=r.gainedFunds[t]}))}})),{captures:i,chartData:n,wholeDamageDealt:c,wholeDamageTaken:d,fundsGenerated:l}})(a,t,n,r,0,s);r=d.chartData;const l=d.captures,h=d.wholeDamageDealt,p=d.wholeDamageTaken;u.push(d.fundsGenerated),r[t].funds.push({x:`${n+1}.${i[t]}`,y:e}),r[t].income.push({x:`${n+1}.${i[t]}`,y:a.gameState.players[t].players_income}),r[t].unitCount.push({x:`${n+1}.${i[t]}`,y:a.gameState.players_units_count[t].total}),r[t].unitValue.push({x:`${n+1}.${i[t]}`,y:a.gameState.players_units_count[t].value}),r[t].unitHP.push({x:`${n+1}.${i[t]}`,y:o}),r[t].unitHPCount.push({x:`${n+1}.${i[t]}`,y:c}),r[t].captureCount.push({x:`${n+1}.${i[t]}`,y:l}),t==s[0]?(r[s[0]].damageDealt.push({x:`${n+1}.${i[t]}`,y:h}),r[s[1]].damageDealt.push({x:`${n+1}.${i[t]}`,y:p})):(r[s[1]].damageDealt.push({x:`${n+1}.${i[t]}`,y:h}),r[s[0]].damageDealt.push({x:`${n+1}.${i[t]}`,y:p}))}))})),Object.values(u).forEach((t=>{Object.keys(n).forEach((e=>{if(0!=t[e].funds){let a=`${t[e].turnNumber+1}.${t[e].turnOrder}`,n=!1;if(r[e].funds.forEach(((s,i)=>{1==n&&(r[e].funds[i].y+=t[e].funds),s.x==a&&(r[e].funds[i].y+=t[e].funds,n=!0)})),!n)if(r[e].turnOrder<t[e].turnOrder){let n=r[e].funds[t[e].turnNumber].y;r[e].funds.forEach(((a,n)=>{n>t[e].turnNumber&&(r[e].funds[n].y+=t[e].funds)})),r[e].funds.push({x:a,y:n+t[e].funds})}else{let n=r[e].funds[t[e].turnNumber-1].y;r[e].funds.forEach(((a,n)=>{n>t[e].turnNumber-1&&(r[e].funds[n].y+=t[e].funds)})),r[e].funds.push({x:a,y:n+t[e].funds})}}}))})),Object.keys(n).forEach((t=>{r[t].funds.sort(((t,e)=>t.y-e.y)),r[t].coPowers.forEach(((e,a)=>{1==e&&r[t].coPowerData.push({x:`${a+1}.${i[t]}`,y:0,r:10})}))})),r}()}catch(t){i.remove(),console.log(t)}if(!u)throw i.remove(),new Error("Failed to load game data.");document.getElementById("chartloader").remove(),Object.keys(u);const o=Math.max(...(t=>{let e=[];return Object.values(t).forEach((t=>{e.push(t.turns)})),e})(u));!function(t,e){let a=function(t){let e={fundsDataSet:[],incomeDataSet:[],ucDataSet:[],uvDataSet:[],uvDataSet2:[],hpDataSet:[],hpcDataSet:[],ucuvDataSet:[],captureDataSet:[],damageDealtDataSet:[],damageTakenDataSet:[],coPowerDataSet:[]};return Object.keys(n).forEach((a=>{"UC/UV"==n[a].name||Object.values(t).forEach((t=>{let s={label:t.name+" "+n[a].name,backgroundColor:r[t.country].primary,borderColor:r[t.country].primary,data:t[n[a].data]};e[n[a].dataset[0].name].push(s);let i={label:t.name+" Power",backgroundColor:r[t.country].secondary,borderColor:r[t.country].secondary,data:t.coPowerData,type:"bubble"};e[n[a].dataset[0].name].push(i)}))})),e}(t);Object.keys(n).forEach((t=>{const r={labels:e,datasets:a[n[t].dataset[0].name]},s={type:n[t].dataset[0].type,data:r,options:{}};new Chart(document.getElementById(t),s)})),document.getElementById("fundschart").setAttribute("style","display: block;")}(u,Array.from(Array(o).keys(),(t=>[[`${t+1}.1`],[`${t+1}.2`]].flat())).flat())}var i;i=function(){const t=a({tag:"div",classes:["game-tools-bg"],children:["Stats"]}),e=a({tag:"div",classes:["game-tools-btn","enchanced-stats"],children:[t]});e.onclick=()=>{s()};const n=a({tag:"section",children:[e]});document.getElementById("game-menu-controls").prepend(n)}(),"complete"===document.readyState||"interactive"===document.readyState?setTimeout(i,1):document.addEventListener("DOMContentLoaded",i)})();
/******/ })()
;