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

Project1

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

关于技能使用者本人使用时错误的问题...

 关闭 [复制链接]

Lv1.梦旅人

垃圾死人

梦石
0
星屑
50
在线时间
285 小时
注册时间
2009-1-27
帖子
2420

贵宾

跳转到指定楼层
1
发表于 2009-3-5 23:22:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
我使用了KKME整合系统v0.12来当游戏系统...当然..自己更改了很多地方
然后我弄了个技能.使用场合是菜单.使用范围只能是使用者本人
然后进入游戏使用技能的时候出现脚本错误...
第231行         @skill_target_window.index = @skill_actor_index - 15
而我把使用范围改为己方单人又正常...
请问怎么解决呢???
脚本如下:
  1. #==============================================================================
  2. # ■ Scene_Skill
  3. #------------------------------------------------------------------------------
  4. #  处理特技画面的类。
  5. #==============================================================================

  6. class Scene_Skill
  7.   def initialize(index)
  8.     @cmd_index = index
  9.   end  

  10.   def main
  11.     cmd = Window_Command_New.new($game_party.actors.size)
  12.     cmd.index = @cmd_index
  13.     cmd.active = false
  14.     # 生成角色索引窗口
  15.     @skill_actor_window = Window_Character.new
  16.     @skill_actor_window.y = 480
  17.     @skill_actor_window.opacity = KKME::MENU_OPACITY
  18.     @skill_actor_window.index = 0
  19.     @flash_viewport_time = 0
  20.     @flash_viewport = Viewport.new(30, 396, 580, 64)
  21.     @flash_viewport.z = 9999
  22.    
  23.     @skill_acotr_index = @skill_actor_window.index
  24.     # 获取角色
  25.     @skill_actor = $game_party.actors[@skill_acotr_index]
  26.     # 生成帮助窗口、状态窗口、特技窗口
  27.     @skill_help_window = Window_Help_New.new
  28.     @skill_help_window.x = 30
  29.     @skill_help_window.y = 480
  30.     @skill_help_window.opacity = KKME::MENU_OPACITY
  31.    
  32.     @skill_status_window = Window_SkillStatus.new(@skill_actor)
  33.     @skill_status_window.opacity = KKME::MENU_OPACITY
  34.     @skill_status_window.x = -368
  35.    
  36.     @skill_skill_window = Window_Skill.new(@skill_actor)
  37.     @skill_skill_window.opacity = KKME::MENU_OPACITY
  38.     @skill_skill_window.y = 480
  39.     @skill_skill_window.active = false
  40.     # 关联帮助窗口
  41.     @skill_skill_window.help_window = @skill_help_window
  42.     # 生成目标窗口 (设置为不可见・不活动)
  43.     @skill_target_window = Window_Target.new
  44.     @skill_target_window.y = 480
  45.     @skill_target_window.visible = false
  46.     @skill_target_window.active = false
  47.     @skill_target_window.opacity = KKME::MENU_OPACITY
  48.     # 窗口的滑动
  49.     Graphics.transition
  50.     for i in 1..8
  51.       @skill_status_window.x += 52
  52.       @skill_skill_window.y -= 36
  53.       @skill_actor_window.y -= 10
  54.       if i==8
  55.         @skill_status_window.x = 50
  56.         @skill_skill_window.y = 192
  57.         @skill_actor_window.y = 396
  58.       end
  59.       Graphics.update
  60.     end

  61.     @flash_viewport_time = 20
  62.     @flash_viewport.flash(Color.new(255,255,255,255),20)
  63.     # 主循环
  64.     loop do
  65.       # 刷新游戏画面
  66.       Graphics.update
  67.       # 刷新输入信息
  68.       Input.update
  69.       # 刷新画面
  70.       update_skill_scene
  71.       # 如果画面切换的话就中断循环
  72.       if $scene != self
  73.         break
  74.       end
  75.     end
  76.     # 窗口的滑动
  77.     for i in 1..9
  78.       @skill_status_window.x -= 52
  79.       @skill_skill_window.y += 36
  80.       @skill_actor_window.y += 10
  81.       Graphics.update
  82.     end
  83.     Graphics.freeze
  84.     cmd.dispose
  85.     # 释放窗口
  86.     @skill_help_window.dispose
  87.     @skill_status_window.dispose
  88.     @skill_skill_window.dispose
  89.     @skill_target_window.dispose
  90.    
  91.     @flash_viewport.dispose
  92.     @skill_actor_window.dispose
  93.   end
  94.   #--------------------------------------------------------------------------
  95.   # ● 刷新画面
  96.   #--------------------------------------------------------------------------
  97.   def update_skill_scene
  98.     # 刷新窗口
  99.     @skill_help_window.update
  100.     @skill_status_window.update
  101.     @skill_skill_window.update
  102.     @skill_target_window.update
  103.     @skill_actor_window.update   
  104.    
  105.     if @flash_viewport_time >0
  106.       @flash_viewport_time -= 1
  107.       @flash_viewport.update
  108.     end
  109.    
  110.     if @skill_acotr_index != @skill_actor_window.index
  111.       @skill_acotr_index = @skill_actor_window.index
  112.       @skill_actor = $game_party.actors[@skill_acotr_index]
  113.       @skill_skill_window.set_actor(@skill_actor)
  114.       @skill_status_window.set_actor(@skill_actor)
  115.     end
  116.    
  117.    
  118.     # 特技窗口被激活的情况下: 调用 update_skill
  119.     if @skill_skill_window.active
  120.       skill_update_skill
  121.       return
  122.     end
  123.     # 目标窗口被激活的情况下: 调用 update_target
  124.     if @skill_target_window.active
  125.       skill_update_target
  126.       return
  127.     end

  128.     if @skill_actor_window.active
  129.       skill_update_actor_window
  130.       return
  131.     end

  132.   end
  133.   
  134.   def skill_update_actor_window
  135.     @skill_actor = $game_party.actors[@skill_actor_window.index]
  136.     if Input.trigger?(Input::B)
  137.       # 演奏取消 SE
  138.       $game_system.se_play($data_system.cancel_se)
  139.       # 切换到菜单画面
  140.       $scene = Scene_Menu.new(@cmd_index)
  141.       return
  142.     end
  143.    
  144.     if Input.trigger?(Input::C)
  145.       # 演奏确定 SE
  146.       $game_system.se_play($data_system.decision_se)
  147.       # 激活物品窗口
  148.       @skill_skill_window.active = true
  149.       @skill_actor_window.active = false
  150.       @skill_skill_window.index = 0
  151.       
  152.       for i in 1..8
  153.         @skill_actor_window.y += 10
  154.         @skill_help_window.y -= 10
  155.         if i==8
  156.           @skill_actor_window.y = 480
  157.           @skill_help_window.y = 396
  158.         end
  159.         Graphics.update
  160.       end
  161.       
  162.       return
  163.     end
  164.   end
  165.   #--------------------------------------------------------------------------
  166.   # ● 刷新画面 (特技窗口被激活的情况下)
  167.   #--------------------------------------------------------------------------
  168.   def skill_update_skill
  169.     # 按下 B 键的情况下
  170.     if Input.trigger?(Input::B)
  171.       # 演奏取消 SE
  172.       $game_system.se_play($data_system.cancel_se)

  173.       # 结束该菜单
  174.       @skill_skill_window.active = false
  175.       @skill_actor_window.active = true
  176.       
  177.       for i in 1..8
  178.         @skill_actor_window.y -= 10
  179.         @skill_help_window.y += 10
  180.         if i==8
  181.           @skill_actor_window.y = 396
  182.           @skill_help_window.y = 480
  183.         end
  184.         Graphics.update
  185.       end
  186.       
  187.       return
  188.     end
  189.    
  190.    
  191.    
  192.     # 按下 C 键的情况下
  193.     if Input.trigger?(Input::C)
  194.       # 获取特技窗口现在选择的特技的数据
  195.       @skill = @skill_skill_window.skill
  196.       # 不能使用的情况下
  197.       if @skill == nil or not @skill_actor.skill_can_use?(@skill.id)
  198.         # 演奏冻结 SE
  199.         $game_system.se_play($data_system.buzzer_se)
  200.         return
  201.       end
  202.       # 演奏确定 SE
  203.       $game_system.se_play($data_system.decision_se)
  204.       # 效果范围是我方的情况下
  205.       if @skill.scope >= 3
  206.         # 激活目标窗口
  207.         @skill_skill_window.active = false
  208. #       @skill_target_window.x = (@skill_skill_window.index + 1) % 2 * 304
  209.         @skill_target_window.visible = true
  210.         @skill_target_window.active = true
  211.         
  212.         for i in 1..8
  213.           @skill_target_window.y -= 39
  214.           if i==8
  215.             @skill_target_window.y = 164
  216.           end
  217.           Graphics.update
  218.         end
  219.         
  220.         
  221.         # 设置效果范围 (单体/全体) 的对应光标位置
  222.         if @skill.scope == 4 || @skill.scope == 6
  223.           @skill_target_window.index = -1
  224.         elsif @skill.scope == 7
  225.           @skill_target_window.index = @skill_actor_index - 15
  226.         else
  227.           @skill_target_window.index = 0
  228.         end
  229.       # 效果在我方以外的情况下
  230.       else
  231.         # 公共事件 ID 有效的情况下
  232.         if @skill.common_event_id > 0
  233.           # 预约调用公共事件
  234.           $game_temp.common_event_id = @skill.common_event_id
  235.           # 演奏特技使用时的 SE
  236.           $game_system.se_play(@skill.menu_se)
  237.           # 消耗 SP
  238.           @skill_actor.sp -= @skill.sp_cost
  239.           # 再生成各窗口的内容
  240.           @skill_status_window.refresh
  241.           @skill_skill_window.refresh
  242.           @skill_target_window.refresh
  243.           # 切换到地图画面
  244.           $scene = Scene_Map.new
  245.           return
  246.         end
  247.       end
  248.       return
  249.     end

  250.   end
  251.   #--------------------------------------------------------------------------
  252.   # ● 刷新画面 (目标窗口被激活的情况下)
  253.   #--------------------------------------------------------------------------
  254.   def skill_update_target
  255.     # 按下 B 键的情况下
  256.     if Input.trigger?(Input::B)
  257.       # 演奏取消 SE
  258.       $game_system.se_play($data_system.cancel_se)
  259.       # 删除目标窗口
  260.       @skill_skill_window.active = true
  261.       
  262.       for i in 1..9
  263.         @skill_target_window.y += 39
  264.         Graphics.update
  265.       end
  266.       
  267.       @skill_target_window.visible = false
  268.       @skill_target_window.active = false
  269.       return
  270.     end
  271.     # 按下 C 键的情况下
  272.     if Input.trigger?(Input::C)
  273.       # 因为 SP 不足而无法使用的情况下
  274.       unless @skill_actor.skill_can_use?(@skill.id)
  275.         # 演奏冻结 SE
  276.         $game_system.se_play($data_system.buzzer_se)
  277.         return
  278.       end
  279.       # 目标是全体的情况下
  280.       if @skill_target_window.index == -1
  281.         # 对同伴全体应用特技使用效果
  282.         used = false
  283.         for i in $game_party.actors
  284.           used |= i.skill_effect(@skill_actor, @skill)
  285.         end
  286.       end
  287.       # 目标是使用者的情况下
  288.       if @skill_target_window.index <= -2
  289.         # 对目标角色应用特技的使用效果
  290.         target = $game_party.actors[@skill_target_window.index + 10]
  291.         used = target.skill_effect(@skill_actor, @skill)
  292.       end
  293.       # 目标是单体的情况下
  294.       if @skill_target_window.index >= 0
  295.         # 对目标角色应用特技的使用效果
  296.         target = $game_party.actors[@skill_target_window.index]
  297.         used = target.skill_effect(@skill_actor, @skill)
  298.       end
  299.       # 使用特技的情况下
  300.       if used
  301.         # 演奏特技使用时的 SE
  302.         $game_system.se_play(@skill.menu_se)
  303.         # 消耗 SP
  304.         @skill_actor.sp -= @skill.sp_cost
  305.         # 再生成各窗口内容
  306.         @skill_status_window.refresh
  307.         @skill_skill_window.refresh
  308.         @skill_target_window.refresh
  309.         # 全灭的情况下
  310.         if $game_party.all_dead?
  311.           # 切换到游戏结束画面
  312.           $scene = Scene_Gameover.new
  313.           return
  314.         end
  315.         # 公共事件 ID 有效的情况下
  316.         if @skill.common_event_id > 0
  317.           # 预约调用公共事件
  318.           $game_temp.common_event_id = @skill.common_event_id
  319.           # 切换到地图画面
  320.           $scene = Scene_Map.new
  321.           return
  322.         end
  323.       end
  324.       # 无法使用特技的情况下
  325.       unless used
  326.         # 演奏冻结 SE
  327.         $game_system.se_play($data_system.buzzer_se)
  328.       end
  329.       return
  330.     end
  331.   end
  332. end
复制代码
努力努力再努力

Lv1.梦旅人

梦石
0
星屑
50
在线时间
4 小时
注册时间
2009-2-14
帖子
86
2
发表于 2009-3-6 01:37:59 | 只看该作者
我单用你脚本的时候貌似没有这种问题啊?
这行东西是用来设定光标位置的,
skill_scope=7对象就是【使用者】,
要不你直接把 @skill_target_window.index = @skill_actor_index - 15
改成 @skill_target_window.index = -1试试?
命脉无常,何须怜惜? 埋葬吧!不动无名剑!
回复 支持 反对

使用道具 举报

Lv1.梦旅人

垃圾死人

梦石
0
星屑
50
在线时间
285 小时
注册时间
2009-1-27
帖子
2420

贵宾

3
 楼主| 发表于 2009-3-6 19:08:39 | 只看该作者
@skill_target_window.index = -1
如果改成这样的话那就都是全选模式了...虽然使用了后还是使用者本人.但是未免有点怪怪的...
不过经过这么提示.我就在想.是不是因为使用范围是使用者本人.属于不可选择的..
而@skill_target_window.index = @skill_actor_index - 15却是可移动选框,所以出现错误呢?
努力努力再努力
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2025-1-17 07:46

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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