1
This commit is contained in:
parent
0ba7dcf07b
commit
76c7ace206
@ -23,6 +23,7 @@
|
||||
#include "skill.h"
|
||||
#include "team.h"
|
||||
#include "httpproxy.h"
|
||||
#include "roommgr.h"
|
||||
|
||||
const int kREVIVE_BUFF_ID = 1005;
|
||||
|
||||
@ -1181,46 +1182,53 @@ void Player::_CMRevive(f8::MsgHdr& hdr, const cs::CMRevive& msg)
|
||||
.SetParam2(msg.target_uniid()),
|
||||
[] (a8::XParams& param, a8::XObject& data)
|
||||
{
|
||||
|
||||
Room* room = RoomMgr::Instance()->GetRoomByUuid(param.sender);
|
||||
if (!room) {
|
||||
return;
|
||||
}
|
||||
Player* hum = room->GetPlayerByAccountId(param.param1.GetString());
|
||||
if (!hum) {
|
||||
return;
|
||||
}
|
||||
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");
|
||||
room->xtimer.AddDeadLineTimerAndAttach
|
||||
(
|
||||
NEXT_FRAME_TIMER,
|
||||
a8::XParams()
|
||||
.SetSender(hum)
|
||||
.SetParam1(param.param2.GetInt())
|
||||
.SetParam2(revive_coin),
|
||||
[] (const a8::XParams& param)
|
||||
{
|
||||
Player* hum = (Player*)param.sender.GetUserData();
|
||||
hum->InternalRevive(param.param1, param.param2);
|
||||
},
|
||||
&hum->xtimer_attacher.timer_list_);
|
||||
}
|
||||
},
|
||||
[] (a8::XParams& param, const std::string& response)
|
||||
{
|
||||
|
||||
Room* room = RoomMgr::Instance()->GetRoomByUuid(param.sender);
|
||||
if (!room) {
|
||||
return;
|
||||
}
|
||||
Player* hum = room->GetPlayerByAccountId(param.param1.GetString());
|
||||
if (!hum) {
|
||||
return;
|
||||
}
|
||||
a8::UnSetBitFlag(hum->status, CS_Reviving);
|
||||
},
|
||||
url.c_str(),
|
||||
*url_params
|
||||
);
|
||||
}
|
||||
}
|
||||
{
|
||||
hum->dead = false;
|
||||
hum->real_dead = false;
|
||||
hum->downed = false;
|
||||
SetHP(GetMaxHP());
|
||||
SyncAroundPlayers(__FILE__, __LINE__, __func__);
|
||||
room->frame_event.AddRevive(GetWeakPtrRef());
|
||||
if (dead_timer) {
|
||||
room->xtimer.DeleteTimer(dead_timer);
|
||||
}
|
||||
#ifdef DEBUG
|
||||
a8::XPrintf("CMRevive self:%d %d pos:%d,%d\n",
|
||||
{
|
||||
GetUniId(),
|
||||
hum->GetUniId(),
|
||||
hum->GetPos().x,
|
||||
hum->GetPos().y
|
||||
});
|
||||
#endif
|
||||
{
|
||||
int buff_uniid = TryAddBuff(this, kInvincibleBuffId);
|
||||
if (buff_uniid) {
|
||||
Buff* buff = GetBuffByUniId(buff_uniid);
|
||||
if (buff) {
|
||||
room->xtimer.ModifyTimer(buff->remover_timer, 6 * SERVER_FRAME_RATE);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void Player::_CMCancelRevive(f8::MsgHdr& hdr, const cs::CMCancelRevive& msg)
|
||||
@ -1475,3 +1483,50 @@ void Player::AsyncRequestWatchWar(bool send_rsp_msg)
|
||||
hum->watch_war_req_timer_ = nullptr;
|
||||
});
|
||||
}
|
||||
|
||||
void Player::InternalRevive(int target_uniid, int revive_coin)
|
||||
{
|
||||
if (room->IsGameOver()) {
|
||||
return;
|
||||
}
|
||||
if (dead) {
|
||||
return;
|
||||
}
|
||||
GetBattleContext()->SetReviveCoin(revive_coin);
|
||||
room->frame_event.AddPropChg
|
||||
(GetWeakPtrRef(),
|
||||
kPropReviveCion,
|
||||
0,
|
||||
GetBattleContext()->GetReviveCoin(),
|
||||
true);
|
||||
|
||||
Human* hum = room->GetHumanByUniId(target_uniid);
|
||||
if (hum) {
|
||||
hum->dead = false;
|
||||
hum->real_dead = false;
|
||||
hum->downed = false;
|
||||
SetHP(GetMaxHP());
|
||||
SyncAroundPlayers(__FILE__, __LINE__, __func__);
|
||||
room->frame_event.AddRevive(GetWeakPtrRef());
|
||||
if (dead_timer) {
|
||||
room->xtimer.DeleteTimer(dead_timer);
|
||||
}
|
||||
a8::UdpLog::Instance()->Debug
|
||||
("InternalRevive sender:%s target:%s pos:%f,%f",
|
||||
{
|
||||
account_id,
|
||||
hum->account_id,
|
||||
hum->GetPos().x,
|
||||
hum->GetPos().y
|
||||
});
|
||||
{
|
||||
int buff_uniid = TryAddBuff(this, kInvincibleBuffId);
|
||||
if (buff_uniid) {
|
||||
Buff* buff = GetBuffByUniId(buff_uniid);
|
||||
if (buff) {
|
||||
room->xtimer.ModifyTimer(buff->remover_timer, 6 * SERVER_FRAME_RATE);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -131,6 +131,7 @@ private:
|
||||
void InternalUpdate(int delta_time);
|
||||
std::vector<std::tuple<int, int, int>>* GetBox(int box_id);
|
||||
void CheckShotHoldState(Weapon* weapon);
|
||||
void InternalRevive(int target_uniid, int revive_coin);
|
||||
|
||||
private:
|
||||
long long last_cmmove_frameno_ = 0;
|
||||
|
Loading…
x
Reference in New Issue
Block a user