플레이어가 어떤 방식 으로든 세상을 형성 할 수있는 온라인 게임이 있습니다 (예 : Ultima Online의 주택으로, 세계지도의 특정 부분에 직접 주택을 건설 할 수 있습니다. 이러한 변화는 지속적 세계의 일부로 시간이 지남에 따라 지속되어야하는 변화입니다.
동시에 디자인 팀은 새로운 플레이어를 위해 게임을 개선하고 확장하기 위해 새로운 콘텐츠를 추가하고 오래된 콘텐츠를 수정하고 있습니다. 테스트하는 동안 개발 서버에서 먼저이 작업을 수행 한 다음 작업을 라이브 서버의 플레이어 "작업"과 병합해야합니다.
게임 디자인 문제를 해결한다고 가정합니다 (예 : 플레이어는 지정된 영역에서만 빌드 할 수 있으므로 디자이너 편집과 지리적으로 충돌하지 않습니다. 새로운 디자이너 데이터가 새로운 플레이어 데이터와 병합 될 때 충돌을 피하기 위해 데이터를 처리하거나 데이터 구조를 배열하는 좋은 방법은 무엇입니까?
예 1 : 플레이어가 새로운 유형의 아이템을 제작하고 게임에 ID 123456이 할당됩니다. 해당 항목의 인스턴스는 모두 123456으로 다시 나타납니다. 이제 게임 디자이너가 비슷한 시스템을 가지고 있고 디자이너가 123456이라는 새 항목을 생성한다고 상상해보십시오. 어떻게 피할 수 있습니까?
예 2 : 누군가가 모든 드래곤에게 프랑스 악센트를주는 인기있는 모드를 만듭니다. 여기에는 assignFrenchAccent
각 용 객체에 새 음성 자산을 할당하는 데 사용되는 새 객체가 포함 된 스크립트가 포함되어 있습니다 . 그러나 같은 이름의 개체를 가진 "Napoleon vs Smaug"DLC를 배포하려고합니다. 고객 서비스 문제없이이 작업을 어떻게 수행 할 수 있습니까?
나는 다음과 같은 전략을 생각했습니다.
- 2 개의 개별 파일 / 디렉토리 / 데이터베이스를 사용할 수 있지만 읽기 작업이 상당히 복잡합니다. "모든 항목 표시"는 디자이너 DB에서 하나의 읽기와 플레이어 DB에서 하나의 읽기를 수행해야합니다 (여전히 2를 구분해야합니다).
- 예를 들어, 한 상점에서 2 개의 서로 다른 네임 스페이스를 사용할 수 있습니다. 문자열을 기본 키로 사용하고 "DESIGN :"또는 "PLAYER :"로 접두사를 붙이지 만 네임 스페이스를 만드는 것은 쉽지 않으며 종속성이 명확하지 않습니다. (예 : RDBMS에서는 문자열을 기본 키로 효율적으로 사용하지 못할 수 있습니다. 정수를 사용하고 특정 숫자 (예 : 1 백만) 아래의 모든 기본 키를 디자이너 데이터로 할당 할 수 있으며 그 위의 모든 것은 그러나이 정보는 RDBMS에 보이지 않으며 외래 키 링크는 '분할'을 가로 지르므로 모든 툴링 및 스크립트가 명시 적으로 해결해야합니다.)
- 항상 동일한 공유 데이터베이스에서 실시간으로 작업 할 수 있지만 성능이 저하되고 플레이어 데이터의 손상 위험이 향상 될 수 있습니다. 또한 세계 데이터가 다른 두 대 이상의 서버에서 실행되는 게임으로 확장되지 않습니다.
- ... 다른 아이디어?
온라인 게임에서는 이것이 주로 문제이지만 개념이 모딩에도 적용될 수 있습니다. 커뮤니티에서 개발자가 게임을 패치하는 동시에 모드를 만듭니다. 새로운 패치가 나올 때 모드가 깨질 가능성을 줄이기 위해 여기에 어떤 전략이 사용됩니까?
또한 한 수준에서 병합이 필요한 데이터 개발의 두 가지 분기이기 때문에이 버전을 "버전 제어"로 태그 지정했습니다. 아마도 그 통찰력이 그 방향에서 나올 수도 있습니다.
편집-문제를 명확히하기 위해 위에 추가 된 몇 가지 예. 문제가 실제로 이름 공간화 중 하나라고 생각하기 시작했습니다. 이는 복합 키를 통해 상점에서 구현할 수 있습니다. 그것은 적어도 병합 전략을 단순화시킵니다. 그러나 내가 보지 못하는 대안이있을 수 있습니다.