1
This commit is contained in:
parent
a1be31c98b
commit
24998d2f0d
@ -97,6 +97,8 @@ void HandlerMgr::RegisterNetMsgHandlers()
|
||||
RegisterNetMsgHandler(&ggmsghandler, &Player::_CMAdStart);
|
||||
RegisterNetMsgHandler(&ggmsghandler, &Player::_CMAdCancel);
|
||||
RegisterNetMsgHandler(&ggmsghandler, &Player::_CMAdEnd);
|
||||
RegisterNetMsgHandler(&ggmsghandler, &Player::_CMGetBoxInfo);
|
||||
RegisterNetMsgHandler(&ggmsghandler, &Player::_CMOpenBox);
|
||||
}
|
||||
|
||||
void HandlerMgr::ProcGMMsg(unsigned long saddr, int sockhandle,
|
||||
|
@ -110,6 +110,7 @@ namespace MetaData
|
||||
const metatable::Drop* i = nullptr;
|
||||
|
||||
void Init();
|
||||
//0:item_id 1:item_num 2:weight
|
||||
void RandItems(std::vector<std::tuple<int, int, int>>& drop_items);
|
||||
|
||||
private:
|
||||
|
@ -203,6 +203,10 @@ public:
|
||||
MetaMgr::Instance()->zbmode_player_num) {
|
||||
abort();
|
||||
}
|
||||
{
|
||||
METAMGR_READ(prebattle_box_id_chiji, 0);
|
||||
METAMGR_READ(prebattle_box_id_zb, 0);
|
||||
}
|
||||
{
|
||||
METAMGR_READ(newbie_first_robot_ammo, 3);
|
||||
METAMGR_READ(newbie_first_robot_appeartime, 8);
|
||||
|
@ -134,6 +134,9 @@ class MetaMgr : public a8::Singleton<MetaMgr>
|
||||
MetaData::Player* android_meta = nullptr;
|
||||
MetaData::Player* terminator_meta = nullptr;
|
||||
|
||||
int prebattle_box_id_chiji = 0;
|
||||
int prebattle_box_id_zb = 0;
|
||||
|
||||
private:
|
||||
MetaDataLoader* loader_ = nullptr;
|
||||
|
||||
|
@ -1301,6 +1301,60 @@ void Player::_CMAdEnd(f8::MsgHdr& hdr, const cs::CMAdEnd& msg)
|
||||
InternalAdOk();
|
||||
}
|
||||
|
||||
void Player::_CMGetBoxInfo(f8::MsgHdr& hdr, const cs::CMGetBoxInfo& msg)
|
||||
{
|
||||
cs::SMGetBoxInfo respmsg;
|
||||
respmsg.set_box_id(msg.box_id());
|
||||
std::vector<std::tuple<int, int, int>>* items = GetBox(msg.box_id());
|
||||
if (items) {
|
||||
for (auto& tuple : *items) {
|
||||
auto p = respmsg.add_items();
|
||||
p->add_values(std::get<0>(tuple));
|
||||
p->add_values(std::get<1>(tuple));
|
||||
}
|
||||
}
|
||||
SendNotifyMsg(respmsg);
|
||||
}
|
||||
|
||||
void Player::_CMOpenBox(f8::MsgHdr& hdr, const cs::CMOpenBox& msg)
|
||||
{
|
||||
cs::SMOpenBox respmsg;
|
||||
respmsg.set_box_id(msg.box_id());
|
||||
respmsg.set_errcode(0);
|
||||
if (msg.box_id() == 1) {
|
||||
if (receved_box_hash_.find(msg.box_id()) == receved_box_hash_.end()) {
|
||||
std::vector<std::tuple<int, int, int>>* items = GetBox(msg.box_id());
|
||||
if (items) {
|
||||
for (auto& tuple : *items) {
|
||||
MetaData::Equip* item_meta = MetaMgr::Instance()->GetEquip(std::get<0>(tuple));
|
||||
if (item_meta) {
|
||||
auto p = respmsg.add_items();
|
||||
p->add_values(std::get<0>(tuple));
|
||||
p->add_values(std::get<1>(tuple));
|
||||
if (item_meta->i->_inventory_slot() >= 0 &&
|
||||
item_meta->i->_inventory_slot() < IS_END) {
|
||||
if (GetInventory(item_meta->i->_inventory_slot()) <
|
||||
GetVolume(item_meta->i->_inventory_slot())) {
|
||||
int add_num = GetVolume(item_meta->i->_inventory_slot()) -
|
||||
GetInventory(item_meta->i->_inventory_slot());
|
||||
add_num = std::min(std::get<1>(tuple), add_num);
|
||||
|
||||
AddInventory(item_meta->i->_inventory_slot(), add_num);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
need_sync_active_player = true;
|
||||
}
|
||||
receved_box_hash_.insert(msg.box_id());
|
||||
} else {
|
||||
respmsg.set_errcode(1);
|
||||
respmsg.set_errmsg("不能重复领取");
|
||||
}
|
||||
}
|
||||
SendNotifyMsg(respmsg);
|
||||
}
|
||||
|
||||
void Player::InternalAdCancel()
|
||||
{
|
||||
if (GetBuffByEffectId(kBET_AdPlaying)) {
|
||||
@ -1379,3 +1433,32 @@ void Player::ProcPreSettlementInfo(const std::string& pre_settlement_info)
|
||||
rank = a8::XValue(tmp_strings[3]);
|
||||
}
|
||||
}
|
||||
|
||||
std::vector<std::tuple<int, int, int>>* Player::GetBox(int box_id)
|
||||
{
|
||||
if (box_id != 1) {
|
||||
return nullptr;
|
||||
}
|
||||
{
|
||||
auto itr = box_hash_.find(box_id);
|
||||
if (itr != box_hash_.end()) {
|
||||
return &itr->second;
|
||||
}
|
||||
}
|
||||
int drop_id = 0;
|
||||
if (room->GetRoomMode() == kZombieMode) {
|
||||
drop_id = MetaMgr::Instance()->prebattle_box_id_chiji;
|
||||
} else {
|
||||
drop_id = MetaMgr::Instance()->prebattle_box_id_zb;
|
||||
}
|
||||
MetaData::Drop* drop_meta = MetaMgr::Instance()->GetDrop(drop_id);
|
||||
if (drop_meta) {
|
||||
std::vector<std::tuple<int, int, int>> drop_items;
|
||||
drop_meta->RandItems(drop_items);
|
||||
box_hash_[box_id] = drop_items;
|
||||
}
|
||||
{
|
||||
auto itr = box_hash_.find(box_id);
|
||||
return itr != box_hash_.end() ? &itr->second : nullptr;
|
||||
}
|
||||
}
|
||||
|
@ -101,6 +101,8 @@ class Player : public Human
|
||||
void _CMAdStart(f8::MsgHdr& hdr, const cs::CMAdStart& msg);
|
||||
void _CMAdCancel(f8::MsgHdr& hdr, const cs::CMAdCancel& msg);
|
||||
void _CMAdEnd(f8::MsgHdr& hdr, const cs::CMAdEnd& msg);
|
||||
void _CMGetBoxInfo(f8::MsgHdr& hdr, const cs::CMGetBoxInfo& msg);
|
||||
void _CMOpenBox(f8::MsgHdr& hdr, const cs::CMOpenBox& msg);
|
||||
|
||||
protected:
|
||||
Player();
|
||||
@ -109,6 +111,11 @@ private:
|
||||
void InternalAdCancel();
|
||||
void InternalAdOk();
|
||||
void InternalUpdate(int delta_time);
|
||||
std::vector<std::tuple<int, int, int>>* GetBox(int box_id);
|
||||
|
||||
private:
|
||||
std::map<int, std::vector<std::tuple<int, int, int>>> box_hash_;
|
||||
std::set<int> receved_box_hash_;
|
||||
|
||||
friend class EntityFactory;
|
||||
};
|
||||
|
@ -18,6 +18,8 @@ enum CMMessageId_e
|
||||
_CMAdStart = 212;
|
||||
_CMAdCancel = 213;
|
||||
_CMAdEnd = 214;
|
||||
_CMGetBoxInfo = 215;
|
||||
_CMOpenBox = 216;
|
||||
}
|
||||
|
||||
enum SMMessageId_e
|
||||
@ -28,6 +30,8 @@ enum SMMessageId_e
|
||||
|
||||
_SMWatchWar = 208;
|
||||
_SMLeave = 209;
|
||||
_SMGetBoxInfo = 216;
|
||||
_SMOpenBox = 217;
|
||||
|
||||
_SMJoinedNotify = 103;
|
||||
_SMMapInfo = 1002;
|
||||
|
@ -857,6 +857,18 @@ message CMAdEnd
|
||||
optional int32 param = 1; //1:屠夫 2:南瓜
|
||||
}
|
||||
|
||||
//获取宝箱信息
|
||||
message CMGetBoxInfo
|
||||
{
|
||||
optional int32 box_id = 1; //1:战前宝箱
|
||||
}
|
||||
|
||||
//获取宝箱信息
|
||||
message CMOpenBox
|
||||
{
|
||||
optional int32 box_id = 1; //1: 战前宝箱
|
||||
}
|
||||
|
||||
//endcmmsg
|
||||
|
||||
//观战error_code == 0 时关闭结算界面,回到战斗界面
|
||||
@ -959,6 +971,22 @@ message SMLeave
|
||||
{
|
||||
}
|
||||
|
||||
//获取宝箱信息回复
|
||||
message SMGetBoxInfo
|
||||
{
|
||||
optional int32 box_id = 1; //1:战前宝箱
|
||||
repeated MFTuple items = 2; //values[0]:道具id values[1]:道具数量
|
||||
}
|
||||
|
||||
//开宝箱回复
|
||||
message SMOpenBox
|
||||
{
|
||||
optional int32 box_id = 1; //1: 战前宝箱
|
||||
optional int32 errcode = 2; //错误码
|
||||
optional string errmsg = 3; //错误描述
|
||||
repeated MFTuple items = 4; //values[0]:道具id values[1]:道具数量
|
||||
}
|
||||
|
||||
//断线通知
|
||||
message SMDisconnectNotify
|
||||
{
|
||||
|
Loading…
x
Reference in New Issue
Block a user