diff --git a/server/gameserver/bullet.cc b/server/gameserver/bullet.cc index cc34de1..5a0683b 100644 --- a/server/gameserver/bullet.cc +++ b/server/gameserver/bullet.cc @@ -241,9 +241,16 @@ void Bullet::ProcMissible(const a8::XParams& param) Human* sender = (Human*)param.sender.GetUserData(); 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); if (target && !target->dead) { - target->DecHP(10, sender->entity_uniid, sender->name, bullet_meta->i->id()); + if (bullet_meta->i->equip_subtype() == BulletType_Trace) { + if (src_pos.Distance(target->pos) < bullet_meta->i->range()) { + target->DecHP(bullet_meta->i->atk(), sender->entity_uniid, sender->name, bullet_meta->i->id()); + } + } else { + target->DecHP(bullet_meta->i->atk(), sender->entity_uniid, sender->name, bullet_meta->i->id()); + } } } } diff --git a/server/gameserver/human.cc b/server/gameserver/human.cc index bb68ba3..42ff3c9 100644 --- a/server/gameserver/human.cc +++ b/server/gameserver/human.cc @@ -220,7 +220,8 @@ void Human::Shot() a8::XParams() .SetSender(this) .SetParam1(curr_weapon->meta->i->id()) - .SetParam2(shot_target_id), + .SetParam2(shot_target_id) + .SetParam3(a8::MakeInt64(pos.x, pos.y)), Bullet::ProcMissible, &xtimer_attacher.timer_list_); }