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

Project1

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

[原创发布] 技能按照sp消耗排序系统(2016.11.8 更新)

[复制链接]

Lv2.观梦者

梦石
0
星屑
305
在线时间
95 小时
注册时间
2012-8-24
帖子
34
跳转到指定楼层
1
发表于 2016-11-8 12:39:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
理论上来说,后期技能多了,强力的技能都排在后面,很不方便,所以制作了一个技能按照sp消耗排序系统
由于sp消耗排序,太复杂,而且好像也没人写过这方面的脚本,只能自行研究
目的是达到强力技能在前面的效果,本意是sp消耗越大排的越前,由于不太擅长脚本,只能写个简单的脚本,实用性还行
原理简单粗暴,直接将原有的技能倒过来
Window_Skill第40行原来脚本
     for i in [email protected]
      skill = $data_skills[@actor.skills]
      if skill != nil
        @data.push(skill)
      end
    end
把这段脚本替换成
  1. #=============================================================================

  2. #技能按照sp消耗排序系统(2016.11.8 更新)

  3. #-----------------------------------------------------------------------------

  4. # 作者:我是好人a1a1

  5. #=============================================================================

  6.     for i in [email protected]
  7.         [email protected]
  8.         haoren=haoren-1
  9.         haoren=haoren-i
  10.         skill = $data_skills[@actor.skills[haoren]]
  11.       if skill != nil
  12.         @data.push(skill)
  13.       end
  14.     end
复制代码

这样技能就能按照sp消耗排序了

Lv5.捕梦者 (管理员)

老黄鸡

梦石
0
星屑
39837
在线时间
7491 小时
注册时间
2009-7-6
帖子
13485

开拓者贵宾

2
发表于 2016-11-9 13:25:16 | 只看该作者
楼主这个实现方法有点玄妙,在下没看出来是怎么取到SP值的……
我这里提供一个方法
  1. class Window_Skill < Window_Selectable
  2.   alias :_r :refresh
  3.   def refresh
  4.     if self.contents != nil
  5.       self.contents.dispose
  6.       self.contents = nil
  7.     end
  8.    @data = []
  9.     for i in [email protected]
  10.       skill = $data_skills[@actor.skills[i]]
  11.       if skill != nil
  12.         @data.push(skill)
  13.       end
  14.     end
  15.     @data = @data.sort_by{|sk| sk.sp_cost}.reverse
  16.     @item_max = @data.size
  17.     if @item_max > 0
  18.       self.contents = Bitmap.new(width - 32, row_max * 32)
  19.       for i in 0...@item_max
  20.         draw_item(i)
  21.       end
  22.     end
  23.   end
  24. end
复制代码


其实就是在45和46行之间添加了一行
  1. @data = @data.sort_by{|sk| sk.sp_cost}.reverse
复制代码
RGDirect - DirectX驱动的RGSS,点我了解.
RM全系列成套系统定制请联系QQ1213237796
不接受对其他插件维护的委托
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
305
在线时间
95 小时
注册时间
2012-8-24
帖子
34
3
 楼主| 发表于 2016-11-9 14:35:35 | 只看该作者
fux2 发表于 2016-11-9 13:25
楼主这个实现方法有点玄妙,在下没看出来是怎么取到SP值的……
我这里提供一个方法

目的是达到强力技能在前面的效果,本意是sp消耗越大排的越前,由于不太擅长脚本,只能写个简单的脚本,实用性还行
原理简单粗暴:直接将原有的技能倒过来
由于sp消耗排序,太复杂,而且好像也没人写过这方面的脚本,只能自行研究
这是我研究的成果,我尽力了。。。
只能做到将原有的技能倒过来,并不是真正的sp消耗排序
算是抛砖引玉吧
另外请教一下 复制代码 ,我不会弄 复制代码 这个功能,有劳管理员帮忙编辑了
其实,我的并不是真正的sp消耗排序,只是用了巧妙的方法,把技能排序重组
你写的代码,才是真正的sp消耗排序,我有时间再慢慢研究,再向你请教
最近一直很忙,而且一直在倒弄 按键重复上次技能 的系统


点评

加油  发表于 2016-11-9 14:42
回复 支持 反对

使用道具 举报

Lv4.逐梦者 (版主)

梦石
0
星屑
9497
在线时间
5073 小时
注册时间
2013-6-21
帖子
3580

开拓者贵宾剧作品鉴家

4
发表于 2016-11-11 09:05:06 | 只看该作者
如果是简单的倒排的话,改成这样就好了
RUBY 代码复制
  1. @data = @actors.skills.sort.reverse.map{|id| $data_skills[id]}
  2. @data.reject!{|skill| skill.nil?}

其中第二行的作用是删掉其中的无效值。如果很自信自己的数据没问题也可以不写。

最后,祝节日快乐早日成为 fux2 巨巨一样的大醋。

点评

谢谢  发表于 2016-11-22 07:41
醋瞎  发表于 2016-11-21 18:55
触瞎  发表于 2016-11-11 11:12
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
305
在线时间
95 小时
注册时间
2012-8-24
帖子
34
5
 楼主| 发表于 2016-11-21 13:34:36 | 只看该作者
RyanBern 发表于 2016-11-11 09:05
如果是简单的倒排的话,改成这样就好了
@data = @actors.skills.sort.reverse.map{|id| $data_skills}
@dat ...

仔细研究了你们的脚本,发现完全看不懂,搜遍了帮助文档,只找到sort和sort!,解析不出sort_by其中的逻辑,请问这种方法是在哪里学的?
sort
sort!
sort {|a, b| ... }
sort! {|a, b| ... }
对数组内容进行排序。若带块调用时,将把 2 个参数传给块,然后使用块的计算结果进行比较。若没有块时,使用 <=> 运算符进行比较。sort! 的对数组单元的排序过程具有破环性。

sort 将生成一个经过排序的新数组并返回它,sort! 通常会返回 self。

点评

请查看 Ruby 官网的文档,不要看 RMXP的F1,里面有很多方法都没有。  发表于 2016-11-21 13:41
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-5-8 23:01

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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