伺的なフォーラム

伺か向けのフォーラム。自由に使ってください。ユーザアカウント登録なしで閲覧できます。

共有アカウント: 774user / 774user

ログインしていません。

#26 2017-02-20 04:44:05

774user
774user
登録日: 2015-11-16
投稿: 52

Re: 里々での開発相談

現象としては「追従スクリプトを実行後にネットワーク更新すると追従されなくなる」ということで良いのでしょうか。
これを前提として以下は記述しています。

ネットワーク更新後は、SHIORIやSAORIなどが再読込されます。
早い話が、ゴースト自体の再起動に近い(異なる部分もあります)と考えてください。
したがって、ネットワーク更新成功時にも追従スクリプトを実行させるとうまくいくかもしれません。

#この「追従スクリプト」は
#起動時のイベント(OnBoot、OnFirstBoot、OnGhostChangedなど)で
#実行されているものとします
@追従スクリプト
\1\![set,alignmenttodesktop,free]\![move,0,0,0,0,left.top,left.top]φ
\p[2]\![set,alignmenttodesktop,free]\![move,0,0,0,0,left.top,left.top]φ
\![set,sticky-window,0,1,2]

#ネットワーク更新成功時の処理を以下のように書き換えます
#\1側に改行が入るので、トークでは「\1\_l[0,0]」などで調整してください
*OnUpdateComplete
(追従スクリプト)
>ネットワーク更新(R0)

*ネットワーク更新changed
:更新に成功したよ。

オフライン

#27 2017-02-23 00:05:18

MA
メンバー
登録日: 2017-02-04
投稿: 13

Re: 里々での開発相談

>>26
どうなんでしょう、ネットワーク更新後ゴーストを再起動させる等しても追従しない状態が変わらないので、追従スクリプト自体は実行されてはいます。
追従スクリプトの内容と実行手順自体は同じの筈です。
今すぐにはじっくり解明できそうにないので、れしばの結果だけとりあえず載せさせていただきます。

ネットワーク更新元:全追従
  return: \1\![set,alignmenttodesktop,free]\![move,0,0,0,0,left.top,left.top]\![set,sticky-window,0,1,2]\n\0起動台詞\n\1\0\n\![bind,メニュー,,0]\n\![bind,メニューパーツ,,0]\n\1
status code : 200
--- Response ---
Value=\1\s[10]\p[2]\s[10]\p[3]\s[10]\1\![set,alignmenttodesktop,free]\![move,0,0,0,0,left.top,left.top]\![set,sticky-window,0,1,2]\n\0起動台詞\n\0\n\![bind,メニュー,,0]\n\![bind,メニューパーツ,,0]\n\1\e

ネットワーク更新先:一部未追従
  return: \1\![set,alignmenttodesktop,free]\![move,0,0,0,0,left.top,left.top]\![set,sticky-window,0,1,2]\n\0起動台詞\n\1\0\n\![bind,メニュー,,0]\n\![bind,メニューパーツ,,0]\n\1
status code : 200
--- Response ---
Value=\1\s[10]\1\![set,alignmenttodesktop,free]\![move,0,0,0,0,left.top,left.top]\![set,sticky-window,0,1,2]\n\0起動台詞\n\0\n\![bind,メニュー,,0]\n\![bind,メニューパーツ,,0]\n\1\e

編集者 MA (2017-02-23 00:06:32)

オフライン

#28 2017-02-23 02:42:08

774user
774user
登録日: 2015-11-16
投稿: 52

Re: 里々での開発相談

もしかしたら、スコープが指定されていないことが原因かもしれません。
「ネットワーク更新元」では「\1\s[10]\p[2]\s[10]\p[3]\s[10]」と全てのスコープにサーフェスが指定され、SSPがウインドウを生成しています。
それに対し、「ネットワーク更新先」では「\1\s[10]」のみで\p[2]以降のスコープが指定されていません。

透明な画像を用意して、\p[2]のサーフェスとして指定するとうまくいく可能性があります。
#26で示した@追従スクリプトの一部を「\p[2]\s[99]![set,alignmenttodesktop,free]\![move,0,0,0,0,left.top,left.top]」のようにサーフェス指定を追加した上で実行してみてください。
(サーフェス99はshell/masterフォルダにsurface99.pngなどの透明画像を置いてください)

オフライン

#29 2017-02-23 23:28:44

MA
メンバー
登録日: 2017-02-04
投稿: 13

