GS2-Guild SDK for Game Engine API 레퍼런스
모델
EzGuild
길드
길드는 최대 5개의 속성을 가질 수 있으며, 길드 검색이나 길드 목록 표시 시 이용할 수 있습니다.
길드에는 참가 정책을 설정할 수 있으며, 자유 참가와 승인제를 선택할 수 있습니다.
자유 참가를 선택한 경우, 길드에 참가 요청을 하면 즉시 길드 멤버가 됩니다.
승인제를 선택한 경우, 길드에 참가 요청을 하면 길드 마스터 또는 길드 멤버가 승인할 때까지 길드 멤버가 되지 않습니다.
길드 멤버에게는 역할을 설정할 수 있으며, 길드 마스터, 길드 멤버에 더해 길드가 독자적으로 정의한 최대 10개의 커스텀 역할을 설정할 수 있습니다.
길드 멤버는 길드에 참가했을 때 기본으로 부여되는 역할을 설정할 수 있습니다.
| 타입 | 활성화 조건 | 필수 | 기본값 | 값 제한 | 설명 | |||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| guildModelName | string | ✓ | ~ 128자 | 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. | ||||||||
| name | string | ✓ | UUID | ~ 36자 | 길드명 길드의 고유한 이름을 유지합니다. 이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 각 길드를 식별하는 데 사용됩니다. | |||||||
| displayName | string | ✓ | ~ 64자 | 표시 이름 UI에서 플레이어에게 표시되는, 사람이 읽을 수 있는 길드 이름입니다. 길드명(시스템에서 생성되는 UUID)과 달리, 표시 이름은 길드 생성자가 설정하며 갱신도 가능합니다. 길드 검색 결과, 멤버 목록, 기타 플레이어 대상 화면에 사용됩니다. | ||||||||
| attribute1 | int | 0 ~ 2147483645 | 속성1 길드 검색에서 필터링이나 정렬에 사용할 수 있는 길드의 숫자 속성입니다. 레벨, 지역, 플레이 스타일, 활동 요건 등의 커스텀 길드 속성을 정의하기 위해, 최대 5개의 속성을 개발자가 이용할 수 있습니다. | |||||||||
| attribute2 | int | 0 ~ 2147483645 | 속성2 길드 검색에서 필터링이나 정렬에 사용할 수 있는 길드의 숫자 속성입니다. 자세한 내용은 attribute1 을 참조하십시오. | |||||||||
| attribute3 | int | 0 ~ 2147483645 | 속성3 길드 검색에서 필터링이나 정렬에 사용할 수 있는 길드의 숫자 속성입니다. 자세한 내용은 attribute1 을 참조하십시오. | |||||||||
| attribute4 | int | 0 ~ 2147483645 | 속성4 길드 검색에서 필터링이나 정렬에 사용할 수 있는 길드의 숫자 속성입니다. 자세한 내용은 attribute1 을 참조하십시오. | |||||||||
| attribute5 | int | 0 ~ 2147483645 | 속성5 길드 검색에서 필터링이나 정렬에 사용할 수 있는 길드의 숫자 속성입니다. 자세한 내용은 attribute1 을 참조하십시오. | |||||||||
| metadata | string | ~ 1024자 | 길드 메타데이터 GS2 동작에 영향을 미치지 않는, 길드에 연결된 임의의 데이터입니다. 길드 엠블럼, 설명, 모집 메시지 등 게임 고유의 정보를 저장하는 데 사용할 수 있습니다. | |||||||||
| joinPolicy | 문자열 열거형 enum { “anybody”, “approval” } | ✓ | 참가 방침 사용자가 이 길드에 어떻게 참가할 수 있는지를 제어합니다. “anybody” 는 승인 없이 임의의 사용자가 즉시 참가할 수 있습니다. “approval” 은 사용자가 멤버가 되기 전에 길드 마스터 또는 권한을 가진 멤버가 참가 요청을 승인해야 합니다. 길드 마스터가 언제든지 변경할 수 있습니다.
| |||||||||
| customRoles | List<EzRoleModel> | [] | 0 ~ 10 items | 커스텀 역할 목록 모델 레벨의 역할을 오버라이드하거나 확장하는 길드 고유의 커스텀 역할 정의 목록입니다. 각 길드는 고유한 권한 집합을 가진 최대 10개의 커스텀 역할을 정의할 수 있습니다. 이 역할들은 모델 레벨의 역할에 더해 멤버에게 할당할 수 있습니다. | ||||||||
| members | List<EzMember> | [] | 0 ~ 100 items | 길드 멤버 목록 길드 마스터와 일반 멤버를 포함한, 이 길드의 모든 현재 멤버 목록입니다. 각 항목에는 멤버의 사용자 ID, 할당된 역할, 메타데이터, 참가 타임스탬프가 포함됩니다. 멤버 수는 currentMaximumMemberCount 를 초과할 수 없습니다. |
EzReceiveMemberRequest
받은 참가 요청
멤버 등록 신청을 접수한 상태임을 나타내는 엔티티입니다.
해당 길드가 받은 참가 요청입니다.
해당 길드가 승인하면 참가 요청은 삭제되고 멤버 목록에 등록됩니다.
| 타입 | 활성화 조건 | 필수 | 기본값 | 값 제한 | 설명 | |
|---|---|---|---|---|---|---|
| userId | string | ✓ | ~ 128자 | 사용자 ID 이 길드에 참가 요청을 보낸 플레이어의 GS2 사용자 ID입니다. 신청자를 식별하며, 승인 시 길드의 멤버 목록에 추가하거나 거부 시 통지하기 위해 사용됩니다. | ||
| targetGuildName | string | ✓ | ~ 128자 | 대상 길드명 이 참가 요청을 수신한 길드의 고유한 이름(UUID)입니다. 이 보류 중인 요청을 수신함에 가지고 있는 특정 길드 인스턴스를 식별하며, 길드의 멤버 관리 조작과 요청을 대조하기 위해 사용됩니다. |
EzSendMemberRequest
송신한 참가 요청
멤버 등록을 신청 중인 상태를 나타내는 엔티티입니다.
해당 사용자가 길드에 대해 송신한 참가 요청입니다.
대상 길드가 승인하면 참가 요청은 삭제되고 멤버 목록에 등록됩니다.
| 타입 | 활성화 조건 | 필수 | 기본값 | 값 제한 | 설명 | |
|---|---|---|---|---|---|---|
| userId | string | ✓ | ~ 128자 | 사용자 ID 이 길드 참가 요청을 송신한 플레이어의 GS2 사용자 ID입니다. 요청을 보낸 사용자를 식별하며, 승인 시 길드의 멤버 목록에 추가하기 위해 사용됩니다. | ||
| targetGuildName | string | ✓ | ~ 128자 | 대상 길드 이름 참가 요청이 송신된 길드의 고유한 이름(UUID)입니다. 사용자가 참가를 요청하고 있는 특정 길드 인스턴스를 식별하며, 요청 처리를 위해 길드의 수신함을 특정하는 데 사용됩니다. |
EzJoinedGuild
가입 중인 길드
특정 길드에 대한 사용자의 멤버십을 나타냅니다. 사용자가 길드에 가입할 때(직접 가입 또는 신청 승인) 생성되며, 사용자가 탈퇴 또는 추방될 때 삭제됩니다. 사용자가 현재 어느 길드에 소속되어 있는지를 추적하여 maxConcurrentJoinGuilds 제한의 적용을 가능하게 합니다.
| 타입 | 활성화 조건 | 필수 | 기본값 | 값 제한 | 설명 | |
|---|---|---|---|---|---|---|
| guildModelName | string | ✓ | ~ 128자 | 길드 모델 이름 가입 중인 길드가 속한 길드 모델의 이름입니다. 멤버십 제한, 롤 설정, 기타 길드 타입 설정을 포함하는 길드 모델 정의를 참조합니다. | ||
| guildName | string | ✓ | ~ 128자 | 길드 이름 사용자가 가입한 길드의 고유한 이름(UUID)입니다. 길드 모델 내의 특정 길드 인스턴스를 식별하기 위해 사용됩니다. | ||
| userId | string | ✓ | ~ 128자 | 사용자ID | ||
| createdAt | long | ※ | 현재 시각 | 생성일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 |
EzIgnoreUser
거부 사용자
특정 길드에 대한 가입이 차단된 사용자를 나타냅니다. 사용자가 거부 리스트에 추가되면 참가 신청이 자동으로 거부되며, 가입 정책이 자유 가입으로 설정되어 있어도 길드에 가입할 수 없습니다. 길드 마스터가 원치 않는 멤버를 관리하기 위해 사용합니다.
| 타입 | 활성화 조건 | 필수 | 기본값 | 값 제한 | 설명 | |
|---|---|---|---|---|---|---|
| userId | string | ✓ | ~ 128자 | 사용자ID |
EzLastGuildMasterActivity
마지막 길드 마스터 활동
길드 내에서 길드 마스터가 마지막으로 활동을 수행한 일시를 추적합니다. 이 타임스탬프는 비활성 기반 계승 시스템에서 사용됩니다. 길드 모델에서 설정된 inactivityPeriodDays가 길드 마스터의 활동 없이 경과하면, 리더십을 다른 멤버에게 자동으로 이양할 수 있습니다. 각 길드는 길드 마스터가 길드 조작을 수행할 때마다 업데이트되는 하나의 활동 기록을 가집니다.
| 타입 | 활성화 조건 | 필수 | 기본값 | 값 제한 | 설명 | |
|---|---|---|---|---|---|---|
| userId | string | ✓ | ~ 128자 | 사용자ID | ||
| updatedAt | long | ※ | 현재 시각 | 최종 갱신일시 UNIX 시간·밀리초 ※ 서버가 자동으로 설정 |
EzGuildModel
길드 모델
길드 모델이란 길드에 가입 가능한 최대 인원수 설정 및 길드 내 직책별 권한 설정을 가지는 엔티티입니다.
| 타입 | 활성화 조건 | 필수 | 기본값 | 값 제한 | 설명 | |
|---|---|---|---|---|---|---|
| name | string | ✓ | ~ 128자 | 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. | ||
| metadata | string | ~ 2048자 | 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. | |||
| defaultMaximumMemberCount | int | ✓ | 1 ~ 2147483646 | 기본 최대 멤버 수 새 길드가 생성될 때 허용되는 초기 최대 멤버 수입니다. 이 값은 신규 길드의 currentMaximumMemberCount 초기값으로 사용됩니다. 길드 조작이나 입수 액션을 통해 나중에 maximumMemberCount 상한까지 늘릴 수 있습니다. | ||
| maximumMemberCount | int | ✓ | 1 ~ 2147483646 | 최대 멤버 수 상한 길드가 가질 수 있는 멤버 수의 절대적인 상한입니다. 길드의 currentMaximumMemberCount는 이 값을 초과할 수 없습니다. 길드가 의도된 규모를 넘어 성장하는 것을 방지하는 하드 캡으로 작동합니다. | ||
| roles | List<EzRoleModel> | ✓ | 1 ~ 10 items | 롤 모델 리스트 이 타입의 길드 내에서 이용 가능한 롤 정의 리스트입니다. guildMasterRole 및 guildMemberDefaultRole에서 참조되는 롤을 최소한 포함해야 합니다. 각 롤은 정책 문서를 통해 고유한 권한 집합을 정의합니다. 최대 10개의 롤을 정의할 수 있습니다. | ||
| rejoinCoolTimeMinutes | int | 0 | 0 ~ 2147483646 | 재가입 쿨타임(분) 사용자가 길드를 탈퇴한 후 다시 길드에 가입할 수 있게 되기까지의 쿨다운 기간(분)입니다. 0으로 설정하면 즉시 재가입이 가능합니다. 사용자가 길드에 반복적으로 가입·탈퇴하는 악용 패턴을 방지합니다. |
EzRoleModel
롤 모델
롤 모델은 길드 내에서의 역할을 정의하고, 각 역할별로 실행할 수 있는 처리에 관한 권한을 설정합니다.
| 타입 | 활성화 조건 | 필수 | 기본값 | 값 제한 | 설명 | |
|---|---|---|---|---|---|---|
| name | string | ✓ | ~ 128자 | 롤 모델 이름 롤 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. | ||
| metadata | string | ~ 2048자 | 메타데이터 메타데이터에는 임의의 값을 설정할 수 있습니다. 이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. | |||
| policyDocument | string | ✓ | ~ 10240자 | 정책 문서 이 역할의 권한을 정의하는 JSON 형식의 정책 문서입니다. 이 역할에 할당된 멤버에 대해 어떤 길드 조작(참가 요청 승인/거부, 멤버 추방, 길드 정보 업데이트, 멤버 역할 변경 등)이 허용되거나 거부되는지를 지정합니다. |
EzMember
멤버
길드 멤버 목록을 관리하는 엔티티
| 타입 | 활성화 조건 | 필수 | 기본값 | 값 제한 | 설명 | |
|---|---|---|---|---|---|---|
| userId | string | ✓ | ~ 128자 | 사용자ID | ||
| roleName | string | ✓ | ~ 128자 | 롤 모델 이름 롤 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. | ||
| metadata | string | ~ 512자 | 길드 멤버의 메타데이터 GS2의 동작에 영향을 주지 않는, 이 길드 멤버와 연결된 임의의 데이터입니다. 공헌 포인트, 마지막 로그인 시간, 길드 임원에게 표시되는 메모 등 멤버 고유의 정보를 저장하는 데 사용할 수 있습니다. | |||
| joinedAt | long | ※ | 현재 시각 | 참가 일시 UNIX 시간·밀리초 |
EzVerifyActionResult
검증 액션 실행 결과
EzConsumeActionResult
소비 액션 실행 결과
EzAcquireActionResult
획득 액션 실행 결과
EzTransactionResult
트랜잭션 실행 결과
서버 사이드에서 트랜잭션 자동 실행 기능을 이용하여 실행된 트랜잭션의 실행 결과
| 타입 | 활성화 조건 | 필수 | 기본값 | 값 제한 | 설명 | |
|---|---|---|---|---|---|---|
| transactionId | string | ✓ | 36 ~ 36자 | 트랜잭션 ID | ||
| verifyResults | List<EzVerifyActionResult> | 0 ~ 10 items | 검증 액션의 실행 결과 목록 | |||
| consumeResults | List<EzConsumeActionResult> | [] | 0 ~ 10 items | 소비 액션의 실행 결과 목록 | ||
| acquireResults | List<EzAcquireActionResult> | [] | 0 ~ 100 items | 획득 액션 실행 결과 리스트 |
메서드
getGuildModel
이름을 지정하여 길드 타입 정의를 취득한다
이름을 지정하여 길드 모델을 1건 취득합니다.
취득할 수 있는 정보에는 멤버 상한, 역할 정의와 그 권한, 가입 방식 설정, 재가입 쿨다운 기간, 비활성 길드 마스터의 승계 설정이 포함됩니다.
특정 길드 타입의 규칙을 표시할 때 사용합니다. 예를 들어 길드 생성 화면이나 상세 화면에서 “최대 멤버: 30명, 가입: 승인제, 역할: 마스터 / 부길드장 / 멤버"와 같이 표시할 수 있습니다.
Request
| 타입 | 활성화 조건 | 필수 | 기본값 | 값 제한 | 설명 | |
|---|---|---|---|---|---|---|
| namespaceName | string | ✓ | ~ 128자 | 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. | ||
| guildModelName | string | ✓ | ~ 128자 | 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. |
Result
| 타입 | 설명 | |
|---|---|---|
| item | EzGuildModel | 길드 모델 |
구현 예제
var domain = gs2.Guild.Namespace(
namespaceName: "namespace-0001"
).GuildModel(
guildModelName: "guild-0001"
);
var item = await domain.ModelAsync(); var domain = gs2.Guild.Namespace(
namespaceName: "namespace-0001"
).GuildModel(
guildModelName: "guild-0001"
);
var future = domain.ModelFuture();
yield return future;
var item = future.Result; const auto Domain = Gs2->Guild->Namespace(
"namespace-0001" // namespaceName
)->GuildModel(
"guild-0001" // guildModelName
);
const auto Future = Domain->Model();
Future->StartSynchronousTask();
if (Future->GetTask().IsError())
{
return false;
}var domain = ez.guild.namespace_(
"namespace-0001"
).guild_model(
"guild-0001"
)
var async_result = await domain.model()
if async_result.error != null:
push_error(str(async_result.error))
return
var result = async_result.result값 변경 이벤트 핸들링
var domain = gs2.Guild.Namespace(
namespaceName: "namespace-0001"
).GuildModel(
guildModelName: "guild-0001"
);
// 이벤트 핸들링 시작
var callbackId = domain.Subscribe(
value => {
// 값이 변화했을 때 호출됨
// value에는 변경 후의 값이 전달됨
}
);
// 이벤트 핸들링 정지
domain.Unsubscribe(callbackId); var domain = gs2.Guild.Namespace(
namespaceName: "namespace-0001"
).GuildModel(
guildModelName: "guild-0001"
);
// 이벤트 핸들링 시작
var callbackId = domain.Subscribe(
value => {
// 값이 변화했을 때 호출됨
// value에는 변경 후의 값이 전달됨
}
);
// 이벤트 핸들링 정지
domain.Unsubscribe(callbackId); const auto Domain = Gs2->Guild->Namespace(
"namespace-0001" // namespaceName
)->GuildModel(
"guild-0001" // guildModelName
);
// 이벤트 핸들링 시작
const auto CallbackId = Domain->Subscribe(
[](TSharedPtr<Gs2::Guild::Model::FGuildModel> value) {
// 값이 변화했을 때 호출됨
// value에는 변경 후의 값이 전달됨
}
);
// 이벤트 핸들링 정지
Domain->Unsubscribe(CallbackId);var domain = ez.guild.namespace_(
"namespace-0001"
).guild_model(
"guild-0001"
)
# 이벤트 핸들링 시작
var callback_id = domain.subscribe_model(func(value):
# 값이 변화했을 때 호출됨
# value에는 변경 후의 값이 전달됩니다
pass
)
# 이벤트 핸들링 정지
domain.unsubscribe_model(callback_id)이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다.
로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다.
따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다.
listGuildModels
길드 타입 정의 목록을 취득한다
이 네임스페이스에 등록된 모든 길드 모델을 취득합니다.
길드 모델은 길드의 규칙을 정의합니다. 최대 멤버 수, 역할 권한(예: “부길드장은 멤버를 추방할 수 있다”), 가입 방식(자유 가입/승인제), 재가입 쿨다운, 플레이어가 동시에 소속될 수 있는 길드 수 등입니다.
길드 마스터가 장기간 로그인하지 않을 경우의 자동 교체(최고참 멤버로의 승계) 설정도 포함됩니다.
플레이어가 길드를 둘러보거나 생성할 때, 어떤 유형의 길드가 있는지 표시하는 데 사용합니다.
Request
| 타입 | 활성화 조건 | 필수 | 기본값 | 값 제한 | 설명 | |
|---|---|---|---|---|---|---|
| namespaceName | string | ✓ | ~ 128자 | 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. |
Result
| 타입 | 설명 | |
|---|---|---|
| items | List<EzGuildModel> | 길드 모델 목록 |
구현 예제
var domain = gs2.Guild.Namespace(
namespaceName: "namespace-0001"
);
var items = await domain.GuildModelsAsync(
).ToListAsync(); var domain = gs2.Guild.Namespace(
namespaceName: "namespace-0001"
);
var it = domain.GuildModels(
);
List<EzGuildModel> items = new List<EzGuildModel>();
while (it.HasNext())
{
yield return it.Next();
if (it.Error != null)
{
onError.Invoke(it.Error, null);
break;
}
if (it.Current != null)
{
items.Add(it.Current);
}
else
{
break;
}
} const auto Domain = Gs2->Guild->Namespace(
"namespace-0001" // namespaceName
);
const auto It = Domain->GuildModels(
);
TArray<Gs2::UE5::Guild::Model::FEzGuildModelPtr> Result;
for (auto Item : *It)
{
if (Item.IsError())
{
return false;
}
Result.Add(Item.Current());
}값 변경 이벤트 핸들링
var domain = gs2.Guild.Namespace(
namespaceName: "namespace-0001"
);
// 이벤트 핸들링 시작
var callbackId = domain.SubscribeGuildModels(
() => {
// 리스트의 요소가 변화했을 때 호출됨
}
);
// 이벤트 핸들링 정지
domain.UnsubscribeGuildModels(callbackId); var domain = gs2.Guild.Namespace(
namespaceName: "namespace-0001"
);
// 이벤트 핸들링 시작
var callbackId = domain.SubscribeGuildModels(
() => {
// 리스트의 요소가 변화했을 때 호출됨
}
);
// 이벤트 핸들링 정지
domain.UnsubscribeGuildModels(callbackId); const auto Domain = Gs2->Guild->Namespace(
"namespace-0001" // namespaceName
);
// 이벤트 핸들링 시작
const auto CallbackId = Domain->SubscribeGuildModels(
[]() {
// 리스트의 요소가 변화했을 때 호출됨
}
);
// 이벤트 핸들링 정지
Domain->UnsubscribeGuildModels(CallbackId);이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다.
로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다.
따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다.
assume
길드의 대리로서 조작할 권한을 취득하기
길드로서 조작을 수행하기 위한 길드 액세스 토큰을 취득합니다. 길드 설정 업데이트, 참가 요청 승인, 멤버 제명 등의 조작에 필요합니다.
플레이어는 해당 길드의 멤버여야 하며, 실행할 수 있는 조작은 역할 권한에 따라 달라집니다.
UpdateGuild, AcceptRequest, RejectRequest, DeleteMemberFromGuild 등의 길드 관리 API를 호출하기 전에 반드시 필요한 단계입니다.
“길드 관리 모드로 전환하는” 것과 같은 이미지입니다. 이를 호출한 후, 반환된 토큰을 사용하여 이어지는 길드 조작을 수행합니다.
Request
| 타입 | 활성화 조건 | 필수 | 기본값 | 값 제한 | 설명 | |
|---|---|---|---|---|---|---|
| namespaceName | string | ✓ | ~ 128자 | 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. | ||
| guildModelName | string | ✓ | ~ 128자 | 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. | ||
| gameSession | GameSession | ✓ | GameSession | |||
| guildName | string | ✓ | UUID | ~ 36자 | 길드명 길드의 고유한 이름을 유지합니다. 이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 각 길드를 식별하는 데 사용됩니다. |
Result
| 타입 | 설명 | |
|---|---|---|
| token | string | 길드용 액세스 토큰 |
| userId | string | 사용자ID |
| expire | long | 유효기간 토큰의 유효기간을 나타내는 타임스탬프입니다. 이 시각에 도달하면 토큰이 무효가 됩니다. UNIX 시간(밀리초) |
Error
이 API에는 특별한 예외가 정의되어 있습니다.
GS2-SDK for Game Engine에서는 게임 내에서 핸들링이 필요할 것으로 예상되는 에러를, 일반적인 예외에서 파생된 특수화된 예외로 제공하여 다루기 쉽게 하고 있습니다.
일반적인 에러의 종류와 핸들링 방법은 여기 문서를 참고해 주세요.
| 타입 | 베이스 클래스 | 설명 |
|---|---|---|
| NotIncludedGuildMemberException | NotFoundException | 길드 멤버가 아닙니다. |
구현 예제
try {
var domain = gs2.Guild.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
);
var result = await domain.AssumeAsync(
gatewaySetting: new GatewaySetting {
gatewayNamespaceName = "namespace-0001",
allowConcurrentAccess = false
},
guildModelName: "guild-model-0001",
guildName: "guild-0001"
);
} catch(Gs2.Gs2Guild.Exception.NotIncludedGuildMemberException e) {
// You are not a member of the guild.
} var domain = gs2.Guild.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
);
var future = domain.AssumeFuture(
gatewaySetting: new GatewaySetting {
gatewayNamespaceName = "namespace-0001",
allowConcurrentAccess = false
},
guildModelName: "guild-model-0001",
guildName: "guild-0001"
);
yield return future;
if (future.Error != null)
{
if (future.Error is Gs2.Gs2Guild.Exception.NotIncludedGuildMemberException)
{
// You are not a member of the guild.
}
onError.Invoke(future.Error, null);
yield break;
} const auto Domain = Gs2->Guild->Namespace(
"namespace-0001" // namespaceName
)->Me(
GameSession
);
const auto Future = Domain->Assume(
MakeShared<Gs2::UE5::Util::FGatewaySetting>(
"namespace-0001", // gatewayNamespaceName
false // allowConcurrentAccess
),
"guild-model-0001", // guildModelName
"guild-0001" // guildName
);
Future->StartSynchronousTask();
if (Future->GetTask().IsError())
{
auto e = Future->GetTask().Error();
if (e->IsChildOf(Gs2::Guild::Error::FNotIncludedGuildMemberError::Class))
{
// You are not a member of the guild.
}
return false;
}
const auto Result = Future->GetTask().Result();var domain = ez.guild.namespace_(
"namespace-0001"
).me(game_session)
var async_result = await domain.assume(
"guild-model-0001", # guild_model_name
"guild-0001" # guild_name
)
if async_result.error != null:
if async_result.error is Gs2GuildNotIncludedGuildMemberException:
# 길드 멤버가 아닙니다.
pass
push_error(str(async_result.error))
return
var result = async_result.resultbatchUpdateGuildMemberRole
여러 길드 멤버의 역할을 한꺼번에 변경하기
여러 길드 멤버의 역할을 한 번의 API 호출로 한꺼번에 업데이트합니다. 예를 들어 여러 멤버를 동시에 “임원"으로 승격시키는 것과 같은 작업입니다.
이 API는 길드로서 호출합니다(먼저 Assume이 필요합니다). 적절한 역할 권한을 가진 멤버만 이 작업을 실행할 수 있습니다.
길드 마스터가 다수의 멤버 역할을 한 번에 재편성하고 싶을 때, 한 명씩 변경하는 대신 사용합니다.
Request
| 타입 | 활성화 조건 | 필수 | 기본값 | 값 제한 | 설명 | |
|---|---|---|---|---|---|---|
| namespaceName | string | ✓ | ~ 128자 | 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. | ||
| guildModelName | string | ✓ | ~ 128자 | 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. | ||
| guildGameSession | GuildGameSession | ✓ | ~ 128자 | GuildGameSession
assume으로 취득한 GuildGameSession입니다.권한은 assume을 호출한 멤버의 역할에 연결된 PolicyDocument로 결정됩니다.변경을 수행하려면 해당 역할의 PolicyDocument에 Gs2Guild:BatchUpdateMemberRole 권한이 필요합니다. | ||
| members | List<EzMember> | ✓ | 1 ~ 100 items | 업데이트할 멤버 목록 |
Result
| 타입 | 설명 | |
|---|---|---|
| item | EzGuild | 업데이트한 길드 |
구현 예제
var domain = gs2.Guild.Namespace(
namespaceName: "namespace-0001"
);
var result = await domain.BatchUpdateGuildMemberRoleAsync(
guildModelName: "guild-model-0001",
accessToken: null,
members: new List<Gs2.Unity.Gs2Guild.Model.EzMember> {
new Gs2.Unity.Gs2Guild.Model.EzMember() {
UserId = "user-0002",
RoleName = "role-0001",
},
new Gs2.Unity.Gs2Guild.Model.EzMember() {
UserId = "user-0003",
RoleName = "role-0002",
},
}
);
var item = await result.ModelAsync(); var domain = gs2.Guild.Namespace(
namespaceName: "namespace-0001"
);
var future = domain.BatchUpdateGuildMemberRoleFuture(
guildModelName: "guild-model-0001",
accessToken: null,
members: new List<Gs2.Unity.Gs2Guild.Model.EzMember> {
new Gs2.Unity.Gs2Guild.Model.EzMember() {
UserId = "user-0002",
RoleName = "role-0001",
},
new Gs2.Unity.Gs2Guild.Model.EzMember() {
UserId = "user-0003",
RoleName = "role-0002",
},
}
);
yield return future;
if (future.Error != null)
{
onError.Invoke(future.Error, null);
yield break;
}
var future2 = future.Result.ModelFuture();
yield return future2;
if (future2.Error != null)
{
onError.Invoke(future2.Error, null);
yield break;
}
var result = future2.Result; const auto Domain = Gs2->Guild->Namespace(
"namespace-0001" // namespaceName
);
const auto Future = Domain->BatchUpdateGuildMemberRole(
"guild-model-0001", // guildModelName
nullptr, // accessToken
[]
{
auto v = MakeShared<TArray<TSharedPtr<Gs2::UE5::Guild::Model::FEzMember>>>();
v->Add(
MakeShared<Gs2::UE5::Guild::Model::FEzMember>()
->WithUserId(TOptional<FString>("user-0002"))
->WithRoleName(TOptional<FString>("role-0001"))
);
v->Add(
MakeShared<Gs2::UE5::Guild::Model::FEzMember>()
->WithUserId(TOptional<FString>("user-0003"))
->WithRoleName(TOptional<FString>("role-0002"))
);
return v;
}() // members
);
Future->StartSynchronousTask();
if (Future->GetTask().IsError())
{
return false;
}
// 변경된 값 / 결과 값을 취득
const auto Future2 = Future->GetTask().Result()->Model();
Future2->StartSynchronousTask();
if (Future2->GetTask().IsError())
{
return Future2->GetTask().Error();
}
const auto Result = Future2->GetTask().Result();createGuild
길드를 신규 작성하기
플레이어를 길드 마스터(리더)로 하여 새로운 길드를 작성합니다.
길드의 표시 이름, 최대 5개의 커스텀 속성(플레이 스타일, 활동 시간, 언어 등), 메타데이터, 참가 방식(자유 참가/승인제), 커스텀 역할 정의를 설정할 수 있습니다.
길드를 작성한 플레이어는 자동으로 길드 마스터 역할을 가진 첫 번째 멤버가 됩니다.
“길드 작성” 버튼이나 폼에 사용합니다. 플레이어가 새로운 길드의 이름, 규칙, 설정을 정하는 화면입니다.
Request
| 타입 | 활성화 조건 | 필수 | 기본값 | 값 제한 | 설명 | |||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| namespaceName | string | ✓ | ~ 128자 | 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. | ||||||||
| guildModelName | string | ✓ | ~ 128자 | 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. | ||||||||
| gameSession | GameSession | ✓ | GameSession | |||||||||
| displayName | string | ✓ | ~ 64자 | 표시 이름 UI에서 플레이어에게 표시되는, 사람이 읽을 수 있는 길드 이름입니다. 길드명(시스템에서 생성되는 UUID)과 달리, 표시 이름은 길드 생성자가 설정하며 갱신도 가능합니다. 길드 검색 결과, 멤버 목록, 기타 플레이어 대상 화면에 사용됩니다. | ||||||||
| attribute1 | int | 0 ~ 2147483645 | 속성1 길드 검색에서 필터링이나 정렬에 사용할 수 있는 길드의 숫자 속성입니다. 레벨, 지역, 플레이 스타일, 활동 요건 등의 커스텀 길드 속성을 정의하기 위해, 최대 5개의 속성을 개발자가 이용할 수 있습니다. | |||||||||
| attribute2 | int | 0 ~ 2147483645 | 속성2 길드 검색에서 필터링이나 정렬에 사용할 수 있는 길드의 숫자 속성입니다. 자세한 내용은 attribute1 을 참조하십시오. | |||||||||
| attribute3 | int | 0 ~ 2147483645 | 속성3 길드 검색에서 필터링이나 정렬에 사용할 수 있는 길드의 숫자 속성입니다. 자세한 내용은 attribute1 을 참조하십시오. | |||||||||
| attribute4 | int | 0 ~ 2147483645 | 속성4 길드 검색에서 필터링이나 정렬에 사용할 수 있는 길드의 숫자 속성입니다. 자세한 내용은 attribute1 을 참조하십시오. | |||||||||
| attribute5 | int | 0 ~ 2147483645 | 속성5 길드 검색에서 필터링이나 정렬에 사용할 수 있는 길드의 숫자 속성입니다. 자세한 내용은 attribute1 을 참조하십시오. | |||||||||
| metadata | string | ~ 1024자 | 길드 메타데이터 GS2 동작에 영향을 미치지 않는, 길드에 연결된 임의의 데이터입니다. 길드 엠블럼, 설명, 모집 메시지 등 게임 고유의 정보를 저장하는 데 사용할 수 있습니다. | |||||||||
| memberMetadata | string | ~ 512자 | 길드 멤버의 메타데이터 GS2의 동작에 영향을 주지 않는, 이 길드 멤버와 연결된 임의의 데이터입니다. 공헌 포인트, 마지막 로그인 시간, 길드 임원에게 표시되는 메모 등 멤버 고유의 정보를 저장하는 데 사용할 수 있습니다. | |||||||||
| joinPolicy | 문자열 열거형 enum { “anybody”, “approval” } | ✓ | 참가 방침 사용자가 이 길드에 어떻게 참가할 수 있는지를 제어합니다. “anybody” 는 승인 없이 임의의 사용자가 즉시 참가할 수 있습니다. “approval” 은 사용자가 멤버가 되기 전에 길드 마스터 또는 권한을 가진 멤버가 참가 요청을 승인해야 합니다. 길드 마스터가 언제든지 변경할 수 있습니다.
| |||||||||
| customRoles | List<EzRoleModel> | [] | 0 ~ 10 items | 커스텀 역할 목록 모델 레벨의 역할을 오버라이드하거나 확장하는 길드 고유의 커스텀 역할 정의 목록입니다. 각 길드는 고유한 권한 집합을 가진 최대 10개의 커스텀 역할을 정의할 수 있습니다. 이 역할들은 모델 레벨의 역할에 더해 멤버에게 할당할 수 있습니다. | ||||||||
| guildMemberDefaultRole | string | ~ 128자 | 기본 커스텀 역할 이 특정 길드에 새 멤버가 참가했을 때 자동으로 할당되는 커스텀 역할입니다. 설정한 경우, 이 길드에 대해 길드 모델의 guildMemberDefaultRole 을 오버라이드합니다. customRoles 목록에 정의된 역할을 참조해야 합니다. |
Result
| 타입 | 설명 | |
|---|---|---|
| item | EzGuild | 생성한 길드 |
구현 예제
var domain = gs2.Guild.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
);
var result = await domain.CreateGuildAsync(
guildModelName: "guild-model-0001",
displayName: "My Guild",
joinPolicy: "anybody",
attribute1: 1,
attribute2: null,
attribute3: null,
attribute4: null,
attribute5: null,
metadata: null,
memberMetadata: null,
customRoles: null,
guildMemberDefaultRole: null
);
var item = await result.ModelAsync(); var domain = gs2.Guild.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
);
var future = domain.CreateGuildFuture(
guildModelName: "guild-model-0001",
displayName: "My Guild",
joinPolicy: "anybody",
attribute1: 1,
attribute2: null,
attribute3: null,
attribute4: null,
attribute5: null,
metadata: null,
memberMetadata: null,
customRoles: null,
guildMemberDefaultRole: null
);
yield return future;
if (future.Error != null)
{
onError.Invoke(future.Error, null);
yield break;
}
var future2 = future.Result.ModelFuture();
yield return future2;
if (future2.Error != null)
{
onError.Invoke(future2.Error, null);
yield break;
}
var result = future2.Result; const auto Domain = Gs2->Guild->Namespace(
"namespace-0001" // namespaceName
)->Me(
GameSession
);
const auto Future = Domain->CreateGuild(
"guild-model-0001", // guildModelName
"My Guild", // displayName
"anybody", // joinPolicy
1 // attribute1
// attribute2
// attribute3
// attribute4
// attribute5
// metadata
// memberMetadata
// customRoles
// guildMemberDefaultRole
);
Future->StartSynchronousTask();
if (Future->GetTask().IsError())
{
return false;
}
// 변경된 값 / 결과 값을 취득
const auto Future2 = Future->GetTask().Result()->Model();
Future2->StartSynchronousTask();
if (Future2->GetTask().IsError())
{
return Future2->GetTask().Error();
}
const auto Result = Future2->GetTask().Result();var domain = ez.guild.namespace_(
"namespace-0001"
).me(game_session)
var async_result = await domain.create_guild(
"guild-model-0001", # guild_model_name
"My Guild", # display_name
"anybody", # join_policy
1, # attribute1
null, # attribute2
null, # attribute3
null, # attribute4
null, # attribute5
null, # metadata
null, # member_metadata
null, # custom_roles
null # guild_member_default_role
)
if async_result.error != null:
push_error(str(async_result.error))
return
var result = async_result.resultdeleteGuild
길드를 해산(삭제)하기
길드를 완전히 삭제합니다. 모든 멤버가 탈퇴하며 길드는 사라집니다.
이 API는 길드로서 호출합니다(먼저 Assume이 필요합니다). 일반적으로 길드 마스터만 길드를 해산할 권한을 가집니다.
길드 설정 화면의 “길드 해산” 버튼에 사용합니다. 모든 멤버에게 영향을 미치는 파괴적인 작업이므로 반드시 확인 대화상자를 표시하세요.
Request
| 타입 | 활성화 조건 | 필수 | 기본값 | 값 제한 | 설명 | |
|---|---|---|---|---|---|---|
| namespaceName | string | ✓ | ~ 128자 | 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. | ||
| guildModelName | string | ✓ | ~ 128자 | 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. | ||
| guildGameSession | GuildGameSession | ✓ | ~ 128자 | GuildGameSession
assume으로 취득한 GuildGameSession입니다.권한은 assume을 호출한 멤버의 역할에 연결된 PolicyDocument로 결정됩니다.삭제를 수행하려면 해당 역할의 PolicyDocument에 Gs2Guild:DeleteGuild 권한이 필요합니다. |
Result
| 타입 | 설명 | |
|---|---|---|
| item | EzGuild | 삭제한 길드 |
구현 예제
var domain = gs2.Guild.Namespace(
namespaceName: "namespace-0001"
).GuildGameSession(
guildModelName: "guild-model-0001",
guildGameSession: GuildGameSession
);
var result = await domain.DeleteGuildAsync(
); var domain = gs2.Guild.Namespace(
namespaceName: "namespace-0001"
).GuildGameSession(
guildModelName: "guild-model-0001",
guildGameSession: GuildGameSession
);
var future = domain.DeleteGuildFuture(
);
yield return future;
if (future.Error != null)
{
onError.Invoke(future.Error, null);
yield break;
} const auto Domain = Gs2->Guild->Namespace(
"namespace-0001" // namespaceName
)->GuildGameSession(
"guild-model-0001", // guildModelName
GuildGameSession // GuildGameSession
);
const auto Future = Domain->DeleteGuild(
);
Future->StartSynchronousTask();
if (Future->GetTask().IsError())
{
return false;
}
const auto Result = Future->GetTask().Result();var domain = ez.guild.namespace_(
"namespace-0001"
).guild_game_session(
"guild-model-0001",
guild_game_session
)
var async_result = await domain.delete_guild(
guild_game_session.access_token # access_token
)
if async_result.error != null:
push_error(str(async_result.error))
return
var result = async_result.resultdeleteMemberFromGuild
멤버를 길드에서 제명하기
지정한 플레이어를 길드의 멤버 목록에서 삭제합니다.
이 API는 길드로서 호출합니다(먼저 Assume이 필요합니다). 적절한 역할 권한을 가진 멤버(일반적으로 길드 마스터나 임원)만 멤버를 제명할 수 있습니다.
멤버 관리 화면의 “제명” 버튼에 사용합니다. 작업을 취소하기 어려우므로 확인 대화상자 표시를 권장합니다.
Request
| 타입 | 활성화 조건 | 필수 | 기본값 | 값 제한 | 설명 | |
|---|---|---|---|---|---|---|
| namespaceName | string | ✓ | ~ 128자 | 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. | ||
| guildModelName | string | ✓ | ~ 128자 | 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. | ||
| guildGameSession | GuildGameSession | ✓ | ~ 128자 | GuildGameSession
assume으로 취득한 GuildGameSession입니다.권한은 assume을 호출한 멤버의 역할에 연결된 PolicyDocument로 결정됩니다.제명을 수행하려면 해당 역할의 PolicyDocument에 Gs2Guild:DeleteMember 권한이 필요합니다. | ||
| targetUserId | string | ✓ | ~ 128자 | 제명할 사용자 ID |
Result
| 타입 | 설명 | |
|---|---|---|
| item | EzGuild | 업데이트한 길드 |
Error
이 API에는 특별한 예외가 정의되어 있습니다.
GS2-SDK for Game Engine에서는 게임 내에서 핸들링이 필요할 것으로 예상되는 에러를, 일반적인 예외에서 파생된 특수화된 예외로 제공하여 다루기 쉽게 하고 있습니다.
일반적인 에러의 종류와 핸들링 방법은 여기 문서를 참고해 주세요.
| 타입 | 베이스 클래스 | 설명 |
|---|---|---|
| GuildMasterRequiredException | BadRequestException | 길드 마스터 권한을 가진 멤버가 최소 1명 필요합니다. |
구현 예제
try {
var domain = gs2.Guild.Namespace(
namespaceName: "namespace-0001"
).GuildGameSession(
guildModelName: "guild-model-0001",
guildGameSession: GuildGameSession
);
var result = await domain.DeleteMemberFromGuildAsync(
targetUserId: "user-0002"
);
} catch(Gs2.Gs2Guild.Exception.GuildMasterRequiredException e) {
// At least one member with guild master privileges is required.
} var domain = gs2.Guild.Namespace(
namespaceName: "namespace-0001"
).GuildGameSession(
guildModelName: "guild-model-0001",
guildGameSession: GuildGameSession
);
var future = domain.DeleteMemberFromGuildFuture(
targetUserId: "user-0002"
);
yield return future;
if (future.Error != null)
{
if (future.Error is Gs2.Gs2Guild.Exception.GuildMasterRequiredException)
{
// At least one member with guild master privileges is required.
}
onError.Invoke(future.Error, null);
yield break;
} const auto Domain = Gs2->Guild->Namespace(
"namespace-0001" // namespaceName
)->GuildGameSession(
"guild-model-0001", // guildModelName
GuildGameSession // GuildGameSession
);
const auto Future = Domain->DeleteMemberFromGuild(
"user-0002" // targetUserId
);
Future->StartSynchronousTask();
if (Future->GetTask().IsError())
{
auto e = Future->GetTask().Error();
if (e->IsChildOf(Gs2::Guild::Error::FGuildMasterRequiredError::Class))
{
// At least one member with guild master privileges is required.
}
return false;
}
const auto Result = Future->GetTask().Result();var domain = ez.guild.namespace_(
"namespace-0001"
).guild_game_session(
"guild-model-0001",
guild_game_session
)
var async_result = await domain.delete_member_from_guild(
guild_game_session.access_token, # access_token
"user-0002" # target_user_id
)
if async_result.error != null:
if async_result.error is Gs2GuildGuildMasterRequiredException:
# 길드 마스터 권한을 가진 멤버가 최소 1명 필요합니다.
pass
push_error(str(async_result.error))
return
var result = async_result.resultgetGuild
길드의 상세 정보를 가져오기
특정 길드의 상세 정보를 가져옵니다. 표시 이름, 커스텀 속성, 메타데이터, 멤버 목록, 참가 방식 등이 포함됩니다.
반환되는 정보는 요청한 플레이어와 길드의 관계에 따라 달라집니다. 길드 멤버는 멤버 목록을 포함한 전체 정보를 볼 수 있지만, 비멤버는 공개 정보만 볼 수 있습니다.
길드 상세 화면을 표시하는 데 사용합니다. 예를 들어 “Dragon Knights — 25/30명 — 참가: 승인제"와 같이 표시할 수 있습니다.
Request
| 타입 | 활성화 조건 | 필수 | 기본값 | 값 제한 | 설명 | |
|---|---|---|---|---|---|---|
| namespaceName | string | ✓ | ~ 128자 | 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. | ||
| guildModelName | string | ✓ | ~ 128자 | 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. | ||
| gameSession | GameSession | ✓ | GameSession | |||
| guildName | string | ✓ | UUID | ~ 36자 | 길드명 길드의 고유한 이름을 유지합니다. 이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 각 길드를 식별하는 데 사용됩니다. |
Result
| 타입 | 설명 | |
|---|---|---|
| item | EzGuild | 길드 |
구현 예제
var domain = gs2.Guild.Namespace(
namespaceName: "namespace-0001"
).GuildGameSession(
guildModelName: "guild-model-0001",
guildGameSession: GuildGameSession
);
var item = await domain.ModelAsync(); var domain = gs2.Guild.Namespace(
namespaceName: "namespace-0001"
).GuildGameSession(
guildModelName: "guild-model-0001",
guildGameSession: GuildGameSession
);
var future = domain.ModelFuture();
yield return future;
var item = future.Result; const auto Domain = Gs2->Guild->Namespace(
"namespace-0001" // namespaceName
)->GuildGameSession(
"guild-model-0001", // guildModelName
GuildGameSession // GuildGameSession
);
const auto Future = Domain->Model();
Future->StartSynchronousTask();
if (Future->GetTask().IsError())
{
return false;
}var domain = ez.guild.namespace_(
"namespace-0001"
).guild_game_session(
"guild-model-0001",
guild_game_session
)
var async_result = await domain.model()
if async_result.error != null:
push_error(str(async_result.error))
return
var result = async_result.result값 변경 이벤트 핸들링
var domain = gs2.Guild.Namespace(
namespaceName: "namespace-0001"
).GuildGameSession(
guildModelName: "guild-model-0001",
guildGameSession: GuildGameSession
);
// 이벤트 핸들링 시작
var callbackId = domain.Subscribe(
value => {
// 값이 변화했을 때 호출됨
// value에는 변경 후의 값이 전달됨
}
);
// 이벤트 핸들링 정지
domain.Unsubscribe(callbackId); var domain = gs2.Guild.Namespace(
namespaceName: "namespace-0001"
).GuildGameSession(
guildModelName: "guild-model-0001",
guildGameSession: GuildGameSession
);
// 이벤트 핸들링 시작
var callbackId = domain.Subscribe(
value => {
// 값이 변화했을 때 호출됨
// value에는 변경 후의 값이 전달됨
}
);
// 이벤트 핸들링 정지
domain.Unsubscribe(callbackId); const auto Domain = Gs2->Guild->Namespace(
"namespace-0001" // namespaceName
)->GuildGameSession(
"guild-model-0001", // guildModelName
GuildGameSession // GuildGameSession
);
// 이벤트 핸들링 시작
const auto CallbackId = Domain->Subscribe(
[](TSharedPtr<Gs2::Guild::Model::FGuild> value) {
// 값이 변화했을 때 호출됨
// value에는 변경 후의 값이 전달됨
}
);
// 이벤트 핸들링 정지
Domain->Unsubscribe(CallbackId);var domain = ez.guild.namespace_(
"namespace-0001"
).guild_game_session(
"guild-model-0001",
guild_game_session
)
# 이벤트 핸들링 시작
var callback_id = domain.subscribe_model(func(value):
# 값이 변화했을 때 호출됨
# value에는 변경 후의 값이 전달됩니다
pass
)
# 이벤트 핸들링 정지
domain.unsubscribe_model(callback_id)이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다.
로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다.
따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다.
listGuilds
참가할 수 있는 길드를 검색하기
플레이어가 참가할 수 있는 길드를 검색합니다. 표시 이름, 속성, 참가 방식으로 필터링할 수 있습니다.
최대 5개의 커스텀 속성(플레이 스타일, 언어, 활동 수준 등)과 참가 방식(자유 참가/승인제)으로 필터링할 수 있습니다.
이미 정원에 도달한 길드를 포함할지 여부도 선택할 수 있습니다.
주의: 최근 24시간 이내에 업데이트된 길드만 검색 결과에 표시됩니다. 길드를 검색 대상으로 유지하고 싶다면 변경 사항이 없어도 정기적으로 UpdateGuild를 호출하세요.
“길드 찾기” 화면을 구성하여 검색 필터와 일치하는 길드 목록을 표시하는 데 사용합니다.
Request
| 타입 | 활성화 조건 | 필수 | 기본값 | 값 제한 | 설명 | |||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| namespaceName | string | ✓ | ~ 128자 | 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. | ||||||||||||||||||||||||||||
| gameSession | GameSession | ✓ | GameSession | |||||||||||||||||||||||||||||
| displayName | string | ~ 64자 | 검색할 길드 표시 이름 | |||||||||||||||||||||||||||||
| attributes1 | List<int> | 0 ~ 10 items | 검색할 속성1 | |||||||||||||||||||||||||||||
| attributes2 | List<int> | 0 ~ 10 items | 검색할 속성2 | |||||||||||||||||||||||||||||
| attributes3 | List<int> | 0 ~ 10 items | 검색할 속성3 | |||||||||||||||||||||||||||||
| attributes4 | List<int> | 0 ~ 10 items | 검색할 속성4 | |||||||||||||||||||||||||||||
| attributes5 | List<int> | 0 ~ 10 items | 검색할 속성5 | |||||||||||||||||||||||||||||
| joinPolicies | List<string> | 0 ~ 10 items | 검색할 길드 참가 방법 목록 | |||||||||||||||||||||||||||||
| includeFullMembersGuild | bool | false | 길드 멤버가 정원을 채운 길드를 검색 결과에 포함할지 여부 | |||||||||||||||||||||||||||||
| orderBy | 문자열 열거형 enum { “number_of_players”, “attribute1_asc”, “attribute1_desc”, “attribute2_asc”, “attribute2_desc”, “attribute3_asc”, “attribute3_desc”, “attribute4_asc”, “attribute4_desc”, “attribute5_asc”, “attribute5_desc”, “last_updated” } | “number_of_players” | 정렬 순서
| |||||||||||||||||||||||||||||
| pageToken | string | ~ 1024자 | 데이터 취득을 시작할 위치를 지정하는 토큰 | |||||||||||||||||||||||||||||
| limit | int | 30 | 1 ~ 1000 | 취득할 데이터 건수 |
Result
| 타입 | 설명 | |
|---|---|---|
| items | List<EzGuild> | 길드 목록 |
| nextPageToken | string | 목록의 나머지를 취득하기 위한 페이지 토큰 |
구현 예제
var domain = gs2.Guild.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
);
var items = await domain.SearchGuildsAsync(
guildModelName: "guild-model-0001"
).ToListAsync(); var domain = gs2.Guild.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
);
var it = domain.SearchGuilds(
guildModelName: "guild-model-0001"
);
List<EzGuild> items = new List<EzGuild>();
while (it.HasNext())
{
yield return it.Next();
if (it.Error != null)
{
onError.Invoke(it.Error, null);
break;
}
if (it.Current != null)
{
items.Add(it.Current);
}
else
{
break;
}
} const auto Domain = Gs2->Guild->Namespace(
"namespace-0001" // namespaceName
)->Me(
GameSession
);
const auto It = Domain->SearchGuilds(
"guild-model-0001" // guildModelName
);
TArray<Gs2::UE5::Guild::Model::FEzGuildPtr> Result;
for (auto Item : *It)
{
if (Item.IsError())
{
return false;
}
Result.Add(Item.Current());
}var domain = ez.guild.namespace_(
"namespace-0001"
).me(game_session)
var async_result = await domain.search_guilds(
"guild-model-0001", # guild_model_name
null, # display_name
null, # attributes1
null, # attributes2
null, # attributes3
null, # attributes4
null, # attributes5
null, # join_policies
null, # include_full_members_guild
null # order_by
).load()
if async_result.error != null:
push_error(str(async_result.error))
return
var result = async_result.resultupdateGuild
길드의 설정을 업데이트하기
길드의 표시 이름, 커스텀 속성, 메타데이터, 참가 방식, 역할 정의를 업데이트합니다.
이 API는 길드로서 호출합니다. 먼저 Assume으로 길드의 액세스 토큰을 취득한 후 호출하세요.
적절한 역할 권한을 가진 멤버만 길드 설정을 업데이트할 수 있습니다.
또한 이를 정기적으로 호출하면 길드가 검색 결과에 계속 표시됩니다(24시간 동안 업데이트가 없는 길드는 검색에서 숨겨집니다).
“길드 설정” 화면에 사용합니다. 임원이나 길드 마스터가 길드 이름, 설명, 모집 방침을 변경하는 화면입니다.
Request
| 타입 | 활성화 조건 | 필수 | 기본값 | 값 제한 | 설명 | |||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| namespaceName | string | ✓ | ~ 128자 | 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. | ||||||||
| guildModelName | string | ✓ | ~ 128자 | 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. | ||||||||
| guildGameSession | GuildGameSession | ✓ | ~ 128자 | GuildGameSession
assume으로 취득한 GuildGameSession입니다.권한은 assume을 호출한 멤버의 역할에 연결된 PolicyDocument로 결정됩니다.업데이트를 수행하려면 해당 역할의 PolicyDocument에 Gs2Guild:UpdateGuild 권한이 필요합니다. | ||||||||
| displayName | string | ✓ | ~ 64자 | 표시 이름 UI에서 플레이어에게 표시되는, 사람이 읽을 수 있는 길드 이름입니다. 길드명(시스템에서 생성되는 UUID)과 달리, 표시 이름은 길드 생성자가 설정하며 갱신도 가능합니다. 길드 검색 결과, 멤버 목록, 기타 플레이어 대상 화면에 사용됩니다. | ||||||||
| attribute1 | int | 0 ~ 2147483645 | 속성1 길드 검색에서 필터링이나 정렬에 사용할 수 있는 길드의 숫자 속성입니다. 레벨, 지역, 플레이 스타일, 활동 요건 등의 커스텀 길드 속성을 정의하기 위해, 최대 5개의 속성을 개발자가 이용할 수 있습니다. | |||||||||
| attribute2 | int | 0 ~ 2147483645 | 속성2 길드 검색에서 필터링이나 정렬에 사용할 수 있는 길드의 숫자 속성입니다. 자세한 내용은 attribute1 을 참조하십시오. | |||||||||
| attribute3 | int | 0 ~ 2147483645 | 속성3 길드 검색에서 필터링이나 정렬에 사용할 수 있는 길드의 숫자 속성입니다. 자세한 내용은 attribute1 을 참조하십시오. | |||||||||
| attribute4 | int | 0 ~ 2147483645 | 속성4 길드 검색에서 필터링이나 정렬에 사용할 수 있는 길드의 숫자 속성입니다. 자세한 내용은 attribute1 을 참조하십시오. | |||||||||
| attribute5 | int | 0 ~ 2147483645 | 속성5 길드 검색에서 필터링이나 정렬에 사용할 수 있는 길드의 숫자 속성입니다. 자세한 내용은 attribute1 을 참조하십시오. | |||||||||
| metadata | string | ~ 1024자 | 길드 메타데이터 GS2 동작에 영향을 미치지 않는, 길드에 연결된 임의의 데이터입니다. 길드 엠블럼, 설명, 모집 메시지 등 게임 고유의 정보를 저장하는 데 사용할 수 있습니다. | |||||||||
| joinPolicy | 문자열 열거형 enum { “anybody”, “approval” } | ✓ | 참가 방침 사용자가 이 길드에 어떻게 참가할 수 있는지를 제어합니다. “anybody” 는 승인 없이 임의의 사용자가 즉시 참가할 수 있습니다. “approval” 은 사용자가 멤버가 되기 전에 길드 마스터 또는 권한을 가진 멤버가 참가 요청을 승인해야 합니다. 길드 마스터가 언제든지 변경할 수 있습니다.
| |||||||||
| customRoles | List<EzRoleModel> | [] | 0 ~ 10 items | 커스텀 역할 목록 모델 레벨의 역할을 오버라이드하거나 확장하는 길드 고유의 커스텀 역할 정의 목록입니다. 각 길드는 고유한 권한 집합을 가진 최대 10개의 커스텀 역할을 정의할 수 있습니다. 이 역할들은 모델 레벨의 역할에 더해 멤버에게 할당할 수 있습니다. | ||||||||
| guildMemberDefaultRole | string | ~ 128자 | 기본 커스텀 역할 이 특정 길드에 새 멤버가 참가했을 때 자동으로 할당되는 커스텀 역할입니다. 설정한 경우, 이 길드에 대해 길드 모델의 guildMemberDefaultRole 을 오버라이드합니다. customRoles 목록에 정의된 역할을 참조해야 합니다. |
Result
| 타입 | 설명 | |
|---|---|---|
| item | EzGuild | 업데이트한 길드 |
구현 예제
var domain = gs2.Guild.Namespace(
namespaceName: "namespace-0001"
).GuildGameSession(
guildModelName: "guild-model-0001",
guildGameSession: GuildGameSession
);
var result = await domain.UpdateGuildAsync(
displayName: "My Guild",
joinPolicy: "anybody",
attribute1: 1,
attribute2: null,
attribute3: null,
attribute4: null,
attribute5: null,
metadata: null,
customRoles: null,
guildMemberDefaultRole: null
);
var item = await result.ModelAsync(); var domain = gs2.Guild.Namespace(
namespaceName: "namespace-0001"
).GuildGameSession(
guildModelName: "guild-model-0001",
guildGameSession: GuildGameSession
);
var future = domain.UpdateGuildFuture(
displayName: "My Guild",
joinPolicy: "anybody",
attribute1: 1,
attribute2: null,
attribute3: null,
attribute4: null,
attribute5: null,
metadata: null,
customRoles: null,
guildMemberDefaultRole: null
);
yield return future;
if (future.Error != null)
{
onError.Invoke(future.Error, null);
yield break;
}
var future2 = future.Result.ModelFuture();
yield return future2;
if (future2.Error != null)
{
onError.Invoke(future2.Error, null);
yield break;
}
var result = future2.Result; const auto Domain = Gs2->Guild->Namespace(
"namespace-0001" // namespaceName
)->GuildGameSession(
"guild-model-0001", // guildModelName
GuildGameSession // GuildGameSession
);
const auto Future = Domain->UpdateGuild(
"My Guild", // displayName
"anybody", // joinPolicy
1 // attribute1
// attribute2
// attribute3
// attribute4
// attribute5
// metadata
// customRoles
// guildMemberDefaultRole
);
Future->StartSynchronousTask();
if (Future->GetTask().IsError())
{
return false;
}
// 변경된 값 / 결과 값을 취득
const auto Future2 = Future->GetTask().Result()->Model();
Future2->StartSynchronousTask();
if (Future2->GetTask().IsError())
{
return Future2->GetTask().Error();
}
const auto Result = Future2->GetTask().Result();var domain = ez.guild.namespace_(
"namespace-0001"
).guild_game_session(
"guild-model-0001",
guild_game_session
)
var async_result = await domain.update_guild(
guild_game_session.access_token, # access_token
"My Guild", # display_name
"anybody", # join_policy
1, # attribute1
null, # attribute2
null, # attribute3
null, # attribute4
null, # attribute5
null, # metadata
null, # custom_roles
null # guild_member_default_role
)
if async_result.error != null:
push_error(str(async_result.error))
return
var result = async_result.resultupdateGuildMemberRole
길드 멤버의 역할을 변경하기
특정 길드 멤버의 역할을 변경합니다. 예를 들어 멤버를 “임원"으로 승격시키거나, 임원을 “멤버"로 강등시킬 수 있습니다.
이 API는 길드로서 호출합니다(먼저 Assume이 필요합니다). 적절한 역할 권한을 가진 멤버만 다른 멤버의 역할을 변경할 수 있습니다.
“멤버 관리” 화면에 사용합니다. 길드 마스터나 임원이 멤버를 승격·강등시키는 화면입니다.
Request
| 타입 | 활성화 조건 | 필수 | 기본값 | 값 제한 | 설명 | |
|---|---|---|---|---|---|---|
| namespaceName | string | ✓ | ~ 128자 | 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. | ||
| guildModelName | string | ✓ | ~ 128자 | 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. | ||
| guildGameSession | GuildGameSession | ✓ | ~ 128자 | GuildGameSession
assume으로 취득한 GuildGameSession입니다.권한은 assume을 호출한 멤버의 역할에 연결된 PolicyDocument로 결정됩니다.역할 업데이트를 수행하려면 해당 역할의 PolicyDocument에 Gs2Guild:UpdateMemberRole 권한이 필요합니다. | ||
| targetUserId | string | ✓ | ~ 128자 | 업데이트할 사용자 ID | ||
| roleName | string | ✓ | ~ 128자 | 롤 모델 이름 롤 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. |
Result
| 타입 | 설명 | |
|---|---|---|
| item | EzGuild | 업데이트한 길드 |
구현 예제
var domain = gs2.Guild.Namespace(
namespaceName: "namespace-0001"
).GuildGameSession(
guildModelName: "guild-model-0001",
guildGameSession: GuildGameSession
);
var result = await domain.UpdateGuildMemberRoleAsync(
targetUserId: "user-0002",
roleName: "role-0001"
);
var item = await result.ModelAsync(); var domain = gs2.Guild.Namespace(
namespaceName: "namespace-0001"
).GuildGameSession(
guildModelName: "guild-model-0001",
guildGameSession: GuildGameSession
);
var future = domain.UpdateGuildMemberRoleFuture(
targetUserId: "user-0002",
roleName: "role-0001"
);
yield return future;
if (future.Error != null)
{
onError.Invoke(future.Error, null);
yield break;
}
var future2 = future.Result.ModelFuture();
yield return future2;
if (future2.Error != null)
{
onError.Invoke(future2.Error, null);
yield break;
}
var result = future2.Result; const auto Domain = Gs2->Guild->Namespace(
"namespace-0001" // namespaceName
)->GuildGameSession(
"guild-model-0001", // guildModelName
GuildGameSession // GuildGameSession
);
const auto Future = Domain->UpdateGuildMemberRole(
"user-0002", // targetUserId
"role-0001" // roleName
);
Future->StartSynchronousTask();
if (Future->GetTask().IsError())
{
return false;
}
// 변경된 값 / 결과 값을 취득
const auto Future2 = Future->GetTask().Result()->Model();
Future2->StartSynchronousTask();
if (Future2->GetTask().IsError())
{
return Future2->GetTask().Error();
}
const auto Result = Future2->GetTask().Result();var domain = ez.guild.namespace_(
"namespace-0001"
).guild_game_session(
"guild-model-0001",
guild_game_session
)
var async_result = await domain.update_guild_member_role(
guild_game_session.access_token, # access_token
"user-0002", # target_user_id
"role-0001" # role_name
)
if async_result.error != null:
push_error(str(async_result.error))
return
var result = async_result.resultacceptRequest
플레이어의 가입 신청을 승인한다
보류 중인 가입 신청을 승인하여, 신청한 플레이어를 길드의 멤버 목록에 추가합니다.
이 API는 길드로서 호출합니다(먼저 Assume이 필요합니다). 적절한 역할 권한을 가진 멤버만 가입 신청을 승인할 수 있습니다.
승인 후 플레이어는 길드 모델에 정의된 기본 역할로 길드 멤버가 됩니다.
가입 신청 상세 화면이나 목록 화면의 “승인” 버튼에 사용합니다.
Request
| 타입 | 활성화 조건 | 필수 | 기본값 | 값 제한 | 설명 | |
|---|---|---|---|---|---|---|
| namespaceName | string | ✓ | ~ 128자 | 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. | ||
| guildGameSession | GuildGameSession | ✓ | ~ 128자 | GuildGameSession
assume으로 취득한 GuildGameSession입니다.권한은 assume을 호출한 멤버의 역할의 PolicyDocument에 따라 결정됩니다.승인하려면 해당 역할의 PolicyDocument에 Gs2Guild:AcceptRequest 권한이 필요합니다. | ||
| guildModelName | string | ✓ | ~ 128자 | 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. | ||
| fromUserId | string | ✓ | ~ 128자 | 사용자ID |
Result
| 타입 | 설명 | |
|---|---|---|
| item | EzReceiveMemberRequest | 수락한 참가 요청 |
| guild | EzGuild | 길드 |
Error
이 API에는 특별한 예외가 정의되어 있습니다.
GS2-SDK for Game Engine에서는 게임 내에서 핸들링이 필요할 것으로 예상되는 에러를, 일반적인 예외에서 파생된 특수화된 예외로 제공하여 다루기 쉽게 하고 있습니다.
일반적인 에러의 종류와 핸들링 방법은 여기 문서를 참고해 주세요.
| 타입 | 베이스 클래스 | 설명 |
|---|---|---|
| MaximumJoinedGuildsReachedException | BadRequestException | 길드 동시 참가 수가 최댓값에 도달했습니다. |
| MaximumMembersReachedException | BadRequestException | 멤버 수가 상한에 도달했습니다. |
구현 예제
try {
var domain = gs2.Guild.Namespace(
namespaceName: "namespace-0001"
).GuildGameSession(
guildModelName: "guild-0001",
guildGameSession: GuildGameSession
).ReceiveMemberRequest(
fromUserId: null
);
var result = await domain.AcceptRequestAsync(
);
} catch(Gs2.Gs2Guild.Exception.MaximumJoinedGuildsReachedException e) {
// The number of guilds you can join at the same time has reached the upper limit.
} catch(Gs2.Gs2Guild.Exception.MaximumMembersReachedException e) {
// The number of members has reached the upper limit.
} var domain = gs2.Guild.Namespace(
namespaceName: "namespace-0001"
).GuildGameSession(
guildModelName: "guild-0001",
guildGameSession: GuildGameSession
).ReceiveMemberRequest(
fromUserId: null
);
var future = domain.AcceptRequestFuture(
);
yield return future;
if (future.Error != null)
{
if (future.Error is Gs2.Gs2Guild.Exception.MaximumJoinedGuildsReachedException)
{
// The number of guilds you can join at the same time has reached the upper limit.
}
if (future.Error is Gs2.Gs2Guild.Exception.MaximumMembersReachedException)
{
// The number of members has reached the upper limit.
}
onError.Invoke(future.Error, null);
yield break;
} const auto Domain = Gs2->Guild->Namespace(
"namespace-0001" // namespaceName
)->GuildGameSession(
"guild-0001", // guildModelName
GuildGameSession // GuildGameSession
)->ReceiveMemberRequest(
nullptr // fromUserId
);
const auto Future = Domain->AcceptRequest(
);
Future->StartSynchronousTask();
if (Future->GetTask().IsError())
{
auto e = Future->GetTask().Error();
if (e->IsChildOf(Gs2::Guild::Error::FMaximumJoinedGuildsReachedError::Class))
{
// The number of guilds you can join at the same time has reached the upper limit.
}
if (e->IsChildOf(Gs2::Guild::Error::FMaximumMembersReachedError::Class))
{
// The number of members has reached the upper limit.
}
return false;
}
const auto Result = Future->GetTask().Result();var domain = ez.guild.namespace_(
"namespace-0001"
).guild_game_session(
"guild-0001",
guild_game_session
).receive_member_request(
null
)
var async_result = await domain.accept_request(
guild_game_session.access_token # access_token
)
if async_result.error != null:
if async_result.error is Gs2GuildMaximumJoinedGuildsReachedException:
# 길드 동시 참가 수가 최댓값에 도달했습니다.
pass
if async_result.error is Gs2GuildMaximumMembersReachedException:
# 멤버 수가 상한에 도달했습니다.
pass
push_error(str(async_result.error))
return
var result = async_result.resultgetReceiveRequest
특정 가입 신청의 상세 정보를 취득한다
발신자의 사용자 ID를 지정하여, 길드가 받은 특정 가입 신청의 상세 정보를 취득합니다.
이 API는 길드로서 호출합니다(먼저 Assume이 필요합니다).
가입 신청 상세 화면을 표시하는 데 사용합니다. 예를 들어 신청자의 프로필, 메시지, “승인” / “거부” 버튼을 표시하는 화면입니다.
Request
| 타입 | 활성화 조건 | 필수 | 기본값 | 값 제한 | 설명 | |
|---|---|---|---|---|---|---|
| namespaceName | string | ✓ | ~ 128자 | 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. | ||
| guildGameSession | GuildGameSession | ✓ | ~ 128자 | GuildGameSession
assume으로 취득한 GuildGameSession입니다.권한은 assume을 호출한 멤버의 역할의 PolicyDocument에 따라 결정됩니다.취득하려면 해당 역할의 PolicyDocument에 Gs2Guild:GetReceiveRequest 권한이 필요합니다. | ||
| guildModelName | string | ✓ | ~ 128자 | 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. | ||
| fromUserId | string | ✓ | ~ 128자 | 사용자ID |
Result
| 타입 | 설명 | |
|---|---|---|
| item | EzReceiveMemberRequest | 참가 요청 |
구현 예제
var domain = gs2.Guild.Namespace(
namespaceName: "namespace-0001"
).GuildGameSession(
guildModelName: "guild-0001",
guildGameSession: GuildGameSession
).ReceiveMemberRequest(
fromUserId: null
);
var item = await domain.ModelAsync(); var domain = gs2.Guild.Namespace(
namespaceName: "namespace-0001"
).GuildGameSession(
guildModelName: "guild-0001",
guildGameSession: GuildGameSession
).ReceiveMemberRequest(
fromUserId: null
);
var future = domain.ModelFuture();
yield return future;
var item = future.Result; const auto Domain = Gs2->Guild->Namespace(
"namespace-0001" // namespaceName
)->GuildGameSession(
"guild-0001", // guildModelName
GuildGameSession // GuildGameSession
)->ReceiveMemberRequest(
nullptr // fromUserId
);
const auto Future = Domain->Model();
Future->StartSynchronousTask();
if (Future->GetTask().IsError())
{
return false;
}var domain = ez.guild.namespace_(
"namespace-0001"
).guild_game_session(
"guild-0001",
guild_game_session
).receive_member_request(
null
)
var async_result = await domain.model()
if async_result.error != null:
push_error(str(async_result.error))
return
var result = async_result.result값 변경 이벤트 핸들링
var domain = gs2.Guild.Namespace(
namespaceName: "namespace-0001"
).GuildGameSession(
guildModelName: "guild-0001",
guildGameSession: GuildGameSession
).ReceiveMemberRequest(
fromUserId: null
);
// 이벤트 핸들링 시작
var callbackId = domain.Subscribe(
value => {
// 값이 변화했을 때 호출됨
// value에는 변경 후의 값이 전달됨
}
);
// 이벤트 핸들링 정지
domain.Unsubscribe(callbackId); var domain = gs2.Guild.Namespace(
namespaceName: "namespace-0001"
).GuildGameSession(
guildModelName: "guild-0001",
guildGameSession: GuildGameSession
).ReceiveMemberRequest(
fromUserId: null
);
// 이벤트 핸들링 시작
var callbackId = domain.Subscribe(
value => {
// 값이 변화했을 때 호출됨
// value에는 변경 후의 값이 전달됨
}
);
// 이벤트 핸들링 정지
domain.Unsubscribe(callbackId); const auto Domain = Gs2->Guild->Namespace(
"namespace-0001" // namespaceName
)->GuildGameSession(
"guild-0001", // guildModelName
GuildGameSession // GuildGameSession
)->ReceiveMemberRequest(
nullptr // fromUserId
);
// 이벤트 핸들링 시작
const auto CallbackId = Domain->Subscribe(
[](TSharedPtr<Gs2::Guild::Model::FReceiveMemberRequest> value) {
// 값이 변화했을 때 호출됨
// value에는 변경 후의 값이 전달됨
}
);
// 이벤트 핸들링 정지
Domain->Unsubscribe(CallbackId);var domain = ez.guild.namespace_(
"namespace-0001"
).guild_game_session(
"guild-0001",
guild_game_session
).receive_member_request(
null
)
# 이벤트 핸들링 시작
var callback_id = domain.subscribe_model(func(value):
# 값이 변화했을 때 호출됨
# value에는 변경 후의 값이 전달됩니다
pass
)
# 이벤트 핸들링 정지
domain.unsubscribe_model(callback_id)이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다.
로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다.
따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다.
listReceiveRequests
길드가 받은 가입 신청 목록을 취득한다
플레이어들이 이 길드에 보낸, 보류 중인 가입 신청을 모두 취득합니다.
이 API는 길드로서 호출합니다(먼저 Assume으로 길드의 액세스 토큰을 취득해야 합니다).
각 신청에는 발신자와 첨부된 메시지 또는 메타데이터가 포함됩니다.
길드 관리 패널의 “가입 신청” 화면을 구성하는 데 사용합니다. 예를 들어 “PlayerA가 가입을 희망(메시지: Lv50 힐러, 매일 접속)“과 같은 목록을 표시할 수 있습니다.
Request
| 타입 | 활성화 조건 | 필수 | 기본값 | 값 제한 | 설명 | |
|---|---|---|---|---|---|---|
| namespaceName | string | ✓ | ~ 128자 | 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. | ||
| guildGameSession | GuildGameSession | ✓ | ~ 128자 | GuildGameSession
assume으로 취득한 GuildGameSession입니다.권한은 assume을 호출한 멤버의 역할의 PolicyDocument에 따라 결정됩니다.목록을 취득하려면 해당 역할의 PolicyDocument에 Gs2Guild:DescribeReceiveRequests 권한이 필요합니다. | ||
| guildModelName | string | ✓ | ~ 128자 | 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. | ||
| pageToken | string | ~ 1024자 | 데이터 취득을 시작할 위치를 지정하는 토큰 | |||
| limit | int | 30 | 1 ~ 1000 | 취득할 데이터 건수 |
Result
| 타입 | 설명 | |
|---|---|---|
| items | List<EzReceiveMemberRequest> | 참가 요청 리스트 |
| nextPageToken | string | 목록의 나머지를 취득하기 위한 페이지 토큰 |
구현 예제
var domain = gs2.Guild.Namespace(
namespaceName: "namespace-0001"
).GuildGameSession(
guildModelName: "guild-0001",
guildGameSession: GuildGameSession
);
var items = await domain.ReceiveRequestsAsync(
).ToListAsync(); var domain = gs2.Guild.Namespace(
namespaceName: "namespace-0001"
).GuildGameSession(
guildModelName: "guild-0001",
guildGameSession: GuildGameSession
);
var it = domain.ReceiveRequests(
);
List<EzReceiveMemberRequest> items = new List<EzReceiveMemberRequest>();
while (it.HasNext())
{
yield return it.Next();
if (it.Error != null)
{
onError.Invoke(it.Error, null);
break;
}
if (it.Current != null)
{
items.Add(it.Current);
}
else
{
break;
}
} const auto Domain = Gs2->Guild->Namespace(
"namespace-0001" // namespaceName
)->GuildGameSession(
"guild-0001", // guildModelName
GuildGameSession // GuildGameSession
);
const auto It = Domain->ReceiveRequests(
);
TArray<Gs2::UE5::Guild::Model::FEzReceiveMemberRequestPtr> Result;
for (auto Item : *It)
{
if (Item.IsError())
{
return false;
}
Result.Add(Item.Current());
}rejectRequest
플레이어의 가입 신청을 거부한다
보류 중인 가입 신청을 거부합니다. 신청한 플레이어는 길드에 추가되지 않습니다.
이 API는 길드로서 호출합니다(먼저 Assume이 필요합니다). 적절한 역할 권한을 가진 멤버만 가입 신청을 거부할 수 있습니다.
거부된 플레이어는 길드의 차단 목록(IgnoreUser)에 추가되지 않은 한, 나중에 다시 가입 신청을 보낼 수 있습니다.
가입 신청 상세 화면이나 목록 화면의 “거부” 버튼에 사용합니다.
Request
| 타입 | 활성화 조건 | 필수 | 기본값 | 값 제한 | 설명 | |
|---|---|---|---|---|---|---|
| namespaceName | string | ✓ | ~ 128자 | 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. | ||
| guildGameSession | GuildGameSession | ✓ | ~ 128자 | GuildGameSession
assume으로 취득한 GuildGameSession입니다.권한은 assume을 호출한 멤버의 역할의 PolicyDocument에 따라 결정됩니다.거부하려면 해당 역할의 PolicyDocument에 Gs2Guild:RejectRequest 권한이 필요합니다. | ||
| guildModelName | string | ✓ | ~ 128자 | 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. | ||
| fromUserId | string | ✓ | ~ 128자 | 사용자ID |
Result
| 타입 | 설명 | |
|---|---|---|
| item | EzReceiveMemberRequest | 거부한 참가 요청 |
구현 예제
var domain = gs2.Guild.Namespace(
namespaceName: "namespace-0001"
).GuildGameSession(,
guildGameSession: GuildGameSession
).ReceiveMemberRequest(
guildModelName: null,
fromUserId: "user-0002"
);
var result = await domain.RejectRequestAsync(
); var domain = gs2.Guild.Namespace(
namespaceName: "namespace-0001"
).GuildGameSession(,
guildGameSession: GuildGameSession
).ReceiveMemberRequest(
guildModelName: null,
fromUserId: "user-0002"
);
var future = domain.RejectRequestFuture(
);
yield return future;
if (future.Error != null)
{
onError.Invoke(future.Error, null);
yield break;
} const auto Domain = Gs2->Guild->Namespace(
"namespace-0001" // namespaceName
)->GuildGameSession(
GuildGameSession // GuildGameSession
)->ReceiveMemberRequest(
nullptr, // guildModelName
"user-0002" // fromUserId
);
const auto Future = Domain->RejectRequest(
);
Future->StartSynchronousTask();
if (Future->GetTask().IsError())
{
return false;
}
const auto Result = Future->GetTask().Result();var domain = ez.guild.namespace_(
"namespace-0001"
).guild_game_session(
null,
guild_game_session
).receive_member_request(
"user-0002"
)
var async_result = await domain.reject_request(
guild_game_session.access_token # access_token
)
if async_result.error != null:
push_error(str(async_result.error))
return
var result = async_result.resultcancelRequest
플레이어가 전송한 가입 신청을 취소한다
플레이어가 이전에 길드에 보낸, 보류 중인 가입 신청을 취소(철회)합니다.
취소 후 신청은 플레이어의 전송 신청 목록과 길드의 수신 신청 목록 양쪽에서 모두 삭제됩니다.
취소 후에는 같은 길드에 새로운 가입 신청을 다시 보낼 수 있습니다.
신청 중인 요청 상세 화면의 “신청 취소”, “요청 철회” 버튼에 사용합니다.
Request
| 타입 | 활성화 조건 | 필수 | 기본값 | 값 제한 | 설명 | |
|---|---|---|---|---|---|---|
| namespaceName | string | ✓ | ~ 128자 | 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. | ||
| gameSession | GameSession | ✓ | GameSession | |||
| guildModelName | string | ✓ | ~ 128자 | 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. | ||
| targetGuildName | string | ✓ | ~ 128자 | 대상 길드 이름 참가 요청이 송신된 길드의 고유한 이름(UUID)입니다. 사용자가 참가를 요청하고 있는 특정 길드 인스턴스를 식별하며, 요청 처리를 위해 길드의 수신함을 특정하는 데 사용됩니다. |
Result
| 타입 | 설명 | |
|---|---|---|
| item | EzSendMemberRequest | 삭제된 참가 요청 |
구현 예제
var domain = gs2.Guild.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
);
var result = await domain.CancelRequestAsync(
guildModelName: "guild-0002",
targetGuildName: "guild-0002"
); var domain = gs2.Guild.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
);
var future = domain.CancelRequestFuture(
guildModelName: "guild-0002",
targetGuildName: "guild-0002"
);
yield return future;
if (future.Error != null)
{
onError.Invoke(future.Error, null);
yield break;
} const auto Domain = Gs2->Guild->Namespace(
"namespace-0001" // namespaceName
)->Me(
GameSession
);
const auto Future = Domain->CancelRequest(
"guild-0002", // guildModelName
"guild-0002" // targetGuildName
);
Future->StartSynchronousTask();
if (Future->GetTask().IsError())
{
return false;
}
const auto Result = Future->GetTask().Result();var domain = ez.guild.namespace_(
"namespace-0001"
).me(game_session)
var async_result = await domain.cancel_request(
"guild-0002", # guild_model_name
"guild-0002" # target_guild_name
)
if async_result.error != null:
push_error(str(async_result.error))
return
var result = async_result.resultgetSendRequest
플레이어가 전송한 가입 신청의 상세 정보를 취득한다
플레이어가 길드에 전송한 특정 가입 신청의 상세 정보를 취득합니다.
취득할 수 있는 정보에는 신청 대상 길드와 신청에 첨부된 메타데이터(메시지)가 포함됩니다.
신청 중인 요청의 상세 정보를 표시하는 데 사용합니다. 예를 들어 “드래곤 나이츠에 신청 중 — 메시지: Lv50 힐러"와 “취소” 버튼을 표시하는 화면에 유용합니다.
Request
| 타입 | 활성화 조건 | 필수 | 기본값 | 값 제한 | 설명 | |
|---|---|---|---|---|---|---|
| namespaceName | string | ✓ | ~ 128자 | 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. | ||
| gameSession | GameSession | ✓ | GameSession | |||
| guildModelName | string | ✓ | ~ 128자 | 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. | ||
| targetGuildName | string | ✓ | ~ 128자 | 대상 길드 이름 참가 요청이 송신된 길드의 고유한 이름(UUID)입니다. 사용자가 참가를 요청하고 있는 특정 길드 인스턴스를 식별하며, 요청 처리를 위해 길드의 수신함을 특정하는 데 사용됩니다. |
Result
| 타입 | 설명 | |
|---|---|---|
| item | EzSendMemberRequest | 참가 요청 |
구현 예제
var domain = gs2.Guild.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
).SendMemberRequest(
guildModelName: "guild-0002",
guildName: null
);
var item = await domain.ModelAsync(); var domain = gs2.Guild.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
).SendMemberRequest(
guildModelName: "guild-0002",
guildName: null
);
var future = domain.ModelFuture();
yield return future;
var item = future.Result; const auto Domain = Gs2->Guild->Namespace(
"namespace-0001" // namespaceName
)->Me(
GameSession
)->SendMemberRequest(
"guild-0002", // guildModelName
nullptr // guildName
);
const auto Future = Domain->Model();
Future->StartSynchronousTask();
if (Future->GetTask().IsError())
{
return false;
}var domain = ez.guild.namespace_(
"namespace-0001"
).me(game_session).send_member_request(
"guild-0002",
null
)
var async_result = await domain.model()
if async_result.error != null:
push_error(str(async_result.error))
return
var result = async_result.result값 변경 이벤트 핸들링
var domain = gs2.Guild.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
).SendMemberRequest(
guildModelName: "guild-0002",
guildName: null
);
// 이벤트 핸들링 시작
var callbackId = domain.Subscribe(
value => {
// 값이 변화했을 때 호출됨
// value에는 변경 후의 값이 전달됨
}
);
// 이벤트 핸들링 정지
domain.Unsubscribe(callbackId); var domain = gs2.Guild.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
).SendMemberRequest(
guildModelName: "guild-0002",
guildName: null
);
// 이벤트 핸들링 시작
var callbackId = domain.Subscribe(
value => {
// 값이 변화했을 때 호출됨
// value에는 변경 후의 값이 전달됨
}
);
// 이벤트 핸들링 정지
domain.Unsubscribe(callbackId); const auto Domain = Gs2->Guild->Namespace(
"namespace-0001" // namespaceName
)->Me(
GameSession
)->SendMemberRequest(
"guild-0002", // guildModelName
nullptr // guildName
);
// 이벤트 핸들링 시작
const auto CallbackId = Domain->Subscribe(
[](TSharedPtr<Gs2::Guild::Model::FSendMemberRequest> value) {
// 값이 변화했을 때 호출됨
// value에는 변경 후의 값이 전달됨
}
);
// 이벤트 핸들링 정지
Domain->Unsubscribe(CallbackId);var domain = ez.guild.namespace_(
"namespace-0001"
).me(game_session).send_member_request(
"guild-0002",
null
)
# 이벤트 핸들링 시작
var callback_id = domain.subscribe_model(func(value):
# 값이 변화했을 때 호출됨
# value에는 변경 후의 값이 전달됩니다
pass
)
# 이벤트 핸들링 정지
domain.unsubscribe_model(callback_id)이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다.
로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다.
따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다.
listSendRequests
플레이어가 전송한 가입 신청 목록을 취득한다
플레이어가 각 길드에 전송한, 아직 보류 중인 가입 신청을 모두 취득합니다.
각 항목에는 신청을 보낸 길드와 신청에 첨부된 메타데이터(메시지)가 포함됩니다.
“신청 중”, “보류 중인 신청” 화면을 구성하는 데 사용합니다. 예를 들어 “드래곤 나이츠에 신청 중(보류), 스타 얼라이언스에 신청 중(보류)“와 같은 표시에 유용합니다.
Request
| 타입 | 활성화 조건 | 필수 | 기본값 | 값 제한 | 설명 | |
|---|---|---|---|---|---|---|
| namespaceName | string | ✓ | ~ 128자 | 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. | ||
| gameSession | GameSession | ✓ | GameSession | |||
| guildModelName | string | ✓ | ~ 128자 | 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. | ||
| pageToken | string | ~ 1024자 | 데이터 취득을 시작할 위치를 지정하는 토큰 | |||
| limit | int | 30 | 1 ~ 1000 | 취득할 데이터 건수 |
Result
| 타입 | 설명 | |
|---|---|---|
| items | List<EzSendMemberRequest> | 참가 요청 목록 |
| nextPageToken | string | 목록의 나머지를 취득하기 위한 페이지 토큰 |
구현 예제
var domain = gs2.Guild.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
);
var items = await domain.SendRequestsAsync(
guildModelName: "guild-0002"
).ToListAsync(); var domain = gs2.Guild.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
);
var it = domain.SendRequests(
guildModelName: "guild-0002"
);
List<EzSendMemberRequest> items = new List<EzSendMemberRequest>();
while (it.HasNext())
{
yield return it.Next();
if (it.Error != null)
{
onError.Invoke(it.Error, null);
break;
}
if (it.Current != null)
{
items.Add(it.Current);
}
else
{
break;
}
} const auto Domain = Gs2->Guild->Namespace(
"namespace-0001" // namespaceName
)->Me(
GameSession
);
const auto It = Domain->SendRequests(
"guild-0002" // guildModelName
);
TArray<Gs2::UE5::Guild::Model::FEzSendMemberRequestPtr> Result;
for (auto Item : *It)
{
if (Item.IsError())
{
return false;
}
Result.Add(Item.Current());
}sendRequest
길드에 가입 신청을 전송한다
지정한 길드에 가입 신청을 전송합니다. 길드의 가입 방식이 “자유 가입"인 경우 즉시 가입되며, “승인제"인 경우 길드의 수신함에 심사 대기 상태로 전달됩니다.
신청에 메타데이터(예: “Lv50 힐러, 레이드 그룹을 찾고 있습니다” 같은 메시지)를 첨부할 수 있습니다.
플레이어가 길드의 차단 목록(IgnoreUser)에 등록되어 있는 경우 신청은 자동으로 거부됩니다.
길드 상세 화면의 “가입 신청”, “참가 신청” 버튼에 사용합니다.
Request
| 타입 | 활성화 조건 | 필수 | 기본값 | 값 제한 | 설명 | |
|---|---|---|---|---|---|---|
| namespaceName | string | ✓ | ~ 128자 | 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. | ||
| gameSession | GameSession | ✓ | GameSession | |||
| guildModelName | string | ✓ | ~ 128자 | 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. | ||
| targetGuildName | string | ✓ | ~ 128자 | 전송 대상 길드 이름 | ||
| metadata | string | ~ 512자 | 길드 멤버의 메타데이터 GS2의 동작에 영향을 주지 않는, 이 길드 멤버와 연결된 임의의 데이터입니다. 공헌 포인트, 마지막 로그인 시간, 길드 임원에게 표시되는 메모 등 멤버 고유의 정보를 저장하는 데 사용할 수 있습니다. |
Result
| 타입 | 설명 | |
|---|---|---|
| item | EzGuild | 참가한 길드 승인이 필요하지 않은 길드에 참가했을 때 응답됩니다 |
| sendMemberRequest | EzSendMemberRequest | 보낸 참가 요청 승인이 필요한 길드에 참가 요청을 보냈을 때 응답됩니다 |
Error
이 API에는 특별한 예외가 정의되어 있습니다.
GS2-SDK for Game Engine에서는 게임 내에서 핸들링이 필요할 것으로 예상되는 에러를, 일반적인 예외에서 파생된 특수화된 예외로 제공하여 다루기 쉽게 하고 있습니다.
일반적인 에러의 종류와 핸들링 방법은 여기 문서를 참고해 주세요.
| 타입 | 베이스 클래스 | 설명 |
|---|---|---|
| MaximumMembersReachedException | BadRequestException | 멤버 수가 상한에 도달했습니다. |
| MaximumJoinedGuildsReachedException | BadRequestException | 길드 동시 참가 수가 최댓값에 도달했습니다. |
| MaximumReceiveRequestsReachedException | BadRequestException | 길드에 대한 참가 요청 수가 상한에 도달했습니다. |
| MaximumSendRequestsReachedException | BadRequestException | 자신이 보낸 참가 요청 수가 상한에 도달했습니다. |
| DotMeetJoinRequirementsException | BadRequestException | 길드 참가 조건을 충족하지 않습니다. |
구현 예제
try {
var domain = gs2.Guild.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
);
var result = await domain.SendRequestAsync(
guildModelName: "guild-0002",
targetGuildName: "guild-0002",
metadata: null
);
var item = await result.ModelAsync();
} catch(Gs2.Gs2Guild.Exception.MaximumMembersReachedException e) {
// The number of members has reached the upper limit.
} catch(Gs2.Gs2Guild.Exception.MaximumJoinedGuildsReachedException e) {
// The number of guilds you can join at the same time has reached the upper limit.
} catch(Gs2.Gs2Guild.Exception.MaximumReceiveRequestsReachedException e) {
// The number of requests to join the guild has reached the upper limit.
} catch(Gs2.Gs2Guild.Exception.MaximumSendRequestsReachedException e) {
// You have reached the maximum number of requests you can send.
} catch(Gs2.Gs2Guild.Exception.DotMeetJoinRequirementsException e) {
// You do not meet the requirements to join the guild.
} var domain = gs2.Guild.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
);
var future = domain.SendRequestFuture(
guildModelName: "guild-0002",
targetGuildName: "guild-0002",
metadata: null
);
yield return future;
if (future.Error != null)
{
if (future.Error is Gs2.Gs2Guild.Exception.MaximumMembersReachedException)
{
// The number of members has reached the upper limit.
}
if (future.Error is Gs2.Gs2Guild.Exception.MaximumJoinedGuildsReachedException)
{
// The number of guilds you can join at the same time has reached the upper limit.
}
if (future.Error is Gs2.Gs2Guild.Exception.MaximumReceiveRequestsReachedException)
{
// The number of requests to join the guild has reached the upper limit.
}
if (future.Error is Gs2.Gs2Guild.Exception.MaximumSendRequestsReachedException)
{
// You have reached the maximum number of requests you can send.
}
if (future.Error is Gs2.Gs2Guild.Exception.DotMeetJoinRequirementsException)
{
// You do not meet the requirements to join the guild.
}
onError.Invoke(future.Error, null);
yield break;
}
var future2 = future.Result.ModelFuture();
yield return future2;
if (future2.Error != null)
{
onError.Invoke(future2.Error, null);
yield break;
}
var result = future2.Result; const auto Domain = Gs2->Guild->Namespace(
"namespace-0001" // namespaceName
)->Me(
GameSession
);
const auto Future = Domain->SendRequest(
"guild-0002", // guildModelName
"guild-0002" // targetGuildName
// metadata
);
Future->StartSynchronousTask();
if (Future->GetTask().IsError())
{
auto e = Future->GetTask().Error();
if (e->IsChildOf(Gs2::Guild::Error::FMaximumMembersReachedError::Class))
{
// The number of members has reached the upper limit.
}
if (e->IsChildOf(Gs2::Guild::Error::FMaximumJoinedGuildsReachedError::Class))
{
// The number of guilds you can join at the same time has reached the upper limit.
}
if (e->IsChildOf(Gs2::Guild::Error::FMaximumReceiveRequestsReachedError::Class))
{
// The number of requests to join the guild has reached the upper limit.
}
if (e->IsChildOf(Gs2::Guild::Error::FMaximumSendRequestsReachedError::Class))
{
// You have reached the maximum number of requests you can send.
}
if (e->IsChildOf(Gs2::Guild::Error::FDotMeetJoinRequirementsError::Class))
{
// You do not meet the requirements to join the guild.
}
return false;
}
// 변경된 값 / 결과 값을 취득
const auto Future2 = Future->GetTask().Result()->Model();
Future2->StartSynchronousTask();
if (Future2->GetTask().IsError())
{
return Future2->GetTask().Error();
}
const auto Result = Future2->GetTask().Result();var domain = ez.guild.namespace_(
"namespace-0001"
).me(game_session)
var async_result = await domain.send_request(
"guild-0002", # guild_model_name
"guild-0002", # target_guild_name
null # metadata
)
if async_result.error != null:
if async_result.error is Gs2GuildMaximumMembersReachedException:
# 멤버 수가 상한에 도달했습니다.
pass
if async_result.error is Gs2GuildMaximumJoinedGuildsReachedException:
# 길드 동시 참가 수가 최댓값에 도달했습니다.
pass
if async_result.error is Gs2GuildMaximumReceiveRequestsReachedException:
# 길드에 대한 참가 요청 수가 상한에 도달했습니다.
pass
if async_result.error is Gs2GuildMaximumSendRequestsReachedException:
# 자신이 보낸 참가 요청 수가 상한에 도달했습니다.
pass
if async_result.error is Gs2GuildDotMeetJoinRequirementsException:
# 길드 참가 조건을 충족하지 않습니다.
pass
push_error(str(async_result.error))
return
var result = async_result.resultgetJoinedGuild
플레이어가 소속된 특정 길드의 상세 정보를 취득한다
플레이어가 가입한 특정 길드의 멤버십 상세 정보를 취득합니다.
취득할 수 있는 정보에는 길드 이름, 플레이어의 역할, 가입일, 멤버십 메타데이터가 포함됩니다.
특정 길드에서의 플레이어 멤버십 정보를 표시하는 데 사용합니다. 예를 들어 “가입일: 2024-01-15, 역할: 부길드장, 메모: 탱커 메인"과 같이 표시할 수 있습니다.
Request
| 타입 | 활성화 조건 | 필수 | 기본값 | 값 제한 | 설명 | |
|---|---|---|---|---|---|---|
| namespaceName | string | ✓ | ~ 128자 | 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. | ||
| gameSession | GameSession | ✓ | GameSession | |||
| guildModelName | string | ✓ | ~ 128자 | 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. | ||
| guildName | string | ✓ | UUID | ~ 36자 | 길드명 길드의 고유한 이름을 유지합니다. 이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 각 길드를 식별하는 데 사용됩니다. |
Result
| 타입 | 설명 | |
|---|---|---|
| item | EzJoinedGuild | 참가 중인 길드 |
구현 예제
var domain = gs2.Guild.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
).JoinedGuild(
guildModelName: "guild-model-0001",
guildName: "guild-0001"
);
var item = await domain.ModelAsync(); var domain = gs2.Guild.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
).JoinedGuild(
guildModelName: "guild-model-0001",
guildName: "guild-0001"
);
var future = domain.ModelFuture();
yield return future;
var item = future.Result; const auto Domain = Gs2->Guild->Namespace(
"namespace-0001" // namespaceName
)->Me(
GameSession
)->JoinedGuild(
"guild-model-0001", // guildModelName
"guild-0001" // guildName
);
const auto Future = Domain->Model();
Future->StartSynchronousTask();
if (Future->GetTask().IsError())
{
return false;
}var domain = ez.guild.namespace_(
"namespace-0001"
).me(game_session).joined_guild(
"guild-model-0001",
"guild-0001"
)
var async_result = await domain.model()
if async_result.error != null:
push_error(str(async_result.error))
return
var result = async_result.result값 변경 이벤트 핸들링
var domain = gs2.Guild.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
).JoinedGuild(
guildModelName: "guild-model-0001",
guildName: "guild-0001"
);
// 이벤트 핸들링 시작
var callbackId = domain.Subscribe(
value => {
// 값이 변화했을 때 호출됨
// value에는 변경 후의 값이 전달됨
}
);
// 이벤트 핸들링 정지
domain.Unsubscribe(callbackId); var domain = gs2.Guild.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
).JoinedGuild(
guildModelName: "guild-model-0001",
guildName: "guild-0001"
);
// 이벤트 핸들링 시작
var callbackId = domain.Subscribe(
value => {
// 값이 변화했을 때 호출됨
// value에는 변경 후의 값이 전달됨
}
);
// 이벤트 핸들링 정지
domain.Unsubscribe(callbackId); const auto Domain = Gs2->Guild->Namespace(
"namespace-0001" // namespaceName
)->Me(
GameSession
)->JoinedGuild(
"guild-model-0001", // guildModelName
"guild-0001" // guildName
);
// 이벤트 핸들링 시작
const auto CallbackId = Domain->Subscribe(
[](TSharedPtr<Gs2::Guild::Model::FJoinedGuild> value) {
// 값이 변화했을 때 호출됨
// value에는 변경 후의 값이 전달됨
}
);
// 이벤트 핸들링 정지
Domain->Unsubscribe(CallbackId);var domain = ez.guild.namespace_(
"namespace-0001"
).me(game_session).joined_guild(
"guild-model-0001",
"guild-0001"
)
# 이벤트 핸들링 시작
var callback_id = domain.subscribe_model(func(value):
# 값이 변화했을 때 호출됨
# value에는 변경 후의 값이 전달됩니다
pass
)
# 이벤트 핸들링 정지
domain.unsubscribe_model(callback_id)이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다.
로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다.
따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다.
listJoinedGuilds
플레이어가 소속된 길드 목록을 취득한다
플레이어가 현재 멤버로 소속되어 있는 모든 길드를 취득합니다.
길드 모델 이름으로 필터링할 수도 있습니다. 생략하면 모든 유형의 길드가 반환됩니다.
각 항목에는 길드 이름, 가입 일시, 현재 역할이 포함됩니다.
“내 길드” 화면을 구성하여 플레이어의 길드 소속 현황을 표시하는 데 사용합니다. 예를 들어 “드래곤 나이츠(부길드장), 스타 얼라이언스(멤버)“와 같이 표시할 수 있습니다.
Request
| 타입 | 활성화 조건 | 필수 | 기본값 | 값 제한 | 설명 | |
|---|---|---|---|---|---|---|
| namespaceName | string | ✓ | ~ 128자 | 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. | ||
| gameSession | GameSession | ✓ | GameSession | |||
| guildModelName | string | ~ 128자 | 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. | |||
| pageToken | string | ~ 1024자 | 데이터 취득을 시작할 위치를 지정하는 토큰 | |||
| limit | int | 30 | 1 ~ 1000 | 취득할 데이터 건수 |
Result
| 타입 | 설명 | |
|---|---|---|
| items | List<EzJoinedGuild> | 참가 중인 길드 |
| nextPageToken | string | 목록의 나머지를 취득하기 위한 페이지 토큰 |
구현 예제
var domain = gs2.Guild.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
);
var items = await domain.JoinedGuildsAsync(
guildModelName: "guild-model-0001"
).ToListAsync(); var domain = gs2.Guild.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
);
var it = domain.JoinedGuilds(
guildModelName: "guild-model-0001"
);
List<EzJoinedGuild> items = new List<EzJoinedGuild>();
while (it.HasNext())
{
yield return it.Next();
if (it.Error != null)
{
onError.Invoke(it.Error, null);
break;
}
if (it.Current != null)
{
items.Add(it.Current);
}
else
{
break;
}
} const auto Domain = Gs2->Guild->Namespace(
"namespace-0001" // namespaceName
)->Me(
GameSession
);
const auto It = Domain->JoinedGuilds(
"guild-model-0001" // guildModelName
);
TArray<Gs2::UE5::Guild::Model::FEzJoinedGuildPtr> Result;
for (auto Item : *It)
{
if (Item.IsError())
{
return false;
}
Result.Add(Item.Current());
}값 변경 이벤트 핸들링
var domain = gs2.Guild.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
);
// 이벤트 핸들링 시작
var callbackId = domain.SubscribeJoinedGuilds(
() => {
// 리스트의 요소가 변화했을 때 호출됨
}
);
// 이벤트 핸들링 정지
domain.UnsubscribeJoinedGuilds(callbackId); var domain = gs2.Guild.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
);
// 이벤트 핸들링 시작
var callbackId = domain.SubscribeJoinedGuilds(
() => {
// 리스트의 요소가 변화했을 때 호출됨
}
);
// 이벤트 핸들링 정지
domain.UnsubscribeJoinedGuilds(callbackId); const auto Domain = Gs2->Guild->Namespace(
"namespace-0001" // namespaceName
)->Me(
GameSession
);
// 이벤트 핸들링 시작
const auto CallbackId = Domain->SubscribeJoinedGuilds(
[]() {
// 리스트의 요소가 변화했을 때 호출됨
}
);
// 이벤트 핸들링 정지
Domain->UnsubscribeJoinedGuilds(CallbackId);이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다.
로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다.
따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다.
updateMemberMetadata
길드 내 자신의 멤버 메타데이터를 갱신한다
길드 내에서 플레이어 자신의 메타데이터를 갱신합니다. 메타데이터는 자유 형식의 텍스트로, 멤버 고유의 정보를 무엇이든 저장할 수 있습니다.
예를 들어 희망 역할(“힐러”), 자기소개(“레이드 동료 모집 중”), 플레이 스타일 설정 등을 저장할 수 있습니다.
자기 자신의 메타데이터만 갱신할 수 있으며, 다른 멤버의 메타데이터는 변경할 수 없습니다.
“길드 내 프로필 편집” 기능에 사용합니다. 멤버가 길드 내에서의 상태나 메모를 설정하는 화면에 유용합니다.
Request
| 타입 | 활성화 조건 | 필수 | 기본값 | 값 제한 | 설명 | |
|---|---|---|---|---|---|---|
| namespaceName | string | ✓ | ~ 128자 | 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. | ||
| guildModelName | string | ✓ | ~ 128자 | 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. | ||
| guildName | string | ✓ | UUID | ~ 36자 | 길드명 길드의 고유한 이름을 유지합니다. 이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 각 길드를 식별하는 데 사용됩니다. | |
| gameSession | GameSession | ✓ | GameSession | |||
| metadata | string | ~ 512자 | 길드 멤버의 메타데이터 GS2의 동작에 영향을 주지 않는, 이 길드 멤버와 연결된 임의의 데이터입니다. 공헌 포인트, 마지막 로그인 시간, 길드 임원에게 표시되는 메모 등 멤버 고유의 정보를 저장하는 데 사용할 수 있습니다. |
Result
| 타입 | 설명 | |
|---|---|---|
| item | EzGuild | 업데이트한 길드 |
구현 예제
var domain = gs2.Guild.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
).JoinedGuild(
guildModelName: "guild-model-0001",
guildName: "guild-0001"
);
var result = await domain.UpdateMemberMetadataAsync(
metadata: "metadata-0001"
);
var item = await result.ModelAsync(); var domain = gs2.Guild.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
).JoinedGuild(
guildModelName: "guild-model-0001",
guildName: "guild-0001"
);
var future = domain.UpdateMemberMetadataFuture(
metadata: "metadata-0001"
);
yield return future;
if (future.Error != null)
{
onError.Invoke(future.Error, null);
yield break;
}
var future2 = future.Result.ModelFuture();
yield return future2;
if (future2.Error != null)
{
onError.Invoke(future2.Error, null);
yield break;
}
var result = future2.Result; const auto Domain = Gs2->Guild->Namespace(
"namespace-0001" // namespaceName
)->Me(
GameSession
)->JoinedGuild(
"guild-model-0001", // guildModelName
"guild-0001" // guildName
);
const auto Future = Domain->UpdateMemberMetadata(
"metadata-0001" // metadata
);
Future->StartSynchronousTask();
if (Future->GetTask().IsError())
{
return false;
}
// 변경된 값 / 결과 값을 취득
const auto Future2 = Future->GetTask().Result()->Model();
Future2->StartSynchronousTask();
if (Future2->GetTask().IsError())
{
return Future2->GetTask().Error();
}
const auto Result = Future2->GetTask().Result();var domain = ez.guild.namespace_(
"namespace-0001"
).me(game_session).joined_guild(
"guild-model-0001",
"guild-0001"
)
var async_result = await domain.update_member_metadata(
"metadata-0001" # metadata
)
if async_result.error != null:
push_error(str(async_result.error))
return
var result = async_result.resultwithdrawGuild
길드에서 자발적으로 탈퇴하기
플레이어가 현재 소속되어 있는 길드에서 탈퇴합니다. 탈퇴 후 플레이어는 길드의 멤버 목록에서 삭제됩니다.
어떤 멤버든 자신의 의지로 탈퇴할 수 있습니다. 길드 마스터의 승인은 필요하지 않습니다.
주의: 길드 모델에 재가입 쿨다운이 설정되어 있는 경우, 쿨다운 기간이 지날 때까지 동일한 길드에 재가입할 수 없습니다.
길드 상세 화면이나 설정 화면의 “길드 탈퇴” 버튼에 사용합니다. 재가입 시 쿨다운이 있을 수 있으므로 확인 대화상자 표시를 권장합니다.
Request
| 타입 | 활성화 조건 | 필수 | 기본값 | 값 제한 | 설명 | |
|---|---|---|---|---|---|---|
| namespaceName | string | ✓ | ~ 128자 | 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. | ||
| gameSession | GameSession | ✓ | GameSession | |||
| guildModelName | string | ✓ | ~ 128자 | 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. | ||
| guildName | string | ✓ | UUID | ~ 36자 | 길드명 길드의 고유한 이름을 유지합니다. 이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 각 길드를 식별하는 데 사용됩니다. |
Result
| 타입 | 설명 | |
|---|---|---|
| item | EzJoinedGuild | 탈퇴한 길드 |
| guild | EzGuild | 길드 |
Error
이 API에는 특별한 예외가 정의되어 있습니다.
GS2-SDK for Game Engine에서는 게임 내에서 핸들링이 필요할 것으로 예상되는 에러를, 일반적인 예외에서 파생된 특수화된 예외로 제공하여 다루기 쉽게 하고 있습니다.
일반적인 에러의 종류와 핸들링 방법은 여기 문서를 참고해 주세요.
| 타입 | 베이스 클래스 | 설명 |
|---|---|---|
| GuildMasterRequiredException | BadRequestException | 길드 마스터 권한을 가진 멤버가 최소 1명 필요합니다. |
구현 예제
try {
var domain = gs2.Guild.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
).JoinedGuild(
guildModelName: "guild-model-0001",
guildName: "guild-0001"
);
var result = await domain.WithdrawGuildAsync(
);
var item = await result.ModelAsync();
} catch(Gs2.Gs2Guild.Exception.GuildMasterRequiredException e) {
// At least one member with guild master privileges is required.
} var domain = gs2.Guild.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
).JoinedGuild(
guildModelName: "guild-model-0001",
guildName: "guild-0001"
);
var future = domain.WithdrawGuildFuture(
);
yield return future;
if (future.Error != null)
{
if (future.Error is Gs2.Gs2Guild.Exception.GuildMasterRequiredException)
{
// At least one member with guild master privileges is required.
}
onError.Invoke(future.Error, null);
yield break;
}
var future2 = future.Result.ModelFuture();
yield return future2;
if (future2.Error != null)
{
onError.Invoke(future2.Error, null);
yield break;
}
var result = future2.Result; const auto Domain = Gs2->Guild->Namespace(
"namespace-0001" // namespaceName
)->Me(
GameSession
)->JoinedGuild(
"guild-model-0001", // guildModelName
"guild-0001" // guildName
);
const auto Future = Domain->WithdrawGuild(
);
Future->StartSynchronousTask();
if (Future->GetTask().IsError())
{
auto e = Future->GetTask().Error();
if (e->IsChildOf(Gs2::Guild::Error::FGuildMasterRequiredError::Class))
{
// At least one member with guild master privileges is required.
}
return false;
}
// 변경된 값 / 결과 값을 취득
const auto Future2 = Future->GetTask().Result()->Model();
Future2->StartSynchronousTask();
if (Future2->GetTask().IsError())
{
return Future2->GetTask().Error();
}
const auto Result = Future2->GetTask().Result();var domain = ez.guild.namespace_(
"namespace-0001"
).me(game_session).joined_guild(
"guild-model-0001",
"guild-0001"
)
var async_result = await domain.withdraw_guild(
)
if async_result.error != null:
if async_result.error is Gs2GuildGuildMasterRequiredException:
# 길드 마스터 권한을 가진 멤버가 최소 1명 필요합니다.
pass
push_error(str(async_result.error))
return
var result = async_result.resultaddIgnoreUser
플레이어의 길드 참가를 차단한다
플레이어를 길드의 차단 목록에 추가합니다. 차단되면 해당 플레이어는 이 길드에 참가 요청을 보낼 수 없게 되고, 이후의 요청은 자동으로 거부됩니다.
이 API는 길드로서 호출합니다(먼저 Assume이 필요합니다). 적절한 역할 권한을 가진 멤버만 차단 목록을 관리할 수 있습니다.
‘차단’ 버튼에 사용합니다. 예를 들어, 문제가 있는 멤버를 제명한 후 재가입 요청을 방지하려는 경우에 유용합니다.
Request
| 타입 | 활성화 조건 | 필수 | 기본값 | 값 제한 | 설명 | |
|---|---|---|---|---|---|---|
| namespaceName | string | ✓ | ~ 128자 | 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. | ||
| guildModelName | string | ✓ | ~ 128자 | 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. | ||
| guildGameSession | GuildGameSession | ✓ | ~ 128자 | GuildGameSession
assume으로 취득한 GuildGameSession입니다.권한은 assume을 호출한 멤버의 역할의 PolicyDocument에 따라 결정됩니다.추가하려면 해당 역할의 PolicyDocument에 Gs2Guild:AddIgnoreUser 권한이 필요합니다. | ||
| userId | string | ✓ | ~ 128자 | 사용자ID |
Result
| 타입 | 설명 | |
|---|---|---|
| item | EzIgnoreUser | 참가를 거부하는 사용자 ID |
| guild | EzGuild | 길드 |
구현 예제
var domain = gs2.Guild.Namespace(
namespaceName: "namespace-0001"
).GuildGameSession(
guildModelName: "guild-model-0001",
guildGameSession: GuildGameSession
);
var result = await domain.AddIgnoreUserAsync(
userId: "user-0001"
);
var item = await result.ModelAsync(); var domain = gs2.Guild.Namespace(
namespaceName: "namespace-0001"
).GuildGameSession(
guildModelName: "guild-model-0001",
guildGameSession: GuildGameSession
);
var future = domain.AddIgnoreUserFuture(
userId: "user-0001"
);
yield return future;
if (future.Error != null)
{
onError.Invoke(future.Error, null);
yield break;
}
var future2 = future.Result.ModelFuture();
yield return future2;
if (future2.Error != null)
{
onError.Invoke(future2.Error, null);
yield break;
}
var result = future2.Result; const auto Domain = Gs2->Guild->Namespace(
"namespace-0001" // namespaceName
)->GuildGameSession(
"guild-model-0001", // guildModelName
GuildGameSession // GuildGameSession
);
const auto Future = Domain->AddIgnoreUser(
"user-0001" // userId
);
Future->StartSynchronousTask();
if (Future->GetTask().IsError())
{
return false;
}
// 변경된 값 / 결과 값을 취득
const auto Future2 = Future->GetTask().Result()->Model();
Future2->StartSynchronousTask();
if (Future2->GetTask().IsError())
{
return Future2->GetTask().Error();
}
const auto Result = Future2->GetTask().Result();var domain = ez.guild.namespace_(
"namespace-0001"
).guild_game_session(
"guild-model-0001",
guild_game_session
)
var async_result = await domain.add_ignore_user(
guild_game_session.access_token, # access_token
"user-0001" # user_id
)
if async_result.error != null:
push_error(str(async_result.error))
return
var result = async_result.resultdeleteIgnoreUser
길드의 차단 목록에서 플레이어를 해제한다
플레이어를 길드의 차단 목록에서 삭제합니다. 차단 해제 후, 그 플레이어는 다시 이 길드에 참가 요청을 보낼 수 있게 됩니다.
이 API는 길드로서 호출합니다(먼저 Assume이 필요합니다). 적절한 역할 권한을 가진 멤버만 차단 목록을 관리할 수 있습니다.
차단 중인 플레이어 관리 화면의 ‘차단 해제’ 버튼에 사용합니다.
Request
| 타입 | 활성화 조건 | 필수 | 기본값 | 값 제한 | 설명 | |
|---|---|---|---|---|---|---|
| namespaceName | string | ✓ | ~ 128자 | 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. | ||
| guildModelName | string | ✓ | ~ 128자 | 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. | ||
| guildGameSession | GuildGameSession | ✓ | ~ 128자 | GuildGameSession
assume으로 취득한 GuildGameSession입니다.권한은 assume을 호출한 멤버의 역할의 PolicyDocument에 따라 결정됩니다.삭제하려면 해당 역할의 PolicyDocument에 Gs2Guild:DeleteIgnoreUser 권한이 필요합니다. | ||
| userId | string | ✓ | ~ 128자 | 사용자ID |
Result
| 타입 | 설명 | |
|---|---|---|
| item | EzIgnoreUser | 참가를 거부하는 사용자 ID |
구현 예제
var domain = gs2.Guild.Namespace(
namespaceName: "namespace-0001"
).GuildGameSession(
guildModelName: "guild-model-0001",
guildGameSession: GuildGameSession
).IgnoreUser(
);
var result = await domain.DeleteIgnoreUserAsync(
userId: "user-0001"
); var domain = gs2.Guild.Namespace(
namespaceName: "namespace-0001"
).GuildGameSession(
guildModelName: "guild-model-0001",
guildGameSession: GuildGameSession
).IgnoreUser(
);
var future = domain.DeleteIgnoreUserFuture(
userId: "user-0001"
);
yield return future;
if (future.Error != null)
{
onError.Invoke(future.Error, null);
yield break;
} const auto Domain = Gs2->Guild->Namespace(
"namespace-0001" // namespaceName
)->GuildGameSession(
"guild-model-0001", // guildModelName
GuildGameSession // GuildGameSession
)->IgnoreUser(
);
const auto Future = Domain->DeleteIgnoreUser(
"user-0001" // userId
);
Future->StartSynchronousTask();
if (Future->GetTask().IsError())
{
return false;
}
const auto Result = Future->GetTask().Result();var domain = ez.guild.namespace_(
"namespace-0001"
).guild_game_session(
"guild-model-0001",
guild_game_session
).ignore_user(
)
var async_result = await domain.delete_ignore_user(
guild_game_session.access_token, # access_token
"user-0001" # user_id
)
if async_result.error != null:
push_error(str(async_result.error))
return
var result = async_result.resultgetIgnoreUser
특정 플레이어가 길드의 차단 목록에 등록되어 있는지 확인한다
특정 플레이어가 이 길드에 참가하는 것이 차단되어 있는지 확인합니다.
이 API는 길드로서 호출합니다(먼저 Assume이 필요합니다).
‘차단’/‘차단 해제’ 버튼을 표시하기 전에 플레이어의 차단 상태를 확인하는 데 사용합니다. 예를 들어, 멤버 관리 화면이나 플레이어 프로필 화면에서 활용할 수 있습니다.
Request
| 타입 | 활성화 조건 | 필수 | 기본값 | 값 제한 | 설명 | |
|---|---|---|---|---|---|---|
| namespaceName | string | ✓ | ~ 128자 | 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. | ||
| guildModelName | string | ✓ | ~ 128자 | 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. | ||
| guildGameSession | GuildGameSession | ✓ | ~ 128자 | GuildGameSession
assume으로 취득한 GuildGameSession입니다.권한은 assume을 호출한 멤버의 역할의 PolicyDocument에 따라 결정됩니다.취득하려면 해당 역할의 PolicyDocument에 Gs2Guild:GetIgnoreUser 권한이 필요합니다. | ||
| userId | string | ✓ | ~ 128자 | 사용자ID |
Result
| 타입 | 설명 | |
|---|---|---|
| item | EzIgnoreUser | 참가를 거부하는 사용자 ID |
구현 예제
var domain = gs2.Guild.Namespace(
namespaceName: "namespace-0001"
).GuildGameSession(
guildModelName: "guild-model-0001",
guildGameSession: GuildGameSession
).IgnoreUser(
);
var item = await domain.ModelAsync(); var domain = gs2.Guild.Namespace(
namespaceName: "namespace-0001"
).GuildGameSession(
guildModelName: "guild-model-0001",
guildGameSession: GuildGameSession
).IgnoreUser(
);
var future = domain.ModelFuture();
yield return future;
var item = future.Result; const auto Domain = Gs2->Guild->Namespace(
"namespace-0001" // namespaceName
)->GuildGameSession(
"guild-model-0001", // guildModelName
GuildGameSession // GuildGameSession
)->IgnoreUser(
);
const auto Future = Domain->Model();
Future->StartSynchronousTask();
if (Future->GetTask().IsError())
{
return false;
}var domain = ez.guild.namespace_(
"namespace-0001"
).guild_game_session(
"guild-model-0001",
guild_game_session
).ignore_user(
)
var async_result = await domain.model()
if async_result.error != null:
push_error(str(async_result.error))
return
var result = async_result.result값 변경 이벤트 핸들링
var domain = gs2.Guild.Namespace(
namespaceName: "namespace-0001"
).GuildGameSession(
guildModelName: "guild-model-0001",
guildGameSession: GuildGameSession
).IgnoreUser(
);
// 이벤트 핸들링 시작
var callbackId = domain.Subscribe(
value => {
// 값이 변화했을 때 호출됨
// value에는 변경 후의 값이 전달됨
}
);
// 이벤트 핸들링 정지
domain.Unsubscribe(callbackId); var domain = gs2.Guild.Namespace(
namespaceName: "namespace-0001"
).GuildGameSession(
guildModelName: "guild-model-0001",
guildGameSession: GuildGameSession
).IgnoreUser(
);
// 이벤트 핸들링 시작
var callbackId = domain.Subscribe(
value => {
// 값이 변화했을 때 호출됨
// value에는 변경 후의 값이 전달됨
}
);
// 이벤트 핸들링 정지
domain.Unsubscribe(callbackId); const auto Domain = Gs2->Guild->Namespace(
"namespace-0001" // namespaceName
)->GuildGameSession(
"guild-model-0001", // guildModelName
GuildGameSession // GuildGameSession
)->IgnoreUser(
);
// 이벤트 핸들링 시작
const auto CallbackId = Domain->Subscribe(
[](TSharedPtr<Gs2::Guild::Model::FIgnoreUser> value) {
// 값이 변화했을 때 호출됨
// value에는 변경 후의 값이 전달됨
}
);
// 이벤트 핸들링 정지
Domain->Unsubscribe(CallbackId);var domain = ez.guild.namespace_(
"namespace-0001"
).guild_game_session(
"guild-model-0001",
guild_game_session
).ignore_user(
)
# 이벤트 핸들링 시작
var callback_id = domain.subscribe_model(func(value):
# 값이 변화했을 때 호출됨
# value에는 변경 후의 값이 전달됩니다
pass
)
# 이벤트 핸들링 정지
domain.unsubscribe_model(callback_id)이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다.
로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다.
따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다.
listIgnoreUsers
길드의 차단 목록을 취득한다
길드가 참가를 차단하고 있는 플레이어의 목록을 취득합니다.
이 API는 길드로서 호출합니다(먼저 Assume으로 길드의 액세스 토큰을 취득하세요).
차단된 플레이어는 이 길드에 참가 요청을 보낼 수 없습니다. 요청은 자동으로 거부됩니다.
길드 설정의 ‘차단 중인 플레이어’ 관리 화면을 구축하는 데 사용합니다. 예를 들어, 차단 중인 플레이어의 목록과 ‘차단 해제’ 버튼을 표시하는 화면입니다.
Request
| 타입 | 활성화 조건 | 필수 | 기본값 | 값 제한 | 설명 | |
|---|---|---|---|---|---|---|
| namespaceName | string | ✓ | ~ 128자 | 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. | ||
| guildModelName | string | ✓ | ~ 128자 | 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. | ||
| guildGameSession | GuildGameSession | ✓ | ~ 128자 | GuildGameSession
assume으로 취득한 GuildGameSession입니다.권한은 assume을 호출한 멤버의 역할의 PolicyDocument에 따라 결정됩니다.목록을 취득하려면 해당 역할의 PolicyDocument에 Gs2Guild:DescribeIgnoreUser 권한이 필요합니다. | ||
| pageToken | string | ~ 1024자 | 데이터 취득을 시작할 위치를 지정하는 토큰 | |||
| limit | int | 30 | 1 ~ 1000 | 취득할 데이터 건수 |
Result
| 타입 | 설명 | |
|---|---|---|
| items | List<EzIgnoreUser> | 참가를 거부하는 사용자 ID 리스트 |
| nextPageToken | string | 목록의 나머지를 취득하기 위한 페이지 토큰 |
구현 예제
var domain = gs2.Guild.Namespace(
namespaceName: "namespace-0001"
).GuildGameSession(
guildModelName: "guild-model-0001",
guildGameSession: GuildGameSession
);
var items = await domain.IgnoreUsersAsync(
).ToListAsync(); var domain = gs2.Guild.Namespace(
namespaceName: "namespace-0001"
).GuildGameSession(
guildModelName: "guild-model-0001",
guildGameSession: GuildGameSession
);
var it = domain.IgnoreUsers(
);
List<EzIgnoreUser> items = new List<EzIgnoreUser>();
while (it.HasNext())
{
yield return it.Next();
if (it.Error != null)
{
onError.Invoke(it.Error, null);
break;
}
if (it.Current != null)
{
items.Add(it.Current);
}
else
{
break;
}
} const auto Domain = Gs2->Guild->Namespace(
"namespace-0001" // namespaceName
)->GuildGameSession(
"guild-model-0001", // guildModelName
GuildGameSession // GuildGameSession
);
const auto It = Domain->IgnoreUsers(
);
TArray<Gs2::UE5::Guild::Model::FEzIgnoreUserPtr> Result;
for (auto Item : *It)
{
if (Item.IsError())
{
return false;
}
Result.Add(Item.Current());
}값 변경 이벤트 핸들링
var domain = gs2.Guild.Namespace(
namespaceName: "namespace-0001"
).GuildGameSession(
guildModelName: "guild-model-0001",
guildGameSession: GuildGameSession
);
// 이벤트 핸들링 시작
var callbackId = domain.SubscribeIgnoreUsers(
() => {
// 리스트의 요소가 변화했을 때 호출됨
}
);
// 이벤트 핸들링 정지
domain.UnsubscribeIgnoreUsers(callbackId); var domain = gs2.Guild.Namespace(
namespaceName: "namespace-0001"
).GuildGameSession(
guildModelName: "guild-model-0001",
guildGameSession: GuildGameSession
);
// 이벤트 핸들링 시작
var callbackId = domain.SubscribeIgnoreUsers(
() => {
// 리스트의 요소가 변화했을 때 호출됨
}
);
// 이벤트 핸들링 정지
domain.UnsubscribeIgnoreUsers(callbackId); const auto Domain = Gs2->Guild->Namespace(
"namespace-0001" // namespaceName
)->GuildGameSession(
"guild-model-0001", // guildModelName
GuildGameSession // GuildGameSession
);
// 이벤트 핸들링 시작
const auto CallbackId = Domain->SubscribeIgnoreUsers(
[]() {
// 리스트의 요소가 변화했을 때 호출됨
}
);
// 이벤트 핸들링 정지
Domain->UnsubscribeIgnoreUsers(CallbackId);이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다.
로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다.
따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다.
getLastGuildMasterActivity
길드 마스터의 마지막 활동 일시를 확인한다
길드 마스터의 가장 최근 활동 일시를 취득합니다.
이 API는 길드로서 호출합니다(먼저 Assume으로 길드의 액세스 토큰을 취득해야 합니다).
길드 마스터의 활동 상태를 표시하는 데 사용합니다. 예를 들어 “길드 마스터 마지막 로그인: 3일 전"과 같이 표시할 수 있습니다.
이 정보는 길드 마스터가 충분히 오랫동안 비활성 상태여서 자동 교체(PromoteSeniorMember)를 실행해야 하는지 판단하는 데 유용합니다.
Request
| 타입 | 활성화 조건 | 필수 | 기본값 | 값 제한 | 설명 | |
|---|---|---|---|---|---|---|
| namespaceName | string | ✓ | ~ 128자 | 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. | ||
| guildModelName | string | ✓ | ~ 128자 | 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. | ||
| guildGameSession | GuildGameSession | ✓ | ~ 128자 | GuildGameSession
assume으로 취득한 GuildGameSession입니다.권한은 assume을 호출한 멤버의 역할의 PolicyDocument에 따라 결정됩니다.취득하려면 해당 역할의 PolicyDocument에 Gs2Guild:GetLastGuildMasterActivity 권한이 필요합니다. |
Result
| 타입 | 설명 | |
|---|---|---|
| item | EzLastGuildMasterActivity | 마지막 길드 마스터 활동 |
| guild | EzGuild | 길드 |
구현 예제
var domain = gs2.Guild.Namespace(
namespaceName: "namespace-0001"
).GuildGameSession(
guildModelName: "guild-model-0001",
guildGameSession: GuildGameSession
).LastGuildMasterActivity(
);
var item = await domain.ModelAsync(); var domain = gs2.Guild.Namespace(
namespaceName: "namespace-0001"
).GuildGameSession(
guildModelName: "guild-model-0001",
guildGameSession: GuildGameSession
).LastGuildMasterActivity(
);
var future = domain.ModelFuture();
yield return future;
var item = future.Result; const auto Domain = Gs2->Guild->Namespace(
"namespace-0001" // namespaceName
)->GuildGameSession(
"guild-model-0001", // guildModelName
GuildGameSession // GuildGameSession
)->LastGuildMasterActivity(
);
const auto Future = Domain->Model();
Future->StartSynchronousTask();
if (Future->GetTask().IsError())
{
return false;
}var domain = ez.guild.namespace_(
"namespace-0001"
).guild_game_session(
"guild-model-0001",
guild_game_session
).last_guild_master_activity(
)
var async_result = await domain.model()
if async_result.error != null:
push_error(str(async_result.error))
return
var result = async_result.result값 변경 이벤트 핸들링
var domain = gs2.Guild.Namespace(
namespaceName: "namespace-0001"
).GuildGameSession(
guildModelName: "guild-model-0001",
guildGameSession: GuildGameSession
).LastGuildMasterActivity(
);
// 이벤트 핸들링 시작
var callbackId = domain.Subscribe(
value => {
// 값이 변화했을 때 호출됨
// value에는 변경 후의 값이 전달됨
}
);
// 이벤트 핸들링 정지
domain.Unsubscribe(callbackId); var domain = gs2.Guild.Namespace(
namespaceName: "namespace-0001"
).GuildGameSession(
guildModelName: "guild-model-0001",
guildGameSession: GuildGameSession
).LastGuildMasterActivity(
);
// 이벤트 핸들링 시작
var callbackId = domain.Subscribe(
value => {
// 값이 변화했을 때 호출됨
// value에는 변경 후의 값이 전달됨
}
);
// 이벤트 핸들링 정지
domain.Unsubscribe(callbackId); const auto Domain = Gs2->Guild->Namespace(
"namespace-0001" // namespaceName
)->GuildGameSession(
"guild-model-0001", // guildModelName
GuildGameSession // GuildGameSession
)->LastGuildMasterActivity(
);
// 이벤트 핸들링 시작
const auto CallbackId = Domain->Subscribe(
[](TSharedPtr<Gs2::Guild::Model::FLastGuildMasterActivity> value) {
// 값이 변화했을 때 호출됨
// value에는 변경 후의 값이 전달됨
}
);
// 이벤트 핸들링 정지
Domain->Unsubscribe(CallbackId);var domain = ez.guild.namespace_(
"namespace-0001"
).guild_game_session(
"guild-model-0001",
guild_game_session
).last_guild_master_activity(
)
# 이벤트 핸들링 시작
var callback_id = domain.subscribe_model(func(value):
# 값이 변화했을 때 호출됨
# value에는 변경 후의 값이 전달됩니다
pass
)
# 이벤트 핸들링 정지
domain.unsubscribe_model(callback_id)이 이벤트는 SDK가 가진 로컬 캐시의 값이 변경되었을 때 호출됩니다.
로컬 캐시는 SDK가 가진 API의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-Distributor를 통한 스탬프 시트의 실행, 또는 GS2-Gateway의 알림을 활성화한 GS2-JobQueue의 실행에 의해 변화한 것만이 대상이 됩니다.
따라서 이 방법 이외로 값이 변경된 경우 콜백은 호출되지 않습니다.
promoteSeniorMember
비활성 상태인 길드 마스터를 최고참 멤버로 교체한다
길드 모델의 비활성 설정에 정의된 기간 동안 길드 마스터가 활동하지 않은 경우, 가장 오래 소속되어 있는 멤버를 새로운 길드 마스터로 승격시킵니다.
이 API는 길드로서 호출합니다(먼저 Assume이 필요합니다). 비활성 기간의 임계값은 길드 모델에서 설정됩니다.
길드 마스터가 게임을 플레이하지 않게 되었을 때 길드가 “정체"되는 것을 방지합니다.
길드 마스터가 비활성 상태일 때 표시되는 “리더십 이어받기” 버튼에 사용합니다. 예를 들어 “길드 마스터가 30일간 로그인하지 않았습니다. 최고참 멤버로서 당신이 이어받을 수 있습니다.“와 같이 표시할 수 있습니다.
Request
| 타입 | 활성화 조건 | 필수 | 기본값 | 값 제한 | 설명 | |
|---|---|---|---|---|---|---|
| namespaceName | string | ✓ | ~ 128자 | 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. | ||
| guildModelName | string | ✓ | ~ 128자 | 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. | ||
| guildGameSession | GuildGameSession | ✓ | ~ 128자 | GuildGameSession
assume으로 취득한 GuildGameSession입니다.권한은 assume을 호출한 멤버의 역할의 PolicyDocument에 따라 결정됩니다.승격하려면 해당 역할의 PolicyDocument에 Gs2Guild:PromoteSeniorMember 권한이 필요합니다. |
Result
| 타입 | 설명 | |
|---|---|---|
| item | EzLastGuildMasterActivity | 마지막 길드 마스터 활동 |
| guild | EzGuild | 길드 |
구현 예제
var domain = gs2.Guild.Namespace(
namespaceName: "namespace-0001"
).GuildGameSession(
guildModelName: "guild-model-0001",
guildGameSession: GuildGameSession
);
var result = await domain.PromoteSeniorMemberAsync(
);
var item = await result.ModelAsync(); var domain = gs2.Guild.Namespace(
namespaceName: "namespace-0001"
).GuildGameSession(
guildModelName: "guild-model-0001",
guildGameSession: GuildGameSession
);
var future = domain.PromoteSeniorMemberFuture(
);
yield return future;
if (future.Error != null)
{
onError.Invoke(future.Error, null);
yield break;
}
var future2 = future.Result.ModelFuture();
yield return future2;
if (future2.Error != null)
{
onError.Invoke(future2.Error, null);
yield break;
}
var result = future2.Result; const auto Domain = Gs2->Guild->Namespace(
"namespace-0001" // namespaceName
)->GuildGameSession(
"guild-model-0001", // guildModelName
GuildGameSession // GuildGameSession
);
const auto Future = Domain->PromoteSeniorMember(
);
Future->StartSynchronousTask();
if (Future->GetTask().IsError())
{
return false;
}
// 변경된 값 / 결과 값을 취득
const auto Future2 = Future->GetTask().Result()->Model();
Future2->StartSynchronousTask();
if (Future2->GetTask().IsError())
{
return Future2->GetTask().Error();
}
const auto Result = Future2->GetTask().Result();var domain = ez.guild.namespace_(
"namespace-0001"
).guild_game_session(
"guild-model-0001",
guild_game_session
)
var async_result = await domain.promote_senior_member(
guild_game_session.access_token # access_token
)
if async_result.error != null:
push_error(str(async_result.error))
return
var result = async_result.result이벤트 핸들러
OnReceiveRequestNotification
참가 요청을 수신했을 때 사용하는 푸시 알림
| 이름 | 타입 | 설명 |
|---|---|---|
| namespaceName | string | 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. |
| guildModelName | string | 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. |
| guildName | string | 길드명 길드의 고유한 이름을 유지합니다. 이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 각 길드를 식별하는 데 사용됩니다. |
| fromUserId | string | 사용자ID |
구현 예제
gs2.Guild.OnReceiveRequestNotification += notification =>
{
var namespaceName = notification.NamespaceName;
var guildModelName = notification.GuildModelName;
var guildName = notification.GuildName;
var fromUserId = notification.FromUserId;
}; gs2.Guild.OnReceiveRequestNotification += notification =>
{
var namespaceName = notification.NamespaceName;
var guildModelName = notification.GuildModelName;
var guildName = notification.GuildName;
var fromUserId = notification.FromUserId;
}; Gs2->Guild->OnReceiveRequestNotification().AddLambda([](const auto Notification)
{
const auto NamespaceName = Notification->NamespaceNameValue;
const auto GuildModelName = Notification->GuildModelNameValue;
const auto GuildName = Notification->GuildNameValue;
const auto FromUserId = Notification->FromUserIdValue;
}); ez.guild.receive_request_notification.connect(func(notification):
var namespace_name = notification.namespace_name
var guild_model_name = notification.guild_model_name
var guild_name = notification.guild_name
var from_user_id = notification.from_user_id
)OnRemoveRequestNotification
참가 요청이 삭제되었을 때 사용하는 푸시 알림
| 이름 | 타입 | 설명 |
|---|---|---|
| namespaceName | string | 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. |
| guildModelName | string | 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. |
| guildName | string | 길드명 길드의 고유한 이름을 유지합니다. 이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 각 길드를 식별하는 데 사용됩니다. |
| fromUserId | string | 사용자ID |
구현 예제
gs2.Guild.OnRemoveRequestNotification += notification =>
{
var namespaceName = notification.NamespaceName;
var guildModelName = notification.GuildModelName;
var guildName = notification.GuildName;
var fromUserId = notification.FromUserId;
}; gs2.Guild.OnRemoveRequestNotification += notification =>
{
var namespaceName = notification.NamespaceName;
var guildModelName = notification.GuildModelName;
var guildName = notification.GuildName;
var fromUserId = notification.FromUserId;
}; Gs2->Guild->OnRemoveRequestNotification().AddLambda([](const auto Notification)
{
const auto NamespaceName = Notification->NamespaceNameValue;
const auto GuildModelName = Notification->GuildModelNameValue;
const auto GuildName = Notification->GuildNameValue;
const auto FromUserId = Notification->FromUserIdValue;
}); ez.guild.remove_request_notification.connect(func(notification):
var namespace_name = notification.namespace_name
var guild_model_name = notification.guild_model_name
var guild_name = notification.guild_name
var from_user_id = notification.from_user_id
)OnChangeNotification
길드 정보가 갱신되었을 때 발행되는 푸시 알림
| 이름 | 타입 | 설명 |
|---|---|---|
| namespaceName | string | 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. |
| guildModelName | string | 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. |
| guildName | string | 길드명 길드의 고유한 이름을 유지합니다. 이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 각 길드를 식별하는 데 사용됩니다. |
구현 예제
gs2.Guild.OnChangeNotification += notification =>
{
var namespaceName = notification.NamespaceName;
var guildModelName = notification.GuildModelName;
var guildName = notification.GuildName;
}; gs2.Guild.OnChangeNotification += notification =>
{
var namespaceName = notification.NamespaceName;
var guildModelName = notification.GuildModelName;
var guildName = notification.GuildName;
}; Gs2->Guild->OnChangeNotification().AddLambda([](const auto Notification)
{
const auto NamespaceName = Notification->NamespaceNameValue;
const auto GuildModelName = Notification->GuildModelNameValue;
const auto GuildName = Notification->GuildNameValue;
}); ez.guild.change_notification.connect(func(notification):
var namespace_name = notification.namespace_name
var guild_model_name = notification.guild_model_name
var guild_name = notification.guild_name
)OnJoinNotification
길드 멤버가 추가되었을 때 발행되는 푸시 알림
| 이름 | 타입 | 설명 |
|---|---|---|
| namespaceName | string | 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. |
| guildModelName | string | 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. |
| guildName | string | 길드명 길드의 고유한 이름을 유지합니다. 이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 각 길드를 식별하는 데 사용됩니다. |
| joinedUserId | string | 사용자ID |
구현 예제
gs2.Guild.OnJoinNotification += notification =>
{
var namespaceName = notification.NamespaceName;
var guildModelName = notification.GuildModelName;
var guildName = notification.GuildName;
var joinedUserId = notification.JoinedUserId;
}; gs2.Guild.OnJoinNotification += notification =>
{
var namespaceName = notification.NamespaceName;
var guildModelName = notification.GuildModelName;
var guildName = notification.GuildName;
var joinedUserId = notification.JoinedUserId;
}; Gs2->Guild->OnJoinNotification().AddLambda([](const auto Notification)
{
const auto NamespaceName = Notification->NamespaceNameValue;
const auto GuildModelName = Notification->GuildModelNameValue;
const auto GuildName = Notification->GuildNameValue;
const auto JoinedUserId = Notification->JoinedUserIdValue;
}); ez.guild.join_notification.connect(func(notification):
var namespace_name = notification.namespace_name
var guild_model_name = notification.guild_model_name
var guild_name = notification.guild_name
var joined_user_id = notification.joined_user_id
)OnLeaveNotification
길드 멤버가 제외되었을 때 발행되는 푸시 알림
| 이름 | 타입 | 설명 |
|---|---|---|
| namespaceName | string | 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. |
| guildModelName | string | 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. |
| guildName | string | 길드명 길드의 고유한 이름을 유지합니다. 이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 각 길드를 식별하는 데 사용됩니다. |
| leavedUserId | string | 사용자ID |
구현 예제
gs2.Guild.OnLeaveNotification += notification =>
{
var namespaceName = notification.NamespaceName;
var guildModelName = notification.GuildModelName;
var guildName = notification.GuildName;
var leavedUserId = notification.LeavedUserId;
}; gs2.Guild.OnLeaveNotification += notification =>
{
var namespaceName = notification.NamespaceName;
var guildModelName = notification.GuildModelName;
var guildName = notification.GuildName;
var leavedUserId = notification.LeavedUserId;
}; Gs2->Guild->OnLeaveNotification().AddLambda([](const auto Notification)
{
const auto NamespaceName = Notification->NamespaceNameValue;
const auto GuildModelName = Notification->GuildModelNameValue;
const auto GuildName = Notification->GuildNameValue;
const auto LeavedUserId = Notification->LeavedUserIdValue;
}); ez.guild.leave_notification.connect(func(notification):
var namespace_name = notification.namespace_name
var guild_model_name = notification.guild_model_name
var guild_name = notification.guild_name
var leaved_user_id = notification.leaved_user_id
)OnChangeMemberNotification
멤버 정보가 갱신되었을 때 발행되는 푸시 알림
| 이름 | 타입 | 설명 |
|---|---|---|
| namespaceName | string | 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. |
| guildModelName | string | 길드 모델 이름 길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. |
| guildName | string | 길드명 길드의 고유한 이름을 유지합니다. 이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 각 길드를 식별하는 데 사용됩니다. |
| changedUserId | string | 사용자ID |
구현 예제
gs2.Guild.OnChangeMemberNotification += notification =>
{
var namespaceName = notification.NamespaceName;
var guildModelName = notification.GuildModelName;
var guildName = notification.GuildName;
var changedUserId = notification.ChangedUserId;
}; gs2.Guild.OnChangeMemberNotification += notification =>
{
var namespaceName = notification.NamespaceName;
var guildModelName = notification.GuildModelName;
var guildName = notification.GuildName;
var changedUserId = notification.ChangedUserId;
}; Gs2->Guild->OnChangeMemberNotification().AddLambda([](const auto Notification)
{
const auto NamespaceName = Notification->NamespaceNameValue;
const auto GuildModelName = Notification->GuildModelNameValue;
const auto GuildName = Notification->GuildNameValue;
const auto ChangedUserId = Notification->ChangedUserIdValue;
}); ez.guild.change_member_notification.connect(func(notification):
var namespace_name = notification.namespace_name
var guild_model_name = notification.guild_model_name
var guild_name = notification.guild_name
var changed_user_id = notification.changed_user_id
)