From 65a268bcc111a410e7010ba3c8c7138fde20564d Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Tue, 24 Aug 2021 16:11:03 +0800 Subject: [PATCH 1/3] add gameserver.cbp --- server/gameserver/gameserver.cbp | 820 +++++++++++++++++++++++++++++++ 1 file changed, 820 insertions(+) create mode 100644 server/gameserver/gameserver.cbp diff --git a/server/gameserver/gameserver.cbp b/server/gameserver/gameserver.cbp new file mode 100644 index 00000000..c449ce2c --- /dev/null +++ b/server/gameserver/gameserver.cbp @@ -0,0 +1,820 @@ + + + + + + From a0dc185400a17ec814f451494a61261be7705a67 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Tue, 24 Aug 2021 19:26:34 +0800 Subject: [PATCH 2/3] 1 --- server/gameserver/bornpoint.cc | 27 ++++ server/gameserver/bornpoint.h | 15 ++ server/gameserver/buff.h | 1 + server/gameserver/creature.h | 36 ++++- server/gameserver/dummyentity.h | 1 + server/gameserver/entity.h | 8 + server/gameserver/frameevent.h | 5 + server/gameserver/gameserver.layout | 40 +++++ server/gameserver/gasdata.cc | 0 server/gameserver/gasdata.h | 29 ++++ server/gameserver/human.h | 51 +++++- server/gameserver/mapinstance.cc | 1 + server/gameserver/mapinstance.h | 2 +- server/gameserver/mapmgr.cc | 1 + server/gameserver/mapmgr.h | 1 + server/gameserver/obstacle.h | 1 + server/gameserver/room.h | 33 ++++ server/gameserver/roommgr.h | 38 +++++ server/gameserver/skin.cc | 10 ++ server/gameserver/skin.h | 10 ++ server/gameserver/trigger.h | 1 + server/gameserver/types.cc | 104 ------------ server/gameserver/types.h | 211 ------------------------- server/gameserver/weapon.cc | 79 +++++++++ server/gameserver/weapon.h | 33 ++++ server/tools/protobuild/cs_proto.proto | 1 + 26 files changed, 416 insertions(+), 323 deletions(-) create mode 100644 server/gameserver/bornpoint.cc create mode 100644 server/gameserver/bornpoint.h create mode 100644 server/gameserver/gameserver.layout create mode 100644 server/gameserver/gasdata.cc create mode 100644 server/gameserver/gasdata.h create mode 100644 server/gameserver/skin.cc create mode 100644 server/gameserver/skin.h create mode 100644 server/gameserver/weapon.cc create mode 100644 server/gameserver/weapon.h diff --git a/server/gameserver/bornpoint.cc b/server/gameserver/bornpoint.cc new file mode 100644 index 00000000..1a533daa --- /dev/null +++ b/server/gameserver/bornpoint.cc @@ -0,0 +1,27 @@ +#include "precompile.h" + +#include "cs_proto.pb.h" + +#include "bornpoint.h" +#include "metamgr.h" + +a8::Vec2 BornPoint::RandPoint() const +{ + a8::Vec2 born_point = a8::Vec2(thing_tpl->i->x(), thing_tpl->i->y()); + MetaData::Player* hum_meta = MetaMgr::Instance()->GetPlayer(40002); + if (hum_meta) { + born_point.x -= thing_tpl->i->width() / 2; + born_point.y -= thing_tpl->i->height() / 2; + born_point.x += hum_meta->i->radius() / 2; + born_point.y += hum_meta->i->radius() / 2; + int rand_x = thing_tpl->i->width() - hum_meta->i->radius(); + int rand_y = thing_tpl->i->height() - hum_meta->i->radius(); + if (rand_x > 0) { + born_point.x += rand() % rand_x; + } + if (rand_y > 0) { + born_point.y += rand() % rand_y; + } + } + return born_point; +} diff --git a/server/gameserver/bornpoint.h b/server/gameserver/bornpoint.h new file mode 100644 index 00000000..632d6421 --- /dev/null +++ b/server/gameserver/bornpoint.h @@ -0,0 +1,15 @@ +#pragma once + +namespace MetaData +{ + struct MapTplThing; +} + +struct BornPoint +{ + MetaData::MapTplThing* thing_tpl = nullptr; + int player_num = 0; + int android_num = 0; + + a8::Vec2 RandPoint() const; +}; diff --git a/server/gameserver/buff.h b/server/gameserver/buff.h index b2800249..0b50c81a 100644 --- a/server/gameserver/buff.h +++ b/server/gameserver/buff.h @@ -1,6 +1,7 @@ #pragma once #include "weakptr.h" +#include "weapon.h" namespace MetaData { diff --git a/server/gameserver/creature.h b/server/gameserver/creature.h index 58ee4d49..62312f61 100644 --- a/server/gameserver/creature.h +++ b/server/gameserver/creature.h @@ -4,9 +4,20 @@ #include "buff.h" #include "trigger.h" #include "ability.h" +#include "weapon.h" #include "cs_proto.pb.h" +enum CreatureStatus +{ + CS_AlreadyLordMode = 1, + CS_Disable = 2, + CS_Collisioning = 3, + CS_DisableAttack = 8, + CS_End +}; + + namespace MetaData { class Skill; @@ -24,13 +35,26 @@ struct SkillCasterState float caster_skill_param1 = 0.0f; }; -enum CreatureStatus +struct Inventory { - CS_AlreadyLordMode = 1, - CS_Disable = 2, - CS_Collisioning = 3, - CS_DisableAttack = 8, - CS_End + int slot = 0; + int num = 0; + int itemid = 0; +}; + +struct HumanAbility +{ + float hp = 0.0f; + float max_hp = 0.0f; + float hp_recover = 0.0f; + float atk = 0.0f; + float def = 0.0f; + float speed = 0.0f; + + float shot_range = 0.0f; + float shot_speed = 0.0f; + float reload_speed = 0.0f; + float fire_rate = 0.0f; }; struct xtimer_list; diff --git a/server/gameserver/dummyentity.h b/server/gameserver/dummyentity.h index b42d88ca..31d61cce 100644 --- a/server/gameserver/dummyentity.h +++ b/server/gameserver/dummyentity.h @@ -8,6 +8,7 @@ namespace metatable } class MapInstance; +class MapService; class DummyEntity : public Entity { public: diff --git a/server/gameserver/entity.h b/server/gameserver/entity.h index f8e90c23..8b1021af 100644 --- a/server/gameserver/entity.h +++ b/server/gameserver/entity.h @@ -8,6 +8,14 @@ namespace cs class MFObjectFull; } +#pragma pack(1) +struct ObjectSyncFlags +{ + unsigned char flags = 0; + unsigned char last_sync_frameno = 0; +}; +#pragma pack() + class Room; class ColliderComponent; class AabbCollider; diff --git a/server/gameserver/frameevent.h b/server/gameserver/frameevent.h index b55192ca..c1eaf5ab 100644 --- a/server/gameserver/frameevent.h +++ b/server/gameserver/frameevent.h @@ -3,6 +3,11 @@ #include "cs_proto.pb.h" #include "weakptr.h" +namespace MetaData +{ + struct Equip; +} + class Bullet; class Human; class Buff; diff --git a/server/gameserver/gameserver.layout b/server/gameserver/gameserver.layout new file mode 100644 index 00000000..9a413dc0 --- /dev/null +++ b/server/gameserver/gameserver.layout @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/server/gameserver/gasdata.cc b/server/gameserver/gasdata.cc new file mode 100644 index 00000000..e69de29b diff --git a/server/gameserver/gasdata.h b/server/gameserver/gasdata.h new file mode 100644 index 00000000..cf48a3c6 --- /dev/null +++ b/server/gameserver/gasdata.h @@ -0,0 +1,29 @@ +#pragma once + +namespace MetaData +{ + struct Map; + struct SafeArea; + struct SafeAreaPos; + struct Equip; + struct EquipUpgrade; + struct MapTplThing; +} + +struct GasData +{ + GasMode_e gas_mode = GasInactive; + a8::Vec2 pos_old; + a8::Vec2 pos_old_bk; + a8::Vec2 pre_pos_old; + a8::Vec2 pos_new; + float rad_old = 0.0f; + float rad_new = 0.0f; + float gas_progress = 0.0f; + long long gas_start_frameno = 0; + MetaData::SafeArea* old_area_meta = nullptr; + MetaData::SafeArea* new_area_meta = nullptr; + MetaData::SafeAreaPos* pos_list = nullptr; + bool is_last_gas = false; + int gas_count = 0; +}; diff --git a/server/gameserver/human.h b/server/gameserver/human.h index 0d2d210d..a3a97b38 100644 --- a/server/gameserver/human.h +++ b/server/gameserver/human.h @@ -2,6 +2,7 @@ #include "creature.h" #include "GGListener.h" +#include "skin.h" namespace MetaData { @@ -22,6 +23,54 @@ struct PartObject EntityWeakPtr object; }; +struct KillInfo +{ + int killer_id = 0; + int killer_team_id = 0; + int weapon_id = 0; + std::string msg; +}; + +struct HumanBehavior +{ + long long curr_start_destory_box_frameno = 0; + int curr_destory_box_times = 0; + int total_destory_box_times = 0; +}; + +struct PlayerStats +{ + int kills = 0; + long long last_kill_frameno = 0; + int damage_amount_in = 0; + int damage_amount_out = 0; + int heal_amount = 0; + int rescue_member = 0; + int rescue_guild_member = 0; + + int history_time_alive = 0; + int history_kills = 0; + int history_damage_amount = 0; + int history_heal_amount = 0; + + int gold = 0; + int score = 0; + std::vector> items; + int pass_score = 0; + int rank_score = 0; + + std::vector> extra_drop; + + int killer_id = 0; + std::string killer_name; + int weapon_id = 0; + + int rank = 0; + int skill_times = 0; + + int dead_times = 0; +}; + struct xtimer_list; class CircleCollider; class AabbCollider; @@ -100,7 +149,7 @@ class Human : public Creature xtimer_list* downed_timer = nullptr; std::set kill_humans; - BornPoint* born_point = nullptr; + struct BornPoint* born_point = nullptr; bool shot_start = false; bool shot_hold = false; diff --git a/server/gameserver/mapinstance.cc b/server/gameserver/mapinstance.cc index b6a5bf87..632f1f4e 100644 --- a/server/gameserver/mapinstance.cc +++ b/server/gameserver/mapinstance.cc @@ -12,6 +12,7 @@ #include "entityfactory.h" #include "dummyentity.h" #include "mapblock.h" +#include "roommgr.h" const int MAP_GRID_WIDTH = 64; diff --git a/server/gameserver/mapinstance.h b/server/gameserver/mapinstance.h index 43095477..9a33b278 100644 --- a/server/gameserver/mapinstance.h +++ b/server/gameserver/mapinstance.h @@ -18,7 +18,7 @@ class MapService; class GridService; class Room; class MapBlock; - +struct RoomInitInfo; class MapInstance { public: diff --git a/server/gameserver/mapmgr.cc b/server/gameserver/mapmgr.cc index 9bf872aa..95eaa21b 100644 --- a/server/gameserver/mapmgr.cc +++ b/server/gameserver/mapmgr.cc @@ -5,6 +5,7 @@ #include "mapinstance.h" #include "metamgr.h" #include "cs_proto.pb.h" +#include "roommgr.h" void MapMgr::Init() { diff --git a/server/gameserver/mapmgr.h b/server/gameserver/mapmgr.h index 6bc3fafd..6d1e2382 100644 --- a/server/gameserver/mapmgr.h +++ b/server/gameserver/mapmgr.h @@ -2,6 +2,7 @@ class MapInstance; class Room; +struct RoomInitInfo; class MapMgr : public a8::Singleton { private: diff --git a/server/gameserver/obstacle.h b/server/gameserver/obstacle.h index 7fae4945..b29bb9d9 100644 --- a/server/gameserver/obstacle.h +++ b/server/gameserver/obstacle.h @@ -21,6 +21,7 @@ class CircleCollider; class AabbCollider; class Bullet; class RoomObstacle; +class MapService; class Obstacle : public Entity { public: diff --git a/server/gameserver/room.h b/server/gameserver/room.h index 5a57e034..ec49c4b2 100644 --- a/server/gameserver/room.h +++ b/server/gameserver/room.h @@ -6,6 +6,8 @@ #include "framemaker.h" #include "gridservice.h" #include "mapservice.h" +#include "gasdata.h" +#include "bornpoint.h" namespace MetaData { @@ -38,6 +40,37 @@ class Car; class Hero; class Incubator; class Team; +class MapInstance; +struct RoomInitInfo; +struct ObstacleData +{ + int flags = 0; + float health = 0.0f; + bool dead = false; + long long dead_frameno = 0; + int team_id = 0; + int master_id = 0; + + int door_open_times = 0; + DoorState_e door_state = DoorStateClose; + std::map>* interaction_humans = nullptr; +}; + +struct Plane +{ + a8::Vec2 start_point; + a8::Vec2 end_point; + a8::Vec2 dir; + a8::Vec2 curr_pos; +}; + +struct CarObject +{ + int car_id = 0; + a8::Vec2 pos; + bool taken = false; +}; + class Room { public: diff --git a/server/gameserver/roommgr.h b/server/gameserver/roommgr.h index d928d3f6..b03c3d76 100644 --- a/server/gameserver/roommgr.h +++ b/server/gameserver/roommgr.h @@ -8,6 +8,44 @@ namespace cs class CMReconnect; } +namespace MetaData +{ + struct Map; + struct MapTplThing; +} + +class GridService; +class MapService; +class MapInstance; +class Building; +struct RoomInitInfo +{ + int room_idx = 0; + RoomMode_e room_mode = kChiJiMode; + long long room_uuid = 0; + RoomType_e room_type = RT_NewBrid; + int creator_game_times = 0; + int creator_register_time = 0; + int creator_proto_version = 0; + int creator_channel = 0; + bool force_entry_newbie_room = false; + int init_map_id = 0; + + const MetaData::Map* map_meta = nullptr; + std::string map_tpl_name; + GridService* grid_service = nullptr; + MapService* map_service = nullptr; + MapInstance* map_instance = nullptr; + const std::vector* mini_room_spawn_points = nullptr; + const std::vector* normal_room_spawn_points = nullptr; + const std::vector* room_monster_spawn_points = nullptr; + const MetaData::MapTplThing* level0room_born_point_meta = nullptr; + const MetaData::MapTplThing* level1room_born_point_meta = nullptr; + const std::vector* loots = nullptr; + const std::vector* buildings = nullptr; + const std::vector* level0room_spec_things = nullptr; +}; + class Room; class RoomMgr : public a8::Singleton { diff --git a/server/gameserver/skin.cc b/server/gameserver/skin.cc new file mode 100644 index 00000000..81c1fe59 --- /dev/null +++ b/server/gameserver/skin.cc @@ -0,0 +1,10 @@ +#include "precompile.h" + +#include "cs_proto.pb.h" +#include "skin.h" + +void Skin::ToPB(cs::MFSkin* pb_obj) +{ + pb_obj->set_skin_id(skin_id); + pb_obj->set_skin_lv(skin_lv); +} diff --git a/server/gameserver/skin.h b/server/gameserver/skin.h new file mode 100644 index 00000000..cbcbb56c --- /dev/null +++ b/server/gameserver/skin.h @@ -0,0 +1,10 @@ +#pragma once + +struct Skin +{ + int tank_uniid = 0; + int skin_id = 0; + int skin_lv = 0; + + void ToPB(cs::MFSkin* pb_obj); +}; diff --git a/server/gameserver/trigger.h b/server/gameserver/trigger.h index 99362964..5cd0e66e 100644 --- a/server/gameserver/trigger.h +++ b/server/gameserver/trigger.h @@ -3,6 +3,7 @@ namespace MetaData { struct Buff; + struct Equip; }; class Weapon; diff --git a/server/gameserver/types.cc b/server/gameserver/types.cc index 789966f3..bb1f5548 100644 --- a/server/gameserver/types.cc +++ b/server/gameserver/types.cc @@ -1,107 +1,3 @@ #include "precompile.h" - -#include "cs_proto.pb.h" - #include "metamgr.h" -void Weapon::Clear() -{ - weapon_id = 0; - weapon_lv = 0; - ammo = 0; - meta = 0; - bullet_meta = nullptr; - upgrade_meta = nullptr; -} - -void Weapon::ToPB(cs::MFWeapon* pb_obj) -{ - pb_obj->set_weapon_id(weapon_id); - pb_obj->set_weapon_lv(weapon_lv); - pb_obj->set_ammo(ammo); -} - -void Weapon::Recalc() -{ - upgrade_meta = MetaMgr::Instance()->GetEquipUpgrade(weapon_id); - bullet_meta = MetaMgr::Instance()->GetEquip(meta->i->use_bullet()); -} - -int Weapon::GetClipVolume() -{ - if (upgrade_meta) { - return meta->i->clip_volume() + - upgrade_meta->GetAttrValue(weapon_lv, kHAT_Volume); - } else { - return meta->i->clip_volume(); - } -} - -float Weapon::GetAttrValue(HumanAttrType_e attr_type) -{ - if (!meta) { - return 0; - } - switch (attr_type) { - case kHAT_Atk: - { - return meta->i->atk() + - (upgrade_meta ? upgrade_meta->GetAttrValue(weapon_lv, attr_type) : 0); - } - break; - case kHAT_FireRate: - { - return meta->i->fire_rate() - - (upgrade_meta ? upgrade_meta->GetAttrValue(weapon_lv, attr_type) : 0); - } - break; - case kHAT_Volume: - { - return meta->i->clip_volume() + - (upgrade_meta ? upgrade_meta->GetAttrValue(weapon_lv, attr_type) : 0); - } - break; - case kHAT_MaxHp: - { - return meta->i->max_hp() + - (upgrade_meta ? upgrade_meta->GetAttrValue(weapon_lv, attr_type) : 0); - } - break; - case kHAT_ReloadTime: - { - return meta->i->reload_time() - - (upgrade_meta ? upgrade_meta->GetAttrValue(weapon_lv, attr_type) : 0); - } - break; - default: - return 0; - } -} - -void Skin::ToPB(cs::MFSkin* pb_obj) -{ - pb_obj->set_skin_id(skin_id); - pb_obj->set_skin_lv(skin_lv); -} - -a8::Vec2 BornPoint::RandPoint() const -{ - a8::Vec2 born_point = a8::Vec2(thing_tpl->i->x(), thing_tpl->i->y()); - MetaData::Player* hum_meta = MetaMgr::Instance()->GetPlayer(40002); - if (hum_meta) { - born_point.x -= thing_tpl->i->width() / 2; - born_point.y -= thing_tpl->i->height() / 2; - born_point.x += hum_meta->i->radius() / 2; - born_point.y += hum_meta->i->radius() / 2; - int rand_x = thing_tpl->i->width() - hum_meta->i->radius(); - int rand_y = thing_tpl->i->height() - hum_meta->i->radius(); - if (rand_x > 0) { - born_point.x += rand() % rand_x; - } - if (rand_y > 0) { - born_point.y += rand() % rand_y; - } - } - return born_point; -} - diff --git a/server/gameserver/types.h b/server/gameserver/types.h index 2b23240e..6f70f09b 100644 --- a/server/gameserver/types.h +++ b/server/gameserver/types.h @@ -1,212 +1 @@ #pragma once - -namespace MetaData -{ - struct Map; - struct SafeArea; - struct SafeAreaPos; - struct Equip; - struct EquipUpgrade; - struct MapTplThing; -} - -namespace cs -{ - class MFWeapon; - class MFSkin; -} - -struct GasData -{ - GasMode_e gas_mode = GasInactive; - a8::Vec2 pos_old; - a8::Vec2 pos_old_bk; - a8::Vec2 pre_pos_old; - a8::Vec2 pos_new; - float rad_old = 0.0f; - float rad_new = 0.0f; - float gas_progress = 0.0f; - long long gas_start_frameno = 0; - MetaData::SafeArea* old_area_meta = nullptr; - MetaData::SafeArea* new_area_meta = nullptr; - MetaData::SafeAreaPos* pos_list = nullptr; - bool is_last_gas = false; - int gas_count = 0; -}; - -struct Weapon -{ - int weapon_idx = 0; - int weapon_id = 0; - int weapon_lv = 0; - int ammo = 0; - MetaData::Equip* meta = nullptr; - MetaData::Equip* bullet_meta = nullptr; - - void Clear(); - void ToPB(cs::MFWeapon* pb_obj); - void Recalc(); - int GetClipVolume(); - float GetAttrValue(HumanAttrType_e attr_type); - MetaData::EquipUpgrade* GetUpgradeMeta() { return upgrade_meta;} - -private: - MetaData::EquipUpgrade* upgrade_meta = nullptr; -}; - -struct Skin -{ - int tank_uniid = 0; - int skin_id = 0; - int skin_lv = 0; - - void ToPB(cs::MFSkin* pb_obj); -}; - -struct PlayerStats -{ - int kills = 0; - long long last_kill_frameno = 0; - int damage_amount_in = 0; - int damage_amount_out = 0; - int heal_amount = 0; - int rescue_member = 0; - int rescue_guild_member = 0; - - int history_time_alive = 0; - int history_kills = 0; - int history_damage_amount = 0; - int history_heal_amount = 0; - - int gold = 0; - int score = 0; - std::vector> items; - int pass_score = 0; - int rank_score = 0; - - std::vector> extra_drop; - - int killer_id = 0; - std::string killer_name; - int weapon_id = 0; - - int rank = 0; - int skill_times = 0; - - int dead_times = 0; -}; - -struct CarObject -{ - int car_id = 0; - a8::Vec2 pos; - bool taken = false; -}; - -struct BornPoint -{ - MetaData::MapTplThing* thing_tpl = nullptr; - int player_num = 0; - int android_num = 0; - - a8::Vec2 RandPoint() const; -}; - -struct Plane -{ - a8::Vec2 start_point; - a8::Vec2 end_point; - a8::Vec2 dir; - a8::Vec2 curr_pos; -}; - -struct HumanAbility -{ - float hp = 0.0f; - float max_hp = 0.0f; - float hp_recover = 0.0f; - float atk = 0.0f; - float def = 0.0f; - float speed = 0.0f; - - float shot_range = 0.0f; - float shot_speed = 0.0f; - float reload_speed = 0.0f; - float fire_rate = 0.0f; -}; - -struct HumanBehavior -{ - long long curr_start_destory_box_frameno = 0; - int curr_destory_box_times = 0; - int total_destory_box_times = 0; -}; - -struct ObstacleData -{ - int flags = 0; - float health = 0.0f; - bool dead = false; - long long dead_frameno = 0; - int team_id = 0; - int master_id = 0; - - int door_open_times = 0; - DoorState_e door_state = DoorStateClose; - std::map>* interaction_humans = nullptr; -}; - -struct KillInfo -{ - int killer_id = 0; - int killer_team_id = 0; - int weapon_id = 0; - std::string msg; -}; - -struct Inventory -{ - int slot = 0; - int num = 0; - int itemid = 0; -}; - -#pragma pack(1) -struct ObjectSyncFlags -{ - unsigned char flags = 0; - unsigned char last_sync_frameno = 0; -}; -#pragma pack() - -class GridService; -class MapService; -class MapInstance; -class Building; -struct RoomInitInfo -{ - int room_idx = 0; - RoomMode_e room_mode = kChiJiMode; - long long room_uuid = 0; - RoomType_e room_type = RT_NewBrid; - int creator_game_times = 0; - int creator_register_time = 0; - int creator_proto_version = 0; - int creator_channel = 0; - bool force_entry_newbie_room = false; - int init_map_id = 0; - - const MetaData::Map* map_meta = nullptr; - std::string map_tpl_name; - GridService* grid_service = nullptr; - MapService* map_service = nullptr; - MapInstance* map_instance = nullptr; - const std::vector* mini_room_spawn_points = nullptr; - const std::vector* normal_room_spawn_points = nullptr; - const std::vector* room_monster_spawn_points = nullptr; - const MetaData::MapTplThing* level0room_born_point_meta = nullptr; - const MetaData::MapTplThing* level1room_born_point_meta = nullptr; - const std::vector* loots = nullptr; - const std::vector* buildings = nullptr; - const std::vector* level0room_spec_things = nullptr; -}; diff --git a/server/gameserver/weapon.cc b/server/gameserver/weapon.cc new file mode 100644 index 00000000..e3618545 --- /dev/null +++ b/server/gameserver/weapon.cc @@ -0,0 +1,79 @@ +#include "precompile.h" + +#include "weapon.h" +#include "cs_proto.pb.h" +#include "metamgr.h" + +void Weapon::Clear() +{ + weapon_id = 0; + weapon_lv = 0; + ammo = 0; + meta = 0; + bullet_meta = nullptr; + upgrade_meta = nullptr; +} + +void Weapon::ToPB(cs::MFWeapon* pb_obj) +{ + pb_obj->set_weapon_id(weapon_id); + pb_obj->set_weapon_lv(weapon_lv); + pb_obj->set_ammo(ammo); +} + +void Weapon::Recalc() +{ + upgrade_meta = MetaMgr::Instance()->GetEquipUpgrade(weapon_id); + bullet_meta = MetaMgr::Instance()->GetEquip(meta->i->use_bullet()); +} + +int Weapon::GetClipVolume() +{ + if (upgrade_meta) { + return meta->i->clip_volume() + + upgrade_meta->GetAttrValue(weapon_lv, kHAT_Volume); + } else { + return meta->i->clip_volume(); + } +} + +float Weapon::GetAttrValue(HumanAttrType_e attr_type) +{ + if (!meta) { + return 0; + } + switch (attr_type) { + case kHAT_Atk: + { + return meta->i->atk() + + (upgrade_meta ? upgrade_meta->GetAttrValue(weapon_lv, attr_type) : 0); + } + break; + case kHAT_FireRate: + { + return meta->i->fire_rate() - + (upgrade_meta ? upgrade_meta->GetAttrValue(weapon_lv, attr_type) : 0); + } + break; + case kHAT_Volume: + { + return meta->i->clip_volume() + + (upgrade_meta ? upgrade_meta->GetAttrValue(weapon_lv, attr_type) : 0); + } + break; + case kHAT_MaxHp: + { + return meta->i->max_hp() + + (upgrade_meta ? upgrade_meta->GetAttrValue(weapon_lv, attr_type) : 0); + } + break; + case kHAT_ReloadTime: + { + return meta->i->reload_time() - + (upgrade_meta ? upgrade_meta->GetAttrValue(weapon_lv, attr_type) : 0); + } + break; + default: + return 0; + } +} diff --git a/server/gameserver/weapon.h b/server/gameserver/weapon.h new file mode 100644 index 00000000..bb4b2cb0 --- /dev/null +++ b/server/gameserver/weapon.h @@ -0,0 +1,33 @@ +#pragma once + +namespace cs +{ + class MFWeapon; + class MFSkin; +} + +namespace MetaData +{ + struct Equip; + struct EquipUpgrade; +} + +struct Weapon +{ + int weapon_idx = 0; + int weapon_id = 0; + int weapon_lv = 0; + int ammo = 0; + MetaData::Equip* meta = nullptr; + MetaData::Equip* bullet_meta = nullptr; + + void Clear(); + void ToPB(cs::MFWeapon* pb_obj); + void Recalc(); + int GetClipVolume(); + float GetAttrValue(HumanAttrType_e attr_type); + MetaData::EquipUpgrade* GetUpgradeMeta() { return upgrade_meta;} + +private: + MetaData::EquipUpgrade* upgrade_meta = nullptr; +}; diff --git a/server/tools/protobuild/cs_proto.proto b/server/tools/protobuild/cs_proto.proto index c8c7f8cb..ea87e1b9 100755 --- a/server/tools/protobuild/cs_proto.proto +++ b/server/tools/protobuild/cs_proto.proto @@ -1154,6 +1154,7 @@ message SMGameOver optional bool victory = 5; //是否胜利 optional int32 total_human_num = 12; //房间总人数 optional int32 alive_human_num = 13; //房间剩余存活人数 + optional int32 watchable = 8; //是否可观战 repeated MFPlayerStats player_stats = 6; //玩家信息统计 optional string room_uuid = 7; //房间唯一id From 57caecdeb9875fa6bd0475287ef4e13b192d59f5 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Tue, 24 Aug 2021 19:27:11 +0800 Subject: [PATCH 3/3] 1 --- server/gameserver/gameserver.cbp | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/server/gameserver/gameserver.cbp b/server/gameserver/gameserver.cbp index c449ce2c..8ad1e65c 100644 --- a/server/gameserver/gameserver.cbp +++ b/server/gameserver/gameserver.cbp @@ -135,6 +135,12 @@ + + + + @@ -225,6 +231,12 @@ + + + + @@ -399,6 +411,12 @@ + + + + @@ -441,6 +459,12 @@ + + + +