WorldConfig

# 학습 과정 소개

메이플스토리 월드는 WorldConfig에서 다양한 월드 설정 기능을 제공합니다. WorldConfig의 기능은 제작 중인 월드에 전반적인 영향을 끼칩니다.

##### 참고 가이드

  * [실행 제어](/docs/?postId=210)
  * [Effective MSW 2](/docs/?postId=560)
  * [패킷 변조 대비하기](/docs?postId=1102%7B%22target%22:%22_blank%22%7D)
  * [예시로 알아보는 서버 검증](/docs?postId=1084)



# WorldConfig 소개

WorldConfig는 크리에이터가 제작하는 월드의 다양한 설정을 변경할 수 있습니다.

  * Edit - WorldConfig를 누릅니다.
  * Workspace - WorldConfig를 누르면 세부 설정 항목이 프로퍼티 에디터 창에 나타납니다.



[png](17114447139367ac91d0b1e984ea3bba1d2ee1e30882e)

# LegacyAnimation

메이플스토리 월드의 아바타 움직임과 애니메이션은 2023년 3월 23일에 원작 메이플스토리과 유사하게 동작하도록 변경되었습니다. 만약 크리에이터의 월드가 변경일 이전에 제작되었다면, LegacyAnimation을 활성화해 이전의 메이플스토리 월드의 아바타 움직임과 애니메이션을 적용합니다. 다만, 현재의 아바타 움직임이 원작과 유사하므로 변경일 이후에 제작된 월드라면 LegacyAnimation 적용을 권장하지 않습니다. 이전 움직임과 현재의 움직임은 아래와 같습니다.

[{"index":"true","0":"[gif](16957010690636f2b8b04e7494501a3765817083d211d)"},{"index":"false","0":"[gif](1695701089240b13b2ad54232422582e9fd9f8b9c8e04)"}]

# PlayerEntityAuthorityCheck

플레이어 엔티티에 속한 컴포넌트의 서버 함수를 로컬 클라이언트에만 호출하도록 합니다. 이 설정을 활성화하면 월드의 보안을 강화할 수 있습니다. 예를 들어 DefaultPlayer에 속한 컴포넌트 중 실행 공간이 server인 `MoveToMapPosition()` 함수는 로컬 클라이언트 외 다른 클라이언트에서 호출할 수 없습니다. 함수를 실행 시 콘솔창에 에러 메시지가 나타납니다.
    
    
    @Component
    script OtherPlayerTeleporter extends Component
        @ExecSpace("ClientOnly")
        method void NewFunction()
        local targetEntity = nil
        for key, value in pairs(_UserService.UserEntities) do
        	if key ~= _UserService.LocalPlayer.Name then
        		targetEntity = value
        		break
        	end
        end
    
        if targetEntity ~= nil then
        	targetEntity.PlayerComponent:MoveToMapPosition("map01", Vector2(0, 3))
        end
        end
    end
    

[png](169571933009917b0b6c1d9994fe9a9e71fa7ff2dacbd)

# ServiceAuthorityCheck

Service의 모든 서버 함수를 ServerOnly 함수로 동작하도록 변경합니다. 이 설정을 활성화해 월드의 보안을 강화할 수 있습니다. 예를 들어 아래와 같이 client only 함수에서 실행 공간이 server인 함수를 실행하면 실행 시 콘솔창에 에러 메시지가 나타납니다.
    
    
    @Component
    script MapEntryTeleporter extends Component
        @ExecSpace("ClientOnly")
        method void OnMapEnter(Entity enteredMap)
        _TeleportService:TeleportToMapPosition(me, currentPosition + Vector3(0, 2, 0), currentMapName)
        end
    end
    

[png](169570858853819399808907c4a219ad5a93aa6dcab19)

# RestrictedPlayerEntitySync

플레이어 엔티티에 속한 네이티브 컴포넌트의 Sync 프로퍼티가 클라이언트에서 변경된 값을 서버로 동기화하지 않도록 설정합니다. 이 설정을 활성화하면 월드의 보안을 강화할 수 있습니다. 예를 들어 클라이언트에서 `ChatBalloonComponent.Message`에 메시지를 입력하면 서버로 동기화하지 않기 때문에 다른 플레이어들의 화면에서는 말풍선이 나타나지 않습니다.
    
    
    @Component
    script ChatBalloonDisplay extends Component
        @ExecSpace("ClientOnly")
        method void ShowChatBalloon()
        local chatBalloon = self.Entity.ChatBalloonComponent
        chatBalloon.ChatModeEnabled = false
        chatBalloon.AutoShowEnabled = true
        chatBalloon.Message = "메이플스토리 월드"
        end
    end
    

예외적으로 다음 컴포넌트들은 RestrictedPlayerEntitySync에 영향을 받지 않습니다. 플레이어 엔티티에 속해 있으면 항상 클라이언트에서 서버로 동기화가 이루어지므로 주의해야 합니다.

  * MovementComponent
  * PlayerControllerComponent
  * StateComponent
  * TransformComponent



# SourceLanguage

플레이어가 월드에서 [자동 번역](/docs/?postId=1072) 기능을 사용한다면 SourceLanguage의 언어를 번역 대상으로 삼습니다. 현재 원문 언어로 설정할 수 있는 언어는 한국어, 영어입니다. 추후 언어가 추가될 수 있습니다.

# LocalWorkspace

월드 데이터를 크리에이터의 컴퓨터(Local)로 내려받을 수 있는 기능입니다. 월드의 다양한 엔트리와 데이터를 크리에이터의 컴퓨터에 파일 형태로 저장합니다. 자세한 내용은 [LocalWorkspace](/docs/?postId=1165%7B%22target%22:%22_blank%22%7D) 가이드를 참고하세요.

# WorldOrientation

월드의 비율을 변경할 수 있습니다. Landscape, Portrait, Responsive 중 하나를 선택하면 월드 전체에 동일한 설정이 적용됩니다.

  * Landscape: 월드가 가로 모드로 실행됩니다.
  * Portrait: 월드가 세로 모드로 실행됩니다.
  * Responsive: 월드가 반응형 모드로 실행됩니다.



# UseLitDefaultMaterial

UseLitDefaultMaterial을 활성화하면 모든 엔티티는 LitMode가 Lit인 상태로 간주됩니다. 이에 따라 엔티티들이 다른 광원으로부터 영향을 받아 표면의 색상과 밝기가 달라지게 됩니다. 그러나 LitMode를 별도로 설정할 수 있는 엔티티의 경우 따로 지정된 LitMode의 값을 따르게 됩니다. UseLitDefaultMaterial를 활성화하면 로비로 나가게되며, 재진입 시 활성화된 상태가 반영됩니다.