CommunicationModの使い方について

「ここをメソッドの中身に変更してください」の所をGlobalScope.SetValueに変えて、
CommunicationScoreの「実行するメソッドの引数」をInt32「4」にしてみました。
これでMOD側でGetValueすると「4」が取得できるのかなあと思いましたが何かエラーが出ます。(´・ω・`)

「MODに対して譜面側のスクリプトから特定の情報を送る」という部分は分かっているつもりなのですが、
恐らく根本的な使い方が違っていると思いますのでもう少し詳しい解説をお願いします…。
当方ScopeのEventとかもさっぱり分かんないレベルです…。
作成日時:2013-12-19 20:06:27 更新日時:2013-12-19 20:06:27

Re: CommunicationModの使い方について


[管理者]
KHCmaster
Mod側からGlobalScopeに向かってCommunicationFrameworkInitializeというイベントを発行します。そのときに、Modの名前とかModで使えるメソッド名のリストをArg(引数)として指定しています。(Logic.SeqのOut3)

Script側ではMod側からCommunicationFrameworkInitializeというイベントが発行されると、Modの情報を読み取って、対象のModかつ実行したいメソッドを持っていればそのメソッドを実行するようにします。$(modName)$(methodName)というイベントを使用することで特定のModの特定のメソッドを擬似的に呼ぶようにします。

Mod側ではあらかじめ$(modName)$(methodName)というイベントが発行されるのを待っているので、譜面スクリプト側のメソッド呼び出しを捕まえることができます。(Logic.SeqのOut2)

*Scope.InvokeEventがイベントを発行する側で、*Scope.HandleEventがイベントを待つ側です。
そのときのイベント引数がArgで渡されるようになっているので*Scope.SetValueとか*Scope.GetValueでデータをあらかじめ渡すなどの処理は不要です。

譜面スクリプト側でInt32.4を渡したいのであれば ArgにリンクしているString.HogeをInt32.4に変えるだけです。
Mod側ではArgはObjectで本当にInt32か分からないのでInt32.IsTypeで引数の型チェックを行ってから(Logic.If+Int32.IsType)、Logic.If+Int32.Equalなどを使って渡される数字によって処理を変えるというスクリプトが必要になります。
作成日時:2013-12-20 00:31:41 更新日時:2013-12-20 00:31:41
FlowScript講座をフォーラムを使って開講中です。

Re: CommunicationModの使い方について

とても丁寧な解説ありがとうございます。
なんとか自分の理解は合っていたようです。
Global.Scope.GetValueとSetValueの順序の問題のようでした。
IsTypeとLogicIfも追加して動作はOKです。
ありがとうございました。
作成日時:2013-12-20 20:24:03 更新日時:2013-12-20 20:24:03

Re: CommunicationModの使い方について

この件とは無関係かもしれないのですがお願いします。

添付の画像はCommunicationModの追加部分です。
Misc.EntryPoint内でScope.SetValueを行っているのですが、
PPD.EveryFrameでGetValueすると未定義?エラーが出ます。
Invokedから繋がずに直接Misc.EntryPointを繋ぐとエラーは出ません。
CommunicationScoreとModの接続はうまく行っているようです。

たぶん、先にGetValueが行われてしまう故のエラーな気がするのですが、どうでしょうか。
本当はもっと複雑なスクリプトだったんですが、原因を追求しているうちにこうなりました。
CommunicationScoreから渡ってきた数値をGlobalScopeに入れて他のスクリプトで使用したいのですが、良い方法があればご教授ください。
作成日時:2013-12-21 20:40:20 更新日時:2013-12-21 20:40:53

Re: CommunicationModの使い方について


[管理者]
KHCmaster
手元でプロジェクト作ってMod作成してスクリプト導入した譜面をテストしましたが、エラーはでないですね…

同じエラーが出るとすれば譜面のスクリプトにもCom(ry)Mod.fsmlを追加していると出ますね。
(メソッド呼び出しされないのでScopeにはaaaは定義されないです。)
譜面のスクリプトにCom(ry)Mod.fsmlは追加する必要はないです。

Mod作成時にはCom(ry)Score.fsmlを右クリックで無効化して作成し、譜面テスト時にはCom(ry)Mod.fsmlを無効化するといいと思います。
作成日時:2013-12-22 03:16:19 更新日時:2013-12-22 03:16:19
FlowScript講座をフォーラムを使って開講中です。

Re: CommunicationModの使い方について

お手数おかけします。

CommunicationMod/Scoreはそれぞれ別の譜面に入れています。
Mod側で逐一「MODを発行」してScore側の譜面で動作させています。

仰る通り、Score側だとエラーは出ないみたいです。気が付かずすみません。(;´Д`)
エラーが出るのはMod側の方でして、画像を添付します。
(Name=aaaのScopeが未定義のような感じ?)
もしかして、マスターの環境ではMod側を動作させてもエラーは出ないのですか?

当方の環境では、「MODを発行」してMOD化するとPPD.EveryFrame内のGetValueも正常に動作するみたいです。
エラーを無視して作成すれば問題無さそうですが、デバッグが面倒なことに。
良く分からなくなってきました…。
作成日時:2013-12-22 14:48:33 更新日時:2013-12-22 14:48:43

Re: CommunicationModの使い方について


[管理者]
KHCmaster
Mod側のみをデバッグ動作させるとエラーは出ますよ。
両方共にデバッグ動作で動作を確認するにはMod名を固定にすればいいです。(おなじプロジェクトに入れた場合)
つまり、Mod側のMod.CurrentノードがModとして発行されているときのみMod名の取得に意味があるので、そこをString.Value.XXXとか固定にしてやればいいです。
作成日時:2013-12-22 15:09:17 更新日時:2013-12-22 15:16:34
FlowScript講座をフォーラムを使って開講中です。

Re: CommunicationModの使い方について

何度もすみません…。

ご指示の通り?に変更してみましたが、同じエラーが出るようです。
なんか多分自分の理解がおかしいのだと思います。

しかしMOD化すれば問題ないのならこれでもいい気もしてきました…。
もう少しお付き合いいただければ。(TдT)
作成日時:2013-12-22 15:29:59 更新日時:2013-12-22 15:30:41

Re: CommunicationModの使い方について

お手数おかけしております。

原因は分からないのですが、なんかラインを繋ぎ直したりしてるうちに正常に動くようになりました。
ありがとうございました。
作成日時:2013-12-22 22:14:25 更新日時:2013-12-22 22:14:25