Documentation index for AI agents

GS2-Guild SDK for Game Engine API 레퍼런스

게임 엔진용 GS2-Guild SDK의 모델 사양과 API 레퍼런스

모델

EzGuild

길드

길드는 최대 5개의 속성을 가질 수 있으며, 길드 검색이나 길드 목록 표시 시 이용할 수 있습니다.

길드에는 참가 정책을 설정할 수 있으며, 자유 참가와 승인제를 선택할 수 있습니다.
자유 참가를 선택한 경우, 길드에 참가 요청을 하면 즉시 길드 멤버가 됩니다.
승인제를 선택한 경우, 길드에 참가 요청을 하면 길드 마스터 또는 길드 멤버가 승인할 때까지 길드 멤버가 되지 않습니다.

길드 멤버에게는 역할을 설정할 수 있으며, 길드 마스터, 길드 멤버에 더해 길드가 독자적으로 정의한 최대 10개의 커스텀 역할을 설정할 수 있습니다.
길드 멤버는 길드에 참가했을 때 기본으로 부여되는 역할을 설정할 수 있습니다.

타입활성화 조건필수기본값값 제한설명
guildModelNamestring
~ 128자길드 모델 이름
길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다.
namestring
UUID~ 36자길드명
길드의 고유한 이름을 유지합니다.
이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 각 길드를 식별하는 데 사용됩니다.
displayNamestring
~ 64자표시 이름
UI에서 플레이어에게 표시되는, 사람이 읽을 수 있는 길드 이름입니다. 길드명(시스템에서 생성되는 UUID)과 달리, 표시 이름은 길드 생성자가 설정하며 갱신도 가능합니다. 길드 검색 결과, 멤버 목록, 기타 플레이어 대상 화면에 사용됩니다.
attribute1int0 ~ 2147483645속성1
길드 검색에서 필터링이나 정렬에 사용할 수 있는 길드의 숫자 속성입니다. 레벨, 지역, 플레이 스타일, 활동 요건 등의 커스텀 길드 속성을 정의하기 위해, 최대 5개의 속성을 개발자가 이용할 수 있습니다.
attribute2int0 ~ 2147483645속성2
길드 검색에서 필터링이나 정렬에 사용할 수 있는 길드의 숫자 속성입니다. 자세한 내용은 attribute1 을 참조하십시오.
attribute3int0 ~ 2147483645속성3
길드 검색에서 필터링이나 정렬에 사용할 수 있는 길드의 숫자 속성입니다. 자세한 내용은 attribute1 을 참조하십시오.
attribute4int0 ~ 2147483645속성4
길드 검색에서 필터링이나 정렬에 사용할 수 있는 길드의 숫자 속성입니다. 자세한 내용은 attribute1 을 참조하십시오.
attribute5int0 ~ 2147483645속성5
길드 검색에서 필터링이나 정렬에 사용할 수 있는 길드의 숫자 속성입니다. 자세한 내용은 attribute1 을 참조하십시오.
metadatastring~ 1024자길드 메타데이터
GS2 동작에 영향을 미치지 않는, 길드에 연결된 임의의 데이터입니다. 길드 엠블럼, 설명, 모집 메시지 등 게임 고유의 정보를 저장하는 데 사용할 수 있습니다.
joinPolicy문자열 열거형
enum {
  “anybody”,
  “approval”
}
참가 방침
사용자가 이 길드에 어떻게 참가할 수 있는지를 제어합니다. “anybody” 는 승인 없이 임의의 사용자가 즉시 참가할 수 있습니다. “approval” 은 사용자가 멤버가 되기 전에 길드 마스터 또는 권한을 가진 멤버가 참가 요청을 승인해야 합니다. 길드 마스터가 언제든지 변경할 수 있습니다.
정의설명
anybody자유 참가
approval승인제
customRolesList<EzRoleModel>[]0 ~ 10 items커스텀 역할 목록
모델 레벨의 역할을 오버라이드하거나 확장하는 길드 고유의 커스텀 역할 정의 목록입니다. 각 길드는 고유한 권한 집합을 가진 최대 10개의 커스텀 역할을 정의할 수 있습니다. 이 역할들은 모델 레벨의 역할에 더해 멤버에게 할당할 수 있습니다.
membersList<EzMember>[]0 ~ 100 items길드 멤버 목록
길드 마스터와 일반 멤버를 포함한, 이 길드의 모든 현재 멤버 목록입니다. 각 항목에는 멤버의 사용자 ID, 할당된 역할, 메타데이터, 참가 타임스탬프가 포함됩니다. 멤버 수는 currentMaximumMemberCount 를 초과할 수 없습니다.

EzReceiveMemberRequest

받은 참가 요청

멤버 등록 신청을 접수한 상태임을 나타내는 엔티티입니다.
해당 길드가 받은 참가 요청입니다.
해당 길드가 승인하면 참가 요청은 삭제되고 멤버 목록에 등록됩니다.

타입활성화 조건필수기본값값 제한설명
userIdstring
~ 128자사용자 ID
이 길드에 참가 요청을 보낸 플레이어의 GS2 사용자 ID입니다. 신청자를 식별하며, 승인 시 길드의 멤버 목록에 추가하거나 거부 시 통지하기 위해 사용됩니다.
targetGuildNamestring
~ 128자대상 길드명
이 참가 요청을 수신한 길드의 고유한 이름(UUID)입니다. 이 보류 중인 요청을 수신함에 가지고 있는 특정 길드 인스턴스를 식별하며, 길드의 멤버 관리 조작과 요청을 대조하기 위해 사용됩니다.

EzSendMemberRequest

송신한 참가 요청

멤버 등록을 신청 중인 상태를 나타내는 엔티티입니다.
해당 사용자가 길드에 대해 송신한 참가 요청입니다.
대상 길드가 승인하면 참가 요청은 삭제되고 멤버 목록에 등록됩니다.

타입활성화 조건필수기본값값 제한설명
userIdstring
~ 128자사용자 ID
이 길드 참가 요청을 송신한 플레이어의 GS2 사용자 ID입니다. 요청을 보낸 사용자를 식별하며, 승인 시 길드의 멤버 목록에 추가하기 위해 사용됩니다.
targetGuildNamestring
~ 128자대상 길드 이름
참가 요청이 송신된 길드의 고유한 이름(UUID)입니다. 사용자가 참가를 요청하고 있는 특정 길드 인스턴스를 식별하며, 요청 처리를 위해 길드의 수신함을 특정하는 데 사용됩니다.

EzJoinedGuild

가입 중인 길드

특정 길드에 대한 사용자의 멤버십을 나타냅니다. 사용자가 길드에 가입할 때(직접 가입 또는 신청 승인) 생성되며, 사용자가 탈퇴 또는 추방될 때 삭제됩니다. 사용자가 현재 어느 길드에 소속되어 있는지를 추적하여 maxConcurrentJoinGuilds 제한의 적용을 가능하게 합니다.

타입활성화 조건필수기본값값 제한설명
guildModelNamestring
~ 128자길드 모델 이름
가입 중인 길드가 속한 길드 모델의 이름입니다. 멤버십 제한, 롤 설정, 기타 길드 타입 설정을 포함하는 길드 모델 정의를 참조합니다.
guildNamestring
~ 128자길드 이름
사용자가 가입한 길드의 고유한 이름(UUID)입니다. 길드 모델 내의 특정 길드 인스턴스를 식별하기 위해 사용됩니다.
userIdstring
~ 128자사용자ID
createdAtlong
현재 시각생성일시
UNIX 시간·밀리초
※ 서버가 자동으로 설정

EzIgnoreUser

거부 사용자

특정 길드에 대한 가입이 차단된 사용자를 나타냅니다. 사용자가 거부 리스트에 추가되면 참가 신청이 자동으로 거부되며, 가입 정책이 자유 가입으로 설정되어 있어도 길드에 가입할 수 없습니다. 길드 마스터가 원치 않는 멤버를 관리하기 위해 사용합니다.

타입활성화 조건필수기본값값 제한설명
userIdstring
~ 128자사용자ID

EzLastGuildMasterActivity

마지막 길드 마스터 활동

길드 내에서 길드 마스터가 마지막으로 활동을 수행한 일시를 추적합니다. 이 타임스탬프는 비활성 기반 계승 시스템에서 사용됩니다. 길드 모델에서 설정된 inactivityPeriodDays가 길드 마스터의 활동 없이 경과하면, 리더십을 다른 멤버에게 자동으로 이양할 수 있습니다. 각 길드는 길드 마스터가 길드 조작을 수행할 때마다 업데이트되는 하나의 활동 기록을 가집니다.

타입활성화 조건필수기본값값 제한설명
userIdstring
~ 128자사용자ID
updatedAtlong
현재 시각최종 갱신일시
UNIX 시간·밀리초
※ 서버가 자동으로 설정

