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

Project1

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

[已经解决] 远程消耗物,请修改一下没有指定消耗物无法攻击

[复制链接]

Lv3.寻梦者

梦石
0
星屑
3065
在线时间
1429 小时
注册时间
2009-7-27
帖子
1448
跳转到指定楼层
1
发表于 2019-3-4 19:08:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 爆焰 于 2019-3-4 23:04 编辑

就是指定消耗物没有了,攻击选项显示灰色无法选择


博客:我的博客

Lv5.捕梦者

梦石
10
星屑
39440
在线时间
1914 小时
注册时间
2010-11-14
帖子
3315

R考场第七期纪念奖

2
发表于 2019-3-4 20:44:01 | 只看该作者
RUBY 代码复制
  1. module Sound
  2.   def self.play_buzzer
  3.     $game_system.se_play($data_system.buzzer_se)
  4.   end
  5. end
  6.  
  7. class Game_Actor
  8.   def attack_item_enough?
  9.     return true if (item_id = $data_classes[self.class_id].arrow_id) == 0
  10.     $game_party.item_number(item_id) > 0
  11.   end
  12. end
  13.  
  14. class Scene_Battle
  15.   #--------------------------------------------------------------------------
  16.   # ● 刷新画面
  17.   #--------------------------------------------------------------------------
  18.   alias cld99_update update
  19.   def update
  20.     if @actor_command_window && @active_battler && @active_battler.is_a?(Game_Actor)
  21.       if !@active_battler.attack_item_enough?
  22.         @actor_command_window.disable_item(0)
  23.       else
  24.         @actor_command_window.refresh
  25.       end
  26.     end
  27.     cld99_update
  28.   end
  29.   #--------------------------------------------------------------------------
  30.   # ● 刷新画面 (角色命令回合 : 基本命令)
  31.   #--------------------------------------------------------------------------
  32.   alias cld99_update_phase3_basic_command update_phase3_basic_command
  33.   def update_phase3_basic_command
  34.     if Input.trigger?(Input::C)
  35.       if @actor_command_window.index == 0 #攻击
  36.         return Sound.play_buzzer if !@active_battler.attack_item_enough?
  37.       end
  38.     end
  39.     cld99_update_phase3_basic_command
  40.   end
  41.   #--------------------------------------------------------------------------
  42.   # ● 生成基本行动结果
  43.   #--------------------------------------------------------------------------
  44.   alias make_basic_action_result_for_sp_cost make_basic_action_result
  45.   def make_basic_action_result
  46.     # 攻击的情况下
  47.     if @active_battler.current_action.basic == 0
  48.       if @active_battler.is_a?(Game_Actor)
  49.         if (item_id = $data_classes[@active_battler.class_id].arrow_id) > 0
  50.           $game_party.lose_item(item_id, 1)
  51.         end
  52.       end
  53.     end
  54.     make_basic_action_result_for_sp_cost
  55.   end
  56. end


点评

我删掉文件了,你再给我看看你原来的脚本  发表于 2019-3-5 19:54
你好,发现一个问题。就是角色装备非远程的武器时也消耗物品,没了同样无法攻击  发表于 2019-3-5 19:47
谢谢  发表于 2019-3-4 23:04
用头画头像,用脚写脚本
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
3065
在线时间
1429 小时
注册时间
2009-7-27
帖子
1448
3
 楼主| 发表于 2019-3-5 21:28:25 | 只看该作者
