선택 사항인 재설정 일정과 기간이 있는 토너먼트가 생성됩니다. 이 값을 사용하면 토너먼트가 다음 기간을 위해 재설정되기 전까지 토너먼트를 재생할 수 있는 시간을 편리하게 제어할 수 있습니다. 예를 들어 매일 정오에 시작하여 한 시간 동안만 진행되는 토너먼트를 만들 수 있습니다. 이 규칙은 CRON 표현식(“0 12 * * *")과 3600초의 기간으로 표현됩니다.
토너먼트에는 허용되는 상대방 수를 제한하고 (즉, 선착순) 선택적인 참가 요구 사항을 적용할 수 있습니다. 예를 들어 최초 10,000명의 상대방만 가입이 허용되는 경우 모든 상대방은 가입해야 점수를 제출할 수 있습니다.
토너먼트는 프로그래밍 방식으로 생성되어 나중에 시작하거나 생성 직후에 시작되며 모두 특별한 구성의 순위표로 표현됩니다.
토너먼트는 사용자가 아닌 상대도 플레이할 수 있습니다. 예를 들어 길드 ID로 점수를 제출하는 길드 토너먼트를 구현할 수 있습니다.
서버에서 생성된 토너먼트를 찾습니다. 토너먼트는 카테고리와 시작 및 종료 시간을 통해 필터링할 수 있습니다.
시작 및 종료 시간 매개변수를 생략하면 진행 중인 토너먼트와 미래 토너먼트가 반환됩니다.
종료 시간 매개변수를 0(으)로 설정하면 결과에 종료 시간이 설정되지 않은 토너먼트만 포함됩니다.
종료 시간을 > 0 Unix 타임스탬프로 설정하면 상한선 역할을 하며 그 이전에 종료되는 토너먼트만 반환합니다(종료 시간이 없는 토너먼트 제외).
시작 시간을> 0 Unix 타임스탬프로 설정하면 이보다 늦은 시간에 시작하는 토너먼트가 반환됩니다.
Client
1
2
curl -X GET "http://127.0.0.1:7350/v2/tournament?category_start=<category_start>&category_end=<category_end>&start_time=<start_time>&end_time=<end_time>&limit=<limit>&cursor=<cursor>"\
-H 'Authorization: Bearer <session token>'
Client
1
2
3
4
5
6
7
varcategoryStart=1;varcategoryEnd=2;varstartTime=1538147711;varendTime=null;// all tournaments from the start time
varlimit=100;// number to list per page
varcursor=null;varresult=awaitclient.listTournaments(session,categoryStart,categoryEnd,startTime,endTime,limit,cursor);
Client
1
2
3
4
5
6
7
varcategoryStart=1;varcategoryEnd=2;varstartTime=1538147711;varendTime=null;// all tournaments from the start timevarlimit=100;// number to list per pagevarcursor=null;varresult=awaitclient.ListTournamentsAsync(session,categoryStart,categoryEnd,startTime,endTime,limit,cursor);
Client
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
autosuccessCallback=[](NTournamentListPtrlist){std::cout<<"Tournament count "<<list->tournaments.size()<<std::endl;for(auto&tournament:list->tournaments){std::cout<<"Tournament ID "<<tournament.id<<", title "<<tournament.title<<std::endl);}};uint32_tcategoryStart=1;uint32_tcategoryEnd=2;uint32_tstartTime=1538147711;uint32_tendTime=null;// all tournaments from the start time
int32_tlimit=100;// number to list per page
client->listTournaments(session,categoryStart,categoryEnd,startTime,endTime,limit,opt::nullopt,successCallback);
Client
1
2
3
4
5
6
7
intcategoryStart=1;intcategoryEnd=2;intstartTime=1538147711;intendTime=null;// all tournaments from the start timeintlimit=100;// number to list per pageStringcursor=null;TournamentListtournaments=client.listTournaments(session,categoryStart,categoryEnd,startTime,endTime,limit,cursor).get();
Client
1
2
3
4
5
6
7
8
9
10
11
varcategory_start=1varcategory_end=2varstart_time=1538147711varend_time=null# all tournaments from the start timevarlimit=100# number to list per pagevarcursor=nullvarresult:NakamaAPI.ApiTournamentList=yield(client.list_tournaments_async(session,category_start,category_end,start_time,end_time,limit,cursor),"completed")ifresult.is_exception():print("An error occurred: %s"%result)returnprint("Tournaments: %s"%[result])
autosuccessCallback=[](){std::cout<<"Successfully joined tournament"<<std::cout;};stringid="someid";client->joinTournament(session,id,successCallback);
varid="someid";varscore=100L;varsubscore=10L;// using Nakama.TinyJson;varmetadata=newDictionary<string,string>(){{"weather_conditions","sunny"},{"track_name","Silverstone"}}.ToJson();varnewRecord=awaitclient.WriteTournamentRecordAsync(session,id,score,subscore,metadata);Console.WriteLine(newRecord);
localid="4ec4f126-3f9d-11e7-84ef-b7c182b36521"localsort="desc"-- one of: "desc", "asc"localoperator="best"-- one of: "best", "set", "incr"localreset="0 12 * * *"-- noon UTC each daylocalmetadata={weather_conditions="rain"}title="Daily Dash"description="Dash past your opponents for high scores and big rewards!"category=1start_time=nk.time()/1000-- starts now in secondsend_time=0-- never end, repeat the tournament each day foreverduration=3600-- in secondsmax_size=10000-- first 10,000 players who joinmax_num_score=3-- each player can have 3 attempts to scorejoin_required=true-- must join to competenk.tournament_create(id,sort,operator,duration,reset,metadata,title,description,category,start_time,end_time,max_size,max_num_score,join_required)
// import "github.com/gofrs/uuid"
id:=uuid.Must(uuid.NewV4())sortOrder:="desc"// one of: "desc", "asc"
operator:="best"// one of: "best", "set", "incr"
resetSchedule:="0 12 * * *"// noon UTC each day
metadata:=map[string]interface{}{}title:="Daily Dash"description:="Dash past your opponents for high scores and big rewards!"category:=1startTime:=int(time.Now().UTC().Unix())// start now
endTime:=0// never end, repeat the tournament each day forever
duration:=3600// in seconds
maxSize:=10000// first 10,000 players who join
maxNumScore:=3// each player can have 3 attempts to score
joinRequired:=true// must join to compete
err:=nk.TournamentCreate(ctx,id.String(),sortOrder,operator,resetSchedule,metadata,title,description,category,startTime,endTime,duration,maxSize,maxNumScore,joinRequired)iferr!=nil{logger.Printf("unable to create tournament: %q",err.Error())return"",runtime.NewError("failed to create tournament",3)}
letid='4ec4f126-3f9d-11e7-84ef-b7c182b36521';letsortOrder=nkruntime.SortOrder.DESCENDING;letoperator=nkruntime.Operator.BEST;letduration=3600;// In seconds.
letresetSchedule='0 12 * * *';// Noon UTC each day.
letmetadata={weatherConditions:'rain',};lettitle='Daily Dash';letdescription="Dash past your opponents for high scores and big rewards!";letcategory=1;letstartTime=0;// Start now.
letendTime=0;// Never end, repeat the tournament each day forever.
letmaxSize=10000;// First 10,000 players who join.
letmaxNumScore=3;// Each player can have 3 attempts to score.
letjoinRequired=true;// Must join to compete.
try{nk.tournamentCreate(id,sortOrder,operator,duration,resetSchedule,metadata,title,description,category,startTime,endTime,maxSize,maxNumScore,joinRequired);}catch(error){// Handle error
}
err:=nk.TournamentDelete(ctx,id)iferr!=nil{logger.Printf("unable to delete tournament: %q",err.Error())return"",runtime.NewError("failed to delete tournament",3)}
id:="someid"userID:="someuserid"attempts:=10err:=nk.TournamentAddAttempt(ctx,id,userID,attempts)iferr!=nil{logger.Printf("unable to update user %v record attempts: %q",userID,err.Error())return"",runtime.NewError("failed to add tournament attempts",3)}