EzGuildModel

길드 모델

길드 모델이란 길드에 가입 가능한 최대 인원수 설정 및 길드 내 직책별 권한 설정을 가지는 엔티티입니다.

타입활성화 조건필수기본값값 제한설명
namestring
~ 128자길드 모델 이름
길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다.
metadatastring~ 2048자메타데이터
메타데이터에는 임의의 값을 설정할 수 있습니다.
이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다.
defaultMaximumMemberCountint
1 ~ 2147483646기본 최대 멤버 수
새 길드가 생성될 때 허용되는 초기 최대 멤버 수입니다. 이 값은 신규 길드의 currentMaximumMemberCount 초기값으로 사용됩니다. 길드 조작이나 입수 액션을 통해 나중에 maximumMemberCount 상한까지 늘릴 수 있습니다.
maximumMemberCountint
1 ~ 2147483646최대 멤버 수 상한
길드가 가질 수 있는 멤버 수의 절대적인 상한입니다. 길드의 currentMaximumMemberCount는 이 값을 초과할 수 없습니다. 길드가 의도된 규모를 넘어 성장하는 것을 방지하는 하드 캡으로 작동합니다.
rolesList<EzRoleModel>
1 ~ 10 items롤 모델 리스트
이 타입의 길드 내에서 이용 가능한 롤 정의 리스트입니다. guildMasterRole 및 guildMemberDefaultRole에서 참조되는 롤을 최소한 포함해야 합니다. 각 롤은 정책 문서를 통해 고유한 권한 집합을 정의합니다. 최대 10개의 롤을 정의할 수 있습니다.
rejoinCoolTimeMinutesint00 ~ 2147483646재가입 쿨타임(분)
사용자가 길드를 탈퇴한 후 다시 길드에 가입할 수 있게 되기까지의 쿨다운 기간(분)입니다. 0으로 설정하면 즉시 재가입이 가능합니다. 사용자가 길드에 반복적으로 가입·탈퇴하는 악용 패턴을 방지합니다.

EzRoleModel

롤 모델

롤 모델은 길드 내에서의 역할을 정의하고, 각 역할별로 실행할 수 있는 처리에 관한 권한을 설정합니다.

타입활성화 조건필수기본값값 제한설명
namestring
~ 128자롤 모델 이름
롤 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다.
metadatastring~ 2048자메타데이터
메타데이터에는 임의의 값을 설정할 수 있습니다.
이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다.
policyDocumentstring
~ 10240자정책 문서
이 역할의 권한을 정의하는 JSON 형식의 정책 문서입니다. 이 역할에 할당된 멤버에 대해 어떤 길드 조작(참가 요청 승인/거부, 멤버 추방, 길드 정보 업데이트, 멤버 역할 변경 등)이 허용되거나 거부되는지를 지정합니다.

EzMember

멤버

길드 멤버 목록을 관리하는 엔티티

타입활성화 조건필수기본값값 제한설명
userIdstring
~ 128자사용자ID
roleNamestring
~ 128자롤 모델 이름
롤 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다.
metadatastring~ 512자길드 멤버의 메타데이터
GS2의 동작에 영향을 주지 않는, 이 길드 멤버와 연결된 임의의 데이터입니다. 공헌 포인트, 마지막 로그인 시간, 길드 임원에게 표시되는 메모 등 멤버 고유의 정보를 저장하는 데 사용할 수 있습니다.
joinedAtlong
현재 시각참가 일시
UNIX 시간·밀리초

EzVerifyActionResult

검증 액션 실행 결과

타입활성화 조건필수기본값값 제한설명
action문자열 열거형
enum {
"Gs2Dictionary:VerifyEntryByUserId",
"Gs2Distributor:IfExpressionByUserId",
"Gs2Distributor:AndExpressionByUserId",
"Gs2Distributor:OrExpressionByUserId",
"Gs2Enchant:VerifyRarityParameterStatusByUserId",
"Gs2Experience:VerifyRankByUserId",
"Gs2Experience:VerifyRankCapByUserId",
"Gs2Grade:VerifyGradeByUserId",
"Gs2Grade:VerifyGradeUpMaterialByUserId",
"Gs2Guild:VerifyCurrentMaximumMemberCountByGuildName",
"Gs2Guild:VerifyIncludeMemberByUserId",
"Gs2Inventory:VerifyInventoryCurrentMaxCapacityByUserId",
"Gs2Inventory:VerifyItemSetByUserId",
"Gs2Inventory:VerifyReferenceOfByUserId",
"Gs2Inventory:VerifySimpleItemByUserId",
"Gs2Inventory:VerifyBigItemByUserId",
"Gs2Limit:VerifyCounterByUserId",
"Gs2Matchmaking:VerifyIncludeParticipantByUserId",
"Gs2Mission:VerifyCompleteByUserId",
"Gs2Mission:VerifyCounterValueByUserId",
"Gs2Ranking2:VerifyGlobalRankingScoreByUserId",
"Gs2Ranking2:VerifyClusterRankingScoreByUserId",
"Gs2Ranking2:VerifySubscribeRankingScoreByUserId",
"Gs2Schedule:VerifyTriggerByUserId",
"Gs2Schedule:VerifyEventByUserId",
"Gs2SerialKey:VerifyCodeByUserId",
"Gs2Stamina:VerifyStaminaValueByUserId",
"Gs2Stamina:VerifyStaminaMaxValueByUserId",
"Gs2Stamina:VerifyStaminaRecoverIntervalMinutesByUserId",
"Gs2Stamina:VerifyStaminaRecoverValueByUserId",
"Gs2Stamina:VerifyStaminaOverflowValueByUserId",
}
검증 액션에서 실행할 액션의 종류
verifyRequeststring
~ 524288자액션 실행 시 사용되는 요청의 JSON 문자열
statusCodeint0 ~ 999상태 코드
verifyResultstring~ 1048576자결과 내용

EzConsumeActionResult

소비 액션 실행 결과

타입활성화 조건필수기본값값 제한설명
action문자열 열거형
enum {
"Gs2AdReward:ConsumePointByUserId",
"Gs2Dictionary:DeleteEntriesByUserId",
"Gs2Enhance:DeleteProgressByUserId",
"Gs2Exchange:DeleteAwaitByUserId",
"Gs2Experience:SubExperienceByUserId",
"Gs2Experience:SubRankCapByUserId",
"Gs2Formation:SubMoldCapacityByUserId",
"Gs2Grade:SubGradeByUserId",
"Gs2Guild:DecreaseMaximumCurrentMaximumMemberCountByGuildName",
"Gs2Idle:DecreaseMaximumIdleMinutesByUserId",
"Gs2Inbox:OpenMessageByUserId",
"Gs2Inbox:DeleteMessageByUserId",
"Gs2Inventory:ConsumeItemSetByUserId",
"Gs2Inventory:ConsumeSimpleItemsByUserId",
"Gs2Inventory:ConsumeBigItemByUserId",
"Gs2JobQueue:DeleteJobByUserId",
"Gs2Limit:CountUpByUserId",
"Gs2LoginReward:MarkReceivedByUserId",
"Gs2Mission:ReceiveByUserId",
"Gs2Mission:BatchReceiveByUserId",
"Gs2Mission:DecreaseCounterByUserId",
"Gs2Mission:ResetCounterByUserId",
"Gs2Money:WithdrawByUserId",
"Gs2Money:RecordReceipt",
"Gs2Money2:WithdrawByUserId",
"Gs2Money2:VerifyReceiptByUserId",
"Gs2Quest:DeleteProgressByUserId",
"Gs2Ranking2:CreateGlobalRankingReceivedRewardByUserId",
"Gs2Ranking2:CreateClusterRankingReceivedRewardByUserId",
"Gs2Schedule:DeleteTriggerByUserId",
"Gs2SerialKey:UseByUserId",
"Gs2Showcase:IncrementPurchaseCountByUserId",
"Gs2SkillTree:MarkRestrainByUserId",
"Gs2Stamina:DecreaseMaxValueByUserId",
"Gs2Stamina:ConsumeStaminaByUserId",
}
소비 액션에서 실행할 액션의 종류
consumeRequeststring
~ 524288자액션 실행 시 사용되는 요청의 JSON 문자열
statusCodeint0 ~ 999상태 코드
consumeResultstring~ 1048576자결과 내용

EzAcquireActionResult

획득 액션 실행 결과

