1
1
mirror of https://github.com/Rundll86/Dog-Lynx-And-HCN.git synced 2026-07-10 20:12:54 +08:00

feat(武器): 完善扶桑元神武器机制

- 调整格挡子弹的基础伤害为0
- 增加气力上限和格挡次数的可配置性
- 实现乾坤剑伤害随武器等级提升
- 更新武器描述文本以反映新机制
- 修复乾坤剑生命周期与生成速度的同步问题
This commit is contained in:
2026-03-21 14:37:46 +08:00
parent 0395019d5f
commit 32f1f545e2
6 changed files with 30 additions and 12 deletions
+1 -1
View File
@@ -113,7 +113,7 @@ size = Vector2(54, 204)
[node name="Parrier" instance=ExtResource("1_57y3f")] [node name="Parrier" instance=ExtResource("1_57y3f")]
script = ExtResource("2_li4th") script = ExtResource("2_li4th")
parryRate = 0.0 parryRate = 0.0
baseDamage = 1.0 baseDamage = 0.0
penerate = 1.0 penerate = 1.0
autoSpawnAnimation = true autoSpawnAnimation = true
freeAfterSpawn = true freeAfterSpawn = true
+14 -8
View File
@@ -9,25 +9,28 @@ script = ExtResource("2_jsuc8")
avatarTexture = ExtResource("3_nwamk") avatarTexture = ExtResource("3_nwamk")
displayName = "扶桑元神" displayName = "扶桑元神"
quality = 4 quality = 4
typeTopic = 3
costBeachball = 900 costBeachball = 900
oneShoot = true oneShoot = true
store = { store = {
"atk": 10, "atk": 20,
"count": 1.0, "count": 1.0,
"foo": 1.0 "max": 3.0
} }
storeType = { storeType = {
"atk": 1, "atk": 1,
"count": 1, "count": 1,
"foo": 1 "max": 1
} }
descriptionTemplate = "进行[b]格挡[/b],化解飞来的子弹。 descriptionTemplate = "进行[b]格挡[/b],化解飞来的子弹。
每成功格挡一次,获得一点[b]气力[/b]。 每成功格挡一次,获得一点[b]气力[/b]。
每拥有一点气力,闪避穿过敌人时对其贴上$foo层[b]符咒[/b],一段时间后符咒自动引爆, 每拥有一点气力,闪避穿过敌人时对其贴上层[b]符咒[/b],一段时间后符咒自动引爆,
召唤[b]乾坤剑[/b]穿透敌人。 召唤[b]乾坤剑[/b]穿透敌人。
乾坤剑造成$atk点伤害, 乾坤剑造成$atk点伤害,
每次格挡最多化解$count个子弹。" 每次格挡最多化解$count个子弹
体内最多储存$max点气力,
格挡时机越精确,成功率越高。"
cooldown = 0.0 cooldown = 0.0
debugRebuild = true debugRebuild = true
@@ -40,12 +43,15 @@ count = 900
[node name="name" parent="container/info" index="2"] [node name="name" parent="container/info" index="2"]
displayName = "扶桑元神" displayName = "扶桑元神"
quality = 4 quality = 4
typeTopic = 3
[node name="description" parent="container" index="2"] [node name="description" parent="container" index="2"]
text = "[center]进行[b]格挡[/b],化解飞来的子弹。 text = "[center]进行[b]格挡[/b],化解飞来的子弹。
每成功格挡一次,获得一点[b]气力[/b]。 每成功格挡一次,获得一点[b]气力[/b]。
每拥有一点气力,闪避穿过敌人时对其贴上[color=cyan]1[/color]层[b]符咒[/b],一段时间后符咒自动引爆, 每拥有一点气力,闪避穿过敌人时对其贴上层[b]符咒[/b],一段时间后符咒自动引爆,
召唤[b]乾坤剑[/b]穿透敌人。 召唤[b]乾坤剑[/b]穿透敌人。
乾坤剑造成[color=cyan]10[/color]点伤害, 乾坤剑造成[color=cyan]20[/color]点伤害,
每次格挡最多化解[color=cyan]1[/color]个子弹。[/center]" 每次格挡最多化解[color=cyan]1[/color]个子弹
体内最多储存[color=cyan]3[/color]点气力,
格挡时机越精确,成功率越高。[/center]"
+4 -2
View File
@@ -5,6 +5,8 @@ class_name ParrierBullet
var parryiedTimes: int = 0 var parryiedTimes: int = 0
var maxParryTimes: int = 1 var maxParryTimes: int = 1
var maxBallCount: int = 3
var atk: float = 0
func hitBullet(bullet: BulletBase): # 当前子弹与其他子弹相撞 func hitBullet(bullet: BulletBase): # 当前子弹与其他子弹相撞
if BulletTool.canDamage(bullet, launcher): # 其他子弹可以使当前子弹的发射者受伤吗? if BulletTool.canDamage(bullet, launcher): # 其他子弹可以使当前子弹的发射者受伤吗?
@@ -17,7 +19,7 @@ func hitBullet(bullet: BulletBase): # 当前子弹与其他子弹相撞
# 摧毁其他子弹 # 摧毁其他子弹
bullet.tryDestroy() bullet.tryDestroy()
var cycler = launcher.getOrCreateCycleTimer("parry", 2000, 100) var cycler = launcher.getOrCreateCycleTimer("parry", 2000, 100)
if len(cycler.bullets) < 5: # 玩家最多只能拥有5点气 if len(cycler.bullets) < maxBallCount: # 玩家最多只能拥有5点气
for b in BulletBase.generate( for b in BulletBase.generate(
ComponentManager.getBullet("ParryBall"), # 生成气的子弹 ComponentManager.getBullet("ParryBall"), # 生成气的子弹
launcher, launcher,
@@ -25,4 +27,4 @@ func hitBullet(bullet: BulletBase): # 当前子弹与其他子弹相撞
0 0
): ):
if b is ParryBallBullet: if b is ParryBallBullet:
pass b.atk = atk
+2
View File
@@ -2,6 +2,7 @@ extends BulletBase
class_name ParryBallBullet class_name ParryBallBullet
var cycler: CycleTimer var cycler: CycleTimer
var atk: float = 0
func spawn(): func spawn():
cycler = launcher.getOrCreateCycleTimer("parry") cycler = launcher.getOrCreateCycleTimer("parry")
@@ -20,6 +21,7 @@ func succeedToHit(_dmg: float, entity: EntityBase): # 当撞到敌人时
0 0
): ):
if bullet is QKSwordBullet: if bullet is QKSwordBullet:
bullet.baseDamage = atk
bullet.position = entity.texture.global_position + MathTool.sampleInRing(200, 500) bullet.position = entity.texture.global_position + MathTool.sampleInRing(200, 500)
bullet.tracer = entity bullet.tracer = entity
bullet.look_at(entity.getTrackingAnchor()) # 生成的乾坤剑面向敌人 bullet.look_at(entity.getTrackingAnchor()) # 生成的乾坤剑面向敌人
+1
View File
@@ -8,6 +8,7 @@ var spawnSpeed: float = 1
func register(): func register():
spawnSpeed = randf_range(0.25, 1.75) spawnSpeed = randf_range(0.25, 1.75)
animator.speed_scale = spawnSpeed animator.speed_scale = spawnSpeed
lifeTime /= spawnSpeed
func ai(): func ai():
if is_instance_valid(tracer) && !attackedTracer: if is_instance_valid(tracer) && !attackedTracer:
look_at(tracer.getTrackingAnchor()) look_at(tracer.getTrackingAnchor())
+8 -1
View File
@@ -1,6 +1,11 @@
@tool @tool
extends Weapon extends Weapon
func update(to: int, origin: Dictionary, _entity: EntityBase):
origin["atk"] += 5 * to * soulLevel
origin["count"] += 1 * (soulLevel - 1)
origin["max"] += 2 * (soulLevel - 1)
return origin
func attack(entity: EntityBase): func attack(entity: EntityBase):
for bullet in BulletBase.generate( for bullet in BulletBase.generate(
ComponentManager.getBullet("Parrier"), ComponentManager.getBullet("Parrier"),
@@ -9,5 +14,7 @@ func attack(entity: EntityBase):
entity.findWeaponAnchor("normal").angle_to_point(get_global_mouse_position()), entity.findWeaponAnchor("normal").angle_to_point(get_global_mouse_position()),
): ):
if bullet is ParrierBullet: if bullet is ParrierBullet:
pass bullet.atk = readStore("atk")
bullet.maxParryTimes = readStore("count")
bullet.maxBallCount = readStore("max")
return true return true