mirror of
https://github.com/wesnoth/wesnoth
synced 2025-05-08 15:18:40 +00:00
add support to create scenarios in lua also
This commit is contained in:
parent
ce99658dfe
commit
d8fcd104ae
@ -150,6 +150,7 @@ lua_map_generator::lua_map_generator(const config & cfg)
|
|||||||
: id_(cfg["id"])
|
: id_(cfg["id"])
|
||||||
, config_name_(cfg["config_name"])
|
, config_name_(cfg["config_name"])
|
||||||
, create_map_(cfg["create_map"])
|
, create_map_(cfg["create_map"])
|
||||||
|
, create_scenario_(cfg["create_scenario"])
|
||||||
, mState_(luaL_newstate())
|
, mState_(luaL_newstate())
|
||||||
{
|
{
|
||||||
const char* required[] = {"id", "config_name", "create_map"};
|
const char* required[] = {"id", "config_name", "create_map"};
|
||||||
@ -214,3 +215,44 @@ std::string lua_map_generator::create_map()
|
|||||||
}
|
}
|
||||||
return lua_tostring(mState_, -1);
|
return lua_tostring(mState_, -1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
config lua_map_generator::create_scenario()
|
||||||
|
{
|
||||||
|
if (!create_scenario_.size()) {
|
||||||
|
return map_generator::create_scenario();
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
int errcode = luaL_loadstring(mState_, create_scenario_.c_str());
|
||||||
|
if (errcode != LUA_OK) {
|
||||||
|
std::string msg = "Error when running lua_map_generator create_scenario.\n";
|
||||||
|
msg += "The generator was: " + config_name_ + "\n";
|
||||||
|
msg += "Error when parsing create_scenario function. ";
|
||||||
|
if (errcode == LUA_ERRSYNTAX) {
|
||||||
|
msg += "There was a syntax error:\n";
|
||||||
|
} else {
|
||||||
|
msg += "There was a memory error:\n";
|
||||||
|
}
|
||||||
|
msg += lua_tostring(mState_, -1);
|
||||||
|
throw mapgen_exception(msg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
{
|
||||||
|
int errcode = lua_pcall(mState_, 0, 1, 0);
|
||||||
|
if (errcode != LUA_OK) {
|
||||||
|
std::string msg = "Error when running lua_map_generator create_scenario.\n";
|
||||||
|
msg += "The generator was: " + config_name_ + "\n";
|
||||||
|
msg += "Error when running create_scenario function. ";
|
||||||
|
if (errcode == LUA_ERRRUN) {
|
||||||
|
msg += "There was a runtime error:\n";
|
||||||
|
} else if (errcode == LUA_ERRERR) {
|
||||||
|
msg += "There was an error with the attached debugger:\n";
|
||||||
|
} else {
|
||||||
|
msg += "There was a memory or garbage collection error:\n";
|
||||||
|
}
|
||||||
|
msg += lua_tostring(mState_, -1);
|
||||||
|
throw mapgen_exception(msg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return luaW_checkconfig(mState_, -1);
|
||||||
|
}
|
||||||
|
@ -41,11 +41,13 @@ public:
|
|||||||
std::string config_name() const { return config_name_; }
|
std::string config_name() const { return config_name_; }
|
||||||
|
|
||||||
virtual std::string create_map();
|
virtual std::string create_map();
|
||||||
|
virtual config create_scenario();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::string id_, config_name_;
|
std::string id_, config_name_;
|
||||||
|
|
||||||
std::string create_map_;
|
std::string create_map_;
|
||||||
|
std::string create_scenario_;
|
||||||
|
|
||||||
lua_State * mState_;
|
lua_State * mState_;
|
||||||
};
|
};
|
||||||
|
Loading…
x
Reference in New Issue
Block a user