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

Project1

 找回密码
 注册会员
搜索

关于分段等级上限的提问

查看数: 1822 | 评论数: 5 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2015-4-10 01:14

正文摘要:

本帖最后由 RyanBern 于 2015-4-10 14:56 编辑 小人用了恐惧剑刃大大的分段等级上限脚本,一切正常,可是使用了事件 角色等级提升 后  会发现本该是120上限的角色,可以继续提升等级, 比如:角色1 ...

回复

RyanBern 发表于 2015-4-12 16:21:24
本帖最后由 RyanBern 于 2015-4-12 17:28 编辑
无敌啊鸡 发表于 2015-4-10 11:12
没有大大知道吗?有指点


少改了一个地方,抱歉。
脚本88~101行:
RUBY 代码复制
  1. def make_exp_list
  2.     actor = $data_actors[@actor_id]
  3.     @exp_list = Array.new(BASE_FINAL_LEVEL + 2)
  4.     @exp_list[1] = 0
  5.     pow_i = 2.4 + actor.exp_inflation / 100.0
  6.     for i in 2..BASE_FINAL_LEVEL + 1
  7.       if i > BASE_FINAL_LEVEL
  8.         @exp_list[i] = 0
  9.       else
  10.         n = actor.exp_basis * ((i + 3) ** pow_i) / (5 ** pow_i)
  11.         @exp_list[i] = @exp_list[i-1] + Integer(n)
  12.       end
  13.     end
  14.   end

原脚本没有有关降转功能的,现在加上。
RUBY 代码复制
  1. class Game_Actor
  2.   def lvv=(lvv)
  3.     # 防止出现负数
  4.     @lvv = [lvv, 0].max
  5.     # 防止转生超过最大等级
  6.     self.level = new_final_level if @level > new_final_level
  7.   end
  8. end

使用的时候,可以这样:
RUBY 代码复制
  1. $game_actors[1].lvv = 0

这样表示降转,如果角色超过降转等级限制则角色的等级会被修正。

点评

太感谢了,完美的解决了,非常麻烦您啊这次,谢谢。  发表于 2015-4-12 20:18
如果是插入,只需复制2~7行即可,复制之后插入到205行的那个end之后  发表于 2015-4-12 18:32
谢谢大,请问这个应该插入在哪一行里面呢?谢谢您~  发表于 2015-4-12 18:27
有关降转的已经在此帖补充  发表于 2015-4-12 17:28
此脚本需要和加点脚本整合,否则肯定有一个无法使用。  发表于 2015-4-12 17:22

评分

参与人数 2星屑 +100 梦石 +1 收起 理由
hys111111 + 100 认可答案
myownroc + 1 认可答案

查看全部评分

