2DRPGメモ

投稿者:R icon somari01 mini 一 けん 投稿日:2014/07/07 19:00

疑似ランダムエンカウントターンバトルを試行錯誤してみた感じ。

※とりあえず動く感じのものです。

#####開始スクリプトに書く#####
####変数設定####
##パーティーメンバー経験値配列##
setVariable("EXP", createArray())
getVariable("EXP")[0] = createArray()
getVariable("EXP")[0][0] = "playerCharacter"#プレイヤーキャラID
getVariable("EXP")[0][1] = 0#プレイヤー経験値
getVariable("EXP")[1] = createArray()
getVariable("EXP")[1][0] = 9241#メンバー1キャラID
getVariable("EXP")[1][1] = 0#メンバー1キャラ経験値
getVariable("EXP")[2] = createArray()
getVariable("EXP")[2][0] = 9242#メンバー2キャラID
getVariable("EXP")[2][1] = 0#メンバー2キャラ経験値
getVariable("EXP")[3] = createArray()
getVariable("EXP")[3][0] = 9243#メンバー3キャラID
getVariable("EXP")[3][1] = 0#メンバー3キャラ経験値

###敵キャラ情報変数配列###
setVariable("ENM", createArray())
getVariable("ENM")[0] = createArray()
getVariable("ENM")[0][0] = 9240#敵キャラID
getVariable("ENM")[0][1] = 1#取得経験値
getVariable("ENM")[0][2] = 10#取得money
getVariable("ENM")[0][3] = 9112#取得NアイテムID
getVariable("ENM")[0][4] = 18124#取得RアイテムID
getVariable("ENM")[1] = createArray()
getVariable("ENM")[1][0] = 9241#敵キャラID
getVariable("ENM")[1][1] = 2#取得経験値
getVariable("ENM")[1][2] = 0#取得money
getVariable("ENM")[1][3] = 9112#取得NアイテムID
getVariable("ENM")[1][4] = 18124#取得RアイテムID
getVariable("ENM")[2] = createArray()
getVariable("ENM")[2][0] = 9242#敵キャラID
getVariable("ENM")[2][1] = 3#取得経験値
getVariable("ENM")[2][2] = 0#取得money
getVariable("ENM")[2][3] = 9112#取得NアイテムID
getVariable("ENM")[2][4] = 18124#取得RアイテムID
getVariable("ENM")[2] = createArray()
getVariable("ENM")[2][0] = 9243#敵キャラID
getVariable("ENM")[2][1] = 4#取得経験値
getVariable("ENM")[2][2] = 0#取得money
getVariable("ENM")[2][3] = 9112#取得NアイテムID
getVariable("ENM")[2][4] = 18124#取得RアイテムID

###お金設定###
setMoneyName("お金")#通貨の名前
setDenomination("エン")#通貨の単位

###エンカウント###
setVariable("encounter",0)

###逃走成功確率設定###
setTurnBattleRunAwayRate(1.0)#0.0~1.0#0.0で必ず失敗#1.0で必ず成功

####ターンバトル設定####
def set_RandTurnBattle(set)
tbst = splitString(set, "/")
l = getArrayLength(tbst)
r = rand(l)
a = tbst[r]
enemy = splitString(a, ",")
ln = getArrayLength(enemy) - 1

  case ln
    
    when 0
    startTurnBattle(enemy[0])
    
    when 1
    startTurnBattle(enemy[0],enemy[1])
    
    when 2
    startTurnBattle(enemy[0],enemy[1],enemy[2])
    
    when 3
    startTurnBattle(enemy[0],enemy[1],enemy[2],enemy[3])
    
    when 4
    startTurnBattle(enemy[0],enemy[1],enemy[2],enemy[3],enemy[4])
    
    when 5
    startTurnBattle(enemy[0], enemy[1], enemy[2], enemy[3], enemy[4], enemy[5])
    
  end
return enemy#出現敵のキャラID配列
end


####経験値取得####
def get_EXP(e)

#パーティーメンバーID#
n = 0
a = createArray()
aa = 0
while n < 4
b = getPartyMember(n)
  if b != -1
      nn = 0
      nnn = 0
      while nn < getArrayLength(getVariable("EXP"))
          if getVariable("EXP")[nn][0] == b
            a[aa] = nn
            aa = aa + 1
            nn = getArrayLength(getVariable("EXP"))
          end
        nn = nn + 1
      end
      n = n + 1
    else
      n = 4
  end
end


#出現敵ID#
n = 0
c = createArray()
aa = 0
while n < getArrayLength(e)
b = e[n]
  if b != -1
      nn = 0
        while nn < getArrayLength(getVariable("ENM"))
          if getVariable("ENM")[nn][0] == b
            c[aa] = nn
            aa = aa + 1
            nn = getArrayLength(getVariable("ENM"))
          end
        nn = nn + 1
        end
      n = n + 1
    else
      n = 4
  end
end



#経験値取得、レベルアップ#
aa = 0
#mlv = 0
while aa < getArrayLength(a)
mlv = 0
enl = 0
  while enl < getArrayLength(c)
    mlv = mlv + (10 * floor(getVariable("ENM")[c[enl]][1] / getLevelPartyMember(getPartyMember(aa))))
    enl = enl + 1
  end
  speak(getValueFromCharacterParam(getPartyMemberParam(getPartyMember(aa)), getCharacterNameIndex()) + "は、" +mlv + "の経験値を手に入れた!")
  getVariable("EXP")[a[aa]][1] = getVariable("EXP")[a[aa]][1] + mlv
  up = 0
  while 100 <= getVariable("EXP")[a[aa]][1]
    getVariable("EXP")[a[aa]][1] = getVariable("EXP")[a[aa]][1] - 100
    levelUpPartyMember(getPartyMember(aa))
    up = up + 1
  end
  
  if up != 0
  speak(getValueFromCharacterParam(getPartyMemberParam(getPartyMember(aa)), getCharacterNameIndex()) + "のレベルが" + up + "上がって" + getLevelPartyMember(getPartyMember(aa)) + "になった!")
  end
  
