Project1

标题: 【FSL】中级向·装备天赋(EquipGifts) [打印本页]

作者: DeathKing    时间: 2010-11-20 17:32
标题: 【FSL】中级向·装备天赋(EquipGifts)
本帖最后由 DeathKing 于 2011-7-2 21:24 编辑
请注意,这个和【沉影不器】的VX复杂装备系统——装备天赋是两个不同的实现。设置的时候要注意一下,不用的哈希元素之间要用逗号分割!

Feature:
To Do:

Download:
[1.3]EquipGifts.rar (478.14 KB, 下载次数: 347)

See in FSL: http://rpg.blue/fsl/rgss/equipgifts/


  1. #===============================================================================
  2. # ■ [XP]装备天赋
  3. #    [XP]EquipGifts
  4. #-------------------------------------------------------------------------------
  5. #        允许武器具有一些特殊的属性,能力。目前支持按数值提升和按比率提升能力
  6. #    两种方式。
  7. #
  8. #    * 武器相关
  9. #      ① 数据库武器作成
  10. #         index = wep_make(org_index, gift_set=[], gifts_num=1, wep_index=0)
  11. #           - org_index : 母版武器 id 号;
  12. #           - gift_set  : [可选]天赋集合;
  13. #           - gifts_num : [可选]武器天赋数量;
  14. #           - wep_index : [可选]人为指定的武器 id 号;
  15. #
  16. #      ② 获得武器
  17. #         $game_party.gain_weapon(index,number)
  18. #           - index     : 武器 id 号,一般由 wep_make 返回作成武器的 id 号;
  19. #           - number    : 获得的数量
  20. #
  21. #    * 防具相关
  22. #      ① 数据库防具作成
  23. #         index = arm_make(org_index, gift_set=[], gifts_num=1, arm_index=0)
  24. #           - org_index : 母版防具 id 号;
  25. #           - gift_set  : [可选]天赋集合;
  26. #           - gifts_num : [可选]防具天赋数量;
  27. #           - arm_index : [可选]人为指定的防具 id 号;
  28. #
  29. #      ② 获得防具
  30. #         $game_party.gain_armor(index,number)
  31. #           - index     : 防具 id 号,一般由 arm_make 返回作成防具的 id 号;
  32. #           - number    : 获得的数量
  33. #
  34. #    * 本脚本的拓展
  35. #      ① 为天赋添加额外属性
  36. #         gift = Gift_Weapon.new({:the_default=>value, :your_property=>value})
  37. #
  38. #      ② 访问你添加的属性
  39. #         gift.your_property    <-- 这个技术使用了 method_missing 方法
  40. #         gift[your_property]
  41. #         gift.properties[your_property]
  42. #
  43. #      ③ 在 Game_Actor 修改对应方法
  44. #
  45. #-------------------------------------------------------------------------------
  46. #    更新作者: DeathKing
  47. #    许可协议: FSL
  48. #    引用网址: http://rpg.blue/thread-161697-1-1.html
  49. #-------------------------------------------------------------------------------
  50. #    - 1.3.0702  By DeathKing
  51. #      * 添加 method_missing ,使得扩展更加容易;
  52. #      * 优化了结构;
  53. #
  54. #    - 1.2.1226  By DeathKign
  55. #      * 使用Hash的方法传递参数,简化了传参;
  56. #
  57. #    - 1.1.1120  By DeathKing
  58. #      * 加入了按比例提升能力值的功能;
  59. #
  60. #    - 1.0.1001  By DeathKing
  61. #      * 初版;
  62. #
  63. #===============================================================================
复制代码

作者: 退屈£无聊    时间: 2010-11-20 20:36
发现我抢楼了- -
好吧,真的是很复杂的东西呢.猛的让我想到了轩辕剑汉之云. - -
支持一下.配合打造的话效果很惊人- -
作者: DeathKing    时间: 2010-11-20 20:46
回复 退屈£无聊 的帖子

为了保证兼容性,大量使用了alias,这样的话,F12可能引起Stack level too deep。
复杂得我打了好多字……
主要是我的游戏对于系统的要求差不多就是这样的。
作者: 黑白旋律    时间: 2010-11-20 20:50
以为是沉大。。
作者: arnie510    时间: 2010-11-27 02:21
脫下裝備會當機,不知道各位有沒有這個問題?
作者: enghao_lim    时间: 2010-11-27 21:23
其实……默认并没有对atk, pdef, mdef 进行定义 ... ,也就是说其实你的alias ... ,直接用local变量对默认值进行读取即可……
作者: as56901688    时间: 2010-12-4 20:50
绝对是个好家伙
作者: 静静乄哭泣    时间: 2010-12-4 22:19
这个比较像光明之魂的武器系统吧~
作者: DeathKing    时间: 2010-12-18 17:00
回复 enghao_lim 的帖子

O_O现在才看到。

其实不然,如果 atk() 没有被定义,使用 alias 时会产生 NameError 。而RGSS正是使用了元编程的 accessor 或者 reader 定义了 atk() (不然怎么从外部获取武器的攻击力呢?)。

