本文整理汇总了C++中JsonObject::get_int方法的典型用法代码示例。如果您正苦于以下问题:C++ JsonObject::get_int方法的具体用法?C++ JsonObject::get_int怎么用?C++ JsonObject::get_int使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类JsonObject
的用法示例。
在下文中一共展示了JsonObject::get_int方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: get_next
mon_effect_data get_next( JsonIn &jin ) const {
JsonObject e = jin.get_object();
return mon_effect_data( efftype_id( e.get_string( "id" ) ), e.get_int( "duration", 0 ),
get_body_part_token( e.get_string( "bp", "NUM_BP" ) ), e.get_bool( "permanent", false ),
e.get_int( "chance", 100 ) );
}
示例2: load_basic_info
void Item_factory::load_basic_info(JsonObject& jo, itype* new_item_template)
{
std::string new_id = jo.get_string("id");
new_item_template->id = new_id;
m_templates[new_id] = new_item_template;
// And then proceed to assign the correct field
new_item_template->price = jo.get_int("price");
new_item_template->name = _(jo.get_string("name").c_str());
new_item_template->sym = jo.get_string("symbol")[0];
new_item_template->color = color_from_string(jo.get_string("color"));
new_item_template->description = _(jo.get_string("description").c_str());
if(jo.has_member("material")){
set_material_from_json(jo, "material", new_item_template);
} else {
new_item_template->m1 = "null";
new_item_template->m2 = "null";
}
Item_tag new_phase = "solid";
if(jo.has_member("phase")){
new_phase = jo.get_string("phase");
}
new_item_template->phase = phase_from_tag(new_phase);
new_item_template->volume = jo.get_int("volume");
new_item_template->weight = jo.get_int("weight");
new_item_template->melee_dam = jo.get_int("bashing");
new_item_template->melee_cut = jo.get_int("cutting");
new_item_template->m_to_hit = jo.get_int("to_hit");
new_item_template->light_emission = 0;
/*
List of current flags
FIT - Reduces encumbrance by one
VARSIZE - Can be made to fit via tailoring
OVERSIZE - Can always be worn no matter encumbrance/mutations/bionics/etc
POCKETS - Will increase warmth for hands if hands are cold and the player is wielding nothing
HOOD - Will increase warmth for head if head is cold and player's head isn't encumbered
RAINPROOF - Works like a raincoat to protect from rain effects
WATCH - Shows the current time, instead of sun/moon position
ALARMCLOCK - Has an alarmclock feature
FANCY - Less than practical clothing meant primarily to convey a certain image.
SUPER_FANCY - Clothing suitable for the most posh of events.
LIGHT_* - light emission, sets cached int light_emission
USE_EAT_VERB - Use the eat verb, even if it's a liquid(soup, jam etc.)
Container-only flags:
SEALS
RIGID
WATERTIGHT
*/
new_item_template->item_tags = jo.get_tags("flags");
if ( new_item_template->item_tags.size() > 0 ) {
for( std::set<std::string>::const_iterator it = new_item_template->item_tags.begin();
it != new_item_template->item_tags.end(); ++it ) {
set_intvar(std::string(*it), new_item_template->light_emission, 1, 10000);
}
}
if( jo.has_member("qualities") ){
set_qualities_from_json(jo, "qualities", new_item_template);
}
new_item_template->techniques = jo.get_tags("techniques");
new_item_template->use = (!jo.has_member("use_action") ? &iuse::none :
use_from_string(jo.get_string("use_action")));
}
示例3: load_monster
void MonsterGenerator::load_monster(JsonObject &jo)
{
// id
std::string mid;
if (jo.has_member("id")){
mid = jo.get_string("id");
if (mon_templates.count(mid) > 0) {
delete mon_templates[mid];
}
mtype *newmon = new mtype;
newmon->id = mid;
newmon->name = _(jo.get_string("name","").c_str());
newmon->description = _(jo.get_string("description").c_str());
newmon->mat = jo.get_string("material");
newmon->species = jo.get_tags("species");
newmon->categories = jo.get_tags("categories");
newmon->sym = jo.get_string("symbol")[0]; // will fail here if there is no symbol
newmon->color = color_from_string(jo.get_string("color"));
newmon->size = get_from_string(jo.get_string("size", "MEDIUM"), size_map, MS_MEDIUM);
newmon->phase = get_from_string(jo.get_string("phase", "SOLID"), phase_map, SOLID);
newmon->difficulty = jo.get_int("diff", 0);
newmon->agro = jo.get_int("aggression", 0);
newmon->morale = jo.get_int("morale", 0);
newmon->speed = jo.get_int("speed", 0);
newmon->melee_skill = jo.get_int("melee_skill", 0);
newmon->melee_dice = jo.get_int("melee_dice", 0);
newmon->melee_sides = jo.get_int("melee_dice_sides", 0);
newmon->melee_cut = jo.get_int("melee_cut", 0);
newmon->sk_dodge = jo.get_int("dodge", 0);
newmon->armor_bash = jo.get_int("armor_bash", 0);
newmon->armor_cut = jo.get_int("armor_cut", 0);
newmon->item_chance = jo.get_int("item_chance", 0);
newmon->hp = jo.get_int("hp", 0);
newmon->sp_freq = jo.get_int("special_freq", 0);
newmon->def_chance = jo.get_int("special_when_hit_freq", 0);
newmon->luminance = jo.get_float("luminance", 0);
newmon->dies = get_death_functions(jo, "death_function");
newmon->sp_attack = get_attack_function(jo, "special_attack");
newmon->sp_defense = get_defense_function(jo, "special_when_hit");
std::set<std::string> flags, anger_trig, placate_trig, fear_trig, cats;
flags = jo.get_tags("flags");
anger_trig = jo.get_tags("anger_triggers");
placate_trig = jo.get_tags("placate_triggers");
fear_trig = jo.get_tags("fear_triggers");
newmon->flags = get_set_from_tags(flags, flag_map, MF_NULL);
newmon->anger = get_set_from_tags(anger_trig, trigger_map, MTRIG_NULL);
newmon->fear = get_set_from_tags(fear_trig, trigger_map, MTRIG_NULL);
newmon->placate = get_set_from_tags(placate_trig, trigger_map, MTRIG_NULL);
mon_templates[mid] = newmon;
}
}
示例4: load_mutation
void load_mutation(JsonObject &jsobj)
{
trait new_trait;
JsonArray jsarr;
std::string id = jsobj.get_string("id");
new_trait.id = id;
new_trait.name = _(jsobj.get_string("name").c_str());
new_trait.description = _(jsobj.get_string("description").c_str());
new_trait.points = jsobj.get_int("points");
new_trait.visibility = jsobj.get_int("visibility", 0);
new_trait.ugliness = jsobj.get_int("ugliness", 0);
new_trait.startingtrait = jsobj.get_bool("starting_trait", false);
new_trait.mixed_effect = jsobj.get_bool("mixed_effect", false);
new_trait.activated = jsobj.get_bool("active", false);
new_trait.cost = jsobj.get_int("cost", 0);
new_trait.cooldown = jsobj.get_int("time",0);
new_trait.hunger = jsobj.get_bool("hunger",false);
new_trait.thirst = jsobj.get_bool("thirst",false);
new_trait.fatigue = jsobj.get_bool("fatigue",false);
new_trait.charge = 0;
traits[id] = new_trait;
mutation_data[id].valid = jsobj.get_bool("valid", true);
mutation_data[id].purifiable = jsobj.get_bool("purifiable", true);
mutation_data[id].threshold = jsobj.get_bool("threshold", false);
jsarr = jsobj.get_array("prereqs");
while (jsarr.has_more()) {
mutation_data[id].prereqs.push_back(jsarr.next_string());
}
// 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.
jsarr = jsobj.get_array("prereqs2");
while (jsarr.has_more()) {
mutation_data[id].prereqs2.push_back(jsarr.next_string());
}
// Dedicated-purpose prereq slot for Threshold mutations
jsarr = jsobj.get_array("threshreq");
// Stuff like Huge might fit in more than one mutcat post-threshold, so yeah
while (jsarr.has_more()) {
mutation_data[id].threshreq.push_back(jsarr.next_string());
}
jsarr = jsobj.get_array("cancels");
while (jsarr.has_more()) {
mutation_data[id].cancels.push_back(jsarr.next_string());
}
jsarr = jsobj.get_array("changes_to");
while (jsarr.has_more()) {
mutation_data[id].replacements.push_back(jsarr.next_string());
}
jsarr = jsobj.get_array("leads_to");
while (jsarr.has_more()) {
mutation_data[id].additions.push_back(jsarr.next_string());
}
jsarr = jsobj.get_array("category");
while (jsarr.has_more()) {
std::string s = jsarr.next_string();
mutation_data[id].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);
mutation_data[id].protection[part_id] =
mutation_wet(body_parts[part_id], protect);
}
}
示例5: load_vehiclepart
/**
* Reads in a vehicle part from a JsonObject.
*/
void game::load_vehiclepart(JsonObject &jo)
{
vpart_info next_part;
next_part.id = jo.get_string("id");
next_part.name = _(jo.get_string("name").c_str());
next_part.sym = jo.get_string("symbol")[0];
next_part.color = color_from_string(jo.get_string("color"));
next_part.sym_broken = jo.get_string("broken_symbol")[0];
next_part.color_broken = color_from_string(jo.get_string("broken_color"));
next_part.dmg_mod = jo.has_member("damage_modifier") ? jo.get_int("damage_modifier") : 100;
next_part.durability = jo.get_int("durability");
next_part.power = jo.get_int("power", 0);
next_part.epower = jo.get_int("epower", 0);
next_part.folded_volume = jo.get_int("folded_volume", 0);
//Handle the par1 union as best we can by accepting any ONE of its elements
int element_count = (jo.has_member("par1") ? 1 : 0)
+ (jo.has_member("size") ? 1 : 0)
+ (jo.has_member("wheel_width") ? 1 : 0)
+ (jo.has_member("bonus") ? 1 : 0);
if(element_count == 0) {
//If not specified, assume 0
next_part.par1 = 0;
} else if(element_count == 1) {
if(jo.has_member("par1")) {
next_part.par1 = jo.get_int("par1");
} else if(jo.has_member("size")) {
next_part.par1 = jo.get_int("size");
} else if(jo.has_member("wheel_width")) {
next_part.par1 = jo.get_int("wheel_width");
} else { //bonus
next_part.par1 = jo.get_int("bonus");
}
} else {
//Too many
debugmsg("Error parsing vehicle part '%s': \
Use AT MOST one of: par1, power, size, wheel_width, bonus",
next_part.name.c_str());
//Keep going to produce more messages if other parts are wrong
next_part.par1 = 0;
}
next_part.fuel_type = jo.has_member("fuel_type") ? jo.get_string("fuel_type") : "NULL";
next_part.item = jo.get_string("item");
next_part.difficulty = jo.get_int("difficulty");
next_part.location = jo.has_member("location") ? jo.get_string("location") : "";
next_part.bitflags = 0;
JsonArray jarr = jo.get_array("flags");
std::string nstring = "";
while (jarr.has_more()) {
nstring = jarr.next_string();
next_part.flags.insert(nstring);
if ( vpart_bitflag_map.find(nstring) != vpart_bitflag_map.end() ) {
next_part.bitflags |= mfb( vpart_bitflag_map.find(nstring)->second );
}
}
if (jo.has_member("FOLDABLE") && next_part.folded_volume == 0){
debugmsg("Error: folded part %s has a volume of 0!", next_part.name.c_str());
}
JsonArray breaks_into = jo.get_array("breaks_into");
while(breaks_into.has_more()) {
JsonObject next_entry = breaks_into.next_object();
break_entry next_break_entry;
next_break_entry.item_id = next_entry.get_string("item");
next_break_entry.min = next_entry.get_int("min");
next_break_entry.max = next_entry.get_int("max");
//Sanity check
if(next_break_entry.max < next_break_entry.min) {
debugmsg("For vehicle part %s: breaks_into item '%s' has min (%d) > max (%d)!",
next_part.name.c_str(), next_break_entry.item_id.c_str(),
next_break_entry.min, next_break_entry.max);
}
next_part.breaks_into.push_back(next_break_entry);
}
//Calculate and cache z-ordering based off of location
// list_order is used when inspecting the vehicle
if(next_part.location == "on_roof") {
next_part.z_order = 9;
next_part.list_order = 3;
} else if(next_part.location == "on_cargo") {
next_part.z_order = 8;
next_part.list_order = 6;
} else if(next_part.location == "center") {
next_part.z_order = 7;
next_part.list_order = 7;
} else if(next_part.location == "under") {
//Have wheels show up over frames
next_part.z_order = 6;
next_part.list_order = 10;
} else if(next_part.location == "structure") {
next_part.z_order = 5;
next_part.list_order = 1;
//.........这里部分代码省略.........
示例6:
std::pair<skill_id, int> get_next( JsonIn &jin ) const {
JsonObject jo = jin.get_object();
return std::pair<skill_id, int>( skill_id( jo.get_string( "name" ) ), jo.get_int( "level" ) );
}
示例7: load
/**
* Reads in a vehicle part from a JsonObject.
*/
void vpart_info::load( JsonObject &jo )
{
vpart_info next_part;
next_part.id = vpart_str_id( jo.get_string( "id" ) );
next_part.name = _(jo.get_string("name").c_str());
next_part.sym = jo.get_string("symbol")[0];
next_part.color = color_from_string(jo.get_string("color"));
next_part.sym_broken = jo.get_string("broken_symbol")[0];
next_part.color_broken = color_from_string(jo.get_string("broken_color"));
next_part.dmg_mod = jo.has_member("damage_modifier") ? jo.get_int("damage_modifier") : 100;
next_part.durability = jo.get_int("durability");
next_part.power = jo.get_int("power", 0);
next_part.epower = jo.get_int("epower", 0);
next_part.folded_volume = jo.get_int("folded_volume", 0);
next_part.range = jo.get_int( "range", 12 );
next_part.size = jo.get_int( "size", 0 );
//Handle the par1 union as best we can by accepting any ONE of its elements
int element_count = (jo.has_member("par1") ? 1 : 0)
+ (jo.has_member("wheel_width") ? 1 : 0)
+ (jo.has_member("bonus") ? 1 : 0);
if(element_count == 0) {
//If not specified, assume 0
next_part.par1 = 0;
} else if(element_count == 1) {
if(jo.has_member("par1")) {
next_part.par1 = jo.get_int("par1");
} else if(jo.has_member("wheel_width")) {
next_part.par1 = jo.get_int("wheel_width");
} else { //bonus
next_part.par1 = jo.get_int("bonus");
}
} else {
//Too many
debugmsg("Error parsing vehicle part '%s': \
Use AT MOST one of: par1, wheel_width, bonus",
next_part.name.c_str());
//Keep going to produce more messages if other parts are wrong
next_part.par1 = 0;
}
next_part.fuel_type = jo.get_string( "fuel_type", "null" );
next_part.item = jo.get_string("item");
next_part.difficulty = jo.get_int("difficulty");
next_part.location = jo.has_member("location") ? jo.get_string("location") : "";
JsonArray jarr = jo.get_array("flags");
while (jarr.has_more()) {
next_part.set_flag( jarr.next_string() );
}
if( jo.has_member( "breaks_into" ) ) {
JsonIn& stream = *jo.get_raw( "breaks_into" );
next_part.breaks_into_group = item_group::load_item_group( stream, "collection" );
} else {
next_part.breaks_into_group = "EMPTY_GROUP";
}
//Calculate and cache z-ordering based off of location
// list_order is used when inspecting the vehicle
if(next_part.location == "on_roof") {
next_part.z_order = 9;
next_part.list_order = 3;
} else if(next_part.location == "on_cargo") {
next_part.z_order = 8;
next_part.list_order = 6;
} else if(next_part.location == "center") {
next_part.z_order = 7;
next_part.list_order = 7;
} else if(next_part.location == "under") {
//Have wheels show up over frames
next_part.z_order = 6;
next_part.list_order = 10;
} else if(next_part.location == "structure") {
next_part.z_order = 5;
next_part.list_order = 1;
} else if(next_part.location == "engine_block") {
//Should be hidden by frames
next_part.z_order = 4;
next_part.list_order = 8 ;
} else if (next_part.location == "on_battery_mount"){
//Should be hidden by frames
next_part.z_order = 3;
next_part.list_order = 10;
} else if(next_part.location == "fuel_source") {
//Should be hidden by frames
next_part.z_order = 3;
next_part.list_order = 9;
} else if(next_part.location == "roof") {
//Shouldn't be displayed
next_part.z_order = -1;
next_part.list_order = 4;
} else if(next_part.location == "armor") {
//Shouldn't be displayed (the color is used, but not the symbol)
next_part.z_order = -2;
next_part.list_order = 2;
//.........这里部分代码省略.........
示例8: load
/**
*Caches a vehicle definition from a JsonObject to be loaded after itypes is initialized.
*/
void vehicle_prototype::load(JsonObject &jo)
{
vehicle_prototype &vproto = vtypes[ vproto_id( jo.get_string( "id" ) ) ];
// If there are already parts defined, this vehicle prototype overrides an existing one.
// If the json contains a name, it means a completely new prototype (replacing the
// original one), therefor the old data has to be cleared.
// If the json does not contain a name (the prototype would have no name), it means appending
// to the existing prototype (the parts are not cleared).
if( !vproto.parts.empty() && jo.has_string( "name" ) ) {
vproto = vehicle_prototype();
}
if( vproto.parts.empty() ) {
vproto.name = jo.get_string( "name" );
}
vgroups[vgroup_id(jo.get_string("id"))].add_vehicle(vproto_id(jo.get_string("id")), 100);
JsonArray parts = jo.get_array("parts");
while (parts.has_more()) {
JsonObject part = parts.next_object();
part_def pt;
pt.pos = point( part.get_int( "x" ), part.get_int( "y" ) );
pt.part = vpart_str_id( part.get_string( "part" ) );
assign( part, "ammo", pt.with_ammo, true, 0, 100 );
vproto.parts.push_back( pt );
}
JsonArray items = jo.get_array("items");
while(items.has_more()) {
JsonObject spawn_info = items.next_object();
vehicle_item_spawn next_spawn;
next_spawn.pos.x = spawn_info.get_int("x");
next_spawn.pos.y = spawn_info.get_int("y");
next_spawn.chance = spawn_info.get_int("chance");
if(next_spawn.chance <= 0 || next_spawn.chance > 100) {
debugmsg("Invalid spawn chance in %s (%d, %d): %d%%",
vproto.name.c_str(), next_spawn.pos.x, next_spawn.pos.y, next_spawn.chance);
}
// constrain both with_magazine and with_ammo to [0-100]
next_spawn.with_magazine = std::max( std::min( spawn_info.get_int( "magazine", next_spawn.with_magazine ), 100 ), 0 );
next_spawn.with_ammo = std::max( std::min( spawn_info.get_int( "ammo", next_spawn.with_ammo ), 100 ), 0 );
if(spawn_info.has_array("items")) {
//Array of items that all spawn together (ie jack+tire)
JsonArray item_group = spawn_info.get_array("items");
while(item_group.has_more()) {
next_spawn.item_ids.push_back(item_group.next_string());
}
} else if(spawn_info.has_string("items")) {
//Treat single item as array
next_spawn.item_ids.push_back(spawn_info.get_string("items"));
}
if(spawn_info.has_array("item_groups")) {
//Pick from a group of items, just like map::place_items
JsonArray item_group_names = spawn_info.get_array("item_groups");
while(item_group_names.has_more()) {
next_spawn.item_groups.push_back(item_group_names.next_string());
}
} else if(spawn_info.has_string("item_groups")) {
next_spawn.item_groups.push_back(spawn_info.get_string("item_groups"));
}
vproto.item_spawns.push_back( std::move( next_spawn ) );
}
}
示例9: load_vehiclepart
/**
* Reads in a vehicle part from a JsonObject.
*/
void game::load_vehiclepart(JsonObject &jo)
{
vpart_info next_part;
next_part.id = jo.get_string("id");
next_part.name = _(jo.get_string("name").c_str());
next_part.sym = jo.get_string("symbol")[0];
next_part.color = color_from_string(jo.get_string("color"));
next_part.sym_broken = jo.get_string("broken_symbol")[0];
next_part.color_broken = color_from_string(jo.get_string("broken_color"));
next_part.dmg_mod = jo.has_member("damage_modifier") ? jo.get_int("damage_modifier") : 100;
next_part.durability = jo.get_int("durability");
if(jo.has_member("power")) {
next_part.power = jo.get_int("power");
} else { //defaults to 0
next_part.power = 0;
}
//Handle the par1 union as best we can by accepting any ONE of its elements
int element_count = (jo.has_member("par1") ? 1 : 0)
+ (jo.has_member("size") ? 1 : 0)
+ (jo.has_member("wheel_width") ? 1 : 0)
+ (jo.has_member("bonus") ? 1 : 0);
if(element_count == 0) {
//If not specified, assume 0
next_part.par1 = 0;
} else if(element_count == 1) {
if(jo.has_member("par1")) {
next_part.par1 = jo.get_int("par1");
} else if(jo.has_member("size")) {
next_part.par1 = jo.get_int("size");
} else if(jo.has_member("wheel_width")) {
next_part.par1 = jo.get_int("wheel_width");
} else { //bonus
next_part.par1 = jo.get_int("bonus");
}
} else {
//Too many
debugmsg("Error parsing vehicle part '%s': \
Use AT MOST one of: par1, power, size, wheel_width, bonus",
next_part.name.c_str());
//Keep going to produce more messages if other parts are wrong
next_part.par1 = 0;
}
next_part.fuel_type = jo.has_member("fuel_type") ? jo.get_string("fuel_type") : "NULL";
next_part.item = jo.get_string("item");
next_part.difficulty = jo.get_int("difficulty");
next_part.location = jo.has_member("location") ? jo.get_string("location") : "";
JsonArray jarr = jo.get_array("flags");
while (jarr.has_more()){
next_part.flags.insert(jarr.next_string());
}
//Plating shouldn't actually be shown; another part will be.
//Calculate and cache z-ordering based off of location
if(next_part.has_flag("ARMOR")) {
next_part.z_order = -2;
} else if(next_part.location == "on_roof") {
next_part.z_order = 8;
} else if(next_part.location == "center") {
next_part.z_order = 7;
} else if(next_part.location == "under") {
//Have wheels show up over frames
next_part.z_order = 6;
} else if(next_part.location == "structure") {
next_part.z_order = 5;
} else if(next_part.location == "engine_block") {
//Should be hidden by frames
next_part.z_order = 4;
} else if(next_part.location == "fuel_source") {
//Should be hidden by frames
next_part.z_order = 3;
} else if(next_part.location == "roof") {
//Shouldn't be displayed
next_part.z_order = -1;
} else {
//Everything else
next_part.z_order = 0;
}
vehicle_part_types[next_part.id] = next_part;
}
示例10: LoadMonsterGroup
void MonsterGroupManager::LoadMonsterGroup( JsonObject &jo )
{
float mon_upgrade_factor = get_option<float>( "MONSTER_UPGRADE_FACTOR" );
MonsterGroup g;
g.name = mongroup_id( jo.get_string( "name" ) );
bool extending = false; //If already a group with that name, add to it instead of overwriting it
if( monsterGroupMap.count( g.name ) != 0 && !jo.get_bool( "override", false ) ) {
g = monsterGroupMap[g.name];
extending = true;
}
if( !extending
|| jo.has_string( "default" ) ) { //Not mandatory to specify default if extending existing group
g.defaultMonster = mtype_id( jo.get_string( "default" ) );
}
if( jo.has_array( "monsters" ) ) {
JsonArray monarr = jo.get_array( "monsters" );
while( monarr.has_more() ) {
JsonObject mon = monarr.next_object();
const mtype_id name = mtype_id( mon.get_string( "monster" ) );
int freq = mon.get_int( "freq" );
int cost = mon.get_int( "cost_multiplier" );
int pack_min = 1;
int pack_max = 1;
if( mon.has_member( "pack_size" ) ) {
JsonArray packarr = mon.get_array( "pack_size" );
pack_min = packarr.next_int();
pack_max = packarr.next_int();
}
static const time_duration tdfactor = 1_hours;
time_duration starts = 0_turns;
time_duration ends = 0_turns;
if( mon.has_member( "starts" ) ) {
starts = tdfactor * mon.get_int( "starts" ) * ( mon_upgrade_factor > 0 ? mon_upgrade_factor : 1 );
}
if( mon.has_member( "ends" ) ) {
ends = tdfactor * mon.get_int( "ends" ) * ( mon_upgrade_factor > 0 ? mon_upgrade_factor : 1 );
}
MonsterGroupEntry new_mon_group = MonsterGroupEntry( name, freq, cost, pack_min, pack_max, starts,
ends );
if( mon.has_member( "conditions" ) ) {
JsonArray conditions_arr = mon.get_array( "conditions" );
while( conditions_arr.has_more() ) {
new_mon_group.conditions.push_back( conditions_arr.next_string() );
}
}
g.monsters.push_back( new_mon_group );
}
}
g.replace_monster_group = jo.get_bool( "replace_monster_group", false );
g.new_monster_group = mongroup_id( jo.get_string( "new_monster_group_id",
mongroup_id::NULL_ID().str() ) );
assign( jo, "replacement_time", g.monster_group_time, false, 1_days );
g.is_safe = jo.get_bool( "is_safe", false );
g.freq_total = jo.get_int( "freq_total", ( extending ? g.freq_total : 1000 ) );
if( jo.get_bool( "auto_total", false ) ) { //Fit the max size to the sum of all freqs
int total = 0;
for( MonsterGroupEntry &mon : g.monsters ) {
total += mon.frequency;
}
g.freq_total = total;
}
monsterGroupMap[g.name] = g;
}
示例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: jsonstream
//Basic Init, create the font, backbuffer, etc
WINDOW *curses_init(void)
{
// _windows = new WINDOW[20]; //initialize all of our variables
lastchar=-1;
inputdelay=-1;
int fontsize = 16;
std::string typeface;
char * typeface_c;
int map_fontwidth = 8;
int map_fontheight = 16;
int map_fontsize = 16;
std::string map_typeface;
bool fontblending;
std::ifstream jsonstream(FILENAMES["fontdata"].c_str(), std::ifstream::binary);
if (jsonstream.good()) {
JsonIn json(jsonstream);
JsonObject config = json.get_object();
// fontsize, fontblending, map_* are ignored in wincurse.
fontwidth = config.get_int("fontwidth", fontwidth);
fontheight = config.get_int("fontheight", fontheight);
typeface = config.get_string("typeface", typeface);
jsonstream.close();
} else { // User fontdata is missed. Try to load legacy fontdata.
// Get and save all values. With unused.
std::ifstream InStream(FILENAMES["legacy_fontdata"].c_str(), std::ifstream::binary);
if(InStream.good()) {
JsonIn jIn(InStream);
JsonObject config = jIn.get_object();
fontwidth = config.get_int("fontwidth", fontwidth);
fontheight = config.get_int("fontheight", fontheight);
fontsize = config.get_int("fontsize", fontsize);
typeface = config.get_string("typeface", typeface);
map_fontwidth = config.get_int("map_fontwidth", fontwidth);
map_fontheight = config.get_int("map_fontheight", fontheight);
map_fontsize = config.get_int("map_fontsize", fontsize);
map_typeface = config.get_string("map_typeface", typeface);
InStream.close();
// Save legacy as user fontdata.
assure_dir_exist(FILENAMES["config_dir"]);
std::ofstream OutStream(FILENAMES["fontdata"].c_str(), std::ofstream::binary);
if(!OutStream.good()) {
DebugLog() << "Can't save user fontdata file.\n"
<< "Check permissions for: " << FILENAMES["fontdata"].c_str();
return NULL;
}
JsonOut jOut(OutStream, true); // pretty-print
jOut.start_object();
jOut.member("fontblending", fontblending);
jOut.member("fontwidth", fontwidth);
jOut.member("fontheight", fontheight);
jOut.member("fontsize", fontsize);
jOut.member("typeface", typeface);
jOut.member("map_fontwidth", map_fontwidth);
jOut.member("map_fontheight", map_fontheight);
jOut.member("map_fontsize", map_fontsize);
jOut.member("map_typeface", map_typeface);
jOut.end_object();
OutStream << "\n";
OutStream.close();
} else {
DebugLog() << "Can't load fontdata files.\n"
<< "Check permissions for:\n" << FILENAMES["legacy_fontdata"].c_str() << "\n"
<< FILENAMES["fontdata"].c_str() << "\n";
return NULL;
}
}
typeface_c = new char [typeface.size()+1];
strncpy (typeface_c, typeface.c_str(), typeface.size());
typeface_c[typeface.size()] = '\0';
halfwidth=fontwidth / 2;
halfheight=fontheight / 2;
WindowWidth= OPTIONS["TERMINAL_X"] * fontwidth;
WindowHeight = OPTIONS["TERMINAL_Y"] * fontheight;
WinCreate(); //Create the actual window, register it, etc
timeBeginPeriod(1); // Set Sleep resolution to 1ms
CheckMessages(); //Let the message queue handle setting up the window
WindowDC = GetDC(WindowHandle);
backbuffer = CreateCompatibleDC(WindowDC);
BITMAPINFO bmi = BITMAPINFO();
bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
bmi.bmiHeader.biWidth = WindowWidth;
bmi.bmiHeader.biHeight = -WindowHeight;
bmi.bmiHeader.biPlanes = 1;
bmi.bmiHeader.biBitCount = 8;
bmi.bmiHeader.biCompression = BI_RGB; // Raw RGB
bmi.bmiHeader.biSizeImage = WindowWidth * WindowHeight * 1;
bmi.bmiHeader.biClrUsed = 16; // Colors in the palette
bmi.bmiHeader.biClrImportant = 16; // Colors in the palette
backbit = CreateDIBSection(0, &bmi, DIB_RGB_COLORS, (void**)&dcbits, NULL, 0);
DeleteObject(SelectObject(backbuffer, backbit));//load the buffer into DC
// Load private fonts
if (SetCurrentDirectory("data\\font")){
//.........这里部分代码省略.........
示例13: load_buff
ma_buff load_buff(JsonObject &jo)
{
ma_buff buff;
buff.id = jo.get_string("id");
buff.name = _(jo.get_string("name").c_str());
buff.description = _(jo.get_string("description").c_str());
buff.buff_duration = jo.get_int("buff_duration", 2);
buff.max_stacks = jo.get_int("max_stacks", 1);
buff.reqs.unarmed_allowed = jo.get_bool("unarmed_allowed", false);
buff.reqs.melee_allowed = jo.get_bool("melee_allowed", false);
buff.reqs.min_melee = jo.get_int("min_melee", 0);
buff.reqs.min_unarmed = jo.get_int("min_unarmed", 0);
buff.dodges_bonus = jo.get_int("bonus_dodges", 0);
buff.blocks_bonus = jo.get_int("bonus_blocks", 0);
buff.hit = jo.get_int("hit", 0);
buff.bash = jo.get_int("bash", 0);
buff.cut = jo.get_int("cut", 0);
buff.dodge = jo.get_int("dodge", 0);
buff.speed = jo.get_int("speed", 0);
buff.block = jo.get_int("block", 0);
buff.arm_bash = jo.get_int("arm_bash", 0);
buff.arm_cut = jo.get_int("arm_cut", 0);
buff.bash_stat_mult = jo.get_float("bash_mult", 1.0);
buff.cut_stat_mult = jo.get_float("cut_mult", 1.0);
buff.hit_str = jo.get_float("hit_str", 0.0);
buff.hit_dex = jo.get_float("hit_dex", 0.0);
buff.hit_int = jo.get_float("hit_int", 0.0);
buff.hit_per = jo.get_float("hit_per", 0.0);
buff.bash_str = jo.get_float("bash_str", 0.0);
buff.bash_dex = jo.get_float("bash_dex", 0.0);
buff.bash_int = jo.get_float("bash_int", 0.0);
buff.bash_per = jo.get_float("bash_per", 0.0);
buff.cut_str = jo.get_float("cut_str", 0.0);
buff.cut_dex = jo.get_float("cut_dex", 0.0);
buff.cut_int = jo.get_float("cut_int", 0.0);
buff.cut_per = jo.get_float("cut_per", 0.0);
buff.dodge_str = jo.get_float("dodge_str", 0.0);
buff.dodge_dex = jo.get_float("dodge_dex", 0.0);
buff.dodge_int = jo.get_float("dodge_int", 0.0);
buff.dodge_per = jo.get_float("dodge_per", 0.0);
buff.block_str = jo.get_float("block_str", 0.0);
buff.block_dex = jo.get_float("block_dex", 0.0);
buff.block_int = jo.get_float("block_int", 0.0);
buff.block_per = jo.get_float("block_per", 0.0);
buff.quiet = jo.get_bool("quiet", false);
buff.throw_immune = jo.get_bool("throw_immune", false);
buff.reqs.req_buffs = jo.get_tags("req_buffs");
ma_buffs[buff.id] = buff;
return buff;
}
示例14: 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);
}
示例15: deserialize
void it_artifact_armor::deserialize(JsonObject &jo)
{
id = jo.get_string("id");
name = jo.get_string("name");
description = jo.get_string("description");
sym = jo.get_int("sym");
color = int_to_color(jo.get_int("color"));
price = jo.get_int("price");
m1 = jo.get_string("m1");
m2 = jo.get_string("m2");
volume = jo.get_int("volume");
weight = jo.get_int("weight");
melee_dam = jo.get_int("melee_dam");
melee_cut = jo.get_int("melee_cut");
m_to_hit = jo.get_int("m_to_hit");
item_tags = jo.get_tags("item_flags");
covers = jo.get_int("covers");
encumber = jo.get_int("encumber");
coverage = jo.get_int("coverage");
thickness = jo.get_int("material_thickness");
env_resist = jo.get_int("env_resist");
warmth = jo.get_int("warmth");
storage = jo.get_int("storage");
power_armor = jo.get_bool("power_armor");
JsonArray ja = jo.get_array("effects_worn");
while (ja.has_more()) {
effects_worn.push_back((art_effect_passive)ja.next_int());
}
}