Documentation index for AI agents

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

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

모델

EzBuffEntryModel

버프 엔트리 모델

버프의 적용량은 버프 엔트리 모델로 관리하며, 동일한 대상에 대해 여러 버프 엔트리 모델을 연결할 수 있습니다.
버프 엔트리 모델의 적용 순서는 버프 엔트리 모델의 priority 로 관리하며, priority 값이 작을수록 우선순위가 높아집니다.

버프의 적용 방식은 3종류가 있으며 “Rate Add”, “Mul”, “Value Add"가 있습니다.
Rate Add 는 버프의 적용 레이트에 가산하는 명령이며, Mul 은 버프의 적용 레이트에 곱하는 명령입니다.
Value Add 는 버프 보정 계산 후의 값에 가산을 수행하는 명령입니다.
예를 들어 기본 레이트가 1.0 이고 Rate Add 0.2 를 설정하면 버프 적용 레이트는 1.2 가 됩니다.
Mul 0.5 를 설정하면 버프 적용 레이트는 현재 레이트의 0.5배가 됩니다.

버프 엔트리 모델에는 GS2-Schedule 의 이벤트를 연결할 수 있으며, 이벤트 개최 기간 중에만 버프를 적용하도록 설정하는 것도 가능합니다.

타입활성화 조건필수기본값값 제한설명
namestring
~ 128자버프 엔트리 모델 이름
버프 엔트리 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다.
metadatastring~ 2048자메타데이터
메타데이터에는 임의의 값을 설정할 수 있습니다.
이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다.
targetType문자열 열거형
enum {
  “model”,
  “action”
}
버프를 적용할 대상의 종류
버프를 모델의 필드 값에 적용할지, 액션의 파라미터에 적용할지를 지정합니다. “Model"은 GS2 리소스 모델의 필드를 대상으로 하며, “Action"은 GS2 액션(예: 획득량이나 소비량)의 파라미터를 대상으로 합니다.
정의설명
model모델
action액션
targetModelEzBuffTargetModel{targetType} == “model”
✓※
버프를 적용할 대상 모델
버프를 적용할 GS2 리소스 모델과 필드를 지정합니다. 모델 이름, 필드 이름, 대상 리소스를 특정하는 조건 GRN, 그리고 레이트 값이 포함됩니다.

※ targetType이(가) “model” 이면 필수
targetActionEzBuffTargetAction{targetType} == “action”
✓※
버프를 적용할 대상 액션
버프를 적용할 GS2 액션과 파라미터를 지정합니다. 액션 이름, 필드 이름, 대상 리소스를 특정하는 조건 GRN, 그리고 레이트 값이 포함됩니다.

※ targetType이(가) “action” 이면 필수
expression문자열 열거형
enum {
  “rate_add”,
  “mul”,
  “value_add”
}
버프의 적용 타입
버프 값을 대상에 어떻게 적용할지를 지정합니다. “Rate Add"는 보정 레이트에 가산(예: 1.0 + 0.2 = 1.2), “Mul"은 보정 레이트에 곱함(예: 레이트 * 0.5), “Value Add"는 레이트 기반 보정 계산 후의 값에 직접 가산합니다.
정의설명
rate_add보정 레이트에 가산
mul보정 레이트에 곱함
value_add값을 직접 가산(모델이나 액션의 숫자 값만)
applyPeriodScheduleEventIdstring~ 1024자버프를 적용할 이벤트의 개최 기간 GRN
이 버프의 유효 기간을 제어하는 GS2-Schedule 이벤트의 GRN입니다. 지정한 경우, 이벤트 개최 기간 중에만 버프가 적용됩니다. 지정하지 않은 경우, 버프는 항상 유효합니다.

EzBuffTargetModel

버프 적용 대상 모델

버프 적용의 대상이 되는 GS2 리소스 모델과 필드를 정의합니다. 어떤 모델의 어떤 필드 값을 버프로 변경할지 지정하며, 대상 리소스 인스턴스를 특정하는 조건 GRN과 적용할 레이트 값을 포함합니다.

