Project1

标题: 角色能力随机成长的问题 [打印本页]

作者: 李大目    时间: 2008-3-7 00:03
标题: 角色能力随机成长的问题
想做一些角色,成长值不固定,随机的。

即在升级后,加点有一个范围,例如力量会提升1-3之间,


这个如何完成?? [LINE]1,#dddddd[/LINE]此贴于 2008-3-11 11:48:07 被版主水迭澜提醒,请楼主看到后对本贴做出回应。
[LINE]1,#dddddd[/LINE]
----------------版务----------------
如果问题未解决,请继续提问
如果问题已解决,请结贴
若到末贴发贴时间后一周仍未结贴
管理员会自动为你过期帖子、结贴或强行认可答案(好人卡-1)


作者: 0飘絮0    时间: 2008-3-7 03:12
数据库设定的没升级某人物增长多少属性.
如果不想用数据库的成长曲线,你可以修改有关读取角色属性的脚本吧.不过,我没试过修改(怕自己修改不全).
或者你使用升级加点脚本(主站上有),可以设定数据库的角色成长为一平线(即成长为0),然后在角色升级时,增长的量,来个随机.当然也需要修改升级加点等的脚本.如果不想自己不断试着修改的话,就忽视吧
作者: 水迭澜    时间: 2008-3-7 04:15
这么说吧……恐怕跟你想象的不一样= =
角色的属性不是升级时候加上去的,而是在数据库里设置好的,只是在计算的时候根据等级从数据库里读出来……= =

所以建议,在数据库把角色设置成升级不加点
然后在Game_Actor这段里改

  def exp=(exp)
    @exp = [[exp, 9999999].min, 0].max
    # 升级
    while @exp >= @exp_list[@level+1] and @exp_list[@level+1] > 0
      @level += 1
      # 学会特技
      for j in $data_classes[@class_id].learnings
        if j.level == @level
          learn_skill(j.skill_id)
        end
      end
    end
    # 降级
    while @exp < @exp_list[@level]
      @level -= 1
    end
    # 修正当前的 HP 与 SP 超过最大值
    @hp = [@hp, self.maxhp].min
    @sp = [@sp, self.maxsp].min
  end
改为:
  def exp=(exp)
    @exp = [[exp, 9999999].min, 0].max
    # 升级
    while @exp >= @exp_list[@level+1] and @exp_list[@level+1] > 0
      @level += 1
      # 学会特技


      str += rand(3)+1 ###力量增加1~3
      agi += rand(3)+1
      dex += rand(3)+1
      int += rand(3)+1



      for j in $data_classes[@class_id].learnings
        if j.level == @level
          learn_skill(j.skill_id)
        end
      end
    end
    # 降级
    while @exp < @exp_list[@level]
      @level -= 1
    end
    # 修正当前的 HP 与 SP 超过最大值
    @hp = [@hp, self.maxhp].min
    @sp = [@sp, self.maxsp].min
  end

降级的时候减属性不好设置,没判断。一般也不会降等级吧= =
另外没测试,不知道可行与否
作者: 凌冰    时间: 2008-3-7 04:24
以下引用水迭澜于2008-3-6 20:15:12的发言:

降级的时候减属性不好设置,没判断。一般也不会降等级吧= =
另外没测试,不知道可行与否


[本贴由作者于 2008-3-6 20:15:35 最后编辑]

