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; //武器养成 } //移动