타입활성화 조건필수기본값값 제한설명
targetModelName문자열 열거형
enum {
}
버프를 적용할 모델의 종류
targetFieldNamestring
~ 64자버프 적용 대상 필드명
버프에 의해 값이 변경되는 대상 모델 상의 수치 필드명입니다. 예를 들어 경험치나 공격력 등의 수치 속성을 나타내는 필드가 대상이 됩니다.
conditionGrnsList<EzBuffTargetGrn>
1 ~ 10 items버프 적용 조건 GRN 목록
버프 적용의 대상 리소스 인스턴스를 특정하는 GRN 패턴의 목록입니다. 여러 GRN을 조합하여 리소스를 정확하게 특정하는 복합 조건을 구성합니다.
ratefloat
0 ~ 1000000보정 레이트
적용되는 버프 값입니다. 적용 타입에 따라 의미가 다릅니다. “Rate Add"의 경우 기본 레이트에 가산, “Mul"의 경우 현재 레이트에 곱셈, “Value Add"의 경우 레이트 계산 후의 필드 값에 직접 가산됩니다.

EzBuffTargetAction

버프 적용 대상 액션

버프 적용의 대상이 되는 GS2 액션과 파라미터를 정의합니다. 어떤 액션의 어떤 파라미터를 버프로 변경할지 지정하며, 대상 리소스 인스턴스를 특정하는 조건 GRN과 적용할 레이트 값을 포함합니다.

타입활성화 조건필수기본값값 제한설명
targetActionName문자열 열거형
enum {
"Gs2Experience:AddExperienceByUserId",
"Gs2Experience:SubExperience",
"Gs2Experience:SubExperienceByUserId",
"Gs2Inventory:AcquireItemSetByUserId",
"Gs2Inventory:ConsumeItemSet",
"Gs2Inventory:ConsumeItemSetByUserId",
"Gs2Inventory:AcquireSimpleItemsByUserId",
"Gs2Inventory:ConsumeSimpleItems",
"Gs2Inventory:ConsumeSimpleItemsByUserId",
"Gs2Inventory:AcquireBigItemByUserId",
"Gs2Inventory:ConsumeBigItem",
"Gs2Inventory:ConsumeBigItemByUserId",
"Gs2Limit:CountUp",
"Gs2Limit:CountUpByUserId",
"Gs2Money:DepositByUserId",
"Gs2Money:Withdraw",
"Gs2Money:WithdrawByUserId",
"Gs2Money2:DepositByUserId",
"Gs2Money2:Withdraw",
"Gs2Money2:WithdrawByUserId",
"Gs2Stamina:ConsumeStamina",
"Gs2Stamina:ConsumeStaminaByUserId",
"Gs2Stamina:RecoverStaminaByUserId",
}
버프를 적용할 액션의 종류
targetFieldNamestring
~ 64자버프 적용 대상 필드명
버프에 의해 값이 변경되는 대상 액션 상의 수치 파라미터명입니다. 예를 들어 입수 수량, 소비량, 보상 수량 등을 나타내는 파라미터가 대상이 됩니다.
conditionGrnsList<EzBuffTargetGrn>
1 ~ 10 items버프 적용 조건 GRN 목록
버프 적용의 대상 리소스 인스턴스를 특정하는 GRN 패턴의 목록입니다. 여러 GRN을 조합하여 리소스를 정확하게 특정하는 복합 조건을 구성합니다.
ratefloat
0 ~ 1000000보정 레이트
적용되는 버프 값입니다. 적용 타입에 따라 의미가 다릅니다. “Rate Add"의 경우 기본 레이트에 가산, “Mul"의 경우 현재 레이트에 곱셈, “Value Add"의 경우 레이트 계산 후의 파라미터 값에 직접 가산됩니다.

EzBuffTargetGrn

버프 적용 조건이 되는 리소스의 GRN 패턴

버프가 유효해지는 리소스 인스턴스를 좁히기 위한 조건 GRN 패턴입니다.
targetModelName 으로 GS2 서비스 모델의 종류를 특정하며, targetGrn 에는 런타임에 해결되는 컨텍스트 변수({region}, {ownerId})를 포함할 수 있습니다.

