Making an AFK Calculator for Anime Fighters Simulator – Roblox Game
Been playing Anime Fighers Simulator a lot lately and wanted to make a calculator to work out the cost for overnight afk opening.
This is what I have made
The Game “Anime Fighters Simulator” is a roblox game similar to a clicker game like cookie clicker but based on Anime and has some extra playability as it is not purely based on clicking. I have played this game for over 6000 hours so far and the competative streak in me has me playing way more than I should. One of the thing that I saw people asking regularily in streams was how much would it cost to AFK open in world x. This sounded like a fun thing to work on so I started making it as a web page using jquery and css bootstrap.
The first thing I did was create all the inputs needed to work out how many stars(fighters) you can open. This consists of the amount of stars you can open at once, the game passes you own and the game badges you have for a world. Since different players can open different amount this needs to be editable.
Next I needed to be able to set how much it costs to open so I added the inputs for costs. As with most clicker type games the number go up exponentially and are denoted by characters such as B for billion and Q for quadrillion. To handle this I created an array with all the denoted characters
modLetters = ” KMBTQEZYXWVU” // modifiers for currency
With the inputs set for teh stars and the costs i needed a way for users to set the world they want to open. I then created the following table with each world and their costs for stars:
World
Name
Star Cost
Token Cost
Super Island
80
21
Ninja Village
300
53
Crazy Town
2.5k
227
Fruits Island
10k
593
Hero University
50k
1.8k
Walled City
250k
5.51k
Slayer Army
800k
12.3k
Ghoul Town
3m
30.8k
Chimera Jungle
10m
71.1k
Virtual Castle
40m
185k
Empty Dimension
150m
464k
Cursed High
500m
1.07m
XYZ Metropolis
1.5b
2.29m
9 Crimes island
5b
5.28m
Destiny Island
20b
13.8m
Lucky Kingdom
80b
36m
Land Of Alchemy
250b
79.5m
Slimey Island
780b
174m
Flame City
2t
336m
Divine Colosseum
7t
800m
Kingdom Of Four
20t
1.65b
Icy Wastes
65t
3.75b
The Underworld
200t
8.17b
Psychic City
650t
18.5b
The Hole
2q
40.3b
Ninja City
6q
86.4b
Time Travel Tokyo
20q
199b
Orca Road Prison
66q
455b
World Of Games
220q
1.04t
30
TBC
0
0
The max open tokens are added here as well as the max open will be used in our results too.
With all this set I created some code to work out the costs for the values enterd in the input fields:defaultOpenPerHour = 1200 // how many opens an be done in an hour
defaultMaxOpensPerHour = 40 // how many max opens can be done in a hour
defaultSellRate = 0.25 // value returned for sell (avg)
timeEventMod = 1 // stores modifier for time event
modLetters = ” KMBTQEZYXWVU” // modifiers for currency
// useful functions
function getCostOfSingleOpen(cps, opens) {
return cps * opens;
}
function getCostOfSingleMaxOpen(cps, invSpace) {
return cps * invSpace * 0.5;
}
function getCostOfHourOpens(cps, opens, gpass, fiftyk, fuseSell, vip) {
if (vip == 2) {
cps = cps * 0.75 // 25% discount for VIP
}
fc = cps * opens * defaultOpenPerHour * gpass * fiftyk
if (fuseSell == 2) {
fc = fc * (1 – defaultSellRate)
}
return fc
}
function getCostOfHourMaxOpen(cps, invSpace, fuseSell, vip) {
if (vip == 2) {
cps = cps * 0.75 // 25% discount for VIP
}
fc = cps * (defaultMaxOpensPerHour * timeEventMod) * invSpace
sellprice = 0
if (fuseSell == 2) {
sellprice = fc * defaultSellRate
}
return (fc * 0.5) – sellprice
}
function convertToFormatted(value, mod) {
cmodpos = modLetters.indexOf(mod.toUpperCase())
while (Math.ceil(Math.log10(value + 1)) > 3) {
cmodpos += 1 // move to next modifier
value = value * 0.001// divide val by 1000 to mve 3 places down
}
return parseFloat(value.toFixed(2)) + modLetters[cmodpos]
//return value.toPrecision(3) + modLetters[cmodpos];
}
function populateCost(stringVal, maxStringVal) {
cost = costModConvert(stringVal)
maxcost = costModConvert(maxStringVal)
$(“#inpcost”).val(cost[0])
$(“#inpmod”).val(cost[1])
$(“#inpMaxcost”).val(maxcost[0])
$(“#maxmod”).val(maxcost[1])
}
function costModConvert(stringVal) {
lastChar = stringVal.slice(stringVal.length – 1)
if ($.isNumeric(lastChar)) {
return [stringVal, “”]
} else {
return [stringVal.slice(0, stringVal.length – 1), lastChar]
}
}
function getOneHourMaxToken(cpmo) {
return cpmo * 40
}
// respond to Clicks
$(“#getres”).click(function (e) {
cost = $(“#inpcost”).val()
mod = $(“#inpmod”).val()
mcost = $(“#inpMaxcost”).val()
mmod = $(“#maxmod”).val()
openCount = $(“#opensCount”).val()
invSpace = $(“#invSpace”).val()
fuseSell = $(“#inputGroupSelect01”).val() // 1 = fuse | 2 = Sell
gPass = $(“#inputGroupSelect02”).val() // 1 = None | 2 = Owned
fiftyk = $(“#inputGroupSelect03”).val() // 1 = None | 2 = Owned
doMax = $(“#inputGroupSelect04”).val() // 1 = Yes | 2 = No
vip = $(“#inputGroupSelect05”).val() // 1 = No | 2 = Yes
res = getCostOfHourOpens(cost, openCount, gPass, fiftyk, fuseSell, vip)
mres = 0
if (doMax == 1) {
res += getCostOfHourMaxOpen(cost, invSpace, fuseSell)
mres = getOneHourMaxToken(mcost)
}
hour1 = convertToFormatted(res, mod)
hour2 = convertToFormatted(res * 2, mod)
hour3 = convertToFormatted(res * 3, mod)
hour4 = convertToFormatted(res * 4, mod)
hour5 = convertToFormatted(res * 5, mod)
hour6 = convertToFormatted(res * 6, mod)
hour7 = convertToFormatted(res * 7, mod)
hour8 = convertToFormatted(res * 8, mod)
hour24 = convertToFormatted(res * 24, mod)
hourM1 = convertToFormatted(mres, mmod)
hourM2 = convertToFormatted(mres * 2, mmod)
hourM3 = convertToFormatted(mres * 3, mmod)
hourM4 = convertToFormatted(mres * 4, mmod)
hourM5 = convertToFormatted(mres * 5, mmod)
hourM6 = convertToFormatted(mres * 6, mmod)
hourM7 = convertToFormatted(mres * 7, mmod)
hourM8 = convertToFormatted(mres * 8, mmod)
hourM24 = convertToFormatted(mres * 24, mod)
$(“#resdisplay”).html(hour1 + ” for 1 hour (” + hourM1 + ” tokens)”)
$(“#res2display”).html(hour2 + ” for 2 hours (” + hourM2 + ” tokens)”)
$(“#res3display”).html(hour3 + ” for 3 hours (” + hourM3 + ” tokens)”)
$(“#res4display”).html(hour4 + ” for 4 hours (” + hourM4 + ” tokens)”)
$(“#resd5isplay”).html(hour5 + ” for 5 hours (” + hourM5 + ” tokens)”)
$(“#res6display”).html(hour6 + ” for 6 hours (” + hourM6 + ” tokens)”)
$(“#res7display”).html(hour7 + ” for 7 hours (” + hourM7 + ” tokens)”)
$(“#res8display”).html(hour8 + ” for 8 hours (” + hourM8 + ” tokens)”)
$(“#res24display”).html(hour24 + ” for 24 hours (” + hourM24 + ” tokens)”)
});
$(“.trworld”).click(function () {
ffs = $(this)
costtd = ffs.find(“td.costtd”).html()
costMaxtd = ffs.find(“td.costMaxtd”).html()
worldName = ffs.find(“td.worldName”).html()
$(“#info”).html(worldName)
populateCost(costtd, costMaxtd)
});
$(“.badgeBut”).click(function () {
switch ($(this).attr(“info”)) {
case “test1”:
if ($(“#inputGroupSelect05”).val() == “1”) {
$(“#inputGroupSelect05”).val(“2”)
} else {
$(“#inputGroupSelect05”).val(“1”)
}
break;
case “test2”:
if ($(“#inputGroupSelect02”).val() == “1”) {
$(“#inputGroupSelect02”).val(“2”)
} else {
$(“#inputGroupSelect02”).val(“1”)
}
break;
case “test3”: break;
case “test4”: break;
case “test5”: break;
case “test6”: break;
case “test7”:
turnOffAllTimeEventHighlights($(this))
if (timeEventMod == 2) {
timeEventMod = 1
$(this).find(“.clh”).toggle()
} else {
timeEventMod = 2
}
break;
case “test8”:
turnOffAllTimeEventHighlights($(this))
if (timeEventMod == 3) {
timeEventMod = 1
$(this).find(“.clh”).toggle()
} else {
timeEventMod = 3
}
break;
case “test9”:
turnOffAllTimeEventHighlights($(this))
if (timeEventMod == 4) {
timeEventMod = 1
$(this).find(“.clh”).toggle()
} else {
timeEventMod = 4
}
break;
case “test10”:
turnOffAllTimeEventHighlights($(this))
if (timeEventMod == 5) {
timeEventMod = 1
$(this).find(“.clh”).toggle()
} else {
timeEventMod = 5
}
break;
}
$(this).find(“.clh”).toggle()
});
function turnOffAllTimeEventHighlights(object) {
badgebar = object.closest(“.badgebar”)
badgebar.find(“.timeMod”).toggle(false)
}This code is available on github here incase you want to make this yourself on your server. Credit is appreciated but not required
The post Making an AFK Calculator for Anime Fighters Simulator – Roblox Game appeared first on Game Development.
Source link