This commit is contained in:
aozhiwei 2023-03-13 16:58:26 +08:00
parent cde5bb2612
commit d50ac06600
11 changed files with 27 additions and 173 deletions

View File

@ -167,7 +167,7 @@ bool Buff::NeedSync(Human* hum)
bool Buff::FreezeOperate() bool Buff::FreezeOperate()
{ {
return meta->buff_effect() == kBET_Become && !hold_weapons_.empty(); return false;
} }
void Buff::RecoverHoldWeapons() void Buff::RecoverHoldWeapons()

View File

@ -1,51 +0,0 @@
#include "precompile.h"
#include "buff/become.h"
#include "creature.h"
#include "mt/Buff.h"
#include "mt/Equip.h"
void BecomeBuff::Activate()
{
hold_curr_weapon_idx_ = caster_.Get()->GetCurrWeapon()->weapon_idx;
if (caster_.Get()->IsHuman() && meta->_buff_param2 > 0.01) {
std::vector<std::string> strings;
a8::Split(meta->buff_param2(), strings, ':');
for (size_t i = 0; i < strings.size(); ++i) {
int weapon_id = a8::XValue(strings[i]);
const mt::Equip* weapon_meta = mt::Equip::GetById(weapon_id);
if (weapon_meta && i < caster_.Get()->weapons.size()) {
int weapon_idx = weapon_meta->GetWeaponIdx();
if (weapon_idx >= 0 && weapon_idx < caster_.Get()->weapons.size()) {
Weapon* weapon = &caster_.Get()->weapons[weapon_idx];
hold_weapons_.push_back(*weapon);
weapon->weapon_id = weapon_meta->id();
weapon->meta = weapon_meta;
weapon->skill_meta = skill_meta;
weapon->Recalc();
weapon->ammo = weapon->GetClipVolume(owner);
if (i == 0) {
caster_.Get()->SetCurrWeapon(weapon);
}
}
}
}
caster_.Get()->MarkSyncActivePlayer(__FILE__, __LINE__, __func__);
caster_.Get()->SyncAroundPlayers(__FILE__, __LINE__, __func__);
}
#ifdef DEBUG1
caster_.Get()->SendDebugMsg(a8::Format("ProcBecome buff:%d hold_curr_weapon_idx:%d",
{
meta->buff_id(),
hold_curr_weapon_idx_
}));
#endif
}
void BecomeBuff::Deactivate()
{
RecoverHoldWeapons();
}

View File

@ -1,12 +0,0 @@
#pragma once
#include "buff.h"
class BecomeBuff : public Buff
{
public:
virtual void Activate() override;
virtual void Deactivate() override;
};

View File

@ -1,44 +0,0 @@
#include "precompile.h"
#include "buff/bepull.h"
#include "creature.h"
#include "mt/Buff.h"
void BePullBuff::Activate()
{
if (caster_.Get() == owner) {
A8_ABORT();
}
if (caster_.Get()->GetEntitySubType() == EST_Android) {
float target_distance = caster_.Get()->GetPos().Distance2D2(owner->GetPos());
if (target_distance <= 0.000001f) {
owner->SetPos(caster_.Get()->GetPos());
owner->target_pos = caster_.Get()->GetPos();
} else {
if (target_distance <= meta->_buff_param3) {
owner->SetPos(caster_.Get()->GetPos());
owner->target_pos = caster_.Get()->GetPos();
} else {
glm::vec3 move_dir = owner->GetPos().CalcDir(caster_.Get()->GetPos());
GlmHelper::Normalize(move_dir);
owner->SetMoveDir(move_dir);
owner->target_pos = owner->GetPos();
owner->target_pos.AddGlmVec3(owner->GetMoveDir() * (target_distance - meta->_buff_param3));
}
}
} else {
GlmHelper::Normalize(caster_.Get()->skill_dir_);
owner->target_pos = caster_.Get()->GetPos();
owner->target_pos.AddGlmVec3(caster_.Get()->skill_dir_ * caster_.Get()->skill_distance_);
glm::vec3 move_dir = owner->GetPos().CalcDir(owner->target_pos);
GlmHelper::Normalize(move_dir);
owner->SetMoveDir(move_dir);
}
}
void BePullBuff::Deactivate()
{
}

