Update 2026-01-20 20:47:44

This commit is contained in:
unknown
2026-01-20 20:47:45 +09:00
parent 9d5d2b8d99
commit c9db82d33e
193 changed files with 33876 additions and 5798 deletions

View File

@@ -0,0 +1,330 @@
# 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 슬롯 관리 시스템 완성!** 🚀