1
This commit is contained in:
parent
dd8d08fbff
commit
8a17ecec4b
@ -491,6 +491,9 @@ float BattleDataContext::CalcDmg(Creature* target, Bullet* bullet)
|
||||
{
|
||||
float total_atk = GetTotalAtk(bullet);
|
||||
float normal_dmg = total_atk * (1 - target->GetBattleContext()->GetDef() / 1000);
|
||||
if (bullet->strengthen_wall) {
|
||||
normal_dmg *= 1.2f;
|
||||
}
|
||||
float crit = IsCrit(bullet) ? GetCritRate(bullet) : 0;
|
||||
float dodge = IsDodge(bullet) ? GetDodgeRuduce(bullet) : 0;
|
||||
float finaly_dmg = normal_dmg * (1.0f + crit + dodge);
|
||||
|
@ -85,6 +85,7 @@ void Bullet::OnHit(std::set<Entity*>& objects)
|
||||
} else {
|
||||
for (auto& target : objects) {
|
||||
bool old_is_dead = target->IsDead(room);
|
||||
TriggerHitBuff(target);
|
||||
target->OnBulletHit(this);
|
||||
if (target->IsDead(room) && !old_is_dead) {
|
||||
OnKillTarget(target);
|
||||
@ -837,3 +838,20 @@ void Bullet::ForceRemove()
|
||||
later_removed_ = true;
|
||||
}
|
||||
}
|
||||
|
||||
void Bullet::TriggerHitBuff(Entity* e)
|
||||
{
|
||||
if (!e->IsDead(room) && e->IsCreature(room)) {
|
||||
Creature* c = (Creature*)e;
|
||||
for (int buff_id : gun_meta->hit_buff_list) {
|
||||
MetaData::Buff* buff_meta = MetaMgr::Instance()->GetBuff(buff_id);
|
||||
if (buff_meta) {
|
||||
c->AddBuff(
|
||||
sender.Get(),
|
||||
buff_meta,
|
||||
skill_meta
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -33,6 +33,7 @@ class Bullet : public MoveableEntity
|
||||
float fly_distance = 0.0f;
|
||||
MovementComponent* movement = nullptr;
|
||||
int trace_target_id = 0;
|
||||
int strengthen_wall = 0;
|
||||
|
||||
virtual ~Bullet() override;
|
||||
virtual void Initialize() override;
|
||||
@ -45,6 +46,7 @@ class Bullet : public MoveableEntity
|
||||
bool IsPreBattleBullet();
|
||||
void ForceRemove();
|
||||
void OnHit(std::set<Entity*>& objects);
|
||||
void TriggerHitBuff(Entity* e);
|
||||
|
||||
protected:
|
||||
Bullet();
|
||||
|
@ -493,7 +493,7 @@ namespace MetaData
|
||||
std::vector<std::string> strings;
|
||||
a8::Split(i->hit_buff(), strings, '|');
|
||||
for (auto& str : strings) {
|
||||
hit_buff_list.push(a8::XValue(str));
|
||||
hit_buff_list.push_back(a8::XValue(str));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -109,7 +109,7 @@ namespace MetaData
|
||||
std::vector<std::tuple<int, int, int>> power_charge;
|
||||
MetaData::Buff* buff_meta = nullptr;
|
||||
std::vector<std::tuple<float, int>> car_buff_list;
|
||||
std::vector<int>> hit_buff_list;
|
||||
std::vector<int> hit_buff_list;
|
||||
int car_active_buff_id = 0;
|
||||
int car_deactive_buff_id = 0;
|
||||
long long special_damage_type = 0;
|
||||
|
@ -1153,10 +1153,13 @@ void Player::_CMRequestBulletDmg(f8::MsgHdr& hdr, const cs::CMRequestBulletDmg&
|
||||
}
|
||||
}
|
||||
if (!shield) {
|
||||
c->DecHP(dmg,
|
||||
GetUniId(),
|
||||
GetName(),
|
||||
std::get<1>(tuple));
|
||||
bullet->strengthen_wall = msg.strengthen_wall_uniid() ? 1 : 0;
|
||||
std::set<Entity*> objects;
|
||||
objects.insert(c);
|
||||
bullet->OnHit(objects);
|
||||
#if 0
|
||||
c->OnBulletHit(bullet);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
#ifdef DEBUG
|
||||
|
Loading…
x
Reference in New Issue
Block a user