查看: 4407|回复: 6

[已经解决] 关于等级与经验的问题

[复制链接]
梦石
0
星屑
49
在线时间
139 小时
注册时间
2012-1-20
回帖
141
发表于 2013-1-29 14:47:35 | 显示全部楼层 |阅读模式

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

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

×
怎么让等级越高获得的经验越少?比如:角色1级打一只史莱姆 经验1000,角色2级打一只史莱姆900经验?
梦石
0
星屑
266
在线时间
2355 小时
注册时间
2009-3-13
回帖
2257

贵宾

发表于 2013-1-29 17:39:25 | 显示全部楼层
升第2级跟升第3级的经验本来就不一样,通过参数的设置很容易做到打低等级怪升级很慢。你这样设置不觉得有些画蛇添足?
回复

使用道具 举报

梦石
0
星屑
108
在线时间
1006 小时
注册时间
2008-11-9
回帖
1633
发表于 2013-1-29 18:21:47 | 显示全部楼层
Game_Troop脚本页中的这段:
[pre lang="ruby" line="1"]  #--------------------------------------------------------------------------
  # ● 计算经验值的总数
  #--------------------------------------------------------------------------
  def exp_total
    dead_members.inject(0) {|r, enemy| r += enemy.exp }
  end[/pre]

而代表着双方角色等级的变量是:
[pre lang="ruby" line="1"]$game_actors[n]    #n为角色编号[/pre]

当前所遇敌群的编号变量是:
[pre lang="ruby" line="1"]@troop_id[/pre]

那么再来看看Ruby中inject函数的用法:
[pre lang="ruby" line="1"][2,4,6,8].inject(0) { |sum,element| sum + element } 输出结果:20
[2,4,6,8].inject(1) { |product,element| product * element } 输出结果:384
当inject有参数时,inject后面的block第一次执行时,sum或product的值被设置为参数的值,而element的值被设置为集合中第一个元素的值。接下来每次再执行block时,sum或product的值被设置为上次调用block时的返回值,element即为集合中下一个元素的值。inject的最终结果是最后一次调用block的返回值。[/pre]

简而言之,就是 r 是一个储存经验值的临时变量,而 enemy 就是组成 dead_members 这个复合数组的结构单元,其作用就是把 dead_members 中所有 enemy 对象中的 exp 属性叠加求和。

之后又涉及了一个脚本的基础用法:
[pre lang="ruby" line="1"]def exp_effect
  i = 0
  until i >= n do
    if @troop_id == m
      return $game_actors[x] / 10 + 4
    end
  end
end[/pre]

之后的部分明白就是明白,不明白我也没办法了……
修改函数在脚本技术里可是基础= =

点评

虽然不懂,但是感谢I,祝你蛇年大吉  发表于 2013-1-30 10:54

评分

参与人数 1梦石 +1 收起 理由
迷糊的安安 + 1 认可答案 附赠66RPG提供的精美好人卡一张^^.

查看全部评分

回复

使用道具 举报

梦石
0
星屑
49
在线时间
139 小时
注册时间
2012-1-20
回帖
141
 楼主| 发表于 2013-1-30 10:52:45 | 显示全部楼层
判约之轮 发表于 2013-1-29 18:21
Game_Troop脚本页中的这段:
  #---------------------------------------------------------------------- ...

其实吧。。。我有点不懂,教教我吧!
回复

使用道具 举报

梦石
0
星屑
108
在线时间
1006 小时
注册时间
2008-11-9
回帖
1633
发表于 2013-1-30 12:12:35 | 显示全部楼层
qw707869242 发表于 2013-1-30 10:52
其实吧。。。我有点不懂,教教我吧!

虽然很想照着原先的思路走……但似乎已经找到了一个更容易说明的方法,顺着这个思路走就好:
1.你想要修改的是胜利之后获得的经验值,所以搜索关键字“胜利”
QQ截图20130130112150.png

2.胜利后的处理更加符合情况,所以定位目标
QQ截图20130130112205.png

3.其中找到关于经验值变化的函数 gain_exp,然后继续搜索
QQ截图20130130112224.png

4.那么经验值增加原理一目了然,也就是对于每个 actor 对象,都执行 actor.gain_exp(exp)函数
QQ截图20130130112253.png

5.那么继续定位到第三步中的另一个函数,是否在上一步看到了呢?
QQ截图20130130112315.png

6.然后再搜索第五步函数中用到的 change_exp,意外惊喜呢,找到了直接存储着等级信息的 @level 变量
QQ截图20130130112524.png

7.综合以上所搜索到的信息来看,要想更改经验值获得,只能修改第五步中所找到的函数
[pre lang="ruby" line="1"]  #--------------------------------------------------------------------------
  # ● 获得经验值(判断经验获取加成)
  #--------------------------------------------------------------------------
  def gain_exp(exp)
    change_exp(self.exp + (exp * final_exp_rate).to_i, true)
  end[/pre]

那么分析过程就这么完成了

获得经验值的公式是 exp + (exp * final_exp_rate).to_i (注:n.to_i 是向下取整,比如n = 3.7,那么n.to_i = 3 )
如果希望获得经验和等级相关联,可以利用@level来获取当前所计算角色的等级
而如果公式太复杂,你也可以额外定义一个变量型函数,就像这样:
[pre lang="ruby" line="1"]def self.temp
  @level / 123
end[/pre]

当你的计算公式只是很简单的算式的时候,这个函数可用
当你的计算式涉及到各种复合变量、数组、函数,建议参照传统的函数定义模式,即在函数中定义一个最低级别的临时变量,计算完毕后用"return n"语句返回变量的值
就像这样:
[pre lang="ruby" line="1"]def self.temp
  n = @level / 123
  return n
end[/pre]

最后的工作,就是把这个变量型函数加入到公式中,也就是:
[pre lang="ruby" line="1"]  #--------------------------------------------------------------------------
  # ● 获得经验值(判断经验获取加成)
  #--------------------------------------------------------------------------
  def gain_exp(exp)
    change_exp(self.exp + (exp * final_exp_rate * temp).to_i, true)
  end[/pre]

点评

GAME-ACTOR第451行发生了nameerror  发表于 2013-1-30 13:36
回复

使用道具 举报

梦石
0
星屑
49
在线时间
139 小时
注册时间
2012-1-20
回帖
141
 楼主| 发表于 2013-1-30 13:06:41 | 显示全部楼层
判约之轮 发表于 2013-1-30 12:12
虽然很想照着原先的思路走……但似乎已经找到了一个更容易说明的方法,顺着这个思路走就好:
1.你想要修 ...

错误了。。。。

点评

大师帮帮我吧!我+了任然错误,还是一样的。。。。  发表于 2013-1-30 14:12
拿只要那个加上去就可以了?  发表于 2013-1-30 14:02
明白了,或者是因为你的 temp 函数没有定义,或者是你输入的函数名称与你定义的不一致  发表于 2013-1-30 13:55
弹出的错误类型是?  发表于 2013-1-30 13:11
回复

使用道具 举报

梦石
0
星屑
49
在线时间
139 小时
注册时间
2012-1-20
回帖
141
 楼主| 发表于 2013-1-30 14:19:36 | 显示全部楼层
好吧!我还是去rmxp去混一段时间吧!
回复

使用道具 举报

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

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部