P18-01-CODE: 原本関係モデル・旧値保全・Runtime保存と読取経路

This commit is contained in:
Agent Control Runner
2026-10-15 20:33:19 +09:00
parent 0084760ee0
commit b7a7cc01d4
13 changed files with 2132 additions and 29 deletions
+5 -9
View File
@@ -1056,14 +1056,10 @@ 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)
func(payload: Dictionary) -> bool: return _original_relationship_identities_valid(payload, restored_staff, restored_catalog)
)
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)
@@ -5387,7 +5383,7 @@ 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)
func(payload: Dictionary) -> bool: return _original_relationship_identities_valid(payload, staff_service, mvp_content_catalog)
)
relationship_service.configure_candidate_callback(
Callable(self, "_on_relationship_threshold_candidate")
@@ -6770,15 +6766,15 @@ 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:
func _original_relationship_identities_valid(payload: Dictionary, staff_registry: StaffService, catalog: MvpContentCatalog) -> 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 heroine_definition := catalog.get_entry(&"unique_characters", subject)
var rival_definition := 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) \