타입활성화 조건필수기본값값 제한설명
action문자열 열거형
enum {
"Gs2AdReward:AcquirePointByUserId",
"Gs2Dictionary:AddEntriesByUserId",
"Gs2Enchant:ReDrawBalanceParameterStatusByUserId",
"Gs2Enchant:SetBalanceParameterStatusByUserId",
"Gs2Enchant:ReDrawRarityParameterStatusByUserId",
"Gs2Enchant:AddRarityParameterStatusByUserId",
"Gs2Enchant:SetRarityParameterStatusByUserId",
"Gs2Enhance:DirectEnhanceByUserId",
"Gs2Enhance:UnleashByUserId",
"Gs2Enhance:CreateProgressByUserId",
"Gs2Exchange:ExchangeByUserId",
"Gs2Exchange:IncrementalExchangeByUserId",
"Gs2Exchange:CreateAwaitByUserId",
"Gs2Exchange:AcquireForceByUserId",
"Gs2Exchange:SkipByUserId",
"Gs2Experience:AddExperienceByUserId",
"Gs2Experience:SetExperienceByUserId",
"Gs2Experience:AddRankCapByUserId",
"Gs2Experience:SetRankCapByUserId",
"Gs2Experience:MultiplyAcquireActionsByUserId",
"Gs2Formation:AddMoldCapacityByUserId",
"Gs2Formation:SetMoldCapacityByUserId",
"Gs2Formation:AcquireActionsToFormProperties",
"Gs2Formation:SetFormByUserId",
"Gs2Formation:AcquireActionsToPropertyFormProperties",
"Gs2Friend:UpdateProfileByUserId",
"Gs2Grade:AddGradeByUserId",
"Gs2Grade:ApplyRankCapByUserId",
"Gs2Grade:MultiplyAcquireActionsByUserId",
"Gs2Guild:IncreaseMaximumCurrentMaximumMemberCountByGuildName",
"Gs2Guild:SetMaximumCurrentMaximumMemberCountByGuildName",
"Gs2Idle:IncreaseMaximumIdleMinutesByUserId",
"Gs2Idle:SetMaximumIdleMinutesByUserId",
"Gs2Idle:ReceiveByUserId",
"Gs2Inbox:SendMessageByUserId",
"Gs2Inventory:AddCapacityByUserId",
"Gs2Inventory:SetCapacityByUserId",
"Gs2Inventory:AcquireItemSetByUserId",
"Gs2Inventory:AcquireItemSetWithGradeByUserId",
"Gs2Inventory:AddReferenceOfByUserId",
"Gs2Inventory:DeleteReferenceOfByUserId",
"Gs2Inventory:AcquireSimpleItemsByUserId",
"Gs2Inventory:SetSimpleItemsByUserId",
"Gs2Inventory:AcquireBigItemByUserId",
"Gs2Inventory:SetBigItemByUserId",
"Gs2JobQueue:PushByUserId",
"Gs2Limit:CountDownByUserId",
"Gs2Limit:DeleteCounterByUserId",
"Gs2LoginReward:DeleteReceiveStatusByUserId",
"Gs2LoginReward:UnmarkReceivedByUserId",
"Gs2Lottery:DrawByUserId",
"Gs2Lottery:ResetBoxByUserId",
"Gs2Mission:RevertReceiveByUserId",
"Gs2Mission:IncreaseCounterByUserId",
"Gs2Mission:SetCounterByUserId",
"Gs2Money:DepositByUserId",
"Gs2Money:RevertRecordReceipt",
"Gs2Money2:DepositByUserId",
"Gs2Quest:CreateProgressByUserId",
"Gs2Schedule:TriggerByUserId",
"Gs2Schedule:ExtendTriggerByUserId",
"Gs2Script:InvokeScript",
"Gs2SerialKey:RevertUseByUserId",
"Gs2SerialKey:IssueOnce",
"Gs2Showcase:DecrementPurchaseCountByUserId",
"Gs2Showcase:ForceReDrawByUserId",
"Gs2SkillTree:MarkReleaseByUserId",
"Gs2Stamina:RecoverStaminaByUserId",
"Gs2Stamina:RaiseMaxValueByUserId",
"Gs2Stamina:SetMaxValueByUserId",
"Gs2Stamina:SetRecoverIntervalByUserId",
"Gs2Stamina:SetRecoverValueByUserId",
"Gs2StateMachine:StartStateMachineByUserId",
}
입수 액션에서 실행할 액션의 종류
acquireRequeststring
~ 524288자액션 실행 시 사용되는 요청의 JSON 문자열
statusCodeint0 ~ 999상태 코드
acquireResultstring~ 1048576자결과 내용

EzTransactionResult

트랜잭션 실행 결과

서버 사이드에서 트랜잭션 자동 실행 기능을 이용하여 실행된 트랜잭션의 실행 결과

타입활성화 조건필수기본값값 제한설명
transactionIdstring
36 ~ 36자트랜잭션 ID
verifyResultsList<EzVerifyActionResult>0 ~ 10 items검증 액션의 실행 결과 목록
consumeResultsList<EzConsumeActionResult>[]0 ~ 10 items소비 액션의 실행 결과 목록
acquireResultsList<EzAcquireActionResult>[]0 ~ 100 items획득 액션 실행 결과 리스트

메서드

getGuildModel

이름을 지정하여 길드 타입 정의를 취득한다

이름을 지정하여 길드 모델을 1건 취득합니다.
취득할 수 있는 정보에는 멤버 상한, 역할 정의와 그 권한, 가입 방식 설정, 재가입 쿨다운 기간, 비활성 길드 마스터의 승계 설정이 포함됩니다.
특정 길드 타입의 규칙을 표시할 때 사용합니다. 예를 들어 길드 생성 화면이나 상세 화면에서 “최대 멤버: 30명, 가입: 승인제, 역할: 마스터 / 부길드장 / 멤버"와 같이 표시할 수 있습니다.

Request

타입활성화 조건필수기본값값 제한설명
namespaceNamestring
~ 128자네임스페이스 이름
네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다.
guildModelNamestring
~ 128자길드 모델 이름
길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다.

Result

타입설명
itemEzGuildModel길드 모델

구현 예제

    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)

listGuildModels

길드 타입 정의 목록을 취득한다

이 네임스페이스에 등록된 모든 길드 모델을 취득합니다.
길드 모델은 길드의 규칙을 정의합니다. 최대 멤버 수, 역할 권한(예: “부길드장은 멤버를 추방할 수 있다”), 가입 방식(자유 가입/승인제), 재가입 쿨다운, 플레이어가 동시에 소속될 수 있는 길드 수 등입니다.
길드 마스터가 장기간 로그인하지 않을 경우의 자동 교체(최고참 멤버로의 승계) 설정도 포함됩니다.
플레이어가 길드를 둘러보거나 생성할 때, 어떤 유형의 길드가 있는지 표시하는 데 사용합니다.

Request

타입활성화 조건필수기본값값 제한설명
namespaceNamestring
~ 128자네임스페이스 이름
네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다.

Result

타입설명
itemsList<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);

assume

길드의 대리로서 조작할 권한을 취득하기

길드로서 조작을 수행하기 위한 길드 액세스 토큰을 취득합니다. 길드 설정 업데이트, 참가 요청 승인, 멤버 제명 등의 조작에 필요합니다.
플레이어는 해당 길드의 멤버여야 하며, 실행할 수 있는 조작은 역할 권한에 따라 달라집니다.
UpdateGuild, AcceptRequest, RejectRequest, DeleteMemberFromGuild 등의 길드 관리 API를 호출하기 전에 반드시 필요한 단계입니다.
“길드 관리 모드로 전환하는” 것과 같은 이미지입니다. 이를 호출한 후, 반환된 토큰을 사용하여 이어지는 길드 조작을 수행합니다.

Request

타입활성화 조건필수기본값값 제한설명
namespaceNamestring
~ 128자네임스페이스 이름
네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다.
guildModelNamestring
~ 128자길드 모델 이름
길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다.
gameSessionGameSession
GameSession
guildNamestring
UUID~ 36자길드명
길드의 고유한 이름을 유지합니다.
이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 각 길드를 식별하는 데 사용됩니다.

Result

타입설명
tokenstring길드용 액세스 토큰
userIdstring사용자ID
expirelong유효기간
토큰의 유효기간을 나타내는 타임스탬프입니다. 이 시각에 도달하면 토큰이 무효가 됩니다.
UNIX 시간(밀리초)

Error

이 API에는 특별한 예외가 정의되어 있습니다.
GS2-SDK for Game Engine에서는 게임 내에서 핸들링이 필요할 것으로 예상되는 에러를, 일반적인 예외에서 파생된 특수화된 예외로 제공하여 다루기 쉽게 하고 있습니다.
일반적인 에러의 종류와 핸들링 방법은 여기 문서를 참고해 주세요.

타입베이스 클래스설명
NotIncludedGuildMemberExceptionNotFoundException길드 멤버가 아닙니다.

구현 예제

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.result

batchUpdateGuildMemberRole

여러 길드 멤버의 역할을 한꺼번에 변경하기

