diff --git a/server/gameserver/gamelog.cc b/server/gameserver/gamelog.cc index 5c17086..28b9621 100644 --- a/server/gameserver/gamelog.cc +++ b/server/gameserver/gamelog.cc @@ -32,8 +32,8 @@ void GameLog::GameStart(Player* hum) prop->SetVal("server_node_id", App::Instance()->node_id); prop->SetVal("server_instance_id", App::Instance()->instance_id); - prop->SetVal("map_id", hum->room->map_meta->i->map_id()); - prop->SetVal("map_name", hum->room->map_meta->i->map_name()); + prop->SetVal("map_id", hum->room->map_meta->p->map_id()); + prop->SetVal("map_name", hum->room->map_meta->p->map_name()); prop->SetVal("map_tpl_name", hum->room->map_tpl_name); f8::TGLog::Instance()->AddTrackLog(game_id, hum->account_id, hum->ip_saddr, logclass1, logclass2, prop); @@ -72,8 +72,8 @@ void GameLog::GameEnd(Player* hum) prop->SetVal("server_node_id", App::Instance()->node_id); prop->SetVal("server_instance_id", App::Instance()->instance_id); - prop->SetVal("map_id", hum->room->map_meta->i->map_id()); - prop->SetVal("map_name", hum->room->map_meta->i->map_name()); + prop->SetVal("map_id", hum->room->map_meta->p->map_id()); + prop->SetVal("map_name", hum->room->map_meta->p->map_name()); prop->SetVal("map_tpl_name", hum->room->map_tpl_name); if (!hum->dead) { prop->SetVal("alive_time", hum->room->frame_no * 1000.0f / SERVER_FRAME_RATE); diff --git a/server/gameserver/human.cc b/server/gameserver/human.cc index dc6a334..2f39e20 100644 --- a/server/gameserver/human.cc +++ b/server/gameserver/human.cc @@ -43,16 +43,7 @@ float Human::GetSpeed() #if 1 return 0; #else - return meta->i->move_speed() + buff.speed; - #endif -} - -float Human::GetSpeed4() -{ - #if 1 - return 0; - #else - return meta->i->move_speed4(); + return meta->p->move_speed() + buff.speed; #endif } @@ -61,10 +52,6 @@ void Human::FillMFObjectPart(cs::MFObjectPart* part_data) part_data->set_object_type(ET_Player); cs::MFPlayerPart* p = part_data->mutable_union_obj_1(); p->set_obj_uniid(entity_uniid); - #if 0 - TypeConvert::ToPb(pos, p->mutable_pos()); - TypeConvert::ToPb(attack_dir, p->mutable_dir()); - #endif } void Human::FillMFObjectFull(cs::MFObjectFull* full_data) @@ -72,10 +59,6 @@ void Human::FillMFObjectFull(cs::MFObjectFull* full_data) full_data->set_object_type(ET_Player); cs::MFPlayerFull* p = full_data->mutable_union_obj_1(); p->set_obj_uniid(entity_uniid); - #if 0 - TypeConvert::ToPb(pos, p->mutable_pos()); - TypeConvert::ToPb(attack_dir, p->mutable_dir()); - #endif p->set_dead(dead); p->set_disconnected(disconnected); @@ -148,10 +131,10 @@ void Human::GetAabbBox(AabbCollider& aabb_box) #if 0 aabb_box.active = true; aabb_box.owner = this; - aabb_box._min.x = -meta->i->radius(); - aabb_box._min.y = -meta->i->radius(); - aabb_box._max.x = meta->i->radius(); - aabb_box._max.y = meta->i->radius(); + aabb_box._min.x = -meta->p->radius(); + aabb_box._min.y = -meta->p->radius(); + aabb_box._max.x = meta->p->radius(); + aabb_box._max.y = meta->p->radius(); #endif } @@ -182,14 +165,14 @@ void Human::RecalcSelfCollider() AddCollider(self_collider_); } self_collider_->pos = a8::Vec2(); - self_collider_->rad = meta->i->radius(); + self_collider_->rad = meta->p->radius(); #endif } bool Human::IsCollisionInMapService() { #if 0 - if (room->OverBorder(pos, meta->i->radius())){ + if (room->OverBorder(pos, meta->p->radius())){ return true; } @@ -215,7 +198,7 @@ float Human::GetRadius() #if 1 return 0; #else - return meta->i->radius(); + return meta->p->radius(); #endif } @@ -691,8 +674,8 @@ void Human::GenBattleReportData(a8::MutableXObject* params) } stats.rank = rank; params->SetVal("account_id", account_id); - params->SetVal("map_id", room->map_meta->i->map_id()); - params->SetVal("map_name", room->map_meta->i->map_name()); + params->SetVal("map_id", room->map_meta->p->map_id()); + params->SetVal("map_name", room->map_meta->p->map_name()); params->SetVal("map_tpl_name", room->map_tpl_name); params->SetVal("game_time", time(nullptr)); params->SetVal("hurt", stats.damage_amount_in); diff --git a/server/gameserver/human.h b/server/gameserver/human.h index 2c07c56..0e4020a 100644 --- a/server/gameserver/human.h +++ b/server/gameserver/human.h @@ -6,9 +6,7 @@ namespace MetaData { - struct Player; - struct Equip; - struct Dress; + } enum HumanStatus @@ -63,7 +61,6 @@ class Human : public Entity virtual ~Human() override; virtual void Initialize() override; virtual float GetSpeed() override; - virtual float GetSpeed4(); virtual void FillMFObjectPart(cs::MFObjectPart* part_data) override; virtual void FillMFObjectFull(cs::MFObjectFull* full_data) override; virtual void FillMFPlayerStats(cs::MFPlayerStats* stats); @@ -118,6 +115,9 @@ private: void Revive(); protected: + SnakeBodyNode* head_ = nullptr; + SnakeBodyNode* tail_ = nullptr; + std::list body_list; long long last_sync_teamdata_frameno_ = 0; bool leave_ = false; long long leave_frameno_ = 0; diff --git a/server/gameserver/metadata.cc b/server/gameserver/metadata.cc index 0f57ffd..ff326d5 100644 --- a/server/gameserver/metadata.cc +++ b/server/gameserver/metadata.cc @@ -6,9 +6,9 @@ namespace MetaData { void Parameter::Init() { - int_val = a8::XValue(i->param_value()); - float_val = a8::XValue(i->param_value()); - str_val = a8::XValue(i->param_value()).GetString(); + int_val = a8::XValue(p->param_value()); + float_val = a8::XValue(p->param_value()); + str_val = a8::XValue(p->param_value()).GetString(); } void Map::Init() diff --git a/server/gameserver/metadata.h b/server/gameserver/metadata.h index 692faf4..f3e7090 100755 --- a/server/gameserver/metadata.h +++ b/server/gameserver/metadata.h @@ -7,7 +7,7 @@ namespace MetaData struct Parameter { - const metatable::Parameter* i = nullptr; + const metatable::Parameter* p = nullptr; int int_val = 0; std::string str_val; @@ -18,36 +18,36 @@ namespace MetaData struct Map { - const metatable::Map* i = nullptr; + const metatable::Map* p = nullptr; void Init(); }; struct Robot { - const metatable::Robot* i = nullptr; + const metatable::Robot* p = nullptr; void Init(); }; struct RankReward { - const metatable::RankReward* i = nullptr; + const metatable::RankReward* p = nullptr; }; struct KillReward { - const metatable::KillReward* i = nullptr; + const metatable::KillReward* p = nullptr; }; struct RankPoint { - const metatable::RankPoint* i = nullptr; + const metatable::RankPoint* p = nullptr; }; struct KillPoint { - const metatable::KillPoint* i = nullptr; + const metatable::KillPoint* p = nullptr; }; } diff --git a/server/gameserver/metamgr.cc b/server/gameserver/metamgr.cc index f7d1e83..b8ac748 100755 --- a/server/gameserver/metamgr.cc +++ b/server/gameserver/metamgr.cc @@ -86,47 +86,47 @@ private: for (auto& meta : parameter_meta_list) { MetaData::Parameter& item = a8::FastAppend(parameter_list); - item.i = &meta; + item.p = &meta; item.Init(); - parameter_hash[item.i->param_name()] = &item; + parameter_hash[item.p->param_name()] = &item; } { for (auto& meta : map_meta_list) { MetaData::Map& item = a8::FastAppend(map_list); - item.i = &meta; + item.p = &meta; item.Init(); - gamemap_hash[item.i->map_id()] = &item; + gamemap_hash[item.p->map_id()] = &item; } } for (auto& meta : rankreward_meta_list) { MetaData::RankReward& item = a8::FastAppend(rankreward_list); - item.i = &meta; - rankreward_hash[item.i->rank()] = &item; + item.p = &meta; + rankreward_hash[item.p->rank()] = &item; } for (auto& meta : killreward_meta_list) { MetaData::KillReward& item = a8::FastAppend(killreward_list); - item.i = &meta; - killreward_hash[item.i->kill_num()] = &item; + item.p = &meta; + killreward_hash[item.p->kill_num()] = &item; } for (auto& meta : killpoint_meta_list) { MetaData::KillPoint& item = a8::FastAppend(killpoint_list); - item.i = &meta; - killpoint_hash[item.i->kill_num()] = &item; + item.p = &meta; + killpoint_hash[item.p->kill_num()] = &item; } for (auto& meta : rankpoint_meta_list) { MetaData::RankPoint& item = a8::FastAppend(rankpoint_list); - item.i = &meta; - rankpoint_hash[item.i->rank()] = &item; + item.p = &meta; + rankpoint_hash[item.p->rank()] = &item; } for (auto& meta : robot_meta_list) { MetaData::Robot& item = a8::FastAppend(robot_list); - item.i = &meta; + item.p = &meta; item.Init(); robot_hash[meta.id()] = &item; } @@ -185,37 +185,37 @@ MetaData::Map* MetaMgr::GetMap(int map_id) float MetaMgr::GetRankRewardParam(int rank) { auto itr = loader_->rankreward_hash.find(rank); - return itr != loader_->rankreward_hash.end() ? itr->second->i->parameter() : 0.0f; + return itr != loader_->rankreward_hash.end() ? itr->second->p->parameter() : 0.0f; } float MetaMgr::GetKillRewardParam(int kill_num) { auto itr = loader_->killreward_hash.find(kill_num); - return itr != loader_->killreward_hash.end() ? itr->second->i->parameter() : 0.0f; + return itr != loader_->killreward_hash.end() ? itr->second->p->parameter() : 0.0f; } int MetaMgr::GetRankPointParam1(int rank) { auto itr = loader_->rankpoint_hash.find(rank); - return itr != loader_->rankpoint_hash.end() ? itr->second->i->parameter() : 0; + return itr != loader_->rankpoint_hash.end() ? itr->second->p->parameter() : 0; } int MetaMgr::GetRankPointParam2(int rank) { auto itr = loader_->rankpoint_hash.find(rank); - return itr != loader_->rankpoint_hash.end() ? itr->second->i->parameter2() : 0; + return itr != loader_->rankpoint_hash.end() ? itr->second->p->parameter2() : 0; } int MetaMgr::GetKillPointParam1(int kill_num) { auto itr = loader_->killpoint_hash.find(kill_num); - return itr != loader_->killpoint_hash.end() ? itr->second->i->parameter() : 0; + return itr != loader_->killpoint_hash.end() ? itr->second->p->parameter() : 0; } int MetaMgr::GetKillPointParam2(int kill_num) { auto itr = loader_->killpoint_hash.find(kill_num); - return itr != loader_->killpoint_hash.end() ? itr->second->i->parameter2() : 0; + return itr != loader_->killpoint_hash.end() ? itr->second->p->parameter2() : 0; } std::vector* MetaMgr::GetRobotList() diff --git a/server/gameserver/room.cc b/server/gameserver/room.cc index 2886aa1..88e8e8e 100644 --- a/server/gameserver/room.cc +++ b/server/gameserver/room.cc @@ -37,20 +37,20 @@ Room::~Room() void Room::Init() { - if (map_meta->i->map_width() < 1) { + if (map_meta->p->map_width() < 1) { abort(); } - if (map_meta->i->map_height() < 1) { + if (map_meta->p->map_height() < 1) { abort(); } xtimer.Init(RoomXGetTickCount, this, 100, 100); xtimer_attacher.xtimer = &xtimer; - grid_service.Init(map_meta->i->map_width(), - map_meta->i->map_height(), + grid_service.Init(map_meta->p->map_width(), + map_meta->p->map_height(), MAP_CELL_WIDTH); - map_service.Init(map_meta->i->map_width() / MAP_GRID_WIDTH, - map_meta->i->map_height() / MAP_GRID_WIDTH, + map_service.Init(map_meta->p->map_width() / MAP_GRID_WIDTH, + map_meta->p->map_height() / MAP_GRID_WIDTH, MAP_GRID_WIDTH); ShuaAndroid(); @@ -228,7 +228,7 @@ void Room::CreateAndroid(int robot_num) int try_count = 0; while (true) { MetaData::Robot& tmp_robot_meta = (*robot_list)[rand() % robot_list->size()]; - if (refreshed_robot_set_.find(tmp_robot_meta.i->id()) == + if (refreshed_robot_set_.find(tmp_robot_meta.p->id()) == refreshed_robot_set_.end()) { robot_meta = &tmp_robot_meta; break; @@ -240,7 +240,7 @@ void Room::CreateAndroid(int robot_num) } Android* hum = new Android(); - hum->name = robot_meta->i->name(); + hum->name = robot_meta->p->name(); hum->meta = hum_meta; hum->robot_meta = robot_meta; hum->entity_uniid = AllocUniid(); @@ -264,7 +264,7 @@ void Room::CreateAndroid(int robot_num) hum->team_members = &team_hash_[hum->team_id]; hum->team_members->insert(hum); } - refreshed_robot_set_.insert(robot_meta->i->id()); + refreshed_robot_set_.insert(robot_meta->p->id()); } #endif } @@ -358,14 +358,14 @@ bool Room::OverBorder(const a8::Vec2 pos, float radius) return true; } int right_x = pos.x + radius; - if (right_x > map_meta->i->map_width()) { + if (right_x > map_meta->p->map_width()) { return true; } } //检查y轴 { int up_y = pos.y + radius; - if (up_y > map_meta->i->map_height()) { + if (up_y > map_meta->p->map_height()) { return true; } int down_y = pos.y - radius; diff --git a/server/gameserver/roommgr.cc b/server/gameserver/roommgr.cc index d5fcd78..a885a84 100644 --- a/server/gameserver/roommgr.cc +++ b/server/gameserver/roommgr.cc @@ -98,9 +98,9 @@ void RoomMgr::_CMJoin(f8::MsgHdr& hdr, const cs::CMJoin& msg) } { cs::SMMapInfo notifymsg; - notifymsg.set_map_id(room->map_meta->i->map_id()); - notifymsg.set_map_width(room->map_meta->i->map_width()); - notifymsg.set_map_height(room->map_meta->i->map_height()); + notifymsg.set_map_id(room->map_meta->p->map_id()); + notifymsg.set_map_width(room->map_meta->p->map_width()); + notifymsg.set_map_height(room->map_meta->p->map_height()); GGListener::Instance()->SendToClient(hdr.socket_handle, hdr.seqid, notifymsg); } } diff --git a/server/gameserver/types.h b/server/gameserver/types.h index e91ea12..799ed29 100755 --- a/server/gameserver/types.h +++ b/server/gameserver/types.h @@ -56,3 +56,13 @@ struct HumanAbility float def_add = 0.0f; float reflect_damage = 0.0f; }; + +struct SnakeBodyNode +{ + int node_id = 0; + float speed = 0.0f; + a8::Vec2 dir; + a8::Vec2 last_move; + bool moved = false; + struct SnakeBodyNode* pre_node = nullptr; +};