スクリプトメモ:自由にメッセージを変えられるお店
投稿者: mochi3kan 投稿日:2017/02/04 17:35
こんにちは。リニューアルでいろんなとこがちょこちょこ変わってますね。
そういえば2月で、私がRmakeでごにょごにょし始めてから1年になりました。
おかげさまでゲームや素材をいくつか公開できました。
プレーやコメント、評価くださった方々に感謝ですm(__)m
今年もいろいろ活動出来たらなあと思います。今後ともよろしくお願いします!
それはそうと、かねてより作りたかった「自由にメッセージを変えられるお店」を今更ながら作ってみました。
ある程度は、まとめて台詞を変更しやすくなっているのではないでしょうか。
既存の関数使えばいいじゃない、というかwikiのやついじればいいじゃない!
とかいう声が聞こえてきそうですが、それはそれとして、自分が使い勝手のいいものを作ってみたかったのです。
だって掲示板とか見ても、「店が作れません!」→解決したあとのスクリプトが載ってないんだもん……(´;ω;`)
自力で作れる方も多いとは思うのですが、もう少し初心者がとっつきやすい形のものがあってもいいと思うのよ。
何かご指摘がありましたらぜひぜひ。(ついでに、メッセージウィンドウを見やすくするテストも追加しました)
サンプルゲームはこちら↓
スクリプト目次
注意事項
・「装備しているアイテムを売る」項目はありません。個人的に必要なかったので。
・変数の名前は適当です。また、caseやendの後ろに書いている#case3や#if2などはただの目印です。
・アイテムのIDや値段設定はサンプルゲームのものをそのまま書いています。
・通常変数の配列を使った方がよくない? と思った方はきっとご自分で書き換えられるだけの力を持っているはず。
・開始スクリプトに書くべきお金の単位の設定などは省略しています。
・素材を買い取るお店のスクリプトもとりあえず載せてみました。二次元配列がようやく少し理解できた気がします。
参考
・物を売るスクリプト(質問掲示板) ←こちらのスクリプトを基本にしています。
・スクリプト/コツ/売ったり買ったりできるお店処理
・スクリプト/コツ/自由な位置における画像や文字列の使い方
・スクリプト/配列
・関数リファレンス
疑問・課題など
・作っている最中、売るところで使っているローカル変数dに、値が入っていない(nullになる)ときがあった。
半角英数のスペースも変数の名前("d ")として認識されている?そういうわけではないようです。
原因はよく分かりませんが今は無事動いているので無問題でしょう←
・商品の名前と一緒に値段が表示されると分かりやすいと思いますが力尽きました。
・素材を売るお店は何個かまとめ売りできると楽になると思いますが以下略。
・関係ないけどイベントエディタのスクリプト書くとこが狭くなってる……(´;ω;`)広くなったよやったね!
前置きが長くてすみません。以下、スクリプトです。
基本的に、書き換える必要があるのは###で挟まれた所です。
売り買い出来るお店
買うだけのお店
売るだけのお店
素材売却のお店
開始スクリプト
イベントスクリプト
ツイート
そういえば2月で、私がRmakeでごにょごにょし始めてから1年になりました。
おかげさまでゲームや素材をいくつか公開できました。
プレーやコメント、評価くださった方々に感謝ですm(__)m
今年もいろいろ活動出来たらなあと思います。今後ともよろしくお願いします!
それはそうと、かねてより作りたかった「自由にメッセージを変えられるお店」を今更ながら作ってみました。
ある程度は、まとめて台詞を変更しやすくなっているのではないでしょうか。
既存の関数使えばいいじゃない、というかwikiのやついじればいいじゃない!
とかいう声が聞こえてきそうですが、それはそれとして、自分が使い勝手のいいものを作ってみたかったのです。
だって掲示板とか見ても、「店が作れません!」→解決したあとのスクリプトが載ってないんだもん……(´;ω;`)
自力で作れる方も多いとは思うのですが、もう少し初心者がとっつきやすい形のものがあってもいいと思うのよ。
何かご指摘がありましたらぜひぜひ。(ついでに、メッセージウィンドウを見やすくするテストも追加しました)
サンプルゲームはこちら↓
スクリプト目次
注意事項
・「装備しているアイテムを売る」項目はありません。個人的に必要なかったので。
・変数の名前は適当です。また、caseやendの後ろに書いている#case3や#if2などはただの目印です。
・アイテムのIDや値段設定はサンプルゲームのものをそのまま書いています。
・通常変数の配列を使った方がよくない? と思った方はきっとご自分で書き換えられるだけの力を持っているはず。
・開始スクリプトに書くべきお金の単位の設定などは省略しています。
・素材を買い取るお店のスクリプトもとりあえず載せてみました。二次元配列がようやく少し理解できた気がします。
参考
・物を売るスクリプト(質問掲示板) ←こちらのスクリプトを基本にしています。
・スクリプト/コツ/売ったり買ったりできるお店処理
・スクリプト/コツ/自由な位置における画像や文字列の使い方
・スクリプト/配列
・関数リファレンス
疑問・課題など
・作っている最中、売るところで使っているローカル変数dに、値が入っていない(nullになる)ときがあった。
半角英数のスペースも変数の名前("d ")として認識されている?そういうわけではないようです。
原因はよく分かりませんが今は無事動いているので無問題でしょう←
・商品の名前と一緒に値段が表示されると分かりやすいと思いますが力尽きました。
・素材を売るお店は何個かまとめ売りできると楽になると思いますが以下略。
・関係ないけどイベントエディタのスクリプト書くとこが狭くなってる……(´;ω;`)広くなったよやったね!
前置きが長くてすみません。以下、スクリプトです。
基本的に、書き換える必要があるのは###で挟まれた所です。
売り買い出来るお店
#######所持金表示の設定####### g = getMoney() setVariable( "テキスト1", createText(350, 50, 160, 22) ) setText( getVariable("テキスト1"), "所持金 " , g , " " , getDenomination() ) ############################# #####店で買える商品リスト###### a = createArray() a[0] = createArray() a[0][0]= 774 #ID a[0][1]= 50 #値段 a[1] = createArray() a[1][0]= 20389 a[1][1]= 100 a[2] = createArray() a[2][0]= 20365 a[2][1]= 800 ############################ b = createArray() n = 0 while n < getArrayLength(a) z = getValueFromItemParam(getItemParamWithId(a[n][0]), getItemViewNameIndex()) pushArray(b, z) n = n+1 end pushArray(b,"やめる") i = 0 while i >=0 if i > 0 ##一回目と二回目で台詞を変えたいとき s = "店主\n「他に用はあるかい?」" i = 0 elsif i == 0 s = "店主\n「いらっしゃい。\n ここは道具屋だよ」" end case speakWithSelect(3, "買う", "売る", "やめる", s) ## when 0 #買う時のスクリプト ##########ここから########## while i == 0 c = speakWithSelectArray(b,"店主\n「どれを買うんだい?」") if c == getArrayLength(b)-1 #やめる i = i + 1 else i = 0 #####店で買えるアイテムのID##### case a[c] #アイテムID when 774 when 20389 when 20365 end ############################## case speakWithSelect(2,"買う","買わない", "店主\n「"+b[c]+"は"+ a[c][1] +"Gだよ。\n 買うかい?」" ) #case2 when 0 if g >= a[c][1] giveItem(a[c][0]) subMoney(a[c][1]) g = g - a[c][1] setText( getVariable("テキスト1"), "所持金 " , g , " " , getDenomination() ) speak("店主\n「ありがとう。\n はい、どうぞ」") else #g < a[c]、お金が足りない時 speak("店主\n「・・・お金はちゃんと持ってきてもらわないと困るなあ」") end when 1 speak("店主\n「あ、そうですか・・・」") #買うのをやめたとき end #case2 end #if end #while ##########ここまで########## when 1 #売るときのスクリプト ##########ここから########## loop = true while loop A = getItemIdArray() B = createArray() N = 0 while N < getArrayLength(A) Z = getValueFromItemParam(getItemParamWithId(A[N]), getItemViewNameIndex()) pushArray(B, Z) N = N + 1 end pushArray(B,"やめる") C = speakWithSelectArray(B,"店主\n「どれを売ってくれるんだい?」") if C == getArrayLength(B) - 1 #やめる loop = false i = i + 1 else i = 0 #####店で売れるアイテムのIDと値段##### case A[C] #アイテムID、d=売値 when 20350 d=250 when 1099 d=150 when 2974 d=100 when 774 d=25 when 20389 d=50 when 20365 d=00 end ################################## if d == 00 #if2、特定のアイテムを非売品にする speak("店主\n「うーん、\n 残念だけどこれは買い取れないなあ」") else case speakWithSelect(2,"売る","やめる", "店主\n「"+B[C]+"だったら"+ d +"Gで買い取るよ」" ) #case3 when 0 removeItemWithIndex(C) addMoney(d) g = g + d setText( getVariable("テキスト1"), "所持金 " , g , " " , getDenomination() ) speak("店主\n「ありがとう。\n 確かに買い取ったよ」") when 1 speak("店主\n「まだ売らないんだね」") #売るのをやめたとき end #case3 end #if2 end #if end #while ##########ここまで########## when 2 speak("店主\n「ありがとう、また来てね」") #やめる i = i - 10 end #case end #while deleteText(getVariable("テキスト1"))
買うだけのお店
#######所持金表示の設定####### g = getMoney() setVariable( "テキスト1", createText(350, 50, 160, 22) ) setText( getVariable("テキスト1"), "所持金 " , g , " " , getDenomination() ) ############################# ##########商品リスト########## a = createArray() a[0] = createArray() a[0][0]= 20350 #ID a[0][1]= 500 #値段 a[1] = createArray() a[1][0]= 1099 a[1][1]= 300 a[2] = createArray() a[2][0]= 2974 a[2][1]= 200 ############################# b=createArray() n=0 while n<getArrayLength(a) z = getValueFromItemParam(getItemParamWithId(a[n][0]), getItemViewNameIndex()) pushArray(b,z) n=n+1 end pushArray(b,"やめる") ##########店主の台詞1########## s1 = "おばさん\n「いらっしゃいませ、\n ここは装備品屋です」" s2 = "おばさん\n「どれを買いますか?」" s3 = "おばさん\n「ありがとうございました。\n またお越しくださいね」" s8 = "おばさん\n「そうですか、またお越しくださいね」" ############################# case speakWithSelect(2, "買う", "やめる", s1) #case1 when 0 loop = true while loop c=speakWithSelectArray(b, s2) if c==getArrayLength(b)-1 speak( s3 )#やめたとき loop = false else ##########店主の台詞2########## s4 = "おばさん\n「"+b[c]+"でしたら"+ a[c][1] +"Gになります。\n 買いますか?」" s5 = "おばさん\n「ありがとうございます。\n どうぞお受け取りください」" s6 = "おばさん\n「金が足りねえじゃねえか!\n 出直してこいや!」" s7 = "おばさん\n「買わねえのかよ!」" ############################# #####店で買えるアイテムのID##### case a[c] #アイテムID when 20350 when 1099 when 2974 end ############################## case speakWithSelect(2,"買う","買わない", s4) when 0 if g >= a[c][1] giveItem(a[c][0]) subMoney(a[c][1]) g = g - a[c][1] setText( getVariable("テキスト1"), "所持金 " , g , " " , getDenomination() ) speak( s5 ) else #g< a[c] speak( s6 ) end when 1 speak( s7 ) #買うのをやめたとき end #case end #if end #while when 1 speak( s8 ) #やめる end #case1 deleteText(getVariable("テキスト1"))
売るだけのお店
#######所持金表示の設定####### g = getMoney() setVariable( "テキスト1", createText(350, 50, 160, 22) ) setText( getVariable("テキスト1"), "所持金 " , g , " " , getDenomination() ) ############################# ##########店主の台詞1########## s1 = "おじさん\n「おう、らっしゃい!\n アイテムを売りに来たのか?」" s2 = "おじさん\n「どれを売ってくれるんだ?」" s3 = "おじさん\n「ありがとよ、\n また来てくれよな!」" s8 = "おじさん\n「おう、また来てくれよな!」" ############################# case speakWithSelect(2,"売る","やめる", s1) when 0 loop = true while loop a=getItemIdArray() b=createArray() n=0 while n<getArrayLength(a) z = getValueFromItemParam(getItemParamWithId(a[n]), getItemViewNameIndex() ) pushArray(b,z) n=n+1 end pushArray(b,"やめる") c=speakWithSelectArray(b, s2) if c==getArrayLength(b)-1 speak( s3 )#やめたとき loop = false else #####店で売れるアイテムのIDと値段##### case a[c] #アイテムID、d=売値 when 20350 d=250 when 1099 d=150 when 2974 d=100 when 774 d=25 when 20389 d=50 when 20365 d=00 end ################################## ##########店主の台詞2########## s4 = "おじさん\n「"+b[c]+"か・・・\n うちじゃちょっと買い取れねえな」" s5 = "おじさん\n「"+b[c]+"だったら"+d+"Gで買い取るぜ。\n どうする?」" s6 = "おじさん\n「おう、確かに買い取ったぜ」" s7 = "おじさん\n「そうか、まだ売らねえんだな。\n そういうこともあるわな」" ############################# if d == 0 ##特定のアイテムを非売品にする speak( s4 ) else ##if2 case speakWithSelect(2,"売る","やめる", s5 ) when 0 removeItemWithIndex(c) addMoney(d) g = g + d setText( getVariable("テキスト1"), "所持金 " , g , " " , getDenomination() ) speak( s6 ) when 1 speak( s7 ) #売るのをやめたとき end #case2 end ##if2 end #if end #while when 1 speak( s8 ) #やめる end #case1 deleteText(getVariable("テキスト1"))
素材売却のお店
開始スクリプト
#####素材の名前、最初の個数、売却価格設定##### setVariable("素材", createArray()) getVariable("素材")[0] = createArray() getVariable("素材")[0][0] = "赤水玉きのこ" #名前 getVariable("素材")[0][1] = 0 #個数 getVariable("素材")[0][2] = 100 #売値 getVariable("素材")[1] = createArray() getVariable("素材")[1][0] = "白かぶ" #名前 getVariable("素材")[1][1] = 0 #個数 getVariable("素材")[1][2] = 300 #売値 getVariable("素材")[2] = createArray() getVariable("素材")[2][0] = "ピンクの花" #名前 getVariable("素材")[2][1] = 0 #個数 getVariable("素材")[2][2] = 50 #売値 #こんな感じで増やしていけます #####素材を手に入れるときのスクリプトもついでに##### ##※こちらは開始スクリプトではなくそれぞれのイベント時に書きます if getVariable("素材")[2][1] >= 7 #持てる個数を制限したいときに書く speak("『ピンクの花』はこれ以上持てそうにない・・・") else speak("綺麗な花が咲いている。\n\n『ピンクの花』を手に入れた!") getVariable("素材")[2][1] = getVariable("素材")[2][1] + 1 end ###################################
イベントスクリプト
setSelectWindowRect(304, 128, 176, 240) #選択肢ウィンドウの幅を変えて見やすくする #######所持金表示の設定####### g = getMoney() setVariable( "テキスト1", createText(350, 50, 160, 22) ) setText( getVariable("テキスト1"), "所持金 " , g , " " , getDenomination() ) ############################## a = getVariable("素材") case speakWithSelect(2,"売る","やめる", "お嬢さん\n「はーい、\n こちらは素材売却専用カウンターでーす」") #case1 when 0 loop = true while loop b = createArray() n = 0 while n < getArrayLength(a) z = a[n][0]+ " : " + a[n][1] + " 個" pushArray(b, z) n = n+1 end pushArray(b,"やめる") c = speakWithSelectArray(b,"お嬢さん\n「何を売ってくれますかー?」") if c == getArrayLength(b)-1 #やめる #if1 speak("お嬢さん\n「また来てくださいねー!」") loop = false else case a[c] when a[0][0] when a[1][0] when a[2][0] end if a[c][1] == 0 #if2 #素材の個数が0個のとき speak("お嬢さん\n「持ってない物は買い取れませんよー。」") else case speakWithSelect(2,"売る","売らない", "お嬢さん\n「『"+a[c][0]+"』なら"+ a[c][2] +"Gで買い取りまーす」") when 0 speak("お嬢さん\n「ありがとうございまーす」") g = g + a[c][2] setText( getVariable("テキスト1"), "所持金 " , g , " " , getDenomination() ) addMoney(a[c][2]) a[c][1] = a[c][1] - 1 when 1 speak("お嬢さん\n「えー、売って下さいよぉ」") #売るのをやめたとき end #case end #if2 end #if1 end #while when 1 speak("お嬢さん\n「また来てくださいねー!」") end #case1 deleteText(getVariable("テキスト1")) setSelectWindowRect(324, 128, 156, 240) #選択肢ウィンドウデフォルト値
コメントする
コメントするには、ログインする必要があります。
親切なコメントが付いていたり
演出をしたい時に使いやすいですね
台詞の変えやすさと汎用性の高さを重視して書きました。
いろいろ削った分だいぶ簡素になりましたが
お店ごとに台詞を変えたい場合にいいのではないでしょうか。
あとはユーザ定義関数とか使えばもっと簡潔になるかもしれませんね。