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

Project1

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

[已经过期] 求添加功能:图书馆技能装备

[复制链接]

Lv2.观梦者

梦石
0
星屑
596
在线时间
797 小时
注册时间
2014-7-1
帖子
578

开拓者

跳转到指定楼层
1
发表于 2016-5-19 14:48:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
RUBY 代码复制
  1. Skills_Slot_Name = ['招式一','招式二','招式三','招式四','招式五']

   在★Game_Battler 3中如何判断角色装备第几个装备栏中的的技能才能发挥威力
   已知的命令式:user.battle_skill.include?(1)  判断是否装备了1号技能
   描述问题1:那么如何判断前提条件 是需要 '招式五'装备1号技能才可以生效

还有个问题也是属于这个脚本的我先提问出来 如果需要在开帖我就分开提问

附加第二问题: 这个问题如果需要定制话那就定制

五个装备栏 指定能够装备的技能  想改动为:
RUBY 代码复制
  1. Skills_Slot_Name = ['招式一','招式二','招式三','神技','天赋']

1:就是后面两个 除了某些特定技能才可以装备 其他无法装备  就像装备防具一样只能装备指定的技能ID

2:要考虑到初始技能 角色加入时这两个装备会自动装备对应的技能ID
=================================================================
以上为问题描述: 下面是脚本!
=================================================================
RUBY 代码复制
  1. #==============================================================================
  2. # ■ 技能装备系统 for RGSS1 by:VIPArcher
  3. #  -- 本脚本来自 [url]https://rpg.blue[/url] 使用或转载请保留以上信息。
  4. #==============================================================================
  5. #  让技能可以像装备一样装备到角色身上,战斗中仅可使用已经装备的技能,其他场景可
  6. #  以随意使用,技能装备场景技能槽栏激活状态下(如有队友)按左右键切换当前角色。
  7. #  $scene = Scene_SetEquipSkill.new(actor_index, skill_index)   呼出场景。
  8. #  actor_index : 该角色在队伍中的位置 ; skill_index : 技能槽光标的起始位置
  9. #==============================================================================
  10. $VIPArcherScript ||= {};$VIPArcherScript[:battle_skill] = 20150717
  11. #-------------------------------------------------------------------------------
  12. module VIPArcher end
  13. #==============================================================================
  14. # ★ 设定部分 ★
  15. #==============================================================================
  16. module VIPArcher::Battle_Skill
  17.   #技能槽名字
  18.   Skills_Slot_Name = ['招式一','招式二','招式三','招式四','招式五']
  19.   #可使用的场合名称
  20.   SKILL_OCCASION   = ['平时', '战斗中', '菜单中', '不能使用']
  21.   #效果范围名称
  22.   SKILL_SCOPE      = ['无', '敌单体', '敌全体', '己方单体', '己方全体',
  23.                     '己方单体(战斗不能)', '己方全体(战斗不能)', '使用者']
  24.   #未装备技能时技能槽显示内容
  25.   BLANK_TEXT   = '-  空技能槽  -'
  26.   #空技能槽帮助窗口文本
  27.   BLANK_HELP   = '空的技能槽,可以装备战斗技能。'
  28.   #"[卸下技能]"的图标文件名(不需要则设置为 nil 或 false)
  29.   RELEASE_ICON = '047-Skill04'
  30.   #"[卸下技能]"帮助窗口文本
  31.   RELEASE_HELP = '卸下已装备的技能。'
  32.   #"[卸下技能]"按钮名称
  33.   RELEASE_TEXT = '[卸下技能]'
  34. end
  35. #==============================================================================
  36. # ☆ 设定结束 ☆
  37. #==============================================================================
  38. class Symbol
  39.   def to_proc
  40.     Proc.new { |*args| args.shift.__send__(self, *args) }
  41.   end
  42. end
  43. class Game_Actor < Game_Battler
  44.   include VIPArcher::Battle_Skill
  45.   attr_reader :battle_skill #已装备技能
  46.   alias battle_skill_initialize initialize
  47.   def initialize(actor_id)
  48.     @battle_skill = Array.new(Skills_Slot_Name.size){ nil }
  49.     battle_skill_initialize(actor_id)
  50.   end
  51.   def add_battle_skill(skill,id)
  52.     @battle_skill[id] = nil if skill.zero?
  53.     return if @battle_skill.include?(skill)
  54.     @battle_skill[id] = skill if skills.include?(skill)
  55.   end
  56.   alias battle_skill_learn_skill learn_skill
  57.   def learn_skill(skill_id)
  58.     battle_skill_learn_skill(skill_id)
  59.     auto_add_battle_skill(skill_id) unless @battle_skill.include?(skill_id)
  60.   end
  61.   def auto_add_battle_skill(skill_id)
  62.     @battle_skill.each_index do |index|
  63.       return @battle_skill[index] = skill_id if @battle_skill[index].nil?
  64.     end
  65.   end
  66.   alias battle_skill_forget_skill forget_skill
  67.   def forget_skill(skill_id)
  68.     battle_skill_forget_skill(skill_id)
  69.     if @battle_skill.include?(skill_id)
  70.       @battle_skill[@battle_skill.index(skill_id)] = nil
  71.     end
  72.   end
  73. end
  74.  
  75. #描绘
  76. class Window_Selectable < Window_Base
  77.   def create_contents
  78.     self.contents.dispose if self.contents
  79.     self.contents = Bitmap.new(width - 32, row_max * 32)
  80.   end
  81. end
  82. class Window_EquipSkillLeft < Window_Base
  83.   include VIPArcher::Battle_Skill
  84.   def initialize(actor, skill = nil)
  85.     super(0, 64, 272, 192)
  86.     self.contents = Bitmap.new(width - 32, height - 32)
  87.     @actor, @skill = actor, skill
  88.     refresh
  89.   end
  90.   def refresh
  91.     self.contents.clear
  92.     draw_actor_name(@actor, 4, 0)
  93.     draw_actor_level(@actor, 132, 0)
  94.     draw_skill_info unless @skill.nil?
  95.   end
  96.   def set_skill(skill)
  97.     @skill = skill
  98.     refresh
  99.   end
  100.   def draw_skill_info
  101.     self.contents.font.color = system_color
  102.     self.contents.draw_text(0,  32,  128, 32, '使用场合')
  103.     self.contents.font.color = normal_color
  104.     self.contents.draw_text(32, 64,  128, 32, SKILL_OCCASION[@skill.occasion])
  105.     self.contents.font.color = system_color
  106.     self.contents.draw_text(0,  96,  128, 32, '效果范围')
  107.     self.contents.font.color = normal_color
  108.     self.contents.draw_text(32, 128, 320, 32, SKILL_SCOPE[@skill.scope])
  109.   end
  110. end
  111. class Window_EquipSkillSlot < Window_Selectable
  112.   include VIPArcher::Battle_Skill
  113.   attr_writer   :skill_info_window
  114.   def initialize(actor, skill_index = 0)
  115.     super(272, 64, 368, 192)
  116.     @actor, self.index = actor, skill_index
  117.     refresh
  118.   end
  119.   def data
  120.     @actor.battle_skill
  121.   end
  122.   def item
  123.     data[self.index] ? $data_skills[data[self.index]] : nil
  124.   end
  125.   def refresh
  126.     @item_max = data.size
  127.     create_contents
  128.     self.contents.font.color = system_color
  129.     Skills_Slot_Name.each_with_index do |name,id|
  130.       self.contents.draw_text(4, 32 * id, 92, 32, name)
  131.     end
  132.     data.each_with_index do |skill_id,id|
  133.       if skill_id.nil?
  134.         self.contents.font.color = normal_color
  135.         self.contents.draw_text(128 , 32 * id,192, 32, BLANK_TEXT)
  136.       else
  137.         draw_item_name($data_skills[skill_id], 128, 32 * id)
  138.       end
  139.     end
  140.   end
  141.   def update_help
  142.     @help_window.set_text(item.nil? ? BLANK_HELP : item.description)
  143.     @skill_info_window.set_skill(item) if @skill_info_window
  144.   end
  145. end
  146. class Window_SkillItem < Window_Selectable
  147.   include VIPArcher::Battle_Skill
  148.   attr_writer   :skill_info_window
  149.   def initialize(actor)
  150.     super(0, 256, 640, 224)
  151.     @actor, @column_max, self.active, self.index = actor, 2, false, -1
  152.     refresh
  153.   end
  154.   def item
  155.     @data[self.index] ? $data_skills[@data[self.index]] : nil
  156.   end
  157.   def refresh
  158.     @data  = []
  159.     skills = @actor.skills.select{|skill| !@actor.battle_skill.include?(skill)}
  160.     skills.each{|skill| @data.push(skill) }
  161.     @data.push(nil) # 添加[卸下装备]
  162.     @item_max = @data.size
  163.     create_contents
  164.     @data.each_index{|index| draw_item(index)}
  165.   end
  166.   def draw_item(index)
  167.     x = 4 + index % 2 * (288 + 32)
  168.     y = index/ 2 * 32 #这残念的Sublime Text高亮=。=
  169.     self.contents.font.color = normal_color
  170.     if @data[index]
  171.       skill  = $data_skills[@data[index]]
  172.       bitmap = RPG::Cache.icon(skill.icon_name)
  173.       self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24))
  174.       self.contents.draw_text(x + 28, y, 212, 32, skill.name)
  175.     else
  176.       bitmap = RPG::Cache.icon(RELEASE_ICON) if RELEASE_ICON
  177.       self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24)) if bitmap
  178.       self.contents.draw_text(x + 28, y, 212, 32, RELEASE_TEXT)
  179.     end
  180.   end
  181.   def update_help
  182.     @help_window.set_text(item.nil? ? RELEASE_HELP : item.description)
  183.     @skill_info_window.set_skill(item) if @skill_info_window
  184.   end
  185. end
  186. class Window_Skill < Window_Selectable
  187.   def refresh
  188.     @data = []
  189.     if $scene.instance_of?(Scene_Battle)
  190.       @actor.battle_skill
  191.     else
  192.       @actor.skills
  193.     end.each do |skill|
  194.       @data.push($data_skills[skill]) unless skill.nil?
  195.     end
  196.     #end
  197.     @item_max = @data.size
  198.     create_contents unless @item_max.zero?
  199.     @data.each_index{|index| draw_item(index) }
  200.   end
  201. end
  202. class Scene_SetEquipSkill
  203.   def initialize(actor_index = 0, skill_index = 0)
  204.     @actor_index, @skill_index = actor_index, skill_index
  205.   end
  206.   def main
  207.     @actor = $game_party.actors[@actor_index]
  208.     create_all_window
  209.     Graphics.transition
  210.    [Graphics,Input,self].map(&:update) while $scene.equal?(self)
  211.     Graphics.freeze
  212.     dispose_all_window
  213.   end
  214.   def create_all_window
  215.     @help_window      = Window_Help.new
  216.     @right_window     = Window_EquipSkillSlot.new(@actor,@skill_index)
  217.     @left_window      = Window_EquipSkillLeft.new(@actor,@right_window.item)
  218.     @skillitem_window = Window_SkillItem.new(@actor)
  219.     @right_window.help_window     = @help_window
  220.     @skillitem_window.help_window = @help_window
  221.     @right_window.skill_info_window     = @left_window
  222.     @skillitem_window.skill_info_window = @left_window
  223.   end
  224.   def update
  225.     update_all_windows
  226.     return update_right if @right_window.active
  227.     return update_item  if @skillitem_window.active
  228.   end
  229.   def update_right
  230.     return scene_return     if Input.trigger?(Input::B)
  231.     return on_slot_ok       if Input.trigger?(Input::C)
  232.     return process_pagedown if Input.trigger?(Input::RIGHT)
  233.     return process_pageup   if Input.trigger?(Input::LEFT)
  234.   end
  235.   def update_item
  236.     return on_item_cancel if Input.trigger?(Input::B)
  237.     return on_item_ok     if Input.trigger?(Input::C)
  238.   end
  239.   def on_item_ok
  240.     $game_system.se_play($data_system.equip_se)
  241.     skill = @skillitem_window.item
  242.     @actor.add_battle_skill(skill.nil? ? 0 : skill.id,@right_window.index)
  243.     @right_window.active     = true
  244.     @skillitem_window.active = false
  245.     @skillitem_window.index  = -1
  246.     @right_window.refresh
  247.     @skillitem_window.refresh
  248.   end
  249.   def on_item_cancel
  250.     $game_system.se_play($data_system.cancel_se)
  251.     @right_window.active     = true
  252.     @skillitem_window.active = false
  253.     @skillitem_window.index  = -1
  254.   end
  255.   def scene_return
  256.     $game_system.se_play($data_system.cancel_se)
  257.     $scene = Scene_Map.new
  258.   end
  259.   def on_slot_ok
  260.     $game_system.se_play($data_system.decision_se)
  261.     @equipskill_id           = @right_window.index
  262.     @right_window.active     = false
  263.     @skillitem_window.active = true
  264.     @skillitem_window.index  = 0
  265.   end
  266.   def process_pageup
  267.     $game_system.se_play($data_system.cursor_se)
  268.     @actor_index += $game_party.actors.size - 1
  269.     @actor_index %= $game_party.actors.size
  270.     $scene = Scene_SetEquipSkill.new(@actor_index, @right_window.index)
  271.   end
  272.   def process_pagedown
  273.     $game_system.se_play($data_system.cursor_se)
  274.     @actor_index += 1
  275.     @actor_index %= $game_party.actors.size
  276.     $scene = Scene_SetEquipSkill.new(@actor_index, @right_window.index)
  277.   end
  278.   def update_all_windows
  279.     instance_variables.each do |varname|
  280.       ivar = instance_variable_get(varname)
  281.       ivar.update if ivar.is_a?(Window)
  282.     end
  283.   end
  284.   def dispose_all_window
  285.     instance_variables.each do |varname|
  286.       ivar = instance_variable_get(varname)
  287.       ivar.dispose if ivar.is_a?(Window)
  288.     end
  289.   end
  290. end
  291. class Interpreter
  292.   #--------------------------------------------------------------------------
  293.   # ● 条件分支
  294.   #--------------------------------------------------------------------------
  295.   alias battle_skill_command_111 command_111
  296.   def command_111
  297.     result = false
  298.     # 条件判定
  299.     if [@parameters[0],@parameters[2]] == [4,2]
  300.       actor = $game_actors[@parameters[1]]
  301.       if actor != nil
  302.         if $scene.instance_of?(Scene_Battle)
  303.           result = (actor.battle_skill.include?(@parameters[3]))
  304.         else
  305.           result = (actor.skill_learn?(@parameters[3]))
  306.         end
  307.       end
  308.       # 判断结果保存在 hash 中
  309.       @branch[@list[@index].indent] = result
  310.       # 判断结果为真的情况下
  311.       if @branch[@list[@index].indent] == true
  312.         # 删除分支数据
  313.         @branch.delete(@list[@index].indent)
  314.         # 继续
  315.         return true
  316.       end
  317.       # 不符合条件的情况下 : 指令跳转
  318.       return command_skip
  319.     else
  320.       battle_skill_command_111
  321.     end
  322.   end
  323. end
  324. class Game_Actor
  325.   def initialize_battle_skill
  326.     @battle_skill = Array.new(Skills_Slot_Name.size){ nil }
  327.   end
  328. end




学习使我疲劳,打工使我疲惫,恋爱使我伤身,吸烟伤我肺腑,饮酒损我形象,旅游使我破费,月底不见铜板,只有在论坛里面看看各种大佬才能使我进去
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

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

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

GMT+8, 2024-11-26 22:30

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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