KB.Driver 发表于 2019-3-4 20:44
module Sound
  def self.play_buzzer
    $game_system.se_play($data_system.buzzer_se)


  1. $STARS_远程属性 = 17

  2. module RPG
  3.   class Class
  4.     def name
  5.       if @element_ranks[$STARS_远程属性] == 1
  6.         return @name.split(/,/)[0]
  7.       else
  8.         return @name
  9.       end
  10.     end
  11.     def arrow_id
  12.       if @element_ranks[$STARS_远程属性] == 1
  13.         return @name.split(/,/)[1].to_i
  14.       else
  15.         return 0
  16.       end
  17.     end
  18.   end
  19.   class Weapon
  20.     def name
  21.       if @element_set.include?($STARS_远程属性)
  22.         return @name.split(/,/)[0]
  23.       else
  24.         return @name
  25.       end
  26.     end
  27.     def animation2_id(flag = false)
  28.       if flag
  29.         return @name.split(/,/)[1].to_i
  30.       else
  31.         return @animation2_id
  32.       end
  33.     end
  34.   end
  35. end

  36. class Game_Battler
  37.   #--------------------------------------------------------------------------
  38.   # ● 可以使用特技的判定
  39.   #     skill_id : 特技 ID
  40.   #--------------------------------------------------------------------------
  41.   def skill_can_use?(skill_id)
  42.     # SP 不足的情况下不能使用
  43.     if $data_skills[skill_id].sp_cost > self.sp
  44.       return false
  45.     end
  46.     # 战斗不能的情况下不能使用
  47.     if dead?
  48.       return false
  49.     end
  50.     # 沉默状态的情况下、物理特技以外的特技不能使用
  51.     if $data_skills[skill_id].atk_f == 0 and self.restriction == 1
  52.       return false
  53.     end
  54.     if self.is_a?(Game_Actor) and
  55.       $data_skills[skill_id].element_set.include?($STARS_远程属性) and
  56.       $game_party.item_number($data_classes[self.class_id].arrow_id) == 0
  57.       return false
  58.     end
  59.     # 获取可以使用的时机
  60.     occasion = $data_skills[skill_id].occasion
  61.     # 战斗中的情况下
  62.     if $game_temp.in_battle
  63.       # [平时] 或者是 [战斗中] 可以使用
  64.       return (occasion == 0 or occasion == 1)
  65.     # 不是战斗中的情况下
  66.     else
  67.       # [平时] 或者是 [菜单中] 可以使用
  68.       return (occasion == 0 or occasion == 2)
  69.     end
  70.   end
  71.   #--------------------------------------------------------------------------
  72.   # ● 应用通常攻击效果
  73.   #     attacker : 攻击者 (battler)
  74.   #--------------------------------------------------------------------------
  75.   def attack_effect(attacker)
  76.     # 清除会心一击标志
  77.     self.critical = false
  78.     # 第一命中判定
  79.     hit_result = (rand(100) < attacker.hit)
  80.     # 命中的情况下
  81.     if hit_result == true
  82.       # 计算基本伤害
  83.       atk = [attacker.atk - self.pdef / 2, 0].max
  84.       self.damage = atk * (20 + attacker.str) / 20
  85.       # 属性修正
  86.       self.damage *= elements_correct(attacker.element_set)
  87.       self.damage /= 100
  88.       # 伤害符号正确的情况下
  89.       if self.damage > 0
  90.         # 会心一击修正
  91.         if rand(100) < 4 * attacker.dex / self.agi
  92.           self.damage *= 2
  93.           self.critical = true
  94.         end
  95.         # 防御修正
  96.         if self.guarding?
  97.           self.damage /= 2
  98.         end
  99.       end
  100.       # 分散
  101.       if self.damage.abs > 0
  102.         amp = [self.damage.abs * 15 / 100, 1].max
  103.         self.damage += rand(amp+1) + rand(amp+1) - amp
  104.       end
  105.       # 第二命中判定
  106.       eva = 8 * self.agi / attacker.dex + self.eva
  107.       hit = self.damage < 0 ? 100 : 100 - eva
  108.       hit = self.cant_evade? ? 100 : hit
  109.       hit_result = (rand(100) < hit)
  110.     end
  111.     # 命中的情况下
  112.     if hit_result == true
  113.       # 状态冲击解除
  114.       remove_states_shock
  115.       # HP 的伤害计算
  116.       if attacker.is_a?(Game_Actor) and $data_classes[attacker.class_id].element_ranks[$STARS_远程属性] == 1
  117.         if $game_party.item_number($data_classes[attacker.class_id].arrow_id) == 0
  118.           self.damage /= 2
  119.         else
  120.           $game_party.lose_item($data_classes[attacker.class_id].arrow_id, 1)
  121.         end
  122.       end
  123.       self.hp -= self.damage
  124.       # 状态变化
  125.       @state_changed = false
  126.       states_plus(attacker.plus_state_set)
  127.       states_minus(attacker.minus_state_set)
  128.     # Miss 的情况下
  129.     else
  130.       # 伤害设置为 "Miss"
  131.       self.damage = "Miss"
  132.       # 清除会心一击标志
  133.       self.critical = false
  134.     end
  135.     # 过程结束
  136.     return true
  137.   end
  138.   #--------------------------------------------------------------------------
  139.   # ● 应用特技效果
  140.   #     user  : 特技的使用者 (battler)
  141.   #     skill : 特技
  142.   #--------------------------------------------------------------------------
  143.   def skill_effect(user, skill)
  144.     # 清除会心一击标志
  145.     self.critical = false
  146.     # 特技的效果范围是 HP 1 以上的己方、自己的 HP 为 0、
  147.     # 或者特技的效果范围是 HP 0 的己方、自己的 HP 为 1 以上的情况下
  148.     if ((skill.scope == 3 or skill.scope == 4) and self.hp == 0) or
  149.        ((skill.scope == 5 or skill.scope == 6) and self.hp >= 1)
  150.       # 过程结束
  151.       return false
  152.     end
  153.     # 清除有效标志
  154.     effective = false
  155.     # 公共事件 ID 是有效的情况下,设置为有效标志
  156.     effective |= skill.common_event_id > 0
  157.     # 第一命中判定
  158.     hit = skill.hit
  159.     if skill.atk_f > 0
  160.       hit *= user.hit / 100
  161.     end
  162.     hit_result = (rand(100) < hit)
  163.     # 不确定的特技的情况下设置为有效标志
  164.     effective |= hit < 100
  165.     # 命中的情况下
  166.     if hit_result == true
  167.       # 计算威力
  168.       power = skill.power + user.atk * skill.atk_f / 100
  169.       if power > 0
  170.         power -= self.pdef * skill.pdef_f / 200
  171.         power -= self.mdef * skill.mdef_f / 200
  172.         power = [power, 0].max
  173.       end
  174.       # 计算倍率
  175.       rate = 20
  176.       rate += (user.str * skill.str_f / 100)
  177.       rate += (user.dex * skill.dex_f / 100)
  178.       rate += (user.agi * skill.agi_f / 100)
  179.       rate += (user.int * skill.int_f / 100)
  180.       # 计算基本伤害
  181.       self.damage = power * rate / 20
  182.       # 属性修正
  183.       self.damage *= elements_correct(skill.element_set)
  184.       self.damage /= 100
  185.       # 伤害符号正确的情况下
  186.       if self.damage > 0
  187.         # 防御修正
  188.         if self.guarding?
  189.           self.damage /= 2
  190.         end
  191.       end
  192.       # 分散
  193.       if skill.variance > 0 and self.damage.abs > 0
  194.         amp = [self.damage.abs * skill.variance / 100, 1].max
  195.         self.damage += rand(amp+1) + rand(amp+1) - amp
  196.       end
  197.       # 第二命中判定
  198.       eva = 8 * self.agi / user.dex + self.eva
  199.       hit = self.damage < 0 ? 100 : 100 - eva * skill.eva_f / 100
  200.       hit = self.cant_evade? ? 100 : hit
  201.       hit_result = (rand(100) < hit)
  202.       # 不确定的特技的情况下设置为有效标志
  203.       effective |= hit < 100
  204.     end
  205.     # 命中的情况下
  206.     if hit_result == true
  207.       # 威力 0 以外的物理攻击的情况下
  208.       if skill.power != 0 and skill.atk_f > 0
  209.         # 状态冲击解除
  210.         remove_states_shock
  211.         # 设置有效标志
  212.         effective = true
  213.       end
  214.       # HP 的伤害减法运算
  215.       last_hp = self.hp
  216.       self.hp -= self.damage
  217.       if user.is_a?(Game_Actor) and
  218.         skill.element_set.include?($STARS_远程属性)
  219.         $game_party.lose_item($data_classes[user.class_id].arrow_id, 1)
  220.       end
  221.       effective |= self.hp != last_hp
  222.       # 状态变化
  223.       @state_changed = false
  224.       effective |= states_plus(skill.plus_state_set)
  225.       effective |= states_minus(skill.minus_state_set)
  226.       # 威力为 0 的场合
  227.       if skill.power == 0
  228.         # 伤害设置为空的字串
  229.         self.damage = ""
  230.         # 状态没有变化的情况下
  231.         unless @state_changed
  232.           # 伤害设置为 "Miss"
  233.           self.damage = "Miss"
  234.         end
  235.       end
  236.     # Miss 的情况下
  237.     else
  238.       # 伤害设置为 "Miss"
  239.       self.damage = "Miss"
  240.     end
  241.     # 不在战斗中的情况下
  242.     unless $game_temp.in_battle
  243.       # 伤害设置为 nil
  244.       self.damage = nil
  245.     end
  246.     # 过程结束
  247.     return effective
  248.   end
  249. end

  250. =begin
  251. class Game_Actor < Game_Battler
  252.   #--------------------------------------------------------------------------
  253.   # ● 普通攻击 获取对像方动画 ID
  254.   #--------------------------------------------------------------------------
  255.   def animation2_id
  256.     weapon = $data_weapons[@weapon_id]
  257.     if weapon.element_set.include?($STARS_远程属性)
  258.       ani = weapon != nil ? weapon.animation2_id($game_party.item_number($data_classes[@class_id].arrow_id) == 0) : 0
  259.     else
  260.       ani = weapon != nil ? weapon.animation2_id : 0
  261.     end
  262.     return ani
  263.   end
  264. end
  265. =end


  266. module Sound
  267.   def self.play_buzzer
  268.     $game_system.se_play($data_system.buzzer_se)
  269.   end
  270. end

  271. class Game_Actor
  272.   def attack_item_enough?
  273.     return true if (item_id = $data_classes[self.class_id].arrow_id) == 0
  274.     $game_party.item_number(item_id) > 0
  275.   end
  276. end

  277. class Scene_Battle
  278.   #--------------------------------------------------------------------------
  279.   # ● 刷新画面
  280.   #--------------------------------------------------------------------------
  281.   alias cld99_update update
  282.   def update
  283.     if @actor_command_window && @active_battler && @active_battler.is_a?(Game_Actor)
  284.       if !@active_battler.attack_item_enough?
  285.         @actor_command_window.disable_item(0)
  286.       else
  287.         @actor_command_window.refresh
  288.       end
  289.     end
  290.     cld99_update
  291.   end
  292.   #--------------------------------------------------------------------------
  293.   # ● 刷新画面 (角色命令回合 : 基本命令)
  294.   #--------------------------------------------------------------------------
  295.   alias cld99_update_phase3_basic_command update_phase3_basic_command
  296.   def update_phase3_basic_command
  297.     if Input.trigger?(Input::C)
  298.       if @actor_command_window.index == 0 #攻击
  299.         return Sound.play_buzzer if !@active_battler.attack_item_enough?
  300.       end
  301.     end
  302.     cld99_update_phase3_basic_command
  303.   end
  304.   #--------------------------------------------------------------------------
  305.   # ● 生成基本行动结果
  306.   #--------------------------------------------------------------------------
  307.   alias make_basic_action_result_for_sp_cost make_basic_action_result
  308.   def make_basic_action_result
  309.     # 攻击的情况下
  310.     if @active_battler.current_action.basic == 0
  311.       if @active_battler.is_a?(Game_Actor)
  312.         if (item_id = $data_classes[@active_battler.class_id].arrow_id) > 0
  313.           $game_party.lose_item(item_id, 1)
  314.         end
  315.       end
  316.     end
  317.     make_basic_action_result_for_sp_cost
  318.   end
  319. end
