Project1

标题: 半袖空手待机朝向转换 [打印本页]

作者: 89444640    时间: 2017-11-12 10:31
标题: 半袖空手待机朝向转换
本帖最后由 89444640 于 2017-11-17 11:32 编辑

与下列帖子相关
https://rpg.blue/thread-398871-1-1.html
https://rpg.blue/thread-403871-1-1.html
由于起手方向问题,如果画格斗游戏2P位置的左脚起招式难度太高,我右利手,招式无法大概的比画出来。
于是增加了个2p位置的左手前朝向,两个待机同时使用,无论最后招式回到哪个方向都可以,这样就可以任意优势手方向出招了。头发的角度化成这样,是为了把后背姿势让出来。否则这遮天蔽日的头发……什么都看不到了。
运行中截图如下,录制的饰品,因此速度不太正常。

修正了一下,增加了转身小跳跃Y数值的变化,由于录制关系依然速度不太正常


第二次修正 增加了一帧说明性质的姿势,说明头发为什么这个朝向,用手捋过去的,修了一下背面的裙子的厚度感,眼睛减小了一个像素的高度,修正鬓角过渡帧的不合理处。


第三次修正
按照建议,修正了左手前待机的头发遮挡,确实感觉自然多了。为了说明头发和裙子幅度为什么这么大,增加了小跳跃,(其实我真心不想加)可能落地的时候还是优点小小的不自然,应该腿部落地略有弯曲,我再去弄弄


第四次修正 腿部落地时的肌肉收缩,跳起时的脚尖位置



正在绘制这个朝向的出脚高位侧踢动作,因为有侧面透视,感很难好画,目前20帧,依然收招有问题,各位想看的话得再等几天了。










作者: 御曹司    时间: 2017-11-12 12:22
这个裙子……是透明的?!
作者: soulsaga    时间: 2017-11-12 12:55
我还是想吐槽..那个留海真的反人类..
作者: WantMy蕙    时间: 2017-11-12 13:34
这裙子怎么感觉一会塑身一会飘呢(~ ̄▽ ̄)~
作者: 越前リョーマ    时间: 2017-11-12 15:47
我觉得裙子和头发的抖动太大了,因为人的动作幅度并不大
作者: soulsaga    时间: 2017-11-12 15:55
这个就不怎么动了..

mikoF.gif (13.76 KB, 下载次数: 23)

mikoF.gif

作者: shencao    时间: 2017-11-12 16:32
本帖最后由 shencao 于 2017-11-12 16:43 编辑

背面头发还是遮住身体会好一些吧?
否则只要是没看过你这个帖子的人,大多会感觉是作画失误(图层错误)而不是故意画成这样的。何必呢?
而且头发遮挡本身就是省力的方法呀~不用白不用~
啊还有,腿部你正面做了动作,背面也做上不是更好?
身体轮廓照描就行不用重新画,然后填色换成背面的画法就行了~

作者: 塞路休斯    时间: 2017-11-12 17:37
衣服好透啊。。。。
作者: 赤炎    时间: 2017-11-12 18:32
觉得衣服透明+1

上衣跟着风向向前摇摆的时候,可以看到腹肌和肚脐有些...嗯...奇怪,胸不吐槽(二次元不违和)
裙子的透明度也很有问题...

眼睛在两种不同的方向呈现出不同的大小...(可能是眼瞳问题)
作者: 芯☆淡茹水    时间: 2017-11-12 19:26
虽然不会画,但会欣赏。
觉得背向时,头的转动幅度过大,看起来下巴已经越过肩膀了,不太自然。
作者: soulsaga    时间: 2017-11-13 10:24
本帖最后由 soulsaga 于 2017-11-14 12:59 编辑

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



作者: soulsaga    时间: 2017-11-13 11:06
soulsaga 发表于 2017-11-13 10:24
#==============================================================================
# 本脚本来自www.66RP ...



作者: 89444640    时间: 2017-11-13 13:30
本帖最后由 89444640 于 2017-11-13 16:25 编辑

怎么设置使用方技能?总跳错误

因为不能确定技能能不能用,就先凑合演示一下。
图标下面的那个就是,使用对象是使用者,然后所有人都有这个效果了,而且不确定是否能替队友承受攻击,因为有普通攻击,而且击中时候我这也不播放动画编号64






作者: soulsaga    时间: 2017-11-13 14:04
89444640 发表于 2017-11-13 13:30
怎么设置使用方技能?总跳错误

使用方技能“援助”状态要附加..
作者: v2sam    时间: 2017-11-14 10:32
透明裙子不错2333
作者: jujuba02    时间: 2017-11-14 10:55
同意7楼,头发放后面比较好吧。



作者: soulsaga    时间: 2017-11-14 11:20
大神呢...
作者: soulsaga    时间: 2017-11-16 18:23
其他都测试过了..还有个问题..在1人战斗时放技能连动画都没了..233
作者: 89444640    时间: 2017-11-17 10:24
jujuba02 发表于 2017-11-14 10:55
同意7楼,头发放后面比较好吧。

楼顶按照您提醒的修正了一下遮挡,果然给自己看的和给玩家看的不能一样--b,这样确实感觉自然多了。
非常感谢。




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