1
This commit is contained in:
parent
8888385186
commit
f46ba84fd7
@ -343,7 +343,6 @@ void Buff::ProcSputteringFunc(Bullet* bullet)
|
||||
|
||||
void Buff::Activate()
|
||||
{
|
||||
#if 0
|
||||
const mt::Buff* buff_meta = meta;
|
||||
switch (meta->buff_effect()) {
|
||||
case kBET_ChgAttr:
|
||||
@ -370,470 +369,13 @@ void Buff::Activate()
|
||||
}
|
||||
}
|
||||
break;
|
||||
case kBET_TurnOver:
|
||||
{
|
||||
ProcTurnOver();
|
||||
}
|
||||
break;
|
||||
case kBET_Camouflage:
|
||||
{
|
||||
if (owner->aiming) {
|
||||
owner->aiming = false;
|
||||
}
|
||||
if (owner->action_type != AT_None) {
|
||||
owner->CancelAction();
|
||||
}
|
||||
if (owner->IsHuman()) {
|
||||
++owner->AsHuman()->stats.use_camouflage_times;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case kBET_BePull:
|
||||
{
|
||||
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->_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);
|
||||
// 999
|
||||
#if 1
|
||||
#else
|
||||
owner->target_pos = owner->GetPos() + owner->GetMoveDir() * (target_distance - meta->param3);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
} else {
|
||||
GlmHelper::Normalize(caster_.Get()->skill_dir_);
|
||||
// 999
|
||||
#if 1
|
||||
#else
|
||||
target_pos = caster->GetPos() + caster->skill_dir_ * caster->skill_distance_;
|
||||
#endif
|
||||
glm::vec3 move_dir = owner->GetPos().CalcDir(owner->target_pos);
|
||||
GlmHelper::Normalize(move_dir);
|
||||
owner->SetMoveDir(move_dir);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case kBET_JumpTo:
|
||||
{
|
||||
Entity* entity = owner->room->GetEntityByUniId(owner->skill_target_id_);
|
||||
if (entity) {
|
||||
float target_distance = entity->GetPos().Distance2D2(owner->GetPos());
|
||||
if (target_distance <= 0.000001f) {
|
||||
owner->SetPos(entity->GetPos());
|
||||
owner->skill_target_pos_ = entity->GetPos();
|
||||
} else {
|
||||
if (target_distance <= meta->_param3) {
|
||||
owner->SetPos(entity->GetPos());
|
||||
owner->skill_target_pos_ = entity->GetPos();
|
||||
} else {
|
||||
glm::vec3 move_dir = owner->GetPos().CalcDir(entity->GetPos());
|
||||
GlmHelper::Normalize(move_dir);
|
||||
owner->SetMoveDir(move_dir);
|
||||
owner->skill_dir_ = owner->GetMoveDir();
|
||||
// 999
|
||||
#if 1
|
||||
#else
|
||||
owner->skill_target_pos_ = owner->GetPos() + owner->GetMoveDir() * (owner->target_distance - meta->param3);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
}
|
||||
owner->target_pos = owner->skill_target_pos_;
|
||||
}
|
||||
break;
|
||||
case kBET_Pull:
|
||||
{
|
||||
int i = 0;
|
||||
}
|
||||
break;
|
||||
case kBET_PlayShotAni:
|
||||
{
|
||||
|
||||
}
|
||||
break;
|
||||
case kBET_Vertigo:
|
||||
{
|
||||
int i = 0;
|
||||
}
|
||||
break;
|
||||
case kBET_DecHp:
|
||||
{
|
||||
#if 0
|
||||
float def = hum->ability.def * (1 + hum->GetBuffAttrRate(kHAT_Def)) +
|
||||
hum->GetBuffAttrAbs(kHAT_Def);
|
||||
#endif
|
||||
#if 0
|
||||
if (caster->GetEntityType() == ET_Player) {
|
||||
DecHP(meta->param1,
|
||||
caster->GetUniId(),
|
||||
((Human*)caster)->name,
|
||||
0);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
break;
|
||||
case kBET_DelayAddBuff:
|
||||
{
|
||||
ProcDelayAddBuff();
|
||||
}
|
||||
break;
|
||||
case kBET_IntervalAddBuff:
|
||||
{
|
||||
ProcIntervalAddBuff();
|
||||
}
|
||||
break;
|
||||
case kBET_OnceChgAttr:
|
||||
{
|
||||
ProcOnceChgAttr();
|
||||
}
|
||||
break;
|
||||
case kBET_OnceAddHp:
|
||||
{
|
||||
owner->AddHp(meta->_param1);
|
||||
}
|
||||
break;
|
||||
case kBET_SummonHero:
|
||||
{
|
||||
if (!owner->dead || meta->dead_valid() != 0) {
|
||||
owner->SummonHero(this, owner->GetPos(), owner->GetMoveDir());
|
||||
}
|
||||
}
|
||||
break;
|
||||
case kBET_Shield:
|
||||
{
|
||||
|
||||
}
|
||||
break;
|
||||
case kBET_Hide:
|
||||
{
|
||||
ProcHide();
|
||||
}
|
||||
break;
|
||||
case kBET_Rescuer:
|
||||
{
|
||||
ProcRescuer();
|
||||
}
|
||||
break;
|
||||
case kBET_Immune:
|
||||
{
|
||||
ProcImmune();
|
||||
}
|
||||
break;
|
||||
case kBET_SummonObstacle:
|
||||
{
|
||||
if (!owner->dead || meta->dead_valid() != 0) {
|
||||
owner->SummonObstacle(this, meta->_param1, owner->context_pos);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case kBET_Sprint:
|
||||
{
|
||||
ProcSprint();
|
||||
}
|
||||
break;
|
||||
case kBET_FlashMove:
|
||||
{
|
||||
if (meta->_int_param1 == 0) {
|
||||
owner->SpecDirMove(owner->skill_dir_, std::max(owner->skill_distance_, 300.0f));
|
||||
}
|
||||
}
|
||||
break;
|
||||
case kBET_BatchAddBuff:
|
||||
{
|
||||
ProcBatchAddBuff();
|
||||
}
|
||||
break;
|
||||
case kBET_BeRecycle:
|
||||
{
|
||||
ProcBeRecycle();
|
||||
}
|
||||
break;
|
||||
case kBET_Become:
|
||||
{
|
||||
ProcBecome();
|
||||
}
|
||||
break;
|
||||
case kBET_SelectTargetWithSelfPos:
|
||||
{
|
||||
ProcSeletTargetWithSelfPos();
|
||||
}
|
||||
break;
|
||||
case kBET_Driver:
|
||||
{
|
||||
ProcDriver();
|
||||
}
|
||||
break;
|
||||
case kBET_Passenger:
|
||||
{
|
||||
ProcPassenger();
|
||||
}
|
||||
break;
|
||||
case kBET_PullToWalkable:
|
||||
{
|
||||
ProcPullToWalkable();
|
||||
}
|
||||
break;
|
||||
case kBET_CondAddBuff:
|
||||
{
|
||||
if (!IsValidCondBuff(meta->_int_param1)) {
|
||||
A8_ABORT();
|
||||
}
|
||||
list_add_tail(&cond_entry, &owner->cond_buffs_[meta->_int_param1]);
|
||||
}
|
||||
break;
|
||||
case kBET_AddInventory:
|
||||
{
|
||||
for (int slot : meta->_param2_int_list) {
|
||||
if (IsValidSlotId(slot)) {
|
||||
owner->buff_inventory_[slot].num += meta->_int_param1;
|
||||
}
|
||||
}
|
||||
if (owner->IsHuman()) {
|
||||
owner->AsHuman()->RecalcVolume();
|
||||
}
|
||||
owner->MarkSyncActivePlayer(__FILE__, __LINE__, __func__);
|
||||
}
|
||||
break;
|
||||
case kBET_AddCarBuff:
|
||||
{
|
||||
if (owner->IsHuman() && owner->AsHuman()->GetCar()) {
|
||||
owner->AsHuman()->GetCar()->TryAddBuff(owner, meta->_int_param1);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case kBET_RemoveCarBuff:
|
||||
{
|
||||
if (owner->IsHuman() && owner->AsHuman()->GetCar()) {
|
||||
owner->AsHuman()->GetCar()->RemoveBuffById(meta->_int_param1);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case kBET_UseSkill:
|
||||
{
|
||||
Skill* skill = owner->GetSkill(meta->_int_param1);
|
||||
if (skill) {
|
||||
++skill->force_use_times;
|
||||
Position target_pos = owner->GetPos();
|
||||
owner->DoSkill(
|
||||
skill->meta->skill_id(),
|
||||
owner->GetUniId(),
|
||||
owner->GetAttackDir(),
|
||||
0,
|
||||
owner->target_pos
|
||||
);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case kBET_CamouflageAddition:
|
||||
{
|
||||
Buff* camouflage_buff = owner->GetBuffByEffectId(kBET_Camouflage);
|
||||
if (camouflage_buff && !camouflage_buff->remover_timer.expired() && meta->_int_param1 > 0) {
|
||||
int remain_time = owner->room->xtimer.GetRemainTime(camouflage_buff->remover_timer) * FRAME_RATE_MS;
|
||||
remain_time += meta->_int_param1;
|
||||
owner->room->xtimer.ModifyTime(camouflage_buff->remover_timer, remain_time / FRAME_RATE_MS);
|
||||
}
|
||||
if (meta->_int_param2 != 0) {
|
||||
++owner->camouflage_move_addition_;
|
||||
}
|
||||
if (meta->_int_param3 != 0) {
|
||||
++owner->camouflage_aiming_addition_;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case kBET_AutoShot:
|
||||
{
|
||||
ProcAutoShot();
|
||||
}
|
||||
break;
|
||||
case kBET_BeatBack:
|
||||
{
|
||||
ProcBeatBack();
|
||||
}
|
||||
break;
|
||||
case kBET_Disperse:
|
||||
{
|
||||
ProcDisperse();
|
||||
}
|
||||
break;
|
||||
case kBET_PeaceMode:
|
||||
{
|
||||
}
|
||||
break;
|
||||
case kBET_Dive:
|
||||
{
|
||||
ProcDive();
|
||||
}
|
||||
break;
|
||||
case kBET_InWater:
|
||||
{
|
||||
ProcInWater();
|
||||
}
|
||||
break;
|
||||
case kBET_Reverse:
|
||||
{
|
||||
ProcReserve();
|
||||
}
|
||||
break;
|
||||
case kBET_ReverseMove:
|
||||
{
|
||||
ProcReserveMove();
|
||||
}
|
||||
break;
|
||||
case kBET_MachineGun:
|
||||
{
|
||||
ProcMachineGun();
|
||||
}
|
||||
break;
|
||||
case kBET_HoldShield:
|
||||
{
|
||||
ProcHoldShield();
|
||||
}
|
||||
break;
|
||||
case kBET_CallFunc:
|
||||
{
|
||||
ProcCallFunc();
|
||||
}
|
||||
break;
|
||||
default:
|
||||
{
|
||||
}
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
void Buff::Deactivate()
|
||||
{
|
||||
#if 0
|
||||
switch (meta->buff_effect()) {
|
||||
case kBET_OnceChgAttr:
|
||||
{
|
||||
ProcRemoveOnceChgAttr();
|
||||
}
|
||||
break;
|
||||
case kBET_Sprint:
|
||||
{
|
||||
}
|
||||
break;
|
||||
case kBET_HoldShield:
|
||||
{
|
||||
ProcRemoveHoldShield();
|
||||
}
|
||||
break;
|
||||
case kBET_Hide:
|
||||
{
|
||||
ProcRemoveHide();
|
||||
}
|
||||
break;
|
||||
case kBET_BePull:
|
||||
{
|
||||
int i = 0;
|
||||
}
|
||||
break;
|
||||
case kBET_Rescuer:
|
||||
{
|
||||
ProcRemoveRescuer();
|
||||
}
|
||||
break;
|
||||
case kBET_Immune:
|
||||
{
|
||||
ProcRemoveImmune();
|
||||
}
|
||||
break;
|
||||
case kBET_CallFunc:
|
||||
{
|
||||
ProcRemoveCallFunc();
|
||||
}
|
||||
break;
|
||||
case kBET_Jump:
|
||||
{
|
||||
//跳伞结束
|
||||
owner->room->xtimer.SetTimeoutEx
|
||||
(1,
|
||||
[this] (int event, const a8::Args* args)
|
||||
{
|
||||
if (owner->IsHuman()) {
|
||||
owner->AsHuman()->OnLand();
|
||||
}
|
||||
},
|
||||
&xtimer_attacher);
|
||||
}
|
||||
break;
|
||||
case kBET_Become:
|
||||
{
|
||||
ProcRemoveBecome();
|
||||
}
|
||||
break;
|
||||
case kBET_Driver:
|
||||
{
|
||||
ProcRemoveDriver();
|
||||
}
|
||||
break;
|
||||
case kBET_Passenger:
|
||||
{
|
||||
ProcRemovePassenger();
|
||||
}
|
||||
break;
|
||||
case kBET_Dive:
|
||||
{
|
||||
ProcRemoveDive();
|
||||
}
|
||||
break;
|
||||
case kBET_InWater:
|
||||
{
|
||||
ProcRemoveInWater();
|
||||
}
|
||||
break;
|
||||
case kBET_AddInventory:
|
||||
{
|
||||
if (owner->IsHuman()) {
|
||||
for (int slot : meta->_param2_int_list) {
|
||||
if (IsValidSlotId(slot)) {
|
||||
owner->AsHuman()->buff_inventory_[slot].num -= meta->_int_param1;
|
||||
owner->AsHuman()->buff_inventory_[slot].num =
|
||||
std::max(0, owner->AsHuman()->buff_inventory_[slot].num);
|
||||
}
|
||||
}
|
||||
owner->AsHuman()->RecalcVolume();
|
||||
owner->AsHuman()->MarkSyncActivePlayer(__FILE__, __LINE__, __func__);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case kBET_CamouflageAddition:
|
||||
{
|
||||
if (owner->AsHuman()) {
|
||||
if (meta->_int_param2 != 0) {
|
||||
--owner->AsHuman()->camouflage_move_addition_;
|
||||
}
|
||||
if (meta->_int_param3 != 0) {
|
||||
--owner->AsHuman()->camouflage_aiming_addition_;
|
||||
}
|
||||
owner->AsHuman()->camouflage_move_addition_ = std::max(owner->AsHuman()->camouflage_move_addition_, 0);
|
||||
owner->AsHuman()->camouflage_aiming_addition_ = std::max(owner->AsHuman()->camouflage_aiming_addition_, 0);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case kBET_MachineGun:
|
||||
{
|
||||
ProcRemoveMachineGun();
|
||||
};
|
||||
default:
|
||||
{
|
||||
}
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
15
server/gameserver/buff/add_car.cc
Normal file
15
server/gameserver/buff/add_car.cc
Normal file
@ -0,0 +1,15 @@
|
||||
#include "precompile.h"
|
||||
|
||||
#include "buff/add_car.h"
|
||||
|
||||
void AddCarBuff::Activate()
|
||||
{
|
||||
if (owner->IsHuman() && owner->AsHuman()->GetCar()) {
|
||||
owner->AsHuman()->GetCar()->TryAddBuff(owner, meta->_int_param1);
|
||||
}
|
||||
}
|
||||
|
||||
void AddCarBuff::Deactivate()
|
||||
{
|
||||
|
||||
}
|
12
server/gameserver/buff/add_car.h
Normal file
12
server/gameserver/buff/add_car.h
Normal file
@ -0,0 +1,12 @@
|
||||
#pragma once
|
||||
|
||||
#include "buff.h"
|
||||
|
||||
class AddCarBuff : Buff
|
||||
{
|
||||
public:
|
||||
|
||||
virtual void Activate() override;
|
||||
virtual void Deactivate() override;
|
||||
|
||||
};
|
31
server/gameserver/buff/add_inventory.cc
Normal file
31
server/gameserver/buff/add_inventory.cc
Normal file
@ -0,0 +1,31 @@
|
||||
#include "precompile.h"
|
||||
|
||||
#include "buff/add_inventory.h"
|
||||
|
||||
void AddInventoryBuff::Activate()
|
||||
{
|
||||
for (int slot : meta->_param2_int_list) {
|
||||
if (IsValidSlotId(slot)) {
|
||||
owner->buff_inventory_[slot].num += meta->_int_param1;
|
||||
}
|
||||
}
|
||||
if (owner->IsHuman()) {
|
||||
owner->AsHuman()->RecalcVolume();
|
||||
}
|
||||
owner->MarkSyncActivePlayer(__FILE__, __LINE__, __func__);
|
||||
}
|
||||
|
||||
void AddInventoryBuff::Deactivate()
|
||||
{
|
||||
if (owner->IsHuman()) {
|
||||
for (int slot : meta->_param2_int_list) {
|
||||
if (IsValidSlotId(slot)) {
|
||||
owner->AsHuman()->buff_inventory_[slot].num -= meta->_int_param1;
|
||||
owner->AsHuman()->buff_inventory_[slot].num =
|
||||
std::max(0, owner->AsHuman()->buff_inventory_[slot].num);
|
||||
}
|
||||
}
|
||||
owner->AsHuman()->RecalcVolume();
|
||||
owner->AsHuman()->MarkSyncActivePlayer(__FILE__, __LINE__, __func__);
|
||||
}
|
||||
}
|
12
server/gameserver/buff/add_inventory.h
Normal file
12
server/gameserver/buff/add_inventory.h
Normal file
@ -0,0 +1,12 @@
|
||||
#pragma once
|
||||
|
||||
#include "buff.h"
|
||||
|
||||
class AddInventoryBuff : Buff
|
||||
{
|
||||
public:
|
||||
|
||||
virtual void Activate() override;
|
||||
virtual void Deactivate() override;
|
||||
|
||||
};
|
46
server/gameserver/buff/bepull.cc
Normal file
46
server/gameserver/buff/bepull.cc
Normal file
@ -0,0 +1,46 @@
|
||||
#include "precompile.h"
|
||||
|
||||
#include "buff/bepull.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->_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);
|
||||
// 999
|
||||
#if 1
|
||||
#else
|
||||
owner->target_pos = owner->GetPos() + owner->GetMoveDir() * (target_distance - meta->param3);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
} else {
|
||||
GlmHelper::Normalize(caster_.Get()->skill_dir_);
|
||||
// 999
|
||||
#if 1
|
||||
#else
|
||||
target_pos = caster->GetPos() + caster->skill_dir_ * caster->skill_distance_;
|
||||
#endif
|
||||
glm::vec3 move_dir = owner->GetPos().CalcDir(owner->target_pos);
|
||||
GlmHelper::Normalize(move_dir);
|
||||
owner->SetMoveDir(move_dir);
|
||||
}
|
||||
}
|
||||
|
||||
void BePullBuff::Deactivate()
|
||||
{
|
||||
|
||||
}
|
12
server/gameserver/buff/bepull.h
Normal file
12
server/gameserver/buff/bepull.h
Normal file
@ -0,0 +1,12 @@
|
||||
#pragma once
|
||||
|
||||
#include "buff.h"
|
||||
|
||||
class BePullBuff : Buff
|
||||
{
|
||||
public:
|
||||
|
||||
virtual void Activate() override;
|
||||
virtual void Deactivate() override;
|
||||
|
||||
};
|
25
server/gameserver/buff/camouflage.cc
Normal file
25
server/gameserver/buff/camouflage.cc
Normal file
@ -0,0 +1,25 @@
|
||||
#include "precompile.h"
|
||||
|
||||
#include "buff/camouflage.h"
|
||||
|
||||
#include "creature.h"
|
||||
#include "human.h"
|
||||
|
||||
void CamouflageBuff::Activate()
|
||||
{
|
||||
if (owner->aiming) {
|
||||
owner->aiming = false;
|
||||
}
|
||||
if (owner->action_type != AT_None) {
|
||||
owner->CancelAction();
|
||||
}
|
||||
if (owner->IsHuman()) {
|
||||
++owner->AsHuman()->stats.use_camouflage_times;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void CamouflageBuff::Deactivate()
|
||||
{
|
||||
|
||||
}
|
12
server/gameserver/buff/camouflage.h
Normal file
12
server/gameserver/buff/camouflage.h
Normal file
@ -0,0 +1,12 @@
|
||||
#pragma once
|
||||
|
||||
#include "buff.h"
|
||||
|
||||
class CamouflageBuff : Buff
|
||||
{
|
||||
public:
|
||||
|
||||
virtual void Activate() override;
|
||||
virtual void Deactivate() override;
|
||||
|
||||
};
|
33
server/gameserver/buff/camouflage_addition.cc
Normal file
33
server/gameserver/buff/camouflage_addition.cc
Normal file
@ -0,0 +1,33 @@
|
||||
#include "precompile.h"
|
||||
|
||||
#include "buff/camouflage_addition.h"
|
||||
|
||||
void CamouflageAdditionBuff::Activate()
|
||||
{
|
||||
Buff* camouflage_buff = owner->GetBuffByEffectId(kBET_Camouflage);
|
||||
if (camouflage_buff && !camouflage_buff->remover_timer.expired() && meta->_int_param1 > 0) {
|
||||
int remain_time = owner->room->xtimer.GetRemainTime(camouflage_buff->remover_timer) * FRAME_RATE_MS;
|
||||
remain_time += meta->_int_param1;
|
||||
owner->room->xtimer.ModifyTime(camouflage_buff->remover_timer, remain_time / FRAME_RATE_MS);
|
||||
}
|
||||
if (meta->_int_param2 != 0) {
|
||||
++owner->camouflage_move_addition_;
|
||||
}
|
||||
if (meta->_int_param3 != 0) {
|
||||
++owner->camouflage_aiming_addition_;
|
||||
}
|
||||
}
|
||||
|
||||
void CamouflageAdditionBuff::Deactivate()
|
||||
{
|
||||
if (owner->AsHuman()) {
|
||||
if (meta->_int_param2 != 0) {
|
||||
--owner->AsHuman()->camouflage_move_addition_;
|
||||
}
|
||||
if (meta->_int_param3 != 0) {
|
||||
--owner->AsHuman()->camouflage_aiming_addition_;
|
||||
}
|
||||
owner->AsHuman()->camouflage_move_addition_ = std::max(owner->AsHuman()->camouflage_move_addition_, 0);
|
||||
owner->AsHuman()->camouflage_aiming_addition_ = std::max(owner->AsHuman()->camouflage_aiming_addition_, 0);
|
||||
}
|
||||
}
|
12
server/gameserver/buff/camouflage_addition.h
Normal file
12
server/gameserver/buff/camouflage_addition.h
Normal file
@ -0,0 +1,12 @@
|
||||
#pragma once
|
||||
|
||||
#include "buff.h"
|
||||
|
||||
class CamouflageAdditionBuff : Buff
|
||||
{
|
||||
public:
|
||||
|
||||
virtual void Activate() override;
|
||||
virtual void Deactivate() override;
|
||||
|
||||
};
|
16
server/gameserver/buff/cond_add.cc
Normal file
16
server/gameserver/buff/cond_add.cc
Normal file
@ -0,0 +1,16 @@
|
||||
#include "precompile.h"
|
||||
|
||||
#include "buff/cond_add.h"
|
||||
|
||||
void CondAddBuff::Activate()
|
||||
{
|
||||
if (!IsValidCondBuff(meta->_int_param1)) {
|
||||
A8_ABORT();
|
||||
}
|
||||
list_add_tail(&cond_entry, &owner->cond_buffs_[meta->_int_param1]);
|
||||
}
|
||||
|
||||
void CondAddBuff::Deactivate()
|
||||
{
|
||||
|
||||
}
|
12
server/gameserver/buff/cond_add.h
Normal file
12
server/gameserver/buff/cond_add.h
Normal file
@ -0,0 +1,12 @@
|
||||
#pragma once
|
||||
|
||||
#include "buff.h"
|
||||
|
||||
class CondAddBuff : Buff
|
||||
{
|
||||
public:
|
||||
|
||||
virtual void Activate() override;
|
||||
virtual void Deactivate() override;
|
||||
|
||||
};
|
15
server/gameserver/buff/flashmove.cc
Normal file
15
server/gameserver/buff/flashmove.cc
Normal file
@ -0,0 +1,15 @@
|
||||
#include "precompile.h"
|
||||
|
||||
#include "buff/flashmove.h"
|
||||
|
||||
void FlashMoveBuff::Activate()
|
||||
{
|
||||
if (meta->_int_param1 == 0) {
|
||||
owner->SpecDirMove(owner->skill_dir_, std::max(owner->skill_distance_, 300.0f));
|
||||
}
|
||||
}
|
||||
|
||||
void FlashMoveBuff::Deactivate()
|
||||
{
|
||||
|
||||
}
|
12
server/gameserver/buff/flashmove.h
Normal file
12
server/gameserver/buff/flashmove.h
Normal file
@ -0,0 +1,12 @@
|
||||
#pragma once
|
||||
|
||||
#include "buff.h"
|
||||
|
||||
class FlashMoveBuff : Buff
|
||||
{
|
||||
public:
|
||||
|
||||
virtual void Activate() override;
|
||||
virtual void Deactivate() override;
|
||||
|
||||
};
|
22
server/gameserver/buff/jump.cc
Normal file
22
server/gameserver/buff/jump.cc
Normal file
@ -0,0 +1,22 @@
|
||||
#include "precompile.h"
|
||||
|
||||
#include "buff/jump.h"
|
||||
|
||||
void JumpBuff::Activate()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void JumpBuff::Deactivate()
|
||||
{
|
||||
//跳伞结束
|
||||
owner->room->xtimer.SetTimeoutEx
|
||||
(1,
|
||||
[this] (int event, const a8::Args* args)
|
||||
{
|
||||
if (owner->IsHuman()) {
|
||||
owner->AsHuman()->OnLand();
|
||||
}
|
||||
},
|
||||
&xtimer_attacher);
|
||||
}
|
12
server/gameserver/buff/jump.h
Normal file
12
server/gameserver/buff/jump.h
Normal file
@ -0,0 +1,12 @@
|
||||
#pragma once
|
||||
|
||||
#include "buff.h"
|
||||
|
||||
class JumpBuff : Buff
|
||||
{
|
||||
public:
|
||||
|
||||
virtual void Activate() override;
|
||||
virtual void Deactivate() override;
|
||||
|
||||
};
|
36
server/gameserver/buff/jumpto.cc
Normal file
36
server/gameserver/buff/jumpto.cc
Normal file
@ -0,0 +1,36 @@
|
||||
#include "precompile.h"
|
||||
|
||||
#include "buff/jumpto.h"
|
||||
|
||||
void JumpToBuff::Activate()
|
||||
{
|
||||
Entity* entity = owner->room->GetEntityByUniId(owner->skill_target_id_);
|
||||
if (entity) {
|
||||
float target_distance = entity->GetPos().Distance2D2(owner->GetPos());
|
||||
if (target_distance <= 0.000001f) {
|
||||
owner->SetPos(entity->GetPos());
|
||||
owner->skill_target_pos_ = entity->GetPos();
|
||||
} else {
|
||||
if (target_distance <= meta->_param3) {
|
||||
owner->SetPos(entity->GetPos());
|
||||
owner->skill_target_pos_ = entity->GetPos();
|
||||
} else {
|
||||
glm::vec3 move_dir = owner->GetPos().CalcDir(entity->GetPos());
|
||||
GlmHelper::Normalize(move_dir);
|
||||
owner->SetMoveDir(move_dir);
|
||||
owner->skill_dir_ = owner->GetMoveDir();
|
||||
// 999
|
||||
#if 1
|
||||
#else
|
||||
owner->skill_target_pos_ = owner->GetPos() + owner->GetMoveDir() * (owner->target_distance - meta->param3);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
}
|
||||
owner->target_pos = owner->skill_target_pos_;
|
||||
}
|
||||
|
||||
void JumpToBuff::Deactivate()
|
||||
{
|
||||
|
||||
}
|
12
server/gameserver/buff/jumpto.h
Normal file
12
server/gameserver/buff/jumpto.h
Normal file
@ -0,0 +1,12 @@
|
||||
#pragma once
|
||||
|
||||
#include "buff.h"
|
||||
|
||||
class JumpToBuff : Buff
|
||||
{
|
||||
public:
|
||||
|
||||
virtual void Activate() override;
|
||||
virtual void Deactivate() override;
|
||||
|
||||
};
|
13
server/gameserver/buff/pull.cc
Normal file
13
server/gameserver/buff/pull.cc
Normal file
@ -0,0 +1,13 @@
|
||||
#include "precompile.h"
|
||||
|
||||
#include "buff/pull.h"
|
||||
|
||||
void PullBuff::Activate()
|
||||
{
|
||||
InternalTimerAddBuff();
|
||||
}
|
||||
|
||||
void PullBuff::Deactivate()
|
||||
{
|
||||
|
||||
}
|
12
server/gameserver/buff/pull.h
Normal file
12
server/gameserver/buff/pull.h
Normal file
@ -0,0 +1,12 @@
|
||||
#pragma once
|
||||
|
||||
#include "buff.h"
|
||||
|
||||
class PullBuff : Buff
|
||||
{
|
||||
public:
|
||||
|
||||
virtual void Activate() override;
|
||||
virtual void Deactivate() override;
|
||||
|
||||
};
|
15
server/gameserver/buff/remove_car.cc
Normal file
15
server/gameserver/buff/remove_car.cc
Normal file
@ -0,0 +1,15 @@
|
||||
#include "precompile.h"
|
||||
|
||||
#include "buff/remove_car.h"
|
||||
|
||||
void removeCarBuff::Activate()
|
||||
{
|
||||
if (owner->IsHuman() && owner->AsHuman()->GetCar()) {
|
||||
owner->AsHuman()->GetCar()->RemoveBuffById(meta->_int_param1);
|
||||
}
|
||||
}
|
||||
|
||||
void RemoveCarBuff::Deactivate()
|
||||
{
|
||||
|
||||
}
|
12
server/gameserver/buff/remove_car.h
Normal file
12
server/gameserver/buff/remove_car.h
Normal file
@ -0,0 +1,12 @@
|
||||
#pragma once
|
||||
|
||||
#include "buff.h"
|
||||
|
||||
class RemoveCarBuff : Buff
|
||||
{
|
||||
public:
|
||||
|
||||
virtual void Activate() override;
|
||||
virtual void Deactivate() override;
|
||||
|
||||
};
|
15
server/gameserver/buff/summon_obstacle.cc
Normal file
15
server/gameserver/buff/summon_obstacle.cc
Normal file
@ -0,0 +1,15 @@
|
||||
#include "precompile.h"
|
||||
|
||||
#include "buff/summon_obstacle.h"
|
||||
|
||||
void SummonObstacleBuff::Activate()
|
||||
{
|
||||
if (!owner->dead || meta->dead_valid() != 0) {
|
||||
owner->SummonObstacle(this, meta->_param1, owner->context_pos);
|
||||
}
|
||||
}
|
||||
|
||||
void SummonObstacleBuff::Deactivate()
|
||||
{
|
||||
|
||||
}
|
12
server/gameserver/buff/summon_obstacle.h
Normal file
12
server/gameserver/buff/summon_obstacle.h
Normal file
@ -0,0 +1,12 @@
|
||||
#pragma once
|
||||
|
||||
#include "buff.h"
|
||||
|
||||
class SummonObstacleBuff : Buff
|
||||
{
|
||||
public:
|
||||
|
||||
virtual void Activate() override;
|
||||
virtual void Deactivate() override;
|
||||
|
||||
};
|
24
server/gameserver/buff/use_skill.cc
Normal file
24
server/gameserver/buff/use_skill.cc
Normal file
@ -0,0 +1,24 @@
|
||||
#include "precompile.h"
|
||||
|
||||
#include "buff/use_skill.h"
|
||||
|
||||
void UseSkillBuff::Activate()
|
||||
{
|
||||
Skill* skill = owner->GetSkill(meta->_int_param1);
|
||||
if (skill) {
|
||||
++skill->force_use_times;
|
||||
Position target_pos = owner->GetPos();
|
||||
owner->DoSkill(
|
||||
skill->meta->skill_id(),
|
||||
owner->GetUniId(),
|
||||
owner->GetAttackDir(),
|
||||
0,
|
||||
owner->target_pos
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
void UseSkillBuff::Deactivate()
|
||||
{
|
||||
|
||||
}
|
12
server/gameserver/buff/use_skill.h
Normal file
12
server/gameserver/buff/use_skill.h
Normal file
@ -0,0 +1,12 @@
|
||||
#pragma once
|
||||
|
||||
#include "buff.h"
|
||||
|
||||
class UseSkillBuff : Buff
|
||||
{
|
||||
public:
|
||||
|
||||
virtual void Activate() override;
|
||||
virtual void Deactivate() override;
|
||||
|
||||
};
|
Loading…
x
Reference in New Issue
Block a user