使用 alias 只是出于兼容性和可扩展性的考虑。只是现在这个脚本有点复杂,尝试简单化中。
作者: enghao_lim    时间: 2010-12-18 23:17
回复 DeathKing 的帖子

attr_accessor :atk
def atk
  return @atk
end
其实我的意思是这样……只有读取,可是却可以写入……然后读取器并没啥特殊算法(-___-)
作者: DeathKing    时间: 2010-12-19 11:24
回复 enghao_lim 的帖子

理解不能。
作者: goahead    时间: 2010-12-23 11:25
提示: 作者被禁止或删除 内容自动屏蔽
作者: DeathKing    时间: 2010-12-23 12:39
回复 goahead 的帖子

简单的说就是用代码写代码,比如Ruby中的attr_accessor, attr_reader, attr_writer,attr。

反射也是元编程中的重要一部分。

详细可检索:Ruby 元编程。
作者: 双叶GL    时间: 2010-12-23 13:58
有收藏的必要,我比较喜欢修改后在自己使用,所以东西都收藏起来,总感觉,这代码太长了
作者: DeathKing    时间: 2010-12-23 21:38
回复 双叶GL 的帖子

现在这个有点麻烦,会被推翻的。

作者: 九夜神尊    时间: 2011-1-14 15:17
那那!想知道没有颠覆原有的装备系统,竟然能写出这样的脚本,求原理!
作者: DeathKing    时间: 2011-1-14 17:16
回复 九夜神尊 的帖子

不明白是什么意思,反正alias很好用。新版本用的是hash来才传递参数,代码比这个简单。
作者: aya163    时间: 2011-1-18 16:11
不错支持一下。
作者: DeathKing    时间: 2011-7-2 21:03
更新了下,不过推荐有一定基础的人使用。

还有些奇怪的脚本,请各位无视掉。
作者: 退屈£无聊    时间: 2011-7-4 13:59
本帖最后由 退屈£无聊 于 2011-7-4 14:01 编辑

提供建议如下:
我认为装备的天赋并不应该只有增加某方面的力量,而应该在增加某方面的力量的同时,适当地减少其他属性。(当然,某些王级装备除外。)我建议可以分成两块,一块是属性加成,一块是属性减少。在属性加成里抽取一项时,也有一定几率会在减少块里抽取一项。
而且设置天赋的方法有点怪= =。我建议写成Hash表的形式,增加/减少/乘以/除以,哪方面属性,点数。
而且,在测试的时候,发现会有2项相同的天赋同时垒加,出现了“重生的 重生的 XX”之类。介绍里面也会分成攻击+2,防御+3,然后又出现攻击+5。所以应该在读取完装备所有天赋的时候自动在介绍后面生成天赋所累计加的总量。
作者: DeathKing    时间: 2011-7-4 21:44
本帖最后由 DeathKing 于 2011-7-4 21:44 编辑
退屈£无聊 发表于 2011-7-4 13:59
提供建议如下:
我认为装备的天赋并不应该只有增加某方面的力量,而应该在增加某方面的力量的同时,适当地 ...

呵呵,是你对脚本理解的不到位,可能是我过于想把它变得“智能化”。你说的东西我是全部考虑到了的,你如果仔细看了的话,会发现有许多巧妙的地方。

1、属性点的计算是所有设置的代数和,增加自然是正数,减少即为负数。比如设置(的确是哈希表啊):
     {:id=>3,:name=>"狂热的",:des=>"攻击力-100,物理防御额外增加0.3倍 ",:atk=>-100,:pdef=>0.3,:price=>100}

    a)参数为整数,那么为加、减运算;
    b)参数为小数,那么为乘、除运算;
    c)武器天赋只负责计算武器天赋的额外增益,即在原能力值上叠加;

    使用 Integer 类和 Float 类对象是因为我不希望再用一个变量来设置加减乘除,我们有鸭子类型,为何不用呢?

2、天赋的 :des 属性即为天赋追加的属性。这是人为设定的。如果想要统计所有天赋增减的能力值,那么可以对其进行扩展。(可以通过判断 $fscript 来确定是否使用了本脚本)

3、附带了一个 内核加强(沉影不器) 脚本,里面有个生成不同随机数的脚本。

   
作者: 忧雪の伤    时间: 2011-7-6 20:43
确实长的可怕。简洁很重要啊,那样别人才方便去修改,更新。
作者: DeathKing    时间: 2011-7-6 21:35
本帖最后由 DeathKing 于 2011-7-6 21:43 编辑
忧雪の伤 发表于 2011-7-6 20:43
确实长的可怕。简洁很重要啊,那样别人才方便去修改,更新。


配置部分还是脚本长度?

前者和后者都没有办法精简了。不然就失去了强大的功能。

如果有人有更好的设置方法,可以写成外挂 / 插件脚本,并通知我一声。
作者: chd114    时间: 2012-5-28 13:45
RMXP没有吗?
作者: viktor    时间: 2012-5-30 11:25
其实可以 alias old_atk atk rescue 0 (噗




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1