添加伤害数值
This commit is contained in:
parent
ae8aa140e3
commit
140548951d
@ -104,7 +104,7 @@ void Bullet::OnHit(std::set<Entity*>& objects)
|
||||
if (hum != player && !hum->dead &&
|
||||
(hum->team_id == 0 || master->team_id != hum->team_id)) {
|
||||
#endif
|
||||
float power = meta->i->atk() + master->ability.atk;
|
||||
float power = meta->i->atk() + master->ability.atk + master->GetSkillAtkAdd(skill_id);
|
||||
float def = hum->ability.def;
|
||||
float finaly_dmg = power * (1 - def/MetaMgr::Instance()->K);
|
||||
master->stats.damage_amount_out += finaly_dmg;
|
||||
@ -122,7 +122,7 @@ void Bullet::OnHit(std::set<Entity*>& objects)
|
||||
{
|
||||
Obstacle* obstacle = (Obstacle*)target;
|
||||
if (!obstacle->dead && obstacle->meta->i->attack_type() == 1) {
|
||||
float dmg = meta->i->atk() + master->ability.atk;
|
||||
float dmg = meta->i->atk() + master->ability.atk + master->GetSkillAtkAdd(skill_id);
|
||||
float def = 0;
|
||||
float finaly_dmg = dmg * (1 - def/MetaMgr::Instance()->K);
|
||||
#if 0
|
||||
@ -157,6 +157,7 @@ void Bullet::PostAttack()
|
||||
{
|
||||
Obstacle* obstacle = (Obstacle*)param.sender.GetUserData();
|
||||
Human* sender = (Human*)param.param1.GetUserData();
|
||||
int skill_id = param.param2;
|
||||
if (obstacle->room->IsGameOver()) {
|
||||
return;
|
||||
}
|
||||
@ -167,7 +168,8 @@ void Bullet::PostAttack()
|
||||
if (hum->pos.Distance(obstacle->pos) < obstacle->meta->i->damage_dia()) {
|
||||
hum->OnHit();
|
||||
if (!hum->HasBuffEffect(kBET_Invincible)) {
|
||||
float power = obstacle->meta->i->damage() + sender->ability.atk;
|
||||
float power = obstacle->meta->i->damage() + sender->ability.atk +
|
||||
sender->GetSkillAtkAdd( skill_id);
|
||||
float def = hum->ability.def;
|
||||
float finally_dmg = power * (1 - def/MetaMgr::Instance()->K);
|
||||
sender->stats.damage_amount_out += finally_dmg;
|
||||
@ -185,7 +187,8 @@ void Bullet::PostAttack()
|
||||
room->xtimer.AddDeadLineTimerAndAttach(kSERVER_FRAME_RATE,
|
||||
a8::XParams()
|
||||
.SetSender(obstacle)
|
||||
.SetParam1(master),
|
||||
.SetParam1(master)
|
||||
.SetParam2(skill_id),
|
||||
fire_func,
|
||||
&obstacle->xtimer_attacher.timer_list_);
|
||||
room->xtimer.AddDeadLineTimerAndAttach(meta->i->time() * kSERVER_FRAME_RATE,
|
||||
@ -208,7 +211,9 @@ void Bullet::ProcMissible(const a8::XParams& param)
|
||||
MetaData::Equip* bullet_meta = MetaMgr::Instance()->GetEquip(param.param1);
|
||||
if (sender && bullet_meta && !sender->room->IsGameOver()) {
|
||||
a8::Vec2 src_pos(a8::Low32(param.param3.GetInt64()), a8::High32(param.param3.GetInt64()));
|
||||
Human* target = sender->room->GetHumanByUniId(param.param2);
|
||||
int target_id = a8::High32(param.param1.GetInt64());
|
||||
int skill_id = a8::Low32(param.param1.GetInt64());
|
||||
Human* target = sender->room->GetHumanByUniId(target_id);
|
||||
if (target && !target->dead) {
|
||||
if (bullet_meta->i->equip_subtype() == kBulletType_Trace) {
|
||||
float bullet_range = bullet_meta->i->range() +
|
||||
@ -217,7 +222,7 @@ void Bullet::ProcMissible(const a8::XParams& param)
|
||||
if (src_pos.Distance(target->pos) < bullet_range) {
|
||||
target->OnHit();
|
||||
if (!target->HasBuffEffect(kBET_Invincible)) {
|
||||
float power = bullet_meta->i->atk() + sender->ability.atk;
|
||||
float power = bullet_meta->i->atk() + sender->ability.atk + sender->GetSkillAtkAdd(skill_id);
|
||||
float def = target->ability.def;
|
||||
float finally_dmg = power * (1 - def/MetaMgr::Instance()->K);
|
||||
sender->stats.damage_amount_out += finally_dmg;
|
||||
@ -231,7 +236,7 @@ void Bullet::ProcMissible(const a8::XParams& param)
|
||||
} else {
|
||||
target->OnHit();
|
||||
if (!target->HasBuffEffect(kBET_Invincible)) {
|
||||
float power = bullet_meta->i->atk() + sender->ability.atk;
|
||||
float power = bullet_meta->i->atk() + sender->ability.atk + sender->GetSkillAtkAdd(skill_id);
|
||||
float def = target->ability.def;
|
||||
float finally_dmg = power * (1 - def/MetaMgr::Instance()->K);
|
||||
sender->stats.damage_amount_out += finally_dmg;
|
||||
|
@ -196,7 +196,7 @@ void Human::Shot()
|
||||
a8::XParams()
|
||||
.SetSender(this)
|
||||
.SetParam1(curr_weapon->meta->i->id())
|
||||
.SetParam2(shot_target_id)
|
||||
.SetParam2(a8::MakeInt64(shot_target_id, 0))
|
||||
.SetParam3(a8::MakeInt64(pos.x, pos.y)),
|
||||
Bullet::ProcMissible,
|
||||
&xtimer_attacher.timer_list_);
|
||||
@ -1143,6 +1143,21 @@ int Human::GetSkillCd()
|
||||
}
|
||||
}
|
||||
|
||||
float Human::GetSkillAtkAdd(int skill_id)
|
||||
{
|
||||
if (!skill_meta_) {
|
||||
return 0.0f;
|
||||
}
|
||||
if (skill_meta_->i->skill_id() != skill_id) {
|
||||
return 0.0f;
|
||||
}
|
||||
if (skill_lv_ > 0) {
|
||||
return skill_meta_->value_up * skill_lv_;
|
||||
} else {
|
||||
return 0.0f;
|
||||
}
|
||||
}
|
||||
|
||||
void Human::TriggerOneObjectBuff(Entity* target, BuffTriggerType_e trigger_type)
|
||||
{
|
||||
if (target->entity_type != kET_Player) {
|
||||
@ -2055,7 +2070,7 @@ void Human::ProcSkillPhase(MetaData::SkillPhase* phase)
|
||||
Obstacle* obstacle = (Obstacle*)param.sender.GetUserData();
|
||||
if (!obstacle->dead) {
|
||||
obstacle->dead = true;
|
||||
obstacle->Explosion();
|
||||
obstacle->Explosion(param.param1);
|
||||
}
|
||||
};
|
||||
|
||||
@ -2083,7 +2098,10 @@ void Human::ProcSkillPhase(MetaData::SkillPhase* phase)
|
||||
a8::XParams()
|
||||
.SetSender(this)
|
||||
.SetParam1(phase->param1.GetInt())
|
||||
.SetParam2(skill_target_id)
|
||||
.SetParam2(a8::MakeInt64(skill_target_id,
|
||||
CurrentSkillMeta()->i->skill_id()
|
||||
)
|
||||
)
|
||||
.SetParam3(a8::MakeInt64(pos.x, pos.y)),
|
||||
Bullet::ProcMissible,
|
||||
&xtimer_attacher.timer_list_);
|
||||
@ -2103,7 +2121,8 @@ void Human::ProcSkillPhase(MetaData::SkillPhase* phase)
|
||||
&obstacle->xtimer_attacher.timer_list_);
|
||||
room->xtimer.AddDeadLineTimerAndAttach(kSERVER_FRAME_RATE * 5,
|
||||
a8::XParams()
|
||||
.SetSender(obstacle),
|
||||
.SetSender(obstacle)
|
||||
.SetParam1(skill_lv_),
|
||||
explosion_check_func,
|
||||
&obstacle->xtimer_attacher.timer_list_);
|
||||
}
|
||||
|
@ -181,6 +181,7 @@ class Human : public Entity
|
||||
MetaData::Skill* CurrentSkillMeta();
|
||||
int GetSkillLeftTime();
|
||||
int GetSkillCd();
|
||||
float GetSkillAtkAdd(int skill_id);
|
||||
void TriggerOneObjectBuff(Entity* target, BuffTriggerType_e trigger_type);
|
||||
void TriggerBuff(std::set<Entity*>& target_list, BuffTriggerType_e trigger_type);
|
||||
void AddBuff(MetaData::Buff* buff_meta);
|
||||
|
@ -164,6 +164,7 @@ namespace MetaData
|
||||
|
||||
void Init();
|
||||
|
||||
float value_up = 0.0f;
|
||||
std::set<int> buff_list;
|
||||
std::map<int, std::set<MetaData::Buff*>> trigger_type_buffs;
|
||||
std::vector<MetaData::SkillPhase> phases;
|
||||
|
@ -160,7 +160,7 @@ void Obstacle::GetCircleBox(CircleCollider& circle_box)
|
||||
|
||||
}
|
||||
|
||||
void Obstacle::Explosion()
|
||||
void Obstacle::Explosion(int skill_id)
|
||||
{
|
||||
if (explosioned) {
|
||||
return;
|
||||
@ -207,6 +207,7 @@ void Obstacle::Explosion()
|
||||
float dmg = meta->i->damage();
|
||||
if (master) {
|
||||
dmg += master->ability.atk;
|
||||
dmg += master->GetSkillAtkAdd(skill_id);
|
||||
}
|
||||
float def = hum->ability.def;
|
||||
float finaly_dmg = dmg * (1 - def/MetaMgr::Instance()->K);
|
||||
|
@ -45,7 +45,7 @@ class Obstacle : public Entity
|
||||
virtual void FillMFObjectFull(cs::MFObjectFull* full_data) override;
|
||||
virtual void GetAabbBox(AabbCollider& aabb_box) override;
|
||||
virtual void GetCircleBox(CircleCollider& circle_box) override;
|
||||
void Explosion();
|
||||
void Explosion(int skill_id = 0);
|
||||
|
||||
private:
|
||||
CircleCollider* self_collider_ = nullptr;
|
||||
|
Loading…
x
Reference in New Issue
Block a user