Project1

标题: 求装备附带技能的脚本 [打印本页]

作者: zjx2005    时间: 2009-10-25 16:10
标题: 求装备附带技能的脚本
本帖最后由 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
复制代码

作者: 传说中di    时间: 2009-10-29 19:45
装备带状态
公共事件
参考 怎么制作技能书
作者: 后知后觉    时间: 2009-10-29 21:08
装备附带技能其实是个很简单的东西
原理就和防具带的自动状态一样
只要你找对地方稍做修改即可实现
下面是我改的
既然原理和自动状态一样
那我们就先找到刷新自动状态的这个方法
  #--------------------------------------------------------------------------
  # ● 更新自动状态
  #--------------------------------------------------------------------------
  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 方法
作者: zjx2005    时间: 2009-10-30 13:23
我还以为这帖会没人理了。。。
虽然我自己解决了。。。
还是谢谢。。。

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




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