経験値制LvUPでメンバー可変のときがわかりません(自分でも意味分かんない)(質問掲示板)
投稿:
rdjk5242
投稿:2012/02/20 18:12:20(最新:2012/02/23 14:01:23)
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」
のようにするためだと思っています。
後者は、関数リファレンスで調べたのですが、だいぶ省略してあるので
よくわからないのです。
長文すいません、お願いします。
ありがとうございます。
倒した人だけに経験値が入るようにするには、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")[0getVariable("キャラ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にはコメントで何を閉じているのか、必ず書いておきましょー