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

Project1

 找回密码
 注册会员
搜索
楼主: v2sam

[已经过期] 【悬赏】找人写个装备武器改变职业的脚本

[复制链接]

Lv4.逐梦者

世界坑化协会

梦石
0
星屑
7528
在线时间
1546 小时
注册时间
2007-3-13
帖子
5534

极短23参与极短21参与开拓者贵宾第一届化妆舞会最佳服饰奖

 楼主| 发表于 2010-6-18 14:17:16 | 显示全部楼层
回复 提妲 的帖子

嗯,指定的,是根据备注来决定学几号技能。


顺道找来沉影的脚本。
  1. #==============================================================================
  2. # 武器带技能 by 沉影不器
  3. #------------------------------------------------------------------------------
  4. # 武器备注栏写 skill=技能号 表示武器带该技能.
  5. # 允许同时带多技能 skill=技能号,技能号,技能号...
  6. # 写法比较偷懒,bug未知
  7. #==============================================================================

  8. #==============================================================================
  9. # ■ RPG::Weapon
  10. #==============================================================================
  11. module RPG
  12.   class Weapon < BaseItem
  13.     def skill_ids
  14.       return read_note('skill').split(/,/)
  15.     end
  16.   end
  17.   class Armor < BaseItem
  18.     def skill_ids
  19.       return read_note('skill').split(/,/)
  20.     end
  21.   end  
  22. end

  23. #==============================================================================
  24. # ■ Game_Actor
  25. #==============================================================================
  26. class Game_Actor < Game_Battler
  27.   #--------------------------------------------------------------------------
  28.   # 技能绑定
  29.   #--------------------------------------------------------------------------
  30.   def skill_plus
  31.     @skills.clear
  32.     for i in self.class.learnings
  33.       learn_skill(i.skill_id) if i.level <= @level
  34.     end
  35.     unless @armor3_id == 0
  36.       ids = equips[3].skill_ids
  37.       for s in ids
  38.         learn_skill(s.to_i)
  39.       end
  40.     end
  41.     unless @armor4_id == 0
  42.       ids = equips[4].skill_ids
  43.       for s in ids
  44.         learn_skill(s.to_i)
  45.       end
  46.     end
  47.     unless @weapon_id == 0
  48.       ids = equips[0].skill_ids
  49.       for s in ids
  50.         learn_skill(s.to_i)
  51.       end
  52.     end
  53.     unless @armor1_id == 0
  54.       ids = equips[1].skill_ids
  55.       for s in ids
  56.         learn_skill(s.to_i)
  57.       end
  58.     end
  59.     unless @armor2_id == 0
  60.       ids = equips[2].skill_ids
  61.       for s in ids
  62.         learn_skill(s.to_i)
  63.       end
  64.     end
  65.   end
  66.   #--------------------------------------------------------------------------
  67.   # ● 设置
  68.   #--------------------------------------------------------------------------
  69.   alias old_setup setup
  70.   def setup(actor_id)
  71.     old_setup(actor_id)
  72.     skill_plus
  73.   end
  74.   #--------------------------------------------------------------------------
  75.   # ● 更改装备
  76.   #--------------------------------------------------------------------------
  77.   def change_equip(equip_type, item, test = false)
  78.     last_item = equips[equip_type]
  79.     unless test
  80.       return if $game_party.item_number(item) == 0 if item != nil
  81.       $game_party.gain_item(last_item, 1)
  82.       $game_party.lose_item(item, 1)
  83.     end
  84.     item_id = item == nil ? 0 : item.id
  85.     case equip_type
  86.     when 0  # 武器
  87.       @weapon_id = item_id
  88.       unless two_hands_legal?             # 违反双手拿取的情况下
  89.         change_equip(1, nil, test)        # 解除反手的装备
  90.       end
  91.     when 1  # 盾
  92.       @armor1_id = item_id
  93.       unless two_hands_legal?             # 违反双手拿取的情况下
  94.         change_equip(0, nil, test)        # 解除反手的装备
  95.       end
  96.     when 2  # 头
  97.       @armor2_id = item_id
  98.     when 3  # 身体
  99.       @armor3_id = item_id
  100.     when 4  # 装饰品
  101.       @armor4_id = item_id
  102.     end
  103.     skill_plus
  104.   end
  105.   #--------------------------------------------------------------------------
  106.   # ● 废弃装备
  107.   #--------------------------------------------------------------------------
  108.   def discard_equip(item)
  109.     if item.is_a?(RPG::Weapon)
  110.       if @weapon_id == item.id
  111.         @weapon_id = 0
  112.       elsif two_swords_style and @armor1_id == item.id
  113.         @armor1_id = 0
  114.       end
  115.     elsif item.is_a?(RPG::Armor)
  116.       if not two_swords_style and @armor1_id == item.id
  117.         @armor1_id = 0
  118.       elsif @armor2_id == item.id
  119.         @armor2_id = 0
  120.       elsif @armor3_id == item.id
  121.         @armor3_id = 0
  122.       elsif @armor4_id == item.id
  123.         @armor4_id = 0
  124.       end
  125.     end
  126.     skill_plus
  127.   end
  128. end
