1
1
mirror of https://github.com/Rundll86/Dog-Lynx-And-HCN.git synced 2026-06-09 13:17:12 +08:00

feat(武器系统): 为BigLaser武器添加执行伤害和升华选项

- 在ObstacleBase和EntityBase中添加getHealthPercent方法用于获取生命值百分比
- 修改bulletHit方法支持伤害覆盖参数
- 为BigLaser武器添加5个升华选项,包括临界斩杀效果
- 实现damageOverride方法根据目标生命值动态调整伤害
- 修复store数值可能为负数的问题
This commit is contained in:
2026-05-10 14:58:05 +08:00
parent a0372f0867
commit 6b7801e1ce
6 changed files with 66 additions and 7 deletions
+5 -3
View File
@@ -141,10 +141,10 @@ func setupCuttable(cutSpeed: float):
)
func getDamage():
return baseDamage * damageMultipliers[usingDamageMultiplier]
func calculateDamage(crit: bool):
func calculateDamage(crit: bool, entity: Variant):
var baseDmg = getDamage() * launcher.fields.get(FieldStore.Entity.DAMAGE_MULTIPILER) * randf_range(1 - GameRule.damageOffset, 1 + GameRule.damageOffset)
var damage = baseDmg + baseDmg * int(crit) * launcher.fields.get(FieldStore.Entity.CRIT_DAMAGE)
return damage
return damageOverride(damage, entity)
func determineCrit():
return MathTool.rate(launcher.fields.get(FieldStore.Entity.CRIT_RATE) + GameRule.critRateInfluenceByLuckValue * launcher.fields[FieldStore.Entity.LUCK_VALUE])
func hitEntity(target: Node):
@@ -161,7 +161,7 @@ func hitObstacle(target: Node):
var obstacle = target as ObstacleBase
if is_instance_valid(obstacle.launcher):
if not BulletTool.canDamage(self , obstacle.launcher): return
obstacle.takeDamage(calculateDamage(determineCrit()))
obstacle.takeDamage(calculateDamage(determineCrit(), target))
if MathTool.rate(fullPenerate() - obstacle.penerateResistance):
baseDamage *= 1.0 - penerateDamageReduction
else:
@@ -257,6 +257,8 @@ func refract(newBullet: BulletBase, _entity: EntityBase, _index: int, _total: in
return newBullet
func hitBullet(_bullet: BulletBase):
pass
func damageOverride(origin: float, _something: Variant):
return origin
static func generate(
bullet: PackedScene,
+2 -2
View File
@@ -282,10 +282,10 @@ func takeDamage(baseDamage: float, crit: bool = false, perfectMiss: bool = false
if health <= 0:
tryDie(null)
return resultDamage
func bulletHit(bullet: BulletBase, crit: bool):
func bulletHit(bullet: BulletBase, crit: bool, damageOverride = "none"):
# 当受伤时
hurtAnimator.play("hurt")
var damage = bullet.calculateDamage(crit)
var damage = bullet.calculateDamage(crit) if damageOverride == "none" else damageOverride
var perfectMiss = false
if sprinting:
playSound("miss")
+2
View File
@@ -44,6 +44,8 @@ func takeDamage(damage: float):
func tryDie():
die()
queue_free()
func getHealthPercent():
return health / healthMax
func die():
pass