Project1

标题: 怎么样可以使恢复HPSP同时显示 [打印本页]

作者: yang1zhi    时间: 2014-5-22 21:57
标题: 怎么样可以使恢复HPSP同时显示
现在恢复的时候都只显示一个数值,我想要两个数值都显示出来。吃了药也只显示一个数值出来。
还有我用了状态自动会HPSP的脚本,同时有这两个状态的时候怎么都显示出来呢。
RUBY 代码复制
  1. if @active_battler.state?(24) and @active_battler.hp >0  #-恢复魔法
  2.       @active_battler.animation_id = 15                # 显示17号动画
  3.       @active_battler.damage = [email]-@active_battler.maxhp[/email]/10# 兌換傷害
  4.       @active_battler.hp += [email]-@active_battler.damage[/email]    # 恢复1/5的最大生命
  5.       @active_battler.damage_pop = true                # 将伤害显示在屏幕上
  6.     end
  7. #--------------------------------------
  8. if @active_battler.state?(29) and @active_battler.hp >0  #-恢复魔法
  9.       @active_battler.animation_id = 18                # 显示17号动画
  10.       @active_battler.damage = [email]-@active_battler.maxsp[/email]/10# 兌換傷害
  11.       @active_battler.sp += [email]-@active_battler.damage[/email]    # 恢复1/5的最大生命
  12.       @active_battler.damage_pop = true                # 将伤害显示在屏幕上
  13.     end

作者: 芯☆淡茹水    时间: 2014-5-23 07:44
默认系统只有一个 HP 伤害的数值显示。想要同时显示的话,需要再增添一个数值显示,专门显示 SP 。
作者: yang1zhi    时间: 2014-5-23 19:11
芯☆淡茹水 发表于 2014-5-23 07:44
默认系统只有一个 HP 伤害的数值显示。想要同时显示的话,需要再增添一个数值显示,专门显示 SP 。 ...

我看有的人做的游戏里面吃个药后是会同时显示加的HP和SP的,是不是有脚本,可我找不到啊。
作者: 邪月长啸    时间: 2014-5-24 19:02
@芯☆淡茹水 大大的芯式战斗系统就有这个效果,可以的话,点芯大的ID找下就有了
作者: 芯☆淡茹水    时间: 2014-5-24 20:12
邪月长啸 发表于 2014-5-24 19:02
@芯☆淡茹水 大大的芯式战斗系统就有这个效果,可以的话,点芯大的ID找下就有了  ...

话说您也太热心了嘛~!没有必要 @ 我啊!
可能我年纪大了,都记不得自己写过什么了,还是您有心,都还记得。

