Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/env lua
- --[[ Blacklisted ship names ]]
- local BLACKLIST = {
- "Society of Conscious Thought Cruiser",
- }
- --[[ Supergroup numbers ]]
- --Asteroid rats: 1-6
- --Deadspace rats: 7-12
- --Mission rats: 13-20
- --Other rats: 21-24
- local SUPERGROUP_MIN, SUPERGROUP_MAX = 7, 12
- local DAMAGE_PCT_FORMAT = "%d%%"
- local URL = "http://games.chruker.dk/eve_online/npc_ships.php"
- local http = require("socket.http")
- local groupnames = {}
- do
- local html = http.request(URL)
- html = html:sub((html:find("Select a group ...")), (html:find("<form action='npc_ships.php'")))
- assert(html, "Failed to parse group names")
- local _, start, category = html:find("<b>(.-):</b>")
- while start do
- local finish, nextstart, nextcat = html:find("<b>(.-):</b>", start)
- for id, name in (html:sub(start, finish)):gfind("<a href='npc_ships%.php%?supergroup=(%d+)&return_to='>(.-)</a>") do
- groupnames[tonumber(id)] = category.." "..name
- end
- start = nextstart
- category = nextcat
- end
- for i=SUPERGROUP_MIN, SUPERGROUP_MAX do
- assert(groupnames[i], "Missing group name for group "..i)
- end
- end
- local function parsestats(html, i, name, t, fifthstat)
- local EM, Exp, Kin, The
- local _, i = html:find("<td align='left' valign='top'>%s*"..name..":%s*%*?%s*</td>", i)
- if fifthstat then _, i = html:find("<td align='right' valign='top'>%s*.-%s*</td>", i) end
- _, i, EM = html:find("<td align='right' valign='top'>%s*(.-)%s*</td>", i)
- _, i, Exp = html:find("<td align='right' valign='top'>%s*(.-)%s*</td>", i)
- _, i, Kin = html:find("<td align='right' valign='top'>%s*(.-)%s*</td>", i)
- _, i, The = html:find("<td align='right' valign='top'>%s*(.-)%s*</td>", i)
- t.EM = t.EM + (tonumber(EM) or 0)
- t.Exp = t.Exp + (tonumber(Exp) or 0)
- t.Kin = t.Kin + (tonumber(Kin) or 0)
- t.The = t.The + (tonumber(The) or 0)
- return i
- end
- for group=SUPERGROUP_MIN, SUPERGROUP_MAX do
- print()
- local html = http.request(URL .."?supergroup="..group)
- local _, start = html:find("<table", (html:find("</form>")))
- local resists = { EM = 0, Exp = 0, Kin = 0, The = 0 }
- local turrets = { EM = 0, Exp = 0, Kin = 0, The = 0 }
- local missiles = { EM = 0, Exp = 0, Kin = 0, The = 0 }
- local seen = 0
- local alts = { ["even"] = "odd", ["odd"] = "even" }
- local _, start, alt = html:find("<tr class='table%-row%-(.-)'", start)
- while start do
- alt = alts[alt]
- local finish, nextstart = html:find("<tr class='table%-row%-"..alt.."'", start)
- local str = html:sub(start, finish)
- local _, i, ship = str:find("<td align='left' rowspan='4' .->%s*<a href='.-'><b>(.-)</b></a>")
- i = parsestats(str, i, "Shield", resists, true)
- i = parsestats(str, i, "Turrets", turrets)
- i = parsestats(str, i, "Armor", resists, true)
- i = parsestats(str, i, "Missiles", missiles)
- seen = seen + 1
- start = nextstart
- end
- print((groupnames[group].." "):sub(1,23), "EM", "Exp", "Kin", "The")
- print("","Resistances:", DAMAGE_PCT_FORMAT:format(resists.EM/(seen*2)), DAMAGE_PCT_FORMAT:format(resists.Exp/(seen*2)), DAMAGE_PCT_FORMAT:format(resists.Kin/(seen*2)), DAMAGE_PCT_FORMAT:format(resists.The/(seen*2)))
- local turret_total = turrets.EM + turrets.Exp + turrets.Kin + turrets.The
- if turret_total > 0 then
- local EM = (turrets.EM * 100)/(turret_total)
- local Exp = (turrets.Exp * 100)/(turret_total)
- local Kin = (turrets.Kin * 100)/(turret_total)
- local The = (turrets.The * 100)/(turret_total)
- print("", "Turrets:", DAMAGE_PCT_FORMAT:format(EM), DAMAGE_PCT_FORMAT:format(Exp), DAMAGE_PCT_FORMAT:format(Kin), DAMAGE_PCT_FORMAT:format(The))
- else
- print("", "Turrets:", "N/A", "N/A", "N/A", "N/A")
- end
- local missile_total = missiles.EM + missiles.Exp + missiles.Kin + missiles.The
- local total = turret_total + missile_total
- if missile_total > 0 then
- local EM = (missiles.EM * 100)/(missile_total)
- local Exp = (missiles.Exp * 100)/(missile_total)
- local Kin = (missiles.Kin * 100)/(missile_total)
- local The = (missiles.The * 100)/(missile_total)
- print("", ("Missiles (%d%%):"):format((missile_total * 100)/total), DAMAGE_PCT_FORMAT:format(EM), DAMAGE_PCT_FORMAT:format(Exp), DAMAGE_PCT_FORMAT:format(Kin), DAMAGE_PCT_FORMAT:format(The))
- else
- print("", "Missiles (0%):", "N/A", "N/A", "N/A", "N/A")
- end
- if total > 0 then
- local EM = ((turrets.EM + missiles.EM) * 100)/(total)
- local Exp = ((turrets.Exp + missiles.Exp) * 100)/(total)
- local Kin = ((turrets.Kin + missiles.Kin) * 100)/(total)
- local The = ((turrets.The + missiles.The) * 100)/(total)
- print("", "Overall Damage:", DAMAGE_PCT_FORMAT:format(EM), DAMAGE_PCT_FORMAT:format(Exp), DAMAGE_PCT_FORMAT:format(Kin), DAMAGE_PCT_FORMAT:format(The))
- else
- print("", "Overall Damage:", "N/A", "N/A", "N/A", "N/A")
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement