fix: MMO 서버 로직 버그 6건 수정
1. PlayerId 스푸핑 방지: OnTransformPlayer, OnActionPlayer, OnStatePlayer에서 브로드캐스트 전 packet.PlayerId = hashKey로 강제 교체 2. HP/MP 클라이언트 조작 방지: OnStatePlayer에서 범위 클램핑 (0 ≤ Hp ≤ MaxHp, 0 ≤ Mp ≤ MaxMp) 3. CreateParty 파티원 등록 누락 수정: - memberIds 파라미터 사용 시 모든 멤버를 playerPartyMap에 등록 - 리더 중복 추가 방지 (Contains 체크) 4. OnIntoChannel 채널 만석 유령 상태 방지: 이전 채널 제거 후 새 채널 입장 실패 시 이전 채널로 복귀 5. HandleAuth async 경합 방지: authenticatingTokens HashSet으로 동일 토큰 동시 인증 차단 6. 레이드 맵 미반환 수정: TryReleaseRaidMap 헬퍼 추가, OnChangeMap/OnSessionDisconnected에서 레이드 맵(1001+) 유저 0명 시 인스턴스 맵 해제 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -28,6 +28,12 @@ public class PartyManager
|
||||
memeberIds = new List<int>();
|
||||
}
|
||||
|
||||
// 리더 중복 방지: 기존 멤버 목록에 리더가 없을 때만 추가
|
||||
if (!memeberIds.Contains(leaderId))
|
||||
{
|
||||
memeberIds.Add(leaderId);
|
||||
}
|
||||
|
||||
party = new PartyInfo
|
||||
{
|
||||
PartyId = partyId,
|
||||
@@ -35,10 +41,14 @@ public class PartyManager
|
||||
PartyName = partyName,
|
||||
PartyMemberIds = memeberIds
|
||||
};
|
||||
party.PartyMemberIds.Add(leaderId);
|
||||
|
||||
parties[partyId] = party;
|
||||
playerPartyMap[leaderId] = partyId;
|
||||
|
||||
// 모든 멤버를 playerPartyMap에 등록
|
||||
foreach (int memberId in memeberIds)
|
||||
{
|
||||
playerPartyMap[memberId] = partyId;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user