P18-01-CODE: 原本関係モデル・旧値保全・Runtime保存と読取経路
This commit is contained in:
@@ -330,6 +330,7 @@ func initialize(clock: SimulationKernel, state: Variant, seed := DEFAULT_WORLD_S
|
||||
register_command_executor(&"begin_staff_task", Callable(self, "_execute_begin_staff_task"))
|
||||
register_command_executor(&"progress_staff_task", Callable(self, "_execute_progress_staff_task"))
|
||||
register_command_executor(&"create_relationship", Callable(self, "_execute_create_relationship"))
|
||||
register_command_executor(&"register_original_relationship", Callable(self, "_execute_register_original_relationship"))
|
||||
register_command_executor(&"change_relationship", Callable(self, "_execute_change_relationship"))
|
||||
register_command_executor(&"attack_relationship_shield", Callable(self, "_execute_attack_relationship_shield"))
|
||||
register_command_executor(&"request_route_lock", Callable(self, "_execute_request_route_lock"))
|
||||
@@ -1054,8 +1055,15 @@ func _restore_snapshot_internal(snapshot: Dictionary, recovery_mode: bool) -> bo
|
||||
):
|
||||
return false
|
||||
var restored_relationships := RelationshipService.new()
|
||||
restored_relationships.configure_original_identity_validator(
|
||||
func(payload: Dictionary) -> bool: return _original_relationship_identities_valid(payload, restored_staff)
|
||||
)
|
||||
if not restored_relationships.restore_snapshot(runtime_data[&"relationships"]):
|
||||
return false
|
||||
for relationship: RelationshipState in restored_relationships.get_relationships():
|
||||
for actor_id: StringName in [relationship.actor_a_id, relationship.actor_b_id]:
|
||||
if actor_id != &"player" and not restored_staff.has_staff(actor_id) and not restored_guests.has_guest(actor_id):
|
||||
return false
|
||||
var restored_events := EventService.new()
|
||||
for raw_definition: Variant in runtime_data[&"event_definitions"]:
|
||||
var definition := EventDefinition.from_variant(raw_definition)
|
||||
@@ -5378,6 +5386,9 @@ func _initialize_s4_relationship_events() -> void:
|
||||
func _configure_relationship_event_boundaries() -> void:
|
||||
if relationship_service == null or event_service == null:
|
||||
return
|
||||
relationship_service.configure_original_identity_validator(
|
||||
func(payload: Dictionary) -> bool: return _original_relationship_identities_valid(payload, staff_service)
|
||||
)
|
||||
relationship_service.configure_candidate_callback(
|
||||
Callable(self, "_on_relationship_threshold_candidate")
|
||||
)
|
||||
@@ -6759,6 +6770,30 @@ func _execute_progress_staff_task(command: SimulationCommand) -> CommandResult:
|
||||
result.command_id = command.command_id
|
||||
return result
|
||||
|
||||
func _original_relationship_identities_valid(payload: Dictionary, staff_registry: StaffService) -> bool:
|
||||
if payload.get("protagonist_id") != "player" or staff_registry == null:
|
||||
return false
|
||||
var subject := StringName(payload.get("subject_id", ""))
|
||||
var rival := StringName(payload.get("rival_id", ""))
|
||||
if subject == &"player" or rival == &"player" or subject == rival or not staff_registry.has_staff(subject):
|
||||
return false
|
||||
var heroine_definition := mvp_content_catalog.get_entry(&"unique_characters", subject)
|
||||
var rival_definition := mvp_content_catalog.get_entry(&"unique_characters", rival)
|
||||
var subject_staff := staff_registry.get_staff(subject)
|
||||
return subject_staff.employment_kind == StaffRuntime.EmploymentKind.UNIQUE \
|
||||
and heroine_definition.get(&"role_id") == String(subject_staff.role_id) \
|
||||
and heroine_definition.get(&"character_kind") == "heroine" \
|
||||
and rival_definition.get(&"character_kind") == "rival" \
|
||||
and heroine_definition.get(&"counterpart_id") == String(rival) \
|
||||
and rival_definition.get(&"counterpart_id") == String(subject)
|
||||
|
||||
|
||||
func _execute_register_original_relationship(command: SimulationCommand) -> CommandResult:
|
||||
var result := relationship_service.register_original_relationship(command.payload)
|
||||
result.command_id = command.command_id
|
||||
return result
|
||||
|
||||
|
||||
func _execute_create_relationship(command: SimulationCommand) -> CommandResult:
|
||||
var actor_a_id := StringName(command.payload.get(&"actor_a_id", command.payload.get("actor_a_id", "")))
|
||||
var actor_b_id := StringName(command.payload.get(&"actor_b_id", command.payload.get("actor_b_id", "")))
|
||||
@@ -10859,6 +10894,7 @@ func get_staff_management_report() -> Dictionary:
|
||||
&"can_edit": block_reason.is_empty(),
|
||||
&"assignment_block_reason": block_reason,
|
||||
&"unique_contract": _staff_unique_contract_report(staff),
|
||||
&"original_relationship": relationship_service.get_original_relationship(staff.staff_id),
|
||||
})
|
||||
var facilities: Array[Dictionary] = []
|
||||
for facility: FacilityInstance in facility_service.get_instances():
|
||||
|
||||
Reference in New Issue
Block a user