Author: anonymissimus
Date: Mon Oct 24 00:57:09 2011
New Revision: 51601

URL: http://svn.gna.org/viewcvs/wesnoth?rev=51601&view=rev
Log:
write and reload endlevel data when saving in linger mode (fix for bug #16111)

There obviously existed an [endlevel] tag in the savegame at some time
but it must have been lost. Added read and write method
to struct end_level_data.

Modified:
    trunk/src/game_end_exceptions.hpp
    trunk/src/play_controller.cpp
    trunk/src/playsingle_controller.cpp

Modified: trunk/src/game_end_exceptions.hpp
URL: 
http://svn.gna.org/viewcvs/wesnoth/trunk/src/game_end_exceptions.hpp?rev=51601&r1=51600&r2=51601&view=diff
==============================================================================
--- trunk/src/game_end_exceptions.hpp (original)
+++ trunk/src/game_end_exceptions.hpp Mon Oct 24 00:57:09 2011
@@ -25,6 +25,9 @@
 
 #include "lua_jailbreak_exception.hpp"
 #include <string>
+
+#include "config.hpp"
+#include "game_config.hpp"
 
 enum LEVEL_RESULT {
        NONE,
@@ -89,7 +92,7 @@
                , replay_save(true)
                , linger_mode(true)
                , gold_bonus(true)
-               , carryover_percentage(80)
+               , carryover_percentage(game_config::gold_carryover_percentage)
                , carryover_add(false)
                , custom_endlevel_music()
                , reveal_map(true)
@@ -104,6 +107,23 @@
        bool carryover_add;                /**< Add or replace next scenario's 
minimum starting gold. */
        std::string custom_endlevel_music; /**< Custom short music played at 
the end. */
        bool reveal_map;                   /**< Should we reveal map when game 
is ended? (Multiplayer only) */
+
+       void write(config& cfg) const {
+               cfg["prescenario_save"] = prescenario_save;
+               cfg["replay_save"] = replay_save;
+               cfg["bonus"] = gold_bonus;
+               cfg["carryover_percentage"] = carryover_percentage;
+               cfg["carryover_add"] = carryover_add;
+       }
+
+       void read(const config& cfg) {
+               prescenario_save = cfg["prescenario_save"].to_bool(true);
+               replay_save = cfg["replay_save"].to_bool(true);
+               gold_bonus = cfg["bonus"].to_bool(true);
+               carryover_percentage = 
cfg["carryover_percentage"].to_int(game_config::gold_carryover_percentage);
+               carryover_add = cfg["carryover_add"].to_bool(false);
+       }
+
 };
 
 #endif /* ! GAME_END_EXCEPTIONS_HPP_INCLUDED */

Modified: trunk/src/play_controller.cpp
URL: 
http://svn.gna.org/viewcvs/wesnoth/trunk/src/play_controller.cpp?rev=51601&r1=51600&r2=51601&view=diff
==============================================================================
--- trunk/src/play_controller.cpp (original)
+++ trunk/src/play_controller.cpp Mon Oct 24 00:57:09 2011
@@ -689,6 +689,12 @@
 
        cfg.merge_with(tod_manager_.to_config());
 
+       if(linger_) {
+               config endlevel;
+               end_level_data_.write(endlevel);
+               cfg.add_child("endlevel", endlevel);
+       }
+
        // Write terrain_graphics data in snapshot, too
        foreach (const config &tg, level_.child_range("terrain_graphics")) {
                cfg.add_child("terrain_graphics", tg);

Modified: trunk/src/playsingle_controller.cpp
URL: 
http://svn.gna.org/viewcvs/wesnoth/trunk/src/playsingle_controller.cpp?rev=51601&r1=51600&r2=51601&view=diff
==============================================================================
--- trunk/src/playsingle_controller.cpp (original)
+++ trunk/src/playsingle_controller.cpp Mon Oct 24 00:57:09 2011
@@ -376,10 +376,7 @@
                // if we loaded a save file in linger mode, skip to it.
                if (linger_) {
                        //determine the bonus gold handling for this scenario
-                       const config end_cfg = 
level_.child_or_empty("endlevel");
-                       end_level.carryover_percentage = 
level_["carryover_percentage"].to_int(game_config::gold_carryover_percentage);
-                       end_level.carryover_add = 
level_["carryover_add"].to_bool();
-                       end_level.gold_bonus = end_cfg["bonus"].to_bool(true);
+                       end_level.read(level_.child_or_empty("endlevel"));
                        end_level.carryover_report = false;
                        throw end_level_exception(SKIP_TO_LINGER);
                }


_______________________________________________
Wesnoth-commits mailing list
[email protected]
https://mail.gna.org/listinfo/wesnoth-commits

Reply via email to