Line 218: |
Line 218: |
| end | | end |
| | | |
− | function ship_cgs(ship_name, ship_suffix, j, seasonal_forms) | + | function ship_cgs(ship_name, ship_suffix, j, seasonal_forms, visited_modules) |
| + | ship_suffix = ship_suffix or "" |
| j = j or 1 | | j = j or 1 |
− | ship_suffix = ship_suffix or "" | + | seasonal_forms = seasonal_forms or {} |
| + | visited_modules = visited_modules or {} |
| local forms = { { name = ship_name .. '/' .. ship_suffix, normal = true, damaged = true } } | | local forms = { { name = ship_name .. '/' .. ship_suffix, normal = true, damaged = true } } |
| local success, ship_data = Ship.requireModule(ship_name) | | local success, ship_data = Ship.requireModule(ship_name) |
Line 226: |
Line 228: |
| return forms | | return forms |
| end | | end |
− | local form_data = ship_data[ship_suffix] | + | if not U.ifind(visited_modules, ship_name) then |
− | seasonal_forms = seasonal_forms or {}
| + | table.insert(visited_modules, ship_name) |
− | for suffix, data in pairs(ship_data) do
| + | -- TODO: legacy seasonals, check if it is ok to delete |
− | if data._seasonal or data._season then
| + | for suffix, data in pairs(ship_data) do |
− | local normal = data._cg ~= false
| + | if data._seasonal or data._season then |
− | local damaged = data._cg_damaged ~= false
| + | local normal = data._cg ~= false |
− | table.insert(seasonal_forms, {
| + | local damaged = data._cg_damaged ~= false |
− | suffux = data._suffix or suffix,
| + | table.insert(seasonal_forms, { |
− | name = (data._name or ship_name) .. "/" .. (data._suffix or suffix),
| + | suffux = data._suffix or suffix, |
− | seasonal = true,
| + | name = (data._name or ship_name) .. "/" .. (data._suffix or suffix), |
− | normal = normal,
| + | seasonal = true, |
− | damaged = damaged,
| + | normal = normal, |
− | season = data._season,
| + | damaged = damaged, |
− | season_suffix = data._season_suffix,
| + | season = data._season, |
− | battle_card = data._show_battle_card,
| + | season_suffix = data._season_suffix, |
− | })
| + | battle_card = data._show_battle_card, |
− | end
| + | }) |
− | end
| + | end |
− | for _, data in ipairs(ship_data.seasonals or {}) do
| + | end |
− | local normal = data._cg ~= false
| + | for _, data in ipairs(ship_data.seasonals or {}) do |
− | local damaged = data._cg_damaged ~= false
| + | local normal = data._cg ~= false |
− | table.insert(seasonal_forms, {
| + | local damaged = data._cg_damaged ~= false |
− | suffux = data._suffix,
| + | table.insert(seasonal_forms, { |
− | name = (data._name or ship_name) .. "/" .. data._suffix,
| + | suffux = data._suffix, |
− | seasonal = true,
| + | name = (data._name or ship_name) .. "/" .. data._suffix, |
− | normal = normal,
| + | seasonal = true, |
− | damaged = damaged,
| + | normal = normal, |
− | season = data._season,
| + | damaged = damaged, |
− | season_suffix = data._season_suffix,
| + | season = data._season, |
− | battle_card = data._show_battle_card,
| + | season_suffix = data._season_suffix, |
− | })
| + | battle_card = data._show_battle_card, |
| + | }) |
| + | end |
| end | | end |
| local i = 1 | | local i = 1 |
| + | local form_data = ship_data[ship_suffix] |
| while form_data and form_data._remodel_to and not U.find(forms, form_data._remodel_to, 'name') and i <= 15 and j <= 3 do | | while form_data and form_data._remodel_to and not U.find(forms, form_data._remodel_to, 'name') and i <= 15 and j <= 3 do |
| local ship_name_next, ship_suffix_next = Ship:process_ship_key(form_data._remodel_to) | | local ship_name_next, ship_suffix_next = Ship:process_ship_key(form_data._remodel_to) |
| if ship_name_next ~= ship_name then | | if ship_name_next ~= ship_name then |
− | return U.concat(forms, ship_cgs(ship_name_next, ship_suffix_next, j + 1, seasonal_forms)) | + | return U.concat(forms, ship_cgs(ship_name_next, ship_suffix_next, j + 1, seasonal_forms, visited_modules)) |
| else | | else |
| local name = form_data._remodel_to | | local name = form_data._remodel_to |