mission_type_id mission::mission_id() { if( type == nullptr ) { return mission_type_id( "NULL" ); } return type->id; }
void talk_function::lead_to_safety( npc &p ) { const auto mission = mission::reserve_new( mission_type_id( "MISSION_REACH_SAFETY" ), -1 ); mission->assign( g->u ); p.goal = mission->get_target(); p.set_attitude( NPCATT_LEAD ); }
void mission_type::load( JsonObject &jo, const std::string & ) { mandatory( jo, was_loaded, "name", name, translated_string_reader ); mandatory( jo, was_loaded, "difficulty", difficulty ); mandatory( jo, was_loaded, "value", value ); auto djo = jo.get_object( "dialogue" ); // @todo There should be a cleaner way to do it mandatory( djo, was_loaded, "describe", dialogue[ "describe" ] ); mandatory( djo, was_loaded, "offer", dialogue[ "offer" ] ); mandatory( djo, was_loaded, "accepted", dialogue[ "accepted" ] ); mandatory( djo, was_loaded, "rejected", dialogue[ "rejected" ] ); mandatory( djo, was_loaded, "advice", dialogue[ "advice" ] ); mandatory( djo, was_loaded, "inquire", dialogue[ "inquire" ] ); mandatory( djo, was_loaded, "success", dialogue[ "success" ] ); mandatory( djo, was_loaded, "success_lie", dialogue[ "success_lie" ] ); mandatory( djo, was_loaded, "failure", dialogue[ "failure" ] ); optional( jo, was_loaded, "urgent", urgent ); optional( jo, was_loaded, "item", item_id ); optional( jo, was_loaded, "count", item_count, 1 ); goal = jo.get_enum_value<decltype(goal)>( "goal" ); assign_function( jo, "place", place, tripoint_function_map ); assign_function( jo, "start", start, mission_function_map ); assign_function( jo, "end", end, mission_function_map ); assign_function( jo, "fail", fail, mission_function_map ); if( jo.has_int( "deadline_low" ) ) { deadline_low = DAYS( jo.get_int( "deadline_low" ) ); } if( jo.has_int( "deadline_high" ) ) { deadline_high = DAYS( jo.get_int( "deadline_high" ) ); } if( jo.has_member( "origins" ) ) { origins.clear(); for( auto &m : jo.get_tags( "origins" ) ) { origins.emplace_back( io::string_to_enum_look_up( io::origin_map, m ) ); } } if( jo.has_member( "followup" ) ) { follow_up = mission_type_id( jo.get_string( "followup" ) ); } if( jo.has_member( "destination" ) ) { target_id = oter_id( jo.get_string( "destination" ) ); } }
mission_type_id mission_type::from_legacy( int old_id ) { static const std::vector<mission_type_id> old_id_vec = {{ mission_type_id( "MISSION_NULL" ), mission_type_id( "MISSION_GET_ANTIBIOTICS" ), mission_type_id( "MISSION_GET_SOFTWARE" ), mission_type_id( "MISSION_GET_ZOMBIE_BLOOD_ANAL" ), mission_type_id( "MISSION_RESCUE_DOG" ), mission_type_id( "MISSION_KILL_ZOMBIE_MOM" ), mission_type_id( "MISSION_REACH_SAFETY" ), mission_type_id( "MISSION_GET_FLAG" ), mission_type_id( "MISSION_GET_BLACK_BOX" ), mission_type_id( "MISSION_GET_BLACK_BOX_TRANSCRIPT" ), mission_type_id( "MISSION_EXPLORE_SARCOPHAGUS" ), mission_type_id( "MISSION_GET_RELIC" ), mission_type_id( "MISSION_RECOVER_PRIEST_DIARY" ), mission_type_id( "MISSION_INVESTIGATE_CULT" ), mission_type_id( "MISSION_INVESTIGATE_PRISON_VISIONARY" ), mission_type_id( "MISSION_GET_RECORD_WEATHER" ), mission_type_id( "MISSION_GET_RECORD_PATIENT" ), mission_type_id( "MISSION_REACH_FEMA_CAMP" ), mission_type_id( "MISSION_REACH_FARM_HOUSE" ), mission_type_id( "MISSION_GET_RECORD_ACCOUNTING" ), mission_type_id( "MISSION_GET_SAFE_BOX" ), mission_type_id( "MISSION_GET_DEPUTY_BADGE" ), mission_type_id( "MISSION_KILL_JABBERWOCK" ), mission_type_id( "MISSION_KILL_100_Z" ), mission_type_id( "MISSION_KILL_HORDE_MASTER" ), mission_type_id( "MISSION_RECRUIT_TRACKER" ), mission_type_id( "MISSION_JOIN_TRACKER" ), mission_type_id( "MISSION_FREE_MERCHANTS_EVAC_1" ), mission_type_id( "MISSION_FREE_MERCHANTS_EVAC_2" ), mission_type_id( "MISSION_FREE_MERCHANTS_EVAC_4" ), mission_type_id( "MISSION_OLD_GUARD_REP_1" ), mission_type_id( "MISSION_OLD_GUARD_REP_2" ), mission_type_id( "MISSION_OLD_GUARD_REP_3" ), mission_type_id( "MISSION_OLD_GUARD_REP_4" ), mission_type_id( "MISSION_OLD_GUARD_NEC_1" ), mission_type_id( "MISSION_OLD_GUARD_NEC_2" ), mission_type_id( "MISSION_OLD_GUARD_NEC_COMMO_1" ), mission_type_id( "MISSION_OLD_GUARD_NEC_COMMO_2" ), mission_type_id( "MISSION_OLD_GUARD_NEC_COMMO_3" ), mission_type_id( "MISSION_OLD_GUARD_NEC_COMMO_4" ), mission_type_id( "MISSION_RANCH_FOREMAN_1" ), mission_type_id( "MISSION_RANCH_FOREMAN_2" ), mission_type_id( "MISSION_RANCH_FOREMAN_3" ), mission_type_id( "MISSION_RANCH_FOREMAN_4" ), mission_type_id( "MISSION_RANCH_FOREMAN_5" ), mission_type_id( "MISSION_RANCH_FOREMAN_6" ), mission_type_id( "MISSION_RANCH_FOREMAN_7" ), mission_type_id( "MISSION_RANCH_FOREMAN_8" ), mission_type_id( "MISSION_RANCH_FOREMAN_9" ), mission_type_id( "MISSION_RANCH_FOREMAN_10" ), mission_type_id( "MISSION_RANCH_FOREMAN_11" ), mission_type_id( "MISSION_RANCH_FOREMAN_12" ), mission_type_id( "MISSION_RANCH_FOREMAN_13" ), mission_type_id( "MISSION_RANCH_FOREMAN_14" ), mission_type_id( "MISSION_RANCH_FOREMAN_15" ), mission_type_id( "MISSION_RANCH_FOREMAN_16" ), mission_type_id( "MISSION_RANCH_FOREMAN_17" ), mission_type_id( "MISSION_RANCH_NURSE_1" ), mission_type_id( "MISSION_RANCH_NURSE_2" ), mission_type_id( "MISSION_RANCH_NURSE_3" ), mission_type_id( "MISSION_RANCH_NURSE_4" ), mission_type_id( "MISSION_RANCH_NURSE_5" ), mission_type_id( "MISSION_RANCH_NURSE_6" ), mission_type_id( "MISSION_RANCH_NURSE_7" ), mission_type_id( "MISSION_RANCH_NURSE_8" ), mission_type_id( "MISSION_RANCH_NURSE_9" ), mission_type_id( "MISSION_RANCH_NURSE_10" ), mission_type_id( "MISSION_RANCH_NURSE_11" ), mission_type_id( "MISSION_RANCH_SCAVENGER_1" ), mission_type_id( "MISSION_RANCH_SCAVENGER_2" ), mission_type_id( "MISSION_RANCH_SCAVENGER_3" ), mission_type_id( "MISSION_RANCH_SCAVENGER_4" ), mission_type_id( "MISSION_RANCH_BARTENDER_1" ), mission_type_id( "MISSION_RANCH_BARTENDER_2" ), mission_type_id( "MISSION_RANCH_BARTENDER_3" ), mission_type_id( "MISSION_RANCH_BARTENDER_4" ), mission_type_id( "MISSION_RANCH_BARTENDER_5" ), mission_type_id( "MISSION_FREE_MERCHANTS_EVAC_3" ), // This is to help with the bugged find book mission mission_type_id( "MISSION_NULL" ) } }; if( old_id >= 0 && old_id < static_cast<int>( old_id_vec.size() ) ) { return old_id_vec[ old_id ]; } debugmsg( "Invalid legacy mission id: %d", old_id ); return mission_type_id( "MISSION_NULL" ); }
void mission_type::load( JsonObject &jo, const std::string &src ) { const bool strict = src == "dda"; mandatory( jo, was_loaded, "name", name ); mandatory( jo, was_loaded, "difficulty", difficulty ); mandatory( jo, was_loaded, "value", value ); if( jo.has_member( "origins" ) ) { origins.clear(); for( auto &m : jo.get_tags( "origins" ) ) { origins.emplace_back( io::string_to_enum_look_up( io::origin_map, m ) ); } } if( std::any_of( origins.begin(), origins.end(), []( mission_origin origin ) { return origin == ORIGIN_ANY_NPC || origin == ORIGIN_OPENER_NPC || origin == ORIGIN_SECONDARY; } ) ) { auto djo = jo.get_object( "dialogue" ); // TODO: There should be a cleaner way to do it mandatory( djo, was_loaded, "describe", dialogue[ "describe" ] ); mandatory( djo, was_loaded, "offer", dialogue[ "offer" ] ); mandatory( djo, was_loaded, "accepted", dialogue[ "accepted" ] ); mandatory( djo, was_loaded, "rejected", dialogue[ "rejected" ] ); mandatory( djo, was_loaded, "advice", dialogue[ "advice" ] ); mandatory( djo, was_loaded, "inquire", dialogue[ "inquire" ] ); mandatory( djo, was_loaded, "success", dialogue[ "success" ] ); mandatory( djo, was_loaded, "success_lie", dialogue[ "success_lie" ] ); mandatory( djo, was_loaded, "failure", dialogue[ "failure" ] ); } optional( jo, was_loaded, "urgent", urgent ); optional( jo, was_loaded, "item", item_id ); optional( jo, was_loaded, "count", item_count, 1 ); goal = jo.get_enum_value<decltype( goal )>( "goal" ); assign_function( jo, "place", place, tripoint_function_map ); if( jo.has_string( "start" ) ) { assign_function( jo, "start", start, mission_function_map ); } else if( jo.has_member( "start" ) ) { JsonObject j_start = jo.get_object( "start" ); parse_start( j_start ); } assign_function( jo, "end", end, mission_function_map ); assign_function( jo, "fail", fail, mission_function_map ); assign( jo, "deadline_low", deadline_low, false, 1_days ); assign( jo, "deadline_high", deadline_high, false, 1_days ); if( jo.has_member( "followup" ) ) { follow_up = mission_type_id( jo.get_string( "followup" ) ); } if( jo.has_member( "monster_species" ) ) { monster_species = species_id( jo.get_string( "monster_species" ) ); } if( jo.has_member( "monster_type" ) ) { monster_type = mtype_id( jo.get_string( "monster_type" ) ); } if( jo.has_member( "monster_kill_goal" ) ) { monster_kill_goal = jo.get_int( "monster_kill_goal" ); } assign( jo, "destination", target_id, strict ); }