那可不一定哦!呵呵!我的游戏里就有Exp伤害的特效。
貌似对水水的脚本有些质疑
在def base_str里,不是要载入数据库的str吗?
那这个脚本有多大意义呢?也就是说,每次升级只不过是在原有数据库的增加度上加1~3,好像没有叠加效果吧!
作者: 水迭澜    时间: 2008-3-7 04:30
不是的。有区别的,我增加的是str
而str的增加是加在str_plus里的~可以叠加的~
作者: 凌冰    时间: 2008-3-7 04:34
哦!明白了……
作者: 禾西    时间: 2008-3-7 08:14
報告娘娘~完全不行咩=v=
Game_Actor裡面根本沒有str,agi,dex,int的函數 囧rz
可以考慮成這樣:
01.我們角色的基本能力不隨等級變化,全部讀取等級1時候的能力

  1.   #--------------------------------------------------------------------------
  2.   # ● 获取基本力量
  3.   #--------------------------------------------------------------------------
  4.   def base_str
  5.     n = $data_actors[@actor_id].parameters[2, 0]
  6.     weapon = $data_weapons[@weapon_id]
  7.     armor1 = $data_armors[@armor1_id]
  8.     armor2 = $data_armors[@armor2_id]
  9.     armor3 = $data_armors[@armor3_id]
  10.     armor4 = $data_armors[@armor4_id]
  11.     n += weapon != nil ? weapon.str_plus : 0
  12.     n += armor1 != nil ? armor1.str_plus : 0
  13.     n += armor2 != nil ? armor2.str_plus : 0
  14.     n += armor3 != nil ? armor3.str_plus : 0
  15.     n += armor4 != nil ? armor4.str_plus : 0
  16.     return [[n, 1].max, 999].min
  17.   end
  18.   #--------------------------------------------------------------------------
  19.   # ● 获取基本灵巧
  20.   #--------------------------------------------------------------------------
  21.   def base_dex
  22.     n = $data_actors[@actor_id].parameters[3, 0]
  23.     weapon = $data_weapons[@weapon_id]
  24.     armor1 = $data_armors[@armor1_id]
  25.     armor2 = $data_armors[@armor2_id]
  26.     armor3 = $data_armors[@armor3_id]
  27.     armor4 = $data_armors[@armor4_id]
  28.     n += weapon != nil ? weapon.dex_plus : 0
  29.     n += armor1 != nil ? armor1.dex_plus : 0
  30.     n += armor2 != nil ? armor2.dex_plus : 0
  31.     n += armor3 != nil ? armor3.dex_plus : 0
  32.     n += armor4 != nil ? armor4.dex_plus : 0
  33.     return [[n, 1].max, 999].min
  34.   end
  35.   #--------------------------------------------------------------------------
  36.   # ● 获取基本速度
  37.   #--------------------------------------------------------------------------
  38.   def base_agi
  39.     n = $data_actors[@actor_id].parameters[4, 0]
  40.     weapon = $data_weapons[@weapon_id]
  41.     armor1 = $data_armors[@armor1_id]
  42.     armor2 = $data_armors[@armor2_id]
  43.     armor3 = $data_armors[@armor3_id]
  44.     armor4 = $data_armors[@armor4_id]
  45.     n += weapon != nil ? weapon.agi_plus : 0
  46.     n += armor1 != nil ? armor1.agi_plus : 0
  47.     n += armor2 != nil ? armor2.agi_plus : 0
  48.     n += armor3 != nil ? armor3.agi_plus : 0
  49.     n += armor4 != nil ? armor4.agi_plus : 0
  50.     return [[n, 1].max, 999].min
  51.   end
  52.   #--------------------------------------------------------------------------
  53.   # ● 获取基本魔力
  54.   #--------------------------------------------------------------------------
  55.   def base_int
  56.     n = $data_actors[@actor_id].parameters[5, 0]
  57.     weapon = $data_weapons[@weapon_id]
  58.     armor1 = $data_armors[@armor1_id]
  59.     armor2 = $data_armors[@armor2_id]
  60.     armor3 = $data_armors[@armor3_id]
  61.     armor4 = $data_armors[@armor4_id]
  62.     n += weapon != nil ? weapon.int_plus : 0
  63.     n += armor1 != nil ? armor1.int_plus : 0
  64.     n += armor2 != nil ? armor2.int_plus : 0
  65.     n += armor3 != nil ? armor3.int_plus : 0
  66.     n += armor4 != nil ? armor4.int_plus : 0
  67.     return [[n, 1].max, 999].min
  68.   end
复制代码

2.在昇級的時候設定等級1的能力(動態改變數據庫)
  1.   #--------------------------------------------------------------------------
  2.   # ● 更改 EXP
  3.   #     exp : 新的 EXP
  4.   #--------------------------------------------------------------------------
  5.   def exp=(exp)
  6.     @exp = [[exp, 9999999].min, 0].max
  7.     # 升级
  8.     while @exp >= @exp_list[@level+1] and @exp_list[@level+1] > 0
  9.       @level += 1
  10.       $data_actors[@actor_id].parameters[2, 0] += rand(3)+1
  11.       $data_actors[@actor_id].parameters[3, 0] += rand(3)+1
  12.       $data_actors[@actor_id].parameters[4, 0] += rand(3)+1
  13.       $data_actors[@actor_id].parameters[5, 0] += rand(3)+1
  14.       # 学会特技
  15.       for j in $data_classes[@class_id].learnings
  16.         if j.level == @level
  17.           learn_skill(j.skill_id)
  18.         end
  19.       end
  20.     end
  21.     # 降级
  22.     while @exp < @exp_list[@level]
  23.       @level -= 1
  24.     end
  25.     # 修正当前的 HP 与 SP 超过最大值
  26.     @hp = [@hp, self.maxhp].min
  27.     @sp = [@sp, self.maxsp].min
  28.   end