여러 길드 멤버의 역할을 한 번의 API 호출로 한꺼번에 업데이트합니다. 예를 들어 여러 멤버를 동시에 “임원"으로 승격시키는 것과 같은 작업입니다.
이 API는 길드로서 호출합니다(먼저 Assume이 필요합니다). 적절한 역할 권한을 가진 멤버만 이 작업을 실행할 수 있습니다.
길드 마스터가 다수의 멤버 역할을 한 번에 재편성하고 싶을 때, 한 명씩 변경하는 대신 사용합니다.

Request

타입활성화 조건필수기본값값 제한설명
namespaceNamestring
~ 128자네임스페이스 이름
네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다.
guildModelNamestring
~ 128자길드 모델 이름
길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다.
guildGameSessionGuildGameSession
~ 128자GuildGameSession
assume으로 취득한 GuildGameSession입니다.
권한은 assume을 호출한 멤버의 역할에 연결된 PolicyDocument로 결정됩니다.
변경을 수행하려면 해당 역할의 PolicyDocumentGs2Guild:BatchUpdateMemberRole 권한이 필요합니다.
membersList<EzMember>
1 ~ 100 items업데이트할 멤버 목록

Result

타입설명
itemEzGuild업데이트한 길드

구현 예제

    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

타입활성화 조건필수기본값값 제한설명
namespaceNamestring
~ 128자네임스페이스 이름
네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다.
guildModelNamestring
~ 128자길드 모델 이름
길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다.
gameSessionGameSession
GameSession
displayNamestring
~ 64자표시 이름
UI에서 플레이어에게 표시되는, 사람이 읽을 수 있는 길드 이름입니다. 길드명(시스템에서 생성되는 UUID)과 달리, 표시 이름은 길드 생성자가 설정하며 갱신도 가능합니다. 길드 검색 결과, 멤버 목록, 기타 플레이어 대상 화면에 사용됩니다.
attribute1int0 ~ 2147483645속성1
길드 검색에서 필터링이나 정렬에 사용할 수 있는 길드의 숫자 속성입니다. 레벨, 지역, 플레이 스타일, 활동 요건 등의 커스텀 길드 속성을 정의하기 위해, 최대 5개의 속성을 개발자가 이용할 수 있습니다.
attribute2int0 ~ 2147483645속성2
길드 검색에서 필터링이나 정렬에 사용할 수 있는 길드의 숫자 속성입니다. 자세한 내용은 attribute1 을 참조하십시오.
attribute3int0 ~ 2147483645속성3
길드 검색에서 필터링이나 정렬에 사용할 수 있는 길드의 숫자 속성입니다. 자세한 내용은 attribute1 을 참조하십시오.
attribute4int0 ~ 2147483645속성4
길드 검색에서 필터링이나 정렬에 사용할 수 있는 길드의 숫자 속성입니다. 자세한 내용은 attribute1 을 참조하십시오.
attribute5int0 ~ 2147483645속성5
길드 검색에서 필터링이나 정렬에 사용할 수 있는 길드의 숫자 속성입니다. 자세한 내용은 attribute1 을 참조하십시오.
metadatastring~ 1024자길드 메타데이터
GS2 동작에 영향을 미치지 않는, 길드에 연결된 임의의 데이터입니다. 길드 엠블럼, 설명, 모집 메시지 등 게임 고유의 정보를 저장하는 데 사용할 수 있습니다.
memberMetadatastring~ 512자길드 멤버의 메타데이터
GS2의 동작에 영향을 주지 않는, 이 길드 멤버와 연결된 임의의 데이터입니다. 공헌 포인트, 마지막 로그인 시간, 길드 임원에게 표시되는 메모 등 멤버 고유의 정보를 저장하는 데 사용할 수 있습니다.
joinPolicy문자열 열거형
enum {
  “anybody”,
  “approval”
}
참가 방침
사용자가 이 길드에 어떻게 참가할 수 있는지를 제어합니다. “anybody” 는 승인 없이 임의의 사용자가 즉시 참가할 수 있습니다. “approval” 은 사용자가 멤버가 되기 전에 길드 마스터 또는 권한을 가진 멤버가 참가 요청을 승인해야 합니다. 길드 마스터가 언제든지 변경할 수 있습니다.
정의설명
anybody자유 참가
approval승인제
customRolesList<EzRoleModel>[]0 ~ 10 items커스텀 역할 목록
모델 레벨의 역할을 오버라이드하거나 확장하는 길드 고유의 커스텀 역할 정의 목록입니다. 각 길드는 고유한 권한 집합을 가진 최대 10개의 커스텀 역할을 정의할 수 있습니다. 이 역할들은 모델 레벨의 역할에 더해 멤버에게 할당할 수 있습니다.
guildMemberDefaultRolestring~ 128자기본 커스텀 역할
이 특정 길드에 새 멤버가 참가했을 때 자동으로 할당되는 커스텀 역할입니다. 설정한 경우, 이 길드에 대해 길드 모델의 guildMemberDefaultRole 을 오버라이드합니다. customRoles 목록에 정의된 역할을 참조해야 합니다.

Result

타입설명
itemEzGuild생성한 길드

구현 예제

    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.result

deleteGuild

길드를 해산(삭제)하기

길드를 완전히 삭제합니다. 모든 멤버가 탈퇴하며 길드는 사라집니다.
이 API는 길드로서 호출합니다(먼저 Assume이 필요합니다). 일반적으로 길드 마스터만 길드를 해산할 권한을 가집니다.
길드 설정 화면의 “길드 해산” 버튼에 사용합니다. 모든 멤버에게 영향을 미치는 파괴적인 작업이므로 반드시 확인 대화상자를 표시하세요.

Request

타입활성화 조건필수기본값값 제한설명
namespaceNamestring
~ 128자네임스페이스 이름
네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다.
guildModelNamestring
~ 128자길드 모델 이름
길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다.
guildGameSessionGuildGameSession
~ 128자GuildGameSession
assume으로 취득한 GuildGameSession입니다.
권한은 assume을 호출한 멤버의 역할에 연결된 PolicyDocument로 결정됩니다.
삭제를 수행하려면 해당 역할의 PolicyDocumentGs2Guild:DeleteGuild 권한이 필요합니다.

Result

타입설명
itemEzGuild삭제한 길드

구현 예제

    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.result

deleteMemberFromGuild

멤버를 길드에서 제명하기

지정한 플레이어를 길드의 멤버 목록에서 삭제합니다.
이 API는 길드로서 호출합니다(먼저 Assume이 필요합니다). 적절한 역할 권한을 가진 멤버(일반적으로 길드 마스터나 임원)만 멤버를 제명할 수 있습니다.
멤버 관리 화면의 “제명” 버튼에 사용합니다. 작업을 취소하기 어려우므로 확인 대화상자 표시를 권장합니다.

Request

타입활성화 조건필수기본값값 제한설명
namespaceNamestring
~ 128자네임스페이스 이름
네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다.
guildModelNamestring
~ 128자길드 모델 이름
길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다.
guildGameSessionGuildGameSession
~ 128자GuildGameSession
assume으로 취득한 GuildGameSession입니다.
권한은 assume을 호출한 멤버의 역할에 연결된 PolicyDocument로 결정됩니다.
제명을 수행하려면 해당 역할의 PolicyDocumentGs2Guild:DeleteMember 권한이 필요합니다.
targetUserIdstring
~ 128자제명할 사용자 ID

Result

타입설명
itemEzGuild업데이트한 길드

Error

이 API에는 특별한 예외가 정의되어 있습니다.
GS2-SDK for Game Engine에서는 게임 내에서 핸들링이 필요할 것으로 예상되는 에러를, 일반적인 예외에서 파생된 특수화된 예외로 제공하여 다루기 쉽게 하고 있습니다.
일반적인 에러의 종류와 핸들링 방법은 여기 문서를 참고해 주세요.

타입베이스 클래스설명
GuildMasterRequiredExceptionBadRequestException길드 마스터 권한을 가진 멤버가 최소 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.result

getGuild

길드의 상세 정보를 가져오기

특정 길드의 상세 정보를 가져옵니다. 표시 이름, 커스텀 속성, 메타데이터, 멤버 목록, 참가 방식 등이 포함됩니다.
반환되는 정보는 요청한 플레이어와 길드의 관계에 따라 달라집니다. 길드 멤버는 멤버 목록을 포함한 전체 정보를 볼 수 있지만, 비멤버는 공개 정보만 볼 수 있습니다.
길드 상세 화면을 표시하는 데 사용합니다. 예를 들어 “Dragon Knights — 25/30명 — 참가: 승인제"와 같이 표시할 수 있습니다.

Request

타입활성화 조건필수기본값값 제한설명
namespaceNamestring
~ 128자네임스페이스 이름
네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다.
guildModelNamestring
~ 128자길드 모델 이름
길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다.
gameSessionGameSession
GameSession
guildNamestring
UUID~ 36자길드명
길드의 고유한 이름을 유지합니다.
이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 각 길드를 식별하는 데 사용됩니다.