View File

@ -1,12 +0,0 @@
#pragma once
#include "buff.h"
class BePullBuff : public Buff
{
public:
virtual void Activate() override;
virtual void Deactivate() override;
};

View File

@ -9,8 +9,6 @@
#include "buff/autoshot.h" #include "buff/autoshot.h"
#include "buff/batch_add.h" #include "buff/batch_add.h"
#include "buff/beatback.h" #include "buff/beatback.h"
#include "buff/become.h"
#include "buff/bepull.h"
#include "buff/berecycle.h" #include "buff/berecycle.h"
#include "buff/callfunc.h" #include "buff/callfunc.h"
#include "buff/camouflage.h" #include "buff/camouflage.h"
@ -35,7 +33,6 @@
#include "buff/remove_car.h" #include "buff/remove_car.h"
#include "buff/rescuer.h" #include "buff/rescuer.h"
#include "buff/reverse.h" #include "buff/reverse.h"
#include "buff/reverse_move.h"
#include "buff/select_target_with_self_pos.h" #include "buff/select_target_with_self_pos.h"
#include "buff/sprint.h" #include "buff/sprint.h"
#include "buff/summon_hero.h" #include "buff/summon_hero.h"
@ -62,10 +59,6 @@ std::shared_ptr<Buff> BuffFactory::MakeBuff(const mt::Buff* buff_meta)
return std::make_shared<BatchAddBuff>(); return std::make_shared<BatchAddBuff>();
case kBET_BeatBack: case kBET_BeatBack:
return std::make_shared<BeatBackBuff>(); return std::make_shared<BeatBackBuff>();
case kBET_Become:
return std::make_shared<BecomeBuff>();
case kBET_BePull:
return std::make_shared<BePullBuff>();
case kBET_BeRecycle: case kBET_BeRecycle:
return std::make_shared<BeRecycleBuff>(); return std::make_shared<BeRecycleBuff>();
case kBET_CallFunc: case kBET_CallFunc:
@ -104,8 +97,6 @@ std::shared_ptr<Buff> BuffFactory::MakeBuff(const mt::Buff* buff_meta)
return std::make_shared<OnceChgAttrBuff>(); return std::make_shared<OnceChgAttrBuff>();
case kBET_Passenger: case kBET_Passenger:
return std::make_shared<PassengerBuff>(); return std::make_shared<PassengerBuff>();
case kBET_Pull:
return std::make_shared<PullBuff>();
case kBET_PullToWalkable: case kBET_PullToWalkable:
return std::make_shared<PullToWalkableBuff>(); return std::make_shared<PullToWalkableBuff>();
case kBET_RemoveCarBuff: case kBET_RemoveCarBuff:
@ -114,8 +105,6 @@ std::shared_ptr<Buff> BuffFactory::MakeBuff(const mt::Buff* buff_meta)
return std::make_shared<RescuerBuff>(); return std::make_shared<RescuerBuff>();
case kBET_Reverse: case kBET_Reverse:
return std::make_shared<ReverseBuff>(); return std::make_shared<ReverseBuff>();
case kBET_ReverseMove:
return std::make_shared<ReverseMoveBuff>();
case kBET_SelectTargetWithSelfPos: case kBET_SelectTargetWithSelfPos:
return std::make_shared<SelectTargetWithSelfPosBuff>(); return std::make_shared<SelectTargetWithSelfPosBuff>();
case kBET_Sprint: case kBET_Sprint:

View File

@ -1,13 +0,0 @@
#include "precompile.h"
#include "buff/reverse_move.h"
void ReverseMoveBuff::Activate()
{
}
void ReverseMoveBuff::Deactivate()
{
}

View File

@ -1,12 +0,0 @@
#pragma once
#include "buff.h"
class ReverseMoveBuff : public Buff
{
public:
virtual void Activate() override;
virtual void Deactivate() override;
};

View File

