mirror of
https://github.com/wesnoth/wesnoth
synced 2025-05-07 10:51:11 +00:00
Removed objectives from WML variables and put them inside toplevel tags.
This commit is contained in:
parent
a8745323fe
commit
8e8a4f9637
@ -21,6 +21,32 @@ local function insert_before_nl(s, t)
|
|||||||
return string.gsub(tostring(s), "[^\n]*", "%0" .. t, 1)
|
return string.gsub(tostring(s), "[^\n]*", "%0" .. t, 1)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local scenario_objectives = {}
|
||||||
|
|
||||||
|
local objectives_old_save = wesnoth.game_events.on_save
|
||||||
|
local objectives_old_load = wesnoth.game_events.on_load
|
||||||
|
|
||||||
|
function wesnoth.game_events.on_save()
|
||||||
|
local custom_cfg = objectives_old_save and objectives_old_saves() or {}
|
||||||
|
for i,v in pairs(scenario_objectives) do
|
||||||
|
v.side = i
|
||||||
|
table.insert(custom_cfg, { "objectives", v })
|
||||||
|
end
|
||||||
|
return custom_cfg
|
||||||
|
end
|
||||||
|
|
||||||
|
function wesnoth.game_events.on_load(cfg)
|
||||||
|
for i = #cfg,1,-1 do
|
||||||
|
local v = cfg[i]
|
||||||
|
if v[1] == "objectives" then
|
||||||
|
local v2 = v[2]
|
||||||
|
scenario_objectives[v2.side or 0] = v2
|
||||||
|
table.remove(cfg, i)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
if objectives_old_load then objectives_old_load(cfg) end
|
||||||
|
end
|
||||||
|
|
||||||
local function generate_objectives(cfg)
|
local function generate_objectives(cfg)
|
||||||
-- Note: when changing the text formatting, remember to check if you also
|
-- Note: when changing the text formatting, remember to check if you also
|
||||||
-- need to change the hardcoded default multiplayer objective text in
|
-- need to change the hardcoded default multiplayer objective text in
|
||||||
@ -127,7 +153,7 @@ function wml_actions.objectives(cfg)
|
|||||||
-- Save the objectives in a WML variable in case they have to be regenerated later.
|
-- Save the objectives in a WML variable in case they have to be regenerated later.
|
||||||
cfg.side = nil
|
cfg.side = nil
|
||||||
cfg.silent = nil
|
cfg.silent = nil
|
||||||
wesnoth.set_variable("__scenario_objectives_" .. side, cfg)
|
scenario_objectives[side] = cfg
|
||||||
|
|
||||||
-- Generate objectives for the given sides
|
-- Generate objectives for the given sides
|
||||||
local objectives = generate_objectives(cfg)
|
local objectives = generate_objectives(cfg)
|
||||||
@ -141,32 +167,22 @@ function wml_actions.objectives(cfg)
|
|||||||
team.objectives = objectives
|
team.objectives = objectives
|
||||||
if not silent then team.objectives_changed = true end
|
if not silent then team.objectives_changed = true end
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Prepare an event for removing objectives variables on output.
|
|
||||||
if not wesnoth.get_variable("__scenario_objectives_gc") then
|
|
||||||
wesnoth.set_variable("__scenario_objectives_gc", true)
|
|
||||||
local vars = "__scenario_objectives_gc,__scenario_objectives_0"
|
|
||||||
for side = 1, #wesnoth.sides do
|
|
||||||
vars = vars .. ",__scenario_objectives_" .. side
|
|
||||||
end
|
|
||||||
wml_actions.event { name="victory", { "clear_variable", { name = vars }}}
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
function wml_actions.show_objectives(cfg)
|
function wml_actions.show_objectives(cfg)
|
||||||
local side = cfg.side or 0
|
local side = cfg.side or 0
|
||||||
local cfg0 = wesnoth.get_variable("__scenario_objectives_0")
|
local cfg0 = scenario_objectives[0]
|
||||||
if side == 0 then
|
if side == 0 then
|
||||||
local objectives0 = cfg0 and generate_objectives(cfg0)
|
local objectives0 = cfg0 and generate_objectives(cfg0)
|
||||||
for side, team in ipairs(wesnoth.sides) do
|
for side, team in ipairs(wesnoth.sides) do
|
||||||
cfg = wesnoth.get_variable("__scenario_objectives_" .. side)
|
cfg = scenario_objectives[side]
|
||||||
local objectives = (cfg and generate_objectives(cfg)) or objectives0
|
local objectives = (cfg and generate_objectives(cfg)) or objectives0
|
||||||
if objectives then team.objectives = objectives end
|
if objectives then team.objectives = objectives end
|
||||||
team.objectives_changed = true
|
team.objectives_changed = true
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
local team = wesnoth.sides[side]
|
local team = wesnoth.sides[side]
|
||||||
cfg = wesnoth.get_variable("__scenario_objectives_" .. side) or cfg0
|
cfg = scenario_objectives[side] or cfg0
|
||||||
local objectives = cfg and generate_objectives(cfg)
|
local objectives = cfg and generate_objectives(cfg)
|
||||||
if objectives then team.objectives = objectives end
|
if objectives then team.objectives = objectives end
|
||||||
team.objectives_changed = true
|
team.objectives_changed = true
|
||||||
|
Loading…
x
Reference in New Issue
Block a user