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

Project1

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

[已经解决] 脚本大神求助啊,关于战斗技能分类的脚本!

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
150 小时
注册时间
2006-4-15
帖子
84
跳转到指定楼层
1
 楼主| 发表于 2013-2-14 09:08:05 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 lsmzzz38 于 2013-2-15 19:31 编辑

我用了一个技能分类的脚本出现了悲剧,附图!
是一个挺好的脚本,悲剧的是没有注释!!!哎呀呀,我就完全看不懂了
悲剧的地方还有,请看图!技能分类在选择攻击目标时没有暂时隐藏!导致盖着敌人很不协调
不过技能的选择框有暂时隐藏的,为什么分类框不隐藏啊,!!好无奈啊


望会脚本的哥哥姐姐告诉我,或者帮我改改!!小弟谢谢了
  1. module RPG
  2. class Skill
  3.    def description
  4.      description = @description.split(/@/)[0]
  5.      return description != nil ? description : ''
  6.    end
  7.    def desc
  8.      desc = @description.split(/@/)[1]
  9.      return desc != nil ? desc : "普通技能"
  10.    end
  11. end
  12. end
  13. class Liuliu_Window_SkillCommand < Window_Selectable
  14. attr_accessor :commands
  15.   def initialize(actor)
  16.     super(0, 0, 160, 216)
  17.     if $game_temp.in_battle
  18.       [url=home.php?mod=space&uid=95897]@actor[/url] = actor
  19.     else
  20.       [url=home.php?mod=space&uid=95897]@actor[/url] = $game_party.members[actor]
  21.     end
  22.     refresh
  23.     self.index = 0
  24.   end
  25. def addcommand
  26.   @commands = []
  27.   for skill in @actor.skills
  28.     push = true
  29.     for com in @commands
  30.       if com == skill.desc
  31.         push = false
  32.       end
  33.     end
  34.     if push == true
  35.       @commands.push(skill.desc)
  36.     end
  37.   end
  38.   if @commands == []
  39.     @commands.push("普通技能")
  40.   end      
  41.   @item_max = @commands.size
  42. end
  43.    
  44. def refresh
  45.    addcommand
  46.    create_contents
  47.    for i in 0...@item_max
  48.      draw_item(i, normal_color)
  49.    end
  50. end
  51. def draw_item(index, color)
  52.    self.contents.font.color = color
  53.    y = index * WLH
  54.    self.contents.draw_text(4, y, 128, WLH, @commands[index])
  55. end
  56. def update_help
  57.    @help_window.set_text(@commands[self.index])
  58. end
  59. end

  60. class Liuliu_Window_SkillList < Window_Selectable
  61.   def initialize(actor)
  62.    super(160, 0, 384, 360)
  63.    @actor = actor
  64.    refresh
  65.    self.index = 0
  66.    if $game_temp.in_battle
  67.      self.y = 56
  68.      self.height = 232
  69.      self.back_opacity = 200
  70.    end
  71. end
  72. def skill
  73.    return @data[self.index]
  74. end
  75. def refresh
  76.    @data = []
  77. end
  78. def set_item(command)
  79.    refresh
  80.    for skill in @actor.skills
  81.      if skill != nil and skill.desc == command
  82.        @data.push(skill)
  83.      end
  84.    end
  85.    @item_max = @data.size
  86.    if @item_max > 0
  87.      self.contents = Bitmap.new(width - 32, row_max * 32)
  88.      self.contents.clear
  89.      for i in 0...@item_max
  90.        draw_item(i)
  91.      end
  92.    end
  93. end
  94.   
  95.   def draw_item(index)
  96.     rect = item_rect(index)
  97.     self.contents.clear_rect(rect)
  98.     skill = @data[index]
  99.     if skill != nil
  100.       rect.width -= 4
  101.       enabled = @actor.skill_can_use?(skill)
  102.       draw_item_name(skill, rect.x, rect.y, enabled)
  103.       self.contents.draw_text(rect, @actor.calc_mp_cost(skill), 2)
  104.     end
  105.   end
  106.    
  107. def update_help
  108.    @help_window.set_text(self.skill == nil ? "" : self.skill.description)
  109. end
  110. end
  111. class Temp_Window_SkillStatus < Window_Base
  112. def initialize(actor)
  113.    super(0, 216, 160, 144)
  114.    self.contents = Bitmap.new(width - 32, height - 32)
  115.    @actor = actor
  116.    refresh
  117. end
  118.   
  119. def refresh
  120.    self.contents.clear
  121.    draw_actor_name(@actor, 4, 0)
  122.    draw_actor_hp(@actor, 4, 32, 120)
  123.    draw_actor_mp(@actor, 4, 64, 120)
  124. end
  125. end
  126. class Temp_Window_Help < Window_Base
  127.    
  128.   def initialize
  129.     super(0, 360, 544, WLH + 32)
  130.   end
  131.   def set_text(text, align = 0)
  132.     if text != @text or align != @align
  133.       self.contents.clear
  134.       self.contents.font.color = normal_color
  135.       self.contents.draw_text(4, 0, self.width - 40, WLH , text, align)
  136.       @text = text
  137.       @align = align
  138.     end
  139.   end
  140. end
  141. class Temp_Window_MenuStatus < Window_Selectable
  142.   def initialize(x, y)
  143.     super(x, y, 288, 416)
  144.     refresh
  145.     self.active = false
  146.     self.index = -1
  147.   end
  148.   def refresh
  149.     self.contents.clear
  150.     @item_max = $game_party.members.size
  151.     for actor in $game_party.members
  152.       x = 8
  153.       y = actor.index * 96 + WLH / 2
  154.       draw_actor_name(actor, x, y)
  155.       draw_actor_class(actor, x + 120, y)
  156.       draw_actor_level(actor, x, y + WLH * 1)
  157.       draw_actor_state(actor, x, y + WLH * 2)
  158.       draw_actor_hp(actor, x + 120, y + WLH * 1)
  159.       draw_actor_mp(actor, x + 120, y + WLH * 2)
  160.     end
  161.   end
  162.   def update_cursor
  163.     if @index < 0               
  164.       self.cursor_rect.empty
  165.     elsif @index < @item_max   
  166.       self.cursor_rect.set(0, @index * 96, contents.width, 96)
  167.     elsif @index >= 100         
  168.       self.cursor_rect.set(0, (@index - 100) * 96, contents.width, 96)
  169.     else                        
  170.       self.cursor_rect.set(0, 0, contents.width, @item_max * 96)
  171.     end
  172.   end
  173. end
  174. class Scene_Skill < Scene_Base
  175.   def initialize(actor_index = 0, equip_index = 0)
  176.     @actor_index = actor_index
  177.   end
  178.   def start
  179.     super
  180.     create_menu_background
  181.     @actor = $game_party.members[@actor_index]
  182.     @viewport = Viewport.new(0, 0, 544, 416)
  183.     @help_window = Temp_Window_Help.new
  184.     @status_window = Temp_Window_SkillStatus.new(@actor)
  185.     @itemcommand_window = Liuliu_Window_SkillCommand.new(@actor_index)
  186.     @command_index = @itemcommand_window.index
  187.     @skill_window = Liuliu_Window_SkillList.new($game_party.members[@actor_index])
  188.     @skill_window.help_window = @help_window
  189.     @skill_window.set_item(@itemcommand_window.commands[@command_index])
  190.     @target_window = Temp_Window_MenuStatus.new(96, 0)
  191.     @skill_window.active = false
  192.     hide_target_window
  193.   end
  194.   def terminate
  195.     super
  196.     dispose_menu_background
  197.     @help_window.dispose
  198.     @itemcommand_window.dispose
  199.     @status_window.dispose
  200.     @skill_window.dispose
  201.     @target_window.dispose
  202.   end
  203.   def return_scene
  204.     $scene = Scene_Menu.new(1)
  205.   end
  206.   def next_actor
  207.     @actor_index += 1
  208.     @actor_index %= $game_party.members.size
  209.     $scene = Scene_Skill.new(@actor_index)
  210.     @skill_window.active = false
  211.   end
  212.   def prev_actor
  213.     @actor_index += $game_party.members.size - 1
  214.     @actor_index %= $game_party.members.size
  215.     $scene = Scene_Skill.new(@actor_index)
  216.     @skill_window.active = false
  217.   end
  218.   def update
  219.     super
  220.     update_menu_background
  221.     @itemcommand_window.update
  222.     @help_window.update
  223.     @status_window.update
  224.     @skill_window.update
  225.     @target_window.update
  226.    if @command_index != @itemcommand_window.index
  227.      @command_index = @itemcommand_window.index
  228.      @skill_window.index = 0
  229.      @skill_window.set_item(@itemcommand_window.commands[@command_index])
  230.    end
  231.    if @itemcommand_window.active
  232.      update_itemcommand
  233.    elsif @skill_window.active
  234.      update_itemlist
  235.    elsif @target_window.active
  236.      update_target
  237.    end
  238.   end
  239. def update_itemcommand
  240.    if Input.trigger?(Input::B)
  241.      Sound.play_cancel
  242.      return_scene
  243.    elsif Input.trigger?(Input::C)
  244.      Sound.play_decision
  245.      @itemcommand_window.active = false
  246.      @skill_window.active = true
  247.      @skill_window.index = 0
  248.    elsif Input.trigger?(Input::R)
  249.       Sound.play_cursor
  250.       next_actor
  251.    elsif Input.trigger?(Input::L)
  252.       Sound.play_cursor
  253.       prev_actor
  254.    end  
  255. end
  256.   
  257.   def update_itemlist
  258.     if Input.trigger?(Input::B)
  259.       Sound.play_cancel
  260.       @itemcommand_window.active = true
  261.       @skill_window.active = false
  262.       @skill_window.index = 0
  263.     elsif Input.trigger?(Input::C)
  264.       [url=home.php?mod=space&uid=260100]@skill[/url] = @skill_window.skill
  265.       if [url=home.php?mod=space&uid=260100]@skill[/url] != nil
  266.         @actor.last_skill_id = @skill.id
  267.       end
  268.       if @actor.skill_can_use?(@skill)
  269.         Sound.play_decision
  270.         determine_skill
  271.       else
  272.         Sound.play_buzzer
  273.       end
  274.     end
  275.   end
  276.   def determine_skill
  277.     if @skill.for_friend?
  278.       show_target_window(@skill_window.index % 2 == 0)
  279.       if @skill.for_all?
  280.         @target_window.index = 99
  281.       elsif @skill.for_user?
  282.         @target_window.index = @actor_index + 100
  283.       else
  284.         if $game_party.last_target_index < @target_window.item_max
  285.           @target_window.index = $game_party.last_target_index
  286.         else
  287.           @target_window.index = 0
  288.         end
  289.       end
  290.     else
  291.       use_skill_nontarget
  292.     end
  293.   end
  294.   def update_target
  295.     if Input.trigger?(Input::B)
  296.       Sound.play_cancel
  297.       hide_target_window
  298.       @skill_window.active = true
  299.     elsif Input.trigger?(Input::C)
  300.       if not @actor.skill_can_use?(@skill)
  301.         Sound.play_buzzer
  302.       else
  303.         determine_target
  304.       end
  305.     end
  306.   end
  307.   def determine_target
  308.     used = false
  309.     if @skill.for_all?
  310.       for target in $game_party.members
  311.         target.skill_effect(@actor, @skill)
  312.         used = true unless target.skipped
  313.       end
  314.     elsif @skill.for_user?
  315.       target = $game_party.members[@target_window.index - 100]
  316.       target.skill_effect(@actor, @skill)
  317.       used = true unless target.skipped
  318.     else
  319.       $game_party.last_target_index = @target_window.index
  320.       target = $game_party.members[@target_window.index]
  321.       target.skill_effect(@actor, @skill)
  322.       used = true unless target.skipped
  323.     end
  324.     if used
  325.       use_skill_nontarget
  326.     else
  327.       Sound.play_buzzer
  328.     end
  329.   end
  330.   def show_target_window(right)
  331.     @skill_window.active = false
  332.     width_remain = 544 - @target_window.width
  333.     @target_window.x = right ? width_remain : 0
  334.     @target_window.visible = true
  335.     @target_window.active = true
  336.     if right
  337.       @viewport.rect.set(0, 0, width_remain, 416)
  338.       @viewport.ox = 0
  339.     else
  340.       @viewport.rect.set(@target_window.width, 0, width_remain, 416)
  341.       @viewport.ox = @target_window.width
  342.     end
  343.   end
  344.   def hide_target_window
  345.     @skill_window.refresh
  346.     @target_window.visible = false
  347.     @target_window.active = false
  348.     @skill_window.set_item(@itemcommand_window.commands[@command_index])
  349.     @viewport.rect.set(0, 0, 544, 416)
  350.     @viewport.ox = 0
  351.   end
  352.   def use_skill_nontarget
  353.     Sound.play_use_skill
  354.     @actor.mp -= @actor.calc_mp_cost(@skill)
  355.     @status_window.refresh
  356.     @skill_window.refresh
  357.     @target_window.refresh
  358.     if $game_party.all_dead?
  359.       $scene = Scene_Gameover.new
  360.     elsif @skill.common_event_id > 0
  361.       $game_temp.common_event_id = @skill.common_event_id
  362.       $scene = Scene_Map.new
  363.     end
  364.   end
  365. end

  366. #part2:战斗界面里技能分类
  367. class Scene_Battle < Scene_Base  
  368.   def start_skill_selection
  369.     @help_window = Window_Help.new
  370.     @skill_window = Liuliu_Window_SkillList.new(@active_battler)
  371.     @skill_window.help_window = @help_window
  372.     @itemcommand_window = Liuliu_Window_SkillCommand.new(@active_battler)
  373.     @itemcommand_window.y = 56
  374.     @itemcommand_window.height = 232
  375.     @itemcommand_window.active = true
  376.     @itemcommand_window.back_opacity = 200
  377.     @itemcommand_window.help_window = @help_window
  378.     @command_index = @itemcommand_window.index
  379.     @skill_window.set_item(@itemcommand_window.commands[@command_index])
  380.     @actor_command_window.active = false
  381.     @skill_window.active = false
  382.   end
  383.   def end_skill_selection
  384.     if @skill_window != nil
  385.       @skill_window.dispose
  386.       @skill_window = nil
  387.       @help_window.dispose
  388.       @help_window = nil
  389.       @itemcommand_window.dispose
  390.       @itemcommand_window = nil  
  391.     end
  392.     @actor_command_window.active = true
  393.   end
  394.   def update_skill_selection
  395.     @skill_window.visible = true
  396.     @itemcommand_window.visible = true
  397.     @itemcommand_window.update
  398.     if @command_index != @itemcommand_window.index
  399.       @command_index = @itemcommand_window.index
  400.       @skill_window.set_item(@itemcommand_window.commands[@command_index])
  401.       @skill_window.index = 0
  402.     end
  403.     @skill_window.update
  404.     @help_window.update
  405.     if Input.trigger?(Input::B)
  406.       Sound.play_cancel
  407.       if @skill_window.active == true then
  408.         @itemcommand_window.active = true
  409.         @skill_window.active = false
  410.       else
  411.         end_skill_selection
  412.       end
  413.     elsif Input.trigger?(Input::C)
  414.       if @skill_window.active == false
  415.         @skill_window.active = true
  416.         @itemcommand_window.active = false
  417.         Sound.play_decision
  418.         return
  419.       end
  420.       @skill = @skill_window.skill
  421.       if @skill != nil
  422.         @active_battler.last_skill_id = @skill.id
  423.       end
  424.       if @active_battler.skill_can_use?(@skill)
  425.         Sound.play_decision
  426.         determine_skill
  427.       else
  428.         Sound.play_buzzer
  429.       end
  430.     end
  431.   end
  432.   def determine_skill
  433.     @active_battler.action.set_skill(@skill.id)
  434.     @skill_window.active = false
  435.     if @skill.need_selection?
  436.       if @skill.for_opponent?
  437.         start_target_enemy_selection
  438.       else
  439.         start_target_actor_selection
  440.       end
  441.     else
  442.       end_skill_selection
  443.       next_actor
  444.     end
  445.   end
  446.   def update_target_actor_selection
  447.     @target_actor_window.update
  448.     if Input.trigger?(Input::B)
  449.       Sound.play_cancel
  450.       @skill_window.active = true
  451.       end_target_actor_selection
  452.     elsif Input.trigger?(Input::C)
  453.       Sound.play_decision
  454.       @active_battler.action.target_index = @target_actor_window.index
  455.       end_target_actor_selection
  456.       end_skill_selection
  457.       end_item_selection
  458.       next_actor
  459.     end
  460.   end
  461.    
  462.   def update_target_enemy_selection
  463.     @target_enemy_window.update
  464.     if Input.trigger?(Input::B)
  465.       Sound.play_cancel
  466.       @skill_window.active = true if @skill_window != nil
  467.       end_target_enemy_selection
  468.     elsif Input.trigger?(Input::C)
  469.       Sound.play_decision
  470.       @active_battler.action.target_index = @target_enemy_window.enemy.index
  471.       end_target_enemy_selection
  472.       end_skill_selection
  473.       end_item_selection
  474.       next_actor
  475.     end
  476.   end
  477. end