타입활성화 조건필수기본값값 제한설명
targetModelNamestring
~ 64자버프 적용 조건의 모델 이름
조건 GRN을 해결하기 위해 사용되는 GS2 서비스 모델의 이름입니다. GRN 패턴이 어느 서비스의 리소스 모델을 참조하는지를 특정합니다.
targetGrnstring
~ 1024자버프의 적용 조건 GRN
런타임에 해결되는 컨텍스트 플레이스홀더(예: {region}, {ownerId})를 포함한 GRN 템플릿입니다. 버프의 대상이 되는 특정 리소스 인스턴스를 특정하기 위해 사용됩니다.

메서드

getBuffEntryModel

이름으로 버프 정의 조회

이름을 지정하여 버프 엔트리 모델을 1건 조회합니다.
조회되는 정보에는 적용 방법(Rate Add / Mul / Value Add), 버프의 대상,
우선순위, 그리고 설정되어 있는 경우 버프가 활성화되는 이벤트 기간이 포함됩니다.

특정 버프의 효과 내용이나 활성 기간 등의 상세 정보를 표시할 때 사용합니다.

Request

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

Result

타입설명
itemEzBuffEntryModel버프 엔트리 모델

구현 예제

    var domain = gs2.Buff.Namespace(
        namespaceName: "namespace-0001"
    ).BuffEntryModel(
        buffEntryName: "character-level"
    );
    var item = await domain.ModelAsync();
    var domain = gs2.Buff.Namespace(
        namespaceName: "namespace-0001"
    ).BuffEntryModel(
        buffEntryName: "character-level"
    );
    var future = domain.ModelFuture();
    yield return future;
    var item = future.Result;
    const auto Domain = Gs2->Buff->Namespace(
        "namespace-0001" // namespaceName
    )->BuffEntryModel(
        "character-level" // buffEntryName
    );
    const auto Future = Domain->Model();
    Future->StartSynchronousTask();
    if (Future->GetTask().IsError())
    {
        return false;
    }
var domain = ez.buff.namespace_(
        "namespace-0001"
    ).buff_entry_model(
        "character-level"
    )

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.Buff.Namespace(
        namespaceName: "namespace-0001"
    ).BuffEntryModel(
        buffEntryName: "character-level"
    );

    // 이벤트 핸들링 시작
    var callbackId = domain.Subscribe(
        value => {
            // 값이 변화했을 때 호출됨
            // value에는 변경 후의 값이 전달됨
        }
    );

    // 이벤트 핸들링 정지
    domain.Unsubscribe(callbackId);
    var domain = gs2.Buff.Namespace(
        namespaceName: "namespace-0001"
    ).BuffEntryModel(
        buffEntryName: "character-level"
    );

    // 이벤트 핸들링 시작
    var callbackId = domain.Subscribe(
        value => {
            // 값이 변화했을 때 호출됨
            // value에는 변경 후의 값이 전달됨
        }
    );

    // 이벤트 핸들링 정지
    domain.Unsubscribe(callbackId);
    const auto Domain = Gs2->Buff->Namespace(
        "namespace-0001" // namespaceName
    )->BuffEntryModel(
        "character-level" // buffEntryName
    );

    // 이벤트 핸들링 시작
    const auto CallbackId = Domain->Subscribe(
        [](TSharedPtr<Gs2::Buff::Model::FBuffEntryModel> value) {
            // 값이 변화했을 때 호출됨
            // value에는 변경 후의 값이 전달됨
        }
    );

    // 이벤트 핸들링 정지
    Domain->Unsubscribe(CallbackId);
var domain = ez.buff.namespace_(
        "namespace-0001"
    ).buff_entry_model(
        "character-level"
    )

# 이벤트 핸들링 시작
var callback_id = domain.subscribe_model(func(value):
    # 값이 변화했을 때 호출됨
    # value에는 변경 후의 값이 전달됩니다
    pass
)

# 이벤트 핸들링 정지
domain.unsubscribe_model(callback_id)

listBuffEntryModels

버프 엔트리 모델 목록 조회

이 네임스페이스에 등록된 모든 버프 엔트리 모델을 조회합니다.
각 버프 엔트리 모델은 하나의 버프 효과를 정의합니다.
대상(모델의 스탯이나 액션의 파라미터), 적용 방법(Rate Add / Mul / Value Add), 우선순위,
그리고 선택적으로 버프가 활성화되는 이벤트 기간이 포함됩니다.

