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

Project1

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

[已经解决] 求装备附带技能的脚本

 关闭 [复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
83 小时
注册时间
2006-4-4
帖子
1019
跳转到指定楼层
1
发表于 2009-10-25 16:10:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 zjx2005 于 2009-10-25 16:32 编辑

虽然这东西很好找
我手里就有两个...樱雅在土和KGC的
不过这两个脚本都有问题- -|||
樱雅在土的无法判定是否学会了装备附带的技能
KGC的和6R里通过修改Game_Actor来扩展装备的那个脚本冲突,当然和KGC自己的装备扩展MS没有问题,不过KGC的那个MS无法获取扩展出来的装备的ID和用脚本换角色的装备

6R柳柳写的那个不通过装备画面换装备就没有效果

所以我求下有没有其他的装备附带技能的脚本,我试试看哪个没冲突
或者谁来帮我把下面的脚本修改下...使它能判定习得了的技能(新加个def把skill_learn?重新定义什么的。。。。)
  1. # ▼▲▼ No56. スキル習得装備 ▼▲▼
  2. #
  3. # update 2005/ 3/12
  4. #
  5. #==============================================================================
  6. # ■ Game_Actor
  7. #==============================================================================
  8. class Game_Actor < Game_Battler
  9.   #--------------------------------------------------------------------------
  10.   # スキル (attr_reader   :skills)
  11.   #--------------------------------------------------------------------------
  12.   alias xrxs56_skills skills
  13.   def skills
  14.     set = self.xrxs56_skills.dup
  15.     for element_id in XRXS.element_numbers(self.equip_element_set, "技能习得")
  16.       set.push(element_id) unless set.include?(element_id)
  17.     end
  18.     return set
  19.   end
  20.   #--------------------------------------------------------------------------
  21.   # ● スキルの使用可能判定
  22.   #--------------------------------------------------------------------------
  23.   alias xrxs56_skill_can_use? skill_can_use?
  24.   def skill_can_use?(skill_id)
  25.     if XRXS.element_numbers(self.equip_element_set, "技能习得").include?(skill_id)
  26.       return super
  27.     else
  28.       return xrxs56_skill_can_use?(skill_id)
  29.     end
  30.   end
  31. end
复制代码

Lv1.梦旅人

梦石
0
星屑
84
在线时间
156 小时
注册时间
2009-8-5
帖子
533
2
发表于 2009-10-29 19:45:59 | 只看该作者
装备带状态
公共事件
参考 怎么制作技能书
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
6865
在线时间
1666 小时
注册时间
2008-10-29
帖子
6710

贵宾

3
发表于 2009-10-29 21:08:39 | 只看该作者
装备附带技能其实是个很简单的东西
原理就和防具带的自动状态一样
只要你找对地方稍做修改即可实现
下面是我改的
既然原理和自动状态一样
那我们就先找到刷新自动状态的这个方法
  #--------------------------------------------------------------------------
  # ● 更新自动状态
  #--------------------------------------------------------------------------
  def update_auto_state(old_armor, new_armor)
    if old_armor != nil and old_armor.auto_state_id != 0
      remove_state(old_armor.auto_state_id, true)
    end
    if new_armor != nil and new_armor.auto_state_id != 0
      add_state(new_armor.auto_state_id, true)
    end
    if old_armor != nil and old_armor.skill_id != 0
      forget_skill(old_armor.skill_id)
    end
    if new_armor != nil and new_armor.skill_id != 0
      learn_skill(new_armor.skill_id)
    end
  end
这个方法里默认只有2个if句子.我帖的这个方法里后面2个if句子是我加进去的
这个方法刷新的只是防具的.但是默认武器是没有自动状态的
所以我新def了一个武器的
    #--------------------------------------------------------------------------
  # ● 变更武器刷新技能
  #--------------------------------------------------------------------------
  def update_weapon_skill(old_weapon, new_weapon)
    if old_weapon != nil and old_weapon.skill_id != 0
      forget_skill(old_weapon.skill_id)
    end
    if new_weapon != nil and new_weapon.skill_id != 0
      learn_skill(new_weapon.skill_id)
    end
  end
然后是.不管是在装备场景里更换装备还是用事件更换装备
都会用到这个更换装备的方法.把新定义的武器的部分加到换武器的那里
  #--------------------------------------------------------------------------
  # ● 变更装备
  #--------------------------------------------------------------------------
  def equip(equip_type, id)
    case equip_type
    when 0  # 武器
      if id == 0 or $game_party.weapon_number(id) > 0
        update_weapon_skill($data_weapons[@weapon_id], $data_weapons[id])
        $game_party.gain_weapon(@weapon_id, 1)
        @weapon_id = id
        $game_party.lose_weapon(id, 1)
      end
    when 1  # 盾
      if id == 0 or $game_party.armor_number(id) > 0
        update_auto_state($data_armors[@armor1_id], $data_armors[id])
        $game_party.gain_armor(@armor1_id, 1)
        @armor1_id = id
        $game_party.lose_armor(id, 1)
      end
    when 2  # 头
      if id == 0 or $game_party.armor_number(id) > 0
        update_auto_state($data_armors[@armor2_id], $data_armors[id])
        $game_party.gain_armor(@armor2_id, 1)
        @armor2_id = id
        $game_party.lose_armor(id, 1)
      end
    when 3  # 身体
      if id == 0 or $game_party.armor_number(id) > 0
        update_auto_state($data_armors[@armor3_id], $data_armors[id])
        $game_party.gain_armor(@armor3_id, 1)
        @armor3_id = id
        $game_party.lose_armor(id, 1)
      end
    when 4  # 装饰品
      if id == 0 or $game_party.armor_number(id) > 0
        update_auto_state($data_armors[@armor4_id], $data_armors[id])
        $game_party.gain_armor(@armor4_id, 1)
        @armor4_id = id
        $game_party.lose_armor(id, 1)
      end
    end
  end
上面这个方法和默认的相比.我就只增加了一行
然后是在角色初始化的时候也要刷新一下武器的
  #--------------------------------------------------------------------------
  # ● 设置
  #--------------------------------------------------------------------------
  alias hzhj_actor_setup setup
  def setup(actor_id)
    hzhj_actor_setup(actor_id)
    update_weapon_skill(nil, $data_weapons[@weapon_id])
  end
最后是对武器和防具追加技能ID的设置
module RPG
  class Weapon
    def name
      new_name = @name.split(/@/)[0]
      new_name = new_name == nil ? "" : new_name
      return new_name
    end
    def skill_id
      skillid = @name.split(/@/)[1]
      skillid = skillid == nil ? 0 : skillid.to_i.abs
      return skillid
    end
  end
  class Armor
    def name
      new_name = @name.split(/@/)[0]
      new_name = new_name == nil ? "" : new_name
      return new_name
    end
    def skill_id
      skillid = @name.split(/@/)[1]
      skillid = skillid == nil ? 0 : skillid.to_i.abs
      return skillid
    end
  end
end
完整脚本如下.设置方法为在武器或者防具的名字后面加  @ID
比如  铜剑@80   铜盾@70
  1. #==============================================================================
  2. # ■ Game_Actor
  3. #==============================================================================

  4. class Game_Actor < Game_Battler
  5.   #--------------------------------------------------------------------------
  6.   # ● 更新自动状态
  7.   #--------------------------------------------------------------------------
  8.   def update_auto_state(old_armor, new_armor)
  9.     if old_armor != nil and old_armor.auto_state_id != 0
  10.       remove_state(old_armor.auto_state_id, true)
  11.     end
  12.     if new_armor != nil and new_armor.auto_state_id != 0
  13.       add_state(new_armor.auto_state_id, true)
  14.     end
  15.     if old_armor != nil and old_armor.skill_id != 0
  16.       forget_skill(old_armor.skill_id)
  17.     end
  18.     if new_armor != nil and new_armor.skill_id != 0
  19.       learn_skill(new_armor.skill_id)
  20.     end
  21.   end

  22.     #--------------------------------------------------------------------------
  23.   # ● 变更武器刷新技能
  24.   #--------------------------------------------------------------------------
  25.   def update_weapon_skill(old_weapon, new_weapon)
  26.     if old_weapon != nil and old_weapon.skill_id != 0
  27.       forget_skill(old_weapon.skill_id)
  28.     end
  29.     if new_weapon != nil and new_weapon.skill_id != 0
  30.       learn_skill(new_weapon.skill_id)
  31.     end
  32.   end
  33.   #--------------------------------------------------------------------------
  34.   # ● 变更装备
  35.   #--------------------------------------------------------------------------
  36.   def equip(equip_type, id)
  37.     case equip_type
  38.     when 0  # 武器
  39.       if id == 0 or $game_party.weapon_number(id) > 0
  40.         update_weapon_skill($data_weapons[@weapon_id], $data_weapons[id])
  41.         $game_party.gain_weapon(@weapon_id, 1)
  42.         @weapon_id = id
  43.         $game_party.lose_weapon(id, 1)
  44.       end
  45.     when 1  # 盾
  46.       if id == 0 or $game_party.armor_number(id) > 0
  47.         update_auto_state($data_armors[@armor1_id], $data_armors[id])
  48.         $game_party.gain_armor(@armor1_id, 1)
  49.         @armor1_id = id
  50.         $game_party.lose_armor(id, 1)
  51.       end
  52.     when 2  # 头
  53.       if id == 0 or $game_party.armor_number(id) > 0
  54.         update_auto_state($data_armors[@armor2_id], $data_armors[id])
  55.         $game_party.gain_armor(@armor2_id, 1)
  56.         @armor2_id = id
  57.         $game_party.lose_armor(id, 1)
  58.       end
  59.     when 3  # 身体
  60.       if id == 0 or $game_party.armor_number(id) > 0
  61.         update_auto_state($data_armors[@armor3_id], $data_armors[id])
  62.         $game_party.gain_armor(@armor3_id, 1)
  63.         @armor3_id = id
  64.         $game_party.lose_armor(id, 1)
  65.       end
  66.     when 4  # 装饰品
  67.       if id == 0 or $game_party.armor_number(id) > 0
  68.         update_auto_state($data_armors[@armor4_id], $data_armors[id])
  69.         $game_party.gain_armor(@armor4_id, 1)
  70.         @armor4_id = id
  71.         $game_party.lose_armor(id, 1)
  72.       end
  73.     end
  74.   end
  75.   #--------------------------------------------------------------------------
  76.   # ● 设置
  77.   #--------------------------------------------------------------------------
  78.   alias hzhj_actor_setup setup
  79.   def setup(actor_id)
  80.     hzhj_actor_setup(actor_id)
  81.     update_weapon_skill(nil, $data_weapons[@weapon_id])
  82.   end
  83. end

  84. module RPG
  85.   class Weapon
  86.     def name
  87.       new_name = @name.split(/@/)[0]
  88.       new_name = new_name == nil ? "" : new_name
  89.       return new_name
  90.     end
  91.     def skill_id
  92.       skillid = @name.split(/@/)[1]
  93.       skillid = skillid == nil ? 0 : skillid.to_i.abs
  94.       return skillid
  95.     end
  96.   end
  97.   class Armor
  98.     def name
  99.       new_name = @name.split(/@/)[0]
  100.       new_name = new_name == nil ? "" : new_name
  101.       return new_name
  102.     end
  103.     def skill_id
  104.       skillid = @name.split(/@/)[1]
  105.       skillid = skillid == nil ? 0 : skillid.to_i.abs
  106.       return skillid
  107.     end
  108.   end
  109. end

复制代码
而你需要做的就是
把新加的句子加到你的装备扩展脚本里去
如果那个脚本里出现以上的方法.就把我新写的句子加过去就是了
如果那个脚本里没有出现以上的方法.那就把整个方法复制过去
这就是所谓的融合了...
最后的 module RPG 模块里的东西稍改一下就可以了
这个冲突性比较大.
用脚本变更装备要用那个 equip 方法











你知道得太多了

回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
83 小时
注册时间
2006-4-4
帖子
1019
4
 楼主| 发表于 2009-10-30 13:23:58 | 只看该作者
我还以为这帖会没人理了。。。
虽然我自己解决了。。。
还是谢谢。。。

我把我那脚本下面新添加一个def去定义skill_learn?当主角的装备了的装备里有“技能习得”的属性时(靠属性判定的)就返回true值,于是就可以判定是否学习了那个技能了。。。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-12-29 10:11

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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