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

Project1

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

[已经解决] 请教如何使用开关变量控制某地图的遇敌率和遇敌列表?

[复制链接]

Lv4.逐梦者

梦石
0
星屑
8498
在线时间
775 小时
注册时间
2017-11-10
帖子
1231
跳转到指定楼层
1
发表于 2017-11-27 18:37:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
就是白天时遇敌率低遇敌队伍也少,但晚上时就遇敌率高遇敌队伍也多。
但是具体要如何操作控制呢?请教前辈们。
一个只会简单事件的Rm新人,脚本完全不懂。只求做个简单的游戏完成自己的游戏之梦而已。
第一个游戏已经完成,等待各素材的完成和测试。

Lv5.捕梦者

梦石
0
星屑
33499
在线时间
5108 小时
注册时间
2012-11-19
帖子
4878

开拓者

2
发表于 2017-11-27 19:40:14 | 只看该作者
本帖最后由 芯☆淡茹水 于 2017-11-27 19:47 编辑

Game_Player 的生成遇敌步
  1. #--------------------------------------------------------------------------
  2.   def make_encounter_count
  3.     # 两种颜色震动的图像
  4.     if $game_map.map_id != 0
  5.       n = $game_map.encounter_step
  6.       @encounter_count = rand(n) + rand(n) + 1
  7.     end
  8.   end
复制代码


算式 n = $game_map.encounter_step 获取步数基数再加个变量 $game_variables 的值就行了。
比如加变量1:n = $game_map.encounter_step + $game_variables[1]
比如地图设置基数20步遇敌,变量1值是0,总共基数是 20,如果调节这个变量1值为20,那么总共基数是 20+20=40


至于确定队伍的多少,在 Scene_Map 里有确定队伍
RUBY 代码复制
  1. n = rand($game_map.encounter_list.size)
  2.         troop_id = $game_map.encounter_list[n]



可以再增加计算,比如用开关1控制队伍的多少

max = [$game_switches[1] ? $game_map.encounter_list.size / 2 : $game_map.encounter_list.size, 1].max
n = rand(max)
troop_id = $game_map.encounter_list[n]


这样开关1打开时,就只随机地图一半的队伍,关闭时就随机全部队伍





评分

参与人数 1+1 收起 理由
文雅夕露 + 1 认可答案

查看全部评分

xp vx va mv  va mz 各类型脚本/插件定制
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
8498
在线时间
775 小时
注册时间
2017-11-10
帖子
1231
3
 楼主| 发表于 2017-11-27 20:01:59 | 只看该作者
芯☆淡茹水 发表于 2017-11-27 19:40
Game_Player 的生成遇敌步

大致明白了,感谢前辈指教。
不过关于队伍多少的话,不知能通过变量作增减吗?
就是指定白天减少哪些队伍这样?
一个只会简单事件的Rm新人,脚本完全不懂。只求做个简单的游戏完成自己的游戏之梦而已。
第一个游戏已经完成,等待各素材的完成和测试。
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
9280
在线时间
2504 小时
注册时间
2011-5-20
帖子
15389

开拓者

4
发表于 2017-11-27 20:18:29 | 只看该作者
文雅夕露 发表于 2017-11-27 20:01
大致明白了,感谢前辈指教。
不过关于队伍多少的话,不知能通过变量作增减吗?
就是指定白天减少哪些队伍 ...

当然可以···
因为xp的开关和变量其实都是全局变量,只不过开关好像预设了false,打开通常是true来用···

3楼的脚本的话

  1. n = rand($game_map.encounter_list.size)
  2. troop_id = $game_map.encounter_list[n]
复制代码

这里的 $game_map.encounter_list是当前所在地图的遭遇敌群的列表,n则是在列表中该敌群的编号
troop_id赋值为你遇到的敌群在当前地图可遭遇敌群的编号

