はじめに
GS2-Exchange はゲーム内のリソースの交換処理を実装するためのマイクロサービスです。
GS2-Exchange はコスト上昇型交換という機能を持っており、これは名前の通り交換を実行するたびに交換に必要なコストが増えていきます。
具体的にはスタミナを課金通貨を使用して回復する仕様があった時に、毎日最初の回復は課金通貨10個で実行できますが、2回目は20個必要になるような仕様を実現できます。
さらに、この上昇量は線形などの単純なものであれば特にコードの記述なく実装できるようになっていますが、より複雑な計算に基づいてコストの上昇量を決定したい場合には GS2-Script を使ってより動的に定義することが可能です。
機能追加の背景
コストの計算を GS2-Script で実行する場合、戻り値でコストの値を直接応答しています。そして、その型は 64bit 整数値 となっています。
消費するリソースが GS2-Inventory の BigItem のような 64bit 整数値を超えるリソースで、消費量も 64bit 整数値 を超えるような値を指定したい時にスクリプトを使って消費量を決めることができませんでした。
追加された機能の詳細
戻り値に従来使用してきた消費量を応答する cost とは別に、logCost を指定できるようになりました。
コスト計算スクリプトを使用する場合はこの2つの応答値のうちいずれかを埋める必要があります。
logCost を指定する場合は LogCost 型のテーブルを応答することになります。
LogCost 型は以下のフォーマットを持ちます。
名前 | 型 | 必須 | 値の制限 | 説明 |
base | double | ✓ | 2 ~ 10 | 底 |
adds | List |
✓ | 1 ~ 100 items | 加算する対数のリスト |
subs | List |
~ 100 items | 減算する対数のリスト |
これらの対数の底と値を応答することで、スクリプトの実行結果を受け取ったサーバーサイドで十分な精度を持つ BigInteger でコストを計算します。
このような仕様になっている背景には GS2-Script で使用する Lua では BigInteger を扱う有効な方法がデフォルトでは備わっていないためです。