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

Project1

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

[已发主站] 【XP】数据库直接设定套装

[复制链接]

Lv5.捕梦者 (版主)

遠航の猫咪

梦石
3
星屑
23186
在线时间
2387 小时
注册时间
2005-10-15
帖子
1166

开拓者

跳转到指定楼层
1
发表于 2012-6-7 01:27:30 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 Sion 于 2013-12-17 15:54 编辑

说明:本脚本通过自动状态来实现套装加成,就核心思路而言并不新鲜,但是脚本实现了100%插件化和基本不冲突。
使用者可直接通过数据库来设定套装数据(对于XP这种没有备注的工具来说,方式很傻瓜了),不需要用脚本语言来书写复杂的数组和Hash结构等。
示例见下图



RUBY 代码复制
  1. #==============================================================================
  2. # ■ Set_Armor 套装插件脚本 by SailCat
  3. #------------------------------------------------------------------------------
  4. #  说明:支持数据库直接设定套装效果的轻量化插件式脚本。
  5. #  由于本脚本基本上没有改动系统内容,故冲突可能性很低,除了和其他套装脚本冲突
  6. # 以外,基本没有冲突。
  7. #   使用方法:插入Main之前即可使用
  8. #   数据库设定规则:
  9. #   1.状态:将状态命名为“[套装名称]件数”的形式(如[密斯利尔]2),可以将该状态
  10. #     定义为装备“密斯利尔”套2件时所附加的状态。
  11. #     套装的加成奖励通过调节状态的参数来实现,注意定量最好设为0。
  12. #     件数最小为1,最大不能超过5,否则是无效的。
  13. #     有多个同名状态的话,则满足条件时都会附加,可借此突破状态的200%加成上限。
  14. #   2.武器/防具:只需将武器/防具的名称开头部分设定为与套装名称相同即可。
  15. #     如“密斯利尔”套装,只要将武器命名为“密斯利尔剑”、“密斯利尔的刃”,甚至
  16. #     “密斯利尔的乱七八糟”都可以使得该武器成为套装组件,不需要通过脚本设定。
  17. #   3.同一位置上如果存在多个可能的武器/防具,都属于套装组件,之间是互相替换的关
  18. #     系,如[密斯利尔剑]和[密斯利尔枪]。
  19. #   4.如确有必要,可以在脚本中104行之后手工定义套装、组件和状态,概不赘述。
  20. #==============================================================================
  21.  
  22. #==============================================================================
  23. # ■ RPG::State
  24. #------------------------------------------------------------------------------
  25. #  对状态数据库的重新解释。
  26. #==============================================================================
  27.  
  28. module RPG
  29.   class State
  30.     # 是否为套装用状态(首字母为左方括号)
  31.     def is_set_state?
  32.       return name[0, 1] == "["
  33.     end
  34.     # 套装名称
  35.     def set_name
  36.       if not is_set_state?
  37.         return ""
  38.       elsif name[/^\[.*\]/] == nil
  39.         return ""
  40.       else
  41.         set = name[/^\[.*\]/]
  42.         return set[1, set.length - 2]
  43.       end
  44.     end
  45.     # 触发状态的件数
  46.     def set_count
  47.       if set_name == ""
  48.         return 0
  49.       else
  50.         return name.gsub(/^\[.*\]/, "").to_i
  51.       end
  52.     end
  53.   end
  54. end
  55.  
  56. #==============================================================================
  57. # ■ Game_Party
  58. #------------------------------------------------------------------------------
  59. #  处理同伴的类。包含金钱以及物品的信息。本类的实例
  60. # 请参考 $game_party。
  61. #==============================================================================
  62.  
  63. class Game_Party
  64.   #--------------------------------------------------------------------------
  65.   # ● 追加实例变量
  66.   #--------------------------------------------------------------------------
  67.   attr_accessor :data_set_states           # 套装状态清单 Hash
  68.   attr_accessor :data_set_items            # 套装组件清单 Hash
  69.   #--------------------------------------------------------------------------
  70.   # ● 初始化套装数据
  71.   #--------------------------------------------------------------------------
  72.   def init_data_sets
  73.     @data_set_states = {}
  74.     @data_set_items = {}
  75.     # 扫描所有状态,取得套装状态清单
  76.     for state in $data_states[1...$data_states.size]
  77.       if state.is_set_state?
  78.         unless @data_set_states.include?(state.set_name)
  79.           @data_set_states[state.set_name] = {}
  80.         end
  81.         unless @data_set_states[state.set_name].include?(state.set_count)
  82.           @data_set_states[state.set_name][state.set_count] = []
  83.         end
  84.         @data_set_states[state.set_name][state.set_count].push(state.id)
  85.         @data_set_items[state.set_name] = []
  86.       end
  87.     end
  88.     # 检索所有武器,将符合套装名称的武器加入组件清单
  89.     for weapon in $data_weapons[1...$data_weapons.size]
  90.       for state_name in @data_set_states.keys
  91.         if weapon.name[0, state_name.length] == state_name
  92.           @data_set_items[state_name].push(-weapon.id)
  93.         end
  94.       end
  95.     end
  96.     # 检索所有防具,将符合套装名称的防具加入组件清单
  97.     for armor in $data_armors[1...$data_weapons.size]
  98.       for state_name in @data_set_states.keys
  99.         if armor.name[0, state_name.length] == state_name
  100.           @data_set_items[state_name].push(armor.id)
  101.         end
  102.       end
  103.     end
  104.   end
  105. end
  106.  
  107. #==============================================================================
  108. # ■ Game_Actor
  109. #------------------------------------------------------------------------------
  110. #  处理角色的类。本类在 Game_Actors 类 ($game_actors)
  111. # 的内部使用、Game_Party 类请参考 ($game_party) 。
  112. #==============================================================================
  113.  
  114. class Game_Actor < Game_Battler
  115.   alias sailcat_equip equip
  116.   alias sailcat_setup setup
  117.   #--------------------------------------------------------------------------
  118.   # ● 追加实例变量
  119.   #--------------------------------------------------------------------------
  120.   attr_accessor  :active_sets              # 当前已上身的套装
  121.   #--------------------------------------------------------------------------
  122.   # ● 设置
  123.   #     actor_id : 角色 ID
  124.   #--------------------------------------------------------------------------
  125.   def setup(actor_id)
  126.     sailcat_setup(actor_id)
  127.     # 清除上身套装列表
  128.     @active_sets = []
  129.     # 更新套装状态
  130.     update_set_state
  131.   end
  132.   #--------------------------------------------------------------------------
  133.   # ● 变更装备
  134.   #     equip_type : 装备类型
  135.   #     id    : 武器 or 防具 ID  (0 为解除装备)
  136.   #--------------------------------------------------------------------------
  137.   def equip(equip_type, id)
  138.     sailcat_equip(equip_type, id)
  139.     # 更新套装状态
  140.     update_set_state
  141.   end
  142.   #--------------------------------------------------------------------------
  143.   # ● 更新套装状态
  144.   #--------------------------------------------------------------------------
  145.   def update_set_state
  146.     # 如果数据没有初始化就初始化
  147.     $game_party.init_data_sets if $game_party.data_set_states == nil
  148.     # 获得当前装备
  149.     my_armor_ids = [-@weapon_id, @armor1_id, @armor2_id, @armor3_id, @armor4_id]
  150.     # 循环所有套装
  151.     for set_name in $game_party.data_set_items.keys
  152.       # 获得套装中装备的上身件数
  153.       item_count = (my_armor_ids & $game_party.data_set_items[set_name]).size
  154.       # 需要解除的状态列表
  155.       remove_set = [1, 2, 3, 4, 5]
  156.       # 如果件数至少为1件
  157.       if item_count > 0
  158.         # 更新上身套装列表
  159.         @active_sets.push(set_name) unless @active_sets.include?(set_name)
  160.         # 附加对应的套装状态
  161.         add_set_states(set_name, item_count)
  162.         # 删除当前件数
  163.         remove_set.delete(item_count)
  164.       # 如果件数为0件,且之前上身的套装列表中包含当前套装
  165.       elsif @active_sets.include?(set_name)
  166.         # 取消当前套装
  167.         @active_sets.delete(set_name)
  168.       # 和当前套装无关的情况下
  169.       else
  170.         # 什么也不做
  171.         remove_set.clear
  172.       end
  173.       # 解除件数不相符合的的套装状态
  174.       for i in remove_set
  175.         remove_set_states(set_name, i)
  176.       end
  177.     end
  178.   end
  179.   #--------------------------------------------------------------------------
  180.   # ● 附加套装状态
  181.   #     set_name : 套装名称
  182.   #     count    : 件数
  183.   #--------------------------------------------------------------------------
  184.   def add_set_states(set_name, count)
  185.     # 循环所有状态,逐一附加
  186.     unless $game_party.data_set_states[set_name][count] == nil
  187.       for state_id in $game_party.data_set_states[set_name][count]
  188.         add_state(state_id, true)
  189.       end
  190.     end
  191.   end
  192.   #--------------------------------------------------------------------------
  193.   # ● 解除套装状态
  194.   #     set_name : 套装名称
  195.   #     count    : 件数
  196.   #--------------------------------------------------------------------------
  197.   def remove_set_states(set_name, count)
  198.     # 循环所有状态,逐一解除
  199.     unless $game_party.data_set_states[set_name][count] == nil
  200.       for state_id in $game_party.data_set_states[set_name][count]
  201.         remove_state(state_id, true)
  202.       end
  203.     end
  204.   end
  205. end

