Tôi có một trò chơi trực tuyến nơi người chơi có thể định hình thế giới theo một cách nào đó - ví dụ. Nhà ở của Ultima Online, nơi bạn có thể xây dựng nhà của mình trực tiếp trên một số phần của bản đồ thế giới. Đây là những thay đổi nên tồn tại theo thời gian như một phần của thế giới bền bỉ.
Đồng thời, nhóm thiết kế đang thêm nội dung mới và sửa đổi nội dung cũ để cải thiện và mở rộng trò chơi cho người chơi mới. Họ sẽ làm điều này trên một máy chủ phát triển trước trong quá trình thử nghiệm và sau đó phải hợp nhất công việc của họ với "công việc" của người chơi trên máy chủ trực tiếp.
Giả sử chúng tôi sửa các vấn đề thiết kế trò chơi - ví dụ. Người chơi chỉ có thể xây dựng trong các khu vực được chỉ định, vì vậy họ không bao giờ xung đột về mặt địa lý với các chỉnh sửa của nhà thiết kế - cách tốt nào để xử lý dữ liệu hoặc sắp xếp cấu trúc dữ liệu để tránh xung đột khi dữ liệu nhà thiết kế mới được hợp nhất với dữ liệu người chơi mới?
Ví dụ 1: người chơi tạo ra một loại vật phẩm mới và trò chơi gán ID 123456 cho nó. Tất cả các trường hợp của mục đó đều quay trở lại 123456. Bây giờ hãy tưởng tượng các nhà thiết kế trò chơi có một hệ thống tương tự, và một nhà thiết kế tạo ra một mục mới cũng được đánh số 123456. Làm thế nào để tránh điều này?
Ví dụ 2: ai đó tạo một mod phổ biến cung cấp cho tất cả những con rồng của bạn một giọng Pháp. Nó bao gồm một tập lệnh với một đối tượng mới được gọi là assignFrenchAccent
chúng sử dụng để gán các tài sản giọng nói mới cho mỗi đối tượng rồng. Nhưng bạn sắp triển khai DLC "Napoleon vs Smaug" có một đối tượng cùng tên - làm thế nào bạn có thể làm điều này mà không gặp nhiều vấn đề về dịch vụ khách hàng?
Tôi đã nghĩ đến các chiến lược sau:
- Bạn có thể sử dụng 2 tệp / thư mục / cơ sở dữ liệu riêng biệt, nhưng sau đó các thao tác đọc của bạn phức tạp đáng kể. "Hiển thị tất cả các mục" phải thực hiện một lần đọc trên DB thiết kế và một lần đọc trên DB của người chơi (và vẫn phải phân biệt giữa 2, bằng cách nào đó.)
- Bạn có thể sử dụng 2 không gian tên khác nhau trong một cửa hàng, vd. sử dụng các chuỗi làm khóa chính và tiền tố chúng với "THIẾT KẾ:" hoặc "PLAYER:", nhưng việc tạo các không gian tên đó có thể không tầm thường và các phụ thuộc không rõ ràng. (vd dữ liệu người chơi. Nhưng thông tin đó là vô hình đối với RDBMS và các liên kết khóa ngoài sẽ vượt qua 'chia', nghĩa là tất cả các công cụ và tập lệnh cần phải hoạt động rõ ràng xung quanh nó.)
- Bạn luôn có thể làm việc trên cùng một cơ sở dữ liệu được chia sẻ trong thời gian thực, nhưng hiệu suất có thể kém và nguy cơ thiệt hại cho dữ liệu người chơi có thể được nâng cao. Nó cũng không mở rộng cho các trò chơi chạy trên nhiều máy chủ với dữ liệu thế giới khác nhau.
- ... còn ý tưởng nào khác không?
Tôi nhận thấy rằng mặc dù điều này chủ yếu là vấn đề đối với các trò chơi trực tuyến, các khái niệm cũng có thể áp dụng cho việc sửa đổi, trong đó cộng đồng tạo ra các bản mod cùng lúc với việc các nhà phát triển vá trò chơi của họ. Có chiến lược nào được sử dụng ở đây để giảm cơ hội phá vỡ mod khi các bản vá mới xuất hiện không?
Tôi cũng đã gắn thẻ này là "kiểm soát phiên bản" bởi vì ở một cấp độ, đây là - 2 nhánh phát triển dữ liệu cần hợp nhất. Có lẽ một số hiểu biết có thể đến từ hướng đó.
EDIT - một số ví dụ được thêm vào ở trên để giúp làm rõ vấn đề. Tôi bắt đầu nghĩ rằng vấn đề thực sự là một trong những không gian tên, có thể được thực hiện trong một cửa hàng thông qua các khóa tổng hợp. Điều đó đơn giản hóa chiến lược hợp nhất, ít nhất. Nhưng có thể có những lựa chọn thay thế mà tôi không thấy.