1
This commit is contained in:
parent
cab988d642
commit
6f42e127f1
@ -148,6 +148,7 @@ enum BuffEffectType_e
|
||||
kBET_InIce = 27, //在冰里
|
||||
kBET_Driver = 28, //驾驶中
|
||||
kBET_Passenger = 29, //乘座
|
||||
kBET_Fly = 30, //飞行中
|
||||
|
||||
kBET_End
|
||||
};
|
||||
@ -397,3 +398,5 @@ const int TERMINATOR_BUFF_ID = 1033;
|
||||
const int TURN_OVER_SKILL_ID = 41001;
|
||||
|
||||
const int HUNLUAN_BUFFID = 6001;
|
||||
const int FLY_BUFFID = 7001;
|
||||
const int JUMP_BUFFID = 7002;
|
||||
|
@ -35,7 +35,7 @@ cs::SMUpdate* FrameMaker::MakeUpdateMsg(const Human* hum)
|
||||
if (room->GetGasData().gas_mode == GasJump &&
|
||||
entity != hum &&
|
||||
entity->GetEntityType() == ET_Player &&
|
||||
a8::HasBitFlag(((Human*)entity)->status, HS_Fly)) {
|
||||
((Human*)entity)->HasBuffEffect(kBET_Fly)) {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
@ -79,7 +79,8 @@ void InternalShot(Human* hum,
|
||||
bullet_dir,
|
||||
fly_distance);
|
||||
if (hum->room->BattleStarted() ||
|
||||
(hum->room->GetGasData().gas_mode == GasJump && !a8::HasBitFlag(hum->status, HS_Jump))) {
|
||||
(hum->room->GetGasData().gas_mode == GasJump &&
|
||||
!hum->HasBuffEffect(kBET_Jump))) {
|
||||
hum->room->CreateBullet(hum,
|
||||
weapon_meta,
|
||||
weapon_upgrade_meta,
|
||||
@ -1348,9 +1349,9 @@ bool Human::CanUseSkill()
|
||||
|
||||
void Human::DoJump()
|
||||
{
|
||||
if (a8::HasBitFlag(status, HS_Fly)) {
|
||||
a8::UnSetBitFlag(status, HS_Fly);
|
||||
a8::SetBitFlag(status, HS_Jump);
|
||||
if (HasBuffEffect(kBET_Fly)) {
|
||||
RemoveBuffByEffectId(kBET_Fly);
|
||||
MustBeAddBuff(this, JUMP_BUFFID);
|
||||
jump_frameno_ = room->GetFrameNo();
|
||||
SyncAroundPlayers(__FILE__, __LINE__, __func__);
|
||||
room->xtimer.AddDeadLineTimerAndAttach
|
||||
@ -3103,6 +3104,15 @@ void Human::AddBuff(Human* caster,
|
||||
#endif
|
||||
}
|
||||
|
||||
void Human::MustBeAddBuff(Human* caster, int buff_id)
|
||||
{
|
||||
MetaData::Buff* buff_meta = MetaMgr::Instance()->GetBuff(buff_id);
|
||||
if (!buff_meta) {
|
||||
abort();
|
||||
}
|
||||
AddBuff(caster, buff_meta, 1);
|
||||
}
|
||||
|
||||
bool Human::IsImmuneBuffEffect(int buff_effect)
|
||||
{
|
||||
for (auto itr = buff_list_.begin(); itr != buff_list_.end(); ++itr) {
|
||||
|
@ -23,8 +23,6 @@ enum HumanStatus
|
||||
HS_AlreadyProcNewBieLogic = 6,
|
||||
HS_LastAndroid = 7,
|
||||
HS_DisableAttack = 8,
|
||||
HS_Fly = 9,
|
||||
HS_Jump = 10,
|
||||
HS_End
|
||||
};
|
||||
|
||||
@ -264,6 +262,7 @@ class Human : public MoveableEntity
|
||||
MetaData::Buff* buff_meta,
|
||||
int skill_lv,
|
||||
MetaData::Skill* buff_skill_meta = nullptr);
|
||||
void MustBeAddBuff(Human* caster, int buff_id);
|
||||
bool IsImmuneBuffEffect(int buff_effect);
|
||||
void RemoveBuffById(int buff_id);
|
||||
void RemoveBuffByEffectId(int buff_effect_id);
|
||||
|
@ -312,7 +312,7 @@ void Player::UpdateSpectate()
|
||||
{
|
||||
if (room->GetGasData().gas_mode == GasInactive ||
|
||||
room->GetGasData().gas_mode == GasJump ||
|
||||
a8::HasBitFlag(status, HS_Fly)) {
|
||||
HasBuffEffect(kBET_Fly)) {
|
||||
spectate = false;
|
||||
return;
|
||||
}
|
||||
|
@ -1078,7 +1078,7 @@ void Room::UpdateGasInactive()
|
||||
.SetSender(room),
|
||||
[] (Human* hum, a8::XParams& param) -> bool
|
||||
{
|
||||
if (a8::HasBitFlag(hum->status, HS_Fly) &&
|
||||
if (hum->HasBuffEffect(kBET_Fly) &&
|
||||
hum->GetEntitySubType() != EST_Player) {
|
||||
hum->DoJump();
|
||||
return false;
|
||||
@ -1174,7 +1174,7 @@ void Room::UpdateGasJump()
|
||||
a8::XParams(),
|
||||
[] (Human* hum, a8::XParams& param) -> bool
|
||||
{
|
||||
if (a8::HasBitFlag(hum->status, HS_Fly)) {
|
||||
if (hum->HasBuffEffect(kBET_Fly)) {
|
||||
hum->DoJump();
|
||||
}
|
||||
if (hum->GetEntitySubType() == EST_Player) {
|
||||
@ -1601,7 +1601,7 @@ void Room::ShuaPlane()
|
||||
last_player_jump_pos_ = plane.curr_pos;
|
||||
|
||||
for (auto& pair : human_hash_) {
|
||||
a8::SetBitFlag(pair.second->status, HS_Fly);
|
||||
pair.second->MustBeAddBuff(pair.second, FLY_BUFFID);
|
||||
pair.second->SetPos(plane.curr_pos);
|
||||
pair.second->attack_dir = plane.dir;
|
||||
pair.second->move_dir = plane.dir;
|
||||
|
Loading…
x
Reference in New Issue
Block a user