本文整理汇总了C++中JsonObject::get_string_array方法的典型用法代码示例。如果您正苦于以下问题:C++ JsonObject::get_string_array方法的具体用法?C++ JsonObject::get_string_array怎么用?C++ JsonObject::get_string_array使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类JsonObject
的用法示例。
在下文中一共展示了JsonObject::get_string_array方法的13个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: load
void furn_t::load( JsonObject &jo )
{
mandatory( jo, was_loaded, "name", name, translated_string_reader );
mandatory( jo, was_loaded, "move_cost_mod", movecost );
mandatory( jo, was_loaded, "required_str", move_str_req );
optional( jo, was_loaded, "max_volume", max_volume, legacy_volume_reader, DEFAULT_MAX_VOLUME_IN_SQUARE );
optional( jo, was_loaded, "crafting_pseudo_item", crafting_pseudo_item, "" );
load_symbol( jo );
transparent = false;
for( auto & flag : jo.get_string_array( "flags" ) ) {
set_flag( flag );
}
if( jo.has_member( "examine_action" ) ) {
examine = iexamine_function_from_string( jo.get_string( "examine_action" ) );
} else {
examine = iexamine_function_from_string( "none" );
}
optional( jo, was_loaded, "open", open, string_id_reader<furn_t> {}, NULL_ID );
optional( jo, was_loaded, "close", close, string_id_reader<furn_t> {}, NULL_ID );
bash.load( jo, "bash", true );
deconstruct.load( jo, "deconstruct", true );
}
示例2: load
void ter_t::load( JsonObject &jo, const std::string &src )
{
map_data_common_t::load( jo, src );
mandatory( jo, was_loaded, "name", name_ );
mandatory( jo, was_loaded, "move_cost", movecost );
optional( jo, was_loaded, "max_volume", max_volume, legacy_volume_reader, DEFAULT_MAX_VOLUME_IN_SQUARE );
optional( jo, was_loaded, "trap", trap_id_str );
load_symbol( jo );
trap = tr_null;
transparent = false;
connect_group = TERCONN_NONE;
for( auto &flag : jo.get_string_array( "flags" ) ) {
set_flag( flag );
}
// connect_group is initialized to none, then terrain flags are set, then finally
// connections from JSON are set. This is so that wall flags can set wall connections
// but can be overridden by explicit connections in JSON.
if( jo.has_member( "connects_to" ) ) {
set_connects( jo.get_string( "connects_to" ) );
}
optional( jo, was_loaded, "open", open, ter_str_id::NULL_ID() );
optional( jo, was_loaded, "close", close, ter_str_id::NULL_ID() );
optional( jo, was_loaded, "transforms_into", transforms_into, ter_str_id::NULL_ID() );
optional( jo, was_loaded, "roof", roof, ter_str_id::NULL_ID() );
bash.load( jo, "bash", false );
deconstruct.load( jo, "deconstruct", false );
}
示例3: load
void mutation_branch::load( JsonObject &jsobj )
{
const std::string id = jsobj.get_string( "id" );
mutation_branch &new_mut = mutation_data[id];
JsonArray jsarr;
new_mut.name = _(jsobj.get_string("name").c_str());
new_mut.description = _(jsobj.get_string("description").c_str());
new_mut.points = jsobj.get_int("points");
new_mut.visibility = jsobj.get_int("visibility", 0);
new_mut.ugliness = jsobj.get_int("ugliness", 0);
new_mut.startingtrait = jsobj.get_bool("starting_trait", false);
new_mut.mixed_effect = jsobj.get_bool("mixed_effect", false);
new_mut.activated = jsobj.get_bool("active", false);
new_mut.cost = jsobj.get_int("cost", 0);
new_mut.cooldown = jsobj.get_int("time",0);
new_mut.hunger = jsobj.get_bool("hunger",false);
new_mut.thirst = jsobj.get_bool("thirst",false);
new_mut.fatigue = jsobj.get_bool("fatigue",false);
new_mut.valid = jsobj.get_bool("valid", true);
new_mut.purifiable = jsobj.get_bool("purifiable", true);
new_mut.initial_ma_styles = jsobj.get_string_array( "initial_ma_styles" );
new_mut.threshold = jsobj.get_bool("threshold", false);
new_mut.profession = jsobj.get_bool("profession", false);
load_mutation_mods(jsobj, "passive_mods", new_mut.mods);
/* Not currently supported due to inability to save active mutation state
load_mutation_mods(jsobj, "active_mods", new_mut.mods); */
new_mut.prereqs = jsobj.get_string_array( "prereqs" );
// Helps to be able to have a trait require more than one other trait
// (Individual prereq-lists are "OR", not "AND".)
// Traits shoud NOT appear in both lists for a given mutation, unless
// you want that trait to satisfy both requirements.
// These are additional to the first list.
new_mut.prereqs2 = jsobj.get_string_array( "prereqs2" );
// Dedicated-purpose prereq slot for Threshold mutations
// Stuff like Huge might fit in more than one mutcat post-threshold, so yeah
new_mut.threshreq = jsobj.get_string_array( "threshreq" );
new_mut.cancels = jsobj.get_string_array( "cancels" );
new_mut.replacements = jsobj.get_string_array( "changes_to" );
new_mut.additions = jsobj.get_string_array( "leads_to" );
jsarr = jsobj.get_array("category");
while (jsarr.has_more()) {
std::string s = jsarr.next_string();
new_mut.category.push_back(s);
mutations_category[s].push_back(id);
}
jsarr = jsobj.get_array("wet_protection");
while (jsarr.has_more()) {
JsonObject jo = jsarr.next_object();
std::string part_id = jo.get_string("part");
int ignored = jo.get_int("ignored", 0);
int neutral = jo.get_int("neutral", 0);
int good = jo.get_int("good", 0);
tripoint protect = tripoint(ignored, neutral, good);
new_mut.protection[part_id] = mutation_wet(body_parts[part_id], protect);
}
}
示例4: load
void ter_t::load( JsonObject &jo )
{
mandatory( jo, was_loaded, "name", name, translated_string_reader );
mandatory( jo, was_loaded, "move_cost", movecost );
optional( jo, was_loaded, "max_volume", max_volume, MAX_VOLUME_IN_SQUARE );
optional( jo, was_loaded, "trap", trap_id_str );
load_symbol( jo );
trap = tr_null;
transparent = false;
connect_group = TERCONN_NONE;
for( auto &flag : jo.get_string_array( "flags" ) ) {
set_flag( flag );
}
// connect_group is initialised to none, then terrain flags are set, then finally
// connections from JSON are set. This is so that wall flags can set wall connections
// but can be overridden by explicit connections in JSON.
if( jo.has_member( "connects_to" ) ) {
set_connects( jo.get_string( "connects_to" ) );
}
if( jo.has_member( "examine_action" ) ) {
examine = iexamine_function_from_string( jo.get_string( "examine_action" ) );
} else {
examine = iexamine_function_from_string( "none" );
}
optional( jo, was_loaded, "harvestable", harvestable );
optional( jo, was_loaded, "open", open, NULL_ID );
optional( jo, was_loaded, "close", close, NULL_ID );
optional( jo, was_loaded, "transforms_into", transforms_into, NULL_ID );
optional( jo, was_loaded, "roof", roof, NULL_ID );
if( jo.has_member("harvest_season") ) {
const std::string season = jo.get_string( "harvest_season" );
if( season == "SPRING" ) {
harvest_season = season_type::SPRING;
} else if( season == "SUMMER" ) {
harvest_season = season_type::SUMMER;
} else if( season == "AUTUMN" ) {
harvest_season = season_type::AUTUMN;
} else if( season == "WINTER" ) {
harvest_season = season_type::WINTER;
} else {
harvest_season = season_type::AUTUMN;
debugmsg( "Invalid harvest season \"%s\" in \"%s\".", season.c_str(), id.c_str() );
}
}
bash.load( jo, "bash", false );
deconstruct.load( jo, "deconstruct", false );
}
示例5: load_furniture
void load_furniture(JsonObject &jsobj)
{
if ( furnlist.empty() ) {
furn_t new_null = null_furniture_t();
furnmap[new_null.id] = new_null;
furnlist.push_back(new_null);
}
furn_t new_furniture;
new_furniture.id = jsobj.get_string("id");
if ( new_furniture.id == "f_null" ) {
return;
}
new_furniture.name = _(jsobj.get_string("name").c_str());
new_furniture.load_symbol( jsobj );
new_furniture.movecost = jsobj.get_int("move_cost_mod");
new_furniture.move_str_req = jsobj.get_int("required_str");
new_furniture.max_volume = jsobj.get_int("max_volume", MAX_VOLUME_IN_SQUARE);
new_furniture.crafting_pseudo_item = jsobj.get_string("crafting_pseudo_item", "");
new_furniture.transparent = false;
for( auto & flag : jsobj.get_string_array( "flags" ) ) {
new_furniture.set_flag( flag );
}
if(jsobj.has_member("examine_action")) {
std::string function_name = jsobj.get_string("examine_action");
new_furniture.examine = iexamine_function_from_string(function_name);
} else {
//If not specified, default to no action
new_furniture.examine = iexamine_function_from_string("none");
}
new_furniture.open = "";
if ( jsobj.has_member("open") ) {
new_furniture.open = jsobj.get_string("open");
}
new_furniture.close = "";
if ( jsobj.has_member("close") ) {
new_furniture.close = jsobj.get_string("close");
}
new_furniture.bash.load(jsobj, "bash", true);
new_furniture.deconstruct.load(jsobj, "deconstruct", true);
new_furniture.loadid = furn_id( furnlist.size() );
furnmap[new_furniture.id] = new_furniture;
furnlist.push_back(new_furniture);
}
示例6: deserialize
void player_activity::deserialize(JsonIn &jsin)
{
JsonObject data = jsin.get_object();
int tmptype;
int tmpinv;
if ( !data.read( "type", tmptype ) || type >= NUM_ACTIVITIES ) {
debugmsg( "Bad activity data:\n%s", data.str().c_str() );
}
type = activity_type(tmptype);
data.read( "moves_left", moves_left );
data.read( "index", index );
data.read( "invlet", tmpinv );
invlet = (char)tmpinv;
data.read( "name", name );
data.read( "placement", placement );
values = data.get_int_array("values");
str_values = data.get_string_array("str_values");
}
示例7: deserialize
void player_activity::deserialize(JsonIn &jsin)
{
JsonObject data = jsin.get_object();
int tmptype;
int tmppos;
if ( !data.read( "type", tmptype ) || type >= NUM_ACTIVITIES ) {
debugmsg( "Bad activity data:\n%s", data.str().c_str() );
}
if ( !data.read( "position", tmppos)) {
tmppos = INT_MIN; // If loading a save before position existed, hope.
}
type = activity_type(tmptype);
data.read( "moves_left", moves_left );
data.read( "index", index );
position = tmppos;
data.read( "name", name );
data.read( "placement", placement );
values = data.get_int_array("values");
str_values = data.get_string_array("str_values");
}
示例8: load_terrain
void load_terrain(JsonObject &jsobj)
{
if ( terlist.empty() ) {
ter_t new_null = null_terrain_t();
termap[new_null.id] = new_null;
terlist.push_back(new_null);
}
ter_t new_terrain;
new_terrain.id = jsobj.get_string("id");
if ( new_terrain.id == "t_null" ) {
return;
}
new_terrain.name = _(jsobj.get_string("name").c_str());
//Special case for the LINE_ symbols
std::string symbol = jsobj.get_string("symbol");
if("LINE_XOXO" == symbol) {
new_terrain.sym = LINE_XOXO;
} else if("LINE_OXOX" == symbol) {
new_terrain.sym = LINE_OXOX;
} else {
new_terrain.sym = symbol.c_str()[0];
}
new_terrain.color = color_from_string(jsobj.get_string("color"));
new_terrain.movecost = jsobj.get_int("move_cost");
if(jsobj.has_member("trap")) {
// Store the string representation of the trap id.
// Overwrites the trap field in set_trap_ids() once ids are assigned..
new_terrain.trap_id_str = jsobj.get_string("trap");
}
new_terrain.trap = tr_null;
new_terrain.max_volume = jsobj.get_int("max_volume", MAX_VOLUME_IN_SQUARE);
new_terrain.transparent = false;
for( auto & flag : jsobj.get_string_array( "flags" ) ) {
new_terrain.set_flag( flag );
}
if(jsobj.has_member("examine_action")) {
std::string function_name = jsobj.get_string("examine_action");
new_terrain.examine = iexamine_function_from_string(function_name);
} else {
// if not specified, default to no action
new_terrain.examine = iexamine_function_from_string("none");
}
// if the terrain has something harvestable
if (jsobj.has_member("harvestable")) {
new_terrain.harvestable = jsobj.get_string("harvestable"); // get the harvestable
}
if (jsobj.has_member("transforms_into")) {
new_terrain.transforms_into = jsobj.get_string("transforms_into"); // get the terrain to transform into later on
}
if (jsobj.has_member("harvest_season")) {
//get the harvest season
if (jsobj.get_string("harvest_season") == "SPRING") {new_terrain.harvest_season = 0;} // convert the season to int for calendar compare
else if (jsobj.get_string("harvest_season") == "SUMMER") {new_terrain.harvest_season = 1;}
else if (jsobj.get_string("harvest_season") == "AUTUMN") {new_terrain.harvest_season = 2;}
else {new_terrain.harvest_season = 3;}
}
new_terrain.open = "";
if ( jsobj.has_member("open") ) {
new_terrain.open = jsobj.get_string("open");
}
new_terrain.close = "";
if ( jsobj.has_member("close") ) {
new_terrain.close = jsobj.get_string("close");
}
new_terrain.bash.load(jsobj, "bash", false);
new_terrain.deconstruct.load(jsobj, "deconstruct", false);
new_terrain.loadid=terlist.size();
termap[new_terrain.id]=new_terrain;
terlist.push_back(new_terrain);
}
示例9: load_furniture
void load_furniture(JsonObject &jsobj)
{
if ( furnlist.empty() ) {
furn_t new_null = null_furniture_t();
furnmap[new_null.id] = new_null;
furnlist.push_back(new_null);
}
furn_t new_furniture;
new_furniture.id = jsobj.get_string("id");
if ( new_furniture.id == "f_null" ) {
return;
}
new_furniture.name = _(jsobj.get_string("name").c_str());
new_furniture.sym = jsobj.get_string("symbol").c_str()[0];
bool has_color = jsobj.has_member("color");
bool has_bgcolor = jsobj.has_member("bgcolor");
if(has_color && has_bgcolor) {
debugmsg("Found both color and bgcolor for %s, use only one of these.", new_furniture.name.c_str());
new_furniture.color = c_white;
} else if(has_color) {
new_furniture.color = color_from_string(jsobj.get_string("color"));
} else if(has_bgcolor) {
new_furniture.color = bgcolor_from_string(jsobj.get_string("bgcolor"));
} else {
debugmsg("Furniture %s needs at least one of: color, bgcolor.", new_furniture.name.c_str());
}
new_furniture.movecost = jsobj.get_int("move_cost_mod");
new_furniture.move_str_req = jsobj.get_int("required_str");
new_furniture.max_volume = jsobj.get_int("max_volume", MAX_VOLUME_IN_SQUARE);
new_furniture.crafting_pseudo_item = jsobj.get_string("crafting_pseudo_item", "");
new_furniture.transparent = false;
for( auto & flag : jsobj.get_string_array( "flags" ) ) {
new_furniture.set_flag( flag );
}
if(jsobj.has_member("examine_action")) {
std::string function_name = jsobj.get_string("examine_action");
new_furniture.examine = iexamine_function_from_string(function_name);
} else {
//If not specified, default to no action
new_furniture.examine = iexamine_function_from_string("none");
}
new_furniture.open = "";
if ( jsobj.has_member("open") ) {
new_furniture.open = jsobj.get_string("open");
}
new_furniture.close = "";
if ( jsobj.has_member("close") ) {
new_furniture.close = jsobj.get_string("close");
}
new_furniture.bash.load(jsobj, "bash", true);
new_furniture.deconstruct.load(jsobj, "deconstruct", true);
new_furniture.loadid = furnlist.size();
furnmap[new_furniture.id] = new_furniture;
furnlist.push_back(new_furniture);
}
示例10: load_modfile
void mod_manager::load_modfile(JsonObject &jo, const std::string &main_path)
{
if (!jo.has_string("type") || jo.get_string("type") != "MOD_INFO") {
// Ignore anything that is not a mod-info
return;
}
std::string m_ident = jo.get_string("ident");
if (has_mod(m_ident)) {
// TODO: change this to make unique ident for the mod
// (instead of discarding it?)
debugmsg("there is already a mod with ident %s", m_ident.c_str());
return;
}
if( jo.has_bool( "obsolete" ) ) {
// Marked obsolete, no need to try to load anything else.
MOD_INFORMATION *modfile = new MOD_INFORMATION;
modfile->ident = m_ident;
modfile->obsolete = true;
mod_map[modfile->ident] = modfile;
return;
}
std::string t_type = jo.get_string("mod-type", "SUPPLEMENTAL");
std::vector<std::string> m_authors;
if (jo.has_array("authors")) {
m_authors = jo.get_string_array("authors");
} else {
if(jo.has_string("author")) {
m_authors.push_back(jo.get_string("author"));
}
}
std::string m_name = jo.get_string("name", "");
if (m_name.empty()) {
// "No name" gets confusing if many mods have no name
//~ name of a mod that has no name entry, (%s is the mods identifier)
m_name = string_format(_("No name (%s)"), m_ident.c_str());
} else {
m_name = _(m_name.c_str());
}
std::string m_desc = jo.get_string("description", "");
if (m_desc.empty()) {
m_desc = _("No description");
} else {
m_desc = _(m_desc.c_str());
}
std::string m_path;
if (jo.has_string("path")) {
m_path = jo.get_string("path");
if (m_path.empty()) {
// If an empty path is given, use only the
// folder of the modinfo.json
m_path = main_path;
} else {
// prefix the folder of modinfo.json
m_path = main_path + "/" + m_path;
}
} else {
// Default if no path is given:
// "<folder-of-modinfo.json>/data"
m_path = main_path + "/data";
}
std::vector<std::string> m_dependencies;
if (jo.has_member("dependencies") && jo.has_array("dependencies")) {
JsonArray jarr = jo.get_array("dependencies");
while(jarr.has_more()) {
const std::string dep = jarr.next_string();
if (dep == m_ident) {
debugmsg("mod %s has itself as dependency", m_ident.c_str());
continue;
}
if (std::find(m_dependencies.begin(), m_dependencies.end(), dep) != m_dependencies.end()) {
// Some dependency listed twice, ignore it, what else can be done?
continue;
}
m_dependencies.push_back(dep);
}
}
mod_type m_type;
if (t_type == "CORE") {
m_type = MT_CORE;
} else if (t_type == "SUPPLEMENTAL") {
m_type = MT_SUPPLEMENTAL;
} else {
throw std::string("Invalid mod type: ") + t_type + " for mod " + m_ident;
}
MOD_INFORMATION *modfile = new MOD_INFORMATION;
modfile->ident = m_ident;
modfile->_type = m_type;
modfile->authors = m_authors;
modfile->name = m_name;
modfile->description = m_desc;
modfile->dependencies = m_dependencies;
modfile->path = m_path;
mod_map[modfile->ident] = modfile;
}
示例11: load
void mutation_branch::load( JsonObject &jsobj )
{
const std::string id = jsobj.get_string( "id" );
mutation_branch &new_mut = mutation_data[id];
JsonArray jsarr;
new_mut.name = _(jsobj.get_string("name").c_str());
new_mut.description = _(jsobj.get_string("description").c_str());
new_mut.points = jsobj.get_int("points");
new_mut.visibility = jsobj.get_int("visibility", 0);
new_mut.ugliness = jsobj.get_int("ugliness", 0);
new_mut.startingtrait = jsobj.get_bool("starting_trait", false);
new_mut.mixed_effect = jsobj.get_bool("mixed_effect", false);
new_mut.activated = jsobj.get_bool("active", false);
new_mut.starts_active = jsobj.get_bool("starts_active", false);
new_mut.destroys_gear = jsobj.get_bool("destroys_gear", false);
new_mut.allow_soft_gear = jsobj.get_bool("allow_soft_gear", false);
new_mut.cost = jsobj.get_int("cost", 0);
new_mut.cooldown = jsobj.get_int("time",0);
new_mut.hunger = jsobj.get_bool("hunger",false);
new_mut.thirst = jsobj.get_bool("thirst",false);
new_mut.fatigue = jsobj.get_bool("fatigue",false);
new_mut.valid = jsobj.get_bool("valid", true);
new_mut.purifiable = jsobj.get_bool("purifiable", true);
for( auto & s : jsobj.get_string_array( "initial_ma_styles" ) ) {
new_mut.initial_ma_styles.push_back( matype_id( s ) );
}
JsonArray bodytemp_array = jsobj.get_array( "bodytemp_modifiers" );
if( bodytemp_array.has_more() ) {
new_mut.bodytemp_min = bodytemp_array.get_int( 0 );
new_mut.bodytemp_max = bodytemp_array.get_int( 1 );
}
new_mut.bodytemp_sleep = jsobj.get_int( "bodytemp_sleep", 0 );
new_mut.threshold = jsobj.get_bool("threshold", false);
new_mut.profession = jsobj.get_bool("profession", false);
auto vr = jsobj.get_array( "vitamin_rates" );
while( vr.has_more() ) {
auto pair = vr.next_array();
new_mut.vitamin_rates[ vitamin_id( pair.get_string( 0 ) ) ] = pair.get_int( 1 );
}
load_mutation_mods(jsobj, "passive_mods", new_mut.mods);
/* Not currently supported due to inability to save active mutation state
load_mutation_mods(jsobj, "active_mods", new_mut.mods); */
new_mut.prereqs = jsobj.get_string_array( "prereqs" );
// Helps to be able to have a trait require more than one other trait
// (Individual prereq-lists are "OR", not "AND".)
// Traits shoud NOT appear in both lists for a given mutation, unless
// you want that trait to satisfy both requirements.
// These are additional to the first list.
new_mut.prereqs2 = jsobj.get_string_array( "prereqs2" );
// Dedicated-purpose prereq slot for Threshold mutations
// Stuff like Huge might fit in more than one mutcat post-threshold, so yeah
new_mut.threshreq = jsobj.get_string_array( "threshreq" );
new_mut.cancels = jsobj.get_string_array( "cancels" );
new_mut.replacements = jsobj.get_string_array( "changes_to" );
new_mut.additions = jsobj.get_string_array( "leads_to" );
new_mut.flags = jsobj.get_tags( "flags" );
jsarr = jsobj.get_array("category");
while (jsarr.has_more()) {
std::string s = jsarr.next_string();
new_mut.category.push_back(s);
mutations_category[s].push_back(id);
}
jsarr = jsobj.get_array("wet_protection");
while (jsarr.has_more()) {
JsonObject jo = jsarr.next_object();
std::string part_id = jo.get_string("part");
int ignored = jo.get_int("ignored", 0);
int neutral = jo.get_int("neutral", 0);
int good = jo.get_int("good", 0);
tripoint protect = tripoint(ignored, neutral, good);
new_mut.protection[get_body_part_token( part_id )] = protect;
}
jsarr = jsobj.get_array("encumbrance_always");
while (jsarr.has_more()) {
JsonArray jo = jsarr.next_array();
std::string part_id = jo.next_string();
int enc = jo.next_int();
new_mut.encumbrance_always[get_body_part_token( part_id )] = enc;
}
jsarr = jsobj.get_array("encumbrance_covered");
while (jsarr.has_more()) {
JsonArray jo = jsarr.next_array();
std::string part_id = jo.next_string();
int enc = jo.next_int();
new_mut.encumbrance_covered[get_body_part_token( part_id )] = enc;
}
jsarr = jsobj.get_array("restricts_gear");
while( jsarr.has_more() ) {
new_mut.restricts_gear.insert( get_body_part_token( jsarr.next_string() ) );
}
jsarr = jsobj.get_array( "armor" );
//.........这里部分代码省略.........
示例12: load_terrain
void load_terrain(JsonObject &jsobj)
{
if ( terlist.empty() ) {
ter_t new_null = null_terrain_t();
termap[new_null.id] = new_null;
terlist.push_back(new_null);
}
ter_t new_terrain;
new_terrain.id = jsobj.get_string("id");
if ( new_terrain.id == "t_null" ) {
return;
}
new_terrain.name = _(jsobj.get_string("name").c_str());
new_terrain.load_symbol( jsobj );
new_terrain.movecost = jsobj.get_int("move_cost");
if(jsobj.has_member("trap")) {
// Store the string representation of the trap id.
// Overwrites the trap field in set_trap_ids() once ids are assigned..
new_terrain.trap_id_str = jsobj.get_string("trap");
}
new_terrain.trap = tr_null;
new_terrain.max_volume = jsobj.get_int("max_volume", MAX_VOLUME_IN_SQUARE);
new_terrain.transparent = false;
new_terrain.connect_group = TERCONN_NONE;
for( auto & flag : jsobj.get_string_array( "flags" ) ) {
new_terrain.set_flag( flag );
}
// connect_group is initialised to none, then terrain flags are set, then finally
// connections from JSON are set. This is so that wall flags can set wall connections
// but can be overridden by explicit connections in JSON.
if(jsobj.has_member("connects_to")) {
new_terrain.set_connects( jsobj.get_string("connects_to") );
}
if(jsobj.has_member("examine_action")) {
std::string function_name = jsobj.get_string("examine_action");
new_terrain.examine = iexamine_function_from_string(function_name);
} else {
// if not specified, default to no action
new_terrain.examine = iexamine_function_from_string("none");
}
// if the terrain has something harvestable
if (jsobj.has_member("harvestable")) {
new_terrain.harvestable = jsobj.get_string("harvestable"); // get the harvestable
}
if (jsobj.has_member("transforms_into")) {
new_terrain.transforms_into = jsobj.get_string("transforms_into"); // get the terrain to transform into later on
}
if (jsobj.has_member("roof")) {
new_terrain.roof = jsobj.get_string("roof"); // Get the terrain to create above this one if there would be open air otherwise
}
if (jsobj.has_member("harvest_season")) {
//get the harvest season
if (jsobj.get_string("harvest_season") == "SPRING") {new_terrain.harvest_season = 0;} // convert the season to int for calendar compare
else if (jsobj.get_string("harvest_season") == "SUMMER") {new_terrain.harvest_season = 1;}
else if (jsobj.get_string("harvest_season") == "AUTUMN") {new_terrain.harvest_season = 2;}
else {new_terrain.harvest_season = 3;}
}
new_terrain.open = "";
if ( jsobj.has_member("open") ) {
new_terrain.open = jsobj.get_string("open");
}
new_terrain.close = "";
if ( jsobj.has_member("close") ) {
new_terrain.close = jsobj.get_string("close");
}
new_terrain.bash.load(jsobj, "bash", false);
new_terrain.deconstruct.load(jsobj, "deconstruct", false);
new_terrain.loadid = ter_id( terlist.size() );
termap[new_terrain.id]=new_terrain;
terlist.push_back(new_terrain);
}
示例13: load_modfile
void mod_manager::load_modfile(JsonObject &jo, const std::string &main_path)
{
if (!jo.has_string("type") || jo.get_string("type") != "MOD_INFO") {
// Ignore anything that is not a mod-info
return;
}
std::string m_ident = jo.get_string("ident");
if (has_mod(m_ident)) {
// TODO: change this to make unique ident for the mod
// (instead of discarding it?)
debugmsg("there is already a mod with ident %s", m_ident.c_str());
return;
}
std::string t_type = jo.get_string("mod-type", "SUPPLEMENTAL");
std::vector<std::string> m_authors;
if (jo.has_array("authors")) {
m_authors = jo.get_string_array("authors");
} else {
if(jo.has_string("author")) {
m_authors.push_back(jo.get_string("author"));
}
}
std::string m_name = jo.get_string("name", "");
if (m_name.empty()) {
// "No name" gets confusing if many mods have no name
//~ name of a mod that has no name entry, (%s is the mods identifier)
m_name = string_format(_("No name (%s)"), m_ident.c_str());
} else {
m_name = _(m_name.c_str());
}
std::string m_desc = jo.get_string("description", "");
if (m_desc.empty()) {
m_desc = _("No description");
} else {
m_desc = _(m_desc.c_str());
}
std::string m_cat = jo.get_string("category", "");
std::pair<int, std::string> p_cat = {-1, ""};
bool bCatFound = false;
do {
for( size_t i = 0; i < get_mod_list_categories().size(); ++i ) {
if( get_mod_list_categories()[i].first == m_cat ) {
p_cat = { i, get_mod_list_categories()[i].second };
bCatFound = true;
break;
}
}
if( !bCatFound && m_cat != "" ) {
m_cat = "";
} else {
break;
}
} while( !bCatFound );
std::string m_path;
if (jo.has_string("path")) {
m_path = jo.get_string("path");
if (m_path.empty()) {
// If an empty path is given, use only the
// folder of the modinfo.json
m_path = main_path;
} else {
// prefix the folder of modinfo.json
m_path = main_path + "/" + m_path;
}
} else {
// Default if no path is given:
// "<folder-of-modinfo.json>/data"
m_path = main_path + "/data";
}
bool m_need_lua = jo.get_bool("with-lua", false);
if ( file_exist(m_path + "/main.lua") || file_exist(m_path + "/preload.lua") ) {
m_need_lua = true;
}
std::vector<std::string> m_dependencies;
if (jo.has_member("dependencies") && jo.has_array("dependencies")) {
JsonArray jarr = jo.get_array("dependencies");
while(jarr.has_more()) {
const std::string dep = jarr.next_string();
if (dep == m_ident) {
debugmsg("mod %s has itself as dependency", m_ident.c_str());
continue;
}
if (std::find(m_dependencies.begin(), m_dependencies.end(), dep) != m_dependencies.end()) {
// Some dependency listed twice, ignore it, what else can be done?
continue;
}
m_dependencies.push_back(dep);
}
}
//.........这里部分代码省略.........