Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
[hzm]エネミー行動設定さん for RGSS3
# coding: utf-8
#===============================================================================
# ■ [hzm]エネミー行動設定さん for RGSS3
# ※ このスクリプトには「[hzm]メモ欄拡張共通部分さん+ for RGSS3」が必要です
# 「[hzm]メモ欄拡張共通部分 for RGSS3」では動作しません
#-------------------------------------------------------------------------------
# 2012/06/04 Ru/むっくRu
#-------------------------------------------------------------------------------
# ※このスクリプトは暫定バージョンです
#-------------------------------------------------------------------------------
# 【使い方】
# エネミーのメモ欄に
#
# [hzm]AI制御:m,ターン上限,n
#
# と記述すると,エネミーは スキルID: m のスキルを
# 1ターンに n 回のみ使えるようになります.
#
# 例)スキルID2:防御を1ターンに1回までにする場合
# [hzm]AI制御:2,ターン上限,1
#
#-------------------------------------------------------------------------------
# 【更新履歴】
# 2012/06/04 説明文修正.メモスクリプトチェック.
# 2012/06/04 暫定バージョン
#-------------------------------------------------------------------------------
#===============================================================================
# ↓ 以下、スクリプト部 ↓
#===============================================================================
raise "「[hzm]メモ欄拡張共通部分さん+ for RGSS3」を導入してください" unless defined?(HZM_VXA::Note2)
raise "「[hzm]メモ欄拡張共通部分さん+ for RGSS3」のバージョンが一致しません" unless HZM_VXA::Note2.check_version?('3.0.0')
module HZM_VXA
module EnemyActionControl
KEYS = ['AI制御', 'AIControl']
SELECTED_KEYS = ['ターン上限', 'useMax']
MYSELF_REQUIRE_STATE_KEYS = ['必要ステート', 'RequireState']
MYSELF_NO_REQUIRE_STATE_KEYS = ['禁止ステート', 'NoRequireState']
end
end
class Game_Enemy < Game_Battler
#-----------------------------------------------------------------------------
# ● 行動条件合致判定(エイリアス)
#-----------------------------------------------------------------------------
alias hzm_vxa_enemyActionControl_conditions_met? conditions_met?
def conditions_met?(action)
# 元の処理
return false unless hzm_vxa_enemyActionControl_conditions_met?(action)
# 新条件
datas = enemy.hzm_vxa_note2_matches(nil, HZM_VXA::EnemyActionControl::KEYS)
datas.each do |data|
next unless action.skill_id == data[0]
case data[1]
when *HZM_VXA::EnemyActionControl::SELECTED_KEYS # ターン内上限
cnt = 0
@actions.each do |a|
cnt += 1 if $data_skills[action.skill_id] == a.item
return false if cnt >= data[2]
end
when *HZM_VXA::EnemyActionControl::MYSELF_REQUIRE_STATE_KEYS # 必要ステート(自分)
return false unless state?(data[2])
when *HZM_VXA::EnemyActionControl::MYSELF_NO_REQUIRE_STATE_KEYS # 禁止ステート(自分)
return false if state?(data[2])
end
end
true
end
#-----------------------------------------------------------------------------
# ● 戦闘行動をランダムに選択(エイリアス)
#-----------------------------------------------------------------------------
alias hzm_vxa_enemyActionControl_select_enemy_action select_enemy_action
def select_enemy_action(action_list, rating_zero)
action_list = enemy.actions.select {|a| action_valid?(a) }
return nil if action_list.empty?
rating_max = action_list.collect {|a| a.rating }.max
rating_zero = rating_max - 3
action_list.reject! {|a| a.rating <= rating_zero }
hzm_vxa_enemyActionControl_select_enemy_action(action_list, rating_zero)
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment