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

Project1

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

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

[复制链接]

Lv1.梦旅人

梦石
0
星屑
73
在线时间
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, 下载次数: 37)

数据库.png

技能书.rar

187.18 KB, 下载次数: 124

点评

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

评分

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

查看全部评分

Lv3.寻梦者

○赛

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

贵宾

2
发表于 2013-12-28 20:53:38 | 只看该作者
本帖最后由 天地有正气 于 2013-12-28 20:56 编辑

嗯哪,LZ不厚道的直接用了我技能书的开头呢~
然后就是脚本部分,虽然功能和我的差不多,但是目前感觉不如我的好呢~希望LZ以后能够修改下既然修改了Scene_Item那就改的彻底点
因为首先脚本比我的长的多,LZ还复制了很多没有修改的脚本,这些都是不必要的~
其次从兼容性角度说,我那个是添加了新方法,LZ则是重定义了update_target这个方法,如果其他人的脚本也要用到 update_target,那就很有可能冲突呢~
以上就是我的个人感觉,LZ不喜欢的话请无视呢~
LZ如果学会了alias那么这个脚本一定会非常好的!加油~
(p.s.P叔啊为什么我的技能书脚本没给糖啊测试可用啊~)

点评

怎么说呢……其实我觉得用公共事件一点也不麻烦……关键在于你怎么去设计这个公共事件的功能了。  发表于 2013-12-28 22:37
兼容性的确略低。。。但,会点脚本的人。。。整合这点脚本都不会?不可能吧?  发表于 2013-12-28 21:07
嗯。。。交流、交流。。。我是想免去了状态和公共事件才这样写的。。。谢谢建议。。。  发表于 2013-12-28 20:59

评分

参与人数 1星屑 +12 收起 理由
zhouzhuofan1 + 12

查看全部评分

回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
73
在线时间
436 小时
注册时间
2010-7-19
帖子
414
3
 楼主| 发表于 2013-12-28 20:53:48 | 只看该作者
本帖最后由 zhouzhuofan1 于 2013-12-28 21:03 编辑

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

点评

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

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
151 小时
注册时间
2012-2-4
帖子
114
4
发表于 2013-12-28 21:30:21 | 只看该作者
默默点赞=-=~这个系统帮了我很大的忙!

评分

参与人数 1星屑 +6 收起 理由
zhouzhuofan1 + 6 谢!

查看全部评分

=
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
9280
在线时间
2504 小时
注册时间
2011-5-20
帖子
15389

开拓者

5
发表于 2013-12-28 21:32:16 | 只看该作者
这样做出来其实没什么特别的嘛···如果实在要动sceneitem,那么数据库就不该有这种麻烦的手动添加···

点评

对不起,鄙人才陋技疏,IQ极低,表示无法理解“手动添加”。。。 求指点!= =  发表于 2013-12-28 21:41
[img]http://service.t.sina.com.cn/widget/qmd/5339802982/c02e16bd/7.png
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
130 小时
注册时间
2013-4-28
帖子
88
6
发表于 2013-12-28 21:37:27 | 只看该作者
一般都是直接用的公共事件……

评分

参与人数 1星屑 +6 收起 理由
zhouzhuofan1 + 6 谢!

查看全部评分

回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
9280
在线时间
2504 小时
注册时间
2011-5-20
帖子
15389

开拓者

7
发表于 2013-12-28 21:48:59 | 只看该作者
主要是你的脚本比事件学习技能显得更复杂但是却并没从本质上改变···也就是说其实你的脚本和楼上正气的脚本实际上是一种效果···而且他的脚本还要少些···如果你能在不占用数据库物品的情况下做出技能书那么这个脚本就会发生质的改变了

点评

好吧。。。我在楼上已经说了。。。我是想免去了状态和公共事件才这样写的。。。谢谢建议。。。  发表于 2013-12-28 21:55
[img]http://service.t.sina.com.cn/widget/qmd/5339802982/c02e16bd/7.png
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
9280
在线时间
2504 小时
注册时间
2011-5-20
帖子
15389

开拓者

8
发表于 2013-12-28 22:00:25 | 只看该作者
其实你和正气的技能书脚本都有致命缺陷——技能书种类+物品种类绝对不能超过数据库物品最大值···否则就要用到使游戏变卡的扩张数据库物品的脚本,而且技能书多了如果需要修改或者增减也不方便

点评

你说的这个问题压根就不是重点,数据库的设置就是为了方便软件制作者使用,如果不愿意用完全可以自己写常量来进行设定。  发表于 2013-12-28 23:02
OK...OK...我懂了。。。  发表于 2013-12-28 22:08
[img]http://service.t.sina.com.cn/widget/qmd/5339802982/c02e16bd/7.png
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
7 小时
注册时间
2015-7-6
帖子
15
9
发表于 2015-7-10 10:56:19 | 只看该作者
为什么我用不了啊
其他都设置好了
就是使用物品时无效就是用不了
我设置消耗品啊

点评

其他脚本冲突。 如果不是第4点的问题,可以参考顶楼的范例;如果是第4点的问题的话,我也没办法了,因为我这脚本的兼容性确实差  发表于 2015-7-10 18:53
请检查如下几点:1、[分散度]为[100] 2、[SP 回复量]为[所学习技能的 ID] 3、设置的[效果范围]为[己方] 4、[可能使用时]不为[不能使用] 4、查看是否与  发表于 2015-7-10 18:51

评分

参与人数 1星屑 +20 收起 理由
zhouzhuofan1 + 20

查看全部评分

回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
7 小时
注册时间
2015-7-6
帖子
15
10
发表于 2015-7-11 10:37:29 | 只看该作者
819617949 发表于 2015-7-10 10:56
为什么我用不了啊
其他都设置好了
就是使用物品时无效就是用不了

谢谢,我已经弄好了
原来是我的技能弄得是匕首才能释放
而我玩家是剑的所以不能用
谢谢而,你这脚本帮了我的大忙
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-28 00:05

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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