From 7ab849129f6fa141813105fa17aa82b13c9dddfd 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: Sun, 30 Nov 2025 15:46:18 +0800 Subject: [PATCH] =?UTF-8?q?feat(SevenSoul):=20=E5=A2=9E=E5=BC=BA=E4=B8=83?= =?UTF-8?q?=E9=AD=82=E6=AD=A6=E5=99=A8=E5=8A=9F=E8=83=BD=E5=B9=B6=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D=E5=AD=90=E5=BC=B9=E4=BC=A4=E5=AE=B3=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 为七魂武器添加攻击力属性并调整伤害和治疗机制 修复子弹工具中空引用检查缺失的问题 移除子弹基类中冗余的空检查逻辑 更新武器描述以反映新功能 调整子弹粒子效果和伤害计算方式 --- components/Bullets/SevenSoul.tscn | 9 ++++----- components/Characters/Rooster.tscn | 2 ++ components/Weapons/SevenSoul.tscn | 6 ++++-- scripts/Contents/Bullets/SevenSoul.gd | 19 ++++++------------- scripts/Contents/Weapons/SevenSoul.gd | 10 ++++++++-- scripts/Statemachine/BulletBase.gd | 1 - scripts/Tools/BulletTool.gd | 1 + 7 files changed, 25 insertions(+), 23 deletions(-) diff --git a/components/Bullets/SevenSoul.tscn b/components/Bullets/SevenSoul.tscn index e17e22a..da3a70a 100644 --- a/components/Bullets/SevenSoul.tscn +++ b/components/Bullets/SevenSoul.tscn @@ -1,7 +1,7 @@ [gd_scene load_steps=10 format=3 uid="uid://bymprh2qel2oj"] [ext_resource type="PackedScene" uid="uid://crtdkysmnkith" path="res://components/Abstracts/BulletBase.tscn" id="1_c4fl5"] -[ext_resource type="Script" path="res://scripts/Contents/Bullets/SevenSoul.gd" id="2_egs34"] +[ext_resource type="Script" uid="uid://tkgkjb7v65j8" path="res://scripts/Contents/Bullets/SevenSoul.gd" id="2_egs34"] [ext_resource type="Texture2D" uid="uid://wy10fc3bqppg" path="res://resources/bullets/seven-soul/soul.png" id="2_itucu"] [sub_resource type="Curve" id="Curve_0y25k"] @@ -12,7 +12,7 @@ point_count = 3 curve = SubResource("Curve_0y25k") [sub_resource type="Curve" id="Curve_acuqr"] -max_value = 4.0 +_limits = [0.0, 4.0, 0.0, 1.0] _data = [Vector2(0, 1), 0.0, 3.0, 0, 1, Vector2(1, 4), 0.0, 0.0, 0, 0] point_count = 2 @@ -32,8 +32,7 @@ size = Vector2(30, 100) [node name="SevenSoul" instance=ExtResource("1_c4fl5")] script = ExtResource("2_egs34") -speed = 0.0 -damage = 0.0 +baseDamage = 2.0 penerate = 1.0 lifeTime = 112000.0 @@ -48,11 +47,11 @@ unique_name_in_owner = true position = Vector2(100, 0) emitting = false amount = 1 -process_material = SubResource("ParticleProcessMaterial_4d30u") texture = ExtResource("2_itucu") lifetime = 0.5 one_shot = true local_coords = true +process_material = SubResource("ParticleProcessMaterial_4d30u") [node name="hitbox" parent="." index="1"] position = Vector2(100, 0) diff --git a/components/Characters/Rooster.tscn b/components/Characters/Rooster.tscn index 5f4e034..be12a51 100644 --- a/components/Characters/Rooster.tscn +++ b/components/Characters/Rooster.tscn @@ -57,6 +57,8 @@ metadata/_edit_vertical_guides_ = [71.0] process_mode = 4 [node name="SevenSoul" parent="weaponStore" index="0" instance=ExtResource("3_0omr3")] +cooldown = 2000.0 +debugRebuild = false [node name="sprint" parent="sounds" index="0"] stream = ExtResource("4_66s6c") diff --git a/components/Weapons/SevenSoul.tscn b/components/Weapons/SevenSoul.tscn index 8295e70..dabf217 100644 --- a/components/Weapons/SevenSoul.tscn +++ b/components/Weapons/SevenSoul.tscn @@ -12,14 +12,16 @@ displayName = "bilioicik" quality = 2 typeTopic = 3 store = { +"atk": 2.0, "dmg": 0.1, "heal": 1.0 } storeType = { +"atk": 1, "dmg": 2, "heal": 1 } -descriptionTemplate = "召唤7条人类灵魂,敌人子弹命中灵魂时将伤害的$dmg转换为能量并提供$heal点治疗。" +descriptionTemplate = "召唤7条灵魂,每条造成$atk点伤害,命中敌人时将伤害的$dmg转换为能量并提供$heal点治疗。" needEnergy = 150.0 cooldown = 180000.0 debugRebuild = true @@ -46,4 +48,4 @@ quality = 2 typeTopic = 3 [node name="description" parent="container" index="2"] -text = "[center]召唤7条人类灵魂,敌人子弹命中灵魂时将伤害的[color=cyan]10%[/color]转换为能量并提供[color=cyan]1[/color]点治疗。[/center]" +text = "[center]召唤7条灵魂,每条造成[color=cyan]2[/color]点伤害,命中敌人时将伤害的[color=cyan]10%[/color]转换为能量并提供[color=cyan]1[/color]点治疗。[/center]" diff --git a/scripts/Contents/Bullets/SevenSoul.gd b/scripts/Contents/Bullets/SevenSoul.gd index e431e02..bf65128 100644 --- a/scripts/Contents/Bullets/SevenSoul.gd +++ b/scripts/Contents/Bullets/SevenSoul.gd @@ -1,4 +1,5 @@ extends BulletBase +class_name SevenSoulBullet var colors = [ "#2BEAFF", @@ -11,27 +12,19 @@ var colors = [ var index = 0 var generationDuration: float = 15000 var pingAfterGeneration: float = 5000 +var energyCollect: float = 0 +var healAmount: float = 0 @onready var heart = $"%heart" @onready var effect: GPUParticles2D = $"%effect" -func register(): - area_entered.connect( - func(area): - var bullet = BulletTool.fromArea(area) - if bullet and BulletTool.canDamage(bullet, launcher): - launcher.storeEnergy(baseDamage * 2) - ) func spawn(): modulate = Color(colors[index % colors.size()]) effect.emitting = true - func ai(): rotation_degrees = 360.0 / colors.size() * index + timeLived() / generationDuration * 360 - index / 6.0 * 360.0 heart.global_rotation_degrees = 0 PresetBulletAI.lockLauncher(self, launcher, true) -func applyDot(): - if timeLived() > generationDuration * ((6.0 - index) / 6.0) + pingAfterGeneration: - BulletBase.generate(ComponentManager.getBullet("SoulBall"), launcher, heart.global_position, heart.global_position.angle_to_point(get_global_mouse_position())) - await TickTool.millseconds(100) - return true +func succeedToHit(_dmg: float, _entity: EntityBase): + launcher.storeEnergy(getDamage() * energyCollect) + launcher.tryHeal(healAmount) diff --git a/scripts/Contents/Weapons/SevenSoul.gd b/scripts/Contents/Weapons/SevenSoul.gd index c5e9c54..dbb54fe 100644 --- a/scripts/Contents/Weapons/SevenSoul.gd +++ b/scripts/Contents/Weapons/SevenSoul.gd @@ -4,9 +4,15 @@ extends Weapon func attack(entity: EntityBase): playSound("attack") for i in 6: - for j in BulletBase.generate(ComponentManager.getBullet("SevenSoul"), entity, entity.texture.global_position, 0): - j.index = i + for bullet in BulletBase.generate(ComponentManager.getBullet("SevenSoul"), entity, entity.texture.global_position, 0): + if bullet is SevenSoulBullet: + bullet.index = i + bullet.baseDamage = readStore("atk") + bullet.energyCollect = readStore("dmg") + bullet.healAmount = readStore("heal") await TickTool.millseconds(15000 / 6.0) func update(to, origin, _entity): origin["atk"] += 1 * to * soulLevel + origin["dmg"] += 0.02 * to * soulLevel + origin["heal"] += 0.1 * to * soulLevel return origin diff --git a/scripts/Statemachine/BulletBase.gd b/scripts/Statemachine/BulletBase.gd index 3cb42c5..099ceef 100644 --- a/scripts/Statemachine/BulletBase.gd +++ b/scripts/Statemachine/BulletBase.gd @@ -104,7 +104,6 @@ func getDamage(): return baseDamage * damageMultipliers[usingDamageMultiplier] func hit(target: Node): var entity: EntityBase = EntityTool.fromHurtbox(target) - if !entity || !launcher: return if !BulletTool.canDamage(self, entity): return var resultDamage = entity.bulletHit(self, MathTool.rate(launcher.fields.get(FieldStore.Entity.CRIT_RATE) + GameRule.critRateInfluenceByLuckValue * launcher.fields[FieldStore.Entity.LUCK_VALUE])) succeedToHit(resultDamage, entity) diff --git a/scripts/Tools/BulletTool.gd b/scripts/Tools/BulletTool.gd index 5d83898..e4e676c 100644 --- a/scripts/Tools/BulletTool.gd +++ b/scripts/Tools/BulletTool.gd @@ -6,6 +6,7 @@ static func fromArea(area: Area2D) -> BulletBase: else: return null static func canDamage(bullet: BulletBase, target: EntityBase) -> bool: + if !bullet or !target: return false if target.currentInvinsible: return false if !bullet.canDamageSelf && target == bullet.launcher: return false if !GameRule.allowFriendlyFire: