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

Project1

 找回密码
 注册会员
搜索
查看: 5322|回复: 10

[已经解决] 脚本问题请教

[复制链接]

Lv3.寻梦者

梦石
0
星屑
1410
在线时间
148 小时
注册时间
2018-3-24
帖子
145
发表于 2019-2-13 18:24:16 | 显示全部楼层 |阅读模式
30星屑
QQ图片20190213181859.png QQ图片20190213181909.png
如图请问是怎么回事

打开菜单点进道具/技能 退回菜单就报错了

最佳答案

查看完整内容

由于个人导入的时候没有出现楼主的问题,只能从语法角度给出修改 在原来的窗口动态刷新脚本下面新开一栏,导入这段脚本,看看能不能解决问题。 class Scene_MenuBase alias get_return_destinations_20190213 get_return_destinations def get_return_destinations get_all_windows.each{|window| window.move_dest ||= [window.x, window.y]} get_return_destinations_20190213 end end[/pre] ...

Lv5.捕梦者

梦石
10
星屑
39440
在线时间
1914 小时
注册时间
2010-11-14
帖子
3315

R考场第七期纪念奖

发表于 2019-2-13 18:24:17 | 显示全部楼层
由于个人导入的时候没有出现楼主的问题,只能从语法角度给出修改
在原来的窗口动态刷新脚本下面新开一栏,导入这段脚本,看看能不能解决问题。

RUBY 代码复制
  1. class Scene_MenuBase
  2.   alias get_return_destinations_20190213 get_return_destinations
  3.   def get_return_destinations
  4.     get_all_windows.each{|window| window.move_dest ||= [window.x, window.y]}
  5.     get_return_destinations_20190213
  6.   end
  7. end
用头画头像,用脚写脚本
回复

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1410
在线时间
148 小时
注册时间
2018-3-24
帖子
145
 楼主| 发表于 2019-2-13 18:26:23 | 显示全部楼层
求大神破解
回复

使用道具 举报

Lv5.捕梦者 (暗夜天使)

梦石
1
星屑
20291
在线时间
4875 小时
注册时间
2014-12-22
帖子
1525

开拓者

发表于 2019-2-13 19:42:46 | 显示全部楼层
不是大神,我猜测是不是读取了旧的存档?有些脚本不兼容旧存档(且说明里并不会特别提示你)。开始新游戏看看报不报错呢?
也有可能是脚本之间冲突了,你可以开个全新的空白工程,只加这个脚本,看报不报错呢?
如果全新工程不报错,再一个一个的添加其他脚本进来,看看是添加到哪一个报错了,那就是它和那个冲突了。然后你可以来发帖把冲突的几个脚本贴出来,等大神来改otz
如果全新工程也报错,那代表这个脚本本身有问题,但是一般别人发布出来的脚本这种情况不多的⋯⋯如果真的是这样还是等大神吧。
(你这不给完整脚本,别人也没法测试呀。下次提问记得把脚本贴全,自己工程的情况描述清楚方便别人定位问题~)
回复

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1410
在线时间
148 小时
注册时间
2018-3-24
帖子
145
 楼主| 发表于 2019-2-13 22:41:16 | 显示全部楼层
shencao 发表于 2019-2-13 19:42
不是大神,我猜测是不是读取了旧的存档?有些脚本不兼容旧存档(且说明里并不会特别提示你)。开始新游戏看 ...

脚本冲突
回复

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1410
在线时间
148 小时
注册时间
2018-3-24
帖子
145
 楼主| 发表于 2019-2-13 22:43:14 | 显示全部楼层
☆窗口动态刷新

  1. #==============================================================================
  2. # ☆ Glimmer/Fatal Guise 窗口动态刷新
  3. # -- Last Updated: 2014.05.01
  4. # -- by ArcDriver
  5. # -- 转载请保留以上信息
  6. #==============================================================================

  7. module GFG_Window_Update
  8.   MOVE_DELTA_X = 50
  9.   MOVE_DELTA_Y = 50
  10.   MOVE_SPEED = 5
  11.   MOVE_SPEED_C = 25.5
  12.   SP_MOVE_OFFSET = 900 # <- window width offset for special moves
  13. end

  14. class Window
  15.   attr_accessor :move_dir                 # move direction
  16.   attr_accessor :move_dest                # move destination
  17. end

  18. #==============================================================================
  19. # ** Scene_Base
  20. #------------------------------------------------------------------------------
  21. #  This is a super class of all scenes within the game.
  22. #==============================================================================
  23. class Scene_MenuBase
  24.   #--------------------------------------------------------------------------
  25.   # ★alias: start
  26.   #--------------------------------------------------------------------------
  27.   alias gfg_start start
  28.   def start
  29.     @starting_scene = true
  30.     gfg_start
  31.     create_plane
  32.   end
  33.   
  34.   #--------------------------------------------------------------------------
  35.   # ☆new method: create_plane
  36.   #--------------------------------------------------------------------------
  37.   def create_plane
  38.     @bg_plane = Plane.new
  39.     @bg_plane.bitmap = Cache.system("sandstorm.png")
  40.     @bg_plane.z = 0
  41.     @bg_plane.blend_type = 0
  42.     @bg_plane.opacity = 75
  43.   end
  44.   
  45.   #--------------------------------------------------------------------------
  46.   # ★alias: terminate
  47.   #--------------------------------------------------------------------------
  48.   alias gfg_terminate terminate
  49.   def terminate
  50.     gfg_terminate
  51.     @bg_plane.dispose
  52.   end
  53.   
  54.   #--------------------------------------------------------------------------
  55.   # ★alias: update
  56.   #--------------------------------------------------------------------------
  57.   alias gfg_update update
  58.   def update
  59.     gfg_update
  60.     #update windows
  61.     if @window_shifted
  62.       s_window = get_all_windows
  63.       if @starting_scene
  64.         @starting_scene = update_sliding_window(s_window)
  65.       elsif @terminating_scene
  66.         @terminating_scene = update_sliding_window(s_window)
  67.       end
  68.     end
  69.     #update bg plane
  70.     @bg_plane.ox += 1
  71.   end
  72.   #--------------------------------------------------------------------------
  73.   # ★alias: return_scene
  74.   #--------------------------------------------------------------------------
  75.   alias gfg_return_scene return_scene
  76.   def return_scene
  77.     if @window_shifted
  78.       get_return_destinations
  79.       @terminating_scene = true
  80.       while @terminating_scene
  81.          update
  82.       end
  83.     end
  84.     gfg_return_scene
  85.   end
  86.   
  87.   #--------------------------------------------------------------------------
  88.   # ☆new method: shift_all_windows
  89.   #--------------------------------------------------------------------------
  90.   def shift_all_windows
  91.     all_windows = get_all_windows
  92.     all_windows.each do |window|
  93.       window.move_dest = [window.x, window.y]
  94.       if window.width >= Graphics.width and window.width < GFG_Window_Update::SP_MOVE_OFFSET \
  95.         and not window.is_a?(Window_RecipeList)
  96.         if window.y + window.height <= Graphics.height / 2 + 50
  97.           window.y -= GFG_Window_Update::MOVE_DELTA_Y
  98.           window.move_dir = 2
  99.         else
  100.           window.y += GFG_Window_Update::MOVE_DELTA_Y
  101.           window.move_dir = 8
  102.         end
  103.       else
  104.         if window.x + window.width <= Graphics.width / 2 or window.width > GFG_Window_Update::SP_MOVE_OFFSET \
  105.           or window.is_a?(Window_RecipeList)
  106.           window.x -= GFG_Window_Update::MOVE_DELTA_X
  107.           window.move_dir = 6
  108.         else
  109.           window.x += GFG_Window_Update::MOVE_DELTA_X
  110.           window.move_dir = 4
  111.         end
  112.       end
  113.       window.contents_opacity = 0
  114.       window.opacity = 0
  115.     end
  116.     @window_shifted = true
  117.   end
  118.   
  119.   #--------------------------------------------------------------------------
  120.   # ☆new method: get_return_destinations
  121.   #--------------------------------------------------------------------------
  122.   def get_return_destinations
  123.     all_windows = get_all_windows
  124.     all_windows.each do |window|
  125.       if window.width >= Graphics.width and window.width < GFG_Window_Update::SP_MOVE_OFFSET \
  126.         and not window.is_a?(Window_RecipeList)
  127.         if window.y + window.height <= Graphics.height / 2 + 50
  128.           window.move_dest[1] -= GFG_Window_Update::MOVE_DELTA_Y
  129.           window.move_dir = 8
  130.         else
  131.           window.move_dest[1] += GFG_Window_Update::MOVE_DELTA_Y
  132.           window.move_dir = 2
  133.         end
  134.       else
  135.         if window.x + window.width <= Graphics.width / 2 or window.width > GFG_Window_Update::SP_MOVE_OFFSET \
  136.           or window.is_a?(Window_RecipeList)
  137.           window.move_dest[0] -= GFG_Window_Update::MOVE_DELTA_X
  138.           window.move_dir = 4
  139.         else
  140.           window.move_dest[0] += GFG_Window_Update::MOVE_DELTA_X
  141.           window.move_dir = 6
  142.         end
  143.       end
  144.     end
  145.   end

  146.   #--------------------------------------------------------------------------
  147.   # ☆new method: get_all_windows
  148.   #--------------------------------------------------------------------------
  149.   def get_all_windows
  150.     all_windows = []
  151.     instance_variables.each do |varname|
  152.       ivar = instance_variable_get(varname)
  153.       if ivar.is_a?(Window)
  154.         all_windows.push(ivar)
  155.       end
  156.     end
  157.     return all_windows
  158.   end
  159.   
  160.   #--------------------------------------------------------------------------
  161.   # ☆new method: update_sliding_window
  162.   #--------------------------------------------------------------------------
  163.   # parameters:
  164.   #   - s_window: windows to be updated
  165.   #--------------------------------------------------------------------------
  166.   def update_sliding_window(s_window)
  167.    
  168.     speed = GFG_Window_Update::MOVE_SPEED
  169.     c_speed = GFG_Window_Update::MOVE_SPEED_C
  170.    
  171.     c_speed *= -1 if @terminating_scene
  172.    
  173.     for i in 0 .. s_window.size-1
  174.         threshold = s_window[i].move_dest
  175.         case s_window[i].move_dir
  176.           when 2 # down
  177.             if s_window[i].y < threshold[1]
  178.               s_window[i].y += speed
  179.             else
  180.               return false
  181.             end
  182.           when 4 # left
  183.             if s_window[i].x > threshold[0]
  184.               s_window[i].x -= speed
  185.             else
  186.               return false
  187.             end
  188.           when 6 # right
  189.             if s_window[i].x < threshold[0]
  190.               s_window[i].x += speed
  191.             else
  192.               return false
  193.             end
  194.           when 8 # up
  195.             if s_window[i].y > threshold[1]
  196.               s_window[i].y -= speed
  197.             else
  198.               return false
  199.             end
  200.         end # of case direction
  201.         
  202.         s_window[i].contents_opacity += c_speed
  203.         #s_window[i].opacity += c_speed
  204.         
  205.     end # of loop over s_windows
  206.    
  207.     return true
  208.       
  209.   end # of method update_sliding_window
  210.    
  211. end # of Scene_Base
