本文整理汇总了C++中JsonObject::get_float方法的典型用法代码示例。如果您正苦于以下问题:C++ JsonObject::get_float方法的具体用法?C++ JsonObject::get_float怎么用?C++ JsonObject::get_float使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类JsonObject
的用法示例。
在下文中一共展示了JsonObject::get_float方法的14个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: 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;
}
示例2: load_technique
void load_technique(JsonObject &jo)
{
ma_technique tec;
tec.id = jo.get_string("id");
tec.name = jo.get_string("name", "");
if (!tec.name.empty()) {
tec.name = _(tec.name.c_str());
}
JsonArray jsarr = jo.get_array("messages");
while (jsarr.has_more()) {
tec.messages.push_back(_(jsarr.next_string().c_str()));
}
tec.reqs.unarmed_allowed = jo.get_bool("unarmed_allowed", false);
tec.reqs.melee_allowed = jo.get_bool("melee_allowed", false);
tec.reqs.min_melee = jo.get_int("min_melee", 0);
tec.reqs.min_unarmed = jo.get_int("min_unarmed", 0);
tec.reqs.min_bashing = jo.get_int("min_bashing", 0);
tec.reqs.min_cutting = jo.get_int("min_cutting", 0);
tec.reqs.min_stabbing = jo.get_int("min_stabbing", 0);
tec.reqs.min_bashing_damage = jo.get_int("min_bashing_damage", 0);
tec.reqs.min_cutting_damage = jo.get_int("min_cutting_damage", 0);
tec.reqs.req_buffs = jo.get_tags("req_buffs");
tec.reqs.req_flags = jo.get_tags("req_flags");
tec.crit_tec = jo.get_bool("crit_tec", false);
tec.defensive = jo.get_bool("defensive", false);
tec.disarms = jo.get_bool("disarms", false);
tec.dodge_counter = jo.get_bool("dodge_counter", false);
tec.block_counter = jo.get_bool("block_counter", false);
tec.miss_recovery = jo.get_bool("miss_recovery", false);
tec.grab_break = jo.get_bool("grab_break", false);
tec.flaming = jo.get_bool("flaming", false);
tec.hit = jo.get_int("pain", 0);
tec.bash = jo.get_int("bash", 0);
tec.cut = jo.get_int("cut", 0);
tec.pain = jo.get_int("pain", 0);
tec.weighting = jo.get_int("weighting", 1);
tec.bash_mult = jo.get_float("bash_mult", 1.0);
tec.cut_mult = jo.get_float("cut_mult", 1.0);
tec.speed_mult = jo.get_float("speed_mult", 1.0);
tec.down_dur = jo.get_int("down_dur", 0);
tec.stun_dur = jo.get_int("stun_dur", 0);
tec.knockback_dist = jo.get_int("knockback_dist", 0);
tec.knockback_spread = jo.get_int("knockback_spread", 0);
tec.aoe = jo.get_string("aoe", "");
tec.flags = jo.get_tags("flags");
ma_techniques[tec.id] = tec;
}
示例3: load
weather_generator weather_generator::load( JsonObject &jo )
{
weather_generator ret;
ret.base_temperature = jo.get_float( "base_temperature", 6.5 );
ret.base_humidity = jo.get_float( "base_humidity", 66.0 );
ret.base_pressure = jo.get_float( "base_pressure", 1015.0 );
ret.base_acid = jo.get_float( "base_acid", 1015.0 );
return ret;
}
示例4: load
void leap_actor::load( JsonObject &obj )
{
// Mandatory:
max_range = obj.get_float( "max_range" );
// Optional:
min_range = obj.get_float( "min_range", 1.0f );
allow_no_target = obj.get_bool( "allow_no_target", true );
move_cost = obj.get_int( "move_cost", 150 );
min_consider_range = obj.get_float( "min_consider_range", 0.0f );
max_consider_range = obj.get_float( "max_consider_range", 200.0f );
}
示例5: load_damage_unit
damage_unit load_damage_unit( JsonObject &curr )
{
damage_type dt = dt_by_name( curr.get_string( "damage_type" ) );
if( dt == DT_NULL ) {
curr.throw_error( "Invalid damage type" );
}
float amount = curr.get_float( "amount" );
int arpen = curr.get_int( "armor_penetration", 0 );
float armor_mul = curr.get_float( "armor_multiplier", 1.0f );
float damage_mul = curr.get_float( "damage_multiplier", 1.0f );
return damage_unit( dt, amount, arpen, armor_mul, damage_mul );
}
示例6: load_material
// load a material object from incoming JSON
void material_type::load_material( JsonObject &jsobj )
{
material_type mat;
mat._ident = jsobj.get_string( "ident" );
mat._name = _( jsobj.get_string( "name" ).c_str() );
mat._salvage_id = jsobj.get_string( "salvage_id", "null" );
mat._salvage_multiplier = jsobj.get_float( "salvage_multiplier", 1.0 );
mat._bash_resist = jsobj.get_int( "bash_resist" );
mat._cut_resist = jsobj.get_int( "cut_resist" );
mat._bash_dmg_verb = _( jsobj.get_string( "bash_dmg_verb" ).c_str() );
mat._cut_dmg_verb = _( jsobj.get_string( "cut_dmg_verb" ).c_str() );
mat._acid_resist = jsobj.get_int( "acid_resist" );
mat._elec_resist = jsobj.get_int( "elec_resist" );
mat._fire_resist = jsobj.get_int( "fire_resist" );
mat._chip_resist = jsobj.get_int( "chip_resist" );
mat._density = jsobj.get_int( "density" );
JsonArray jsarr = jsobj.get_array( "dmg_adj" );
mat._dmg_adj[0] = _( jsarr.next_string().c_str() );
mat._dmg_adj[1] = _( jsarr.next_string().c_str() );
mat._dmg_adj[2] = _( jsarr.next_string().c_str() );
mat._dmg_adj[3] = _( jsarr.next_string().c_str() );
_all_materials[mat._ident] = mat;
DebugLog( D_INFO, DC_ALL ) << "Loaded material: " << mat._name;
}
示例7: load_distribution
distribution load_distribution( JsonObject &jo )
{
if( jo.has_float( "constant" ) ) {
return distribution::constant( jo.get_float( "constant" ) );
}
if( jo.has_float( "one_in" ) ) {
return distribution::one_in( jo.get_float( "one_in" ) );
}
if( jo.has_array( "dice" ) ) {
JsonArray jarr = jo.get_array( "dice" );
return distribution::dice_roll( jarr.get_int( 0 ), jarr.get_int( 1 ) );
}
if( jo.has_array( "rng" ) ) {
JsonArray jarr = jo.get_array( "rng" );
return distribution::rng_roll( jarr.get_int( 0 ), jarr.get_int( 1 ) );
}
if( jo.has_array( "sum" ) ) {
JsonArray jarr = jo.get_array( "sum" );
JsonObject obj = jarr.next_object();
distribution ret = load_distribution( obj );
while( jarr.has_more() ) {
obj = jarr.next_object();
ret = ret + load_distribution( obj );
}
return ret;
}
if( jo.has_array( "mul" ) ) {
JsonArray jarr = jo.get_array( "mul" );
JsonObject obj = jarr.next_object();
distribution ret = load_distribution( obj );
while( jarr.has_more() ) {
obj = jarr.next_object();
ret = ret * load_distribution( obj );
}
return ret;
}
jo.throw_error( "Invalid distribution" );
return distribution();
}
示例8: 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->luminance = jo.get_float("luminance", 0);
newmon->dies = get_death_functions(jo, "death_function");
newmon->sp_attack = get_attack_function(jo, "special_attack");
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;
}
}
示例9:
std::array<float, NUM_DT> load_damage_array( JsonObject &jo )
{
std::array<float, NUM_DT> ret;
float init_val = jo.get_float( "all", 0.0f );
float phys = jo.get_float( "physical", init_val );
ret[ DT_BASH ] = jo.get_float( "bash", phys );
ret[ DT_CUT ] = jo.get_float( "cut", phys );
ret[ DT_STAB ] = jo.get_float( "stab", phys );
float non_phys = jo.get_float( "non_physical", init_val );
ret[ DT_BIOLOGICAL ] = jo.get_float( "biological", non_phys );
ret[ DT_ACID ] = jo.get_float( "acid", non_phys );
ret[ DT_HEAT ] = jo.get_float( "heat", non_phys );
ret[ DT_COLD ] = jo.get_float( "cold", non_phys );
ret[ DT_ELECTRIC ] = jo.get_float( "electric", non_phys );
// DT_TRUE should never be resisted
ret[ DT_TRUE ] = 0.0f;
return ret;
}
示例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_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();
if(jo.has_member("name_plural")) {
newmon->name_plural = jo.get_string("name_plural");
} else {
// default behaviour: Assume the regular plural form (appending an “s”)
newmon->name_plural = jo.get_string("name") + "s";
}
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->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);
if (jo.has_string("death_drops")) {
newmon->death_drops = jo.get_string("death_drops");
} else if (jo.has_object("death_drops")) {
JsonObject death_frop_json = jo.get_object("death_drops");
// Make up a group name, should be unique (include the monster id),
newmon->death_drops = newmon->id + "_death_drops_auto";
const std::string subtype = death_frop_json.get_string("subtype", "distribution");
// and load the entry as a standard item group using the made up name.
item_controller->load_item_group(death_frop_json, newmon->death_drops, subtype);
} else if (jo.has_member("death_drops")) {
jo.throw_error("invalid type, must be string or object", "death_drops");
}
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;
}
}
示例12: 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;
}
示例13: load_monster
void MonsterGenerator::load_monster(JsonObject &jo)
{
const mtype_id mid = mtype_id( 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();
if(jo.has_member("name_plural")) {
newmon->name_plural = jo.get_string("name_plural");
} else {
// default behaviour: Assume the regular plural form (appending an “s”)
newmon->name_plural = newmon->name + "s";
}
newmon->description = _(jo.get_string("description").c_str());
// Have to overwrite the default { "hflesh" } here
newmon->mat = { jo.get_string("material") };
for( auto &s : jo.get_tags( "species" ) ) {
newmon->species.insert( species_id( s ) );
}
newmon->categories = jo.get_tags("categories");
// See monfaction.cpp
newmon->default_faction =
monfactions::get_or_add_faction( mfaction_str_id( jo.get_string("default_faction") ) );
newmon->sym = jo.get_string("symbol");
if( utf8_wrapper( newmon->sym ).display_width() != 1 ) {
jo.throw_error( "monster symbol should be exactly one console cell width", "symbol" );
}
newmon->color = color_from_string(jo.get_string("color"));
newmon->size = get_from_string(jo.get_string("size", "MEDIUM"), Creature::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->attack_cost = jo.get_int("attack_cost", 100);
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->hp = jo.get_int("hp", 0);
jo.read("starting_ammo", newmon->starting_ammo);
newmon->luminance = jo.get_float("luminance", 0);
newmon->revert_to_itype = jo.get_string( "revert_to_itype", "" );
newmon->vision_day = jo.get_int("vision_day", 40);
newmon->vision_night = jo.get_int("vision_night", 1);
if (jo.has_array("attack_effs")) {
JsonArray jsarr = jo.get_array("attack_effs");
while (jsarr.has_more()) {
JsonObject e = jsarr.next_object();
mon_effect_data new_eff(e.get_string("id", "null"), 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));
newmon->atk_effs.push_back(new_eff);
}
}
if( jo.has_member( "death_drops" ) ) {
JsonIn& stream = *jo.get_raw( "death_drops" );
newmon->death_drops = item_group::load_item_group( stream, "distribution" );
}
newmon->dies = get_death_functions(jo, "death_function");
load_special_defense(newmon, jo, "special_when_hit");
load_special_attacks(newmon, jo, "special_attacks");
if (jo.has_member("upgrades")) {
JsonObject upgrades = jo.get_object("upgrades");
newmon->half_life = upgrades.get_int("half_life", -1);
newmon->upgrade_group = mongroup_id( upgrades.get_string("into_group", mongroup_id::NULL_ID.str() ) );
newmon->upgrade_into = mtype_id( upgrades.get_string("into", mtype_id::NULL_ID.str() ) );
newmon->upgrades = true;
}
std::set<std::string> flags, anger_trig, placate_trig, fear_trig;
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;
}
示例14: 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();
if(jo.has_member("name_plural")) {
newmon->name_plural = jo.get_string("name_plural");
} else {
// default behaviour: Assume the regular plural form (appending an “s”)
newmon->name_plural = newmon->name + "s";
}
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");
if( utf8_wrapper( newmon->sym ).display_width() != 1 ) {
jo.throw_error( "monster symbol should be exactly one console cell width", "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->hp = jo.get_int("hp", 0);
jo.read("starting_ammo", newmon->starting_ammo);
newmon->luminance = jo.get_float("luminance", 0);
newmon->revert_to_itype = jo.get_string( "revert_to_itype", "" );
if (jo.has_array("attack_effs")) {
JsonArray jsarr = jo.get_array("attack_effs");
while (jsarr.has_more()) {
JsonObject e = jsarr.next_object();
mon_effect_data new_eff(e.get_string("id", "null"), e.get_int("duration", 0),
body_parts[e.get_string("bp", "NUM_BP")], e.get_bool("permanent", false),
e.get_int("chance", 100));
newmon->atk_effs.push_back(new_eff);
}
}
if (jo.has_string("death_drops")) {
newmon->death_drops = jo.get_string("death_drops");
} else if (jo.has_object("death_drops")) {
JsonObject death_frop_json = jo.get_object("death_drops");
// Make up a group name, should be unique (include the monster id),
newmon->death_drops = newmon->id + "_death_drops_auto";
const std::string subtype = death_frop_json.get_string("subtype", "distribution");
// and load the entry as a standard item group using the made up name.
item_group::load_item_group(death_frop_json, newmon->death_drops, subtype);
} else if (jo.has_member("death_drops")) {
jo.throw_error("invalid type, must be string or object", "death_drops");
}
newmon->dies = get_death_functions(jo, "death_function");
load_special_defense(newmon, jo, "special_when_hit");
load_special_attacks(newmon, jo, "special_attacks");
std::set<std::string> flags, anger_trig, placate_trig, fear_trig;
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;
}
}