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

Project1

 找回密码
 注册会员
搜索
查看: 3891|回复: 6
打印 上一主题 下一主题

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

[复制链接]

Lv1.梦旅人

梦石
0
星屑
49
在线时间
139 小时
注册时间
2012-1-20
帖子
178
跳转到指定楼层
1
 楼主| 发表于 2013-1-29 14:47:35 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

x
怎么让等级越高获得的经验越少?比如:角色1级打一只史莱姆 经验1000,角色2级打一只史莱姆900经验?

Lv2.观梦者 (暗夜天使)

梦石
0
星屑
266
在线时间
2355 小时
注册时间
2009-3-13
帖子
2309

贵宾

2
发表于 2013-1-29 17:39:25 | 只看该作者
升第2级跟升第3级的经验本来就不一样,通过参数的设置很容易做到打低等级怪升级很慢。你这样设置不觉得有些画蛇添足?
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
108
在线时间
1006 小时
注册时间
2008-11-9
帖子
1658
3
发表于 2013-1-29 18:21:47 | 只看该作者
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


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

点评

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

评分

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

查看全部评分

回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
49
在线时间
139 小时
注册时间
2012-1-20
帖子
178
4
 楼主| 发表于 2013-1-30 10:52:45 | 只看该作者
判约之轮 发表于 2013-1-29 18:21
Game_Troop脚本页中的这段:
  #---------------------------------------------------------------------- ...

其实吧。。。我有点不懂,教教我吧!
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
108
在线时间
1006 小时
注册时间
2008-11-9
帖子
1658
5
发表于 2013-1-30 12:12:35 | 只看该作者
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

点评

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

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
49
在线时间
139 小时
注册时间
2012-1-20
帖子
178
6
 楼主| 发表于 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
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
49
在线时间
139 小时
注册时间
2012-1-20
帖子
178
7
 楼主| 发表于 2013-1-30 14:19:36 | 只看该作者
好吧!我还是去rmxp去混一段时间吧!
回复 支持 反对

使用道具 举报

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

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

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

GMT+8, 2024-4-30 02:44

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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