骑马与砍杀中文站论坛

 找回密码
 注册(Register!)

QQ登录

只需一步,快速开始

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

[求助] 怎么控制变量在整数时触发

[复制链接]

10

主题

448

回帖

162

积分

见习骑士

Rank: 3

UID
1564073
第纳尔
1530
精华
0
互助
1
荣誉
2
贡献
0
魅力
0
注册时间
2013-9-22

战团正版勋章

鲜花(34) 鸡蛋(0)
发表于 2024-5-4 23:13:04 | 显示全部楼层 |阅读模式
自己搞了个击杀强化属性的战触,原本是想击杀一定数量获得对应强化,但是使用时只要超过设定数值,哪怕是小数点后的变动也会触发强化,求助帮忙做个只在整数时触发效果


(assign, ":var_0", 0),
(get_player_agent_no, ":var_1"),
(agent_get_kill_count, ":var_2", ":var_1"),
(agent_get_kill_count, ":var_3", ":var_1", 1),
(store_character_level, ":var_4", "trp_player"),
(val_add, ":var_2", ":var_3"),
(val_mul, ":var_4", 20),
(val_div, ":var_2", ":var_4"),
(try_begin),
    (eq, ":var_0", 0),
    (ge, ":var_2", 0),
    (troop_raise_attribute, "trp_player", ca_strength, ":var_2"),
    (troop_raise_attribute, "trp_player", ca_agility, ":var_2"),
(try_end),


2

主题

5

回帖

17

积分

随仆

Rank: 1

UID
3632209
第纳尔
20
精华
0
互助
3
荣誉
0
贡献
0
魅力
20
注册时间
2024-3-10
鲜花(4) 鸡蛋(0)
发表于 2024-5-5 16:52:51 | 显示全部楼层
本帖最后由 ChrisRitter 于 2024-5-8 20:22 编辑

没写过战场相关的代码,但单看楼主发的部分,计算结果是:var_0=0,var_2=(击杀数+伤亡数)/(玩家等级*20)(这里之前手残写成*4了...),这样只要击杀击伤第一个人之后 (eq, ":var_0", 0), (ge, ":var_2", 0)两个条件就都是恒成立的。
不知道楼主这段代码的触发条件是什么,杀一个人触发一次吗?如果是这样的话玩家每打死打晕一个人就会加var_2点力敏,理论上1级玩家在同一战场杀6个人就有累积0.05+0.1+0.15+0.2+0.25+0.3=1.05>1的力敏积累,就会触发力敏增加的提示,并且假设不升级,再杀3个人就会有0.35+0.4+0.45=1.2>1,再触发一次提示,再杀两个人0.5+0.55>1就有下一次增加,这样会滚雪球越来越快...

如果楼主的目的是在单个战场上每累积杀满(玩家等级*4)个敌人之后加一力敏,而不是滚雪球,那troop_raise_attribute的第二个参数设成1/(玩家等级*4)好像更合适?

评分

参与人数 1第纳尔 +10 互助 +1 收起 理由
Aomine Daiki + 10 + 1 乐于助人!

查看全部评分

鲜花鸡蛋

唐骑  在2024-5-6 23:59  送朵鲜花  并说:我非常同意你的观点,送朵鲜花鼓励一下
唐骑  在2024-5-6 23:58  送朵鲜花  并说:我非常同意你的观点,送朵鲜花鼓励一下

10

主题

448

回帖

162

积分

见习骑士

Rank: 3

UID
1564073
第纳尔
1530
精华
0
互助
1
荣誉
2
贡献
0
魅力
0
注册时间
2013-9-22

战团正版勋章

鲜花(34) 鸡蛋(0)
 楼主| 发表于 2024-5-6 23:59:48 | 显示全部楼层
ChrisRitter 发表于 2024-5-5 16:52
没写过战场相关的代码,但单看楼主发的部分,计算结果是:var_0=0,var_2=(击杀数+伤亡数)/(玩家等级*4), ...

感谢建议,我是希望可以在战场上就可以实时强化,没想过你所说的法子

10

主题

448

回帖

162

积分

见习骑士

Rank: 3

UID
1564073
第纳尔
1530
精华
0
互助
1
荣誉
2
贡献
0
魅力
0
注册时间
2013-9-22

战团正版勋章

鲜花(34) 鸡蛋(0)
 楼主| 发表于 2024-5-7 00:07:22 | 显示全部楼层
唐骑 发表于 2024-5-6 23:59
感谢建议,我是希望可以在战场上就可以实时强化,没想过你所说的法子

现在用的是 玩家击倒敌人总数/玩家等级×4 的属性提升,问题是只要条件满足属性提升大于1,就会触发

29

主题

751

回帖

574

积分

骑士

Rank: 4Rank: 4

UID
3322408
第纳尔
1748
精华
0
互助
68
荣誉
0
贡献
0
魅力
6
注册时间
2022-2-3
鲜花(57) 鸡蛋(0)
发表于 2024-5-7 00:18:50 来自手机 | 显示全部楼层
局部变量全局变量只能储存整数,从一开始就不存在什么小数也能触发之类的说法。你这里有问题是因为var2的判定是ge 0吧,两个正数相除取整不是必然大于等于0?来自: Android客户端

10

主题

448

回帖

162

积分

见习骑士

Rank: 3

UID
1564073
第纳尔
1530
精华
0
互助
1
荣誉
2
贡献
0
魅力
0
注册时间
2013-9-22

战团正版勋章

