From 9c1c739deb10aecdc8fd4a8f62a8fb9d3d11aa58 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: Sat, 9 May 2026 20:09:58 +0800 Subject: [PATCH] =?UTF-8?q?feat(=E6=88=98=E6=96=97=E7=B3=BB=E7=BB=9F):=20?= =?UTF-8?q?=E4=B8=BA=E7=88=86=E7=82=B8=E6=94=BB=E5=87=BB=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E5=86=85=E4=BC=A4=E6=95=88=E6=9E=9C=E5=B9=B6=E9=87=8D=E6=9E=84?= =?UTF-8?q?=E5=86=85=E4=BC=A4=E7=94=9F=E6=88=90=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在InfinitySword.gd中添加爆炸攻击时生成内伤球的功能 - 将内伤生成逻辑提取到InternalDamage.gd中的静态方法generateBall - 移除Parrier.gd中重复的内伤生成代码,改用新的generateBall方法 - 更新Tree.tscn中的描述文本,添加对爆炸攻击产生内伤的说明 - 调整WeaponCardBase.tscn的UI布局,为描述文本添加滚动容器 --- components/Abstracts/WeaponCardBase.tscn | 9 +++++++- components/Weapons/Tree.tscn | 6 +++++- scripts/Contents/Bullets/InfinitySword.gd | 1 + scripts/Contents/Bullets/InternalDamage.gd | 13 ++++++++++++ scripts/Contents/Bullets/Parrier.gd | 24 ++++++++-------------- 5 files changed, 35 insertions(+), 18 deletions(-) diff --git a/components/Abstracts/WeaponCardBase.tscn b/components/Abstracts/WeaponCardBase.tscn index b0d7a18..948d9b4 100644 --- a/components/Abstracts/WeaponCardBase.tscn +++ b/components/Abstracts/WeaponCardBase.tscn @@ -183,9 +183,16 @@ text = "无灵" label_settings = SubResource("LabelSettings_b3nsw") horizontal_alignment = 1 -[node name="description" type="RichTextLabel" parent="container" unique_id=566230682] +[node name="scroller" type="ScrollContainer" parent="container" unique_id=543588938] +custom_minimum_size = Vector2(0, 100) +layout_mode = 2 +size_flags_vertical = 3 +horizontal_scroll_mode = 0 + +[node name="description" type="RichTextLabel" parent="container/scroller" unique_id=566230682] unique_name_in_owner = true layout_mode = 2 +size_flags_horizontal = 3 bbcode_enabled = true text = "[center]造成[color=cyan]10[/color]点伤害。[/center]" fit_content = true diff --git a/components/Weapons/Tree.tscn b/components/Weapons/Tree.tscn index a3a6dad..598a728 100644 --- a/components/Weapons/Tree.tscn +++ b/components/Weapons/Tree.tscn @@ -60,6 +60,8 @@ descriptionTemplate = "进行[b]格挡[/b],化解敌人的攻击。 [color=red]无法化解伤害[/color]但产生少量击退; 对于[b]魔法或召唤[/b]攻击, [color=red]无法化解伤害[/color]但可以少量储能; +对于[b]爆炸[/b]攻击, + [color=red]无法化解伤害[/color]且[color=red]自身产生[color=yellow]2[/color]枚内伤[/color]; 敌人或自身受到的任意[color=yellow]爆炸类伤害[/color]都会引爆其所有内伤,每枚内伤造成$atk点伤害。 格挡时机越精确,成功率越高。 @@ -83,7 +85,7 @@ typeTopic = 3 [node name="source" parent="container/info/displays" parent_id_path=PackedInt32Array(784441328) index="1" unique_id=365191794] text = "Nine Sols × Terraria" -[node name="description" parent="container" parent_id_path=PackedInt32Array(575698869) index="2" unique_id=566230682] +[node name="description" parent="container/scroller" parent_id_path=PackedInt32Array(543588938) index="0" unique_id=566230682] text = "进行[b]格挡[/b],化解敌人的攻击。 每成功格挡一次,获得一点[b]气力[/b]。 @@ -120,6 +122,8 @@ text = "进行[b]格挡[/b],化解敌人的攻击。 [color=red]无法化解伤害[/color]但产生少量击退; 对于[b]魔法或召唤[/b]攻击, [color=red]无法化解伤害[/color]但可以少量储能; +对于[b]爆炸[/b]攻击, + [color=red]无法化解伤害[/color]且[color=red]自身产生[color=yellow]2[/color]枚内伤[/color]; 敌人或自身受到的任意[color=yellow]爆炸类伤害[/color]都会引爆其所有内伤,每枚内伤造成[color=cyan]10[/color]点伤害。 格挡时机越精确,成功率越高。 diff --git a/scripts/Contents/Bullets/InfinitySword.gd b/scripts/Contents/Bullets/InfinitySword.gd index d314930..af94f58 100644 --- a/scripts/Contents/Bullets/InfinitySword.gd +++ b/scripts/Contents/Bullets/InfinitySword.gd @@ -20,3 +20,4 @@ func hitBullet(bullet: BulletBase): if !is_instance_valid(launcher): return if BulletTool.canDamage(bullet, launcher): baseDamage *= rate2 ** bullet.getDamage() + InternalDamageBullet.generateBall(launcher, bullet.launcher, sqrt(baseDamage)) diff --git a/scripts/Contents/Bullets/InternalDamage.gd b/scripts/Contents/Bullets/InternalDamage.gd index 4dd7bed..6d8ed63 100644 --- a/scripts/Contents/Bullets/InternalDamage.gd +++ b/scripts/Contents/Bullets/InternalDamage.gd @@ -11,3 +11,16 @@ func spawn(): if bullet.motionType == BulletBase.MotionType.EXPLOSION: hitbox.set_deferred("disabled", false) ) + +static func generateBall(by: EntityBase, who: EntityBase, atk: float): + var internalDamages = who.getOrCreateCycleTimer("internalDamages", 3000, 150) + for bullet in BulletBase.generate( + ComponentManager.getBullet("InternalDamage"), + by, + Vector2.ZERO, + 0 + ): + if bullet is InternalDamageBullet: + bullet.baseDamage = atk + bullet.hoster = who + internalDamages.host(bullet) diff --git a/scripts/Contents/Bullets/Parrier.gd b/scripts/Contents/Bullets/Parrier.gd index 7bbd571..d70289e 100644 --- a/scripts/Contents/Bullets/Parrier.gd +++ b/scripts/Contents/Bullets/Parrier.gd @@ -33,18 +33,6 @@ func generateParryBall(bDamage: float): ): if b is ParryBallBullet: b.atk = atk * bDamage -func generateInternalDamage(by: EntityBase, who: EntityBase): - var internalDamages = who.getOrCreateCycleTimer("internalDamages", 3000, 150) - for bullet in BulletBase.generate( - ComponentManager.getBullet("InternalDamage"), - by, - Vector2.ZERO, - 0 - ): - if bullet is InternalDamageBullet: - bullet.baseDamage = atk - bullet.hoster = who - internalDamages.host(bullet) func spawn(): var varians = randi_range(0, 1) @@ -85,7 +73,7 @@ func hitBullet(bullet: BulletBase): # 当前子弹与其他子弹相撞 parryEffect(bullet) bullet.hitbox.set_deferred("disabled", true) generateParryBall(bullet.baseDamage) - generateInternalDamage(launcher, bullet.launcher) + InternalDamageBullet.generateBall(launcher, bullet.launcher, atk) elif bullet.motionType == BulletBase.MotionType.STAB: parryEffect(bullet) penerateEffect(bullet.launcher, bullet.launcher.position * 1.01) @@ -93,21 +81,25 @@ func hitBullet(bullet: BulletBase): # 当前子弹与其他子弹相撞 bullet.launcher.takeDamage(atk * reflectRate * bullet.getDamage()) bullet.launcher.impluse(Vector2.from_angle(bullet.rotation) * -2000) generateParryBall(bullet.baseDamage) - generateInternalDamage(launcher, bullet.launcher) + InternalDamageBullet.generateBall(launcher, bullet.launcher, atk) elif bullet.motionType == BulletBase.MotionType.SPRINT: parryEffect(bullet) bullet.tryDestroy() bullet.launcher.velocity *= 0 generateParryBall(bullet.baseDamage) - generateInternalDamage(launcher, bullet.launcher) + InternalDamageBullet.generateBall(launcher, bullet.launcher, atk) elif bullet.motionType == BulletBase.MotionType.BREATH: penerateEffect(bullet.launcher, launcher.position) bullet.launcher.impluse(Vector2.from_angle(bullet.rotation) * -500) elif bullet.motionType == BulletBase.MotionType.SUMMON || bullet.motionType == BulletBase.MotionType.MAGIC: penerateEffect(bullet.launcher, launcher.position) launcher.storeEnergy(sqrt(bullet.baseDamage)) + elif bullet.motionType == BulletBase.MotionType.EXPLOSION: + penerateEffect(bullet.launcher, launcher.position) + for i in 2: + InternalDamageBullet.generateBall(bullet.launcher, launcher, atk) else: - generateInternalDamage(bullet.launcher, launcher) + InternalDamageBullet.generateBall(bullet.launcher, launcher, atk) func refract(_newBullet: BulletBase, _entity: EntityBase, _index: int, _total: int, _lastBullet: float): return null