本文整理汇总了C++中JsonObject::has_object方法的典型用法代码示例。如果您正苦于以下问题:C++ JsonObject::has_object方法的具体用法?C++ JsonObject::has_object怎么用?C++ JsonObject::has_object使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类JsonObject
的用法示例。
在下文中一共展示了JsonObject::has_object方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: load
bool map_bash_info::load(JsonObject &jsobj, std::string member, bool isfurniture) {
if( jsobj.has_object(member) ) {
JsonObject j = jsobj.get_object(member);
str_min = j.get_int("str_min", 0);
str_max = j.get_int("str_max", 0);
str_min_blocked = j.get_int("str_min_blocked", -1);
str_max_blocked = j.get_int("str_max_blocked", -1);
str_min_roll = j.get_int("str_min_roll", str_min);
str_max_roll = j.get_int("str_min_roll", str_max);
explosive = j.get_int("explosive", -1);
destroy_only = j.get_bool("destroy_only", false);
sound = j.get_string("sound", _("smash!"));
sound_fail = j.get_string("sound_fail", _("thump!"));
if (isfurniture) {
furn_set = j.get_string("furn_set", "f_null");
} else {
ter_set = j.get_string("ter_set");
}
if ( j.has_array("items") ) {
load_map_bash_item_drop_list(j.get_array("items"), items);
}
return true;
} else {
return false;
}
}
示例2: load_vehicle_spawn
void VehicleFactory::load_vehicle_spawn(JsonObject &jo)
{
const std::string spawn_id = jo.get_string("id");
VehicleSpawn spawn;
JsonArray types = jo.get_array("spawn_types");
while (types.has_more()) {
JsonObject type = types.next_object();
if(type.has_object("vehicle_json")) {
JsonObject vjo = type.get_object("vehicle_json");
spawn.add(type.get_float("weight"), std::make_shared<VehicleFunction_json>(vjo));
}
else if(type.has_string("vehicle_function")) {
if(builtin_functions.count(type.get_string("vehicle_function")) == 0) {
type.throw_error("load_vehicle_spawn: unable to find builtin function", "vehicle_function");
}
spawn.add(type.get_float("weight"), std::make_shared<VehicleFunction_builtin>(
builtin_functions[type.get_string("vehicle_function")]));
}
else {
type.throw_error("load_vehicle_spawn: missing required vehicle_json (object) or vehicle_function (string).");
}
}
spawns[spawn_id] = spawn;
}
示例3: load_mutation_attack
static mut_attack load_mutation_attack( JsonObject &jo )
{
mut_attack ret;
jo.read( "attack_text_u", ret.attack_text_u );
jo.read( "attack_text_npc", ret.attack_text_npc );
jo.read( "required_mutations", ret.required_mutations );
jo.read( "blocker_mutations", ret.blocker_mutations );
jo.read( "hardcoded_effect", ret.hardcoded_effect );
if( jo.has_string( "body_part" ) ) {
ret.bp = get_body_part_token( jo.get_string( "body_part" ) );
}
jo.read( "chance", ret.chance );
if( jo.has_array( "base_damage" ) ) {
JsonArray jo_dam = jo.get_array( "base_damage" );
ret.base_damage = load_damage_instance( jo_dam );
} else if( jo.has_object( "base_damage" ) ) {
JsonObject jo_dam = jo.get_object( "base_damage" );
ret.base_damage = load_damage_instance( jo_dam );
}
if( jo.has_array( "strength_damage" ) ) {
JsonArray jo_dam = jo.get_array( "strength_damage" );
ret.strength_damage = load_damage_instance( jo_dam );
} else if( jo.has_object( "strength_damage" ) ) {
JsonObject jo_dam = jo.get_object( "strength_damage" );
ret.strength_damage = load_damage_instance( jo_dam );
}
if( ret.attack_text_u.empty() || ret.attack_text_npc.empty() ) {
jo.throw_error( "Attack message unset" );
}
if( !ret.hardcoded_effect && ret.base_damage.empty() && ret.strength_damage.empty() ) {
jo.throw_error( "Damage unset" );
} else if( ret.hardcoded_effect && ( !ret.base_damage.empty() || !ret.strength_damage.empty() ) ) {
jo.throw_error( "Damage and hardcoded effect are both set (must be one, not both)" );
}
if( ret.chance <= 0 ) {
jo.throw_error( "Chance of procing must be set and positive" );
}
return ret;
}
示例4: load
void profession::load( JsonObject &jo, const std::string & )
{
//If the "name" is an object then we have to deal with gender-specific titles,
if( jo.has_object( "name" ) ) {
JsonObject name_obj = jo.get_object( "name" );
_name_male = pgettext( "profession_male", name_obj.get_string( "male" ).c_str() );
_name_female = pgettext( "profession_female", name_obj.get_string( "female" ).c_str() );
} else if( jo.has_string( "name" ) ) {
// Same profession names for male and female in English.
// Still need to different names in other languages.
const std::string name = jo.get_string( "name" );
_name_female = pgettext( "profession_female", name.c_str() );
_name_male = pgettext( "profession_male", name.c_str() );
} else if( !was_loaded ) {
jo.throw_error( "missing mandatory member \"name\"" );
}
if( !was_loaded || jo.has_member( "description" ) ) {
const std::string desc = jo.get_string( "description" );
// These also may differ depending on the language settings!
_description_male = pgettext( "prof_desc_male", desc.c_str() );
_description_female = pgettext( "prof_desc_female", desc.c_str() );
}
mandatory( jo, was_loaded, "points", _point_cost );
if( !was_loaded || jo.has_member( "items" ) ) {
JsonObject items_obj = jo.get_object( "items" );
if( items_obj.has_array( "both" ) ) {
optional( items_obj, was_loaded, "both", legacy_starting_items, item_reader {} );
}
if( items_obj.has_object( "both" ) ) {
_starting_items = item_group::load_item_group( *items_obj.get_raw( "both" ), "collection" );
}
if( items_obj.has_array( "male" ) ) {
optional( items_obj, was_loaded, "male", legacy_starting_items_male, item_reader {} );
}
if( items_obj.has_object( "male" ) ) {
_starting_items_male = item_group::load_item_group( *items_obj.get_raw( "male" ), "collection" );
}
if( items_obj.has_array( "female" ) ) {
optional( items_obj, was_loaded, "female", legacy_starting_items_female, item_reader {} );
}
if( items_obj.has_object( "female" ) ) {
_starting_items_female = item_group::load_item_group( *items_obj.get_raw( "female" ),
"collection" );
}
}
optional( jo, was_loaded, "no_bonus", no_bonus );
optional( jo, was_loaded, "skills", _starting_skills, skilllevel_reader {} );
optional( jo, was_loaded, "addictions", _starting_addictions, addiction_reader {} );
// TODO: use string_id<bionic_type> or so
optional( jo, was_loaded, "CBMs", _starting_CBMs, auto_flags_reader<bionic_id> {} );
// TODO: use string_id<mutation_branch> or so
optional( jo, was_loaded, "traits", _starting_traits, auto_flags_reader<trait_id> {} );
optional( jo, was_loaded, "flags", flags, auto_flags_reader<> {} );
}
示例5: load
bool map_bash_info::load(JsonObject &jsobj, std::string member, bool isfurniture) {
if( jsobj.has_object(member) ) {
JsonObject j = jsobj.get_object(member);
if ( jsonint(j, "num_tests", num_tests ) == false ) {
if ( jsonint(j, "str_min", str_min ) && jsonint(j, "str_max", str_max ) ) {
num_tests = 1;
}
} else if ( num_tests > 0 ) {
str_min = j.get_int("str_min");
str_max = j.get_int("str_max");
}
jsonint(j, "str_min_blocked", str_min_blocked );
jsonint(j, "str_max_blocked", str_max_blocked );
jsonint(j, "str_min_roll", str_min_roll );
jsonint(j, "chance", chance );
jsonstring(j, "sound", sound );
jsonstring(j, "sound_fail", sound_fail );
if ( jsonstring(j, "ter_set", ter_set ) == false && isfurniture == false ) {
ter_set = "t_rubble";
debugmsg("terrain[\"%s\"].bash.ter_set is not set!",jsobj.get_string("id").c_str() );
}
if ( j.has_array("items") ) {
JsonArray ja = j.get_array("items");
if (ja.size() > 0) {
int c=0;
while ( ja.has_more() ) {
if ( ja.has_object(c) ) {
JsonObject jio = ja.next_object();
if ( jio.has_string("item") && jio.has_int("amount") ) {
if ( jio.has_int("minamount") ) {
map_bash_item_drop drop( jio.get_string("item"), jio.get_int("amount"), jio.get_int("minamount") );
jsonint(jio, "chance", drop.chance);
items.push_back(drop);
} else {
map_bash_item_drop drop( jio.get_string("item"), jio.get_int("amount") );
jsonint(jio, "chance", drop.chance);
items.push_back(drop);
}
} else {
debugmsg("terrain[\"%s\"].bash.items[%d]: invalid entry",jsobj.get_string("id").c_str(),c);
}
} else {
debugmsg("terrain[\"%s\"].bash.items[%d]: invalid entry",jsobj.get_string("id").c_str(),c);
}
c++;
}
}
}
//debugmsg("%d/%d %s %s/%s %d",str_min,str_max, ter_set.c_str(), sound.c_str(), sound_fail.c_str(), items.size() );
return true;
} else {
return false;
}
}
示例6: load_profession
void profession::load_profession(JsonObject &jsobj)
{
profession prof;
JsonArray jsarr;
prof._ident = jsobj.get_string("ident");
//If the "name" is an object then we have to deal with gender-specific titles,
if(jsobj.has_object("name")) {
JsonObject name_obj = jsobj.get_object("name");
prof._name_male = pgettext("profession_male", name_obj.get_string("male").c_str());
prof._name_female = pgettext("profession_female", name_obj.get_string("female").c_str());
} else {
// Same profession names for male and female in English.
// Still need to different names in other languages.
const std::string name = jsobj.get_string("name");
prof._name_female = pgettext("profession_female", name.c_str());
prof._name_male = pgettext("profession_male", name.c_str());
}
const std::string desc = jsobj.get_string("description").c_str();
prof._description_male = pgettext("prof_desc_male", desc.c_str());
prof._description_female = pgettext("prof_desc_female", desc.c_str());
prof._point_cost = jsobj.get_int("points");
JsonObject items_obj = jsobj.get_object("items");
prof.add_items_from_jsonarray(items_obj.get_array("both"), "both");
prof.add_items_from_jsonarray(items_obj.get_array("male"), "male");
prof.add_items_from_jsonarray(items_obj.get_array("female"), "female");
jsarr = jsobj.get_array("skills");
while (jsarr.has_more()) {
JsonObject jo = jsarr.next_object();
prof.add_skill(jo.get_string("name"),
jo.get_int("level"));
}
jsarr = jsobj.get_array("addictions");
while (jsarr.has_more()) {
JsonObject jo = jsarr.next_object();
prof.add_addiction(addiction_type(jo.get_string("type")),
jo.get_int("intensity"));
}
jsarr = jsobj.get_array("CBMs");
while (jsarr.has_more()) {
prof.add_CBM(jsarr.next_string());
}
jsarr = jsobj.get_array("flags");
while (jsarr.has_more()) {
prof.flags.insert(jsarr.next_string());
}
_all_profs[prof._ident] = prof;
DebugLog( D_INFO, DC_ALL ) << "Loaded profession: " << prof._ident;
}
示例7: load
bool map_bash_info::load(JsonObject &jsobj, std::string member, bool isfurniture) {
if( !jsobj.has_object(member) ) {
return false;
}
JsonObject j = jsobj.get_object(member);
str_min = j.get_int("str_min", 0);
str_max = j.get_int("str_max", 0);
str_min_blocked = j.get_int("str_min_blocked", -1);
str_max_blocked = j.get_int("str_max_blocked", -1);
str_min_supported = j.get_int("str_min_supported", -1);
str_max_supported = j.get_int("str_max_supported", -1);
str_min_roll = j.get_int("str_min_roll", str_min);
str_max_roll = j.get_int("str_min_roll", str_max);
explosive = j.get_int("explosive", -1);
sound_vol = j.get_int("sound_vol", -1);
sound_fail_vol = j.get_int("sound_fail_vol", -1);
collapse_radius = j.get_int( "collapse_radius", 1 );
destroy_only = j.get_bool("destroy_only", false);
bash_below = j.get_bool("bash_below", false);
sound = j.get_string("sound", _("smash!"));
sound_fail = j.get_string("sound_fail", _("thump!"));
if( isfurniture ) {
furn_set = j.get_string("furn_set", "f_null");
} else {
ter_set = j.get_string( "ter_set" );
}
if( j.has_member( "items" ) ) {
JsonIn& stream = *j.get_raw( "items" );
drop_group = item_group::load_item_group( stream, "collection" );
} else {
drop_group = "EMPTY_GROUP";
}
if( j.has_array("tent_centers") ) {
load_map_bash_tent_centers( j.get_array("tent_centers"), tent_centers );
}
return true;
}
示例8: load_mutation_mods
static void load_mutation_mods(JsonObject &jsobj, std::string member, std::unordered_map<std::pair<bool, std::string>, int> &mods)
{
if (jsobj.has_object(member)) {
JsonObject j = jsobj.get_object(member);
bool active = false;
if (member == "active_mods") {
active = true;
}
// json field type key
extract_mod(j, mods, "str_mod", active, "STR");
extract_mod(j, mods, "dex_mod", active, "DEX");
extract_mod(j, mods, "per_mod", active, "PER");
extract_mod(j, mods, "int_mod", active, "INT");
}
}
示例9: load
void bite_actor::load( JsonObject &obj )
{
// Optional:
if( obj.has_array( "damage_max_instance" ) ) {
JsonArray arr = obj.get_array( "damage_max_instance" );
damage_max_instance = load_damage_instance( arr );
} else if( obj.has_object( "damage_max_instance" ) ) {
damage_max_instance = load_damage_instance( obj );
}
min_mul = obj.get_float( "min_mul", 0.0f );
max_mul = obj.get_float( "max_mul", 1.0f );
move_cost = obj.get_int( "move_cost", 100 );
accuracy = obj.get_int( "accuracy", INT_MIN );
no_infection_chance = obj.get_int( "no_infection_chance", 14 );
}
示例10: load_internal
void melee_actor::load_internal( JsonObject &obj, const std::string & )
{
// Optional:
if( obj.has_array( "damage_max_instance" ) ) {
JsonArray arr = obj.get_array( "damage_max_instance" );
damage_max_instance = load_damage_instance( arr );
} else if( obj.has_object( "damage_max_instance" ) ) {
damage_max_instance = load_damage_instance( obj );
}
min_mul = obj.get_float( "min_mul", 0.0f );
max_mul = obj.get_float( "max_mul", 1.0f );
move_cost = obj.get_int( "move_cost", 100 );
accuracy = obj.get_int( "accuracy", INT_MIN );
optional( obj, was_loaded, "miss_msg_u", miss_msg_u, translated_string_reader,
_( "The %s lunges at you, but you dodge!" ) );
optional( obj, was_loaded, "no_dmg_msg_u", no_dmg_msg_u, translated_string_reader,
_( "The %1$s bites your %2$s, but fails to penetrate armor!" ) );
optional( obj, was_loaded, "hit_dmg_u", hit_dmg_u, translated_string_reader,
_( "The %1$s bites your %2$s!" ) );
optional( obj, was_loaded, "miss_msg_npc", miss_msg_npc, translated_string_reader,
_( "The %s lunges at <npcname>, but they dodge!" ) );
optional( obj, was_loaded, "no_dmg_msg_npc", no_dmg_msg_npc, translated_string_reader,
_( "The %1$s bites <npcname>'s %2$s, but fails to penetrate armor!" ) );
optional( obj, was_loaded, "hit_dmg_npc", hit_dmg_npc, translated_string_reader,
_( "The %1$s bites <npcname>'s %2$s!" ) );
if( obj.has_array( "body_parts" ) ) {
JsonArray jarr = obj.get_array( "body_parts" );
while( jarr.has_more() ) {
JsonArray sub = jarr.next_array();
const body_part bp = get_body_part_token( sub.get_string( 0 ) );
const float prob = sub.get_float( 1 );
body_parts.add_or_replace( bp, prob );
}
}
if( obj.has_array( "effects" ) ) {
JsonArray jarr = obj.get_array( "effects" );
while( jarr.has_more() ) {
JsonObject eff = jarr.next_object();
effects.push_back( load_mon_effect_data( eff ) );
}
}
}
示例11: load_distribution
distribution load_distribution( JsonObject &jo, const std::string &name )
{
if( !jo.has_member( name ) ) {
return distribution();
}
if( jo.has_float( name ) ) {
return distribution::constant( jo.get_float( name ) );
}
if( jo.has_object( name ) ) {
JsonObject obj = jo.get_object( name );
return load_distribution( obj );
}
jo.throw_error( "Invalid distribution type", name );
return distribution();
}
示例12: parse_vp_reqs
static void parse_vp_reqs( JsonObject &obj, const std::string &id, const std::string &key,
std::vector<std::pair<requirement_id, int>> &reqs,
std::map<skill_id, int> &skills, int &moves )
{
if( !obj.has_object( key ) ) {
return;
}
auto src = obj.get_object( key );
auto sk = src.get_array( "skills" );
if( !sk.empty() ) {
skills.clear();
}
while( sk.has_more() ) {
auto cur = sk.next_array();
skills.emplace( skill_id( cur.get_string( 0 ) ), cur.size() >= 2 ? cur.get_int( 1 ) : 1 );
}
assign( src, "time", moves );
if( src.has_string( "using" ) ) {
reqs = { { requirement_id( src.get_string( "using" ) ), 1 } };
} else if( src.has_array( "using" ) ) {
auto arr = src.get_array( "using" );
while( arr.has_more() ) {
auto cur = arr.next_array();
reqs.emplace_back( requirement_id( cur.get_string( 0 ) ), cur.get_int( 1 ) );
}
} else {
const requirement_id req_id( string_format( "inline_%s_%s", key.c_str(), id.c_str() ) );
requirement_data::load_requirement( src, req_id );
reqs = { { req_id, 1 } };
}
}
示例13: load
bool map_bash_info::load(JsonObject &jsobj, std::string member, bool isfurniture) {
if( jsobj.has_object(member) ) {
JsonObject j = jsobj.get_object(member);
if ( jsonint(j, "num_tests", num_tests ) == false ) {
if ( jsonint(j, "str_min", str_min ) && jsonint(j, "str_max", str_max ) ) {
num_tests = 1;
}
} else if ( num_tests > 0 ) {
str_min = j.get_int("str_min");
str_max = j.get_int("str_max");
}
jsonint(j, "str_min_blocked", str_min_blocked );
jsonint(j, "str_max_blocked", str_max_blocked );
jsonint(j, "str_min_roll", str_min_roll );
jsonint(j, "explosive", explosive );
jsonint(j, "chance", chance );
jsonstring(j, "sound", sound );
jsonstring(j, "sound_fail", sound_fail );
jsonstring(j, "furn_set", furn_set );
if ( jsonstring(j, "ter_set", ter_set ) == false && isfurniture == false ) {
ter_set = "t_rubble";
debugmsg("terrain[\"%s\"].bash.ter_set is not set!",jsobj.get_string("id").c_str() );
}
if ( j.has_array("items") ) {
load_map_bash_item_drop_list(j.get_array("items"), items);
}
//debugmsg("%d/%d %s %s/%s %d",str_min,str_max, ter_set.c_str(), sound.c_str(), sound_fail.c_str(), items.size() );
return true;
} else {
return false;
}
}
示例14: load
void mtype::load( JsonObject &jo )
{
MonsterGenerator &gen = MonsterGenerator::generator();
// Name and name plural are not translated here, but when needed in
// combination with the actual count in `mtype::nname`.
mandatory( jo, was_loaded, "name", name );
// default behaviour: Assume the regular plural form (appending an “s”)
optional( jo, was_loaded, "name_plural", name_plural, name + "s" );
mandatory( jo, was_loaded, "description", description, translated_string_reader );
// Have to overwrite the default { "hflesh" } here
if( !was_loaded || jo.has_member( "material" ) ) {
mat = { jo.get_string( "material" ) };
}
optional( jo, was_loaded, "species", species, auto_flags_reader<species_id> {} );
optional( jo, was_loaded, "categories", categories, auto_flags_reader<> {} );
// See monfaction.cpp
if( !was_loaded || jo.has_member( "default_faction" ) ) {
const auto faction = mfaction_str_id( jo.get_string( "default_faction" ) );
default_faction = monfactions::get_or_add_faction( faction );
}
if( !was_loaded || jo.has_member( "symbol" ) ) {
sym = jo.get_string( "symbol" );
if( utf8_wrapper( sym ).display_width() != 1 ) {
jo.throw_error( "monster symbol should be exactly one console cell width", "symbol" );
}
}
mandatory( jo, was_loaded, "color", color, color_reader{} );
const typed_flag_reader<decltype( Creature::size_map )> size_reader{ Creature::size_map, "invalid creature size" };
optional( jo, was_loaded, "size", size, size_reader, MS_MEDIUM );
const typed_flag_reader<decltype( gen.phase_map )> phase_reader{ gen.phase_map, "invalid phase id" };
optional( jo, was_loaded, "phase", phase, phase_reader, SOLID );
optional( jo, was_loaded, "diff", difficulty, 0 );
optional( jo, was_loaded, "aggression", agro, 0 );
optional( jo, was_loaded, "morale", morale, 0 );
optional( jo, was_loaded, "speed", speed, 0 );
optional( jo, was_loaded, "attack_cost", attack_cost, 100 );
optional( jo, was_loaded, "melee_skill", melee_skill, 0 );
optional( jo, was_loaded, "melee_dice", melee_dice, 0 );
optional( jo, was_loaded, "melee_dice_sides", melee_sides, 0 );
optional( jo, was_loaded, "dodge", sk_dodge, 0 );
optional( jo, was_loaded, "armor_bash", armor_bash, 0 );
optional( jo, was_loaded, "armor_cut", armor_cut, 0 );
optional( jo, was_loaded, "armor_acid", armor_acid, armor_cut / 2 );
optional( jo, was_loaded, "armor_fire", armor_fire, 0 );
optional( jo, was_loaded, "hp", hp, 0 );
optional( jo, was_loaded, "starting_ammo", starting_ammo );
optional( jo, was_loaded, "luminance", luminance, 0 );
optional( jo, was_loaded, "revert_to_itype", revert_to_itype, "" );
optional( jo, was_loaded, "vision_day", vision_day, 40 );
optional( jo, was_loaded, "vision_night", vision_night, 1 );
optional( jo, was_loaded, "armor_stab", armor_stab, 0.8f * armor_cut );
optional( jo, was_loaded, "attack_effs", atk_effs, mon_attack_effect_reader{} );
// TODO: make this work with `was_loaded`
if( jo.has_array( "melee_damage" ) ) {
JsonArray arr = jo.get_array( "melee_damage" );
melee_damage = load_damage_instance( arr );
} else if( jo.has_object( "melee_damage" ) ) {
melee_damage = load_damage_instance( jo );
}
if( jo.has_int( "melee_cut" ) ) {
int bonus_cut = jo.get_int( "melee_cut" );
melee_damage.add_damage( DT_CUT, bonus_cut );
}
if( jo.has_member( "death_drops" ) ) {
JsonIn &stream = *jo.get_raw( "death_drops" );
death_drops = item_group::load_item_group( stream, "distribution" );
}
const typed_flag_reader<decltype( gen.death_map )> death_reader{ gen.death_map, "invalid monster death function" };
optional( jo, was_loaded, "death_function", dies, death_reader );
if( dies.empty() ) {
// TODO: really needed? Is an empty `dies` container not allowed?
dies.push_back( mdeath::normal );
}
if( jo.has_member( "special_when_hit" ) ) {
JsonArray jsarr = jo.get_array( "special_when_hit" );
const auto iter = gen.defense_map.find( jsarr.get_string( 0 ) );
if( iter == gen.defense_map.end() ) {
jsarr.throw_error( "Invalid monster defense function" );
}
sp_defense = iter->second;
def_chance = jsarr.get_int( 1 );
} else if( !was_loaded ) {
sp_defense = &mdefense::none;
def_chance = 0;
}
if( !was_loaded || jo.has_member( "special_attacks" ) ) {
special_attacks.clear();
special_attacks_names.clear();
//.........这里部分代码省略.........
示例15: json_load_common_variables
void player::json_load_common_variables(JsonObject & data)
{
JsonArray parray;
// todo/maybe:
// std::map<std::string, int*> strmap_common_variables;
// void player::init_strmap_common_variables() {
// strmap_common_variables["posx"]=&posx; // + all this below and in save_common_variables
// }
// load:
// for(std::map<std::string, int*>::iterator it...
// data.read(it->first,it->second);
// save:
// for(...
// json.member( it->first, it->second );
if(!data.read("posx",posx) ) { // uh-oh.
debugmsg("BAD PLAYER/NPC JSON: no 'posx'?");
}
data.read("posy",posy);
data.read("str_cur",str_cur); data.read("str_max",str_max);
data.read("dex_cur",dex_cur); data.read("dex_max",dex_max);
data.read("int_cur",int_cur); data.read("int_max",int_max);
data.read("per_cur",per_cur); data.read("per_max",per_max);
data.read("hunger",hunger); data.read("thirst",thirst);
data.read("fatigue",fatigue); data.read("stim",stim);
data.read("pain",pain); data.read("pkill",pkill);
data.read("radiation",radiation);
data.read("scent",scent);
data.read("moves",moves);
data.read("dodges_left",num_dodges);
data.read("underwater",underwater);
data.read("oxygen",oxygen);
data.read("male",male);
data.read("cash",cash);
data.read("recoil",recoil);
parray = data.get_array("hp_cur");
if ( parray.size() == num_hp_parts ) {
for(int i=0; i < num_hp_parts; i++) {
hp_cur[i] = parray.get_int(i);
}
} else {
debugmsg("Error, incompatible hp_cur in save file '%s'",parray.str().c_str());
}
parray = data.get_array("hp_max");
if ( parray.size() == num_hp_parts ) {
for(int i=0; i < num_hp_parts; i++) {
hp_max[i] = parray.get_int(i);
}
} else {
debugmsg("Error, incompatible hp_max in save file '%s'",parray.str().c_str());
}
data.read("power_level",power_level);
data.read("max_power_level",max_power_level);
data.read("traits",my_traits);
if (data.has_object("skills")) {
JsonObject pmap = data.get_object("skills");
for (std::vector<Skill*>::iterator aSkill = Skill::skills.begin(); aSkill != Skill::skills.end(); ++aSkill) {
if ( pmap.has_object( (*aSkill)->ident() ) ) {
pmap.read( (*aSkill)->ident(), skillLevel(*aSkill) );
} else {
debugmsg("Load (%s) Missing skill %s","",(*aSkill)->ident().c_str() );
}
}
} else {
debugmsg("Skills[] no bueno");
}
data.read("ma_styles",ma_styles);
data.read("illness",illness);
data.read("effects",effects);
data.read("addictions",addictions);
data.read("my_bionics",my_bionics);
}