#author("2023-03-21T22:35:33+09:00","default:post","post")
*名前を覚えさせる [#n78329d8]

ユーザの名前を覚えさせる方法の紹介。~

----
#contents
----
~

*インプットボックスを使う [#y27e996e]
さくらスクリプトの&color(blue){\![open,inputbox,ID]};を使い、ユーザに入力を促すやり方。~
前提として辞書のどこかにOnUserInputに対応する記述が必要です。テンプレートゴーストならたぶん既にあるはず。~

 *OnUserInput
 $(R0)【タブ】(R1)
 >(R0)を教えてもらった

参考リンク [[UKADOC-さくらスクリプトリスト:http://ssp.shillest.net/ukadoc/manual/list_sakura_script.html#_!_open,inputbox,ID,%E8%A1%A8%E7%A4%BA%E6%99%82%E9%96%93,%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88,%E3%82%AA%E3%83%97%E3%82%B7%E3%83%A7%E3%83%B3,..._]]

**基本形 [#j51df8cd]

 *名前を変える
 :名前は?\![open,inputbox,ユーザ名]
 
 *ユーザ名を教えてもらった
 :(ユーザ名)だね。

基本はこれで、変数「ユーザ名」に入力した内容が保存されます。~
さくらスクリプトのオプションで、予めボックスに文字列を入れておく事もできます。

 #インプットボックスに予め「ユーザ太郎」と入れておく方法
  \![open,inputbox,ユーザ名,,ユーザ太郎]


**読み方も教えてもらう [#ed278d20]
名前を入力した後に、続いて読み方も求める方法。

 *名前を変える
 :名前は?\![open,inputbox,ユーザ名]
 
 *ユーザ名を教えてもらった
 :(ユーザ名)だね。
 読み方も教えて欲しいな。全角のひらがなで頼む。
 \![open,inputbox,ユーザ読み仮名]
 
 *ユーザ読み仮名を教えてもらった
 :(ユーザ読み仮名)だね。ありがと。


**名前入力の空エンターはじき [#nd426369]
名前入力の時の空エンターを無理やり弾くものです。~
ちなみに、(ユーザ名)をバックアップすれば、前と一緒の名前の場合のメッセージを出せます。


-とことん簡単なの 
 面倒で入力せずエンター押すユーザーさんが対象。
 \![open,inputbox,ユーザ名,,ユーザーさん]
 ユーザ名、のあとに半角カンマを二個入れて「デフォルトで表示させたい名前」を入れる。
 入力BOXが開いたとき、すでにセットした文字列が表示されるようになる。
 もちろん「ユーザーさん」以外でもOK。


-簡単なの ~
空っぽかどうかを判定する[[is_empty>関数一覧#is_empty]]を使います。~
Mc158-1以降の[[バージョン>情報取得変数#ua674302]]の里々なら、satori_conf.txtの設定不要で使えます。~
 *名前覚えて
 $元のユーザ名【タブ】(ユーザ名)
 :なんていうお名前なんですか?\![open,inputbox,ユーザ名] 
 
 *OnUserInput
 >(R0)を空打ちされた【タブ】(is_empty(バイト値、1)(R1))
 $(R0)【タブ】(R1)
 >(R0)を教えてもらった
 
 *ユーザ名を教えてもらった
 >前と同じユーザ名を教えられた【タブ】(equal(バイト値、1)(ユーザ名)(バイト値、1)(元のユーザ名))
 :(ユーザ名)さんですね。覚えました。
 
 *前と同じユーザ名を教えられた
 :今までと同じ(ユーザ名)さんでいいんですね。
 
 *ユーザ名を空打ちされた
 $ユーザ名【タブ】(元のユーザ名)
 :内緒ですか。
 それでは今まで通り(ユーザ名)さんと呼びますね。
ユーザ名が未入力で初めて入力する場合などにおかしくなってしまうので、[[satori_conf>ファイル構成#j3e3ee70]]で初期名を入力しておくことを推奨。
-もっと複雑なの 
 *ユーザ名を教えてもらった
 $教えた回数=(教えた回数)+1
 >(教えた回数)回目の会話【タブ】(変数「ユーザ名」の存在)==1
 $ユーザ名【タブ】ゆーざ
 >(教えた回数)回目の会話
 
 *1回目の会話
 #ここが初回会話。
 
 *2回目の会話
 #2回目=3回目以降の場合これで。
 $教えた回数=1


#バックアップする場合------------------~
#まずこれを

 *名前を覚えて
 $旧ユーザ名【タブ】(ユーザ名)
 #以下の【タブ】の右側には何もありません。ユーザ名の削除をしています。
 $ユーザ名【タブ】
 \![open,inputbox,ユーザ名]
 
 *ユーザ名を教えてもらった
 $教えた回数=(教えた回数)+1
 >(教えた回数)回目の会話【タブ】(変数「ユーザ名」の存在)==1
 $ユーザ名【タブ】ゆーざ
 >同じお名前【タブ】(compare,(ユーザ名),(旧ユーザ名))==1
 >(教えた回数)回目の会話
 
 *1回目の会話
 #初回会話です。
 
 *2回目の会話
 #2回目=3回目以降の場合の例
 $教えた回数=1
 
 *同じお名前
 #例
 :(ユーザ名)さん・・・ってこの前もそう言ってなかった!?
 :オマエがいかにも忘れてそうだからだろ。

#この場合、ユーザ名、という項目を消しておいて下さい。


**インプットボックスにSSPの情報を入力しておく [#u9f9ee02]
 *OnNotifyUserInfo
 $SSPの呼ばれ方【タブ】(R0)
 $SSPの名前【タブ】(R1)
 
 *初回起動
 $名前【タブ】(when,(変数「SSPの呼ばれ方」の存在),(SSPの呼ばれ方),(when,(変数「SSPの名前」の存在),(SSPの名前),ユーザ))
 :名前を入力してくださいね。\![open,inputbox,名前入力,0,(名前)]
~
とするとまずSSP設定の「呼ばれ方」それがなければSSP設定の「名前」それもなければ「ユーザ」に設定する~
そして名前の入力では入力欄に最初からどれかが入ってる~

参考 [[SSPの設定を覚えさせる>SSPに入力されたユーザ情報を使う#qba6f1b9]]~


*TIPS・敬称の付け方 [#yece19ce]
ユーザ名に敬称を付けたい時、いくつか方法を紹介。

**敬称も含めて入力してもらう [#t141e483]
作る側も手間がかからず、ユーザ側の自由度も高い方法。~

 *名前を変える
 :名前は?\![open,inputbox,ユーザ名]
 めんどうだから「さん」とか「くん」とかも
 一緒に入れちゃってよ。
 
 *ユーザ名教えてもらった
 :これから(ユーザ名)って呼ぶよ。


**関数を使う・基本編 [#xb3937df]
ユーザ名を変更せずに敬称だけ変更したい場合、以下のような仕組みにしておくと(作者にとってもユーザにとっても)便利かもしれません。~
&color(#0000cc){なお変数「ユーザ敬称」に何も入ってないとおかしな事になるので、[[satori_conf.txt>ファイル構成#vf1d9e6e]]で初期値を設定しておくようにします。};
~
まず以下を辞書のどこかにコピペします。~
 @ユーザ呼称
 (ユーザ名)(ユーザ敬称)
「ユーザ呼称」の部分が実際にユーザを呼ぶ場合に(ユーザ呼称)などと書く言葉になります。いっそもっと短縮して「U」などとしてもいいかもしれません。~
~
敬称を選んでもらう部分は例えばこんな風になります。~
''敬称を覚える部分の例''
 *ユーザ敬称選択
 :なんて呼んだらいい?
 今は「(ユーザ呼称)」って呼んでるよ。
 
 _(ユーザ名)さん【タブ】ユーザ敬称選択_さん
 _(ユーザ名)くん【タブ】ユーザ敬称選択_くん
 _(ユーザ名)ちゃん【タブ】ユーザ敬称選択_ちゃん
 
 *ユーザ敬称選択_さん
 $ユーザ敬称【タブ】さん
 :今度からは(ユーザ呼称)って呼ぶよ。
 :さんづけかー。
 *ユーザ敬称選択_くん
 $ユーザ敬称【タブ】くん
 :今度からは(ユーザ呼称)って呼ぶよ。
 :くんづけかー。
 *ユーザ敬称選択_ちゃん
 $ユーザ敬称【タブ】ちゃん
 :今度からは(ユーザ呼称)って呼ぶよ。
 :チャーン!
~
''ユーザを呼ぶ場所の例''
 *
 :(ユーザ呼称)は今何してるの?
 :パソコンじゃないかな。
 :いまどきはタブレットかもよ!

「(ユーザ呼称)」は「ユーザ敬称選択」で選択された「ユーザ敬称」の中身と「ユーザ名」の中身を組み合わせた内容を返します。~
これによって「ユーザ名」「ユーザ敬称」を別々の変数として扱いつつも、「(ユーザ呼称)」とさえ書けば、自動的に二つを組み合わせて呼ぶ事ができます。


**関数を使う・呼び捨ての場合 [#ddd7289f]
単に呼び捨てにして欲しいというユーザさんの需要もあるでしょうし、好感度に応じてさん付けから呼び捨てに変化させるといった表現もあるでしょう。~
~
しかし実は先の例の「ユーザ呼称」そのままだと呼び捨てにはできません。~
単に「ユーザ敬称」を空にしてしまうと、「(ユーザ敬称)」部分がそのまま文字列として残ってしまうため、
 (ユーザ名)(ユーザ敬称)
は
 ユーザ(ユーザ敬称)
のようになってしまうからです。~
参考:[[中身のないからっぽ変数の扱い>変数#i4e87261]]~
~
そこでもう一工夫します。「ユーザ呼称」を以下のように変更してください。
 @ユーザ呼称
 (ユーザ名)(when,(ユーザ敬称)!=呼び捨て,(ユーザ敬称))

敬称選択は例えば次のようにします
 *ユーザ敬称選択
 :なんて呼んだらいい?
 今は「(ユーザ呼称)」って呼んでるよ。
 
 _(ユーザ名)さん【タブ】ユーザ敬称選択_さん
 _(ユーザ名)くん【タブ】ユーザ敬称選択_くん
 _(ユーザ名)ちゃん【タブ】ユーザ敬称選択_ちゃん
 _(ユーザ名)【タブ】ユーザ敬称選択_呼び捨て
 
 #~中略~
 
 *ユーザ敬称選択_呼び捨て
 $ユーザ敬称【タブ】呼び捨て
 :呼び捨てでいいの?
 おう(ユーザ呼称)やきそばパンかってこいや。
 :そこまで下に見ろとは言ってない!

これで、「ユーザ敬称」が呼び捨て以外の場合には今までどおり敬称がつきますが、呼び捨ての場合は「ユーザ名」単体で呼ばれることになります。

**関数を使う・もっといろいろな呼び方をさせる [#dc21e05f]
せっかくなのでもっと色んなパターンで呼べるようにしてしまいます。~
ssu.dllの関数「[[iflist>関数一覧#ifwhenlist]]」を使いますので、もし動かない場合は[[satori_confの設定>ファイル構成#q327057d]]を確認してみてください。
~
まずは「ユーザ呼称」を
 @ユーザ呼称
 (iflist(バイト値、1)(ユーザ敬称)==
     (バイト値、1)呼び捨て(バイト値、1)(ユーザ名)
     (バイト値、1)Mr.(バイト値、1)Mr.(ユーザ名)
     (バイト値、1)Ms.(バイト値、1)Ms.(ユーザ名)
     (バイト値、1)ご主人さま(バイト値、1)ご主人さま
     (バイト値、1)(ユーザ名)(ユーザ敬称)
 )
「(バイト値、1)」については見難いと思いますがそういうものだと思ってそのままコピペしてください。~
参考:[[バイト値>関数一覧#bytes]]、[[引数区切りについて>関数#b92d8132]]

''敬称を覚える部分の例''
 *ユーザ敬称選択
 :なんて呼んだらいい?
 今は「(ユーザ呼称)」って呼んでるよ。
 
 _(ユーザ名)さん【タブ】ユーザ敬称選択_さん
 _(ユーザ名)くん【タブ】ユーザ敬称選択_くん
 _(ユーザ名)ちゃん【タブ】ユーザ敬称選択_ちゃん
 _(ユーザ名)【タブ】ユーザ敬称選択_呼び捨て
 
 _Mr.(ユーザ名)【タブ】ユーザ敬称選択_Mr.
 _Ms.(ユーザ名)【タブ】ユーザ敬称選択_Ms.
 _ご主人さま【タブ】ユーザ敬称選択_ご主人さま
 
 #~中略~
 
 *ユーザ敬称選択_Mr.
 $ユーザ敬称【タブ】Mr.
 :Hey,(ユーザ呼称)!
 :トークが英語になったりはしないから安心してな。
 *ユーザ敬称選択_Ms.
 $ユーザ敬称【タブ】Ms.
 :Hey,(ユーザ呼称)!
 :What time is it now?
 *ユーザ敬称選択_ご主人さま
 $ユーザ敬称【タブ】ご主人さま
 :はいはい(ユーザ呼称)。
 :もっとやる気だそうよ。

これで(ユーザ呼称)とすると、敬称によっては
 Mr.ユーザ
のようにユーザ名の前に敬称部分が来たり、
 ご主人さま
のように、ユーザ名の情報は保持しつつもまったくユーザ名を無視した呼び方もできます(もはや敬称じゃないですが)。~
~
もしパターンを追加したい場合は「ユーザ呼称」の部分に
 @ユーザ呼称
 (iflist(バイト値、1)(ユーザ敬称)==
     (バイト値、1)同志(バイト値、1)同志(ユーザ名)
     (バイト値、1)呼び捨て(バイト値、1)(ユーザ名)
     #~略~
 )
の「同志」の行のように
 (バイト値、1)[ユーザ敬称の中身](バイト値、1)[出力パターン]
という書式で追加していきます。~
~
なお一番下の~
 (バイト値、1)(ユーザ名)(ユーザ敬称)
の行は一番下以外の場所にもっていくとおかしくなるので注意してください。~
~
ちなみに、括弧の展開数が多いので理論上は多少処理に時間がかかりますが、ユーザ呼称を百回も連呼するような怖いケースでなければ知覚できる程にはならないはずです。






*選択肢で覚えさせる [#f252a61a]
インプットボックスを使わず、選択肢でユーザ名を決定させる方法。

 *名前覚えろ
 :あなたはあたしの・・・・・
 
 _ユーザさん
 _お兄ちゃん
 _パパ
 
 *ユーザさん
 $ユーザ名=ユーザさん
 :えー!!(ユーザ名)?
 ホントにそれでいいのー?
 
 *お兄ちゃん
 $ユーザ名=お兄ちゃん
 :%username・・・・・・
 (5)宜しくねっ!!
 
 *パパ
 $ユーザ名=パパ
 :うん。あなたが、あたしの(ユーザ名)ね。

トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS