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

Project1

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

[已经过期] 战斗时表情如何根据状态变更?

[复制链接]

Lv1.梦旅人

梦石
0
星屑
105
在线时间
9 小时
注册时间
2020-3-2
帖子
7
跳转到指定楼层
1
发表于 2020-3-3 00:35:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
原帖https://rpg.blue/thread-404742-1-1.html
工程也是从那里借的。工程如下
有3个问题:
1.【主要】经测试其他表情都可以正常按条件变更,但受到伤害(6号)和回复(5号)时表情不会变化?
2.【主要】可不可以在角色进入异常状态(中毒,黑暗之类)时也变化至3号(hp≤25%)表情?
3.【次要】经测试在防御时2号角色表情变化正常持续一回合,但1号角色只持续了90帧?
如果可以的话能麻烦直接修改脚本吗...因为不懂脚本,头铁对着原工程看了一个小时也没看出哪有问题...

Project2·改.rar

1.59 MB, 下载次数: 59

Lv1.梦旅人

梦石
0
星屑
105
在线时间
9 小时
注册时间
2020-3-2
帖子
7
2
 楼主| 发表于 2020-3-3 07:37:56 | 只看该作者
以下是出问题的代码,能直接告诉我代码怎么改也可以,十分感谢
  1. =begin
  2. 说明
  3. $vic 战斗胜利时自动开启
  4. $ating 攻击/技能时自动开启
  5. $tffing 回复时自动开启
  6. $hpd 受伤时自动开启
  7. $ging 防御时自动开启

  8. 为了方便修改,在关键地方标有注释

  9. 下面是关于问题的修复状态
  10. 1.请参考我修改过的数据库中对物品的设置
  11. 2.经过初步测试修复完毕
  12. 3.经过初步测试修复完毕
  13. 4.好像没注意到嘛...(还是我对这个问题的理解有问题0w0)
  14. 5.因为可无视所以无视了....当然需要的话可以修复一下啦
  15. 其余的问题:
  16. 战斗胜利后表情显示 √
  17. 结束消息移动到上方 √
  18. =end
  19. module BattleManager
  20.   def self.process_victory#战斗胜利时的处理
  21.     $vic = true
  22.     $ating = false
  23.     $tffing = false
  24.     $hpd = false
  25.     $gu = false
  26.     $ging = false
  27.     play_battle_end_me
  28.     replay_bgm_and_bgs
  29.     $game_message.position = 1#显示胜利信息的窗口的位置(0 上方,1 中间,2 下方)
  30.     $game_message.add(sprintf(Vocab::Victory, $game_party.name))
  31.     display_exp
  32.     gain_gold
  33.     gain_drop_items
  34.     gain_exp
  35.     SceneManager.return
  36.     battle_end(0)
  37.     return true
  38.   end
  39.   def self.process_escape#逃跑时的处理
  40.     $ating = false
  41.     $tffing = false
  42.     $hpd = false
  43.     $gu = false
  44.     $ging = false
  45.     $game_message.add(sprintf(Vocab::EscapeStart, $game_party.name))
  46.     success = @preemptive ? true : (rand < @escape_ratio)
  47.     Sound.play_escape
  48.     if success
  49.       process_abort
  50.     else
  51.       @escape_ratio += 0.1
  52.       $game_message.add('\.' + Vocab::EscapeFailure)
  53.       $game_party.clear_actions
  54.     end
  55.     wait_for_message
  56.     return success
  57.   end
  58.   def self.process_abort#战斗中止时的处理
  59.     $ating = false
  60.     $tffing = false
  61.     $hpd = false
  62.     $gu = false
  63.     $ging = false
  64.     replay_bgm_and_bgs
  65.     SceneManager.return
  66.     battle_end(1)
  67.     return true
  68.   end
  69. end
  70. class Scene_Battle
  71.   def start
  72.     super
  73.     $tffing = false
  74.     $vic = false
  75.     create_spriteset
  76.     create_all_windows
  77.     BattleManager.method_wait_for_message = method(:wait_for_message)
  78.   end
  79.   def use_item
  80.     item = @subject.current_action.item
  81.     @log_window.display_use_item(@subject, item)
  82.     @subject.use_item(item)
  83.     refresh_status
  84.     targets = @subject.current_action.make_targets.compact
  85.     show_animation(targets, item.animation_id)
  86.     targets.each {|target| item.repeats.times { invoke_item(target, item)
  87.     $tffing = false
  88.     $hpd = false
  89.     refresh_status
  90.     } }
  91.    
  92.   end
  93.   def command_guard
  94.     $gu = true
  95.     BattleManager.actor.input.set_guard
  96.     next_command
  97.   end
  98.   def show_animation(targets, animation_id)
  99.     #这一部分的思路是:(觉得不对可以修改,可能考虑的不周全)
  100.    
  101.     if @subject.is_a?(Game_Actor) #如果施法者是我方
  102.       if @subject.current_action.targets_for_friends #如果目标是队友
  103.         if $gu #如果施法者选择的是防御
  104.         targets.each do |target|
  105.           $ging = true #正在防御中
  106.           $gid = target.id
  107.         end
  108.         else#如果不是的话(就是说不在防御中,那就是说在攻击或技能或物品)
  109.         $ating = true
  110.         $atid = @subject.id
  111.         end
  112.       else
  113.         $ating = true
  114.         $atid = @subject.id
  115.         
  116.       end
  117.     end
  118.     refresh_status
  119.     if animation_id < 0
  120.       show_attack_animation(targets)
  121.     else
  122.       show_normal_animation(targets, animation_id)
  123.     end
  124.    
  125.     @log_window.wait
  126.     wait_for_animation
  127.     $ating = false
  128.     $tffing = false
  129.     $hpd = false
  130.     refresh_status
  131.   end
  132.   def update
  133.     super
  134.     if BattleManager.in_turn?
  135.       process_event
  136.       process_action
  137.     end
  138.     BattleManager.judge_win_loss
  139.   end
  140.   def turn_end
  141.     #由于防御是一整个回合都在执行,所以在回合结束才关闭
  142.     $gu = false
  143.     $ging = false
  144.    
  145.     all_battle_members.each do |battler|
  146.       battler.on_turn_end
  147.       refresh_status
  148.       @log_window.display_auto_affected_status(battler)
  149.       @log_window.wait_and_clear
  150.     end
  151.     BattleManager.turn_end
  152.     process_event
  153.     start_party_command_selection
  154.   end
  155. end
  156.   
  157. class Window_BattleStatus
  158.   def draw_basic_area(rect, actor)
  159.     draw_actor_name(actor, rect.x + 96, rect.y, 100)
  160.     draw_actor_face(actor, rect.x, rect.y, !actor.dead?)
  161.     draw_actor_icons(actor, rect.x, rect.y, rect.width+8)
  162.   end
  163.   def draw_actor_face(actor, x, y, enabled = true)
  164.     #重点部分
  165.     #上面的优先于下面的条件
  166.     if if $vic && actor.hp != 0 #胜利时
  167.       draw_face(actor.face_name, actor.face_index+7, x, y, enabled)
  168.     elsif $ating && actor.id == $atid #除了正在防御外,行动者的头像更改
  169.       draw_face(actor.face_name, actor.face_index+1, x, y, enabled)
  170.     elsif $tffing && actor.id == $tffid #如果受到回复,被回复者的头像更改
  171.       draw_face(actor.face_name, actor.face_index+4, x, y, enabled)
  172.     elsif $hpd && actor.id == $hpdid # 如果受到伤害,受到伤害者头像更变
  173.       draw_face(actor.face_name, actor.face_index+5, x, y, enabled)
  174.     elsif $ging && actor.id == $gid #正在防御者的头像更改
  175.       draw_face(actor.face_name, actor.face_index+6, x, y, enabled)
  176.     else
  177.     if (actor.hp.to_f/actor.mhp) >= 0.25 #血量比>=0.25
  178.       draw_face(actor.face_name, actor.face_index, x, y, enabled)
  179.     elsif (actor.hp.to_f/actor.mhp) < 0.25 && actor.hp != 0 #血量比<0.25并且没死
  180.       draw_face(actor.face_name, actor.face_index+2, x, y, enabled)
  181.     elsif actor.hp == 0#死了
  182.       draw_face(actor.face_name, actor.face_index+3, x, y, enabled)
  183.     end
  184.     end
  185.   end
  186. end
  187. class Game_Battler
  188.   def execute_damage(user)
  189.     on_damage(@result.hp_damage) if @result.hp_damage > 0
  190.     self.hp -= @result.hp_damage
  191.     self.mp -= @result.mp_damage
  192.     user.hp += @result.hp_drain
  193.     user.mp += @result.mp_drain
  194.     if @result.hp_damage > 0
  195.       if self.is_a?(Game_Actor)
  196.         $hpd = true
  197.         $hpdid = self.id
  198.       end
  199.     end
  200.     if @result.hp_damage < 0 or @result.mp_damage < 0
  201.       if self.is_a?(Game_Actor)
  202.         $tffing = true
  203.         $tffid = self.id
  204.       end
  205.     end
  206.   end
  207. end
  208. end
复制代码
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-16 13:29

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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