1
This commit is contained in:
parent
ea222aef76
commit
8364eeb6f6
@ -410,6 +410,15 @@ enum BuffOpt_e
|
||||
kBuffOptEnd
|
||||
};
|
||||
|
||||
enum HpOpt_e
|
||||
{
|
||||
kHpOptLeAbs = 0,
|
||||
kHpOptLeRate = 1,
|
||||
kHpOptGeAbs = 2,
|
||||
kHpOptGeRate = 3,
|
||||
kHpOptEnd
|
||||
};
|
||||
|
||||
const char* const PROJ_NAME_FMT = "game%d_gameserver";
|
||||
const char* const PROJ_ROOT_FMT = "/data/logs/%s";
|
||||
|
||||
|
@ -339,6 +339,35 @@ namespace MetaData
|
||||
return weapon_idx;
|
||||
}
|
||||
|
||||
bool Equip::Match(CondAddBuff_e cond, int val)
|
||||
{
|
||||
switch (cond) {
|
||||
case kCondBuffUpdateWeaponId:
|
||||
case kCondBuffShotWeaponId:
|
||||
{
|
||||
return val == i->id();
|
||||
}
|
||||
break;
|
||||
case kCondBuffUpdateWeaponSlot:
|
||||
case kCondBuffShotWeaponSlot:
|
||||
{
|
||||
return val == i->_inventory_slot();
|
||||
}
|
||||
break;
|
||||
case kCondBuffUpdateWeaponType:
|
||||
case kCondBuffShotWeaponType:
|
||||
{
|
||||
return val == i->equip_subtype();
|
||||
}
|
||||
break;
|
||||
default:
|
||||
{
|
||||
return false;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void EquipUpgrade::Init()
|
||||
{
|
||||
const int MAX_LV = 20;
|
||||
@ -905,6 +934,27 @@ namespace MetaData
|
||||
return immune_buffeffect.find(buff_effect) != immune_buffeffect.end();
|
||||
}
|
||||
|
||||
bool Buff::Match(CondAddBuff_e cond, int val)
|
||||
{
|
||||
switch (cond) {
|
||||
case kCondBuffUpdateBuffId:
|
||||
{
|
||||
return val == i->buff_id();
|
||||
}
|
||||
break;
|
||||
case kCondBuffUpdateBuffEffect:
|
||||
{
|
||||
return val == i->buff_effect();
|
||||
}
|
||||
break;
|
||||
default:
|
||||
{
|
||||
return false;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void Dress::Init()
|
||||
{
|
||||
for (int j = 0; j < i->max_lv(); ++j) {
|
||||
|
@ -88,6 +88,7 @@ namespace MetaData
|
||||
|
||||
void Init();
|
||||
int GetWeaponIdx();
|
||||
bool Match(CondAddBuff_e cond, int val);
|
||||
};
|
||||
|
||||
struct EquipUpgrade
|
||||
@ -196,6 +197,7 @@ namespace MetaData
|
||||
void Init();
|
||||
bool EffectCanStack();
|
||||
bool IsImmuneBuffEffect(int buff_effect);
|
||||
bool Match(CondAddBuff_e cond, int val);
|
||||
|
||||
float param1 = 0.0f;
|
||||
float param2 = 0.0f;
|
||||
|
@ -20,59 +20,23 @@ void Trigger::UnInit()
|
||||
void Trigger::TakeonWeapon(Weapon* old_weapon, Weapon* new_weapon)
|
||||
{
|
||||
MetaData::Equip* new_weapon_meta = new_weapon->meta;
|
||||
{
|
||||
for (int cond = kCondBuffUpdateWeaponId; cond <= kCondBuffUpdateWeaponType; cond++) {
|
||||
TraverseCondBuffs
|
||||
(kCondBuffUpdateWeaponId,
|
||||
[this, new_weapon_meta] (Buff* buff, bool& stop)
|
||||
(cond,
|
||||
[this, cond, new_weapon_meta] (Buff* buff, bool& stop)
|
||||
{
|
||||
if (buff->meta->int_param2 == new_weapon_meta->i->id()) {
|
||||
if (new_weapon_meta->Match((CondAddBuff_e)cond, buff->meta->int_param2)) {
|
||||
switch (buff->meta->int_param3) {
|
||||
case kWeaponOptTakeon:
|
||||
case kWeaponOptKeep:
|
||||
{
|
||||
AddBuff(buff->meta->int_param1, buff->meta->int_param4);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
{
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
{
|
||||
TraverseCondBuffs
|
||||
(kCondBuffUpdateWeaponSlot,
|
||||
[this, new_weapon_meta] (Buff* buff, bool& stop)
|
||||
{
|
||||
if (buff->meta->int_param2 == new_weapon_meta->i->_inventory_slot()) {
|
||||
switch (buff->meta->int_param3) {
|
||||
case kWeaponOptTakeon:
|
||||
case kWeaponOptKeep:
|
||||
{
|
||||
if (!owner_->GetBuffById(buff->meta->int_param4)) {
|
||||
AddBuff(buff->meta->int_param1, buff->meta->int_param4);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
{
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
{
|
||||
TraverseCondBuffs
|
||||
(kCondBuffUpdateWeaponType,
|
||||
[this, new_weapon_meta] (Buff* buff, bool& stop)
|
||||
{
|
||||
if (buff->meta->int_param2 == new_weapon_meta->i->equip_subtype()) {
|
||||
switch (buff->meta->int_param3) {
|
||||
case kWeaponOptTakeon:
|
||||
case kWeaponOptKeep:
|
||||
{
|
||||
AddBuff(buff->meta->int_param1, buff->meta->int_param4);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
@ -87,32 +51,12 @@ void Trigger::TakeonWeapon(Weapon* old_weapon, Weapon* new_weapon)
|
||||
|
||||
void Trigger::Shot(MetaData::Equip* weapon_meta)
|
||||
{
|
||||
{
|
||||
for (int cond = kCondBuffShotWeaponId; cond <= kCondBuffShotWeaponType; ++cond) {
|
||||
TraverseCondBuffs
|
||||
(kCondBuffShotWeaponId,
|
||||
[this, weapon_meta] (Buff* buff, bool& stop)
|
||||
(cond,
|
||||
[this, cond, weapon_meta] (Buff* buff, bool& stop)
|
||||
{
|
||||
if (buff->meta->int_param2 == weapon_meta->i->id()) {
|
||||
AddBuff(buff->meta->int_param1, buff->meta->int_param4);
|
||||
}
|
||||
});
|
||||
}
|
||||
{
|
||||
TraverseCondBuffs
|
||||
(kCondBuffShotWeaponSlot,
|
||||
[this, weapon_meta] (Buff* buff, bool& stop)
|
||||
{
|
||||
if (buff->meta->int_param2 == weapon_meta->i->_inventory_slot()) {
|
||||
AddBuff(buff->meta->int_param1, buff->meta->int_param4);
|
||||
}
|
||||
});
|
||||
}
|
||||
{
|
||||
TraverseCondBuffs
|
||||
(kCondBuffShotWeaponType,
|
||||
[this, weapon_meta] (Buff* buff, bool& stop)
|
||||
{
|
||||
if (buff->meta->int_param2 == weapon_meta->i->equip_subtype()) {
|
||||
if (weapon_meta->Match((CondAddBuff_e)cond, buff->meta->int_param2)) {
|
||||
AddBuff(buff->meta->int_param1, buff->meta->int_param4);
|
||||
}
|
||||
});
|
||||
@ -121,20 +65,18 @@ void Trigger::Shot(MetaData::Equip* weapon_meta)
|
||||
|
||||
void Trigger::Kill(Creature* target)
|
||||
{
|
||||
{
|
||||
++kill_num_;
|
||||
TraverseCondBuffs
|
||||
(kCondBuffKillTarget,
|
||||
[this] (Buff* buff, bool& stop)
|
||||
{
|
||||
if (buff->meta->int_param2 >= 1) {
|
||||
if (buff->meta->int_param2 == kill_num_) {
|
||||
AddBuff(buff->meta->int_param1, buff->meta->int_param4);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
void Trigger::UseItemAction(int slot_id)
|
||||
{
|
||||
{
|
||||
TraverseCondBuffs
|
||||
(kCondBuffEatDrug,
|
||||
@ -145,7 +87,6 @@ void Trigger::UseItemAction(int slot_id)
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
void Trigger::UseSkill(Skill* skill)
|
||||
{
|
||||
@ -161,7 +102,41 @@ void Trigger::UseSkill(Skill* skill)
|
||||
|
||||
void Trigger::HpChg(float old_hp, float new_hp)
|
||||
{
|
||||
|
||||
TraverseCondBuffs
|
||||
(kCondBuffHp,
|
||||
[this] (Buff* buff, bool& stop)
|
||||
{
|
||||
bool match = false;
|
||||
switch (buff->meta->int_param3) {
|
||||
case kHpOptLeAbs:
|
||||
{
|
||||
match = owner_->GetHP() < buff->meta->int_param2;
|
||||
}
|
||||
break;
|
||||
case kHpOptLeRate:
|
||||
{
|
||||
match = (owner_->GetHP() / owner_->GetMaxHP() * 100) < buff->meta->int_param2;
|
||||
}
|
||||
break;
|
||||
case kHpOptGeAbs:
|
||||
{
|
||||
match = owner_->GetHP() > buff->meta->int_param2;
|
||||
}
|
||||
break;
|
||||
case kHpOptGeRate:
|
||||
{
|
||||
match = (owner_->GetHP() / owner_->GetMaxHP() * 100) > buff->meta->int_param2;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
{
|
||||
}
|
||||
break;
|
||||
}
|
||||
if (match && !owner_->GetBuffById(buff->meta->int_param4)) {
|
||||
AddBuff(buff->meta->int_param1, buff->meta->int_param4);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
void Trigger::Die()
|
||||
@ -219,39 +194,24 @@ void Trigger::AddBuff(int cond, int buff_id)
|
||||
|
||||
void Trigger::ActiveBuff(MetaData::Buff* buff_meta)
|
||||
{
|
||||
{
|
||||
for (int cond = kCondBuffUpdateBuffId; cond <= kCondBuffUpdateBuffEffect; ++cond) {
|
||||
TraverseCondBuffs
|
||||
(kCondBuffUpdateBuffId,
|
||||
[this, buff_meta] (Buff* buff, bool& stop)
|
||||
(cond,
|
||||
[this, cond, buff_meta] (Buff* buff, bool& stop)
|
||||
{
|
||||
if (buff->meta->int_param2 == buff_meta->i->buff_id()) {
|
||||
if (buff_meta->Match((CondAddBuff_e)cond, buff->meta->int_param2)) {
|
||||
switch (buff->meta->int_param3) {
|
||||
case kBuffOptActive:
|
||||
case kBuffOptKeep:
|
||||
{
|
||||
AddBuff(buff->meta->int_param1, buff->meta->int_param4);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
{
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
{
|
||||
TraverseCondBuffs
|
||||
(kCondBuffUpdateBuffEffect,
|
||||
[this, buff_meta] (Buff* buff, bool& stop)
|
||||
{
|
||||
if (buff->meta->int_param2 == buff_meta->i->buff_effect()) {
|
||||
switch (buff->meta->int_param3) {
|
||||
case kBuffOptActive:
|
||||
case kBuffOptKeep:
|
||||
{
|
||||
if (!owner_->GetBuffById(buff->meta->int_param4)) {
|
||||
AddBuff(buff->meta->int_param1, buff->meta->int_param4);
|
||||
}
|
||||
}
|
||||
break;
|
||||
default:
|
||||
{
|
||||
@ -265,48 +225,19 @@ void Trigger::ActiveBuff(MetaData::Buff* buff_meta)
|
||||
|
||||
void Trigger::DeactiveBuff(MetaData::Buff* buff_meta)
|
||||
{
|
||||
{
|
||||
for (int cond = kCondBuffUpdateBuffId; cond <= kCondBuffUpdateBuffEffect; ++cond) {
|
||||
TraverseCondBuffs
|
||||
(kCondBuffUpdateBuffId,
|
||||
[this, buff_meta] (Buff* buff, bool& stop)
|
||||
(cond,
|
||||
[this, cond, buff_meta] (Buff* buff, bool& stop)
|
||||
{
|
||||
if (buff->meta->int_param2 == buff_meta->i->buff_id()) {
|
||||
if (buff_meta->Match((CondAddBuff_e)cond, buff->meta->int_param2)) {
|
||||
switch (buff->meta->int_param3) {
|
||||
case kBuffOptDeactive:
|
||||
{
|
||||
owner_->RemoveBuffById(buff->meta->int_param4);
|
||||
}
|
||||
break;
|
||||
case kBuffOptKeep:
|
||||
{
|
||||
AddBuff(buff->meta->int_param1, buff->meta->int_param4);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
{
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
{
|
||||
TraverseCondBuffs
|
||||
(kCondBuffUpdateBuffEffect,
|
||||
[this, buff_meta] (Buff* buff, bool& stop)
|
||||
{
|
||||
if (buff->meta->int_param2 == buff_meta->i->buff_effect()) {
|
||||
switch (buff->meta->int_param3) {
|
||||
case kBuffOptDeactive:
|
||||
{
|
||||
owner_->RemoveBuffById(buff->meta->int_param4);
|
||||
}
|
||||
break;
|
||||
case kBuffOptKeep:
|
||||
{
|
||||
AddBuff(buff->meta->int_param1, buff->meta->int_param4);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
{
|
||||
}
|
||||
|
@ -34,4 +34,5 @@ public:
|
||||
|
||||
private:
|
||||
Creature* owner_ = nullptr;
|
||||
int kill_num_ = 0;
|
||||
};
|
||||
|
Loading…
x
Reference in New Issue
Block a user