复制代码
你的肩膀上有肩周炎~♪  秒懂  ☚   \没有
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
60
在线时间
1 小时
注册时间
2009-9-19
帖子
137
发表于 2010-6-18 14:58:34 | 显示全部楼层
本帖最后由 darkdrium 于 2010-6-18 15:01 编辑

使用该脚本显示read_note方法未定义,而且奇怪的是显示错误的armor行……

明白了,read_note在另外的页面定义的?先是plus_skill调用了armor的skill_ids。
回复 支持 反对

使用道具 举报

Lv4.逐梦者

世界坑化协会

梦石
0
星屑
7528
在线时间
1546 小时
注册时间
2007-3-13
帖子
5534

极短23参与极短21参与开拓者贵宾第一届化妆舞会最佳服饰奖

 楼主| 发表于 2010-6-18 15:12:17 | 显示全部楼层
哈哈,这个我也不爱懂,天赋不在这上面= =
你的肩膀上有肩周炎~♪  秒懂  ☚   \没有
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
60
在线时间
1 小时
注册时间
2009-9-19
帖子
137
发表于 2010-6-18 15:45:25 | 显示全部楼层
很忐忑的在沉影的脚本里添加了read_item方法,已经实现lz需要的效果
  1. #==============================================================================
  2. # 武器带技能 by 沉影不器
  3. #------------------------------------------------------------------------------
  4. # 武器备注栏写 skill=技能号 表示武器带该技能.
  5. # 允许同时带多技能 skill=技能号,技能号,技能号...
  6. # 写法比较偷懒,bug未知
  7. #==============================================================================

  8. #==============================================================================
  9. # ■ RPG::Weapon
  10. #==============================================================================
  11. module RPG
  12.   class BaseItem
  13.     def read_note(str)
  14.       [email protected]("\n")
  15.       note=notes.find do |line|
  16.         line.include?(str+'=')
  17.       end
  18.       if note
  19.         note.sub(str+"="){|m| ""}
  20.       else
  21.         ""
  22.       end
  23.     end
  24.   end
  25.   class Weapon < BaseItem
  26.     def skill_ids
  27.       return read_note('skill').split(/,/)
  28.     end
  29.     def class_ids
  30.       read_note('class')
  31.     end
  32.   end
  33.   class Armor < BaseItem
  34.     def skill_ids
  35.       return read_note('skill').split(/,/)
  36.     end
  37.   end  
  38. end

  39. #==============================================================================
  40. # ■ Game_Actor
  41. #==============================================================================
  42. class Game_Actor < Game_Battler
  43.   #--------------------------------------------------------------------------
  44.   # 技能绑定
  45.   #--------------------------------------------------------------------------
  46.   def skill_plus
  47.     @skills.clear
  48.     for i in self.class.learnings
  49.       learn_skill(i.skill_id) if i.level <= @level
  50.     end
  51.     unless @armor3_id == 0
  52.       ids = equips[3].skill_ids
  53.       for s in ids
  54.         learn_skill(s.to_i)
  55.       end
  56.     end
  57.     unless @armor4_id == 0
  58.       ids = equips[4].skill_ids
  59.       for s in ids
  60.         learn_skill(s.to_i)
  61.       end
  62.     end
  63.     unless @weapon_id == 0
  64.       ids = equips[0].skill_ids
  65.       for s in ids
  66.         learn_skill(s.to_i)
  67.       end
  68.     end
  69.     unless @armor1_id == 0
  70.       ids = equips[1].skill_ids
  71.       for s in ids
  72.         learn_skill(s.to_i)
  73.       end
  74.     end
  75.     unless @armor2_id == 0
  76.       ids = equips[2].skill_ids
  77.       for s in ids
  78.         learn_skill(s.to_i)
  79.       end
  80.     end
  81.   end
  82.   #--------------------------------------------------------------------------
  83.   # ● 设置
  84.   #--------------------------------------------------------------------------
  85.   alias old_setup setup
  86.   def setup(actor_id)
  87.     old_setup(actor_id)
  88.     skill_plus
  89.   end
  90.   #--------------------------------------------------------------------------
  91.   # ● 更改装备
  92.   #--------------------------------------------------------------------------
  93.   def change_equip(equip_type, item, test = false)
  94.     last_item = equips[equip_type]
  95.     unless test
  96.       return if $game_party.item_number(item) == 0 if item != nil
  97.       $game_party.gain_item(last_item, 1)
  98.       $game_party.lose_item(item, 1)
  99.     end
  100.     item_id = item == nil ? 0 : item.id
  101.     case equip_type
  102.     when 0  # 武器
  103.       @weapon_id = item_id
  104.       if equips[0] && equips[0].read_note("class") != ""
  105.         self.class_id = equips[0].read_note("class").to_i
  106.       else
  107.         self.class_id = $data_actors[@actor_id].class_id
  108.       end
  109.       unless two_hands_legal?             # 违反双手拿取的情况下
  110.         change_equip(1, nil, test)        # 解除反手的装备
  111.       end
  112.     when 1  # 盾
  113.       @armor1_id = item_id
  114.       unless two_hands_legal?             # 违反双手拿取的情况下
  115.         change_equip(0, nil, test)        # 解除反手的装备
  116.       end
  117.     when 2  # 头
  118.       @armor2_id = item_id
  119.     when 3  # 身体
  120.       @armor3_id = item_id
  121.     when 4  # 装饰品
  122.       @armor4_id = item_id
  123.     end
  124.     skill_plus
  125.   end
  126.   #--------------------------------------------------------------------------
  127.   # ● 废弃装备
  128.   #--------------------------------------------------------------------------
  129.   def discard_equip(item)
  130.     if item.is_a?(RPG::Weapon)
  131.       if @weapon_id == item.id
  132.         @weapon_id = 0
  133.       elsif two_swords_style and @armor1_id == item.id
  134.         @armor1_id = 0
  135.       end
  136.     elsif item.is_a?(RPG::Armor)
  137.       if not two_swords_style and @armor1_id == item.id
  138.         @armor1_id = 0
  139.       elsif @armor2_id == item.id
  140.         @armor2_id = 0
  141.       elsif @armor3_id == item.id
  142.         @armor3_id = 0
  143.       elsif @armor4_id == item.id
  144.         @armor4_id = 0
  145.       end
  146.     end
  147.     skill_plus
  148.   end
  149. end
