같은 월드 안에서 서로 다른 서버에 접속한 유저들을, 특정 조건으로 대기열에 등록해서
같은 조건의 대기열에 등록된 유저들끼리 연결 랜드로 함께 이동시킬 수 있어요.
연결 랜드가 있는 월드에서, 각 랜드에 유저가 접속한 서버가 아래와 같이 있을 때,
서로 다른 서버에 있는 유저들을 같은 매칭 대기열에 등록하면, 특정 랜드로 모아서 이동시킬 수 있어요.
매칭 대기열 등록 📍
매칭 대기열에 유저를 등록할 때,
레이팅이나 점수, 직업 같은 필터 안에서 특정 범위내에 해당하는 유저들끼리만 모아서 이동시킬 수 있어요.
ex) 예를 들어 점수가 1~100인 유저들은 A랜드, 점수가 101~200인 유저들은 B랜드로 이동시킬 수 있어요.
AddMatchQueue 함수의 인자는 다음과 같이 구성되며,
❗ Player와 FilterValue를 제외한 함수의 인자가 모두 같으면, 같은 대기열로 간주해요.
--ServerScript에서 localfunctionRequestAddMatch(player) local filterType ="Raiting" -- 필터타입 (ex : 레이팅, 점수, 클래스 종류 등)local filterValue = player.MMR -- 필터범위에서 사용할 플레이어별 값 (ex : 레이팅, 점수, 클래스 종류 등)-- 필터 값은 숫자만 가능하며 필터범위 최소값~최대값 이내여야 등록 처리돼요.local rangeMin =5-- 필터범위 (최소값)local rangeMax =20-- 필터범위 (최대값)local maxPlayer =2-- 이동에 필요한 인원(이동할 랜드의 랜드인원 수보다 크지 않아야 해요.)local waitTime =20-- 기다릴 시간 player.MatchLandOrder =3-- 매칭으로 이동할 랜드의 연결 순서를 할당해요.-- 매칭 대기열에 유저 등록 Game:AddMatchQueue(player, player.MatchLandOrder, filterType, filterValue, rangeMin, rangeMax, maxPlayer, waitTime) end
매칭 대기열 등록 결과 이벤트 📨
매칭 대기열에 유저 등록이 완료되면 호출되는 이벤트에요.
--ServerScript에서 localfunctionMatchCallback(player,matchID,playerCount) -- 매칭 대기열에 유저 등록을 실패하면 matchID가 반환되지 않아요.if matchID ==nilor matchID =="" then--매칭 관련 정보 초기화 player.MatchID =nil player.MatchLandOrder =nil-- 매칭 대기열에 유저 등록을 성공하면 반환된 매칭 서버 ID를 할당해요.else player.MatchID = matchID--유저가 등록된 시점에서 매칭 대기열의 현재 인원 수를 확인할 수 있어요.print("현재 매칭 서버에 등록된 유저의 수 : ", playerCount)endendGame.OnAddMatchQueueEvent:Connect(MatchCallback)
매칭 이동 이벤트 🚀
매칭 대기열에 등록된 유저의 수가 최대 인원(MaxPlayer)이 되거나, 대기 시간(WaitTime)을 경과하면 호출되는 이벤트에요.
--ServerScript에서 localfunctionMatchTeleportCallback(player)local playerID = player:GetPlayerID()-- 매칭 대기열 서버(MatchID)에 등록된 랜드(MatchLandOrder)로 이동 시작 Game:TeleportToMatchServer(playerID, player.MatchLandOrder, player.MatchID)endGame.OnMatchTeleportEvent:Connect(MatchTeleportCallback)
매칭 대기열에 등록된 유저 삭제 🚪
매칭 대기열에 유저를 등록할 때 반환된 MatchID 정보로 매칭 대기열에 등록된 유저를 삭제해요.
--ServerScript에서 localfunctionRequestRemoveMatch(player) --MatchID가 없으면 ifnot player:IsValidValue("MatchID") or player.MatchID =="" thenprint(player, "에게 MatchID가 없습니다.")--MatchID가 있으면 매칭 대기열에서 유저 제거else Game:RemoveMatchQueue(player.MatchID, player)end--매칭 관련 정보 초기화 player.MatchID =nil player.MatchLandOrder =nilend