1
This commit is contained in:
commit
91aac9611c
@ -97,6 +97,8 @@ void HandlerMgr::RegisterNetMsgHandlers()
|
|||||||
RegisterNetMsgHandler(&ggmsghandler, &Player::_CMAdStart);
|
RegisterNetMsgHandler(&ggmsghandler, &Player::_CMAdStart);
|
||||||
RegisterNetMsgHandler(&ggmsghandler, &Player::_CMAdCancel);
|
RegisterNetMsgHandler(&ggmsghandler, &Player::_CMAdCancel);
|
||||||
RegisterNetMsgHandler(&ggmsghandler, &Player::_CMAdEnd);
|
RegisterNetMsgHandler(&ggmsghandler, &Player::_CMAdEnd);
|
||||||
|
RegisterNetMsgHandler(&ggmsghandler, &Player::_CMGetBoxInfo);
|
||||||
|
RegisterNetMsgHandler(&ggmsghandler, &Player::_CMOpenBox);
|
||||||
}
|
}
|
||||||
|
|
||||||
void HandlerMgr::ProcGMMsg(unsigned long saddr, int sockhandle,
|
void HandlerMgr::ProcGMMsg(unsigned long saddr, int sockhandle,
|
||||||
|
@ -2540,10 +2540,17 @@ void Human::SendBattleReport()
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (JsonDataMgr::Instance()->channel != 0) {
|
if (JsonDataMgr::Instance()->channel != 0) {
|
||||||
|
if (kTouTiaoChannelId == JsonDataMgr::Instance()->channel) {
|
||||||
|
url = a8::Format("http://game2004api-al.kingsome.cn/%d/webapp/index.php?c=Role&a=battleReport",
|
||||||
|
{
|
||||||
|
JsonDataMgr::Instance()->channel
|
||||||
|
});
|
||||||
|
} else {
|
||||||
url = a8::Format("http://game2004api.kingsome.cn/%d/webapp/index.php?c=Role&a=battleReport",
|
url = a8::Format("http://game2004api.kingsome.cn/%d/webapp/index.php?c=Role&a=battleReport",
|
||||||
{
|
{
|
||||||
JsonDataMgr::Instance()->channel
|
JsonDataMgr::Instance()->channel
|
||||||
});
|
});
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
url = "http://game2004api.kingsome.cn/webapp/index.php?c=Role&a=battleReport";
|
url = "http://game2004api.kingsome.cn/webapp/index.php?c=Role&a=battleReport";
|
||||||
}
|
}
|
||||||
@ -2632,6 +2639,7 @@ void Human::ProcLootCar(Loot* entity, MetaData::Equip* item_meta)
|
|||||||
if (car_.meta->i->buffid()) {
|
if (car_.meta->i->buffid()) {
|
||||||
RemoveBuffById(car_.meta->i->buffid());
|
RemoveBuffById(car_.meta->i->buffid());
|
||||||
}
|
}
|
||||||
|
car_weapon = Weapon();
|
||||||
}
|
}
|
||||||
car_.car_uniid = entity->GetEntityUniId();
|
car_.car_uniid = entity->GetEntityUniId();
|
||||||
car_.car_id = item_meta->i->id();
|
car_.car_id = item_meta->i->id();
|
||||||
|
@ -110,6 +110,7 @@ namespace MetaData
|
|||||||
const metatable::Drop* i = nullptr;
|
const metatable::Drop* i = nullptr;
|
||||||
|
|
||||||
void Init();
|
void Init();
|
||||||
|
//0:item_id 1:item_num 2:weight
|
||||||
void RandItems(std::vector<std::tuple<int, int, int>>& drop_items);
|
void RandItems(std::vector<std::tuple<int, int, int>>& drop_items);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
@ -203,6 +203,10 @@ public:
|
|||||||
MetaMgr::Instance()->zbmode_player_num) {
|
MetaMgr::Instance()->zbmode_player_num) {
|
||||||
abort();
|
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_ammo, 3);
|
||||||
METAMGR_READ(newbie_first_robot_appeartime, 8);
|
METAMGR_READ(newbie_first_robot_appeartime, 8);
|
||||||
|
@ -134,6 +134,9 @@ class MetaMgr : public a8::Singleton<MetaMgr>
|
|||||||
MetaData::Player* android_meta = nullptr;
|
MetaData::Player* android_meta = nullptr;
|
||||||
MetaData::Player* terminator_meta = nullptr;
|
MetaData::Player* terminator_meta = nullptr;
|
||||||
|
|
||||||
|
int prebattle_box_id_chiji = 0;
|
||||||
|
int prebattle_box_id_zb = 0;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
MetaDataLoader* loader_ = nullptr;
|
MetaDataLoader* loader_ = nullptr;
|
||||||
|
|
||||||
|
@ -1301,6 +1301,81 @@ void Player::_CMAdEnd(f8::MsgHdr& hdr, const cs::CMAdEnd& msg)
|
|||||||
InternalAdOk();
|
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);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
switch (item_meta->i->equip_type()) {
|
||||||
|
case 7:
|
||||||
|
{
|
||||||
|
//背包
|
||||||
|
if (backpack == 0) {
|
||||||
|
MetaData::Equip* old_item_meta = MetaMgr::Instance()->GetEquip(backpack);
|
||||||
|
if (old_item_meta) {
|
||||||
|
if (old_item_meta->i->equip_lv() >= item_meta->i->equip_lv()) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
room->DropItem(GetPos(), old_item_meta->i->id(), 1, 1);
|
||||||
|
}
|
||||||
|
backpack = item_meta->i->id();
|
||||||
|
RecalcVolume();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
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()
|
void Player::InternalAdCancel()
|
||||||
{
|
{
|
||||||
if (GetBuffByEffectId(kBET_AdPlaying)) {
|
if (GetBuffByEffectId(kBET_AdPlaying)) {
|
||||||
@ -1379,3 +1454,32 @@ void Player::ProcPreSettlementInfo(const std::string& pre_settlement_info)
|
|||||||
rank = a8::XValue(tmp_strings[3]);
|
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_zb;
|
||||||
|
} else {
|
||||||
|
drop_id = MetaMgr::Instance()->prebattle_box_id_chiji;
|
||||||
|
}
|
||||||
|
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 _CMAdStart(f8::MsgHdr& hdr, const cs::CMAdStart& msg);
|
||||||
void _CMAdCancel(f8::MsgHdr& hdr, const cs::CMAdCancel& msg);
|
void _CMAdCancel(f8::MsgHdr& hdr, const cs::CMAdCancel& msg);
|
||||||
void _CMAdEnd(f8::MsgHdr& hdr, const cs::CMAdEnd& 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:
|
protected:
|
||||||
Player();
|
Player();
|
||||||
@ -109,6 +111,11 @@ private:
|
|||||||
void InternalAdCancel();
|
void InternalAdCancel();
|
||||||
void InternalAdOk();
|
void InternalAdOk();
|
||||||
void InternalUpdate(int delta_time);
|
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;
|
friend class EntityFactory;
|
||||||
};
|
};
|
||||||
|
@ -175,6 +175,7 @@ void RoomMgr::_CMJoin(f8::MsgHdr& hdr, const cs::CMJoin& msg)
|
|||||||
msg.account_id()
|
msg.account_id()
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
OnJoinRoomOk(msg, hum);
|
||||||
}
|
}
|
||||||
|
|
||||||
void RoomMgr::_CMReconnect(f8::MsgHdr& hdr, const cs::CMReconnect& msg)
|
void RoomMgr::_CMReconnect(f8::MsgHdr& hdr, const cs::CMReconnect& msg)
|
||||||
@ -544,3 +545,93 @@ bool RoomMgr::IsGM(const std::string& account_id)
|
|||||||
{
|
{
|
||||||
return gm_hash_.find(account_id) != gm_hash_.end();
|
return gm_hash_.find(account_id) != gm_hash_.end();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::string RoomMgr::GenTeamHashData(const std::string& team_uuid, std::map<std::string, long long>* team_hash)
|
||||||
|
{
|
||||||
|
std::string data;
|
||||||
|
data += a8::Format("team_uuid:%s ", {team_uuid});
|
||||||
|
for (auto pair : *team_hash) {
|
||||||
|
data += a8::Format("%s->%d ", {pair.first, pair.second});
|
||||||
|
}
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
|
||||||
|
void RoomMgr::OnJoinRoomOk(const cs::CMJoin& msg, Player* hum)
|
||||||
|
{
|
||||||
|
if (msg.team_members().size() <= 1) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
std::map<std::string, long long>* team_hash = nullptr;
|
||||||
|
{
|
||||||
|
auto itr = team_room_hash_.find(msg.team_uuid());
|
||||||
|
if (itr == team_room_hash_.end()) {
|
||||||
|
team_room_hash_[msg.team_uuid()] = std::map<std::string, long long>();
|
||||||
|
itr = team_room_hash_.find(msg.team_uuid());
|
||||||
|
team_hash = &itr->second;
|
||||||
|
for (auto& team_member : msg.team_members()) {
|
||||||
|
team_hash->insert(std::make_pair(team_member.account_id(), 0));
|
||||||
|
}
|
||||||
|
a8::Timer::Instance()->AddDeadLineTimer
|
||||||
|
(1000 * 60,
|
||||||
|
a8::XParams()
|
||||||
|
.SetSender(msg.team_uuid()),
|
||||||
|
[] (const a8::XParams& params)
|
||||||
|
{
|
||||||
|
RoomMgr::Instance()->TeamRoomTimeOut(params.sender);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
team_hash = &itr->second;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!team_hash) {
|
||||||
|
abort();
|
||||||
|
}
|
||||||
|
{
|
||||||
|
auto itr = team_hash->find(hum->account_id);
|
||||||
|
if (itr != team_hash->end()) {
|
||||||
|
itr->second = hum->room->GetRoomUuid();
|
||||||
|
} else {
|
||||||
|
a8::UdpLog::Instance()->Warning
|
||||||
|
("team_data:%s account_id:%s not exists",
|
||||||
|
{
|
||||||
|
GenTeamHashData(msg.team_uuid(), team_hash),
|
||||||
|
hum->account_id
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void RoomMgr::TeamRoomTimeOut(const std::string& team_uuid)
|
||||||
|
{
|
||||||
|
std::map<std::string, long long>* team_hash = nullptr;
|
||||||
|
{
|
||||||
|
auto itr = team_room_hash_.find(team_uuid);
|
||||||
|
if (itr != team_room_hash_.end()) {
|
||||||
|
team_hash = &itr->second;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (team_hash) {
|
||||||
|
bool ok = true;
|
||||||
|
for (auto pair : *team_hash) {
|
||||||
|
if (pair.second == 0) {
|
||||||
|
ok = false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!ok) {
|
||||||
|
a8::UdpLog::Instance()->Warning
|
||||||
|
("team match failed team_data:%s ",
|
||||||
|
{
|
||||||
|
GenTeamHashData(team_uuid, team_hash),
|
||||||
|
});
|
||||||
|
}
|
||||||
|
team_room_hash_.erase(team_uuid);
|
||||||
|
} else {
|
||||||
|
a8::UdpLog::Instance()->Warning
|
||||||
|
("team not found team_uuid:s",
|
||||||
|
{
|
||||||
|
team_uuid
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -53,6 +53,9 @@ class RoomMgr : public a8::Singleton<RoomMgr>
|
|||||||
int creator_proto_version,
|
int creator_proto_version,
|
||||||
int creator_channel);
|
int creator_channel);
|
||||||
void JoinErrorHandle(const cs::CMJoin& msg, int error_code, int socket_handle);
|
void JoinErrorHandle(const cs::CMJoin& msg, int error_code, int socket_handle);
|
||||||
|
std::string GenTeamHashData(const std::string& team_uuid, std::map<std::string, long long>* team_hash);
|
||||||
|
void OnJoinRoomOk(const cs::CMJoin& msg, Player* hum);
|
||||||
|
void TeamRoomTimeOut(const std::string& team_uuid);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
int current_room_idx_ = 0;
|
int current_room_idx_ = 0;
|
||||||
@ -63,4 +66,5 @@ class RoomMgr : public a8::Singleton<RoomMgr>
|
|||||||
std::map<long long, Room*> over_room_hash_;
|
std::map<long long, Room*> over_room_hash_;
|
||||||
a8::TimerAttacher reportstate_timer_attacher_;
|
a8::TimerAttacher reportstate_timer_attacher_;
|
||||||
std::map<std::string, int> gm_hash_;
|
std::map<std::string, int> gm_hash_;
|
||||||
|
std::map<std::string, std::map<std::string, long long>> team_room_hash_;
|
||||||
};
|
};
|
||||||
|
@ -18,6 +18,8 @@ enum CMMessageId_e
|
|||||||
_CMAdStart = 212;
|
_CMAdStart = 212;
|
||||||
_CMAdCancel = 213;
|
_CMAdCancel = 213;
|
||||||
_CMAdEnd = 214;
|
_CMAdEnd = 214;
|
||||||
|
_CMGetBoxInfo = 215;
|
||||||
|
_CMOpenBox = 216;
|
||||||
}
|
}
|
||||||
|
|
||||||
enum SMMessageId_e
|
enum SMMessageId_e
|
||||||
@ -28,6 +30,8 @@ enum SMMessageId_e
|
|||||||
|
|
||||||
_SMWatchWar = 208;
|
_SMWatchWar = 208;
|
||||||
_SMLeave = 209;
|
_SMLeave = 209;
|
||||||
|
_SMGetBoxInfo = 216;
|
||||||
|
_SMOpenBox = 217;
|
||||||
|
|
||||||
_SMJoinedNotify = 103;
|
_SMJoinedNotify = 103;
|
||||||
_SMMapInfo = 1002;
|
_SMMapInfo = 1002;
|
||||||
|
@ -857,6 +857,18 @@ message CMAdEnd
|
|||||||
optional int32 param = 1; //1:屠夫 2:南瓜
|
optional int32 param = 1; //1:屠夫 2:南瓜
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//获取宝箱信息
|
||||||
|
message CMGetBoxInfo
|
||||||
|
{
|
||||||
|
optional int32 box_id = 1; //1:战前宝箱
|
||||||
|
}
|
||||||
|
|
||||||
|
//获取宝箱信息
|
||||||
|
message CMOpenBox
|
||||||
|
{
|
||||||
|
optional int32 box_id = 1; //1: 战前宝箱
|
||||||
|
}
|
||||||
|
|
||||||
//endcmmsg
|
//endcmmsg
|
||||||
|
|
||||||
//观战error_code == 0 时关闭结算界面,回到战斗界面
|
//观战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
|
message SMDisconnectNotify
|
||||||
{
|
{
|
||||||
|
2
third_party/framework
vendored
2
third_party/framework
vendored
@ -1 +1 @@
|
|||||||
Subproject commit ea69b96451e7004430e99b86db1cfd3ae4d76c6b
|
Subproject commit 98f1d402cba91a1983dac2eb00de731657e133a5
|
Loading…
x
Reference in New Issue
Block a user