Project1

标题: 关于等级与经验的问题 [打印本页]

作者: qw707869242    时间: 2013-1-29 14:47
标题: 关于等级与经验的问题
怎么让等级越高获得的经验越少?比如:角色1级打一只史莱姆 经验1000,角色2级打一只史莱姆900经验?
作者: Sion    时间: 2013-1-29 17:39
升第2级跟升第3级的经验本来就不一样,通过参数的设置很容易做到打低等级怪升级很慢。你这样设置不觉得有些画蛇添足?
作者: 判约之轮    时间: 2013-1-29 18:21
Game_Troop脚本页中的这段:
RUBY 代码复制
  1. #--------------------------------------------------------------------------
  2.   # ● 计算经验值的总数
  3.   #--------------------------------------------------------------------------
  4.   def exp_total
  5.     dead_members.inject(0) {|r, enemy| r += enemy.exp }
  6.   end


而代表着双方角色等级的变量是:
RUBY 代码复制
  1. $game_actors[n]    #n为角色编号


当前所遇敌群的编号变量是:
RUBY 代码复制
  1. @troop_id


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


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

之后又涉及了一个脚本的基础用法:
RUBY 代码复制
  1. def exp_effect
  2.   i = 0
  3.   until i >= n do
  4.     if @troop_id == m
  5.       return $game_actors[x] / 10 + 4
  6.     end
  7.   end
  8. end


之后的部分明白就是明白,不明白我也没办法了……
修改函数在脚本技术里可是基础= =
作者: qw707869242    时间: 2013-1-30 10:52
判约之轮 发表于 2013-1-29 18:21
Game_Troop脚本页中的这段:
  #---------------------------------------------------------------------- ...

其实吧。。。我有点不懂,教教我吧!
作者: 判约之轮    时间: 2013-1-30 12:12
qw707869242 发表于 2013-1-30 10:52
其实吧。。。我有点不懂,教教我吧!

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


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


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


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


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


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


7.综合以上所搜索到的信息来看,要想更改经验值获得,只能修改第五步中所找到的函数
RUBY 代码复制
  1. #--------------------------------------------------------------------------
  2.   # ● 获得经验值(判断经验获取加成)
  3.   #--------------------------------------------------------------------------
  4.   def gain_exp(exp)
  5.     change_exp(self.exp + (exp * final_exp_rate).to_i, true)
  6.   end


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

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


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


最后的工作,就是把这个变量型函数加入到公式中,也就是:
RUBY 代码复制
  1. #--------------------------------------------------------------------------
  2.   # ● 获得经验值(判断经验获取加成)
  3.   #--------------------------------------------------------------------------
  4.   def gain_exp(exp)
  5.     change_exp(self.exp + (exp * final_exp_rate * temp).to_i, true)
  6.   end

作者: qw707869242    时间: 2013-1-30 13:06
判约之轮 发表于 2013-1-30 12:12
虽然很想照着原先的思路走……但似乎已经找到了一个更容易说明的方法,顺着这个思路走就好:
1.你想要修 ...

错误了。。。。
作者: qw707869242    时间: 2013-1-30 14:19
好吧!我还是去rmxp去混一段时间吧!




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