n = rand($game_map.encounter_list.size)是n随机赋值为0到该地图可遭遇敌群种类的数量
[img]http://service.t.sina.com.cn/widget/qmd/5339802982/c02e16bd/7.png
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
8498
在线时间
775 小时
注册时间
2017-11-10
帖子
1231
5
 楼主| 发表于 2017-11-27 20:35:37 | 只看该作者
chd114 发表于 2017-11-27 20:18
当然可以···
因为xp的开关和变量其实都是全局变量,只不过开关好像预设了false,打开通常是true来用· ...

感谢补充解释...
不过稍微有些懵...
那直接用变量减少遇敌队伍就行?
  1. n = rand($game_map.encounter_list.size -  $game_variables[1])
  2. troop_id = $game_map.encounter_list[n]
复制代码

一个只会简单事件的Rm新人,脚本完全不懂。只求做个简单的游戏完成自己的游戏之梦而已。
第一个游戏已经完成,等待各素材的完成和测试。
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
33499
在线时间
5108 小时
注册时间
2012-11-19
帖子
4878

开拓者

6
发表于 2017-11-27 20:54:44 | 只看该作者
文雅夕露 发表于 2017-11-27 20:01
大致明白了,感谢前辈指教。
不过关于队伍多少的话,不知能通过变量作增减吗?
就是指定白天减少哪些队伍 ...

因为每张地图设置的敌人队伍有多有少,甚至没有的情况。
如果要以变量来细化调节可以遇多少队伍,可以实现,但相对来说比较麻烦,
目前未想到比较简洁的方法。

点评

明白了,通过地图编号判断来调节队伍相对比较麻烦一些。  发表于 2017-11-27 21:21
如果想要用遇敌步数那个变量同步调节,需要确定一个变量所能设置的最大值,以这个最大值和现在值得比例,来确定随机多少个队伍  发表于 2017-11-27 20:58
xp vx va mv  va mz 各类型脚本/插件定制
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
33499
在线时间
5108 小时
注册时间
2012-11-19
帖子
4878

开拓者

7
发表于 2017-11-27 21:28:58 | 只看该作者
本帖最后由 芯☆淡茹水 于 2017-11-27 21:37 编辑

也许这样可行:
  1. class Scene_Map
  2.   #--------------------------------------------------------------------------
  3.   def max_count   #<= 计算最大可随机的队伍个数
  4.     max_val = 40   #<= 变量1增加步数的最大调整值
  5.     size = $game_map.encounter_list.size
  6.     return size if size == 1  #<= 保底随机 1 个队伍
  7.     #依照变量值百分比来决定随机多少个队伍
  8.     num = ((max_val - $game_variables[1]) * 100.0 / max_val * size / 100).round
  9.     return [num, 1].max  #<= 保底随机 1 个队伍
  10.   end
  11.   #--------------------------------------------------------------------------
  12.   def troop_data  #<= 依照最大个数,随机 可随机 的队伍
  13.     data = []
  14.     while data.size < max_count
  15.       id = $game_map.encounter_list[rand($game_map.encounter_list.size)]
  16.       data << id unless data.include?(id)
  17.     end
  18.     return data
  19.   end
  20. end
复制代码

嘛,上面那样貌似又绕回去了,汗~! 那可以把 随机 改为 截取
RUBY 代码复制
  1. def troop_data  #<= 依照最大个数,截取 可随机 的队伍
  2.   return $game_map.encounter_list[0...max_count]
  3. end




那么 Scene_Map 里面的那两句就应该改为:

n = rand(troop_data.size)
troop_id = troop_data[n]

评分

参与人数 2星屑 +100 +1 收起 理由
RyanBern + 100 认可答案
文雅夕露 + 1 成功了,感谢前辈的帮助。

查看全部评分

xp vx va mv  va mz 各类型脚本/插件定制
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (版主)

遠航の猫咪

梦石
3
星屑
23206
在线时间
2387 小时
注册时间
2005-10-15
帖子
1166

开拓者

