修复初始编队生成:对入参建可写副本再补发 id
- Disciple.create 强制要求 data 含 id,且 INITIAL_ROSTER 为 const 常量: 原实现先 create 后补 id 导致 5 人全部创建失败 - 改为 duplicate() 副本上写入 _master_id 发号,避免污染常量 - INITIAL_ROSTER 补手写 id 占位字段(实际以发号器为准)
This commit is contained in:
@@ -1,6 +1,4 @@
|
|||||||
# 初始版本不提供添加弟子的接口
|
# 初始版本不提供添加弟子的接口
|
||||||
|
|
||||||
|
|
||||||
class_name DiscipleManager
|
class_name DiscipleManager
|
||||||
extends Node
|
extends Node
|
||||||
|
|
||||||
@@ -14,6 +12,7 @@ const INITIAL_ROSTER := [
|
|||||||
# 1 玄真(宗主):修士·炼气9层,五行全高,炼丹3级
|
# 1 玄真(宗主):修士·炼气9层,五行全高,炼丹3级
|
||||||
{
|
{
|
||||||
"name": "玄真",
|
"name": "玄真",
|
||||||
|
"id" : 1,
|
||||||
"metal": 45, "wood": 38, "water": 22, "fire": 31, "earth": 19,
|
"metal": 45, "wood": 38, "water": 22, "fire": 31, "earth": 19,
|
||||||
"efficiency": 85,
|
"efficiency": 85,
|
||||||
"realm_level": 1, "sub_realm_level": 9,
|
"realm_level": 1, "sub_realm_level": 9,
|
||||||
@@ -23,6 +22,7 @@ const INITIAL_ROSTER := [
|
|||||||
# 2 凌霄:修士·炼气4层,金火旺
|
# 2 凌霄:修士·炼气4层,金火旺
|
||||||
{
|
{
|
||||||
"name": "凌霄",
|
"name": "凌霄",
|
||||||
|
"id" : 2,
|
||||||
"metal": 62, "wood": 12, "water": 15, "fire": 44, "earth": 20,
|
"metal": 62, "wood": 12, "water": 15, "fire": 44, "earth": 20,
|
||||||
"efficiency": 76,
|
"efficiency": 76,
|
||||||
"realm_level": 1, "sub_realm_level": 4,
|
"realm_level": 1, "sub_realm_level": 4,
|
||||||
@@ -32,6 +32,7 @@ const INITIAL_ROSTER := [
|
|||||||
# 3 青禾:凡人带灵根(木47≥20 可修炼破境),药草天赋
|
# 3 青禾:凡人带灵根(木47≥20 可修炼破境),药草天赋
|
||||||
{
|
{
|
||||||
"name": "青禾",
|
"name": "青禾",
|
||||||
|
"id" : 3,
|
||||||
"metal": 8, "wood": 47, "water": 25, "fire": 12, "earth": 10,
|
"metal": 8, "wood": 47, "water": 25, "fire": 12, "earth": 10,
|
||||||
"efficiency": 68,
|
"efficiency": 68,
|
||||||
"realm_level": 0, "sub_realm_level": 1,
|
"realm_level": 0, "sub_realm_level": 1,
|
||||||
@@ -41,6 +42,7 @@ const INITIAL_ROSTER := [
|
|||||||
# 4 阿福:凡人杂役(无灵根,五行均<20)
|
# 4 阿福:凡人杂役(无灵根,五行均<20)
|
||||||
{
|
{
|
||||||
"name": "阿福",
|
"name": "阿福",
|
||||||
|
"id" : 4,
|
||||||
"metal": 5, "wood": 12, "water": 8, "fire": 9, "earth": 10,
|
"metal": 5, "wood": 12, "water": 8, "fire": 9, "earth": 10,
|
||||||
"efficiency": 41,
|
"efficiency": 41,
|
||||||
"realm_level": 0, "sub_realm_level": 1,
|
"realm_level": 0, "sub_realm_level": 1,
|
||||||
@@ -50,6 +52,7 @@ const INITIAL_ROSTER := [
|
|||||||
# 5 阿禄:凡人杂役(无灵根)
|
# 5 阿禄:凡人杂役(无灵根)
|
||||||
{
|
{
|
||||||
"name": "阿禄",
|
"name": "阿禄",
|
||||||
|
"id" : 5,
|
||||||
"metal": 3, "wood": 6, "water": 5, "fire": 8, "earth": 15,
|
"metal": 3, "wood": 6, "water": 5, "fire": 8, "earth": 15,
|
||||||
"efficiency": 35,
|
"efficiency": 35,
|
||||||
"realm_level": 0, "sub_realm_level": 1,
|
"realm_level": 0, "sub_realm_level": 1,
|
||||||
@@ -61,16 +64,16 @@ const INITIAL_ROSTER := [
|
|||||||
var _disciples: Array[Disciple] = [] # 弟子列表
|
var _disciples: Array[Disciple] = [] # 弟子列表
|
||||||
var _master_id: int = 0 # 管理器的发号计数,id 的唯一来源
|
var _master_id: int = 0 # 管理器的发号计数,id 的唯一来源
|
||||||
|
|
||||||
# ---- 工厂 ----
|
func _enter_tree() -> void:
|
||||||
|
pass
|
||||||
|
|
||||||
|
# ---- 工厂 ----
|
||||||
# 初始编队(复用 _create_from_data)
|
# 初始编队(复用 _create_from_data)
|
||||||
func spawn_initial_roster() -> Array[Disciple]:
|
func spawn_initial_roster() -> void:
|
||||||
for data in INITIAL_ROSTER:
|
for data in INITIAL_ROSTER:
|
||||||
var disciple = _create_from_data(data)
|
var disciple = _create_from_data(data)
|
||||||
if disciple != null:
|
if disciple != null:
|
||||||
add_disciple(disciple)
|
add_disciple(disciple)
|
||||||
# _disciples.append(disciple)
|
|
||||||
# emit_signal("disciple_added", disciple)
|
|
||||||
else:
|
else:
|
||||||
push_error("Failed to spawn disciple from data: %s" % data)
|
push_error("Failed to spawn disciple from data: %s" % data)
|
||||||
pass
|
pass
|
||||||
@@ -78,14 +81,14 @@ func spawn_initial_roster() -> Array[Disciple]:
|
|||||||
# 补 id → Disciple.create()
|
# 补 id → Disciple.create()
|
||||||
# 从数据字典创建 Disciple 实例,若失败返回 null
|
# 从数据字典创建 Disciple 实例,若失败返回 null
|
||||||
func _create_from_data(data: Dictionary) -> Disciple:
|
func _create_from_data(data: Dictionary) -> Disciple:
|
||||||
var disciple := Disciple.create(data)
|
var copy := data.duplicate() # 可写副本(浅拷贝,顶层加键足够)
|
||||||
|
copy["id"] = _master_id
|
||||||
|
_master_id += 1
|
||||||
|
var disciple := Disciple.create(copy)
|
||||||
if disciple == null:
|
if disciple == null:
|
||||||
push_error("Failed to create disciple from data: %s" % data)
|
push_error("Failed to create disciple from data: %s" % data)
|
||||||
return null
|
return null
|
||||||
disciple.id = _master_id
|
|
||||||
_master_id += 1
|
|
||||||
return disciple
|
return disciple
|
||||||
pass
|
|
||||||
|
|
||||||
# ---- 仓储 ----
|
# ---- 仓储 ----
|
||||||
|
|
||||||
@@ -159,5 +162,3 @@ func to_dict():
|
|||||||
|
|
||||||
func load_from_dict():
|
func load_from_dict():
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1 @@
|
|||||||
|
uid://bstiea1nx61b8
|
||||||
Reference in New Issue
Block a user