Result

타입설명
itemEzGuild길드

구현 예제

    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)

listGuilds

참가할 수 있는 길드를 검색하기

플레이어가 참가할 수 있는 길드를 검색합니다. 표시 이름, 속성, 참가 방식으로 필터링할 수 있습니다.
최대 5개의 커스텀 속성(플레이 스타일, 언어, 활동 수준 등)과 참가 방식(자유 참가/승인제)으로 필터링할 수 있습니다.
이미 정원에 도달한 길드를 포함할지 여부도 선택할 수 있습니다.
주의: 최근 24시간 이내에 업데이트된 길드만 검색 결과에 표시됩니다. 길드를 검색 대상으로 유지하고 싶다면 변경 사항이 없어도 정기적으로 UpdateGuild를 호출하세요.
“길드 찾기” 화면을 구성하여 검색 필터와 일치하는 길드 목록을 표시하는 데 사용합니다.

Request

타입활성화 조건필수기본값값 제한설명
namespaceNamestring
~ 128자네임스페이스 이름
네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다.
gameSessionGameSession
GameSession
displayNamestring~ 64자검색할 길드 표시 이름
attributes1List<int>0 ~ 10 items검색할 속성1
attributes2List<int>0 ~ 10 items검색할 속성2
attributes3List<int>0 ~ 10 items검색할 속성3
attributes4List<int>0 ~ 10 items검색할 속성4
attributes5List<int>0 ~ 10 items검색할 속성5
joinPoliciesList<string>0 ~ 10 items검색할 길드 참가 방법 목록
includeFullMembersGuildboolfalse길드 멤버가 정원을 채운 길드를 검색 결과에 포함할지 여부
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”정렬 순서
정의설명
number_of_players참가 플레이어 수
attribute1_asc속성1 오름차순
attribute1_desc속성1 내림차순
attribute2_asc속성2 오름차순
attribute2_desc속성2 내림차순
attribute3_asc속성3 오름차순
attribute3_desc속성3 내림차순
attribute4_asc속성4 오름차순
attribute4_desc속성4 내림차순
attribute5_asc속성5 오름차순
attribute5_desc속성5 내림차순
last_updated최종 갱신 일시
pageTokenstring~ 1024자데이터 취득을 시작할 위치를 지정하는 토큰
limitint301 ~ 1000취득할 데이터 건수

Result

타입설명
itemsList<EzGuild>길드 목록
nextPageTokenstring목록의 나머지를 취득하기 위한 페이지 토큰

구현 예제

    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.result

updateGuild

길드의 설정을 업데이트하기

길드의 표시 이름, 커스텀 속성, 메타데이터, 참가 방식, 역할 정의를 업데이트합니다.
이 API는 길드로서 호출합니다. 먼저 Assume으로 길드의 액세스 토큰을 취득한 후 호출하세요.
적절한 역할 권한을 가진 멤버만 길드 설정을 업데이트할 수 있습니다.
또한 이를 정기적으로 호출하면 길드가 검색 결과에 계속 표시됩니다(24시간 동안 업데이트가 없는 길드는 검색에서 숨겨집니다).
“길드 설정” 화면에 사용합니다. 임원이나 길드 마스터가 길드 이름, 설명, 모집 방침을 변경하는 화면입니다.

Request

타입활성화 조건필수기본값값 제한설명
namespaceNamestring
~ 128자네임스페이스 이름
네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다.
guildModelNamestring
~ 128자길드 모델 이름
길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다.
guildGameSessionGuildGameSession
~ 128자GuildGameSession
assume으로 취득한 GuildGameSession입니다.
권한은 assume을 호출한 멤버의 역할에 연결된 PolicyDocument로 결정됩니다.
업데이트를 수행하려면 해당 역할의 PolicyDocumentGs2Guild:UpdateGuild 권한이 필요합니다.
displayNamestring
~ 64자표시 이름
UI에서 플레이어에게 표시되는, 사람이 읽을 수 있는 길드 이름입니다. 길드명(시스템에서 생성되는 UUID)과 달리, 표시 이름은 길드 생성자가 설정하며 갱신도 가능합니다. 길드 검색 결과, 멤버 목록, 기타 플레이어 대상 화면에 사용됩니다.
attribute1int0 ~ 2147483645속성1
길드 검색에서 필터링이나 정렬에 사용할 수 있는 길드의 숫자 속성입니다. 레벨, 지역, 플레이 스타일, 활동 요건 등의 커스텀 길드 속성을 정의하기 위해, 최대 5개의 속성을 개발자가 이용할 수 있습니다.
attribute2int0 ~ 2147483645속성2
길드 검색에서 필터링이나 정렬에 사용할 수 있는 길드의 숫자 속성입니다. 자세한 내용은 attribute1 을 참조하십시오.
attribute3int0 ~ 2147483645속성3
길드 검색에서 필터링이나 정렬에 사용할 수 있는 길드의 숫자 속성입니다. 자세한 내용은 attribute1 을 참조하십시오.
attribute4int0 ~ 2147483645속성4
길드 검색에서 필터링이나 정렬에 사용할 수 있는 길드의 숫자 속성입니다. 자세한 내용은 attribute1 을 참조하십시오.
attribute5int0 ~ 2147483645속성5
길드 검색에서 필터링이나 정렬에 사용할 수 있는 길드의 숫자 속성입니다. 자세한 내용은 attribute1 을 참조하십시오.
metadatastring~ 1024자길드 메타데이터
GS2 동작에 영향을 미치지 않는, 길드에 연결된 임의의 데이터입니다. 길드 엠블럼, 설명, 모집 메시지 등 게임 고유의 정보를 저장하는 데 사용할 수 있습니다.
joinPolicy문자열 열거형
enum {
  “anybody”,
  “approval”
}
참가 방침
사용자가 이 길드에 어떻게 참가할 수 있는지를 제어합니다. “anybody” 는 승인 없이 임의의 사용자가 즉시 참가할 수 있습니다. “approval” 은 사용자가 멤버가 되기 전에 길드 마스터 또는 권한을 가진 멤버가 참가 요청을 승인해야 합니다. 길드 마스터가 언제든지 변경할 수 있습니다.
정의설명
anybody자유 참가
approval승인제
customRolesList<EzRoleModel>[]0 ~ 10 items커스텀 역할 목록
모델 레벨의 역할을 오버라이드하거나 확장하는 길드 고유의 커스텀 역할 정의 목록입니다. 각 길드는 고유한 권한 집합을 가진 최대 10개의 커스텀 역할을 정의할 수 있습니다. 이 역할들은 모델 레벨의 역할에 더해 멤버에게 할당할 수 있습니다.
guildMemberDefaultRolestring~ 128자기본 커스텀 역할
이 특정 길드에 새 멤버가 참가했을 때 자동으로 할당되는 커스텀 역할입니다. 설정한 경우, 이 길드에 대해 길드 모델의 guildMemberDefaultRole 을 오버라이드합니다. customRoles 목록에 정의된 역할을 참조해야 합니다.

Result

타입설명
itemEzGuild업데이트한 길드

구현 예제

    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.result

updateGuildMemberRole

길드 멤버의 역할을 변경하기

특정 길드 멤버의 역할을 변경합니다. 예를 들어 멤버를 “임원"으로 승격시키거나, 임원을 “멤버"로 강등시킬 수 있습니다.
이 API는 길드로서 호출합니다(먼저 Assume이 필요합니다). 적절한 역할 권한을 가진 멤버만 다른 멤버의 역할을 변경할 수 있습니다.
“멤버 관리” 화면에 사용합니다. 길드 마스터나 임원이 멤버를 승격·강등시키는 화면입니다.

Request

타입활성화 조건필수기본값값 제한설명
namespaceNamestring
~ 128자네임스페이스 이름
네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다.
guildModelNamestring
~ 128자길드 모델 이름
길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다.
guildGameSessionGuildGameSession
~ 128자GuildGameSession
assume으로 취득한 GuildGameSession입니다.
권한은 assume을 호출한 멤버의 역할에 연결된 PolicyDocument로 결정됩니다.
역할 업데이트를 수행하려면 해당 역할의 PolicyDocumentGs2Guild:UpdateMemberRole 권한이 필요합니다.
targetUserIdstring
~ 128자업데이트할 사용자 ID
roleNamestring
~ 128자롤 모델 이름
롤 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다.

Result

타입설명
itemEzGuild업데이트한 길드

구현 예제

    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.result

acceptRequest

플레이어의 가입 신청을 승인한다

보류 중인 가입 신청을 승인하여, 신청한 플레이어를 길드의 멤버 목록에 추가합니다.
이 API는 길드로서 호출합니다(먼저 Assume이 필요합니다). 적절한 역할 권한을 가진 멤버만 가입 신청을 승인할 수 있습니다.
승인 후 플레이어는 길드 모델에 정의된 기본 역할로 길드 멤버가 됩니다.
가입 신청 상세 화면이나 목록 화면의 “승인” 버튼에 사용합니다.

