Project1

标题: 为什么破限脚本Min要一起算? [打印本页]

作者: 876加几    时间: 2013-8-31 20:22
标题: 为什么破限脚本Min要一起算?
本帖最后由 876加几 于 2013-9-1 14:43 编辑

下面是出问题的脚本。
  1. #==============================================================================
  2. # 本脚本来自http://www.66rpg.com/,使用和转载请保留此信息
  3. #==============================================================================
  4. #以下可根据需要修改
  5. #self.id = @actor_id
  6. if self.id == 1
  7.    BASE_FINAL_LEVEL = 99    #等级上限
  8.    MAXHP_LIMIT = 4290       #HP上限
  9.    MAXSP_LIMIT = 6636       #SP上限
  10.    STR_LIMIT    = 405       #力量上限
  11.    DEX_LIMIT    = 557       #灵巧上限
  12.    AGI_LIMIT    = 515       #敏捷上限
  13.    INT_LIMIT    = 672       #智力上限
  14. elsif self.id == 2
  15.    BASE_FINAL_LEVEL = 99    #等级上限
  16.    MAXHP_LIMIT = 4946       #HP上限
  17.    MAXSP_LIMIT = 6030       #SP上限
  18.    STR_LIMIT    = 316       #力量上限
  19.    DEX_LIMIT    = 359       #灵巧上限
  20.    AGI_LIMIT    = 465       #敏捷上限
  21.    INT_LIMIT    = 735       #智力上限
  22. elsif self.id == 3
  23.    BASE_FINAL_LEVEL = 99    #等级上限
  24.    MAXHP_LIMIT = 5729       #HP上限
  25.    MAXSP_LIMIT = 5350       #SP上限
  26.    STR_LIMIT    = 510       #力量上限
  27.    DEX_LIMIT    = 754       #灵巧上限
  28.    AGI_LIMIT    = 662       #敏捷上限
  29.    INT_LIMIT    = 495       #智力上限
  30. elsif self.id == 4
  31.    BASE_FINAL_LEVEL = 100   #等级上限
  32.    MAXHP_LIMIT = 11000      #HP上限
  33.    MAXSP_LIMIT = 7650       #SP上限
  34.    STR_LIMIT    = 545       #力量上限
  35.    DEX_LIMIT    = 800       #灵巧上限
  36.    AGI_LIMIT    = 750       #敏捷上限
  37.    INT_LIMIT    = 850       #智力上限
  38. end
  39. class Game_Actor < Game_Battler
  40.    def new_final_level
  41.      lv = BASE_FINAL_LEVEL
  42.      #case self.id
  43.      #when 1
  44.      #   lv = 99
  45.      #   #maxhp = 4290
  46.      #   #maxsp = 6636
  47.      #   #str = 405
  48.      #   #dex = 557
  49.      #   #agi = 515
  50.      #   #int =
  51.      #when 2
  52.      #   lv = 99
  53.      #when 3
  54.      #   lv = 99
  55.      #when 4
  56.      #   lv = 100
  57.      #end
  58.      return lv
  59.    end
  60.    #--------------------------------------------------------------------------
  61.    # ● EXP 计算
  62.    #--------------------------------------------------------------------------
  63.    def make_exp_list
  64.      actor = $data_actors[@actor_id]
  65.      @exp_list = Array.new(new_final_level + 2)
  66.      @exp_list[1] = 0
  67.      pow_i = 2.4 + actor.exp_inflation / 100.0
  68.      for i in 2..new_final_level + 1
  69.        if i > new_final_level
  70.          @exp_list[i] = 0
  71.        else
  72.          n = actor.exp_basis * ((i + 3) ** pow_i) / (5 ** pow_i)
  73.          @exp_list[i] = @exp_list[i-1] + Integer(n)
  74.        end
  75.      end
  76.    end
  77.    #--------------------------------------------------------------------------
  78.    # ● MaxHP の取得
  79.    #--------------------------------------------------------------------------
  80.    def maxhp
  81.      n = [[base_maxhp + @maxhp_plus, 1].max, MAXHP_LIMIT].min
  82.      for i in @states
  83.        n *= $data_states[i].maxhp_rate / 100.0
  84.      end
  85.      n = [[Integer(n), 1].max, MAXHP_LIMIT].min

  86. return n
  87.    end
  88.    #--------------------------------------------------------------------------
  89.    # ● 基本 MaxHP の取得
  90.    #--------------------------------------------------------------------------
  91.    def base_maxhp
  92.      n = $data_actors[@actor_id].parameters[0, 1]
  93.      n += $data_actors[@actor_id].parameters[0, 2] * @level
  94.      return n
  95.    end
  96.    #--------------------------------------------------------------------------
  97.    # ● 基本 MaxSP の取得
  98.    #--------------------------------------------------------------------------
  99.    def base_maxsp
  100.      n = $data_actors[@actor_id].parameters[1, 1]
  101.      n += $data_actors[@actor_id].parameters[1, 2] * @level
  102.      return n
  103.    end
  104.    #--------------------------------------------------------------------------
  105.    # ● 基本腕力の取得
  106.    #--------------------------------------------------------------------------
  107.    def base_str
  108.      n = $data_actors[@actor_id].parameters[2, 1]
  109.      n += $data_actors[@actor_id].parameters[2, 2] * @level
  110.      weapon = $data_weapons[@weapon_id]
  111.      armor1 = $data_armors[@armor1_id]
  112.      armor2 = $data_armors[@armor2_id]
  113.      armor3 = $data_armors[@armor3_id]
  114.      armor4 = $data_armors[@armor4_id]
  115.      n += weapon != nil ? weapon.str_plus : 0
  116.      n += armor1 != nil ? armor1.str_plus : 0
  117.      n += armor2 != nil ? armor2.str_plus : 0
  118.      n += armor3 != nil ? armor3.str_plus : 0
  119.      n += armor4 != nil ? armor4.str_plus : 0
  120.      return [[n, 1].max, STR_LIMIT].min
  121.    end
  122.    #--------------------------------------------------------------------------
  123.    # ● 基本器用さの取得
  124.    #--------------------------------------------------------------------------
  125.    def base_dex
  126.      n = $data_actors[@actor_id].parameters[3, 1]
  127.      n += $data_actors[@actor_id].parameters[3, 2] * @level
  128.      weapon = $data_weapons[@weapon_id]
  129.      armor1 = $data_armors[@armor1_id]
  130.      armor2 = $data_armors[@armor2_id]
  131.      armor3 = $data_armors[@armor3_id]
  132.      armor4 = $data_armors[@armor4_id]
  133.      n += weapon != nil ? weapon.dex_plus : 0
  134.      n += armor1 != nil ? armor1.dex_plus : 0
  135.      n += armor2 != nil ? armor2.dex_plus : 0
  136.      n += armor3 != nil ? armor3.dex_plus : 0

  137.   n += armor4 != nil ? armor4.dex_plus : 0
  138.      return [[n, 1].max, DEX_LIMIT].min
  139.    end
  140.    #--------------------------------------------------------------------------
  141.    # ● 基本素早さの取得
  142.    #--------------------------------------------------------------------------
  143.    def base_agi
  144.      n = $data_actors[@actor_id].parameters[4, 1]
  145.      n += $data_actors[@actor_id].parameters[4, 2] * @level
  146.      weapon = $data_weapons[@weapon_id]
  147.      armor1 = $data_armors[@armor1_id]
  148.      armor2 = $data_armors[@armor2_id]
  149.      armor3 = $data_armors[@armor3_id]
  150.      armor4 = $data_armors[@armor4_id]
  151.      n += weapon != nil ? weapon.agi_plus : 0
  152.      n += armor1 != nil ? armor1.agi_plus : 0
  153.      n += armor2 != nil ? armor2.agi_plus : 0
  154.      n += armor3 != nil ? armor3.agi_plus : 0
  155.      n += armor4 != nil ? armor4.agi_plus : 0
  156.      return [[n, 1].max, AGI_LIMIT].min
  157.    end
  158.    #--------------------------------------------------------------------------
  159.    # ● 基本魔力の取得
  160.    #--------------------------------------------------------------------------
  161.    def base_int
  162.      n = $data_actors[@actor_id].parameters[5, 1]
  163.      n += $data_actors[@actor_id].parameters[5, 2] * @level
  164.      weapon = $data_weapons[@weapon_id]
  165.      armor1 = $data_armors[@armor1_id]
  166.      armor2 = $data_armors[@armor2_id]
  167.      armor3 = $data_armors[@armor3_id]
  168.      armor4 = $data_armors[@armor4_id]
  169.      n += weapon != nil ? weapon.int_plus : 0
  170.      n += armor1 != nil ? armor1.int_plus : 0
  171.      n += armor2 != nil ? armor2.int_plus : 0
  172.      n += armor3 != nil ? armor3.int_plus : 0
  173.      n += armor4 != nil ? armor4.int_plus : 0
  174.      return [[n, 1].max, INT_LIMIT].min
  175.    end
  176.    #--------------------------------------------------------------------------
  177.    # ● EXP の変更
  178.    #      exp : 新しい EXP
  179.    #--------------------------------------------------------------------------
  180.    def exp=(exp)
  181.      # ★EXPの上限チェックを解除
  182.      [url=home.php?mod=space&uid=13302]@exp[/url] = [exp, 0].max
  183.      # レベルアップ
  184.      while [url=home.php?mod=space&uid=13302]@exp[/url] >= @exp_list[@level+1] and @exp_list[@level+1] > 0
  185.        [url=home.php?mod=space&uid=22147]@level[/url] += 1
  186.        # スキル习得

  187. for j in $data_classes[@class_id].learnings
  188.          if j.level == @level
  189.            learn_skill(j.skill_id)
  190.          end
  191.        end
  192.      end
  193.      # レベルダウン
  194.      while [url=home.php?mod=space&uid=13302]@exp[/url] < @exp_list[@level]
  195.        [url=home.php?mod=space&uid=22147]@level[/url] -= 1
  196.      end
  197.      # 现在の HP と SP が最大値を超えていたら修正
  198.      @hp = [@hp, self.maxhp].min
  199.      @sp = [@sp, self.maxsp].min
  200.    end
  201.    #--------------------------------------------------------------------------
  202.    # ● レベルの変更
  203.    #      level : 新しいレベル
  204.    #--------------------------------------------------------------------------
  205.    def level=(level)
  206.      # 上下限チェック
  207.      # ★LV上限をnew_final_levelでチェックするように変更
  208.      level = [[level, new_final_level].min, 1].max
  209.      # EXP を変更
  210.      self.exp = @exp_list[level]
  211.    end
  212. end
  213.   
  214.   
  215. class Game_Battler
  216.    #--------------------------------------------------------------------------
  217.    # ● MaxSP の取得
  218.    #--------------------------------------------------------------------------
  219.    def maxsp
  220.      n = [[base_maxsp + @maxsp_plus, 0].max, MAXSP_LIMIT].min
  221.      for i in @states
  222.        n *= $data_states[i].maxsp_rate / 100.0
  223.      end
  224.      n = [[Integer(n), 0].max, MAXSP_LIMIT].min
  225.      return n
  226.    end
  227.    #--------------------------------------------------------------------------
  228.    # ● 腕力の取得
  229.    #--------------------------------------------------------------------------
  230.    def str
  231.      n = [[base_str + @str_plus, 1].max, STR_LIMIT].min
  232.      for i in @states
  233.        n *= $data_states[i].str_rate / 100.0
  234.      end
  235.      n = [[Integer(n), 1].max, STR_LIMIT].min
  236.      return n
  237.    end
  238.    #--------------------------------------------------------------------------
  239.    # ● 器用さの取得
  240.    #--------------------------------------------------------------------------
  241.    def dex
  242.      n = [[base_dex + @dex_plus, 1].max, DEX_LIMIT].min
  243.      for i in @states
  244.        n *= $data_states[i].dex_rate / 100.0

  245. end
  246.      n = [[Integer(n), 1].max, DEX_LIMIT].min
  247.      return n
  248.    end
  249.    #--------------------------------------------------------------------------
  250.    # ● 素早さの取得
  251.    #--------------------------------------------------------------------------
  252.    def agi
  253.      n = [[base_agi + @agi_plus, 1].max, AGI_LIMIT].min
  254.      for i in @states
  255.        n *= $data_states[i].agi_rate / 100.0
  256.      end
  257.      n = [[Integer(n), 1].max, AGI_LIMIT].min
  258.      return n
  259.    end
  260.    #--------------------------------------------------------------------------
  261.    # ● 魔力の取得
  262.    #--------------------------------------------------------------------------
  263.    def int
  264.      n = [[base_int + @int_plus, 1].max, INT_LIMIT].min
  265.      for i in @states
  266.        n *= $data_states[i].int_rate / 100.0
  267.      end
  268.      n = [[Integer(n), 1].max, INT_LIMIT].min
  269.      return n
  270.    end
  271.    #--------------------------------------------------------------------------
  272.    # ● MaxHP の设定
  273.    #      maxhp : 新しい MaxHP
  274.    #--------------------------------------------------------------------------
  275.    def maxhp=(maxhp)
  276.      @maxhp_plus += maxhp - self.maxhp
  277.      @maxhp_plus = [[@maxhp_plus, -MAXHP_LIMIT].max, MAXHP_LIMIT].min
  278.      @hp = [@hp, self.maxhp].min
  279.    end
  280.    #--------------------------------------------------------------------------
  281.    # ● MaxSP の设定
  282.    #      maxsp : 新しい MaxSP
  283.    #--------------------------------------------------------------------------
  284.    def maxsp=(maxsp)
  285.      @maxsp_plus += maxsp - self.maxsp
  286.      @maxsp_plus = [[@maxsp_plus, -MAXSP_LIMIT].max, MAXSP_LIMIT].min
  287.      @sp = [@sp, self.maxsp].min
  288.    end
  289.    #--------------------------------------------------------------------------
  290.    # ● 腕力の设定
  291.    #      str : 新しい腕力
  292.    #--------------------------------------------------------------------------
  293.    def str=(str)
  294.      @str_plus += str - self.str
  295.      @str_plus = [[@str_plus, -STR_LIMIT].max, STR_LIMIT].min
  296.    end
  297.    #--------------------------------------------------------------------------
  298.    # ● 器用さの设定
  299.    #      dex : 新しい器用さ
  300.    #--------------------------------------------------------------------------
  301.    def dex=(dex)
  302.      @dex_plus += dex - self.dex
  303.      @dex_plus = [[@dex_plus, -DEX_LIMIT].max, DEX_LIMIT].min
  304.    end
  305.    #--------------------------------------------------------------------------
  306.    # ● 素早さの设定
  307.    #      agi : 新しい素早さ
  308.    #--------------------------------------------------------------------------
  309.    def agi=(agi)
  310.      @agi_plus += agi - self.agi
  311.      @agi_plus = [[@agi_plus, -AGI_LIMIT].max, AGI_LIMIT].min
  312.    end
  313.    #--------------------------------------------------------------------------
  314.    # ● 魔力の设定
  315.    #      int : 新しい魔力
  316.    #--------------------------------------------------------------------------
  317.    def int=(int)
  318.      @int_plus += int - self.int
  319.      @int_plus = [[@int_plus, -INT_LIMIT].max, INT_LIMIT].min
  320.    end
  321. end
  322. #==============================================================================
  323. # 本脚本来自http://www.66rpg.com/,使用和转载请保留此信息
  324. #==============================================================================
