diff --git a/server/gameserver/battledatacontext.cc b/server/gameserver/battledatacontext.cc index 7b7cf392..fa7ffb67 100644 --- a/server/gameserver/battledatacontext.cc +++ b/server/gameserver/battledatacontext.cc @@ -332,8 +332,7 @@ void BattleDataContext::ParseResult(a8::XObject& obj) errmsg = obj.Get("errmsg").GetString(); if (errcode == 0) { revive_coin_ = obj.Get("revive_coin"); - int match_mode = obj.Get("match_mode"); - RoomMgr::Instance()->SetMatchMode(match_mode ? 1 : 0); + match_mode_ = obj.Get("match_mode"); } if (obj.HasKey("hero_dto") && obj.At("hero_dto")->IsObject()) { hero_dto = obj.At("hero_dto"); @@ -771,3 +770,13 @@ int BattleDataContext::GetReviveCoin() { return revive_coin_; } + +void BattleDataContext::SetMatchMode(int match_mode) +{ + match_mode_ = match_mode; +} + +int BattleDataContext::GetMatchMode() +{ + return match_mode_; +} diff --git a/server/gameserver/battledatacontext.h b/server/gameserver/battledatacontext.h index 0a16a963..ec86ada3 100644 --- a/server/gameserver/battledatacontext.h +++ b/server/gameserver/battledatacontext.h @@ -73,6 +73,8 @@ struct BattleDataContext void SetReviveCoin(int num); int GetReviveCoin(); + void SetMatchMode(int match_mode); + int GetMatchMode(); private: void Clear(); @@ -89,6 +91,7 @@ private: private: CreatureWeakPtr owner_; int revive_coin_ = 0; + int match_mode_ = 0; std::shared_ptr hero_ability_; std::shared_ptr weapon1_ability_; diff --git a/server/gameserver/human.cc b/server/gameserver/human.cc index 2a619ce1..fe642ee1 100644 --- a/server/gameserver/human.cc +++ b/server/gameserver/human.cc @@ -4526,3 +4526,8 @@ void Human::InternalBeKill(int killer_id, const std::string& killer_name, int we } } } + +int Human::GetTeamMode() +{ + return GetTeam()->GetMemberNum() <= 1 ? 0 : 1; +} diff --git a/server/gameserver/human.h b/server/gameserver/human.h index 2175135b..81919b79 100644 --- a/server/gameserver/human.h +++ b/server/gameserver/human.h @@ -169,6 +169,7 @@ class Human : public Creature MetaData::Equip* helmet_meta = nullptr; MetaData::Equip* chest_meta = nullptr; xtimer_list* dead_timer = nullptr; + int match_mode = 0; std::string name; std::string avatar_url; @@ -356,6 +357,7 @@ class Human : public Creature void AddOxygen(int val); void DecOxygen(int val); void WinPveScore(int score); + int GetTeamMode(); protected: void _InternalUpdateMove(float speed); diff --git a/server/gameserver/player.cc b/server/gameserver/player.cc index 49ee2ccc..616c2286 100644 --- a/server/gameserver/player.cc +++ b/server/gameserver/player.cc @@ -1167,13 +1167,15 @@ void Player::_CMRevive(f8::MsgHdr& hdr, const cs::CMRevive& msg) std::string url; JsonDataMgr::Instance()->GetApiUrl(url); if (url.find('?') != std::string::npos) { - url += "&c=Bag&a=decReviveCoin"; + url += "&c=Battle&a=decReviveCoin"; } else { - url += "?&c=Bag&a=decReviveCoin"; + url += "?&c=Battle&a=decReviveCoin"; } auto url_params = a8::MutableXObject::CreateObject(); url_params->SetVal("account_id", account_id); url_params->SetVal("session_id", session_id); + url_params->SetVal("target_id", hum->account_id); + url_params->SetVal("num", 1); HttpProxy::Instance()->HttpGet ( a8::XParams() @@ -1193,7 +1195,6 @@ void Player::_CMRevive(f8::MsgHdr& hdr, const cs::CMRevive& msg) if (room->IsGameOver()) { return; } - a8::UnSetBitFlag(hum->status, CS_Reviving); if (data.GetType() == a8::XOT_OBJECT && data.Get("errcode").GetInt() == 0) { int revive_coin = data.Get("revive_coin"); @@ -1207,6 +1208,7 @@ void Player::_CMRevive(f8::MsgHdr& hdr, const cs::CMRevive& msg) [] (const a8::XParams& param) { Player* hum = (Player*)param.sender.GetUserData(); + a8::UnSetBitFlag(hum->status, CS_Reviving); hum->InternalRevive(param.param1, param.param2); }, &hum->xtimer_attacher.timer_list_); @@ -1331,6 +1333,8 @@ void Player::PushJoinRoomMsg() notifymsg.set_player_id(GetUniId()); notifymsg.set_started(false); notifymsg.set_room_uuid(a8::XValue(room->GetRoomUuid()).GetString()); + notifymsg.set_team_mode(GetTeamMode()); + notifymsg.set_match_mode(GetBattleContext()->GetMatchMode()); GGListener::Instance()->SendToClient(socket_handle, 0, notifymsg); #ifdef DEBUG a8::XPrintf("PushJoinRooMmsg %d\n", {GetUniId()}); @@ -1502,6 +1506,7 @@ void Player::InternalRevive(int target_uniid, int revive_coin) Human* hum = room->GetHumanByUniId(target_uniid); if (hum) { + ++stats.revive; hum->dead = false; hum->real_dead = false; hum->downed = false; diff --git a/server/gameserver/roommgr.cc b/server/gameserver/roommgr.cc index 7172b0cc..6dca9d0b 100644 --- a/server/gameserver/roommgr.cc +++ b/server/gameserver/roommgr.cc @@ -810,6 +810,8 @@ void RoomMgr::SendGetBattleData(int mode, void(std::vector>&)>*)param.param1.GetUserData(); if (data.GetType() == a8::XOT_OBJECT) { + int match_mode = data.Get("match_mode"); + RoomMgr::Instance()->SetMatchMode(match_mode ? 1 : 0); if (data.HasKey("members")) { auto members = data.At("members"); if (members->GetType() == a8::XOT_ARRAY && members->Size() == (*result->get()).size()) {