8
发表于 2017-11-27 22:05:02 | 只看该作者
这需求完全不用改系统脚本啊……公共事件就搞定了,以下:
系统的遇敌逻辑是步数从N倒数到0执行,如果你在步数为1的时候插入,就能阻止拦截他的执行
由于步数生成时已经加过1了,所以对游戏逻辑没有影响

公共事件:遇敌机率下降并遇敌列表无效化
执行:并行处理
条件开关:开关0001:遇敌降半
执行内容:
条件分歧:脚本:not ($game_player.moving? or $game_system.encounter_disabled)
  条件分歧:脚本:$game_player.encounter_count == 1
    条件分歧:变量0002:跳过遇敌>0
      变量操作:0002:跳过遇敌-=1
      脚本:$game_player.make_encounter_count
    除此以外的情况下
      注释:设为1则机率降半,2则降为1/3,依次类推
      变量操作:0002:跳过遇敌=1
      注释:要跳过的队伍列表
      不跳过设为0,跳过第1个设为1
      跳过第2个设为2,跳过第3个设为4
      跳过第4个设为8,跳过第5个设为16……
      上述设定可以叠加(最大支持25个:值为67108863)
      变量操作:0003:跳过队伍 = 20   #例:跳过第3、第5个
      脚本:
      l = $game_map.encounter_list.clone
      l.reject!{|i| (1 << l.index(i)) & $game_variables[3] > 0}
      id = l[rand(l.size)]
      $game_temp.battle_calling = true
      $game_temp.battle_troop_id = id
      $game_temp.battle_can_escape = true
      $game_temp.battle_can_lose = false

      $game_temp.battle_proc = nil
      $game_player.make_encounter_count
    分歧结束
  分歧结束
分歧结束


点评

她会一点脚本的  发表于 2017-11-27 22:30
SailCat (小猫子·要开心一点) 共上站 24 次,发表过 11 篇文章 上 次 在: [2006年01月28日11:41:18 星期六] 从 [162.105.120.91] 到本站一游。
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
9280
在线时间
2504 小时
注册时间
2011-5-20
帖子
15389

开拓者

9
发表于 2017-11-27 22:29:56 | 只看该作者
文雅夕露 发表于 2017-11-27 20:35
感谢补充解释...
不过稍微有些懵...
那直接用变量减少遇敌队伍就行?

这一段和遇敌概率没关系,这一段是取出你遇到的敌群
如果你想要做到每张地图每个敌群都用不同概率的话还有其他方法(要动一下脚本)···
不过感觉这样可能对你来说太夸张了···
[img]http://service.t.sina.com.cn/widget/qmd/5339802982/c02e16bd/7.png
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
33499
在线时间
5108 小时
注册时间
2012-11-19
帖子
4878

开拓者

10
发表于 2017-11-28 08:04:10 | 只看该作者
文雅夕露 发表于 2017-11-27 20:35
感谢补充解释...
不过稍微有些懵...
那直接用变量减少遇敌队伍就行?

其实,才发现写在这个地方更方便,不用改 Scene_Map

  1. class Game_Map
  2.   #--------------------------------------------------------------------------
  3.   def encounter_list
  4.     return @map.encounter_list.size == 0 ? [] : @map.encounter_list[0...max_count]
  5.   end
  6.   #--------------------------------------------------------------------------
  7.   def max_count   #<= 计算最大可随机的队伍个数
  8.     max_val = 40   #<= 变量1增加步数的最大调整值
  9.     size = @map.encounter_list.size
  10.     return size if size == 1  #<= 保底随机 1 个队伍
  11.     #依照变量值百分比来决定随机多少个队伍
  12.     num = ((max_val - $game_variables[1]) * 100.0 / max_val * size / 100).round
  13.     return [num, 1].max  #<= 保底随机 1 个队伍
  14.   end
  15. end
复制代码

点评

谢谢优化完善效果  发表于 2017-11-28 19:53
xp vx va mv  va mz 各类型脚本/插件定制
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-30 17:48

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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