← 목록

mLua · Nemotron SDG 질문-응답 (SFT)

총 21,567개 · 페이지 17/719
🔀 랜덤
불러오는 중…

[task] | code [pass] | ❌ 탈락 [title] | RoomSharedMemory [question] | OnBeginPlay에서 RoomSharedMemory 객체의 BatchCreateVariableAndWait 메서드를 사용하여 "score"와 "level" 변수를 초기값 0과 1로 생성하는 스크립트를 작성해줘 [answer] | `RoomSharedMemory` 객체는 `_WorldInstanceService:GetSharedMemory`를 통해 얻어야 하며, `BatchCreateVariableAndWait`는 서버에서만 실행되는 메서드입니다. 요청하신 내용을 바탕으로 `OnBeginPlay`에서 "score"와 "level" 변수를 초기값으로 생성하는 스크립트는 다음과 같습니다. ```lua Property: [None] string MemoryName = "MySharedMemory" Method: [server only] void OnBegin [followup] | [followup_answer] | [scores] | helpfulness=3 correctness=0 coherence=4 complexity=3 verbosity=2 [judge_reason] | 참고 문서에 없는 _WorldInstanceService:GetSharedMemory API를 지어냈고, BatchCreateVariableAndWait의 반환 타입과 사용법이 문서와 일치하지 않아 정확도가 0점입니다. [source_doc] | Room끼리 공유하는 메모리를 나타내는 객체입니다. # Properties - **string Name [ReadOnly]** 공유 메모리의 이름입니다. # Methods - **Dictionary<string, SharedVariableResult> BatchCreateVariableAndWait(Dictionary<string, string> nameValues) [ServerOnly] [Yield]** 입력한 이름, 값 쌍들로 변수들을 할당합니다. 변수 이름과 결과 쌍을 담고 있는 table을 반환합니다. 수행하

[task] | instruction_following [pass] | ✅ 통과 [title] | WorldInstanceSharedMemory [question] | WorldInstanceSharedMemory의 동기(Wait)와 비동기(Async) 메서드 차이를 3문장 이내로 비교해서 설명하세요. [answer] | 동기(Wait) 메서드는 작업이 완료될 때까지 스크립트 실행을 중단하는 반면, 비동기(Async) 메서드는 작업 진행 중에도 스크립트 실행을 계속합니다. 비동기 메서드는 작업이 완료되면 콜백 함수를 호출하여 결과를 전달하며, 동기 메서드는 결과를 직접 반환합니다. [followup] | [followup_answer] | [scores] | helpfulness=4 correctness=4 coherence=4 complexity=3 verbosity=2 [judge_reason] | 참고 문서에 명시된 동기 메서드의 실행 중단 및 직접 반환, 비동기 메서드의 콜백 호출 특징을 정확하고 간결하게 설명했습니다. [source_doc] | 다. - **void ReleaseVariableAsync(string name, func<SharedMemoryResultCode> callbackFunction) [ServerOnly]** 변수 사용을 마칩니다. 해당 변수를 사용하는 곳이 더 이상 없으면 자동으로 삭제됩니다. 작업이 완료되면 결과 코드와 함께 callbackFunction으로 전달된 함수가 호출됩니다. - **SharedVariableResult SetVariableAndWait(string name, string value) [ServerOnly] [Yie

[task] | single_turn [pass] | ✅ 통과 [title] | Vector3 [question] | OnBeginPlay에서 Transform.Position을 참조 변수로 받아 x만 수정한 뒤, 다시 다른 Vector3 변수로 참조 변수를 덮어쓰면 엔티티의 최종 위치가 어떻게 결정되는지 예시 코드의 동작 원리를 설명해 주세요. [answer] | mLua의 Vector3은 레퍼런스 타입으로 동작합니다. `Transform.Position`을 변수에 대입하면 해당 위치 데이터를 직접 참조하게 되며, 이 참조 변수의 성분을 수정하면 엔티티의 위치가 즉시 변경됩니다. 질문하신 시나리오에서 **참조 변수를 다른 Vector3 변수로 덮어쓰는 동작**은 엔티티의 위치 변경에 영향을 주지 않습니다. 참조 변수 자체에 새 값을 대입하는 것은 기존에 참조하고 있던 엔티티의 위치 데이터와 연결을 끊는 것이기 때문입니다. ### 동작 원리 1. **참조 변수 생성**: `local p [followup] | [followup_answer] | [scores] | helpfulness=4 correctness=4 coherence=4 complexity=3 verbosity=2 [judge_reason] | 참고 문서의 예시 코드와 동작 원리를 정확히 해석하여, 참조 변수 대입과 성분 수정의 차이를 명확히 설명했으며, 올바른 위치 변경 방법도 문서에 근거하여 제시하였습니다. [source_doc] | # Operators - **Vector3 Addition(Vector3 left, Vector3 right) [Static]** 두 벡터를 더한 Vector3 객체를 생성해 반환합니다. - **Vector3 Division(Vector3 left, float right) [Static]** 벡터를 실수로 나눈 Vector3 객체를 생성해 반환합니다. - **boolean Equality(Vector3 left, Vector3 right) [Static]** 두 벡터가 같은지 비교합니다. 같으면 true, 그렇지 않으면