范例工程,猫儿的脚本原则上都是不给范例工程的,特别是这种100%插件化的脚本,但以防有懒人需要,下载就收10经验吧。
SetArmor.zip (203.81 KB, 下载次数: 235, 售价: 1 星屑)

评分

参与人数 1+6 收起 理由
Shy07 + 6 主站收录

查看全部评分

SailCat (小猫子·要开心一点) 共上站 24 次,发表过 11 篇文章 上 次 在: [2006年01月28日11:41:18 星期六] 从 [162.105.120.91] 到本站一游。

Lv4.逐梦者

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

开拓者

2
发表于 2012-6-18 17:24:11 | 只看该作者
魔塔样板5161和7630能用不?

点评

你可以试试,这只是个插件而已  发表于 2012-6-18 22:47
[img]http://service.t.sina.com.cn/widget/qmd/5339802982/c02e16bd/7.png
回复 支持 反对

使用道具 举报

Lv4.逐梦者

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

开拓者

3
发表于 2012-6-19 12:09:03 | 只看该作者
这两个都把敌人的属性设定在了特技里面···所以很难说啊···上次hy11111的脚本没说清楚害得我乱插结果全局崩溃···

点评

先插到main前面,不能用就删掉,你也不损失什么。。。。。  发表于 2012-6-19 14:38
[img]http://service.t.sina.com.cn/widget/qmd/5339802982/c02e16bd/7.png
回复 支持 反对