复制代码

无奈啊.jpg (36.34 KB, 下载次数: 24)

无奈啊.jpg

Lv1.梦旅人

梦石
0
星屑
75
在线时间
435 小时
注册时间
2012-7-31
帖子
796
2
发表于 2013-2-14 15:59:27 | 只看该作者
请把你的横版系统一起发上来。
这个脚本在默认系统中没有任何问题,目测楼主用的横版脚本和它有冲突。

评分

参与人数 1星屑 +25 收起 理由
怪蜀黍 + 25 喵,果照什么的是真的吗?

查看全部评分

回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
150 小时
注册时间
2006-4-15
帖子
84
3
 楼主| 发表于 2013-2-15 00:14:52 | 只看该作者
http://yuxuana.ys168.com/
文件比较大哟,我给你网站吧,是里面的整合系统!!!陪这个技能分类的!!
谢谢了
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
150 小时
注册时间
2006-4-15
帖子
84
4
 楼主| 发表于 2013-2-15 00:16:11 | 只看该作者
原野清平 发表于 2013-2-14 15:59
请把你的横版系统一起发上来。
这个脚本在默认系统中没有任何问题,目测楼主用的横版脚本和它有冲突。 ...

帮帮忙,谢谢哟!
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
75
在线时间
435 小时
注册时间
2012-7-31
帖子
796
5
发表于 2013-2-15 10:44:53 | 只看该作者
在外地呢,可能要今天下午才能来。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
150 小时
注册时间
2006-4-15
帖子
84
6
 楼主| 发表于 2013-2-15 12:09:58 | 只看该作者