复制代码
回复

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1410
在线时间
148 小时
注册时间
2018-3-24
帖子
145
 楼主| 发表于 2019-2-13 22:45:53 | 显示全部楼层
技能升级


  1. module Snstar2006
  2.   module Skill_LvUp
  3.     SKILL_LVUP_NO_FORGET = false # 升级时不遗忘旧技能
  4.     SKILL_MANUAL_LVUP    = false # 手动升级
  5.     SKILL_RES_EXP_BASE   = 2     # 升级点数基数,数字越大,获得越少
  6.     SKILL_MAN_LVUP_KEY   = :X    # 手动升级的按键设定
  7.    
  8.     SKILL_EXP_VOCAB      = "熟练度"   # 技能熟练度术语
  9.     SKILL_REXP_VOCAB     = "精元点数" # 技能提升点数术语
  10.   end
  11. end


  12. class RPG::Skill < RPG::UsableItem
  13.   include Snstar2006::Skill_LvUp
  14.   #--------------------------------------------------------------------------
  15.   # ● 获取技能最高等级
  16.   #--------------------------------------------------------------------------
  17.   def get_max_skill
  18.     self.note.split(/[\r\n]+/).each{ |line|
  19.       if line =~ /\[(?:max_level) (\d+)\]/
  20.         return $1 ? $1.to_i : 1
  21.       end}
  22.     return 1
  23.   end
  24.   #--------------------------------------------------------------------------
  25.   # ● 获取技能熟练度基数
  26.   #--------------------------------------------------------------------------
  27.   def get_exp_base
  28.     self.note.split(/[\r\n]+/).each{ |line|
  29.       if line =~ /\[(?:exp_base) (\d+)\]/
  30.         return $1 ? $1.to_i : 30
  31.       end}
  32.     return 30
  33.   end
  34.   #--------------------------------------------------------------------------
  35.   # ● 获取技能吸收角色经验值作为熟练度的基础值
  36.   #--------------------------------------------------------------------------
  37.   def get_exp_part
  38.     self.note.split(/[\r\n]+/).each{ |line|
  39.       if line =~ /\[(?:exp_part) (\d+)\]/
  40.         return $1 ? $1.to_i : 0
  41.       end}
  42.     return 0
  43.   end
  44.   #--------------------------------------------------------------------------
  45.   # ● 获取技能使用时获取的熟练度
  46.   #--------------------------------------------------------------------------
  47.   def get_use_exp
  48.     self.note.split(/[\r\n]+/).each{ |line|
  49.       if line =~ /\[(?:use_exp) (\d+)\]/
  50.         return $1 ? $1.to_i : 1
  51.       end}
  52.     return 1
  53.   end
  54.   #--------------------------------------------------------------------------
  55.   # ● 获取技能升级后变化的技能
  56.   #--------------------------------------------------------------------------
  57.   def get_on_level(level)
  58.     trans_skill_id = 0
  59.     self.note.split(/[\r\n]+/).each{ |line|
  60.       if line =~ /\[(?:on_level) (\d+)\,(\d+)\]/
  61.         trans_skill_id = $2.to_i if level == $1.to_i
  62.       end}
  63.     return trans_skill_id
  64.   end
  65.   #--------------------------------------------------------------------------
  66.   # ● 获取技能升级后变化的技能
  67.   #--------------------------------------------------------------------------
  68.   def get_inherit
  69.     self.note.split(/[\r\n]+/).each{ |line|
  70.       if line =~ /\[(?:inherit) (\d+)\]/
  71.         return $1 ? $1.to_i : 0
  72.       end}
  73.     return 0
  74.   end
  75.   #--------------------------------------------------------------------------
  76.   # ● 判断是否升级后遗忘
  77.   #--------------------------------------------------------------------------
  78.   def no_forget?
  79.     self.note.split(/[\r\n]+/).each{ |line|
  80.       if line =~ /\[(?:no_forget)\]/
  81.         return true
  82.       end}
  83.     return false
  84.   end
  85.   #--------------------------------------------------------------------------
  86.   # ● 获取技能升级后变化的伤害值基数
  87.   #--------------------------------------------------------------------------
  88.   def get_dmg_var
  89.     self.note.split(/[\r\n]+/).each{ |line|
  90.       if line =~ /\[(?:dmg_var) (\d+)\]/
  91.         return $1 ? $1.to_i : 0
  92.       end}
  93.     return 0
  94.   end
  95.   #--------------------------------------------------------------------------
  96.   # ● 判断是否能升级
  97.   #--------------------------------------------------------------------------
  98.   def can_lvup?
  99.     skill_level_initialize # 技能等级初始化
  100.     return @max_level > 1
  101.   end
  102.   #--------------------------------------------------------------------------
  103.   # ● 判断是否获取角色经验当作熟练度
  104.   #--------------------------------------------------------------------------
  105.   def get_exp_from_actor?
  106.     return false unless can_lvup?
  107.     return @get_exp > 0
  108.   end
  109.   #--------------------------------------------------------------------------
  110.   # ● 判断是否手动升级
  111.   #--------------------------------------------------------------------------
  112.   def manual_lvup?
  113.     return false unless can_lvup?
  114.     return false if transformed
  115.     return true if SKILL_MANUAL_LVUP
  116.     return false if get_exp_from_actor?
  117.     return false if lvup_by_use?
  118.     return true
  119.   end
  120.   #--------------------------------------------------------------------------
  121.   # ● 判断是否在使用时提升熟练度
  122.   #--------------------------------------------------------------------------
  123.   def lvup_by_use?
  124.     return false unless can_lvup?
  125.     return @use_exp > 0
  126.   end
  127.   #--------------------------------------------------------------------------
  128.   # ● 判断是否继承任何技能设定
  129.   #--------------------------------------------------------------------------
  130.   def inherit?
  131.     @transform_from = get_inherit
  132.     return @transform_from > 0
  133.   end
  134.   #--------------------------------------------------------------------------
  135.   # ● 技能等级参数初始化
  136.   #--------------------------------------------------------------------------
  137.   def skill_level_initialize
  138.     return if @skill_level_initialized # 已初始化时跳过
  139.     @max_level = get_max_skill
  140.     @get_exp = get_exp_part
  141.     @use_exp = get_use_exp
  142.     @skill_level_initialized = true
  143.     initialize_skill_transform
  144.     @transformed = false
  145.     @transform_from = 0
  146.     @dmg_var = get_dmg_var
  147.     @fml_altered = false
  148.     if @dmg_var > 0
  149.       $game_variables[@dmg_var]=1
  150.     end
  151.   end
  152.   #--------------------------------------------------------------------------
  153.   # ● 技能等级参数继承
  154.   #--------------------------------------------------------------------------
  155.   def skill_level_inherit
  156.     return unless inherit? # 已设定继承时跳过
  157.     old_skill = $data_skills[@transform_from]
  158.     @max_level = old_skill.get_max_skill
  159.     @get_exp = old_skill.get_exp_part
  160.     @use_exp = old_skill.get_use_exp
  161.     initialize_skill_transform
  162.   end
  163.   #--------------------------------------------------------------------------
  164.   # ● 获取技能吸取角色经验值的基数
  165.   #--------------------------------------------------------------------------
  166.   def exp_from_actor
  167.     return @get_exp
  168.   end
  169.   #--------------------------------------------------------------------------
  170.   # ● 技能变化资讯初始化
  171.   #--------------------------------------------------------------------------
  172.   def initialize_skill_transform
  173.     @skill_transform = []
  174.     1.upto(@max_level){ |level|
  175.       t_id = get_on_level(level)
  176.       if t_id > 0
  177.         @skill_transform = [level, t_id]
  178.         break
  179.       end
  180.     }
  181.   end
  182.   #--------------------------------------------------------------------------
  183.   # ● 判断技能是否会变化
  184.   #--------------------------------------------------------------------------
  185.   def transform?
  186.     return !@skill_transform.empty?
  187.   end
  188.   #--------------------------------------------------------------------------
  189.   # ● 判断技能是否会在某等级变化
  190.   #--------------------------------------------------------------------------
  191.   def transform_at?(level)
  192.     return false unless transform?
  193.     return @skill_transform[0] == level
  194.   end
  195.   def transform_at
  196.     return @skill_transform[0]
  197.   end
  198.   #--------------------------------------------------------------------------
  199.   # ● 获取技能变化后的技能ID
  200.   #--------------------------------------------------------------------------
  201.   def transform_to(level)
  202.     return 0 unless transform_at?(level)
  203.     return @skill_transform[1]
  204.   end
  205.   #--------------------------------------------------------------------------
  206.   # ● 判断技能是否有指定伤害变量
  207.   #--------------------------------------------------------------------------
  208.   def dmg_var?
  209.     return @dmg_var>0
  210.   end
  211.   #--------------------------------------------------------------------------
  212.   # ● 判断技能是否已修改公式
  213.   #--------------------------------------------------------------------------
  214.   def fml_altered?
  215.     return @fml_altered
  216.   end
  217.   attr_reader :max_level # 获取最高等级
  218.   attr_reader :use_exp   # 使用提升熟练度量
  219.   attr_accessor :transformed # 已变化技能
  220.   attr_accessor :fml_altered # 已修改公式
  221.   attr_reader :dmg_var   # 升级提升伤害的变量ID
  222. end
  223. class Game_Actor < Game_Battler
  224.   include Snstar2006::Skill_LvUp
  225.   #--------------------------------------------------------------------------
  226.   # ● 初始化
  227.   #--------------------------------------------------------------------------
  228.   alias skill_level_initialize initialize
  229.   def initialize(actor_id)
  230.     @skill_level = {}    # 纪录技能等级
  231.     @skill_exp = {}      # 记录技能熟练度
  232.     @skill_exp_base = {} # 记录技能熟练度基数
  233.     @skill_next_exp = {} # 记录技能下一级熟练度
  234.     @skill_dmg_val = {}  # 纪录技能伤害变化的变量ID
  235.     @skill_res_exp = 0   # 纪录获取的技能升级点数
  236.     skill_level_initialize(actor_id)
  237.   end
  238.   #--------------------------------------------------------------------------
  239.   # ● 角色习得技能
  240.   #--------------------------------------------------------------------------
  241.   alias skill_level_learn_skill learn_skill
  242.   def learn_skill(skill_id)
  243.     skill_level_learn_skill(skill_id)
  244.     skill = $data_skills[skill_id]
  245.     if skill.can_lvup? # 判断技能是否可升级
  246.       @skill_level[skill_id] = 1
  247.       @skill_exp[skill_id] = 0
  248.       @skill_exp_base[skill_id] = skill.get_exp_base
  249.       @skill_next_exp[skill_id] = @skill_exp_base[skill_id]
  250.       if skill.dmg_var?
  251.         @skill_dmg_val[skill_id] = skill.dmg_var+@actor_id-1
  252.         alter_damage_formula(skill_id)
  253.       end
  254.     end
  255.   end
  256.   #--------------------------------------------------------------------------
  257.   # ● 修改伤害公式
  258.   #--------------------------------------------------------------------------
  259.   def alter_damage_formula(skill_id)
  260.     skill = $data_skills[skill_id]
  261.     return if skill.fml_altered? # 已修改时返回
  262.     formula = skill.damage.formula # 获取公式
  263.     dmg_var_id = @skill_dmg_val[skill_id]
  264.     skill.damage.formula = "(#{formula})*v[#{dmg_var_id}]"
  265.     skill.fml_altered = true # 标记为已修改
  266.   end
  267.   #--------------------------------------------------------------------------
  268.   # ● 判断技能是否能升级
  269.   #--------------------------------------------------------------------------
  270.   def skill_can_lvup?(skill_id)
  271.     return false unless $data_skills[skill_id].can_lvup? # 技能不可升级
  272.     return false unless @skills.include?(skill_id) # 角色未学习此技能
  273.     return @skill_level[skill_id] < max_skill_level(skill_id) # 技能未达最高等级
  274.   end
  275.   #--------------------------------------------------------------------------
  276.   # ● 获取技能最高等级
  277.   #--------------------------------------------------------------------------
  278.   def max_skill_level(skill_id)
  279.     return $data_skills[skill_id].max_level
  280.   end
  281.   #--------------------------------------------------------------------------
  282.   # ● 获取技能等级
  283.   #--------------------------------------------------------------------------
  284.   def skill_level(skill_id)
  285.     return 1 unless $data_skills[skill_id].can_lvup?
  286.     return @skill_level[skill_id]
  287.   end
  288.   #--------------------------------------------------------------------------
  289.   # ● 获取技能下一级熟练度
  290.   #--------------------------------------------------------------------------
  291.   def skill_next_exp(skill_id)
  292.     return 0 unless skill_can_lvup?(skill_id)
  293.     return @skill_next_exp[skill_id]
  294.   end
  295.   #--------------------------------------------------------------------------
  296.   # ● 获取技能当前熟练度
  297.   #--------------------------------------------------------------------------
  298.   def skill_exp(skill_id)
  299.     return 0 unless skill_can_lvup?(skill_id)
  300.     return @skill_exp[skill_id]
  301.   end
  302.   #--------------------------------------------------------------------------
  303.   # ● 角色获得经验值
  304.   #--------------------------------------------------------------------------
  305.   alias skill_level_gain_exp gain_exp
  306.   def gain_exp(exp)
  307.     skill_level_gain_exp(exp)
  308.     gain_skill_res_exp(exp/SKILL_RES_EXP_BASE)
  309.     @skills.each{ |id|
  310.       skill = $data_skills[id]
  311.       if skill.get_exp_from_actor? # 技能是否吸收经验值
  312.           skill_exp = (exp.to_f / skill.exp_from_actor).ceil
  313.           gain_skill_exp(id, skill_exp) # 技能提升熟练度
  314.       end
  315.     }
  316.   end
  317.   #--------------------------------------------------------------------------
  318.   # ● 角色获得技能熟练度
  319.   #--------------------------------------------------------------------------
  320.   def gain_skill_exp(skill_id, val)
  321.     return unless skill_can_lvup?(skill_id)
  322.     skill = $data_skills[skill_id]
  323.     return if skill.transformed
  324.     return if val == 0
  325.     @skill_exp[skill_id] += val
  326.     if @skill_exp[skill_id] >= @skill_next_exp[skill_id]
  327.       skill_lvup(skill_id)
  328.     end
  329.   end
  330.   #--------------------------------------------------------------------------
  331.   # ● 使用技能提升熟练度
  332.   #--------------------------------------------------------------------------
  333.   def gain_skill_exp_by_use(skill)
  334.     @gain_skill_exp = 0
  335.     if skill.is_a?(RPG::Skill) and skill.lvup_by_use?
  336.       @gain_skill_exp = skill.use_exp
  337.     end
  338.   end
  339.   #--------------------------------------------------------------------------
  340.   # ● 角色获得技能提升点数
  341.   #--------------------------------------------------------------------------
  342.   def gain_skill_res_exp(val)
  343.     @skill_res_exp += val
  344.   end
  345.   #--------------------------------------------------------------------------
  346.   # ● 返回角色的技能提升点数
  347.   #--------------------------------------------------------------------------
  348.   def res_exp
  349.     return @skill_res_exp
  350.   end
  351.   #--------------------------------------------------------------------------
  352.   # ● 判断是否能手动升级
  353.   #--------------------------------------------------------------------------
  354.   def can_lv_skill_manually?(skill)
  355.     return false unless skill.manual_lvup?
  356.     return @skill_res_exp > 0
  357.   end
  358.   def has_dmg_var?(skill_id)
  359.     return @skill_dmg_val.keys.include?(skill_id)
  360.   end
  361.   #--------------------------------------------------------------------------
  362.   # ● 手动提升熟练度
  363.   #--------------------------------------------------------------------------
  364.   def gain_skill_exp_manual(skill_id)
  365.     skill = $data_skills[skill_id]
  366.     return unless skill.manual_lvup?
  367.     val = [@skill_next_exp[skill_id], @skill_res_exp].min
  368.     @skill_res_exp -= val
  369.     gain_skill_exp(skill_id, val)
  370.   end
  371.   #--------------------------------------------------------------------------
  372.   # ● 计算使用技能后提升的最终熟练度
  373.   #--------------------------------------------------------------------------
  374.   def gain_skill_final_exp_by_use(skill, hit)
  375.     return if @gain_skill_exp < 1
  376.     @gain_skill_exp /= 2 unless hit # 若是技能落空则熟练度减半
  377.     gain_skill_exp(skill.id, @gain_skill_exp)
  378.     @gain_skill_exp = 0
  379.   end
  380.   #--------------------------------------------------------------------------
  381.   # ● 角色使用技能,技能获得熟练度
  382.   #--------------------------------------------------------------------------
  383.   alias skill_level_use_item use_item
  384.   def use_item(item)
  385.     skill_level_use_item(item)
  386.     gain_skill_exp_by_use(item)
  387.   end
  388.   #--------------------------------------------------------------------------
  389.   # ● 角色技能升级
  390.   #--------------------------------------------------------------------------
  391.   def skill_lvup(skill_id, val=1)
  392.     return unless skill_can_lvup?(skill_id)
  393.     return if $data_skills[skill_id].transformed
  394.     temp_level = @skill_level[skill_id] + val
  395.     max_level = max_skill_level(skill_id)
  396.     @skill_level[skill_id] = [temp_level, max_level].min
  397.     level = @skill_level[skill_id]
  398.     @skill_exp[skill_id] -= @skill_next_exp[skill_id]
  399.     @skill_exp[skill_id] = [@skill_exp[skill_id], 0].max
  400.     @skill_next_exp[skill_id] = @skill_exp_base[skill_id] * factorial(level)
  401.     if has_dmg_var?(skill_id)
  402.       dmg_var_id = @skill_dmg_val[skill_id]
  403.       $game_variables[dmg_var_id] = 1+(level.to_f/max_level)
  404.     end
  405.     process_skill_transform(skill_id, level)
  406.    
  407.   end
  408.   #--------------------------------------------------------------------------
  409.   # ● 计算技能伤害
  410.   #--------------------------------------------------------------------------
  411.   alias skill_level_make_damage_value make_damage_value
  412.   def make_damage_value(user, item)
  413.     skill_level_make_damage_value(user, item) # 呼叫原有方法
  414.   end
  415.   def process_skill_transform(skill_id, level)
  416.     skill = $data_skills[skill_id]
  417.     return unless skill.transform_at?(level) # 判断技能是否在这个等级变化
  418.     new_skill_id = skill.transform_to(level) # 获取变化后的技能ID
  419.     skill.transformed = true
  420.     learn_skill(new_skill_id) # 学习新技能
  421.    
  422.     # 将旧技能的等级、熟练度、熟练度基数、下一级熟练度转移到新技能下
  423.     $data_skills[new_skill_id].skill_level_inherit # 变化后的技能设定
  424.     @skill_level[new_skill_id] = @skill_level[skill_id]
  425.     @skill_exp[new_skill_id] = @skill_exp[skill_id]
  426.     @skill_exp_base[new_skill_id] = skill.get_exp_base
  427.     @skill_next_exp[new_skill_id] = @skill_next_exp[skill_id]
  428.     @skill_dmg_val[new_skill_id] = @skill_dmg_val[skill_id]
  429.     alter_damage_formula(new_skill_id) # 调整伤害公式
  430.    
  431.     if SKILL_LVUP_NO_FORGET or skill.no_forget? # 若是设定技能升级时不遗忘旧技能
  432.       @skill_exp[new_skill_id] = 0 # 熟练度归零
  433.     else
  434.       forget_skill(skill_id) # 遗忘旧技能
  435.       # 删除旧技能的等级、熟练度、熟练度基数、下一级熟练度
  436.       @skill_level.delete(skill_id)
  437.       @skill_exp.delete(skill_id)
  438.       @skill_exp_base.delete(skill_id)
  439.       @skill_next_exp.delete(skill_id)
  440.       @skill_dmg_val.delete(skill_id)
  441.     end
  442.   end
  443. end
  444. class Game_Battler < Game_BattlerBase
  445.   #--------------------------------------------------------------------------
  446.   # ● 技能使用对象的效果应用
  447.   #--------------------------------------------------------------------------
  448.   alias skill_level_item_apply item_apply
  449.   def item_apply(user, item)
  450.     skill_level_item_apply(user, item) # 呼叫原有方法
  451.     return unless item.is_a?(RPG::Skill) # 不是使用技能时返回
  452.     return unless user.actor?
  453.     user.gain_skill_final_exp_by_use(item, @result.hit?) # 计算最终熟练度
  454.   end
  455. end
  456. class Game_Interpreter
  457.   #--------------------------------------------------------------------------
  458.   # ● 技能等级提升
  459.   #--------------------------------------------------------------------------
  460.   def gain_skill_level(actor_id, skill_id, value=1)
  461.     $game_actors[actor_id].skill_lvup(skill_id, value)
  462.   end
  463.   #--------------------------------------------------------------------------
  464.   # ● 获得技能升级点数
  465.   #--------------------------------------------------------------------------
  466.   def gain_res_exp(actor_id, value=1)
  467.     $game_actors[actor_id].gain_skill_res_exp(value)
  468.   end
  469. end
  470. #--------------------------------------------------------------------------
  471. # ● 计算阶乘(计算技能下一级熟练度使用)
  472. #--------------------------------------------------------------------------
  473. def factorial(val)
  474.   if val <= 1
  475.     return 1
  476.   else
  477.     return factorial(val-2) + factorial(val-1)
  478.   end
  479. end
