래더 시작과 함께 캐릭터를 육성하다 보니 레벨업을 자주 하게 되고
그러다 보니 계속 캐릭터 패널을 열어보는 것이 거슬렸습니다.
캐릭터 패널을 안 열고 레벨을 볼 수 있으면 좋겠다는 생각이 들었죠.
그러다가 문득 당시에는 필요 없다 생각하여 자료실에서 눈팅만 하고 지나쳤던
미니 스탯 패널이 생각나서 검색을 해봤는데 이미 삭제되고 없는지
검색을 해봐도 안 보이고 넥서스모드에 가서 뒤져도 안 나오고
결국 며칠 머리 굴려가며 새로 만들었습니다.
며칠 머리 굴려가며 만든 미니 상태 표시 모듈을 공개 등록을 하고 보니
다음날 탈명객님 자료가 올라오고
그제서야 내가 찾던 자료가 탈명객님의 자료였다는 것을 알게 됐고...
(나 며칠 동안 뭐 한 거지? 개억울 ㅠ.ㅜ)
뭐 결국 탈명객님의 두 번 호출하는 방식을 참고하여 이리 저리 시도를 해본 결과
미니 스탯 표시를 상시 고정하는 것에
고급 통계에 중복으로 표시되지 않도록 하는 것과
스탯 올리기 버튼 클릭 시 1개씩만 올라가도록 하는 것,
그리고 고급 통계를 함께 여는 것까지 완성했으니 참고 하시기 바랍니다.
1. 일단 상시 고정할 미니 스탯을 표시할 패널.
사용자 마다 다른 파일명을 사용하고 있으니 탈명객님 자료를 기준으로 하면 'exp.json'
제가 만든 것을 기준으로 하면 'HudTextHD.json'입니다.
../global/ui/layouts/HudTextHD.json
{
"type" : "CharacterStatsPanel",
"name" : "HudText",
"fields" : {
"priority": 99, // 패널 우선 순위, 높을 수록 위로 올라 옴. 물약 팝업 시 위에 겹치지 않도록 'HUDPanel' 보다 낮게 조정.
"rect": {"x": 0, "y": 0},
"anchor": {"x": 0.5, "y": 0.96},
"defaultTextColor": "$FontColorWhite",
"statPointsRemainingActiveFontColor": "$FontColorRed",
"statPointsRemainingInactiveFontColor": "$TabsInactiveTextColor"
},
"children": [
... 중략 ...
"children": [ {"type": "FocusableWidget", "name": "Tooltip"} ]
},
{
"type" : "TextBoxWidget",
"name" : "PoisonText",
"fields": {
"rect" : {"x": 1312, "y": 0, "width": 114, "height": 58},
"style": { "pointSize": "$MediumPanelFontSize", "alignment": {"h": "right", "v": "center"} }
}
}
]
},
미니 스탯창의 표시 항목과 위치는 이 파일에서 수정
2. 위에서 만든 패널을 상시 고정하기 위한 타이머를 추가합니다.
../global/ui/layouts/hudpanelhd.json
{
"type": "HUDPanelHD", "name": "HUDPanel",
"fields": {
"priority": 100, // 패널 우선 순위, 물약 칸이 팝업 될 때 'HudText' 패널의 글씨 위로 오도록 조정. 'CharacterStatsPanel' 보다 높을 경우 'CharacterStatsPanel'의 PanelManager:ClosePanel:HudText 작동 안 함.
"anchor": { "x": 0.5, "y": 1 },
"rect": { "x": -1454, "y": -412, "width": 2952, "height": 764 },
"skillsOnRow": 13,
},
"children": [
... 중간 생략 ...
},
{
"type" : "ButtonWidget",
"name" : "FriendsListButton",
"fields": {
"rect" : {"x": 580, "y": 310},
"hoveredFrame" : 2,
"filename" : "LobbyFinalFriends_Button",
"onClickMessage": "PanelManager:TogglePanel:FriendsListPanel",
"tooltipString" : "@FriendsList"
}
},
// 타이머 위젯 추가.
{
"type" : "TimerWidget",
"name" : "timer01",
"fields": {"time": 0.001, "message": "PanelManager:OpenPanel:HudText"} // 1번에서 만든 패널을 자동으로 호출
}
]
}
3. HudText 패널이 호출된 상태라서 캐릭터 패널을 오픈할 경우
"CharacterStatsPanel" 타입의 패널이 두 개 열린 상태가 되므로
스탯 올리기 버튼 클릭 시 2포인트씩 올라가는 문제가 발생됩니다.
이 문제를 해결 하려면 "CharacterStatsPanel" 타입의 패널이 중복 되지 않도록
캐릭터 패널이 오픈 될 때 'HudText' 패널이 닫히도록 'characterstatspanelhd.json'에 타이머를 추가합니다.
'HudText' 패널이 닫히면서 고급 통계 패널에 같은 내용이 두 번 중복 표시되는 문제도 함께 해결됩니다.
4. 스탯 올리기 버튼의 경우는 "onClickMessage" 함수가 아닌 하드 코딩 된 항목이므로
정상 작동하는 것 처럼 보이지만 "CharacterStatsPanel" 타입이 중복되는 순간
이미 'advancedstatspanel'에 어느 정보를 표시해야 하는지
패널 간에 충돌이 발생한 상태이므로 'HudText' 패널이 닫혀도
'advancedstatspanel'와 관련된 "onClickMessage" 함수는 작동하지 않으며
때문에 고급 통계 확장 버튼과 고급 통계 닫기 버튼은 여전히 작동하지 않습니다.
"onClickMessage" : "CharacterStatsPanelMessage:ToggleAdvancedStats", // 작동 안 함.
"onClickMessage": "PanelManager:ClosePanel:AdvancedStatsPanel", // 작동 안 함
따라서 상시 고정의 경우 고급 통계 패널 버튼 문제는 해결할 수 없으나 보완책으로
'characterstatspanelhd.json'에 타이머를 추가해 캐릭터 패널을 열 때
'advancedstatspanel'(고급 통계 패널)이 함께 열리는 방법으로 우회 할 수 있습니다.
또 'advancedstatspanelhd.json' 파일에 있는 "onClickMessage" 함수도 작동하지 않으므로
닫기 버튼을 삭제하거나 'characterstatspanelhd.json'에 추가해 줍니다.
../global/ui/layouts/characterstatspanelhd.json
{
"type" : "CharacterStatsPanel",
"name" : "CharacterStatsPanel",
"fields" : {
"priority": 102, // 패널 우선 순위, 미니 허드 패널 등 다른 패널에 가려지지 않도록 수치 조정. 'HUDPanel' 보다 낮을 경우 'CharacterStatsPanel'의 "PanelManager:ClosePanel:HudText" 작동 안 함. 'advancedstatspanel' 보다 낮을 경우 ESC 키 작동 안 함.
"rect": {"x": 20, "y": -651}, // '고급 통계 패널'이 함께 열리므로 위치 조정이 필요한 경우 수정.
"anchor": "$LeftPanelAnchor",
"defaultTextColor": "$FontColorWhite",
"statPointsRemainingActiveFontColor": "$FontColorRed",
"statPointsRemainingInactiveFontColor": "$TabsInactiveTextColor"
},
"children": [
... 중간 생략 ...
},
{
"type" : "ButtonWidget",
"name" : "CloseButton",
"fields": {
"rect": {"x": 1075, "y": 9},
"filename": "PANELclosebtn_4x",
"hoveredFrame": 3,
"onClickMessage": "CharacterStatsPanelMessage:Close",
"tooltipString": "@strClose",
"sound": "cursor_close_window_hd",
"acceptsEscKeyEverywhere": true
}
},
// 닫기 버튼 추가 . 'advancedstatspanel'의 닫기 버튼은 작동하지 않으므로 닫기 버튼을 추가해 덮어 씌우기
{
"type" : "ButtonWidget",
"name" : "CloseButton",
"fields": {
"rect": {"x": 1955, "y": 9}, // 'advancedstatspanel'의 닫기 버튼 위치 조정.
"filename": "PANELclosebtn_4x",
"hoveredFrame": 3,
"onClickMessage": "CharacterStatsPanelMessage:Close",
"tooltipString": "@strClose",
"sound": "cursor_close_window_hd",
"acceptsEscKeyEverywhere": true
}
},
// 닫기 버튼 추가 끝.
// 'HudText' 패널 닫기 타이머 추가
{
"type" : "TimerWidget",
"name" : "timer02",
"fields": {"time": 0.001, "message": "PanelManager:ClosePanel:HudText"}
},
// 'HudText' 패널 닫기 타이머 추가 끝
// 'advancedstatspanel' 열기 타이머 추가
{
"type" : "TimerWidget",
"name" : "timer04",
"fields": {"time": 0.002, "message": "CharacterStatsPanelMessage:ToggleAdvancedStats"}
}
// 'advancedstatspanel' 열기 타이머 끝
]
}
5. 'characterstatspanel'을 이동한 만큼 'advancedstatspanel', 'hirelinginventorypanel'(용병 장비 패널)도 이동 시키기.
../global/ui/layouts/advancedstatspanelhd.json
{
"type" : "AdvancedStatsPanel",
"name" : "AdvancedStatsPanel",
"fields" : {
"priority" : 101, // 패널 우선 순위, 'HUDPanel' 보다 낮을 경우 'CharacterStatsPanel'의 "CharacterStatsPanelMessage:ToggleAdvancedStats" 작동 안 함. 'CharacterStatsPanel' 보다 높을 경우 'CharacterStatsPanel' ESC 키 작동 안 함.
"rect" : {"x": 1182, "y": -651}, // 좌표 수정.
"anchor" : "$LeftPanelAnchor",
"defaultWidget": "ScrollBar",
"textPadding" : 16
},
"children": [
... 이하 생략 ...
../global/ui/layouts/hirelinginventorypanelhd.json
{
"type": "HirelingInventoryPanel", "name": "HirelingInventoryPanel",
"fields": {
"priority" : 102, // 패널 우선 순위, 미니 허드 패널 등 다른 패널에 가려지지 않도록 수치 조정.
"rect": {"x": 20, "y": -651}, // 좌표 수정.
"anchor": "$LeftPanelAnchor",
"slotBackgroundFilename": "PANELHirelingHireablePanelHireables_Paperdoll",
// limited to 20 overrides
"slotBackgroundOverrides": [
... 이하 생략 ...
Ps. 첨부파일은 생략합니다. 필요하신 분은 별도 요청 바랍니다.