1
This commit is contained in:
parent
58a28ac44c
commit
ac0bd31e99
62
server/gameserver/compose.cc
Normal file
62
server/gameserver/compose.cc
Normal file
@ -0,0 +1,62 @@
|
|||||||
|
#include "precompile.h"
|
||||||
|
|
||||||
|
#include "compose.h"
|
||||||
|
#include "creature.h"
|
||||||
|
#include "netdata.h"
|
||||||
|
#include "trigger.h"
|
||||||
|
#include "room.h"
|
||||||
|
#include "effect.h"
|
||||||
|
#include "weapon.h"
|
||||||
|
#include "human.h"
|
||||||
|
|
||||||
|
#include "mt/GraspBuff.h"
|
||||||
|
#include "mt/Grasp.h"
|
||||||
|
#include "mt/Hero.h"
|
||||||
|
#include "mt/Equip.h"
|
||||||
|
|
||||||
|
Compose::Compose(Creature* owner)
|
||||||
|
{
|
||||||
|
owner_ = owner;
|
||||||
|
}
|
||||||
|
|
||||||
|
Compose::~Compose()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void Compose::Init()
|
||||||
|
{
|
||||||
|
if (owner_->IsPlayer()) {
|
||||||
|
TakeOnWeapon(owner_->GetCurrWeapon());
|
||||||
|
owner_->GetTrigger()->AddListener
|
||||||
|
(
|
||||||
|
kTakeonWeaponEvent,
|
||||||
|
[this] (const a8::Args& args) mutable
|
||||||
|
{
|
||||||
|
Weapon* old_weapon = args.Get<Weapon*>(0);
|
||||||
|
Weapon* new_weapon = args.Get<Weapon*>(1);
|
||||||
|
TakeOnWeapon(new_weapon);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void Compose::Clear()
|
||||||
|
{
|
||||||
|
for (int buff_uniid : hold_buffs_) {
|
||||||
|
owner_->RemoveBuffByUniId(buff_uniid);
|
||||||
|
}
|
||||||
|
hold_buffs_.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
void Compose::TakeOnWeapon(Weapon* weapon)
|
||||||
|
{
|
||||||
|
std::set<int>* buffs = mt::Grasp::GetBuffs(owner_->AsHuman()->meta->id(),
|
||||||
|
owner_->GetBattleContext()->GetHeroLevel(),
|
||||||
|
weapon->meta->id());
|
||||||
|
Clear();
|
||||||
|
if (buffs) {
|
||||||
|
for (int buff_id : *buffs) {
|
||||||
|
hold_buffs_.push_back(owner_->TryAddBuff(owner_, buff_id, nullptr));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
23
server/gameserver/compose.h
Normal file
23
server/gameserver/compose.h
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "trigger.h"
|
||||||
|
|
||||||
|
class Creature;
|
||||||
|
class Weapon;
|
||||||
|
class Compose
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
Compose(Creature* owner);
|
||||||
|
~Compose();
|
||||||
|
|
||||||
|
void Init();
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
void Clear();
|
||||||
|
void TakeOnWeapon(Weapon* weapon);
|
||||||
|
|
||||||
|
private:
|
||||||
|
Creature* owner_ = nullptr;
|
||||||
|
std::vector<int> hold_buffs_;
|
||||||
|
};
|
@ -29,6 +29,7 @@
|
|||||||
#include "stats.h"
|
#include "stats.h"
|
||||||
#include "team.h"
|
#include "team.h"
|
||||||
#include "bornpoint.h"
|
#include "bornpoint.h"
|
||||||
|
#include "compose.h"
|
||||||
|
|
||||||
#include "mt/Param.h"
|
#include "mt/Param.h"
|
||||||
#include "mt/Hero.h"
|
#include "mt/Hero.h"
|
||||||
@ -70,6 +71,7 @@ Creature::Creature():MoveableEntity()
|
|||||||
inventory_[IS_1XSCOPE].num = 1;
|
inventory_[IS_1XSCOPE].num = 1;
|
||||||
movement_ = std::make_shared<Movement>(this);
|
movement_ = std::make_shared<Movement>(this);
|
||||||
gun_grasp_ = std::make_shared<GunGrasp>(this);
|
gun_grasp_ = std::make_shared<GunGrasp>(this);
|
||||||
|
compose_ = std::make_shared<Compose>(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
Creature::~Creature()
|
Creature::~Creature()
|
||||||
|
@ -64,6 +64,7 @@ class DelayAddBuffHandle;
|
|||||||
class Movement;
|
class Movement;
|
||||||
class Player;
|
class Player;
|
||||||
class GunGrasp;
|
class GunGrasp;
|
||||||
|
class Compose;
|
||||||
class Android;
|
class Android;
|
||||||
class Creature : public MoveableEntity
|
class Creature : public MoveableEntity
|
||||||
{
|
{
|
||||||
@ -434,6 +435,7 @@ private:
|
|||||||
std::array<Inventory, IS_END> inventory_ = {};
|
std::array<Inventory, IS_END> inventory_ = {};
|
||||||
|
|
||||||
std::shared_ptr<GunGrasp> gun_grasp_;
|
std::shared_ptr<GunGrasp> gun_grasp_;
|
||||||
|
std::shared_ptr<Compose> compose_;
|
||||||
|
|
||||||
friend class Buff;
|
friend class Buff;
|
||||||
friend class AddInventoryBuff;
|
friend class AddInventoryBuff;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user