mirror of
https://github.com/Rundll86/Dog-Lynx-And-HCN.git
synced 2026-05-27 22:41:56 +08:00
feat(武器系统): 添加武器升华选项功能
实现武器升华选项系统,允许为武器添加可选的强化效果。主要修改包括: 1. 新增 SublimateOption 类用于定义升华选项 2. 在 Weapon 类中添加 storeExtra 字典和相关方法用于存储额外属性 3. 为 Tree 武器实现具体的升华选项 4. 添加调试标记 debugRebuild
This commit is contained in:
@@ -70,6 +70,7 @@ descriptionTemplate = "进行[b]格挡[/b],化解敌人的攻击。
|
|||||||
sources = Array[String](["Nine Sols", "Terraria"])
|
sources = Array[String](["Nine Sols", "Terraria"])
|
||||||
tease = "卸劲反伤"
|
tease = "卸劲反伤"
|
||||||
cooldown = 250.0
|
cooldown = 250.0
|
||||||
|
debugRebuild = true
|
||||||
|
|
||||||
[node name="avatar" parent="container/info" parent_id_path=PackedInt32Array(1625294072) index="0" unique_id=1021985889]
|
[node name="avatar" parent="container/info" parent_id_path=PackedInt32Array(1625294072) index="0" unique_id=1021985889]
|
||||||
texture = ExtResource("3_nwamk")
|
texture = ExtResource("3_nwamk")
|
||||||
|
|||||||
@@ -1,6 +1,21 @@
|
|||||||
@tool
|
@tool
|
||||||
extends Weapon
|
extends Weapon
|
||||||
|
|
||||||
|
func sublimateOptions() -> Array[SublimateOption]:
|
||||||
|
return [
|
||||||
|
SublimateOption.new("健体·阳", "格挡次数+1", func(w: Weapon, _e): w.addStoreExtra("count", 1)),
|
||||||
|
SublimateOption.new("健体·阴", "气力上限+1", func(w: Weapon, _e): w.addStoreExtra("max", 1)),
|
||||||
|
SublimateOption.new("引气入体", "乾坤剑伤害+6", func(w: Weapon, _e): w.addStoreExtra("atk", 6)),
|
||||||
|
SublimateOption.new("献祭", "乾坤剑伤害-8,但弹反概率+4%",
|
||||||
|
func(w: Weapon, _e):
|
||||||
|
w.addStoreExtra("atk", -10)
|
||||||
|
w.addStoreExtra("rate", 0.05),
|
||||||
|
),
|
||||||
|
SublimateOption.new("亏心", "扣除你的所有幸运,每点幸运增加1%弹反概率",
|
||||||
|
func(w: Weapon, e: EntityBase):
|
||||||
|
w.addStoreExtra("rate", e.fields[FieldStore.Entity.LUCK_VALUE]),
|
||||||
|
),
|
||||||
|
]
|
||||||
func update(to: int, origin: Dictionary, _entity: EntityBase):
|
func update(to: int, origin: Dictionary, _entity: EntityBase):
|
||||||
origin["atk"] += 2 * to * soulLevel
|
origin["atk"] += 2 * to * soulLevel
|
||||||
origin["count"] += 1 * (soulLevel - 1)
|
origin["count"] += 1 * (soulLevel - 1)
|
||||||
|
|||||||
@@ -0,0 +1,15 @@
|
|||||||
|
class_name SublimateOption
|
||||||
|
|
||||||
|
var displayName: String = "升华"
|
||||||
|
var description: String = "描述"
|
||||||
|
var executor: Callable = func(_weapon: Weapon, _entity: EntityBase): return
|
||||||
|
|
||||||
|
func _init(displayNames: String, descriptions: String, executors: Callable):
|
||||||
|
displayName = displayNames
|
||||||
|
description = descriptions
|
||||||
|
executor = executors
|
||||||
|
|
||||||
|
func apply(entity: EntityBase, index: int):
|
||||||
|
var weapon = entity.weapons[index]
|
||||||
|
if weapon is Weapon:
|
||||||
|
executor.call(weapon, entity)
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
uid://8e7whqgtnl5w
|
||||||
@@ -54,6 +54,7 @@ var chargedTime: float = 0
|
|||||||
var attackSpeed: float = 1
|
var attackSpeed: float = 1
|
||||||
var looping: bool = false
|
var looping: bool = false
|
||||||
var autoUpdate: bool = false
|
var autoUpdate: bool = false
|
||||||
|
var storeExtra: Dictionary = {}
|
||||||
|
|
||||||
func _ready():
|
func _ready():
|
||||||
cooldownTimer = CooldownTimer.new()
|
cooldownTimer = CooldownTimer.new()
|
||||||
@@ -201,8 +202,8 @@ func buildDescription(showNext: bool = false) -> String:
|
|||||||
text = "[color=cyan]%s[/color]" % data
|
text = "[color=cyan]%s[/color]" % data
|
||||||
result = result.replace("$" + key, text)
|
result = result.replace("$" + key, text)
|
||||||
return result
|
return result
|
||||||
func readStore(key: String, default: Variant = null):
|
func readStore(key: String):
|
||||||
return store.get(key, default)
|
return store.get(key, 0) + readStoreExtra(key)
|
||||||
func playSound(sound: String):
|
func playSound(sound: String):
|
||||||
var body = sounds.get_node_or_null(sound)
|
var body = sounds.get_node_or_null(sound)
|
||||||
if body is AudioStreamPlayer2D:
|
if body is AudioStreamPlayer2D:
|
||||||
@@ -241,8 +242,16 @@ func exitLoop(entity: EntityBase):
|
|||||||
if !looping: return
|
if !looping: return
|
||||||
looping = false
|
looping = false
|
||||||
loopExit(entity)
|
loopExit(entity)
|
||||||
|
func addStoreExtra(key: String, value: float):
|
||||||
|
if !storeExtra.has(key):
|
||||||
|
storeExtra[key] = 0
|
||||||
|
storeExtra[key] += value
|
||||||
|
func readStoreExtra(key: String):
|
||||||
|
return storeExtra.get(key, 0)
|
||||||
|
|
||||||
# 抽象
|
# 抽象
|
||||||
|
func sublimateOptions() -> Array[SublimateOption]:
|
||||||
|
return [] as Array[SublimateOption]
|
||||||
func update(_to: int, origin: Dictionary, _entity: EntityBase):
|
func update(_to: int, origin: Dictionary, _entity: EntityBase):
|
||||||
return origin
|
return origin
|
||||||
func loopStart(_entity: EntityBase):
|
func loopStart(_entity: EntityBase):
|
||||||
|
|||||||
Reference in New Issue
Block a user