恐惧剑刃 发表于 2015-4-12 10:49:46
简单修改一下
  1. #==============================================================================
  2. # 突破等级、能力上限 and 等级分段
  3. #==============================================================================


  4. BASE_FINAL_LEVEL = 1000            # 等级最高值
  5. MAXHP_LIMIT = 9999999              # 气血最高值
  6. MAXSP_LIMIT = 9999999              # 魔法最高值
  7. STR_LIMIT   = 999999               # 力量最高值
  8. DEX_LIMIT   = 999999               # 灵巧最高值
  9. AGI_LIMIT   = 999999               # 速度最高值
  10. INT_LIMIT   = 999999               # 魔力最高值

  11. Actor_LV = {}                      # 等级段数
  12. #(如果有角色没有指定会报错!)
  13. Actor_LV[1] = [120, 300, 500, 1000]# 1号角色的等级段位
  14. Actor_LV[2] = [70]                 # 2号角色的等级段位

  15. LVV_STR = "----------"             # 满级符号

  16. class Window_Base < Window
  17.   #--------------------------------------------------------------------------
  18.   # ● 描绘 EXP
  19.   #     actor : 角色
  20.   #     x     : 描画目标 X 坐标
  21.   #     y     : 描画目标 Y 坐标
  22.   #--------------------------------------------------------------------------
  23.   def draw_actor_exp(actor, x, y)
  24.     self.contents.font.color = system_color
  25.     self.contents.draw_text(x, y, 24, 32, "E")
  26.     self.contents.font.color = normal_color
  27.     self.contents.draw_text(x + 24, y, 84, 32, actor.exp_s, 2)
  28.     # 只显示当前经验
  29.     if actor.next_exp_s != LVV_STR
  30.       self.contents.draw_text(x + 108, y, 12, 32, "/", 1)
  31.       self.contents.draw_text(x + 120, y, 84, 32, actor.next_exp_s)
  32.     end
  33.   end
  34. end


  35. class Game_Actor < Game_Battler
  36.   #--------------------------------------------------------------------------
  37.   # ● 段位           ※ 脚本 $game_actors[id].lvv
  38.   #                           $game_party.actors[index].lvv
  39.   #                      查看指定角色段位。
  40.   #--------------------------------------------------------------------------
  41.   def lvv
  42.     @lvv = 0 if @lvv.nil?
  43.     return @lvv
  44.   end
  45.   #--------------------------------------------------------------------------
  46.   # ● 转生           ※ 脚本 $game_actors[id].lvvpl
  47.   #                           $game_party.actors[index].lvvpl
  48.   #                      给指定角色转生。
  49.   #--------------------------------------------------------------------------
  50.   def lvvpl
  51.     # 无效的段位
  52.     if Actor_LV[@actor_id][lvv + 1].nil?
  53.       return
  54.     end
  55.     @lvv = lvv + 1
  56.   end
  57.   
  58.   #--------------------------------------------------------------------------
  59.   # ——(根据需要调整 字符串方法)——
  60.   #--------------------------------------------------------------------------
  61.   
  62.   
  63. =begin
  64.   #--------------------------------------------------------------------------
  65.   # ● 获取 EXP 字符串
  66.   #--------------------------------------------------------------------------
  67.   alias exp_s_lvv_old exp_s
  68.   def exp_s
  69.     # 段数限制
  70.     if @level >= Actor_LV[@actor_id][lvv]
  71.       return LVV_STR
  72.     end
  73.     # 正常
  74.     return exp_s_lvv_old
  75.   end
  76. =end
  77.   #--------------------------------------------------------------------------
  78.   # ● 获取下一等级的 EXP 字符串
  79.   #--------------------------------------------------------------------------
  80.   alias next_exp_s_lvv_old next_exp_s
  81.   def next_exp_s
  82.     # 段数限制
  83.     if @level >= Actor_LV[@actor_id][lvv]
  84.       return LVV_STR
  85.     end
  86.     # 正常
  87.     return next_exp_s_lvv_old
  88.   end
  89.   #--------------------------------------------------------------------------
  90.   # ● 获取离下一等级还需的 EXP 字符串
  91.   #--------------------------------------------------------------------------
  92.   alias next_rest_exp_s_lvv_old next_rest_exp_s
  93.   def next_rest_exp_s
  94.     # 段数限制
  95.     if @level >= Actor_LV[@actor_id][lvv]
  96.       return LVV_STR
  97.     end
  98.     # 正常
  99.     return next_rest_exp_s_lvv_old
  100.   end
  101.   
  102.   
  103.   
  104.   
  105.   
  106.   #--------------------------------------------------------------------------
  107.   # ● 计算 EXP
  108.   #--------------------------------------------------------------------------
  109.   def make_exp_list
  110.     actor = $data_actors[@actor_id]
  111.     @exp_list = Array.new(BASE_FINAL_LEVEL + 2)
  112.     @exp_list[1] = 0
  113.     pow_i = 2.4 + actor.exp_inflation / 100.0
  114.     for i in 2..BASE_FINAL_LEVEL + 1
  115.       if i > BASE_FINAL_LEVEL
  116.         @exp_list[i] = 0
  117.       else
  118.         n = actor.exp_basis * ((i + 3) ** pow_i) / (5 ** pow_i)
  119.         @exp_list[i] = @exp_list[i-1] + Integer(n)
  120.       end
  121.     end
  122.   end
  123.   #--------------------------------------------------------------------------
  124.   # ● 更改 EXP
  125.   #     exp : 新的 EXP
  126.   #--------------------------------------------------------------------------
  127.   def exp=(exp)
  128.     # ★EXPの上限チェックを解除
  129.     @exp = [exp, 0].max
  130.     # 升级
  131.     while @exp >= @exp_list[@level+1] and @exp_list[@level+1] > 0
  132.       # 段数限制
  133.       if @level + 1 > Actor_LV[@actor_id][lvv]
  134.         @exp = @exp_list[@level]
  135.         return
  136.       end
  137.       # 其他
  138.       @hp = maxhp
  139.       @sp = maxsp
  140.       @level += 1
  141.       # 学会特技
  142.       for j in $data_classes[@class_id].learnings
  143.         if j.level == @level
  144.           learn_skill(j.skill_id)
  145.         end
  146.       end
  147.     end
  148.     # 降级
  149.     while @exp < @exp_list[@level]
  150.       @level -= 1
  151.     end
  152.     # 修正当前的 HP 与 SP 超过最大值
  153.     @hp = [@hp, self.maxhp].min
  154.     @sp = [@sp, self.maxsp].min
  155.   end
  156.   #--------------------------------------------------------------------------
  157.   # ● レベルの変更
  158.   #     level : 新しいレベル
  159.   #--------------------------------------------------------------------------
  160.   def level=(level)
  161.     # 上下限チェック
  162.     # ★LV上限をnew_final_levelでチェックするように変更
  163.     level = [[level, BASE_FINAL_LEVEL].min, 1].max
  164.     # EXP を変更
  165.     self.exp = @exp_list[level]
  166.   end
  167.   #--------------------------------------------------------------------------
  168.   # ● 获取 MaxHP
  169.   #--------------------------------------------------------------------------
  170.   def maxhp
  171.     n = [[base_maxhp + @maxhp_plus, 1].max, MAXHP_LIMIT].min
  172.     for i in @states
  173.       n *= $data_states[i].maxhp_rate / 100.0
  174.     end
  175.     n = [[Integer(n), 1].max, MAXHP_LIMIT].min
  176.     return n
  177.   end
  178.   #--------------------------------------------------------------------------
  179.   # ● 获取基本 MaxHP
  180.   #--------------------------------------------------------------------------
  181.   def base_maxhp
  182.     n = $data_actors[@actor_id].parameters[0, 1]
  183.     n += $data_actors[@actor_id].parameters[0, 2] * @level
  184.     return n
  185.   end
  186.   #--------------------------------------------------------------------------
  187.   # ● 获取基本 MaxSP
  188.   #--------------------------------------------------------------------------
  189.   def base_maxsp
  190.     n = $data_actors[@actor_id].parameters[1, 1]
  191.     n += $data_actors[@actor_id].parameters[1, 2] * @level
  192.     return n
  193.   end
  194.   #--------------------------------------------------------------------------
  195.   # ● 获取基本力量
  196.   #--------------------------------------------------------------------------
  197.   def base_str
  198.     n = $data_actors[@actor_id].parameters[2, 1]
  199.     n += $data_actors[@actor_id].parameters[2, 2] * @level
  200.     weapon = $data_weapons[@weapon_id]
  201.     armor1 = $data_armors[@armor1_id]
  202.     armor2 = $data_armors[@armor2_id]
  203.     armor3 = $data_armors[@armor3_id]
  204.     armor4 = $data_armors[@armor4_id]
  205.     n += weapon != nil ? weapon.str_plus : 0
  206.     n += armor1 != nil ? armor1.str_plus : 0
  207.     n += armor2 != nil ? armor2.str_plus : 0
  208.     n += armor3 != nil ? armor3.str_plus : 0
  209.     n += armor4 != nil ? armor4.str_plus : 0
  210.     return [[n, 1].max, STR_LIMIT].min
  211.   end
  212.   #--------------------------------------------------------------------------
  213.   # ● 获取基本灵巧
  214.   #--------------------------------------------------------------------------
  215.   def base_dex
  216.     n = $data_actors[@actor_id].parameters[3, 1]
  217.     n += $data_actors[@actor_id].parameters[3, 2] * @level
  218.     weapon = $data_weapons[@weapon_id]
  219.     armor1 = $data_armors[@armor1_id]
  220.     armor2 = $data_armors[@armor2_id]
  221.     armor3 = $data_armors[@armor3_id]
  222.     armor4 = $data_armors[@armor4_id]
  223.     n += weapon != nil ? weapon.dex_plus : 0
  224.     n += armor1 != nil ? armor1.dex_plus : 0
  225.     n += armor2 != nil ? armor2.dex_plus : 0
  226.     n += armor3 != nil ? armor3.dex_plus : 0
  227.     n += armor4 != nil ? armor4.dex_plus : 0
  228.     return [[n, 1].max, DEX_LIMIT].min
  229.   end
  230.   #--------------------------------------------------------------------------
  231.   # ● 获取基本速度
  232.   #--------------------------------------------------------------------------
  233.   def base_agi
  234.     n = $data_actors[@actor_id].parameters[4, 1]
  235.     n += $data_actors[@actor_id].parameters[4, 2] * @level
  236.     weapon = $data_weapons[@weapon_id]
  237.     armor1 = $data_armors[@armor1_id]
  238.     armor2 = $data_armors[@armor2_id]
  239.     armor3 = $data_armors[@armor3_id]
  240.     armor4 = $data_armors[@armor4_id]
  241.     n += weapon != nil ? weapon.agi_plus : 0
  242.     n += armor1 != nil ? armor1.agi_plus : 0
  243.     n += armor2 != nil ? armor2.agi_plus : 0
  244.     n += armor3 != nil ? armor3.agi_plus : 0
  245.     n += armor4 != nil ? armor4.agi_plus : 0
  246.     return [[n, 1].max, AGI_LIMIT].min
  247.   end
  248.   #--------------------------------------------------------------------------
  249.   # ● 获取基本魔力
  250.   #--------------------------------------------------------------------------
  251.   def base_int
  252.     n = $data_actors[@actor_id].parameters[5, 1]
  253.     n += $data_actors[@actor_id].parameters[5, 2] * @level
  254.     weapon = $data_weapons[@weapon_id]
  255.     armor1 = $data_armors[@armor1_id]
  256.     armor2 = $data_armors[@armor2_id]
  257.     armor3 = $data_armors[@armor3_id]
  258.     armor4 = $data_armors[@armor4_id]
  259.     n += weapon != nil ? weapon.int_plus : 0
  260.     n += armor1 != nil ? armor1.int_plus : 0
  261.     n += armor2 != nil ? armor2.int_plus : 0
  262.     n += armor3 != nil ? armor3.int_plus : 0
  263.     n += armor4 != nil ? armor4.int_plus : 0
  264.     return [[n, 1].max, INT_LIMIT].min
  265.   end
  266. end


  267. class Game_Battler
  268.   #--------------------------------------------------------------------------
  269.   # ● 获取 MaxSP
  270.   #--------------------------------------------------------------------------
  271.   def maxsp
  272.     n = [[base_maxsp + @maxsp_plus, 0].max, MAXSP_LIMIT].min
  273.     for i in @states
  274.       n *= $data_states[i].maxsp_rate / 100.0
  275.     end
  276.     n = [[Integer(n), 0].max, MAXSP_LIMIT].min
  277.     return n
  278.   end
  279.   #--------------------------------------------------------------------------
  280.   # ● 获取力量
  281.   #--------------------------------------------------------------------------
  282.   def str
  283.     n = [[base_str + @str_plus, 1].max, STR_LIMIT].min
  284.     for i in @states
  285.       n *= $data_states[i].str_rate / 100.0
  286.     end
  287.     n = [[Integer(n), 1].max, STR_LIMIT].min
  288.     return n
  289.   end
  290.   #--------------------------------------------------------------------------
  291.   # ● 获取灵巧
  292.   #--------------------------------------------------------------------------
  293.   def dex
  294.     n = [[base_dex + @dex_plus, 1].max, DEX_LIMIT].min
  295.     for i in @states
  296.       n *= $data_states[i].dex_rate / 100.0
  297.     end
  298.     n = [[Integer(n), 1].max, DEX_LIMIT].min
  299.     return n
  300.   end
  301.   #--------------------------------------------------------------------------
  302.   # ● 获取速度
  303.   #--------------------------------------------------------------------------
  304.   def agi
  305.     n = [[base_agi + @agi_plus, 1].max, AGI_LIMIT].min
  306.     for i in @states
  307.       n *= $data_states[i].agi_rate / 100.0
  308.     end
  309.     n = [[Integer(n), 1].max, AGI_LIMIT].min
  310.     return n
  311.   end
  312.   #--------------------------------------------------------------------------
  313.   # ● 获取魔力
  314.   #--------------------------------------------------------------------------
  315.   def int
  316.     n = [[base_int + @int_plus, 1].max, INT_LIMIT].min
  317.     for i in @states
  318.       n *= $data_states[i].int_rate / 100.0
  319.     end
  320.     n = [[Integer(n), 1].max, INT_LIMIT].min
  321.     return n
  322.   end
  323.   #--------------------------------------------------------------------------
  324.   # ● 设置 MaxHP
  325.   #     maxhp : 新的 MaxHP
  326.   #--------------------------------------------------------------------------
  327.   def maxhp=(maxhp)
  328.     @maxhp_plus += maxhp - self.maxhp
  329.     @maxhp_plus = [[@maxhp_plus, -MAXHP_LIMIT].max, MAXHP_LIMIT].min
  330.     @hp = [@hp, self.maxhp].min
  331.   end
  332.   #--------------------------------------------------------------------------
  333.   # ● 设置 MaxSP
  334.   #     maxsp : 新的 MaxSP
  335.   #--------------------------------------------------------------------------
  336.   def maxsp=(maxsp)
  337.     @maxsp_plus += maxsp - self.maxsp
  338.     @maxsp_plus = [[@maxsp_plus, -MAXSP_LIMIT].max, MAXSP_LIMIT].min
  339.     @sp = [@sp, self.maxsp].min
  340.   end
  341.   #--------------------------------------------------------------------------
  342.   # ● 设置力量
  343.   #     str : 新的力量
  344.   #--------------------------------------------------------------------------
  345.   def str=(str)
  346.     @str_plus += str - self.str
  347.     @str_plus = [[@str_plus, -STR_LIMIT].max, STR_LIMIT].min
  348.   end
  349.   #--------------------------------------------------------------------------
  350.   # ● 设置灵巧
  351.   #     dex : 新的灵巧
  352.   #--------------------------------------------------------------------------
  353.   def dex=(dex)
  354.     @dex_plus += dex - self.dex
  355.     @dex_plus = [[@dex_plus, -DEX_LIMIT].max, DEX_LIMIT].min
  356.   end
  357.   #--------------------------------------------------------------------------
  358.   # ● 设置速度
  359.   #     agi : 新的速度
  360.   #--------------------------------------------------------------------------
  361.   def agi=(agi)
  362.     @agi_plus += agi - self.agi
  363.     @agi_plus = [[@agi_plus, -AGI_LIMIT].max, AGI_LIMIT].min
  364.   end
  365.   #--------------------------------------------------------------------------
  366.   # ● 设置魔力
  367.   #     int : 新的魔力
  368.   #--------------------------------------------------------------------------
  369.   def int=(int)
  370.     @int_plus += int - self.int
  371.     @int_plus = [[@int_plus, -INT_LIMIT].max, INT_LIMIT].min
  372.   end
  373. end
