GS2 Blog

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

限界突破(凸)機能が追加されました

はじめに

限界突破とは、同一キャラクターを合成したり、特定の進化素材を使用することでキャラクターを強化する仕組みを指します。
限界突破を行うと、キャラクターのレベル上限が引き上げられ、より強力に育成することが可能となります。

機能追加の背景

GS2-Experience はレベルキャップの引き上げはサポートしていましたが、レアリティごとに初期値が異なったりするケースの取り回しは必ずしも扱いやすい状態とは言えませんでした。

今回 GS2-Grade というマイクロサービスを追加することで、レベル上限の管理をより直感的に行えるようにしました。

追加された機能の詳細

GS2-Grade はグレードとレベルキャップの組み合わせのみを管理し、グレードの上昇方法についてはスコープ外としています。
初期グレードはプロパティIDの正規表現にマッチするかどうかで設定が可能となっています。

具体的な例を示しましょう。
以下のような条件でグレードが定義されていたと仮定します。

GradeEntryModel

グレード ゲーム上の表現 レベルキャップ
1 ☆☆★ 50
2 ☆★★ 60
3 ★★★ 70
4 ★★★+1 75
5 ★★★+2 80

キャラクターには以下の種類があるとします。

ItemModel

キャラクターID 初期グレード
N-0001 ☆☆★
N-0002 ☆☆★
N-0003 ☆☆★
R-0001 ☆★★
R-0002 ☆★★
R-0003 ☆★★
SR-0001 ★★★
SR-0002 ★★★
SR-0003 ★★★

この場合、初期グレード用の正規表現

DefaultGrade

グレード ItemModel に対して適用する正規表現
2 ^R-.*$
3 ^SR-.*$

となります。(いずれにも該当しない場合初期グレードは1になります)

このような情報を組み合わせた型として

GradeModel

名前
defaultGrades DefaultGrade[]
experienceModelId レベルキャップを反映するGS2-Experience の経験値モデルID
gradeEntries GradeEntryModel[]

このようなデータをマスターデータとして GS2-Grade に登録します。

GS2-Grade にはグレードの更新API(加算・減算・上書き)が用意されており、グレードの値を書き換えると同一プロパティIDの GS2-Experience のランクキャップが自動的に更新されます。

GS2-Enhance の更新内容

GS2-Grade をより効率的に扱うための機能追加が GS2-Enhance に対して行われました。
GS2-Enhance は素材となるアイテムやキャラクターを消費して経験値を得る仕組みでしたが、新しく限界突破(凸)をするための専用のインターフェースが追加されました。

GS2-Enhance がサポートする限界突破は同一キャラクターや同一属性を合成するようなケースで利用できるもので、素材を使用した限界突破であれば、GS2-Exchangeなどを使用して素材を消費してグレードを加算する交換レートを用意するだけで実装できます。

GS2-Enhance は素材が同種のキャラクターであることを検証した上でグレードを上昇させるトランザクションを発行する仕組みをより簡便に実装できるようにすることを目的に機能追加されています。

そのため、GS2-Grade の GradeEntryModel には素材が同種であることを判定するための正規表現を定義することが可能です。
グレードごとに条件が設定できますので、グレード1 の時は同属性であればどんなキャラクターでもいいが、グレード3以降は完全に同種のキャラクターでなければ限界突破できないような設定も可能です。

GS2-Enhance で利用する同種判定のための正規表現は以下の構造を持ちます。

GradeEntryModel

名前
propertyIdRegex 限界突破対象のプロパティIDから変数を取り出すための正規表現
gradeUpPropertyIdRegex グレードアップに利用可能な素材を判定するための正規表現

propertyIdRegex の入力例

grn:gs2:{region}:{ownerId}:inventory:namespace-0001:user:(.*):inventory:character:item:(.*):.*

gradeUpPropertyIdRegex の入力例

grn:gs2:{region}:{ownerId}:inventory:namespace-0001:user:$1:inventory:character:item:$2:.*

プロパティIDから、propertyIdRegex でユーザーIDとアイテム名をキャプチャし、gradeUpPropertyIdRegex の $1, $2 に値を反映して正規表現を作成しています。
この正規表現にマッチするプロパティIDのリソースのみが限界突破に利用できる素材となります。

(C) Game Server Services, Inc.