复制代码

博客:我的博客
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
10
星屑
39440
在线时间
1914 小时
注册时间
2010-11-14
帖子
3315

R考场第七期纪念奖

4
发表于 2019-3-5 21:53:12 | 只看该作者

RUBY 代码复制
  1. class Weapon
  2.   def consume_item?
  3.     element_set.include?($STARS_远程属性)
  4.   end
  5. end
  6.  
  7. class Game_Actor
  8.   alias attack_item_enough_weapon attack_item_enough?
  9.   def attack_item_enough?
  10.     return true if !consuming_item?
  11.     attack_item_enough_weapon
  12.   end
  13.  
  14.   def consuming_item?
  15.     $data_weapons[@weapon_id].consume_item?
  16.   end
  17. end
  18.  
  19. class Scene_Battle
  20.   #--------------------------------------------------------------------------
  21.   # ● 生成基本行动结果
  22.   #--------------------------------------------------------------------------
  23.   alias make_basic_action_result_for_sp_cost make_basic_action_result
  24.   def make_basic_action_result
  25.     # 攻击的情况下
  26.     if @active_battler.current_action.basic == 0
  27.       if @active_battler.is_a?(Game_Actor)
  28.         if (item_id = $data_classes[@active_battler.class_id].arrow_id) > 0
  29.           $game_party.lose_item(item_id, 1) if @active_battler.consuming_item?
  30.         end
  31.       end
  32.     end
  33.     make_basic_action_result_for_sp_cost
  34.   end
  35. end


