设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 1142|回复: 1
打印 上一主题 下一主题

[已经解决] 通过属性设定技能的二次发动

[复制链接]

Lv3.寻梦者

梦石
0
星屑
1293
在线时间
118 小时
注册时间
2017-7-14
帖子
148
跳转到指定楼层
1
发表于 2019-4-6 11:44:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
emmm...问题描述如题...想要通过定义一个属性来控制技能是否能发动两次...本来想学着定义敌人的二次行动同样在Scene_Battle 4中作出修改的==结果怎么改怎么报错...想请教一下各位...该如何通过属性定义设定技能的二次行动..

Lv3.寻梦者

梦石
0
星屑
1293
在线时间
118 小时
注册时间
2017-7-14
帖子
148
2
 楼主| 发表于 2019-4-9 13:09:39 | 只看该作者
emmm...找到了一个有关战斗技能特效的脚本完美的解决了二次&多次行动的问题...还附加了一堆有意思的效果...发上来分享一下吧==
RUBY 代码复制
  1. #==============================================================================
  2. # 本脚本来自[url]www.66RPG.com[/url],使用和转载请保留此信息
  3. #==============================================================================
  4.  
  5. # ▼▲▼ XRXS19. 特殊効果詰め合わせ:戦闘用 with 29 parts ver..18a ▼▲▼
  6. # by 桜雅 在土, 和希, シムナフ
  7. # 脚本摘自oz大乱斗(前作)
  8. #==============================================================================
  9. # ■ 以下内容定义各特技的属性名
  10. #==============================================================================
  11. class Game_Battler
  12.   RERAISE_STATE_NAME = /复活/           
  13.   LIBLA_SKILL_ELEMENT_NAME = "透视"     
  14.   POWERSTOCK_SKILL_ELEMENT_NAME = "聚气"
  15.   POWERSTOCK_BASE_RATE = 2.5            #——每回合聚气威力上升倍率
  16.   STEAL_SKILL_ELEMENT_NAME = "偷窃"
  17.   ELEMENT_NAME_SP_DAMAGE = "SP损伤"
  18.   ELEMENT_NAME_HP_DRAIN = "HP吸收"
  19.   ELEMENT_NAME_SP_DRAIN = "SP吸收"
  20.   ELEMENT_NAME_CRITICAL_HIT = "暴击率"
  21.   ELEMENT_NAME_CERTAIN_HIT = "必中"
  22.   ELEMENT_NAME_HP_COST = "HP消耗"
  23. end
  24. class Game_BattleAction
  25.   ELEMENT_NAME_SPEED_PRIORITY = "优先度"
  26. end
  27. class Scene_Battle
  28.   ELEMENT_NAME_HP_COST = "HP消耗"
  29.   ELEMENT_NAME_DERIVER = "派生"
  30.   ELEMENT_NAME_MOVE_TIMES = "行动回数"
  31.   ELEMENT_NAME_AREA_ENEMY_ALL = "全体化"
  32.   ELEMENT_NAME_AREA_WHOLE = "全域化"
  33.   ELEMENT_NAME_AREA_ENEMY_RAND = "敌方随机"
  34.   ELEMENT_NAME_AREA_ACTOR_RAND ="我方随机"
  35.   ELEMENT_NAME_AREA_ALL_RANDOM ="对象随机"
  36.   RERAISE_HP = 1
  37.   RERAISE_HP_PERCENT = 0
  38.   RERAISE_ANIMATION_ID = 26
  39. end
  40. module Cover_Module
  41.   ELEMENT_NAME_COVER = "援助"
  42.   STATE_NAME_COVER = "援助"
  43.   COVER_HP_PERCENT = 100
  44.   COVER_EFFECT_PERCENT = 100
  45.   COVER_EFFECT_CHAR = "Covered!"
  46.   COVER_ANIMATION_ID = 324
  47.   COVER_DEFAULT_NUMBER = 2
  48. end
  49. #==============================================================================
  50. $xrxs19_special_effections_set_work = true
  51. #--------------------------------------------------------------------------
  52. # ● 属性修正の計算?改
  53. #--------------------------------------------------------------------------
  54. class Game_Battler
  55. def elements_correct(element_set)
  56. # 無属性の場合 100 を返す
  57. return 100 if element_set == []
  58. # 与えられた属性のレートを全て乗算
  59. result = 100
  60. for i in element_set
  61. result *= self.element_rate(i) / 100.0
  62. end
  63. return result.to_i
  64. end
  65. end
  66. #==============================================================================
  67. # ■ Game_Battler
  68. #==============================================================================
  69. class Game_Battler
  70. #--------------------------------------------------------------------------
  71. # ● 追加公開インスタンス変数
  72. #--------------------------------------------------------------------------
  73. attr_accessor :reraise_state
  74. attr_accessor :reraised # リレイズしたかどうか
  75. attr_accessor :metamor_target # 変身対象
  76. attr_accessor :battler_name # バトラーグラフィック
  77. attr_reader :battler_name_original # バトラーグラフィック初期値
  78. attr_writer :hp0_ban # HP/SPの 0 化または最大制限の解除
  79. attr_writer :certain_hit # 必中受け(Trueだと攻撃を避けられない)
  80. attr_accessor :covered_friends #庇っている味方の配列
  81. attr_accessor :effect_message #
  82. attr_accessor :current_friend #かばっている味方
  83. attr_accessor :cover_remain #かばう可能な残り回数
  84. #--------------------------------------------------------------------------
  85. # ● 初期化
  86. #--------------------------------------------------------------------------
  87. alias xrxs19_battler_initialize initialize
  88. def initialize
  89. xrxs19_battler_initialize
  90. # 「かばう」用変数初期化
  91. @covered_friends = []
  92. @effect_message = nil
  93. @current_friend = nil
  94. @cover_remain = 0
  95. end
  96. #--------------------------------------------------------------------------
  97. # ● ステートの付加
  98. # state_id : ステート ID
  99. # force : 強制付加フラグ (オートステートの処理で使用)
  100. #--------------------------------------------------------------------------
  101. alias xrxs19_add_state add_state
  102. def add_state(state_id, force = false)
  103. xrxs19_add_state(state_id, force)
  104. # 「かばう」のステート付加の場合
  105. if state_id == get_cover_state_id()
  106. self.cover_remain = COVER_DEFAULT_NUMBER
  107. end
  108. end
  109. #--------------------------------------------------------------------------
  110. # ● HP の変更
  111. #--------------------------------------------------------------------------
  112. def hp=(hp)
  113. if @hp0_ban
  114. @hp = hp
  115. else
  116. @hp = [[hp, maxhp].min, 0].max
  117. # 戦闘不能を付加または解除
  118. for i in 1...$data_states.size
  119. if $data_states[i].zero_hp
  120. if self.dead?
  121. # 追加
  122. for x in 1...$data_states.size
  123. # ステート名は変更可。
  124. if $data_states[x].name[RERAISE_STATE_NAME] != nil
  125. reraise_id = $data_states[x].id
  126. break
  127. end
  128. end
  129. # リレイズ復活
  130. if reraise_id != nil && self.state?(reraise_id)
  131. self.remove_state(reraise_id)
  132. @reraised = true
  133. # 戦闘不能マイナスステートに設定されているものを解除
  134. if $data_states[i].minus_state_set != []
  135. for j in $data_states[i].minus_state_set
  136. remove_state(j)
  137. end
  138. end
  139. elsif
  140. # ここまで
  141. add_state(i)
  142. end
  143. else
  144. remove_state(i)
  145. end
  146. end
  147. end
  148. end
  149. end
  150. #--------------------------------------------------------------------------
  151. # ● SP の変更
  152. #--------------------------------------------------------------------------
  153. def sp=(sp)
  154. if @hp0_ban
  155. @sp = sp
  156. else
  157. @sp = [[sp, maxsp].min, 0].max
  158. end
  159. end
  160. #--------------------------------------------------------------------------
  161. # ● ステート [攻撃を回避できない] 判定
  162. #--------------------------------------------------------------------------
  163. alias xrxs19_cant_evade? cant_evade?
  164. def cant_evade?
  165. return true if @certain_hit
  166. return xrxs19_cant_evade?
  167. end
  168. #--------------------------------------------------------------------------
  169. # ● 通常攻撃の効果適用
  170. #--------------------------------------------------------------------------
  171. alias xrxs19_attack_effect attack_effect# alias したものは effect_it 内で使用
  172. def attack_effect(attacker)
  173. # 通常攻撃の場合、skill = nil で呼ぶ
  174. return effect_it(attacker, nil)
  175. end
  176. #--------------------------------------------------------------------------
  177. # ● スキルの効果適用
  178. #--------------------------------------------------------------------------
  179. alias xrxs19_skill_effect skill_effect # alias したものは effect_it 内で使用
  180. def skill_effect(user, skill)
  181. # スキルの場合は、skill を指定して呼ぶ
  182. return effect_it(user, skill)
  183. end
  184. #--------------------------------------------------------------------------
  185. # ● 効果適用
  186. #--------------------------------------------------------------------------
  187. def effect_it(user, skill = nil)
  188. # 実行前の数値を保持
  189. last_hp = self.hp
  190. last_sp = self.sp
  191. @hp0_ban = true
  192. # 武器IDの取得
  193. weapon_id = user.is_a?(Game_Actor) ? user.weapon_id : 0
  194. # 特殊効果:必中
  195. if skill != nil and skill_element_include?(skill, ELEMENT_NAME_CERTAIN_HIT)
  196. self.certain_hit = true
  197. elsif skill == nil and equip_weapon_element_include?(user, ELEMENT_NAME_CERTAIN_HIT)
  198. self.certain_hit = true
  199. end
  200. # 基本実行、skill が nil かどうかで通常攻撃とスキルを分別
  201. if skill == nil
  202. bool = xrxs19_attack_effect(user)
  203. else
  204. bool = xrxs19_skill_effect(user, skill)
  205. end
  206. # ダメージ測定
  207. damage = last_hp - self.hp
  208. # 必中の解除
  209. self.certain_hit = false
  210. # 特殊効果:スティール/アイテム奪取
  211. if skill != nil and skill_element_include?(skill, STEAL_SKILL_ELEMENT_NAME)
  212. self.steal_effect(user, skill) if self.is_a?(Game_Enemy)
  213. elsif skill == nil and equip_weapon_element_include?(user, STEAL_SKILL_ELEMENT_NAME)
  214. self.steal_effect(user, skill) if self.is_a?(Game_Enemy)
  215. end
  216. # 特殊効果:対象に変身
  217. if skill != nil and skill_element_include?(skill, "变身")
  218. if user.metamor_target == nil
  219. if self.metamor_target == nil
  220. # 変身状態で無い場合、変身
  221. user.metamor_target = self
  222. else
  223. # 対象が変身状態の場合、対象の変身対象に変身する。
  224. user.metamor_target = self.metamor_target
  225. end
  226. else
  227. # 変身状態の場合、変身を解除する
  228. user.metamor_target = user
  229. end
  230. # 自分への変身を禁止
  231. user.metamor_target = nil if user.metamor_target == user
  232. # 対象のダメージ表示を消す
  233. self.damage = nil if self.damage == "Miss"
  234. # HP/SP最大値変更への対応
  235. @hp0_ban = false
  236. user.hp = user.hp
  237. user.sp = user.sp
  238. end
  239. # 特殊効果:武器を投げる
  240. if (skill != nil and skill_element_include?(skill, "武器投掷"))
  241. # 投擲武器の取得
  242. throw_weapon = $data_weapons[user.current_action.basic]
  243. # 武器の消費
  244. if $xrxs24_weapon_property_system_work
  245. $game_party.lose_weapon(throw_weapon.id, user.current_action.basic_ex)
  246. else
  247. $game_party.lose_weapon(throw_weapon.id, 1)
  248. end
  249. # ダメージの変更
  250. self.hp += damage if bool
  251. damage = throw_weapon.atk
  252. if weapon_element_include?(throw_weapon.id, "投掷威力")
  253. damage = damage * @one.to_i / 100
  254. end
  255. self.damage = damage
  256. self.hp -= self.damage
  257. bool = true
  258. end
  259. # 特殊効果:消費金額に順ずる固定ダメージ
  260. if skill != nil and skill_element_include?(skill, "金钱投掷")
  261. # ゴールドの消費
  262. last_gold = $game_party.gold
  263. $game_party.gain_gold(-1 * ($game_party.gold * skill.variance / 100 + skill.power))
  264. self.hp += damage if bool
  265. damage = last_gold - $game_party.gold
  266. self.damage = damage
  267. self.hp -= self.damage
  268. bool = true
  269. end
  270. # 基本実行でfalse(Miss等)の場合、ここで終了する
  271. # つまり、この上までにダメージに関係なく実行される特殊効果をいれて
  272. # これより下はダメージに関係する特殊効果を入れる。
  273. # "武器投擲"と"銭投げ"はMissでも金額を消費するため上に。
  274. return false if bool == false
  275. # 特殊効果:防御能力の判定
  276. if damage > 0 and self.guarding?
  277. # 特殊効果:防御能力 2(強防御)
  278. if battler_element_rank?(self, "防御能力") == 2
  279. damage /= 2
  280. self.damage -= damage
  281. self.hp += damage
  282. end
  283. # 特殊効果:防御能力 1(無効防御)
  284. if battler_element_rank?(self, "防御能力") == 1
  285. self.hp += damage
  286. damage = 0
  287. self.damage = damage
  288. end
  289. end
  290. # 特殊効果:必殺確実クリティカル
  291. if (skill != nil and skill_element_include?(skill, ELEMENT_NAME_CRITICAL_HIT)) or
  292. (skill == nil and equip_weapon_element_include?(user, ELEMENT_NAME_CRITICAL_HIT)) and damage > 0
  293. if self.critical
  294. self.critical = false
  295. damage /= 2
  296. self.damage -= damage
  297. self.hp += damage
  298. end
  299. if @one == nil or rand(100) < @one.to_i
  300. self.critical = true
  301. self.hp -= damage
  302. damage *= 2
  303. self.damage = damage
  304. end
  305. end
  306. # 特殊効果:使用者の 最大HP - 現在HP 固定ダメージ
  307. if skill != nil and skill_element_include?(skill, "固定HP差分")
  308. self.hp += damage
  309. damage = user.maxhp - user.hp
  310. self.damage = damage
  311. self.hp -= self.damage
  312. self.critical = false # 固定ダメージ故クリティカルを禁止
  313. end
  314. # 特殊効果:使用者の 現在HP 固定ダメージ
  315. if skill != nil and skill_element_include?(skill, "现在HP损伤")
  316. self.hp += damage
  317. damage = user.hp
  318. self.damage = damage
  319. self.hp -= self.damage
  320. self.critical = false # 固定ダメージ故クリティカルを禁止
  321. end
  322. # 特殊効果:現在HPに順ずる固定ダメージ
  323. if skill != nil and skill_element_include?(skill, "固定现在HP")
  324. self.hp += damage
  325. damage = self.hp * skill.variance / 100 + skill.power
  326. damage *= -1 if skill.power < 0
  327. self.damage = damage
  328. self.hp -= self.damage
  329. self.critical = false # 固定ダメージ故クリティカルを禁止
  330. end
  331. # 特殊効果:最大HPに順ずる固定ダメージ
  332. if skill != nil and skill_element_include?(skill, "固定最大HP")
  333. self.hp += damage
  334. damage = self.maxhp * @one.to_i / 100
  335. damage *= -1 if skill.power < 0
  336. self.damage = damage
  337. self.hp -= self.damage
  338. self.critical = false # 固定ダメージ故クリティカルを禁止
  339. end
  340. # 特殊効果:HPではなくSPにダメージを与える
  341. if (skill != nil and skill_element_include?(skill, ELEMENT_NAME_SP_DAMAGE)) or
  342. (skill == nil and equip_weapon_element_include?(user, ELEMENT_NAME_SP_DAMAGE))
  343. self.hp += damage
  344. self.sp -= damage
  345. self.damage = "SP " + damage.to_s
  346. # このタイミングで戦闘不能判定
  347. @hp0_ban = false
  348. self.sp = self.sp
  349. real_damage = last_sp - self.sp
  350. else
  351. # このタイミングで戦闘不能判定
  352. @hp0_ban = false
  353. self.hp = self.hp
  354. real_damage = last_hp - self.hp
  355. end
  356. # 使用者のHP/SPもリセット
  357. user.hp = user.hp
  358. user.sp = user.sp
  359. # 特殊効果:与えたダメージを自分のHPとして吸収
  360. if (skill != nil and skill_element_include?(skill, ELEMENT_NAME_HP_DRAIN)) or
  361. (skill == nil and equip_weapon_element_include?(user, ELEMENT_NAME_HP_DRAIN))
  362. user.damage = -real_damage * @one.to_i / 100
  363. user.hp -= user.damage
  364. end
  365. # 特殊効果:与えたダメージを自分のSPとして吸収
  366. if (skill != nil and skill_element_include?(skill, ELEMENT_NAME_SP_DRAIN)) or
  367. (skill == nil and equip_weapon_element_include?(user, ELEMENT_NAME_SP_DRAIN))
  368. user.damage = -real_damage * @one.to_i / 100
  369. user.sp -= user.damage
  370. user.damage = "SP " + user.damage.to_s
  371. end
  372. return true
  373. end
  374. #--------------------------------------------------------------------------
  375. # ● バトラーの指定名の属性のランクを判定
  376. #--------------------------------------------------------------------------
  377. def battler_element_rank?(battler, element_name)
  378. for i in 1..$data_system.elements.size
  379. if $data_system.elements[i] == element_name
  380. if self.is_a?(Game_Actor)
  381. return $data_classes[battler.class_id].element_ranks[i]
  382. else
  383. return $data_enemies[battler.id].element_ranks[i]
  384. end
  385. end
  386. end
  387. return 3
  388. end
  389. #--------------------------------------------------------------------------
  390. # ● MaxHP の取得
  391. #--------------------------------------------------------------------------
  392. alias xrxs19_maxhp maxhp
  393. def maxhp
  394. if !@metamor_target.nil?
  395. return @metamor_target.maxhp
  396. end
  397. xrxs19_maxhp
  398. end
  399. #--------------------------------------------------------------------------
  400. # ● MaxSP の取得
  401. #--------------------------------------------------------------------------
  402. alias xrxs19_maxsp maxsp
  403. def maxsp
  404. if !@metamor_target.nil?
  405. return @metamor_target.maxsp
  406. end
  407. xrxs19_maxsp
  408. end
  409. #--------------------------------------------------------------------------
  410. # ● 腕力の取得
  411. #--------------------------------------------------------------------------
  412. alias xrxs19_str str
  413. def str
  414. if !@metamor_target.nil?
  415. return @metamor_target.str
  416. end
  417. xrxs19_str
  418. end
  419. #--------------------------------------------------------------------------
  420. # ● 器用さの取得
  421. #--------------------------------------------------------------------------
  422. alias xrxs19_dex dex
  423. def dex
  424. if !@metamor_target.nil?
  425. return @metamor_target.dex
  426. end
  427. xrxs19_dex
  428. end
  429. #--------------------------------------------------------------------------
  430. # ● 素早さの取得
  431. #--------------------------------------------------------------------------
  432. alias xrxs19_agi agi
  433. def agi
  434. if !@metamor_target.nil?
  435. return @metamor_target.agi
  436. end
  437. xrxs19_agi
  438. end
  439. #--------------------------------------------------------------------------
  440. # ● 魔力の取得
  441. #--------------------------------------------------------------------------
  442. alias xrxs19_int int
  443. def int
  444. if !@metamor_target.nil?
  445. return @metamor_target.int
  446. end
  447. xrxs19_int
  448. end
  449. #--------------------------------------------------------------------------
  450. # ● 攻撃力の取得
  451. #--------------------------------------------------------------------------
  452. alias xrxs19_atk atk
  453. def atk
  454. if !@metamor_target.nil?
  455. return @metamor_target.atk
  456. end
  457. xrxs19_atk
  458. end
  459. #--------------------------------------------------------------------------
  460. # ● 物理防御の取得
  461. #--------------------------------------------------------------------------
  462. alias xrxs19_pdef pdef
  463. def pdef
  464. if !@metamor_target.nil?
  465. return @metamor_target.pdef
  466. end
  467. xrxs19_pdef
  468. end
  469. #--------------------------------------------------------------------------
  470. # ● 魔法防御の取得
  471. #--------------------------------------------------------------------------
  472. alias xrxs19_mdef mdef
  473. def mdef
  474. if !@metamor_target.nil?
  475. return @metamor_target.mdef
  476. end
  477. xrxs19_mdef
  478. end
  479. #--------------------------------------------------------------------------
  480. # ● 回避修正の取得
  481. #--------------------------------------------------------------------------
  482. alias xrxs19_eva eva
  483. def eva
  484. if !@metamor_target.nil?
  485. return @metamor_target.eva
  486. end
  487. xrxs19_eva
  488. end
  489. end
  490.  
  491. #==============================================================================
  492. # ■ Game_BattleAction
  493. #==============================================================================
  494. class Game_BattleAction
  495. #--------------------------------------------------------------------------
  496. # ● 公開インスタンス変数
  497. #--------------------------------------------------------------------------
  498. attr_accessor :speed_priority # スピード優先度
  499. attr_accessor :weapon_id # 武器 ID
  500. attr_accessor :basic_ex # 基本拡張(補助的に数値を保持)
  501. #--------------------------------------------------------------------------
  502. # ● クリア
  503. #--------------------------------------------------------------------------
  504. alias xrxs19_clear clear
  505. def clear
  506. @weapon_id = 0
  507. xrxs19_clear
  508. end
  509. #--------------------------------------------------------------------------
  510. # ● スキルの優先度取得
  511. #--------------------------------------------------------------------------
  512. def speed_priority
  513. if @kind == 0 and @basic == 0
  514. # 通常攻撃の場合
  515. elsif @kind == 1
  516. # スキルの場合
  517. return 0 if $data_skills[@skill_id] == nil
  518. for i in $data_skills[@skill_id].element_set
  519. if $data_system.elements[i] != nil
  520. if $data_system.elements[i] =~ /^#{ELEMENT_NAME_SPEED_PRIORITY}([+-]?[0-9]+)/
  521. return $1.to_i
  522. end
  523. end
  524. end
  525. end
  526. return 0
  527. end
  528. end
  529. #==============================================================================
  530. # ■ Game_Actor
  531. #==============================================================================
  532. class Game_Actor < Game_Battler
  533. #--------------------------------------------------------------------------
  534. # ● セットアップ
  535. #--------------------------------------------------------------------------
  536. alias xrxs19_setup setup
  537. def setup(actor_id)
  538. xrxs19_setup(actor_id)
  539. @reraised = false
  540. @reraise_state = 0
  541. @metamor_target = nil
  542. @battler_name_original = @battler_name
  543. end
  544. #--------------------------------------------------------------------------
  545. # ● MaxHP の取得
  546. #--------------------------------------------------------------------------
  547. alias xrxs19_maxhp maxhp
  548. def maxhp
  549. if !@metamor_target.nil?
  550. return @metamor_target.maxhp
  551. end
  552. xrxs19_maxhp
  553. end
  554. #--------------------------------------------------------------------------
  555. # ● スキルの使用可能判定
  556. #--------------------------------------------------------------------------
  557. alias xrxs19_skill_can_use? skill_can_use?
  558. def skill_can_use?(skill_id)
  559. # スキルを取得
  560. @skill = $data_skills[skill_id]
  561. # HP消費スキルの場合
  562. if skill_element_include?(@skill, ELEMENT_NAME_HP_COST) and @actor_id > 0
  563. # HP が足りない場合は使用不可
  564. if $data_skills[skill_id].sp_cost > self.hp
  565. return false
  566. end
  567. # SP消費量を回復させ、SP が足りない場合を回避(最大値を超えて回復)
  568. self.hp0_ban = true
  569. self.sp += @skill.sp_cost
  570. bool = xrxs19_skill_can_use?(skill_id)
  571. # SPを元に戻す
  572. self.sp -= @skill.sp_cost
  573. self.hp0_ban = false
  574. return bool
  575. else
  576. return xrxs19_skill_can_use?(skill_id)
  577. end
  578. end
  579. end
  580. #==============================================================================
  581. # ■ Game_Enemy
  582. #==============================================================================
  583. class Game_Enemy < Game_Battler
  584. #--------------------------------------------------------------------------
  585. # ● オブジェクト初期化
  586. #--------------------------------------------------------------------------
  587. alias xrxs19_initialize initialize
  588. def initialize(troop_id, member_index)
  589. xrxs19_initialize(troop_id, member_index)
  590. @reraised = false
  591. @reraise_state = 0
  592. @metamor_target = nil
  593. @battler_name_original = @battler_name
  594. end
  595. end
  596. #==============================================================================
  597. # ■ Window_Item
  598. #==============================================================================
  599. class Window_Item < Window_Selectable
  600. #--------------------------------------------------------------------------
  601. # ● オブジェクト初期化
  602. #--------------------------------------------------------------------------
  603. alias xrxs19_initialize initialize
  604. def initialize
  605. xrxs19_initialize
  606. refresh
  607. end
  608. #--------------------------------------------------------------------------
  609. # ● 値の受け渡し
  610. #--------------------------------------------------------------------------
  611. def set_itemkind(itemkind)
  612. @itemkind = itemkind
  613. refresh
  614. end
  615. #--------------------------------------------------------------------------
  616. # ● 値の受け渡し
  617. #--------------------------------------------------------------------------
  618. def set_restrict(restrict)
  619. @restrict = restrict
  620. refresh
  621. end
  622. #--------------------------------------------------------------------------
  623. # ● リフレッシュ
  624. #--------------------------------------------------------------------------
  625. alias xrxs19_refresh refresh
  626. def refresh
  627. if @itemkind != 11
  628. xrxs19_refresh
  629. return
  630. end
  631. # 11 = 制限:投擲武器のみ
  632. if self.contents != nil
  633. self.contents.dispose
  634. self.contents = nil
  635. end
  636. @data = []
  637. @data_id = []
  638. for i in 1...$data_weapons.size
  639. if $game_party.weapon_number(i) > 0
  640. @data.push($data_weapons[i]) if weapon_element_include?(i, "投掷威力")
  641. end
  642. end
  643. # 項目数が 0 でなければビットマップを作成し、全項目を描画
  644. @item_max = @data.size
  645. if @item_max > 0
  646. self.contents = Bitmap.new(width - 32, row_max * 32)
  647. for i in 0...@item_max
  648. draw_item(i)
  649. end
  650. end
  651. end
  652. #--------------------------------------------------------------------------
  653. # ● 項目の描画
  654. #--------------------------------------------------------------------------
  655. alias xrxs19_draw_item draw_item
  656. def draw_item(index)
  657. if @itemkind != 11
  658. xrxs19_draw_item(index)
  659. return
  660. end
  661. # 11 = 制限:投擲武器のみ
  662. item = @data[index]
  663. number = $game_party.weapon_number(item.id)
  664. self.contents.font.color = normal_color
  665. x = 4 + index % @column_max * (288 + 32)
  666. y = index / @column_max * 32
  667. rect = Rect.new(x, y, self.width / @column_max - 32, 32)
  668. self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
  669. bitmap = RPG::Cache.icon(item.icon_name)
  670. opacity = self.contents.font.color == normal_color ? 255 : 128
  671. self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
  672. self.contents.draw_text(x + 28, y, 212, 32, item.name, 0)
  673. self.contents.draw_text(x + 240, y, 16, 32, ":", 1)
  674. self.contents.draw_text(x + 256, y, 24, 32, number.to_s, 2)
  675. end
  676. end
  677. #==============================================================================
  678. # ■ Scene_Battle
  679. #==============================================================================
  680. class Scene_Battle
  681. #--------------------------------------------------------------------------
  682. # ● メイン処理
  683. #--------------------------------------------------------------------------
  684. alias xrxs19_main main
  685. def main
  686. @phase4_5_done = false
  687. xrxs19_main
  688. end
  689. #--------------------------------------------------------------------------
  690. # ● フレーム更新 (アクターコマンドフェーズ)
  691. #--------------------------------------------------------------------------
  692. alias xrxs19_update_phase3 update_phase3
  693. def update_phase3
  694. # 武器のみアイテムウィンドウが有効の場合
  695. if @item_window_weapons != nil and @item_window_weapons.visible
  696. update_phase3_item_window_weapons
  697. return
  698. end
  699. # 他
  700. xrxs19_update_phase3
  701. end
  702. #--------------------------------------------------------------------------
  703. # ● フレーム更新 (アクターコマンドフェーズ : スキル選択)
  704. #--------------------------------------------------------------------------
  705. alias xrxs19_update_phase3_skill_select update_phase3_skill_select
  706. def update_phase3_skill_select
  707. # C ボタンが押された場合
  708. if Input.trigger?(Input::C)
  709. # スキルウィンドウで現在選択されているデータを取得
  710. @skill = @skill_window.skill
  711. if skill_element_include?(@skill, "武器投掷")
  712. # 使用できない場合
  713. if @skill == nil or not @active_battler.skill_can_use?(@skill.id)
  714. # ブザー SE を演奏
  715. $game_system.se_play($data_system.buzzer_se)
  716. return
  717. end
  718. # 決定 SE を演奏
  719. $game_system.se_play($data_system.decision_se)
  720. # アクションを設定
  721. @active_battler.current_action.skill_id = @skill.id
  722. # アイテム選択へ移行する
  723. start_item_select_from_skill(@one.to_i)
  724. return
  725. end
  726. end
  727. xrxs19_update_phase3_skill_select
  728. end
  729. #--------------------------------------------------------------------------
  730. # ● フレーム更新 (アクターコマンドフェーズ : 武器のみアイテム選択)
  731. #--------------------------------------------------------------------------
  732. def update_phase3_item_window_weapons
  733. # 武器アイテムウィンドウを可視状態にする
  734. @item_window_weapons.visible = true
  735. # 武器アイテムウィンドウを更新
  736. @item_window_weapons.update
  737. # B ボタンが押された場合
  738. if Input.trigger?(Input::B)
  739. # キャンセル SE を演奏
  740. $game_system.se_play($data_system.cancel_se)
  741. # 武器アイテムの選択を終了
  742. end_item_select_from_skill
  743. return
  744. end
  745. # C ボタンが押された場合
  746. if Input.trigger?(Input::C)
  747. # 決定 SE を演奏
  748. $game_system.se_play($data_system.decision_se)
  749. # アイテムウィンドウで現在選択されているデータを取得
  750. @item = @item_window_weapons.item
  751. # アクションを設定
  752. @active_battler.current_action.basic = @item.id
  753. if $xrxs24_weapon_property_system_work
  754. # アイテムウィンドウで現在選択されているデータを取得
  755. @item_room_no = @item_window_weapons.item_room_no
  756. # アクションを設定
  757. @active_battler.current_action.basic_ex = @item_room_no
  758. end
  759. # 武器のみアイテムウィンドウを不可視化
  760. @item_window_weapons.visible = false
  761. # 効果範囲が敵単体の場合
  762. if @skill.scope == 1
  763. # エネミーの選択を開始
  764. start_enemy_select
  765. # 効果範囲が味方単体の場合
  766. elsif @skill.scope == 3 or @skill.scope == 5
  767. # アクターの選択を開始
  768. start_actor_select
  769. # 効果範囲が単体ではない場合
  770. else
  771. # アイテムの選択を終了
  772. end_item_select_from_skill
  773. # 次のアクターのコマンド入力へ
  774. phase3_next_actor
  775. end
  776. return
  777. end
  778. end
  779. #--------------------------------------------------------------------------
  780. # ● スキルからのアイテム選択開始
  781. #--------------------------------------------------------------------------
  782. def start_item_select_from_skill(restrict = 0)
  783. # 投擲アイテムウィンドウを作成 ( 武器のみ:投擲可能のみ )
  784. @item_window_weapons = Window_Item.new
  785. if restrict == 1
  786. @item_window_weapons.set_itemkind(11)
  787. else
  788. @item_window_weapons.set_itemkind(1)
  789. end
  790. # ヘルプウィンドウを関連付け
  791. @item_window_weapons.help_window = @help_window
  792. # スキルウィンドウを無効化
  793. @skill_window.active = false
  794. @skill_window.visible = false
  795. end
  796. #--------------------------------------------------------------------------
  797. # ● スキルからのアイテム選択終了
  798. #--------------------------------------------------------------------------
  799. def end_item_select_from_skill
  800. # 武器のみアイテムウィンドウを解放
  801. @item_window_weapons.dispose
  802. @item_window_weapons = nil
  803. # ヘルプウィンドウを隠す
  804. @help_window.visible = false
  805. # スキルウィンドウを有効化
  806. @skill_window.active = true
  807. @skill_window.visible = true
  808. end
  809. #--------------------------------------------------------------------------
  810. # ● エネミー選択開始
  811. #--------------------------------------------------------------------------
  812. alias xrxs19_start_enemy_select start_enemy_select
  813. def start_enemy_select
  814. return if start_select_check
  815. xrxs19_start_enemy_select
  816. end
  817. #--------------------------------------------------------------------------
  818. # ● アクター選択開始
  819. #--------------------------------------------------------------------------
  820. alias xrxs19_start_actor_select start_actor_select
  821. def start_actor_select
  822. return if start_select_check
  823. xrxs19_start_actor_select
  824. end
  825. #--------------------------------------------------------------------------
  826. # ● 選択開始時のチェック
  827. #--------------------------------------------------------------------------
  828. def start_select_check
  829. # "全体化"、"全域化"、"対象ランダム"の判定
  830. case @active_battler.current_action.kind
  831. when 0 # 攻撃
  832. # ここで「攻撃」使用者の武器IDを保持しておく
  833. @active_battler.current_action.weapon_id = @active_battler.weapon_id
  834. # チェックに戻る
  835. if equip_weapon_element_include?(@active_battler, ELEMENT_NAME_AREA_ENEMY_ALL) or
  836. equip_weapon_element_include?(@active_battler, ELEMENT_NAME_AREA_WHOLE) or
  837. equip_weapon_element_include?(@active_battler, ELEMENT_NAME_AREA_ENEMY_RAND) or
  838. equip_weapon_element_include?(@active_battler, ELEMENT_NAME_AREA_ACTOR_RAND) or
  839. equip_weapon_element_include?(@active_battler, ELEMENT_NAME_AREA_ALL_RANDOM)
  840. phase3_next_actor
  841. return true
  842. end
  843. when 1 # スキル
  844. if skill_element_include?(@skill, ELEMENT_NAME_AREA_ENEMY_ALL) or
  845. skill_element_include?(@skill, ELEMENT_NAME_AREA_WHOLE) or
  846. skill_element_include?(@skill, ELEMENT_NAME_AREA_ENEMY_RAND) or
  847. skill_element_include?(@skill, ELEMENT_NAME_AREA_ACTOR_RAND) or
  848. skill_element_include?(@skill, ELEMENT_NAME_AREA_ALL_RANDOM)
  849. end_skill_select
  850. phase3_next_actor
  851. return true
  852. end
  853. when 2 # アイテム
  854. if item_element_include?(@item, ELEMENT_NAME_AREA_ENEMY_ALL) or
  855. item_element_include?(@item, ELEMENT_NAME_AREA_WHOLE) or
  856. item_element_include?(@item, ELEMENT_NAME_AREA_ENEMY_RAND) or
  857. item_element_include?(@item, ELEMENT_NAME_AREA_ACTOR_RAND) or
  858. item_element_include?(@item, ELEMENT_NAME_AREA_ALL_RANDOM)
  859. end_item_select
  860. phase3_next_actor
  861. return true
  862. end
  863. end
  864. return false
  865. end
  866. #--------------------------------------------------------------------------
  867. # ● フレーム更新 (メインフェーズ ステップ 1 : アクション準備)
  868. #--------------------------------------------------------------------------
  869. alias xrxs19_update_phase4_step1 update_phase4_step1
  870. def update_phase4_step1
  871. # 初期化
  872. @phase4_act_continuation = 0
  873. @phase4_act_times_max = 1
  874. @skill = nil
  875. @weapon_id = nil
  876. # 戻す
  877. xrxs19_update_phase4_step1
  878. end
  879. #--------------------------------------------------------------------------
  880. # ● フレーム更新 (メインフェーズ ステップ 2 : アクション開始)
  881. #--------------------------------------------------------------------------
  882. alias xrxs19_update_phase4_step2 update_phase4_step2
  883. def update_phase4_step2
  884. #リレイズ判定
  885. next_phase_ok = true
  886. next_phase_ok = update_reraise_effect(@active_battler)
  887. if !next_phase_ok
  888. return
  889. end
  890. if next_phase_ok
  891. # ステップ 2 へ
  892. xrxs19_update_phase4_step2
  893. end
  894. end
  895. #--------------------------------------------------------------------------
  896. # ● 基本アクション 結果作成
  897. #--------------------------------------------------------------------------
  898. alias xrxs19_make_basic_action_result make_basic_action_result
  899. def make_basic_action_result
  900. # 攻撃の場合
  901. if @active_battler.current_action.basic == 0
  902. # 武器IDの取得
  903. @weapon_id = @active_battler.is_a?(Game_Actor) ? @active_battler.weapon_id : 0
  904. # 指定行動回数取得 ( "行動回数"が無い場合は 1 のまま )
  905. weapon_element_include?(@weapon_id, ELEMENT_NAME_MOVE_TIMES)
  906. @phase4_act_times_max = @one.to_i if @one != nil
  907. # アニメーション ID を設定
  908. @animation1_id = @active_battler.animation1_id
  909. @animation2_id = @active_battler.animation2_id
  910. # 初期化
  911. @target_battlers = []
  912. # 対象側バトラーの配列を設定
  913. # "全体化"の判定
  914. if equip_weapon_element_include?(@active_battler, ELEMENT_NAME_AREA_ENEMY_ALL)
  915. # 行動側バトラーがエネミーの場合
  916. if @active_battler.is_a?(Game_Enemy)
  917. if @active_battler.restriction == 3
  918. @target_battlers = $game_troop.enemies
  919. else
  920. @target_battlers = $game_party.actors
  921. end
  922. end
  923. # 行動側バトラーがアクターの場合
  924. if @active_battler.is_a?(Game_Actor)
  925. if @active_battler.restriction == 3
  926. @target_battlers = $game_party.actors
  927. else
  928. @target_battlers = $game_troop.enemies
  929. end
  930. end
  931. end
  932. # "敵ランダム"の判定
  933. if equip_weapon_element_include?(@active_battler, ELEMENT_NAME_AREA_ENEMY_RAND)
  934. # 行動側バトラーがエネミーの場合
  935. if @active_battler.is_a?(Game_Enemy)
  936. if @active_battler.restriction == 3
  937. tb_array = $game_troop.enemies
  938. else
  939. tb_array = $game_party.actors
  940. end
  941. end
  942. # 行動側バトラーがアクターの場合
  943. if @active_battler.is_a?(Game_Actor)
  944. if @active_battler.restriction == 3
  945. tb_array = $game_party.actors
  946. else
  947. tb_array = $game_troop.enemies
  948. end
  949. end
  950. @target_battlers = [tb_array[rand(tb_array.size)]]
  951. end
  952. # "味方ランダム"の判定
  953. if equip_weapon_element_include?(@active_battler, ELEMENT_NAME_AREA_ACTOR_RAND)
  954. # 行動側バトラーがエネミーの場合
  955. if @active_battler.is_a?(Game_Enemy)
  956. if @active_battler.restriction == 3
  957. tb_array = $game_party.actors
  958. else
  959. tb_array = $game_troop.enemies
  960. end
  961. end
  962. # 行動側バトラーがアクターの場合
  963. if @active_battler.is_a?(Game_Actor)
  964. if @active_battler.restriction == 3
  965. tb_array = $game_troop.enemies
  966. else
  967. tb_array = $game_party.actors
  968. end
  969. end
  970. @target_battlers = [tb_array[rand(tb_array.size)]]
  971. end
  972. # "全域化"の判定
  973. if equip_weapon_element_include?(@active_battler, ELEMENT_NAME_AREA_WHOLE)
  974. @target_battlers = $game_party.actors + $game_troop.enemies
  975. end
  976. # "対象ランダム"の判定
  977. if equip_weapon_element_include?(@active_battler, ELEMENT_NAME_AREA_ALL_RANDOM)
  978. tb_array = $game_party.actors + $game_troop.enemies
  979. @target_battlers = [tb_array[rand(tb_array.size)]]
  980. end
  981. if @target_battlers.size > 0
  982. ##かばう追加
  983. get_target_battlers_after_cover!(@target_battlers, @active_battler)
  984. # 通常攻撃の効果を適用
  985. for target in @target_battlers
  986. target.attack_effect(@active_battler)
  987. end
  988. return
  989. end
  990. end
  991. xrxs19_make_basic_action_result
  992. end
  993. #--------------------------------------------------------------------------
  994. # ● スキルまたはアイテムの対象側バトラー設定
  995. #--------------------------------------------------------------------------
  996. alias xrxs19_set_target_battlers set_target_battlers
  997. def set_target_battlers(scope)
  998. case @active_battler.current_action.kind
  999. when 1
  1000. # "全体化"の判定
  1001. if skill_element_include?(@skill, ELEMENT_NAME_AREA_ENEMY_ALL)
  1002. scope = 2
  1003. return
  1004. end
  1005. # "全域化"の判定
  1006. scope = 8 if skill_element_include?(@skill, ELEMENT_NAME_AREA_WHOLE)
  1007. # "敵ランダム"の判定
  1008. scope = 9 if skill_element_include?(@skill, ELEMENT_NAME_AREA_ENEMY_RAND)
  1009. # "味方ランダム"の判定
  1010. scope =10 if skill_element_include?(@skill, ELEMENT_NAME_AREA_ACTOR_RAND)
  1011. # "対象ランダム"の判定
  1012. scope =11 if skill_element_include?(@skill, ELEMENT_NAME_AREA_ALL_RANDOM)
  1013. when 2
  1014. # "全体化"の判定
  1015. if item_element_include?(@item, ELEMENT_NAME_AREA_ENEMY_ALL)
  1016. scope = 2
  1017. return
  1018. end
  1019. # "全域化"の判定
  1020. scope = 8 if item_element_include?(@item, ELEMENT_NAME_AREA_WHOLE)
  1021. # "敵ランダム"の判定
  1022. scope = 9 if item_element_include?(@item, ELEMENT_NAME_AREA_ENEMY_RAND)
  1023. # "味方ランダム"の判定
  1024. scope =10 if item_element_include?(@item, ELEMENT_NAME_AREA_ACTOR_RAND)
  1025. # "対象ランダム"の判定
  1026. scope =11 if item_element_include?(@item, ELEMENT_NAME_AREA_ALL_RANDOM)
  1027. end
  1028. case scope
  1029. when 8
  1030. @target_battlers = $game_party.actors + $game_troop.enemies
  1031. return
  1032. when 9
  1033. # 行動側バトラーがエネミーの場合
  1034. if @active_battler.is_a?(Game_Enemy)
  1035. tb_array = $game_party.actors
  1036. end
  1037. # 行動側バトラーがアクターの場合
  1038. if @active_battler.is_a?(Game_Actor)
  1039. tb_array = $game_troop.enemies
  1040. end
  1041. @target_battlers = [tb_array[rand(tb_array.size)]]
  1042. return
  1043. when 10
  1044. # 行動側バトラーがエネミーの場合
  1045. if @active_battler.is_a?(Game_Enemy)
  1046. tb_array = $game_troop.enemies
  1047. end
  1048. # 行動側バトラーがアクターの場合
  1049. if @active_battler.is_a?(Game_Actor)
  1050. tb_array = $game_party.actors
  1051. end
  1052. @target_battlers = [tb_array[rand(tb_array.size)]]
  1053. return
  1054. when 11
  1055. tb_array = $game_party.actors + $game_troop.enemies
  1056. @target_battlers = [tb_array[rand(tb_array.size)]]
  1057. return
  1058. end
  1059. # 呼び戻す
  1060. xrxs19_set_target_battlers(scope)
  1061. ##追加
  1062. get_target_battlers_after_cover!(@target_battlers, @active_battler)
  1063. end
  1064. #--------------------------------------------------------------------------
  1065. # ● スキルアクション 結果作成
  1066. #--------------------------------------------------------------------------
  1067. alias xrxs19_make_skill_action_result make_skill_action_result
  1068. def make_skill_action_result
  1069. # スキルを取得
  1070. @skill = $data_skills[@active_battler.current_action.skill_id]
  1071. # 既に一回以上行動している場合
  1072. if @phase4_act_continuation >= 1
  1073. # SP消費分のSPを回復させて擬似的にSPを減らさない
  1074. @active_battler.sp += @skill.sp_cost
  1075. else
  1076. # 指定行動回数取得
  1077. skill_element_include?(@skill, ELEMENT_NAME_MOVE_TIMES)
  1078. @phase4_act_times_max = @one.to_i if @one != nil
  1079. # 特殊効果:消費金額に順ずる固定ダメージ
  1080. if skill_element_include?(@skill, "金钱投掷")
  1081. # ゴールドウィンドウを作成
  1082. if @gold_window == nil or @gold_window.visible == false
  1083. @gold_window = Window_Gold.new
  1084. @gold_window.x = 640 - @gold_window.width
  1085. @gold_window.y = 64
  1086. @gold_window.opacity = 160
  1087. @gold_window.visible = true
  1088. end
  1089. end
  1090. # HP消費スキルの場合
  1091. if skill_element_include?(@skill, ELEMENT_NAME_HP_COST)
  1092. # HPが足りるか判定
  1093. if @active_battler.hp <= @skill.sp_cost
  1094. # 足りない場合
  1095. # ステップ 1 に移行
  1096. @phase4_step = 1
  1097. return
  1098. end
  1099. # SP消費分のSPを回復させて擬似的にSPを減らさない(最大値を超えて回復)
  1100. @active_battler.hp0_ban = true
  1101. @active_battler.sp += @skill.sp_cost
  1102. # 戻す
  1103. xrxs19_make_skill_action_result
  1104. # HPを消費
  1105. @active_battler.hp -= @skill.sp_cost
  1106. # HP/SPの制限の解除
  1107. @active_battler.hp0_ban = false
  1108. return
  1109. end
  1110. end
  1111. xrxs19_make_skill_action_result
  1112. ##追加
  1113. make_cover_skill_action_result()
  1114. end
  1115. #--------------------------------------------------------------------------
  1116. # ● フレーム更新 (メインフェーズ ステップ 3 : 行動側アニメーション)
  1117. #--------------------------------------------------------------------------
  1118. alias xrxs19_update_phase4_step3 update_phase4_step3
  1119. def update_phase4_step3
  1120. # 既に一回以上行動している場合
  1121. if @phase4_act_continuation >= 1
  1122. # ステップ 4 に移行
  1123. @phase4_step = 4
  1124. @wait_count = 0
  1125. return
  1126. end
  1127. xrxs19_update_phase4_step3
  1128. # ちからためメッセージ表示。
  1129. for target in @target_battlers
  1130. if !target.action_message.nil?
  1131. @help_window.set_text(target.action_message, 1)
  1132. target.action_message = nil
  1133. end
  1134. end
  1135. end
  1136. #--------------------------------------------------------------------------
  1137. # ● フレーム更新 (メインフェーズ ステップ 4 : 対象側アニメーション)
  1138. #--------------------------------------------------------------------------
  1139. alias xrxs19_update_phase4_step4 update_phase4_step4
  1140. def update_phase4_step4
  1141. # 武器投擲時、「武器のアニメーション」を対象に使う
  1142. if skill_element_include?(@skill, "武器投掷")
  1143. @animation2_id = $data_weapons[@active_battler.current_action.basic].animation2_id
  1144. end
  1145. # ゴールドウィンドウを更新
  1146. @gold_window.refresh if @gold_window != nil
  1147. if skill_element_include?(@skill, "变身")
  1148. tb_array = @target_battlers
  1149. @target_battlers = [@active_battler]
  1150. xrxs19_update_phase4_step4
  1151. @target_battlers = tb_array
  1152. else
  1153. xrxs19_update_phase4_step4
  1154. end
  1155. # かばわれたメンバーのアニメーション
  1156. for target in @target_battlers
  1157. if target.current_friend != nil
  1158. target.current_friend.animation_id = COVER_ANIMATION_ID
  1159. end
  1160. end
  1161. # 既に一回以上行動している場合
  1162. if @phase4_act_continuation >= 1
  1163. @wait_count = 0
  1164. end
  1165. end
  1166. #--------------------------------------------------------------------------
  1167. # ● フレーム更新 (メインフェーズ ステップ 5 : ダメージ表示)
  1168. #--------------------------------------------------------------------------
  1169. alias xrxs19_update_phase4_step5 update_phase4_step5
  1170. def update_phase4_step5
  1171. # 呼び戻す
  1172. xrxs19_update_phase4_step5
  1173. # かばわれたメンバーのダメージ
  1174. for target in @target_battlers
  1175. if target.current_friend != nil
  1176. target.current_friend.damage_pop = true
  1177. #かばっている状態の初期化
  1178. target.current_friend = nil
  1179. end
  1180. end
  1181. # 生存確認
  1182. target_still_left = false
  1183. for target in @target_battlers
  1184. # ターゲットが生き残っているか判別
  1185. target_still_left = true if !target.dead?
  1186. # 戦闘不能時で、変身を解除
  1187. if target.dead? and target.metamor_target != nil
  1188. target.animation_id = 17 # 戦闘不能変身解除時のアニメーションID
  1189. target.animation_hit = true
  1190. target.battler_name = target.battler_name_original
  1191. target.metamor_target = nil
  1192. end
  1193. end
  1194. # ダメージ表示
  1195. if @active_battler.damage != nil
  1196. @active_battler.damage_pop = true
  1197. end
  1198. # 変身対象のバトラーグラフィックをコピー
  1199. if skill_element_include?(@skill, "变身")
  1200. if @active_battler.metamor_target != nil
  1201. @active_battler.battler_name = @active_battler.metamor_target.battler_name
  1202. else
  1203. @active_battler.battler_name = @active_battler.battler_name_original
  1204. end
  1205. end
  1206. # ターゲットの敵への処理
  1207. for target in @target_battlers
  1208. # スティール結果メッセージ表示。ただし、複数ターゲットの表示は不可能
  1209. if !target.effect_message.nil?
  1210. @help_window.set_text(target.effect_message, 1)
  1211. target.effect_message = nil
  1212. end
  1213. end
  1214. # 行動した回数のカウントを 1 加算
  1215. @phase4_act_continuation += 1
  1216. # 実行済み行動回数が、指定行動回数に達したかを判別
  1217. if @phase4_act_continuation < @phase4_act_times_max
  1218. # 達していない場合
  1219. # 生存している場合、続ける。
  1220. if target_still_left
  1221. # 指定行動回数に満たない場合は繰り返す為、ステップ 2 に移行
  1222. @phase4_step = 2
  1223. @wait_count = 0
  1224. # スキル使用中の場合はヘルプウィンドウを隠すのをやめる
  1225. if @active_battler.current_action.kind == 1
  1226. @help_window.visible = true
  1227. end
  1228. end
  1229. else
  1230. # 達した場合
  1231. # 敵が生存、かつ skillが"派生"属性を持つ場合
  1232. if target_still_left and
  1233. (skill_element_include?(@skill, ELEMENT_NAME_DERIVER) or
  1234. (@weapon_id != nil and equip_weapon_element_include?(@active_battler, ELEMENT_NAME_DERIVER)))
  1235. if @one.to_i > 0
  1236. # 回数をリセット
  1237. @phase4_act_continuation = 0
  1238. @phase4_act_times_max = 1
  1239. # 武器攻撃ではなくなるため @weapon_id を nil 化
  1240. @weapon_id = nil
  1241. # 新しいスキルID
  1242. @active_battler.current_action.kind = 1
  1243. @active_battler.current_action.skill_id = @one.to_i
  1244. # ステップ 2 に移行
  1245. @phase4_step = 2
  1246. @wait_count = 0
  1247. end
  1248. end
  1249. end
  1250. # ゴールドウィンドウを隠す
  1251. @gold_window.visible = false if @gold_window != nil
  1252. end
  1253. #--------------------------------------------------------------------------
  1254. # ● フレーム更新 (メインフェーズ ステップ 6 : リレイズ表示→リフレッシュ)
  1255. #--------------------------------------------------------------------------
  1256. alias xrxs19_update_phase4_step6 update_phase4_step6
  1257. def update_phase4_step6
  1258. next_phase_ok = true
  1259. #リレイズ判定
  1260. for enemy in $game_troop.enemies
  1261. next_phase_ok = update_reraise_effect(enemy)
  1262. if !next_phase_ok
  1263. return
  1264. end
  1265. end
  1266. for actor in $game_party.actors
  1267. next_phase_ok = update_reraise_effect(actor)
  1268. if !next_phase_ok
  1269. return
  1270. end
  1271. end
  1272. if next_phase_ok
  1273. xrxs19_update_phase4_step6
  1274. end
  1275. end
  1276. #===================================================
  1277. #リレイズエフェクト
  1278. #===================================================
  1279. def update_reraise_effect(battler)
  1280. if battler.reraised
  1281. case battler.reraise_state
  1282. when 0
  1283. battler.reraise_state = 1 # コラプス待ち
  1284. @wait_count = 16
  1285. return false
  1286. when 1
  1287. battler.reraise_state = 2 # 復活アニメーション
  1288. ##IDは好きなアニメーションIDを指定
  1289. battler.animation_id = RERAISE_ANIMATION_ID
  1290. @wait_count = 8
  1291. return false#
  1292. when 2
  1293. #復活処理
  1294. battler.hp = battler.maxhp * RERAISE_HP_PERCENT / 100 + RERAISE_HP
  1295. battler.reraise_state = 3 #アピアーアニメーション
  1296. @wait_count = 8
  1297. return false#
  1298. when 3
  1299. battler.reraise_state = 0 #終了?通常処理に戻る
  1300. battler.reraised = false #フラグを初期値へ
  1301. @status_window.refresh
  1302. return true
  1303. end
  1304. else
  1305. return true
  1306. end
  1307. end
  1308. #--------------------------------------------------------------------------
  1309. # ● アフターバトルフェーズ開始
  1310. #--------------------------------------------------------------------------
  1311. alias xrxs19_update_phase5 update_phase5
  1312. def update_phase5
  1313. next_phase_ok = false
  1314. # 次のアクターへ
  1315. @phase5_i = -1 if @phase5_i == nil
  1316. @phase5_i += 1
  1317. if @phase5_i < $game_party.actors.size
  1318. actor = $game_party.actors[@phase5_i]
  1319. # 変身状態の味方がいるか判別し、それを解除する
  1320. if actor.metamor_target != nil
  1321. actor.animation_id = 17 # 戦闘終了変身解除時のアニメーションID
  1322. actor.animation_hit = true
  1323. actor.battler_name = actor.battler_name_original
  1324. actor.metamor_target = nil
  1325. # ステータスウィンドウをリフレッシュ
  1326. @status_window.refresh
  1327. # アニメーションの長さにかかわらず、最低 4 フレーム待つ
  1328. @wait_count = 4
  1329. end
  1330. else
  1331. next_phase_ok = true
  1332. end
  1333. if next_phase_ok
  1334. xrxs19_update_phase5
  1335. end
  1336. end
  1337. #--------------------------------------------------------------------------
  1338. # ● 行動順序作成
  1339. #--------------------------------------------------------------------------
  1340. alias xrxs19_make_action_orders make_action_orders
  1341. def make_action_orders
  1342. xrxs19_make_action_orders
  1343. # 優先度の大きい順 (同値の場合は素早さの速い順) に並び替え
  1344. @action_battlers.sort! do |a, b|
  1345. if a.current_action.speed_priority > b.current_action.speed_priority
  1346. -1
  1347. elsif a.current_action.speed_priority < b.current_action.speed_priority
  1348. +1
  1349. elsif a.current_action.speed > b.current_action.speed
  1350. -1
  1351. elsif a.current_action.speed < b.current_action.speed
  1352. +1
  1353. else
  1354. 0 # a <=> b
  1355. end
  1356. end
  1357. end
  1358. #--------------------------------------------------------------------------
  1359. # ● バトル終了
  1360. #--------------------------------------------------------------------------
  1361. alias xrxs19_battle_end battle_end
  1362. def battle_end(result)
  1363. for i in 0...$game_party.actors.size
  1364. actor = $game_party.actors[i]
  1365. # 変身状態の味方がいるか判別し、それを解除する
  1366. if actor.metamor_target != nil
  1367. actor.battler_name = actor.battler_name_original
  1368. actor.metamor_target = nil
  1369. end
  1370. end
  1371. xrxs19_battle_end(result)
  1372. end
  1373. end
  1374. #=============================================================================
  1375. # ◇ スティール
  1376. #=============================================================================
  1377. class Game_Battler
  1378. #--------------------------------------------------------------------------
  1379. # ● 公開インスタンス変数
  1380. #--------------------------------------------------------------------------
  1381. attr_accessor :effect_message
  1382. #--------------------------------------------------------------------------
  1383. # ● オブジェクト初期化
  1384. #--------------------------------------------------------------------------
  1385. alias before_steal_original_battler_initialize initialize
  1386. def initialize
  1387. before_steal_original_battler_initialize()
  1388. @effect_message = nil
  1389. @steal_skill_id = $data_system.elements.index(STEAL_SKILL_ELEMENT_NAME)
  1390. end
  1391. end
  1392. class Game_Enemy < Game_Battler
  1393. #--------------------------------------------------------------------------
  1394. # ● オブジェクト初期化
  1395. #--------------------------------------------------------------------------
  1396. alias before_steal_original_enemy_initialize initialize
  1397. def initialize(troop_id, member_index)
  1398. before_steal_original_enemy_initialize(troop_id, member_index)
  1399. @item_possession = true
  1400. end
  1401. #===================================================
  1402. #
  1403. #===================================================
  1404. def name
  1405. name = $data_enemies[@enemy_id].name.split(/-/)[0]
  1406. if !name.nil?
  1407. return name = name.strip()
  1408. else
  1409. return ''
  1410. end
  1411. end
  1412. #===================================================
  1413. #ノーマルアイテムの指定 
  1414. #エネミーネームに -n種類 ID 個数(-na 10 10) と入れて指定。
  1415. #種類は、i(アイテム) w(武器) a(防具)のいずれか一つ
  1416. #個数は省略可能、自動で1扱い。
  1417. #また、ドロップアイテムと同一にしたい場合は
  1418. #エネミーネームに -nd 個数(-nd 2) と入れて指定。
  1419. #個数は省略可能、自動で1扱い。
  1420. #===================================================
  1421.  
  1422. def normal_item
  1423. return get_item_from_name("n")#オプション"n"の文字列から取得
  1424. end
  1425.  
  1426. #===================================================
  1427. #レアアイテムの指定 
  1428. #エネミーネームに -r種類 ID 個数(-na 10 10) と入れて指定。
  1429. #種類は、i(アイテム) w(武器) a(防具)のいずれか一つ
  1430. #個数は省略可能、自動で1扱い。
  1431. #また、ドロップアイテムと同一にしたい場合は
  1432. #エネミーネームに -rd 個数(-nd 2) と入れて指定。
  1433. #個数は省略可能、自動で1扱い。
  1434. #===================================================
  1435.  
  1436. def rare_item
  1437. return get_item_from_name("r")#オプション"r"の文字列から取得
  1438. end
  1439.  
  1440. #===================================================
  1441. #*Nameからアイテムを抜き出す処理
  1442. #===================================================
  1443. def get_item_from_name(opt)
  1444. names = $data_enemies[@enemy_id].name.split(/-/)
  1445. if names.size > 1
  1446. for i in 1...names.size
  1447. if names[i][0,1] != opt
  1448. next
  1449. end
  1450.  
  1451. names[i].sub!(/^.(.*)/){$1}
  1452. ary = names[i].split(/ /)
  1453.  
  1454. if ary[0][0,1] == "g"
  1455. cgy = "g"
  1456. id = 0
  1457. if ary[1].nil?
  1458. ary[1] = "1"
  1459. elsif ary[1].sub!(/^([0-9]+)/){$1}.nil?
  1460. ary[1] = "1"
  1461. end
  1462. possession = {"Category"=>cgy, "ID"=>id, "Num"=>ary[1].to_i}
  1463. return possession
  1464.  
  1465. elsif ary[0][0,1] == "d"
  1466. cgy = ""
  1467. id = 0
  1468. if self.item_id != 0
  1469. cgy = "i"
  1470. id = self.item_id
  1471. elsif self.weapon_id != 0
  1472. cgy = "w"
  1473. id = self.weapon_id
  1474. elsif self.armor_id != 0
  1475. cgy = "a"
  1476. id = self.armor_id
  1477. else
  1478. return nil
  1479. end
  1480.  
  1481. if ary[1].nil?
  1482. ary[1] = "1"
  1483. elsif ary[1].sub!(/^([0-9]+)/){$1}.nil?
  1484. ary[1] = "1"
  1485. end
  1486. possession = {"Category"=>cgy, "ID"=>id, "Num"=>ary[1].to_i}
  1487. return possession
  1488.  
  1489. elsif !ary[0].sub!(/^([iwa])/){$1}.nil? && !ary[1].sub!(/^([0-9]+)/){$1}.nil?
  1490. if ary[2].nil? || ary[2].sub!(/^([0-9]+)/){$1}.nil?
  1491. ary[2] = "1"
  1492. end
  1493. possession = {"Category"=>ary[0], "ID"=>ary[1].to_i, "Num"=>ary[2].to_i}
  1494. return possession
  1495.  
  1496. end
  1497. end
  1498. end
  1499. return nil
  1500. end
  1501.  
  1502. #===================================================
  1503. #スティールエフェクト
  1504. #===================================================
  1505.  
  1506. def steal_effect(user, skill) # 引数skillを追加
  1507.  
  1508. pos = self.normal_item
  1509.  
  1510. if !@item_possession || pos.nil?
  1511. @effect_message = "没有东西可偷。"
  1512. #self.damage = "Miss"
  1513. return false
  1514. end
  1515.  
  1516. #盗み成功判定 アジリティが同一で50%、2倍で100%
  1517. if rand(100) <= ((user.agi+0.01)/(self.agi+0.01))*100/2
  1518. r_pos = self.rare_item
  1519. #レアアイテム判定
  1520. if !r_pos.nil? && rand(10) <= 1
  1521. pos = r_pos
  1522. end
  1523.  
  1524. case pos["Category"]
  1525. when "i"
  1526. item = $data_items[pos["ID"]]
  1527. if item.nil?
  1528. print "这个物品不存在!"
  1529. return false
  1530. end
  1531. $game_party.gain_item(item.id, pos["Num"])
  1532. when "w"
  1533. item = $data_weapons[pos["ID"]]
  1534. if item.nil?
  1535. print "这个物品不存在!"
  1536. return false
  1537. end
  1538. $game_party.gain_weapon(item.id, pos["Num"])
  1539. when "a"
  1540. item = $data_armors[pos["ID"]]
  1541. if item.nil?
  1542. print "这个物品不存在!"
  1543. return false
  1544. end
  1545. $game_party.gain_armor(item.id, pos["Num"])
  1546. when "g"
  1547. # ゴールド獲得
  1548. $game_party.gain_gold(pos["Num"])
  1549. end
  1550.  
  1551. if pos["Category"] == "g"
  1552. @effect_message = "#{pos["Num"]}#{$data_system.words.gold}偷到!"
  1553. else
  1554. @effect_message = "#{item.name}#{pos["Num"]}个偷到!"
  1555. end
  1556. @item_possession = false
  1557.  
  1558. self.damage = "Steal!" if self.damage == "Miss"
  1559. return true
  1560. else
  1561. @effect_message = "没有东西可偷???"
  1562. #self.damage = "Miss
  1563. return false
  1564. end
  1565.  
  1566. return false # 念のためfalse返す処理追加
  1567. # 多分なくてもifの結果(false)が返ると思うけど…
  1568. end
  1569. end
  1570. #=============================================================================
  1571. # ■ ライブラ スキル実装スクリプト 2004/09/24 - 0.1α
  1572. #=============================================================================
  1573. class Game_Battler
  1574. #--------------------------------------------------------------------------
  1575. # ● 追加公開インスタンス変数
  1576. #--------------------------------------------------------------------------
  1577. attr_accessor :libla_reserve # ライブラ予約
  1578. #--------------------------------------------------------------------------
  1579. # ● 初期化
  1580. #--------------------------------------------------------------------------
  1581. alias before_libra_initialize initialize
  1582.  
  1583. def initialize
  1584. before_libra_initialize
  1585. # 「ライブラ」属性のID取得
  1586. @libra_element_id = $data_system.elements.index(LIBLA_SKILL_ELEMENT_NAME)
  1587. @libra_element_id = 0 if @libra_element_id.nil?
  1588. # 今回の行動フェイズでライブラを受けたかどうかフラグ、初期化
  1589. @libla_reserve = false
  1590. end
  1591. #--------------------------------------------------------------------------
  1592. # ● スキルの効果適用
  1593. # user : 使用者 (バトラー)
  1594. # skill: スキル
  1595. #--------------------------------------------------------------------------
  1596. alias before_libra_skill_effect skill_effect
  1597. def skill_effect(user, skill)
  1598. #「ライブラ」スキルかどうかの判定。
  1599. if skill.element_set.include?(@libra_element_id)
  1600. # 命中率を適用する場合は下のif文のコメントを外してください
  1601. #if rand(100) < skill.hit
  1602. # このバトラーがエネミーなら情報ウィンドウを表示する
  1603. if self.is_a?(Game_Enemy)
  1604. self.libla_reserve = true
  1605. end
  1606. # 命中率を適用する場合は下のelse~endのコメントを外してください
  1607. #else
  1608. # self.damage = "Miss"
  1609. #end
  1610. # 普通のスキル判定は行わない。
  1611. return true
  1612. else
  1613. return before_libra_skill_effect(user, skill)
  1614. end
  1615. end
  1616. end
  1617. #==============================================================================
  1618. # ■ Scene_Battle
  1619. #==============================================================================
  1620. class Scene_Battle
  1621. #--------------------------------------------------------------------------
  1622. # ● フレーム更新 (メインフェーズ ステップ 5 : ダメージ表示)
  1623. #--------------------------------------------------------------------------
  1624. alias before_libra_update_phase4_step5 update_phase4_step5
  1625. def update_phase4_step5
  1626. # ダメージ表示
  1627. for target in @target_battlers
  1628. if target.libla_reserve
  1629. libra_window = Window_EnemyStatus.new(target)
  1630. loop do
  1631. # ゲーム画面を更新
  1632. Graphics.update
  1633. # 入力情報を更新
  1634. Input.update
  1635. # ボタンが押されたら情報ウィンドウを閉じてループを中断
  1636. if Input.trigger?(Input::C) or Input.trigger?(Input::B)
  1637. libra_window.dispose
  1638. libra_window = nil
  1639. break
  1640. end
  1641. end
  1642. end
  1643. # ライブラ予約フラグを解除
  1644. target.libla_reserve = false
  1645. end
  1646. before_libra_update_phase4_step5
  1647. end
  1648. end
  1649. #==============================================================================
  1650. # ■ Window_EnemyStatus
  1651. #------------------------------------------------------------------------------
  1652. #  エネミーのステータスを表示するステータスウィンドウです。
  1653. #==============================================================================
  1654. class Window_EnemyStatus < Window_Base
  1655. #--------------------------------------------------------------------------
  1656. # ● オブジェクト初期化
  1657. # enemy : エネミー
  1658. #--------------------------------------------------------------------------
  1659. def initialize(enemy)
  1660. super(0, 64, 640, 256)
  1661. self.contents = Bitmap.new(width - 32, height - 32)
  1662. self.back_opacity = 127
  1663. @enemy = enemy
  1664. refresh
  1665. end
  1666. #--------------------------------------------------------------------------
  1667. # ● リフレッシュ
  1668. #--------------------------------------------------------------------------
  1669. def refresh
  1670. self.contents.clear
  1671. draw_enemy_name(@enemy, 4, 0)
  1672. draw_enemy_state(@enemy, 4, 48)
  1673. draw_enemy_hp(@enemy,196, 48, 172)
  1674. draw_enemy_sp(@enemy,196, 72, 172)
  1675. draw_enemy_parameter(@enemy, 4, 120, 0)
  1676. draw_enemy_parameter(@enemy, 4, 144, 1)
  1677. draw_enemy_parameter(@enemy, 4, 168, 2)
  1678. draw_enemy_parameter(@enemy, 4, 192, 7)
  1679. draw_enemy_parameter(@enemy,196, 120, 3)
  1680. draw_enemy_parameter(@enemy,196, 144, 4)
  1681. draw_enemy_parameter(@enemy,196, 168, 5)
  1682. draw_enemy_parameter(@enemy,196, 192, 6)
  1683. self.contents.font.color = system_color
  1684. self.contents.draw_text(384, 24, 80, 32, "EXP")
  1685. self.contents.draw_text(384, 48, 80, 32, "金钱")
  1686. self.contents.draw_text(384, 96, 96, 32, "战利品")
  1687. self.contents.draw_text(384, 144, 96, 32, "偷窃物")
  1688. self.contents.font.color = normal_color
  1689. self.contents.draw_text(384 + 80, 24, 84, 32, @enemy.exp.to_s, 2)
  1690. self.contents.draw_text(384 + 80, 48, 84, 32, @enemy.gold.to_s, 2)
  1691. draw_item_name(get_enemy_item(@enemy,1), 384 + 16, 120)
  1692. draw_item_name(get_enemy_item(@enemy,2), 384 + 16, 168)
  1693. draw_item_name(get_enemy_item(@enemy,3), 384 + 16, 192)
  1694. end
  1695. #--------------------------------------------------------------------------
  1696. # ○ アイテムの取得
  1697. #--------------------------------------------------------------------------
  1698. def get_enemy_item( enemy, type )
  1699. case type
  1700. when 1:
  1701. if enemy.item_id != nil and enemy.item_id != 0
  1702. return $data_items[enemy.item_id]
  1703. elsif enemy.weapon_id != nil and enemy.weapon_id != 0
  1704. return $data_weapons[enemy.weapon_id]
  1705. elsif enemy.armor_id != nil and enemy.armor_id != 0
  1706. return $data_armors[enemy.armor_id]
  1707. else
  1708. return nil
  1709. end
  1710. when 2:
  1711. info = enemy.get_item_from_name("n")
  1712. return nil if info == nil
  1713. case info["Category"]
  1714. when "i"
  1715. return $data_items[info["ID"]]
  1716. when "w"
  1717. return $data_weapons[info["ID"]]
  1718. when "a"
  1719. return $data_armors[info["ID"]]
  1720. otherwise
  1721. return nil
  1722. end
  1723. when 3:
  1724. info = enemy.get_item_from_name("r")
  1725. return nil if info == nil
  1726. case info["Category"]
  1727. when "i"
  1728. return $data_items[info["ID"]]
  1729. when "w"
  1730. return $data_weapons[info["ID"]]
  1731. when "a"
  1732. return $data_armors[info["ID"]]
  1733. otherwise
  1734. return nil
  1735. end
  1736. otherwise
  1737. return nil
  1738. end
  1739. end
  1740. #--------------------------------------------------------------------------
  1741. # ● 名前の描画
  1742. # enemy : エネミー
  1743. # x : 描画先 X 座標
  1744. # y : 描画先 Y 座標
  1745. #--------------------------------------------------------------------------
  1746. def draw_enemy_name(enemy, x, y)
  1747. self.contents.font.color = normal_color
  1748. self.contents.draw_text(x, y, 120, 32, enemy.name)
  1749. end
  1750. #--------------------------------------------------------------------------
  1751. # ● ステートの描画
  1752. # enemy : エネミー
  1753. # x : 描画先 X 座標
  1754. # y : 描画先 Y 座標
  1755. # width : 描画先の幅
  1756. #--------------------------------------------------------------------------
  1757. def draw_enemy_state(enemy, x, y, width = 120)
  1758. text = make_battler_state_text(enemy, width, true)
  1759. self.contents.font.color = enemy.hp == 0 ? knockout_color : normal_color
  1760. self.contents.draw_text(x, y, width, 32, text)
  1761. end
  1762. #--------------------------------------------------------------------------
  1763. # ● HP の描画
  1764. # enemy : エネミー
  1765. # x : 描画先 X 座標
  1766. # y : 描画先 Y 座標
  1767. # width : 描画先の幅
  1768. #--------------------------------------------------------------------------
  1769. def draw_enemy_hp(enemy, x, y, width = 144)
  1770. # 文字列 "HP" を描画
  1771. self.contents.font.color = system_color
  1772. self.contents.draw_text(x, y, 32, 32, $data_system.words.hp)
  1773. # MaxHP を描画するスペースがあるか計算
  1774. if width - 32 >= 108
  1775. hp_x = x + width - 108
  1776. flag = true
  1777. elsif width - 32 >= 48
  1778. hp_x = x + width - 48
  1779. flag = false
  1780. end
  1781. # HP を描画
  1782. self.contents.font.color = enemy.hp == 0 ? knockout_color :
  1783. enemy.hp <= enemy.maxhp / 4 ? crisis_color : normal_color
  1784. self.contents.draw_text(hp_x, y, 48, 32, enemy.hp.to_s, 2)
  1785. # MaxHP を描画
  1786. if flag
  1787. self.contents.font.color = normal_color
  1788. self.contents.draw_text(hp_x + 48, y, 12, 32, "/", 1)
  1789. self.contents.draw_text(hp_x + 60, y, 48, 32, enemy.maxhp.to_s)
  1790. end
  1791. end
  1792. #--------------------------------------------------------------------------
  1793. # ● SP の描画
  1794. # enemy : エネミー
  1795. # x : 描画先 X 座標
  1796. # y : 描画先 Y 座標
  1797. # width : 描画先の幅
  1798. #--------------------------------------------------------------------------
  1799. def draw_enemy_sp(enemy, x, y, width = 144)
  1800. # 文字列 "SP" を描画
  1801. self.contents.font.color = system_color
  1802. self.contents.draw_text(x, y, 32, 32, $data_system.words.sp)
  1803. # MaxSP を描画するスペースがあるか計算
  1804. if width - 32 >= 108
  1805. sp_x = x + width - 108
  1806. flag = true
  1807. elsif width - 32 >= 48
  1808. sp_x = x + width - 48
  1809. flag = false
  1810. end
  1811. # SP を描画
  1812. self.contents.font.color = enemy.sp == 0 ? knockout_color :
  1813. enemy.sp <= enemy.maxsp / 4 ? crisis_color : normal_color
  1814. self.contents.draw_text(sp_x, y, 48, 32, enemy.sp.to_s, 2)
  1815. # MaxSP を描画
  1816. if flag
  1817. self.contents.font.color = normal_color
  1818. self.contents.draw_text(sp_x + 48, y, 12, 32, "/", 1)
  1819. self.contents.draw_text(sp_x + 60, y, 48, 32, enemy.maxsp.to_s)
  1820. end
  1821. end
  1822. #--------------------------------------------------------------------------
  1823. # ● パラメータの描画
  1824. # enemy : エネミー
  1825. # x : 描画先 X 座標
  1826. # y : 描画先 Y 座標
  1827. # type : パラメータの種類 (0~6)
  1828. #--------------------------------------------------------------------------
  1829. def draw_enemy_parameter(enemy, x, y, type)
  1830. case type
  1831. when 0
  1832. parameter_name = $data_system.words.atk
  1833. parameter_value = enemy.atk
  1834. when 1
  1835. parameter_name = $data_system.words.pdef
  1836. parameter_value = enemy.pdef
  1837. when 2
  1838. parameter_name = $data_system.words.mdef
  1839. parameter_value = enemy.mdef
  1840. when 3
  1841. parameter_name = $data_system.words.str
  1842. parameter_value = enemy.str
  1843. when 4
  1844. parameter_name = $data_system.words.dex
  1845. parameter_value = enemy.dex
  1846. when 5
  1847. parameter_name = $data_system.words.agi
  1848. parameter_value = enemy.agi
  1849. when 6
  1850. parameter_name = $data_system.words.int
  1851. parameter_value = enemy.int
  1852. when 7
  1853. parameter_name = "回避"
  1854. parameter_value = enemy.eva
  1855. end
  1856. self.contents.font.color = system_color
  1857. self.contents.draw_text(x, y, 120, 32, parameter_name)
  1858. self.contents.font.color = normal_color
  1859. self.contents.draw_text(x + 120, y, 36, 32, parameter_value.to_s, 2)
  1860. end
  1861. end
  1862. #=============================================================================
  1863. # ◇ ちからため スキル実装スクリプト by 和希
  1864. #=============================================================================
  1865. class Game_Battler
  1866. #--------------------------------------------------------------------------
  1867. # ● 追加公開インスタンス変数
  1868. #--------------------------------------------------------------------------
  1869. attr_accessor :powerstock # 「ちからため」回数
  1870. attr_accessor :action_message # ヘルプウィンドウに表示する文字
  1871. #--------------------------------------------------------------------------
  1872. # ● 初期化
  1873. #--------------------------------------------------------------------------
  1874. alias before_powerstock_original_initialize initialize
  1875. def initialize
  1876. before_powerstock_original_initialize
  1877. @powerstock = 0
  1878. @powerstock_skill_id = $data_system.elements.index(POWERSTOCK_SKILL_ELEMENT_NAME)
  1879. @powerstock_skill_id = 0 if @powerstock_skill_id == nil
  1880. @effect_message = nil
  1881. end
  1882. #--------------------------------------------------------------------------
  1883. # ● 通常攻撃の効果適用
  1884. # attacker : 攻撃者 (バトラー)
  1885. #--------------------------------------------------------------------------
  1886. alias before_powerstock_original_attack_effect attack_effect
  1887. def attack_effect(attacker)
  1888. # 攻撃者が「ちからため」しているか?
  1889. if attacker.powerstock > 0
  1890. bool_powerstock = true
  1891. # 攻撃者の力を一時的に上昇させる
  1892. stock_attacker_str = attacker.str
  1893. attacker.str += ( stock_attacker_str * POWERSTOCK_BASE_RATE * attacker.powerstock ).to_i
  1894. # ヘルプメッセージに「ちからためx?」を出す
  1895. @action_message = POWERSTOCK_SKILL_ELEMENT_NAME
  1896. @action_message += " x"
  1897. @action_message += attacker.powerstock.to_s
  1898. # ストックを消す
  1899. attacker.powerstock = 0
  1900. else
  1901. bool_powerstock = false
  1902. end
  1903. # fukuyamaさん↓のミス発見ありがとうございました
  1904. result = before_powerstock_original_attack_effect(attacker)
  1905. # 力を上昇させていた場合、元に戻す
  1906. if bool_powerstock
  1907. attacker.str = stock_attacker_str
  1908. end
  1909. return result
  1910. end
  1911. #--------------------------------------------------------------------------
  1912. # ● スキルの効果適用
  1913. # user : 使用者 (バトラー)
  1914. # skill: スキル
  1915. #--------------------------------------------------------------------------
  1916. alias before_powerstock_original_skill_effect skill_effect
  1917. def skill_effect(user, skill)
  1918. #「ちからため」スキルかどうかの判定。
  1919. if skill.element_set.include?(@powerstock_skill_id)
  1920. # 命中率を適用する場合は下のif文のコメントを外してください
  1921. #if rand(100) < skill.hit
  1922. @powerstock += 1 # 「ちからため」回数を1増やす
  1923. # ダメージに"Charge"をセットする
  1924. self.damage = "Charge"
  1925. # 命中率を適用する場合は下のelse~endのコメントを外してください
  1926. #else
  1927. # self.damage = "Miss"
  1928. #end
  1929. # 普通のスキル判定は行わない。
  1930. return true
  1931. else
  1932. return before_powerstock_original_skill_effect(user, skill)
  1933. end
  1934. end
  1935. end
  1936. #=============================================================================
  1937. # ◇ 見切りステート by 和希
  1938. #=============================================================================
  1939. class Game_Battler
  1940. # 見切りステートの名前
  1941. ABANDONS_SKILL_STATE_NAME = "断念"
  1942. #--------------------------------------------------------------------------
  1943. # ● 通常攻撃の効果適用
  1944. #--------------------------------------------------------------------------
  1945. alias before_abandons_original_attack_effect attack_effect
  1946.  
  1947. def attack_effect(attacker)
  1948. # 見切りステートが存在するか?
  1949. if nil != (abandons_skill = get_abandons_id)
  1950. # 見切りステートにかかっているか?
  1951. if self.state?(abandons_skill)
  1952. ## 避ける!
  1953. # クリティカルフラグをクリア
  1954. self.critical = false
  1955. # ダメージに "Avoid!!" を設定
  1956. self.damage = "Avoid!!"
  1957. # 見切りステートを解除
  1958. self.remove_state(abandons_skill,true)
  1959. # メソッド終了
  1960. return false
  1961. end
  1962. end
  1963. # 見切りステート状態でなかった時は通常どおり
  1964. return before_abandons_original_attack_effect(attacker)
  1965. end
  1966. #--------------------------------------------------------------------------
  1967. # ● 見切りステータスのID取得
  1968. #--------------------------------------------------------------------------
  1969. def get_abandons_id
  1970. result = nil
  1971. if @abandons_status_id == nil
  1972. for i in 1 ... $data_states.size
  1973. if $data_states[i].name[/\A#{ABANDONS_SKILL_STATE_NAME}\Z/]
  1974. result = $data_states[i].id
  1975. break
  1976. end
  1977. end
  1978. @abandons_status_id = ( result != nil ? result : 0 )
  1979. elsif @abandons_status_id > 0
  1980. result = @abandons_status_id
  1981. end
  1982. return result
  1983. end
  1984. end
  1985. #=============================================================================
  1986. # ◇ かばう by シムナフ
  1987. #=============================================================================
  1988. #==============================================================================
  1989. # ■ Scene_Battle
  1990. #==============================================================================
  1991. class Scene_Battle
  1992. #追加
  1993. attr_reader :active_battler
  1994. #ここまで
  1995. ##新メソッド
  1996. def make_cover_skill_action_result
  1997. cover_num = 0
  1998. cover_bool = false
  1999. for i in @skill.element_set
  2000. if !($data_system.elements[i][/^#{ELEMENT_NAME_COVER}/].nil?)
  2001. cover_bool = true
  2002. elm_num = $data_system.elements[i][/([+-]*[0-9]+)/]
  2003. if !(elm_num.nil?)
  2004. cover_num += elm_num.to_i
  2005. end
  2006. end
  2007. end
  2008.  
  2009. if cover_bool.equal?(true)
  2010. ##自分のみが対象だった場合は味方からランダムに1人をかばう
  2011. if @target_battlers.include?(@active_battler)
  2012. if @target_battlers.size == 1
  2013. if @target_battlers[0].is_a?(Game_Actor)
  2014. friends = $game_party.actors.dup
  2015. friends.delete(@active_battler)
  2016. @target_battlers = [friends[rand(friends.size)]]
  2017. elsif @target_battlers[0].is_a?(Game_Enemy)
  2018. friends = $game_troop.enemies.dup
  2019. friends.delete(@active_battler)
  2020. @target_battlers = [friends[rand(friends.size)]]
  2021. end
  2022. else
  2023. @target_battlers.delete(@active_battler)
  2024. end
  2025. end
  2026.  
  2027. @active_battler.covered_friends = @target_battlers.dup
  2028. @active_battler.add_state(get_cover_state_id())##ステート付加時にデフォルト回数で発動回数が設定される
  2029. if (cover_num > 0)
  2030. @active_battler.cover_remain = cover_num#発動回数が有った場合はその回数で上書き
  2031. end
  2032. for target in @target_battlers
  2033. target.damage = COVER_EFFECT_CHAR
  2034. end
  2035. end
  2036. end
  2037. ##ここまで
  2038. end
  2039.  
  2040. class Game_Party
  2041. ##追加エイリアス
  2042. include Cover_Module
  2043. #--------------------------------------------------------------------------
  2044. # ● 対象アクターのスムーズな決定
  2045. # actor_index : アクターインデックス
  2046. #--------------------------------------------------------------------------
  2047.  
  2048. alias before_cover_original_smooth_target_actor smooth_target_actor
  2049.  
  2050. def smooth_target_actor(actor_index)
  2051. if $scene.is_a?(Scene_Battle)
  2052. battler = $scene.active_battler()
  2053. else
  2054. battler = nil
  2055. end
  2056.  
  2057. target = [before_cover_original_smooth_target_actor(actor_index)]
  2058. get_target_battlers_after_cover!(target, battler)
  2059.  
  2060. return target[0]
  2061. end
  2062. ##ここまで
  2063. end
  2064.  
  2065. class Game_Troop
  2066. ##追加エイリアス
  2067. include Cover_Module
  2068. #--------------------------------------------------------------------------
  2069. # ● 対象エネミーのスムーズな決定
  2070. # enemy_index : エネミーインデックス
  2071. #--------------------------------------------------------------------------
  2072.  
  2073. alias before_cover_original_smooth_target_enemy smooth_target_enemy
  2074.  
  2075. def smooth_target_enemy(enemy_index)
  2076. if $scene.is_a?(Scene_Battle)
  2077. battler = $scene.active_battler()
  2078. else
  2079. battler = nil
  2080. end
  2081.  
  2082. target = [before_cover_original_smooth_target_enemy(enemy_index)]
  2083. get_target_battlers_after_cover!(target, battler)
  2084.  
  2085. return target[0]
  2086. end
  2087. ##ここまで
  2088. end
  2089.  
  2090.  
  2091. #==============================================================================
  2092. # ◇ 付加属性名称判定モジュール
  2093. #==============================================================================
  2094. module Check_ElementName_Set
  2095. #--------------------------------------------------------------------------
  2096. # ● スキルが指定名の属性を持つか判定
  2097. #--------------------------------------------------------------------------
  2098. def skill_element_include?(skill, element_name)
  2099. @one = @two = nil
  2100. return false if skill == nil or !skill.is_a?(RPG::Skill)
  2101. for i in skill.element_set
  2102. if $data_system.elements[i] =~ /#{element_name}([+-]?[0-9]+)?(%)?/
  2103. @one = $1
  2104. @two = $2
  2105. return true
  2106. end
  2107. end
  2108. return false
  2109. end
  2110. #--------------------------------------------------------------------------
  2111. # ● アイテムが指定名の属性を持つか判定
  2112. #--------------------------------------------------------------------------
  2113. def item_element_include?(item, element_name)
  2114. @one = @two = nil
  2115. return false if item == nil or !item.is_a?(RPG::Item)
  2116. for i in item.element_set
  2117. if $data_system.elements[i] =~ /#{element_name}([+-]?[0-9]+)?(%)?/
  2118. @one = $1
  2119. @two = $2
  2120. return true
  2121. end
  2122. end
  2123. return false
  2124. end
  2125. #--------------------------------------------------------------------------
  2126. # ● 武器が指定名の属性を持つか判定
  2127. #--------------------------------------------------------------------------
  2128. def weapon_element_include?(weapon_id, element_name)
  2129. @one = @two = nil
  2130. return false if weapon_id == nil or weapon_id <= 0
  2131. for i in $data_weapons[weapon_id].element_set
  2132. if $data_system.elements[i] =~ /#{element_name}([+-]?[0-9]+)?(%)?/
  2133. @one = $1
  2134. @two = $2
  2135. return true
  2136. end
  2137. end
  2138. return false
  2139. end
  2140. #--------------------------------------------------------------------------
  2141. # ● 防具が指定名の属性を持つか判定
  2142. #--------------------------------------------------------------------------
  2143. def armor_element_include?(armor_id, element_name)
  2144. @one = @two = nil
  2145. return false if armor_id == nil or armor_id <= 0
  2146. for i in $data_armors[armor_id].guard_element_set
  2147. if $data_system.elements[i] =~ /#{element_name}([+-]?[0-9]+)?(%)?/
  2148. @one = $1
  2149. @two = $2
  2150. return true
  2151. end
  2152. end
  2153. return false
  2154. end
  2155. #--------------------------------------------------------------------------
  2156. # ● 防具が指定名の属性を持つ場合その後に付く接尾テキストを取得
  2157. #--------------------------------------------------------------------------
  2158. def armor_element_suftext(armor_id, element_name)
  2159. return nil if armor_id == nil or armor_id <= 0
  2160. for i in $data_armors[armor_id].guard_element_set
  2161. if $data_system.elements[i] =~ /#{element_name}(.*)/
  2162. return $1
  2163. end
  2164. end
  2165. return nil
  2166. end
  2167. #--------------------------------------------------------------------------
  2168. # ● アクターが指定名の属性を持つ武器を装備しているかか判定
  2169. #--------------------------------------------------------------------------
  2170. def equip_weapon_element_include?(actor, element_name)
  2171. @one = @two = nil
  2172. return false if !actor.is_a?(Game_Actor)
  2173. return false if actor.weapon_id == nil or actor.weapon_id <= 0
  2174. bool = false
  2175. one_total = 0
  2176. for i in $data_weapons[actor.weapon_id].element_set
  2177. if $data_system.elements[i] =~ /#{element_name}([+-]?[0-9]+)?(%)?/
  2178. one_total += $1.to_i
  2179. @two = $2
  2180. bool = true
  2181. end
  2182. end
  2183. # 武器管理システムXC.が導入されている場合
  2184. if $xrxs24_weapon_property_system_work
  2185. for i in [PROPERTY_ELEMENT_GRANT_1st, PROPERTY_ELEMENT_GRANT_2nd,
  2186. PROPERTY_ELEMENT_GRANT_3rd, PROPERTY_ELEMENT_GRANT_4th]
  2187. if $data_system.elements[actor.weapon_property[i]] =~ /#{element_name}([+-]?[0-9]+)?(%)?/
  2188. one_total += $1.to_i
  2189. @two = $2
  2190. bool = true
  2191. end
  2192. end
  2193. end
  2194. @one = one_total
  2195. return bool
  2196. end
  2197. #--------------------------------------------------------------------------
  2198. # ● アクターが指定名の属性を持つ武器/防具を装備中か判定 数値の合計も保持
  2199. #--------------------------------------------------------------------------
  2200. def actor_element_equip?(actor, element_name)
  2201. one_total = 0
  2202. bool = false
  2203. return false if !actor.is_a?(Game_Actor)
  2204. weapon = $data_weapons[actor.weapon_id]
  2205. armor1 = $data_armors[actor.armor1_id]
  2206. armor2 = $data_armors[actor.armor2_id]
  2207. armor3 = $data_armors[actor.armor3_id]
  2208. armor4 = $data_armors[actor.armor4_id]
  2209. if equip_weapon_element_include?(actor, element_name)
  2210. one_total += @one.to_i
  2211. bool = true
  2212. end
  2213. if armor_element_include?(armor1.id, element_name)
  2214. one_total += @one.to_i
  2215. bool = true
  2216. end
  2217. if armor_element_include?(armor2.id, element_name)
  2218. one_total += @one.to_i
  2219. bool = true
  2220. end
  2221. if armor_element_include?(armor3.id, element_name)
  2222. one_total += @one.to_i
  2223. bool = true
  2224. end
  2225. if armor_element_include?(armor4.id, element_name)
  2226. one_total += @one.to_i
  2227. bool = true
  2228. end
  2229. @one = one_total
  2230. return bool
  2231. end
  2232. end
  2233. #=============================================================================
  2234. # ◇ かばうModule
  2235. #=============================================================================
  2236. ####以下新規追加Module
  2237. module Cover_Module
  2238. #--------------------------------------------------------------------------
  2239. # ● かばう 後のターゲット配列生成
  2240. #--------------------------------------------------------------------------
  2241. def get_target_battlers_after_cover!(target_battlers, active_battler = nil)
  2242. #HP割合の低い順にソート
  2243. #target_battlers.sort_by!{|b| (b.hp.to_f/b.maxhp.to_f)}
  2244. target_battlers.sort!{|a,b| (a.hp.to_f/a.maxhp.to_f) <=> (b.hp.to_f/b.maxhp.to_f)}
  2245. #HP割合の多い順にソート
  2246. actors = $game_party.actors.sort_by{|b| (b.hp.to_f/b.maxhp.to_f)}.reverse
  2247. enemies = $game_troop.enemies.sort_by{|b| (b.hp.to_f/b.maxhp.to_f)}.reverse
  2248.  
  2249. for i in 0...target_battlers.size
  2250. if target_battlers[i].is_a?(Game_Actor)
  2251. for actor in actors
  2252. new_target = get_target_after_cover(active_battler,target_battlers[i],actor)
  2253. if !new_target.equal?(target_battlers[i]) && new_target.current_friend.nil? #かばう人がすでにかばっていた場合かばえない
  2254. new_target.effect_message = "#{new_target.name}は#{target_battlers[i].name}をかばった!"
  2255. new_target.current_friend = target_battlers[i]
  2256. new_target.current_friend.damage = COVER_EFFECT_CHAR
  2257. target_battlers[i] = new_target
  2258. break
  2259. end
  2260. end
  2261. end
  2262.  
  2263. if target_battlers[i].is_a?(Game_Enemy)
  2264. for enemy in enemies
  2265. new_target = get_target_after_cover(active_battler,target_battlers[i],enemy)
  2266. if !new_target.equal?(target_battlers[i]) && new_target.current_friend.nil? #かばう人がすでにかばっていた場合かばえない
  2267. new_target.effect_message = "#{new_target.name}は#{target_battlers[i].name}をかばった!"
  2268. new_target.current_friend = target_battlers[i]
  2269. new_target.current_friend.damage = COVER_EFFECT_CHAR
  2270. target_battlers[i] = new_target
  2271. break
  2272. end
  2273. end
  2274. end
  2275. end
  2276. #ターゲット重複を排除する(かばった人が2度ダメージを受けない)
  2277. target_battlers.uniq!()
  2278. #「かばう」ステートの解除判定
  2279. for target in target_battlers
  2280. if !target.current_friend.nil?
  2281. #かばう 残り回数がなくなった場合
  2282. target.cover_remain -= 1
  2283. if target.cover_remain <= 0
  2284. target.remove_state(get_cover_state_id())
  2285. target.cover_remain = 0
  2286. end
  2287. end
  2288. end
  2289. end
  2290. #--------------------------------------------------------------------------
  2291. # ● かばう の発動判定
  2292. #--------------------------------------------------------------------------
  2293. def get_target_after_cover(battler, target, coverer)
  2294. #味方からのターゲットは庇わない
  2295. if battler.is_a?(Game_Actor)
  2296. if target.is_a?(Game_Actor)
  2297. return target
  2298. end
  2299. end
  2300. if battler.is_a?(Game_Enemy)
  2301. if target.is_a?(Game_Enemy)
  2302. return target
  2303. end
  2304. end
  2305. #庇う人が動けない時は庇わない
  2306. if !(coverer.movable? && coverer.exist?)
  2307. return target
  2308. end
  2309. #庇う人が かばう のステートになっている時のみ
  2310. if !coverer.state?(get_cover_state_id())
  2311. return target
  2312. end
  2313. #ターゲットが既に他の人を庇っている時は無効
  2314. if target.state?(get_cover_state_id())
  2315. return target
  2316. end
  2317. #ターゲットと庇う人が同じの場合は無効
  2318. if target.equal?(coverer)
  2319. return target
  2320. end
  2321. #発動確率判定
  2322. if !(rand(100) <= COVER_EFFECT_PERCENT)
  2323. return taget
  2324. end
  2325. #ターゲットのHP割合判定
  2326. if !(100.0*target.hp.to_f/target.maxhp.to_f <= COVER_HP_PERCENT)
  2327. return target
  2328. end
  2329. #「かばっている味方配列」が空だったら、全ての味方を庇う
  2330. if coverer.covered_friends.size.zero?
  2331. return coverer
  2332. else
  2333. for covered_friend in coverer.covered_friends
  2334. if target.equal?(covered_friend)
  2335. return coverer
  2336. end
  2337. end
  2338. end
  2339. return target
  2340. end
  2341. #--------------------------------------------------------------------------
  2342. # ● かばう のStateID
  2343. #--------------------------------------------------------------------------
  2344. def get_cover_state_id
  2345. result = nil
  2346. if @cover_status_id == nil
  2347. for i in 1 ... $data_states.size
  2348. if $data_states[i].name[/\A#{STATE_NAME_COVER}\Z/]
  2349. result = $data_states[i].id
  2350. break
  2351. end
  2352. end
  2353. @cover_status_id = ( result != nil ? result : 0 )
  2354. elsif @cover_status_id > 0
  2355. result = @cover_status_id
  2356. end
  2357. return result
  2358. end
  2359. end
  2360. ####Module End
  2361. #//////////////////////////////////////////////////////////////////////////////
  2362. # ◇ インクルード
  2363. #//////////////////////////////////////////////////////////////////////////////
  2364. module Check_ElementName_Set
  2365. include Fixed_PropertyNumber if $xrxs24_weapon_property_system_work
  2366. end
  2367. class Game_Battler
  2368. include Check_ElementName_Set
  2369. include Cover_Module
  2370. end
  2371. class Window_Item < Window_Selectable
  2372. include Check_ElementName_Set
  2373. end
  2374. class Scene_Battle
  2375. include Check_ElementName_Set
  2376. include Cover_Module
  2377. end
  2378. #==============================================================================
  2379. # ◇ RPG::再定義「"SP "を含む場合SPダメージとして色を変更」
  2380. #==============================================================================
  2381. module RPG
  2382. class Sprite < ::Sprite
  2383. alias xrxs19_damage damage
  2384. def damage(value, critical)
  2385. if value.is_a?(String) and value.include?($data_system.words.sp)
  2386. # 解放
  2387. dispose_damage
  2388. # 数値部分を抜き取る
  2389. value = value.scan(/[+-]?[0-9]+/)[0].to_i
  2390. # 表示文字列の設定
  2391. damage_string = $data_system.words.sp + " " + value.abs.to_s
  2392. # 描写
  2393. bitmap = Bitmap.new(160, 48)
  2394. bitmap.font.name = "黑体"
  2395. bitmap.font.size = 32
  2396. bitmap.font.color.set(0, 0, 0)
  2397. bitmap.draw_text(-1, 12-1, 160, 36, damage_string, 1)
  2398. bitmap.draw_text(+1, 12-1, 160, 36, damage_string, 1)
  2399. bitmap.draw_text(-1, 12+1, 160, 36, damage_string, 1)
  2400. bitmap.draw_text(+1, 12+1, 160, 36, damage_string, 1)
  2401. if value < 0
  2402. bitmap.font.color.set(128, 255, 255)
  2403. else
  2404. bitmap.font.color.set(255, 176, 144)
  2405. end
  2406. bitmap.draw_text(0, 12, 160, 36, damage_string, 1)
  2407. if critical
  2408. bitmap.font.size = 20
  2409. bitmap.font.color.set(0, 0, 0)
  2410. bitmap.draw_text(-1, -1, 160, 20, "CRITICAL", 1)
  2411. bitmap.draw_text(+1, -1, 160, 20, "CRITICAL", 1)
  2412. bitmap.draw_text(-1, +1, 160, 20, "CRITICAL", 1)
  2413. bitmap.draw_text(+1, +1, 160, 20, "CRITICAL", 1)
  2414. bitmap.font.color.set(255, 255, 255)
  2415. bitmap.draw_text(0, 0, 160, 20, "CRITICAL", 1)
  2416. end
  2417. @_damage_sprite = ::Sprite.new(self.viewport)
  2418. @_damage_sprite.bitmap = bitmap
  2419. @_damage_sprite.ox = 80
  2420. @_damage_sprite.oy = 20
  2421. @_damage_sprite.x = self.x
  2422. @_damage_sprite.y = self.y - self.oy / 2
  2423. @_damage_sprite.z = 3000
  2424. @_damage_duration = 40
  2425. else
  2426. # 通常時?戻す
  2427. xrxs19_damage(value, critical)
  2428. end
  2429. end
  2430. end
  2431. end
  2432.  
  2433. #==============================================================================
  2434. # 本脚本来自[url]www.66RPG.com[/url],使用和转载请保留此信息
  2435. #==============================================================================
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-11-17 09:31

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表