From 855d90204f3245e661646e6a40638dbcf0bf47a3 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Mon, 15 Jul 2019 13:23:42 +0800 Subject: [PATCH] 1 --- server/gameserver/bullet.cc | 14 ++++------ server/gameserver/human.cc | 4 ++- server/gameserver/obstacle.cc | 50 +++++++++++++++++------------------ 3 files changed, 32 insertions(+), 36 deletions(-) diff --git a/server/gameserver/bullet.cc b/server/gameserver/bullet.cc index fcb43d9..2fffc81 100644 --- a/server/gameserver/bullet.cc +++ b/server/gameserver/bullet.cc @@ -64,15 +64,9 @@ void Bullet::OnHit(std::set& objects) float def = hum->def + hum->ability.def_add; float finaly_dmg = dmg * (1 - def/MetaMgr::Instance()->K); player->stats.damage_amount_out += finaly_dmg; - hum->DecHP(finaly_dmg, player->entity_uniid, player->name, meta->i->id()); - #if 0 - if (a8::HasBitFlag(hum->status, HS_ReflectDamage) && hum->skill_meta) { - float reflect_dmg = finaly_dmg * hum->skill_meta->value1; - if (reflect_dmg > 1.0f) { - player->DecHP(reflect_dmg, hum->entity_uniid, hum->name, gun_meta->i->id()); - } + if (!hum->HasBuffEffect(BET_Invincible)) { + hum->DecHP(finaly_dmg, player->entity_uniid, player->name, meta->i->id()); } - #endif } } break; @@ -206,7 +200,9 @@ void Bullet::PostAttack() for (auto& grid : grid_list) { for (Human* hum: grid->human_list) { if (hum->pos.Distance(obstacle->pos) < obstacle->meta->i->damage_dia()) { - hum->DecHP(obstacle->meta->i->damage(), sender->entity_uniid, sender->name, 0); + if (!hum->HasBuffEffect(BET_Invincible)) { + hum->DecHP(obstacle->meta->i->damage(), sender->entity_uniid, sender->name, 0); + } } } } diff --git a/server/gameserver/human.cc b/server/gameserver/human.cc index 2c240b0..95f32b1 100644 --- a/server/gameserver/human.cc +++ b/server/gameserver/human.cc @@ -1921,7 +1921,9 @@ void Human::ProcSkillPhase(MetaData::SkillPhase* phase) for (auto& cell : grid_list) { for (Human* hum : cell->human_list) { if (hum->team_id != team_id && hum->pos.Distance(skill_target_pos) < hum->GetRadius()) { - hum->DecHP(phase->param1.GetDouble(), entity_uniid, name, 0); + if (!hum->HasBuffEffect(BET_Invincible)) { + hum->DecHP(phase->param1.GetDouble(), entity_uniid, name, 0); + } a8::Vec2 pull_dir = pos - old_pos; if (std::abs(pull_dir.x) > FLT_EPSILON || std::abs(pull_dir.y) > FLT_EPSILON) { diff --git a/server/gameserver/obstacle.cc b/server/gameserver/obstacle.cc index 7d8d983..a2bb93c 100644 --- a/server/gameserver/obstacle.cc +++ b/server/gameserver/obstacle.cc @@ -204,38 +204,36 @@ void Obstacle::Explosion() case ET_Player: { Human* hum = (Human*)target; -#if 1 if (!hum->dead) { -#else - if (!hum->dead && (hum->team_id == 0 || hum->team_id != player->team_id)) { -#endif - float dmg = meta->i->damage(); - float def = hum->def + hum->ability.def_add; - float finaly_dmg = dmg * (1 - def/MetaMgr::Instance()->K); + float dmg = meta->i->damage(); + float def = hum->def + hum->ability.def_add; + float finaly_dmg = dmg * (1 - def/MetaMgr::Instance()->K); + if (!hum->HasBuffEffect(BET_Invincible)) { hum->DecHP(finaly_dmg, VP_Mine, "地雷", VW_Mine); } } - break; - case ET_Obstacle: - { - Obstacle* obstacle = (Obstacle*)target; - if (!obstacle->dead && obstacle->meta->i->attack_type() == 1) { - float dmg = meta->i->damage(); - float def = 0; - float finaly_dmg = dmg * (1 - def/MetaMgr::Instance()->K); + } + break; + case ET_Obstacle: + { + Obstacle* obstacle = (Obstacle*)target; + if (!obstacle->dead && obstacle->meta->i->attack_type() == 1) { + float dmg = meta->i->damage(); + float def = 0; + float finaly_dmg = dmg * (1 - def/MetaMgr::Instance()->K); - obstacle->health = std::max(0.0f, obstacle->health - finaly_dmg); - obstacle->dead = obstacle->health <= 0.01f; - obstacle->dead_frameno = room->frame_no; - if (obstacle->dead) { - room->ScatterDrop(obstacle->pos, obstacle->meta->i->drop()); - } - obstacle->BroadcastFullState(); - } + obstacle->health = std::max(0.0f, obstacle->health - finaly_dmg); + obstacle->dead = obstacle->health <= 0.01f; + obstacle->dead_frameno = room->frame_no; + if (obstacle->dead) { + room->ScatterDrop(obstacle->pos, obstacle->meta->i->drop()); } - break; - default: - break; + obstacle->BroadcastFullState(); + } + } + break; + default: + break; } }