下面这个,未测试:
  1. #==============================================================================
  2. module RPG
  3.   class Sprite < ::Sprite
  4.     alias add_initialize_xdrs initialize
  5.     def initialize(viewport = nil)
  6.       add_initialize_xdrs(viewport)
  7.       @_sp_damage_duration = 0
  8.     end
  9.     alias add_dispose_xdrs dispose
  10.     def dispose
  11.       dispose_sp_damage
  12.       add_dispose_xdrs
  13.     end
  14.     def sp_damage(value)
  15.       dispose_damage
  16.       damage_string = value.abs.to_s
  17.       bitmap = Bitmap.new(160, 48)
  18.       bitmap.font.name = "Arial Black"
  19.       bitmap.font.size = 32
  20.       bitmap.font.color.set(0, 0, 0)
  21.       bitmap.draw_text(-1, 12-1, 160, 36, damage_string, 1)
  22.       bitmap.draw_text(+1, 12-1, 160, 36, damage_string, 1)
  23.       bitmap.draw_text(-1, 12+1, 160, 36, damage_string, 1)
  24.       bitmap.draw_text(+1, 12+1, 160, 36, damage_string, 1)
  25.       if value.is_a?(Numeric) and value < 0
  26.         bitmap.font.color.set(0, 0, 255)
  27.       else
  28.         bitmap.font.color.set(0, 255, 255)
  29.       end
  30.       bitmap.draw_text(0, 12, 160, 36, damage_string, 1)
  31.       @_sp_damage_sprite = ::Sprite.new(self.viewport)
  32.       @_sp_damage_sprite.bitmap = sp_bitmap
  33.       @_sp_damage_sprite.ox = 80
  34.       @_sp_damage_sprite.oy = 40
  35.       @_sp_damage_sprite.x = self.battler.screen_x
  36.       @_sp_damage_sprite.y = self.y - self.oy / 2
  37.       @_sp_damage_sprite.z = 3001
  38.       @_sp_damage_duration = 40
  39.     end
  40.     def dispose_sp_damage
  41.       if @_sp_damage_sprite != nil
  42.         @_sp_damage_sprite.bitmap.dispose
  43.         @_sp_damage_sprite.dispose
  44.         @_sp_damage_sprite = nil
  45.         @_sp_damage_duration = 0
  46.       end
  47.     end
  48.     def effect?
  49.       @_whiten_duration > 0 or
  50.       @_appear_duration > 0 or
  51.       @_escape_duration > 0 or
  52.       @_collapse_duration > 0 or
  53.       @_damage_duration > 0 or
  54.       @_sp_damage_duration > 0 or
  55.       @_animation_duration > 0
  56.     end
  57.     def update
  58.       super
  59.       if @_whiten_duration > 0
  60.         @_whiten_duration -= 1
  61.         self.color.alpha = 128 - (16 - @_whiten_duration) * 10
  62.       end
  63.       if @_appear_duration > 0
  64.         @_appear_duration -= 1
  65.         self.opacity = (16 - @_appear_duration) * 16
  66.       end
  67.       if @_escape_duration > 0
  68.         @_escape_duration -= 1
  69.         self.opacity = 256 - (32 - @_escape_duration) * 10
  70.       end
  71.       if @_collapse_duration > 0
  72.         @_collapse_duration -= 1
  73.         self.opacity = 256 - (48 - @_collapse_duration) * 6
  74.       end
  75.       if @_sp_damage_duration > 0
  76.         @_sp_damage_duration -= 1
  77.         case @_sp_damage_duration
  78.         when 38..39
  79.           @_sp_damage_sprite.y -= 4
  80.         when 36..37
  81.           @_sp_damage_sprite.y -= 2
  82.         when 34..35
  83.           @_sp_damage_sprite.y += 2
  84.         when 28..33
  85.           @_sp_damage_sprite.y += 4
  86.         end
  87.         @_sp_damage_sprite.opacity = 256 - (12 - @_sp_damage_duration) * 32
  88.         if @_sp_damage_duration == 0
  89.           dispose_sp_damage
  90.         end
  91.       end
  92.       if @_animation != nil and (Graphics.frame_count % 2 == 0)
  93.         @_animation_duration -= 1
  94.         update_animation
  95.       end
  96.       if @_loop_animation != nil and (Graphics.frame_count % 2 == 0)
  97.         update_loop_animation
  98.         @_loop_animation_index += 1
  99.         @_loop_animation_index %= @_loop_animation.frame_max
  100.       end
  101.       if @_blink
  102.         @_blink_count = (@_blink_count + 1) % 32
  103.         if @_blink_count < 16
  104.           alpha = (16 - @_blink_count) * 6
  105.         else
  106.           alpha = (@_blink_count - 16) * 6
  107.         end
  108.         self.color.set(255, 255, 255, alpha)
  109.       end
  110.       @@_animations.clear
  111.     end
  112.   end
  113. end
  114. #=============================================================================
  115. class Game_Battler
  116.   attr_accessor :sp_damage_pop
  117.   attr_accessor :sp_damage
  118.   #--------------------------------------------------------------------------
  119.   alias add_initialize_xdrs initialize
  120.   def initialize
  121.     add_initialize_xdrs
  122.     @sp_damage_pop = false
  123.     @sp_damage = nil
  124.   end
  125.   #--------------------------------------------------------------------------
  126.   # ● 应用物品效果
  127.   #     item : 物品
  128.   #--------------------------------------------------------------------------
  129.   def item_effect(item)
  130.     # 清除会心一击标志
  131.     self.critical = false
  132.     # 物品的效果范围是 HP 1 以上的己方、自己的 HP 为 0、
  133.     # 或者物品的效果范围是 HP 0 的己方、自己的 HP 为 1 以上的情况下
  134.     if ((item.scope == 3 or item.scope == 4) and self.hp == 0) or
  135.        ((item.scope == 5 or item.scope == 6) and self.hp >= 1)
  136.       # 过程结束
  137.       return false
  138.     end
  139.     # 清除有效标志
  140.     effective = false
  141.     # 公共事件 ID 是有效的情况下,设置为有效标志
  142.     effective |= item.common_event_id > 0
  143.     # 命中判定
  144.     hit_result = (rand(100) < item.hit)
  145.     # 不确定的特技的情况下设置为有效标志
  146.     effective |= item.hit < 100
  147.     # 命中的情况
  148.     if hit_result == true
  149.       # 计算回复量
  150.       recover_hp = maxhp * item.recover_hp_rate / 100 + item.recover_hp
  151.       recover_sp = maxsp * item.recover_sp_rate / 100 + item.recover_sp
  152.       if recover_hp < 0
  153.         recover_hp += self.pdef * item.pdef_f / 20
  154.         recover_hp += self.mdef * item.mdef_f / 20
  155.         recover_hp = [recover_hp, 0].min
  156.       end
  157.       # 属性修正
  158.       recover_hp *= elements_correct(item.element_set)
  159.       recover_hp /= 100
  160.       recover_sp *= elements_correct(item.element_set)
  161.       recover_sp /= 100
  162.       # 分散
  163.       if item.variance > 0 and recover_hp.abs > 0
  164.         amp = [recover_hp.abs * item.variance / 100, 1].max
  165.         recover_hp += rand(amp+1) + rand(amp+1) - amp
  166.       end
  167.       if item.variance > 0 and recover_sp.abs > 0
  168.         amp = [recover_sp.abs * item.variance / 100, 1].max
  169.         recover_sp += rand(amp+1) + rand(amp+1) - amp
  170.       end
  171.       # 回复量符号为负的情况下
  172.       if recover_hp < 0
  173.         # 防御修正
  174.         if self.guarding?
  175.           recover_hp /= 2
  176.         end
  177.       end
  178.       # HP 回复量符号的反转、设置伤害值
  179.       self.damage = -recover_hp
  180.       self.sp_damage = -recover_sp
  181.       # HP 以及 SP 的回复
  182.       last_hp = self.hp
  183.       last_sp = self.sp
  184.       self.hp += recover_hp
  185.       self.sp += recover_sp
  186.       effective |= self.hp != last_hp
  187.       effective |= self.sp != last_sp
  188.       # 状态变化
  189.       @state_changed = false
  190.       effective |= states_plus(item.plus_state_set)
  191.       effective |= states_minus(item.minus_state_set)
  192.       # 能力上升值有效的情况下
  193.       if item.parameter_type > 0 and item.parameter_points != 0
  194.         # 能力值的分支
  195.         case item.parameter_type
  196.         when 1  # MaxHP
  197.           @maxhp_plus += item.parameter_points
  198.         when 2  # MaxSP
  199.           @maxsp_plus += item.parameter_points
  200.         when 3  # 力量
  201.           @str_plus += item.parameter_points
  202.         when 4  # 灵巧
  203.           @dex_plus += item.parameter_points
  204.         when 5  # 速度
  205.           @agi_plus += item.parameter_points
  206.         when 6  # 魔力
  207.           @int_plus += item.parameter_points
  208.         end
  209.         # 设置有效标志
  210.         effective = true
  211.       end
  212.       # HP 回复率与回复量为 0 的情况下
  213.       if item.recover_hp_rate == 0 and item.recover_hp == 0
  214.         # 设置伤害为空的字符串
  215.         self.damage = ""
  216.         # SP 回复率与回复量为 0、能力上升值无效的情况下
  217.         if item.recover_sp_rate == 0 and item.recover_sp == 0 and
  218.            (item.parameter_type == 0 or item.parameter_points == 0)
  219.           # 状态没有变化的情况下
  220.           unless @state_changed
  221.             # 伤害设置为 "Miss"
  222.             self.damage = "Miss"
  223.           end
  224.         end
  225.       end
  226.       if item.recover_sp_rate == 0 and item.recover_sp == 0
  227.         self.sp_damage = nil
  228.       end
  229.     # Miss 的情况下
  230.     else
  231.       # 伤害设置为 "Miss"
  232.       self.damage = "Miss"
  233.     end
  234.     # 不在战斗中的情况下
  235.     unless $game_temp.in_battle
  236.       # 伤害设置为 nil
  237.       self.damage = nil
  238.       self.sp_damage = nil
  239.     end
  240.     # 过程结束
  241.     return effective
  242.   end
  243. end
  244. #=============================================================================
  245. class Sprite_Battler < RPG::Sprite
  246.   #--------------------------------------------------------------------------
  247.   def update
  248.     super
  249.     # 战斗者为 nil 的情况下
  250.     if [url=home.php?mod=space&uid=133701]@battler[/url] == nil
  251.       self.bitmap = nil
  252.       loop_animation(nil)
  253.       return
  254.     end
  255.     # 文件名和色相与当前情况有差异的情况下
  256.     if @battler.battler_name != @battler_name or
  257.        @battler.battler_hue != @battler_hue
  258.       # 获取、设置位图
  259.       @battler_name = @battler.battler_name
  260.       @battler_hue = @battler.battler_hue
  261.       self.bitmap = RPG::Cache.battler(@battler_name, @battler_hue)
  262.       @width = bitmap.width
  263.       [url=home.php?mod=space&uid=291977]@height[/url] = bitmap.height
  264.       self.ox = @width / 2
  265.       self.oy = @height
  266.       # 如果是战斗不能或者是隐藏状态就把透明度设置成 0
  267.       if @battler.dead? or @battler.hidden
  268.         self.opacity = 0
  269.       end
  270.     end
  271.     # 动画 ID 与当前的情况有差异的情况下
  272.     if @battler.damage == nil and
  273.        @battler.state_animation_id != @state_animation_id
  274.       @state_animation_id = @battler.state_animation_id
  275.       loop_animation($data_animations[@state_animation_id])
  276.     end
  277.     # 应该被显示的角色的情况下
  278.     if @battler.is_a?(Game_Actor) and @battler_visible
  279.       # 不是主状态的时候稍稍降低点透明度
  280.       if $game_temp.battle_main_phase
  281.         self.opacity += 3 if self.opacity < 255
  282.       else
  283.         self.opacity -= 3 if self.opacity > 207
  284.       end
  285.     end
  286.     # 明灭
  287.     if @battler.blink
  288.       blink_on
  289.     else
  290.       blink_off
  291.     end
  292.     # 不可见的情况下
  293.     unless @battler_visible
  294.       # 出现
  295.       if not @battler.hidden and not @battler.dead? and
  296.          (@battler.damage == nil or @battler.damage_pop)
  297.         appear
  298.         @battler_visible = true
  299.       end
  300.     end
  301.     # 可见的情况下
  302.     if @battler_visible
  303.       # 逃跑
  304.       if @battler.hidden
  305.         $game_system.se_play($data_system.escape_se)
  306.         escape
  307.         @battler_visible = false
  308.       end
  309.       # 白色闪烁
  310.       if @battler.white_flash
  311.         whiten
  312.         @battler.white_flash = false
  313.       end
  314.       # 动画
  315.       if @battler.animation_id != 0
  316.         animation = $data_animations[@battler.animation_id]
  317.         animation(animation, @battler.animation_hit)
  318.         @battler.animation_id = 0
  319.       end
  320.       # 伤害
  321.       if @battler.damage_pop
  322.         damage(@battler.damage, @battler.critical)
  323.         @battler.damage = nil
  324.         @battler.critical = false
  325.         @battler.damage_pop = false
  326.       end
  327.       if @battler.sp_damage_pop
  328.         sp_damage(@battler.sp_damage)
  329.         @battler.sp_damage = nil
  330.         @battler.sp_damage_pop = false
  331.       end
  332.       # korapusu
  333.       if @battler.damage == nil and @battler.dead?
  334.         if @battler.is_a?(Game_Enemy)
  335.           $game_system.se_play($data_system.enemy_collapse_se)
  336.         else
  337.           $game_system.se_play($data_system.actor_collapse_se)
  338.         end
  339.         collapse
  340.         @battler_visible = false
  341.       end
  342.     end
  343.     # 设置活动块的坐标
  344.     self.x = @battler.screen_x
  345.     self.y = @battler.screen_y
  346.     self.z = @battler.screen_z
  347.   end
  348. end
  349. #==============================================================================
  350. class Scene_Battle
  351.   #--------------------------------------------------------------------------
  352.   def update_phase4_step5
  353.     # 隐藏帮助窗口
  354.     @help_window.visible = false
  355.     # 刷新状态窗口
  356.     @status_window.refresh
  357.     # 显示伤害
  358.     for target in @target_battlers
  359.       if target.damage != nil
  360.         target.damage_pop = true
  361.       end
  362.       if target.sp_damage != nil
  363.         target.sp_damage_pop = true
  364.       end
  365.     end
  366.     # 移至步骤 6
  367.     @phase4_step = 6
  368.   end
  369. end
  370. #==============================================================================
