Project1

标题: 求怎样在战斗画面的文字区中显示属性的修正效果? [打印本页]

作者: cqr19950307    时间: 2010-7-5 09:49
标题: 求怎样在战斗画面的文字区中显示属性的修正效果?
我设想的是攻击时先出现“会心一击”字样,再出现属性效果,然后再是伤害。
比如甲打乙,如果属性修正是400,显示字样"对乙效果极端出众!"
200= "对乙效果很明显!"
100= "对乙正常效果。"
50= "对乙效果很小……"
25或以下= "对乙效果极端不利……"
0= "对乙无效的属性!"
(PS:我这里的属性规定是A400 B200 C100 D50 E25 F0)
求解!
作者: wangswz    时间: 2010-7-5 11:49
本帖最后由 wangswz 于 2010-7-5 12:02 编辑

Scene_Battle display_hp_damage中无法调用
$game_battler.elements_max_rate(obj.element_set)嘛?
求高人解答[line]1[/line]下面直接复制了函数 不会调用game里的
作者: wangswz    时间: 2010-7-5 12:01
本帖最后由 wangswz 于 2010-7-5 13:23 编辑

求高人出现。。
完全不懂game_Battle里关于属性修正的那段
究竟是如何让角色和敌人的属性有效度和技能联系起来的啊?
[line]1[/line]
有大错 正在返工
[line]1[/line]
大概是这样的
Scene_Battle
1045
  1.   #--------------------------------------------------------------------------
  2.   # ● 显示体力伤害
  3.   #     target : 目标
  4.   #     obj    : 技能或物品
  5.   #--------------------------------------------------------------------------
  6.   def display_hp_damage(target, obj = nil)
  7.     if target.hp_damage == 0                # 无伤害
  8.       return if obj != nil and obj.damage_to_mp
  9.       return if obj != nil and obj.base_damage == 0
  10.       fmt = target.actor? ? Vocab::ActorNoDamage : Vocab::EnemyNoDamage
  11.       text = sprintf(fmt, target.name)
  12.     elsif target.absorbed                   # 吸收
  13.       fmt = target.actor? ? Vocab::ActorDrain : Vocab::EnemyDrain
  14.       text = sprintf(fmt, target.name, Vocab::hp, target.hp_damage)
  15.     elsif target.hp_damage > 0              # 伤害
  16.       if target.actor?
  17.         text = sprintf(Vocab::ActorDamage, target.name, target.hp_damage)
  18.         Sound.play_actor_damage
  19.         $game_troop.screen.start_shake(5, 5, 10)
  20.       else
  21.         text = sprintf(Vocab::EnemyDamage, target.name, target.hp_damage)
  22.         Sound.play_enemy_damage
  23.         target.blink = true
  24.       end
  25.       if obj != nil
  26.         case elements_max_rate(obj.element_set)
  27.         when 100..200
  28.           text2 = sprintf(Vocab::ShuXingA)
  29.           @message_window.add_instant_text(text2)
  30.           wait(10)
  31.         end
  32.       end
  33.     else                                    # 回复
  34.       fmt = target.actor? ? Vocab::ActorRecovery : Vocab::EnemyRecovery
  35.       text = sprintf(fmt, target.name, Vocab::hp, -target.hp_damage)
  36.       Sound.play_recovery
  37.     end
  38.     @message_window.add_instant_text(text)
  39.     wait(30)
  40.   end
  41.   #--------------------------------------------------------------------------
  42.   # ● 获取最大属性调整量
  43.   #     element_set : 属性列表
  44.   #    返回效果最大的属性
  45.   #--------------------------------------------------------------------------
  46.   def elements_max_rate(element_set)
  47.     return 100 if element_set.empty?                # 判断是否有属性列表
  48.     rate_list = []
  49.     for i in element_set
  50.       rate_list.push(element_rate(i))
  51.     end
  52.     return rate_list.max
  53.   end
  54.   #--------------------------------------------------------------------------
  55.   # ● 获取属性修正值
  56.   #     element_id : 属性ID
  57.   #--------------------------------------------------------------------------
  58.   def element_rate(element_id)
  59.     return 100
  60.   end
复制代码
注意
       when 100..200
          text2 = sprintf(Vocab::ShuXingA)
          @message_window.add_instant_text(text2)
          wait(10)
如果效果在100%~200%之间。。返回shuxingA字符串
然后
Vocab
里 插入
  1.   # 属性有效度显示
  2.   ShuXingA        = "效果拔群!"
复制代码
我新建工程 无误 如果有错。。。。。
也许有修改了但漏贴的地方 sorry
作者: cqr19950307    时间: 2010-7-5 15:47
谢谢了,已经解决了。
但是我还有疑问……
我重新定义一个新 def ,但是文字无法显示,为什么2个def并到体力伤害里就可以?
……
你的那个代码显示的都是100的效果,所以我又用全局变量代换了。
作者: cqr19950307    时间: 2010-7-5 15:49
我直接省去了对象,sprintf是打出新定义的对象吧。
还有怎样配上不同响度和音调的声音?
作者: wangswz    时间: 2010-7-5 16:26
上个脚本吧。。。让我看看你的解决办法。。。拜托了。。
那个def的问题 。。没看懂
作者: wangswz    时间: 2010-7-6 08:12
没人理我  自顶。。 变成我的求助贴了
作者: 小幽的马甲    时间: 2010-7-6 09:41
Scene_Battle display_hp_damage中无法调用
$game_battler.elements_max_rate(obj.element_set)嘛?
求高人 ...
wangswz 发表于 2010-7-5 11:49


根本没有$game_battler这玩意儿吧……
Game_Battler是Game_Actor与Game_Enemy的超级类,所以要用也只有$game_actors和$game_troop.members。这里直接用那个target参数就好
case target.elements_max_rate(obj.element_set)
作者: cqr19950307    时间: 2010-7-6 17:48
脚本大致如下:
def elementeffect(target, obj = nil)
  if target.elements_max_rate(obj.element_set) == 400
    text = "------"
   

后面的省略,无语法错误。

  

end
  @message_window.add_instant_text(text)
end



  
作者: cqr19950307    时间: 2010-7-6 17:49
#--------------------------------------------------------------------------
  # ● 显示行动结果
  #     target : 目标
  #     obj    : 技能或物品
  #--------------------------------------------------------------------------
  def display_action_effects(target, obj = nil)
    unless target.skipped
      line_number = @message_window.line_number
      wait(5)
      display_critical(target, obj)

#添加部分:
      elementeffect(target, obj)

      display_damage(target, obj)
      display_state_changes(target, obj)
      if line_number == @message_window.line_number
        display_failure(target, obj) unless target.states_active?
      end
      if line_number != @message_window.line_number
        wait(30)
      end
      @message_window.back_to(line_number)
    end
  end
作者: cqr19950307    时间: 2010-7-6 17:50
然后在战斗画面中我加的那部分被无视了。




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