Matchmaking
같은 월드 안에서 다른 서버에 접속한 플레이어들을 모아서 연결 랜드로 함께 이동시키는 기능이에요.
Last updated
Was this helpful?
같은 월드 안에서 다른 서버에 접속한 플레이어들을 모아서 연결 랜드로 함께 이동시키는 기능이에요.
Last updated
Was this helpful?
Was this helpful?
--ServerScript에서
local function RequestAddMatch(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에서
local function MatchCallback(player, matchID, playerCount)
-- 매칭 대기열에 유저 등록을 실패하면 matchID가 반환되지 않아요.
if matchID == nil or matchID == "" then
--매칭 관련 정보 초기화
player.MatchID = nil
player.MatchLandOrder = nil
-- 매칭 대기열에 유저 등록을 성공하면 반환된 매칭 서버 ID를 할당해요.
else
player.MatchID = matchID
--유저가 등록된 시점에서 매칭 대기열의 현재 인원 수를 확인할 수 있어요.
print("현재 매칭 서버에 등록된 유저의 수 : ", playerCount)
end
end
Game.OnAddMatchQueueEvent:Connect(MatchCallback)--ServerScript에서
local function MatchTeleportCallback(player)
local playerID = player:GetPlayerID()
-- 매칭 대기열 서버(MatchID)에 등록된 랜드(MatchLandOrder)로 이동 시작
Game:TeleportToMatchServer(playerID, player.MatchLandOrder, player.MatchID)
end
Game.OnMatchTeleportEvent:Connect(MatchTeleportCallback)--ServerScript에서
local function RequestRemoveMatch(player)
--MatchID가 없으면
if not player:IsValidValue("MatchID") or player.MatchID == "" then
print(player, "에게 MatchID가 없습니다.")
--MatchID가 있으면 매칭 대기열에서 유저 제거
else
Game:RemoveMatchQueue(player.MatchID, player)
end
--매칭 관련 정보 초기화
player.MatchID = nil
player.MatchLandOrder = nil
end