Re: 里々での開発相談

>>28
無事解決できました。ありがとうございます。ネットワーク更新元では弄っているうちにp2のサーフェスをいつの間にか指定していたのかもしれません。
0,1以降のバルーンを使う際の注意点みたいですね。

オフライン

#30 2017-11-05 00:29:09

774user
774user
登録日: 2015-11-16
投稿: 52

Re: 里々での開発相談

里々にて、ゴーストを開発しています。
「ある時点」でのbindによる着せ替え情報(メガネを着けている、外している 猫耳を着けている、外している等)を記録しておいて、必要になった時にその情報を読み込んで着せ替えできるようにしたいです。
OnNotifyDressupInfoを使えば良いということは分かるのですが、具体的にどうすれば良いか分かりません
教えて頂けると助かります。

オフライン

#31 2017-11-06 18:00:54

ろすえん
メンバー
登録日: 2015-12-21
投稿: 13
ウェブサイト

Re: 里々での開発相談

以下の処理で、「着せ替え状態_【スコープ番号】_【カテゴリー名】_【パーツ名】」という変数が、パーツごとに0か1で記録されます。
0が無効、1が有効です。【タブ】はタブ文字です。
¥0側のカテゴリー名「顔面」のパーツ名「メガネ」だと、変数名は「着せ替え状態_0_顔面_メガネ」となります。

*OnNotifyDressupInfo
$着せ替え判定ループ処理カウンタ=(Rの数)-1
$B3【タブ】(バイト値、3)
$引数区切り追加【タブ】(B3)
>着せ替え判定ループ処理
#カテゴリー名やパーツ名にバイト値3が含まれる可能性がある場合は「B3」変数の部分を変えてください

*着せ替え判定ループ処理
>着せ替え判定ループ終了【タブ】(着せ替え判定ループ処理カウンタ)<0
$この変数は記録されません【タブ】(nop,(split(B3)(R(着せ替え判定ループ処理カウンタ))(B3)(バイト値、1)(B3)0(B3)1))
$着せ替え状態_(S0)_(S1)_(S2)【タブ】(S4)
$着せ替え判定ループ処理カウンタ=(着せ替え判定ループ処理カウンタ)-1
>着せ替え判定ループ処理

*着せ替え判定ループ終了
$引数区切り削除【タブ】(B3)
$着せ替え判定ループ処理カウンタ【タブ】
$B3【タブ】

上の処理に含まれていないパターン
1. メガネに該当するパーツが複数種類ある場合の判定
2. 着せ替えの状態を判定したいシェルが複数ある

◆1の場合

>メガネをかけている【タブ】(count,(着せ替え状態_0_顔面_赤ふちメガネ)(着せ替え状態_0_顔面_黒ふちメガネ)(着せ替え状態_0_顔面_ふちなしメガネ),1)

などと書くことで、変数に一つ以上1(=有効)があれば「メガネをかけている」へ飛びます。
・注意点
半角カンマを引数区切りとして用いているので、カテゴリー名かパーツ名の中に半角カンマが含まれているとバグります。
その場合(バイト値、1)など、その中に含まれていないであろう文字を代わりに使ってください。


◆2の場合
OnNotifyShellInfoのR0に現在のシェル名が入っているので、それを変数へ記録してください。
以下の例では、記録される変数の名前が「着せ替え状態_【現在のシェル名】_【スコープ番号】_【カテゴリー名】_【パーツ名】」となっています。

*OnNotifyShellInfo
$現在のシェル【タブ】(R0)

*OnNotifyDressupInfo
$着せ替え判定ループ処理カウンタ=(Rの数)-1
$B3【タブ】(バイト値、3)
$引数区切り追加【タブ】(B3)
>着せ替え判定ループ処理
#シェル名やカテゴリー名やパーツ名にバイト値3が含まれる可能性がある場合は「B3」変数の部分を変えてください

*着せ替え判定ループ処理
>着せ替え判定ループ終了【タブ】(着せ替え判定ループ処理カウンタ)<0
$この変数は記録されません【タブ】(nop,(split(B3)(R(着せ替え判定ループ処理カウンタ))(B3)(バイト値、1)(B3)0(B3)1))
$着せ替え状態_(現在のシェル)_(S0)_(S1)_(S2)【タブ】(S4)
$着せ替え判定ループ処理カウンタ=(着せ替え判定ループ処理カウンタ)-1
>着せ替え判定ループ処理

