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

Project1

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

[原创发布] 技能书 修改Scene_Item

[复制链接]

Lv1.梦旅人

梦石
0
星屑
68
在线时间
436 小时
注册时间
2010-7-19
帖子
414
跳转到指定楼层
1
发表于 2013-12-28 20:14:59 | 显示全部楼层 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 zhouzhuofan1 于 2013-12-28 20:27 编辑
经常会看到有人问RMXP的技能书的技能书怎么制作,回答经常是状态法,但是,如果角色很多的话,用状态法实在太麻烦了,所以就有了这个脚本。

看到@天地有正气 写了个有关技能书的脚本,于是嘛。。。
我也动手写了个。。。思路不同。。。
用法:
替换原来的Scene_Item
"技能书"物品的分散度为 100
SP 回复量 为 所学习技能的 ID
如果还是不会的话请看楼下截图或范例。。。
先上脚本(脚本修改的地方前面带“★”、“☆”):
  1. #==============================================================================
  2. # ■ Scene_Item
  3. #------------------------------------------------------------------------------
  4. #  处理物品画面的类。
  5. #   "技能书"物品的分散度为 100
  6. #   SP 回复量 为 所学习技能的 ID
  7. #   ━━By zx56783586
  8. #==============================================================================
  9. class Scene_Item
  10.   #--------------------------------------------------------------------------
  11.   # ● 主处理
  12.   #--------------------------------------------------------------------------
  13.   def main
  14.     # 生成帮助窗口、物品窗口
  15.     @help_window = Window_Help.new
  16.     @item_window = Window_Item.new
  17.     # 关联帮助窗口
  18.     @item_window.help_window = @help_window
  19.     # 生成目标窗口 (设置为不可见・不活动)
  20.     @target_window = Window_Target.new
  21.     @target_window.visible = false
  22.     @target_window.active = false
  23.     # 执行过度
  24.     Graphics.transition
  25.     # 主循环
  26.     loop do
  27.       # 刷新游戏画面
  28.       Graphics.update
  29.       # 刷新输入信息
  30.       Input.update
  31.       # 刷新画面
  32.       update
  33.       # 如果画面切换就中断循环
  34.       if $scene != self
  35.         break
  36.       end
  37.     end
  38.     # 装备过渡
  39.     Graphics.freeze
  40.     # 释放窗口
  41.     @help_window.dispose
  42.     @item_window.dispose
  43.     @target_window.dispose
  44.   end
  45.   #--------------------------------------------------------------------------
  46.   # ● 刷新画面
  47.   #--------------------------------------------------------------------------
  48.   def update
  49.     # 刷新窗口
  50.     @help_window.update
  51.     @item_window.update
  52.     @target_window.update
  53.     # 物品窗口被激活的情况下: 调用 update_item
  54.     if @item_window.active
  55.       update_item
  56.       return
  57.     end
  58.     # 目标窗口被激活的情况下: 调用 update_target
  59.     if @target_window.active
  60.       update_target
  61.       return
  62.     end
  63.   end
  64.   #--------------------------------------------------------------------------
  65.   # ● 刷新画面 (物品窗口被激活的情况下)
  66.   #--------------------------------------------------------------------------
  67.   def update_item
  68.     # 按下 B 键的情况下
  69.     if Input.trigger?(Input::B)
  70.       # 演奏取消 SE
  71.       $game_system.se_play($data_system.cancel_se)
  72.       # 切换到菜单画面
  73.       $scene = Scene_Menu.new(0)
  74.       return
  75.     end
  76.     # 按下 C 键的情况下
  77.     if Input.trigger?(Input::C)
  78.       # 获取物品窗口当前选中的物品数据
  79.       @item = @item_window.item
  80.       # 不使用物品的情况下
  81.       unless @item.is_a?(RPG::Item)
  82.         # 演奏冻结 SE
  83.         $game_system.se_play($data_system.buzzer_se)
  84.         return
  85.       end
  86.       # 不能使用的情况下
  87.       unless $game_party.item_can_use?(@item.id)
  88.         # 演奏冻结 SE
  89.         $game_system.se_play($data_system.buzzer_se)
  90.         return
  91.       end
  92.       # 演奏确定 SE
  93.       $game_system.se_play($data_system.decision_se)
  94.       # 效果范围是我方的情况下
  95.       if @item.scope >= 3
  96.         # 激活目标窗口
  97.         @item_window.active = false
  98.         @target_window.x = (@item_window.index + 1) % 2 * 304
  99.         @target_window.visible = true
  100.         @target_window.active = true
  101.         # 设置效果范围 (单体/全体) 的对应光标位置
  102.         if @item.scope == 4 || @item.scope == 6
  103.           @target_window.index = -1
  104.         else
  105.           @target_window.index = 0
  106.         end
  107.       # 效果在我方以外的情况下
  108.       else
  109.         # 公共事件 ID 有效的情况下
  110.         if @item.common_event_id > 0
  111.           # 预约调用公共事件
  112.           $game_temp.common_event_id = @item.common_event_id
  113.           # 演奏物品使用时的 SE
  114.           $game_system.se_play(@item.menu_se)
  115.           # 消耗品的情况下
  116.           if @item.consumable
  117.             # 使用的物品数减 1
  118.             $game_party.lose_item(@item.id, 1)
  119.             # 再描绘物品窗口的项目
  120.             @item_window.draw_item(@item_window.index)
  121.           end
  122.           # 切换到地图画面
  123.           $scene = Scene_Map.new
  124.           return
  125.         end
  126.       end
  127.       return
  128.     end
  129.   end
  130.   #--------------------------------------------------------------------------
  131.   # ● 刷新画面 (目标窗口被激活的情况下)
  132.   #--------------------------------------------------------------------------
  133.   def update_target
  134.     # 按下 B 键的情况下
  135.     if Input.trigger?(Input::B)
  136.       # 演奏取消 SE
  137.       $game_system.se_play($data_system.cancel_se)
  138.       # 由于物品用完而不能使用的场合
  139.       unless $game_party.item_can_use?(@item.id)
  140.         # 再次生成物品窗口的内容
  141.         @item_window.refresh
  142.       end
  143.       # 删除目标窗口
  144.       @item_window.active = true
  145.       @target_window.visible = false
  146.       @target_window.active = false
  147.       return
  148.     end
  149.     # 按下 C 键的情况下
  150.     if Input.trigger?(Input::C)
  151.       # 如果物品用完的情况下
  152.       if $game_party.item_number(@item.id) == 0
  153.         # 演奏冻结 SE
  154.         $game_system.se_play($data_system.buzzer_se)
  155.         return
  156.       end
  157.       # 目标是全体的情况下
  158.       if @target_window.index == -1
  159.         #★
  160.         if @item.variance == 100
  161.           case $game_party.actors.size
  162.           when 1
  163.             $game_party.actors[0].learn_skill(@item.recover_sp)
  164.           when 2
  165.             $game_party.actors[0].learn_skill(@item.recover_sp)
  166.             $game_party.actors[1].learn_skill(@item.recover_sp)
  167.           when 3
  168.             $game_party.actors[0].learn_skill(@item.recover_sp)
  169.             $game_party.actors[1].learn_skill(@item.recover_sp)
  170.             $game_party.actors[2].learn_skill(@item.recover_sp)
  171.           when 4
  172.             $game_party.actors[0].learn_skill(@item.recover_sp)
  173.             $game_party.actors[1].learn_skill(@item.recover_sp)
  174.             $game_party.actors[2].learn_skill(@item.recover_sp)
  175.             $game_party.actors[3].learn_skill(@item.recover_sp)
  176.           end
  177.           $game_party.lose_item(@item.id, 1)
  178.           @item_window.draw_item(@item_window.index)
  179.         else
  180.           used = false
  181.           for i in $game_party.actors
  182.             used |= i.item_effect(@item)
  183.           end
  184.         end
  185.         #☆
  186.         # 对同伴全体应用物品使用效果
  187.       end
  188.       # 目标是单体的情况下
  189.       if @target_window.index >= 0
  190.         #★
  191.         if @item.variance == 100
  192.           $game_party.actors[@target_window.index].learn_skill(@item.recover_sp)
  193.           $game_party.lose_item(@item.id, 1)
  194.           @item_window.draw_item(@item_window.index)
  195.         else
  196.           # 对目标角色应用物品的使用效果
  197.           target = $game_party.actors[@target_window.index]
  198.           used = target.item_effect(@item)
  199.         end
  200.         #☆
  201.       end
  202.       # 使用物品的情况下
  203.       if used
  204.         # 演奏物品使用时的 SE
  205.         $game_system.se_play(@item.menu_se)
  206.         # 消耗品的情况下
  207.         if @item.consumable
  208.           # 使用的物品数减 1
  209.           $game_party.lose_item(@item.id, 1)
  210.           # 再描绘物品窗口的项目
  211.           @item_window.draw_item(@item_window.index)
  212.         end
  213.         # 再生成目标窗口的内容
  214.         @target_window.refresh
  215.         # 全灭的情况下
  216.         if $game_party.all_dead?
  217.           # 切换到游戏结束画面
  218.           $scene = Scene_Gameover.new
  219.           return
  220.         end
  221.         # 公共事件 ID 有效的情况下
  222.         if @item.common_event_id > 0
  223.           # 预约调用公共事件
  224.           $game_temp.common_event_id = @item.common_event_id
  225.           # 切换到地图画面
  226.           $scene = Scene_Map.new
  227.           return
  228.         end
  229.       end
  230.       # 无法使用物品的情况下
  231.       unless used
  232.         # 演奏冻结 SE
  233.         $game_system.se_play($data_system.buzzer_se)
  234.       end
  235.       return
  236.     end
  237.   end
  238. end
复制代码
@protosssonny   

数据库.png (46.52 KB, 下载次数: 20)

数据库.png

技能书.rar

187.18 KB, 下载次数: 124

点评

总之···这个脚本还是有待改进的···  发表于 2013-12-28 22:22
总之···这个脚本还是有待改进的···  发表于 2013-12-28 22:21

评分

参与人数 1星屑 +200 收起 理由
怪蜀黍 + 200 发布奖励

查看全部评分

Lv1.梦旅人

梦石
0
星屑
68
在线时间
436 小时
注册时间
2010-7-19
帖子
414
2
 楼主| 发表于 2013-12-28 20:53:48 | 显示全部楼层
本帖最后由 zhouzhuofan1 于 2013-12-28 21:03 编辑

不用状态,不用公共事件,
能否完爆“状态法”?求“捉虫”。
好吧,每次看到契约的人总会有种莫名其妙的抵触感。。。
@亿万星辰  @凝冰剑斩  

点评

你思路是有了,但是下手的地方不太对……建议配合一下物品属性,再从更基础的地方改起,比如物品效果发挥作用的地方。  发表于 2013-12-28 22:55
你应该再@P叔  发表于 2013-12-28 21:27
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-5-6 05:50

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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