复制代码

作者: yang1zhi    时间: 2014-5-24 20:56
邪月长啸 发表于 2014-5-24 19:02
@芯☆淡茹水 大大的芯式战斗系统就有这个效果,可以的话,点芯大的ID找下就有了  ...

看到了。我把他的《设置》《战斗中HPSP回复》《伤害美化》搬过来后,发现怪物ID会给角色加SP。然后把怪物ID删了。可是HP回复能看到文字,SP回复看不到文字,就算HP没回也看不到。这个是根据防具加的,要是根据状态加就好了,我试着把ARMOR都改成了states,结果报错了
作者: yang1zhi    时间: 2014-5-24 21:15
芯☆淡茹水 发表于 2014-5-24 20:12
话说您也太热心了嘛~!没有必要 @ 我啊!
可能我年纪大了,都记不得自己写过什么了,还是您有心,都还记 ...

大大,250行发生错误。放到没别的脚本的工程里也是250行错误。{:2_253:}
作者: 邪月长啸    时间: 2014-5-24 21:26
yang1zhi 发表于 2014-5-24 21:15
大大,250行发生错误。放到没别的脚本的工程里也是250行错误。

见图,自己改下

截图27.png (27.26 KB, 下载次数: 13)

截图27.png

作者: yang1zhi    时间: 2014-5-24 22:01
邪月长啸 发表于 2014-5-24 21:26
见图,自己改下

{:2_264:}使用物品后32行发生错误
作者: 芯☆淡茹水    时间: 2014-5-24 22:20
还是上传工程方便些哈,刚在看电视,没看到。
Project1.rar (197.88 KB, 下载次数: 74)
作者: yang1zhi    时间: 2014-5-24 23:12
芯☆淡茹水 发表于 2014-5-24 22:20
还是上传工程方便些哈,刚在看电视,没看到。

大神。我开你的工程效果很好。
我把你的脚本放到我的工程里就没效果了{:2_264:}
我把我的工程上传,大神帮我看看。
我也在看片子,有空的时候帮我下就行了。

Project2.zip

791.86 KB, 下载次数: 43






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