はじめに
GS2-StateMachine はステートマシンをサーバーサイドで管理し、クライアントから届くメッセージを元に状態遷移することで
チート行為に対する耐性をたかめつつ、自由度の高いスクリプティングを実現する機能を提供しています。
機能追加の背景
GS2-StateMachine が管理するステートマシンは GS2 State Language(GSL) を使用して定義します。
新しいステートに遷移した際にスクリプトを実行して、ステートマシンが持つ状態変数を書き換えることができます。
従来はこのスクリプトの指定には GS2-Script が管理するスクリプトのIDを指定することで定義していました。
しかし、GSLとスクリプトの実体が分離してしまい、見通しが悪くなってしまう状況が発生していました。
機能追加の詳細
StateMachine MainStateMachine {
Variables {
}
EntryPoint Task1;
Task Task1(int initCounter) {
Event StartLoop();
Event Error(string Reason);
Payload {
result = {
event="Pass",
params={},
updatedVariables=args.variables
}
}
}
PassTask Pass;
ErrorTask Error(string reason);
Transition Task1 handling Pass -> Pass;
}こちらの例のように Task 内の Payload セクションで直接 Lua スクリプトを記述できるようになりました。
例では Task1 に遷移した際に以下のスクリプトを実行します。
result = {
event="Pass",
params={},
updatedVariables=args.variables
}スクリプトを実行した結果、Pass というメッセージを自身のステートマシンへ発します。
Transition Task1 handling Pass -> Pass;
Task1 ステートにいる時に Pass というメッセージを受け取ると、Pass ステートに遷移します。
Pass ステートは PassTask なので、ステートマシンの終端を表すステートに遷移しステートマシンは起動直後に終了します。