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

Project1

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

[已经过期] 请问有没战斗中保护队友脚本

[复制链接]

Lv5.捕梦者

梦石
0
星屑
36462
在线时间
10800 小时
注册时间
2009-3-15
帖子
4815
跳转到指定楼层
1
发表于 2017-11-3 22:36:31 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

x
RTAB系统可以用的..

Lv5.捕梦者

梦石
0
星屑
35186
在线时间
4169 小时
注册时间
2007-12-15
帖子
10067
2
发表于 2017-11-6 16:36:07 | 只看该作者
是否可以考虑技能特效思路,
https://rpg.blue/thread-403718-1-1.html
技能依赖状态:cc=[状态集],状态ID为正数要求有,为负数要求没有
强制攻击转移?如果己方存在状态X,敌人特技编号x~xx全都转移到攻击角色X,感觉上应该相当于保护队友的效果。而且这个用法应该是没有冲突
但是技能要是多可能超级麻烦,因为每一个敌方会用的技能都要标注,
我现在是给没个技能前面标注#
标了一天了,好头疼T T

点评

更新脚本  发表于 2017-11-6 18:16
怕多加一个可以$d=load_data("Data/Items.rxdata"); $d.each do {|i| i && i.description.gsub!(/#?@/, "#@")}; save_data($d, "Data/Items.rxdata")  发表于 2017-11-6 17:36
谢谢,手动改了很大一部分了,这么用的话会不会给多加一个- -b  发表于 2017-11-6 16:50
$d=load_data("Data/Items.rxdata"); $d.each do {|i| i && i.description.gsub!(/@/, "#@")}; save_data($d, "Data/Items.rxdata")  发表于 2017-11-6 16:41
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
36462
在线时间
10800 小时
注册时间
2009-3-15
帖子
4815
3
 楼主| 发表于 2017-11-6 17:15:44 | 只看该作者
本帖最后由 soulsaga 于 2017-11-6 18:11 编辑
89444640 发表于 2017-11-6 16:36
是否可以考虑技能特效思路,
https://rpg.blue/thread-403718-1-1.html
技能依赖状态:cc=[状态集],状态I ...

怎么转移攻击?

我成功研究出战斗特效脚本援助的使用法了..顺便改善一下显示的文字..
RUBY 代码复制
  1. #==============================================================================
  2. # 本脚本来自[url=http://www.66RPG.com]www.66RPG.com[/url],使用和转载请保留此信息
  3. #==============================================================================
  4.  
  5. # ▼▲▼ XRXS19. 特殊効果詰め合わせ:戦闘用 with 29 parts ver..18a ▼▲▼
  6. # by 桜雅 在土, 和希, シムナフ
  7. # 援助修改BY:SOULSAGA
  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 = 0.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 = "援护防御"
  46.   COVER_ANIMATION_ID = 64
  47.   COVER_DEFAULT_NUMBER = 3
  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, 32, 32), opacity)
  672. self.contents.draw_text(x + 28, y, 212, 32, item.name, 0)
  673. self.contents.draw_text(x + 240, y, 16, 32, ":", 1)
  674. self.contents.draw_text(x + 256, y, 24, 32, number.to_s, 2)
  675. end
  676. end
  677. #==============================================================================
  678. # ■ Scene_Battle
  679. #==============================================================================
  680. class Scene_Battle
  681. #--------------------------------------------------------------------------
  682. # ● メイン処理
  683. #--------------------------------------------------------------------------
  684. alias xrxs19_main main
  685. def main
  686. @phase4_5_done = false
  687. xrxs19_main
  688. end
  689. #--------------------------------------------------------------------------
  690. # ● フレーム更新 (アクターコマンドフェーズ)
  691. #--------------------------------------------------------------------------
  692. alias xrxs19_update_phase3 update_phase3
  693. def update_phase3
  694. # 武器のみアイテムウィンドウが有効の場合
  695. if @item_window_weapons != nil and @item_window_weapons.visible
  696. update_phase3_item_window_weapons
  697. return
  698. end
  699. # 他
  700. xrxs19_update_phase3
  701. end
  702. #--------------------------------------------------------------------------
  703. # ● フレーム更新 (アクターコマンドフェーズ : スキル選択)
  704. #--------------------------------------------------------------------------
  705. alias xrxs19_update_phase3_skill_select update_phase3_skill_select
  706. def update_phase3_skill_select
  707. # C ボタンが押された場合
  708. if Input.trigger?(Input::C)
  709. # スキルウィンドウで現在選択されているデータを取得
  710. @skill = @skill_window.skill
  711. if skill_element_include?(@skill, "武器投掷")
  712. # 使用できない場合
  713. if @skill == nil or not @active_battler.skill_can_use?(@skill.id)
  714. # ブザー SE を演奏
  715. $game_system.se_play($data_system.buzzer_se)
  716. return
  717. end
  718. # 決定 SE を演奏
  719. $game_system.se_play($data_system.decision_se)
  720. # アクションを設定
  721. @active_battler.current_action.skill_id = @skill.id
  722. # アイテム選択へ移行する
  723. start_item_select_from_skill(@one.to_i)
  724. return
  725. end
  726. end
  727. xrxs19_update_phase3_skill_select
  728. end
  729. #--------------------------------------------------------------------------
  730. # ● フレーム更新 (アクターコマンドフェーズ : 武器のみアイテム選択)
  731. #--------------------------------------------------------------------------
  732. def update_phase3_item_window_weapons
  733. # 武器アイテムウィンドウを可視状態にする
  734. @item_window_weapons.visible = true
  735. # 武器アイテムウィンドウを更新
  736. @item_window_weapons.update
  737. # B ボタンが押された場合
  738. if Input.trigger?(Input::B)
  739. # キャンセル SE を演奏
  740. $game_system.se_play($data_system.cancel_se)
  741. # 武器アイテムの選択を終了
  742. end_item_select_from_skill
  743. return
  744. end
  745. # C ボタンが押された場合
  746. if Input.trigger?(Input::C)
  747. # 決定 SE を演奏
  748. $game_system.se_play($data_system.decision_se)
  749. # アイテムウィンドウで現在選択されているデータを取得
  750. @item = @item_window_weapons.item
  751. # アクションを設定
  752. @active_battler.current_action.basic = @item.id
  753. if $xrxs24_weapon_property_system_work
  754. # アイテムウィンドウで現在選択されているデータを取得
  755. @item_room_no = @item_window_weapons.item_room_no
  756. # アクションを設定
  757. @active_battler.current_action.basic_ex = @item_room_no
  758. end
  759. # 武器のみアイテムウィンドウを不可視化
  760. @item_window_weapons.visible = false
  761. # 効果範囲が敵単体の場合
  762. if @skill.scope == 1
  763. # エネミーの選択を開始
  764. start_enemy_select
  765. # 効果範囲が味方単体の場合
  766. elsif @skill.scope == 3 or @skill.scope == 5
  767. # アクターの選択を開始
  768. start_actor_select
  769. # 効果範囲が単体ではない場合
  770. else
  771. # アイテムの選択を終了
  772. end_item_select_from_skill
  773. # 次のアクターのコマンド入力へ
  774. phase3_next_actor
  775. end
  776. return
  777. end
  778. end
  779. #--------------------------------------------------------------------------
  780. # ● スキルからのアイテム選択開始
  781. #--------------------------------------------------------------------------
  782. def start_item_select_from_skill(restrict = 0)
  783. # 投擲アイテムウィンドウを作成 ( 武器のみ:投擲可能のみ )
  784. @item_window_weapons = Window_Item.new
  785. if restrict == 1
  786. @item_window_weapons.set_itemkind(11)
  787. else
  788. @item_window_weapons.set_itemkind(1)
  789. end
  790. # ヘルプウィンドウを関連付け
  791. @item_window_weapons.help_window = @help_window
  792. # スキルウィンドウを無効化
  793. @skill_window.active = false
  794. @skill_window.visible = false
  795. end
  796. #--------------------------------------------------------------------------
  797. # ● スキルからのアイテム選択終了
  798. #--------------------------------------------------------------------------
  799. def end_item_select_from_skill
  800. # 武器のみアイテムウィンドウを解放
  801. @item_window_weapons.dispose
  802. @item_window_weapons = nil
  803. # ヘルプウィンドウを隠す
  804. @help_window.visible = false
  805. # スキルウィンドウを有効化
  806. @skill_window.active = true
  807. @skill_window.visible = true
  808. end
  809. #--------------------------------------------------------------------------
  810. # ● エネミー選択開始
  811. #--------------------------------------------------------------------------
  812. alias xrxs19_start_enemy_select start_enemy_select
  813. def start_enemy_select
  814. return if start_select_check
  815. xrxs19_start_enemy_select
  816. end
  817. #--------------------------------------------------------------------------
  818. # ● アクター選択開始
  819. #--------------------------------------------------------------------------
  820. alias xrxs19_start_actor_select start_actor_select
  821. def start_actor_select
  822. return if start_select_check
  823. xrxs19_start_actor_select
  824. end
  825. #--------------------------------------------------------------------------
  826. # ● 選択開始時のチェック
  827. #--------------------------------------------------------------------------
  828. def start_select_check
  829. # "全体化"、"全域化"、"対象ランダム"の判定
  830. case @active_battler.current_action.kind
  831. when 0 # 攻撃
  832. # ここで「攻撃」使用者の武器IDを保持しておく
  833. @active_battler.current_action.weapon_id = @active_battler.weapon_id
  834. # チェックに戻る
  835. if equip_weapon_element_include?(@active_battler, ELEMENT_NAME_AREA_ENEMY_ALL) or
  836. equip_weapon_element_include?(@active_battler, ELEMENT_NAME_AREA_WHOLE) or
  837. equip_weapon_element_include?(@active_battler, ELEMENT_NAME_AREA_ENEMY_RAND) or
  838. equip_weapon_element_include?(@active_battler, ELEMENT_NAME_AREA_ACTOR_RAND) or
  839. equip_weapon_element_include?(@active_battler, ELEMENT_NAME_AREA_ALL_RANDOM)
  840. phase3_next_actor
  841. return true
  842. end
  843. when 1 # スキル
  844. if skill_element_include?(@skill, ELEMENT_NAME_AREA_ENEMY_ALL) or
  845. skill_element_include?(@skill, ELEMENT_NAME_AREA_WHOLE) or
  846. skill_element_include?(@skill, ELEMENT_NAME_AREA_ENEMY_RAND) or
  847. skill_element_include?(@skill, ELEMENT_NAME_AREA_ACTOR_RAND) or
  848. skill_element_include?(@skill, ELEMENT_NAME_AREA_ALL_RANDOM)
  849. end_skill_select
  850. phase3_next_actor
  851. return true
  852. end
  853. when 2 # アイテム
  854. if item_element_include?(@item, ELEMENT_NAME_AREA_ENEMY_ALL) or
  855. item_element_include?(@item, ELEMENT_NAME_AREA_WHOLE) or
  856. item_element_include?(@item, ELEMENT_NAME_AREA_ENEMY_RAND) or
  857. item_element_include?(@item, ELEMENT_NAME_AREA_ACTOR_RAND) or
  858. item_element_include?(@item, ELEMENT_NAME_AREA_ALL_RANDOM)
  859. end_item_select
  860. phase3_next_actor
  861. return true
  862. end
  863. end
  864. return false
  865. end
  866. #--------------------------------------------------------------------------
  867. # ● フレーム更新 (メインフェーズ ステップ 1 : アクション準備)
  868. #--------------------------------------------------------------------------
  869. alias xrxs19_update_phase4_step1 update_phase4_step1
  870. def update_phase4_step1
  871. # 初期化
  872. @phase4_act_continuation = 0
  873. @phase4_act_times_max = 1
  874. @skill = nil
  875. @weapon_id = nil
  876. # 戻す
  877. xrxs19_update_phase4_step1
  878. end
  879. #--------------------------------------------------------------------------
  880. # ● フレーム更新 (メインフェーズ ステップ 2 : アクション開始)
  881. #--------------------------------------------------------------------------
  882. alias xrxs19_update_phase4_step2 update_phase4_step2
  883. def update_phase4_step2
  884. #リレイズ判定
  885. next_phase_ok = true
  886. next_phase_ok = update_reraise_effect(@active_battler)
  887. if !next_phase_ok
  888. return
  889. end
  890. if next_phase_ok
  891. # ステップ 2 へ
  892. xrxs19_update_phase4_step2
  893. end
  894. end
  895. #--------------------------------------------------------------------------
  896. # ● 基本アクション 結果作成
  897. #--------------------------------------------------------------------------
  898. alias xrxs19_make_basic_action_result make_basic_action_result
  899. def make_basic_action_result
  900. # 攻撃の場合
  901. if @active_battler.current_action.basic == 0
  902. # 武器IDの取得
  903. @weapon_id = @active_battler.is_a?(Game_Actor) ? @active_battler.weapon_id : 0
  904. # 指定行動回数取得 ( "行動回数"が無い場合は 1 のまま )
  905. weapon_element_include?(@weapon_id, ELEMENT_NAME_MOVE_TIMES)
  906. @phase4_act_times_max = @one.to_i if @one != nil
  907. # アニメーション ID を設定
  908. @animation1_id = @active_battler.animation1_id
  909. @animation2_id = @active_battler.animation2_id
  910. # 初期化
  911. @target_battlers = []
  912. # 対象側バトラーの配列を設定
  913. # "全体化"の判定
  914. if equip_weapon_element_include?(@active_battler, ELEMENT_NAME_AREA_ENEMY_ALL)
  915. # 行動側バトラーがエネミーの場合
  916. if @active_battler.is_a?(Game_Enemy)
  917. if @active_battler.restriction == 3
  918. @target_battlers = $game_troop.enemies
  919. else
  920. @target_battlers = $game_party.actors
  921. end
  922. end
  923. # 行動側バトラーがアクターの場合
  924. if @active_battler.is_a?(Game_Actor)
  925. if @active_battler.restriction == 3
  926. @target_battlers = $game_party.actors
  927. else
  928. @target_battlers = $game_troop.enemies
  929. end
  930. end
  931. end
  932. # "敵ランダム"の判定
  933. if equip_weapon_element_include?(@active_battler, ELEMENT_NAME_AREA_ENEMY_RAND)
  934. # 行動側バトラーがエネミーの場合
  935. if @active_battler.is_a?(Game_Enemy)
  936. if @active_battler.restriction == 3
  937. tb_array = $game_troop.enemies
  938. else
  939. tb_array = $game_party.actors
  940. end
  941. end
  942. # 行動側バトラーがアクターの場合
  943. if @active_battler.is_a?(Game_Actor)
  944. if @active_battler.restriction == 3
  945. tb_array = $game_party.actors
  946. else
  947. tb_array = $game_troop.enemies
  948. end
  949. end
  950. @target_battlers = [tb_array[rand(tb_array.size)]]
  951. end
  952. # "味方ランダム"の判定
  953. if equip_weapon_element_include?(@active_battler, ELEMENT_NAME_AREA_ACTOR_RAND)
  954. # 行動側バトラーがエネミーの場合
  955. if @active_battler.is_a?(Game_Enemy)
  956. if @active_battler.restriction == 3
  957. tb_array = $game_party.actors
  958. else
  959. tb_array = $game_troop.enemies
  960. end
  961. end
  962. # 行動側バトラーがアクターの場合
  963. if @active_battler.is_a?(Game_Actor)
  964. if @active_battler.restriction == 3
  965. tb_array = $game_troop.enemies
  966. else
  967. tb_array = $game_party.actors
  968. end
  969. end
  970. @target_battlers = [tb_array[rand(tb_array.size)]]
  971. end
  972. # "全域化"の判定
  973. if equip_weapon_element_include?(@active_battler, ELEMENT_NAME_AREA_WHOLE)
  974. @target_battlers = $game_party.actors + $game_troop.enemies
  975. end
  976. # "対象ランダム"の判定
  977. if equip_weapon_element_include?(@active_battler, ELEMENT_NAME_AREA_ALL_RANDOM)
  978. tb_array = $game_party.actors + $game_troop.enemies
  979. @target_battlers = [tb_array[rand(tb_array.size)]]
  980. end
  981. if @target_battlers.size > 0
  982. ##かばう追加
  983. get_target_battlers_after_cover!(@target_battlers, @active_battler)
  984. # 通常攻撃の効果を適用
  985. for target in @target_battlers
  986. target.attack_effect(@active_battler)
  987. end
  988. return
  989. end
  990. end
  991. xrxs19_make_basic_action_result
  992. end
  993. #--------------------------------------------------------------------------
  994. # ● スキルまたはアイテムの対象側バトラー設定
  995. #--------------------------------------------------------------------------
  996. alias xrxs19_set_target_battlers set_target_battlers
  997. def set_target_battlers(scope)
  998. case @active_battler.current_action.kind
  999. when 1
  1000. # "全体化"の判定
  1001. if skill_element_include?(@skill, ELEMENT_NAME_AREA_ENEMY_ALL)
  1002. scope = 2
  1003. return
  1004. end
  1005. # "全域化"の判定
  1006. scope = 8 if skill_element_include?(@skill, ELEMENT_NAME_AREA_WHOLE)
  1007. # "敵ランダム"の判定
  1008. scope = 9 if skill_element_include?(@skill, ELEMENT_NAME_AREA_ENEMY_RAND)
  1009. # "味方ランダム"の判定
  1010. scope =10 if skill_element_include?(@skill, ELEMENT_NAME_AREA_ACTOR_RAND)
  1011. # "対象ランダム"の判定
  1012. scope =11 if skill_element_include?(@skill, ELEMENT_NAME_AREA_ALL_RANDOM)
  1013. when 2
  1014. # "全体化"の判定
  1015. if item_element_include?(@item, ELEMENT_NAME_AREA_ENEMY_ALL)
  1016. scope = 2
  1017. return
  1018. end
  1019. # "全域化"の判定
  1020. scope = 8 if item_element_include?(@item, ELEMENT_NAME_AREA_WHOLE)
  1021. # "敵ランダム"の判定
  1022. scope = 9 if item_element_include?(@item, ELEMENT_NAME_AREA_ENEMY_RAND)
  1023. # "味方ランダム"の判定
  1024. scope =10 if item_element_include?(@item, ELEMENT_NAME_AREA_ACTOR_RAND)
  1025. # "対象ランダム"の判定
  1026. scope =11 if item_element_include?(@item, ELEMENT_NAME_AREA_ALL_RANDOM)
  1027. end
  1028. case scope
  1029. when 8
  1030. @target_battlers = $game_party.actors + $game_troop.enemies
  1031. return
  1032. when 9
  1033. # 行動側バトラーがエネミーの場合
  1034. if @active_battler.is_a?(Game_Enemy)
  1035. tb_array = $game_party.actors
  1036. end
  1037. # 行動側バトラーがアクターの場合
  1038. if @active_battler.is_a?(Game_Actor)
  1039. tb_array = $game_troop.enemies
  1040. end
  1041. @target_battlers = [tb_array[rand(tb_array.size)]]
  1042. return
  1043. when 10
  1044. # 行動側バトラーがエネミーの場合
  1045. if @active_battler.is_a?(Game_Enemy)
  1046. tb_array = $game_troop.enemies
  1047. end
  1048. # 行動側バトラーがアクターの場合
  1049. if @active_battler.is_a?(Game_Actor)
  1050. tb_array = $game_party.actors
  1051. end
  1052. @target_battlers = [tb_array[rand(tb_array.size)]]
  1053. return
  1054. when 11
  1055. tb_array = $game_party.actors + $game_troop.enemies
  1056. @target_battlers = [tb_array[rand(tb_array.size)]]
  1057. return
  1058. end
  1059. # 呼び戻す
  1060. xrxs19_set_target_battlers(scope)
  1061. ##追加
  1062. get_target_battlers_after_cover!(@target_battlers, @active_battler)
  1063. end
  1064. #--------------------------------------------------------------------------
  1065. # ● スキルアクション 結果作成
  1066. #--------------------------------------------------------------------------
  1067. alias xrxs19_make_skill_action_result make_skill_action_result
  1068. def make_skill_action_result
  1069. # スキルを取得
  1070. @skill = $data_skills[@active_battler.current_action.skill_id]
  1071. # 既に一回以上行動している場合
  1072. if @phase4_act_continuation >= 1
  1073. # SP消費分のSPを回復させて擬似的にSPを減らさない
  1074. @active_battler.sp += @skill.sp_cost
  1075. else
  1076. # 指定行動回数取得
  1077. skill_element_include?(@skill, ELEMENT_NAME_MOVE_TIMES)
  1078. @phase4_act_times_max = @one.to_i if @one != nil
  1079. # 特殊効果:消費金額に順ずる固定ダメージ
  1080. if skill_element_include?(@skill, "金钱投掷")
  1081. # ゴールドウィンドウを作成
  1082. if @gold_window == nil or @gold_window.visible == false
  1083. @gold_window = Window_Gold.new
  1084. @gold_window.x = 640 - @gold_window.width
  1085. @gold_window.y = 64
  1086. @gold_window.opacity = 160
  1087. @gold_window.visible = true
  1088. end
  1089. end
  1090. # HP消費スキルの場合
  1091. if skill_element_include?(@skill, ELEMENT_NAME_HP_COST)
  1092. # HPが足りるか判定
  1093. if @active_battler.hp <= @skill.sp_cost
  1094. # 足りない場合
  1095. # ステップ 1 に移行
  1096. @phase4_step = 1
  1097. return
  1098. end
  1099. # SP消費分のSPを回復させて擬似的にSPを減らさない(最大値を超えて回復)
  1100. @active_battler.hp0_ban = true
  1101. @active_battler.sp += @skill.sp_cost
  1102. # 戻す
  1103. xrxs19_make_skill_action_result
  1104. # HPを消費
  1105. @active_battler.hp -= @skill.sp_cost
  1106. # HP/SPの制限の解除
  1107. @active_battler.hp0_ban = false
  1108. return
  1109. end
  1110. end
  1111. xrxs19_make_skill_action_result
  1112. ##追加
  1113. make_cover_skill_action_result()
  1114. end
  1115. #--------------------------------------------------------------------------
  1116. # ● フレーム更新 (メインフェーズ ステップ 3 : 行動側アニメーション)
  1117. #--------------------------------------------------------------------------
  1118. alias xrxs19_update_phase4_step3 update_phase4_step3
  1119. def update_phase4_step3
  1120. # 既に一回以上行動している場合
  1121. if @phase4_act_continuation >= 1
  1122. # ステップ 4 に移行
  1123. @phase4_step = 4
  1124. @wait_count = 0
  1125. return
  1126. end
  1127. xrxs19_update_phase4_step3
  1128. # ちからためメッセージ表示。
  1129. for target in @target_battlers
  1130. if !target.action_message.nil?
  1131. @help_window.set_text(target.action_message, 1)
  1132. target.action_message = nil
  1133. end
  1134. end
  1135. end
  1136. #--------------------------------------------------------------------------
  1137. # ● フレーム更新 (メインフェーズ ステップ 4 : 対象側アニメーション)
  1138. #--------------------------------------------------------------------------
  1139. alias xrxs19_update_phase4_step4 update_phase4_step4
  1140. def update_phase4_step4
  1141. # 武器投擲時、「武器のアニメーション」を対象に使う
  1142. if skill_element_include?(@skill, "武器投掷")
  1143. @animation2_id = $data_weapons[@active_battler.current_action.basic].animation2_id
  1144. end
  1145. # ゴールドウィンドウを更新
  1146. @gold_window.refresh if @gold_window != nil
  1147. if skill_element_include?(@skill, "变身")
  1148. tb_array = @target_battlers
  1149. @target_battlers = [@active_battler]
  1150. xrxs19_update_phase4_step4
  1151. @target_battlers = tb_array
  1152. else
  1153. xrxs19_update_phase4_step4
  1154. end
  1155. # かばわれたメンバーのアニメーション
  1156. for target in @target_battlers
  1157. #if target.current_friend != nil
  1158. target.current_friend.animation_id = COVER_ANIMATION_ID
  1159. #end
  1160. end
  1161. # 既に一回以上行動している場合
  1162. if @phase4_act_continuation >= 1
  1163. @wait_count = 0
  1164. end
  1165. end
  1166. #--------------------------------------------------------------------------
  1167. # ● フレーム更新 (メインフェーズ ステップ 5 : ダメージ表示)
  1168. #--------------------------------------------------------------------------
  1169. alias xrxs19_update_phase4_step5 update_phase4_step5
  1170. def update_phase4_step5
  1171. # 呼び戻す
  1172. xrxs19_update_phase4_step5
  1173. # かばわれたメンバーのダメージ
  1174. for target in @target_battlers
  1175. if target.current_friend != nil
  1176. target.current_friend.damage_pop = true
  1177. #かばっている状態の初期化
  1178. target.current_friend = nil
  1179. end
  1180. end
  1181. # 生存確認
  1182. target_still_left = false
  1183. for target in @target_battlers
  1184. # ターゲットが生き残っているか判別
  1185. target_still_left = true if !target.dead?
  1186. # 戦闘不能時で、変身を解除
  1187. if target.dead? and target.metamor_target != nil
  1188. target.animation_id = 17 # 戦闘不能変身解除時のアニメーションID
  1189. target.animation_hit = true
  1190. target.battler_name = target.battler_name_original
  1191. target.metamor_target = nil
  1192. end
  1193. end
  1194. # ダメージ表示
  1195. if @active_battler.damage != nil
  1196. @active_battler.damage_pop = true
  1197. end
  1198. # 変身対象のバトラーグラフィックをコピー
  1199. if skill_element_include?(@skill, "变身")
  1200. if @active_battler.metamor_target != nil
  1201. @active_battler.battler_name = @active_battler.metamor_target.battler_name
  1202. else
  1203. @active_battler.battler_name = @active_battler.battler_name_original
  1204. end
  1205. end
  1206. # ターゲットの敵への処理
  1207. for target in @target_battlers
  1208. # スティール結果メッセージ表示。ただし、複数ターゲットの表示は不可能
  1209. if !target.effect_message.nil?
  1210. @help_window.set_text(target.effect_message, 1)
  1211. target.effect_message = nil
  1212. end
  1213. end
  1214. # 行動した回数のカウントを 1 加算
  1215. @phase4_act_continuation += 1
  1216. # 実行済み行動回数が、指定行動回数に達したかを判別
  1217. if @phase4_act_continuation < @phase4_act_times_max
  1218. # 達していない場合
  1219. # 生存している場合、続ける。
  1220. if target_still_left
  1221. # 指定行動回数に満たない場合は繰り返す為、ステップ 2 に移行
  1222. @phase4_step = 2
  1223. @wait_count = 0
  1224. # スキル使用中の場合はヘルプウィンドウを隠すのをやめる
  1225. if @active_battler.current_action.kind == 1
  1226. @help_window.visible = true
  1227. end
  1228. end
  1229. else
  1230. # 達した場合
  1231. # 敵が生存、かつ skillが"派生"属性を持つ場合
  1232. if target_still_left and
  1233. (skill_element_include?(@skill, ELEMENT_NAME_DERIVER) or
  1234. (@weapon_id != nil and equip_weapon_element_include?(@active_battler, ELEMENT_NAME_DERIVER)))
  1235. if @one.to_i > 0
  1236. # 回数をリセット
  1237. @phase4_act_continuation = 0
  1238. @phase4_act_times_max = 1
  1239. # 武器攻撃ではなくなるため @weapon_id を nil 化
  1240. @weapon_id = nil
  1241. # 新しいスキルID
  1242. @active_battler.current_action.kind = 1
  1243. @active_battler.current_action.skill_id = @one.to_i
  1244. # ステップ 2 に移行
  1245. @phase4_step = 2
  1246. @wait_count = 0
  1247. end
  1248. end
  1249. end
  1250. # ゴールドウィンドウを隠す
  1251. @gold_window.visible = false if @gold_window != nil
  1252. end
  1253. #--------------------------------------------------------------------------
  1254. # ● フレーム更新 (メインフェーズ ステップ 6 : リレイズ表示→リフレッシュ)
  1255. #--------------------------------------------------------------------------
  1256. alias xrxs19_update_phase4_step6 update_phase4_step6
  1257. def update_phase4_step6
  1258. next_phase_ok = true
  1259. #リレイズ判定
  1260. for enemy in $game_troop.enemies
  1261. next_phase_ok = update_reraise_effect(enemy)
  1262. if !next_phase_ok
  1263. return
  1264. end
  1265. end
  1266. for actor in $game_party.actors
  1267. next_phase_ok = update_reraise_effect(actor)
  1268. if !next_phase_ok
  1269. return
  1270. end
  1271. end
  1272. if next_phase_ok
  1273. xrxs19_update_phase4_step6
  1274. end
  1275. end
  1276. #===================================================
  1277. #リレイズエフェクト
  1278. #===================================================
  1279. def update_reraise_effect(battler)
  1280. if battler.reraised
  1281. case battler.reraise_state
  1282. when 0
  1283. battler.reraise_state = 1 # コラプス待ち
  1284. @wait_count = 16
  1285. return false
  1286. when 1
  1287. battler.reraise_state = 2 # 復活アニメーション
  1288. ##IDは好きなアニメーションIDを指定
  1289. battler.animation_id = RERAISE_ANIMATION_ID
  1290. @wait_count = 8
  1291. return false#
  1292. when 2
  1293. #復活処理
  1294. battler.hp = battler.maxhp * RERAISE_HP_PERCENT / 100 + RERAISE_HP
  1295. battler.reraise_state = 3 #アピアーアニメーション
  1296. @wait_count = 8
  1297. return false#
  1298. when 3
  1299. battler.reraise_state = 0 #終了?通常処理に戻る
  1300. battler.reraised = false #フラグを初期値へ
  1301. @status_window.refresh
  1302. return true
  1303. end
  1304. else
  1305. return true
  1306. end
  1307. end
  1308. #--------------------------------------------------------------------------
  1309. # ● アフターバトルフェーズ開始
  1310. #--------------------------------------------------------------------------
  1311. alias xrxs19_update_phase5 update_phase5
  1312. def update_phase5
  1313. next_phase_ok = false
  1314. # 次のアクターへ
  1315. @phase5_i = -1 if @phase5_i == nil
  1316. @phase5_i += 1
  1317. if @phase5_i < $game_party.actors.size
  1318. actor = $game_party.actors[@phase5_i]
  1319. # 変身状態の味方がいるか判別し、それを解除する
  1320. if actor.metamor_target != nil
  1321. actor.animation_id = 17 # 戦闘終了変身解除時のアニメーションID
  1322. actor.animation_hit = true
  1323. actor.battler_name = actor.battler_name_original
  1324. actor.metamor_target = nil
  1325. # ステータスウィンドウをリフレッシュ
  1326. @status_window.refresh
  1327. # アニメーションの長さにかかわらず、最低 4 フレーム待つ
  1328. @wait_count = 4
  1329. end
  1330. else
  1331. next_phase_ok = true
  1332. end
  1333. if next_phase_ok
  1334. xrxs19_update_phase5
  1335. end
  1336. end
  1337. #--------------------------------------------------------------------------
  1338. # ● 行動順序作成
  1339. #--------------------------------------------------------------------------
  1340. alias xrxs19_make_action_orders make_action_orders
  1341. def make_action_orders
  1342. xrxs19_make_action_orders
  1343. # 優先度の大きい順 (同値の場合は素早さの速い順) に並び替え
  1344. @action_battlers.sort! do |a, b|
  1345. if a.current_action.speed_priority > b.current_action.speed_priority
  1346. -1
  1347. elsif a.current_action.speed_priority < b.current_action.speed_priority
  1348. +1
  1349. elsif a.current_action.speed > b.current_action.speed
  1350. -1
  1351. elsif a.current_action.speed < b.current_action.speed
  1352. +1
  1353. else
  1354. 0 # a <=> b
  1355. end
  1356. end
  1357. end
  1358. #--------------------------------------------------------------------------
  1359. # ● バトル終了
  1360. #--------------------------------------------------------------------------
  1361. alias xrxs19_battle_end battle_end
  1362. def battle_end(result)
  1363. for i in 0...$game_party.actors.size
  1364. actor = $game_party.actors[i]
  1365. # 変身状態の味方がいるか判別し、それを解除する
  1366. if actor.metamor_target != nil
  1367. actor.battler_name = actor.battler_name_original
  1368. actor.metamor_target = nil
  1369. end
  1370. end
  1371. xrxs19_battle_end(result)
  1372. end
  1373. end
  1374. #=============================================================================
  1375. # ◇ スティール
  1376. #=============================================================================
  1377. class Game_Battler
  1378. #--------------------------------------------------------------------------
  1379. # ● 公開インスタンス変数
  1380. #--------------------------------------------------------------------------
  1381. attr_accessor :effect_message
  1382. #--------------------------------------------------------------------------
  1383. # ● オブジェクト初期化
  1384. #--------------------------------------------------------------------------
  1385. alias before_steal_original_battler_initialize initialize
  1386. def initialize
  1387. before_steal_original_battler_initialize()
  1388. @effect_message = nil
  1389. @steal_skill_id = $data_system.elements.index(STEAL_SKILL_ELEMENT_NAME)
  1390. end
  1391. end
  1392. class Game_Enemy < Game_Battler
  1393. #--------------------------------------------------------------------------
  1394. # ● オブジェクト初期化
  1395. #--------------------------------------------------------------------------
  1396. alias before_steal_original_enemy_initialize initialize
  1397. def initialize(troop_id, member_index)
  1398. before_steal_original_enemy_initialize(troop_id, member_index)
  1399. @item_possession = true
  1400. end
  1401. #===================================================
  1402. #
  1403. #===================================================
  1404. def name
  1405. name = $data_enemies[@enemy_id].name.split(/-/)[0]
  1406. if !name.nil?
  1407. return name = name.strip()
  1408. else
  1409. return ''
  1410. end
  1411. end
  1412. #===================================================
  1413. #ノーマルアイテムの指定 
  1414. #エネミーネームに -n種類 ID 個数(-na 10 10) と入れて指定。
  1415. #種類は、i(アイテム) w(武器) a(防具)のいずれか一つ
  1416. #個数は省略可能、自動で1扱い。
  1417. #また、ドロップアイテムと同一にしたい場合は
  1418. #エネミーネームに -nd 個数(-nd 2) と入れて指定。
  1419. #個数は省略可能、自動で1扱い。
  1420. #===================================================
  1421.  
  1422. def normal_item
  1423. return get_item_from_name("n")#オプション"n"の文字列から取得
  1424. end
  1425.  
  1426. #===================================================
  1427. #レアアイテムの指定 
  1428. #エネミーネームに -r種類 ID 個数(-na 10 10) と入れて指定。
  1429. #種類は、i(アイテム) w(武器) a(防具)のいずれか一つ
  1430. #個数は省略可能、自動で1扱い。
  1431. #また、ドロップアイテムと同一にしたい場合は
  1432. #エネミーネームに -rd 個数(-nd 2) と入れて指定。
  1433. #個数は省略可能、自動で1扱い。
  1434. #===================================================
  1435.  
  1436. def rare_item
  1437. return get_item_from_name("r")#オプション"r"の文字列から取得
  1438. end
  1439.  
  1440. #===================================================
  1441. #*Nameからアイテムを抜き出す処理
  1442. #===================================================
  1443. def get_item_from_name(opt)
  1444. names = $data_enemies[@enemy_id].name.split(/-/)
  1445. if names.size > 1
  1446. for i in 1...names.size
  1447. if names[i][0,1] != opt
  1448. next
  1449. end
  1450.  
  1451. names[i].sub!(/^.(.*)/){$1}
  1452. ary = names[i].split(/ /)
  1453.  
  1454. if ary[0][0,1] == "g"
  1455. cgy = "g"
  1456. id = 0
  1457. if ary[1].nil?
  1458. ary[1] = "1"
  1459. elsif ary[1].sub!(/^([0-9]+)/){$1}.nil?
  1460. ary[1] = "1"
  1461. end
  1462. possession = {"Category"=>cgy, "ID"=>id, "Num"=>ary[1].to_i}
  1463. return possession
  1464.  
  1465. elsif ary[0][0,1] == "d"
  1466. cgy = ""
  1467. id = 0
  1468. if self.item_id != 0
  1469. cgy = "i"
  1470. id = self.item_id
  1471. elsif self.weapon_id != 0
  1472. cgy = "w"
  1473. id = self.weapon_id
  1474. elsif self.armor_id != 0
  1475. cgy = "a"
  1476. id = self.armor_id
  1477. else
  1478. return nil
  1479. end
  1480.  
  1481. if ary[1].nil?
  1482. ary[1] = "1"
  1483. elsif ary[1].sub!(/^([0-9]+)/){$1}.nil?
  1484. ary[1] = "1"
  1485. end
  1486. possession = {"Category"=>cgy, "ID"=>id, "Num"=>ary[1].to_i}
  1487. return possession
  1488.  
  1489. elsif !ary[0].sub!(/^([iwa])/){$1}.nil? && !ary[1].sub!(/^([0-9]+)/){$1}.nil?
  1490. if ary[2].nil? || ary[2].sub!(/^([0-9]+)/){$1}.nil?
  1491. ary[2] = "1"
  1492. end
  1493. possession = {"Category"=>ary[0], "ID"=>ary[1].to_i, "Num"=>ary[2].to_i}
  1494. return possession
  1495.  
  1496. end
  1497. end
  1498. end
  1499. return nil
  1500. end
  1501.  
  1502. #===================================================
  1503. #スティールエフェクト
  1504. #===================================================
  1505.  
  1506. def steal_effect(user, skill) # 引数skillを追加
  1507.  
  1508. pos = self.normal_item
  1509.  
  1510. if !@item_possession || pos.nil?
  1511. @effect_message = "没有东西可偷。"
  1512. #self.damage = "Miss"
  1513. return false
  1514. end
  1515.  
  1516. #盗み成功判定 アジリティが同一で50%、2倍で100%
  1517. if rand(100) <= ((user.agi+0.01)/(self.agi+0.01))*100/2
  1518. r_pos = self.rare_item
  1519. #レアアイテム判定
  1520. if !r_pos.nil? && rand(10) <= 1
  1521. pos = r_pos
  1522. end
  1523.  
  1524. case pos["Category"]
  1525. when "i"
  1526. item = $data_items[pos["ID"]]
  1527. if item.nil?
  1528. print "这个物品不存在!"
  1529. return false
  1530. end
  1531. $game_party.gain_item(item.id, pos["Num"])
  1532. when "w"
  1533. item = $data_weapons[pos["ID"]]
  1534. if item.nil?
  1535. print "这个物品不存在!"
  1536. return false
  1537. end
  1538. $game_party.gain_weapon(item.id, pos["Num"])
  1539. when "a"
  1540. item = $data_armors[pos["ID"]]
  1541. if item.nil?
  1542. print "这个物品不存在!"
  1543. return false
  1544. end
  1545. $game_party.gain_armor(item.id, pos["Num"])
  1546. when "g"
  1547. # ゴールド獲得
  1548. $game_party.gain_gold(pos["Num"])
  1549. end
  1550.  
  1551. if pos["Category"] == "g"
  1552. @effect_message = "#{pos["Num"]}#{$data_system.words.gold}偷到!"
  1553. else
  1554. @effect_message = "#{item.name}#{pos["Num"]}个偷到!"
  1555. end
  1556. @item_possession = false
  1557.  
  1558. self.damage = "Steal!" if self.damage == "Miss"
  1559. return true
  1560. else
  1561. @effect_message = "没有东西可偷???"
  1562. #self.damage = "Miss
  1563. return false
  1564. end
  1565.  
  1566. return false # 念のためfalse返す処理追加
  1567. # 多分なくてもifの結果(false)が返ると思うけど…
  1568. end
  1569. end
  1570. #=============================================================================
  1571. # ■ ライブラ スキル実装スクリプト 2004/09/24 - 0.1α
  1572. #=============================================================================
  1573. class Game_Battler
  1574. #--------------------------------------------------------------------------
  1575. # ● 追加公開インスタンス変数
  1576. #--------------------------------------------------------------------------
  1577. attr_accessor :libla_reserve # ライブラ予約
  1578. #--------------------------------------------------------------------------
  1579. # ● 初期化
  1580. #--------------------------------------------------------------------------
  1581. alias before_libra_initialize initialize
  1582.  
  1583. def initialize
  1584. before_libra_initialize
  1585. # 「ライブラ」属性のID取得
  1586. @libra_element_id = $data_system.elements.index(LIBLA_SKILL_ELEMENT_NAME)
  1587. @libra_element_id = 0 if @libra_element_id.nil?
  1588. # 今回の行動フェイズでライブラを受けたかどうかフラグ、初期化
  1589. @libla_reserve = false
  1590. end
  1591. #--------------------------------------------------------------------------
  1592. # ● スキルの効果適用
  1593. # user : 使用者 (バトラー)
  1594. # skill: スキル
  1595. #--------------------------------------------------------------------------
  1596. alias before_libra_skill_effect skill_effect
  1597. def skill_effect(user, skill)
  1598. #「ライブラ」スキルかどうかの判定。
  1599. if skill.element_set.include?(@libra_element_id)
  1600. # 命中率を適用する場合は下のif文のコメントを外してください
  1601. #if rand(100) < skill.hit
  1602. # このバトラーがエネミーなら情報ウィンドウを表示する
  1603. if self.is_a?(Game_Enemy)
  1604. self.libla_reserve = true
  1605. end
  1606. # 命中率を適用する場合は下のelse~endのコメントを外してください
  1607. #else
  1608. # self.damage = "Miss"
  1609. #end
  1610. # 普通のスキル判定は行わない。
  1611. return true
  1612. else
  1613. return before_libra_skill_effect(user, skill)
  1614. end
  1615. end
  1616. end
  1617. #==============================================================================
  1618. # ■ Scene_Battle
  1619. #==============================================================================
  1620. class Scene_Battle
  1621. #--------------------------------------------------------------------------
  1622. # ● フレーム更新 (メインフェーズ ステップ 5 : ダメージ表示)
  1623. #--------------------------------------------------------------------------
  1624. alias before_libra_update_phase4_step5 update_phase4_step5
  1625. def update_phase4_step5
  1626. # ダメージ表示
  1627. for target in @target_battlers
  1628. if target.libla_reserve
  1629. libra_window = Window_EnemyStatus.new(target)
  1630. loop do
  1631. # ゲーム画面を更新
  1632. Graphics.update
  1633. # 入力情報を更新
  1634. Input.update
  1635. # ボタンが押されたら情報ウィンドウを閉じてループを中断
  1636. if Input.trigger?(Input::C) or Input.trigger?(Input::B)
  1637. libra_window.dispose
  1638. libra_window = nil
  1639. break
  1640. end
  1641. end
  1642. end
  1643. # ライブラ予約フラグを解除
  1644. target.libla_reserve = false
  1645. end
  1646. before_libra_update_phase4_step5
  1647. end
  1648. end
  1649. #==============================================================================
  1650. # ■ Window_EnemyStatus
  1651. #------------------------------------------------------------------------------
  1652. #  エネミーのステータスを表示するステータスウィンドウです。
  1653. #==============================================================================
  1654. class Window_EnemyStatus < Window_Base
  1655. #--------------------------------------------------------------------------
  1656. # ● オブジェクト初期化
  1657. # enemy : エネミー
  1658. #--------------------------------------------------------------------------
  1659. def initialize(enemy)
  1660. super(0, 64, 640, 256)
  1661. self.contents = Bitmap.new(width - 32, height - 32)
  1662. self.back_opacity = 127
  1663. @enemy = enemy
  1664. refresh
  1665. end
  1666. #--------------------------------------------------------------------------
  1667. # ● リフレッシュ
  1668. #--------------------------------------------------------------------------
  1669. def refresh
  1670. self.contents.clear
  1671. draw_enemy_name(@enemy, 4, 0)
  1672. draw_enemy_state(@enemy, 4, 48)
  1673. draw_enemy_hp(@enemy,196, 48, 172)
  1674. draw_enemy_sp(@enemy,196, 72, 172)
  1675. draw_enemy_parameter(@enemy, 4, 120, 0)
  1676. draw_enemy_parameter(@enemy, 4, 144, 1)
  1677. draw_enemy_parameter(@enemy, 4, 168, 2)
  1678. draw_enemy_parameter(@enemy, 4, 192, 7)
  1679. draw_enemy_parameter(@enemy,196, 120, 3)
  1680. draw_enemy_parameter(@enemy,196, 144, 4)
  1681. draw_enemy_parameter(@enemy,196, 168, 5)
  1682. draw_enemy_parameter(@enemy,196, 192, 6)
  1683. self.contents.font.color = system_color
  1684. self.contents.draw_text(384, 24, 80, 32, "EXP")
  1685. self.contents.draw_text(384, 48, 80, 32, "金钱")
  1686. self.contents.draw_text(384, 96, 96, 32, "战利品")
  1687. self.contents.draw_text(384, 144, 96, 32, "偷窃物")
  1688. self.contents.font.color = normal_color
  1689. self.contents.draw_text(384 + 80, 24, 84, 32, @enemy.exp.to_s, 2)
  1690. self.contents.draw_text(384 + 80, 48, 84, 32, @enemy.gold.to_s, 2)
  1691. draw_item_name(get_enemy_item(@enemy,1), 384 + 16, 120)
  1692. draw_item_name(get_enemy_item(@enemy,2), 384 + 16, 168)
  1693. draw_item_name(get_enemy_item(@enemy,3), 384 + 16, 192)
  1694. end
  1695. #--------------------------------------------------------------------------
  1696. # ○ アイテムの取得
  1697. #--------------------------------------------------------------------------
  1698. def get_enemy_item( enemy, type )
  1699. case type
  1700. when 1:
  1701. if enemy.item_id != nil and enemy.item_id != 0
  1702. return $data_items[enemy.item_id]
  1703. elsif enemy.weapon_id != nil and enemy.weapon_id != 0
  1704. return $data_weapons[enemy.weapon_id]
  1705. elsif enemy.armor_id != nil and enemy.armor_id != 0
  1706. return $data_armors[enemy.armor_id]
  1707. else
  1708. return nil
  1709. end
  1710. when 2:
  1711. info = enemy.get_item_from_name("n")
  1712. return nil if info == nil
  1713. case info["Category"]
  1714. when "i"
  1715. return $data_items[info["ID"]]
  1716. when "w"
  1717. return $data_weapons[info["ID"]]
  1718. when "a"
  1719. return $data_armors[info["ID"]]
  1720. otherwise
  1721. return nil
  1722. end
  1723. when 3:
  1724. info = enemy.get_item_from_name("r")
  1725. return nil if info == nil
  1726. case info["Category"]
  1727. when "i"
  1728. return $data_items[info["ID"]]
  1729. when "w"
  1730. return $data_weapons[info["ID"]]
  1731. when "a"
  1732. return $data_armors[info["ID"]]
  1733. otherwise
  1734. return nil
  1735. end
  1736. otherwise
  1737. return nil
  1738. end
  1739. end
  1740. #--------------------------------------------------------------------------
  1741. # ● 名前の描画
  1742. # enemy : エネミー
  1743. # x : 描画先 X 座標
  1744. # y : 描画先 Y 座標
  1745. #--------------------------------------------------------------------------
  1746. def draw_enemy_name(enemy, x, y)
  1747. self.contents.font.color = normal_color
  1748. self.contents.draw_text(x, y, 120, 32, enemy.name)
  1749. end
  1750. #--------------------------------------------------------------------------
  1751. # ● ステートの描画
  1752. # enemy : エネミー
  1753. # x : 描画先 X 座標
  1754. # y : 描画先 Y 座標
  1755. # width : 描画先の幅
  1756. #--------------------------------------------------------------------------
  1757. def draw_enemy_state(enemy, x, y, width = 120)
  1758. text = make_battler_state_text(enemy, width, true)
  1759. self.contents.font.color = enemy.hp == 0 ? knockout_color : normal_color
  1760. self.contents.draw_text(x, y, width, 32, text)
  1761. end
  1762. #--------------------------------------------------------------------------
  1763. # ● HP の描画
  1764. # enemy : エネミー
  1765. # x : 描画先 X 座標
  1766. # y : 描画先 Y 座標
  1767. # width : 描画先の幅
  1768. #--------------------------------------------------------------------------
  1769. def draw_enemy_hp(enemy, x, y, width = 144)
  1770. # 文字列 "HP" を描画
  1771. self.contents.font.color = system_color
  1772. self.contents.draw_text(x, y, 32, 32, $data_system.words.hp)
  1773. # MaxHP を描画するスペースがあるか計算
  1774. if width - 32 >= 108
  1775. hp_x = x + width - 108
  1776. flag = true
  1777. elsif width - 32 >= 48
  1778. hp_x = x + width - 48
  1779. flag = false
  1780. end
  1781. # HP を描画
  1782. self.contents.font.color = enemy.hp == 0 ? knockout_color :
  1783. enemy.hp <= enemy.maxhp / 4 ? crisis_color : normal_color
  1784. self.contents.draw_text(hp_x, y, 48, 32, enemy.hp.to_s, 2)
  1785. # MaxHP を描画
  1786. if flag
  1787. self.contents.font.color = normal_color
  1788. self.contents.draw_text(hp_x + 48, y, 12, 32, "/", 1)
  1789. self.contents.draw_text(hp_x + 60, y, 48, 32, enemy.maxhp.to_s)
  1790. end
  1791. end
  1792. #--------------------------------------------------------------------------
  1793. # ● SP の描画
  1794. # enemy : エネミー
  1795. # x : 描画先 X 座標
  1796. # y : 描画先 Y 座標
  1797. # width : 描画先の幅
  1798. #--------------------------------------------------------------------------
  1799. def draw_enemy_sp(enemy, x, y, width = 144)
  1800. # 文字列 "SP" を描画
  1801. self.contents.font.color = system_color
  1802. self.contents.draw_text(x, y, 32, 32, $data_system.words.sp)
  1803. # MaxSP を描画するスペースがあるか計算
  1804. if width - 32 >= 108
  1805. sp_x = x + width - 108
  1806. flag = true
  1807. elsif width - 32 >= 48
  1808. sp_x = x + width - 48
  1809. flag = false
  1810. end
  1811. # SP を描画
  1812. self.contents.font.color = enemy.sp == 0 ? knockout_color :
  1813. enemy.sp <= enemy.maxsp / 4 ? crisis_color : normal_color
  1814. self.contents.draw_text(sp_x, y, 48, 32, enemy.sp.to_s, 2)
  1815. # MaxSP を描画
  1816. if flag
  1817. self.contents.font.color = normal_color
  1818. self.contents.draw_text(sp_x + 48, y, 12, 32, "/", 1)
  1819. self.contents.draw_text(sp_x + 60, y, 48, 32, enemy.maxsp.to_s)
  1820. end
  1821. end
  1822. #--------------------------------------------------------------------------
  1823. # ● パラメータの描画
  1824. # enemy : エネミー
  1825. # x : 描画先 X 座標
  1826. # y : 描画先 Y 座標
  1827. # type : パラメータの種類 (0~6)
  1828. #--------------------------------------------------------------------------
  1829. def draw_enemy_parameter(enemy, x, y, type)
  1830. case type
  1831. when 0
  1832. parameter_name = $data_system.words.atk
  1833. parameter_value = enemy.atk
  1834. when 1
  1835. parameter_name = $data_system.words.pdef
  1836. parameter_value = enemy.pdef
  1837. when 2
  1838. parameter_name = $data_system.words.mdef
  1839. parameter_value = enemy.mdef
  1840. when 3
  1841. parameter_name = $data_system.words.str
  1842. parameter_value = enemy.str
  1843. when 4
  1844. parameter_name = $data_system.words.dex
  1845. parameter_value = enemy.dex
  1846. when 5
  1847. parameter_name = $data_system.words.agi
  1848. parameter_value = enemy.agi
  1849. when 6
  1850. parameter_name = $data_system.words.int
  1851. parameter_value = enemy.int
  1852. when 7
  1853. parameter_name = "回避"
  1854. parameter_value = enemy.eva
  1855. end
  1856. self.contents.font.color = system_color
  1857. self.contents.draw_text(x, y, 120, 32, parameter_name)
  1858. self.contents.font.color = normal_color
  1859. self.contents.draw_text(x + 120, y, 36, 32, parameter_value.to_s, 2)
  1860. end
  1861. end
  1862. #=============================================================================
  1863. # ◇ ちからため スキル実装スクリプト by 和希
  1864. #=============================================================================
  1865. class Game_Battler
  1866. #--------------------------------------------------------------------------
  1867. # ● 追加公開インスタンス変数
  1868. #--------------------------------------------------------------------------
  1869. attr_accessor :powerstock # 「ちからため」回数
  1870. attr_accessor :action_message # ヘルプウィンドウに表示する文字
  1871. #--------------------------------------------------------------------------
  1872. # ● 初期化
  1873. #--------------------------------------------------------------------------
  1874. alias before_powerstock_original_initialize initialize
  1875. def initialize
  1876. before_powerstock_original_initialize
  1877. @powerstock = 0
  1878. @powerstock_skill_id = $data_system.elements.index(POWERSTOCK_SKILL_ELEMENT_NAME)
  1879. @powerstock_skill_id = 0 if @powerstock_skill_id == nil
  1880. @effect_message = nil
  1881. end
  1882. #--------------------------------------------------------------------------
  1883. # ● 通常攻撃の効果適用
  1884. # attacker : 攻撃者 (バトラー)
  1885. #--------------------------------------------------------------------------
  1886. alias before_powerstock_original_attack_effect attack_effect
  1887. def attack_effect(attacker)
  1888.   $se_skill_id = 1
  1889. # 攻撃者が「ちからため」しているか?
  1890. if attacker.powerstock > 0
  1891. bool_powerstock = true
  1892. # 攻撃者の力を一時的に上昇させる
  1893. stock_attacker_str = attacker.str
  1894. attacker.str += ( stock_attacker_str * POWERSTOCK_BASE_RATE * attacker.powerstock ).to_i
  1895. # ヘルプメッセージに「ちからためx?」を出す
  1896. @action_message = POWERSTOCK_SKILL_ELEMENT_NAME
  1897. @action_message += " x"
  1898. @action_message += attacker.powerstock.to_s
  1899. # ストックを消す
  1900. attacker.powerstock = 0
  1901. else
  1902. bool_powerstock = false
  1903. end
  1904. # fukuyamaさん↓のミス発見ありがとうございました
  1905. result = before_powerstock_original_attack_effect(attacker)
  1906. # 力を上昇させていた場合、元に戻す
  1907. if bool_powerstock
  1908. attacker.str = stock_attacker_str
  1909. end
  1910. return result
  1911. end
  1912. #--------------------------------------------------------------------------
  1913. # ● スキルの効果適用
  1914. # user : 使用者 (バトラー)
  1915. # skill: スキル
  1916. #--------------------------------------------------------------------------
  1917. alias before_powerstock_original_skill_effect skill_effect
  1918. def skill_effect(user, skill)
  1919. #「ちからため」スキルかどうかの判定。
  1920. $se_skill_id = skill.id
  1921. if skill.element_set.include?(@powerstock_skill_id)
  1922. # 命中率を適用する場合は下のif文のコメントを外してください
  1923. #if rand(100) < skill.hit
  1924. @powerstock += 1 # 「ちからため」回数を1増やす
  1925. # ダメージに"Charge"をセットする
  1926. self.damage = "Charge"
  1927. # 命中率を適用する場合は下のelse~endのコメントを外してください
  1928. #else
  1929. # self.damage = "Miss"
  1930. #end
  1931. # 普通のスキル判定は行わない。
  1932. return true
  1933. else
  1934. return before_powerstock_original_skill_effect(user, skill)
  1935. end
  1936. end
  1937. end
  1938. #=============================================================================
  1939. # ◇ 見切りステート by 和希
  1940. #=============================================================================
  1941. class Game_Battler
  1942. # 見切りステートの名前
  1943. ABANDONS_SKILL_STATE_NAME = "断念"
  1944. #--------------------------------------------------------------------------
  1945. # ● 通常攻撃の効果適用
  1946. #--------------------------------------------------------------------------
  1947. alias before_abandons_original_attack_effect attack_effect
  1948.  
  1949. def attack_effect(attacker)
  1950. # 見切りステートが存在するか?
  1951. if nil != (abandons_skill = get_abandons_id)
  1952. # 見切りステートにかかっているか?
  1953. if self.state?(abandons_skill)
  1954. ## 避ける!
  1955. # クリティカルフラグをクリア
  1956. self.critical = false
  1957. # ダメージに "Avoid!!" を設定
  1958. self.damage = "Avoid!!"
  1959. # 見切りステートを解除
  1960. self.remove_state(abandons_skill,true)
  1961. # メソッド終了
  1962. return false
  1963. end
  1964. end
  1965. # 見切りステート状態でなかった時は通常どおり
  1966. return before_abandons_original_attack_effect(attacker)
  1967. end
  1968. #--------------------------------------------------------------------------
  1969. # ● 見切りステータスのID取得
  1970. #--------------------------------------------------------------------------
  1971. def get_abandons_id
  1972. result = nil
  1973. if @abandons_status_id == nil
  1974. for i in 1 ... $data_states.size
  1975. if $data_states[i].name[/\A#{ABANDONS_SKILL_STATE_NAME}\Z/]
  1976. result = $data_states[i].id
  1977. break
  1978. end
  1979. end
  1980. @abandons_status_id = ( result != nil ? result : 0 )
  1981. elsif @abandons_status_id > 0
  1982. result = @abandons_status_id
  1983. end
  1984. return result
  1985. end
  1986. end
  1987. #=============================================================================
  1988. # ◇ かばう by シムナフ
  1989. #=============================================================================
  1990. #==============================================================================
  1991. # ■ Scene_Battle
  1992. #==============================================================================
  1993. class Scene_Battle
  1994. #追加
  1995. attr_reader :active_battler
  1996. #ここまで
  1997. ##新メソッド
  1998. def make_cover_skill_action_result
  1999. cover_num = 0
  2000. cover_bool = false
  2001. for i in @skill.element_set
  2002. if !($data_system.elements[i][/^#{ELEMENT_NAME_COVER}/].nil?)
  2003. cover_bool = true
  2004. elm_num = $data_system.elements[i][/([+-]*[0-9]+)/]
  2005. if !(elm_num.nil?)
  2006. cover_num += elm_num.to_i
  2007. end
  2008. end
  2009. end
  2010.  
  2011. if cover_bool.equal?(true)
  2012. ##自分のみが対象だった場合は味方からランダムに1人をかばう
  2013. if @target_battlers.include?(@active_battler)
  2014. if @target_battlers.size == 1
  2015. if @target_battlers[0].is_a?(Game_Actor)
  2016. friends = $game_party.actors.dup
  2017. friends.delete(@active_battler)
  2018. @target_battlers = [friends[rand(friends.size)]]
  2019. elsif @target_battlers[0].is_a?(Game_Enemy)
  2020. friends = $game_troop.enemies.dup
  2021. friends.delete(@active_battler)
  2022. @target_battlers = [friends[rand(friends.size)]]
  2023. end
  2024. else
  2025. @target_battlers.delete(@active_battler)
  2026. end
  2027. end
  2028.  
  2029. @active_battler.covered_friends = @target_battlers.dup
  2030. @active_battler.add_state(get_cover_state_id())##ステート付加時にデフォルト回数で発動回数が設定される
  2031. if (cover_num > 0)
  2032. @active_battler.cover_remain = cover_num#発動回数が有った場合はその回数で上書き
  2033. end
  2034. for target in @target_battlers
  2035. target.damage = COVER_EFFECT_CHAR + target.damage.to_s + "伤害" if target.cover_remain > 0
  2036. end
  2037. end
  2038. end
  2039. ##ここまで
  2040. end
  2041.  
  2042. class Game_Party
  2043. ##追加エイリアス
  2044. include Cover_Module
  2045. #--------------------------------------------------------------------------
  2046. # ● 対象アクターのスムーズな決定
  2047. # actor_index : アクターインデックス
  2048. #--------------------------------------------------------------------------
  2049.  
  2050. alias before_cover_original_smooth_target_actor smooth_target_actor
  2051.  
  2052. def smooth_target_actor(actor_index)
  2053. if $scene.is_a?(Scene_Battle)
  2054. battler = $scene.active_battler()
  2055. else
  2056. battler = nil
  2057. end
  2058.  
  2059. target = [before_cover_original_smooth_target_actor(actor_index)]
  2060. get_target_battlers_after_cover!(target, battler)
  2061.  
  2062. return target[0]
  2063. end
  2064. ##ここまで
  2065. end
  2066.  
  2067. class Game_Troop
  2068. ##追加エイリアス
  2069. include Cover_Module
  2070. #--------------------------------------------------------------------------
  2071. # ● 対象エネミーのスムーズな決定
  2072. # enemy_index : エネミーインデックス
  2073. #--------------------------------------------------------------------------
  2074.  
  2075. alias before_cover_original_smooth_target_enemy smooth_target_enemy
  2076.  
  2077. def smooth_target_enemy(enemy_index)
  2078. if $scene.is_a?(Scene_Battle)
  2079. battler = $scene.active_battler()
  2080. else
  2081. battler = nil
  2082. end
  2083.  
  2084. target = [before_cover_original_smooth_target_enemy(enemy_index)]
  2085. get_target_battlers_after_cover!(target, battler)
  2086.  
  2087. return target[0]
  2088. end
  2089. ##ここまで
  2090. end
  2091.  
  2092.  
  2093. #==============================================================================
  2094. # ◇ 付加属性名称判定モジュール
  2095. #==============================================================================
  2096. module Check_ElementName_Set
  2097. #--------------------------------------------------------------------------
  2098. # ● スキルが指定名の属性を持つか判定
  2099. #--------------------------------------------------------------------------
  2100. def skill_element_include?(skill, element_name)
  2101. @one = @two = nil
  2102. return false if skill == nil or !skill.is_a?(RPG::Skill)
  2103. for i in skill.element_set
  2104. if $data_system.elements[i] =~ /#{element_name}([+-]?[0-9]+)?(%)?/
  2105. @one = $1
  2106. @two = $2
  2107. return true
  2108. end
  2109. end
  2110. return false
  2111. end
  2112. #--------------------------------------------------------------------------
  2113. # ● アイテムが指定名の属性を持つか判定
  2114. #--------------------------------------------------------------------------
  2115. def item_element_include?(item, element_name)
  2116. @one = @two = nil
  2117. return false if item == nil or !item.is_a?(RPG::Item)
  2118. for i in item.element_set
  2119. if $data_system.elements[i] =~ /#{element_name}([+-]?[0-9]+)?(%)?/
  2120. @one = $1
  2121. @two = $2
  2122. return true
  2123. end
  2124. end
  2125. return false
  2126. end
  2127. #--------------------------------------------------------------------------
  2128. # ● 武器が指定名の属性を持つか判定
  2129. #--------------------------------------------------------------------------
  2130. def weapon_element_include?(weapon_id, element_name)
  2131. @one = @two = nil
  2132. return false if weapon_id == nil or weapon_id <= 0
  2133. for i in $data_weapons[weapon_id].element_set
  2134. if $data_system.elements[i] =~ /#{element_name}([+-]?[0-9]+)?(%)?/
  2135. @one = $1
  2136. @two = $2
  2137. return true
  2138. end
  2139. end
  2140. return false
  2141. end
  2142. #--------------------------------------------------------------------------
  2143. # ● 防具が指定名の属性を持つか判定
  2144. #--------------------------------------------------------------------------
  2145. def armor_element_include?(armor_id, element_name)
  2146. @one = @two = nil
  2147. return false if armor_id == nil or armor_id <= 0
  2148. for i in $data_armors[armor_id].guard_element_set
  2149. if $data_system.elements[i] =~ /#{element_name}([+-]?[0-9]+)?(%)?/
  2150. @one = $1
  2151. @two = $2
  2152. return true
  2153. end
  2154. end
  2155. return false
  2156. end
  2157. #--------------------------------------------------------------------------
  2158. # ● 防具が指定名の属性を持つ場合その後に付く接尾テキストを取得
  2159. #--------------------------------------------------------------------------
  2160. def armor_element_suftext(armor_id, element_name)
  2161. return nil if armor_id == nil or armor_id <= 0
  2162. for i in $data_armors[armor_id].guard_element_set
  2163. if $data_system.elements[i] =~ /#{element_name}(.*)/
  2164. return $1
  2165. end
  2166. end
  2167. return nil
  2168. end
  2169. #--------------------------------------------------------------------------
  2170. # ● アクターが指定名の属性を持つ武器を装備しているかか判定
  2171. #--------------------------------------------------------------------------
  2172. def equip_weapon_element_include?(actor, element_name)
  2173. @one = @two = nil
  2174. return false if !actor.is_a?(Game_Actor)
  2175. return false if actor.weapon_id == nil or actor.weapon_id <= 0
  2176. bool = false
  2177. one_total = 0
  2178. for i in $data_weapons[actor.weapon_id].element_set
  2179. if $data_system.elements[i] =~ /#{element_name}([+-]?[0-9]+)?(%)?/
  2180. one_total += $1.to_i
  2181. @two = $2
  2182. bool = true
  2183. end
  2184. end
  2185. # 武器管理システムXC.が導入されている場合
  2186. if $xrxs24_weapon_property_system_work
  2187. for i in [PROPERTY_ELEMENT_GRANT_1st, PROPERTY_ELEMENT_GRANT_2nd,
  2188. PROPERTY_ELEMENT_GRANT_3rd, PROPERTY_ELEMENT_GRANT_4th]
  2189. if $data_system.elements[actor.weapon_property[i]] =~ /#{element_name}([+-]?[0-9]+)?(%)?/
  2190. one_total += $1.to_i
  2191. @two = $2
  2192. bool = true
  2193. end
  2194. end
  2195. end
  2196. @one = one_total
  2197. return bool
  2198. end
  2199. #--------------------------------------------------------------------------
  2200. # ● アクターが指定名の属性を持つ武器/防具を装備中か判定 数値の合計も保持
  2201. #--------------------------------------------------------------------------
  2202. def actor_element_equip?(actor, element_name)
  2203. one_total = 0
  2204. bool = false
  2205. return false if !actor.is_a?(Game_Actor)
  2206. weapon = $data_weapons[actor.weapon_id]
  2207. armor1 = $data_armors[actor.armor1_id]
  2208. armor2 = $data_armors[actor.armor2_id]
  2209. armor3 = $data_armors[actor.armor3_id]
  2210. armor4 = $data_armors[actor.armor4_id]
  2211. if equip_weapon_element_include?(actor, element_name)
  2212. one_total += @one.to_i
  2213. bool = true
  2214. end
  2215. if armor_element_include?(armor1.id, element_name)
  2216. one_total += @one.to_i
  2217. bool = true
  2218. end
  2219. if armor_element_include?(armor2.id, element_name)
  2220. one_total += @one.to_i
  2221. bool = true
  2222. end
  2223. if armor_element_include?(armor3.id, element_name)
  2224. one_total += @one.to_i
  2225. bool = true
  2226. end
  2227. if armor_element_include?(armor4.id, element_name)
  2228. one_total += @one.to_i
  2229. bool = true
  2230. end
  2231. @one = one_total
  2232. return bool
  2233. end
  2234. end
  2235. #=============================================================================
  2236. # ◇ かばうModule
  2237. #=============================================================================
  2238. ####以下新規追加Module
  2239. module Cover_Module
  2240. #--------------------------------------------------------------------------
  2241. # ● かばう 後のターゲット配列生成
  2242. #--------------------------------------------------------------------------
  2243. def get_target_battlers_after_cover!(target_battlers, active_battler = nil)
  2244. #HP割合の低い順にソート
  2245. #target_battlers.sort_by!{|b| (b.hp.to_f/b.maxhp.to_f)}
  2246. target_battlers.sort!{|a,b| (a.hp.to_f/a.maxhp.to_f) <=> (b.hp.to_f/b.maxhp.to_f)}
  2247. #HP割合の多い順にソート
  2248. actors = $game_party.actors.sort_by{|b| (b.hp.to_f/b.maxhp.to_f)}.reverse
  2249. enemies = $game_troop.enemies.sort_by{|b| (b.hp.to_f/b.maxhp.to_f)}.reverse
  2250.  
  2251. for i in 0...target_battlers.size
  2252. if target_battlers[i].is_a?(Game_Actor)
  2253. for actor in actors
  2254. new_target = get_target_after_cover(active_battler,target_battlers[i],actor)
  2255. if !new_target.equal?(target_battlers[i]) && new_target.current_friend.nil? #かばう人がすでにかばっていた場合かばえない
  2256. new_target.effect_message = "#{new_target.name}は#{target_battlers[i].name}をかばった!"
  2257. new_target.current_friend = target_battlers[i]
  2258. new_target.current_friend.damage = COVER_EFFECT_CHAR
  2259. target_battlers[i] = new_target
  2260. break
  2261. end
  2262. end
  2263. end
  2264.  
  2265. if target_battlers[i].is_a?(Game_Enemy)
  2266. for enemy in enemies
  2267. new_target = get_target_after_cover(active_battler,target_battlers[i],enemy)
  2268. if !new_target.equal?(target_battlers[i]) && new_target.current_friend.nil? #かばう人がすでにかばっていた場合かばえない
  2269. new_target.effect_message = "#{new_target.name}は#{target_battlers[i].name}をかばった!"
  2270. new_target.current_friend = target_battlers[i]
  2271. new_target.current_friend.damage = COVER_EFFECT_CHAR
  2272. target_battlers[i] = new_target
  2273. break
  2274. end
  2275. end
  2276. end
  2277. end
  2278. #ターゲット重複を排除する(かばった人が2度ダメージを受けない)
  2279. target_battlers.uniq!()
  2280. #「かばう」ステートの解除判定
  2281. for target in target_battlers
  2282. if !target.current_friend.nil?
  2283. #かばう 残り回数がなくなった場合
  2284. target.cover_remain -= 1
  2285. if target.cover_remain <= 0
  2286. target.remove_state(get_cover_state_id())
  2287. target.cover_remain = 0
  2288. end
  2289. end
  2290. end
  2291. end
  2292. #--------------------------------------------------------------------------
  2293. # ● かばう の発動判定
  2294. #--------------------------------------------------------------------------
  2295. def get_target_after_cover(battler, target, coverer)
  2296. #味方からのターゲットは庇わない
  2297. if battler.is_a?(Game_Actor)
  2298. if target.is_a?(Game_Actor)
  2299. return target
  2300. end
  2301. end
  2302. if battler.is_a?(Game_Enemy)
  2303. if target.is_a?(Game_Enemy)
  2304. return target
  2305. end
  2306. end
  2307. #庇う人が動けない時は庇わない
  2308. if !(coverer.movable? && coverer.exist?)
  2309. return target
  2310. end
  2311. #庇う人が かばう のステートになっている時のみ
  2312. if !coverer.state?(get_cover_state_id())
  2313. return target
  2314. end
  2315. #ターゲットが既に他の人を庇っている時は無効
  2316. if target.state?(get_cover_state_id())
  2317. return target
  2318. end
  2319. #ターゲットと庇う人が同じの場合は無効
  2320. if target.equal?(coverer)
  2321. return target
  2322. end
  2323. #発動確率判定
  2324. if !(rand(100) <= COVER_EFFECT_PERCENT)
  2325. return taget
  2326. end
  2327. #ターゲットのHP割合判定
  2328. if !(100.0*target.hp.to_f/target.maxhp.to_f <= COVER_HP_PERCENT)
  2329.   p 200
  2330. return target
  2331. end
  2332. #「かばっている味方配列」が空だったら、全ての味方を庇う
  2333. if coverer.covered_friends.size.zero?
  2334. return coverer
  2335. else
  2336. for covered_friend in coverer.covered_friends
  2337. if target.equal?(covered_friend)
  2338. return coverer
  2339. end
  2340. end
  2341. end
  2342. return target
  2343. end
  2344. #--------------------------------------------------------------------------
  2345. # ● かばう のStateID
  2346. #--------------------------------------------------------------------------
  2347. def get_cover_state_id
  2348. result = nil
  2349. if @cover_status_id == nil
  2350. for i in 1 ... $data_states.size
  2351. if $data_states[i].name[/\A#{STATE_NAME_COVER}\Z/]
  2352. result = $data_states[i].id
  2353. break
  2354. end
  2355. end
  2356. @cover_status_id = ( result != nil ? result : 0 )
  2357. elsif @cover_status_id > 0
  2358. result = @cover_status_id
  2359. end
  2360. return result
  2361. end
  2362. end
  2363. ####Module End
  2364. #//////////////////////////////////////////////////////////////////////////////
  2365. # ◇ インクルード
  2366. #//////////////////////////////////////////////////////////////////////////////
  2367. module Check_ElementName_Set
  2368. include Fixed_PropertyNumber if $xrxs24_weapon_property_system_work
  2369. end
  2370. class Game_Battler
  2371. include Check_ElementName_Set
  2372. include Cover_Module
  2373. end
  2374. class Window_Item < Window_Selectable
  2375. include Check_ElementName_Set
  2376. end
  2377. class Scene_Battle
  2378. include Check_ElementName_Set
  2379. include Cover_Module
  2380. end
  2381. #==============================================================================
  2382. # ◇ RPG::再定義「"SP "を含む場合SPダメージとして色を変更」
  2383. #==============================================================================
  2384. module RPG
  2385. class Sprite < ::Sprite
  2386. alias xrxs19_damage damage
  2387. def damage(value, critical)
  2388. if value.is_a?(String) and value.include?($data_system.words.sp)
  2389. # 解放
  2390. dispose_damage
  2391. # 数値部分を抜き取る
  2392. value = value.scan(/[+-]?[0-9]+/)[0].to_i
  2393. # 表示文字列の設定
  2394. damage_string = $data_system.words.sp + " " + value.abs.to_s
  2395. # 描写
  2396. bitmap = Bitmap.new(160, 48)
  2397. bitmap.font.name = "黑体"
  2398. bitmap.font.size = 32
  2399. bitmap.font.color.set(0, 0, 0)
  2400. bitmap.draw_text(-1, 12-1, 160, 36, damage_string, 1)
  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. if value < 0
  2405. bitmap.font.color.set(128, 255, 255)
  2406. else
  2407. bitmap.font.color.set(255, 176, 144)
  2408. end
  2409. bitmap.draw_text(0, 12, 160, 36, damage_string, 1)
  2410. if critical
  2411. bitmap.font.size = 20
  2412. bitmap.font.color.set(0, 0, 0)
  2413. bitmap.draw_text(-1, -1, 160, 20, "CRITICAL", 1)
  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.font.color.set(255, 255, 255)
  2418. bitmap.draw_text(0, 0, 160, 20, "CRITICAL", 1)
  2419. end
  2420. @_damage_sprite = ::Sprite.new(self.viewport)
  2421. @_damage_sprite.bitmap = bitmap
  2422. @_damage_sprite.ox = 80
  2423. @_damage_sprite.oy = 20
  2424. @_damage_sprite.x = self.x
  2425. @_damage_sprite.y = self.y - self.oy / 2
  2426. @_damage_sprite.z = 3000
  2427. @_damage_duration = 40
  2428. else
  2429. # 通常時?戻す
  2430. xrxs19_damage(value, critical)
  2431. end
  2432. end
  2433. end
  2434. end
  2435.  
  2436. #==============================================================================
  2437. # 本脚本来自[url=http://www.66RPG.com]www.66RPG.com[/url],使用和转载请保留此信息
  2438. #==============================================================================





用法是给角色加上名叫援助的状态后..当敌人用帶有名字叫援助的属性的特技攻击时候就会只打有援助状态的角色..次数用完就会失效..再次挂上状态又有次数了..

点评

是..你可以改成其他..  发表于 2017-11-7 08:33
援护防御 这个名字是显示用的吧?  发表于 2017-11-7 08:27
谢谢,明天我试试,如果能用以前想过没法实现的技能又多了一个XD  发表于 2017-11-6 20:54
COVER_DEFAULT_NUMBER = 3  发表于 2017-11-6 20:37
哎?那就都加上就可以了?话说这个援助次数是在哪里呢?  发表于 2017-11-6 20:08
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
35186
在线时间
4169 小时
注册时间
2007-12-15
帖子
10067
4
发表于 2017-11-7 09:01:16 | 只看该作者
soulsaga 发表于 2017-11-6 17:15
怎么转移攻击?

我成功研究出战斗特效脚本援助的使用法了..顺便改善一下显示的文字..

敌人技能和我方技能都加上援助属性了,然后报错



点评

不过你这情況我没遇到过..  发表于 2017-11-7 10:19
看来这脚本还是不太好使..有空再研究下..  发表于 2017-11-7 10:19
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-27 12:57

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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