#include "precompile.h" #include "mt/Param.h" #include "mt/SafeArea.h" IMPL_TABLE(mt::Param) mt::Param::S mt::Param::s_; #define METAMGR_READ(field_name, def_val) s_.field_name = \ a8::XValue(GetStringParam(#field_name, #def_val)); #define METAMGR_READ_STR(field_name, def_val) s_.field_name = \ a8::XValue(GetStringParam(#field_name, def_val)).GetString(); namespace mt { void Param::StaticPostInit() { { s_.gas_inactive_time = GetIntParam("gas_inactive_time"); s_.downed_relive_recover_hp = GetIntParam("downed_relive_recover_hp"); s_.kill_param = GetFloatParam("kill_parameter"); s_.rank_param = GetFloatParam("rank_parameter"); s_.fighting_mode = GetIntParam("fighting_mode", 1); s_.max_oil = GetIntParam("max_oil"); s_.max_mount_horse_distance = GetFloatParam("max_mount_horse_distance", 100); s_.map_cell_width = GetIntParam("map_cell_width", 64 * 8); #ifdef DEBUG s_.map_cell_width = 512; #endif s_.bullet_planck_step_length = std::max(15, GetIntParam("bullet_planck_step_length", 15)); s_.match_team_time = GetIntParam("match_team_time", 0); s_.match_robot_time = GetIntParam("match_robot_time", 0); s_.match_choose_time = GetIntParam("match_choose_time", 0); s_.match_lock_time = GetIntParam("match_lock_time", 0); s_.pickup_weapon_replace_type = GetIntParam("pickup_weapon_replace_type", 0); s_.sand_table_move_speed = GetIntParam("sand_table_move_speed", 500); s_.wait_cloud_time = GetIntParam("wait_cloud_time", 10); #if 1 s_.match_lock_time++; #endif #if 1 { std::string point = GetStringParam("newbie_room_born_point", "3471.3662:6.8399:5268.6240"); std::vector strings; a8::Split(point, strings, ':'); if (strings.size() != 3) { abort(); } s_.newbie_room_born_point = glm::vec3 ( (float)a8::XValue(strings[0]).GetDouble(), (float)a8::XValue(strings[1]).GetDouble(), (float)a8::XValue(strings[2]).GetDouble() ); } s_.newbie_room_hp_rate = a8::XValue(GetStringParam("newbie_room_hp_rate", "0.8")).GetDouble(); s_.newbie_room_hero_id = a8::XValue(GetStringParam("newbie_room_hero_id", "")); s_.newbie_room_weapon_id = a8::XValue(GetStringParam("newbie_room_weapon_id", "")); { std::string point = GetStringParam("newbie_room_skills", ""); std::vector strings; a8::Split(point, strings, '|'); for (auto& str : strings) { s_.newbie_room_skills.push_back(a8::XValue(str)); } } { const mt::SafeArea* p = mt::SafeArea::GetById(GetIntParam("newbie_room_area")); s_.newbie_room_area.push_back(p); } #endif #ifdef DEBUG s_.match_team_time = 6; s_.match_robot_time = 5; s_.match_choose_time = 25; s_.match_lock_time = 3; #endif { METAMGR_READ(android_auto_combine_team, 1); METAMGR_READ(level0room_shua_robot_min_time, 5); METAMGR_READ(level0room_shua_robot_max_time, 7); METAMGR_READ(level0room_shua_robot_min_num, 1); METAMGR_READ(level0room_shua_robot_max_num, 3); METAMGR_READ(level0room_die_robot_min_time, 10); METAMGR_READ(level0room_die_robot_max_time, 20); METAMGR_READ(level0room_die_robot_min_num, 1); METAMGR_READ(level0room_die_robot_max_num, 3); METAMGR_READ(level0room_robot_water, 3); METAMGR_READ(level0room_robot_protect_time, 60); METAMGR_READ(level0room_robot_autodie_time, 10); METAMGR_READ(level0room_robot_autodie_distance, 500); METAMGR_READ(water_move_coefficient, 0.75); METAMGR_READ(teammate_kill_color, 0xFFFF00); METAMGR_READ(teammate_bekill_color, 0x00FF00); METAMGR_READ(self_kill_color, 0xFFFF00); METAMGR_READ(self_bekill_color, 0x00FF00); METAMGR_READ(view_objects_out_distance, 530); METAMGR_READ(view_objects_in_distance, 530); METAMGR_READ(incubator_base_length, 501); METAMGR_READ(incubator_rand_length, 10); METAMGR_READ(incubator_canset_distance, 520); METAMGR_READ(prebattle_can_use_skill, 1); METAMGR_READ(watchable, 1); METAMGR_READ(prebattle_combine_team, 1); METAMGR_READ(refresh_view_time, 4); METAMGR_READ(level1room_shua_robot_min_time, 5); METAMGR_READ(level1room_shua_robot_max_time, 7); METAMGR_READ(level1room_shua_robot_min_num, 2); METAMGR_READ(level1room_shua_robot_max_num, 5); METAMGR_READ(level1room_die_robot_min_time, 10); METAMGR_READ(level1room_die_robot_max_time, 14); METAMGR_READ(level1room_die_robot_min_num, 1); METAMGR_READ(level1room_die_robot_max_num, 3); METAMGR_READ(level1room_robot_water, 8); METAMGR_READ(level1room_robot_autodie_time, 10); METAMGR_READ(level1room_robot_autodie_distance, 500); METAMGR_READ_STR(level1room_born_point, ""); METAMGR_READ(dive_oxygen_total, 200); METAMGR_READ(dive_oxygen_consume, 20); METAMGR_READ(dive_hp_consume, 20); METAMGR_READ(dive_explosion_dmg_switch, 0); METAMGR_READ(inwater_oxygen_recover, 20); METAMGR_READ(move_step_len, 80); METAMGR_READ(early_parachute_jump, 0); METAMGR_READ(box_open_delay, 0); } #if 0 { human_meta = MetaMgr::Instance()->GetPlayer(40001); if (!human_meta) { A8_ABORT(); } android_meta = MetaMgr::Instance()->GetPlayer(40002); if (!android_meta) { A8_ABORT(); } } #endif { { if (s_.level0room_shua_robot_min_time > s_.level0room_shua_robot_max_time) { A8_ABORT(); } if (s_.level0room_shua_robot_min_num > s_.level0room_shua_robot_max_num) { A8_ABORT(); } if (s_.level0room_die_robot_min_time > s_.level0room_die_robot_max_time) { A8_ABORT(); } if (s_.level0room_die_robot_min_num > s_.level0room_die_robot_max_num) { A8_ABORT(); } } { if (s_.level1room_shua_robot_min_time > s_.level1room_shua_robot_max_time) { A8_ABORT(); } if (s_.level1room_shua_robot_min_num > s_.level1room_shua_robot_max_num) { A8_ABORT(); } if (s_.level1room_die_robot_min_time > s_.level1room_die_robot_max_time) { A8_ABORT(); } if (s_.level1room_die_robot_min_num > s_.level1room_die_robot_max_num) { A8_ABORT(); } } if (s_.match_team_time <= 0) { A8_ABORT(); } if (s_.match_robot_time <= 0) { A8_ABORT(); } if (s_.match_robot_time >= s_.match_team_time) { A8_ABORT(); } if (s_.match_choose_time <= 0) { A8_ABORT(); } if (s_.match_lock_time <= 0) { A8_ABORT(); } if (s_.match_lock_time >= s_.match_choose_time) { A8_ABORT(); } } } { std::vector strings; a8::Split(GetStringParam("robot_placement"), strings, '|'); for (auto& str : strings) { s_.robot_placement.push_back(a8::XValue(str).GetDouble()); } if (s_.robot_placement.size() != 9) { abort(); } } { s_.robot_placement_time = GetIntParam("robot_placement_time"); } { std::vector strings; a8::Split(GetStringParam("robot_placement_type"), strings, '|'); for (auto& str : strings) { s_.robot_placement_type.push_back(a8::XValue(str).GetDouble()); } if (s_.robot_placement_type.size() != 2) { abort(); } } } int Param::GetIntParam(const std::string& param_name, int def_val) { auto p = GetByName(param_name); return p ? a8::XValue(p->param_value()).GetInt() : def_val; } double Param::GetFloatParam(const std::string& param_name, double def_val) { auto p = GetByName(param_name); return p ? a8::XValue(p->param_value()).GetDouble() : def_val; } std::string Param::GetStringParam(const std::string& param_name, const char* def_val) { auto p = GetByName(param_name); return p ? a8::XValue(p->param_value()).GetString() : def_val; } }