Request

타입활성화 조건필수기본값값 제한설명
namespaceNamestring
~ 128자네임스페이스 이름
네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다.
guildGameSessionGuildGameSession
~ 128자GuildGameSession
assume으로 취득한 GuildGameSession입니다.
권한은 assume을 호출한 멤버의 역할의 PolicyDocument에 따라 결정됩니다.
승인하려면 해당 역할의 PolicyDocumentGs2Guild:AcceptRequest 권한이 필요합니다.
guildModelNamestring
~ 128자길드 모델 이름
길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다.
fromUserIdstring
~ 128자사용자ID

Result

타입설명
itemEzReceiveMemberRequest수락한 참가 요청
guildEzGuild길드

Error

이 API에는 특별한 예외가 정의되어 있습니다.
GS2-SDK for Game Engine에서는 게임 내에서 핸들링이 필요할 것으로 예상되는 에러를, 일반적인 예외에서 파생된 특수화된 예외로 제공하여 다루기 쉽게 하고 있습니다.
일반적인 에러의 종류와 핸들링 방법은 여기 문서를 참고해 주세요.

타입베이스 클래스설명
MaximumJoinedGuildsReachedExceptionBadRequestException길드 동시 참가 수가 최댓값에 도달했습니다.
MaximumMembersReachedExceptionBadRequestException멤버 수가 상한에 도달했습니다.

구현 예제

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.result

getReceiveRequest

특정 가입 신청의 상세 정보를 취득한다

발신자의 사용자 ID를 지정하여, 길드가 받은 특정 가입 신청의 상세 정보를 취득합니다.
이 API는 길드로서 호출합니다(먼저 Assume이 필요합니다).
가입 신청 상세 화면을 표시하는 데 사용합니다. 예를 들어 신청자의 프로필, 메시지, “승인” / “거부” 버튼을 표시하는 화면입니다.

Request

타입활성화 조건필수기본값값 제한설명
namespaceNamestring
~ 128자네임스페이스 이름
네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다.
guildGameSessionGuildGameSession
~ 128자GuildGameSession
assume으로 취득한 GuildGameSession입니다.
권한은 assume을 호출한 멤버의 역할의 PolicyDocument에 따라 결정됩니다.
취득하려면 해당 역할의 PolicyDocumentGs2Guild:GetReceiveRequest 권한이 필요합니다.
guildModelNamestring
~ 128자길드 모델 이름
길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다.
fromUserIdstring
~ 128자사용자ID

Result

타입설명
itemEzReceiveMemberRequest참가 요청

구현 예제

    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)

listReceiveRequests

길드가 받은 가입 신청 목록을 취득한다

플레이어들이 이 길드에 보낸, 보류 중인 가입 신청을 모두 취득합니다.
이 API는 길드로서 호출합니다(먼저 Assume으로 길드의 액세스 토큰을 취득해야 합니다).
각 신청에는 발신자와 첨부된 메시지 또는 메타데이터가 포함됩니다.
길드 관리 패널의 “가입 신청” 화면을 구성하는 데 사용합니다. 예를 들어 “PlayerA가 가입을 희망(메시지: Lv50 힐러, 매일 접속)“과 같은 목록을 표시할 수 있습니다.

Request

타입활성화 조건필수기본값값 제한설명
namespaceNamestring
~ 128자네임스페이스 이름
네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다.
guildGameSessionGuildGameSession
~ 128자GuildGameSession
assume으로 취득한 GuildGameSession입니다.
권한은 assume을 호출한 멤버의 역할의 PolicyDocument에 따라 결정됩니다.
목록을 취득하려면 해당 역할의 PolicyDocumentGs2Guild:DescribeReceiveRequests 권한이 필요합니다.
guildModelNamestring
~ 128자길드 모델 이름
길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다.
pageTokenstring~ 1024자데이터 취득을 시작할 위치를 지정하는 토큰
limitint301 ~ 1000취득할 데이터 건수

Result

타입설명
itemsList<EzReceiveMemberRequest>참가 요청 리스트
nextPageTokenstring목록의 나머지를 취득하기 위한 페이지 토큰

구현 예제

    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

타입활성화 조건필수기본값값 제한설명
namespaceNamestring
~ 128자네임스페이스 이름
네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다.
guildGameSessionGuildGameSession
~ 128자GuildGameSession
assume으로 취득한 GuildGameSession입니다.
권한은 assume을 호출한 멤버의 역할의 PolicyDocument에 따라 결정됩니다.
거부하려면 해당 역할의 PolicyDocumentGs2Guild:RejectRequest 권한이 필요합니다.
guildModelNamestring
~ 128자길드 모델 이름
길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다.
fromUserIdstring
~ 128자사용자ID

Result

타입설명
itemEzReceiveMemberRequest거부한 참가 요청

구현 예제

    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.result

cancelRequest

플레이어가 전송한 가입 신청을 취소한다

플레이어가 이전에 길드에 보낸, 보류 중인 가입 신청을 취소(철회)합니다.
취소 후 신청은 플레이어의 전송 신청 목록과 길드의 수신 신청 목록 양쪽에서 모두 삭제됩니다.
취소 후에는 같은 길드에 새로운 가입 신청을 다시 보낼 수 있습니다.
신청 중인 요청 상세 화면의 “신청 취소”, “요청 철회” 버튼에 사용합니다.

Request

타입활성화 조건필수기본값값 제한설명
namespaceNamestring
~ 128자네임스페이스 이름
네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다.
gameSessionGameSession
GameSession
guildModelNamestring
~ 128자길드 모델 이름
길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다.
targetGuildNamestring
~ 128자대상 길드 이름
참가 요청이 송신된 길드의 고유한 이름(UUID)입니다. 사용자가 참가를 요청하고 있는 특정 길드 인스턴스를 식별하며, 요청 처리를 위해 길드의 수신함을 특정하는 데 사용됩니다.

Result

타입설명
itemEzSendMemberRequest삭제된 참가 요청

구현 예제

    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.result

getSendRequest

플레이어가 전송한 가입 신청의 상세 정보를 취득한다

플레이어가 길드에 전송한 특정 가입 신청의 상세 정보를 취득합니다.
취득할 수 있는 정보에는 신청 대상 길드와 신청에 첨부된 메타데이터(메시지)가 포함됩니다.
신청 중인 요청의 상세 정보를 표시하는 데 사용합니다. 예를 들어 “드래곤 나이츠에 신청 중 — 메시지: Lv50 힐러"와 “취소” 버튼을 표시하는 화면에 유용합니다.

Request

타입활성화 조건필수기본값값 제한설명
namespaceNamestring
~ 128자네임스페이스 이름
네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다.
gameSessionGameSession
GameSession
guildModelNamestring
~ 128자길드 모델 이름
길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다.
targetGuildNamestring
~ 128자대상 길드 이름
참가 요청이 송신된 길드의 고유한 이름(UUID)입니다. 사용자가 참가를 요청하고 있는 특정 길드 인스턴스를 식별하며, 요청 처리를 위해 길드의 수신함을 특정하는 데 사용됩니다.

Result

타입설명
itemEzSendMemberRequest참가 요청

구현 예제

    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)

listSendRequests

플레이어가 전송한 가입 신청 목록을 취득한다

플레이어가 각 길드에 전송한, 아직 보류 중인 가입 신청을 모두 취득합니다.
각 항목에는 신청을 보낸 길드와 신청에 첨부된 메타데이터(메시지)가 포함됩니다.
“신청 중”, “보류 중인 신청” 화면을 구성하는 데 사용합니다. 예를 들어 “드래곤 나이츠에 신청 중(보류), 스타 얼라이언스에 신청 중(보류)“와 같은 표시에 유용합니다.

Request

타입활성화 조건필수기본값값 제한설명
namespaceNamestring
~ 128자네임스페이스 이름
네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다.
gameSessionGameSession
GameSession
guildModelNamestring
~ 128자길드 모델 이름
길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다.
pageTokenstring~ 1024자데이터 취득을 시작할 위치를 지정하는 토큰
limitint301 ~ 1000취득할 데이터 건수

Result

타입설명
itemsList<EzSendMemberRequest>참가 요청 목록
nextPageTokenstring목록의 나머지를 취득하기 위한 페이지 토큰

구현 예제

    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

타입활성화 조건필수기본값값 제한설명
namespaceNamestring
~ 128자네임스페이스 이름
네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다.
gameSessionGameSession
GameSession
guildModelNamestring
~ 128자길드 모델 이름
길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다.
targetGuildNamestring
~ 128자전송 대상 길드 이름
metadatastring~ 512자길드 멤버의 메타데이터
GS2의 동작에 영향을 주지 않는, 이 길드 멤버와 연결된 임의의 데이터입니다. 공헌 포인트, 마지막 로그인 시간, 길드 임원에게 표시되는 메모 등 멤버 고유의 정보를 저장하는 데 사용할 수 있습니다.

