merge dev3

This commit is contained in:
aozhiwei 2020-07-09 13:49:56 +08:00
commit 04c0fe79e2
5 changed files with 71 additions and 19 deletions

View File

@ -34,13 +34,14 @@ void MapMgr::Init()
MAP_GRID_WIDTH);
CreateThings();
a8::UdpLog::Instance()->Info
("current_uniid:%d loots:%d spawn_points:%d "
("current_uniid:%d loots:%d mini_room_spawn_points:%d normal_room_spawn_points:%d "
"building_num:%d obstalce_num:%d obstacle0_num:%d "
"obstacle1_num:%d obstacle2_num:%d",
{
current_uniid_,
loots_.size(),
spawn_points_.size(),
mini_room_spawn_points_.size(),
normal_room_spawn_points_.size(),
building_num_,
obstacle_num_,
obstacle0_num_,
@ -66,7 +67,8 @@ void MapMgr::AttachRoom(Room* room, RoomInitInfo& init_info)
init_info.map_meta = map_meta_;
init_info.grid_service = grid_service_;
init_info.map_service = map_service_;
init_info.spawn_points = &spawn_points_;
init_info.mini_room_spawn_points = &mini_room_spawn_points_;
init_info.normal_room_spawn_points = &normal_room_spawn_points_;
init_info.level0room_born_point_meta = level0room_born_point_;
init_info.level1room_born_point_meta = level1room_born_point_;
init_info.loots = &loots_;
@ -99,11 +101,23 @@ void MapMgr::CreateThings()
break;
case kMOT_SpawnPoint:
{
std::string point_name = thing_tpl.i->name();
//pointxxx
if (point_name.size() < 6) {
abort();
}
std::string name_part = point_name.substr(0, 5);
std::string id_part = point_name.substr(5, point_name.size() - 5);
int point_id = a8::XValue(id_part);
if (spawn_points_hash.find(thing_tpl.i->name()) !=
spawn_points_hash.end()) {
abort();
}
spawn_points_.push_back(&thing_tpl);
if (point_id <= 100) {
normal_room_spawn_points_.push_back(&thing_tpl);
} else {
mini_room_spawn_points_.push_back(&thing_tpl);
}
spawn_points_hash[thing_tpl.i->name()] = &thing_tpl;
}
break;
@ -116,10 +130,12 @@ void MapMgr::CreateThings()
if (spawn_points_hash.find(MetaMgr::Instance()->newbie_born_point) !=
spawn_points_hash.end()) {
level0room_born_point_ = spawn_points_hash[MetaMgr::Instance()->newbie_born_point];
mini_room_spawn_points_.push_back(level0room_born_point_);
}
if (spawn_points_hash.find(MetaMgr::Instance()->level1room_born_point) !=
spawn_points_hash.end()) {
level1room_born_point_ = spawn_points_hash[MetaMgr::Instance()->level1room_born_point];
mini_room_spawn_points_.push_back(level1room_born_point_);
}
}

View File

@ -41,7 +41,8 @@ class MapMgr : public a8::Singleton<MapMgr>
MetaData::Map* map_meta_ = nullptr;
MapService* map_service_ = nullptr;
GridService* grid_service_ = nullptr;
std::vector<MetaData::MapTplThing*> spawn_points_;
std::vector<MetaData::MapTplThing*> mini_room_spawn_points_;
std::vector<MetaData::MapTplThing*> normal_room_spawn_points_;
MetaData::MapTplThing* level0room_born_point_ = nullptr;
MetaData::MapTplThing* level1room_born_point_ = nullptr;
std::vector<MetaData::MapTplThing*> loots_;

View File

@ -26,7 +26,9 @@
#include "entityfactory.h"
#include "perfmonitor.h"
const int ROOM_MAX_PLAYER_NUM = 40;
const size_t NORMAL_ROOM_MAX_PLAYER_NUM = 40;
const size_t MINI_ROOM_MAX_PLAYER_NUM = 20;
const int SHUA_RANGE = 580;
static long long RoomXGetTickCount(void* context)
@ -51,7 +53,8 @@ void Room::InitData(RoomInitInfo& init_info)
grid_service = init_info.grid_service;
map_service = init_info.map_service;
map_meta_ = init_info.map_meta;
spawn_points_ = init_info.spawn_points;
mini_room_spawn_points_ = init_info.mini_room_spawn_points;
normal_room_spawn_points_ = init_info.normal_room_spawn_points;
level0room_born_point_meta_ = init_info.level0room_born_point_meta;
level1room_born_point_meta_ = init_info.level1room_born_point_meta;
loots_ = init_info.loots;
@ -261,7 +264,7 @@ void Room::ShowAndroid(Human* target, int num)
void Room::CreateAndroid(int robot_num)
{
for (int i = 0; i < robot_num; ++i) {
if (human_hash_.size() >= ROOM_MAX_PLAYER_NUM) {
if (human_hash_.size() >= GetRoomMaxPlayerNum()) {
return;
}
MetaData::Robot* robot_meta = MetaMgr::Instance()->RandRobot(refreshed_robot_set_);
@ -667,7 +670,7 @@ bool Room::CanJoin(const std::string& accountid, RoomType_e self_room_type)
return false;
}
}
return GetPlayerNum() < ROOM_MAX_PLAYER_NUM;
return GetPlayerNum() < (int)GetRoomMaxPlayerNum();
}
void Room::OnPlayerOffline(Player* hum)
@ -881,8 +884,13 @@ void Room::UpdateGasInactive()
{
if (GetFrameNo() - gas_data_.gas_start_frameno >= GetGasInactiveTime() * SERVER_FRAME_RATE) {
gas_data_.gas_mode = GasWaiting;
gas_data_.old_area_meta = MetaMgr::Instance()->GetSafeArea(30001);
gas_data_.new_area_meta = MetaMgr::Instance()->GetSafeArea(30002);
if (IsMiniRoom()) {
gas_data_.old_area_meta = MetaMgr::Instance()->GetSafeArea(60001);
gas_data_.new_area_meta = MetaMgr::Instance()->GetSafeArea(60002);
} else {
gas_data_.old_area_meta = MetaMgr::Instance()->GetSafeArea(30001);
gas_data_.new_area_meta = MetaMgr::Instance()->GetSafeArea(30002);
}
gas_data_.gas_progress = gas_data_.old_area_meta->i->rad();
gas_data_.gas_start_frameno = GetFrameNo();
gas_data_.pos_old = a8::Vec2(map_meta_->i->map_width() / 2.0f,
@ -898,8 +906,8 @@ void Room::UpdateGasInactive()
gas_data_.rad_old = gas_data_.old_area_meta->i->rad();
gas_data_.rad_new = gas_data_.new_area_meta->i->rad();
battle_start_frameno_ = GetFrameNo();
if (human_hash_.size() < ROOM_MAX_PLAYER_NUM) {
CreateAndroid(ROOM_MAX_PLAYER_NUM - human_hash_.size());
if (human_hash_.size() < GetRoomMaxPlayerNum()) {
CreateAndroid(GetRoomMaxPlayerNum() - human_hash_.size());
NotifyUiUpdate();
}
CombineTeam();
@ -1545,10 +1553,16 @@ BornPoint* Room::GetBornPoint(int point_uniid)
void Room::CreateSpawnPoints()
{
if (!spawn_points_ || spawn_points_->empty()) {
const std::vector<MetaData::MapTplThing*>* spawn_points = nullptr;
if (IsMiniRoom()) {
spawn_points = mini_room_spawn_points_;
} else {
spawn_points = normal_room_spawn_points_;
}
if (!spawn_points || spawn_points->empty()) {
abort();
}
for (auto& thing_tpl : *spawn_points_) {
for (auto& thing_tpl : *spawn_points) {
int uniid = AllocUniid();
BornPoint born_point;
born_point.thing_tpl = thing_tpl;
@ -1688,7 +1702,7 @@ void Room::SecondRandPoint()
#endif
if (room_type_ == RT_NewBrid || room_type_ == RT_MidBrid) {
std::vector<Human*> tmp_humans;
tmp_humans.reserve(ROOM_MAX_PLAYER_NUM);
tmp_humans.reserve(GetRoomMaxPlayerNum());
for (auto& pair : human_hash_) {
if (pair.second->IsAndroid() &&
a8::HasBitFlag(pair.second->status, HS_Disable) &&
@ -2405,7 +2419,7 @@ void Room::AddPlayerPostProc(Player* hum)
}
}
}
while (human_hash_.size() > ROOM_MAX_PLAYER_NUM) {
while (human_hash_.size() > GetRoomMaxPlayerNum()) {
RandRemoveAndroid();
}
#ifdef DEBUG
@ -2831,3 +2845,20 @@ void Room::ShuaLastGas()
CheckPartObjects();
#endif
}
bool Room::IsMiniRoom()
{
return
GetRoomType() == RT_NewBrid ||
GetRoomType() == RT_MidBrid ||
GetRoomType() == RT_OldBrid1;
}
size_t Room::GetRoomMaxPlayerNum()
{
if (IsMiniRoom()) {
return MINI_ROOM_MAX_PLAYER_NUM;
} else {
return NORMAL_ROOM_MAX_PLAYER_NUM;
}
}

View File

@ -196,6 +196,8 @@ private:
void CheckShowHand();
void ShowHand();
void ShuaLastGas();
bool IsMiniRoom();
size_t GetRoomMaxPlayerNum();
#ifdef DEBUG
void InitDebugInfo();
@ -208,7 +210,8 @@ private:
const MetaData::Map* map_meta_ = nullptr;
std::string map_tpl_name_;
RoomType_e room_type_ = RT_NewBrid;
const std::vector<MetaData::MapTplThing*>* spawn_points_ = nullptr;
const std::vector<MetaData::MapTplThing*>* mini_room_spawn_points_ = nullptr;
const std::vector<MetaData::MapTplThing*>* normal_room_spawn_points_ = nullptr;
const MetaData::MapTplThing* level0room_born_point_meta_ = nullptr;
const MetaData::MapTplThing* level1room_born_point_meta_ = nullptr;
const std::vector<MetaData::MapTplThing*>* loots_ = nullptr;

View File

@ -159,7 +159,8 @@ struct RoomInitInfo
std::string map_tpl_name;
GridService* grid_service = nullptr;
MapService* map_service = nullptr;
const std::vector<MetaData::MapTplThing*>* spawn_points = nullptr;
const std::vector<MetaData::MapTplThing*>* mini_room_spawn_points = nullptr;
const std::vector<MetaData::MapTplThing*>* normal_room_spawn_points = nullptr;
const MetaData::MapTplThing* level0room_born_point_meta = nullptr;
const MetaData::MapTplThing* level1room_born_point_meta = nullptr;
const std::vector<MetaData::MapTplThing*>* loots = nullptr;