复制代码

  1. class Window_SkillLevel < Window_Base
  2.   include Snstar2006::Skill_LvUp
  3.   attr_reader :skill # 返回当前显示的技能
  4.   #--------------------------------------------------------------------------
  5.   # ● 初始化
  6.   #--------------------------------------------------------------------------
  7.   def initialize(x, y, actor, skill=nil)
  8.     super(x, y, Graphics.width/2, fitting_height(6))
  9.     @actor = actor
  10.     @skill = skill
  11.   end
  12.   #--------------------------------------------------------------------------
  13.   # ● 设定显示的技能
  14.   #--------------------------------------------------------------------------
  15.   def skill=(skill)
  16.     #return if @skill == skill
  17.     @skill = skill
  18.     refresh
  19.   end
  20.   #--------------------------------------------------------------------------
  21.   # ● 设定当前显示的角色
  22.   #--------------------------------------------------------------------------
  23.   def actor=(actor)
  24.     return if @actor == actor
  25.     @actor = actor
  26.     refresh
  27.   end
  28.   #--------------------------------------------------------------------------
  29.   # ● 窗口刷新
  30.   #--------------------------------------------------------------------------
  31.   def refresh
  32.     contents.clear
  33.     return unless @skill
  34.     draw_skill_name(@skill, 0, 0)
  35.     if @skill.can_lvup?
  36.       draw_skill_max_level(@skill, 24, line_height)
  37.       draw_skill_exp(@skill, 24, line_height*2)
  38.       draw_actor_res_exp(24, line_height*3)
  39.       draw_skill_transform(@skill, 24, line_height*4)
  40.     else
  41.       text = "此技能无法升级"
  42.       draw_text(24, line_height, text_width(text), line_height, text)
  43.     end
  44.   end
  45.   #--------------------------------------------------------------------------
  46.   # ● 绘制技能名称
  47.   #--------------------------------------------------------------------------
  48.   def draw_skill_name(skill, x, y, enabled = true)
  49.     return unless skill
  50.     return unless skill.is_a?(RPG::Skill)
  51.     draw_icon(skill.icon_index, x, y, enabled)
  52.     change_color(normal_color, enabled)
  53.     skill_name = skill.name
  54.     skill_name += " (#{@actor.skill_level(skill.id)}级)" if skill.can_lvup?
  55.     text = skill_name
  56.     draw_text(x + 24, y, text_width(text), line_height, text)
  57.   end
  58.   #--------------------------------------------------------------------------
  59.   # ● 绘制技能最高等级
  60.   #--------------------------------------------------------------------------
  61.   def draw_skill_max_level(skill, x, y)
  62.     return unless skill.can_lvup?
  63.     change_color(system_color)
  64.     text = "最高等级"
  65.     draw_text(x, y, text_width(text), line_height, text)
  66.     change_color(normal_color)
  67.     text = "#{skill.max_level} 级"
  68.     draw_text(x+108, y, text_width(text), line_height, text)
  69.   end
  70.   #--------------------------------------------------------------------------
  71.   # ● 绘制技能熟练度
  72.   #--------------------------------------------------------------------------
  73.   def draw_skill_exp(skill, x, y)
  74.     return unless skill.can_lvup?
  75.     return if skill.transformed
  76.     change_color(system_color)
  77.     text = SKILL_EXP_VOCAB
  78.     draw_text(x, y, text_width(text), line_height, text)
  79.     change_color(normal_color)
  80.     color1 = text_color(18)
  81.     color2 = text_color(20)
  82.     current = @actor.skill_exp(skill.id)
  83.     if @actor.skill_can_lvup?(skill.id)
  84.       max = @actor.skill_next_exp(skill.id)
  85.       rate = current.to_f / max
  86.       draw_gauge(x+103, y, 120, rate, color1, color2)
  87.       draw_current_and_max_values(x+76, y, 150, current, max, normal_color, normal_color)
  88.     else
  89.       draw_current_and_max_values(x+76, y, 150, "--", "--", normal_color, normal_color)
  90.     end
  91.   end
  92.   #--------------------------------------------------------------------------
  93.   # ● 绘制技能变化技
  94.   #--------------------------------------------------------------------------
  95.   def draw_skill_transform(skill, x, y)
  96.     return unless skill.transform?
  97.     change_color(system_color)
  98.     level = skill.transform_at
  99.     new_skill = $data_skills[skill.transform_to(level)]
  100.     text = sprintf("升至%s级则习得", level)
  101.     draw_text(x, y, text_width(text), line_height, text)
  102.     change_color(normal_color)
  103.     draw_item_name(new_skill, x+12, y+line_height)
  104.   end
  105.   def draw_actor_res_exp(x, y)
  106.     enabled = @skill.manual_lvup?
  107.     text = SKILL_REXP_VOCAB
  108.     change_color(system_color, enabled)
  109.     draw_text(x, y, text_width(text), line_height, text)
  110.     change_color(normal_color, enabled)
  111.     text = @actor.res_exp
  112.     draw_text(x+108, y, text_width(text), line_height, text)
  113.   end
  114.   #--------------------------------------------------------------------------
  115.   # ● 获得文字宽度
  116.   #--------------------------------------------------------------------------
  117.   def text_width(text)
  118.     return text_size(text).width*1.5
  119.   end
  120. end
  121. class Window_SkillList < Window_Selectable
  122.   include Snstar2006::Skill_LvUp
  123.   attr_reader   :skill_level_window # 返回技能等级窗口
  124.   #--------------------------------------------------------------------------
  125.   # ● 选择技能
  126.   #--------------------------------------------------------------------------
  127.   alias skill_level_select select
  128.   def select(index)
  129.     skill_level_select(index)
  130.     if !$game_party.in_battle
  131.       @skill_level_window.skill = item
  132.       @skill_level_window.refresh
  133.       if index % 2 == 0
  134.         @skill_level_window.x = Graphics.width/2
  135.       else
  136.         @skill_level_window.x = 0
  137.       end
  138.     end
  139.   end
  140.   #--------------------------------------------------------------------------
  141.   # ● 设定技能等级窗口
  142.   #--------------------------------------------------------------------------
  143.   def skill_level_window=(skill_level_window)
  144.     @skill_level_window = skill_level_window
  145.     call_skill_level
  146.   end
  147.   #--------------------------------------------------------------------------
  148.   # ● 呼叫技能窗口更新
  149.   #--------------------------------------------------------------------------
  150.   def call_skill_level
  151.     update_skill_level if active && @skill_level_window
  152.   end
  153.   #--------------------------------------------------------------------------
  154.   # ● 技能窗口更新
  155.   #--------------------------------------------------------------------------
  156.   def update_skill_level
  157.     @skill_level_window.clear
  158.   end
  159.   alias skill_level_deactivate deactivate
  160.   def deactivate
  161.     skill_level_deactivate
  162.     return unless @skill_level_window
  163.     @skill_level_window.hide
  164.   end
  165.   alias skill_level_activate activate
  166.   def activate
  167.     skill_level_activate
  168.     return unless @skill_level_window
  169.     @skill_level_window.show
  170.   end
  171.   #--------------------------------------------------------------------------
  172.   # ● 处理句柄
  173.   #--------------------------------------------------------------------------
  174.   alias skill_level_process_handling process_handling
  175.   def process_handling
  176.     skill_level_process_handling
  177.     return manual_skill_lvup  if Input.trigger?(SKILL_MAN_LVUP_KEY)
  178.   end
  179.   #--------------------------------------------------------------------------
  180.   # ● 执行手动升级
  181.   #--------------------------------------------------------------------------
  182.   def manual_skill_lvup
  183.     if item.manual_lvup? && @actor.can_lv_skill_manually?(item)
  184.       Sound.play_ok
  185.       @actor.gain_skill_exp_manual(item.id)
  186.       refresh
  187.       @skill_level_window.skill = item
  188.     else
  189.       Sound.play_buzzer
  190.     end
  191.     Input.update
  192.   end
  193. end
  194. class Scene_Skill < Scene_ItemBase
  195.   #--------------------------------------------------------------------------
  196.   # ● 场景开始
  197.   #--------------------------------------------------------------------------
  198.   alias skill_level_start start
  199.   def start
  200.     skill_level_start
  201.     create_skill_level_window
  202.     @skill_level_window.z = 200
  203.   end
  204.   #--------------------------------------------------------------------------
  205.   # ● 创建技能等级窗口
  206.   #--------------------------------------------------------------------------
  207.   def create_skill_level_window
  208.     y = @help_window.height + 120
  209.     @skill_level_window = Window_SkillLevel.new(Graphics.width/2, y, @actor)
  210.     @item_window.skill_level_window = @skill_level_window
  211.     @skill_level_window.hide
  212.   end
  213. end
