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

Project1

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

[已经解决] 求教如何让经验值变得随机化

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
36 小时
注册时间
2015-5-22
帖子
30
跳转到指定楼层
1
发表于 2016-1-20 21:20:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
如题。
我的方法是:在设计怪物的时候写入战斗结束事件>分歧>公共事件。
公共事件:设计变量>变量为1时EXPXXX>……以此类推。
但是缺点就是在大地图上要每个怪物都复制一份战斗结束事件,并且我写入的公共事件EXP是固定值,这样会很繁琐。
我也有想过在群敌页面中写入,但是群敌里面只有战斗条件,没有战斗结束事件,除非我事件设定成怪物只剩下X%HP的时候能活得随机量的经验,不然岂不是我逃跑都有经验了,但那样也会感觉很繁杂。
请教各位大大有没有什么脚本或者修改脚本亦或者更简单的事件逻辑。
我估摸着可能是我写事件的逻辑有问题,才没简化。

评分

参与人数 1星屑 +35 收起 理由
RyanBern + 35 手动认可奖励

查看全部评分

Lv3.寻梦者

梦石
0
星屑
2744
在线时间
2630 小时
注册时间
2013-1-16
帖子
5657

贵宾

2
发表于 2016-1-20 23:21:49 | 只看该作者
本帖最后由 myownroc 于 2016-1-20 23:58 编辑
  1. class Scene_Battle
  2.   def start_phase5
  3.     # 转移到回合 5
  4.     @phase = 5
  5.     # 演奏战斗结束 ME
  6.     $game_system.me_play($game_system.battle_end_me)
  7.     # 还原为战斗开始前的 BGM
  8.     $game_system.bgm_play($game_temp.map_bgm)
  9.     # 初始化 EXP、金钱、宝物
  10.     exp = 0
  11.     gold = 0
  12.     treasures = []
  13.     # 循环
  14.     for enemy in $game_troop.enemies
  15.       # 敌人不是隐藏状态的情况下
  16.       unless enemy.hidden
  17.         # 获得 EXP、增加金钱
  18.         exp += enemy.exp
  19.         gold += enemy.gold
  20.         # 出现宝物判定
  21.         if rand(100) < enemy.treasure_prob
  22.           if enemy.item_id > 0
  23.             treasures.push($data_items[enemy.item_id])
  24.           end
  25.           if enemy.weapon_id > 0
  26.             treasures.push($data_weapons[enemy.weapon_id])
  27.           end
  28.           if enemy.armor_id > 0
  29.             treasures.push($data_armors[enemy.armor_id])
  30.           end
  31.         end
  32.       end
  33.     end
  34.     exp += (rand(exp) * 0.1 - 0.05 * exp).to_i
  35.     # 限制宝物数为 6 个
  36.     treasures = treasures[0..5]
  37.     # 获得 EXP
  38.     for i in 0...$game_party.actors.size
  39.       actor = $game_party.actors[i]
  40.       if actor.cant_get_exp? == false
  41.         last_level = actor.level
  42.         actor.exp += exp
  43.         if actor.level > last_level
  44.           @status_window.level_up(i)
  45.         end
  46.       end
  47.     end
  48.     # 获得金钱
  49.     $game_party.gain_gold(gold)
  50.     # 获得宝物
  51.     for item in treasures
  52.       case item
  53.       when RPG::Item
  54.         $game_party.gain_item(item.id, 1)
  55.       when RPG::Weapon
  56.         $game_party.gain_weapon(item.id, 1)
  57.       when RPG::Armor
  58.         $game_party.gain_armor(item.id, 1)
  59.       end
  60.     end
  61.     # 生成战斗结果窗口
  62.     @result_window = Window_BattleResult.new(exp, gold, treasures)
  63.     # 设置等待计数
  64.     @phase5_wait_count = 100
  65.   end
  66. end
复制代码
楼主试一下这个,在基础经验值上有正负5%的浮动

评分

参与人数 1梦石 +1 收起 理由
RyanBern + 1 认可答案

查看全部评分

(Created by @喵kano)


施工现场:hotege.github.io
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
76
在线时间
1379 小时
注册时间
2012-7-5
帖子
1698

开拓者

3
发表于 2016-1-20 23:50:27 | 只看该作者
本帖最后由 kuerlulu 于 2016-1-20 23:58 编辑

## 有关如何调教怪物的经验值的教学(?)
# 找到相关代码
  1. Game_Enemy#exp(176行)
复制代码
# 直接修改此处 立即见效
  1.   def exp
  2.     return $data_enemies[@enemy_id].exp * 2
  3.   end
复制代码
# 绕个弯子修改此处 效果同上 即插即用
  1. class Game_Enemy
  2.   alias ori_exp exp
  3.   def exp
  4.     return ori_exp * 2
  5.   end
  6. end
复制代码
# 绕个大弯子修改此处 参考RB版主的【数据库扩展】 即插即用
  1. class Game_Enemy
  2.   # 使用说明:将需要修改经验值的怪物名字命名为 名称|2exp
  3.   alias ori_name name
  4.   def name
  5.     return ori_name.split("|").first
  6.   end
  7.   def options
  8.     a = ori_name.split("|")
  9.     return a.size == 1 ? [] : a[1..-1]
  10.   end
  11.   alias ori_exp exp
  12.   def exp
  13.     res = ori_exp
  14.     options.each do |option|
  15.       case option
  16.       when "2exp"
  17.         res *= 2
  18.       end
  19.     end
  20.     return res
  21.   end
  22. end
复制代码
# 绕个大弯子修改此处 增加自定义随机值设定 即插即用
# 使用:怪物命名为[名称|rand(15..18)|2exp]则击败此怪后获得30或32或34或36点经验值
  1. class Game_Enemy
  2.   alias ori_name name
  3.   def name
  4.     return ori_name.split("|").first
  5.   end
  6.   def options
  7.     a = ori_name.split("|")
  8.     return a.size == 1 ? [] : a[1..-1]
  9.   end
  10.   alias ori_exp exp
  11.   def exp
  12.     res = ori_exp
  13.     options.each do |option|
  14.       case
  15.       when option[/^2exp$/]
  16.         res *= 2
  17.       when option[/^rand\((\d+)\.\.(\d+)\)$/]
  18.         res = rand($2.to_i - $1.to_i + 1) + $1.to_i
  19.       end
  20.     end
  21.     return res
  22.   end
  23. end
复制代码
# 关于如何只对某事件中的某只怪有效 我编不下去了早点睡吧

评分

参与人数 2星屑 +15 梦石 +1 收起 理由
夜狠简单 + 15 塞糖
myownroc + 1 塞糖

查看全部评分


  -fk: -azogi:
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
36 小时
注册时间
2015-5-22
帖子
30
4
 楼主| 发表于 2016-1-21 08:41:48 | 只看该作者
感谢各位,实在太给力了。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-9-22 21:34

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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