1
This commit is contained in:
parent
8888385186
commit
f46ba84fd7
@ -343,7 +343,6 @@ void Buff::ProcSputteringFunc(Bullet* bullet)
|
|||||||
|
|
||||||
void Buff::Activate()
|
void Buff::Activate()
|
||||||
{
|
{
|
||||||
#if 0
|
|
||||||
const mt::Buff* buff_meta = meta;
|
const mt::Buff* buff_meta = meta;
|
||||||
switch (meta->buff_effect()) {
|
switch (meta->buff_effect()) {
|
||||||
case kBET_ChgAttr:
|
case kBET_ChgAttr:
|
||||||
@ -370,470 +369,13 @@ void Buff::Activate()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
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:
|
default:
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Buff::Deactivate()
|
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