复制代码
回复

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1410
在线时间
148 小时
注册时间
2018-3-24
帖子
145
 楼主| 发表于 2019-2-13 22:48:17 | 显示全部楼层
这两个脚本冲突   可以正常打开菜单技能 但是从技能页面退出来现实错误
回复

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1410
在线时间
148 小时
注册时间
2018-3-24
帖子
145
 楼主| 发表于 2019-2-14 01:03:46 | 显示全部楼层
KB.Driver 发表于 2019-2-13 23:01
由于个人导入的时候没有出现楼主的问题,只能从语法角度给出修改
在原来的窗口动态刷新脚本下面新开一栏, ...

解决了谢谢大佬  目前没出现冲突了
再请教个个问题 这个脚本 耐久度是默认全部10的 需要怎么改成每个装备都不一样吗?
和它介绍说可以修复 怎么使用呢?
  1. #==============================================================================
  2. # 默认所有武器耐久度10,攻击或使用技能一次减少1,双重攻击每次减少1,
  3. # 耐久度到0之后无法选择对应的指令,双重攻击的第二击到0仍然有效。
  4. # 你可以做个恢复耐久度的物品,对人使用后把它的武器durability加上去
  5. #==============================================================================

  6. #==============================================================================
  7. class Game_BaseItem
  8.   attr_accessor :durability
  9.   alias initialize_bfca0d3a79042ed8 initialize
  10.   def initialize
  11.     initialize_bfca0d3a79042ed8
  12.     @durability=10
  13.   end
  14. end

  15. class Game_Actor
  16.   def get_weapon
  17.     return @equips[0]
  18.   end
  19. end

  20. class Game_BattlerBase
  21.   alias usable_efe2e69d78eceb51 usable?
  22.   def usable?(skill)
  23.     if self.is_a?(Game_Actor)&&skill.is_a?(RPG::Skill)
  24.       if !self.weapons.empty?
  25.         w=self.get_weapon
  26.         if w.durability<=0
  27.           return skill.id==2
  28.         end
  29.       else
  30.         return skill.id==2
  31.       end
  32.     end
  33.     usable_efe2e69d78eceb51(skill)
  34.   end
  35. end

  36. class Game_Battler
  37.   alias item_apply_e17c250161634ead item_apply
  38.   def item_apply(user, item)
  39.     item_apply_e17c250161634ead(user,item)
  40.     if user.is_a?(Game_Actor)
  41.       if item.is_a?(RPG::Skill)&&item.id!=2
  42.         if !user.weapons.empty?
  43.           w=user.get_weapon
  44.           w.durability=w.durability-1 if w.durability>0
  45.           p w.durability
  46.         end
  47.       end
  48.     end
  49.   end
  50. end
复制代码
回复

使用道具 举报

Lv5.捕梦者

梦石
10
星屑
39440
在线时间
1914 小时
注册时间
2010-11-14
帖子
3315

R考场第七期纪念奖

发表于 2019-2-14 10:30:04 | 显示全部楼层
够爱 发表于 2019-2-14 01:03
解决了谢谢大佬  目前没出现冲突了
再请教个个问题 这个脚本 耐久度是默认全部10的 需要怎么改成每个装备 ...

版规
2019-02-14_103014.jpg
用头画头像,用脚写脚本
回复

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-4-17 02:51

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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