룬워드 계산기 제작 후기

캡쳐: 룬워드 계산기
어제 저녁에는 뭘 할까 고민하다가 룬워드 계산기를 만들기로 했습니다.
찾아보니 외국 영문 사이트에는 이미 룬워드 계산기가 여럿 있었습니다.
- https://www.purediablo.com/diablo-2/runeword-calculator/ - 편리하게 잘 만들어진 곳
- https://fabd.github.io/diablo2-runewizard/ 잘 되어있음 그러나 IE 미지원
- http://dclone.eskysse.com/rwcalc.php 열심히 만든것으로 보이나 사용하기에는 좀 복잡해보임
- https://www.d3bg.org/runewords-calculator/ 괜찮음, 그러나 접근성이 좀 떨어짐
- https://www.jacobh.co.uk/rwcalc/ 너무 심플함
- https://acien.github.io/ 여기도 괜춘한데 마찬가지로 접근성이 좀 떨어짐
- https://dolkow.se/d2/runewords.xhtml ?
원래는 외국 것을 가져와 적절히 한글화를 목표로 했습니다.
그러나 고쳐야할 부분이 많이 있었고 또 제가 생각하는 만큼 초보자에게 UI가 친절하지 않았습니다.
이대로 포기할지, 아니면 이대로 계속 진행을 할지 고민을 했습니다.
코딩도 잘 안되고 머리식힐겸 잠시 쉬던 차에 트레디아에 보관중인 룬워드 데이터가 생각이 났습니다.

캡쳐: 룬워드 데이터
그걸 이용한다면 어쩌면 직접 구현할 수도 있지 않을까..? 방법이 잘 떠오르진 않았지만 고민을 했습니다.
선택한 룬 목록을 포함하는 아이템들을 조회해야 한다.. 그렇다면 데이터에서 룬 열을 6개로 나누어 각각 인덱스를 태워 조회한다면? 라고 생각되더군요. (말이 어려워 죄송합니다)
아무튼 데이터 구조를 변환해야 했고 1개의 rune 열 대신에 6개의 rune 열을 가지고, 데이터 부하가 걸리지 않도록 각 열에 인덱스를 걸었습니다.

캡쳐: 룬워드 인덱스
이와 같이 데이터 구조를 변경했으므로, 일부 룬이 일치하는 데이터를 조회할 수 있었습니다.
예를 들어 [랄 or 오르트] 둘 중 하나라도 일치하는 r1,r2,r3,r4,r5,r6 열에 조회하는 것입니다. (아무튼,, -_-)
데이터 구조(=스키마)에 대한 고민이 마쳐지자 디자인과 UI를 진행해야 했습니다.
음.. 디자인과 UI 이야기는 따분하니 그 내용은 건너뛰기로 하죠.
아무튼 목표를 거의 구현하니 데이터 정렬에 아쉬운 부분이 있었습니다.
수수께끼를 예로 들면 [자+베르+아이드] 조합인데 3개 룬을 선택하면 자룬 하나만 일치하는 원한이 먼저 떴습니다. 순서가 뒤죽박죽 이라는 말입니다.
어떤 아이템을 우선순위로 보여줄지 생각이 필요했습니다.
그리고 방법을 생각해 냈습니다.
아이템의 룬 완성도를 1순위, 룬의 갯수를 2순위로 점수를 부여하는 것입니다.
3소켓 아이템에 2개가 일치하면 2/3(=66) 점수를 부여하고 2소켓 아이템에 2개가 일치하면 2/2(=100) 점수를 부여하는 식입니다.
이렇게하면 룬이 완성된 아이템이 우선순위로 나옵니다. 사용자 입장에서도 룬이 완성된 아이템을 먼저 보고 싶을 것입니다. 그게 1순위 점수라는 의미입니다.
그리고 2순위 점수 기준은 룬의 갯수인데, 3소켓과 5소켓 아이템이 둘 다 완성이라고 가정할 시 1순위 점수는 둘 다 100 이지만 2순위 점수인 5소켓이 앞서므로 5소켓 아이템을 먼저 띄웁니다.
아무튼 이것이 제가 생각한 알고리즘 이었고 그럭저럭 작동하는 것 같습니다.
그동안 있었던 한국어 디아블로2 사이트들은 (이 사이트를 포함해서) 기능이 shit 이라고 저는 느낍니다.
외국 사이트들은 사이트도 화려하고 다양한 유용한 기능이 많거든요.
이번에 제작한 룬워드 계산기는 외국 사이트 못지 않게 편리하고 직관적으로 잘 완성된 것 같아 뿌듯합니다. -> 이 말을 하고 싶어서 글 쓴것임
마치며..
초보자라면 링 측정기도 써보시길 권해드리고 싶습니다.
상급 레어링은 프로그램으로 가려내기 애매하지만 B급 이하 링은 거의 정확할 것입니다.
어떤 클래스가 사용하는지, 어떤 용도로 사용하는지 친절하게 설명도 해줍니다.

캡쳐: 링 측정기
끝! 읽어주셔서 감사합니다.

