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

Project1

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

[已经解决] 请教一下,有没有办法让不同角色收到攻击时听到不同音效呢

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
55 小时
注册时间
2013-12-29
帖子
51
跳转到指定楼层
1
发表于 2014-2-3 21:09:51 手机端发表。 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
方法最好是事件版。。脚本实在是弄一次游戏出错一次

Lv3.寻梦者

○赛

梦石
0
星屑
1249
在线时间
1276 小时
注册时间
2013-1-22
帖子
2246

贵宾

2
发表于 2014-2-3 22:15:57 | 只看该作者
只好说事件除了自制整个战斗系统外别无他法。

只能改脚本,找到播放音乐的那里,加个case。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
55 小时
注册时间
2013-12-29
帖子
51
3
 楼主| 发表于 2014-2-3 22:19:57 手机端发表。 | 只看该作者
天地有正气 发表于 2014-2-3 22:15
只好说事件除了自制整个战斗系统外别无他法。

只能改脚本,找到播放音乐的那里,加个case。 ...

能不能帮忙给个范例呢。不知道哪是播放音乐的地方。。

点评

LZ自己找找吧,应该在什么应用攻击里面,应该有注释吧。。至于范例。。。抱歉我要几天不能开电脑,所以也没时间弄了。。  发表于 2014-2-3 22:25
回复 支持 反对

使用道具 举报

Lv1.梦旅人

薄凉看客