没事,我很有时间
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
75
在线时间
435 小时
注册时间
2012-7-31
帖子
796
7
发表于 2013-2-15 17:41:04 | 只看该作者
在脚本的 def update_target_actor_selection 这一行下面加入这个:
@itemcommand_window.visible = false
大事告成。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
150 小时
注册时间
2006-4-15
帖子
84
8
 楼主| 发表于 2013-2-15 18:19:30 | 只看该作者
原野清平 发表于 2013-2-15 17:41
在脚本的 def update_target_actor_selection 这一行下面加入这个:
@itemcommand_window.visible = false ...

还是这样子,是不是要改很多,看不懂英语真蛋疼!!

还是这样.jpg (32.67 KB, 下载次数: 22)

还是这样.jpg
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
75
在线时间
435 小时
注册时间
2012-7-31
帖子
796
9
发表于 2013-2-15 18:24:51 | 只看该作者
本帖最后由 原野清平 于 2013-2-15 19:00 编辑

@skill = @skill_window.skill 搜索这东西
在最后一个搜索结果前面加上@itemcommand_window.visible = false
再试试

点评

灰常好的小平  发表于 2013-2-15 19:30

评分

参与人数 1星屑 +34 收起 理由
怪蜀黍 + 34 理论是对的,是不是他有其他的脚本冲突?.

查看全部评分

回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
150 小时
注册时间
2006-4-15
帖子
84
10
 楼主| 发表于 2013-2-15 19:29:50 | 只看该作者
感恩感恩啊!啊P你来啦
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-6-3 20:28

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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