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