再在下面新开一格放进去

点评

你好像喜欢把我分开发的脚本全都放在一起,我那些本来是应该在上一个的下面新开一格放进去的。  发表于 2019-3-6 17:53
就是设置一个角色可以装备远程,也可以装备近战的。近战的武器没点远程还是像远程一样的效果  发表于 2019-3-6 16:47
我不明白你为什么要弄可以不远程的远程职业,又要弄远程武器。直接弄武器不就好了  发表于 2019-3-6 11:04
改了以后变成这句显示出错  发表于 2019-3-6 01:11
你这个问题我没看明白。  发表于 2019-3-5 22:30

评分

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

查看全部评分

用头画头像,用脚写脚本
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
3065
在线时间
1429 小时
注册时间
2009-7-27
帖子
1448
5
 楼主| 发表于 2019-3-6 18:56:14 | 只看该作者
KB.Driver 发表于 2019-3-5 21:53
class Weapon
  def consume_item?
    element_set.include?($STARS_远程属性)

我照做了,可还是那样。
远程消耗物.7z (187.97 KB, 下载次数: 76)

博客:我的博客
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
10
星屑
39440
在线时间
1914 小时
注册时间
2010-11-14
帖子
3315

R考场第七期纪念奖

6
发表于 2019-3-6 20:04:53 | 只看该作者
爆焰 发表于 2019-3-6 18:56
我照做了,可还是那样。

我下载了你这个,运行起来好像没什么问题。
是不是跟其他脚本冲突了

点评

我知道问题出在哪了,就是把消耗物品定义成武器ID,而不是角色ID,装备远程武器才会消耗物品就行了  发表于 2019-3-6 23:19
我就是在这个范例,没别的脚本。注释掉之后确实没有出错的问题了,但是非远程还是消耗物品了,只是即使物品没了还能攻击就是了  发表于 2019-3-6 23:17
哦,对了。要把第一个空白处的41行至55行注释掉(或者删掉),不然可能会有stack level too deep  发表于 2019-3-6 20:06
用头画头像,用脚写脚本
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-4-25 12:50

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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