鲜花(34) 鸡蛋(0)
 楼主| 发表于 2024-5-7 15:45:18 | 显示全部楼层
112233lyh 发表于 2024-5-7 00:18
局部变量全局变量只能储存整数,从一开始就不存在什么小数也能触发之类的说法。你这里有问题是因为var2的判 ...

是我这里没表达清楚,比方说我是希望在每次击杀达到500时属性+1,这个触发器会在击杀501和502这些大于500的数字时也+1,要怎么做才能让它只在固定倍数时触发

46

主题

628

回帖

492

积分

骑士

Rank: 4Rank: 4

UID
3398051
第纳尔
1845
精华
0
互助
48
荣誉
5
贡献
10
魅力
341
注册时间
2022-8-13
鲜花(57) 鸡蛋(0)
发表于 2024-5-7 17:32:11 | 显示全部楼层
骑砍貌似就没有浮点数,应该是代码错了

46

主题

628

回帖

492

积分

骑士

Rank: 4Rank: 4

UID
3398051
第纳尔
1845
精华
0
互助
48
荣誉
5
贡献
10
魅力
341
注册时间
2022-8-13
鲜花(57) 鸡蛋(0)
发表于 2024-5-7 17:32:52 | 显示全部楼层
唐骑 发表于 2024-5-7 15:45
是我这里没表达清楚,比方说我是希望在每次击杀达到500时属性+1,这个触发器会在击杀501和502这些大于500 ...

取模,mod 倍数=0

2

主题

5

回帖

17

积分

随仆

Rank: 1

UID
3632209
第纳尔
20
精华
0
互助
3
荣誉
0
贡献
0
魅力
20
注册时间
2024-3-10
鲜花(4) 鸡蛋(0)
发表于 2024-5-8 20:19:21 | 显示全部楼层
测试了一下,楼上两位是对的。troop_raise_attribute会对第二个参数直接向下取整,并且小数部分不会累积,比如(troop_raise_attribute, "trp_player", ca_agility, 0.9),重复执行多少次都不会加敏捷;(troop_raise_attribute, "trp_player", ca_agility, 1.9),重复n次只会加n点敏捷。

维京征服的module.ini里有一行attribute_points_per_level = 0.195,游戏内也确实是每五级左右获得一个属性点。所以我之前猜测属性加点系统是支持浮点数的,但现在看来这个猜测有问题,应该只有供玩家自由分配的那种属性点是浮点数类型,具体的力敏智魅都只能是整数。(在header_troops里也有直接证据,里面为了方便modder给自己的troop写属性,写了很多诸如str_29 = bignum | 0x0000001d这样的简化记法,看等号右边可以知道属性值在系统里面确实是整数)

这么看的话击倒一个人加m/n属性的思路是行不通的, 因为m/n会被取整。不过从回复看楼主写代码的时候本来也不是这个意思......

2

主题

5

回帖

17

积分

随仆

Rank: 1

UID
3632209
第纳尔
20
精华
0
互助
3
荣誉
0
贡献
0
魅力
20
注册时间
2024-3-10
鲜花(4) 鸡蛋(0)
发表于 2024-5-8 21:18:35 | 显示全部楼层
重新看了下上面几条回复,楼主的想法是不是这样的:
假如我始终1级,那我击倒第20个人时加1点力敏,击倒第40个人时加2点力敏(总计比初始状态多了3点),以此类推。其他数字下对属性值没有任何操作。

如果想法就是这样,那就按楼上两位说的,主要是判定条件的问题:
首先我也怀疑你把ge和gt搞混了,(ge, ":var_2", 0),意思是var_2≥0触发,gt才是>0(ge: greater than or equal to, gt: greater than);
其次是在troop_raise_attribute自动取整的情况下,这个判定条件放在这里没有意义,因为var_2比1小的时候,后面几行执不执行都不会加属性。

如果直接按楼上求余为0的思路来,这样改就可以:
(点击展开 / 收起)

另外我感觉还有一个问题:
agent_get_kill_count应该是只对单场战斗计数的,毕竟是agent。也就是说假设你1级,如果你在连续三场战斗中分别击倒了6、7、7个人,应该是不会触发属性提升的。这样的话即使是野战用ctrl+f4,一场也就最多杀个几百人,人物到十几级就几乎不可能再用这个方法获得属性了,不知道这是不是楼主本来想要的。
如果想要的其实是生涯击倒数的话,可以用get_player_agent_kill_count代替agent_get_kill_count(记得把trp_player这个参数删掉),不过我自己没测试过这个击杀数量是实时更新的还是战场结算时固定更新的。

10

主题

448

回帖

162

积分

见习骑士

Rank: 3

UID
1564073
第纳尔
1530
精华
0
互助
1
荣誉
2
贡献
0
魅力
0
注册时间
2013-9-22

战团正版勋章

鲜花(34) 鸡蛋(0)
 楼主| 发表于 2024-5-11 12:11:45 | 显示全部楼层
ChrisRitter 发表于 2024-5-8 21:18
重新看了下上面几条回复,楼主的想法是不是这样的:
假如我始终1级,那我击倒第20个人时加1点力敏,击倒第4 ...

我是想要单次战斗计数,累计的话没有烈度的战斗也可以提升
您需要登录后才可以回帖 登录 | 注册(Register!)

本版积分规则

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

GMT+8, 2024-12-27 12:02 , Processed in 0.282539 second(s), 25 queries , Gzip On, MemCached On.

Powered by Discuz! X3.4 Licensed

© 2001-2023 Discuz! Team.

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