経験値制LvUPでメンバー可変のときがわかりません(自分でも意味分かんない)(質問掲示板)
投稿: rdjk5242
投稿:2012/02/20 18:12:20(最新:2012/02/23 14:01:23)
冒険に役立つスクリプト
ここを読んで、経験値制LvUPを作ろうと思っています。
でもここに載っているのは、最初からの固定メンバーのLvUPです。
メンバーをところどころ変えてプレイするゲームにして、
敵キャラクターはIDごとに経験値を決める感じで、
メンバーは一人一人個別にLvUPして、
誰が倒したかでその人にだけ経験値が入る・・・・・
例AがXを倒した。AはX[0]だけ経験値を手に入れて、Bは手に入らなかった。
みたいな感じで。
色々書きましたが・・・・箇条書きでまとめると↓
こんなことできるんですか?
できたらよければ教えて下さい。
なお配列の知識はほぼないです。
よろしくお願いします。
ツイート
ここを読んで、経験値制LvUPを作ろうと思っています。
でもここに載っているのは、最初からの固定メンバーのLvUPです。
メンバーをところどころ変えてプレイするゲームにして、
敵キャラクターはIDごとに経験値を決める感じで、
メンバーは一人一人個別にLvUPして、
誰が倒したかでその人にだけ経験値が入る・・・・・
例AがXを倒した。AはX[0]だけ経験値を手に入れて、Bは手に入らなかった。
みたいな感じで。
色々書きましたが・・・・箇条書きでまとめると↓
- 個別式経験値制LvUP
- 敵[A]はいつも経験値X
- パーティーメンバーは時々変わる
こんなことできるんですか?
できたらよければ教えて下さい。
なお配列の知識はほぼないです。
よろしくお願いします。
コメントする
コメントするには、ログインする必要があります。
コメント一覧
自分で試してみたのですが、敵を倒したらフリーズしてしまいました。
特にエラーなどは表示されてないです。
どこがいけないんでしょうか?
特にエラーなどは表示されてないです。
どこがいけないんでしょうか?
#配列の設定 setVariable("Exp",createArray()) setVariable("総合Exp",createArray()) setVariable("Next",createArray()) setVariable("キャラID",createArray()) getVariable("キャラID")[0]="playerCharacter" getVariable("キャラID")[1]=8677 getVariable("キャラID")[2]=8678 getVariable("キャラID")[3]=8730 getVariable("キャラID")[4]=9163 getVariable("キャラID")[5]=2613 #配列の初期化 i=0 while i<getArrayLength(getVariable("キャラID")) getVariable("Exp")[i]=0 getVariable("総合Exp")[i]=0 getVariable("Next")[i]=100 i=i+1 end #敵キャラクターのidごとの経験値の設定 def enemy(id) case id when 8677 return 40 when 8678 return 50 when 2613 return 60 end end #経験値&Lvupの計算 def exp() i=0 a=0 while a<getArrayLength(getVariable("キャラID")) #getVariable("キャラID"))の配列数分繰り返す #getVariable("キャラID")がパーティなら if isPartyMember(getVariable("キャラID")[i]) killCounts=getKillCountPartyMember(getVariable("キャラID")[i] ) #経験値の整理 pt=0 b=0 while i < getArrayLength(killCounts) pt=pt+enemy(killCounts[i][0])*killCounts[i][1] b=b+1 end if 0<getPartyMemberHP(getVariable("キャラID")[i] ) #経験値の計算↓ getVariable("Exp")[i]=getVariable("Exp")[i]+pt getVariable("総合Exp")[i]=getVariable("総合Exp")[i]+pt speak ("経験値を",getVariable("キャラID"),"p手に入れた!") #LvUPの計算 if getVariable("Next")[i] <= getVariable("Exp")[i] levelUpPartyMember( getVariable("キャラID")[i] ) speak("LvUP!") speak(getValueFromCharacterParam( getPartyMemberParam( getVariable("キャラID")[i] ), getCharacterViewNameIndex() ), "が", getLevelPartyMember(getVariable("キャラID")[i] ), "Lvになった!") getVariable("Exp")[i]=getVariable("Exp")[i]-getVariable("Next")[i] getVariable("Next")[i]=getVariable("Next")[i]+5 end end a=a+1 i=i+1 end end end setCustomParamMenuEnable(true) setCustomParamMenuName("経験値") def onShowCustomParameter() speakFullScreen(true, "現在のステータス\n\n",getValueFromCharacterParam( getPartyMemberParam( getVariable("キャラID")[0] ), getCharacterViewNameIndex() )," ",getLevel(),"Lv Next ", (getVariable("Next")[0]-getVariable("Exp")[0]),"\n", getValueFromCharacterParam( getPartyMemberParam( getVariable("キャラID")[3] ), getCharacterViewNameIndex() )," ",getLevel(),"Lv Next ", (getVariable("Next")[3]-getVariable("Exp")[3]),"\n", getValueFromCharacterParam( getPartyMemberParam( getVariable("キャラID")[4] ), getCharacterViewNameIndex() )," ",getLevel(),"Lv Next ", (getVariable("Next")[4]-getVariable("Exp")[4])) end drawCustomParam() addPartyMember(getVariable("キャラID")[3]) addPartyMember(getVariable("キャラID")[4])
1)
その通りです。
2)
getValueFromCharacterParam関数でステータスの取得ができます。
この関数の第1引数に必要な
ステータス配列を取得する関数が
getPartyMemberParam関数です。
そして、第2引数は
ステータス配列からどのステータスを取得するか、ですが
この引数の内容は、あらかじめ決められている関数を指定します。
今回の場合は名前を取得するので
「getCharacterNameIndex()」または
「getCharacterViewNameIndex()」となります。
以上をまとめると、次のようなスクリプトになります。
補足)
・変数"PT"でエラーが出ると思います(おそらく"pt")
・enemy関数内の敵キャラクターIDは
結局、配列変数を使用しない?
・途中、charaIDとgetVariable("キャラID")[i]が混在しているのが
分かりにくく、もったいない。
charaIDに代入したのでしたらcharaIDを使用すれば良いですし、
getVariable("キャラID")[i]を使用するならcharaIDは必要ないです。
・最後の"a"と"i"への数値代入は、もう関数から抜けるだけですから
代入をしている意味がないです。
その通りです。
2)
getValueFromCharacterParam関数でステータスの取得ができます。
この関数の第1引数に必要な
ステータス配列を取得する関数が
getPartyMemberParam関数です。
そして、第2引数は
ステータス配列からどのステータスを取得するか、ですが
この引数の内容は、あらかじめ決められている関数を指定します。
今回の場合は名前を取得するので
「getCharacterNameIndex()」または
「getCharacterViewNameIndex()」となります。
以上をまとめると、次のようなスクリプトになります。
speak(getValueFromCharacterParam( getPartyMemberParam( getVariable("キャラID")[i] ), getCharacterViewNameIndex() ), "が", getLevelPartyMember( getVariable("キャラID")[i] ), "Lvになった!")
補足)
・変数"PT"でエラーが出ると思います(おそらく"pt")
・enemy関数内の敵キャラクターIDは
結局、配列変数を使用しない?
・途中、charaIDとgetVariable("キャラID")[i]が混在しているのが
分かりにくく、もったいない。
charaIDに代入したのでしたらcharaIDを使用すれば良いですし、
getVariable("キャラID")[i]を使用するならcharaIDは必要ないです。
・最後の"a"と"i"への数値代入は、もう関数から抜けるだけですから
代入をしている意味がないです。
foodmakesさんの記事、すごくわかりやすいですね。
敵はcoseでまとめた方がやりやすいのかな?
今までのを全部まとめてみました。
ふぅ・・・なんだか長くてよくわからなくなってきた・・・
これでちゃんと作動しますか?
今この段階でわからないことはあと2つです。
1、getVariable("exp")とgetVariable("総合exp")はなんで分けるか
2、スクリプトの途中であった????の部分(LVが上がったキャラの名前)
前者は、自分なりにはメニューなどで
「獲得経験値=総合exp
次のLvまであと=Next」
のようにするためだと思っています。
後者は、関数リファレンスで調べたのですが、だいぶ省略してあるので
よくわからないのです。
長文すいません、お願いします。
敵はcoseでまとめた方がやりやすいのかな?
今までのを全部まとめてみました。
#配列の設定 setVariable("Exp",createArray()) setVariable("総合Exp",createArray()) setVariable("Next",createArray()) setVariable("キャラID",createArray()) getVariable("キャラID")[0]="playerCharacter" getVariable("キャラID")[1]=12 getVariable("キャラID")[2]=28 getVariable("キャラID")[3]=29 #配列の初期化 i=0 while i<getArrayLength(getVariable("キャラID")) getVariable("Exp")[i]=0 getVariable("総合Exp")[i]=0 getVariable("Next")[i]=100 i=i+1 end #敵キャラクターのidごとの経験値の設定 def enemy(id) case id when 29 return 10 when 14 return 20 when 56 return 30 end end #id(29,14,56)=経験値(10,20,30) #経験値&Lvupの計算 def exp() i=0 a=0 while a<getArrayLength(getVariable("キャラID")) #getVariable("キャラID"))の配列数分繰り返す #getVariable("キャラID")がパーティなら if isPartyMember(getVariable("キャラID")[i]) charaID=getVariable("キャラID")[i] killcounts=getKillCountPartyMember(charaID) #経験値の整理 pt=0 b=0 while i < getArrayLength(killCounts) pt=pt+enemy(killCounts[i][0])*killCounts[i][1] b=b+1 end #(charaID)が生きていれば if 0<getPartyMemberHP(charaID) #経験値の計算↓ getVariable("Exp")[i]=getVariable("Exp")[i]+PT getVariable("総合Exp")[i]=getVariable("総合Exp")[i]+pt speak ("経験値を",getVariable("キャラID"),pt手に入れた!) #LvUPの計算 if getVariable("Next")[i] <= getVariable("Exp")[i] levelUpPartyMember( getVariable("キャラID")[i] ) speak("LvUP!") speak(?????,"が",getLevelPartyMember(charaID),"Lvになった!") getVariable("Exp")[i]=getVariable("Exp")[i]-getVariable("Next")[i] getVariable("Next")[i]=getVariable("Next")[i]+5 end end a=a+1 i=i+1 end a=0 i=0 end
ふぅ・・・なんだか長くてよくわからなくなってきた・・・
これでちゃんと作動しますか?
今この段階でわからないことはあと2つです。
1、getVariable("exp")とgetVariable("総合exp")はなんで分けるか
2、スクリプトの途中であった????の部分(LVが上がったキャラの名前)
前者は、自分なりにはメニューなどで
「獲得経験値=総合exp
次のLvまであと=Next」
のようにするためだと思っています。
後者は、関数リファレンスで調べたのですが、だいぶ省略してあるので
よくわからないのです。
長文すいません、お願いします。
退会したユーザー(投稿日:2012/02/21 22:50,
履歴)
ありがとうございます。
倒した人だけに経験値が入るようにするには、getKillCountPartyMember関数を使うんですよね。
キャラクターの[3,4,5]が敵キャラだとして、
にして、getVariable("キャラID")[3~5]の数値を決めておいて、
こんな感じですか?
倒した人だけに経験値が入るようにするには、getKillCountPartyMember関数を使うんですよね。
キャラクターの[3,4,5]が敵キャラだとして、
#開始スクリプト setVariable("もらえるP",createArray()) getVariable("もらえるP")[3]=10 getVariable("もらえるP")[4]=20 getVariable("もらえるP")[5]=30
にして、getVariable("キャラID")[3~5]の数値を決めておいて、
#exp()の中 #↑省略 if 0<getPartyMemberHP( getVariable("キャラID")[i] ) a=getKillCountPartyMember(getVariable("キャラID")[i]) getVariable("Exp")[i]=getVariable("Exp")[i]+a getVariable("Exp")[i]=getVariable("Exp")[i]+a getVariable("総合Exp")[i]=getVariable("総合Exp")[i]+a end
こんな感じですか?
getVariable("キャラID")[i]がそのまま使えるんですね。
次に経験値の獲得なのですが、
こうしたときに、
こういう風にあらかじめ決めておかなくても大丈夫なんですか?
次に経験値の獲得なのですが、
setVariable("Exp",createArray()) setVariable("総合Exp",createArray()) setVariable("Next",createArray()) i=0 while i<4 getVariable("Exp")[i]=0 getVariable("総合Exp")[i]=0 getVariable("Next")[i]=100 i=i+1 end def exp() a=0 while a<getArrayLength(getVariable("キャラID")) if isPartyMember(getVariable("キャラID")[i]) if 0<getPartyMemberHP( getVariable("キャラID")[i] ) getVariable("Exp")[i]=getVariable("Exp")[i]+PT getVariable("総合Exp")[i]=getVariable("総合Exp")[i]+PT if getVariable("Next")[i] <= getVariable("Exp")[i] levelUpPartyMember( getVariable("キャラID")[i] ) getVariable("Exp")[i]=getVariable("Exp")[i]-getVariable("Next")[i] getVariable("Next")[i]=getVariable("Next")[i]+20 end end end end a=a+1
こうしたときに、
if getVariable("キャラID")[i]==getVariable("キャラID")[0] getVariable("Exp")[i]=getVariable("Exp")[0] getVariable("総合Exp")[i]=getVariable("総合Exp")[0] getVariable("Next")[i]=getVariable("Next")[0] end
こういう風にあらかじめ決めておかなくても大丈夫なんですか?
そうですね。
あとは、折角
配列の変数を準備したのですから、
その配列に格納しているデータを取得して
判定するようにしてみましょう。
あとは、折角
配列の変数を準備したのですから、
その配列に格納しているデータを取得して
判定するようにしてみましょう。
def keisan() i = 0 #カウンターの準備 #配列の長さを取得 ilen = getArrayLength(getVariable("キャラID")) while i < ilen #配列の長さになるまで繰り返し #配列のカウンター数番目のIDを取得して判定する if isPartyMember(getVariable("キャラID")[i]) #LvUPの計算 end i = i + 1 #カウンターの更新 end end
えーっと・・・
たとえばIDが、[12][28][29][14][56]がいたとして、
="playerCharacter"
getVariable("キャラID")[1]=12
getVariable("キャラID")[2]=28
getVariable("キャラID")[3]=29
getVariable("キャラID")[4]=14
getVariable("キャラID")[5]=56
#ここでパーティーメンバー12と28を入れる
def keisan()
if isPartyMember(12)
#12のLvUpの計算
end
if isPartyMember(28)
#28のLvUpの計算
end
if isPartyMember(14)
#14のLvUpの計算
end]
にして、
でいいんですか?
なんかよく分かんないです。
たとえばIDが、[12][28][29][14][56]がいたとして、
- 開始スクリプト
setVariable("キャラID",createArray()) getVariable("キャラID")[0
getVariable("キャラID")[1]=12
getVariable("キャラID")[2]=28
getVariable("キャラID")[3]=29
getVariable("キャラID")[4]=14
getVariable("キャラID")[5]=56
#ここでパーティーメンバー12と28を入れる
def keisan()
if isPartyMember(12)
#12のLvUpの計算
end
if isPartyMember(28)
#28のLvUpの計算
end
if isPartyMember(14)
#14のLvUpの計算
end]
にして、
- 戦闘終了後
keisan()
でいいんですか?
なんかよく分かんないです。
まず、ゲームに使用する
全キャラクターのIDを把握しておきます。
対象のキャラクターIDが
パーティに参加しているかどうかは
isPartyMember関数で判断ができます。
敵キャラクターのIDは戦闘開始時に
確定しています。
戦闘終了後、
パーティーに参加しているキャラクターの場合に
敵キャラクターのIDによって加算する経験値を算出し、
経験値を加算します。
全キャラクターのIDを把握しておきます。
対象のキャラクターIDが
パーティに参加しているかどうかは
isPartyMember関数で判断ができます。
敵キャラクターのIDは戦闘開始時に
確定しています。
戦闘終了後、
パーティーに参加しているキャラクターの場合に
敵キャラクターのIDによって加算する経験値を算出し、
経験値を加算します。
また、今回の場合getKillCountは使う必要が無いと思います
全てのendにはコメントで何を閉じているのか、必ず書いておきましょー