Ask Your Question
0

매치메이킹 관련 문의(2016-10-19)

asked 2016-11-30 18:24:26 +0900

inkeun.kim gravatar image

안녕하세요.. 하고자 하는 작업이 두 유저 간의 레벨을 비교해서 매치 시키는 것입니다. 같은 레벨을 매치를 시키면 문제가 없는데 같은 레벨이 없는 경우 시간이 지남에 따라 레벨 차이가 1, 2, 3 도 매치를 시키고 싶습니다.

http://www.ifunfactory.com/engine/doc... CheckMatch() 예제에서는 5로 되어 있는데 5 + elapsed_time 이렇게 해도 되는지 알고 싶습니다.

edit retag flag offensive close merge delete

5 answers

Sort by » oldest newest most voted
0

answered 2016-11-30 18:24:54 +0900

inkeun.kim gravatar image

Answer by seunghyun · 2016-10-19 AM 08:03

안녕하세요, 아이펀팩토리입니다.

http://www.ifunfactory.com/engine/doc... 위 예제는 플레이어 간 레벨 차이가 5 를 초과할 경우 매치 시키지 않지만 매치메이킹 요청 후 7 초가 지났다면 관계 없이 매치 시킵니다.

"5 + elapsed_time" 가 정확히 어떤 것을 의도하신 것인지 조금 더 구체적으로 설명 부탁 드립니다.

아래는 시간이 지남에 따라 레발 차이를 완화 하는 간단한 예제입니다.

레벨차이 = abs(유저1레벨 - 유저2레벨)
레벨차이 = max(레벨차이 - 경과시간, 0)
if (경과시간 <= 최대레벨차이) {
return true
}

경과시간은 초 단위로 넘어오며 위 예의 경우 1 초마다 1 레벨씩 완화 하게 됩니다. (경과시간/완화속도) 이렇게 하여 조절 가능합니다.

감사합니다

edit flag offensive delete link more
0

answered 2016-11-30 18:25:24 +0900

inkeun.kim gravatar image

Answer by steve.lee · 2016-10-19 AM 09:13

답변 감사합니다. 시간이 지남에 따라 레벨 차이가 완화 되는 것이 맞습니다.

이렇게 하는 것도 되나요?

bool CheckMatch(const MatchmakingServer::Player &player,
            const MatchmakingServer::Match &match) {
    int64_t elapsed_time_in_sec = player.context["elapsed_time"].GetInteger();
    int64_t player_level = player.context["LEVEL"].GetInteger();
    for (size_t i = 0; i < match.players.size(); ++i) {
        int64_t member_level = match.players[i].context["LEVEL"].GetInteger();
        if (abs(player_level - member_level) > elapsed_time_in_sec) { 
            return false; 
        }
    }
    return true;
}
edit flag offensive delete link more
0

answered 2016-11-30 18:25:32 +0900

inkeun.kim gravatar image

updated 2016-11-30 18:25:42 +0900

steve.lee · 2016-10-19 AM 09:14 0 코드 라인이 이상하게 올라 가네요.. --;;

글을 편집을 할 때는 코드 라인이 정상적으로 보이는데 올리고 나서는 정상적으로 안 보이네요.

edit flag offensive delete link more
0

answered 2016-11-30 18:26:07 +0900

inkeun.kim gravatar image

seunghyun ♦♦ · 2016-10-19 AM 09:56 0 (에디터의 소스 코드 출력에 문제가 있는 것 같습니다.)

if (abs(player_level - member_level) > elapsed_time_in_sec)) {

return false; // 레벨 차이가 경과 시간보다 크다면 매치 X
}

위 코드만 보면 말씀하신 것처럼 시간이 지날 수록 레벨 차이가 완화됩니다.

1 초가 지나면 1 레벨 차이를 허용하고, 2 초가 지나면 2 레벨 차이를 허용, 3초가 지나면 3 레벨 차이 허용... 이렇게 처리될 듯 합니다.

과하면 abs(player_level - member_level) > (elapsed_time_in_sec / 3) 이렇게 줄이셔도 될 듯 합니다.

3 초당 1 레벨 씩 완화하게 됩니다.

감사합니다.

edit flag offensive delete link more
0

answered 2016-11-30 18:26:13 +0900

inkeun.kim gravatar image

steve.lee · 2016-10-19 AM 10:44 0 감사합니다......

edit flag offensive delete link more

Your Answer

Please start posting anonymously - your entry will be published after you log in or create a new account.

Add Answer

Question Tools

1 follower

Stats

Asked: 2016-11-30 18:24:26 +0900

Seen: 46 times

Last updated: Nov 30 '16