スクリプト/ゲーム内レベルアップ (履歴ID:339)
最終投稿者: uncounco
更新:2012/10/21 12:42:33
倒した敵の種類と数からレベルアップうんこ
レベルアップを倒した敵の種類と数から判定しておこなう例を以下に示します。
関数の準備
まず開始スクリプトでは以下のように書きます。
とりあえずはそのままコピー&ペーストして見るのがよいかと思います。
#指数関数(aのb乗を返します。) def powFunc(a, b) v = 1.0 i = 0 while(i < b) v = v * a i = i + 1 end return v end #個々の敵キャラの経験値をidから求めます。 def getEnemyExperience(id) case id when 11 return 12 when 17 return 15 #敵キャラを増やしたら、ここに敵のIDから経験値を求める処理を加えていきます。 end end #経験値の計算 def getTotalExperience(killCounts) exp = 0 i = 0 while i < getArrayLength(killCounts) #倒した敵の種類と数から経験値を計算 exp = exp + getEnemyExperience(killCounts[i][0]) * killCounts[i][1] i = i + 1 end return exp end # レベルアップのチェック def levelUpCheck() i = 0 while i < 4 member = getPartyMember(i) if member == "playerCharacter" || member >= 0 #メンバーがいる場合倒した敵の数と種類から経験値を計算。 killCounts = getKillCountPartyMember(member) exp = getTotalExperience(killCounts) #レベルアップの判定 while exp - powFunc(2, getLevelPartyMember(member) - 1) * 10 > powFunc(2, getLevelPartyMember(member)) * 10 levelUpPartyMember(member) speak("レベルアップしました。level = ", getLevelPartyMember(member), "経験値 = ", exp) end end i = i + 1 end end
特に調整せずに使う場合は以下の部分を書き換えるだけでよいかと思います。
#個々の敵キャラの経験値をidから求めます。 def getEnemyExperience(id) case id when 11 return 12 when 17 return 15 #敵キャラを増やしたら、ここに敵のIDから経験値を求める処理を加えていきます。 end end
ID11の敵を1体倒したら12の経験値がもらえるというような形になっております。
新たな敵キャラのIDの種類が増えるごとに"when ID"と"return 経験値"
を加えていくことで、
新たな敵キャラを倒したときの経験値を取得できるようになります。
レベルアップのチェックをするタイミング
とりあえずレベルアップのための関数を使ってみます。
詳細な説明については後のほうで書いてあります。
levelUpCheck関数を呼ぶことで、レベルアップする条件を満たしているかどうかを判定して
満たしているならばレベルアップします。
たとえば、マップに配置した敵キャラを倒したらすぐにレベルアップのチェックを
おこなう場合は、"先頭終了時の実行内容(スクリプト)"に以下のように書きます。
if getTurnBattleResult() == getTurnBattleWin() #勝ったとき levelUpCheck() elsif getTurnBattleResult() == getTurnBattleLose() #負けたとき elsif getTurnBattleResult() == getTurnBattleRunAway() #逃げたとき end
誰かに話しかけたときにレベルアップするという形にしたい場合は、
話しかけた相手の"イベント実行内容(スクリプト)"でlevelUpCheck関数を
呼ぶことになります。
より詳細な解説
以下のループは、パーティメンバーそれぞれに対してレベルアップのチェックをする
ループとなっております。
while i < 4 member = getPartyMember(i) if member == "playerCharacter" || member >= 0 ... end i = i + 1 end
パーティメンバーごとに得られている経験値と、レベルアップの条件から、
レベルアップをさせるかどうかを計算しています。
#メンバーがいる場合倒した敵の数と種類から経験値を計算。 killCounts = getKillCountPartyMember(member) exp = getTotalExperience(killCounts) #レベルアップの判定 while exp - powFunc(2, getLevelPartyMember(member) - 1) * 10 > powFunc(2, getLevelPartyMember(member)) * 10 levelUpPartyMember(member) speak("レベルアップしました。level = ", getLevelPartyMember(member), "経験値 = ", exp) end
powFuncは指数関数です。
指数関数は急激に値が増えていくため、同じ経験値の敵キャラを倒し続けていると
だんだんレベルアップしにくくなるような効果が得られます。
また、
getKillCountPartyMemberの返り値がkillCountsに入ってくるようになっております。
killCountsに代入されるのは、倒した敵キャラの種類と倒した敵キャラの数の組の配列です。
killCounts[i][0]
には倒した敵キャラのIDが入っています。
killCounts[i][1]
には倒した敵キャラの数が入っています。
敵キャラのIDに応じて加える経験値の量を変えています。