GS2 Blog

Game Server Services(https://gs2.io/) の最新情報をお届けします

GS2-Buff で絶対値による補正を適用できるようになりました

はじめに

GS2-Buff はゲーム内のイベントの一環として、クエスト報酬を2倍にしたり、クエストに挑戦可能なスタミナ消費量を減らしたりする各種補正を各マイクロサービスのマスターデータを書き換えることなく設定できる仕組みです。

機能追加の背景

GS2-Buff ではユーザーデータの最大値にも補正が可能で、サブスクリプション契約するとスタミナの最大値が 30 →50 に補正されるような取り組みも見られます。

しかし、これまでの GS2-Buff では、絶対値による補正はできず、割合ベースの補正しかできませんでした。
つまり、これまでは 30→50 にしたければ、サブスクリプション契約中はスタミナの最大値に 167% の補正を適用するような設定をする必要がありました。

しかし、他の補正値との兼ね合いなどを考えるのも大変な作業かつ先ほどの例のように割合では表現しにくい補正値を適用したいこともあり、取り回しが難しい課題がありました。

追加された機能の詳細

これまでは、補正割合に対して加算する Add と補正割合に対して乗算する Mul が用意されていました。

Target: 
  Model: GS2-Exchange::RateModel
  Grn: grn:gs2:{region}:{ownerId}:exchange:namespace-0001:model:rate:rate-0001
  Field: acquireActions
Add 0.5
Priority: 0
Target: 
  Model: GS2-Exchange::RateModel
  Grn: grn:gs2:{region}:{ownerId}:exchange:namespace-0001:model:rate:rate-0001
  Field: acquireActions
Mul 1.5
Priority: 0

これはそれぞれ、GS2-Exchange の rate-0001 で定められた入手量を 1.5倍に補正する設定です。
Add, Mul の違いは複数の補正値を適用しようとした時の計算式です。

仮に、Add 0.5 で2回補正するケースと、Mul 1.5 が2回補正するケースそれぞれについて考えてみましょう。補正対象の値を x とした場合の計算式は以下となり、それぞれ x が 10 だった場合の結果を見てみましょう。

Add 0.5 を2回の場合

x(1.0 + 0.5 + 0.5)

x = 10
10(2) = 20

Mul 1.5 を2回の場合

x(1.0 * 1.5 * 1.5)

x = 10
10(2.25) = 22

このように結果に差が出ます。

ここまでは従来の GS2-Buff の話でした。
ここから絶対値が絡んできた場合を見てみます。

今回の更新で従来の「Add」は「Rate Add」にリネームされ、新しく「Value Add」が追加されました。
引き続き Add は利用可能で「Rate Add」と認識されますが、非推奨なパラメーター指定方法になります。

Target: 
  Model: GS2-Exchange::RateModel
  Grn: grn:gs2:{region}:{ownerId}:exchange:namespace-0001:model:rate:rate-0001
  Field: acquireActions
Priority: 0, Rate Add 0.5
Priority: 1, Value Add 5
Priority: 2, Rate Add 0.5
Priority: 4, Mul 1.5

ちょっと複雑ですが、上記の例について考えてみます。
これを GS2-Buff が認識する数式に展開すると以下のように解釈されます。

*1 * 1.5

つまり「Value Add」 が含まれる式では、Value Add が登場する前と後で式が分断し、一旦値を求めた後で絶対値を加算して、その後の補正結果を加算する形として展開されます。

少しややこしいですが、「Add Value」をうまく活用することでより柔軟な補正値を適用できるようになります。

*1:x(1.0 + 0.5) + 5) * (1.0 + 0.5

(C) Game Server Services, Inc.