Result

타입설명
itemEzGuild참가한 길드
승인이 필요하지 않은 길드에 참가했을 때 응답됩니다
sendMemberRequestEzSendMemberRequest보낸 참가 요청
승인이 필요한 길드에 참가 요청을 보냈을 때 응답됩니다

Error

이 API에는 특별한 예외가 정의되어 있습니다.
GS2-SDK for Game Engine에서는 게임 내에서 핸들링이 필요할 것으로 예상되는 에러를, 일반적인 예외에서 파생된 특수화된 예외로 제공하여 다루기 쉽게 하고 있습니다.
일반적인 에러의 종류와 핸들링 방법은 여기 문서를 참고해 주세요.

타입베이스 클래스설명
MaximumMembersReachedExceptionBadRequestException멤버 수가 상한에 도달했습니다.
MaximumJoinedGuildsReachedExceptionBadRequestException길드 동시 참가 수가 최댓값에 도달했습니다.
MaximumReceiveRequestsReachedExceptionBadRequestException길드에 대한 참가 요청 수가 상한에 도달했습니다.
MaximumSendRequestsReachedExceptionBadRequestException자신이 보낸 참가 요청 수가 상한에 도달했습니다.
DotMeetJoinRequirementsExceptionBadRequestException길드 참가 조건을 충족하지 않습니다.

구현 예제

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.result

getJoinedGuild

플레이어가 소속된 특정 길드의 상세 정보를 취득한다

플레이어가 가입한 특정 길드의 멤버십 상세 정보를 취득합니다.
취득할 수 있는 정보에는 길드 이름, 플레이어의 역할, 가입일, 멤버십 메타데이터가 포함됩니다.
특정 길드에서의 플레이어 멤버십 정보를 표시하는 데 사용합니다. 예를 들어 “가입일: 2024-01-15, 역할: 부길드장, 메모: 탱커 메인"과 같이 표시할 수 있습니다.

Request

타입활성화 조건필수기본값값 제한설명
namespaceNamestring
~ 128자네임스페이스 이름
네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다.
gameSessionGameSession
GameSession
guildModelNamestring
~ 128자길드 모델 이름
길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다.
guildNamestring
UUID~ 36자길드명
길드의 고유한 이름을 유지합니다.
이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 각 길드를 식별하는 데 사용됩니다.

Result

타입설명
itemEzJoinedGuild참가 중인 길드

구현 예제

    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)

listJoinedGuilds

플레이어가 소속된 길드 목록을 취득한다

플레이어가 현재 멤버로 소속되어 있는 모든 길드를 취득합니다.
길드 모델 이름으로 필터링할 수도 있습니다. 생략하면 모든 유형의 길드가 반환됩니다.
각 항목에는 길드 이름, 가입 일시, 현재 역할이 포함됩니다.
“내 길드” 화면을 구성하여 플레이어의 길드 소속 현황을 표시하는 데 사용합니다. 예를 들어 “드래곤 나이츠(부길드장), 스타 얼라이언스(멤버)“와 같이 표시할 수 있습니다.

Request

타입활성화 조건필수기본값값 제한설명
namespaceNamestring
~ 128자네임스페이스 이름
네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다.
gameSessionGameSession
GameSession
guildModelNamestring~ 128자길드 모델 이름
길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다.
pageTokenstring~ 1024자데이터 취득을 시작할 위치를 지정하는 토큰
limitint301 ~ 1000취득할 데이터 건수

Result

타입설명
itemsList<EzJoinedGuild>참가 중인 길드
nextPageTokenstring목록의 나머지를 취득하기 위한 페이지 토큰

구현 예제

    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);

updateMemberMetadata

길드 내 자신의 멤버 메타데이터를 갱신한다

길드 내에서 플레이어 자신의 메타데이터를 갱신합니다. 메타데이터는 자유 형식의 텍스트로, 멤버 고유의 정보를 무엇이든 저장할 수 있습니다.
예를 들어 희망 역할(“힐러”), 자기소개(“레이드 동료 모집 중”), 플레이 스타일 설정 등을 저장할 수 있습니다.
자기 자신의 메타데이터만 갱신할 수 있으며, 다른 멤버의 메타데이터는 변경할 수 없습니다.
“길드 내 프로필 편집” 기능에 사용합니다. 멤버가 길드 내에서의 상태나 메모를 설정하는 화면에 유용합니다.

Request

타입활성화 조건필수기본값값 제한설명
namespaceNamestring
~ 128자네임스페이스 이름
네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다.
guildModelNamestring
~ 128자길드 모델 이름
길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다.
guildNamestring
UUID~ 36자길드명
길드의 고유한 이름을 유지합니다.
이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 각 길드를 식별하는 데 사용됩니다.
gameSessionGameSession
GameSession
metadatastring~ 512자길드 멤버의 메타데이터
GS2의 동작에 영향을 주지 않는, 이 길드 멤버와 연결된 임의의 데이터입니다. 공헌 포인트, 마지막 로그인 시간, 길드 임원에게 표시되는 메모 등 멤버 고유의 정보를 저장하는 데 사용할 수 있습니다.

Result

타입설명
itemEzGuild업데이트한 길드

구현 예제

    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.result

withdrawGuild

길드에서 자발적으로 탈퇴하기

플레이어가 현재 소속되어 있는 길드에서 탈퇴합니다. 탈퇴 후 플레이어는 길드의 멤버 목록에서 삭제됩니다.
어떤 멤버든 자신의 의지로 탈퇴할 수 있습니다. 길드 마스터의 승인은 필요하지 않습니다.
주의: 길드 모델에 재가입 쿨다운이 설정되어 있는 경우, 쿨다운 기간이 지날 때까지 동일한 길드에 재가입할 수 없습니다.
길드 상세 화면이나 설정 화면의 “길드 탈퇴” 버튼에 사용합니다. 재가입 시 쿨다운이 있을 수 있으므로 확인 대화상자 표시를 권장합니다.

Request

타입활성화 조건필수기본값값 제한설명
namespaceNamestring
~ 128자네임스페이스 이름
네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다.
gameSessionGameSession
GameSession
guildModelNamestring
~ 128자길드 모델 이름
길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다.
guildNamestring
UUID~ 36자길드명
길드의 고유한 이름을 유지합니다.
이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 각 길드를 식별하는 데 사용됩니다.

Result

타입설명
itemEzJoinedGuild탈퇴한 길드
guildEzGuild길드

Error

이 API에는 특별한 예외가 정의되어 있습니다.
GS2-SDK for Game Engine에서는 게임 내에서 핸들링이 필요할 것으로 예상되는 에러를, 일반적인 예외에서 파생된 특수화된 예외로 제공하여 다루기 쉽게 하고 있습니다.
일반적인 에러의 종류와 핸들링 방법은 여기 문서를 참고해 주세요.

타입베이스 클래스설명
GuildMasterRequiredExceptionBadRequestException길드 마스터 권한을 가진 멤버가 최소 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.result

addIgnoreUser

플레이어의 길드 참가를 차단한다

플레이어를 길드의 차단 목록에 추가합니다. 차단되면 해당 플레이어는 이 길드에 참가 요청을 보낼 수 없게 되고, 이후의 요청은 자동으로 거부됩니다.
이 API는 길드로서 호출합니다(먼저 Assume이 필요합니다). 적절한 역할 권한을 가진 멤버만 차단 목록을 관리할 수 있습니다.
‘차단’ 버튼에 사용합니다. 예를 들어, 문제가 있는 멤버를 제명한 후 재가입 요청을 방지하려는 경우에 유용합니다.

Request

타입활성화 조건필수기본값값 제한설명
namespaceNamestring
~ 128자네임스페이스 이름
네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다.
guildModelNamestring
~ 128자길드 모델 이름
길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다.
guildGameSessionGuildGameSession
~ 128자GuildGameSession
assume으로 취득한 GuildGameSession입니다.
권한은 assume을 호출한 멤버의 역할의 PolicyDocument에 따라 결정됩니다.
추가하려면 해당 역할의 PolicyDocumentGs2Guild:AddIgnoreUser 권한이 필요합니다.
userIdstring
~ 128자사용자ID

Result

타입설명
itemEzIgnoreUser참가를 거부하는 사용자 ID
guildEzGuild길드

구현 예제

    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.result

deleteIgnoreUser

길드의 차단 목록에서 플레이어를 해제한다

