# GUID 슬롯 우선순위 - 다양한 슬롯 개수 지원 (최종 업데이트) ## 📋 업데이트 내용 슬롯 개수가 2개, 4개, 10개 등 다양한 서버 모델에 대응할 수 있도록 **슬롯 개수 선택 기능**을 추가했습니다. ## ✨ 새로운 기능 ### 1. **슬롯 개수 프리셋 선택** 모달창에서 서버 모델에 맞는 슬롯 개수를 선택할 수 있습니다: - **2 슬롯**: 38, 37 (2슬롯 서버 모델) - **4 슬롯**: 38, 37, 32, 34 (4슬롯 서버 모델) - **10 슬롯**: 31 ~ 40 전체 (10슬롯 서버 모델) ### 2. **동적 슬롯 리스트** - 선택한 개수만큼만 슬롯이 표시됨 - 불필요한 슬롯 표시 제거로 혼란 방지 - 각 프리셋별로 최적화된 기본 순서 제공 ### 3. **로컬 스토리지 확장** - 슬롯 **개수**와 **순서** 모두 저장 - 다음 방문 시 마지막 설정 자동 복원 - 프리셋 변경 시 해당 개수의 기본 순서로 초기화 ## 🎨 UI 개선 사항 ### 슬롯 개수 선택 버튼 ``` ┌─────────────────────────────────────────────┐ │ [2 슬롯] [4 슬롯] [10 슬롯] ← 버튼 그룹 │ │ 38, 37 38,37, 31 ~ 40 │ │ 32,34 │ └─────────────────────────────────────────────┘ ``` ### 슬롯 순서 헤더 ``` 슬롯 순서 [2개] ← 현재 선택된 개수 표시 [4개] [10개] ``` ## 📊 동작 예시 ### 시나리오 1: 2슬롯 서버 ``` 1. 모달 열기 ↓ 2. "2 슬롯" 버튼 클릭 ↓ 3. 슬롯 리스트에 Slot 38, 37만 표시 ↓ 4. 드래그로 순서 변경 (예: 37, 38) ↓ 5. 확인 버튼 클릭 ↓ 6. txt 파일: Slot.37: xxx Slot.38: yyy GUID: 0xXXX;0xYYY ``` ### 시나리오 2: 4슬롯 서버 ``` 1. 모달 열기 ↓ 2. "4 슬롯" 버튼 클릭 ↓ 3. 슬롯 리스트에 38, 37, 32, 34 표시 ↓ 4. 원하는 순서로 드래그 (예: 32, 34, 37, 38) ↓ 5. txt 파일: Slot.32: aaa Slot.34: bbb Slot.37: ccc Slot.38: ddd GUID: 0xAAA;0xBBB;0xCCC;0xDDD ``` ### 시나리오 3: 10슬롯 서버 (기본) ``` 1. 모달 열기 (10슬롯이 기본 선택됨) ↓ 2. 슬롯 31~40 모두 표시 ↓ 3. 기본 순서: 38, 39, 37, 36, 32, 33, 34, 35, 31, 40 ↓ 4. 드래그로 자유롭게 순서 조정 ``` ## 🔧 기술 구현 ### JavaScript - 슬롯 프리셋 ```javascript // 슬롯 개수별 기본 순서 프리셋 const slotPresets = { 2: ['38', '37'], 4: ['38', '37', '32', '34'], 10: ['38', '39', '37', '36', '32', '33', '34', '35', '31', '40'] }; let currentSlotCount = 10; // 기본값 let currentSlotOrder = [...slotPresets[10]]; ``` ### 슬롯 개수 변경 이벤트 ```javascript document.querySelectorAll('input[name="slotCount"]').forEach(radio => { radio.addEventListener('change', function() { const newCount = parseInt(this.value); if (newCount !== currentSlotCount) { currentSlotCount = newCount; // 해당 개수의 프리셋으로 초기화 currentSlotOrder = [...slotPresets[currentSlotCount]]; // UI 업데이트 updateSlotCountBadge(); renderSlotList(); initSortable(); saveSlotConfigToStorage(); } }); }); ``` ### 로컬 스토리지 저장/불러오기 ```javascript // 저장 function saveSlotConfigToStorage() { localStorage.setItem('guidSlotCount', currentSlotCount.toString()); localStorage.setItem('guidSlotPriority', JSON.stringify(currentSlotOrder)); } // 불러오기 function loadSlotConfigFromStorage() { const savedCount = localStorage.getItem('guidSlotCount'); const savedOrder = localStorage.getItem('guidSlotPriority'); if (savedCount) { currentSlotCount = parseInt(savedCount); document.getElementById(`slotCount${currentSlotCount}`).checked = true; } if (savedOrder) { currentSlotOrder = JSON.parse(savedOrder); } else { // 저장된 순서 없으면 프리셋 사용 currentSlotOrder = [...slotPresets[currentSlotCount]]; } } ``` ## 🎯 백엔드 호환성 백엔드 스크립트들은 이미 유연하게 구현되어 있습니다: ### PortGUID_v1.py ```python # 환경변수에서 슬롯 우선순위 읽기 slot_priority_str = os.getenv("GUID_SLOT_PRIORITY", "") if slot_priority_str: # 사용자 지정 순서 (2개든 4개든 10개든 모두 처리) desired_order = [s.strip() for s in slot_priority_str.split(",")] else: # 기본값 (슬롯 개수에 따라 자동 결정) total_slots = len(slots_in_match_order) if total_slots == 4: desired_order = ['38', '37', '32', '34'] elif total_slots == 10: desired_order = ['38', '39', '37', '36', '32', '33', '34', '35', '31', '40'] else: desired_order = slots_in_match_order # 존재하는 슬롯만 처리 for s in desired_order: guid = slot_to_guid.get(s, "Not Found") if guid != "Not Found": # 존재하는 슬롯만 f.write(f"Slot.{s}: {guid}\n") hex_guid_list.append(f"0x{guid.replace(':', '').upper()}") ``` ### GUIDtxtT0Execl.py ```python # 슬롯 우선순위에 따라 데이터 재정렬 for slot_num in SLOT_PRIORITY: slot_key = f"Slot.{slot_num}" if slot_key in parsed_data: # txt 파일에 존재하는 슬롯만 reordered_data[slot_key] = parsed_data[slot_key] ``` ## 💡 핵심 특징 ### 1. **유연성** - 2슬롯, 4슬롯, 10슬롯 모두 지원 - 커스텀 슬롯 개수도 확장 가능 - 존재하지 않는 슬롯은 자동으로 스킵 ### 2. **사용자 편의성** - 한 번에 한 가지 프리셋만 선택 - 프리셋 변경 시 즉시 UI 업데이트 - 기본값 복원 시 현재 프리셋의 기본 순서로 복원 ### 3. **일관성** - 모든 GUID 관련 작업에서 동일한 슬롯 개수/순서 적용 - 로컬 스토리지로 설정 유지 - 환경변수로 백엔드까지 일관되게 전달 ### 4. **확장성** - 새로운 프리셋 추가 용이 ```javascript const slotPresets = { 2: ['38', '37'], 4: ['38', '37', '32', '34'], 6: ['38', '39', '37', '36', '32', '34'], // 새로운 프리셋 추가 10: ['38', '39', '37', '36', '32', '33', '34', '35', '31', '40'] }; ``` ## ⚠️ 주의사항 ### 1. **프리셋 변경 시** - 기존에 드래그로 조정한 순서는 **초기화**됩니다 - 프리셋의 기본 순서로 리셋됨 - 필요시 다시 드래그로 조정 가능 ### 2. **슬롯 번호 제한** - 현재는 31~40 범위 내의 슬롯만 지원 - 다른 범위 슬롯 필요 시 프리셋 추가 필요 ### 3. **하위 호환성** - 환경변수가 없으면 스크립트가 자동으로 슬롯 개수 감지 - 기존 txt 파일도 정상 처리됨 ## 🚀 향후 개선 방안 ### 1. **커스텀 슬롯 입력** - 프리셋 외에 직접 슬롯 번호 입력 가능 - 예: "32, 33, 38, 39" 입력 ### 2. **자동 감지** - 업로드된 txt 파일에서 실제 존재하는 슬롯 자동 감지 - 감지된 슬롯만 모달에 표시 ### 3. **프리셋 관리** - 사용자 정의 프리셋 저장 - 프로젝트별/서버별 프리셋 관리 ### 4. **일괄 적용** - 여러 서버에 동일한 설정 적용 - 프리셋 템플릿 공유 기능 ## 📝 사용 예시 ### 예제 1: 2슬롯 서버 (간단한 구성) ``` 모달에서 "2 슬롯" 선택 순서: 38 → 37 (기본값 유지) 결과 txt 파일: ABC1234 Slot.38: 00:11:22:33:44:55:66:77 Slot.37: 11:22:33:44:55:66:77:88 GUID: 0x0011223344556677;0x1122334455667788 ``` ### 예제 2: 4슬롯 서버 + 순서 커스터마이징 ``` 모달에서 "4 슬롯" 선택 순서 변경: 32, 34, 37, 38 (드래그로 조정) 결과 txt 파일: ABC1234 Slot.32: AA:BB:CC:DD:EE:FF:00:11 Slot.34: BB:CC:DD:EE:FF:00:11:22 Slot.37: CC:DD:EE:FF:00:11:22:33 Slot.38: DD:EE:FF:00:11:22:33:44 GUID: 0xAABBCCDDEEFF0011;0xBBCCDDEEFF001122;0xCCDDEEFF00112233;0xDDEEFF0011223344 ``` ### 예제 3: 10슬롯 서버 (역순 정렬) ``` 모달에서 "10 슬롯" 선택 (기본값) 순서 변경: 40, 31, 35, 34, 33, 32, 36, 37, 39, 38 결과: 지정한 순서대로 txt 파일 생성 ``` ## ✅ 테스트 체크리스트 - [x] 2슬롯 프리셋 선택 및 표시 - [x] 4슬롯 프리셋 선택 및 표시 - [x] 10슬롯 프리셋 선택 및 표시 (기본) - [x] 프리셋 변경 시 슬롯 리스트 업데이트 - [x] 슬롯 개수 배지 동적 업데이트 - [x] 드래그 앤 드롭 정상 동작 - [x] 로컬 스토리지에 개수+순서 저장 - [x] 페이지 새로고침 후 설정 복원 - [x] 기본값 복원 버튼 (현재 프리셋 기준) - [x] 백엔드 환경변수 전달 - [x] txt 파일 순서 적용 - [x] 엑셀 컬럼 순서 적용 - [x] GUID 합치기 순서 적용 ## 🎉 결과 이제 **모든 슬롯 개수의 서버**에 대응할 수 있습니다! ``` 2슬롯 서버 → "2 슬롯" 선택 → 38, 37만 표시 ✅ 4슬롯 서버 → "4 슬롯" 선택 → 38, 37, 32, 34 표시 ✅ 10슬롯 서버 → "10 슬롯" 선택 → 31~40 모두 표시 ✅ ``` 각 프리셋별로 최적화된 기본 순서가 제공되며, 사용자는 드래그로 자유롭게 순서를 조정할 수 있습니다! **완벽한 유연성과 확장성을 갖춘 GUID 슬롯 관리 시스템 완성!** 🚀