查看: 77|回复: 0

[转载发布] 【简易坑爹系列】武器、装备及状态限制技能脚本

[复制链接]
  • TA的每日心情
    开心
    3 天前
  • 签到天数: 37 天

    连续签到: 3 天

    [LV.5]常住居民I

    2028

    主题

    32

    回帖

    7260

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    VIP
    0
    卡币
    5184
    OK点
    16
    积分
    7260
    发表于 同元一千年八月六日(秋) | 显示全部楼层 |阅读模式
    随手写了个脚本来回答问题RUBY 代码
    1. #===============================================================================
    2. # ■ 【简易坑爹系列】武器、装备及状态限制技能脚本
    3. #-------------------------------------------------------------------------------
    4. # 使用方法:
    5. #   1. 插入Game_Actor之后,Main之前的任意位置。
    6. #   1. 在下面设置需要被视为武器种类的属性名称。
    7. #   2. 在属性列表内增加相对应的属性
    8. #   3. 利用武器属性来设置种类,每个武器只能归类到一个种类。
    9. #   4. 利用技能属性来设置发动技能需要的武器种类,可以设置多个,但只需满足其中
    10. #      一个便可发动。
    11. #   5. 没有设定条件的技能在任何武器或没有武器的情况下皆可发动。
    12. #   6. 上面所述皆可运用在装备及状态
    13. #===============================================================================
    14. module WLS
    15.   #-----------------------------------------------------------------------------
    16.   # 名称列在此的属性会被视为武器种类处理。
    17.   # 被视为武器种类的属性将不会对伤害造成任何影响。
    18.   #-----------------------------------------------------------------------------
    19.   TYPES = ["剑", "刀", "杖"]
    20.   #-----------------------------------------------------------------------------
    21.   unlessdefined?(ACTOR)
    22.     ACTOR  = ::Game_Actor
    23.     WEAPON = ::RPG::Weapon
    24.     SKILL  = ::RPG::Skill
    25.     ITEM   = ::RPG::Item
    26.     ARMOR  = ::RPG::Armor
    27.     ENEMY  = ::RPG::Enemy
    28.     CLASS  = ::RPG::Class
    29.     STATE  = ::RPG::State
    30.   end
    31.   module_function
    32.   def elementSetClass(claz, prefix = '')
    33.     copy_const(::Class.new(claz){
    34.       define_method(prefix.to_s + 'element_set')do
    35.         set = super.clone
    36.         temp = ::WLS::TYPES.map{|t|$data_system.elements.index(t)}
    37.         set.delete_if{|e|temp.include?(e)}
    38.         return set
    39.       end
    40.     })
    41.   end
    42.   def elementRanksClass(claz)
    43.     copy_const(::Class.new(claz){
    44.       def element_ranks
    45.         ranks = super.clone
    46.         ::WLS::TYPES.eachdo |t|
    47.           ranks[$data_system.elements.index(t)] = 3
    48.         end
    49.         return ranks
    50.       end
    51.     })
    52.   end
    53.   def copy_const(claz)
    54.     claz.superclass.constants.eachdo |c|
    55.       claz.const_set(c, claz.superclass.const_get(c))
    56.     end
    57.     return claz
    58.   end
    59.   def define_type(claz, var)
    60.     claz.const_set(:VAR, var)
    61.     claz.class_evaldo
    62.       def type
    63.         temp = WLS::TYPES.map{|t|$data_system.elements.index(t)}
    64.         return instance_variable_get(self.class::VAR).find{|e|temp.include?(e)}
    65.       end
    66.     end
    67.   end
    68. end
    69. Game_Actor = Class.new(WLS::ACTOR)do
    70.   def skill_can_use?(skill)
    71.     orig = super(skill)
    72.     skill = skill.is_a?(RPG::Skill) ? skill : $data_skills[skill]
    73.     types = [$data_weapons[self.weapon_id].type]
    74.     types |= [@armor1_id, @armor2_id, @armor3_id, @armor4_id].map{|i|$data_armors[i].type}
    75.     types |= @states.map{|s|$data_states[s].type}
    76.     return((skill.required_types.empty? or skill.required_types.any?{|t|types.include?(t)})and orig)
    77.   end
    78. end
    79. module RPG
    80.   Weapon = ::WLS.elementSetClass(::WLS::WEAPON)
    81.   Skill = ::WLS.elementSetClass(::WLS::SKILL)
    82.   Item = ::WLS.elementSetClass(::WLS::ITEM)
    83.   Armor = ::WLS.elementSetClass(::WLS::ARMOR, :guard_)
    84.   State = ::WLS.elementSetClass(::WLS::STATE, :guard_)
    85.   Class = ::WLS.elementRanksClass(::WLS::CLASS)
    86.   Enemy = ::WLS.elementRanksClass(::WLS::ENEMY)
    87.   ::WLS.define_type(Weapon, :@element_set)
    88.   ::WLS.define_type(Armor, :@guard_element_set)
    89.   ::WLS.define_type(State, :@guard_element_set)
    90.   class Skill
    91.     def required_types
    92.       temp = WLS::TYPES.map{|t|$data_system.elements.index(t)}
    93.       return@element_set.find_all{|e|temp.include?(e)}
    94.     end
    95.   end
    96. end
    复制代码


    测试的时候还被ruby坑得不轻
    最新更新加了一些新功能,稍微调整了脚本,估计兼容VX
                 本帖来自P1论坛作者英顺的马甲,因Project1站服务器在国外有时候访问缓慢不方便作者交流学习,经联系P1站长fux2同意署名转载一起分享游戏制作经验,共同为国内独立游戏作者共同创造良好交流环境,原文地址:https://rpg.blue/forum.php?mod=viewthread&tid=393783  若有侵权,发帖作者可联系底部站长QQ在线咨询功能删除,谢谢。

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有账号?立即注册

    x
    天天去同能,天天有童年!
    回复 论坛版权

    使用道具 举报

    ahome_bigavatar:guest
    ahome_bigavatar:welcomelogin
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|Archiver|手机版|小黑屋|同能RPG制作大师 ( 沪ICP备12027754号-3 )

    GMT+8, 2024-5-13 19:09 , Processed in 0.060803 second(s), 44 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.

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