diff --git a/server/gameserver/metadata.cc b/server/gameserver/metadata.cc index 39b825e..98ac813 100644 --- a/server/gameserver/metadata.cc +++ b/server/gameserver/metadata.cc @@ -177,7 +177,6 @@ namespace MetaData !door.state0 || !door.state1) { abort(); } else { - int open_dir = 0; #if 0 if (door.state1->x() < door.state0.x()) { if (door.state1.y() < door.state0.y()) { @@ -223,4 +222,20 @@ namespace MetaData return 0; } + void AirLine::Init() + { + { + std::vector strings; + a8::Split(i->start_point(), strings, ':'); + start_point_x = a8::XValue(strings[0]).GetDouble(); + start_point_y = a8::XValue(strings[1]).GetDouble(); + } + { + std::vector strings; + a8::Split(i->end_point(), strings, ':'); + end_point_x = a8::XValue(strings[0]).GetDouble(); + end_point_y = a8::XValue(strings[1]).GetDouble(); + } + } + } diff --git a/server/gameserver/metadata.h b/server/gameserver/metadata.h index 44e4007..3d58d2e 100755 --- a/server/gameserver/metadata.h +++ b/server/gameserver/metadata.h @@ -102,4 +102,17 @@ namespace MetaData const metatable::AirDrop* i = nullptr; }; + struct AirLine + { + const metatable::AirLine* i = nullptr; + + float start_point_x = 0.0f; + float start_point_y = 0.0f; + + float end_point_x = 0.0f; + float end_point_y = 0.0f; + + void Init(); + }; + } diff --git a/server/gameserver/metamgr.cc b/server/gameserver/metamgr.cc index 8ebec58..19ab721 100755 --- a/server/gameserver/metamgr.cc +++ b/server/gameserver/metamgr.cc @@ -30,6 +30,8 @@ public: std::list drop_list; std::list airdrop_meta_list; std::list airdrop_list; + std::list airline_meta_list; + std::vector airline_list; std::map parameter_hash; std::map gamemap_hash; @@ -62,12 +64,12 @@ public: f8::ReadCsvMetaFile(res_path + "mapThing@mapThing.csv", mapthing_meta_list); f8::ReadCsvMetaFile(res_path + "drop@drop.csv", drop_meta_list); f8::ReadCsvMetaFile(res_path + "airdrop@airdrop.csv", airdrop_meta_list); + f8::ReadCsvMetaFile(res_path + "airline@airline.csv", airline_meta_list); f8::ReadJsonMetaFile(res_path + "maps.json", building_meta_list); BindToMetaData(); #if 1 { MetaMgr::Instance()->gas_inactive_time = MetaMgr::Instance()->GetSysParamAsInt("gas_inactive_time"); - MetaMgr::Instance()->plane_speed = MetaMgr::Instance()->GetSysParamAsFloat("plane_speed") / SERVER_FRAME_RATE; MetaMgr::Instance()->jump_time = MetaMgr::Instance()->GetSysParamAsFloat("jump_time"); } #endif @@ -166,6 +168,12 @@ private: item.i = &meta; } + for (auto& meta : airline_meta_list) { + MetaData::AirLine& item = a8::FastAppend(airline_list); + item.i = &meta; + item.Init(); + } + { int building_id = 0; for (auto& meta : building_meta_list) { @@ -279,3 +287,11 @@ std::list& MetaMgr::GetAirDrops() { return loader_->airdrop_list; } + +MetaData::AirLine* MetaMgr::RandAirLine() +{ + if (loader_->airline_list.empty()) { + abort(); + } + return &loader_->airline_list[rand() % loader_->airline_list.size()]; +} diff --git a/server/gameserver/metamgr.h b/server/gameserver/metamgr.h index da3971c..0da91f5 100755 --- a/server/gameserver/metamgr.h +++ b/server/gameserver/metamgr.h @@ -29,9 +29,9 @@ class MetaMgr : public a8::Singleton MetaData::SafeArea* GetSafeArea(int area_id); std::vector* GetMapTplThing(std::string& map_name); std::list& GetAirDrops(); + MetaData::AirLine* RandAirLine(); int gas_inactive_time = 10; - float plane_speed = 5.0f; int jump_time = 10; private: diff --git a/server/gameserver/room.cc b/server/gameserver/room.cc index b71cc16..da536b7 100644 --- a/server/gameserver/room.cc +++ b/server/gameserver/room.cc @@ -787,7 +787,8 @@ void Room::UpdateGas() break; case GasJump: { - Vector2D len_vec = plane.dir * (frame_no - gas_data.gas_start_frameno)*MetaMgr::Instance()->plane_speed; + Vector2D len_vec = plane.dir * + ((frame_no - gas_data.gas_start_frameno)*airline_->i->plane_speed() / SERVER_FRAME_RATE); plane.curr_pos = plane.start_point + len_vec; if ((plane.end_point - plane.start_point).Norm() <= len_vec.Norm()) { TouchHumanList( @@ -1070,8 +1071,9 @@ void Room::AirDrop(int appear_time, int box_id) void Room::ShuaPlane() { - plane.start_point = Vector2D(100, 100); - plane.end_point = Vector2D(7500, 7500); + airline_ = MetaMgr::Instance()->RandAirLine(); + plane.start_point = Vector2D(airline_->start_point_x, airline_->start_point_y); + plane.end_point = Vector2D(airline_->end_point_x, airline_->end_point_y); plane.dir = plane.end_point - plane.start_point; plane.dir.Normalize(); plane.curr_pos = plane.start_point; diff --git a/server/gameserver/room.h b/server/gameserver/room.h index 8b47d16..725e428 100644 --- a/server/gameserver/room.h +++ b/server/gameserver/room.h @@ -10,6 +10,7 @@ namespace MetaData struct Map; struct SafeArea; struct Building; + struct AirLine; } struct RoomProfile @@ -96,6 +97,7 @@ private: timer_list* stats_timer_ = nullptr; int elapsed_time_ = 0; int alive_count_ = 0; + MetaData::AirLine* airline_ = nullptr; a8::XTimerAttacher xtimer_attacher; int current_teamid = 0; diff --git a/server/tools/protobuild/metatable.proto b/server/tools/protobuild/metatable.proto index a51ad2a..6dad641 100755 --- a/server/tools/protobuild/metatable.proto +++ b/server/tools/protobuild/metatable.proto @@ -102,6 +102,17 @@ message AirDrop optional int32 drop_id = 4; } +message AirLine +{ + optional int32 id = 1; + optional string start_point = 2; + optional string end_point = 3; + optional float plane_speed = 4; + optional int32 weight = 5; +} + +//end + message DoorObjJson { optional float height = 1;