1
This commit is contained in:
parent
0ba7dcf07b
commit
76c7ace206
@ -23,6 +23,7 @@
|
|||||||
#include "skill.h"
|
#include "skill.h"
|
||||||
#include "team.h"
|
#include "team.h"
|
||||||
#include "httpproxy.h"
|
#include "httpproxy.h"
|
||||||
|
#include "roommgr.h"
|
||||||
|
|
||||||
const int kREVIVE_BUFF_ID = 1005;
|
const int kREVIVE_BUFF_ID = 1005;
|
||||||
|
|
||||||
@ -1181,46 +1182,53 @@ void Player::_CMRevive(f8::MsgHdr& hdr, const cs::CMRevive& msg)
|
|||||||
.SetParam2(msg.target_uniid()),
|
.SetParam2(msg.target_uniid()),
|
||||||
[] (a8::XParams& param, a8::XObject& data)
|
[] (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)
|
[] (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.c_str(),
|
||||||
*url_params
|
*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)
|
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;
|
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);
|
void InternalUpdate(int delta_time);
|
||||||
std::vector<std::tuple<int, int, int>>* GetBox(int box_id);
|
std::vector<std::tuple<int, int, int>>* GetBox(int box_id);
|
||||||
void CheckShotHoldState(Weapon* weapon);
|
void CheckShotHoldState(Weapon* weapon);
|
||||||
|
void InternalRevive(int target_uniid, int revive_coin);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
long long last_cmmove_frameno_ = 0;
|
long long last_cmmove_frameno_ = 0;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user