Line 1: |
Line 1: |
| + | local U = require('Module:Core') |
| + | local EquipmentData = require('Module:EquipmentData') |
| + | |
| + | local EquipmentCollection = mw.loadData('Module:Data/Equipment') |
| + | |
| local Equipment = {} | | local Equipment = {} |
| | | |
| local equipments = {} | | local equipments = {} |
| | | |
− | local EquipmentData = require('Module:EquipmentData') | + | local function requireEquipmentModule(name, is_enemy) |
| + | local success, data |
| + | if not is_enemy then |
| + | success, data = U.requireModule('Data/Equipment/' .. name) |
| + | if not success then |
| + | success, data = U.requireModule('Data/Item/' .. name) |
| + | end |
| + | if not success then |
| + | success, data = U.requireModule('Data/PseudoItem/' .. name) |
| + | end |
| + | if not success then |
| + | data = U.find(EquipmentCollection, name, '_name') |
| + | -- success = true |
| + | end |
| + | end |
| + | if not success then |
| + | success, data = U.requireModule('Data/EnemyEquipment/' .. name) |
| + | end |
| + | if not success then |
| + | return {_name = name} |
| + | end |
| + | data._is_enemy = is_enemy |
| + | return data |
| + | end |
| + | |
| + | function Equipment:create(name, is_enemy) |
| + | if not name then |
| + | return EquipmentData() |
| + | end |
| + | if not equipments[name] then |
| + | equipments[name] = EquipmentData(requireEquipmentModule(name, is_enemy)) |
| + | end |
| + | return equipments[name] |
| + | end |
| | | |
| function Equipment:get(stat, name) | | function Equipment:get(stat, name) |
− | return self:create(name)[stat]()
| + | return self:create(name)[stat]() |
| end | | end |
| | | |
− | function Equipment:create(name) | + | function Equipment:get_module(name, typeName) |
− | if name == nil then
| + | return name and string.format('Module:Data/%s/%s', typeName or 'Equipment', name) or nil |
− | return EquipmentData()
| |
− | --check if we already have it
| |
− | elseif equipments[name] then
| |
− | return equipments[name]
| |
− | else
| |
− | --Catch a failed require
| |
− | local success, equipment_table = pcall(function () return require(mw.ustring.format('Module:%s', name)) end)
| |
− | --require failed
| |
− | if not success then
| |
− | --create a EquipmentData with what we have
| |
− | equipment_table = {_name = name}
| |
− | end
| |
− | local equipment = EquipmentData(equipment_table)
| |
− | equipments[name] = equipment
| |
− | return equipment
| |
− | end
| |
| end | | end |
| | | |
− | function Equipment:get_module(name) | + | function Equipment:extend(data) |
− | if name == nil then
| + | data = data or {} |
− | return nil
| + | setmetatable(data, data) |
− | end
| + | data.__index = self |
− | return mw.ustring.format('Module:%s', name)
| + | data.__call = self.__call |
| + | return data |
| end | | end |
| | | |