复制代码
虽然看似完美,但有一个问题,我想让某角色的MAX高一些,某角色的MAX低一些,而这里出现了一个大故障:相同等级的两个角色的各个MAX一样高,这是怎么回事?该怎么优化呢? 多个角色一起算我的游戏就要泡汤!   
作者: 紫英晓狼1130    时间: 2013-8-31 20:26
4~38行可以修改最大值,如果最大值不同的话,曲线也应该不一样
作者: 876加几    时间: 2013-9-1 14:46
我顶!!
作者: 弗雷德    时间: 2013-9-1 14:58
逻辑是没错,但是你写错地方了,你将判断写在了类外,所以此时并没有actor的数据。
作者: 876加几    时间: 2013-9-1 15:05
本帖最后由 876加几 于 2013-9-1 15:23 编辑
弗雷德 发表于 2013-9-1 14:58
逻辑是没错,但是你写错地方了,你将判断写在了类外,所以此时并没有actor的数据。 ...


放进了类里,不管用if或case都会语法错误。
语法错误解决了,但这里总是会出问题:
RUBY 代码复制
  1. #--------------------------------------------------------------------------
  2. # ● EXP 计算
  3. #--------------------------------------------------------------------------
  4. def make_exp_list
  5.   actor = $data_actors[@actor_id]
  6.   @exp_list = Array.new(new_final_level+2)
  7.   @exp_list[1] = 0
  8.   pow_i = 2.4 + actor.exp_inflation / 100.0
  9.   for i in 2..new_final_level+1
  10.     if i > new_final_level
  11.       @exp_list[i] = 0
  12.     else
  13.       n = actor.exp_basis * ((i + 3) ** pow_i) / (5 ** pow_i)
  14.       @exp_list[i] = @exp_list[i-1] + Integer(n)
  15.     end
  16. end
  17. end

作者: 876加几    时间: 2013-9-14 08:38
我顶!!




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1