复制代码
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
60
在线时间
1 小时
注册时间
2009-9-19
帖子
137
发表于 2010-6-18 15:47:58 | 显示全部楼层
本帖最后由 darkdrium 于 2010-6-18 15:56 编辑

回复 v2sam 的帖子

动了两处,在module rpg处添加了BaseItem的read_note方法
还有更改武器的106-110行

使用方法,在备注中一行写skill=xx,xx,xx技能,回车换行,写class=xx。不写class=xx的恢复默认职业

ps:class和skill顺序可以变动
再ps:未完善异常处理,猜测如果你把职业id写的大于职业数量会出错
回复 支持 反对

使用道具 举报

Lv4.逐梦者

世界坑化协会

梦石
0
星屑
7528
在线时间
1546 小时
注册时间
2007-3-13
帖子
5534

极短23参与极短21参与开拓者贵宾第一届化妆舞会最佳服饰奖

 楼主| 发表于 2010-6-18 16:24:57 | 显示全部楼层
啊,如果是备注行的识别,我还有另外一个脚本支持识别备注的标记,所以不用特地去写这个了。谢谢XDD
你的肩膀上有肩周炎~♪  秒懂  ☚   \没有
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
60
在线时间
1 小时
注册时间
2009-9-19
帖子
137
发表于 2010-6-18 16:26:45 | 显示全部楼层
回复 v2sam 的帖子
:L 很显然由于你没给出备注识别脚本,导致我只好自己写了- -


   
回复 支持 反对

使用道具 举报

Lv4.逐梦者

世界坑化协会

梦石
0
星屑
7528
在线时间
1546 小时
注册时间
2007-3-13
帖子
5534

极短23参与极短21参与开拓者贵宾第一届化妆舞会最佳服饰奖

 楼主| 发表于 2010-6-18 16:52:36 | 显示全部楼层
