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

Project1

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

[已经解决] 在某一脚本页调用另一脚本页的变量

[复制链接]

Lv3.寻梦者

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

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

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

x
本帖最后由 wyw838 于 2019-4-30 20:46 编辑

问题描述如图...我插入了两个新脚本如下...一个是战斗特殊效果,另一个是技能特殊消耗...因为战斗特殊效果的多次行动会和另一个脚本里的技能cd冲突...所以想要在战斗特殊效果脚本中添加一个bool变量以控制多次行动时cd不启用...但是并不知道怎么把两个脚本归到一个类里,所以想要请教一下QWQ
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. if @phase4_act_times_max>1
  1080.   flag_t=true
  1081. end
  1082. # 特殊効果:消費金額に順ずる固定ダメージ
  1083. if skill_element_include?(@skill, "金钱投掷")
  1084. # ゴールドウィンドウを作成
  1085. if @gold_window == nil or @gold_window.visible == false
  1086. @gold_window = Window_Gold.new
  1087. @gold_window.x = 640 - @gold_window.width
  1088. @gold_window.y = 64
  1089. @gold_window.opacity = 160
  1090. @gold_window.visible = true
  1091. end
  1092. end
  1093. # HP消費スキルの場合
  1094. if skill_element_include?(@skill, ELEMENT_NAME_HP_COST)
  1095. # HPが足りるか判定
  1096. if @active_battler.hp <= @skill.sp_cost
  1097. # 足りない場合
  1098. # ステップ 1 に移行
  1099. @phase4_step = 1
  1100. return
  1101. end
  1102. # SP消費分のSPを回復させて擬似的にSPを減らさない(最大値を超えて回復)
  1103. @active_battler.hp0_ban = true
  1104. @active_battler.sp += @skill.sp_cost
  1105. # 戻す
  1106. xrxs19_make_skill_action_result
  1107. # HPを消費
  1108. @active_battler.hp -= @skill.sp_cost
  1109. # HP/SPの制限の解除
  1110. @active_battler.hp0_ban = false
  1111. return
  1112. end
  1113. end
  1114. xrxs19_make_skill_action_result
  1115. ##追加
  1116. make_cover_skill_action_result()
  1117. end
  1118. #--------------------------------------------------------------------------
  1119. # ● フレーム更新 (メインフェーズ ステップ 3 : 行動側アニメーション)
  1120. #--------------------------------------------------------------------------
  1121. alias xrxs19_update_phase4_step3 update_phase4_step3
  1122. def update_phase4_step3
  1123. # 既に一回以上行動している場合
  1124. if @phase4_act_continuation >= 1
  1125. # ステップ 4 に移行
  1126. @phase4_step = 4
  1127. @wait_count = 0
  1128. return
  1129. end
  1130. xrxs19_update_phase4_step3
  1131. # ちからためメッセージ表示。
  1132. for target in @target_battlers
  1133. if !target.action_message.nil?
  1134. @help_window.set_text(target.action_message, 1)
  1135. target.action_message = nil
  1136. end
  1137. end
  1138. end
  1139. #--------------------------------------------------------------------------
  1140. # ● フレーム更新 (メインフェーズ ステップ 4 : 対象側アニメーション)
  1141. #--------------------------------------------------------------------------
  1142. alias xrxs19_update_phase4_step4 update_phase4_step4
  1143. def update_phase4_step4
  1144. # 武器投擲時、「武器のアニメーション」を対象に使う
  1145. if skill_element_include?(@skill, "武器投掷")
  1146. @animation2_id = $data_weapons[@active_battler.current_action.basic].animation2_id
  1147. end
  1148. # ゴールドウィンドウを更新
  1149. @gold_window.refresh if @gold_window != nil
  1150. if skill_element_include?(@skill, "变身")
  1151. tb_array = @target_battlers
  1152. @target_battlers = [@active_battler]
  1153. xrxs19_update_phase4_step4
  1154. @target_battlers = tb_array
  1155. else
  1156. xrxs19_update_phase4_step4
  1157. end
  1158. # かばわれたメンバーのアニメーション
  1159. for target in @target_battlers
  1160. if target.current_friend != nil
  1161. target.current_friend.animation_id = COVER_ANIMATION_ID
  1162. end
  1163. end
  1164. # 既に一回以上行動している場合
  1165. if @phase4_act_continuation >= 1
  1166. @wait_count = 0
  1167. end
  1168. end
  1169. #--------------------------------------------------------------------------
  1170. # ● フレーム更新 (メインフェーズ ステップ 5 : ダメージ表示)
  1171. #--------------------------------------------------------------------------
  1172. alias xrxs19_update_phase4_step5 update_phase4_step5
  1173. def update_phase4_step5
  1174. # 呼び戻す
  1175. xrxs19_update_phase4_step5
  1176. # かばわれたメンバーのダメージ
  1177. for target in @target_battlers
  1178. if target.current_friend != nil
  1179. target.current_friend.damage_pop = true
  1180. #かばっている状態の初期化
  1181. target.current_friend = nil
  1182. end
  1183. end
  1184. # 生存確認
  1185. target_still_left = false
  1186. for target in @target_battlers
  1187. # ターゲットが生き残っているか判別
  1188. target_still_left = true if !target.dead?
  1189. # 戦闘不能時で、変身を解除
  1190. if target.dead? and target.metamor_target != nil
  1191. target.animation_id = 17 # 戦闘不能変身解除時のアニメーションID
  1192. target.animation_hit = true
  1193. target.battler_name = target.battler_name_original
  1194. target.metamor_target = nil
  1195. end
  1196. end
  1197. # ダメージ表示
  1198. if @active_battler.damage != nil
  1199. @active_battler.damage_pop = true
  1200. end
  1201. # 変身対象のバトラーグラフィックをコピー
  1202. if skill_element_include?(@skill, "变身")
  1203. if @active_battler.metamor_target != nil
  1204. @active_battler.battler_name = @active_battler.metamor_target.battler_name
  1205. else
  1206. @active_battler.battler_name = @active_battler.battler_name_original
  1207. end
  1208. end
  1209. # ターゲットの敵への処理
  1210. for target in @target_battlers
  1211. # スティール結果メッセージ表示。ただし、複数ターゲットの表示は不可能
  1212. if !target.effect_message.nil?
  1213. @help_window.set_text(target.effect_message, 1)
  1214. target.effect_message = nil
  1215. end
  1216. end
  1217. # 行動した回数のカウントを 1 加算
  1218. @phase4_act_continuation += 1
  1219. # 実行済み行動回数が、指定行動回数に達したかを判別
  1220. if @phase4_act_continuation < @phase4_act_times_max
  1221. # 達していない場合
  1222. # 生存している場合、続ける。
  1223. if target_still_left
  1224. # 指定行動回数に満たない場合は繰り返す為、ステップ 2 に移行
  1225. @phase4_step = 2
  1226. @wait_count = 0
  1227. # スキル使用中の場合はヘルプウィンドウを隠すのをやめる
  1228. if @active_battler.current_action.kind == 1
  1229. @help_window.visible = true
  1230. end
  1231. end
  1232. else
  1233. # 達した場合
  1234. # 敵が生存、かつ skillが"派生"属性を持つ場合
  1235. if target_still_left and
  1236. (skill_element_include?(@skill, ELEMENT_NAME_DERIVER) or
  1237. (@weapon_id != nil and equip_weapon_element_include?(@active_battler, ELEMENT_NAME_DERIVER)))
  1238. if @one.to_i > 0
  1239. # 回数をリセット
  1240. @phase4_act_continuation = 0
  1241. @phase4_act_times_max = 1
  1242. flag_t=false
  1243. # 武器攻撃ではなくなるため @weapon_id を nil 化
  1244. @weapon_id = nil
  1245. # 新しいスキルID
  1246. @active_battler.current_action.kind = 1
  1247. @active_battler.current_action.skill_id = @one.to_i
  1248. # ステップ 2 に移行
  1249. @phase4_step = 2
  1250. @wait_count = 0
  1251. end
  1252. end
  1253. end
  1254. # ゴールドウィンドウを隠す
  1255. @gold_window.visible = false if @gold_window != nil
  1256. end
  1257. #--------------------------------------------------------------------------
  1258. # ● フレーム更新 (メインフェーズ ステップ 6 : リレイズ表示→リフレッシュ)
  1259. #--------------------------------------------------------------------------
  1260. alias xrxs19_update_phase4_step6 update_phase4_step6
  1261. def update_phase4_step6
  1262. next_phase_ok = true
  1263. #リレイズ判定
  1264. for enemy in $game_troop.enemies
  1265. next_phase_ok = update_reraise_effect(enemy)
  1266. if !next_phase_ok
  1267. return
  1268. end
  1269. end
  1270. for actor in $game_party.actors
  1271. next_phase_ok = update_reraise_effect(actor)
  1272. if !next_phase_ok
  1273. return
  1274. end
  1275. end
  1276. if next_phase_ok
  1277. xrxs19_update_phase4_step6
  1278. end
  1279. end
  1280. #===================================================
  1281. #リレイズエフェクト
  1282. #===================================================
  1283. def update_reraise_effect(battler)
  1284. if battler.reraised
  1285. case battler.reraise_state
  1286. when 0
  1287. battler.reraise_state = 1 # コラプス待ち
  1288. @wait_count = 16
  1289. return false
  1290. when 1
  1291. battler.reraise_state = 2 # 復活アニメーション
  1292. ##IDは好きなアニメーションIDを指定
  1293. battler.animation_id = RERAISE_ANIMATION_ID
  1294. @wait_count = 8
  1295. return false#
  1296. when 2
  1297. #復活処理
  1298. battler.hp = battler.maxhp * RERAISE_HP_PERCENT / 100 + RERAISE_HP
  1299. battler.reraise_state = 3 #アピアーアニメーション
  1300. @wait_count = 8
  1301. return false#
  1302. when 3
  1303. battler.reraise_state = 0 #終了?通常処理に戻る
  1304. battler.reraised = false #フラグを初期値へ
  1305. @status_window.refresh
  1306. return true
  1307. end
  1308. else
  1309. return true
  1310. end
  1311. end
  1312. #--------------------------------------------------------------------------
  1313. # ● アフターバトルフェーズ開始
  1314. #--------------------------------------------------------------------------
  1315. alias xrxs19_update_phase5 update_phase5
  1316. def update_phase5
  1317. next_phase_ok = false
  1318. # 次のアクターへ
  1319. @phase5_i = -1 if @phase5_i == nil
  1320. @phase5_i += 1
  1321. if @phase5_i < $game_party.actors.size
  1322. actor = $game_party.actors[@phase5_i]
  1323. # 変身状態の味方がいるか判別し、それを解除する
  1324. if actor.metamor_target != nil
  1325. actor.animation_id = 17 # 戦闘終了変身解除時のアニメーションID
  1326. actor.animation_hit = true
  1327. actor.battler_name = actor.battler_name_original
  1328. actor.metamor_target = nil
  1329. # ステータスウィンドウをリフレッシュ
  1330. @status_window.refresh
  1331. # アニメーションの長さにかかわらず、最低 4 フレーム待つ
  1332. @wait_count = 4
  1333. end
  1334. else
  1335. next_phase_ok = true
  1336. end
  1337. if next_phase_ok
  1338. xrxs19_update_phase5
  1339. end
  1340. end
  1341. #--------------------------------------------------------------------------
  1342. # ● 行動順序作成
  1343. #--------------------------------------------------------------------------
  1344. alias xrxs19_make_action_orders make_action_orders
  1345. def make_action_orders
  1346. xrxs19_make_action_orders
  1347. # 優先度の大きい順 (同値の場合は素早さの速い順) に並び替え
  1348. @action_battlers.sort! do |a, b|
  1349. if a.current_action.speed_priority > b.current_action.speed_priority
  1350. -1
  1351. elsif a.current_action.speed_priority < b.current_action.speed_priority
  1352. +1
  1353. elsif a.current_action.speed > b.current_action.speed
  1354. -1
  1355. elsif a.current_action.speed < b.current_action.speed
  1356. +1
  1357. else
  1358. 0 # a <=> b
  1359. end
  1360. end
  1361. end
  1362. #--------------------------------------------------------------------------
  1363. # ● バトル終了
  1364. #--------------------------------------------------------------------------
  1365. alias xrxs19_battle_end battle_end
  1366. def battle_end(result)
  1367. for i in 0...$game_party.actors.size
  1368. actor = $game_party.actors[i]
  1369. # 変身状態の味方がいるか判別し、それを解除する
  1370. if actor.metamor_target != nil
  1371. actor.battler_name = actor.battler_name_original
  1372. actor.metamor_target = nil
  1373. end
  1374. end
  1375. xrxs19_battle_end(result)
  1376. end
  1377. end
  1378. #=============================================================================
  1379. # ◇ スティール
  1380. #=============================================================================
  1381. class Game_Battler
  1382. #--------------------------------------------------------------------------
  1383. # ● 公開インスタンス変数
  1384. #--------------------------------------------------------------------------
  1385. attr_accessor :effect_message
  1386. #--------------------------------------------------------------------------
  1387. # ● オブジェクト初期化
  1388. #--------------------------------------------------------------------------
  1389. alias before_steal_original_battler_initialize initialize
  1390. def initialize
  1391. before_steal_original_battler_initialize()
  1392. @effect_message = nil
  1393. @steal_skill_id = $data_system.elements.index(STEAL_SKILL_ELEMENT_NAME)
  1394. end
  1395. end
  1396. class Game_Enemy < Game_Battler
  1397. #--------------------------------------------------------------------------
  1398. # ● オブジェクト初期化
  1399. #--------------------------------------------------------------------------
  1400. alias before_steal_original_enemy_initialize initialize
  1401. def initialize(troop_id, member_index)
  1402. before_steal_original_enemy_initialize(troop_id, member_index)
  1403. @item_possession = true
  1404. end
  1405. #===================================================
  1406. #
  1407. #===================================================
  1408. def name
  1409. name = $data_enemies[@enemy_id].name.split(/-/)[0]
  1410. if !name.nil?
  1411. return name = name.strip()
  1412. else
  1413. return ''
  1414. end
  1415. end
  1416. #===================================================
  1417. #ノーマルアイテムの指定 
  1418. #エネミーネームに -n種類 ID 個数(-na 10 10) と入れて指定。
  1419. #種類は、i(アイテム) w(武器) a(防具)のいずれか一つ
  1420. #個数は省略可能、自動で1扱い。
  1421. #また、ドロップアイテムと同一にしたい場合は
  1422. #エネミーネームに -nd 個数(-nd 2) と入れて指定。
  1423. #個数は省略可能、自動で1扱い。
  1424. #===================================================
  1425.  
  1426. def normal_item
  1427. return get_item_from_name("n")#オプション"n"の文字列から取得
  1428. end
  1429.  
  1430. #===================================================
  1431. #レアアイテムの指定 
  1432. #エネミーネームに -r種類 ID 個数(-na 10 10) と入れて指定。
  1433. #種類は、i(アイテム) w(武器) a(防具)のいずれか一つ
  1434. #個数は省略可能、自動で1扱い。
  1435. #また、ドロップアイテムと同一にしたい場合は
  1436. #エネミーネームに -rd 個数(-nd 2) と入れて指定。
  1437. #個数は省略可能、自動で1扱い。
  1438. #===================================================
  1439.  
  1440. def rare_item
  1441. return get_item_from_name("r")#オプション"r"の文字列から取得
  1442. end
  1443.  
  1444. #===================================================
  1445. #*Nameからアイテムを抜き出す処理
  1446. #===================================================
  1447. def get_item_from_name(opt)
  1448. names = $data_enemies[@enemy_id].name.split(/-/)
  1449. if names.size > 1
  1450. for i in 1...names.size
  1451. if names[i][0,1] != opt
  1452. next
  1453. end
  1454.  
  1455. names[i].sub!(/^.(.*)/){$1}
  1456. ary = names[i].split(/ /)
  1457.  
  1458. if ary[0][0,1] == "g"
  1459. cgy = "g"
  1460. id = 0
  1461. if ary[1].nil?
  1462. ary[1] = "1"
  1463. elsif ary[1].sub!(/^([0-9]+)/){$1}.nil?
  1464. ary[1] = "1"
  1465. end
  1466. possession = {"Category"=>cgy, "ID"=>id, "Num"=>ary[1].to_i}
  1467. return possession
  1468.  
  1469. elsif ary[0][0,1] == "d"
  1470. cgy = ""
  1471. id = 0
  1472. if self.item_id != 0
  1473. cgy = "i"
  1474. id = self.item_id
  1475. elsif self.weapon_id != 0
  1476. cgy = "w"
  1477. id = self.weapon_id
  1478. elsif self.armor_id != 0
  1479. cgy = "a"
  1480. id = self.armor_id
  1481. else
  1482. return nil
  1483. end
  1484.  
  1485. if ary[1].nil?
  1486. ary[1] = "1"
  1487. elsif ary[1].sub!(/^([0-9]+)/){$1}.nil?
  1488. ary[1] = "1"
  1489. end
  1490. possession = {"Category"=>cgy, "ID"=>id, "Num"=>ary[1].to_i}
  1491. return possession
  1492.  
  1493. elsif !ary[0].sub!(/^([iwa])/){$1}.nil? && !ary[1].sub!(/^([0-9]+)/){$1}.nil?
  1494. if ary[2].nil? || ary[2].sub!(/^([0-9]+)/){$1}.nil?
  1495. ary[2] = "1"
  1496. end
  1497. possession = {"Category"=>ary[0], "ID"=>ary[1].to_i, "Num"=>ary[2].to_i}
  1498. return possession
  1499.  
  1500. end
  1501. end
  1502. end
  1503. return nil
  1504. end
  1505.  
  1506. #===================================================
  1507. #スティールエフェクト
  1508. #===================================================
  1509.  
  1510. def steal_effect(user, skill) # 引数skillを追加
  1511.  
  1512. pos = self.normal_item
  1513.  
  1514. if !@item_possession || pos.nil?
  1515. @effect_message = "没有东西可偷。"
  1516. #self.damage = "Miss"
  1517. return false
  1518. end
  1519.  
  1520. #盗み成功判定 アジリティが同一で50%、2倍で100%
  1521. if rand(100) <= ((user.agi+0.01)/(self.agi+0.01))*100/2
  1522. r_pos = self.rare_item
  1523. #レアアイテム判定
  1524. if !r_pos.nil? && rand(10) <= 1
  1525. pos = r_pos
  1526. end
  1527.  
  1528. case pos["Category"]
  1529. when "i"
  1530. item = $data_items[pos["ID"]]
  1531. if item.nil?
  1532. print "这个物品不存在!"
  1533. return false
  1534. end
  1535. $game_party.gain_item(item.id, pos["Num"])
  1536. when "w"
  1537. item = $data_weapons[pos["ID"]]
  1538. if item.nil?
  1539. print "这个物品不存在!"
  1540. return false
  1541. end
  1542. $game_party.gain_weapon(item.id, pos["Num"])
  1543. when "a"
  1544. item = $data_armors[pos["ID"]]
  1545. if item.nil?
  1546. print "这个物品不存在!"
  1547. return false
  1548. end
  1549. $game_party.gain_armor(item.id, pos["Num"])
  1550. when "g"
  1551. # ゴールド獲得
  1552. $game_party.gain_gold(pos["Num"])
  1553. end
  1554.  
  1555. if pos["Category"] == "g"
  1556. @effect_message = "#{pos["Num"]}#{$data_system.words.gold}偷到!"
  1557. else
  1558. @effect_message = "#{item.name}#{pos["Num"]}个偷到!"
  1559. end
  1560. @item_possession = false
  1561.  
  1562. self.damage = "Steal!" if self.damage == "Miss"
  1563. return true
  1564. else
  1565. @effect_message = "没有东西可偷???"
  1566. #self.damage = "Miss
  1567. return false
  1568. end
  1569.  
  1570. return false # 念のためfalse返す処理追加
  1571. # 多分なくてもifの結果(false)が返ると思うけど…
  1572. end
  1573. end
  1574. #=============================================================================
  1575. # ■ ライブラ スキル実装スクリプト 2004/09/24 - 0.1α
  1576. #=============================================================================
  1577. class Game_Battler
  1578. #--------------------------------------------------------------------------
  1579. # ● 追加公開インスタンス変数
  1580. #--------------------------------------------------------------------------
  1581. attr_accessor :libla_reserve # ライブラ予約
  1582. #--------------------------------------------------------------------------
  1583. # ● 初期化
  1584. #--------------------------------------------------------------------------
  1585. alias before_libra_initialize initialize
  1586.  
  1587. def initialize
  1588. before_libra_initialize
  1589. # 「ライブラ」属性のID取得
  1590. @libra_element_id = $data_system.elements.index(LIBLA_SKILL_ELEMENT_NAME)
  1591. @libra_element_id = 0 if @libra_element_id.nil?
  1592. # 今回の行動フェイズでライブラを受けたかどうかフラグ、初期化
  1593. @libla_reserve = false
  1594. end
  1595. #--------------------------------------------------------------------------
  1596. # ● スキルの効果適用
  1597. # user : 使用者 (バトラー)
  1598. # skill: スキル
  1599. #--------------------------------------------------------------------------
  1600. alias before_libra_skill_effect skill_effect
  1601. def skill_effect(user, skill)
  1602. #「ライブラ」スキルかどうかの判定。
  1603. if skill.element_set.include?(@libra_element_id)
  1604. # 命中率を適用する場合は下のif文のコメントを外してください
  1605. #if rand(100) < skill.hit
  1606. # このバトラーがエネミーなら情報ウィンドウを表示する
  1607. if self.is_a?(Game_Enemy)
  1608. self.libla_reserve = true
  1609. end
  1610. # 命中率を適用する場合は下のelse~endのコメントを外してください
  1611. #else
  1612. # self.damage = "Miss"
  1613. #end
  1614. # 普通のスキル判定は行わない。
  1615. return true
  1616. else
  1617. return before_libra_skill_effect(user, skill)
  1618. end
  1619. end
  1620. end
  1621. #==============================================================================
  1622. # ■ Scene_Battle
  1623. #==============================================================================
  1624. class Scene_Battle
  1625. #--------------------------------------------------------------------------
  1626. # ● フレーム更新 (メインフェーズ ステップ 5 : ダメージ表示)
  1627. #--------------------------------------------------------------------------
  1628. alias before_libra_update_phase4_step5 update_phase4_step5
  1629. def update_phase4_step5
  1630. # ダメージ表示
  1631. for target in @target_battlers
  1632. if target.libla_reserve
  1633. libra_window = Window_EnemyStatus.new(target)
  1634. loop do
  1635. # ゲーム画面を更新
  1636. Graphics.update
  1637. # 入力情報を更新
  1638. Input.update
  1639. # ボタンが押されたら情報ウィンドウを閉じてループを中断
  1640. if Input.trigger?(Input::C) or Input.trigger?(Input::B)
  1641. libra_window.dispose
  1642. libra_window = nil
  1643. break
  1644. end
  1645. end
  1646. end
  1647. # ライブラ予約フラグを解除
  1648. target.libla_reserve = false
  1649. end
  1650. before_libra_update_phase4_step5
  1651. end
  1652. end
  1653. #==============================================================================
  1654. # ■ Window_EnemyStatus
  1655. #------------------------------------------------------------------------------
  1656. #  エネミーのステータスを表示するステータスウィンドウです。
  1657. #==============================================================================
  1658. class Window_EnemyStatus < Window_Base
  1659. #--------------------------------------------------------------------------
  1660. # ● オブジェクト初期化
  1661. # enemy : エネミー
  1662. #--------------------------------------------------------------------------
  1663. def initialize(enemy)
  1664. super(0, 64, 640, 256)
  1665. self.contents = Bitmap.new(width - 32, height - 32)
  1666. self.back_opacity = 127
  1667. @enemy = enemy
  1668. refresh
  1669. end
  1670. #--------------------------------------------------------------------------
  1671. # ● リフレッシュ
  1672. #--------------------------------------------------------------------------
  1673. def refresh
  1674. self.contents.clear
  1675. draw_enemy_name(@enemy, 4, 0)
  1676. draw_enemy_state(@enemy, 4, 48)
  1677. draw_enemy_hp(@enemy,196, 48, 172)
  1678. draw_enemy_sp(@enemy,196, 72, 172)
  1679. draw_enemy_parameter(@enemy, 4, 120, 0)
  1680. draw_enemy_parameter(@enemy, 4, 144, 1)
  1681. draw_enemy_parameter(@enemy, 4, 168, 2)
  1682. draw_enemy_parameter(@enemy, 4, 192, 7)
  1683. draw_enemy_parameter(@enemy,196, 120, 3)
  1684. draw_enemy_parameter(@enemy,196, 144, 4)
  1685. draw_enemy_parameter(@enemy,196, 168, 5)
  1686. draw_enemy_parameter(@enemy,196, 192, 6)
  1687. self.contents.font.color = system_color
  1688. self.contents.draw_text(384, 24, 80, 32, "EXP")
  1689. self.contents.draw_text(384, 48, 80, 32, "金钱")
  1690. self.contents.draw_text(384, 96, 96, 32, "战利品")
  1691. self.contents.draw_text(384, 144, 96, 32, "偷窃物")
  1692. self.contents.font.color = normal_color
  1693. self.contents.draw_text(384 + 80, 24, 84, 32, @enemy.exp.to_s, 2)
  1694. self.contents.draw_text(384 + 80, 48, 84, 32, @enemy.gold.to_s, 2)
  1695. draw_item_name(get_enemy_item(@enemy,1), 384 + 16, 120)
  1696. draw_item_name(get_enemy_item(@enemy,2), 384 + 16, 168)
  1697. draw_item_name(get_enemy_item(@enemy,3), 384 + 16, 192)
  1698. end
  1699. #--------------------------------------------------------------------------
  1700. # ○ アイテムの取得
  1701. #--------------------------------------------------------------------------
  1702. def get_enemy_item( enemy, type )
  1703. case type
  1704. when 1:
  1705. if enemy.item_id != nil and enemy.item_id != 0
  1706. return $data_items[enemy.item_id]
  1707. elsif enemy.weapon_id != nil and enemy.weapon_id != 0
  1708. return $data_weapons[enemy.weapon_id]
  1709. elsif enemy.armor_id != nil and enemy.armor_id != 0
  1710. return $data_armors[enemy.armor_id]
  1711. else
  1712. return nil
  1713. end
  1714. when 2:
  1715. info = enemy.get_item_from_name("n")
  1716. return nil if info == nil
  1717. case info["Category"]
  1718. when "i"
  1719. return $data_items[info["ID"]]
  1720. when "w"
  1721. return $data_weapons[info["ID"]]
  1722. when "a"
  1723. return $data_armors[info["ID"]]
  1724. otherwise
  1725. return nil
  1726. end
  1727. when 3:
  1728. info = enemy.get_item_from_name("r")
  1729. return nil if info == nil
  1730. case info["Category"]
  1731. when "i"
  1732. return $data_items[info["ID"]]
  1733. when "w"
  1734. return $data_weapons[info["ID"]]
  1735. when "a"
  1736. return $data_armors[info["ID"]]
  1737. otherwise
  1738. return nil
  1739. end
  1740. otherwise
  1741. return nil
  1742. end
  1743. end
  1744. #--------------------------------------------------------------------------
  1745. # ● 名前の描画
  1746. # enemy : エネミー
  1747. # x : 描画先 X 座標
  1748. # y : 描画先 Y 座標
  1749. #--------------------------------------------------------------------------
  1750. def draw_enemy_name(enemy, x, y)
  1751. self.contents.font.color = normal_color
  1752. self.contents.draw_text(x, y, 120, 32, enemy.name)
  1753. end
  1754. #--------------------------------------------------------------------------
  1755. # ● ステートの描画
  1756. # enemy : エネミー
  1757. # x : 描画先 X 座標
  1758. # y : 描画先 Y 座標
  1759. # width : 描画先の幅
  1760. #--------------------------------------------------------------------------
  1761. def draw_enemy_state(enemy, x, y, width = 120)
  1762. text = make_battler_state_text(enemy, width, true)
  1763. self.contents.font.color = enemy.hp == 0 ? knockout_color : normal_color
  1764. self.contents.draw_text(x, y, width, 32, text)
  1765. end
  1766. #--------------------------------------------------------------------------
  1767. # ● HP の描画
  1768. # enemy : エネミー
  1769. # x : 描画先 X 座標
  1770. # y : 描画先 Y 座標
  1771. # width : 描画先の幅
  1772. #--------------------------------------------------------------------------
  1773. def draw_enemy_hp(enemy, x, y, width = 144)
  1774. # 文字列 "HP" を描画
  1775. self.contents.font.color = system_color
  1776. self.contents.draw_text(x, y, 32, 32, $data_system.words.hp)
  1777. # MaxHP を描画するスペースがあるか計算
  1778. if width - 32 >= 108
  1779. hp_x = x + width - 108
  1780. flag = true
  1781. elsif width - 32 >= 48
  1782. hp_x = x + width - 48
  1783. flag = false
  1784. end
  1785. # HP を描画
  1786. self.contents.font.color = enemy.hp == 0 ? knockout_color :
  1787. enemy.hp <= enemy.maxhp / 4 ? crisis_color : normal_color
  1788. self.contents.draw_text(hp_x, y, 48, 32, enemy.hp.to_s, 2)
  1789. # MaxHP を描画
  1790. if flag
  1791. self.contents.font.color = normal_color
  1792. self.contents.draw_text(hp_x + 48, y, 12, 32, "/", 1)
  1793. self.contents.draw_text(hp_x + 60, y, 48, 32, enemy.maxhp.to_s)
  1794. end
  1795. end
  1796. #--------------------------------------------------------------------------
  1797. # ● SP の描画
  1798. # enemy : エネミー
  1799. # x : 描画先 X 座標
  1800. # y : 描画先 Y 座標
  1801. # width : 描画先の幅
  1802. #--------------------------------------------------------------------------
  1803. def draw_enemy_sp(enemy, x, y, width = 144)
  1804. # 文字列 "SP" を描画
  1805. self.contents.font.color = system_color
  1806. self.contents.draw_text(x, y, 32, 32, $data_system.words.sp)
  1807. # MaxSP を描画するスペースがあるか計算
  1808. if width - 32 >= 108
  1809. sp_x = x + width - 108
  1810. flag = true
  1811. elsif width - 32 >= 48
  1812. sp_x = x + width - 48
  1813. flag = false
  1814. end
  1815. # SP を描画
  1816. self.contents.font.color = enemy.sp == 0 ? knockout_color :
  1817. enemy.sp <= enemy.maxsp / 4 ? crisis_color : normal_color
  1818. self.contents.draw_text(sp_x, y, 48, 32, enemy.sp.to_s, 2)
  1819. # MaxSP を描画
  1820. if flag
  1821. self.contents.font.color = normal_color
  1822. self.contents.draw_text(sp_x + 48, y, 12, 32, "/", 1)
  1823. self.contents.draw_text(sp_x + 60, y, 48, 32, enemy.maxsp.to_s)
  1824. end
  1825. end
  1826. #--------------------------------------------------------------------------
  1827. # ● パラメータの描画
  1828. # enemy : エネミー
  1829. # x : 描画先 X 座標
  1830. # y : 描画先 Y 座標
  1831. # type : パラメータの種類 (0~6)
  1832. #--------------------------------------------------------------------------
  1833. def draw_enemy_parameter(enemy, x, y, type)
  1834. case type
  1835. when 0
  1836. parameter_name = $data_system.words.atk
  1837. parameter_value = enemy.atk
  1838. when 1
  1839. parameter_name = $data_system.words.pdef
  1840. parameter_value = enemy.pdef
  1841. when 2
  1842. parameter_name = $data_system.words.mdef
  1843. parameter_value = enemy.mdef
  1844. when 3
  1845. parameter_name = $data_system.words.str
  1846. parameter_value = enemy.str
  1847. when 4
  1848. parameter_name = $data_system.words.dex
  1849. parameter_value = enemy.dex
  1850. when 5
  1851. parameter_name = $data_system.words.agi
  1852. parameter_value = enemy.agi
  1853. when 6
  1854. parameter_name = $data_system.words.int
  1855. parameter_value = enemy.int
  1856. when 7
  1857. parameter_name = "回避"
  1858. parameter_value = enemy.eva
  1859. end
  1860. self.contents.font.color = system_color
  1861. self.contents.draw_text(x, y, 120, 32, parameter_name)
  1862. self.contents.font.color = normal_color
  1863. self.contents.draw_text(x + 120, y, 36, 32, parameter_value.to_s, 2)
  1864. end
  1865. end
  1866. #=============================================================================
  1867. # ◇ ちからため スキル実装スクリプト by 和希
  1868. #=============================================================================
  1869. class Game_Battler
  1870. #--------------------------------------------------------------------------
  1871. # ● 追加公開インスタンス変数
  1872. #--------------------------------------------------------------------------
  1873. attr_accessor :powerstock # 「ちからため」回数
  1874. attr_accessor :action_message # ヘルプウィンドウに表示する文字
  1875. #--------------------------------------------------------------------------
  1876. # ● 初期化
  1877. #--------------------------------------------------------------------------
  1878. alias before_powerstock_original_initialize initialize
  1879. def initialize
  1880. before_powerstock_original_initialize
  1881. @powerstock = 0
  1882. @powerstock_skill_id = $data_system.elements.index(POWERSTOCK_SKILL_ELEMENT_NAME)
  1883. @powerstock_skill_id = 0 if @powerstock_skill_id == nil
  1884. @effect_message = nil
  1885. end
  1886. #--------------------------------------------------------------------------
  1887. # ● 通常攻撃の効果適用
  1888. # attacker : 攻撃者 (バトラー)
  1889. #--------------------------------------------------------------------------
  1890. alias before_powerstock_original_attack_effect attack_effect
  1891. def attack_effect(attacker)
  1892. # 攻撃者が「ちからため」しているか?
  1893. if attacker.powerstock > 0
  1894. bool_powerstock = true
  1895. # 攻撃者の力を一時的に上昇させる
  1896. stock_attacker_str = attacker.str
  1897. attacker.str += ( stock_attacker_str * POWERSTOCK_BASE_RATE * attacker.powerstock ).to_i
  1898. # ヘルプメッセージに「ちからためx?」を出す
  1899. @action_message = POWERSTOCK_SKILL_ELEMENT_NAME
  1900. @action_message += " x"
  1901. @action_message += attacker.powerstock.to_s
  1902. # ストックを消す
  1903. attacker.powerstock = 0
  1904. else
  1905. bool_powerstock = false
  1906. end
  1907. # fukuyamaさん↓のミス発見ありがとうございました
  1908. result = before_powerstock_original_attack_effect(attacker)
  1909. # 力を上昇させていた場合、元に戻す
  1910. if bool_powerstock
  1911. attacker.str = stock_attacker_str
  1912. end
  1913. return result
  1914. end
  1915. #--------------------------------------------------------------------------
  1916. # ● スキルの効果適用
  1917. # user : 使用者 (バトラー)
  1918. # skill: スキル
  1919. #--------------------------------------------------------------------------
  1920. alias before_powerstock_original_skill_effect skill_effect
  1921. def skill_effect(user, skill)
  1922. #「ちからため」スキルかどうかの判定。
  1923. if skill.element_set.include?(@powerstock_skill_id)
  1924. # 命中率を適用する場合は下のif文のコメントを外してください
  1925. #if rand(100) < skill.hit
  1926. @powerstock += 1 # 「ちからため」回数を1増やす
  1927. # ダメージに"Charge"をセットする
  1928. self.damage = "Charge"
  1929. # 命中率を適用する場合は下のelse~endのコメントを外してください
  1930. #else
  1931. # self.damage = "Miss"
  1932. #end
  1933. # 普通のスキル判定は行わない。
  1934. return true
  1935. else
  1936. return before_powerstock_original_skill_effect(user, skill)
  1937. end
  1938. end
  1939. end
  1940. #=============================================================================
  1941. # ◇ 見切りステート by 和希
  1942. #=============================================================================
  1943. class Game_Battler
  1944. # 見切りステートの名前
  1945. ABANDONS_SKILL_STATE_NAME = "断念"
  1946. #--------------------------------------------------------------------------
  1947. # ● 通常攻撃の効果適用
  1948. #--------------------------------------------------------------------------
  1949. alias before_abandons_original_attack_effect attack_effect
  1950.  
  1951. def attack_effect(attacker)
  1952. # 見切りステートが存在するか?
  1953. if nil != (abandons_skill = get_abandons_id)
  1954. # 見切りステートにかかっているか?
  1955. if self.state?(abandons_skill)
  1956. ## 避ける!
  1957. # クリティカルフラグをクリア
  1958. self.critical = false
  1959. # ダメージに "Avoid!!" を設定
  1960. self.damage = "Avoid!!"
  1961. # 見切りステートを解除
  1962. self.remove_state(abandons_skill,true)
  1963. # メソッド終了
  1964. return false
  1965. end
  1966. end
  1967. # 見切りステート状態でなかった時は通常どおり
  1968. return before_abandons_original_attack_effect(attacker)
  1969. end
  1970. #--------------------------------------------------------------------------
  1971. # ● 見切りステータスのID取得
  1972. #--------------------------------------------------------------------------
  1973. def get_abandons_id
  1974. result = nil
  1975. if @abandons_status_id == nil
  1976. for i in 1 ... $data_states.size
  1977. if $data_states[i].name[/\A#{ABANDONS_SKILL_STATE_NAME}\Z/]
  1978. result = $data_states[i].id
  1979. break
  1980. end
  1981. end
  1982. @abandons_status_id = ( result != nil ? result : 0 )
  1983. elsif @abandons_status_id > 0
  1984. result = @abandons_status_id
  1985. end
  1986. return result
  1987. end
  1988. end
  1989. #=============================================================================
  1990. # ◇ かばう by シムナフ
  1991. #=============================================================================
  1992. #==============================================================================
  1993. # ■ Scene_Battle
  1994. #==============================================================================
  1995. class Scene_Battle
  1996. #追加
  1997. attr_reader :active_battler
  1998. #ここまで
  1999. ##新メソッド
  2000. def make_cover_skill_action_result
  2001. cover_num = 0
  2002. cover_bool = false
  2003. for i in @skill.element_set
  2004. if !($data_system.elements[i][/^#{ELEMENT_NAME_COVER}/].nil?)
  2005. cover_bool = true
  2006. elm_num = $data_system.elements[i][/([+-]*[0-9]+)/]
  2007. if !(elm_num.nil?)
  2008. cover_num += elm_num.to_i
  2009. end
  2010. end
  2011. end
  2012.  
  2013. if cover_bool.equal?(true)
  2014. ##自分のみが対象だった場合は味方からランダムに1人をかばう
  2015. if @target_battlers.include?(@active_battler)
  2016. if @target_battlers.size == 1
  2017. if @target_battlers[0].is_a?(Game_Actor)
  2018. friends = $game_party.actors.dup
  2019. friends.delete(@active_battler)
  2020. @target_battlers = [friends[rand(friends.size)]]
  2021. elsif @target_battlers[0].is_a?(Game_Enemy)
  2022. friends = $game_troop.enemies.dup
  2023. friends.delete(@active_battler)
  2024. @target_battlers = [friends[rand(friends.size)]]
  2025. end
  2026. else
  2027. @target_battlers.delete(@active_battler)
  2028. end
  2029. end
  2030.  
  2031. @active_battler.covered_friends = @target_battlers.dup
  2032. @active_battler.add_state(get_cover_state_id())##ステート付加時にデフォルト回数で発動回数が設定される
  2033. if (cover_num > 0)
  2034. @active_battler.cover_remain = cover_num#発動回数が有った場合はその回数で上書き
  2035. end
  2036. for target in @target_battlers
  2037. target.damage = COVER_EFFECT_CHAR
  2038. end
  2039. end
  2040. end
  2041. ##ここまで
  2042. end
  2043.  
  2044. class Game_Party
  2045. ##追加エイリアス
  2046. include Cover_Module
  2047. #--------------------------------------------------------------------------
  2048. # ● 対象アクターのスムーズな決定
  2049. # actor_index : アクターインデックス
  2050. #--------------------------------------------------------------------------
  2051.  
  2052. alias before_cover_original_smooth_target_actor smooth_target_actor
  2053.  
  2054. def smooth_target_actor(actor_index)
  2055. if $scene.is_a?(Scene_Battle)
  2056. battler = $scene.active_battler()
  2057. else
  2058. battler = nil
  2059. end
  2060.  
  2061. target = [before_cover_original_smooth_target_actor(actor_index)]
  2062. get_target_battlers_after_cover!(target, battler)
  2063.  
  2064. return target[0]
  2065. end
  2066. ##ここまで
  2067. end
  2068.  
  2069. class Game_Troop
  2070. ##追加エイリアス
  2071. include Cover_Module
  2072. #--------------------------------------------------------------------------
  2073. # ● 対象エネミーのスムーズな決定
  2074. # enemy_index : エネミーインデックス
  2075. #--------------------------------------------------------------------------
  2076.  
  2077. alias before_cover_original_smooth_target_enemy smooth_target_enemy
  2078.  
  2079. def smooth_target_enemy(enemy_index)
  2080. if $scene.is_a?(Scene_Battle)
  2081. battler = $scene.active_battler()
  2082. else
  2083. battler = nil
  2084. end
  2085.  
  2086. target = [before_cover_original_smooth_target_enemy(enemy_index)]
  2087. get_target_battlers_after_cover!(target, battler)
  2088.  
  2089. return target[0]
  2090. end
  2091. ##ここまで
  2092. end
  2093.  
  2094.  
  2095. #==============================================================================
  2096. # ◇ 付加属性名称判定モジュール
  2097. #==============================================================================
  2098. module Check_ElementName_Set
  2099. #--------------------------------------------------------------------------
  2100. # ● スキルが指定名の属性を持つか判定
  2101. #--------------------------------------------------------------------------
  2102. def skill_element_include?(skill, element_name)
  2103. @one = @two = nil
  2104. return false if skill == nil or !skill.is_a?(RPG::Skill)
  2105. for i in skill.element_set
  2106. if $data_system.elements[i] =~ /#{element_name}([+-]?[0-9]+)?(%)?/
  2107. @one = $1
  2108. @two = $2
  2109. return true
  2110. end
  2111. end
  2112. return false
  2113. end
  2114. #--------------------------------------------------------------------------
  2115. # ● アイテムが指定名の属性を持つか判定
  2116. #--------------------------------------------------------------------------
  2117. def item_element_include?(item, element_name)
  2118. @one = @two = nil
  2119. return false if item == nil or !item.is_a?(RPG::Item)
  2120. for i in item.element_set
  2121. if $data_system.elements[i] =~ /#{element_name}([+-]?[0-9]+)?(%)?/
  2122. @one = $1
  2123. @two = $2
  2124. return true
  2125. end
  2126. end
  2127. return false
  2128. end
  2129. #--------------------------------------------------------------------------
  2130. # ● 武器が指定名の属性を持つか判定
  2131. #--------------------------------------------------------------------------
  2132. def weapon_element_include?(weapon_id, element_name)
  2133. @one = @two = nil
  2134. return false if weapon_id == nil or weapon_id <= 0
  2135. for i in $data_weapons[weapon_id].element_set
  2136. if $data_system.elements[i] =~ /#{element_name}([+-]?[0-9]+)?(%)?/
  2137. @one = $1
  2138. @two = $2
  2139. return true
  2140. end
  2141. end
  2142. return false
  2143. end
  2144. #--------------------------------------------------------------------------
  2145. # ● 防具が指定名の属性を持つか判定
  2146. #--------------------------------------------------------------------------
  2147. def armor_element_include?(armor_id, element_name)
  2148. @one = @two = nil
  2149. return false if armor_id == nil or armor_id <= 0
  2150. for i in $data_armors[armor_id].guard_element_set
  2151. if $data_system.elements[i] =~ /#{element_name}([+-]?[0-9]+)?(%)?/
  2152. @one = $1
  2153. @two = $2
  2154. return true
  2155. end
  2156. end
  2157. return false
  2158. end
  2159. #--------------------------------------------------------------------------
  2160. # ● 防具が指定名の属性を持つ場合その後に付く接尾テキストを取得
  2161. #--------------------------------------------------------------------------
  2162. def armor_element_suftext(armor_id, element_name)
  2163. return nil if armor_id == nil or armor_id <= 0
  2164. for i in $data_armors[armor_id].guard_element_set
  2165. if $data_system.elements[i] =~ /#{element_name}(.*)/
  2166. return $1
  2167. end
  2168. end
  2169. return nil
  2170. end
  2171. #--------------------------------------------------------------------------
  2172. # ● アクターが指定名の属性を持つ武器を装備しているかか判定
  2173. #--------------------------------------------------------------------------
  2174. def equip_weapon_element_include?(actor, element_name)
  2175. @one = @two = nil
  2176. return false if !actor.is_a?(Game_Actor)
  2177. return false if actor.weapon_id == nil or actor.weapon_id <= 0
  2178. bool = false
  2179. one_total = 0
  2180. for i in $data_weapons[actor.weapon_id].element_set
  2181. if $data_system.elements[i] =~ /#{element_name}([+-]?[0-9]+)?(%)?/
  2182. one_total += $1.to_i
  2183. @two = $2
  2184. bool = true
  2185. end
  2186. end
  2187. # 武器管理システムXC.が導入されている場合
  2188. if $xrxs24_weapon_property_system_work
  2189. for i in [PROPERTY_ELEMENT_GRANT_1st, PROPERTY_ELEMENT_GRANT_2nd,
  2190. PROPERTY_ELEMENT_GRANT_3rd, PROPERTY_ELEMENT_GRANT_4th]
  2191. if $data_system.elements[actor.weapon_property[i]] =~ /#{element_name}([+-]?[0-9]+)?(%)?/
  2192. one_total += $1.to_i
  2193. @two = $2
  2194. bool = true
  2195. end
  2196. end
  2197. end
  2198. @one = one_total
  2199. return bool
  2200. end
  2201. #--------------------------------------------------------------------------
  2202. # ● アクターが指定名の属性を持つ武器/防具を装備中か判定 数値の合計も保持
  2203. #--------------------------------------------------------------------------
  2204. def actor_element_equip?(actor, element_name)
  2205. one_total = 0
  2206. bool = false
  2207. return false if !actor.is_a?(Game_Actor)
  2208. weapon = $data_weapons[actor.weapon_id]
  2209. armor1 = $data_armors[actor.armor1_id]
  2210. armor2 = $data_armors[actor.armor2_id]
  2211. armor3 = $data_armors[actor.armor3_id]
  2212. armor4 = $data_armors[actor.armor4_id]
  2213. if equip_weapon_element_include?(actor, element_name)
  2214. one_total += @one.to_i
  2215. bool = true
  2216. end
  2217. if armor_element_include?(armor1.id, element_name)
  2218. one_total += @one.to_i
  2219. bool = true
  2220. end
  2221. if armor_element_include?(armor2.id, element_name)
  2222. one_total += @one.to_i
  2223. bool = true
  2224. end
  2225. if armor_element_include?(armor3.id, element_name)
  2226. one_total += @one.to_i
  2227. bool = true
  2228. end
  2229. if armor_element_include?(armor4.id, element_name)
  2230. one_total += @one.to_i
  2231. bool = true
  2232. end
  2233. @one = one_total
  2234. return bool
  2235. end
  2236. end
  2237. #=============================================================================
  2238. # ◇ かばうModule
  2239. #=============================================================================
  2240. ####以下新規追加Module
  2241. module Cover_Module
  2242. #--------------------------------------------------------------------------
  2243. # ● かばう 後のターゲット配列生成
  2244. #--------------------------------------------------------------------------
  2245. def get_target_battlers_after_cover!(target_battlers, active_battler = nil)
  2246. #HP割合の低い順にソート
  2247. #target_battlers.sort_by!{|b| (b.hp.to_f/b.maxhp.to_f)}
  2248. target_battlers.sort!{|a,b| (a.hp.to_f/a.maxhp.to_f) <=> (b.hp.to_f/b.maxhp.to_f)}
  2249. #HP割合の多い順にソート
  2250. actors = $game_party.actors.sort_by{|b| (b.hp.to_f/b.maxhp.to_f)}.reverse
  2251. enemies = $game_troop.enemies.sort_by{|b| (b.hp.to_f/b.maxhp.to_f)}.reverse
  2252.  
  2253. for i in 0...target_battlers.size
  2254. if target_battlers[i].is_a?(Game_Actor)
  2255. for actor in actors
  2256. new_target = get_target_after_cover(active_battler,target_battlers[i],actor)
  2257. if !new_target.equal?(target_battlers[i]) && new_target.current_friend.nil? #かばう人がすでにかばっていた場合かばえない
  2258. new_target.effect_message = "#{new_target.name}は#{target_battlers[i].name}をかばった!"
  2259. new_target.current_friend = target_battlers[i]
  2260. new_target.current_friend.damage = COVER_EFFECT_CHAR
  2261. target_battlers[i] = new_target
  2262. break
  2263. end
  2264. end
  2265. end
  2266.  
  2267. if target_battlers[i].is_a?(Game_Enemy)
  2268. for enemy in enemies
  2269. new_target = get_target_after_cover(active_battler,target_battlers[i],enemy)
  2270. if !new_target.equal?(target_battlers[i]) && new_target.current_friend.nil? #かばう人がすでにかばっていた場合かばえない
  2271. new_target.effect_message = "#{new_target.name}は#{target_battlers[i].name}をかばった!"
  2272. new_target.current_friend = target_battlers[i]
  2273. new_target.current_friend.damage = COVER_EFFECT_CHAR
  2274. target_battlers[i] = new_target
  2275. break
  2276. end
  2277. end
  2278. end
  2279. end
  2280. #ターゲット重複を排除する(かばった人が2度ダメージを受けない)
  2281. target_battlers.uniq!()
  2282. #「かばう」ステートの解除判定
  2283. for target in target_battlers
  2284. if !target.current_friend.nil?
  2285. #かばう 残り回数がなくなった場合
  2286. target.cover_remain -= 1
  2287. if target.cover_remain <= 0
  2288. target.remove_state(get_cover_state_id())
  2289. target.cover_remain = 0
  2290. end
  2291. end
  2292. end
  2293. end
  2294. #--------------------------------------------------------------------------
  2295. # ● かばう の発動判定
  2296. #--------------------------------------------------------------------------
  2297. def get_target_after_cover(battler, target, coverer)
  2298. #味方からのターゲットは庇わない
  2299. if battler.is_a?(Game_Actor)
  2300. if target.is_a?(Game_Actor)
  2301. return target
  2302. end
  2303. end
  2304. if battler.is_a?(Game_Enemy)
  2305. if target.is_a?(Game_Enemy)
  2306. return target
  2307. end
  2308. end
  2309. #庇う人が動けない時は庇わない
  2310. if !(coverer.movable? && coverer.exist?)
  2311. return target
  2312. end
  2313. #庇う人が かばう のステートになっている時のみ
  2314. if !coverer.state?(get_cover_state_id())
  2315. return target
  2316. end
  2317. #ターゲットが既に他の人を庇っている時は無効
  2318. if target.state?(get_cover_state_id())
  2319. return target
  2320. end
  2321. #ターゲットと庇う人が同じの場合は無効
  2322. if target.equal?(coverer)
  2323. return target
  2324. end
  2325. #発動確率判定
  2326. if !(rand(100) <= COVER_EFFECT_PERCENT)
  2327. return taget
  2328. end
  2329. #ターゲットのHP割合判定
  2330. if !(100.0*target.hp.to_f/target.maxhp.to_f <= COVER_HP_PERCENT)
  2331. return target
  2332. end
  2333. #「かばっている味方配列」が空だったら、全ての味方を庇う
  2334. if coverer.covered_friends.size.zero?
  2335. return coverer
  2336. else
  2337. for covered_friend in coverer.covered_friends
  2338. if target.equal?(covered_friend)
  2339. return coverer
  2340. end
  2341. end
  2342. end
  2343. return target
  2344. end
  2345. #--------------------------------------------------------------------------
  2346. # ● かばう のStateID
  2347. #--------------------------------------------------------------------------
  2348. def get_cover_state_id
  2349. result = nil
  2350. if @cover_status_id == nil
  2351. for i in 1 ... $data_states.size
  2352. if $data_states[i].name[/\A#{STATE_NAME_COVER}\Z/]
  2353. result = $data_states[i].id
  2354. break
  2355. end
  2356. end
  2357. @cover_status_id = ( result != nil ? result : 0 )
  2358. elsif @cover_status_id > 0
  2359. result = @cover_status_id
  2360. end
  2361. return result
  2362. end
  2363. end
  2364. ####Module End
  2365. #//////////////////////////////////////////////////////////////////////////////
  2366. # ◇ インクルード
  2367. #//////////////////////////////////////////////////////////////////////////////
  2368. module Check_ElementName_Set
  2369. include Fixed_PropertyNumber if $xrxs24_weapon_property_system_work
  2370. end
  2371. class Game_Battler
  2372. include Check_ElementName_Set
  2373. include Cover_Module
  2374. end
  2375. class Window_Item < Window_Selectable
  2376. include Check_ElementName_Set
  2377. end
  2378. class Scene_Battle
  2379. include Check_ElementName_Set
  2380. include Cover_Module
  2381. end
  2382. #==============================================================================
  2383. # ◇ RPG::再定義「"SP "を含む場合SPダメージとして色を変更」
  2384. #==============================================================================
  2385. module RPG
  2386. class Sprite < ::Sprite
  2387. alias xrxs19_damage damage
  2388. def damage(value, critical)
  2389. if value.is_a?(String) and value.include?($data_system.words.sp)
  2390. # 解放
  2391. dispose_damage
  2392. # 数値部分を抜き取る
  2393. value = value.scan(/[+-]?[0-9]+/)[0].to_i
  2394. # 表示文字列の設定
  2395. damage_string = $data_system.words.sp + " " + value.abs.to_s
  2396. # 描写
  2397. bitmap = Bitmap.new(160, 48)
  2398. bitmap.font.name = "黑体"
  2399. bitmap.font.size = 32
  2400. bitmap.font.color.set(0, 0, 0)
  2401. bitmap.draw_text(-1, 12-1, 160, 36, damage_string, 1)
  2402. bitmap.draw_text(+1, 12-1, 160, 36, damage_string, 1)
  2403. bitmap.draw_text(-1, 12+1, 160, 36, damage_string, 1)
  2404. bitmap.draw_text(+1, 12+1, 160, 36, damage_string, 1)
  2405. if value < 0
  2406. bitmap.font.color.set(128, 255, 255)
  2407. else
  2408. bitmap.font.color.set(255, 176, 144)
  2409. end
  2410. bitmap.draw_text(0, 12, 160, 36, damage_string, 1)
  2411. if critical
  2412. bitmap.font.size = 20
  2413. bitmap.font.color.set(0, 0, 0)
  2414. bitmap.draw_text(-1, -1, 160, 20, "CRITICAL", 1)
  2415. bitmap.draw_text(+1, -1, 160, 20, "CRITICAL", 1)
  2416. bitmap.draw_text(-1, +1, 160, 20, "CRITICAL", 1)
  2417. bitmap.draw_text(+1, +1, 160, 20, "CRITICAL", 1)
  2418. bitmap.font.color.set(255, 255, 255)
  2419. bitmap.draw_text(0, 0, 160, 20, "CRITICAL", 1)
  2420. end
  2421. @_damage_sprite = ::Sprite.new(self.viewport)
  2422. @_damage_sprite.bitmap = bitmap
  2423. @_damage_sprite.ox = 80
  2424. @_damage_sprite.oy = 20
  2425. @_damage_sprite.x = self.x
  2426. @_damage_sprite.y = self.y - self.oy / 2
  2427. @_damage_sprite.z = 3000
  2428. @_damage_duration = 40
  2429. else
  2430. # 通常時?戻す
  2431. xrxs19_damage(value, critical)
  2432. end
  2433. end
  2434. end
  2435. end
  2436.  
  2437. #==============================================================================
  2438. # 本脚本来自[url]www.66RPG.com[/url],使用和转载请保留此信息
  2439. #==============================================================================

RUBY 代码复制
  1. #==============================================================================
  2. # ■ 技能消耗依赖 v1.3 by SailCat
  3. #------------------------------------------------------------------------------
  4. #   方法:本脚本插入到Main之前使用,并依赖数据库通用备注接口插件(在其之后)
  5. #   版本:v1.3 (Build 171122)
  6. #   效果:
  7. #     1. 技能消耗SP以外的游戏数据,包括HP、道具、武器、防具、金钱、经验、变量
  8. #     2. 技能使用场合依赖游戏条件,包括开关、状态、地图相关、装备、能力、步数等
  9. #     3. 技能消耗额外的回合(技能冷却)
  10. #   配置:插件为即插即用型,没有任何配置项,也不需要在脚本中设定任何东西
  11. #   冲突:其他同类脚本,以及魔改了Scene_Skill的脚本
  12. #   说明:
  13. #     1. 技能消耗道具、武器、防具、金钱、变量时,有使用检查,不够消耗不让用。
  14. #     2. 技能消耗HP、经验时,无使用检查,扣到0为止。
  15. #     3. 技能依赖开关、状态、地图、地形、装备、属性均检查至所有条件严格相符。
  16. #     4. 技能依赖能力检查条件为能力在指定范围内,步数检查条件为指定步数以上。
  17. #     5. 备注写法:
  18. #        (写在描述里,不同条件可以叠加用分号隔开,备注和描述以#号分隔)
  19. #        (当[XX集]内容只有一条时,方括号可省略,当内容序号连续时,可写成子界)
  20. #        (条件太多写不下时,可用超长备注法,见依赖插件的说明)
  21. #        a) 技能消耗HP:ch=值
  22. #        b) 技能消耗道具:ci=[消耗道具ID集]
  23. #        消耗道具个数>1的情况下,ID后缀两位小数为消耗个数,如4.05消耗4号道具5个
  24. #        写成4和4.00是不一样的,前者消耗4号道具1个,后者要求持有4号道具但不消耗
  25. #        c) 技能消耗武器:cw=[消耗武器ID集],说明同道具,消耗的是持有的武器
  26. #        d) 技能消耗防具:ca=[消耗防具ID集],说明同道具,消耗的是持有的防具
  27. #        e) 技能消耗金钱:cg=值
  28. #        f) 技能消耗经验:cx=值
  29. #        g) 技能消耗变量:cv={变量ID=>消耗值},写成hash形式,不能省略花括号
  30. #        h) 技能消耗回合:cd=值
  31. #        i) 技能依赖开关:cs=[开关集],开关ID为正数要求ON,为负数要求OFF
  32. #        j) 技能依赖状态:cc=[状态集],状态ID为正数要求有,为负数要求没有
  33. #        k) 技能依赖地图:cm=[地图ID集],地图ID为正数要求在,为负数要求不在
  34. #        l) 技能依赖地形:ct=[地形标志集],标志为正数要求是,为负数要求不是
  35. #        m) 技能依赖装备:cq=[装备ID集],查身上装备,武器ID写负数,防具ID写正数
  36. #        n) 技能依赖步数:cp=值
  37. #        o) 技能依赖属性:ce=[属性ID集],查装备属性,正数要求有,负数要求没有
  38. #        p) 技能依赖能力:cn=能力字符串,如"str300",有多个条件直接连写
  39. #        能力可以用hp/sp/str/dex/agi/int,大小写不敏感
  40. #        条件值的写法:300或300+表示大于等于300;300-表示小于等于300;
  41. #                      =300表示恰好300;300~400表示300到400之间(闭区间)
  42. #        q) 技能依赖茂密:cb+(要求茂密处)或cb-(要求非茂密处)
  43. #        r) 技能依赖公式:cf:公式脚本字符串,公式要能返回true或false的真伪值
  44. #        公式中可以使用a代表技能使用者,v代表变量,s代表开关
  45. #==============================================================================
  46. #==============================================================================
  47. # ■ SailCat's 插件公用
  48. #==============================================================================
  49. module SailCat
  50.   $sailcat_import ||= {}
  51.   #--------------------------------------------------------------------------
  52.   # ● 植入与依赖检查
  53.   #--------------------------------------------------------------------------
  54.   if $sailcat_import[:DataNoteCore].to_f >= 2.0
  55.     $sailcat_import[:SkillCost] = 1.3
  56.   else
  57.     raise "缺少依赖插件,通用数据库备注接口(v2.0以上版本)"
  58.   end
  59. end
  60. module RPG
  61.   #============================================================================
  62.   # ■ Skill_ItemCost
  63.   #----------------------------------------------------------------------------
  64.   #  处理技能消耗道具、武器、防具的内部类
  65.   #============================================================================
  66.   class Skill_ItemCost
  67.     #--------------------------------------------------------------------------
  68.     # ● 定义实例变量
  69.     #--------------------------------------------------------------------------
  70.     attr_accessor :id                     # 消耗的物品ID
  71.     attr_accessor :number                 # 消耗的数目
  72.     #--------------------------------------------------------------------------
  73.     # ● 初期化
  74.     #--------------------------------------------------------------------------
  75.     def initialize(n)
  76.       n = 0 unless n.is_a?(Numeric)
  77.       n += 0.01 if n.is_a?(Fixnum)
  78.       @id = Integer(n).abs
  79.       @number = [Integer((n - @id) * 100.0 + 1e-6), 0].max
  80.     end
  81.     #--------------------------------------------------------------------------
  82.     # ● 检查符合性
  83.     #--------------------------------------------------------------------------
  84.     def match?(proc)
  85.       return true if @id == 0
  86.       proc.call(@id) >= [@number, 1].max
  87.     end
  88.   end
  89.   #============================================================================
  90.   # ■ Skill_EquipCheck
  91.   #----------------------------------------------------------------------------
  92.   #  处理技能依赖装备状态的内部类
  93.   #============================================================================
  94.   class Skill_EquipCheck
  95.     #--------------------------------------------------------------------------
  96.     # ● 定义实例变量
  97.     #--------------------------------------------------------------------------
  98.     attr_accessor :weapons                # 依赖的武器ID(空为不检查)
  99.     attr_accessor :armors1                # 依赖的盾牌ID(空为不检查)
  100.     attr_accessor :armors2                # 依赖的头盔ID(空为不检查)
  101.     attr_accessor :armors3                # 依赖的护甲ID(空为不检查)
  102.     attr_accessor :armors4                # 依赖的饰品ID(空为不检查)
  103.     #--------------------------------------------------------------------------
  104.     # ● 初期化
  105.     #--------------------------------------------------------------------------
  106.     def initialize(ary)
  107.       @weapons = @armors1 = @armors2 = @armors3 = @armors4 = []
  108.       ary.map! {|i| i.to_a}.flatten!
  109.       ary.each do |i|
  110.         if i < 0
  111.           @weapon_id.push(-i)
  112.         else
  113.           kind = $data_armors[i].kind + 1
  114.           instance_eval("@armors#{kind}.push(#{i})") rescue nil
  115.         end
  116.       end
  117.     end
  118.     #--------------------------------------------------------------------------
  119.     # ● 检查符合性
  120.     #--------------------------------------------------------------------------
  121.     def match?(a)
  122.       return false if !@weapons.empty? and !@weapons.include?(a.weapon_id)
  123.       return false if !@armors1.empty? and !@armors1.include?(a.armor1_id)
  124.       return false if !@armors2.empty? and !@armors2.include?(a.armor2_id)
  125.       return false if !@armors3.empty? and !@armors3.include?(a.armor3_id)
  126.       return false if !@armors4.empty? and !@armors4.include?(a.armor4_id)
  127.       return true
  128.     end
  129.   end
  130.   #============================================================================
  131.   # ■ Skill_AbilityCheck
  132.   #----------------------------------------------------------------------------
  133.   #  处理技能依赖能力的内部类
  134.   #============================================================================
  135.   class Skill_AbilityCheck
  136.     #--------------------------------------------------------------------------
  137.     # ● 常量
  138.     #--------------------------------------------------------------------------
  139.     REGEX = /(hp|sp|str|dex|agi|int)(=?([0-9]+)([+\-~])?([0-9]+)?)/i
  140.     #--------------------------------------------------------------------------
  141.     # ● 定义实例变量
  142.     #--------------------------------------------------------------------------
  143.     attr_accessor :hp_range               # 依赖的 HP % 范围
  144.     attr_accessor :sp_range               # 依赖的 SP % 范围
  145.     attr_accessor :str_range              # 依赖的力量值范围
  146.     attr_accessor :dex_range              # 依赖的灵巧值范围
  147.     attr_accessor :agi_range              # 依赖的速度值范围
  148.     attr_accessor :int_range              # 依赖的魔力值范围
  149.     #--------------------------------------------------------------------------
  150.     # ● 初期化
  151.     #--------------------------------------------------------------------------
  152.     def initialize(str)
  153.       @hp_range = @sp_range = 0..100
  154.       @str_range = @dex_range = @agi_range = @int_range = 0..999
  155.       ary = str.scan(REGEX)
  156.       ary.each do |a|
  157.         name = a[0].downcase
  158.         min = a[2]
  159.         max = a[4] || a[2]
  160.         if a[1][0] != 61
  161.           max = (name[1] == 112 ? 100 : 999) if a[3] == nil or a[3] == "+"
  162.           min = 0 if a[3] == "-" and a[4] == nil
  163.         end
  164.         instance_eval("@#{name}_range = #{min}..#{max}") rescue nil
  165.       end
  166.     end
  167.     #--------------------------------------------------------------------------
  168.     # ● 检查符合性
  169.     #--------------------------------------------------------------------------
  170.     def match?(a)
  171.       return false unless @hp_range === a.hp * 100 / a.maxhp
  172.       return false unless @sp_range === a.sp * 100 / [a.maxsp, 1].max
  173.       return false unless @str_range === a.str
  174.       return false unless @dex_range === a.dex
  175.       return false unless @agi_range === a.agi
  176.       return false unless @int_range === a.int
  177.       return true
  178.     end
  179.   end
  180.   #============================================================================
  181.   # ■ RPG::Skill
  182.   #----------------------------------------------------------------------------
  183.   #  数据库的技能类扩展
  184.   #============================================================================
  185.   class Skill
  186.     #--------------------------------------------------------------------------
  187.     # ● 备注定义
  188.     #--------------------------------------------------------------------------
  189.     def hp_cost;       _ch(0).abs;                                        end
  190.     def exp_cost;      _cx(0).abs;                                        end
  191.     def gold_cost;     _cg(0).abs;                                        end
  192.     def cooldown;      _cd(0).abs;                                        end
  193.     def variable_cost; _cv({});                                           end
  194.     def item_cost;     _ci([]).to_a.map {|f| Skill_ItemCost.new(f)};      end
  195.     def weapon_cost;   _cw([]).to_a.map {|f| Skill_ItemCost.new(f)};      end
  196.     def armor_cost;    _ca([]).to_a.map {|f| Skill_ItemCost.new(f)};      end
  197.     def switch_check;  flat_array(_cs([]));                               end
  198.     def state_check;   flat_array(_cc([]));                               end
  199.     def map_check;     flat_array(_cm([]));                               end
  200.     def terrain_check; flat_array(_ct([]));                               end
  201.     def element_check; flat_array(_ce([]));                               end
  202.     def bush_check;    _cb(nil);                                          end
  203.     def step_check;    _cp(0).abs;                                        end
  204.     def equip_check;   Skill_EquipCheck.new(_cq([]).to_a);                end
  205.     def ability_check; Skill_AbilityCheck.new(_cn("").to_s);              end
  206.     def eval_check;    _cf("true");                                       end
  207.     #--------------------------------------------------------------------------
  208.     # ● 公式依赖判定
  209.     #--------------------------------------------------------------------------
  210.     def eval_match?(actor)
  211.       result = lambda {|a, s, v| eval(eval_check) rescue true}
  212.       result.call(actor, $game_switches, $game_variables)
  213.     end
  214.     #--------------------------------------------------------------------------
  215.     # ● 通用正负依赖判定
  216.     #--------------------------------------------------------------------------
  217.     def pn_match?(set, obj, proc = Proc.new{|a, b| a == b})
  218.       (set.reject {|s| (s > 0) == proc.call(obj, s.abs)}).empty?
  219.     end
  220.     #--------------------------------------------------------------------------
  221.     # ● 变量消耗判定
  222.     #--------------------------------------------------------------------------
  223.     def variable_match?
  224.       variable_cost.each do |k, v|
  225.         return false if $game_variables[k] < v
  226.       end
  227.       return true
  228.     end
  229.     #--------------------------------------------------------------------------
  230.     # ● 道具消耗判定
  231.     #--------------------------------------------------------------------------
  232.     def item_match?(set, proc)
  233.       set.each do |s|
  234.         return false unless s.match?(proc)
  235.       end
  236.       return true
  237.     end
  238.   end
  239. end
  240. #==============================================================================
  241. # ■ Game_Battler
  242. #==============================================================================
  243. class Game_Battler
  244.   #--------------------------------------------------------------------------
  245.   # ● 使用技能的额外消耗
  246.   #     skill : 特技
  247.   #--------------------------------------------------------------------------
  248.   def skill_cost_extra(skill)
  249.     self.hp -= skill.hp_cost
  250.   end
  251. end
  252. #==============================================================================
  253. # ■ Game_Actor
  254. #==============================================================================
  255. class Game_Actor
  256.   #--------------------------------------------------------------------------
  257.   # ● 定义实例变量
  258.   #--------------------------------------------------------------------------
  259.   attr_reader   :cooldowns             # 冷却中的技能集
  260.   #--------------------------------------------------------------------------
  261.   # ● 方法重定义
  262.   #--------------------------------------------------------------------------
  263.   unless method_defined? :sailcat_skill_can_use?
  264.     alias sailcat_skillcost_skill_can_use? skill_can_use?
  265.   end
  266.   #--------------------------------------------------------------------------
  267.   # ● 可以使用特技判定
  268.   #     skill_id : 特技 ID
  269.   #--------------------------------------------------------------------------
  270.   def skill_can_use?(skill_id)
  271.     # 获得对应的特技实体
  272.     skill = $data_skills[skill_id]
  273.     # 装备不符的情况下,不能使用
  274.     if not skill.equip_check.match?(self)
  275.       return false
  276.     # 能力不符的情况下,不能使用
  277.     elsif not skill.ability_check.match?(self)
  278.       return false
  279.     # 步数不够的情况下,不能使用
  280.     elsif $game_party.steps < skill.step_check
  281.       return false
  282.     # 金钱不够的情况下,不能使用
  283.     elsif $game_party.gold < skill.gold_cost
  284.       return false
  285.     # 属性不符的情况下,不能使用
  286.     elsif not skill.pn_match?(skill.element_check, self, Proc.new{|a,b|
  287.       a.element_set.include?(b) or ([a.armor1_id, a.armor2_id,
  288.       a.armor3_id, a.armor4_id].inject(false) {|res, id|
  289.         res |= id > 0 and $data_armors[id].guard_element_set.include?(b)})
  290.       })
  291.       return false
  292.     # 地图不符的情况下,不能使用
  293.     elsif not skill.pn_match?(skill.map_check, $game_map.map_id)
  294.       return false
  295.     # 地形不符的情况下,不能使用
  296.     elsif not skill.pn_match?(skill.terrain_check, $game_player.terrain_tag)
  297.       return false
  298.     # 状态不符的情况下,不能使用
  299.     elsif not skill.pn_match?(skill.state_check, self,
  300.       Proc.new{|a, b| a.state?(b)})
  301.       return false
  302.     # 茂盛不符的情况下,不能使用
  303.     elsif skill.bush_check != nil and
  304.       skill.bush_check != ($game_player.bush_depth == 12)
  305.       return false
  306.     # 开关不符的情况下,不能使用
  307.     elsif not skill.pn_match?(skill.switch_check, $game_switches,
  308.       Proc.new{|a, b| a[b]})
  309.       return false
  310.     # 战斗时,冷却中的情况下,不能使用
  311.     elsif $game_temp.in_battle and cooldown?(skill_id) #and flag_t==false
  312.       return false
  313.     # 变量不符的情况下,不能使用
  314.     elsif not skill.variable_match?
  315.       return false
  316.     # 道具不够的情况下,不能使用
  317.     elsif not skill.item_match?(skill.item_cost,
  318.       Proc.new{|n| $game_party.item_number(n)})
  319.       return false
  320.     # 武器不够的情况下,不能使用
  321.     elsif not skill.item_match?(skill.weapon_cost,
  322.       Proc.new{|n| $game_party.weapon_number(n)})
  323.       return false
  324.     # 防具不够的情况下,不能使用
  325.     elsif not skill.item_match?(skill.armor_cost,
  326.       Proc.new{|n| $game_party.armor_number(n)})
  327.       return false
  328.     # 公式计算为false或nil的情况下,不能使用
  329.     elsif not skill.eval_match?(self)
  330.       return false
  331.     end
  332.     # 进行原始判定
  333.     sailcat_skillcost_skill_can_use?(skill_id)
  334.   end
  335.   #--------------------------------------------------------------------------
  336.   # ● 清除冷却技能
  337.   #--------------------------------------------------------------------------
  338.   def reset_cooldown
  339.     @cooldowns = {}
  340.   end
  341.   #--------------------------------------------------------------------------
  342.   # ● 设置冷却技能
  343.   #     skill_id : 特技 ID
  344.   #--------------------------------------------------------------------------
  345.   def set_cooldown(skill_id)
  346.     if $data_skills[skill_id].cooldown > 0
  347.       @cooldowns[skill_id] = $data_skills[skill_id].cooldown
  348.     end
  349.   end
  350.   #--------------------------------------------------------------------------
  351.   # ● 更新冷却技能,该方法一回合调用一次
  352.   #--------------------------------------------------------------------------
  353.   def update_cooldown
  354.     @cooldowns.each_key {|k| @cooldowns[k] -= 1}
  355.     @cooldowns.delete_if {|k, v| v == 0}
  356.   end
  357.   #--------------------------------------------------------------------------
  358.   # ● 冷却中判定
  359.   #     skill_id : 特技 ID
  360.   #--------------------------------------------------------------------------
  361.   def cooldown?(skill_id)
  362.     @cooldowns.has_key?(skill_id)
  363.   end
  364.   #--------------------------------------------------------------------------
  365.   # ● 使用技能的额外消耗
  366.   #     skill : 特技 ID
  367.   #--------------------------------------------------------------------------
  368.   def skill_cost_extra(skill)
  369.     super
  370.     self.exp -= skill.exp_cost
  371.     $game_party.lose_gold(skill.gold_cost)
  372.     skill.item_cost.each {|i| $game_party.lose_item(i.id, i.number)}
  373.     skill.weapon_cost.each {|i| $game_party.lose_weapon(i.id, i.number)}
  374.     skill.armor_cost.each {|i| $game_party.lose_armor(i.id, i.number)}
  375.     skill.variable_cost.each_pair {|k, v| $game_variables[k] -= v}
  376.     set_cooldown(skill.id) if $game_temp.in_battle
  377.   end
  378. end
  379. #==============================================================================
  380. # ■ Game_Party
  381. #==============================================================================
  382. class Game_Party
  383.   #--------------------------------------------------------------------------
  384.   # ● 清除冷却技能
  385.   #--------------------------------------------------------------------------
  386.   def reset_cooldown
  387.     actors.each {|a| a.reset_cooldown}
  388.   end
  389.   #--------------------------------------------------------------------------
  390.   # ● 更新冷却技能,该方法一回合调用一次
  391.   #--------------------------------------------------------------------------
  392.   def update_cooldown
  393.     actors.each {|a| a.update_cooldown}
  394.   end
  395. end
  396. #==============================================================================
  397. # ■ Scene_Battle
  398. #==============================================================================
  399. class Scene_Battle
  400.   #--------------------------------------------------------------------------
  401.   # ● 方法重定义
  402.   #--------------------------------------------------------------------------
  403.   unless method_defined? :sailcat_start_phase1
  404.     alias sailcat_skillcost_start_phase1 start_phase1
  405.     alias sailcat_skillcost_start_phase4 start_phase4
  406.     alias sailcat_skillcost_make_skill_action_result make_skill_action_result
  407.   end
  408.   #--------------------------------------------------------------------------
  409.   # ● 开始自由战斗回合
  410.   #--------------------------------------------------------------------------
  411.   def start_phase1
  412.     # 调用原方法
  413.     sailcat_skillcost_start_phase1
  414.     # 清除技能冷却
  415.     $game_party.reset_cooldown
  416.   end
  417.   #--------------------------------------------------------------------------
  418.   # ● 开始主回合
  419.   #--------------------------------------------------------------------------
  420.   def start_phase4
  421.     # 调用原方法
  422.     sailcat_skillcost_start_phase4
  423.     # 更新技能冷却
  424.     $game_party.update_cooldown
  425.   end
  426.   #--------------------------------------------------------------------------
  427.   # ● 生成特技行动结果
  428.   #--------------------------------------------------------------------------
  429.   def make_skill_action_result
  430.     # 调用原方法
  431.     sailcat_skillcost_make_skill_action_result
  432.     # 额外消耗
  433.     @active_battler.skill_cost_extra(@skill)
  434.   end
  435. end
  436. #==============================================================================
  437. # ■ Scene_Skill
  438. #==============================================================================
  439. class Scene_Skill
  440.   #--------------------------------------------------------------------------
  441.   # ● 刷新画面 (特技窗口被激活的情况下)
  442.   #--------------------------------------------------------------------------
  443.   def update_skill
  444.     # 按下 B 键的情况下
  445.     if Input.trigger?(Input::B)
  446.       # 演奏取消 SE
  447.       $game_system.se_play($data_system.cancel_se)
  448.       # 切换到菜单画面
  449.       $scene = Scene_Menu.new(1)
  450.       return
  451.     end
  452.     # 按下 C 键的情况下
  453.     if Input.trigger?(Input::C)
  454.       # 获取特技窗口现在选择的特技的数据
  455.       @skill = @skill_window.skill
  456.       # 不能使用的情况下
  457.       if @skill == nil or not @actor.skill_can_use?(@skill.id)
  458.         # 演奏冻结 SE
  459.         $game_system.se_play($data_system.buzzer_se)
  460.         return
  461.       end
  462.       # 演奏确定 SE
  463.       $game_system.se_play($data_system.decision_se)
  464.       # 效果范围是我方的情况下
  465.       if @skill.scope >= 3
  466.         # 激活目标窗口
  467.         @skill_window.active = false
  468.         @target_window.x = (@skill_window.index + 1) % 2 * 304
  469.         @target_window.visible = true
  470.         @target_window.active = true
  471.         # 设置效果范围 (单体/全体) 的对应光标位置
  472.         if @skill.scope == 4 || @skill.scope == 6
  473.           @target_window.index = -1
  474.         elsif @skill.scope == 7
  475.           @target_window.index = @actor_index - 10
  476.         else
  477.           @target_window.index = 0
  478.         end
  479.       # 效果在我方以外的情况下
  480.       else
  481.         # 公共事件 ID 有效的情况下
  482.         if @skill.common_event_id > 0
  483.           # 预约调用公共事件
  484.           $game_temp.common_event_id = @skill.common_event_id
  485.           # 演奏特技使用时的 SE
  486.           $game_system.se_play(@skill.menu_se)
  487.           # 消耗 SP
  488.           @actor.sp -= @skill.sp_cost
  489.           # 额外的消耗
  490.           @actor.skill_cost_extra(@skill)
  491.           # 再生成各窗口的内容
  492.           @status_window.refresh
  493.           @skill_window.refresh
  494.           @target_window.refresh
  495.           # 切换到地图画面
  496.           $scene = Scene_Map.new
  497.           return
  498.         end
  499.       end
  500.       return
  501.     end
  502.     # 按下 R 键的情况下
  503.     if Input.trigger?(Input::R)
  504.       # 演奏光标 SE
  505.       $game_system.se_play($data_system.cursor_se)
  506.       # 移至下一位角色
  507.       @actor_index += 1
  508.       @actor_index %= $game_party.actors.size
  509.       # 切换到别的特技画面
  510.       $scene = Scene_Skill.new(@actor_index)
  511.       return
  512.     end
  513.     # 按下 L 键的情况下
  514.     if Input.trigger?(Input::L)
  515.       # 演奏光标 SE
  516.       $game_system.se_play($data_system.cursor_se)
  517.       # 移至上一位角色
  518.       @actor_index += $game_party.actors.size - 1
  519.       @actor_index %= $game_party.actors.size
  520.       # 切换到别的特技画面
  521.       $scene = Scene_Skill.new(@actor_index)
  522.       return
  523.     end
  524.   end
  525.   #--------------------------------------------------------------------------
  526.   # ● 刷新画面 (目标窗口被激活的情况下)
  527.   #--------------------------------------------------------------------------
  528.   def update_target
  529.     # 按下 B 键的情况下
  530.     if Input.trigger?(Input::B)
  531.       # 演奏取消 SE
  532.       $game_system.se_play($data_system.cancel_se)
  533.       # 删除目标窗口
  534.       @skill_window.active = true
  535.       @target_window.visible = false
  536.       @target_window.active = false
  537.       return
  538.     end
  539.     # 按下 C 键的情况下
  540.     if Input.trigger?(Input::C)
  541.       # 因为 SP 不足而无法使用的情况下
  542.       unless @actor.skill_can_use?(@skill.id)
  543.         # 演奏冻结 SE
  544.         $game_system.se_play($data_system.buzzer_se)
  545.         return
  546.       end
  547.       # 目标是全体的情况下
  548.       if @target_window.index == -1
  549.         # 对同伴全体应用特技使用效果
  550.         used = false
  551.         for i in $game_party.actors
  552.           used |= i.skill_effect(@actor, @skill)
  553.         end
  554.       end
  555.       # 目标是使用者的情况下
  556.       if @target_window.index <= -2
  557.         # 对目标角色应用特技的使用效果
  558.         target = $game_party.actors[@target_window.index + 10]
  559.         used = target.skill_effect(@actor, @skill)
  560.       end
  561.       # 目标是单体的情况下
  562.       if @target_window.index >= 0
  563.         # 对目标角色应用特技的使用效果
  564.         target = $game_party.actors[@target_window.index]
  565.         used = target.skill_effect(@actor, @skill)
  566.       end
  567.       # 使用特技的情况下
  568.       if used
  569.         # 演奏特技使用时的 SE
  570.         $game_system.se_play(@skill.menu_se)
  571.         # 消耗 SP
  572.         @actor.sp -= @skill.sp_cost
  573.         # 额外的消耗
  574.         @actor.skill_cost_extra(@skill)
  575.         # 再生成各窗口内容
  576.         @status_window.refresh
  577.         @skill_window.refresh
  578.         @target_window.refresh
  579.         # 全灭的情况下
  580.         if $game_party.all_dead?
  581.           # 切换到游戏结束画面
  582.           $scene = Scene_Gameover.new
  583.           return
  584.         end
  585.         # 公共事件 ID 有效的情况下
  586.         if @skill.common_event_id > 0
  587.           # 预约调用公共事件
  588.           $game_temp.common_event_id = @skill.common_event_id
  589.           # 切换到地图画面
  590.           $scene = Scene_Map.new
  591.           return
  592.         end
  593.       end
  594.       # 无法使用特技的情况下
  595.       unless used
  596.         # 演奏冻结 SE
  597.         $game_system.se_play($data_system.buzzer_se)
  598.       end
  599.       return
  600.     end
  601.   end
  602. end

Lv5.捕梦者 (版主)

梦石
1
星屑
23963
在线时间
3338 小时
注册时间
2011-7-8
帖子
3925

开拓者

2
发表于 2019-4-30 20:43:07 | 只看该作者
不嫌麻烦的话直接使用全局变量,事件指令里的开关:$game_switches[100]

点评

ok了,问题解决了,谢谢大佬QWQ  发表于 2019-4-30 21:49
emmmm...这么一说好像有点道理....我去试试.  发表于 2019-4-30 20:47
这个当然知道...emmm我才发现我忘记附代码了...  发表于 2019-4-30 20:45

评分

参与人数 1星屑 +50 收起 理由
RyanBern + 50 认可答案

查看全部评分

熟悉rgss和ruby,xp区版主~
正在填坑:《膜拜组传奇》讲述膜拜组和学霸们的故事。
已上steam:与TXBD合作的Reformers《变革者》
* 战斗调用公共事件 *
* RGSOS 网络脚本 *
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-4-20 22:48

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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