P18-01-CODE: 原本関係モデル・旧値保全・Runtime保存と読取経路
This commit is contained in:
@@ -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) \
|
||||
|
||||
Reference in New Issue
Block a user