diff --git a/server/gameserver/human.cc b/server/gameserver/human.cc index 3002b92..0b4c4a9 100644 --- a/server/gameserver/human.cc +++ b/server/gameserver/human.cc @@ -2177,25 +2177,27 @@ void Human::GenBattleReportData(a8::MutableXObject* params) { std::string items_str; MetaData::RankReward* rank_reward_meta = MetaMgr::Instance()->GetRankReward(rank); - if (rank_reward_meta) { - int drop_id = rank_reward_meta->RandDrop(); - if (drop_id != 0) { - MetaData::Drop* drop_meta = MetaMgr::Instance()->GetDrop(drop_id); - if (drop_meta) { - std::vector> drop_items; - drop_meta->RandItems(drop_items); - for (auto& item : drop_items) { - int item_id = std::get<0>(item); - int item_num = std::get<1>(item); - stats.items.push_back(std::make_pair( - item_id, - item_num - )); - items_str += a8::Format("%d:%d|", {item_id, item_num}); + if (rank_reward_meta && rank_reward_meta->i->drop() > 0) { + if (rand() % 100 < rank_reward_meta->i->drop()) { + MetaData::Equip* item_meta = MetaMgr::Instance()->GetEquip(grow_weapon.weapon_id); + if (item_meta) { + MetaData::Drop* drop_meta = MetaMgr::Instance()->GetDrop(item_meta->i->drop_id()); + if (drop_meta) { + std::vector> drop_items; + drop_meta->RandItems(drop_items); + for (auto& item : drop_items) { + int item_id = std::get<0>(item); + int item_num = std::get<1>(item); + stats.items.push_back(std::make_pair( + item_id, + item_num + )); + items_str += a8::Format("%d:%d|", {item_id, item_num}); + } } } } - } + }//end if rank_reward_meta params->SetVal("items", items_str); } { diff --git a/server/gameserver/human.h b/server/gameserver/human.h index 0273359..c8502a1 100644 --- a/server/gameserver/human.h +++ b/server/gameserver/human.h @@ -126,6 +126,7 @@ class Human : public MoveableEntity long long send_msg_times = 0; Weapon spec_weapon; + Weapon grow_weapon; std::map weapon_configs; std::map skin_configs; diff --git a/server/gameserver/metadata.cc b/server/gameserver/metadata.cc index 82b8d59..2a60a7d 100644 --- a/server/gameserver/metadata.cc +++ b/server/gameserver/metadata.cc @@ -489,26 +489,6 @@ namespace MetaData void RankReward::Init() { - std::vector strings; - a8::Split(i->drop(), strings, ':'); - if (strings.size() >= 2) { - drop.push_back(std::make_tuple( - a8::XValue(strings[0]), - a8::XValue(strings[1]) - )); - } - } - - int RankReward::RandDrop() - { - for (auto& tuple : drop) { - int drop_id = std::get<0>(tuple); - int rnd = std::get<1>(tuple); - if (rand() % 100 < rnd) { - return drop_id; - } - } - return 0; } } diff --git a/server/gameserver/metadata.h b/server/gameserver/metadata.h index 4600c67..39f5a5a 100755 --- a/server/gameserver/metadata.h +++ b/server/gameserver/metadata.h @@ -198,9 +198,6 @@ namespace MetaData const metatable::RankReward* i = nullptr; void Init(); - int RandDrop(); - private: - std::vector> drop; }; struct KillReward diff --git a/server/gameserver/playermgr.cc b/server/gameserver/playermgr.cc index 471691b..77e6fcb 100644 --- a/server/gameserver/playermgr.cc +++ b/server/gameserver/playermgr.cc @@ -79,6 +79,13 @@ Player* PlayerMgr::CreatePlayerByCMJoin(long ip_saddr, int socket, const cs::CMJ hum->spec_weapon.ammo = weapon.ammo(); } } + for (auto& weapon : msg.grow_weapons()) { + if (weapon.weapon_id() != 0) { + hum->grow_weapon.weapon_id = weapon.weapon_id(); + hum->grow_weapon.weapon_lv = weapon.weapon_lv(); + hum->grow_weapon.ammo = weapon.ammo(); + } + } for (auto& skin : msg.skins()) { if (skin.skin_id() != 0 && skin.skin_lv() > 0) { hum->skin_configs[skin.skin_id()] = skin.skin_lv(); diff --git a/server/tools/protobuild/metatable.proto b/server/tools/protobuild/metatable.proto index 4b9cf92..6e3560a 100755 --- a/server/tools/protobuild/metatable.proto +++ b/server/tools/protobuild/metatable.proto @@ -89,6 +89,7 @@ message Equip optional float rad = 36; //半径 optional float rad2 = 37; optional int32 buffid = 38; + optional int32 drop_id = 40; optional string inventory_slot = 31; //库存槽位 optional int32 _inventory_slot = 32; //库存槽位 @@ -210,7 +211,7 @@ message RankReward { optional int32 rank = 1; optional float parameter = 2; - optional string drop = 3; + optional int32 drop = 3; } message RankPoint