哈哈,对不起啊,补上:
  1. #==============================================================================
  2. # 读取rmvx备注栏指定字段 by 沉影不器
  3. # -----------------------------------------------------------------------------
  4. # 使用方法:
  5. #           在vx数据库比如1号物品的备注栏里书写: 耐久度 = 10
  6. #           读取时使用: p $data_items[1].read_note('耐久度')
  7. # 几点注意:
  8. #           ① 忽略空格
  9. #           ② 返回值为文本格式
  10. #==============================================================================
  11. module RPG
  12.   #=============================================================================
  13.   # ■ BaseItem
  14.   #=============================================================================
  15.   class BaseItem
  16.     #-------------------------------------------------------------------------
  17.     # ○ 读取rmvx备注栏指定字段
  18.     #     section : 字段名
  19.     #     ignore_caps : 忽略大小写(仅字段名)
  20.     #-------------------------------------------------------------------------
  21.     def read_note(section, ignore_caps = false)
  22.       result = ''
  23.       # 忽略大小写时,全部转大写
  24.       section.upcase! if ignore_caps
  25.       # 转symbol方便比较
  26.       s = section.to_sym
  27.       self.note.each_line{|line|
  28.         temp = line.split(/=/)
  29.         # 去掉干扰字符
  30.         temp.each {|i| i.strip!}
  31.         temp[0].upcase! if ignore_caps
  32.         if temp[0].to_sym == s
  33.           unless temp[1] == nil
  34.             result = temp[1]
  35.           end
  36.           # 如果希望同名字段值覆盖前面的字段,去掉下一行
  37.           break
  38.         end
  39.       }
  40.       return result
  41.     end
  42.   end
  43.   #=============================================================================
  44.   # ■ Enemy
  45.   #=============================================================================
  46.   class Enemy
  47.     #-------------------------------------------------------------------------
  48.     # ○ 读取rmvx备注栏指定字段
  49.     #     section : 字段名
  50.     #     ignore_caps : 忽略大小写(仅字段名)
  51.     #-------------------------------------------------------------------------
  52.     def read_note(section, ignore_caps = false)
  53.       result = ''
  54.       # 忽略大小写时,全部转大写
  55.       section.upcase! if ignore_caps
  56.       # 转symbol方便比较
  57.       s = section.to_sym
  58.       self.note.each_line{|line|
  59.         temp = line.split(/=/)
  60.         # 去掉干扰字符
  61.         temp.each {|i| i.strip!}
  62.         temp[0].upcase! if ignore_caps
  63.         if temp[0].to_sym == s
  64.           unless temp[1] == nil
  65.             result = temp[1]
  66.           end
  67.           # 如果希望同名字段值覆盖前面的字段,去掉下一行
  68.           break
  69.         end
  70.       }
  71.       return result
  72.     end
  73.   end
  74.   #=============================================================================
  75.   # ■ State
  76.   #=============================================================================
  77.   class State
  78.     #-------------------------------------------------------------------------
  79.     # ○ 读取rmvx备注栏指定字段
  80.     #     section : 字段名
  81.     #     ignore_caps : 忽略大小写(仅字段名)
  82.     #-------------------------------------------------------------------------
  83.     def read_note(section, ignore_caps = false)
  84.       result = ''
  85.       # 忽略大小写时,全部转大写
  86.       section.upcase! if ignore_caps
  87.       # 转symbol方便比较
  88.       s = section.to_sym
  89.       self.note.each_line{|line|
  90.         temp = line.split(/=/)
  91.         # 去掉干扰字符
  92.         temp.each {|i| i.strip!}
  93.         temp[0].upcase! if ignore_caps
  94.         if temp[0].to_sym == s
  95.           unless temp[1] == nil
  96.             result = temp[1]
  97.           end
  98.           # 如果希望同名字段值覆盖前面的字段,去掉下一行
  99.           break
  100.         end
  101.       }
  102.       return result
  103.     end
  104.   end
  105. end
复制代码
你的肩膀上有肩周炎~♪  秒懂  ☚   \没有
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
60
在线时间
1 小时
注册时间
2009-9-19
帖子
137
发表于 2010-6-18 19:23:41 | 显示全部楼层
回复 v2sam 的帖子
那么只要106-110行就可以。
读取备注脚本上,我的思路跟沉影大大的比较相似,区别就是他做的比我完善多了……bow,差距啊差距,所幸接口统一,他的read_note返回结果和我的一样


   
回复 支持 反对

使用道具 举报

Lv1.梦旅人

万物创造者

梦石
0
星屑
54
在线时间
352 小时
注册时间
2008-2-15
帖子
2432
发表于 2010-6-18 20:05:43 | 显示全部楼层
总觉得那个脚本的防具带技能那块是我加进去的T_T
顺便,我想知道如何处理二刀流= =
From mortal hope immortal power springs.
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-3-29 06:31

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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