diff --git a/server/gameserver/buff.cc b/server/gameserver/buff.cc index 090607ae..3ab6fcff 100644 --- a/server/gameserver/buff.cc +++ b/server/gameserver/buff.cc @@ -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 } diff --git a/server/gameserver/buff/add_car.cc b/server/gameserver/buff/add_car.cc new file mode 100644 index 00000000..1b854189 --- /dev/null +++ b/server/gameserver/buff/add_car.cc @@ -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() +{ + +} diff --git a/server/gameserver/buff/add_car.h b/server/gameserver/buff/add_car.h new file mode 100644 index 00000000..6ca6c509 --- /dev/null +++ b/server/gameserver/buff/add_car.h @@ -0,0 +1,12 @@ +#pragma once + +#include "buff.h" + +class AddCarBuff : Buff +{ + public: + + virtual void Activate() override; + virtual void Deactivate() override; + +}; diff --git a/server/gameserver/buff/add_inventory.cc b/server/gameserver/buff/add_inventory.cc new file mode 100644 index 00000000..027eafc4 --- /dev/null +++ b/server/gameserver/buff/add_inventory.cc @@ -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__); + } +} diff --git a/server/gameserver/buff/add_inventory.h b/server/gameserver/buff/add_inventory.h new file mode 100644 index 00000000..7a9945b7 --- /dev/null +++ b/server/gameserver/buff/add_inventory.h @@ -0,0 +1,12 @@ +#pragma once + +#include "buff.h" + +class AddInventoryBuff : Buff +{ + public: + + virtual void Activate() override; + virtual void Deactivate() override; + +}; diff --git a/server/gameserver/buff/bepull.cc b/server/gameserver/buff/bepull.cc new file mode 100644 index 00000000..6d6c4a07 --- /dev/null +++ b/server/gameserver/buff/bepull.cc @@ -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() +{ + +} diff --git a/server/gameserver/buff/bepull.h b/server/gameserver/buff/bepull.h new file mode 100644 index 00000000..b2edc3f7 --- /dev/null +++ b/server/gameserver/buff/bepull.h @@ -0,0 +1,12 @@ +#pragma once + +#include "buff.h" + +class BePullBuff : Buff +{ + public: + + virtual void Activate() override; + virtual void Deactivate() override; + +}; diff --git a/server/gameserver/buff/camouflage.cc b/server/gameserver/buff/camouflage.cc new file mode 100644 index 00000000..995f1dd2 --- /dev/null +++ b/server/gameserver/buff/camouflage.cc @@ -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() +{ + +} diff --git a/server/gameserver/buff/camouflage.h b/server/gameserver/buff/camouflage.h new file mode 100644 index 00000000..6e4c1182 --- /dev/null +++ b/server/gameserver/buff/camouflage.h @@ -0,0 +1,12 @@ +#pragma once + +#include "buff.h" + +class CamouflageBuff : Buff +{ + public: + + virtual void Activate() override; + virtual void Deactivate() override; + +}; diff --git a/server/gameserver/buff/camouflage_addition.cc b/server/gameserver/buff/camouflage_addition.cc new file mode 100644 index 00000000..8dfb7229 --- /dev/null +++ b/server/gameserver/buff/camouflage_addition.cc @@ -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); + } +} diff --git a/server/gameserver/buff/camouflage_addition.h b/server/gameserver/buff/camouflage_addition.h new file mode 100644 index 00000000..df952e56 --- /dev/null +++ b/server/gameserver/buff/camouflage_addition.h @@ -0,0 +1,12 @@ +#pragma once + +#include "buff.h" + +class CamouflageAdditionBuff : Buff +{ + public: + + virtual void Activate() override; + virtual void Deactivate() override; + +}; diff --git a/server/gameserver/buff/cond_add.cc b/server/gameserver/buff/cond_add.cc new file mode 100644 index 00000000..020b9b3b --- /dev/null +++ b/server/gameserver/buff/cond_add.cc @@ -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() +{ + +} diff --git a/server/gameserver/buff/cond_add.h b/server/gameserver/buff/cond_add.h new file mode 100644 index 00000000..241f68bf --- /dev/null +++ b/server/gameserver/buff/cond_add.h @@ -0,0 +1,12 @@ +#pragma once + +#include "buff.h" + +class CondAddBuff : Buff +{ + public: + + virtual void Activate() override; + virtual void Deactivate() override; + +}; diff --git a/server/gameserver/buff/flashmove.cc b/server/gameserver/buff/flashmove.cc new file mode 100644 index 00000000..96d2cfa9 --- /dev/null +++ b/server/gameserver/buff/flashmove.cc @@ -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() +{ + +} diff --git a/server/gameserver/buff/flashmove.h b/server/gameserver/buff/flashmove.h new file mode 100644 index 00000000..026e9159 --- /dev/null +++ b/server/gameserver/buff/flashmove.h @@ -0,0 +1,12 @@ +#pragma once + +#include "buff.h" + +class FlashMoveBuff : Buff +{ + public: + + virtual void Activate() override; + virtual void Deactivate() override; + +}; diff --git a/server/gameserver/buff/jump.cc b/server/gameserver/buff/jump.cc new file mode 100644 index 00000000..7529ae3c --- /dev/null +++ b/server/gameserver/buff/jump.cc @@ -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); +} diff --git a/server/gameserver/buff/jump.h b/server/gameserver/buff/jump.h new file mode 100644 index 00000000..b97587d2 --- /dev/null +++ b/server/gameserver/buff/jump.h @@ -0,0 +1,12 @@ +#pragma once + +#include "buff.h" + +class JumpBuff : Buff +{ + public: + + virtual void Activate() override; + virtual void Deactivate() override; + +}; diff --git a/server/gameserver/buff/jumpto.cc b/server/gameserver/buff/jumpto.cc new file mode 100644 index 00000000..f0da0ce7 --- /dev/null +++ b/server/gameserver/buff/jumpto.cc @@ -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() +{ + +} diff --git a/server/gameserver/buff/jumpto.h b/server/gameserver/buff/jumpto.h new file mode 100644 index 00000000..1cef81c1 --- /dev/null +++ b/server/gameserver/buff/jumpto.h @@ -0,0 +1,12 @@ +#pragma once + +#include "buff.h" + +class JumpToBuff : Buff +{ + public: + + virtual void Activate() override; + virtual void Deactivate() override; + +}; diff --git a/server/gameserver/buff/pull.cc b/server/gameserver/buff/pull.cc new file mode 100644 index 00000000..80d8ea89 --- /dev/null +++ b/server/gameserver/buff/pull.cc @@ -0,0 +1,13 @@ +#include "precompile.h" + +#include "buff/pull.h" + +void PullBuff::Activate() +{ + InternalTimerAddBuff(); +} + +void PullBuff::Deactivate() +{ + +} diff --git a/server/gameserver/buff/pull.h b/server/gameserver/buff/pull.h new file mode 100644 index 00000000..924d56ac --- /dev/null +++ b/server/gameserver/buff/pull.h @@ -0,0 +1,12 @@ +#pragma once + +#include "buff.h" + +class PullBuff : Buff +{ + public: + + virtual void Activate() override; + virtual void Deactivate() override; + +}; diff --git a/server/gameserver/buff/remove_car.cc b/server/gameserver/buff/remove_car.cc new file mode 100644 index 00000000..e6be0f04 --- /dev/null +++ b/server/gameserver/buff/remove_car.cc @@ -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() +{ + +} diff --git a/server/gameserver/buff/remove_car.h b/server/gameserver/buff/remove_car.h new file mode 100644 index 00000000..f42dd83b --- /dev/null +++ b/server/gameserver/buff/remove_car.h @@ -0,0 +1,12 @@ +#pragma once + +#include "buff.h" + +class RemoveCarBuff : Buff +{ + public: + + virtual void Activate() override; + virtual void Deactivate() override; + +}; diff --git a/server/gameserver/buff/summon_obstacle.cc b/server/gameserver/buff/summon_obstacle.cc new file mode 100644 index 00000000..6bd927c0 --- /dev/null +++ b/server/gameserver/buff/summon_obstacle.cc @@ -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() +{ + +} diff --git a/server/gameserver/buff/summon_obstacle.h b/server/gameserver/buff/summon_obstacle.h new file mode 100644 index 00000000..034f357c --- /dev/null +++ b/server/gameserver/buff/summon_obstacle.h @@ -0,0 +1,12 @@ +#pragma once + +#include "buff.h" + +class SummonObstacleBuff : Buff +{ +public: + + virtual void Activate() override; + virtual void Deactivate() override; + +}; diff --git a/server/gameserver/buff/use_skill.cc b/server/gameserver/buff/use_skill.cc new file mode 100644 index 00000000..3776f4a3 --- /dev/null +++ b/server/gameserver/buff/use_skill.cc @@ -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() +{ + +} diff --git a/server/gameserver/buff/use_skill.h b/server/gameserver/buff/use_skill.h new file mode 100644 index 00000000..af047ded --- /dev/null +++ b/server/gameserver/buff/use_skill.h @@ -0,0 +1,12 @@ +#pragma once + +#include "buff.h" + +class UseSkillBuff : Buff +{ + public: + + virtual void Activate() override; + virtual void Deactivate() override; + +};