使用道具 举报

Lv4.逐梦者

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

开拓者

4
发表于 2012-6-19 12:18:33 | 只看该作者
怎样才能把套装效果设定放到脚本编辑器里面···我是双角色归一合体为单角色能力···

点评

在104行前面自己写……  发表于 2012-6-19 14:38
[img]http://service.t.sina.com.cn/widget/qmd/5339802982/c02e16bd/7.png
回复 支持 反对

使用道具 举报

Lv4.逐梦者

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

开拓者

5
发表于 2012-6-19 15:22:08 | 只看该作者
怎么写···

评分

参与人数 1星屑 -240 收起 理由
冰舞蝶恋 -240 请善用编辑功能。4连帖。

查看全部评分

回复 支持 反对

使用道具 举报

Lv5.捕梦者 (版主)

遠航の猫咪

梦石
3
星屑
23186
在线时间
2387 小时
注册时间
2005-10-15
帖子
1166

开拓者

6
 楼主| 发表于 2012-6-19 15:27:06 | 只看该作者
chd114 发表于 2012-6-19 15:22
怎么写···

郑重建议你使用本站其他人发布的通过脚本设定套装的插件……
SailCat (小猫子·要开心一点) 共上站 24 次,发表过 11 篇文章 上 次 在: [2006年01月28日11:41:18 星期六] 从 [162.105.120.91] 到本站一游。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
2174
在线时间
163 小时
注册时间
2012-4-15
帖子
1
7
发表于 2012-6-23 13:08:30 | 只看该作者
97行应该是
for armor in $data_armors[1...$data_armors.size]
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
9 小时
注册时间
2013-5-26
帖子
10
8
发表于 2013-5-31 01:29:10 | 只看该作者
{:2_261:}不行啊,打不开.....................................................................................................................................................................................
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
13 小时
注册时间
2013-8-7
帖子
6
9
发表于 2013-8-27 11:11:15 | 只看该作者
还是用不了啊
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
120 小时
注册时间
2013-8-26
帖子
63
10
发表于 2013-8-29 19:26:10 | 只看该作者
顶                            一下
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-15 18:45

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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