*着せ替え判定ループ終了
$引数区切り削除【タブ】(B3)
$着せ替え判定ループ処理カウンタ【タブ】
$B3【タブ】

オフライン

#32 2017-11-06 18:13:21

ろすえん
メンバー
登録日: 2015-12-21
投稿: 13
ウェブサイト

Re: 里々での開発相談

>>30
すみませんものすごく勘違いしていました。ある時点での状態を記録して、後でその状態に戻せるようにしたい、ということですね。
さくらスクリプトでこういうものがあるのですが(ukadoc)、それを活用すればできます。
具体例は今から書くので少しお待ちください。

オフライン

#33 2017-11-06 21:42:14

ろすえん
メンバー
登録日: 2015-12-21
投稿: 13
ウェブサイト

Re: 里々での開発相談

【タブ】はタブ文字です。
引数区切りや分割用の区切り文字がカテゴリー名やパーツ名に含まれる場合は、処理に別の引数区切りを使うなどの対処が必要です。
・初期状態からあるもの 「,」「,」「、」「、」「バイト値1」
・この処理で独自に使っているもの 「バイト値3」

・記録を複数持ったりそれに名前を付けてリスト保存したりしたい
・キャラクターのスコープ番号(\0、\1など)が変わる可能性がある(ソロモード時に\1のキャラクターが\0の位置に来るとか)
という場合はお知らせください。

*着せ替えメニュー
:\c\q[◆現在の着せ替えを記録する,現在の着せ替えを記録する]
\q[◆着せ替えを記録した状態に戻す,着せ替えを記録した状態に戻す]

\q[◆閉じる,script:\e]

*OnNotifyShellInfo
$現在のシェル【タブ】(R0)


*OnNotifyDressupInfo
$(現在のシェル)の着せ替え状態【タブ】(現在のシェル)
$着せ替え判定ループカウンタ=(Rの数)-1
$B3【タブ】(バイト値、3)
>着せ替え判定ループ.処理

*着せ替え判定ループ.処理
>着せ替え判定ループ.終了【タブ】(着せ替え判定ループカウンタ)<0
$この変数は記録されません【タブ】(nop,(vncall,split,R(着せ替え判定ループカウンタ),バイト値、1,着せ替え判定ループ.ゼロ,着せ替え判定ループ.イチ))
$(現在のシェル)の着せ替え状態【タブ】((現在のシェル)の着せ替え状態)(B3)(S0)(バイト値、1)(S1)(バイト値、1)(S2)(バイト値、1)(S4)
$着せ替え判定ループカウンタ=(着せ替え判定ループカウンタ)-1
>着せ替え判定ループ.処理

@着せ替え判定ループ.ゼロ
0
@着せ替え判定ループ.イチ
1

*着せ替え判定ループ.終了
$着せ替え判定ループカウンタ【タブ】
$B3【タブ】


*現在の着せ替えを記録する
$着せ替え状態の記録【タブ】((現在のシェル)の着せ替え状態)
:\_q現在の着せ替え状態を記録しましたφ。\_q\x
>着せ替えメニュー


*着せ替えを記録した状態に戻す
$B3【タブ】(バイト値、3)
$この変数は記録されません【タブ】(nop,(vncall,split,着せ替え状態の記録,B3))
>着せ替えを記録した状態に戻す.シェルが違う【タブ】(vncall,equal,現在のシェル,S0)==0
:\![quicksection,1](for,1,(calc,(Sの数)-1),1,(vncall,着せ替えを記録した状態に戻す.処理1,S(C0)))φ
変更が完了しましたφ。\![quicksection,0]\x
$B3【タブ】
>着せ替えメニュー

*着せ替えを記録した状態に戻す.シェルが違う
:\_q記録時のシェルと現在のシェルが異なりますφ。\_q\x
>着せ替えメニュー

@着せ替えを記録した状態に戻す.処理1
(call(バイト値、1)着せ替えを記録した状態に戻す.処理2(バイト値、1)(S(C0)))

@着せ替えを記録した状態に戻す.処理2
\(A0)\![bind,"(A1)","(A2)","(A3)"]

オフライン

#34 2017-11-09 01:09:44

774user
774user
登録日: 2015-11-16
投稿: 52

Re: 里々での開発相談

ありがとうございます。
少し理解に時間が掛かりましたが期待通り動きました。
ご丁寧にありがとうございました。

オフライン

Board footer