Project1

标题: 求23种战斗特效的RTAB兼容版 [打印本页]

作者: 阿尔西斯的马甲    时间: 2012-1-18 15:32
标题: 求23种战斗特效的RTAB兼容版
  1. class Game_Battler
  2.   #--------------------------------------------------------------------------
  3.   # ● 定义实例变量
  4.   #--------------------------------------------------------------------------
  5.   attr_reader   :last_hp                  # 受效前的HP
  6. end
  7. class Scene_Battle
  8.   #--------------------------------------------------------------------------
  9.   # ● 定义实例变量
  10.   #--------------------------------------------------------------------------
  11.   attr_accessor :target_battlers
  12.   attr_accessor :active_battler
  13.   attr_reader :skill
  14.   #--------------------------------------------------------------------------
  15.   # ● 刷新画面
  16.   #--------------------------------------------------------------------------
  17.   def update
  18.     # 执行战斗事件中的情况下
  19.     if $game_system.battle_interpreter.running?
  20.       # 刷新解释器
  21.       $game_system.battle_interpreter.update
  22.       # 强制行动的战斗者不存在的情况下
  23.       if $game_temp.forcing_battler == nil
  24.         # 执行战斗事件结束的情况下
  25.         unless $game_system.battle_interpreter.running?
  26.           # 继续战斗的情况下、再执行战斗事件的设置
  27.           unless @common_event_id != 0
  28.             unless judge
  29.               setup_battle_event
  30.             end
  31.           end
  32.         end
  33.         # 如果不是结束战斗回合的情况下
  34.         if @phase != 5 and @common_event_id == 0
  35.           # 刷新状态窗口
  36.           @status_window.refresh
  37.         end
  38.       end
  39.     end
  40.     # 系统 (计时器)、刷新画面
  41.     $game_system.update
  42.     $game_screen.update
  43.     # 计时器为 0 的情况下
  44.     if $game_system.timer_working and $game_system.timer == 0
  45.       # 中断战斗
  46.       $game_temp.battle_abort = true
  47.     end
  48.     # 刷新窗口
  49.     @help_window.update
  50.     @party_command_window.update
  51.     @actor_command_window.update
  52.     @status_window.update
  53.     @message_window.update
  54.     # 刷新活动块
  55.     @spriteset.update
  56.     # 处理过渡中的情况下
  57.     if $game_temp.transition_processing
  58.       # 清除处理过渡中标志
  59.       $game_temp.transition_processing = false
  60.       # 执行过渡
  61.       if $game_temp.transition_name == ""
  62.         Graphics.transition(20)
  63.       else
  64.         Graphics.transition(40, "Graphics/Transitions/" +
  65.           $game_temp.transition_name)
  66.       end
  67.     end
  68.     # 显示信息窗口中的情况下
  69.     if $game_temp.message_window_showing
  70.       return
  71.     end
  72.     # 显示效果中的情况下
  73.     if @spriteset.effect?
  74.       return
  75.     end
  76.     # 游戏结束的情况下
  77.     if $game_temp.gameover
  78.       # 切换到游戏结束画面
  79.       $scene = Scene_Gameover.new
  80.       return
  81.     end
  82.     # 返回标题画面的情况下
  83.     if $game_temp.to_title
  84.       # 切换到标题画面
  85.       $scene = Scene_Title.new
  86.       return
  87.     end
  88.     # 中断战斗的情况下
  89.     if $game_temp.battle_abort
  90.       # 还原为战斗前的 BGM
  91.       $game_system.bgm_play($game_temp.map_bgm)
  92.       # 战斗结束
  93.       battle_end(1)
  94.       return
  95.     end
  96.     # 等待中的情况下
  97.     if @wait_count > 0
  98.       # 减少等待计数
  99.       @wait_count -= 1
  100.       return
  101.     end
  102.     # 强制行动的角色存在、
  103.     # 并且战斗事件正在执行的情况下
  104.     if $game_temp.forcing_battler == nil and
  105.        $game_system.battle_interpreter.running?
  106.       return
  107.     end
  108.     # 回合分支
  109.     case @phase
  110.     when 1  # 自由战斗回合
  111.       update_phase1
  112.     when 2  # 同伴命令回合
  113.       update_phase2
  114.     when 3  # 角色命令回合
  115.       update_phase3
  116.     when 4  # 主回合
  117.       update_phase4
  118.     when 5  # 战斗结束回合
  119.       update_phase5
  120.     end
  121.   end
  122.   #--------------------------------------------------------------------------
  123.   # ● 刷新画面 (主回合步骤 3 : 行动方动画)
  124.   #--------------------------------------------------------------------------
  125.   def update_phase4_step3
  126.     # 行动方动画 (ID 为 0 的情况下是白色闪烁)
  127.     if @animation1_id == 0
  128.       @active_battler.white_flash = true
  129.     else
  130.       @active_battler.animation_id = @animation1_id
  131.       @active_battler.animation_hit = true
  132.     end
  133.     # 公共事件 ID 有效的情况下
  134.     if @common_event_id > 0
  135.       # 设置事件
  136.       common_event = $data_common_events[@common_event_id]
  137.       $game_system.battle_interpreter.setup(common_event.list, 0)
  138.     end
  139.     # 移至步骤 4
  140.     @phase4_step = 4
  141.   end
  142.   #--------------------------------------------------------------------------
  143.   # ● 刷新画面 (主回合步骤 5 : 显示伤害)
  144.   #--------------------------------------------------------------------------
  145.   def update_phase4_step5
  146.     # 隐藏帮助窗口
  147.     @help_window.visible = false
  148.     # 刷新状态窗口
  149.     @status_window.refresh
  150.     # 显示伤害
  151.     for target in @target_battlers
  152.       if target.damage != nil
  153.         target.damage_pop = true
  154.       end
  155.     end
  156.     if @active_battler.damage != nil
  157.       @active_battler.damage_pop = true
  158.     end
  159.     # 移至步骤 6
  160.     @phase4_step = 6
  161.   end
  162.   #--------------------------------------------------------------------------
  163.   # ● 刷新画面 (主回合步骤 6 : 刷新)
  164.   #--------------------------------------------------------------------------
  165.   def update_phase4_step6
  166.     # 清除强制行动对像的战斗者
  167.     $game_temp.forcing_battler = nil
  168.     # 移至步骤 1
  169.     @phase4_step = 1
  170.   end
  171. end
