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

Project1

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

[已经解决] 怎么让显示伤害能同时显示HPSP伤害

[复制链接]

Lv4.逐梦者

梦石
0
星屑
12157
在线时间
4435 小时
注册时间
2014-4-11
帖子
5955

开拓者

跳转到指定楼层
1
发表于 2016-6-14 22:17:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
虽然可以显示SP或者HP伤害,但是不能同时显示HP和SP伤害。
加入我有技能同时减HP和SP的,那么就只能看到一个。

RUBY 代码复制
  1. #==============================================================================#
  2. # By Xiderowg / 桜雅 在土                                                      #                                                #
  3. #==============================================================================#                                              #  
  4. #==============================================================================#
  5. #                                   描述                                       #
  6. #==============================================================================#
  7. #这个脚本最初是由Xiderowg(桜雅 在土)创造的,但是这个脚本为了XAS中主角的编辑,#
  8. #而被Moghunter改动了很多。这个特点是动态的现实伤害值和主角获得的经验和金币。   #
  9. #==============================================================================#
  10.  
  11. module XRXS_DAMAGE
  12.   def damage_x_init_velocity
  13.     return 0.2 * (rand(5) - 2)
  14.   end
  15.   def damage_y_init_velocity
  16.     return 9
  17.   end
  18.   GRAVITY = 0.58
  19.   TRANCEPARENT_START = 30
  20.   TRANCEPARENT_X_SLIDE = 0
  21. end
  22.  
  23. $xrxs_damage_pop = true
  24. module XRXS_DamageSettings
  25.   DURATION = 40
  26.   CRITICAL_STRING     = "CRITICAL"
  27.   CRITICAL_FONT_SIZE  = 16
  28.   CRITICAL_FONT_COLOR = Color.new(255, 155, 50)
  29.   STATE_STRING     = "____State____"
  30.   STATE_FONT_SIZE  = 18
  31.   STATE_FONT_COLOR = Color.new(255, 255, 255)
  32.   ITEM_STRING     = "____ITEM____"
  33.   ITEM_FONT_SIZE  = 18
  34.   ITEM_FONT_COLOR = Color.new(255, 255, 255)  
  35.   DEFAULT_COLOR  = Color.new(255, 255, 255)  
  36.   DEFAULT_MINUS  = Color.new(176, 255, 144)
  37.   SPDAMAGE_COLOR = Color.new(255, 176, 144)   
  38.   SPDAMAGE_MINUS = Color.new(128, 255, 255)  
  39.   STATES_COLOR = Color.new(0, 150, 200)
  40.   STATES_MINUS = Color.new(170, 170, 170)   
  41.   SPECIAL_ACTION_COLOR_A = Color.new(250, 100, 100)
  42.   SPECIAL_ACTION_COLOR_B = Color.new(150, 150, 250)
  43.   ITEM_COLOR = Color.new(128, 200, 255)
  44.   SPECIAL_COLOR_SETS =
  45.     {"EXP"=>Color.new(155, 255, 64),
  46.        "G"=>Color.new(255, 255, 32),
  47.      "Level up!"=>Color.new(255, 255,  0)
  48.      }
  49.   def self.font
  50.     font = Font.new
  51.     font.name   = "黑体"
  52.     font.size   = 20            
  53.     font.bold   = true         
  54.     font.italic = false         
  55.     return font
  56.   end
  57. end
  58. module XRXS_ResultPop
  59.   EXP  = 50
  60.   GOLD = 30
  61. end
  62. #_______________________________________________________________________________
  63.  
  64. module XRXS_DAMAGE
  65.   def update
  66.     super
  67.     @damage_sprites   = [] if @damage_sprites.nil?
  68.     @damage_durations = [] if @damage_durations.nil?
  69.     if @_damage_sprite != nil and @_damage_sprite.visible
  70.       x = damage_x_init_velocity
  71.       y = damage_y_init_velocity
  72.       d = @_damage_duration
  73.       @damage_sprites.push(Sprite_Damage.new(@_damage_sprite, x, y, d))
  74.       @_damage_sprite.visible = false
  75.     end
  76.     for damage_sprite in @damage_sprites
  77.       damage_sprite.update
  78.     end
  79.     for i in [email]0...@damage_sprites.size[/email]
  80.       @damage_sprites[i] = nil if @damage_sprites[i].disposed?
  81.     end
  82.     @damage_sprites.compact!
  83.   end
  84.   def dispose
  85.     super
  86.     if @damage_sprites != nil
  87.       for damage_sprite in @damage_sprites
  88.         damage_sprite.dispose
  89.       end
  90.     end
  91.   end
  92. end
  93. class RPG::Sprite < Sprite
  94.   include XRXS_DAMAGE
  95. end
  96. class Sprite_Damage < Sprite
  97.   def initialize(sprite, init_x_speed, init_y_speed, duration)
  98.     super(nil)
  99.     self.bitmap = sprite.bitmap.dup unless sprite.bitmap.nil?
  100.     self.opacity = sprite.opacity
  101.     self.x = sprite.x
  102.     self.y = sprite.y
  103.     self.z = sprite.z
  104.     self.ox = sprite.ox
  105.     self.oy = sprite.oy
  106.     @now_x_speed = init_x_speed
  107.     @now_y_speed = init_y_speed
  108.     @potential_x_energy = 0.0
  109.     @potential_y_energy = 0.0
  110.     @duration = duration
  111.   end
  112.   def update
  113.     if @duration <= XRXS_DAMAGE::TRANCEPARENT_START
  114.       self.opacity -= (256 / XRXS_DAMAGE::TRANCEPARENT_START)
  115.       self.x += XRXS_DAMAGE::TRANCEPARENT_X_SLIDE
  116.     end
  117.     super
  118.     n = self.oy + @now_y_speed
  119.     if n <= 0
  120.       @now_y_speed *= -1
  121.       @now_y_speed /=  2
  122.       @now_x_speed /=  2
  123.     end
  124.     self.oy  = [n, 0].max
  125.     @potential_y_energy += XRXS_DAMAGE::GRAVITY
  126.     speed = @potential_y_energy.floor
  127.     @now_y_speed        -= speed
  128.     @potential_y_energy -= speed
  129.     @potential_x_energy += @now_x_speed
  130.     speed = @potential_x_energy.floor
  131.     self.ox             += speed
  132.     @potential_x_energy -= speed
  133.     @duration -= 1
  134.     if @duration == 0
  135.       self.dispose
  136.     end
  137.   end
  138. end
  139. module XRXS_DamageSettings
  140.   def self.color(value_string)
  141.     for key in SPECIAL_COLOR_SETS.keys.sort!
  142.       return SPECIAL_COLOR_SETS[key] unless value_string.scan(key).empty?
  143.     end
  144.     unless value_string.scan($data_system.words.sp).empty?
  145.       value = (value_string.sub($data_system.words.sp){""}).to_i
  146.       color = (value >= 0 ? SPDAMAGE_COLOR : SPDAMAGE_MINUS)
  147.       value_string.gsub!("-") {""}
  148.       return color
  149.     end
  150.     unless value_string.scan("+  ").empty?
  151.       color = STATES_COLOR
  152.       return color  
  153.     end
  154.     unless value_string.scan("-  ").empty?
  155.       color = STATES_MINUS
  156.       return color  
  157.     end         
  158.     unless value_string.scan(XAS_BA_ENEMY::COUNTER_TEXT.to_s).empty?
  159.       color = SPECIAL_ACTION_COLOR_A
  160.       return color  
  161.     end      
  162.     unless value_string.scan(XAS_BA_ENEMY::FINAL_ATTACK_TEXT.to_s).empty?
  163.       color = SPECIAL_ACTION_COLOR_A
  164.       return color  
  165.     end
  166.     unless value_string.scan(XAS_SKILL::ONE_HP_TEXT.to_s).empty?
  167.       color = SPECIAL_ACTION_COLOR_A
  168.       return color  
  169.     end   
  170.     unless value_string.scan(XAS::DEATHCOUNT_TEXT_COUNT.to_s).empty?
  171.       color = SPECIAL_ACTION_COLOR_A
  172.       return color  
  173.     end   
  174.     unless value_string.scan(XAS::DEATHCOUNT_TEXT_DEATH.to_s).empty?
  175.       color = SPECIAL_ACTION_COLOR_A
  176.       return color  
  177.     end   
  178.     if $data_states[XAS::INVINCIBLE_ID] != nil
  179.     unless value_string.scan($data_states[XAS::INVINCIBLE_ID].name.to_s).empty?
  180.       color = SPECIAL_ACTION_COLOR_B
  181.       return color  
  182.     end   
  183.     end
  184.     if $data_states[XAS::REFLECT_ID] != nil
  185.     unless value_string.scan($data_states[XAS::REFLECT_ID].name.to_s).empty?           
  186.       color = SPECIAL_ACTION_COLOR_B
  187.       return color  
  188.     end   
  189.     end
  190.     unless value_string.scan(XAS_ABS_SETUP::DEFENSE_TEXT.to_s).empty?
  191.       color = SPECIAL_ACTION_COLOR_B
  192.       return color  
  193.     end      
  194.     unless value_string.scan(XAS_ABS_SETUP::ESCAPE_TEXT.to_s).empty?
  195.       color = SPECIAL_ACTION_COLOR_B
  196.       return color  
  197.     end     
  198.     unless value_string.scan(XAS_SKILL::STEAL_TEXT.to_s).empty?
  199.       color = ITEM_COLOR
  200.       return color  
  201.     end   
  202.     if $mog_rgss_ap_parameter != nil
  203.       unless value_string.scan(MOG::AP_NAME.to_s).empty?
  204.         color = ITEM_COLOR
  205.         return color  
  206.       end   
  207.     end
  208.     unless value_string.scan(" x ").empty?
  209.       color = ITEM_COLOR
  210.       return color  
  211.     end   
  212.     if $mog_rgss_xas_overdrive != nil
  213.     unless value_string.scan(MOG::OVDTEXT.to_s).empty?
  214.       color = SPECIAL_ACTION_COLOR_B
  215.       return color  
  216.     end      
  217.     end
  218.     value = (value_string).to_i
  219.     color = (value >= 0 ? DEFAULT_COLOR : DEFAULT_MINUS)
  220.     return color
  221.   end
  222. end
  223. module RPG
  224.   class Sprite < ::Sprite
  225.     def damage(value, critical, state, item)
  226.       dispose_damage
  227.       font  = XRXS_DamageSettings.font
  228.       color = XRXS_DamageSettings.color(value.to_s)
  229.       if value.is_a?(Numeric)
  230.         damage_string = value.abs.to_s
  231.       else
  232.         damage_string = value.to_s
  233.       end
  234.     #-------------------------------------------------------------------------
  235.     if value.is_a?(Numeric)
  236.       bitmap_number_image = RPG::Cache.windowskin("Damage_Number")
  237.       bitmap = Bitmap.new(bitmap_number_image.width,bitmap_number_image.height)
  238.       bitmap_im_cw = bitmap_number_image.width / 10
  239.       bitmap_im_ch = bitmap_number_image.height / 3   
  240.       bitmap_number_text = value.to_s.split(//)
  241.       if value >= 0
  242.         for r in 0..bitmap_number_text.size - 1
  243.            bitmap_number_abs = bitmap_number_text[r].to_i
  244.            if critical == false
  245.            bitmap_src_rect = Rect.new(bitmap_im_cw * bitmap_number_abs,0 , bitmap_im_cw, bitmap_im_ch)
  246.            else
  247.             bitmap_src_rect = Rect.new(bitmap_im_cw * bitmap_number_abs, bitmap_im_ch * 2, bitmap_im_cw, bitmap_im_ch)
  248.            end
  249.            bitmap.blt(60 + ((bitmap_im_cw - 7) *  r), 0, bitmap_number_image, bitmap_src_rect)        
  250.          end   
  251.       else
  252.        for r in 1..bitmap_number_text.size - 1
  253.          bitmap_number_abs = bitmap_number_text[r].to_i
  254.          bitmap_src_rect = Rect.new(bitmap_im_cw * bitmap_number_abs, bitmap_im_ch, bitmap_im_cw, bitmap_im_ch)
  255.          bitmap.blt(50 + ((bitmap_im_cw - 7) *  r), 0, bitmap_number_image, bitmap_src_rect)        
  256.         end   
  257.       end
  258.     elsif damage_string == "Miss"
  259.     bitmap_number_image = RPG::Cache.windowskin("Miss")
  260.     bitmap = Bitmap.new(bitmap_number_image.width,bitmap_number_image.height)
  261.     bitmap_im_cw = bitmap_number_image.width
  262.     bitmap_im_ch = bitmap_number_image.height / 6   
  263.     bitmap_src_rect = Rect.new(0, 0, bitmap_im_cw, bitmap_im_ch)
  264.     bitmap.blt(-25 , 0, bitmap_number_image, bitmap_src_rect)        
  265.     elsif damage_string == XAS_ABS_SETUP::GUARD_BREAK_TEXT
  266.     bitmap_number_image = RPG::Cache.windowskin("Miss")
  267.     bitmap = Bitmap.new(bitmap_number_image.width,bitmap_number_image.height)
  268.     bitmap_im_cw = bitmap_number_image.width
  269.     bitmap_im_ch = bitmap_number_image.height / 6   
  270.     bitmap_src_rect = Rect.new(0, bitmap_im_ch, bitmap_im_cw, bitmap_im_ch)
  271.     bitmap.blt(-25 , 0, bitmap_number_image, bitmap_src_rect)        
  272.     elsif damage_string == XAS_ABS_SETUP::SHIELD_TEXT
  273.     bitmap_number_image = RPG::Cache.windowskin("Miss")
  274.     bitmap = Bitmap.new(bitmap_number_image.width,bitmap_number_image.height)
  275.     bitmap_im_cw = bitmap_number_image.width
  276.     bitmap_im_ch = bitmap_number_image.height / 6   
  277.     bitmap_src_rect = Rect.new(0, bitmap_im_ch * 2, bitmap_im_cw, bitmap_im_ch)
  278.     bitmap.blt(-25 , 0, bitmap_number_image, bitmap_src_rect)        
  279.     elsif damage_string == XAS_BA::LEVEL_UP_TEXT
  280.     bitmap_number_image = RPG::Cache.windowskin("Miss")
  281.     bitmap = Bitmap.new(bitmap_number_image.width,bitmap_number_image.height)
  282.     bitmap_im_cw = bitmap_number_image.width
  283.     bitmap_im_ch = bitmap_number_image.height / 6   
  284.     bitmap_src_rect = Rect.new(0, bitmap_im_ch * 3, bitmap_im_cw, bitmap_im_ch)
  285.     bitmap.blt(-25 , 0, bitmap_number_image, bitmap_src_rect)        
  286.     elsif damage_string == "No Mp"
  287.     bitmap_number_image = RPG::Cache.windowskin("Miss")
  288.     bitmap = Bitmap.new(bitmap_number_image.width,bitmap_number_image.height)
  289.     bitmap_im_cw = bitmap_number_image.width
  290.     bitmap_im_ch = bitmap_number_image.height / 6  
  291.     bitmap_src_rect = Rect.new(0, bitmap_im_ch * 4, bitmap_im_cw, bitmap_im_ch)
  292.     bitmap.blt(-25 , 0, bitmap_number_image, bitmap_src_rect)        
  293.     elsif damage_string == "Dodge"
  294.     bitmap_number_image = RPG::Cache.windowskin("Miss")
  295.     bitmap = Bitmap.new(bitmap_number_image.width,bitmap_number_image.height)
  296.     bitmap_im_cw = bitmap_number_image.width
  297.     bitmap_im_ch = bitmap_number_image.height / 6  
  298.     bitmap_src_rect = Rect.new(0, bitmap_im_ch * 5, bitmap_im_cw, bitmap_im_ch)
  299.     bitmap.blt(-25 , 0, bitmap_number_image, bitmap_src_rect)        
  300.  
  301.  
  302.  
  303.    else
  304.       #-------------------------------------------------------------------------
  305. #=begin      
  306.       bitmap = Bitmap.new(160, 48)
  307.       bitmap.font = font
  308.       bitmap.font.color.set(0, 0, 0)
  309.       bitmap.draw_text(-1, 12-1, 160, 36, damage_string, 1)
  310.       bitmap.draw_text(+1, 12-1, 160, 36, damage_string, 1)
  311.       bitmap.draw_text(-1, 12+1, 160, 36, damage_string, 1)
  312.       bitmap.draw_text(+1, 12+1, 160, 36, damage_string, 1)
  313.       bitmap.font.color = color
  314.       bitmap.draw_text(0, 12, 160, 36, damage_string, 1)
  315.       if critical
  316.         critical_string   = XRXS_DamageSettings::CRITICAL_STRING
  317.         bitmap.font.size  = XRXS_DamageSettings::CRITICAL_FONT_SIZE
  318.         bitmap.font.color.set(0, 0, 0)
  319.         bitmap.draw_text(-1, -1, 160, 20, critical_string, 1)
  320.         bitmap.draw_text(+1, -1, 160, 20, critical_string, 1)
  321.         bitmap.draw_text(-1, +1, 160, 20, critical_string, 1)
  322.         bitmap.draw_text(+1, +1, 160, 20, critical_string, 1)
  323.         bitmap.font.color = XRXS_DamageSettings::CRITICAL_FONT_COLOR
  324.         bitmap.draw_text(0, 0, 160, 20, critical_string, 1)
  325.        elsif state
  326.         critical_string   = XRXS_DamageSettings::STATE_STRING
  327.         bitmap.font.size  = XRXS_DamageSettings::STATE_FONT_SIZE
  328.         bitmap.font.italic = true
  329.         bitmap.font.color.set(0, 0, 0)
  330.         bitmap.draw_text(-1, -1, 160, 20, critical_string, 1)
  331.         bitmap.draw_text(+1, -1, 160, 20, critical_string, 1)
  332.         bitmap.draw_text(-1, +1, 160, 20, critical_string, 1)
  333.         bitmap.draw_text(+1, +1, 160, 20, critical_string, 1)
  334.         bitmap.font.color = XRXS_DamageSettings::STATE_FONT_COLOR
  335.         bitmap.draw_text(0, 0, 160, 20, critical_string, 1)
  336.        elsif item
  337.         critical_string   = XRXS_DamageSettings::ITEM_STRING
  338.         bitmap.font.size  = XRXS_DamageSettings::ITEM_FONT_SIZE
  339.         bitmap.font.italic = true
  340.         bitmap.font.color.set(0, 0, 0)
  341.         bitmap.draw_text(-1, -1, 160, 20, critical_string, 1)
  342.         bitmap.draw_text(+1, -1, 160, 20, critical_string, 1)
  343.         bitmap.draw_text(-1, +1, 160, 20, critical_string, 1)
  344.         bitmap.draw_text(+1, +1, 160, 20, critical_string, 1)
  345.         bitmap.font.color = XRXS_DamageSettings::ITEM_FONT_COLOR
  346.         bitmap.draw_text(0, 0, 160, 20, critical_string, 1)
  347.       end   
  348.  
  349.  
  350. end      
  351. #=end
  352.  
  353.       @_damage_sprite = ::Sprite.new(self.viewport)
  354.       @_damage_sprite.bitmap = bitmap
  355.       @_damage_sprite.ox = 80
  356.       @_damage_sprite.oy = 20
  357.       @_damage_sprite.x = self.x
  358.       @_damage_sprite.y = self.y - self.oy / 2
  359.       if critical == true
  360.         @_damage_sprite.zoom_x = 2
  361.         @_damage_sprite.zoom_y = 2
  362.       end      
  363.       @_damage_sprite.z = 3000
  364.       @_damage_duration = XRXS_DamageSettings::DURATION
  365.     end
  366.   end
  367. end
  368. class Game_Battler
  369.   attr_accessor :damage_sp               
  370. end
  371. class Sprite_Battler < RPG::Sprite
  372.   alias xrxs62_update update
  373.   def update
  374.     if @battler != nil and @battler_visible and
  375.        @battler.damage_pop and @battler.damage_sp != nil and
  376.       (@battler.damage == nil or @battler.damage == "")
  377.       value = @battler.damage_sp
  378.       dispose_damage
  379.       damage_string = $data_system.words.sp + " " + value.to_s
  380.       damage(damage_string, @battler.critical,@battler.state,@battler.item)
  381.       @battler.damage_sp = nil
  382.       @battler.critical = false
  383.       @battler.state = false
  384.       @battler.item = false
  385.       @battler.damage_pop = false
  386.     end
  387.     xrxs62_update
  388.   end
  389. end
  390. module XRXS_ResultPop
  391.   def update
  392.     super
  393.     unless @xrxs_resultpop_done
  394.  
  395.       if @battler == nil or not @battler.is_a?(Game_Enemy)
  396.         @xrxs_resultpop_done = true
  397.         return
  398.       end
  399.       if @_collapse_duration > 0 and @battler.gain_exp_act == true
  400.  
  401.  
  402.         if @_collapse_duration == EXP
  403.           if @battler.exp != 0
  404.             result = "EXP " + @battler.exp.to_s
  405.             damage(result, false,false,false)
  406.           end
  407.         elsif @_collapse_duration == GOLD and @battler.gain_exp_act == true
  408.           if @battler.gold != 0
  409.             result = @battler.gold.to_s + " " + $data_system.words.gold
  410.             damage(result, false,false,false)
  411.           end
  412.           @xrxs_resultpop_done = true if $mog_rgss_ap_parameter == nil
  413.          elsif $mog_rgss_ap_parameter != nil and @_collapse_duration == (GOLD / 2) and @battler.gain_exp_act == true
  414.           if @battler.ap != 0
  415.             result = @battler.ap.to_s + " " + MOG::AP_NAME
  416.             damage(result, false,false,false)
  417.           end
  418.            @xrxs_resultpop_done = true         
  419.         end
  420.       end
  421.     end
  422.   end
  423. end
  424. class RPG::Sprite < Sprite
  425.   include XRXS_ResultPop
  426. end

Lv4.逐梦者

素材区好人

梦石
3
星屑
7842
在线时间
3544 小时
注册时间
2011-7-21
帖子
2284

极短25参与极短24参与极短23参与极短22参与极短21参与

2
发表于 2016-6-14 22:41:39 | 只看该作者
显示的是self.damage,你只要把这个数值 = SP的变化就行了。如果不打算使用不同颜色显示HP和SP的变化,这样最简单。

比如搜索“sp +=”,找到self.sp += recover_sp (注:这个是吃药增加SP)
这里下面添加一段:

     if recover_sp != 0   #如果补SP的量不等于0
       self.damage = -recover_sp  #伤害=SP恢复量的倒数
     end
if item.recover_hp_rate == 0 and item.recover_hp == 0
这里改为:
     if item.recover_hp_rate == 0 and item.recover_hp == 0 and item.recover_sp_rate == 0 and item.recover_sp == 0  #原来只判断HP,现在附带判断SP

就行了。这样同时补血补气优先显示补气。

点评

你说的是只显示一条,可显示HP,可显示SP。但是我要的是HP和SP都显示出来,而不是只显示哪个  发表于 2016-6-14 22:53
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-30 08:00

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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