Loading...
Loading...
MSW DefaultPlayer(캐릭터) 관리. DefaultPlayer.model 파일 직접 조회/수정, 컴포넌트 추가/제거, 이동 속도/점프력/HP/카메라 설정, 맵 모드별 이동 컴포넌트. Use for DefaultPlayer model, player components, movement speed, jump force, HP, camera, physics. Keywords: player, DefaultPlayer, speed, jump, HP, camera, gravity, 플레이어, 캐릭터, 이동속도, 점프력, 중력, 카메라, 체력, 부활.
npx skill4agent add msw-git/msw-ai-coding-plugins-official msw-defaultplayer코스튬/아바타 장비는스킬을 참조. 코스튬은 DefaultPlayer뿐 아니라 모든 엔티티에 적용 가능하므로 별도 스킬로 분리되어 있다.msw-costume
DefaultUserEnterLeaveLogicPlayerUri| 파일 | 경로 | 역할 |
|---|---|---|
| Player.model | | 베이스 모델. Components 목록과 Properties 링크를 정의 |
| DefaultPlayer.model | | Player를 상속( |
중요: 두 파일 모두폴더에 위치한다. 커스텀 스크립트 파일은./Global/에 생성한다../RootDesk/MyDesk/
./Global/DefaultPlayer.modelDefaultPlayer.modelValuesValueDefaultPlayer.modelComponentsPlayer.modelComponents경로: ./Global/Player.model
EntryKey: model://playerComponentsPropertiesValues경로: ./Global/DefaultPlayer.model
EntryKey: model://defaultplayer
BaseModelId: "player"Componentsscript.PlayerHitscript.PlayerAttackValues| 컴포넌트 | 역할 |
|---|---|
| TransformComponent | 위치, 회전, 크기 |
| MovementComponent | 이동 속도, 점프력 제어 |
| RigidbodyComponent | 물리(중력, 발판), 메이플스토리 이동 |
| KinematicbodyComponent | RectTileMap 상하좌우 이동 |
| SideviewbodyComponent | SideViewRectTileMap 횡스크롤 이동 |
| StateComponent | 상태 머신 (Walk, Jump, Dead 등) |
| AvatarRendererComponent | 아바타 렌더링, 색상, 감정표현 |
| AvatarStateAnimationComponent | 상태 → 아바타 애니메이션 연결 |
| CostumeManagerComponent | 장비/코스튬 관리 → 상세는 |
| CameraComponent | 카메라 추적 설정 |
| PlayerControllerComponent | 입력-액션 매핑, 조건 처리 |
| PlayerComponent | HP, 사망/부활, PVP, 맵 이동 |
| ChatBalloonComponent | 채팅 풍선 |
| NameTagComponent | 이름표 |
| DamageSkinSettingComponent | 데미지 스킨 |
| DamageSkinSpawnerComponent | 데미지 스킨 스폰 |
| HitEffectSpawnerComponent | 히트 이펙트 스폰 |
| TriggerComponent | 충돌 감지 |
| InventoryComponent | 인벤토리 |
| 컴포넌트 | 역할 |
|---|---|
| script.PlayerHit | 플레이어 피격 로직 |
| script.PlayerAttack | 플레이어 공격 로직 |
| 컴포넌트 | 역할 | 핵심 프로퍼티/메서드 |
|---|---|---|
| PlayerComponent | HP, 사망/부활, PVP, 맵 이동 | |
| PlayerControllerComponent | 입력→액션 매핑, 조건 제어 | |
| MovementComponent | 이동 속도/점프 상위 인터페이스 | |
| RigidbodyComponent | 메이플 사이드뷰 물리 (중력/발판) | |
| KinematicbodyComponent | RectTile 탑뷰 상하좌우 이동 | (RectTile 맵 모드 전용) |
| SideviewbodyComponent | SideViewRectTile 사이드뷰 | (SideViewRectTile 맵 모드 전용) |
| AvatarRendererComponent | 아바타 렌더링/색상/감정표현 | |
| StateComponent | 상태 머신 (Walk/Jump/Dead) | |
| NameTagComponent | 이름표 | |
| ChatBalloonComponent | 채팅 풍선 | |
| CameraComponent | 카메라 추적 | |
| TriggerComponent | 충돌 감지 | |
DefaultPlayer.modelValues{
"TargetType": "컴포넌트명 또는 null",
"Name": "프로퍼티명",
"ValueType": {
"$type": "MODNativeType",
"type": "타입 정보"
},
"Value": 값
}null"MOD.Core.컴포넌트명""script.스크립트명"| 모델 프로퍼티명 | 원본 컴포넌트.프로퍼티 | 설명 | 기본값 |
|---|---|---|---|
| speed | MovementComponent.InputSpeed | 이동 속도 | 1.0 |
| jumpForce | MovementComponent.JumpForce | 점프 높이 | 1.0 |
| walkAcceleration | RigidbodyComponent.WalkAcceleration | 가속/감속 | 1.0 |
| gravity | RigidbodyComponent.Gravity | 중력 | 1.0 |
| cameraDeadZone | CameraComponent.DeadZone | 카메라 데드존 | |
| cameraSoftZone | CameraComponent.SoftZone | 카메라 소프트존 | |
| cameraDamping | CameraComponent.Damping | 카메라 부드러운 추적 | |
| cameraScreen | CameraComponent.ScreenOffset | 데드존 중심점 | |
| cameraDutch | CameraComponent.DutchAngle | 카메라 회전 | 0.0 |
| cameraOffset | CameraComponent.CameraOffset | 카메라 위치 오프셋 | |
| nameTag | NameTagComponent.Name | 이름표 | |
| damageSkinId | DamageSkinSettingComponent.DamageSkinId | 데미지 스킨 타입 | DataRef |
| damageDelayPerAttack | DamageSkinSettingComponent.DelayPerAttack | 데미지 딜레이 | 0.05 |
| triggerBodyBoxSize | TriggerComponent.BoxSize | 충돌 감지 영역 크기 | |
| triggerBodyBoxOffset | TriggerComponent.BoxOffset | 충돌 감지 영역 오프셋 | |
| triggerBodyColliderOffset | TriggerComponent.ColliderOffset | 충돌체 오프셋 | |
| maxHp | PlayerComponent.MaxHp | 최대 HP | 1000 |
| TargetType | Name | 설명 | 기본값 |
|---|---|---|---|
| MOD.Core.CameraComponent | ZoomRatioMax | 카메라 최대 줌 비율 | 500.0 |
| MOD.Core.MovementComponent | JumpForce | 점프력 (직접 오버라이드) | 1.0 |
| MOD.Core.MovementComponent | InputSpeed | 이동 속도 (직접 오버라이드) | 1.0 |
| script.PlayerHit | CollisionGroup | 피격 충돌 그룹 | CollisionGroup ID |
| script.PlayerHit | BoxSize | 피격 충돌 영역 크기 | |
| script.PlayerHit | ColliderOffset | 피격 충돌 오프셋 | |
TileMapMode↔Body 매핑 테이블은참조. 맵 모드에 따라 RigidbodyComponent / KinematicbodyComponent / SideviewbodyComponent 중 하나가 활성화된다.msw-general/references/platform.md §4
entity.PlayerComponent ~= nil_UserService.LocalPlayer_UserService:GetUserEntityByUserId(userId)| 서비스 | 역할 | 핵심 API |
|---|---|---|
| _UserService | 유저 관리, 입장/퇴장 | |
| _TeleportService | 텔레포트/맵 이동 | |
| _CameraService | 카메라 제어 | |
| DefaultUserEnterLeaveLogic | 유저 입장/퇴장 로직 | |
./Global/DefaultPlayer.modelContentProto.Json.ValuesValueValuesName"speed"Value{
"TargetType": null,
"Name": "speed",
"ValueType": { ... },
"Value": 2.0
}MovementComponentInputSpeed{
"TargetType": "MOD.Core.MovementComponent",
"Name": "InputSpeed",
"ValueType": { ... },
"Value": 2.0
}참고: 모델 프로퍼티(,TargetType: null)와 컴포넌트 직접 오버라이드(Name: "speed",TargetType: "MOD.Core.MovementComponent")가 모두 존재할 수 있다. 양쪽을 일관되게 수정해야 한다.Name: "InputSpeed"
Values// jumpForce 모델 프로퍼티
{ "TargetType": null, "Name": "jumpForce", "Value": 1.5 }
// MovementComponent 직접 오버라이드
{ "TargetType": "MOD.Core.MovementComponent", "Name": "JumpForce", "Value": 1.5 }
// maxHp 모델 프로퍼티
{ "TargetType": null, "Name": "maxHp", "Value": 2000 }Values// float (System.Single)
"ValueType": {
"$type": "MODNativeType",
"type": "System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
}
// int (System.Int64)
"ValueType": {
"$type": "MODNativeType",
"type": "System.Int64, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
}
// string
"ValueType": {
"$type": "MODNativeType",
"type": "System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
}
// Vector2 (MODVector2)
"ValueType": {
"$type": "MODNativeType",
"type": "MOD.Core.MODVector2, MOD.Core, Version=1.11.0.0, Culture=neutral, PublicKeyToken=null"
}
// Value 형식: { "$type": "MOD.Core.MODVector2, MOD.Core", "x": 0.0, "y": 0.0 }
// DataRef (MODDataRef)
"ValueType": {
"$type": "MODNativeType",
"type": "MOD.Core.MODDataRef, MOD.Core, Version=1.11.0.0, Culture=neutral, PublicKeyToken=null"
}
// Value 형식: { "$type": "MOD.Core.MODDataRef, MOD.Core", "DataId": "hex..." }
// CollisionGroup
"ValueType": {
"$type": "MODNativeType",
"type": "MOD.Core.Physics.CollisionGroup, MOD.Core, Version=1.11.0.0, Culture=neutral, PublicKeyToken=null"
}
// Value 형식: { "$type": "MOD.Core.Physics.CollisionGroup, MOD.Core", "Id": "hex..." }
// boolean (System.Boolean) — Enable=false/true에 사용
"ValueType": {
"$type": "MODNativeType",
"type": "System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
}
// Value 형식: true 또는 false./Global/DefaultPlayer.modelContentProto.Json.Components"Components": [
"script.PlayerHit",
"script.PlayerAttack",
"script.MyCustomComponent"
]커스텀 스크립트(.mlua)는 반드시에 생성해야 한다. 스크립트를 먼저 작성한 후 Components 배열에./RootDesk/MyDesk/으로 추가한다."script.스크립트명"
"Components": [
"script.PlayerHit",
"script.PlayerAttack",
"MOD.Core.SpriteRendererComponent"
]DefaultPlayer.modelComponentsValues주의: Player.model(베이스)에서 상속된 컴포넌트는 DefaultPlayer.model의 Components에 없으므로, 베이스 컴포넌트를 제거하려면 Player.model 자체를 수정해야 한다. 일반적으로 베이스 컴포넌트 제거는 권장하지 않는다.
Enable=false| 컴포넌트 | 완전 숨기기 | 아바타만 숨기기 | 비고 |
|---|---|---|---|
| TransformComponent | 유지 | 유지 | 필수 |
| PlayerComponent | 유지 | 유지 | 필수 — 비활성화 시 입장 실패 |
| StateComponent | 유지 | 유지 | 비활성화 시 다른 컴포넌트 에러 |
| MovementComponent | 유지 | 유지 | 이동 필요 시 유지 |
| CameraComponent | 유지 | 유지 | 카메라 필요 시 유지 |
| AvatarRendererComponent | 비활성화 | 비활성화 | 핵심 — 이것만 꺼도 안 보임 |
| AvatarStateAnimationComponent | 비활성화 | 비활성화 | |
| CostumeManagerComponent | 비활성화 | 비활성화 | |
| PlayerControllerComponent | 비활성화 | 유지 | 이동 차단 여부에 따라 |
| ChatBalloonComponent | 비활성화 | 비활성화 | |
| NameTagComponent | 비활성화 | 비활성화 | |
| DamageSkinSettingComponent | 비활성화 | 비활성화 | |
| DamageSkinSpawnerComponent | 비활성화 | 비활성화 | |
| HitComponent | 비활성화 | 비활성화 | |
| HitEffectSpawnerComponent | 비활성화 | 비활성화 | |
| TriggerComponent | 비활성화 | 비활성화 | |
| InventoryComponent | 비활성화 | 비활성화 | |
| RigidbodyComponent | 비활성화 | 맵 모드 유지 | MapleTile 맵일 때 |
| SideviewbodyComponent | 비활성화 | 맵 모드 유지 | SideViewRectTile 맵일 때 |
| KinematicbodyComponent | EnableShadow=false | EnableShadow=false | 그림자만 제거 |
./Global/DefaultPlayer.modelContentProto.Json.Values{
"TargetType": "MOD.Core.AvatarRendererComponent",
"Name": "Enable",
"ValueType": {
"$type": "MODNativeType",
"type": "System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
},
"Value": false
}{
"TargetType": "MOD.Core.KinematicbodyComponent",
"Name": "EnableShadow",
"ValueType": {
"$type": "MODNativeType",
"type": "System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
},
"Value": false
}1. ./Global/DefaultPlayer.model 파일 읽기 → Values 배열 확인
2. 수정할 프로퍼티 항목을 찾아 Value 변경
3. 모델 프로퍼티(TargetType: null)와 컴포넌트 직접 오버라이드가 모두 있는 경우 양쪽 일관 수정
4. 파일 저장1. ./RootDesk/MyDesk/ 에 새 .mlua 스크립트 작성 (msw-scripting 스킬 참조)
2. ./Global/DefaultPlayer.model 의 Components 배열에 "script.스크립트명" 추가
3. 필요 시 Values 배열에 스크립트 프로퍼티 기본값 추가
4. Maker Refresh 요청 (.codeblock 자동 생성)1. ./Global/DefaultPlayer.model 읽기
2. Values에서 cameraDeadZone, cameraSoftZone, cameraDamping, cameraScreen, cameraDutch, cameraOffset 수정
3. 파일 저장msw-costume./ui/./map/./Global/./RootDesk/MyDesk/ValueType