Advertisement
Guest User

Untitled

a guest
Apr 25th, 2012
289
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 4.69 KB | None | 0 0
  1. #!/bin/env lua
  2.  
  3. --[[ Blacklisted ship names ]]
  4. local BLACKLIST = {
  5.     "Society of Conscious Thought Cruiser",
  6. }
  7.  
  8. --[[ Supergroup numbers ]]
  9. --Asteroid rats: 1-6
  10. --Deadspace rats: 7-12
  11. --Mission rats: 13-20
  12. --Other rats: 21-24
  13. local SUPERGROUP_MIN, SUPERGROUP_MAX = 7, 12
  14.  
  15.  
  16. local DAMAGE_PCT_FORMAT = "%d%%"
  17. local URL = "http://games.chruker.dk/eve_online/npc_ships.php"
  18. local http = require("socket.http")
  19. local groupnames = {}
  20. do
  21.     local html = http.request(URL)
  22.     html = html:sub((html:find("Select a group ...")), (html:find("<form action='npc_ships.php'")))
  23.     assert(html, "Failed to parse group names")
  24.    
  25.     local _, start, category = html:find("<b>(.-):</b>")
  26.     while start do
  27.         local finish, nextstart, nextcat = html:find("<b>(.-):</b>", start)
  28.         for id, name in (html:sub(start, finish)):gfind("<a href='npc_ships%.php%?supergroup=(%d+)&amp;return_to='>(.-)</a>") do
  29.             groupnames[tonumber(id)] = category.." "..name
  30.         end
  31.         start = nextstart
  32.         category = nextcat
  33.     end
  34.  
  35.     for i=SUPERGROUP_MIN, SUPERGROUP_MAX do
  36.         assert(groupnames[i], "Missing group name for group "..i)
  37.     end
  38. end
  39.  
  40. local function parsestats(html, i, name, t, fifthstat)
  41.     local EM, Exp, Kin, The
  42.     local _, i = html:find("<td align='left' valign='top'>%s*"..name..":%s*%*?%s*</td>", i)
  43.     if fifthstat then _, i = html:find("<td align='right' valign='top'>%s*.-%s*</td>", i) end
  44.     _, i, EM = html:find("<td align='right' valign='top'>%s*(.-)%s*</td>", i)
  45.     _, i, Exp = html:find("<td align='right' valign='top'>%s*(.-)%s*</td>", i)
  46.     _, i, Kin = html:find("<td align='right' valign='top'>%s*(.-)%s*</td>", i)
  47.     _, i, The = html:find("<td align='right' valign='top'>%s*(.-)%s*</td>", i)
  48.    
  49.     t.EM = t.EM + (tonumber(EM) or 0)
  50.     t.Exp = t.Exp + (tonumber(Exp) or 0)
  51.     t.Kin = t.Kin + (tonumber(Kin) or 0)
  52.     t.The = t.The + (tonumber(The) or 0)
  53.    
  54.     return i
  55. end
  56.  
  57. for group=SUPERGROUP_MIN, SUPERGROUP_MAX do
  58.     print()
  59.     local html = http.request(URL .."?supergroup="..group)
  60.     local _, start = html:find("<table", (html:find("</form>")))
  61.  
  62.     local resists = { EM = 0, Exp = 0, Kin = 0, The = 0 }
  63.     local turrets = { EM = 0, Exp = 0, Kin = 0, The = 0 }
  64.     local missiles = { EM = 0, Exp = 0, Kin = 0, The = 0 }
  65.     local seen = 0
  66.  
  67.     local alts = { ["even"] = "odd", ["odd"] = "even" }
  68.     local _, start, alt = html:find("<tr class='table%-row%-(.-)'", start)
  69.     while start do
  70.         alt = alts[alt]
  71.         local finish, nextstart = html:find("<tr class='table%-row%-"..alt.."'", start)
  72.         local str = html:sub(start, finish)
  73.         local _, i, ship = str:find("<td align='left' rowspan='4' .->%s*<a href='.-'><b>(.-)</b></a>")
  74.  
  75.         i = parsestats(str, i, "Shield", resists, true)
  76.         i = parsestats(str, i, "Turrets", turrets)
  77.         i = parsestats(str, i, "Armor", resists, true)
  78.         i = parsestats(str, i, "Missiles", missiles)
  79.        
  80.         seen = seen + 1
  81.         start = nextstart
  82.     end
  83.    
  84.     print((groupnames[group].."          "):sub(1,23), "EM", "Exp", "Kin", "The")
  85.     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)))
  86.    
  87.     local turret_total = turrets.EM + turrets.Exp + turrets.Kin + turrets.The
  88.     if turret_total > 0 then
  89.         local EM = (turrets.EM * 100)/(turret_total)
  90.         local Exp = (turrets.Exp * 100)/(turret_total)
  91.         local Kin = (turrets.Kin * 100)/(turret_total)
  92.         local The = (turrets.The * 100)/(turret_total)
  93.         print("", "Turrets:", DAMAGE_PCT_FORMAT:format(EM), DAMAGE_PCT_FORMAT:format(Exp), DAMAGE_PCT_FORMAT:format(Kin), DAMAGE_PCT_FORMAT:format(The))
  94.     else
  95.         print("", "Turrets:", "N/A", "N/A", "N/A", "N/A")
  96.     end
  97.  
  98.     local missile_total = missiles.EM + missiles.Exp + missiles.Kin + missiles.The
  99.     local total = turret_total + missile_total
  100.     if missile_total > 0 then
  101.         local EM = (missiles.EM * 100)/(missile_total)
  102.         local Exp = (missiles.Exp * 100)/(missile_total)
  103.         local Kin = (missiles.Kin * 100)/(missile_total)
  104.         local The = (missiles.The * 100)/(missile_total)
  105.         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))
  106.     else
  107.         print("", "Missiles (0%):", "N/A", "N/A", "N/A", "N/A")
  108.     end
  109.    
  110.     if total > 0 then
  111.         local EM = ((turrets.EM + missiles.EM) * 100)/(total)
  112.         local Exp = ((turrets.Exp + missiles.Exp) * 100)/(total)
  113.         local Kin = ((turrets.Kin + missiles.Kin) * 100)/(total)
  114.         local The = ((turrets.The + missiles.The) * 100)/(total)
  115.         print("", "Overall Damage:", DAMAGE_PCT_FORMAT:format(EM), DAMAGE_PCT_FORMAT:format(Exp), DAMAGE_PCT_FORMAT:format(Kin), DAMAGE_PCT_FORMAT:format(The))
  116.     else
  117.         print("", "Overall Damage:", "N/A", "N/A", "N/A", "N/A")
  118.     end
  119. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement