Spiral Knights Income 2021-May

MissionCrowns/HourCrowns/3 SecondsCrowns/RunMinutes/RunDepthDifficultyRuns
9-3 The King of Ashes (Sell Tokens)1914216104683324-28(5)Elite16
5-2 The Sovereign Slime (Sell Tokens)162731436761415-17(3)Elite18
9-3 The King of Ashes145701279683324-28(5)Elite16
9-2 The Gauntlet(skip 2 depths)133881122311024-26(3)Elite6
5-2 The Sovereign Slime131741129761415-17(3)Elite18
5-2 Rise or Fall11392921841211-13(3)Elite2
6-2 Built to Destroy (Sell Tokens)10793932381815-17(3)Elite1
6-2 Built to Destroy9043827131815-17(3)Elite1
8-2 The Vile Engine8256720641520-22(3)Elite1
2-3 The Collector7903792272-3(2)Elite1
7-3 Beyond the Axes of Evil7560618901519-21(3)Elite1
7-3 Spark and Roar7493619981619-21(3)+BoxesElite1
4-2 Oilers in the Boilers7474687279-10(2)Elite1
3-1 Alien Ooze6710667162-3(2)Elite1

Image

Download

Public Domain

Code for tracking your own data:

  1. Copy the code into a file and name it SK Data.htm
  2. Open the file in your browser and see how the const data2 corresponds with the data, that appears in the table
    • Add or edit name, depth, difficulty while keeping the same format for square brackets []
    • Each line of curly brackets represents 1 run {} by default or many runs, if stated, for example Runs:3
    • You can use Timestamps Start and End or Minutes and Hours or just Minutes
    • The 0 at the end of name, depth, difficulty is for crowns made by tokens per run. If a boss drops tokens: (NPC item value*tokens per run/tokens needed for item)
    • I used the values 25000*3/30 for Vanaduke, 3500*3/15 for jelly king, and 3500*3/20 for roarmulus twins
    • If there are any errors, right click and inspect. If it shows a red symbol, you can click on it and see if the hint has line numbers. If your text editor does not have any line numbers, you can press CTRL+U in the browser to view the source code with line numbers. The most common errors are likely to be with brackets or commas. If nothing works, you can copy the original code again and insert your data from the beginning step by step.
    • The crown summary at the end of each run in Spiral Knights only lasts for a minute. To avoid missing it, you can type your amount of crowns at the start of the run as negative number and the amount of crowns, that you have after the run as a positive number(-a+b) or (b-a)
<!DOCTYPE html>
<meta charset="UTF-8">
<title>Spiral Knights Income</title>
<style>
*
{font-family:verdana;
background-color:#000;
color:#fff}

table *,
table
{padding:5px;
margin:5px;
border:5px ridge #33f}

::selection
{color:#fff;
background-color:#88f}

table
{border-collapse:collapse;
width:calc(100% - 10px)}

td:hover,
td:hover~td
{background-color:#55f}
</style>

<article>
</article>

<script>
const data2=[
  ["9-3 The King of Ashes (Sell Tokens)","24-28(5)","Elite",25000*3/30,
    [
      {Crowns:8400,Minutes:35},
      {Start:"11:49",End:"12:26",Crowns:7854},
      {Start:"23:34",End:"00:11",Crowns:8771},
      {Start:"06:19",End:"06:48",Crowns:-251385+258947}
    ]
  ],
  ["9-3 The King of Ashes (Sell Tokens)","24-28(5)","Elite",25000*3/30,
    [
      {Crowns:8400+7854+8771,Minutes:35+11+26+26+11,Runs:3},
      {Start:"06:19",End:"06:48",Crowns:-251385+258947}
    ]
  ],
  ["9-3 The King of Ashes (Sell Tokens)","24-28(5)","Elite",25000*3/30,
    [
      {Crowns:25025,Hours:1,Minutes:49,Runs:3},
      {Start:"06:19",End:"06:48",Crowns:-251385+258947}
    ]
  ],
  ["9-3 The King of Ashes","24-28(5)","Elite",0,
    [
      {Crowns:8400,Minutes:35},
      {Start:"11:49",End:"12:26",Crowns:7854},
      {Start:"12:34",End:"13:11",Crowns:8771}
    ]
  ],
  ["etc.","Depth","Difficulty",0,
    [
      {Crowns:2000,Minutes:15}
    ]
  ]
];

let table='<table><tr><th>Mission<th>Crowns/Hour<th>Crowns/3 Seconds<th>Crowns/Run<th>Minutes/Run<th>Depth<th>Difficulty<th>Runs';
const data=[];
let Duration=0;
let Crowns=0;
let Runs=0;
let End=0;
let Start=0;
let Hours=0;
const adddata=par=>{
  const dataobj={};
  dataobj.Name=par[0];
  dataobj.Depth=par[1];
  dataobj.Difficulty=par[2];
  Duration=0;
  Crowns=0;
  Runs=0;
  Hours=0;
  par[4].forEach(x=>{
    if('Start' in x&&'End' in x&&x.Start.length==5&&x.End.length==5){
      End=parseInt(x.End.substr(0,2));
      Start=parseInt(x.Start.substr(0,2));
      Hours=End-Start;
      if(End<Start)Hours+=24;
      Duration+=(60*Hours+1*(x.End.substr(3)-x.Start.substr(3)));
    }
    else{
      if('Hours' in x)Duration+=60*x.Hours;
      Duration+=x.Minutes;
    }
    Crowns+=x.Crowns+par[3];
    if('Runs' in x){
      Runs+=x.Runs;
      Crowns+=par[3]*(x.Runs-1);
    }else Runs++;
  });
  dataobj.Runs=Runs;
  const CrownsPerMinute=Crowns/Duration;
  dataobj.MinutesPerRun=Math.round(Duration/dataobj.Runs);
  dataobj.CrownsPerRun=Math.round(Crowns/dataobj.Runs);
  dataobj.CrownsPerHour=Math.round(60*CrownsPerMinute);
  dataobj.CrownsPerThreeSeconds=Math.round(CrownsPerMinute/20);
  data.push(dataobj);
}
data2.forEach(x=>adddata(x));
data.sort(function(a, b){return b.CrownsPerHour - a.CrownsPerHour});
data.forEach(x=>table+=`<tr><td>${x.Name}<td>${x.CrownsPerHour}<td>${x.CrownsPerThreeSeconds}<td>${x.CrownsPerRun}<td>${x.MinutesPerRun}<td>${x.Depth}<td>${x.Difficulty}<td>${x.Runs}`);

document.querySelector('article').innerHTML=table;
</script>

Public Domain