OnTranslateの言葉狩りメモ
2006.06.01 [ Edit ]
一つの語を、複数の候補の中の一つに変換する場合の、自分的注意事項メモ。
具体例:「はい。」を「ああ。」か「うん。」に変換。
*OnTranslate
$訳【タブ】(R0)
$訳【タブ】(replace,(訳),はい。,(はい訳)。)
(訳)
@はい訳
ああ
うん
こうやると、トーク始めに必ず「¥0¥s[0]¥1¥s[10]」が付いてしまい、目閉じ顔から始まるトークでも、一瞬目を開いてしまい不自然に。
なので、choiceあたりでやる方が良さそうです。
*OnTranslate
$訳【タブ】(R0)
$訳【タブ】(replace,(訳),はい。,(choice,ああ,うん)。)
(訳)
具体例:「はい。」を「ああ。」か「うん。」に変換。
*OnTranslate
$訳【タブ】(R0)
$訳【タブ】(replace,(訳),はい。,(はい訳)。)
(訳)
@はい訳
ああ
うん
こうやると、トーク始めに必ず「¥0¥s[0]¥1¥s[10]」が付いてしまい、目閉じ顔から始まるトークでも、一瞬目を開いてしまい不自然に。
なので、choiceあたりでやる方が良さそうです。
*OnTranslate
$訳【タブ】(R0)
$訳【タブ】(replace,(訳),はい。,(choice,ああ,うん)。)
(訳)
ユーザコミュ(空エンターとか)
2006.05.30 [ Edit ]
*OnCommunicate
$コミュ受信【タブ】(R1)
>ユーザコミュ空エンター【タブ】(変数「コミュ受信」の存在)==0
≫ユーザ「(R1)」【タブ】(R0)==user
≫(R0)「(R1)」
>COMMUNICATE該当なし
昨日の書き方じゃなくてこう書かないといけない気が。
該当なしトークをユーザ用とゴースト用分けるなら
*OnCommunicate
$コミュ受信【タブ】(R1)
>ユーザコミュ空エンター【タブ】(変数「コミュ受信」の存在)==0
>ユーザコミュ【タブ】(R0)==user
≫(R0)「(R1)」
>COMMUNICATE該当なし
*ユーザコミュ
≫ユーザ「(R1)」
>ユーザコミュ該当なし
*ユーザコミュ該当なし
:ごめんわからない。
*ユーザコミュ空エンター
:無言?
こんな感じかなぁ。
どっちにしろ、ユーザ用とどっちも用に同じ点数の語があれば、どっちも用の語が読まれてしまうことがあるのはなおらない。
既にどこかで解決済みの話なのかなぁ。
$コミュ受信【タブ】(R1)
>ユーザコミュ空エンター【タブ】(変数「コミュ受信」の存在)==0
≫ユーザ「(R1)」【タブ】(R0)==user
≫(R0)「(R1)」
>COMMUNICATE該当なし
昨日の書き方じゃなくてこう書かないといけない気が。
該当なしトークをユーザ用とゴースト用分けるなら
*OnCommunicate
$コミュ受信【タブ】(R1)
>ユーザコミュ空エンター【タブ】(変数「コミュ受信」の存在)==0
>ユーザコミュ【タブ】(R0)==user
≫(R0)「(R1)」
>COMMUNICATE該当なし
*ユーザコミュ
≫ユーザ「(R1)」
>ユーザコミュ該当なし
*ユーザコミュ該当なし
:ごめんわからない。
*ユーザコミュ空エンター
:無言?
こんな感じかなぁ。
どっちにしろ、ユーザ用とどっちも用に同じ点数の語があれば、どっちも用の語が読まれてしまうことがあるのはなおらない。
既にどこかで解決済みの話なのかなぁ。
空エンター対策
2006.05.29 [ Edit ]
>ユーザ名の空エンター
現行CMNで対策しているかどうかは忘れちゃいましたが、手元の新版では対策済。
教えてもらった名前を(ユーザ名)でなく(仮ユーザ名)に格納。デフォルトユーザ名を仮に「名無しさん」と設定しているとします。
¥![open,inputbox,仮ユーザ名]
で、変数「仮ユーザ名」が空なら、空エンター用トークへ飛ばし、入っていれば、「仮ユーザ名」の中身を「ユーザ名」へ格納。
*仮ユーザ名を教えてもらった
>ユーザ名無し【タブ】(変数「仮ユーザ名」の存在)==0
$ユーザ名【タブ】(仮ユーザ名)
:(ユーザ名)さんですね。
#(ユーザ名)には入力された語が入る。
*ユーザ名無し
$ユーザ名【タブ】(仮ユーザ名)
:ん……?
では、(ユーザ名)とお呼びしますよ?
#(ユーザ名)には「名無しさん」が入る。
#入力し直しを促すならここで。
デフォルトユーザ名を設定していない場合は、「仮ユーザ名」でなく、いきなり「ユーザ名」に格納しても良いですが、「仮ユーザ名」に格納した方が、再度名前変更する時に、前回と同じ名前を入力されても、「ん? 前と同じでいいんですね?」等と、少し気の効いた事を言わせることが出来ます。
*仮ユーザ名を教えてもらった
>ユーザ名無し【タブ】(変数「仮ユーザ名」の存在)==0
>ユーザ名変更無し【タブ】 (仮ユーザ名)==(ユーザ名)
$ユーザ名【タブ】(仮ユーザ名)
:(ユーザ名)さんですね。
*ユーザ名変更無し
:前と同じなんですが……。何がしたかったんですか?
ついでにユーザコミュの空エンター対策も。
「COMMUNICATE該当なし」の反応と同じで良い場合は必要ありませんが、空エンター専用のトークをさせたい場合は以下の記述をどこかに。
*OnCommunicate
$コミュ受信【タブ】(R1)
>ユーザコミュ空エンター【タブ】(変数「コミュ受信」の存在)==0
≫(R0)「(R1)」
≫ユーザ「(R1)」
>COMMUNICATE該当なし
*ユーザコミュ空エンター
:そんな無言で訴えかけられても……。
もちろん変数名「コミュ受信」やエントリ名「ユーザコミュ空エンター」はお好きな名前でOKです。
多分こんな感じでいけるんじゃないかなぁ。いけるといいなぁ(え?
CMNでは、一応、ゴーストからのコミュにもユーザコミュと同じ反応を返すようにできるはずなのですが、無限ループ対策と、相手ゴースト名が「ユーザ名」のままになるのを直すのが面倒なので、未実装。
現在は、話しかけるととんちんかんな返事をして一方的に打ち切ってしまいます。駄目すぎ。
気が向いたら新版ではなんとかしてみよう。
現行CMNで対策しているかどうかは忘れちゃいましたが、手元の新版では対策済。
教えてもらった名前を(ユーザ名)でなく(仮ユーザ名)に格納。デフォルトユーザ名を仮に「名無しさん」と設定しているとします。
¥![open,inputbox,仮ユーザ名]
で、変数「仮ユーザ名」が空なら、空エンター用トークへ飛ばし、入っていれば、「仮ユーザ名」の中身を「ユーザ名」へ格納。
*仮ユーザ名を教えてもらった
>ユーザ名無し【タブ】(変数「仮ユーザ名」の存在)==0
$ユーザ名【タブ】(仮ユーザ名)
:(ユーザ名)さんですね。
#(ユーザ名)には入力された語が入る。
*ユーザ名無し
$ユーザ名【タブ】(仮ユーザ名)
:ん……?
では、(ユーザ名)とお呼びしますよ?
#(ユーザ名)には「名無しさん」が入る。
#入力し直しを促すならここで。
デフォルトユーザ名を設定していない場合は、「仮ユーザ名」でなく、いきなり「ユーザ名」に格納しても良いですが、「仮ユーザ名」に格納した方が、再度名前変更する時に、前回と同じ名前を入力されても、「ん? 前と同じでいいんですね?」等と、少し気の効いた事を言わせることが出来ます。
*仮ユーザ名を教えてもらった
>ユーザ名無し【タブ】(変数「仮ユーザ名」の存在)==0
>ユーザ名変更無し【タブ】 (仮ユーザ名)==(ユーザ名)
$ユーザ名【タブ】(仮ユーザ名)
:(ユーザ名)さんですね。
*ユーザ名変更無し
:前と同じなんですが……。何がしたかったんですか?
ついでにユーザコミュの空エンター対策も。
「COMMUNICATE該当なし」の反応と同じで良い場合は必要ありませんが、空エンター専用のトークをさせたい場合は以下の記述をどこかに。
*OnCommunicate
$コミュ受信【タブ】(R1)
>ユーザコミュ空エンター【タブ】(変数「コミュ受信」の存在)==0
≫(R0)「(R1)」
≫ユーザ「(R1)」
>COMMUNICATE該当なし
*ユーザコミュ空エンター
:そんな無言で訴えかけられても……。
もちろん変数名「コミュ受信」やエントリ名「ユーザコミュ空エンター」はお好きな名前でOKです。
多分こんな感じでいけるんじゃないかなぁ。いけるといいなぁ(え?
CMNでは、一応、ゴーストからのコミュにもユーザコミュと同じ反応を返すようにできるはずなのですが、無限ループ対策と、相手ゴースト名が「ユーザ名」のままになるのを直すのが面倒なので、未実装。
現在は、話しかけるととんちんかんな返事をして一方的に打ち切ってしまいます。駄目すぎ。
気が向いたら新版ではなんとかしてみよう。
タイムを計る
2006.04.17 [ Edit ]
ある時点から別の時点までの経過秒数を計る方法。
ミニゲームなんかでクリア所要時間を計ったり。裏WLのコードブレイカーで使っています。
「satori_conf.txt」の「*初期化」に
$経過秒【タブ】0
を追加します。これをやりたくない場合(satori_conf.txtに初期値を書きたくない場合)の方法は追記に。
名前は「経過秒」じゃなくても何でも良いのですが。他と被らなければ何でも。
次に、どこかに
*OnSecondChange
$経過秒=(経過秒)+1
と記述します。これで毎秒計測されます。
次に、タイムを計り始めたいところで「経過秒」を0にセットします。例えばゲーム開始時に計り始める場合、
*ゲーム
:では。ゲーム開始。
$経過秒=0
こんな感じで。
で、計測終了時に、その時の「経過秒」を記録します。
*ゲームクリア
$クリア所要時間=(経過秒)
:ゲームクリア。
かかった時間は(クリア所要時間)秒です。
以上です。
追記。
satori_conf.txtに初期値を書きたくない場合。
*OnSecondChange
$経過秒【タブ】(if,(変数「経過秒」の存在)==1,(経過秒),0)
$経過秒【タブ】(calc,(経過秒)+1)
この一行を追加。
ミニゲームなんかでクリア所要時間を計ったり。裏WLのコードブレイカーで使っています。
「satori_conf.txt」の「*初期化」に
$経過秒【タブ】0
を追加します。これをやりたくない場合(satori_conf.txtに初期値を書きたくない場合)の方法は追記に。
名前は「経過秒」じゃなくても何でも良いのですが。他と被らなければ何でも。
次に、どこかに
*OnSecondChange
$経過秒=(経過秒)+1
と記述します。これで毎秒計測されます。
次に、タイムを計り始めたいところで「経過秒」を0にセットします。例えばゲーム開始時に計り始める場合、
*ゲーム
:では。ゲーム開始。
$経過秒=0
こんな感じで。
で、計測終了時に、その時の「経過秒」を記録します。
*ゲームクリア
$クリア所要時間=(経過秒)
:ゲームクリア。
かかった時間は(クリア所要時間)秒です。
以上です。
追記。
satori_conf.txtに初期値を書きたくない場合。
*OnSecondChange
$経過秒【タブ】(if,(変数「経過秒」の存在)==1,(経過秒),0)
$経過秒【タブ】(calc,(経過秒)+1)
この一行を追加。
複数音楽ファイルのD&D再生改
2006.04.15 [ Edit ]
先に書いたやり方だと、SAORIの他の処理が途中で入った場合動作しなくなってしまうので修正。
渡された複数ファイル中に音楽ファイル以外のファイルがあった場合、飛ばして次に行くように修正。
CMNもネトワク修正しました。
*OnFileDrop2
$曲数=(split,(R0),(sprintf,%c,1))
$曲数2=(曲数)−1
>プレイリスト作成
*プレイリスト作成
$(曲数2)曲目【タブ】(S(曲数2))
$曲数2=(曲数2)−1
>曲再生【タブ】(曲数2)<0
>プレイリスト作成
*曲再生
$曲番=(曲数)−1
$再生曲【タブ】((曲番)曲目)
>曲再生2【タブ】(compare_tail,(再生曲),.mp3)||(compare_tail,(再生曲),.MP3)||(compare_tail,(再生曲),.mid)||(compare_tail,(再生曲),.MID)||(compare_tail,(再生曲),.wma)||(compare_tail,(再生曲),.WMA)||(compare_tail,(再生曲),.wav)||(compare_tail,(再生曲),.WAV)||(compare_tail,(再生曲),.au)||(compare_tail,(再生曲),.AU)||(compare_tail,(再生曲),.ogg)||(compare_tail,(再生曲),.OGG)
>OnMAAPlayFinish
*曲再生2
(mciaudior,load,(再生曲))(mciaudior,play)
*OnMAAPlayFinish
$曲数=(曲数)−1
>曲再生【タブ】0<(曲数)
*OnSatoriClose
(mciaudior,stop)
もどこかに書くのを忘れない。
渡された複数ファイル中に音楽ファイル以外のファイルがあった場合、飛ばして次に行くように修正。
CMNもネトワク修正しました。
*OnFileDrop2
$曲数=(split,(R0),(sprintf,%c,1))
$曲数2=(曲数)−1
>プレイリスト作成
*プレイリスト作成
$(曲数2)曲目【タブ】(S(曲数2))
$曲数2=(曲数2)−1
>曲再生【タブ】(曲数2)<0
>プレイリスト作成
*曲再生
$曲番=(曲数)−1
$再生曲【タブ】((曲番)曲目)
>曲再生2【タブ】(compare_tail,(再生曲),.mp3)||(compare_tail,(再生曲),.MP3)||(compare_tail,(再生曲),.mid)||(compare_tail,(再生曲),.MID)||(compare_tail,(再生曲),.wma)||(compare_tail,(再生曲),.WMA)||(compare_tail,(再生曲),.wav)||(compare_tail,(再生曲),.WAV)||(compare_tail,(再生曲),.au)||(compare_tail,(再生曲),.AU)||(compare_tail,(再生曲),.ogg)||(compare_tail,(再生曲),.OGG)
>OnMAAPlayFinish
*曲再生2
(mciaudior,load,(再生曲))(mciaudior,play)
*OnMAAPlayFinish
$曲数=(曲数)−1
>曲再生【タブ】0<(曲数)
*OnSatoriClose
(mciaudior,stop)
もどこかに書くのを忘れない。
渡されたファイル名のみを取得
2006.04.15 [ Edit ]
例えば「C:¥Documents and Settings¥Owner¥デスクトップ¥AAA.png」を「AAA.png」に。
(S(han2zen,(calc,(split,(R0),¥)−1))
(S(han2zen,(calc,(split,(R0),¥)−1))
複数音楽ファイルのD&D再生
2006.04.15 [ Edit ]
音楽ファイルをD&Dで再生する方法。複数ファイルにも対応。
もっとマシな書き方があるんじゃないかと思いますが、とりあえずは動く。
SAORI「MCIAudioR」と「ssu」を使用します。
*OnFileDrop2
>音ファイル読み込み【タブ】(compare_tail,(R0),.mp3)||(compare_tail,(R0),.MP3)||(compare_tail,(R0),.mid)||(compare_tail,(R0),.MID)||(compare_tail,(R0),.wma)||(compare_tail,(R0),.WMA)||(compare_tail,(R0),.wav)||(compare_tail,(R0),.WAV)||(compare_tail,(R0),.au)||(compare_tail,(R0),.AU)||(compare_tail,(R0),.ogg)||(compare_tail,(R0),.OGG)
*音ファイル読み込み
$曲数=(split,(R0),(sprintf,%c,1))
>曲再生
*曲再生
$曲番=(曲数)−1
(mciaudior,load,(S(曲番)))(mciaudior,play)
*OnMAAPlayFinish
$曲数=(曲数)−1
>曲再生【タブ】0<(曲数)
以上です。停止は
(mciaudior,stop)
をメニューなりどこなりに。
追記。
*OnSatoriClose
(mciaudior,stop)
これも書いておかないと、切り替え時等に曲が止まりません。忘れてました。
もっとマシな書き方があるんじゃないかと思いますが、とりあえずは動く。
SAORI「MCIAudioR」と「ssu」を使用します。
*OnFileDrop2
>音ファイル読み込み【タブ】(compare_tail,(R0),.mp3)||(compare_tail,(R0),.MP3)||(compare_tail,(R0),.mid)||(compare_tail,(R0),.MID)||(compare_tail,(R0),.wma)||(compare_tail,(R0),.WMA)||(compare_tail,(R0),.wav)||(compare_tail,(R0),.WAV)||(compare_tail,(R0),.au)||(compare_tail,(R0),.AU)||(compare_tail,(R0),.ogg)||(compare_tail,(R0),.OGG)
*音ファイル読み込み
$曲数=(split,(R0),(sprintf,%c,1))
>曲再生
*曲再生
$曲番=(曲数)−1
(mciaudior,load,(S(曲番)))(mciaudior,play)
*OnMAAPlayFinish
$曲数=(曲数)−1
>曲再生【タブ】0<(曲数)
以上です。停止は
(mciaudior,stop)
をメニューなりどこなりに。
追記。
*OnSatoriClose
(mciaudior,stop)
これも書いておかないと、切り替え時等に曲が止まりません。忘れてました。