复制代码

点评

不会出现这种情况呢。 用了 修改过exp=方法的话 就需要整合(或者把这个脚本放在最下边 >.< )。  发表于 2015-4-12 18:14
麻烦大大了,可是未转生角色 用等级道具还是可以继续提升等级呢,呜呜。  发表于 2015-4-12 14:46
RyanBern 发表于 2015-4-12 09:33:16
RyanBern 发表于 2015-4-10 15:07
问题出在72行处的def new_final_level处没有定义转生等级限制。需要手动补上。
def new_final_level
  lv = ...

刚才简单看了一下脚本,发现如下问题,修改之后可能会解决问题:
脚本第90行应改为:
RUBY 代码复制
  1. @exp_list = Array.new(BASE_FINAL_LEVEL + 2)

脚本第259~261行应改为:
RUBY 代码复制
  1. @level = [[level, new_final_level].min, 1].max
  2. self.exp = @exp_list[@level]

点评

谢谢大,这次等级不会提升了,但是转生后虽然可以正常升级但比如120-121经验还是显示的--------。122-123也是,请问这又改怎么做呀,谢谢大  发表于 2015-4-12 14:44
RyanBern 发表于 2015-4-10 15:07:17
问题出在72行处的def new_final_level处没有定义转生等级限制。需要手动补上。
RUBY 代码复制
  1. def new_final_level
  2.   lv = BASE_FINAL_LEVEL
  3.   case self.lvv
  4.   when 0
  5.     lv = 120
  6.   when 1
  7.     lv = 300
  8.   when 2
  9.     lv = 500
  10.   when 3
  11.     lv = 1000
  12.   end
  13.   return lv
  14. end

点评

、  发表于 2015-4-11 20:35
请问这个该怎么破呀?谢谢大  发表于 2015-4-11 15:25
按照大大做的试了一下,不会在提升等级了,可是输入脚本$game_party.actors[1].lvvpl #转,进行转生后相应的角色等级会变成1级,120升121页会变成1级~  发表于 2015-4-11 15:24
无敌啊鸡 发表于 2015-4-10 11:12:12
没有大大知道吗?有指点
拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

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

GMT+8, 2024-11-29 19:12

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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