复制代码

作者: 李大目    时间: 2008-3-7 16:59
感谢三楼兄弟的友情帮助,待俺回家后试试看 {/cy}
作者: 光郎    时间: 2008-3-7 17:47
……大家都是脚本派…
用事件就能无冲突的说…
1号变量是1号角色的成长…
升级事执行这个事件,
随机变量1的值1到3,角色力量+这个变量值,随机变量1的值1到3,角色敏捷值+这个变量值……
这样,利用状态法,升级时给角色加个状态,用状态做判定…
作者: 凌冰    时间: 2008-3-7 21:27
以下引用禾西于2008-3-7 0:14:08的发言:

報告娘娘~完全不行咩=v=
Game_Actor裡面根本沒有str,agi,dex,int的函數 囧rz

有是有的不过在Game_Battler里
  1. def str
  2.     n = [[base_str + @str_plus, 1].max, 9999].min
  3.     for i in @states
  4.       n *= $data_states[i].str_rate / 100.0
  5.     end
  6.     n = [[Integer(n), 1].max, 9999].min
  7.     return n
  8.   end
复制代码

即str = base_str + @str_plus
而通过物品增加属性值是增加@str_plus
所以,我感觉是不是改成str_plus合理点
作者: 禾西    时间: 2008-3-7 21:49
不知道耶,改Game_Battler怎麼在每次昇級後調用?==a
用幷行事件嗎?
作者: 水迭澜    时间: 2008-3-7 21:50
以下引用禾西于2008-3-7 0:14:08的发言:

可以在其父类Game_Battler调用同名方法的吧=3=
作者: 禾西    时间: 2008-3-7 21:57
實際告訴我出錯…… 囧rz 一時想不到原因

PS:完全沒有留意Game_Actor的繼承關係==|||
作者: 水迭澜    时间: 2008-3-7 21:59
ER……出错类型是?
我回头再看看好了
作者: 禾西    时间: 2008-3-7 22:01
int等變量爲nil,也就是無法取得返回值
作者: 凌冰    时间: 2008-3-7 22:02
以下引用禾西于2008-3-7 14:01:25的发言:

int等變量爲nil

int为nil?
在Game_Battler 里定义过了啊
作者: 禾西    时间: 2008-3-7 22:09
要用self.int調用,剛才再看了一下==。不過還是出錯……說是無法確認附加狀態的ID(死)。

物品增加屬性的時候是增加@int_plus,然後int中把@int_plus和base_int加在一齊。再用狀態效果修正……

如果要改起來,需要寫很多新方法……所以……暫時我還是堅持我的方法好了。不知道凌冰和水找不找到更好的辦法。(禾西是無能了)
作者: 凌冰    时间: 2008-3-7 22:11
我说了,是增加int_plus
作者: 禾西    时间: 2008-3-7 22:20
唔……的確可以。下列腳本扔進main之前

  1. class Game_Battler
  2.   def ele_replus
  3.     @int_plus += rand(3)+1
  4.     @str_plus += rand(3)+1
  5.   end
  6. end
  7. class Game_Actor < Game_Battler
  8.   #--------------------------------------------------------------------------
  9.   # ● 更改 EXP
  10.   #     exp : 新的 EXP
  11.   #--------------------------------------------------------------------------
  12.   def exp=(exp)
  13.     @exp = [[exp, 9999999].min, 0].max
  14.     # 升级
  15.     while @exp >= @exp_list[@level+1] and @exp_list[@level+1] > 0
  16.       @level += 1
  17.       self.ele_replus
  18.       # 学会特技
  19.       for j in $data_classes[@class_id].learnings
  20.         if j.level == @level
  21.           learn_skill(j.skill_id)
  22.         end
  23.       end
  24.     end
  25.     # 降级
  26.     while @exp < @exp_list[@level]
  27.       @level -= 1
  28.     end
  29.     # 修正当前的 HP 与 SP 超过最大值
  30.     @hp = [@hp, self.maxhp].min
  31.     @sp = [@sp, self.maxsp].min
  32.   end
  33. end
复制代码

方法不是我想出來的,好人卡就給淩冰好了 [LINE]1,#dddddd[/LINE]版主对此帖的认可:『辛苦了~』,积分『+100』。 [LINE]1,#dddddd[/LINE]版主对此帖的认可:『辛苦了~』,积分『+100』。




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