게임 UI에서 버프 목록을 표시하거나, 현재 설정된 버프를 확인할 때 사용합니다.

Request

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

Result

타입설명
itemsList<EzBuffEntryModel>버프 엔트리 모델 목록

구현 예제

    var domain = gs2.Buff.Namespace(
        namespaceName: "namespace-0001"
    );
    var items = await domain.BuffEntryModelsAsync(
    ).ToListAsync();
    var domain = gs2.Buff.Namespace(
        namespaceName: "namespace-0001"
    );
    var it = domain.BuffEntryModels(
    );
    List<EzBuffEntryModel> items = new List<EzBuffEntryModel>();
    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->Buff->Namespace(
        "namespace-0001" // namespaceName
    );
    const auto It = Domain->BuffEntryModels(
    );
    TArray<Gs2::UE5::Buff::Model::FEzBuffEntryModelPtr> Result;
    for (auto Item : *It)
    {
        if (Item.IsError())
        {
            return false;
        }
        Result.Add(Item.Current());
    }
값 변경 이벤트 핸들링
    var domain = gs2.Buff.Namespace(
        namespaceName: "namespace-0001"
    );

    // 이벤트 핸들링 시작
    var callbackId = domain.SubscribeBuffEntryModels(
        () => {
            // 리스트의 요소가 변화했을 때 호출됨
        }
    );

    // 이벤트 핸들링 정지
    domain.UnsubscribeBuffEntryModels(callbackId);
    var domain = gs2.Buff.Namespace(
        namespaceName: "namespace-0001"
    );

    // 이벤트 핸들링 시작
    var callbackId = domain.SubscribeBuffEntryModels(
        () => {
            // 리스트의 요소가 변화했을 때 호출됨
        }
    );

    // 이벤트 핸들링 정지
    domain.UnsubscribeBuffEntryModels(callbackId);
    const auto Domain = Gs2->Buff->Namespace(
        "namespace-0001" // namespaceName
    );

    // 이벤트 핸들링 시작
    const auto CallbackId = Domain->SubscribeBuffEntryModels(
        []() {
            // 리스트의 요소가 변화했을 때 호출됨
        }
    );

    // 이벤트 핸들링 정지
    Domain->UnsubscribeBuffEntryModels(CallbackId);

applyBuff

현재 플레이어에게 버프 적용

이 네임스페이스에 등록된 모든 버프 설정을 평가하여, 조건에 맞는 것을 플레이어에게 적용합니다.
예를 들어 “이벤트 중 경험치 2배”, “특정 아이템 소지 시 골드 드롭률 +10%“와 같은 버프를 설정할 수 있습니다.

버프의 적용 방법은 3가지가 있습니다:

  • Rate Add: 배율에 가산합니다(예: 기본 1.0 + 0.2 = 1.2배)
  • Mul: 현재 배율에 곱합니다(예: 배율 × 0.5)
  • Value Add: 배율 계산 후의 값에 고정값을 가산합니다

GS2-Schedule 이벤트에 연동된 버프는 해당 이벤트 개최 기간 동안만 유효합니다.
여러 버프는 우선순위 순서로 적용됩니다(값이 작을수록 우선순위가 높음).

Request

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

Result

타입설명
itemsList<EzBuffEntryModel>적용한 버프 목록
newContextStackstring버프의 적용 상태를 기록한 컨텍스트

구현 예제

    var domain = gs2.Buff.Namespace(
        namespaceName: "namespace-0001"
    ).Me(
        gameSession: GameSession
    ).Buff(
    );
    var result = await domain.ApplyBuffAsync(
    );
    var item = await result.ModelAsync();
    var domain = gs2.Buff.Namespace(
        namespaceName: "namespace-0001"
    ).Me(
        gameSession: GameSession
    ).Buff(
    );
    var future = domain.ApplyBuffFuture(
    );
    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->Buff->Namespace(
        "namespace-0001" // namespaceName
    )->Me(
        GameSession
    )->Buff(
    );
    const auto Future = Domain->ApplyBuff(
    );
    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.buff.namespace_(
        "namespace-0001"
    ).me(game_session).buff(
    )

var async_result = await domain.apply_buff(
)
if async_result.error != null:
    push_error(str(async_result.error))
    return

var result = async_result.result