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:
@@ -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
|
||||||
|
|||||||
@@ -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]"
|
||||||
|
|||||||
@@ -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,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()) # 生成的乾坤剑面向敌人
|
||||||
|
|||||||
@@ -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())
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user