リリカルリミテッドが販売しているゲームやイラスト集のサポート用のブログです。
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
$game_party.all_members.all? { |a| a.hp == a.mhp }
$game_party.members.any? {|m| m.equips.include?($data_weapons[x]) }
$game_party.members.any? {|m| m.equips.include?($data_armors[x]) }
$game_party.members.any? { |m| m.skills.include?($data_skills[x]) }
$game_party.members.any? { |m| m.state?(x) }
($game_party.members.collect { |m| m.state?(x) }).size >= 2
$game_actors[x].element_rate(n) < 1.0
$game_actors[x].equips[n].nil?
ようするに無装備か?をスロット別に判定する。武器0,盾1,etc...
$game_party.members.include?($game_actors[x])
$game_party.battle_members.include?($game_actors[x])
戦闘外では隊列歩行に加わっているか?と同じ意味で分岐できるが、隊列歩行OFFの場合や細かく指定するなら以下を使う。
先頭から数えて4人目までのメンバーに入っているか?
$game_party.members[0..3].include?($game_actors[x])
$game_party.item_number($data_items[x]) >= 10
$game_party.leader.level >= 10
$game_party.members[0..1].any? { |m| m.equips[0] && m.equips[0].wtype_id == 4 }
条件を連ねる的なサンプル。
全種類
$game_party.all_items.empty?
アイテム
$game_party.items.empty?
武器
$game_party.weapons.empty?
防具
$game_party.armors.empty?
アイテム未所持ならコマンドをグレー表示させたい時にも使える。
そのままだとtrueを返すため、先頭に「!」を付ける。
【Window_MenuCommand】
add_command(Vocab::item, :item, !$game_party.all_items.empty?)
$game_self_switches[[$game_map.map_id, xx, "A"]]
$game_map.map_id は現在のマップを指すが、任意の数字にすれば遠隔のマップ内から読み取ることもできる。(そもそも同じマップならここを省略して書ける)
$data_mapinfos[$game_map.map_id].name.include?("ダンジョン")
データベース上の名前であって表示名ではないので注意。
特定のマップでしか使えないアイテムなんかの条件分岐に使う。
RPG::BGM.last.name == "Battle1"
DataManager.save_file_exists?
$game_player.moving?
$game_player.dash?
Input.dir4 == 0
Input.trigger?(:B) && Input.press?(:A)
例だとSHIFTキーを押しながらキャンセルキーが押されているか?になる。
$game_player.check_touch_event
イベント同士の衝突を避けたい時に使う。
$game_map.interpreter.running?
$game_message.visible
$game_party.in_battle
または
SceneManager.scene_is?(Scene_Battle)
$game_variables[x] = "薬草を届けよう!"
実際に表示するには\V[x]の制御文字を使ったりする。アクターの説明文に入れたりとか。ヘルプウィンドウに表示する場合はエディタ側で更新させる必要が出るかも。
$game_variables[x] = "王様に会いに行こう!"
$game_variables[x] += "いや、その前に!"
$game_variables[x] += "寝ておこう!"
のようにすると、「王様に会いに行こう!いや、その前に!寝ておこう!」と繋げられる。特に使い道はないと思う。
$game_variables[x].gsub!("王様","将軍")
で「王様」の部分を「将軍」に書き換えることができる。これも特に使い道はry
$game_variables[x] = $game_party.members.inject(0) { |a, m| a + m.atk }
$game_variables[x] = $game_party.members.max_by{ |a| a.level }.level
$game_variables[x] = $game_party.members.min_by{ |a| a.level }.level
a = $game_party.members.inject(0) { |n, m| n += m.level }b = a /= $game_party.members.size$game_variables[x] = b
$game_variables[x] = $game_actors[1].instance_variable_get("@param_plus")[2]
ドーピングアイテムで攻撃力が100→105に上昇したなら、変数には5が入る。
最後の[2]を変えれば他のパラメータにも対応する。0=HP,1=MP,2=攻撃力,3=防御力etc...
$game_variables[x] = @event_id
$game_variables[x] = $game_map.width(height)
$game_variables[x] = $game_map.events.values.select {|e| e.instance_variable_get(:@event).name.include?("宝箱") if !$game_self_switches[[e.id, "A"]]}.size
セルフスイッチAがONなら数に含まない。
$game_variables[x] = RPG::BGM.last
保存したBGMを再生
$game_variables[x].play
※n1,n2は好きな変数の番号
n1 = 1
n2 = 2
$game_variables[n1] = []
$game_variables[n2] = []
$game_party.all_items.each do |item|
$game_variables[n1].push(item)
x = $game_party.item_number(item)
$game_variables[n2].push(x)
$game_party.lose_item(item,x,false)
end
※保存したアイテムを元に戻す。
n1 = 1
n2 = 2
$game_variables[n1].each_index do |index|
item = $game_variables[n1][index]
x = $game_variables[n2][index]
$game_party.gain_item(item,x)
end
※変数[x]にアクターID[n]の装備を格納する。
a = $game_actors[n]
v = a.equips
a.clear_equipments
$game_variables[x] = v
※保存した装備を付け直す。
a = $game_actors[n]
v = $game_variables[x]
5.times do |index| a.change_equip(a.equip_slots[index], v[index])
end
$game_player.followers.each { |f| f.turn_toward_character($game_map.events[x]) }
$game_player.followers[x].set_direction(n)
隊列[x]は先頭(プレイヤー)を除くので、2人目以降を0から数える。
向き(n)は数字で指定する。2(↓) 4(←) 6(→) 8(↑)
$game_player.followers[x].move_forward
$game_player.followers[x].move_backward
$game_player.followers[x].jump(0, 0)
$game_player.followers[x].animation_id = n
表示終了までウェイトさせる場合は次のように記述する。
$game_player.followers[x].animation_id = n
Fiber.yield while $game_player.followers[x].animation_id > 0
$game_player.followers[x].balloon_id = n
1 = びっくり
2 = はてな
3 = 音符
4 = 怒り
5 = 汗
6 = くしゃくしゃ
7 = 沈黙
8 = 電球
9 = Zzz
$game_player.turn_toward_character($game_player.followers[0])
正確には後ろに付いてるキャラに振り向く。
$game_map.events[n].direction == $game_player.direction
$game_map.events[@event_id].direction == $game_player.direction
$game_map.events[n].pos?(x, y)
岩を押すイベントとかの条件分岐で使ったり。
$game_switches[x] = [2,4,6].all? { |i| $game_map.events[i].region_id == 63 }
条件分岐によるスイッチ操作を一括で行うサンプル。
get_character(n).start
テーブルの先にいるキャラに話しかけたりとか、離れたイベントを遠隔操作できる。
$game_player.turn_toward_character($game_map.events[self.event_id])
$game_map.events[n].instance_variable_set(:@priority_type,A)
A = 0 通常キャラの下
A = 1 通常キャラと同じ
A = 2 通常キャラの上
小数点を入れて更に上の2.5とかにすれば、イベント同士の重なりも防げるはず。(未検証)
$game_map.events.each {|id, ev| ev.lock }
$game_map.events.each {|id, ev| ev.unlock }
会話中とかに他のイベントの自律移動を止めたい時に使うが、lockをするとプレイヤーの方に全イベントが視線を向ける怖い仕様があるので、それが嫌ならエディタを書き換える。
$game_self_switches[[@map_id, @id, "A"]] = true
※跳ばせるイベントの移動ルートで設定する
スクリプト:@move_speed = 20
スクリプト:@y -= 0.7
SE:'Jump2', 80, 100
スクリプト:@y += 0.7
スクリプト:@move_route_index = -1
某所でよく使われるピョンピョン跳ねるジャンプの再現。
動作を繰り返すにチェックを入れるなら最後の行は無くてもいい。
a = $game_actors[1]
b = a.character_name
c = a.character_index
$game_map.events[n].set_graphic(b, c)
次のようにすれば、パーティメンバーの任意のキャラと同じにもできる。
a = $game_party.members[x]
x = 0 隊列の1人目
x = 1 隊列の2人目
etc...
$game_map.events[n].set_direction($game_player.direction)
if $game_player.moving?
$game_map.events[n].
move_straight($game_player.direction)
Fiber.yield while $game_player.moving?
end
場合によっては移動速度の設定やすり抜けONなどを忘れずに。
dx = ($game_player.x - $game_map.events[n].x).abs
dy = ($game_player.y - $game_map.events[n].y).abs
$game_variables[x] = (dx + dy)
v = $game_variables[x]
p = $game_player
e = $game_map.events[n]
a = (p.x - e.x).abs
b = (p.y - e.y).abs
v = (a + b)
f = 25
d = ((11 - v) < 0 ? 0 : (11 - v))
o = ((f * d > 255) ? 255 : (f * d))
e.instance_variable_set(:@opacity,o)
上記の使用例。適当なイベントから並列処理で動かす。
距離が離れてると見えないけど、近づくと徐々にイベント[n]の姿が見えるようになる。
p = $game_player
e = $game_map.events[n]
$game_switches[x] = false
dx = (e.x - p.x)
dy = (e.y - p.y)
case p.direction
when 2; $game_switches[x] = dx == 0 && dy == 1
when 4; $game_switches[x] = dx == -1 && dy == 0
when 6; $game_switches[x] = dx == 1 && dy == 0
when 8; $game_switches[x] = dx == 0 && dy == -1
end
set = RPG::MoveRoute.new
set.repeat = false
set.skippable = true
set.wait = true
set.list = []
set.list.push( RPG::MoveCommand.new(37, []) )
set.list.push( RPG::MoveCommand.new(1, []) )
set.list.push( RPG::MoveCommand.new(1, []) )
set.list.push( RPG::MoveCommand.new(1, []) )
set.list.push( RPG::MoveCommand.new(39, []) )
set.list.push( RPG::MoveCommand.new )
$game_map.events.each do |i,e|
next if [5, 6, 7].include?(i)
e.force_move_route(set)
end
イベントをスクリプトで移動させるサンプル。
火事だ~!で全員逃げるイベントとか組むのに使える。
見ての通りだけど、このままだと行数が多すぎてスクリプト欄に入り切らないので注意。
$game_map.airship.set_location($game_map.map_id, $game_player.x, $game_player.y)
airshipをboatやshipに変えると飛行船以外にできる。
もしくはvehicles[x]にする。0=boat,1=ship,2=airship
if $game_map.ship_passable?($game_player.x, $game_player.y - 1)
$game_player.animation_id = 57
$game_map.ship.set_location($game_map.map_id, $game_player.x, $game_player.y - 1)
else
Audio.se_play("Audio/SE/Buzzer1")
end
プレイヤーの1マス上が船の通行範囲かどうかを判定。
OKなら船を召喚して、ダメならブザー音。
呼ぶ際にアニメーションを設定してるが、そのままだとプレイヤーが炎を浴びるだけなので(謎)、アニメーション自体の設定で基準位置を頭上にするとそれっぽくなる。
$game_map.data[x, y, 2]
例:コーヒーカップをプレイヤーの1マス下に出現させる
(デフォルトかつマップのタイルセットが内装の場合)
$game_map.data[$game_player.x, $game_player.y + 1, 2] = 260
場所移動などでリセットされるので、その場限りのイベント演出で使う。いちいちスイッチやグラフィックの変更を行う必要がなくなる。最後の数字がタイルセットのオブジェクトで、タイルセットBの左上が0となる。
[2,4,6,8].each{|id|$game_switches[id] = true}
(1..$game_map.events.values.size).each{|ev|$game_self_switches[[@map_id, ev, "A"]] = true}
SW = [(2..5).to_a, 8, 9, (15..20).to_a].flatten
SW.each{|ev|$game_self_switches[[@map_id, ev, "A"]] = false}
複数かつ飛び番号ありの方法。(イベントID2~5、8、9、15~20が対象)
$data_actors.compact.each{ |actor| $game_party.add_actor(actor.id) if !actor.name.empty? }
$game_party.members.each { |actor| $game_party.remove_actor(actor.id) if actor.id > 1 }
(2..10).each{|id|$game_actors[1].learn_skill(id)}
※上から、アイテム、武器、防具。
$data_items.compact.each{|item|
$game_party.gain_item(item, 99) if
!item.name.empty? }
$data_weapons.compact.each{|item|
$game_party.gain_item(item, 99) if
!item.name.empty? }
$data_armors.compact.each{|item|
$game_party.gain_item(item, 99) if
!item.name.empty? }