From 3d9b77dd7d35a017eb65d2a2dedcce3dca189880 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Fri, 24 Mar 2023 13:48:14 +0800 Subject: [PATCH] 1 --- server/gameserver/bornpoint.cc | 12 +++++++++--- server/gameserver/mt/PveGemini.cc | 8 ++++++++ server/gameserver/mt/PveGemini.h | 2 ++ server/gameserver/mtb/PveGemini.h | 5 ++++- server/gameserver/mtb/mtb.all.cc | 3 ++- server/gameserver/room.cc | 8 ++++++++ server/tools/protobuild/mt.proto | 1 + 7 files changed, 34 insertions(+), 5 deletions(-) diff --git a/server/gameserver/bornpoint.cc b/server/gameserver/bornpoint.cc index 2b7a948a..6dd4614d 100644 --- a/server/gameserver/bornpoint.cc +++ b/server/gameserver/bornpoint.cc @@ -2,11 +2,17 @@ #include "bornpoint.h" +#include "mt/Map.h" + Position BornPoint::RandPoint() const { Position pos; - pos.SetX(5120.000000000000); - pos.SetY(6.250846862793); - pos.SetZ(5120.000000000000); + if (wo_meta) { + pos.FromGlmVec3(wo_meta->pos); + } else { + pos.SetX(5120.000000000000); + pos.SetY(6.250846862793); + pos.SetZ(5120.000000000000); + } return pos; } diff --git a/server/gameserver/mt/PveGemini.cc b/server/gameserver/mt/PveGemini.cc index d1c37132..5204f06b 100644 --- a/server/gameserver/mt/PveGemini.cc +++ b/server/gameserver/mt/PveGemini.cc @@ -19,6 +19,14 @@ namespace mt abort(); } #endif + { + std::vector strings; + a8::Split(born_point(), strings, ','); + _spawn_point = glm::vec3( + (float)a8::XValue(strings[0]).GetDouble(), + (float)a8::XValue(strings[1]).GetDouble(), + (float)a8::XValue(strings[2]).GetDouble()); + } } float PveGemini::GetHpMul(int num) const diff --git a/server/gameserver/mt/PveGemini.h b/server/gameserver/mt/PveGemini.h index ec2af829..e7c2be21 100644 --- a/server/gameserver/mt/PveGemini.h +++ b/server/gameserver/mt/PveGemini.h @@ -14,6 +14,8 @@ namespace mt void Init1(); float GetHpMul(int num) const; + glm::vec3 _spawn_point; + private: std::vector hp_muls; std::vector hp_mul; diff --git a/server/gameserver/mtb/PveGemini.h b/server/gameserver/mtb/PveGemini.h index 2155c69d..7523e6d3 100644 --- a/server/gameserver/mtb/PveGemini.h +++ b/server/gameserver/mtb/PveGemini.h @@ -14,11 +14,13 @@ namespace mtb int gemini_lv() const { return gemini_lv_; }; int gemini_limit() const { return gemini_limit_; }; const std::string multiplayer_enemy_hp_mul() const { return multiplayer_enemy_hp_mul_; }; + const std::string born_point() const { return born_point_; }; bool has_gemini_id() const { return __flags__.test(0);}; bool has_gemini_lv() const { return __flags__.test(1);}; bool has_gemini_limit() const { return __flags__.test(2);}; bool has_multiplayer_enemy_hp_mul() const { return __flags__.test(3);}; + bool has_born_point() const { return __flags__.test(4);}; protected: @@ -26,9 +28,10 @@ namespace mtb int gemini_lv_ = 0; int gemini_limit_ = 0; std::string multiplayer_enemy_hp_mul_; + std::string born_point_; public: - std::bitset<4> __flags__; + std::bitset<5> __flags__; }; }; diff --git a/server/gameserver/mtb/mtb.all.cc b/server/gameserver/mtb/mtb.all.cc index 0fd70da1..73ca8dee 100644 --- a/server/gameserver/mtb/mtb.all.cc +++ b/server/gameserver/mtb/mtb.all.cc @@ -686,11 +686,12 @@ namespace mtb { a8::reflect::Class* meta_class = nullptr; if (!meta_class) { - meta_class = new a8::reflect::Class("PveGemini", 4, 0); + meta_class = new a8::reflect::Class("PveGemini", 5, 0); meta_class->SetSimpleField(0, "gemini_id", a8::reflect::ET_INT32, my_offsetof2(PveGemini, gemini_id_)); meta_class->SetSimpleField(1, "gemini_lv", a8::reflect::ET_INT32, my_offsetof2(PveGemini, gemini_lv_)); meta_class->SetSimpleField(2, "gemini_limit", a8::reflect::ET_INT32, my_offsetof2(PveGemini, gemini_limit_)); meta_class->SetSimpleField(3, "multiplayer_enemy_hp_mul", a8::reflect::ET_STRING, my_offsetof2(PveGemini, multiplayer_enemy_hp_mul_)); + meta_class->SetSimpleField(4, "born_point", a8::reflect::ET_STRING, my_offsetof2(PveGemini, born_point_)); } return meta_class; } diff --git a/server/gameserver/room.cc b/server/gameserver/room.cc index 8b4ab229..e415ab91 100644 --- a/server/gameserver/room.cc +++ b/server/gameserver/room.cc @@ -2149,6 +2149,11 @@ void Room::CreateSpawnPoints() int uniid = AllocUniid(); std::shared_ptr born_point = std::make_shared(); born_point_hash_[uniid] = born_point; + if (IsPveRoom()) { + std::shared_ptr wo_meta = std::make_shared(); + wo_meta->pos = pve_instance->_spawn_point; + born_point->wo_meta = wo_meta; + } } } } @@ -3793,6 +3798,9 @@ int Room::GetPolyExtFlag(int poly_idx) void Room::CreateWorldObjects() { + if (IsPveRoom()) { + return; + } for (auto& itr : GetMapMeta()->_world_objects) { std::shared_ptr obj = itr; switch ((WorldObjectType_e)obj->object_type) { diff --git a/server/tools/protobuild/mt.proto b/server/tools/protobuild/mt.proto index 63bf55ad..a2ddbcb3 100755 --- a/server/tools/protobuild/mt.proto +++ b/server/tools/protobuild/mt.proto @@ -520,6 +520,7 @@ message PveGemini optional int32 gemini_lv = 2; optional int32 gemini_limit = 3; optional string multiplayer_enemy_hp_mul = 4; + optional string born_point = 5; } message PveGeminiContent