From c130a802c3c6967c558c9865d5052070e3392c47 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Mon, 25 May 2020 20:06:22 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=AD=A6=E5=99=A8=E5=A4=84?= =?UTF-8?q?=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/gameserver/human.h | 1 + server/gameserver/player.cc | 20 ++++++++++++++++++++ server/gameserver/playermgr.cc | 3 +++ server/tools/protobuild/cs_proto.proto | 2 ++ 4 files changed, 26 insertions(+) diff --git a/server/gameserver/human.h b/server/gameserver/human.h index 66cd2d9..db3f41a 100644 --- a/server/gameserver/human.h +++ b/server/gameserver/human.h @@ -118,6 +118,7 @@ class Human : public Entity long long send_msg_times = 0; + Weapon spec_weapon; std::map weapon_configs; std::map skin_configs; diff --git a/server/gameserver/player.cc b/server/gameserver/player.cc index 42578f0..0e8ca09 100644 --- a/server/gameserver/player.cc +++ b/server/gameserver/player.cc @@ -861,6 +861,26 @@ void Player::ProcPrepareItems(const ::google::protobuf::RepeatedField< ::google: curr_weapon->ammo = add_num; } } + if (spec_weapon.weapon_id != 0) { + MetaData::Equip* item_meta = MetaMgr::Instance()->GetEquip(spec_weapon.weapon_id); + if (item_meta && + item_meta->i->equip_type() == EQUIP_TYPE_WEAPON) { + if (item_meta->i->equip_subtype() != 1) { + Weapon* weapon = &weapons[GUN_SLOT1]; + weapon->weapon_idx = GUN_SLOT1; + if (curr_weapon != &weapons[GUN_SLOT2]) { + curr_weapon = &weapons[GUN_SLOT1]; + } + if (weapon) { + weapon->weapon_id = spec_weapon.weapon_id; + weapon->weapon_lv = spec_weapon.weapon_lv; + weapon->ammo = spec_weapon.ammo; + weapon->meta = item_meta; + weapon->Recalc(); + } + } + } + } need_sync_active_player = true; if (prepare_items.size() > 0) { SyncAroundPlayers(__FILE__, __LINE__, __func__); diff --git a/server/gameserver/playermgr.cc b/server/gameserver/playermgr.cc index 5a3bdec..471691b 100644 --- a/server/gameserver/playermgr.cc +++ b/server/gameserver/playermgr.cc @@ -74,6 +74,9 @@ Player* PlayerMgr::CreatePlayerByCMJoin(long ip_saddr, int socket, const cs::CMJ for (auto& weapon : msg.weapons()) { if (weapon.weapon_id() != 0 && weapon.weapon_lv() > 0) { hum->weapon_configs[weapon.weapon_id()] = weapon.weapon_lv(); + hum->spec_weapon.weapon_id = weapon.weapon_id(); + hum->spec_weapon.weapon_lv = weapon.weapon_lv(); + hum->spec_weapon.ammo = weapon.ammo(); } } for (auto& skin : msg.skins()) { diff --git a/server/tools/protobuild/cs_proto.proto b/server/tools/protobuild/cs_proto.proto index 636a81e..058046d 100755 --- a/server/tools/protobuild/cs_proto.proto +++ b/server/tools/protobuild/cs_proto.proto @@ -573,6 +573,7 @@ message MFPlayerStats optional int32 gold = 10; //金币 optional int32 score = 11; //积分 + repeated MFPair items = 6; //奖励道具 key:item_id value:数量 optional int32 pass_score = 9; //通行证积分 optional int32 rank_score = 13; //排名积分 optional bool has_pass = 27; //是否有通行证 @@ -681,6 +682,7 @@ message CMJoin optional int32 parachute = 26; //降落伞 optional bool has_pass = 27; //是否有通行证 optional int32 today_enter_times = 28; //今天进入游戏的次数 + repeated MFWeapon grow_weapons = 30; //武器养成 } //移动