Changes

Module containing class for ship data retrieval
local ShipData = {}

function ShipData:name(type, raw)
return self.format_stat(self._name, raw)
end

function ShipData:japanese_name(raw)
return self.format_stat(self._japanese_name, raw)
end

function ShipData:id(raw)
return self.format_stat(self._id, raw)
end

function ShipData:true_id(raw)
return self.format_stat(self._true_id, raw)
end

function ShipData:has_true_id()
return self._true_id == false
end

function ShipData:rarity(raw)
return self.format_rarity(self._rarity, raw)
end

function ShipData:class(raw)
return self.format_stat(self._class, raw)
end

function ShipData:type(raw)
return self.format_type(self._type, raw)
end

function ShipData:card(type)
return self._card
end

function ShipData:firepower(raw)
return self.format_stat(self._firepower, raw)
end

function ShipData:firepower_max(raw)
return self.format_stat(self._firepower_max, raw)
end

function ShipData:has_firepower_max()
return self._firepower_max ~= false
end

function ShipData:torpedo(raw)
return self.format_stat(self._torpedo, raw)
end

function ShipData:torpedo_max(raw)
return self.format_stat(self._torpedo_max, raw)
end

function ShipData:has_torpedo_max()
return self._torpedo_max ~= false
end

function ShipData:aa(raw)
return self.format_stat(self._aa, raw)
end

function ShipData:aa_max(raw)
return self.format_stat(self._aa_max, raw)
end

function ShipData:has_aa_max()
return self._aa_max ~= false
end

function ShipData:armor(raw)
return self.format_stat(self._armor, raw)
end

function ShipData:armor_max(raw)
return self.format_stat(self._armor_max, raw)
end

function ShipData:has_armor_max()
return self._armor_max ~= false
end

function ShipData:asw(raw)
return self.format_stat(self._asw, raw)
end

function ShipData:asw_max(raw)
return self.format_stat(self._asw_max, raw)
end

function ShipData:has_asw_max()
return self._asw_max ~= false
end

function ShipData:evasion(raw)
return self.format_stat(self._evasion, raw)
end

function ShipData:evasion_max(raw)
return self.format_stat(self._evasion_max, raw)
end

function ShipData:has_evasion_max()
return self._evasion_max ~= false
end

function ShipData:los(raw)
return self.format_stat(self._los, raw)
end

function ShipData:los_max(raw)
return self.format_stat(self._los_max, raw)
end

function ShipData:has_los_max()
return self._los_max ~= false
end

function ShipData:luck(raw)
return self.format_stat(self._luck, raw)
end

function ShipData:luck_max(raw)
return self.format_stat(self._luck_max, raw)
end

function ShipData:has_luck_max()
return self._luck_max ~= false
end

function ShipData:buildable()
return self._buildable
end

function ShipData.build_time(raw)
if raw then
return self._build_time
elseif self._build_time then
return os.date(self._build_time * 60)
else
return "??"
end
end

function ShipData:equipment(slot, raw)
local equipment_slot = self._equipment[slot]
if not equipment_slot then
return not raw and "- Locked -" or nil
end
local equipment = equipment_slot["equipment"]
if raw then
return equipment
elseif equipment == nil then
return "??"
elseif equipment == false then
return "- Unequipped -"
else
return equipment
end
end

function ShipData:space(slot, raw)
local equipment_slot = self._equipment[slot]
if not equipment_slot then
return not raw and "-" or nil
end
local space = equipment_slot["space"]
if space == nil then
return "??"
elseif space == false then
return "-"
else
return space
end
end

function ShipData:slots()
return #self._equipment
end

function ShipData:total_space()
local total_space, space
for _, v in ipairs(self._equipment) do
space = v["space"]
if space == nil then
total_space = "??"
break
elseif space == false then
else
total_space = total_space + space
end
end
return total_space
end

function ShipData.speed()
return self.format_speed(self._speed)
end

function ShipData.range()
return self.format_range(self._speed)
end

function ShipData.create_formatter(lookup)
return function(stat, raw)
if raw then
return stat
elseif stat == nil then
return "??"
end
local result = lookup[stat]
if result == nil then
return stat
else
return result
end
end
end

ShipData.format_stat = ShipData.create_formatter({
[false] = "",
})

ShipData.format_speed = ShipData.create_formatter({
[5] = "Slow",
[10] = "Fast",
})

ShipData.format_range = ShipData.create_formatter({
[1] = "Short",
[2] = "Medium",
[3] = "Long",
[0] = "Very Short",
[4] = "Very Long",
})

ShipData.format_rarity = ShipData.create_formatter({
[0] = "??",
[1] = "Very Common",
[2] = "Common",
[3] = "Uncommon",
[4] = "Rare",
[5] = "Very Rare",
[6] = "Holo",
[7] = "S Holo",
[8] = "SS Holo",
[-1] = "Abyssal",
[-2] = "Elite",
[-3] = "Flagship",
[-4] = "Kai",
[-5] = "Kai Elite",
[-6] = "Kai Flagship",
[-7] = "Late Model",
float = "Floating Fortress",
demon = "Demon",
princess = "Princess",
war_demon = "War Demon",
war_princess = "War Princess",
})

ShipData.format_type = ShipData.create_formatter({
[0] = "??",
[1] = "Coastal Defence ShipData",
[2] = "Destroyer",
[3] = "Light Cruiser",
[4] = "Torpedo Cruiser",
[5] = "Heavy Cruiser",
[6] = "Aviation Cruiser",
[7] = "Light Carrier",
[8] = "Battleship",
[9] = "Battleship",
[10] = "Aviation Battleship",
[11] = "Standard Carrier",
[12] = "Super Dreadnought",
[13] = "Submarine",
[14] = "Aircraft Carrying Submarine",
[15] = "Replenishment Oiler",
[16] = "Seaplane Tender",
[17] = "Amphibious Assault Ship",
[18] = "Armored Carrier",
[19] = "Repair Ship",
[20] = "Submarine Tender",
})

function ShipData:create(ship)
ship = ship or {}
setmetatable(ship, self)
self.__index = self
return ship
end

ShipData.__call = ShipData.create

return ShipData
Anonymous user