复制代码
以上是原来脚本。。。。。。。求RTAB版。。。。。。dsu_plus_rewardpost_czw
作者: 步兵中尉    时间: 2012-1-19 11:16
建议你不用这个兼容法,很难的。
多数采用RTAB和特技效果两个脚本结合,冲突较少且有23种战斗特效的内容。
RTAB站上下一个就可以了,附一个相关战斗特效脚本
  1. # ————————————————————————————————————
  2. # 本脚本来自www.66rpg.com,转载请保留此信息
  3. # ————————————————————————————————————

  4. # ▼▲▼ XRXS19. 特殊効果詰め合わせ:戦闘用 with 29 parts ver..18a ▼▲▼
  5. # by 桜雅 在土, 和希, シムナフ

  6. #==============================================================================
  7. # ■ 以下内容定义各特技的属性名
  8. #==============================================================================
  9. class Game_Battler
  10.   RERAISE_STATE_NAME = /复活/           
  11.   LIBLA_SKILL_ELEMENT_NAME = "透视"     
  12.   POWERSTOCK_SKILL_ELEMENT_NAME = "聚气"
  13.   POWERSTOCK_BASE_RATE = 1.0            #——每回合聚气威力上升倍率
  14.   STEAL_SKILL_ELEMENT_NAME = "偷窃"
  15.   ELEMENT_NAME_SP_DAMAGE = "SP损伤"
  16.   ELEMENT_NAME_HP_DRAIN = "HP吸收"
  17.   ELEMENT_NAME_SP_DRAIN = "SP吸收"
  18.   ELEMENT_NAME_CRITICAL_HIT = "必杀"
  19.   ELEMENT_NAME_CERTAIN_HIT = "必中"
  20.   ELEMENT_NAME_HP_COST = "HP消耗"
  21. end
  22. class Game_BattleAction
  23.   ELEMENT_NAME_SPEED_PRIORITY = "优先度"
  24. end
  25. class Scene_Battle
  26.   ELEMENT_NAME_HP_COST = "HP消耗"
  27.   ELEMENT_NAME_DERIVER = "派生"
  28.   ELEMENT_NAME_MOVE_TIMES = "行动回数"
  29.   ELEMENT_NAME_AREA_ENEMY_ALL = "全体化"
  30.   ELEMENT_NAME_AREA_WHOLE = "全域化"
  31.   ELEMENT_NAME_AREA_ENEMY_RAND = "敌方随机"
  32.   ELEMENT_NAME_AREA_ACTOR_RAND ="我方随机"
  33.   ELEMENT_NAME_AREA_ALL_RANDOM ="对象随机"
  34.   RERAISE_HP = 1
  35.   RERAISE_HP_PERCENT = 0
  36.   RERAISE_ANIMATION_ID = 26
  37. end
  38. module Cover_Module
  39.   ELEMENT_NAME_COVER = "援助"
  40.   STATE_NAME_COVER = "援助"
  41.   COVER_HP_PERCENT = 100
  42.   COVER_EFFECT_PERCENT = 100
  43.   COVER_EFFECT_CHAR = "Covered!"
  44.   COVER_ANIMATION_ID = 64
  45.   COVER_DEFAULT_NUMBER = 2
  46. end
  47. #==============================================================================
  48. $xrxs19_special_effections_set_work = true
  49. #--------------------------------------------------------------------------
  50. # ● 属性修正の計算?改
  51. #--------------------------------------------------------------------------
  52. class Game_Battler
  53. def elements_correct(element_set)
  54. # 無属性の場合 100 を返す
  55. return 100 if element_set == []
  56. # 与えられた属性のレートを全て乗算
  57. result = 100
  58. for i in element_set
  59. result *= self.element_rate(i) / 100.0
  60. end
  61. return result.to_i
  62. end
  63. end
  64. #==============================================================================
  65. # ■ Game_Battler
  66. #==============================================================================
  67. class Game_Battler
  68. #--------------------------------------------------------------------------
  69. # ● 追加公開インスタンス変数
  70. #--------------------------------------------------------------------------
  71. attr_accessor :reraise_state
  72. attr_accessor :reraised # リレイズしたかどうか
  73. attr_accessor :metamor_target # 変身対象
  74. attr_accessor :battler_name # バトラーグラフィック
  75. attr_reader :battler_name_original # バトラーグラフィック初期値
  76. attr_writer :hp0_ban # HP/SPの 0 化または最大制限の解除
  77. attr_writer :certain_hit # 必中受け(Trueだと攻撃を避けられない)
  78. attr_accessor :covered_friends #庇っている味方の配列
  79. attr_accessor :effect_message #
  80. attr_accessor :current_friend #かばっている味方
  81. attr_accessor :cover_remain #かばう可能な残り回数
  82. #--------------------------------------------------------------------------
  83. # ● 初期化
  84. #--------------------------------------------------------------------------
  85. alias xrxs19_battler_initialize initialize
  86. def initialize
  87. xrxs19_battler_initialize
  88. # 「かばう」用変数初期化
  89. @covered_friends = []
  90. @effect_message = nil
  91. @current_friend = nil
  92. @cover_remain = 0
  93. end
  94. #--------------------------------------------------------------------------
  95. # ● ステートの付加
  96. # state_id : ステート ID
  97. # force : 強制付加フラグ (オートステートの処理で使用)
  98. #--------------------------------------------------------------------------
  99. alias xrxs19_add_state add_state
  100. def add_state(state_id, force = false)
  101. xrxs19_add_state(state_id, force)
  102. # 「かばう」のステート付加の場合
  103. if state_id == get_cover_state_id()
  104. self.cover_remain = COVER_DEFAULT_NUMBER
  105. end
  106. end
  107. #--------------------------------------------------------------------------
  108. # ● HP の変更
  109. #--------------------------------------------------------------------------
  110. def hp=(hp)
  111. if @hp0_ban
  112. @hp = hp
  113. else
  114. @hp = [[hp, maxhp].min, 0].max
  115. # 戦闘不能を付加または解除
  116. for i in 1...$data_states.size
  117. if $data_states[i].zero_hp
  118. if self.dead?
  119. # 追加
  120. for x in 1...$data_states.size
  121. # ステート名は変更可。
  122. if $data_states[x].name[RERAISE_STATE_NAME] != nil
  123. reraise_id = $data_states[x].id
  124. break
  125. end
  126. end
  127. # リレイズ復活
  128. if reraise_id != nil && self.state?(reraise_id)
  129. self.remove_state(reraise_id)
  130. @reraised = true
  131. # 戦闘不能マイナスステートに設定されているものを解除
  132. if $data_states[i].minus_state_set != []
  133. for j in $data_states[i].minus_state_set
  134. remove_state(j)
  135. end
  136. end
  137. elsif
  138. # ここまで
  139. add_state(i)
  140. end
  141. else
  142. remove_state(i)
  143. end
  144. end
  145. end
  146. end
  147. end
  148. #--------------------------------------------------------------------------
  149. # ● SP の変更
  150. #--------------------------------------------------------------------------
  151. def sp=(sp)
  152. if @hp0_ban
  153. @sp = sp
  154. else
  155. @sp = [[sp, maxsp].min, 0].max
  156. end
  157. end
  158. #--------------------------------------------------------------------------
  159. # ● ステート [攻撃を回避できない] 判定
  160. #--------------------------------------------------------------------------
  161. alias xrxs19_cant_evade? cant_evade?
  162. def cant_evade?
  163. return true if @certain_hit
  164. return xrxs19_cant_evade?
  165. end
  166. #--------------------------------------------------------------------------
  167. # ● 通常攻撃の効果適用
  168. #--------------------------------------------------------------------------
  169. alias xrxs19_attack_effect attack_effect# alias したものは effect_it 内で使用
  170. def attack_effect(attacker)
  171. # 通常攻撃の場合、skill = nil で呼ぶ
  172. return effect_it(attacker, nil)
  173. end
  174. #--------------------------------------------------------------------------
  175. # ● スキルの効果適用
  176. #--------------------------------------------------------------------------
  177. alias xrxs19_skill_effect skill_effect # alias したものは effect_it 内で使用
  178. def skill_effect(user, skill)
  179. # スキルの場合は、skill を指定して呼ぶ
  180. return effect_it(user, skill)
  181. end
  182. #--------------------------------------------------------------------------
  183. # ● 効果適用
  184. #--------------------------------------------------------------------------
  185. def effect_it(user, skill = nil)
  186. # 実行前の数値を保持
  187. last_hp = self.hp
  188. last_sp = self.sp
  189. @hp0_ban = true
  190. # 武器IDの取得
  191. weapon_id = user.is_a?(Game_Actor) ? user.weapon_id : 0
  192. # 特殊効果:必中
  193. if skill != nil and skill_element_include?(skill, ELEMENT_NAME_CERTAIN_HIT)
  194. self.certain_hit = true
  195. elsif skill == nil and equip_weapon_element_include?(user, ELEMENT_NAME_CERTAIN_HIT)
  196. self.certain_hit = true
  197. end
  198. # 基本実行、skill が nil かどうかで通常攻撃とスキルを分別
  199. if skill == nil
  200. bool = xrxs19_attack_effect(user)
  201. else
  202. bool = xrxs19_skill_effect(user, skill)
  203. end
  204. # ダメージ測定
  205. damage = last_hp - self.hp
  206. # 必中の解除
  207. self.certain_hit = false
  208. # 特殊効果:スティール/アイテム奪取
  209. if skill != nil and skill_element_include?(skill, STEAL_SKILL_ELEMENT_NAME)
  210. self.steal_effect(user, skill) if self.is_a?(Game_Enemy)
  211. elsif skill == nil and equip_weapon_element_include?(user, STEAL_SKILL_ELEMENT_NAME)
  212. self.steal_effect(user, skill) if self.is_a?(Game_Enemy)
  213. end
  214. # 特殊効果:対象に変身
  215. if skill != nil and skill_element_include?(skill, "变身")
  216. if user.metamor_target == nil
  217. if self.metamor_target == nil
  218. # 変身状態で無い場合、変身
  219. user.metamor_target = self
  220. else
  221. # 対象が変身状態の場合、対象の変身対象に変身する。
  222. user.metamor_target = self.metamor_target
  223. end
  224. else
  225. # 変身状態の場合、変身を解除する
  226. user.metamor_target = user
  227. end
  228. # 自分への変身を禁止
  229. user.metamor_target = nil if user.metamor_target == user
  230. # 対象のダメージ表示を消す
  231. self.damage = nil if self.damage == "Miss"
  232. # HP/SP最大値変更への対応
  233. @hp0_ban = false
  234. user.hp = user.hp
  235. user.sp = user.sp
  236. end
  237. # 特殊効果:武器を投げる
  238. if (skill != nil and skill_element_include?(skill, "武器投掷"))
  239. # 投擲武器の取得
  240. throw_weapon = $data_weapons[user.current_action.basic]
  241. # 武器の消費
  242. if $xrxs24_weapon_property_system_work
  243. $game_party.lose_weapon(throw_weapon.id, user.current_action.basic_ex)
  244. else
  245. $game_party.lose_weapon(throw_weapon.id, 1)
  246. end
  247. # ダメージの変更
  248. self.hp += damage if bool
  249. damage = throw_weapon.atk
  250. if weapon_element_include?(throw_weapon.id, "投掷威力")
  251. damage = damage * @one.to_i / 100
  252. end
  253. self.damage = damage
  254. self.hp -= self.damage
  255. bool = true
  256. end
  257. # 特殊効果:消費金額に順ずる固定ダメージ
  258. if skill != nil and skill_element_include?(skill, "金钱投掷")
  259. # ゴールドの消費
  260. last_gold = $game_party.gold
  261. $game_party.gain_gold(-1 * ($game_party.gold * skill.variance / 100 + skill.power))
  262. self.hp += damage if bool
  263. damage = last_gold - $game_party.gold
  264. self.damage = damage
  265. self.hp -= self.damage
  266. bool = true
  267. end
  268. # 基本実行でfalse(Miss等)の場合、ここで終了する
  269. # つまり、この上までにダメージに関係なく実行される特殊効果をいれて
  270. # これより下はダメージに関係する特殊効果を入れる。
  271. # "武器投擲"と"銭投げ"はMissでも金額を消費するため上に。
  272. return false if bool == false
  273. # 特殊効果:防御能力の判定
  274. if damage > 0 and self.guarding?
  275. # 特殊効果:防御能力 2(強防御)
  276. if battler_element_rank?(self, "防御能力") == 2
  277. damage /= 2
  278. self.damage -= damage
  279. self.hp += damage
  280. end
  281. # 特殊効果:防御能力 1(無効防御)
  282. if battler_element_rank?(self, "防御能力") == 1
  283. self.hp += damage
  284. damage = 0
  285. self.damage = damage
  286. end
  287. end
  288. # 特殊効果:必殺確実クリティカル
  289. if (skill != nil and skill_element_include?(skill, ELEMENT_NAME_CRITICAL_HIT)) or
  290. (skill == nil and equip_weapon_element_include?(user, ELEMENT_NAME_CRITICAL_HIT)) and damage > 0
  291. if self.critical
  292. self.critical = false
  293. damage /= 2
  294. self.damage -= damage
  295. self.hp += damage
  296. end
  297. if @one == nil or rand(100) < @one.to_i
  298. damage += 4 * self.pdef + rand(100)
  299. self.damage = damage
  300. self.hp -= damage
  301. self.critical = true
  302. end
  303. end
  304. # 特殊効果:使用者の 最大HP - 現在HP 固定ダメージ
  305. if skill != nil and skill_element_include?(skill, "固定HP差分")
  306. self.hp += damage
  307. damage = user.maxhp - user.hp
  308. self.damage = damage
  309. self.hp -= self.damage
  310. self.critical = false # 固定ダメージ故クリティカルを禁止
  311. end
  312. # 特殊効果:使用者の 現在HP 固定ダメージ
  313. if skill != nil and skill_element_include?(skill, "现在HP损伤")
  314. self.hp += damage
  315. damage = user.hp
  316. self.damage = damage
  317. self.hp -= self.damage
  318. self.critical = false # 固定ダメージ故クリティカルを禁止
  319. end
  320. # 特殊効果:現在HPに順ずる固定ダメージ
  321. if skill != nil and skill_element_include?(skill, "固定现在HP")
  322. self.hp += damage
  323. damage = self.hp * skill.variance / 100 + skill.power
  324. damage *= -1 if skill.power < 0
  325. self.damage = damage
  326. self.hp -= self.damage
  327. self.critical = false # 固定ダメージ故クリティカルを禁止
  328. end
  329. # 特殊効果:最大HPに順ずる固定ダメージ
  330. if skill != nil and skill_element_include?(skill, "固定最大HP")
  331. self.hp += damage
  332. damage = self.maxhp * @one.to_i / 100
  333. damage *= -1 if skill.power < 0
  334. self.damage = damage
  335. self.hp -= self.damage
  336. self.critical = false # 固定ダメージ故クリティカルを禁止
  337. end
  338. # 特殊効果:HPではなくSPにダメージを与える
  339. if (skill != nil and skill_element_include?(skill, ELEMENT_NAME_SP_DAMAGE)) or
  340. (skill == nil and equip_weapon_element_include?(user, ELEMENT_NAME_SP_DAMAGE))
  341. self.hp += damage

  342. sp_save = self.sp <= self.maxsp * 5 /100
  343. case skill.id
  344. when 463
  345. unless sp_save
  346. sp_damage = (damage / 100) + (self.sp * 5 / 100)
  347. else
  348. sp_damage = 0
  349. end

  350. when 464
  351. unless sp_save
  352. sp_damage = (damage / 100) + (self.sp * 10 / 100)
  353. else
  354. sp_damage = 0
  355. end

  356. when 465
  357. unless sp_save
  358. sp_damage = (damage / 100) + (self.sp * 15 / 100)
  359. else
  360. sp_damage = 0
  361. end
  362. when 466
  363. unless sp_save
  364. sp_damage = (damage / 100) + (self.sp * 20 / 100)
  365. else
  366. sp_damage = 0
  367. end
  368. when 467
  369. unless sp_save
  370. sp_damage = (damage / 100) + (self.sp * 25 / 100)
  371. else
  372. sp_damage = 0
  373. end
  374. when 468
  375. unless sp_save
  376. sp_damage = (damage / 100) + (self.sp * 30 / 100)
  377. else
  378. sp_damage = 0
  379. end
  380. when 469
  381. unless sp_save
  382. sp_damage = (damage / 100) + (self.sp * 35 / 100)
  383. else
  384. sp_damage = 0
  385. end
  386. when 470
  387. unless sp_save
  388. sp_damage = (damage / 100) + (self.sp * 40 / 100)
  389. else
  390. sp_damage = 0
  391. end
  392. when 471
  393. unless sp_save
  394. sp_damage = (damage / 100) + (self.sp * 45 / 100)
  395. else
  396. sp_damage = 0
  397. end
  398. when 472
  399. unless sp_save
  400. sp_damage = (damage / 100) + (self.sp * 50 / 100)
  401. else
  402. sp_damage = 0
  403. end
  404. when 528
  405. unless sp_save
  406. sp_damage = (damage / 100) + (self.sp * 5 / 100)
  407. else
  408. sp_damage = 0
  409. end
  410. when 529
  411. unless sp_save
  412. sp_damage = (damage / 100) + (self.sp * 10 / 100)
  413. else
  414. sp_damage = 0
  415. end
  416. when 530
  417. unless sp_save
  418. sp_damage = (damage / 100) + (self.sp * 15 / 100)
  419. else
  420. sp_damage = 0
  421. end
  422. when 531
  423. unless sp_save
  424. sp_damage = (damage / 100) + (self.sp * 20 / 100)
  425. else
  426. sp_damage = 0
  427. end
  428. when 739
  429. unless sp_save
  430. sp_damage = (damage / 100) + (self.sp * 5 / 100)
  431. else
  432. sp_damage = 0
  433. end
  434. when 740
  435. unless sp_save
  436. sp_damage = (damage / 100) + (self.sp * 10 / 100)
  437. else
  438. sp_damage = 0
  439. end
  440. when 741
  441. unless sp_save
  442. sp_damage = (damage / 100) + (self.sp * 15 / 100)
  443. else
  444. sp_damage = 0
  445. end
  446. when 742
  447. unless sp_save
  448. sp_damage = (damage / 100) + (self.sp * 20 / 100)
  449. else
  450. sp_damage = 0
  451. end
  452. when 743
  453. unless sp_save
  454. sp_damage = (damage / 100) + (self.sp * 25 / 100)
  455. else
  456. sp_damage = 0
  457. end
  458. else
  459. unless sp_save
  460. sp_damage = (damage / 100) + (self.sp * 30 / 100)
  461. else
  462. sp_damage = 0
  463. end

  464. end

  465. self.sp -= sp_damage
  466. self.damage = sp_damage.to_s#damage.to_s

  467. # このタイミングで戦闘不能判定
  468. @hp0_ban = false
  469. self.sp = self.sp
  470. real_damage = last_sp - self.sp
  471. else
  472. # このタイミングで戦闘不能判定
  473. @hp0_ban = false
  474. self.hp = self.hp
  475. real_damage = last_hp - self.hp
  476. end
  477. # 使用者のHP/SPもリセット
  478. user.hp = user.hp
  479. user.sp = user.sp
  480. # 特殊効果:与えたダメージを自分のHPとして吸収
  481. if (skill != nil and skill_element_include?(skill, ELEMENT_NAME_HP_DRAIN)) or
  482. (skill == nil and equip_weapon_element_include?(user, ELEMENT_NAME_HP_DRAIN))
  483. user.damage = -real_damage * @one.to_i / 100
  484. user.hp -= user.damage
  485. end
  486. # 特殊効果:与えたダメージを自分のSPとして吸収
  487. if (skill != nil and skill_element_include?(skill, ELEMENT_NAME_SP_DRAIN)) or
  488. (skill == nil and equip_weapon_element_include?(user, ELEMENT_NAME_SP_DRAIN))
  489. user.damage -= real_damage * @one.to_i / 100
  490. user.sp -= user.damage
  491. user.damage = user.damage.to_s
  492. end
  493. return true
  494. end
  495. #--------------------------------------------------------------------------
  496. # ● バトラーの指定名の属性のランクを判定
  497. #--------------------------------------------------------------------------
  498. def battler_element_rank?(battler, element_name)
  499. for i in 1..$data_system.elements.size
  500. if $data_system.elements[i] == element_name
  501. if self.is_a?(Game_Actor)
  502. return $data_classes[battler.class_id].element_ranks[i]
  503. else
  504. return $data_enemies[battler.id].element_ranks[i]
  505. end
  506. end
  507. end
  508. return 3
  509. end
  510. #--------------------------------------------------------------------------
  511. # ● MaxHP の取得
  512. #--------------------------------------------------------------------------
  513. alias xrxs19_maxhp maxhp
  514. def maxhp
  515. if !@metamor_target.nil?
  516. return @metamor_target.maxhp
  517. end
  518. xrxs19_maxhp
  519. end
  520. #--------------------------------------------------------------------------
  521. # ● MaxSP の取得
  522. #--------------------------------------------------------------------------
  523. alias xrxs19_maxsp maxsp
  524. def maxsp
  525. if !@metamor_target.nil?
  526. return @metamor_target.maxsp
  527. end
  528. xrxs19_maxsp
  529. end
  530. #--------------------------------------------------------------------------
  531. # ● 腕力の取得
  532. #--------------------------------------------------------------------------
  533. alias xrxs19_str str
  534. def str
  535. if !@metamor_target.nil?
  536. return @metamor_target.str
  537. end
  538. xrxs19_str
  539. end
  540. #--------------------------------------------------------------------------
  541. # ● 器用さの取得
  542. #--------------------------------------------------------------------------
  543. alias xrxs19_dex dex
  544. def dex
  545. if !@metamor_target.nil?
  546. return @metamor_target.dex
  547. end
  548. xrxs19_dex
  549. end
  550. #--------------------------------------------------------------------------
  551. # ● 素早さの取得
  552. #--------------------------------------------------------------------------
  553. alias xrxs19_agi agi
  554. def agi
  555. if !@metamor_target.nil?
  556. return @metamor_target.agi
  557. end
  558. xrxs19_agi
  559. end
  560. #--------------------------------------------------------------------------
  561. # ● 魔力の取得
  562. #--------------------------------------------------------------------------
  563. alias xrxs19_int int
  564. def int
  565. if !@metamor_target.nil?
  566. return @metamor_target.int
  567. end
  568. xrxs19_int
  569. end
  570. #--------------------------------------------------------------------------
  571. # ● 攻撃力の取得
  572. #--------------------------------------------------------------------------
  573. alias xrxs19_atk atk
  574. def atk
  575. if !@metamor_target.nil?
  576. return @metamor_target.atk
  577. end
  578. xrxs19_atk
  579. end
  580. #--------------------------------------------------------------------------
  581. # ● 物理防御の取得
  582. #--------------------------------------------------------------------------
  583. alias xrxs19_pdef pdef
  584. def pdef
  585. if !@metamor_target.nil?
  586. return @metamor_target.pdef
  587. end
  588. xrxs19_pdef
  589. end
  590. #--------------------------------------------------------------------------
  591. # ● 魔法防御の取得
  592. #--------------------------------------------------------------------------
  593. alias xrxs19_mdef mdef
  594. def mdef
  595. if !@metamor_target.nil?
  596. return @metamor_target.mdef
  597. end
  598. xrxs19_mdef
  599. end
  600. #--------------------------------------------------------------------------
  601. # ● 回避修正の取得
  602. #--------------------------------------------------------------------------
  603. alias xrxs19_eva eva
  604. def eva
  605. if !@metamor_target.nil?
  606. return @metamor_target.eva
  607. end
  608. xrxs19_eva
  609. end
  610. end

  611. #==============================================================================
  612. # ■ Game_BattleAction
  613. #==============================================================================
  614. class Game_BattleAction
  615. #--------------------------------------------------------------------------
  616. # ● 公開インスタンス変数
  617. #--------------------------------------------------------------------------
  618. attr_accessor :speed_priority # スピード優先度
  619. attr_accessor :weapon_id # 武器 ID
  620. attr_accessor :basic_ex # 基本拡張(補助的に数値を保持)
  621. #--------------------------------------------------------------------------
  622. # ● クリア
  623. #--------------------------------------------------------------------------
  624. alias xrxs19_clear clear
  625. def clear
  626. @weapon_id = 0
  627. xrxs19_clear
  628. end
  629. #--------------------------------------------------------------------------
  630. # ● スキルの優先度取得
  631. #--------------------------------------------------------------------------
  632. def speed_priority
  633. if @kind == 0 and @basic == 0
  634. # 通常攻撃の場合
  635. elsif @kind == 1
  636. # スキルの場合
  637. return 0 if $data_skills[@skill_id] == nil
  638. for i in $data_skills[@skill_id].element_set
  639. if $data_system.elements[i] != nil
  640. if $data_system.elements[i] =~ /^#{ELEMENT_NAME_SPEED_PRIORITY}([+-]?[0-9]+)/
  641. return $1.to_i
  642. end
  643. end
  644. end
  645. end
  646. return 0
  647. end
  648. end
  649. #==============================================================================
  650. # ■ Game_Actor
  651. #==============================================================================
  652. class Game_Actor < Game_Battler
  653. #--------------------------------------------------------------------------
  654. # ● セットアップ
  655. #--------------------------------------------------------------------------
  656. alias xrxs19_setup setup
  657. def setup(actor_id)
  658. xrxs19_setup(actor_id)
  659. @reraised = false
  660. @reraise_state = 0
  661. @metamor_target = nil
  662. @battler_name_original = @battler_name
  663. end
  664. #--------------------------------------------------------------------------
  665. # ● MaxHP の取得
  666. #--------------------------------------------------------------------------
  667. alias xrxs19_maxhp maxhp
  668. def maxhp
  669. if !@metamor_target.nil?
  670. return @metamor_target.maxhp
  671. end
  672. xrxs19_maxhp
  673. end
  674. #--------------------------------------------------------------------------
  675. # ● スキルの使用可能判定
  676. #--------------------------------------------------------------------------
  677. alias xrxs19_skill_can_use? skill_can_use?
  678. def skill_can_use?(skill_id)
  679. # スキルを取得
  680. @skill = $data_skills[skill_id]
  681. # HP消費スキルの場合
  682. if skill_element_include?(@skill, ELEMENT_NAME_HP_COST) and @actor_id > 0
  683. # HP が足りない場合は使用不可
  684. if $data_skills[skill_id].sp_cost > self.hp
  685. return false
  686. end
  687. # SP消費量を回復させ、SP が足りない場合を回避(最大値を超えて回復)
  688. self.hp0_ban = true
  689. self.sp += @skill.sp_cost
  690. bool = xrxs19_skill_can_use?(skill_id)
  691. # SPを元に戻す
  692. self.sp -= @skill.sp_cost
  693. self.hp0_ban = false
  694. return bool
  695. else
  696. return xrxs19_skill_can_use?(skill_id)
  697. end
  698. end
  699. end
  700. #==============================================================================
  701. # ■ Game_Enemy
  702. #==============================================================================
  703. class Game_Enemy < Game_Battler
  704. #--------------------------------------------------------------------------
  705. # ● オブジェクト初期化
  706. #--------------------------------------------------------------------------
  707. alias xrxs19_initialize initialize
  708. def initialize(troop_id, member_index)
  709. xrxs19_initialize(troop_id, member_index)
  710. @reraised = false
  711. @reraise_state = 0
  712. @metamor_target = nil
  713. @battler_name_original = @battler_name
  714. end
  715. end
  716. #==============================================================================
  717. # ■ Window_Item
  718. #==============================================================================
  719. class Window_Item < Window_Selectable
  720. #--------------------------------------------------------------------------
  721. # ● オブジェクト初期化
  722. #--------------------------------------------------------------------------
  723. alias xrxs19_initialize initialize
  724. def initialize
  725. xrxs19_initialize
  726. refresh
  727. end
  728. #--------------------------------------------------------------------------
  729. # ● 値の受け渡し
  730. #--------------------------------------------------------------------------
  731. def set_itemkind(itemkind)
  732. @itemkind = itemkind
  733. refresh
  734. end
  735. #--------------------------------------------------------------------------
  736. # ● 値の受け渡し
  737. #--------------------------------------------------------------------------
  738. def set_restrict(restrict)
  739. @restrict = restrict
  740. refresh
  741. end
  742. #--------------------------------------------------------------------------
  743. # ● リフレッシュ
  744. #--------------------------------------------------------------------------
  745. alias xrxs19_refresh refresh
  746. def refresh
  747. if @itemkind != 11
  748. xrxs19_refresh
  749. return
  750. end
  751. # 11 = 制限:投擲武器のみ
  752. if self.contents != nil
  753. self.contents.dispose
  754. self.contents = nil
  755. end
  756. @data = []
  757. @data_id = []
  758. for i in 1...$data_weapons.size
  759. if $game_party.weapon_number(i) > 0
  760. @data.push($data_weapons[i]) if weapon_element_include?(i, "投掷威力")
  761. end
  762. end
  763. # 項目数が 0 でなければビットマップを作成し、全項目を描画
  764. @item_max = @data.size
  765. if @item_max > 0
  766. self.contents = Bitmap.new(width - 32, row_max * 32)
  767. for i in 0...@item_max
  768. draw_item(i)
  769. end
  770. end
  771. end
  772. #--------------------------------------------------------------------------
  773. # ● 項目の描画
  774. #--------------------------------------------------------------------------
  775. alias xrxs19_draw_item draw_item
  776. def draw_item(index)
  777. if @itemkind != 11
  778. xrxs19_draw_item(index)
  779. return
  780. end
  781. # 11 = 制限:投擲武器のみ
  782. item = @data[index]
  783. number = $game_party.weapon_number(item.id)
  784. self.contents.font.color = normal_color
  785. x = 4 + index % @column_max * (288 + 32)
  786. y = index / @column_max * 32
  787. rect = Rect.new(x, y, self.width / @column_max - 32, 32)
  788. self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
  789. bitmap = RPG::Cache.icon(item.icon_name)
  790. opacity = self.contents.font.color == normal_color ? 255 : 128
  791. self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
  792. self.contents.draw_text(x + 28, y, 212, 32, item.name, 0)
  793. self.contents.draw_text(x + 240, y, 16, 32, ":", 1)
  794. self.contents.draw_text(x + 256, y, 24, 32, number.to_s, 2)
  795. end
  796. end
  797. #==============================================================================
  798. # ■ Scene_Battle
  799. #==============================================================================
  800. class Scene_Battle
  801. #--------------------------------------------------------------------------
  802. # ● メイン処理
  803. #--------------------------------------------------------------------------
  804. alias xrxs19_main main
  805. def main
  806. @phase4_5_done = false
  807. xrxs19_main
  808. end
  809. #--------------------------------------------------------------------------
  810. # ● フレーム更新 (アクターコマンドフェーズ)
  811. #--------------------------------------------------------------------------
  812. alias xrxs19_update_phase3 update_phase3
  813. def update_phase3
  814. # 武器のみアイテムウィンドウが有効の場合
  815. if @item_window_weapons != nil and @item_window_weapons.visible
  816. update_phase3_item_window_weapons
  817. return
  818. end
  819. # 他
  820. xrxs19_update_phase3
  821. end
  822. #--------------------------------------------------------------------------
  823. # ● フレーム更新 (アクターコマンドフェーズ : スキル選択)
  824. #--------------------------------------------------------------------------
  825. alias xrxs19_update_phase3_skill_select update_phase3_skill_select
  826. def update_phase3_skill_select
  827. # C ボタンが押された場合
  828. if Input.trigger?(Input::C)
  829. # スキルウィンドウで現在選択されているデータを取得
  830. @skill = @skill_window.skill
  831. if skill_element_include?(@skill, "武器投掷")
  832. # 使用できない場合
  833. if @skill == nil or not @active_battler.skill_can_use?(@skill.id)
  834. # ブザー SE を演奏
  835. $game_system.se_play($data_system.buzzer_se)
  836. return
  837. end
  838. # 決定 SE を演奏
  839. $game_system.se_play($data_system.decision_se)
  840. # アクションを設定
  841. @active_battler.current_action.skill_id = @skill.id
  842. # アイテム選択へ移行する
  843. start_item_select_from_skill(@one.to_i)
  844. return
  845. end
  846. end
  847. xrxs19_update_phase3_skill_select
  848. end
  849. #--------------------------------------------------------------------------
  850. # ● フレーム更新 (アクターコマンドフェーズ : 武器のみアイテム選択)
  851. #--------------------------------------------------------------------------
  852. def update_phase3_item_window_weapons
  853. # 武器アイテムウィンドウを可視状態にする
  854. @item_window_weapons.visible = true
  855. # 武器アイテムウィンドウを更新
  856. @item_window_weapons.update
  857. # B ボタンが押された場合
  858. if Input.trigger?(Input::B)
  859. # キャンセル SE を演奏
  860. $game_system.se_play($data_system.cancel_se)
  861. # 武器アイテムの選択を終了
  862. end_item_select_from_skill
  863. return
  864. end
  865. # C ボタンが押された場合
  866. if Input.trigger?(Input::C)
  867. # 決定 SE を演奏
  868. $game_system.se_play($data_system.decision_se)
  869. # アイテムウィンドウで現在選択されているデータを取得
  870. @item = @item_window_weapons.item
  871. # アクションを設定
  872. @active_battler.current_action.basic = @item.id
  873. if $xrxs24_weapon_property_system_work
  874. # アイテムウィンドウで現在選択されているデータを取得
  875. @item_room_no = @item_window_weapons.item_room_no
  876. # アクションを設定
  877. @active_battler.current_action.basic_ex = @item_room_no
  878. end
  879. # 武器のみアイテムウィンドウを不可視化
  880. @item_window_weapons.visible = false
  881. # 効果範囲が敵単体の場合
  882. if @skill.scope == 1
  883. # エネミーの選択を開始
  884. start_enemy_select
  885. # 効果範囲が味方単体の場合
  886. elsif @skill.scope == 3 or @skill.scope == 5
  887. # アクターの選択を開始
  888. start_actor_select
  889. # 効果範囲が単体ではない場合
  890. else
  891. # アイテムの選択を終了
  892. end_item_select_from_skill
  893. # 次のアクターのコマンド入力へ
  894. phase3_next_actor
  895. end
  896. return
  897. end
  898. end
  899. #--------------------------------------------------------------------------
  900. # ● スキルからのアイテム選択開始
  901. #--------------------------------------------------------------------------
  902. def start_item_select_from_skill(restrict = 0)
  903. # 投擲アイテムウィンドウを作成 ( 武器のみ:投擲可能のみ )
  904. @item_window_weapons = Window_Item.new
  905. if restrict == 1
  906. @item_window_weapons.set_itemkind(11)
  907. else
  908. @item_window_weapons.set_itemkind(1)
  909. end
  910. # ヘルプウィンドウを関連付け
  911. @item_window_weapons.help_window = @help_window
  912. # スキルウィンドウを無効化
  913. @skill_window.active = false
  914. @skill_window.visible = false
  915. end
  916. #--------------------------------------------------------------------------
  917. # ● スキルからのアイテム選択終了
  918. #--------------------------------------------------------------------------
  919. def end_item_select_from_skill
  920. # 武器のみアイテムウィンドウを解放
  921. @item_window_weapons.dispose
  922. @item_window_weapons = nil
  923. # ヘルプウィンドウを隠す
  924. @help_window.visible = false
  925. # スキルウィンドウを有効化
  926. @skill_window.active = true
  927. @skill_window.visible = true
  928. end
  929. #--------------------------------------------------------------------------
  930. # ● エネミー選択開始
  931. #--------------------------------------------------------------------------
  932. alias xrxs19_start_enemy_select start_enemy_select
  933. def start_enemy_select
  934. return if start_select_check
  935. xrxs19_start_enemy_select
  936. end
  937. #--------------------------------------------------------------------------
  938. # ● アクター選択開始
  939. #--------------------------------------------------------------------------
  940. alias xrxs19_start_actor_select start_actor_select
  941. def start_actor_select
  942. return if start_select_check
  943. xrxs19_start_actor_select
  944. end
  945. #--------------------------------------------------------------------------
  946. # ● 選択開始時のチェック
  947. #--------------------------------------------------------------------------
  948. def start_select_check
  949. # "全体化"、"全域化"、"対象ランダム"の判定
  950. case @active_battler.current_action.kind
  951. when 0 # 攻撃
  952. # ここで「攻撃」使用者の武器IDを保持しておく
  953. @active_battler.current_action.weapon_id = @active_battler.weapon_id
  954. # チェックに戻る
  955. if equip_weapon_element_include?(@active_battler, ELEMENT_NAME_AREA_ENEMY_ALL) or
  956. equip_weapon_element_include?(@active_battler, ELEMENT_NAME_AREA_WHOLE) or
  957. equip_weapon_element_include?(@active_battler, ELEMENT_NAME_AREA_ENEMY_RAND) or
  958. equip_weapon_element_include?(@active_battler, ELEMENT_NAME_AREA_ACTOR_RAND) or
  959. equip_weapon_element_include?(@active_battler, ELEMENT_NAME_AREA_ALL_RANDOM)
  960. phase3_next_actor
  961. return true
  962. end
  963. when 1 # スキル
  964. if skill_element_include?(@skill, ELEMENT_NAME_AREA_ENEMY_ALL) or
  965. skill_element_include?(@skill, ELEMENT_NAME_AREA_WHOLE) or
  966. skill_element_include?(@skill, ELEMENT_NAME_AREA_ENEMY_RAND) or
  967. skill_element_include?(@skill, ELEMENT_NAME_AREA_ACTOR_RAND) or
  968. skill_element_include?(@skill, ELEMENT_NAME_AREA_ALL_RANDOM)
  969. end_skill_select
  970. phase3_next_actor
  971. return true
  972. end
  973. when 2 # アイテム
  974. if item_element_include?(@item, ELEMENT_NAME_AREA_ENEMY_ALL) or
  975. item_element_include?(@item, ELEMENT_NAME_AREA_WHOLE) or
  976. item_element_include?(@item, ELEMENT_NAME_AREA_ENEMY_RAND) or
  977. item_element_include?(@item, ELEMENT_NAME_AREA_ACTOR_RAND) or
  978. item_element_include?(@item, ELEMENT_NAME_AREA_ALL_RANDOM)
  979. end_item_select
  980. phase3_next_actor
  981. return true
  982. end
  983. end
  984. return false
  985. end
  986. #--------------------------------------------------------------------------
  987. # ● フレーム更新 (メインフェーズ ステップ 1 : アクション準備)
  988. #--------------------------------------------------------------------------
  989. alias xrxs19_update_phase4_step1 update_phase4_step1
  990. def update_phase4_step1
  991. # 初期化
  992. @phase4_act_continuation = 0
  993. @phase4_act_times_max = 1
  994. @skill = nil
  995. @weapon_id = nil
  996. # 戻す
  997. xrxs19_update_phase4_step1
  998. end
  999. #--------------------------------------------------------------------------
  1000. # ● フレーム更新 (メインフェーズ ステップ 2 : アクション開始)
  1001. #--------------------------------------------------------------------------
  1002. alias xrxs19_update_phase4_step2 update_phase4_step2
  1003. def update_phase4_step2
  1004. #リレイズ判定
  1005. next_phase_ok = true
  1006. next_phase_ok = update_reraise_effect(@active_battler)
  1007. if !next_phase_ok
  1008. return
  1009. end
  1010. if next_phase_ok
  1011. # ステップ 2 へ
  1012. xrxs19_update_phase4_step2
  1013. end
  1014. end
  1015. #--------------------------------------------------------------------------
  1016. # ● 基本アクション 結果作成
  1017. #--------------------------------------------------------------------------
  1018. alias xrxs19_make_basic_action_result make_basic_action_result
  1019. def make_basic_action_result
  1020. # 攻撃の場合
  1021. if @active_battler.current_action.basic == 0
  1022. # 武器IDの取得
  1023. @weapon_id = @active_battler.is_a?(Game_Actor) ? @active_battler.weapon_id : 0
  1024. # 指定行動回数取得 ( "行動回数"が無い場合は 1 のまま )
  1025. weapon_element_include?(@weapon_id, ELEMENT_NAME_MOVE_TIMES)
  1026. @phase4_act_times_max = @one.to_i if @one != nil
  1027. # アニメーション ID を設定
  1028. @animation1_id = @active_battler.animation1_id
  1029. @animation2_id = @active_battler.animation2_id
  1030. # 初期化
  1031. @target_battlers = []
  1032. # 対象側バトラーの配列を設定
  1033. # "全体化"の判定
  1034. if equip_weapon_element_include?(@active_battler, ELEMENT_NAME_AREA_ENEMY_ALL)
  1035. # 行動側バトラーがエネミーの場合
  1036. if @active_battler.is_a?(Game_Enemy)
  1037. if @active_battler.restriction == 3
  1038. @target_battlers = $game_troop.enemies
  1039. else
  1040. @target_battlers = $game_party.actors
  1041. end
  1042. end
  1043. # 行動側バトラーがアクターの場合
  1044. if @active_battler.is_a?(Game_Actor)
  1045. if @active_battler.restriction == 3
  1046. @target_battlers = $game_party.actors
  1047. else
  1048. @target_battlers = $game_troop.enemies
  1049. end
  1050. end
  1051. end
  1052. # "敵ランダム"の判定
  1053. if equip_weapon_element_include?(@active_battler, ELEMENT_NAME_AREA_ENEMY_RAND)
  1054. # 行動側バトラーがエネミーの場合
  1055. if @active_battler.is_a?(Game_Enemy)
  1056. if @active_battler.restriction == 3
  1057. tb_array = $game_troop.enemies
  1058. else
  1059. tb_array = $game_party.actors
  1060. end
  1061. end
  1062. # 行動側バトラーがアクターの場合
  1063. if @active_battler.is_a?(Game_Actor)
  1064. if @active_battler.restriction == 3
  1065. tb_array = $game_party.actors
  1066. else
  1067. tb_array = $game_troop.enemies
  1068. end
  1069. end
  1070. @target_battlers = [tb_array[rand(tb_array.size)]]
  1071. end
  1072. # "味方ランダム"の判定
  1073. if equip_weapon_element_include?(@active_battler, ELEMENT_NAME_AREA_ACTOR_RAND)
  1074. # 行動側バトラーがエネミーの場合
  1075. if @active_battler.is_a?(Game_Enemy)
  1076. if @active_battler.restriction == 3
  1077. tb_array = $game_party.actors
  1078. else
  1079. tb_array = $game_troop.enemies
  1080. end
  1081. end
  1082. # 行動側バトラーがアクターの場合
  1083. if @active_battler.is_a?(Game_Actor)
  1084. if @active_battler.restriction == 3
  1085. tb_array = $game_troop.enemies
  1086. else
  1087. tb_array = $game_party.actors
  1088. end
  1089. end
  1090. @target_battlers = [tb_array[rand(tb_array.size)]]
  1091. end
  1092. # "全域化"の判定
  1093. if equip_weapon_element_include?(@active_battler, ELEMENT_NAME_AREA_WHOLE)
  1094. @target_battlers = $game_party.actors + $game_troop.enemies
  1095. @target_battlers -= [@active_battler]
  1096. for target in @target_battlers
  1097.   if target.dead? or target.hp0? or target.hidden
  1098.     @target_battlers -= [target]
  1099.   end
  1100. end
  1101. end

  1102. # "対象ランダム"の判定
  1103. if equip_weapon_element_include?(@active_battler, ELEMENT_NAME_AREA_ALL_RANDOM)
  1104. tb_array = $game_party.actors + $game_troop.enemies
  1105. @target_battlers = [tb_array[rand(tb_array.size)]]
  1106. end
  1107. if @target_battlers.size > 0
  1108. ##かばう追加
  1109. get_target_battlers_after_cover!(@target_battlers, @active_battler)
  1110. # 通常攻撃の効果を適用
  1111. for target in @target_battlers
  1112. target.attack_effect(@active_battler)
  1113. end
  1114. return
  1115. end
  1116. end
  1117. xrxs19_make_basic_action_result
  1118. end
  1119. #--------------------------------------------------------------------------
  1120. # ● スキルまたはアイテムの対象側バトラー設定
  1121. #--------------------------------------------------------------------------
  1122. alias xrxs19_set_target_battlers set_target_battlers
  1123. def set_target_battlers(scope)
  1124. case @active_battler.current_action.kind
  1125. when 1
  1126. # "全体化"の判定
  1127. if skill_element_include?(@skill, ELEMENT_NAME_AREA_ENEMY_ALL)
  1128. scope = 2
  1129. return
  1130. end
  1131. # "全域化"の判定
  1132. scope = 8 if skill_element_include?(@skill, ELEMENT_NAME_AREA_WHOLE)
  1133. # "敵ランダム"の判定
  1134. scope = 9 if skill_element_include?(@skill, ELEMENT_NAME_AREA_ENEMY_RAND)
  1135. # "味方ランダム"の判定
  1136. scope =10 if skill_element_include?(@skill, ELEMENT_NAME_AREA_ACTOR_RAND)
  1137. # "対象ランダム"の判定
  1138. scope =11 if skill_element_include?(@skill, ELEMENT_NAME_AREA_ALL_RANDOM)
  1139. when 2
  1140. # "全体化"の判定
  1141. if item_element_include?(@item, ELEMENT_NAME_AREA_ENEMY_ALL)
  1142. scope = 2
  1143. return
  1144. end
  1145. # "全域化"の判定
  1146. scope = 8 if item_element_include?(@item, ELEMENT_NAME_AREA_WHOLE)
  1147. # "敵ランダム"の判定
  1148. scope = 9 if item_element_include?(@item, ELEMENT_NAME_AREA_ENEMY_RAND)
  1149. # "味方ランダム"の判定
  1150. scope =10 if item_element_include?(@item, ELEMENT_NAME_AREA_ACTOR_RAND)
  1151. # "対象ランダム"の判定
  1152. scope =11 if item_element_include?(@item, ELEMENT_NAME_AREA_ALL_RANDOM)
  1153. end
  1154. case scope
  1155. when 8
  1156. @target_battlers = $game_party.actors + $game_troop.enemies
  1157. @target_battlers -= [@active_battler]
  1158. for target in @target_battlers
  1159.   if target.dead? or target.hp0? or target.hidden
  1160.     @target_battlers -= [target]
  1161.   end
  1162. end


  1163. return
  1164. when 9
  1165. # 行動側バトラーがエネミーの場合
  1166. if @active_battler.is_a?(Game_Enemy)
  1167. tb_array = $game_party.actors
  1168. target = $game_party.random_target_actor


  1169.          
  1170.          alive_num = 0 #同伴生还人数
  1171.          for actor in tb_array
  1172.            if actor.hp > 0
  1173.              alive_num += 1
  1174.            end
  1175.          end
  1176.          #人数大于1的话
  1177.          if alive_num > 0
  1178.            #重复随机选择己方角色,直到目标不是自己时停止
  1179.            until target != @target_battlers
  1180.              target = $game_party.random_target_enemy
  1181.            end
  1182.          end
  1183.          
  1184.          
  1185. end
  1186. # 行動側バトラーがアクターの場合
  1187. if @active_battler.is_a?(Game_Actor)
  1188. tb_array = $game_troop.enemies
  1189. target = $game_troop.random_target_enemy


  1190.          
  1191.          alive_num = 0 #同伴生还人数
  1192.          for enemy in tb_array
  1193.            if enemy.hp > 0
  1194.              alive_num += 1
  1195.            end
  1196.          end
  1197.          #人数大于1的话
  1198.          if alive_num > 0
  1199.            #重复随机选择己方角色,直到目标不是自己时停止
  1200.            until target != @target_battlers
  1201.              target = $game_party.random_target_actor
  1202.            end
  1203.          end
  1204.          
  1205.          
  1206. end
  1207. @target_battlers = [target]
  1208. #@target_battlers = [tb_array[rand(tb_array.size)]]
  1209. return
  1210. when 10
  1211. # 行動側バトラーがエネミーの場合
  1212. if @active_battler.is_a?(Game_Enemy)
  1213. tb_array = $game_troop.enemies
  1214. end
  1215. # 行動側バトラーがアクターの場合
  1216. if @active_battler.is_a?(Game_Actor)
  1217. tb_array = $game_party.actors
  1218. end
  1219. @target_battlers = [tb_array[rand(tb_array.size)]]
  1220. return
  1221. when 11
  1222. tb_array = $game_party.actors + $game_troop.enemies
  1223. @target_battlers = [tb_array[rand(tb_array.size)]]
  1224. return
  1225. end
  1226. # 呼び戻す
  1227. xrxs19_set_target_battlers(scope)
  1228. ##追加
  1229. get_target_battlers_after_cover!(@target_battlers, @active_battler)
  1230. end
  1231. #--------------------------------------------------------------------------
  1232. # ● スキルアクション 結果作成
  1233. #--------------------------------------------------------------------------
  1234. alias xrxs19_make_skill_action_result make_skill_action_result
  1235. def make_skill_action_result
  1236. # スキルを取得
  1237. @skill = $data_skills[@active_battler.current_action.skill_id]
  1238. # 既に一回以上行動している場合
  1239. if @phase4_act_continuation >= 1
  1240. # SP消費分のSPを回復させて擬似的にSPを減らさない
  1241. @active_battler.sp += @skill.sp_cost
  1242. else
  1243. # 指定行動回数取得
  1244. skill_element_include?(@skill, ELEMENT_NAME_MOVE_TIMES)
  1245. @phase4_act_times_max = @one.to_i if @one != nil
  1246. # 特殊効果:消費金額に順ずる固定ダメージ
  1247. if skill_element_include?(@skill, "金钱投掷")
  1248. # ゴールドウィンドウを作成
  1249. if @gold_window == nil or @gold_window.visible == false
  1250. @gold_window = Window_Gold.new
  1251. @gold_window.x = 640 - @gold_window.width
  1252. @gold_window.y = 64
  1253. @gold_window.opacity = 160
  1254. @gold_window.visible = true
  1255. end
  1256. end
  1257. # HP消費スキルの場合
  1258. if skill_element_include?(@skill, ELEMENT_NAME_HP_COST)
  1259. # HPが足りるか判定
  1260. if @active_battler.hp <= @skill.sp_cost
  1261. # 足りない場合
  1262. # ステップ 1 に移行
  1263. @phase4_step = 1
  1264. return
  1265. end
  1266. # SP消費分のSPを回復させて擬似的にSPを減らさない(最大値を超えて回復)
  1267. @active_battler.hp0_ban = true
  1268. @active_battler.sp += @skill.sp_cost
  1269. # 戻す
  1270. xrxs19_make_skill_action_result
  1271. # HPを消費
  1272. @active_battler.hp -= @skill.sp_cost
  1273. # HP/SPの制限の解除
  1274. @active_battler.hp0_ban = false
  1275. return
  1276. end
  1277. end
  1278. xrxs19_make_skill_action_result
  1279. ##追加
  1280. make_cover_skill_action_result()
  1281. end
  1282. #--------------------------------------------------------------------------
  1283. # ● フレーム更新 (メインフェーズ ステップ 3 : 行動側アニメーション)
  1284. #--------------------------------------------------------------------------
  1285. alias xrxs19_update_phase4_step3 update_phase4_step3
  1286. def update_phase4_step3
  1287. # 既に一回以上行動している場合
  1288. if @phase4_act_continuation >= 1
  1289. @active_battler.current_action.basic = 0  
  1290. @active_battler.animation_id = @active_battler.animation1_id

  1291. # ステップ 4 に移行
  1292. @phase4_step = 4
  1293. @wait_count = 0
  1294. return
  1295. end
  1296. xrxs19_update_phase4_step3
  1297. # ちからためメッセージ表示。
  1298. for target in @target_battlers
  1299. if !target.action_message.nil?
  1300. #@help_window.set_text(target.action_message, 1)
  1301. target.action_message = nil
  1302. end
  1303. end
  1304. end
  1305. #--------------------------------------------------------------------------
  1306. # ● フレーム更新 (メインフェーズ ステップ 4 : 対象側アニメーション)
  1307. #--------------------------------------------------------------------------
  1308. alias xrxs19_update_phase4_step4 update_phase4_step4
  1309. def update_phase4_step4
  1310. # 武器投擲時、「武器のアニメーション」を対象に使う
  1311. if skill_element_include?(@skill, "武器投掷")
  1312. @animation2_id = $data_weapons[@active_battler.current_action.basic].animation2_id
  1313. end
  1314. # ゴールドウィンドウを更新
  1315. @gold_window.refresh if @gold_window != nil
  1316. if skill_element_include?(@skill, "变身")
  1317. tb_array = @target_battlers
  1318. @target_battlers = [@active_battler]
  1319. xrxs19_update_phase4_step4
  1320. @target_battlers = tb_array
  1321. else
  1322. xrxs19_update_phase4_step4
  1323. end
  1324. # かばわれたメンバーのアニメーション
  1325. for target in @target_battlers
  1326. if target.current_friend != nil
  1327. target.current_friend.animation_id = COVER_ANIMATION_ID
  1328. end
  1329. end
  1330. # 既に一回以上行動している場合
  1331. if @phase4_act_continuation >= 1
  1332. @wait_count = 0
  1333. end
  1334. end
  1335. #--------------------------------------------------------------------------
  1336. # ● フレーム更新 (メインフェーズ ステップ 5 : ダメージ表示)
  1337. #--------------------------------------------------------------------------
  1338. alias xrxs19_update_phase4_step5 update_phase4_step5
  1339. def update_phase4_step5
  1340. # 呼び戻す
  1341. xrxs19_update_phase4_step5
  1342. # かばわれたメンバーのダメージ
  1343. for target in @target_battlers
  1344. if target.current_friend != nil
  1345. target.current_friend.damage_pop = true
  1346. #かばっている状態の初期化
  1347. target.current_friend = nil
  1348. end
  1349. end
  1350. # 生存確認
  1351. target_still_left = false
  1352. for target in @target_battlers
  1353. # ターゲットが生き残っているか判別
  1354. target_still_left = true if !target.dead?
  1355. # 戦闘不能時で、変身を解除
  1356. if target.dead? and target.metamor_target != nil
  1357. target.animation_id = 17 # 戦闘不能変身解除時のアニメーションID
  1358. target.animation_hit = true
  1359. target.battler_name = target.battler_name_original
  1360. target.metamor_target = nil
  1361. end
  1362. end
  1363. # ダメージ表示
  1364. if @active_battler.damage != nil
  1365. @active_battler.damage_pop = true
  1366. end
  1367. # 変身対象のバトラーグラフィックをコピー
  1368. if skill_element_include?(@skill, "变身")
  1369. if @active_battler.metamor_target != nil
  1370. @active_battler.battler_name = @active_battler.metamor_target.battler_name
  1371. else
  1372. @active_battler.battler_name = @active_battler.battler_name_original
  1373. end
  1374. end
  1375. # ターゲットの敵への処理
  1376. for target in @target_battlers
  1377. # スティール結果メッセージ表示。ただし、複数ターゲットの表示は不可能
  1378. if !target.effect_message.nil?
  1379. #@help_window.set_text(target.effect_message, 1)
  1380. target.effect_message = nil
  1381. end
  1382. end
  1383. # 行動した回数のカウントを 1 加算
  1384. @phase4_act_continuation += 1
  1385. # 実行済み行動回数が、指定行動回数に達したかを判別
  1386. if @phase4_act_continuation < @phase4_act_times_max
  1387. # 達していない場合
  1388. # 生存している場合、続ける。
  1389. if target_still_left
  1390. # 指定行動回数に満たない場合は繰り返す為、ステップ 2 に移行
  1391. @phase4_step = 2
  1392. @wait_count = 0
  1393. # スキル使用中の場合はヘルプウィンドウを隠すのをやめる
  1394. if @active_battler.current_action.kind == 1
  1395. @help_window.visible = false  
  1396. #@help_window.visible = true
  1397. end
  1398. end
  1399. else
  1400. # 達した場合
  1401. # 敵が生存、かつ skillが"派生"属性を持つ場合
  1402. if target_still_left and
  1403. (skill_element_include?(@skill, ELEMENT_NAME_DERIVER) or
  1404. (@weapon_id != nil and equip_weapon_element_include?(@active_battler, ELEMENT_NAME_DERIVER)))
  1405. if @one.to_i > 0
  1406. # 回数をリセット
  1407. @phase4_act_continuation = 0
  1408. @phase4_act_times_max = 1
  1409. # 武器攻撃ではなくなるため @weapon_id を nil 化
  1410. @weapon_id = nil
  1411. # 新しいスキルID
  1412. @active_battler.current_action.kind = 1
  1413. @active_battler.current_action.skill_id = @one.to_i
  1414. # ステップ 2 に移行
  1415. @phase4_step = 2
  1416. @wait_count = 0
  1417. end
  1418. end
  1419. end
  1420. # ゴールドウィンドウを隠す
  1421. @gold_window.visible = false if @gold_window != nil
  1422. end
  1423. #--------------------------------------------------------------------------
  1424. # ● フレーム更新 (メインフェーズ ステップ 6 : リレイズ表示→リフレッシュ)
  1425. #--------------------------------------------------------------------------
  1426. alias xrxs19_update_phase4_step6 update_phase4_step6
  1427. def update_phase4_step6
  1428. next_phase_ok = true
  1429. #リレイズ判定
  1430. for enemy in $game_troop.enemies
  1431. next_phase_ok = update_reraise_effect(enemy)
  1432. if !next_phase_ok
  1433. return
  1434. end
  1435. end
  1436. for actor in $game_party.actors
  1437. next_phase_ok = update_reraise_effect(actor)
  1438. if !next_phase_ok
  1439. return
  1440. end
  1441. end
  1442. if next_phase_ok
  1443. xrxs19_update_phase4_step6
  1444. end
  1445. end
  1446. #===================================================
  1447. #リレイズエフェクト
  1448. #===================================================
  1449. def update_reraise_effect(battler)
  1450. if battler.reraised
  1451. case battler.reraise_state
  1452. when 0
  1453. battler.reraise_state = 1 # コラプス待ち
  1454. @wait_count = 16
  1455. return false
  1456. when 1
  1457. battler.reraise_state = 2 # 復活アニメーション
  1458. ##IDは好きなアニメーションIDを指定
  1459. battler.animation_id = RERAISE_ANIMATION_ID
  1460. @wait_count = 8
  1461. return false#
  1462. when 2
  1463. #復活処理
  1464. battler.hp = battler.maxhp * RERAISE_HP_PERCENT / 100 + RERAISE_HP
  1465. battler.reraise_state = 3 #アピアーアニメーション
  1466. @wait_count = 8
  1467. return false#
  1468. when 3
  1469. battler.reraise_state = 0 #終了?通常処理に戻る
  1470. battler.reraised = false #フラグを初期値へ
  1471. @status_window.refresh
  1472. return true
  1473. end
  1474. else
  1475. return true
  1476. end
  1477. end
  1478. #--------------------------------------------------------------------------
  1479. # ● アフターバトルフェーズ開始
  1480. #--------------------------------------------------------------------------
  1481. alias xrxs19_update_phase5 update_phase5
  1482. def update_phase5
  1483. next_phase_ok = false
  1484. # 次のアクターへ
  1485. @phase5_i = -1 if @phase5_i == nil
  1486. @phase5_i += 1
  1487. if @phase5_i < $game_party.actors.size
  1488. actor = $game_party.actors[@phase5_i]
  1489. # 変身状態の味方がいるか判別し、それを解除する
  1490. if actor.metamor_target != nil
  1491. actor.animation_id = 17 # 戦闘終了変身解除時のアニメーションID
  1492. actor.animation_hit = true
  1493. actor.battler_name = actor.battler_name_original
  1494. actor.metamor_target = nil
  1495. # ステータスウィンドウをリフレッシュ
  1496. @status_window.refresh
  1497. # アニメーションの長さにかかわらず、最低 4 フレーム待つ
  1498. @wait_count = 4
  1499. end
  1500. else
  1501. next_phase_ok = true
  1502. end
  1503. if next_phase_ok
  1504. xrxs19_update_phase5
  1505. end
  1506. end
  1507. #--------------------------------------------------------------------------
  1508. # ● 行動順序作成
  1509. #--------------------------------------------------------------------------
  1510. alias xrxs19_make_action_orders make_action_orders
  1511. def make_action_orders
  1512. xrxs19_make_action_orders
  1513. # 優先度の大きい順 (同値の場合は素早さの速い順) に並び替え
  1514. @action_battlers.sort! do |a, b|
  1515. if a.current_action.speed_priority > b.current_action.speed_priority
  1516. -1
  1517. elsif a.current_action.speed_priority < b.current_action.speed_priority
  1518. +1
  1519. elsif a.current_action.speed > b.current_action.speed
  1520. -1
  1521. elsif a.current_action.speed < b.current_action.speed
  1522. +1
  1523. else
  1524. 0 # a <=> b
  1525. end
  1526. end
  1527. end
  1528. #--------------------------------------------------------------------------
  1529. # ● バトル終了
  1530. #--------------------------------------------------------------------------
  1531. alias xrxs19_battle_end battle_end
  1532. def battle_end(result)
  1533. for i in 0...$game_party.actors.size
  1534. actor = $game_party.actors[i]
  1535. # 変身状態の味方がいるか判別し、それを解除する
  1536. if actor.metamor_target != nil
  1537. actor.battler_name = actor.battler_name_original
  1538. actor.metamor_target = nil
  1539. end
  1540. end
  1541. xrxs19_battle_end(result)
  1542. end
  1543. end
  1544. #=============================================================================
  1545. # ◇ スティール
  1546. #=============================================================================
  1547. class Game_Battler
  1548. #--------------------------------------------------------------------------
  1549. # ● 公開インスタンス変数
  1550. #--------------------------------------------------------------------------
  1551. attr_accessor :effect_message
  1552. #--------------------------------------------------------------------------
  1553. # ● オブジェクト初期化
  1554. #--------------------------------------------------------------------------
  1555. alias before_steal_original_battler_initialize initialize
  1556. def initialize
  1557. before_steal_original_battler_initialize()
  1558. @effect_message = nil
  1559. @steal_skill_id = $data_system.elements.index(STEAL_SKILL_ELEMENT_NAME)
  1560. end
  1561. end
  1562. class Game_Enemy < Game_Battler
  1563. #--------------------------------------------------------------------------
  1564. # ● オブジェクト初期化
  1565. #--------------------------------------------------------------------------
  1566. alias before_steal_original_enemy_initialize initialize
  1567. def initialize(troop_id, member_index)
  1568. before_steal_original_enemy_initialize(troop_id, member_index)
  1569. @item_possession = true
  1570. end
  1571. #===================================================
  1572. #
  1573. #===================================================
  1574. def name
  1575. name = $data_enemies[@enemy_id].name.split(/-/)[0]
  1576. if !name.nil?
  1577. return name = name.strip()
  1578. else
  1579. return ''
  1580. end
  1581. end
  1582. #===================================================
  1583. #ノーマルアイテムの指定 
  1584. #エネミーネームに -n種類 ID 個数(-na 10 10) と入れて指定。
  1585. #種類は、i(アイテム) w(武器) a(防具)のいずれか一つ
  1586. #個数は省略可能、自動で1扱い。
  1587. #また、ドロップアイテムと同一にしたい場合は
  1588. #エネミーネームに -nd 個数(-nd 2) と入れて指定。
  1589. #個数は省略可能、自動で1扱い。
  1590. #===================================================

  1591. def normal_item
  1592. return get_item_from_name("n")#オプション"n"の文字列から取得
  1593. end

  1594. #===================================================
  1595. #レアアイテムの指定 
  1596. #エネミーネームに -r種類 ID 個数(-na 10 10) と入れて指定。
  1597. #種類は、i(アイテム) w(武器) a(防具)のいずれか一つ
  1598. #個数は省略可能、自動で1扱い。
  1599. #また、ドロップアイテムと同一にしたい場合は
  1600. #エネミーネームに -rd 個数(-nd 2) と入れて指定。
  1601. #個数は省略可能、自動で1扱い。
  1602. #===================================================

  1603. def rare_item
  1604. return get_item_from_name("r")#オプション"r"の文字列から取得
  1605. end

  1606. #===================================================
  1607. #*Nameからアイテムを抜き出す処理
  1608. #===================================================
  1609. def get_item_from_name(opt)
  1610. names = $data_enemies[@enemy_id].name.split(/-/)
  1611. if names.size > 1
  1612. for i in 1...names.size
  1613. if names[i][0,1] != opt
  1614. next
  1615. end

  1616. names[i].sub!(/^.(.*)/){$1}
  1617. ary = names[i].split(/ /)

  1618. if ary[0][0,1] == "g"
  1619. cgy = "g"
  1620. id = 0
  1621. if ary[1].nil?
  1622. ary[1] = "1"
  1623. elsif ary[1].sub!(/^([0-9]+)/){$1}.nil?
  1624. ary[1] = "1"
  1625. end
  1626. possession = {"Category"=>cgy, "ID"=>id, "Num"=>ary[1].to_i}
  1627. return possession

  1628. elsif ary[0][0,1] == "d"
  1629. cgy = ""
  1630. id = 0
  1631. if self.item_id != 0
  1632. cgy = "i"
  1633. id = self.item_id
  1634. elsif self.weapon_id != 0
  1635. cgy = "w"
  1636. id = self.weapon_id
  1637. elsif self.armor_id != 0
  1638. cgy = "a"
  1639. id = self.armor_id
  1640. else
  1641. return nil
  1642. end

  1643. if ary[1].nil?
  1644. ary[1] = "1"
  1645. elsif ary[1].sub!(/^([0-9]+)/){$1}.nil?
  1646. ary[1] = "1"
  1647. end
  1648. possession = {"Category"=>cgy, "ID"=>id, "Num"=>ary[1].to_i}
  1649. return possession

  1650. elsif !ary[0].sub!(/^([iwa])/){$1}.nil? && !ary[1].sub!(/^([0-9]+)/){$1}.nil?
  1651. if ary[2].nil? || ary[2].sub!(/^([0-9]+)/){$1}.nil?
  1652. ary[2] = "1"
  1653. end
  1654. possession = {"Category"=>ary[0], "ID"=>ary[1].to_i, "Num"=>ary[2].to_i}
  1655. return possession

  1656. end
  1657. end
  1658. end
  1659. return nil
  1660. end

  1661. #===================================================
  1662. #スティールエフェクト
  1663. #===================================================

  1664. def steal_effect(user, skill) # 引数skillを追加

  1665. pos = self.normal_item

  1666. if !@item_possession || pos.nil?
  1667. @effect_message = "没有东西可偷。"
  1668. Audio.se_play("Audio/SE/cgsys20", 100, 100)
  1669. $am = "没有东西可偷。"
  1670. #self.damage = "Miss"
  1671. return false
  1672. end

  1673. #盗み成功判定 アジリティが同一で50%、2倍で100%
  1674. if rand(100) <= ((user.agi+0.01)/(self.agi+0.01))*100/2
  1675. r_pos = self.rare_item
  1676. #レアアイテム判定
  1677. if !r_pos.nil? && rand(10) <= 1
  1678. pos = r_pos
  1679. end

  1680. case pos["Category"]
  1681. when "i"
  1682. item = $data_items[pos["ID"]]
  1683. if item.nil?
  1684. #print "这个物品不存在!"
  1685. Audio.se_play("Audio/SE/cgsys20", 100, 100)
  1686. $am = "这个物品不存在!"
  1687. return false
  1688. end
  1689. $game_party.gain_item(item.id, pos["Num"])
  1690. when "w"
  1691. item = $data_weapons[pos["ID"]]
  1692. if item.nil?
  1693. #print "这个物品不存在!"
  1694. Audio.se_play("Audio/SE/cgsys20", 100, 100)
  1695. $am = "这个物品不存在!"
  1696. return false
  1697. end
  1698. $game_party.gain_weapon(item.id, pos["Num"])
  1699. when "a"
  1700. item = $data_armors[pos["ID"]]
  1701. if item.nil?
  1702. #print "这个物品不存在!"
  1703. Audio.se_play("Audio/SE/cgsys20", 100, 100)
  1704. $am = "这个物品不存在!"
  1705. return false
  1706. end
  1707. $game_party.gain_armor(item.id, pos["Num"])
  1708. when "g"
  1709. # ゴールド獲得
  1710. $game_party.gain_gold(pos["Num"])
  1711. end

  1712. if pos["Category"] == "g"
  1713. @effect_message = "#{pos["Num"]}#{$data_system.words.gold}偷到!"
  1714. Audio.se_play("Audio/SE/cgsys20", 100, 100)
  1715. $am = "偷到#{pos["Num"]}#{$data_system.words.gold}!"
  1716. else
  1717. @effect_message = "#{item.name}#{pos["Num"]}个偷到!"
  1718. $am = "偷到#{pos["Num"]}个#{item.name}!"
  1719. end
  1720. @item_possession = false

  1721. self.damage = "Steal!" if self.damage == "Miss"
  1722. return true
  1723. else
  1724. @effect_message = "没有东西可偷???"
  1725. Audio.se_play("Audio/SE/cgsys20", 100, 100)
  1726. $am = "没有东西可偷???"
  1727. #self.damage = "Miss
  1728. return false
  1729. end

  1730. return false # 念のためfalse返す処理追加
  1731. # 多分なくてもifの結果(false)が返ると思うけど…
  1732. end
  1733. end
  1734. #=============================================================================
  1735. # ■ ライブラ スキル実装スクリプト 2004/09/24 - 0.1α
  1736. #=============================================================================
  1737. class Game_Battler
  1738. #--------------------------------------------------------------------------
  1739. # ● 追加公開インスタンス変数
  1740. #--------------------------------------------------------------------------
  1741. attr_accessor :libla_reserve # ライブラ予約
  1742. #--------------------------------------------------------------------------
  1743. # ● 初期化
  1744. #--------------------------------------------------------------------------
  1745. alias before_libra_initialize initialize

  1746. def initialize
  1747. before_libra_initialize
  1748. # 「ライブラ」属性のID取得
  1749. @libra_element_id = $data_system.elements.index(LIBLA_SKILL_ELEMENT_NAME)
  1750. @libra_element_id = 0 if @libra_element_id.nil?
  1751. # 今回の行動フェイズでライブラを受けたかどうかフラグ、初期化
  1752. @libla_reserve = false
  1753. end
  1754. #--------------------------------------------------------------------------
  1755. # ● スキルの効果適用
  1756. # user : 使用者 (バトラー)
  1757. # skill: スキル
  1758. #--------------------------------------------------------------------------
  1759. alias before_libra_skill_effect skill_effect
  1760. def skill_effect(user, skill)
  1761. #「ライブラ」スキルかどうかの判定。
  1762. if skill.element_set.include?(@libra_element_id)
  1763. # 命中率を適用する場合は下のif文のコメントを外してください
  1764. #if rand(100) < skill.hit
  1765. # このバトラーがエネミーなら情報ウィンドウを表示する
  1766. if self.is_a?(Game_Enemy)
  1767. self.libla_reserve = true
  1768. end
  1769. # 命中率を適用する場合は下のelse~endのコメントを外してください
  1770. #else
  1771. # self.damage = "Miss"
  1772. #end
  1773. # 普通のスキル判定は行わない。
  1774. return true
  1775. else
  1776. return before_libra_skill_effect(user, skill)
  1777. end
  1778. end
  1779. end
  1780. #==============================================================================
  1781. # ■ Scene_Battle
  1782. #==============================================================================
  1783. class Scene_Battle
  1784. #--------------------------------------------------------------------------
  1785. # ● フレーム更新 (メインフェーズ ステップ 5 : ダメージ表示)
  1786. #--------------------------------------------------------------------------
  1787. alias before_libra_update_phase4_step5 update_phase4_step5
  1788. def update_phase4_step5
  1789. # ダメージ表示
  1790. for target in @target_battlers
  1791. if target.libla_reserve
  1792. libra_window = Window_EnemyStatus.new(target)
  1793. loop do
  1794. # ゲーム画面を更新
  1795. Graphics.update
  1796. # 入力情報を更新
  1797. Input.update
  1798. # ボタンが押されたら情報ウィンドウを閉じてループを中断
  1799. if Input.trigger?(Input::C) or Input.trigger?(Input::B)
  1800. libra_window.dispose
  1801. libra_window = nil
  1802. break
  1803. end
  1804. end
  1805. end
  1806. # ライブラ予約フラグを解除
  1807. target.libla_reserve = false
  1808. end
  1809. before_libra_update_phase4_step5
  1810. end
  1811. end
  1812. #==============================================================================
  1813. # ■ Window_EnemyStatus
  1814. #------------------------------------------------------------------------------
  1815. #  エネミーのステータスを表示するステータスウィンドウです。
  1816. #==============================================================================
  1817. class Window_EnemyStatus < Window_Base
  1818. #--------------------------------------------------------------------------
  1819. # ● オブジェクト初期化
  1820. # enemy : エネミー
  1821. #--------------------------------------------------------------------------
  1822. def initialize(enemy)
  1823. super(0, 64, 640, 256)
  1824. self.contents = Bitmap.new(width - 32, height - 32)
  1825. self.back_opacity = 127
  1826. @enemy = enemy
  1827. refresh
  1828. end
  1829. #--------------------------------------------------------------------------
  1830. # ● リフレッシュ
  1831. #--------------------------------------------------------------------------
  1832. def refresh
  1833. self.contents.clear
  1834. draw_enemy_name(@enemy, 4, 0)
  1835. #draw_enemy_state(@enemy, 4, 48)
  1836. draw_enemy_hp(@enemy,196, 48, 172)
  1837. draw_enemy_sp(@enemy,196, 72, 172)
  1838. draw_enemy_parameter(@enemy, 4, 120, 0)
  1839. draw_enemy_parameter(@enemy, 4, 144, 1)
  1840. draw_enemy_parameter(@enemy, 4, 168, 2)
  1841. draw_enemy_parameter(@enemy, 4, 192, 7)
  1842. draw_enemy_parameter(@enemy,196, 120, 3)
  1843. draw_enemy_parameter(@enemy,196, 144, 4)
  1844. draw_enemy_parameter(@enemy,196, 168, 5)
  1845. draw_enemy_parameter(@enemy,196, 192, 6)
  1846. self.contents.font.color = system_color
  1847. self.contents.draw_text(384, 24, 80, 32, "EXP")

  1848. if @enemy.gold != 0
  1849. self.contents.draw_text(384, 48, 80, 32, "等级")
  1850. #self.contents.draw_text(384, 48, 80, 32, "金钱")
  1851. end

  1852. self.contents.draw_text(384, 96, 96, 32, "战利品")
  1853. self.contents.draw_text(384, 144, 96, 32, "偷窃物")
  1854. self.contents.font.color = normal_color
  1855. self.contents.draw_text(384 + 80, 24, 84, 32, @enemy.exp.to_s, 2)

  1856. if @enemy.gold != 0
  1857. self.contents.draw_text(384 + 80, 48, 84, 32, @enemy.gold.to_s, 2)
  1858. #self.contents.draw_text(384 + 80, 48, 84, 32, @enemy.gold.to_s, 2)
  1859. end

  1860. draw_item_name(get_enemy_item(@enemy,1), 384 + 16, 120)
  1861. draw_item_name(get_enemy_item(@enemy,2), 384 + 16, 168)
  1862. draw_item_name(get_enemy_item(@enemy,3), 384 + 16, 192)
  1863. end
  1864. #--------------------------------------------------------------------------
  1865. # ○ アイテムの取得
  1866. #--------------------------------------------------------------------------
  1867. def get_enemy_item( enemy, type )
  1868. case type
  1869. when 1:
  1870. if enemy.item_id != nil and enemy.item_id != 0
  1871. return $data_items[enemy.item_id]
  1872. elsif enemy.weapon_id != nil and enemy.weapon_id != 0
  1873. return $data_weapons[enemy.weapon_id]
  1874. elsif enemy.armor_id != nil and enemy.armor_id != 0
  1875. return $data_armors[enemy.armor_id]
  1876. else
  1877. return nil
  1878. end
  1879. when 2:
  1880. info = enemy.get_item_from_name("n")
  1881. return nil if info == nil
  1882. case info["Category"]
  1883. when "i"
  1884. return $data_items[info["ID"]]
  1885. when "w"
  1886. return $data_weapons[info["ID"]]
  1887. when "a"
  1888. return $data_armors[info["ID"]]
  1889. otherwise
  1890. return nil
  1891. end
  1892. when 3:
  1893. info = enemy.get_item_from_name("r")
  1894. return nil if info == nil
  1895. case info["Category"]
  1896. when "i"
  1897. return $data_items[info["ID"]]
  1898. when "w"
  1899. return $data_weapons[info["ID"]]
  1900. when "a"
  1901. return $data_armors[info["ID"]]
  1902. otherwise
  1903. return nil
  1904. end
  1905. otherwise
  1906. return nil
  1907. end
  1908. end
  1909. #--------------------------------------------------------------------------
  1910. # ● 名前の描画
  1911. # enemy : エネミー
  1912. # x : 描画先 X 座標
  1913. # y : 描画先 Y 座標
  1914. #--------------------------------------------------------------------------
  1915. def draw_enemy_name(enemy, x, y)
  1916. self.contents.font.color = normal_color
  1917. self.contents.draw_text(x, y, 120, 32, enemy.name)
  1918. end
  1919. #--------------------------------------------------------------------------
  1920. # ● ステートの描画
  1921. # enemy : エネミー
  1922. # x : 描画先 X 座標
  1923. # y : 描画先 Y 座標
  1924. # width : 描画先の幅
  1925. #--------------------------------------------------------------------------
  1926. def draw_enemy_state(enemy, x, y, width = 120)
  1927. text = make_battler_state_text(enemy, width, true)
  1928. self.contents.font.color = enemy.hp == 0 ? knockout_color : normal_color
  1929. self.contents.draw_text(x, y, width, 32, text)
  1930. end
  1931. #--------------------------------------------------------------------------
  1932. # ● HP の描画
  1933. # enemy : エネミー
  1934. # x : 描画先 X 座標
  1935. # y : 描画先 Y 座標
  1936. # width : 描画先の幅
  1937. #--------------------------------------------------------------------------
  1938. def draw_enemy_hp(enemy, x, y, width = 144)
  1939. # 文字列 "HP" を描画
  1940. self.contents.font.color = system_color
  1941. self.contents.draw_text(x, y, 32, 32, $data_system.words.hp)
  1942. # MaxHP を描画するスペースがあるか計算
  1943. if width - 32 >= 108
  1944. hp_x = x + width - 108
  1945. flag = true
  1946. elsif width - 32 >= 48
  1947. hp_x = x + width - 48
  1948. flag = false
  1949. end
  1950. # HP を描画
  1951. self.contents.font.color = enemy.hp == 0 ? knockout_color :
  1952. enemy.hp <= enemy.maxhp / 4 ? crisis_color : normal_color
  1953. self.contents.draw_text(hp_x, y, 48, 32, enemy.hp.to_s, 2)
  1954. # MaxHP を描画
  1955. if flag
  1956. self.contents.font.color = normal_color
  1957. self.contents.draw_text(hp_x + 48, y, 12, 32, "/", 1)
  1958. self.contents.draw_text(hp_x + 60, y, 48, 32, enemy.maxhp.to_s)
  1959. end
  1960. end
  1961. #--------------------------------------------------------------------------
  1962. # ● SP の描画
  1963. # enemy : エネミー
  1964. # x : 描画先 X 座標
  1965. # y : 描画先 Y 座標
  1966. # width : 描画先の幅
  1967. #--------------------------------------------------------------------------
  1968. def draw_enemy_sp(enemy, x, y, width = 144)
  1969. # 文字列 "SP" を描画
  1970. self.contents.font.color = system_color
  1971. self.contents.draw_text(x, y, 32, 32, $data_system.words.sp)
  1972. # MaxSP を描画するスペースがあるか計算
  1973. if width - 32 >= 108
  1974. sp_x = x + width - 108
  1975. flag = true
  1976. elsif width - 32 >= 48
  1977. sp_x = x + width - 48
  1978. flag = false
  1979. end
  1980. # SP を描画
  1981. self.contents.font.color = enemy.sp == 0 ? knockout_color :
  1982. enemy.sp <= enemy.maxsp / 4 ? crisis_color : normal_color
  1983. self.contents.draw_text(sp_x, y, 48, 32, enemy.sp.to_s, 2)
  1984. # MaxSP を描画
  1985. if flag
  1986. self.contents.font.color = normal_color
  1987. self.contents.draw_text(sp_x + 48, y, 12, 32, "/", 1)
  1988. self.contents.draw_text(sp_x + 60, y, 48, 32, enemy.maxsp.to_s)
  1989. end
  1990. end
  1991. #--------------------------------------------------------------------------
  1992. # ● パラメータの描画
  1993. # enemy : エネミー
  1994. # x : 描画先 X 座標
  1995. # y : 描画先 Y 座標
  1996. # type : パラメータの種類 (0~6)
  1997. #--------------------------------------------------------------------------
  1998. def draw_enemy_parameter(enemy, x, y, type)
  1999. case type
  2000. when 0
  2001. parameter_name = $data_system.words.atk
  2002. parameter_value = enemy.atk
  2003. when 1
  2004. parameter_name = $data_system.words.pdef
  2005. parameter_value = enemy.pdef
  2006. when 2
  2007. parameter_name = $data_system.words.mdef
  2008. parameter_value = enemy.mdef
  2009. when 3
  2010. parameter_name = $data_system.words.str
  2011. parameter_value = enemy.str
  2012. when 4
  2013. parameter_name = $data_system.words.dex
  2014. parameter_value = enemy.dex
  2015. when 5
  2016. parameter_name = $data_system.words.agi
  2017. parameter_value = enemy.agi
  2018. when 6
  2019. parameter_name = $data_system.words.int
  2020. parameter_value = enemy.int
  2021. when 7
  2022. parameter_name = "闪躲"
  2023. parameter_value = enemy.eva
  2024. end
  2025. self.contents.font.color = system_color
  2026. self.contents.draw_text(x, y, 120, 32, parameter_name)
  2027. self.contents.font.color = normal_color
  2028. self.contents.draw_text(x + 120, y, 36, 32, parameter_value.to_s, 2)
  2029. end
  2030. end
  2031. #=============================================================================
  2032. # ◇ ちからため スキル実装スクリプト by 和希
  2033. #=============================================================================
  2034. class Game_Battler
  2035. #--------------------------------------------------------------------------
  2036. # ● 追加公開インスタンス変数
  2037. #--------------------------------------------------------------------------
  2038. attr_accessor :powerstock # 「ちからため」回数
  2039. attr_accessor :action_message # ヘルプウィンドウに表示する文字
  2040. #--------------------------------------------------------------------------
  2041. # ● 初期化
  2042. #--------------------------------------------------------------------------
  2043. alias before_powerstock_original_initialize initialize
  2044. def initialize
  2045. before_powerstock_original_initialize
  2046. @powerstock = 0
  2047. @powerstock_skill_id = $data_system.elements.index(POWERSTOCK_SKILL_ELEMENT_NAME)
  2048. @powerstock_skill_id = 0 if @powerstock_skill_id == nil
  2049. @effect_message = nil
  2050. end
  2051. #--------------------------------------------------------------------------
  2052. # ● 通常攻撃の効果適用
  2053. # attacker : 攻撃者 (バトラー)
  2054. #--------------------------------------------------------------------------
  2055. alias before_powerstock_original_attack_effect attack_effect
  2056. def attack_effect(attacker)
  2057. # 攻撃者が「ちからため」しているか?
  2058. if attacker.powerstock > 0
  2059. bool_powerstock = true
  2060. # 攻撃者の力を一時的に上昇させる
  2061. stock_attacker_str = attacker.str
  2062. attacker.str += ( stock_attacker_str * POWERSTOCK_BASE_RATE * attacker.powerstock ).to_i
  2063. # ヘルプメッセージに「ちからためx?」を出す
  2064. @action_message = POWERSTOCK_SKILL_ELEMENT_NAME
  2065. @action_message += " x"
  2066. @action_message += attacker.powerstock.to_s
  2067. # ストックを消す
  2068. attacker.powerstock = 0
  2069. else
  2070. bool_powerstock = false
  2071. end
  2072. # fukuyamaさん↓のミス発見ありがとうございました
  2073. result = before_powerstock_original_attack_effect(attacker)
  2074. # 力を上昇させていた場合、元に戻す
  2075. if bool_powerstock
  2076. attacker.str = stock_attacker_str
  2077. end
  2078. return result
  2079. end
  2080. #--------------------------------------------------------------------------
  2081. # ● スキルの効果適用
  2082. # user : 使用者 (バトラー)
  2083. # skill: スキル
  2084. #--------------------------------------------------------------------------
  2085. alias before_powerstock_original_skill_effect skill_effect
  2086. def skill_effect(user, skill)
  2087. #「ちからため」スキルかどうかの判定。
  2088. if skill.element_set.include?(@powerstock_skill_id)
  2089. # 命中率を適用する場合は下のif文のコメントを外してください
  2090. #if rand(100) < skill.hit
  2091. @powerstock += 1 # 「ちからため」回数を1増やす
  2092. # ダメージに"Charge"をセットする
  2093. self.damage = "Charge"
  2094. # 命中率を適用する場合は下のelse~endのコメントを外してください
  2095. #else
  2096. # self.damage = "Miss"
  2097. #end
  2098. # 普通のスキル判定は行わない。
  2099. return true
  2100. else
  2101. return before_powerstock_original_skill_effect(user, skill)
  2102. end
  2103. end
  2104. end
  2105. #=============================================================================
  2106. # ◇ 見切りステート by 和希
  2107. #=============================================================================
  2108. class Game_Battler
  2109. # 見切りステートの名前
  2110. ABANDONS_SKILL_STATE_NAME = "断念"
  2111. #--------------------------------------------------------------------------
  2112. # ● 通常攻撃の効果適用
  2113. #--------------------------------------------------------------------------
  2114. alias before_abandons_original_attack_effect attack_effect

  2115. def attack_effect(attacker)
  2116. # 見切りステートが存在するか?
  2117. if nil != (abandons_skill = get_abandons_id)
  2118. # 見切りステートにかかっているか?
  2119. if self.state?(abandons_skill)
  2120. ## 避ける!
  2121. # クリティカルフラグをクリア
  2122. self.critical = false
  2123. # ダメージに "Avoid!!" を設定
  2124. self.damage = "Avoid!!"
  2125. # 見切りステートを解除
  2126. self.remove_state(abandons_skill,true)
  2127. # メソッド終了
  2128. return false
  2129. end
  2130. end
  2131. # 見切りステート状態でなかった時は通常どおり
  2132. return before_abandons_original_attack_effect(attacker)
  2133. end
  2134. #--------------------------------------------------------------------------
  2135. # ● 見切りステータスのID取得
  2136. #--------------------------------------------------------------------------
  2137. def get_abandons_id
  2138. result = nil
  2139. if @abandons_status_id == nil
  2140. for i in 1 ... $data_states.size
  2141. if $data_states[i].name[/\A#{ABANDONS_SKILL_STATE_NAME}\Z/]
  2142. result = $data_states[i].id
  2143. break
  2144. end
  2145. end
  2146. @abandons_status_id = ( result != nil ? result : 0 )
  2147. elsif @abandons_status_id > 0
  2148. result = @abandons_status_id
  2149. end
  2150. return result
  2151. end
  2152. end
  2153. #=============================================================================
  2154. # ◇ かばう by シムナフ
  2155. #=============================================================================
  2156. #==============================================================================
  2157. # ■ Scene_Battle
  2158. #==============================================================================
  2159. class Scene_Battle
  2160. #追加
  2161. attr_reader :active_battler
  2162. #ここまで
  2163. ##新メソッド
  2164. def make_cover_skill_action_result
  2165. cover_num = 0
  2166. cover_bool = false
  2167. for i in @skill.element_set
  2168. if !($data_system.elements[i][/^#{ELEMENT_NAME_COVER}/].nil?)
  2169. cover_bool = true
  2170. elm_num = $data_system.elements[i][/([+-]*[0-9]+)/]
  2171. if !(elm_num.nil?)
  2172. cover_num += elm_num.to_i
  2173. end
  2174. end
  2175. end

  2176. if cover_bool.equal?(true)
  2177. ##自分のみが対象だった場合は味方からランダムに1人をかばう
  2178. if @target_battlers.include?(@active_battler)
  2179. if @target_battlers.size == 1
  2180. if @target_battlers[0].is_a?(Game_Actor)
  2181. friends = $game_party.actors.dup
  2182. friends.delete(@active_battler)
  2183. @target_battlers = [friends[rand(friends.size)]]
  2184. elsif @target_battlers[0].is_a?(Game_Enemy)
  2185. friends = $game_troop.enemies.dup
  2186. friends.delete(@active_battler)
  2187. @target_battlers = [friends[rand(friends.size)]]
  2188. end
  2189. else
  2190. @target_battlers.delete(@active_battler)
  2191. end
  2192. end

  2193. @active_battler.covered_friends = @target_battlers.dup
  2194. @active_battler.add_state(get_cover_state_id())##ステート付加時にデフォルト回数で発動回数が設定される
  2195. if (cover_num > 0)
  2196. @active_battler.cover_remain = cover_num#発動回数が有った場合はその回数で上書き
  2197. end
  2198. for target in @target_battlers
  2199. target.damage = COVER_EFFECT_CHAR
  2200. end
  2201. end
  2202. end
  2203. ##ここまで
  2204. end

  2205. class Game_Party
  2206. ##追加エイリアス
  2207. include Cover_Module
  2208. #--------------------------------------------------------------------------
  2209. # ● 対象アクターのスムーズな決定
  2210. # actor_index : アクターインデックス
  2211. #--------------------------------------------------------------------------

  2212. alias before_cover_original_smooth_target_actor smooth_target_actor

  2213. def smooth_target_actor(actor_index)
  2214. if $scene.is_a?(Scene_Battle)
  2215. battler = $scene.active_battler()
  2216. else
  2217. battler = nil
  2218. end

  2219. target = [before_cover_original_smooth_target_actor(actor_index)]
  2220. get_target_battlers_after_cover!(target, battler)

  2221. return target[0]
  2222. end
  2223. ##ここまで
  2224. end

  2225. class Game_Troop
  2226. ##追加エイリアス
  2227. include Cover_Module
  2228. #--------------------------------------------------------------------------
  2229. # ● 対象エネミーのスムーズな決定
  2230. # enemy_index : エネミーインデックス
  2231. #--------------------------------------------------------------------------

  2232. alias before_cover_original_smooth_target_enemy smooth_target_enemy

  2233. def smooth_target_enemy(enemy_index)
  2234. if $scene.is_a?(Scene_Battle)
  2235. battler = $scene.active_battler()
  2236. else
  2237. battler = nil
  2238. end

  2239. target = [before_cover_original_smooth_target_enemy(enemy_index)]
  2240. get_target_battlers_after_cover!(target, battler)

  2241. return target[0]
  2242. end
  2243. ##ここまで
  2244. end


  2245. #==============================================================================
  2246. # ◇ 付加属性名称判定モジュール
  2247. #==============================================================================
  2248. module Check_ElementName_Set
  2249. #--------------------------------------------------------------------------
  2250. # ● スキルが指定名の属性を持つか判定
  2251. #--------------------------------------------------------------------------
  2252. def skill_element_include?(skill, element_name)
  2253. @one = @two = nil
  2254. return false if skill == nil or !skill.is_a?(RPG::Skill)
  2255. for i in skill.element_set
  2256. if $data_system.elements[i] =~ /#{element_name}([+-]?[0-9]+)?(%)?/
  2257. @one = $1
  2258. @two = $2
  2259. return true
  2260. end
  2261. end
  2262. return false
  2263. end
  2264. #--------------------------------------------------------------------------
  2265. # ● アイテムが指定名の属性を持つか判定
  2266. #--------------------------------------------------------------------------
  2267. def item_element_include?(item, element_name)
  2268. @one = @two = nil
  2269. return false if item == nil or !item.is_a?(RPG::Item)
  2270. for i in item.element_set
  2271. if $data_system.elements[i] =~ /#{element_name}([+-]?[0-9]+)?(%)?/
  2272. @one = $1
  2273. @two = $2
  2274. return true
  2275. end
  2276. end
  2277. return false
  2278. end
  2279. #--------------------------------------------------------------------------
  2280. # ● 武器が指定名の属性を持つか判定
  2281. #--------------------------------------------------------------------------
  2282. def weapon_element_include?(weapon_id, element_name)
  2283. @one = @two = nil
  2284. return false if weapon_id == nil or weapon_id <= 0
  2285. for i in $data_weapons[weapon_id].element_set
  2286. if $data_system.elements[i] =~ /#{element_name}([+-]?[0-9]+)?(%)?/
  2287. @one = $1
  2288. @two = $2
  2289. return true
  2290. end
  2291. end
  2292. return false
  2293. end
  2294. #--------------------------------------------------------------------------
  2295. # ● 防具が指定名の属性を持つか判定
  2296. #--------------------------------------------------------------------------
  2297. def armor_element_include?(armor_id, element_name)
  2298. @one = @two = nil
  2299. return false if armor_id == nil or armor_id <= 0
  2300. for i in $data_armors[armor_id].guard_element_set
  2301. if $data_system.elements[i] =~ /#{element_name}([+-]?[0-9]+)?(%)?/
  2302. @one = $1
  2303. @two = $2
  2304. return true
  2305. end
  2306. end
  2307. return false
  2308. end
  2309. #--------------------------------------------------------------------------
  2310. # ● 防具が指定名の属性を持つ場合その後に付く接尾テキストを取得
  2311. #--------------------------------------------------------------------------
  2312. def armor_element_suftext(armor_id, element_name)
  2313. return nil if armor_id == nil or armor_id <= 0
  2314. for i in $data_armors[armor_id].guard_element_set
  2315. if $data_system.elements[i] =~ /#{element_name}(.*)/
  2316. return $1
  2317. end
  2318. end
  2319. return nil
  2320. end
  2321. #--------------------------------------------------------------------------
  2322. # ● アクターが指定名の属性を持つ武器を装備しているかか判定
  2323. #--------------------------------------------------------------------------
  2324. def equip_weapon_element_include?(actor, element_name)
  2325. @one = @two = nil
  2326. return false if !actor.is_a?(Game_Actor)
  2327. return false if actor.weapon_id == nil or actor.weapon_id <= 0
  2328. bool = false
  2329. one_total = 0
  2330. for i in $data_weapons[actor.weapon_id].element_set
  2331. if $data_system.elements[i] =~ /#{element_name}([+-]?[0-9]+)?(%)?/
  2332. one_total += $1.to_i
  2333. @two = $2
  2334. bool = true
  2335. end
  2336. end
  2337. # 武器管理システムXC.が導入されている場合
  2338. if $xrxs24_weapon_property_system_work
  2339. for i in [PROPERTY_ELEMENT_GRANT_1st, PROPERTY_ELEMENT_GRANT_2nd,
  2340. PROPERTY_ELEMENT_GRANT_3rd, PROPERTY_ELEMENT_GRANT_4th]
  2341. if $data_system.elements[actor.weapon_property[i]] =~ /#{element_name}([+-]?[0-9]+)?(%)?/
  2342. one_total += $1.to_i
  2343. @two = $2
  2344. bool = true
  2345. end
  2346. end
  2347. end
  2348. @one = one_total
  2349. return bool
  2350. end
  2351. #--------------------------------------------------------------------------
  2352. # ● アクターが指定名の属性を持つ武器/防具を装備中か判定 数値の合計も保持
  2353. #--------------------------------------------------------------------------
  2354. def actor_element_equip?(actor, element_name)
  2355. one_total = 0
  2356. bool = false
  2357. return false if !actor.is_a?(Game_Actor)
  2358. weapon = $data_weapons[actor.weapon_id]
  2359. armor1 = $data_armors[actor.armor1_id]
  2360. armor2 = $data_armors[actor.armor2_id]
  2361. armor3 = $data_armors[actor.armor3_id]
  2362. armor4 = $data_armors[actor.armor4_id]
  2363. if equip_weapon_element_include?(actor, element_name)
  2364. one_total += @one.to_i
  2365. bool = true
  2366. end
  2367. if armor_element_include?(armor1.id, element_name)
  2368. one_total += @one.to_i
  2369. bool = true
  2370. end
  2371. if armor_element_include?(armor2.id, element_name)
  2372. one_total += @one.to_i
  2373. bool = true
  2374. end
  2375. if armor_element_include?(armor3.id, element_name)
  2376. one_total += @one.to_i
  2377. bool = true
  2378. end
  2379. if armor_element_include?(armor4.id, element_name)
  2380. one_total += @one.to_i
  2381. bool = true
  2382. end
  2383. @one = one_total
  2384. return bool
  2385. end
  2386. end
  2387. #=============================================================================
  2388. # ◇ かばうModule
  2389. #=============================================================================
  2390. ####以下新規追加Module
  2391. module Cover_Module
  2392. #--------------------------------------------------------------------------
  2393. # ● かばう 後のターゲット配列生成
  2394. #--------------------------------------------------------------------------
  2395. def get_target_battlers_after_cover!(target_battlers, active_battler = nil)
  2396. #HP割合の低い順にソート
  2397. #target_battlers.sort_by!{|b| (b.hp.to_f/b.maxhp.to_f)}
  2398. target_battlers.sort!{|a,b| (a.hp.to_f/a.maxhp.to_f) <=> (b.hp.to_f/b.maxhp.to_f)}
  2399. #HP割合の多い順にソート
  2400. actors = $game_party.actors.sort_by{|b| (b.hp.to_f/b.maxhp.to_f)}.reverse
  2401. enemies = $game_troop.enemies.sort_by{|b| (b.hp.to_f/b.maxhp.to_f)}.reverse

  2402. for i in 0...target_battlers.size
  2403. if target_battlers[i].is_a?(Game_Actor)
  2404. for actor in actors
  2405. new_target = get_target_after_cover(active_battler,target_battlers[i],actor)
  2406. if !new_target.equal?(target_battlers[i]) && new_target.current_friend.nil? #かばう人がすでにかばっていた場合かばえない
  2407. #new_target.effect_message = "#{new_target.name}为#{target_battlers[i].name}抵挡了攻击!"
  2408. $am = "#{new_target.name}为#{target_battlers[i].name}抵挡了攻击!"
  2409. new_target.current_friend = target_battlers[i]
  2410. new_target.current_friend.damage = COVER_EFFECT_CHAR
  2411. target_battlers[i] = new_target
  2412. break
  2413. end
  2414. end
  2415. end

  2416. if target_battlers[i].is_a?(Game_Enemy)
  2417. for enemy in enemies
  2418. new_target = get_target_after_cover(active_battler,target_battlers[i],enemy)
  2419. if !new_target.equal?(target_battlers[i]) && new_target.current_friend.nil? #かばう人がすでにかばっていた場合かばえない
  2420. #new_target.effect_message = "#{new_target.name}为#{target_battlers[i].name}抵挡了攻击!"
  2421. $am = "#{new_target.name}为#{target_battlers[i].name}抵挡了攻击!"
  2422. new_target.current_friend = target_battlers[i]
  2423. new_target.current_friend.damage = COVER_EFFECT_CHAR
  2424. target_battlers[i] = new_target
  2425. break
  2426. end
  2427. end
  2428. end
  2429. end
  2430. #ターゲット重複を排除する(かばった人が2度ダメージを受けない)
  2431. target_battlers.uniq!()
  2432. #「かばう」ステートの解除判定
  2433. for target in target_battlers
  2434. if !target.current_friend.nil?
  2435. #かばう 残り回数がなくなった場合
  2436. target.cover_remain -= 1
  2437. if target.cover_remain <= 0
  2438. target.remove_state(get_cover_state_id())
  2439. target.cover_remain = 0
  2440. end
  2441. end
  2442. end
  2443. end
  2444. #--------------------------------------------------------------------------
  2445. # ● かばう の発動判定
  2446. #--------------------------------------------------------------------------
  2447. def get_target_after_cover(battler, target, coverer)
  2448. #味方からのターゲットは庇わない
  2449. if battler.is_a?(Game_Actor)
  2450. if target.is_a?(Game_Actor)
  2451. return target
  2452. end
  2453. end
  2454. if battler.is_a?(Game_Enemy)
  2455. if target.is_a?(Game_Enemy)
  2456. return target
  2457. end
  2458. end
  2459. #庇う人が動けない時は庇わない
  2460. if !(coverer.movable? && coverer.exist?)
  2461. return target
  2462. end
  2463. #庇う人が かばう のステートになっている時のみ
  2464. if !coverer.state?(get_cover_state_id())
  2465. return target
  2466. end
  2467. #ターゲットが既に他の人を庇っている時は無効
  2468. if target.state?(get_cover_state_id())
  2469. return target
  2470. end
  2471. #ターゲットと庇う人が同じの場合は無効
  2472. if target.equal?(coverer)
  2473. return target
  2474. end
  2475. #発動確率判定
  2476. if !(rand(100) <= COVER_EFFECT_PERCENT)
  2477. return taget
  2478. end
  2479. #ターゲットのHP割合判定
  2480. if !(100.0*target.hp.to_f/target.maxhp.to_f <= COVER_HP_PERCENT)
  2481. return target
  2482. end
  2483. #「かばっている味方配列」が空だったら、全ての味方を庇う
  2484. if coverer.covered_friends.size.zero?
  2485. return coverer
  2486. else
  2487. for covered_friend in coverer.covered_friends
  2488. if target.equal?(covered_friend)
  2489. return coverer
  2490. end
  2491. end
  2492. end
  2493. return target
  2494. end
  2495. #--------------------------------------------------------------------------
  2496. # ● かばう のStateID
  2497. #--------------------------------------------------------------------------
  2498. def get_cover_state_id
  2499. result = nil
  2500. if @cover_status_id == nil
  2501. for i in 1 ... $data_states.size
  2502. if $data_states[i].name[/\A#{STATE_NAME_COVER}\Z/]
  2503. result = $data_states[i].id
  2504. break
  2505. end
  2506. end
  2507. @cover_status_id = ( result != nil ? result : 0 )
  2508. elsif @cover_status_id > 0
  2509. result = @cover_status_id
  2510. end
  2511. return result
  2512. end
  2513. end
  2514. ####Module End
  2515. #//////////////////////////////////////////////////////////////////////////////
  2516. # ◇ インクルード
  2517. #//////////////////////////////////////////////////////////////////////////////
  2518. module Check_ElementName_Set
  2519. include Fixed_PropertyNumber if $xrxs24_weapon_property_system_work
  2520. end
  2521. class Game_Battler
  2522. include Check_ElementName_Set
  2523. include Cover_Module
  2524. end
  2525. class Window_Item < Window_Selectable
  2526. include Check_ElementName_Set
  2527. end
  2528. class Scene_Battle
  2529. include Check_ElementName_Set
  2530. include Cover_Module
  2531. end
  2532. #==============================================================================
  2533. # ◇ RPG::再定義「"SP "を含む場合SPダメージとして色を変更」
  2534. #==============================================================================
  2535. module RPG
  2536. class Sprite < ::Sprite
  2537. alias xrxs19_damage damage
  2538. def damage(value, critical)
  2539. if value.is_a?(String) and value.include?($data_system.words.sp)
  2540. # 解放
  2541. dispose_damage
  2542. # 数値部分を抜き取る
  2543. value = value.scan(/[+-]?[0-9]+/)[0].to_i
  2544. # 表示文字列の設定
  2545. damage_string = $data_system.words.sp + " " + value.abs.to_s
  2546. # 描写
  2547. bitmap = Bitmap.new(160, 48)
  2548. #bitmap.font.name = "黑体"
  2549. bitmap.font.size = 32
  2550. bitmap.font.color.set(0, 0, 0)
  2551. bitmap.draw_text(-1, 12-1, 160, 36, damage_string, 1)
  2552. bitmap.draw_text(+1, 12-1, 160, 36, damage_string, 1)
  2553. bitmap.draw_text(-1, 12+1, 160, 36, damage_string, 1)
  2554. bitmap.draw_text(+1, 12+1, 160, 36, damage_string, 1)
  2555. if value < 0
  2556. bitmap.font.color.set(128, 255, 255)
  2557. else
  2558. bitmap.font.color.set(255, 176, 144)
  2559. end
  2560. bitmap.draw_text(0, 12, 160, 36, damage_string, 1)
  2561. if critical
  2562. bitmap.font.size = 20
  2563. bitmap.font.color.set(0, 0, 0)
  2564. bitmap.draw_text(-1, -1, 160, 20, "CRITICAL", 1)
  2565. bitmap.draw_text(+1, -1, 160, 20, "CRITICAL", 1)
  2566. bitmap.draw_text(-1, +1, 160, 20, "CRITICAL", 1)
  2567. bitmap.draw_text(+1, +1, 160, 20, "CRITICAL", 1)
  2568. bitmap.font.color.set(255, 255, 255)
  2569. bitmap.draw_text(0, 0, 160, 20, "CRITICAL", 1)
  2570. end
  2571. @_damage_sprite = ::Sprite.new(self.viewport)
  2572. @_damage_sprite.bitmap = bitmap
  2573. @_damage_sprite.ox = 80
  2574. @_damage_sprite.oy = 20
  2575. @_damage_sprite.x = self.x
  2576. @_damage_sprite.y = self.y - self.oy / 2
  2577. @_damage_sprite.z = 3000
  2578. @_damage_duration = 40
  2579. else
  2580. # 通常時?戻す
  2581. xrxs19_damage(value, critical)
  2582. end
  2583. end
  2584. end
  2585. end
复制代码





欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1