aa = aa + 1
end


end



####お金取得####
def get_money(e)
n = 0
c = 0
aa = 0
while n < getArrayLength(e)
b = e[n]
  if b != -1
      nn = 0
        while nn < getArrayLength(getVariable("ENM"))
          if getVariable("ENM")[nn][0] == b
            c =  c + getVariable("ENM")[nn][2]
            aa = aa + 1
            nn = getArrayLength(getVariable("ENM"))
          end
        nn = nn + 1
        end
      n = n + 1
    else
      n = 4
  end
end

addMoney(c)
speak(c + getDenomination() + "手に入れた!")
end



####アイテム取得####
def get_item(id)
item_id = id
ni = getValueFromItemParam(getItemParamWithId(item_id), getItemViewNameIndex())#IDからアイテム名取得
loop = true
  while loop
    speak("「" + ni + "をゲットしたよ~」")
    if giveItem(item_id)#アイテム取得成功
        loop = false
      else#アイテム取得失敗
        speak("「ふぇぇ~、持ち物がいっぱいだから" + ni + "が持てないよ~」")
        A = createArray()
        n = 0
        while n < getMaxItemCount()
          A[n] = getValueFromItemParam(getItemParamWithIndex(n), getItemViewNameIndex())#所持アイテムのインデックスからアイテム名取得
          n = n + 1
        end
        pushArray(A, "捨てなくていいや")
        #a = 1
        a = speakWithSelectArray(A, "「いらないの捨てちゃお~っと」")
        
        if a == getArrayLength(A)-1#(getArrayLength(A)-1)
            loop = false
            speak("拾わなかった。")
          else
            removeItemWithIndex(a)#選んだアイテムを捨てる。
        end
    end
  end
end




####ドロップアイテム取得####
def drop_item(e)
n = 0
n_d = createArray()
r_d = createArray()
aa = 0
while n < getArrayLength(e)
b = e[n]
  if b != -1
      nn = 0
        while nn < getArrayLength(getVariable("ENM"))
          if getVariable("ENM")[nn][0] == b
            n_d[n] = getVariable("ENM")[nn][3]
            r_d[n] = getVariable("ENM")[nn][4]
            aa = aa + 1
            nn = getArrayLength(getVariable("ENM"))
          end
        nn = nn + 1
        end
      n = n + 1
    else
      n = 4
  end
end

##Nアイテムドロップ##
n = 0
while n < getArrayLength(n_d)
  r = rand(10)
  if r == 0
    get_item(n_d[n])
  end
  n = n + 1
end

##Rアイテムドロップ##
n = 0
while n < getArrayLength(r_d)
  r = rand(50)
  if r == 0
    get_item(r_d[n])
  end
  n = n + 1
end

end



####疑似ランダムエンカウントターンバトル####
def retb(e)
if getVariable("encounter") == 10
  r = rand(5)
  if r == 0
    #ターンバトル開始#
    enemy = set_RandTurnBattle(e)#
    #ターンバトル終了#
    if getTurnBattleResult() == 
        getTurnBattleWin()#0
      #勝ったとき#
      get_EXP(enemy)#経験値取得
      get_money(enemy)#お金取得
      drop_item(enemy)#アイテム取得
      
    elsif getTurnBattleResult() ==
        getTurnBattleLose()#1
      #負けたとき#
      
      
    elsif getTurnBattleResult() ==
        getTurnBattleRunAway()#2
      #逃げたとき#
      
      
    end
    setVariable("encounter", 0)
  end
else
setVariable("encounter", getVariable("encounter") + 1)
end
end





☆イベントの設定☆
キャラクタ:無し
あたり判定:無し
移動タイプ:プレイヤーを追う
開始方法:接触
有効条件:ご自由に

#イベント実行内容#
retb("9240/9240,9241,9242/9241,9240")


これで、
A(ID(9240)の敵)
B(ID(9240)の敵、ID(9241)の敵、ID(9242)の敵)
C(ID(9241)の敵、ID(9240)の敵)
ABCの3パターンの内の1パターンで敵が出現する。



☆作成中に得た情報☆
ターンバトル開始関数startTurnBattleでリソースに無いIDを
指定するとIDが-1のキャラが出てくる。(エラーにならない)
そして、このキャラのLV1時ステータスは、ALL1、各状態異常耐性△。
最弱ステータスのキャラである。

ターンバトル開始関数startTurnBattleで
6キャラ以上指定すると実行されない。

イベントキャラ変更関数setEventCharacterで
プレーヤーキャラ、パーティーキャラを変更する時
リソースに無いIDを指定すると
『Error #1009 null』エラーになる。
ちなみにこの状態でXメニューからステータスを見ることが出来る。
(その他イベントの変更時はエラーにならない。)

アイテム最大所持数設定関数setMaxItemCountで
0を指定するとアイテムが持てない……

アイテムが一杯の時は
装備中の装備を外せない。
つまり、装備中の装備はアイテム所持数に含まれない。

プレーヤーが倒した敵を数える関数getKillCountで
倒した数が加算されるのは
ターンバトルで勝った時のみ。

逃げるのに成功した時
パーティーが一人だけでも
『キャラ名たちは逃げ出した。』と出る……

コメントする

コメントするには、ログインする必要があります。

コメント一覧

コメントはありません。