플레이어를 길드의 차단 목록에서 삭제합니다. 차단 해제 후, 그 플레이어는 다시 이 길드에 참가 요청을 보낼 수 있게 됩니다.
이 API는 길드로서 호출합니다(먼저 Assume이 필요합니다). 적절한 역할 권한을 가진 멤버만 차단 목록을 관리할 수 있습니다.
차단 중인 플레이어 관리 화면의 ‘차단 해제’ 버튼에 사용합니다.

Request

타입활성화 조건필수기본값값 제한설명
namespaceNamestring
~ 128자네임스페이스 이름
네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다.
guildModelNamestring
~ 128자길드 모델 이름
길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다.
guildGameSessionGuildGameSession
~ 128자GuildGameSession
assume으로 취득한 GuildGameSession입니다.
권한은 assume을 호출한 멤버의 역할의 PolicyDocument에 따라 결정됩니다.
삭제하려면 해당 역할의 PolicyDocumentGs2Guild:DeleteIgnoreUser 권한이 필요합니다.
userIdstring
~ 128자사용자ID

Result

타입설명
itemEzIgnoreUser참가를 거부하는 사용자 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.result

getIgnoreUser

특정 플레이어가 길드의 차단 목록에 등록되어 있는지 확인한다

특정 플레이어가 이 길드에 참가하는 것이 차단되어 있는지 확인합니다.
이 API는 길드로서 호출합니다(먼저 Assume이 필요합니다).
‘차단’/‘차단 해제’ 버튼을 표시하기 전에 플레이어의 차단 상태를 확인하는 데 사용합니다. 예를 들어, 멤버 관리 화면이나 플레이어 프로필 화면에서 활용할 수 있습니다.

Request

타입활성화 조건필수기본값값 제한설명
namespaceNamestring
~ 128자네임스페이스 이름
네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다.
guildModelNamestring
~ 128자길드 모델 이름
길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다.
guildGameSessionGuildGameSession
~ 128자GuildGameSession
assume으로 취득한 GuildGameSession입니다.
권한은 assume을 호출한 멤버의 역할의 PolicyDocument에 따라 결정됩니다.
취득하려면 해당 역할의 PolicyDocumentGs2Guild:GetIgnoreUser 권한이 필요합니다.
userIdstring
~ 128자사용자ID

Result

타입설명
itemEzIgnoreUser참가를 거부하는 사용자 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)

listIgnoreUsers

길드의 차단 목록을 취득한다

길드가 참가를 차단하고 있는 플레이어의 목록을 취득합니다.
이 API는 길드로서 호출합니다(먼저 Assume으로 길드의 액세스 토큰을 취득하세요).
차단된 플레이어는 이 길드에 참가 요청을 보낼 수 없습니다. 요청은 자동으로 거부됩니다.
길드 설정의 ‘차단 중인 플레이어’ 관리 화면을 구축하는 데 사용합니다. 예를 들어, 차단 중인 플레이어의 목록과 ‘차단 해제’ 버튼을 표시하는 화면입니다.

Request

타입활성화 조건필수기본값값 제한설명
namespaceNamestring
~ 128자네임스페이스 이름
네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다.
guildModelNamestring
~ 128자길드 모델 이름
길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다.
guildGameSessionGuildGameSession
~ 128자GuildGameSession
assume으로 취득한 GuildGameSession입니다.
권한은 assume을 호출한 멤버의 역할의 PolicyDocument에 따라 결정됩니다.
목록을 취득하려면 해당 역할의 PolicyDocumentGs2Guild:DescribeIgnoreUser 권한이 필요합니다.
pageTokenstring~ 1024자데이터 취득을 시작할 위치를 지정하는 토큰
limitint301 ~ 1000취득할 데이터 건수

Result

타입설명
itemsList<EzIgnoreUser>참가를 거부하는 사용자 ID 리스트
nextPageTokenstring목록의 나머지를 취득하기 위한 페이지 토큰

구현 예제

    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);

getLastGuildMasterActivity

길드 마스터의 마지막 활동 일시를 확인한다

길드 마스터의 가장 최근 활동 일시를 취득합니다.
이 API는 길드로서 호출합니다(먼저 Assume으로 길드의 액세스 토큰을 취득해야 합니다).
길드 마스터의 활동 상태를 표시하는 데 사용합니다. 예를 들어 “길드 마스터 마지막 로그인: 3일 전"과 같이 표시할 수 있습니다.
이 정보는 길드 마스터가 충분히 오랫동안 비활성 상태여서 자동 교체(PromoteSeniorMember)를 실행해야 하는지 판단하는 데 유용합니다.

Request

타입활성화 조건필수기본값값 제한설명
namespaceNamestring
~ 128자네임스페이스 이름
네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다.
guildModelNamestring
~ 128자길드 모델 이름
길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다.
guildGameSessionGuildGameSession
~ 128자GuildGameSession
assume으로 취득한 GuildGameSession입니다.
권한은 assume을 호출한 멤버의 역할의 PolicyDocument에 따라 결정됩니다.
취득하려면 해당 역할의 PolicyDocumentGs2Guild:GetLastGuildMasterActivity 권한이 필요합니다.

Result

타입설명
itemEzLastGuildMasterActivity마지막 길드 마스터 활동
guildEzGuild길드

구현 예제

    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)

promoteSeniorMember

비활성 상태인 길드 마스터를 최고참 멤버로 교체한다

길드 모델의 비활성 설정에 정의된 기간 동안 길드 마스터가 활동하지 않은 경우, 가장 오래 소속되어 있는 멤버를 새로운 길드 마스터로 승격시킵니다.
이 API는 길드로서 호출합니다(먼저 Assume이 필요합니다). 비활성 기간의 임계값은 길드 모델에서 설정됩니다.
길드 마스터가 게임을 플레이하지 않게 되었을 때 길드가 “정체"되는 것을 방지합니다.
길드 마스터가 비활성 상태일 때 표시되는 “리더십 이어받기” 버튼에 사용합니다. 예를 들어 “길드 마스터가 30일간 로그인하지 않았습니다. 최고참 멤버로서 당신이 이어받을 수 있습니다.“와 같이 표시할 수 있습니다.

Request

타입활성화 조건필수기본값값 제한설명
namespaceNamestring
~ 128자네임스페이스 이름
네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다.
guildModelNamestring
~ 128자길드 모델 이름
길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다.
guildGameSessionGuildGameSession
~ 128자GuildGameSession
assume으로 취득한 GuildGameSession입니다.
권한은 assume을 호출한 멤버의 역할의 PolicyDocument에 따라 결정됩니다.
승격하려면 해당 역할의 PolicyDocumentGs2Guild:PromoteSeniorMember 권한이 필요합니다.

Result

타입설명
itemEzLastGuildMasterActivity마지막 길드 마스터 활동
guildEzGuild길드

구현 예제

    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

참가 요청을 수신했을 때 사용하는 푸시 알림

이름타입설명
namespaceNamestring네임스페이스 이름
네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다.
guildModelNamestring길드 모델 이름
길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다.
guildNamestring길드명
길드의 고유한 이름을 유지합니다.
이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 각 길드를 식별하는 데 사용됩니다.
fromUserIdstring사용자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

참가 요청이 삭제되었을 때 사용하는 푸시 알림

이름타입설명
namespaceNamestring네임스페이스 이름
네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다.
guildModelNamestring길드 모델 이름
길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다.
guildNamestring길드명
길드의 고유한 이름을 유지합니다.
이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 각 길드를 식별하는 데 사용됩니다.
fromUserIdstring사용자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

길드 정보가 갱신되었을 때 발행되는 푸시 알림

이름타입설명
namespaceNamestring네임스페이스 이름
네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다.
guildModelNamestring길드 모델 이름
길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다.
guildNamestring길드명
길드의 고유한 이름을 유지합니다.
이름은 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

길드 멤버가 추가되었을 때 발행되는 푸시 알림

이름타입설명
namespaceNamestring네임스페이스 이름
네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다.
guildModelNamestring길드 모델 이름
길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다.
guildNamestring길드명
길드의 고유한 이름을 유지합니다.
이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 각 길드를 식별하는 데 사용됩니다.
joinedUserIdstring사용자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

길드 멤버가 제외되었을 때 발행되는 푸시 알림

이름타입설명
namespaceNamestring네임스페이스 이름
네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다.
guildModelNamestring길드 모델 이름
길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다.
guildNamestring길드명
길드의 고유한 이름을 유지합니다.
이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 각 길드를 식별하는 데 사용됩니다.
leavedUserIdstring사용자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

멤버 정보가 갱신되었을 때 발행되는 푸시 알림

이름타입설명
namespaceNamestring네임스페이스 이름
네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다.
guildModelNamestring길드 모델 이름
길드 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다.
guildNamestring길드명
길드의 고유한 이름을 유지합니다.
이름은 UUID(Universally Unique Identifier) 형식으로 자동 생성되며, 각 길드를 식별하는 데 사용됩니다.
changedUserIdstring사용자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
    )