@ -32,44 +32,44 @@ A8_DECLARE_ENUM(SpecBuffId_e,
A8_DECLARE_ENUM(BuffEffectType_e, A8_DECLARE_ENUM(BuffEffectType_e,
kBET_Begin = 0, kBET_Begin = 0,
kBET_ChgAttr = 1, //改变属性 kBET_UnUse1 = 1,
kBET_TurnOver = 2, //翻滚 kBET_TurnOver = 2, //翻滚
kBET_Car = 3, //骑乘 kBET_UnUse3 = 3,
kBET_Invincible = 4, //无敌 kBET_Invincible = 4, //无敌
kBET_Camouflage = 5, //伪装 kBET_Camouflage = 5, //伪装
kBET_Immune = 6, //免疫 kBET_Immune = 6, //免疫
kBET_CallFunc = 7, //调用功能 kBET_CallFunc = 7, //调用功能
kBET_NewProtect = 8, //新手保护血量低于50% kBET_NewProtect = 8, //新手保护血量低于50%
kBET_BePull = 9, //拉人(被拉方) kBET_BePull = 9, //拉人(被拉方)
kBET_JumpTo = 10, //跳跃 kBET_UnUse10 = 10,
kBET_OnceChgAttr = 11, //一次性buff kBET_OnceChgAttr = 11, //一次性buff
kBET_Pull = 12, //拉人(主动方) kBET_UnUse12 = 12,
kBET_ModifyAttr = 13, kBET_ModifyAttr = 13,
kBET_PlayShotAni = 14, //播放射击动画 kBET_PlayShotAni = 14, //播放射击动画
kBET_Vertigo = 15, //眩晕 kBET_Vertigo = 15, //眩晕
kBET_DecHp = 16, //扣血 kBET_UnUse16 = 16,
kBET_PullDone = 17, //拖拽到目的地 kBET_PullDone = 17, //拖拽到目的地
kBET_DelayAddBuff = 18, //延迟加buff kBET_DelayAddBuff = 18, //延迟加buff
kBET_PlayEffect = 19, //播放特效(客户端表现用) kBET_UnUse19 = 19,
kBET_CliEffect2 = 20, //僵尸被动光环毒物(客户端表现用) kBET_UnUse20 = 20,
kBET_CliEffect3 = 21, //僵尸被动光环地震(客户端表现用) kBET_UnUse21 = 21,
kBET_CliEffect4 = 22, //被拖拽(客户端表现用) kBET_UnUse22 = 22,
kBET_HunLuan = 23, //混乱,在烟雾弹中不自动瞄准 kBET_HunLuan = 23, //混乱,在烟雾弹中不自动瞄准
kBET_Fly = 24, //飞行中 kBET_Fly = 24, //飞行中
kBET_Jump = 25, //跳伞中 kBET_Jump = 25, //跳伞中
kBET_IntervalAddBuff = 26, //持续掉血 kBET_IntervalAddBuff = 26, //持续掉血
//kBET_LastAddHp = 27, //持续加血 //kBET_LastAddHp = 27, //持续加血
kBET_OnceAddHp = 28, //加血 kBET_UnUse28 = 28,
kBET_SummonHero = 29, //召唤英雄 kBET_SummonHero = 29, //召唤英雄
//kBET_SummonHero = 30, //向前跳跃 //kBET_SummonHero = 30, //向前跳跃
kBET_Shield = 31, //减伤护盾 kBET_UnUse31 = 31,
kBET_Hide = 32, //隐身 kBET_Hide = 32, //隐身
kBET_CrazyMode = 33, //暴走模式 kBET_UnUse33 = 33,
kBET_ShockWave = 34, //冲击波 kBET_UnUse34 = 34,
kBET_Sprint = 35, //冲刺 kBET_Sprint = 35, //冲刺
kBET_SummonObstacle = 36, //召唤物件 kBET_SummonObstacle = 36, //召唤物件
kBET_FlashMove = 37, //瞬间移动 kBET_FlashMove = 37, //瞬间移动
kBET_Become = 38, //变身 kBET_UnUse38 = 38,
kBET_ShotCharge = 39, //射击蓄力 kBET_ShotCharge = 39, //射击蓄力
kBET_SelectTargetWithSelfPos = 40, //已自己坐标为中心范围内选取目标,并且批量添加buff kBET_SelectTargetWithSelfPos = 40, //已自己坐标为中心范围内选取目标,并且批量添加buff
kBET_EventAdd = 41, //even添加buff kBET_EventAdd = 41, //even添加buff
@ -106,7 +106,7 @@ A8_DECLARE_ENUM(BuffEffectType_e,
kBET_CondAdd = 71, // kBET_CondAdd = 71, //
kBET_Dive = 72, //下潜模式 kBET_Dive = 72, //下潜模式
kBET_Reverse = 73, //人物反向 kBET_Reverse = 73, //人物反向
kBET_ReverseMove = 74, //人物反向移动 kBET_UnUse74 = 74,
kBET_MachineGun = 75, //机枪 kBET_MachineGun = 75, //机枪
kBET_HoldShield = 76, //手持盾牌 kBET_HoldShield = 76, //手持盾牌
kBET_InRescue = 77, //被救援中(被就方) kBET_InRescue = 77, //被救援中(被就方)

View File

@ -1755,8 +1755,7 @@ void Creature::SummonHero(Buff* buff,
bool Creature::FreezeOperate() bool Creature::FreezeOperate()
{ {
Buff* buff = GetBuffByEffectId(kBET_Become); bool freeze = false;
bool freeze = buff && buff->FreezeOperate();
if (!freeze) { if (!freeze) {
freeze = GetBuffByEffectId(kBET_Vertigo) || freeze = GetBuffByEffectId(kBET_Vertigo) ||
GetBuffByEffectId(kBET_Driver) || GetBuffByEffectId(kBET_Driver) ||

View File

@ -659,10 +659,12 @@ void Human::DecHP(float dec_hp, int killer_id, const std::string& killer_name, i
#endif #endif
#endif #endif
{ {
#if 0
Buff* buff = GetBuffByEffectId(kBET_Shield); Buff* buff = GetBuffByEffectId(kBET_Shield);
if (buff) { if (buff) {
dec_hp = std::max((float)1.0, dec_hp - buff->meta->_buff_param2); dec_hp = std::max((float)1.0, dec_hp - buff->meta->_buff_param2);
} }
#endif
} }
if (HasBuffEffect(kBET_Invincible)) { if (HasBuffEffect(kBET_Invincible)) {
return; return;
@ -956,9 +958,11 @@ void Human::DoGetOn(int obj_uniid)
if (downed) { if (downed) {
return; return;
} }
#if 0
if (HasBuffEffect(kBET_Become)) { if (HasBuffEffect(kBET_Become)) {
return; return;
} }
#endif
switch (entity->GetEntityType()) { switch (entity->GetEntityType()) {
case ET_Loot: case ET_Loot:
{ {
@ -1500,7 +1504,11 @@ void Human::DeadDrop()
if (a8::HasBitFlag(status, CS_DeadNoDrop)) { if (a8::HasBitFlag(status, CS_DeadNoDrop)) {
return; return;
} }
#if 1
if (true) {
#else
if (!(HasBuffEffect(kBET_Become) && GetBuffByEffectId(kBET_Become)->FreezeOperate())) { if (!(HasBuffEffect(kBET_Become) && GetBuffByEffectId(kBET_Become)->FreezeOperate())) {
#endif
#ifdef NEW_WEAPON_SYS #ifdef NEW_WEAPON_SYS
#else #else
for (auto& weapon : weapons) { for (auto& weapon : weapons) {
@ -3316,9 +3324,11 @@ void Human::DoDive()
HasBuffEffect(kBET_Passenger)) { HasBuffEffect(kBET_Passenger)) {
return; return;
} }
#if 0
if (HasBuffEffect(kBET_Become)) { if (HasBuffEffect(kBET_Become)) {
return; return;
} }
#endif
if (HasBuffEffect(kBET_Camouflage) ) { if (HasBuffEffect(kBET_Camouflage) ) {
RemoveBuffByEffectId(kBET_Camouflage); RemoveBuffByEffectId(kBET_Camouflage);
} }