梦石
0
星屑
50
在线时间
1269 小时
注册时间
2010-6-20
帖子
1316
4
发表于 2014-2-3 22:32:52 | 只看该作者
  1.     #==============================================================================
  2.     # 本脚本来自www.66RPG.com,使用和转载请保留此信息
  3.     #==============================================================================

  4.     # ============================================================================
  5.     # 挨打死亡音效设置 By:菜鸟飞啊飞
  6.     # ============================================================================

  7.    
  8.    
  9.     # ============================================================================
  10.     # 使用方法:
  11.     # 设置己方的在ACTOR下设置
  12.     # 例如设置编号为1的角色,如下
  13.     # 1=>['024-Door01','015-Jump01','012-System12',100,100],
  14.     # #       伤害,       暴击,     死亡,      音量,节拍
  15.     # 敌人的也是如此
  16.     # 如果不适用此功能的可以用[nil],带过
  17.     # ============================================================================

  18. module PD
  19.   FIL = 'Audio/SE/'
  20.   ACTOR =
  21.   {
  22.   1=>['024-Door01','015-Jump01','012-System12',100,100],
  23.   2=>[nil],
  24.   3=>[nil],
  25.   4=>[nil],
  26.   5=>[nil],
  27.   6=>[nil]
  28.   }
  29.   ENEMY =
  30.    {
  31.   1=>['014-Move02','014-Move02','013-Move01',100,200],
  32.   }

  33. end
  34. module RPG
  35.   class Sprite < ::Sprite
  36.     def damage(value, critical, pd)
  37.       dispose_damage
  38.       v = pd[3] == nil ? 100 : pd[3]
  39.       p = pd[4] == nil ? 100 : pd[4]
  40.       if value.is_a?(Numeric)
  41.         damage_string = value.abs.to_s
  42.       else
  43.         damage_string = value.to_s
  44.       end
  45.       bitmap = Bitmap.new(160, 48)
  46.       bitmap.font.name = "Arial Black"
  47.       bitmap.font.size = 32
  48.       bitmap.font.color.set(0, 0, 0)
  49.       bitmap.draw_text(-1, 12-1, 160, 36, damage_string, 1)
  50.       bitmap.draw_text(+1, 12-1, 160, 36, damage_string, 1)
  51.       bitmap.draw_text(-1, 12+1, 160, 36, damage_string, 1)
  52.       bitmap.draw_text(+1, 12+1, 160, 36, damage_string, 1)
  53.       if value.is_a?(Numeric) and value < 0
  54.         bitmap.font.color.set(176, 255, 144)
  55.       else
  56.         if critical
  57.           Audio.se_play(PD::FIL + pd[1], v, p) if pd[1] != nil
  58.         elsif not critical
  59.           Audio.se_play(PD::FIL + pd[0], v, p) if pd[0] != nil
  60.         end
  61.         bitmap.font.color.set(255, 255, 255)
  62.       end
  63.       bitmap.draw_text(0, 12, 160, 36, damage_string, 1)
  64.       if critical
  65.         bitmap.font.size = 20
  66.         bitmap.font.color.set(0, 0, 0)
  67.         bitmap.draw_text(-1, -1, 160, 20, "CRITICAL", 1)
  68.         bitmap.draw_text(+1, -1, 160, 20, "CRITICAL", 1)
  69.         bitmap.draw_text(-1, +1, 160, 20, "CRITICAL", 1)
  70.         bitmap.draw_text(+1, +1, 160, 20, "CRITICAL", 1)
  71.         bitmap.font.color.set(255, 255, 255)
  72.         bitmap.draw_text(0, 0, 160, 20, "CRITICAL", 1)
  73.       end
  74.       @_damage_sprite = ::Sprite.new(self.viewport)
  75.       @_damage_sprite.bitmap = bitmap
  76.       @_damage_sprite.ox = 80
  77.       @_damage_sprite.oy = 20
  78.       @_damage_sprite.x = self.x
  79.       @_damage_sprite.y = self.y - self.oy / 2
  80.       @_damage_sprite.z = 3000
  81.       @_damage_duration = 40
  82.     end
  83.   end
  84. end
  85. class Game_Battler
  86.   attr_accessor :pd
  87.   alias :orig_initialize :initialize
  88.   def initialize
  89.     @pd = []
  90.     orig_initialize
  91.   end
  92.   #################################
  93.   #★以下是拷贝默认脚本,修改部分★
  94.   #################################
  95.   #--------------------------------------------------------------------------
  96.   # ● 应用通常攻击效果
  97.   #     attacker : 攻击者 (battler)
  98.   #--------------------------------------------------------------------------
  99.   def attack_effect(attacker)
  100.     # 清除会心一击标志
  101.     self.critical = false
  102.     # 第一命中判定
  103.     hit_result = (rand(100) < attacker.hit)
  104.     # 命中的情况下
  105.     if hit_result == true
  106.       if self.is_a?(Game_Enemy)
  107.         enemy = PD::ENEMY[self.id]
  108.         self.pd = enemy if enemy != nil
  109.       else
  110.         actor = PD::ACTOR[self.id]
  111.         self.pd = actor if actor != nil
  112.       end
  113.       #self.pd = []
  114.       # 计算基本伤害
  115.       atk = [attacker.atk - self.pdef / 2, 0].max
  116.       self.damage = atk * (20 + attacker.str) / 20
  117.       # 属性修正
  118.       self.damage *= elements_correct(attacker.element_set)
  119.       self.damage /= 100
  120.       # 伤害符号正确的情况下
  121.       if self.damage > 0
  122.         # 会心一击修正
  123.         if rand(100) < 4 * attacker.dex / self.agi
  124.           self.damage *= 2
  125.           self.critical = true
  126.         end
  127.         # 防御修正
  128.         if self.guarding?
  129.           self.damage /= 2
  130.         end
  131.       end
  132.       # 分散
  133.       if self.damage.abs > 0
  134.         amp = [self.damage.abs * 15 / 100, 1].max
  135.         self.damage += rand(amp+1) + rand(amp+1) - amp
  136.       end
  137.       # 第二命中判定
  138.       eva = 8 * self.agi / attacker.dex + self.eva
  139.       hit = self.damage < 0 ? 100 : 100 - eva
  140.       hit = self.cant_evade? ? 100 : hit
  141.       hit_result = (rand(100) < hit)
  142.     end
  143.     # 命中的情况下
  144.     if hit_result == true
  145.       # 状态冲击解除
  146.       remove_states_shock
  147.       # HP 的伤害计算
  148.       self.hp -= self.damage
  149.       # 状态变化
  150.       @state_changed = false
  151.       states_plus(attacker.plus_state_set)
  152.       states_minus(attacker.minus_state_set)
  153.     # Miss 的情况下
  154.     else
  155.       # 伤害设置为 "Miss"
  156.       self.damage = "Miss"
  157.       # 清除会心一击标志
  158.       self.critical = false
  159.     end
  160.     # 过程结束
  161.     return true
  162.   end
  163.   #--------------------------------------------------------------------------
  164.   # ● 应用特技效果
  165.   #     user  : 特技的使用者 (battler)
  166.   #     skill : 特技
  167.   #--------------------------------------------------------------------------
  168.   def skill_effect(user, skill)
  169.     # 清除会心一击标志
  170.     self.critical = false
  171.     # 特技的效果范围是 HP 1 以上的己方、自己的 HP 为 0、
  172.     # 或者特技的效果范围是 HP 0 的己方、自己的 HP 为 1 以上的情况下
  173.     if ((skill.scope == 3 or skill.scope == 4) and self.hp == 0) or
  174.        ((skill.scope == 5 or skill.scope == 6) and self.hp >= 1)
  175.       # 过程结束
  176.       return false
  177.     end
  178.     # 清除有效标志
  179.     effective = false
  180.     # 公共事件 ID 是有效的情况下,设置为有效标志
  181.     effective |= skill.common_event_id > 0
  182.     # 第一命中判定
  183.     hit = skill.hit
  184.     if skill.atk_f > 0
  185.       hit *= user.hit / 100
  186.     end
  187.     hit_result = (rand(100) < hit)
  188.     # 不确定的特技的情况下设置为有效标志
  189.     effective |= hit < 100
  190.     # 命中的情况下
  191.     if hit_result == true
  192.       if self.is_a?(Game_Enemy)
  193.         enemy = PD::ENEMY[self.id]
  194.         self.pd = enemy if enemy != nil
  195.       else
  196.         actor = PD::ACTOR[self.id]
  197.         self.pd = actor if actor != nil
  198.       end
  199.       # 计算威力
  200.       power = skill.power + user.atk * skill.atk_f / 100
  201.       if power > 0
  202.         power -= self.pdef * skill.pdef_f / 200
  203.         power -= self.mdef * skill.mdef_f / 200
  204.         power = [power, 0].max
  205.       end
  206.       # 计算倍率
  207.       rate = 20
  208.       rate += (user.str * skill.str_f / 100)
  209.       rate += (user.dex * skill.dex_f / 100)
  210.       rate += (user.agi * skill.agi_f / 100)
  211.       rate += (user.int * skill.int_f / 100)
  212.       # 计算基本伤害
  213.       self.damage = power * rate / 20
  214.       # 属性修正
  215.       self.damage *= elements_correct(skill.element_set)
  216.       self.damage /= 100
  217.       # 伤害符号正确的情况下
  218.       if self.damage > 0
  219.         # 防御修正
  220.         if self.guarding?
  221.           self.damage /= 2
  222.         end
  223.       end
  224.       # 分散
  225.       if skill.variance > 0 and self.damage.abs > 0
  226.         amp = [self.damage.abs * skill.variance / 100, 1].max
  227.         self.damage += rand(amp+1) + rand(amp+1) - amp
  228.       end
  229.       # 第二命中判定
  230.       eva = 8 * self.agi / user.dex + self.eva
  231.       hit = self.damage < 0 ? 100 : 100 - eva * skill.eva_f / 100
  232.       hit = self.cant_evade? ? 100 : hit
  233.       hit_result = (rand(100) < hit)
  234.       # 不确定的特技的情况下设置为有效标志
  235.       effective |= hit < 100
  236.     end
  237.     # 命中的情况下
  238.     if hit_result == true
  239.       # 威力 0 以外的物理攻击的情况下
  240.       if skill.power != 0 and skill.atk_f > 0
  241.         # 状态冲击解除
  242.         remove_states_shock
  243.         # 设置有效标志
  244.         effective = true
  245.       end
  246.       # HP 的伤害减法运算
  247.       last_hp = self.hp
  248.       self.hp -= self.damage
  249.       effective |= self.hp != last_hp
  250.       # 状态变化
  251.       @state_changed = false
  252.       effective |= states_plus(skill.plus_state_set)
  253.       effective |= states_minus(skill.minus_state_set)
  254.       # 威力为 0 的场合
  255.       if skill.power == 0
  256.         # 伤害设置为空的字串
  257.         self.damage = ""
  258.         # 状态没有变化的情况下
  259.         unless @state_changed
  260.           # 伤害设置为 "Miss"
  261.           self.damage = "Miss"
  262.         end
  263.       end
  264.     # Miss 的情况下
  265.     else
  266.       # 伤害设置为 "Miss"
  267.       self.damage = "Miss"
  268.     end
  269.     # 不在战斗中的情况下
  270.     unless $game_temp.in_battle
  271.       # 伤害设置为 nil
  272.       self.damage = nil
  273.     end
  274.     # 过程结束
  275.     return effective
  276.   end
  277. end
  278. #==============================================================================
  279. # ■ Sprite_Battler
  280. #------------------------------------------------------------------------------
  281. #  战斗显示用活动块。Game_Battler 类的实例监视、
  282. # 活动块的状态的监视。
  283. #==============================================================================

  284. class Sprite_Battler < RPG::Sprite
  285.   #--------------------------------------------------------------------------
  286.   # ● 定义实例变量
  287.   #--------------------------------------------------------------------------
  288.   attr_accessor :battler                  # 战斗者
  289.   #--------------------------------------------------------------------------
  290.   # ● 初始化对像
  291.   #     viewport : 显示端口
  292.   #     battler  : 战斗者 (Game_Battler)
  293.   #--------------------------------------------------------------------------
  294.   def initialize(viewport, battler = nil)
  295.     super(viewport)
  296.     [url=home.php?mod=space&uid=133701]@battler[/url] = battler
  297.     @battler_visible = false
  298.   end
  299.   #--------------------------------------------------------------------------
  300.   # ● 释放
  301.   #--------------------------------------------------------------------------
  302.   def dispose
  303.     if self.bitmap != nil
  304.       self.bitmap.dispose
  305.     end
  306.     super
  307.   end
  308.   #--------------------------------------------------------------------------
  309.   # ● 刷新画面
  310.   #--------------------------------------------------------------------------
  311.   def update
  312.     super
  313.     # 战斗者为 nil 的情况下
  314.     if @battler == nil
  315.       self.bitmap = nil
  316.       loop_animation(nil)
  317.       return
  318.     end
  319.     # 文件名和色相与当前情况有差异的情况下
  320.     if @battler.battler_name != @battler_name or
  321.        @battler.battler_hue != @battler_hue
  322.       # 获取、设置位图
  323.       @battler_name = @battler.battler_name
  324.       @battler_hue = @battler.battler_hue
  325.       self.bitmap = RPG::Cache.battler(@battler_name, @battler_hue)
  326.       @width = bitmap.width
  327.       [url=home.php?mod=space&uid=291977]@height[/url] = bitmap.height
  328.       self.ox = @width / 2
  329.       self.oy = @height
  330.       # 如果是战斗不能或者是隐藏状态就把透明度设置成 0
  331.       if @battler.dead? or @battler.hidden
  332.         self.opacity = 0
  333.       end
  334.     end
  335.     # 动画 ID 与当前的情况有差异的情况下
  336.     if @battler.damage == nil and
  337.        @battler.state_animation_id != @state_animation_id
  338.       @state_animation_id = @battler.state_animation_id
  339.       loop_animation($data_animations[@state_animation_id])
  340.     end
  341.     # 应该被显示的角色的情况下
  342.     if @battler.is_a?(Game_Actor) and @battler_visible
  343.       # 不是主状态的时候稍稍降低点透明度
  344.       if $game_temp.battle_main_phase
  345.         self.opacity += 3 if self.opacity < 255
  346.       else
  347.         self.opacity -= 3 if self.opacity > 207
  348.       end
  349.     end
  350.     # 明灭
  351.     if @battler.blink
  352.       blink_on
  353.     else
  354.       blink_off
  355.     end
  356.     # 不可见的情况下
  357.     unless @battler_visible
  358.       # 出现
  359.       if not @battler.hidden and not @battler.dead? and
  360.          (@battler.damage == nil or @battler.damage_pop)
  361.         appear
  362.         @battler_visible = true
  363.       end
  364.     end
  365.     # 可见的情况下
  366.     if @battler_visible
  367.       # 逃跑
  368.       if @battler.hidden
  369.         $game_system.se_play($data_system.escape_se)
  370.         escape
  371.         @battler_visible = false
  372.       end
  373.       # 白色闪烁
  374.       if @battler.white_flash
  375.         whiten
  376.         @battler.white_flash = false
  377.       end
  378.       # 动画
  379.       if @battler.animation_id != 0
  380.         animation = $data_animations[@battler.animation_id]
  381.         animation(animation, @battler.animation_hit)
  382.         @battler.animation_id = 0
  383.       end
  384.       # 伤害
  385.       if @battler.damage_pop
  386.         damage(@battler.damage, @battler.critical, @battler.pd)
  387.         @battler.damage = nil
  388.         @battler.critical = false
  389.         @battler.damage_pop = false
  390.       end
  391.       # korapusu
  392.       if @battler.damage == nil and @battler.dead?
  393.         if @battler.is_a?(Game_Enemy)
  394.           pd = @battler.pd
  395.           v = pd[3] == nil ? 100 : pd[3]
  396.           p = pd[4] == nil ? 100 : pd[4]
  397.           if pd[2] != nil
  398.             Audio.se_play(PD::FIL + pd[2], v, p)
  399.           else
  400.             $game_system.se_play($data_system.enemy_collapse_se)
  401.           end
  402.         else
  403.           pd = @battler.pd
  404.           v = pd[3] == nil ? 100 : pd[3]
  405.           p = pd[4] == nil ? 100 : pd[4]
  406.           if pd[2] != nil
  407.             Audio.se_play(PD::FIL + pd[2], v, p)
  408.           else
  409.             $game_system.se_play($data_system.actor_collapse_se)
  410.           end
  411.         end
  412.         collapse
  413.         @battler_visible = false
  414.       end
  415.     end
  416.     # 设置活动块的坐标
  417.     self.x = @battler.screen_x
  418.     self.y = @battler.screen_y
  419.     self.z = @battler.screen_z
  420.   end
  421. end
复制代码

评分

参与人数 1星屑 +150 收起 理由
myownroc + 150 认可答案

查看全部评分

回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
55 小时
注册时间
2013-12-29
帖子
51
5
 楼主| 发表于 2014-2-3 23:18:49 | 只看该作者
恋′挂机 发表于 2014-2-3 22:32

十分感谢!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-12-1 20:45

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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