From ee86fca4423a49bc2a2a0c280cbbe4861c0478dd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=A8=E8=90=BD=E5=9F=BA=E5=9B=B4=E8=99=BE?= <3161880837@qq.com> Date: Thu, 28 Aug 2025 15:53:39 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E5=AD=90=E5=BC=B9?= =?UTF-8?q?=E4=BC=A4=E5=AE=B3=E8=AE=A1=E7=AE=97=E5=B9=B6=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E5=91=BD=E4=B8=AD=E6=88=90=E5=8A=9F=E5=9B=9E=E8=B0=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在EntityBase.gd中添加takeDamage方法的返回值 - 修改BigLaser.gd中的applyDot延迟时间计算方式并添加succeedToHit方法 - 在BulletBase.gd中完善伤害处理流程,添加命中回调机制 --- scripts/Contents/Bullets/BigLaser.gd | 6 ++++-- scripts/Statemachine/BulletBase.gd | 5 ++++- scripts/Statemachine/EntityBase.gd | 1 + 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/scripts/Contents/Bullets/BigLaser.gd b/scripts/Contents/Bullets/BigLaser.gd index ce4cd6c..ef22405 100644 --- a/scripts/Contents/Bullets/BigLaser.gd +++ b/scripts/Contents/Bullets/BigLaser.gd @@ -10,9 +10,9 @@ func ai(): position = launcher.texture.global_position func applyDot(): hitbox.disabled = true - await TickTool.millseconds(50) + await TickTool.millseconds(100 / launcher.fields[FieldStore.Entity.ATTACK_SPEED]) hitbox.disabled = false - await TickTool.millseconds(50) + await TickTool.millseconds(100 / launcher.fields[FieldStore.Entity.ATTACK_SPEED]) BulletBase.generate( preload("res://components/Bullets/LaserPluse.tscn"), launcher, @@ -20,3 +20,5 @@ func applyDot(): rotation ) return true +func succeedToHit(_dmg: float): + fields[FieldStore.Bullet.DAMAGE] *= 1.1 diff --git a/scripts/Statemachine/BulletBase.gd b/scripts/Statemachine/BulletBase.gd index acc65b3..88b62a2 100644 --- a/scripts/Statemachine/BulletBase.gd +++ b/scripts/Statemachine/BulletBase.gd @@ -54,7 +54,8 @@ func hit(target: Node): if !canDamageSelf && entity == launcher: return if !indisDamage && !GameRule.allowFriendlyFire: if entity.isPlayer() == launcher.isPlayer(): return - entity.takeDamage(self, MathTool.rate(launcher.fields.get(FieldStore.Entity.CRIT_RATE) + GameRule.critRateInfluenceByLuckValue * launcher.fields[FieldStore.Entity.LUCK_VALUE])) + var damage = entity.takeDamage(self, MathTool.rate(launcher.fields.get(FieldStore.Entity.CRIT_RATE) + GameRule.critRateInfluenceByLuckValue * launcher.fields[FieldStore.Entity.LUCK_VALUE])) + succeedToHit(damage) if MathTool.rate(fullPenerate()): fields[FieldStore.Bullet.PENERATE] -= entity.fields[FieldStore.Entity.PENARATION_RESISTANCE] else: @@ -77,6 +78,8 @@ func spawn(): pass func applyDot(): pass +func succeedToHit(_dmg: float): + pass static func generate( bullet: PackedScene, diff --git a/scripts/Statemachine/EntityBase.gd b/scripts/Statemachine/EntityBase.gd index 12ecd51..3b8dc9d 100644 --- a/scripts/Statemachine/EntityBase.gd +++ b/scripts/Statemachine/EntityBase.gd @@ -151,6 +151,7 @@ func takeDamage(bullet: BulletBase, crit: bool): bullet.launcher.storeEnergy(energy * 0.35) bullet.launcher.setBoss(null) tryDie(bullet) + return damage func collectItem(itemType: ItemStore.ItemType, amount: int): inventory[itemType] += amount playSound("collect")