commit
872eb841ab
@ -0,0 +1,251 @@ |
|||||||
|
<script> |
||||||
|
|
||||||
|
const MAXSTEPS= 10000 |
||||||
|
|
||||||
|
function test(){ |
||||||
|
var start = Number(document.getElementById("starting").value) |
||||||
|
var end = Number(document.getElementById("ending").value) |
||||||
|
var maxscore = Number(document.getElementById("maxscore").value) |
||||||
|
var bonus = Number(document.getElementById("team").value) |
||||||
|
var type = (document.getElementById("Bingo").checked?"Bingo": |
||||||
|
document.getElementById("Poker").checked?"Poker/Raid": |
||||||
|
"Medley") |
||||||
|
var flexible = document.getElementById("flexible").checked |
||||||
|
//document.getElementById("console").value=flexible+"...\n\n" |
||||||
|
var step=1 |
||||||
|
var flameCount=0 |
||||||
|
var originalTarget=start |
||||||
|
document.getElementById("console").value="" |
||||||
|
|
||||||
|
var interval = (type=="Medley")?15000:10000 |
||||||
|
|
||||||
|
function EPCalc(voltage,score,bonus) { |
||||||
|
if (voltage>0) { |
||||||
|
switch (type) { |
||||||
|
case "Bingo":{ |
||||||
|
return voltage * Math.floor((1 + bonus)*Math.max(10,Math.floor(score/interval))) |
||||||
|
}break; |
||||||
|
case "Medley":{ |
||||||
|
return voltage * Math.floor((1 + bonus)*(10+Math.floor(score/interval))) |
||||||
|
}break; |
||||||
|
case "Poker/Raid":{ |
||||||
|
return voltage * Math.floor((1 + bonus)*(50 + Math.floor(score/interval))) |
||||||
|
}break; |
||||||
|
} |
||||||
|
} else { |
||||||
|
return Math.round(bonus*10)+10 |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
function EvenOdd(val) { |
||||||
|
return val%2==0?"even":"odd" |
||||||
|
} |
||||||
|
|
||||||
|
function TryBiggestGain(tbonus) { |
||||||
|
var voltage=5 |
||||||
|
for (var i=maxscore;i>=maxscore*0.8;i-=interval) { |
||||||
|
if (start+EPCalc(voltage,i,tbonus)<end-10) { |
||||||
|
//document.getElementById("console").value+="Ending value needs to be "+EvenOdd(end-10)+"\n" |
||||||
|
if (EvenOdd(start+EPCalc(voltage,i,tbonus))==EvenOdd(end-10)) { |
||||||
|
//document.getElementById("console").value+=EvenOdd(start+EPCalc(voltage,i,tbonus))+"/"+EvenOdd(end-10)+"\n" |
||||||
|
start+=EPCalc(voltage,i,tbonus) |
||||||
|
flameCount+=voltage |
||||||
|
document.getElementById("console").value+="Step "+(step++)+") Using "+voltage+" voltage w/"+Math.round(tbonus*100)+"% team, score between "+i+"~"+(i+interval-1)+" pts. EP +"+EPCalc(voltage,i,tbonus)+". Remaining:"+(end-start)+" EP \n" |
||||||
|
return true |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
return false |
||||||
|
} |
||||||
|
|
||||||
|
function TrySmallerGain(voltage,tbonus) { |
||||||
|
for (var i=maxscore;i>=maxscore*0.8;i-=interval) { |
||||||
|
if (start+EPCalc(voltage,i,tbonus)<end-10) { |
||||||
|
//document.getElementById("console").value+="Ending value needs to be "+EvenOdd(end-10)+"\n" |
||||||
|
if (EvenOdd(start+EPCalc(voltage,i,tbonus))==EvenOdd(end-10)) { |
||||||
|
//document.getElementById("console").value+=EvenOdd(start+EPCalc(voltage,i,tbonus))+"/"+EvenOdd(end-10)+"\n" |
||||||
|
start+=EPCalc(voltage,i,tbonus) |
||||||
|
flameCount+=voltage |
||||||
|
document.getElementById("console").value+="Step "+(step++)+") Using "+voltage+" voltage w/"+Math.round(tbonus*100)+"% team, score between "+i+"~"+(i+interval-1)+" pts. EP +"+EPCalc(voltage,i,tbonus)+". Remaining:"+(end-start)+" EP \n" |
||||||
|
return true |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
return false |
||||||
|
} |
||||||
|
|
||||||
|
function TrySmolGain(voltage,tbonus) { |
||||||
|
for (var i=maxscore;i>=0;i-=interval) { |
||||||
|
if (EPCalc(voltage,i,tbonus)>=(10+Math.round(bonus*10))&&(start+EPCalc(voltage,i,tbonus)<=end-(10+Math.round(bonus*10)))) { |
||||||
|
//document.getElementById("console").value+="Ending value needs to be "+EvenOdd(end-10)+"\n" |
||||||
|
if (EvenOdd(start+EPCalc(voltage,i,tbonus))==EvenOdd(end-10)) { |
||||||
|
//document.getElementById("console").value+=EvenOdd(start+EPCalc(voltage,i,tbonus))+"/"+EvenOdd(end-10)+"\n" |
||||||
|
start+=EPCalc(voltage,i,tbonus) |
||||||
|
flameCount+=voltage |
||||||
|
document.getElementById("console").value+="Step "+(step++)+") Using "+voltage+" voltage w/"+Math.round(tbonus*100)+"% team, score between "+i+"~"+(i+interval-1)+" pts. EP +"+EPCalc(voltage,i,tbonus)+". Remaining:"+(end-start)+" EP \n" |
||||||
|
return true |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
return false |
||||||
|
} |
||||||
|
|
||||||
|
function TryRehearsal() { |
||||||
|
var voltage=0 |
||||||
|
if (end-start>(10+Math.round(bonus*10))+10) { |
||||||
|
var gain=(10+Math.round(bonus*10)) |
||||||
|
start+=gain |
||||||
|
document.getElementById("console").value+="Step "+(step++)+") Use Rehearsal w/"+(bonus*100)+"% team. EP +"+gain+". Remaining:"+(end-start)+" EP \n" |
||||||
|
return true |
||||||
|
} else |
||||||
|
if (end-start>=20) { |
||||||
|
var gain=end-start-10 |
||||||
|
start+=gain |
||||||
|
document.getElementById("console").value+="Step "+(step++)+") Use Rehearsal w/"+((gain-10)*10)+"% team. EP +"+gain+". Remaining:"+(end-start)+" EP \n" |
||||||
|
return true |
||||||
|
} else |
||||||
|
if ((end-start)%10==0) { |
||||||
|
var gain=10 |
||||||
|
start+=gain |
||||||
|
document.getElementById("console").value+="Step "+(step++)+") Use Rehearsal w/0% team. EP +"+gain+". Remaining:"+(end-start)+" EP \n" |
||||||
|
return false |
||||||
|
} else { |
||||||
|
if ((end-start)%2!==0) { |
||||||
|
return undefined |
||||||
|
} |
||||||
|
var gain=end-start |
||||||
|
start+=gain |
||||||
|
document.getElementById("console").value+="Step "+(step++)+") Use Rehearsal w/"+((gain-10)*10)+"% team. EP +"+(gain)+". Remaining:"+(end-start)+" EP \n" |
||||||
|
return false |
||||||
|
} |
||||||
|
|
||||||
|
return false |
||||||
|
/*var voltage=0 |
||||||
|
if (end-start>36) { |
||||||
|
start+=26 |
||||||
|
document.getElementById("console").value+="Step "+(step++)+") Use Rehearsal w/"+(1.6*100)+"% team. EP +"+EPCalc(voltage,1,1.6)+". Remaining:"+(end-start)+" EP \n" |
||||||
|
return true |
||||||
|
} else |
||||||
|
if (end-start>20) { |
||||||
|
var bonus = (end-start-20)*10 |
||||||
|
var gain = end-start-10 |
||||||
|
start+=end-start-10 |
||||||
|
document.getElementById("console").value+="Step "+(step++)+") Use Rehearsal w/"+(bonus)+"% team. EP +"+gain+". Remaining:"+(end-start)+" EP \n" |
||||||
|
if ((bonus/10)%2!=0) { |
||||||
|
return undefined |
||||||
|
} else { |
||||||
|
return true |
||||||
|
} |
||||||
|
} else { |
||||||
|
if (end-start<10||(end-start)%2!=0) { |
||||||
|
return undefined |
||||||
|
} |
||||||
|
var bonus = ((end-start-10)/20)*2 |
||||||
|
start+=end-start |
||||||
|
document.getElementById("console").value+="Step "+(step++)+") Use Rehearsal w/"+((bonus)*100)+"% team. EP +"+EPCalc(voltage,1,bonus)+". Remaining:"+(end-start)+" EP \n" |
||||||
|
|
||||||
|
return false |
||||||
|
} |
||||||
|
return true*/ |
||||||
|
} |
||||||
|
|
||||||
|
if ((end-start)>1000000) { |
||||||
|
document.getElementById("console").value="Get closer to target score before using parking calculator!" |
||||||
|
} |
||||||
|
else { |
||||||
|
var result=true |
||||||
|
while (start!=end) { |
||||||
|
if (flexible) { |
||||||
|
for (var j=bonus;j>=0;j-=0.2) { |
||||||
|
while (TryBiggestGain(j)) { |
||||||
|
//document.getElementById("console").value+=+start+" EP"+"\n" |
||||||
|
} |
||||||
|
for (var i=4;i>0;i--) { |
||||||
|
while (TrySmallerGain(i,j)) { |
||||||
|
//document.getElementById("console").value+="Step "+(step++)+")"+start+" EP"+"\n" |
||||||
|
} |
||||||
|
} |
||||||
|
for (var i=5;i>0;i--) { |
||||||
|
while (TrySmolGain(i,j)) { |
||||||
|
//document.getElementById("console").value+="Step "+(step++)+")"+start+" EP"+"\n" |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} else { |
||||||
|
while (TryBiggestGain(bonus)) { |
||||||
|
//document.getElementById("console").value+=+start+" EP"+"\n" |
||||||
|
} |
||||||
|
for (var i=4;i>0;i--) { |
||||||
|
while (TrySmallerGain(i,bonus)) { |
||||||
|
//document.getElementById("console").value+="Step "+(step++)+")"+start+" EP"+"\n" |
||||||
|
} |
||||||
|
} |
||||||
|
for (var i=5;i>0;i--) { |
||||||
|
while (TrySmolGain(i,bonus)) { |
||||||
|
//document.getElementById("console").value+="Step "+(step++)+")"+start+" EP"+"\n" |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
do { |
||||||
|
result = TryRehearsal() |
||||||
|
} while (result); |
||||||
|
start=end |
||||||
|
if (result===undefined) { |
||||||
|
document.getElementById("console").value="Impossible to park using this team!" |
||||||
|
} else { |
||||||
|
document.getElementById("console").value="Calculating from "+originalTarget+" to "+end+" for event type "+type+"...\n\t(All games are done in Free Live)\n\nFound a park! "+(step-1)+" steps and "+flameCount+" voltage required!\n\n"+document.getElementById("console").value |
||||||
|
} |
||||||
|
//document.getElementById("console").value+="Step "+(step++)+")"+start+" EP"+"\n" |
||||||
|
step++ |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
</script> |
||||||
|
|
||||||
|
<h1>D4DJ Event Parking Calculator</h1> |
||||||
|
|
||||||
|
<fieldset> |
||||||
|
<legend>Parking Configuration</legend> |
||||||
|
<input type="radio" id="Poker" name="type" value="Poker" checked> |
||||||
|
<label for="Poker">Poker/Raid</label> |
||||||
|
|
||||||
|
<input type="radio" id="Bingo" name="type" value="Bingo"> |
||||||
|
<label for="Bingo">Bingo</label> |
||||||
|
|
||||||
|
<input type="radio" id="Medley" name="type" value="Medley"> |
||||||
|
<label for="Medley">Medley</label> |
||||||
|
|
||||||
|
<hr> |
||||||
|
<label for="team">Event Team Bonus:</label> |
||||||
|
<select id="team" name="team"> |
||||||
|
<option value="0">0%</option> |
||||||
|
<option value="0.2">20%</option> |
||||||
|
<option value="0.4">40%</option> |
||||||
|
<option value="0.6">60%</option> |
||||||
|
<option value="0.8">80%</option> |
||||||
|
<option value="1.0">100%</option> |
||||||
|
<option value="1.2">120%</option> |
||||||
|
<option value="1.4">140%</option> |
||||||
|
<option value="1.6" selected>160%</option> |
||||||
|
</select> |
||||||
|
<label for="flexible" alt="Yes"><b>Flexible Team?</b></label><input id="flexible" type="checkbox"> <i>If turned on, calculates scoring options using lower % teams also.</i> |
||||||
|
<br> |
||||||
|
<br> |
||||||
|
<label for="maxscore"><b>Max Free Live Score: </b></label><input id="maxscore" value="650000" onchange="test()"> |
||||||
|
<hr> |
||||||
|
<label for="starting"><b>Starting EP: </b></label><input id="starting" value="100000" onchange="test()"> |
||||||
|
<span style="font-size:32px;padding:0px 10px 0px 10px">➔</span> |
||||||
|
<label for="ending"><b>Target EP: </b></label><input id="ending" value="104000"> |
||||||
|
<br> |
||||||
|
<br> |
||||||
|
<button id="calculate" style="background-color:#CCDDFF;margin-left:20px;width:240px;height:32px;font-size:18px;" onclick="test()">Calculate</button> |
||||||
|
</fieldset> |
||||||
|
<div style="display: flex;justify-content: center;align-items: center;"> |
||||||
|
<hr> |
||||||
|
<textarea rows=20 cols=160 id="console"> |
||||||
|
</textarea> |
||||||
|
</div> |
||||||
|
|
||||||
|
<script> |
||||||
|
document.getElementById("ips").value="" |
||||||
|
</script> |
Loading…
Reference in new issue