骑马与砍杀中文站论坛

 找回密码
 注册(Register!)

QQ登录

只需一步,快速开始

搜索
购买CDKEY 小黑盒加速器
查看: 2414|回复: 3

[讨论] 关于有条件的随机选择

[复制链接]

18

主题

69

回帖

321

积分

贵族[MOD作者]

Rank: 7Rank: 7Rank: 7

UID
3154436
第纳尔
1386
精华
1
互助
11
荣誉
14
贡献
10
魅力
122
注册时间
2020-4-2

霸主正版勋章

鲜花(34) 鸡蛋(0)
发表于 2020-6-24 15:48:13 | 显示全部楼层 |阅读模式
(store_random_in_range, ":random_no", 0, 100),可以随机选择一个数值,但是我想要添加一些条件,比如领主直接随机选择,但随机选择的目标必须得和玩家是一个阵营,于是我写了个脚本:
  ("suijixuanzyiweitongzhenyingde_npc",
    [
    (store_random_in_range, ":kingdom_hero", active_npcs_begin, active_npcs_end),
    (store_troop_faction, ":troop_kingdom", ":kingdom_hero"),
    (try_begin),
      (troop_slot_eq, ":kingdom_hero", slot_troop_occupation, slto_kingdom_hero),
      (eq, ":troop_kingdom", "$players_kingdom"),
      (assign, reg0, ":kingdom_hero"),
    (else_try),
      (call_script,"script_suijixuanzyiweitongzhenyingde_npc"),
    (try_end),
  ]),
但感觉还是有些麻烦了,是否有更好更简便的方法

57

主题

953

回帖

543

积分

子爵[版主]

Rank: 7Rank: 7Rank: 7

UID
81513
第纳尔
5138
精华
1
互助
18
荣誉
5
贡献
100
魅力
123
注册时间
2008-6-26
QQ
鲜花(103) 鸡蛋(0)
发表于 2020-6-24 18:21:31 来自手机 | 显示全部楼层
这种最好别用递归 效率低 简单的方法有不少 我这边先说一个:记得没错的话 相同阵营的领主id都是连续的 利用这个特点 假设所有领主从x到y 每个阵营n个领主 总共6个阵营 那么只要获取玩家的阵营 然后判断是哪个期间的 之后在那个区间做随机

949

主题

1万

回帖

1万

积分

侯爵[超级版主]

枢机主教

Rank: 8Rank: 8Rank: 8Rank: 8

UID
45575
第纳尔
41693
精华
20
互助
1060
荣誉
584
贡献
1796
魅力
1699
注册时间
2007-10-24

骑砍中文站APP会员勋章元老骑士勋章原版正版勋章战团正版勋章火与剑正版勋章拿破仑正版勋章维京征服正版勋章骑士美德之英勇勋章[杰出会员活跃勋章]骑士美德之大无畏勋章[杰出会员高级活跃勋章]骑士美德之仁慈勋章[杰出会员互助勋章]骑士美德之侠义勋章[杰出会员高级互助勋章]骑士美德之谦恭勋章[杰出会员财富勋章]骑士美德之公正勋章[杰出会员高级财富勋章]骑士美德之忠诚勋章[杰出会员精华勋章]骑士美德之正义勋章[杰出会员荣誉勋章]骑士美德之荣耀勋章[杰出会员高级荣誉勋章]骑士美德之圣洁勋章[杰出会员高级精华勋章]杰出汉化小组成员勋章骑士美德之慷慨勋章骑士荣誉之原版汉化勋章骑士荣誉之战团汉化勋章骑士美德之高贵勋章骑士美德之奉献勋章汉匈决战正版勋章

鲜花(2606) 鸡蛋(8)
发表于 2020-6-24 23:00:24 | 显示全部楼层
本帖最后由 rubik 于 2020-6-24 23:16 编辑
stevenxxy007 发表于 2020-6-24 18:21
这种最好别用递归 效率低 简单的方法有不少 我这边先说一个:记得没错的话 相同阵营的领主id都是连续的 利 ...

领主的阵营会变的。 最后,同阵营的领主通常都不是连续的。

从一个不连续的范围内取随机的问题,自带的Native的MS提供了一个方法,先是计数,把一个连续范围内符合条件的对象的个数先累加起来,比如说是A个。然后从0到A里面取一个随机数,比如是是B。最后做这个连续范围的循环,把符合条件的对象从-1开始依次累加,累加的变量到了B,就停止循环,当前循环到对象就是要找的那个随机对象。

Native里面最经典的例子就是随机消耗一种食物1点,玩家极大概率缺少某种或多种食物,这就需要用到从不连续的范围内进行随机。  先到module_simple_triggers.py,搜索 # Consuming food at every 14 hours, 下面出现的":available_food"就是累加玩家拥有的食物种类(不含腐烂的),(store_random_in_range, ":selected_food", 0, ":available_food"), 就是取随机数,(call_script, "script_consume_food", ":selected_food"),就是消耗随机到食物1点,这里要跳转到module_scripts.py里,查看script_consume_food是怎么写的。不过自带的方法,和我讲的是相反的,每找到一个符合要求的对象,那个随机数就减1,直到随机数小于0(实际值是-1)的时候停止循环。

评分

参与人数 1第纳尔 +5 收起 理由
幼稚园殺手 + 5 乐于助人!

查看全部评分

鲜花鸡蛋

幼稚园殺手  在2020-6-25 00:40  送朵鲜花  并说:我非常同意你的观点,送朵鲜花鼓励一下
rubik

57

主题

953

回帖

543

积分

子爵[版主]

Rank: 7Rank: 7Rank: 7

UID
81513
第纳尔
5138
精华
1
互助
18
荣誉
5
贡献
100
魅力
123
注册时间
2008-6-26
QQ
鲜花(103) 鸡蛋(0)
发表于 2020-6-28 08:35:52 | 显示全部楼层
本帖最后由 stevenxxy007 于 2020-6-28 08:45 编辑
rubik 发表于 2020-6-24 23:00
领主的阵营会变的。 最后,同阵营的领主通常都不是连续的。

从一个不连续的范围内取随机的问题,自带 ...
你说的对,简单的说就是先归类集中,然后范围内随机
终于出现啦你~正好有个事情要和你商量~目前我正在基于你的开源代码进行二次开发。
加了不少原创功能在其中,再过一个月吧,想发布到中文站给大家玩玩。特此需要您的
允许。
我的mod以功能性和剧情为主,没有原创的建模,模型都是中文站里模型区下载的。

您需要登录后才可以回帖 登录 | 注册(Register!)

本版积分规则

Archiver|手机版|小黑屋|骑马与砍杀中文站

GMT+8, 2024-4-28 16:38 , Processed in 0.116804 second(s), 23 queries , Gzip On, MemCached On.

Powered by Discuz! X3.4 Licensed

© 2001-2023 Discuz! Team.

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