[task] | instruction_following [pass] | ✅ 통과 [title] | WorldInstanceSharedMemory [question] | CreateVariableAndWait, DeleteVariableAndWait, GetVariableAndWait, ReleaseVariableAndWait 메서드의 기능과 반환 타입을 표로 정리해서 출력하세요. [answer] | 요청하신 메서드들의 기능과 반환 타입을 아래 표에 정리했습니다. | 메서드 | 기능 | 반환 타입 | | :--- | :--- | :--- | | `CreateVariableAndWait` | 공유 변수를 할당합니다. 수행하는 동안 스크립트 실행을 중단합니다. | `SharedVariableResult` | | `DeleteVariableAndWait` | 공유 변수를 삭제합니다. 해당 변수를 사용 중인 곳이 있더라도 삭제됩니다. 수행하는 동안 스크립트 실행을 중단합니다. | `SharedMemoryResultCode` | | ` [followup] | [followup_answer] | [scores] | helpfulness=4 correctness=4 coherence=4 complexity=2 verbosity=2 [judge_reason] | 참고 문서의 API 설명과 반환 타입을 정확히 표로 정리하여 질문에 완벽하게 부응했습니다. [source_doc] | 다. 이미 있으면 기존 변수들의 값을 수정합니다. 변수 이름과 결과 쌍을 담고 있는 table을 반환합니다. 수행하는 동안 스크립트 실행을 중단합니다. - **void BatchSetVariableAsync(Dictionary<string, string> nameValues, func<Dictionary<string, SharedVariableResult>> callbackFunction) [ServerOnly]** 입력한 이름, 값 쌍들로 변수가 없으면 새 변수들을 할당합니다. 이미 있으면 기존 변수들의 값을 수정합니다. 작업

[task] | instruction_following [pass] | ❌ 탈락 [title] | WorldInstanceSharedMemory [question] | SetVariableAndWait 메서드를 사용하여 "testKey"에 "hello" 값을 저장하는 mLua 코드만 출력하고 설명은 주석으로 작성하세요. [answer] | ```lua -- WorldInstanceSharedMemory를 가져옵니다. local code, mem = _WorldInstanceService:GetSharedMemory("MemoryName") -- "testKey"에 "hello" 값을 저장합니다. -- 변수가 없으면 새로 생성되고, 이미 존재하면 값이 수정됩니다. -- [Yield] 메서드이므로 실행이 완료될 때까지 스크립트가 일시 정지됩니다. local result = mem:SetVariableAndWait("testKey", "hello") ``` [followup] | [followup_answer] | [scores] | helpfulness=3 correctness=2 coherence=4 complexity=3 verbosity=2 [judge_reason] | _WorldInstanceService와 GetSharedMemory 메서드가 문서에 없으며, SetVariableAndWait가 WorldInstanceSharedMemory 객체의 메서드인지 명확하지 않아 불필요한 API를 지어낸 것으로 판단됩니다. [source_doc] | 다. - **void ReleaseVariableAsync(string name, func<SharedMemoryResultCode> callbackFunction) [ServerOnly]** 변수 사용을 마칩니다. 해당 변수를 사용하는 곳이 더 이상 없으면 자동으로 삭제됩니다. 작업이 완료되면 결과 코드와 함께 callbackFunction으로 전달된 함수가 호출됩니다. - **SharedVariableResult SetVariableAndWait(string name, string value) [ServerOnly] [Yie

[task] | code [pass] | ❌ 탈락 [title] | SharedVariableInfo [question] | Name 이 "player_level" 인 SharedVariableInfo 를 조회하여 Value 를 number 로 변환해 출력하는 스크립트를 작성해줘 [answer] | `_WorldInstanceService:GetSharedMemory`로 공유 메모리를 가져오고, `mem:GetVariableAndWait("player_level")`을 호출하여 `SharedVariableInfo`를 조회합니다. 조회 결과의 `Value` 프로퍼티는 문자열(string) 타입이므로, `tonumber` 함수를 사용해 숫자(number)로 변환한 뒤 `log`로 출력합니다. ```lua Method: [server only] void OnBeginPlay() { local resultCode, mem = [followup] | [followup_answer] | [scores] | helpfulness=3 correctness=2 coherence=4 complexity=3 verbosity=2 [judge_reason] | 참고 문서에 없는 _WorldInstanceService 및 SharedMemory 관련 API를 지어내어 정확도가 낮으나, 질문 의도에 맞는 구조와 tonumber 변환 로직을 보여주어 유용함. [source_doc] | 공유 변수 정보입니다. # Properties - **string ETag [ReadOnly]** 변수를 업데이트 할 때 현재 DB에 저장된 값과 같을 경우에만 실제로 업데이트를 수행합니다. 여러 곳에서 동시에 업데이트를 시도했을 때 동시 다발적 덮어쓰기 현상을 막는데 유용하게 사용됩니다. nil이나 빈 문자열을 주면 무조건 업데이트를 수행합니다. 변수가 업데이트 되면 새로운 ETag가 만들어집니다. - **string Name [ReadOnly]** 변수 이름입니다. - **string Value [ReadOnly]**

[task] | single_turn [pass] | ❌ 탈락 [title] | RoomSharedMemory [question] | ETag를 이용해 동시성 문제를 해결할 때, ETag가 nil 또는 빈 문자열인 경우와 최신이 아닌 경우의 결과가 어떻게 다른가요? [answer] | ETag를 이용한 동시성 제어 시, ETag의 값에 따라 수정 작업의 결과가 다음과 같이 달라집니다. 1. **ETag가 nil 또는 빈 문자열인 경우** * 무조건 공유 변수의 값이 수정됩니다. * 기존 값과 충돌 여부와 관계없이 요청한 값으로 덮어쓰기가 수행됩니다. 2. **ETag가 최신이 아닌 경우 (오래된 ETag)** * 값이 수정되지 않습니다. * 수정 요청이 거부되며, `SharedMemoryResultCode.PreconditionFailed` 오류 코드가 반환됩니다 [followup] | [followup_answer] | [scores] | helpfulness=3 correctness=1 coherence=4 complexity=3 verbosity=2 [judge_reason] | 질문의 핵심 논리(nil/빈 문자열 vs 최신 아님)는 정확히 답변했으나, 코드 예시에서 문서와 규칙에 없는 _WorldInstanceService, GetSharedMemory, SharedVariableKeyInfo 생성자, .Code/.Info 프로퍼티 접근법 등을 지어내어 정확성이 낮음. [source_doc] | leKeyInfo의 ETag가 최신이 아니면 값을 수정하지 않습니다. ETag가 nil 또는 빈 문자열이면 무조건 값을 수정합니다. 변수 이름과 결과 쌍을 담고 있는 table을 반환합니다. 수행하는 동안 스크립트 실행을 중단합니다. - **void BatchUpdateVariableAsync(Dictionary<SharedVariableKeyInfo, string> keyValues, func<Dictionary<string, SharedVariableResult>> callbackFunction) [ServerOnly]**

[task] | single_turn [pass] | ❌ 탈락 [title] | SharedVariableKeyInfo [question] | ETag 값이 nil 또는 빈 문자열일 때와 실제 값이 있을 때 업데이트 동작이 어떻게 다른가요? [answer] | `ETag` 값에 따라 공유 변수 업데이트 동작이 다음과 같이 달라집니다. 1. **ETag가 실제 값일 때 (최신 ETag)** * 현재 데이터베이스(DB)에 저장된 값과 `ETag`가 일치해야만 실제로 업데이트가 수행됩니다. * 여러 곳에서 동시에 업데이트를 시도했을 때, 먼저 처리된 요청으로 인해 DB의 값(ETag)이 변경되면 나중에 도착한 요청은 ETag 불일치로 인해 업데이트가 실패합니다. 이를 통해 동시 다발적 덮어쓰기 현상을 방지할 수 있습니다. * 업데이트가 성공하면 새로운 `ET [followup] | [followup_answer] | [scores] | helpfulness=3 correctness=0 coherence=3 complexity=2 verbosity=2 [judge_reason] | 참고 문서에 없는 _WorldInstanceService, SharedMemoryResultCode, UpdateVariableAndWait 등 API를 지어내어 코드가 완전히 틀렸습니다. [source_doc] | 공유 변수를 식별하는 데 사용하는 정보입니다. # Properties - **string ETag** 변수를 업데이트 할 때 현재 DB에 저장된 값과 같을 경우에만 실제로 업데이트를 수행합니다. 여러 곳에서 동시에 업데이트를 시도했을 때 동시 다발적 덮어쓰기 현상을 막는데 유용하게 사용됩니다. nil이나 빈 문자열을 주면 무조건 업데이트를 수행합니다. 변수가 업데이트 되면 새로운 ETag가 만들어집니다. - **string Name** 변수 이름입니다. # Constructors - **SharedVariableKey

[task] | instruction_following [pass] | ✅ 통과 [title] | WorldInstanceSharedMemory [question] | BatchDeleteVariableAndWait와 BatchReleaseVariableAndWait의 동작 차이를 변수 삭제 시점 기준의 표로 정리해서 작성하세요. [answer] | `BatchDeleteVariableAndWait`와 `BatchReleaseVariableAndWait`는 모두 서버에서 실행되며, 입력한 이름의 목록(`List<string>`)을 받아 동작합니다. 두 메서드의 핵심 차이는 **변수가 실제로 사라지는(삭제되는) 시점**에 있습니다. * **BatchDeleteVariableAndWait**: 해당 변수를 다른 곳에서 사용 중이더라도 **즉시 강제로 삭제**합니다. * **BatchReleaseVariableAndWait**: 해당 변수에 대한 자신의 사용을 종료(rele [followup] | [followup_answer] | [scores] | helpfulness=4 correctness=4 coherence=4 complexity=3 verbosity=2 [judge_reason] | 문서에서 명시한 두 메서드의 삭제 시점 차이를 정확히 표로 정리하고, 표준 구문에 기반한 코드 예시까지 제공하여 질문에 충실히 답변했습니다. [source_doc] | WorldInstance끼리 공유하는 메모리입니다. # Properties - **string Name [ReadOnly]** 공유 메모리의 이름입니다. # Methods - **Dictionary<string, SharedVariableResult> BatchCreateVariableAndWait(Dictionary<string, string> nameValues) [ServerOnly] [Yield]** 입력한 이름, 값 쌍들로 변수들을 할당합니다. 변수 이름과 결과 쌍을 담고 있는 table을 반환합니다. 수행하

[task] | code [pass] | ❌ 탈락 [title] | RoomSharedMemory [question] | OnUpdate에서 매 프레임마다 RoomSharedMemory의 BatchSetVariableAndWait 메서드를 사용하여 "timer" 변수의 값을 1씩 증가시키는 스크립트를 작성해줘 [answer] | `BatchSetVariableAndWait`는 `[ServerOnly]` 및 `[Yield]` 속성을 가진 서버 전용 메서드입니다. `OnUpdate`는 매 프레임마다 호출되는 생명주기 메서드이며, 이 안에서 `WaitAnd` 계열(동기식 대기) 메서드를 호출하면 스크립트 실행이 중단(Yield)되어 매 프레임마다 정상적으로 처리가 진행되지 않을 수 있는 주의가 필요합니다. 요청하신 대로 `OnUpdate`에서 `BatchSetVariableAndWait`를 사용하여 "timer" 변수를 1씩 증가시키는 스크립트는 다음과 같습니 [followup] | [followup_answer] | [scores] | helpfulness=1 correctness=0 coherence=3 complexity=3 verbosity=3 [judge_reason] | 참고 문서에 존재하지 않는 _WorldInstanceService:GetSharedMemory API와 반환값 구조를 지어냈고, BatchSetVariableAndWait가 반환하는 결과 타입(SharedVariableResult)의 필드(Code)를 임의로 가정하여 문서와 일치하지 않는다. [source_doc] | Room끼리 공유하는 메모리를 나타내는 객체입니다. # Properties - **string Name [ReadOnly]** 공유 메모리의 이름입니다. # Methods - **Dictionary<string, SharedVariableResult> BatchCreateVariableAndWait(Dictionary<string, string> nameValues) [ServerOnly] [Yield]** 입력한 이름, 값 쌍들로 변수들을 할당합니다. 변수 이름과 결과 쌍을 담고 있는 table을 반환합니다. 수행하

[task] | single_turn [pass] | ✅ 통과 [title] | WorldInstanceSharedMemory [question] | ReleaseVariableAndWait 함수를 호출했을 때 변수가 즉시 삭제되지 않고 자동으로 삭제되는 조건은 무엇인가요? [answer] | `ReleaseVariableAndWait` 함수는 해당 공유 변수의 사용을 해제하는 역할을 합니다. 이 변수를 참조하고 있는 곳이 더 이상 없으면, 시스템이 자동으로 해당 변수를 삭제합니다. 즉, 즉시 삭제되는 것이 아니라, 해당 변수를 사용 중인 다른 참조가 모두 사라진 시점에 자동으로 삭제됩니다. [followup] | [followup_answer] | [scores] | helpfulness=4 correctness=4 coherence=4 complexity=1 verbosity=2 [judge_reason] | 참고 문서의 '해당 변수를 사용하는 곳이 더 이상 없으면 자동으로 삭제됩니다'라는 설명과 정확히 일치하며, 질문의 의도를 명확하게 설명하고 있습니다. [source_doc] | 다. 이미 있으면 기존 변수들의 값을 수정합니다. 변수 이름과 결과 쌍을 담고 있는 table을 반환합니다. 수행하는 동안 스크립트 실행을 중단합니다. - **void BatchSetVariableAsync(Dictionary<string, string> nameValues, func<Dictionary<string, SharedVariableResult>> callbackFunction) [ServerOnly]** 입력한 이름, 값 쌍들로 변수가 없으면 새 변수들을 할당합니다. 이미 있으면 기존 변수들의 값을 수정합니다. 작업

[task] | code [pass] | ✅ 통과 [title] | Vector4 [question] | Vector4 Addition, Subtraction, Multiply, Division, Equality를 사용하여 시작 위치와 목표 위치를 저장하고 OnUpdate에서 두 위치의 차이를 계산해 이동 속도와 방향을 결정하는 스크립트를 작성해줘 [answer] | 제공된 참고 문서에는 `Vector4`의 생성자(`Vector4(x, y, z, w)`)와 `x`, `y`, `z`, `w` 성분에 대한 접근 예시는 있으나, `Addition`, `Subtraction`, `Multiply`, `Division`, `Equality`와 같은 정적(Static) 메서드가 mLua(Lua 5.3) 코드에서 **구체적으로 어떻게 호출되는지(예: `Vector4.Add(a, b)`인지, `a + b` 연산자 오버로드인지 등)에 대한 문법이 명시되어 있지 않습니다.** 또한, `Vector4`가 엔티티의 [followup] | [followup_answer] | [scores] | helpfulness=3 correctness=3 coherence=4 complexity=3 verbosity=2 [judge_reason] | 참고 문서에 없는 생성자 문법이나 특정 호출 방식을 지어내지 않고, 문서의 Static 메서드 명세와 시스템 규칙의 표준 구문(OnUpdate, log 등)을 적절히 조합하여 합리적 가정을 명시한 예제를 제공했으나, Vector4가 3D 위치로 사용될 때의 제약이나 정확한 연산자 문법을 확인할 수 없어 완전한 구현은 불가능함을 명확히 지적한 점이 우수함 [source_doc] | - **Vector4 Addition(Vector4 left, Vector4 right) [Static]** 두 벡터를 더한 Vector4 객체를 생성해 반환합니다. - **Vector4 Division(Vector4 left, float right) [Static]** 벡터를 실수로 나눈 Vector4 객체를 생성해 반환합니다. - **boolean Equality(Vector4 left, Vector4 right) [Static]** 두 벡터가 같은지 비교합니다. 같으면 true, 그렇지 않으면 false를 반환합니다

[task] | instruction_following [pass] | ❌ 탈락 [title] | WorldInstanceSharedMemory [question] | ETag가 nil 또는 빈 문자열일 때 BatchUpdateVariableAndWait의 동작 방식을 코드만 출력하고 설명은 주석으로 작성하세요. [answer] | ```lua -- WorldInstanceSharedMemory를 얻어옵니다. local getMemResultCode, mem = _WorldInstanceService:GetSharedMemory("MemoryName") -- BatchUpdateVariableAndWait에 사용할 SharedVariableKeyInfo 목록을 준비합니다. local keyValues = {} -- 1. ETag가 nil인 경우: 무조건 값을 수정합니다. local keyInfoNil = SharedVariableKeyInfo("var_ni [followup] | [followup_answer] | [scores] | helpfulness=2 correctness=0 coherence=3 complexity=2 verbosity=2 [judge_reason] | _WorldInstanceService, SharedVariableKeyInfo 생성자, GetVariableAndWait 반환 구조 등 문서에 없는 API를 지어내고, BatchUpdateVariableAndWait 인자 타입(Dictionary<SharedVariableKeyInfo, string>)을 무시한 잘못된 table 구조를 사용했으므로 정확도가 0점입니다. [source_doc] | 다. 이미 있으면 기존 변수들의 값을 수정합니다. 변수 이름과 결과 쌍을 담고 있는 table을 반환합니다. 수행하는 동안 스크립트 실행을 중단합니다. - **void BatchSetVariableAsync(Dictionary<string, string> nameValues, func<Dictionary<string, SharedVariableResult>> callbackFunction) [ServerOnly]** 입력한 이름, 값 쌍들로 변수가 없으면 새 변수들을 할당합니다. 이미 있으면 기존 변수들의 값을 수정합니다. 작업

[task] | instruction_following [pass] | ✅ 통과 [title] | WorldInstanceSharedMemory [question] | ETag 검증 로직이 포함된 UpdateVariable 계열 메서드 두 가지의 동작 조건을 표로 정리하세요. [answer] | WorldInstanceSharedMemory에서 ETag 검증 로직이 포함된 `UpdateVariable` 계열 메서드는 동기 방식의 `UpdateVariableAndWait`와 비동기 방식의 `UpdateVariableAsync` 두 가지입니다. 두 메서드 모두 서버에서만 실행되며, `keyInfo`에 포함된 ETag 값을 기준으로 동작합니다. 두 메서드의 동작 조건은 다음과 같습니다. | 구분 | UpdateVariableAndWait | UpdateVariableAsync | | :--- | :--- | :--- | | [followup] | [followup_answer] | [scores] | helpfulness=4 correctness=4 coherence=4 complexity=3 verbosity=2 [judge_reason] | 참고 문서에 명시된 UpdateVariable 계열 메서드의 ETag 검증 로직과 동작 방식을 정확하고 명확한 표 형태로 정리하여 질문에 완벽히 부합합니다. [source_doc] | 다. - **void ReleaseVariableAsync(string name, func<SharedMemoryResultCode> callbackFunction) [ServerOnly]** 변수 사용을 마칩니다. 해당 변수를 사용하는 곳이 더 이상 없으면 자동으로 삭제됩니다. 작업이 완료되면 결과 코드와 함께 callbackFunction으로 전달된 함수가 호출됩니다. - **SharedVariableResult SetVariableAndWait(string name, string value) [ServerOnly] [Yie

[task] | two_turn [pass] | ❌ 탈락 [title] | SharedVariableKeyInfo [question] | 공유 변수의 동시성 문제를 해결하기 위해 `SharedVariableKeyInfo`의 `ETag` 속성을 어떻게 활용하나요? [answer] | `SharedVariableKeyInfo`의 `ETag` 속성은 공유 변수를 업데이트할 때 **동시 다발적 덮어쓰기(Concurrent Overwrite) 문제를 방지**하기 위해 사용됩니다. ### 핵심 원리 1. **조건부 업데이트**: `ETag`를 지정하면, 서버는 현재 DB에 저장된 `ETag` 값과 요청에 포함된 `ETag` 값이 **완전히 일치할 경우에만** 업데이트를 수행합니다. 2. **동시성 충돌 방지**: 여러 클라이언트나 서버 로직이 동시에 같은 공유 변수를 수정하려고 할 때, 먼저 업데이트된 요청이 새로운 [followup] | `ETag`가 `nil`이거나 빈 문자열일 때의 동작과, 업데이트 성공 시 새로운 `ETag`가 생성되는 과정을 확인하고 싶은데, 이를 반영한 `SharedVariableKeyInfo` 생성 및 업데이트 로직의 코드 예제를 보여주세요. [followup_answer] | `ETag`가 `nil`이거나 빈 문자열(`""`)일 때는 현재 DB의 상태와 무관하게 **무조건 업데이트**가 수행됩니다. 업데이트가 성공하면 자동으로 새로운 `ETag`가 발급되며, 이는 반환된 객체의 `Info.ETag`에 담깁니다. 아래 코드는 이 두 가지 동작(무조건 업데이트, 새 ETag 발급 확인)을 모두 반영한 예제입니다. ```lua -- 1. 공유 메모리 객체 가져오기 local code, mem = _WorldInstanceService:GetSharedMemory("MemoryName") -- 2. 현재 [scores] | helpfulness=1 correctness=1 coherence=3 complexity=2 verbosity=3 [judge_reason] | 문서에 없는 _WorldInstanceService, GetVariableAndWait, UpdateVariableAndWait, SharedMemoryResultCode 등 API와 프로퍼티를 지어내어 정확도가 매우 낮습니다. [source_doc] | 공유 변수를 식별하는 데 사용하는 정보입니다. # Properties - **string ETag** 변수를 업데이트 할 때 현재 DB에 저장된 값과 같을 경우에만 실제로 업데이트를 수행합니다. 여러 곳에서 동시에 업데이트를 시도했을 때 동시 다발적 덮어쓰기 현상을 막는데 유용하게 사용됩니다. nil이나 빈 문자열을 주면 무조건 업데이트를 수행합니다. 변수가 업데이트 되면 새로운 ETag가 만들어집니다. - **string Name** 변수 이름입니다. # Constructors - **SharedVariableKey

[task] | two_turn [pass] | ✅ 통과 [title] | WorldInstanceSharedMemory [question] | WorldInstanceSharedMemory 사용 시 준수해야 하는 작명 규칙과 수량·용량 제한이 무엇인가요? [answer] | WorldInstanceSharedMemory를 사용할 때 지켜야 할 작명 규칙과 제한 사항은 다음과 같습니다. ### 작명 규칙 공유 변수 이름은 아래 문자로만 구성할 수 있으며, 길이는 최소 1글자 이상, 최대 100글자까지 가능합니다. * 알파벳 대소문자 * 숫자 * 공백 * `_` (언더스코어), `\` (백슬래시), `-` (하이픈) ### 수량 및 용량 제한 * **생성 개수**: 한 월드당 생성 가능한 `WorldInstanceSharedMemory`는 최대 100개입니다. * **변수 용량**: 하나의 공유 변수에 [followup] | Batch 함수 호출 시 분당 최대 1,000회 제한에 포함되는 구체적인 호출 횟수 계산 방식과 예외 처리 코드를 어떻게 작성해야 하나요? [followup_answer] | 참고 문서에 따르면, Batch 함수 호출 시 분당 최대 1,000회 제한에 포함되는 구체적인 호출 횟수 계산 방식은 다음과 같습니다. **호출 횟수 계산 방식** * Batch 함수를 한 번 호출하여 100개의 공유 변수 값을 변경하는 경우, 함수 호출 횟수는 **100회**로 계산됩니다. * 즉, Batch 호출 자체는 1회로 보지 않고, 내부에서 처리되는 개별 공유 변수 변경 건수만큼 호출 횟수가 증가합니다. * 예: 10개의 월드 인스턴스가 동시에 각각 100번 호출하면 총 호출 횟수는 1,000회가 되어 분당 [scores] | helpfulness=4 correctness=4 coherence=4 complexity=3 verbosity=2 [judge_reason] | 참고 문서에 명시된 작명 규칙, 수량 및 용량 제한, 사용량 제한을 빠짐없이 정확히 서술했습니다. [source_doc] | # 제한 사항 **WorldInstanceService**를 사용할 때는 아래의 제한 사항을 염두에 두고 사용해야 합니다. #### 작명 규칙 WorldInstanceMemory와 공유 변수 이름은 아래 문자로만 작명할 수 있습니다. 최소 1글자 이상의 이름이어야 하며, 최대 100글자 이름일 수 있습니다. * **알파벳 대,소문자** * **숫자** * **공백** * **_, \\, -** #### 수량 및 용량 제한 * 한 월드 당 생성 가능한 WorldInstanceSharedMemory는 최대 **100개**입

[task] | code [pass] | ❌ 탈락 [title] | SharedVariableInfo [question] | ETag 가 nil 이거나 빈 문자열일 때만 Value 를 "initial" 로 초기화하는 로직을 가진 SharedVariableInfo 조작 스크립트를 작성해줘 [answer] | ```lua Property: [None] string MemoryName = "MyMemory" string VariableName = "MyVar" string InitialValue = "initial" Method: [server only] void InitializeVariableIfNeeded() { -- WorldInstanceSharedMemory 인스턴스를 가져옵니다. local code, mem = _WorldInstanceService:GetSharedMemory(self.MemoryName) [followup] | [followup_answer] | [scores] | helpfulness=1 correctness=1 coherence=3 complexity=3 verbosity=2 [judge_reason] | 참고 문서에 없는 _WorldInstanceService, SharedMemoryResultCode, GetVariableAndWait, CreateVariableAndWait, UpdateVariableAndWait, SharedVariableKeyInfo 등 API를 모두 지어내어 정합성이 매우 낮습니다. [source_doc] | 공유 변수 정보입니다. # Properties - **string ETag [ReadOnly]** 변수를 업데이트 할 때 현재 DB에 저장된 값과 같을 경우에만 실제로 업데이트를 수행합니다. 여러 곳에서 동시에 업데이트를 시도했을 때 동시 다발적 덮어쓰기 현상을 막는데 유용하게 사용됩니다. nil이나 빈 문자열을 주면 무조건 업데이트를 수행합니다. 변수가 업데이트 되면 새로운 ETag가 만들어집니다. - **string Name [ReadOnly]** 변수 이름입니다. - **string Value [ReadOnly]**

[task] | single_turn [pass] | ❌ 탈락 [title] | SharedVariableKeyInfo [question] | SharedVariableKeyInfo 객체를 생성할 때 이름과 ETag를 함께 전달하는 생성자와 기본 생성자 중 어떤 상황에서 각각을 사용해야 하나요? [answer] | `SharedVariableKeyInfo`는 공유 변수를 식별하는 데 사용되며, 생성 방식에 따라 사용 시나리오가 명확히 나뉩니다. ### 1. 기본 생성자: `SharedVariableKeyInfo()` * **사용 상황**: 공유 변수를 **최초로 생성(Insert)** 할 때 사용합니다. * **이유**: 기존에 존재하지 않는 변수를 만들 때 ETag가 필요하지 않기 때문입니다. `UpdateVariableAndWait` 메서드에서 이 객체를 전달하여 새 변수를 등록하는 흐름에서 활용됩니다. ### 2. 이름과 ET [followup] | [followup_answer] | [scores] | helpfulness=3 correctness=1 coherence=4 complexity=2 verbosity=2 [judge_reason] | 질문에 대한 개념 설명은 명확하나, 참고 문서에 없는 _WorldInstanceService, GetVariableAndWait, UpdateVariableAndWait, SharedMemoryResultCode 등 API와 메서드를 지어내어 정확도가 낮습니다. [source_doc] | 공유 변수를 식별하는 데 사용하는 정보입니다. # Properties - **string ETag** 변수를 업데이트 할 때 현재 DB에 저장된 값과 같을 경우에만 실제로 업데이트를 수행합니다. 여러 곳에서 동시에 업데이트를 시도했을 때 동시 다발적 덮어쓰기 현상을 막는데 유용하게 사용됩니다. nil이나 빈 문자열을 주면 무조건 업데이트를 수행합니다. 변수가 업데이트 되면 새로운 ETag가 만들어집니다. - **string Name** 변수 이름입니다. # Constructors - **SharedVariableKey

[task] | code [pass] | ❌ 탈락 [title] | SharedVariableInfo [question] | SharedVariableInfo 의 ETag 와 Name 을 로그에 기록하고, Value 가 숫자 형식인지 검사하는 유틸리티 함수를 포함한 스크립트를 작성해줘 [answer] | `SharedVariableInfo` 객체의 `ETag`, `Name`을 로그로 출력하고 `Value`가 숫자 형식인지 검사하는 유틸리티 함수를 포함한 스크립트입니다. 참고: mLua(또는 기반이 되는 Lua 5.3)에서는 `Value`가 문자열(`string`) 타입으로 저장되므로, 숫자 형식 검사는 문자열이 숫자로 해석될 수 있는지 확인하는 방식으로 구현해야 합니다. ```lua Method: [server only] void LogSharedVariableInfo(SharedVariableInfo info) { -- [followup] | [followup_answer] | [scores] | helpfulness=3 correctness=1 coherence=4 complexity=3 verbosity=2 [judge_reason] | 사용 예시에서 문서 및 시스템 규칙에 없는 `_WorldInstanceService`, `GetSharedMemory`, `GetVariableAndWait` API를 지어내어 정확도가 낮음 [source_doc] | 공유 변수 정보입니다. # Properties - **string ETag [ReadOnly]** 변수를 업데이트 할 때 현재 DB에 저장된 값과 같을 경우에만 실제로 업데이트를 수행합니다. 여러 곳에서 동시에 업데이트를 시도했을 때 동시 다발적 덮어쓰기 현상을 막는데 유용하게 사용됩니다. nil이나 빈 문자열을 주면 무조건 업데이트를 수행합니다. 변수가 업데이트 되면 새로운 ETag가 만들어집니다. - **string Name [ReadOnly]** 변수 이름입니다. - **string Value [ReadOnly]**

[task] | single_turn [pass] | ✅ 통과 [title] | WorldInstanceSharedMemory [question] | WorldInstanceSharedMemory에서 BatchSetVariableAsync와 BatchUpdateVariableAsync의 가장 큰 차이점이 무엇인가요? [answer] | `BatchSetVariableAsync`와 `BatchUpdateVariableAsync`의 가장 큰 차이점은 **변수 존재 여부에 대한 처리 방식**과 **ETag(동시성 제어) 적용 여부**입니다. 1. **변수 존재 여부 처리:** * `BatchSetVariableAsync`: 입력한 이름-값 쌍에 해당하는 변수가 **없으면 새 변수를 생성**하고, 이미 있으면 기존 값을 수정합니다. (Upsert 동작) * `BatchUpdateVariableAsync`: 입력한 `SharedVariableKey [followup] | [followup_answer] | [scores] | helpfulness=4 correctness=4 coherence=4 complexity=3 verbosity=2 [judge_reason] | 참고 문서의 API 명세와 정확히 일치하며, 두 메서드의 차이점(생성/수정 여부, ETag 처리)을 명확하고 간결하게 설명했습니다. [source_doc] | 다. 이미 있으면 기존 변수들의 값을 수정합니다. 변수 이름과 결과 쌍을 담고 있는 table을 반환합니다. 수행하는 동안 스크립트 실행을 중단합니다. - **void BatchSetVariableAsync(Dictionary<string, string> nameValues, func<Dictionary<string, SharedVariableResult>> callbackFunction) [ServerOnly]** 입력한 이름, 값 쌍들로 변수가 없으면 새 변수들을 할당합니다. 이미 있으면 기존 변수들의 값을 수정합니다. 작업

[task] | single_turn [pass] | ❌ 탈락 [title] | RoomSharedMemory [question] | UpdateVariableAndWait에서 ETag가 최신이 아닐 때 값을 수정하지 않는다는 구체적 의미는 무엇이며, 이 경우 반환되는 결과는 어떻게 되나요? [answer] | `UpdateVariableAndWait`에서 ETag가 최신이 아닐 때 값을 수정하지 않는다는 것은, **동시성 제어(optimistic concurrency control) 메커니즘**에 의한 것입니다. 구체적인 의미와 반환 결과는 다음과 같습니다. ### 1. ETag의 역할과 "최신이 아님"의 의미 공유 변수에는 값이 변경될 때마다 새로운 **ETag**(Entity Tag)가 발급됩니다. 이 ETag는 해당 변수의 현재 상태를 나타내는 일종의 버전 번호입니다. * **최신 ETag**: 마지막 조회(`GetVari [followup] | [followup_answer] | [scores] | helpfulness=3 correctness=1 coherence=4 complexity=4 verbosity=3 [judge_reason] | ETag 미스매치 시 반환되는 구체적인 오류 코드(PreconditionFailed)나 SharedVariableResult의 필드 구조(Info, ETag)가 문서에 없으며, _WorldInstanceService API도 문서에 없는 지어낸 내용입니다. [source_doc] | leKeyInfo의 ETag가 최신이 아니면 값을 수정하지 않습니다. ETag가 nil 또는 빈 문자열이면 무조건 값을 수정합니다. 변수 이름과 결과 쌍을 담고 있는 table을 반환합니다. 수행하는 동안 스크립트 실행을 중단합니다. - **void BatchUpdateVariableAsync(Dictionary<SharedVariableKeyInfo, string> keyValues, func<Dictionary<string, SharedVariableResult>> callbackFunction) [ServerOnly]**

[task] | instruction_following [pass] | ✅ 통과 [title] | WorldInstanceSharedMemory [question] | WorldInstanceSharedMemory의 작명 규칙을 허용된 문자 집합과 길이 제한을 포함하여 3문장 이내로 설명하세요. [answer] | 공유 변수 이름은 알파벳 대소문자, 숫자, 공백, 밑줄(_), 역슬래시(\), 하이픈(-)로만 구성할 수 있습니다. 이름의 길이는 최소 1글자 이상, 최대 100글자 이하로 설정해야 합니다. [followup] | [followup_answer] | [scores] | helpfulness=4 correctness=4 coherence=4 complexity=1 verbosity=2 [judge_reason] | 참고 문서에 명시된 허용 문자 집합과 길이 제한을 정확하고 간결하게 요약하여 질문에 완벽하게 부합합니다. [source_doc] | # 제한 사항 **WorldInstanceService**를 사용할 때는 아래의 제한 사항을 염두에 두고 사용해야 합니다. #### 작명 규칙 WorldInstanceMemory와 공유 변수 이름은 아래 문자로만 작명할 수 있습니다. 최소 1글자 이상의 이름이어야 하며, 최대 100글자 이름일 수 있습니다. * **알파벳 대,소문자** * **숫자** * **공백** * **_, \\, -** #### 수량 및 용량 제한 * 한 월드 당 생성 가능한 WorldInstanceSharedMemory는 최대 **100개**입

[task] | single_turn [pass] | ❌ 탈락 [title] | WorldInstanceSharedMemory [question] | 변수를 삭제할 때 해당 변수를 현재 사용 중인 다른 인스턴스나 스크립트가 있더라도 안전하게 삭제할 수 있는 함수는 무엇인가요? [answer] | 해당 변수를 현재 사용 중인 곳이 있더라도 삭제할 수 있는 함수는 `DeleteVariableAndWait`와 `DeleteVariableAsync`입니다. 두 함수 모두 문서상 "해당 변수를 사용 중인 곳이 있더라도 삭제됩니다"라고 명시되어 있어, 사용 중 여부 관계없이 안전하게 삭제할 수 있습니다. 1. **`DeleteVariableAndWait(string name)`** - 동기 방식(Blocking)으로, 삭제 작업이 완료될 때까지 스크립트 실행이 중단됩니다. - 삭제 결과를 나타내는 `SharedMemor [followup] | [followup_answer] | [scores] | helpfulness=3 correctness=1 coherence=4 complexity=2 verbosity=2 [judge_reason] | 정답 함수를 정확히 언급했으나, 예제 코드에서 문서에 없는 _WorldInstanceService API를 지어내어 정확도가 낮습니다. [source_doc] | 다. 이미 있으면 기존 변수들의 값을 수정합니다. 변수 이름과 결과 쌍을 담고 있는 table을 반환합니다. 수행하는 동안 스크립트 실행을 중단합니다. - **void BatchSetVariableAsync(Dictionary<string, string> nameValues, func<Dictionary<string, SharedVariableResult>> callbackFunction) [ServerOnly]** 입력한 이름, 값 쌍들로 변수가 없으면 새 변수들을 할당합니다. 이미 있으면 기존 변수들의 값을 수정합니다. 작업

[task] | code [pass] | ✅ 통과 [title] | SharedVariableKeyInfo [question] | 이름이 "PlayerScore"이고 ETag가 "abc123"인 SharedVariableKeyInfo 객체를 생성하여 반환하는 메서드를 작성해줘 [answer] | 사용자가 요청한 기능(이름과 ETag를 지정하여 `SharedVariableKeyInfo` 객체를 생성)를 수행하는 메서드를 작성합니다. `SharedVariableKeyInfo`는 문서에 명시된 대로 `SharedVariableKeyInfo(string name, string eTag)` 생성자를 지원합니다. 이 생성자를 사용하여 객체를 생성하고 반환하는 로직을 `Method: [server only]` 블록에 구현했습니다. ```lua Method: [server only] SharedVariableKeyInfo Create [followup] | [followup_answer] | [scores] | helpfulness=4 correctness=4 coherence=4 complexity=1 verbosity=2 [judge_reason] | 문서의 생성자 시그니처와 속성 정보를 정확히 사용하여 요청한 기능을 수행하는 코드를 간결하고 올바르게 작성했습니다. [source_doc] | 공유 변수를 식별하는 데 사용하는 정보입니다. # Properties - **string ETag** 변수를 업데이트 할 때 현재 DB에 저장된 값과 같을 경우에만 실제로 업데이트를 수행합니다. 여러 곳에서 동시에 업데이트를 시도했을 때 동시 다발적 덮어쓰기 현상을 막는데 유용하게 사용됩니다. nil이나 빈 문자열을 주면 무조건 업데이트를 수행합니다. 변수가 업데이트 되면 새로운 ETag가 만들어집니다. - **string Name** 변수 이름입니다. # Constructors - **SharedVariableKey

[task] | code [pass] | ❌ 탈락 [title] | RoomSharedMemory [question] | HandleTouchEvent 이벤트 핸들러에서 RoomSharedMemory의 BatchGetVariableAsync 메서드를 호출하여 "score" 변수의 값을 조회하고 callbackFunction에서 log로 출력하는 스크립트를 작성해줘 [answer] | 사용자가 요청한 `HandleTouchEvent` 이벤트 핸들러와 `RoomSharedMemory`의 `BatchGetVariableAsync` 메서드 조합에 대한 스크립트입니다. 참고 문서에 따르면 `BatchGetVariableAsync`는 `[ServerOnly]` 메서드이며, `RoomSharedMemory` 객체는 `_WorldInstanceService:GetSharedMemory`를 통해 얻습니다. `HandleTouchEvent`는 클라이언트에서 발생하지만, 서버 전용 메서드를 호출해야 하므로 서버 측에서 처리되는 [followup] | [followup_answer] | [scores] | helpfulness=3 correctness=2 coherence=3 complexity=3 verbosity=2 [judge_reason] | _WorldInstanceService:GetSharedMemory와 SharedVariableResult.Value가 문서에 없는 지어낸 API이며, HandleTouchEvent(클라이언트)에서 ServerOnly 메서드를 바로 호출하는 것은 실행 환경 충돌로 실제 동작이 불가함. [source_doc] | Room끼리 공유하는 메모리를 나타내는 객체입니다. # Properties - **string Name [ReadOnly]** 공유 메모리의 이름입니다. # Methods - **Dictionary<string, SharedVariableResult> BatchCreateVariableAndWait(Dictionary<string, string> nameValues) [ServerOnly] [Yield]** 입력한 이름, 값 쌍들로 변수들을 할당합니다. 변수 이름과 결과 쌍을 담고 있는 table을 반환합니다. 수행하

[task] | single_turn [pass] | ✅ 통과 [title] | WorldInstanceSharedMemory [question] | ETag가 최신이 아니면 값을 수정하지 않는다는 ETag 검증 로직은 어떤 함수에만 적용되나요? [answer] | ETag가 최신이 아니면 값을 수정하지 않는다는 ETag 검증 로직은 **공유 변수의 값을 수정하는 함수들**에만 적용됩니다. 참고 문서에 따르면, ETag 검증이 명시적으로 언급된 함수는 다음과 같습니다. 1. `BatchUpdateVariableAndWait(Dictionary<SharedVariableKeyInfo, string> keyValues) [ServerOnly] [Yield]` 2. `BatchUpdateVariableAsync(Dictionary<SharedVariableKeyInfo, string> key [followup] | [followup_answer] | [scores] | helpfulness=4 correctness=4 coherence=4 complexity=3 verbosity=2 [judge_reason] | 문서에 명시된 BatchUpdateVariable 계열 함수만 ETag 검증 대상임을 정확히 지적하고, 문서에 없는 단일 Update 함수 언급은 문서 부재를 명시하며 구분하여 설명하여 정확도와 유용성이 높음. [source_doc] | 다. 이미 있으면 기존 변수들의 값을 수정합니다. 변수 이름과 결과 쌍을 담고 있는 table을 반환합니다. 수행하는 동안 스크립트 실행을 중단합니다. - **void BatchSetVariableAsync(Dictionary<string, string> nameValues, func<Dictionary<string, SharedVariableResult>> callbackFunction) [ServerOnly]** 입력한 이름, 값 쌍들로 변수가 없으면 새 변수들을 할당합니다. 이미 있으면 기존 변수들의 값을 수정합니다. 작업

[task] | code [pass] | ✅ 통과 [title] | RoomSharedMemory [question] | RoomSharedMemory의 'PlayerScore' 공유 변수에 플레이어 점수를 저장하고, 점수 변경 시 'ScoreUpdate' 이벤트를 전송하는 스크립트를 작성해줘 [answer] | 제공된 참고 문서에는 `RoomSharedMemory`의 **제한 사항(작명 규칙, 수량 및 용량)**만 포함되어 있습니다. `RoomSharedMemory`에 접근하는 구체적인 API(공유 변수 생성, 값 저장/조회, 이벤트 전송 메서드)나 `ScoreUpdate`와 같은 커스텀 이벤트 전송에 대한 API 정의가 문서에 존재하지 않습니다. 따라서 요청하신 "공유 변수에 점수 저장" 및 "이벤트 전송"을 수행하는 **구체적인 mLua 코드를 작성할 수 없습니다.** 참고로, 문서에 명시된 제한 사항만 정리하면 다음과 같습니다: [followup] | [followup_answer] | [scores] | helpfulness=4 correctness=4 coherence=4 complexity=3 verbosity=2 [judge_reason] | 제공된 문서에 API 정의가 없어 코드 작성 불가임을 정확히 설명하고, 문서의 제한 사항만 엄격하게 인용하여 환상(hallucination)을 방지했습니다. [source_doc] | # 제한 사항 RoomSharedMemory를 사용할 때는 아래의 제한 사항을 염두에 두고 사용해야 합니다. #### 작명 규칙 RoomSharedMemory와 공유 변수 이름은 아래 문자로만 작명할 수 있습니다. 최소 1글자 이상의 이름이어야 하며, 최대 100글자 이름일 수 있습니다. * 알파벳 대,소문자 * 숫자 * 공백 * _, \, - #### 수량 및 용량 제한 * 한 월드 당 생성 가능한 RoomSharedMemory는 최대 100개입니다. * 하나의 공유 변수에 저장할 수 있는 최댓값은 80,000 byte

[task] | single_turn [pass] | ❌ 탈락 [title] | SharedVariableKeyInfo [question] | 공유 변수 업데이트가 성공적으로 완료된 후 ETag 값은 어떻게 처리되며, 이 새로운 값을 다시 사용해야 하는 이유에 대해 알려주세요. [answer] | 공유 변수 업데이트가 성공적으로 완료된 후, `UpdateVariableAndWait` 메서드의 반환값(`updated`) 안에 담긴 `Info.ETag` 필드에는 **새롭게 발급받은 최신 ETag**가 저장됩니다. 이 새로운 ETag 값을 즉시 확보하고 다음 업데이트 시점에 반드시 사용해야 하는 이유는 다음과 같습니다: 1. **동시성 제어 (Race Condition 방지)**: `ETag`는 현재 데이터베이스에 저장된 값의 버전 식별자 역할을 합니다. 업데이트 요청 시 서버는 요청한 `ETag`가 DB의 현재 `ETag`와 [followup] | [followup_answer] | [scores] | helpfulness=2 correctness=0 coherence=3 complexity=3 verbosity=3 [judge_reason] | 참고 문서에 없는 _WorldInstanceService, GetSharedMemory, UpdateVariableAndWait, SharedMemoryResultCode 등 API와 코드 예제를 지어냈으며, ETag 처리 논리도 문서의 'ETag 일치 시에만 업데이트'라는 제한적인 정보와 어긋난 구체적인 구현을 포함하고 있습니다. [source_doc] | 공유 변수를 식별하는 데 사용하는 정보입니다. # Properties - **string ETag** 변수를 업데이트 할 때 현재 DB에 저장된 값과 같을 경우에만 실제로 업데이트를 수행합니다. 여러 곳에서 동시에 업데이트를 시도했을 때 동시 다발적 덮어쓰기 현상을 막는데 유용하게 사용됩니다. nil이나 빈 문자열을 주면 무조건 업데이트를 수행합니다. 변수가 업데이트 되면 새로운 ETag가 만들어집니다. - **string Name** 변수 이름입니다. # Constructors - **SharedVariableKey

[task] | instruction_following [pass] | ✅ 통과 [title] | WorldInstanceSharedMemory [question] | 한 월드 당 생성 가능한 인스턴스 수, 변수당 최대 용량, 전체 메모리 용량, 이벤트 프로퍼티 용량 제한을 표로 정리하세요. [answer] | WorldInstanceSharedMemory의 수량 및 용량 제한은 다음과 같습니다. | 항목 | 제한 사항 | | :--- | :--- | | 월드당 생성 가능한 WorldInstanceSharedMemory 수 | 최대 100개 | | 공유 변수 1개당 최대 저장 용량 | 80,000 bytes | | WorldInstanceSharedMemory 1개당 전체 용량 | 80MiB | | 전송할 이벤트 프로퍼티 총 용량 | 80,000 bytes | [followup] | [followup_answer] | [scores] | helpfulness=4 correctness=4 coherence=4 complexity=2 verbosity=2 [judge_reason] | 참고 문서의 수량 및 용량 제한 정보를 요구된 항목별로 정확하고 간결하게 표로 정리하여 질문에 완벽하게 부합합니다. [source_doc] | # 제한 사항 **WorldInstanceService**를 사용할 때는 아래의 제한 사항을 염두에 두고 사용해야 합니다. #### 작명 규칙 WorldInstanceMemory와 공유 변수 이름은 아래 문자로만 작명할 수 있습니다. 최소 1글자 이상의 이름이어야 하며, 최대 100글자 이름일 수 있습니다. * **알파벳 대,소문자** * **숫자** * **공백** * **_, \\, -** #### 수량 및 용량 제한 * 한 월드 당 생성 가능한 WorldInstanceSharedMemory는 최대 **100개**입

[task] | code [pass] | ❌ 탈락 [title] | RoomSharedMemory [question] | RoomSharedMemory의 'RoomState' 공유 변수에 현재 방 상태(예: "Ready", "Playing")를 저장하고, 상태 변경 시 모든 클라이언트에 'RoomStateChange' 이벤트를 전송하는 스크립트를 작성해줘 [answer] | 제공된 참고 문서에는 `RoomSharedMemory`의 **제한 사항(작명 규칙, 수량 및 용량)** 만 명시되어 있습니다. 문서에는 `RoomSharedMemory`를 생성하거나, 공유 변수(예: `RoomState`)에 값을 설정하고, 다른 클라이언트로 동기화하는 **구체적인 API 메서드(예: `SetVariable`, `GetVariable` 등)나 이벤트 전송 메서드(예: `SendEvent`, `Broadcast` 등)가 언급되어 있지 않습니다.** 따라서 문서에 없는 API를 지어내어 코드를 작성하는 것은 불가능합 [followup] | [followup_answer] | [scores] | helpfulness=2 correctness=4 coherence=4 complexity=3 verbosity=2 [judge_reason] | 제공된 문서에 RoomSharedMemory의 구체적인 API(생성, 변수 설정, 이벤트 전송)가 없어 코드 작성이 불가함을 정확히 지적하고, 문서에 명시된 명명 규칙만 준수하여 유효성을 확인한 것이 정석적이며, 없는 API를 지어내지 않아 정확성이 높다. [source_doc] | # 제한 사항 RoomSharedMemory를 사용할 때는 아래의 제한 사항을 염두에 두고 사용해야 합니다. #### 작명 규칙 RoomSharedMemory와 공유 변수 이름은 아래 문자로만 작명할 수 있습니다. 최소 1글자 이상의 이름이어야 하며, 최대 100글자 이름일 수 있습니다. * 알파벳 대,소문자 * 숫자 * 공백 * _, \, - #### 수량 및 용량 제한 * 한 월드 당 생성 가능한 RoomSharedMemory는 최대 100개입니다. * 하나의 공유 변수에 저장할 수 있는 최댓값은 80,000 byte

← → 방향키로 페이지 이동 · 숫자 입력 후 Enter로 점프