From 31d344e50a40317d1c7a94881c8a3d6ec903c11c 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, 10 May 2026 15:31:40 +0800 Subject: [PATCH] =?UTF-8?q?feat(=E6=AD=A6=E5=99=A8):=20=E4=B8=BA=E5=BC=93?= =?UTF-8?q?=E6=AD=A6=E5=99=A8=E6=B7=BB=E5=8A=A0=E7=94=9F=E5=91=BD=E6=B1=B2?= =?UTF-8?q?=E5=8F=96=E5=92=8C=E5=8D=87=E5=8D=8E=E9=80=89=E9=A1=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 添加生命汲取效果,使箭矢命中时回复生命值 实现弓武器的升华系统,包含5种不同品质的强化选项 调整攻击逻辑以支持升华效果和生命值相关的伤害加成 --- scripts/Contents/Bullets/Arrow.gd | 4 ++- scripts/Contents/Bullets/Bow.gd | 12 ++++--- scripts/Contents/Weapons/Bow.gd | 54 ++++++++++++++++++++++++++++--- 3 files changed, 60 insertions(+), 10 deletions(-) diff --git a/scripts/Contents/Bullets/Arrow.gd b/scripts/Contents/Bullets/Arrow.gd index 7a3bb9e..1ef957c 100644 --- a/scripts/Contents/Bullets/Arrow.gd +++ b/scripts/Contents/Bullets/Arrow.gd @@ -6,6 +6,7 @@ class_name Arrow var atk: float = 0 var waitTime: float = 0 var offsetRotation: float = 0 +var lifesteal: float = 0.2 func register(): trail.emitting = false @@ -23,6 +24,7 @@ func ai(): PresetBulletAI.forward(self , rotation) if speed < 1: tryDestroy() -func succeedToHit(_dmg: float, _entity: EntityBase): +func succeedToHit(_dmg: float, entity: EntityBase): var effect = EffectController.create(ComponentManager.getEffect("ShootBlood"), position) effect.shot() + entity.heal(lifesteal) diff --git a/scripts/Contents/Bullets/Bow.gd b/scripts/Contents/Bullets/Bow.gd index 2c6d016..3cb6019 100644 --- a/scripts/Contents/Bullets/Bow.gd +++ b/scripts/Contents/Bullets/Bow.gd @@ -4,20 +4,22 @@ class_name Bow var count: int = 0 var atk: float = 0 var waitTime: float = 2000 +var lifesteal: float = 0.2 func spawn(): var startAngle = rotation - deg_to_rad(count * 10.0 / 2) for c in count: - for i in BulletBase.generate( + for bullet in BulletBase.generate( ComponentManager.getBullet("Arrow"), launcher, position, startAngle ): - var bullet: Arrow = i - bullet.atk = atk - bullet.waitTime = waitTime - bullet.offsetRotation = deg_to_rad(c * 10.0) + if bullet is Arrow: + bullet.atk = atk + bullet.waitTime = waitTime + bullet.offsetRotation = deg_to_rad(c * 10.0) + bullet.lifesteal = lifesteal await TickTool.millseconds(waitTime) tryDestroy() func ai(): diff --git a/scripts/Contents/Weapons/Bow.gd b/scripts/Contents/Weapons/Bow.gd index 01092d5..2d5f118 100644 --- a/scripts/Contents/Weapons/Bow.gd +++ b/scripts/Contents/Weapons/Bow.gd @@ -1,6 +1,50 @@ @tool extends Weapon +func sublimateOptions() -> Array[SublimateOption]: + return [ + SublimateOption.new( + "破风之翎", + "伤害+15%", + func(w: Weapon, _e): + w.addStoreExtra("atk", 0.15), + 1, + CategoryStore.Quality.COMMON + ), + SublimateOption.new( + "嗜血", + "伤害倍率+40%,但额外消耗1点生命值", + func(w: Weapon, _e): + w.addStoreExtra("atk", 0.4) + w.addStoreExtra("self", 1), + 2, + CategoryStore.Quality.LEGENDARY + ), + SublimateOption.new( + "风行者", + "鸡毛箭出手速度+5%", + func(w: Weapon, _e): + w.addStoreExtra("initSpeed", 0.05), + 1, + CategoryStore.Quality.RARE + ), + SublimateOption.new( + "破釜沉舟", + "每失去5%生命值,伤害+6%", + func(w: Weapon, _e): + w.addStoreExtra("missAtk", 0.06), + 2, + CategoryStore.Quality.EPIC + ), + SublimateOption.new( + "生命汲取", + "鸡毛箭命中时回复0.2点生命值", + func(w: Weapon, _e): + w.addStoreExtra("lifesteal", 0.2), + 1, + CategoryStore.Quality.COMMON + ), + ] func update(to: int, origin: Dictionary, _entity: EntityBase): origin["atk"] += 0.1 * to * soulLevel origin["count"] = 1 * soulLevel @@ -9,13 +53,15 @@ func update(to: int, origin: Dictionary, _entity: EntityBase): func attack(entity: EntityBase): entity.takeDamage(readStore("self")) var weaponPos = entity.findWeaponAnchor("normal") - for i in BulletBase.generate( + for bullet in BulletBase.generate( ComponentManager.getBullet("Bow"), entity, weaponPos, weaponPos.angle_to_point(get_global_mouse_position()) ): - var bullet: Bow = i - bullet.count = readStore("count") - bullet.atk = readStore("atk") + if bullet is Bow: + bullet.count = readStore("count") + bullet.atk = readStore("atk") * (1 + (1 - entity.getHealthPercent()) * readStoreExtra("missAtk")) + bullet.speed *= 1 + readStoreExtra("initSpeed") + bullet.lifesteal = readStoreExtra("lifesteal") return true