骑马与砍杀中文站论坛

 找回密码
 注册(Register!)

QQ登录

只需一步,快速开始

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

[求助] 自定义了各种 skins 后 troop_get_type 原返回值只用了0和1的问题

[复制链接]

10

主题

174

回帖

100

积分

见习骑士

Rank: 3

UID
1411320
第纳尔
670
精华
0
互助
5
荣誉
2
贡献
0
魅力
23
注册时间
2013-6-13

战团正版勋章

鲜花(9) 鸡蛋(0)
发表于 2024-7-22 02:55:19 | 显示全部楼层 |阅读模式
本帖最后由 秦雨子瀾 于 2024-8-5 18:04 编辑

如题, 自己已经成功建立 skin , 其他一切正常, 但是系统似乎没有正确判定性别, 导致与领主女儿对话没有求爱之类的选择, 竞技大会的胜利荣誉也无法送给女人. 求问这个会是哪里写错了?  怎么改呀~


———————— 更新 ————————

现在的问题是如果自定义 script 可以在不污染 regx 之类全局参数的情况,传出 return 值~

3

主题

24

回帖

8

积分

平民

Rank: 1

UID
3622284
第纳尔
15
精华
0
互助
0
荣誉
0
贡献
0
魅力
1
注册时间
2024-2-21
鲜花(3) 鸡蛋(0)
发表于 2024-7-23 10:47:17 来自手机 | 显示全部楼层
要改module_script里面的代码(还是mission_templates我忘了),找到和结婚相关的,那里有性别的判定。因为男女默认01,你要把自己的性别数值加进去(2,3等等)来自: Android客户端

10

主题

174

回帖

100

积分

见习骑士

Rank: 3

UID
1411320
第纳尔
670
精华
0
互助
5
荣誉
2
贡献
0
魅力
23
注册时间
2013-6-13

战团正版勋章

鲜花(9) 鸡蛋(0)
 楼主| 发表于 2024-7-24 03:33:50 | 显示全部楼层
夏虫不语冰 发表于 2024-7-23 10:47
要改module_script里面的代码(还是mission_templates我忘了),找到和结婚相关的,那里有性别的判定。因为 ...

courtship 之类的字段太多了没找到.. 但是我发现一个 troop_get_type 这个会返回 skins 里面的顺序~ 就是 0 man, 1 woman, 之后是自己新建的. scripts 和 mission templates 很多都是调用这个判断它等于1来认为 is_female 的, 这倒没事, 但也有地方直接用 = 0 判断是 male ...........

那有没有办法重写这个 troop_get_type 的实现呢? 比如如果它本来是2我就设置成返回0 这样就是 male 了

还有想问问这个 py 语句是怎么写呢~~
比如本来 (eq, ":gender", 0) 这个一般代码意思应该就是 if (gender == 0) 把, 那如果我要写 if (gender == 0 || gender == 2) 用 py 语句怎么写呢?

3

主题

24

回帖

8

积分

平民

Rank: 1

UID
3622284
第纳尔
15
精华
0
互助
0
荣誉
0
贡献
0
魅力
1
注册时间
2024-2-21
鲜花(3) 鸡蛋(0)
发表于 2024-7-24 10:27:51 来自手机 | 显示全部楼层
troop_get_type是改不了的,因为这个语句被声明在header_operations里面,是mod系统自带的操作语句来自: Android客户端

点评

说的什么玩意,不对  发表于 2024-8-6 09:39

评分

参与人数 1魅力 +1 收起 理由
ggfgfgf + 1 乐于助人!

查看全部评分

3

主题

24

回帖

8

积分

平民

Rank: 1

UID
3622284
第纳尔
15
精华
0
互助
0
荣誉
0
贡献
0
魅力
1
注册时间
2024-2-21
鲜花(3) 鸡蛋(0)
发表于 2024-7-24 10:30:35 来自手机 | 显示全部楼层
中文站不让我发解决方案的文字,我只能截图了(很奇怪)
20240724102959front2_0_3622284_FqwrTV23l0NHC85xZixYw9ja97oY.jpg
来自: Android客户端

鲜花鸡蛋

秦雨子瀾  在2024-7-24 15:55  送朵鲜花  并说:我非常同意你的观点,送朵鲜花鼓励一下

10

主题

174

回帖

100

积分

见习骑士

Rank: 3

UID
1411320
第纳尔
670
精华
0
互助
5
荣誉
2
贡献
0
魅力
23
注册时间
2013-6-13

战团正版勋章

鲜花(9) 鸡蛋(0)
 楼主| 发表于 2024-7-24 15:59:05 | 显示全部楼层
本帖最后由 秦雨子瀾 于 2024-7-24 16:06 编辑
夏虫不语冰 发表于 2024-7-24 10:30
中文站不让我发解决方案的文字,我只能截图了(很奇怪)

感谢!! 我回去就试试,也就是把:

(eq, ":gender", 0), #male

这一行改成:

(this_or_next|eq, ":gender", 0), #male
(eq, ":gender", 2), #male custom

这样两行是吗?




另外有没有办法改 troop_get_type 的实现捏?我看到是在 header_operations.py 里面只有这个定义


troop_get_type                           = 1506  # (troop_get_type, <destination>, <troop_id>),
                                                 # Returns troop current skin (i.e. gender).


3

主题

24

回帖

8

积分

平民

Rank: 1

UID
3622284
第纳尔
15
精华
0
互助
0
荣誉
0
贡献
0
魅力
1
注册时间
2024-2-21
鲜花(3) 鸡蛋(0)
发表于 2024-7-24 16:37:22 来自手机 | 显示全部楼层
秦雨子瀾 发表于 2024-7-24 15:59
感谢!! 我回去就试试,也就是把:

(eq, &quot;:gender&quot;, 0), #male

不是,是改成
(eq,gender,0)
(this or nexteq,gender,2)
this or next要从第二行开始写
(我简单写了)
另外troop_get_type大概率是改不了的,除非你能在某个文件里找到关于它的声明来自: Android客户端

10

主题

174

回帖

100

积分

见习骑士

Rank: 3

UID
1411320
第纳尔
670
精华
0
互助
5
荣誉
2
贡献
0
魅力
23
注册时间
2013-6-13

战团正版勋章

鲜花(9) 鸡蛋(0)
 楼主| 发表于 2024-7-24 19:38:46 | 显示全部楼层
夏虫不语冰 发表于 2024-7-24 16:37
不是,是改成
(eq,gender,0)
(this or nexteq,gender,2)

好的嘛 那还想问下,要如何写判断赋值呢?比如我想在这个 gettype 之后加一句:

if (gender == 2) {
  gender = 0;
}

这个在 py 文件里是怎么写呢?

(这个文件是用缩进来表示代码块作用域吗?)

3

主题

24

回帖

8

积分

平民

Rank: 1

UID
3622284
第纳尔
15
精华
0
互助
0
荣誉
0
贡献
0
魅力
1
注册时间
2024-2-21
鲜花(3) 鸡蛋(0)
发表于 2024-7-24 19:54:27 来自手机 | 显示全部楼层
秦雨子瀾 发表于 2024-7-24 19:38
好的嘛 那还想问下,要如何写判断赋值呢?比如我想在这个 gettype 之后加一句:

if (gender == 2) {

又发不了了,莫名其妙
20240724195420front2_0_3622284_Fm6lCryYyXvy-6yOg5Yt16UQALK0.jpg
来自: Android客户端

10

主题

174

回帖

100

积分

见习骑士

Rank: 3

UID
1411320
第纳尔
670
精华
0
互助
5
荣誉
2
贡献
0
魅力
23
注册时间
2013-6-13

战团正版勋章

鲜花(9) 鸡蛋(0)
 楼主| 发表于 2024-7-24 20:08:04 | 显示全部楼层
本帖最后由 秦雨子瀾 于 2024-7-24 21:19 编辑
夏虫不语冰 发表于 2024-7-24 19:54
又发不了了,莫名其妙

(troop_get_type, ":gender", ":troop_no"),
         
         (try_begin), #ATN - gender conditions
           (eq, ":gender", 2),
           (assign, ":gender", 0),
         (else_try),
           (eq, ":gender", 3),
           (assign, ":gender", 1),
         (else_try),
           (eq, ":gender", 4),
           (assign, ":gender", 1),
         (try_end),
         
         blablablablabla.......

是这样对吗~~
另外我突然想到,能不能自己加一个 troop_get_gender 然后手动替换原有的 troop_get_type 的调用,我自己在 troop_get_gender 里面调 gettype 之后加上这种如果2就强行赋值0的操作~
我在 module_script 里面加了如下:


  # ATN - scripts start
  
  # script_atn_fix_troop_type
  # Input: arg1 = skin type index in skins
  # Output: reg0 = fixed gender 0 male, or 1 female
  ("atn_fix_troop_type",
    [
      (store_script_param, ":skin_type", 1),
      (assign, reg0, ":skin_type"),
      (try_begin),
        (eq, ":skin_type", 2),
        (assign, reg0, 0),
      (else_try),
        (ge, ":skin_type", 3),
        (assign, reg1, 1),
      (end_try),
      (set_trigger_result, reg0),
  ]),
  
  # ATN - scripts end



然后所有调用过 troop_get_type 的地方多加两行:


         (troop_get_type, ":gender", ":troop_no"),
         
         (call_script, "script_atn_fix_troop_type", ":gender"),
         (assign, ":gender", reg0),
         
         xxxxxx.....



是不是理论上就可以了~

3

主题

24

回帖

8

积分

平民

Rank: 1

UID
3622284
第纳尔
15
精华
0
互助
0
荣誉
0
贡献
0
魅力
1
注册时间
2024-2-21
鲜花(3) 鸡蛋(0)
发表于 2024-7-26 13:58:13 来自手机 | 显示全部楼层
秦雨子瀾 发表于 2024-7-24 20:08
(troop_get_type, &quot;:gender&quot;, &quot;:troop_no&quot;),
         
         (try_begin), #ATN - gender conditions

应该是可以的,你这想法还挺有创意来自: Android客户端

10

主题

174

回帖

100

积分

见习骑士

Rank: 3

UID
1411320
第纳尔
670
精华
0
互助
5
荣誉
2
贡献
0
魅力
23
注册时间
2013-6-13

战团正版勋章

鲜花(9) 鸡蛋(0)
 楼主| 发表于 2024-7-26 17:48:24 | 显示全部楼层
本帖最后由 秦雨子瀾 于 2024-7-26 17:54 编辑
夏虫不语冰 发表于 2024-7-26 13:58
应该是可以的,你这想法还挺有创意

现在的问题是 call_script 不知道怎么输出返回值..
自定义的 script 不知道如何实现像 header 里面那种可以传出 output 而不依赖 regXX 这种已经定义了的全局变量的

自己的 script 里面我只能 assign 给全局变量,
这个全局变量就是上一句里 troop_get_type 使用的那个..
而且每个不同的变量还要定义一个不同的 script ..

然后游戏里用的很乱, 目前发现有 reg0, reg1, reg3, reg4, reg5, reg11, reg15, reg39, reg65...

这倒也罢了, 还有直接 (troop_get_type, ":is_female", "xxx), 这样的,
根本不知道怎么包到自己的 script ...


或者, 我有办法自己新增全局变量在 header  之类的头文件里吗?

3

主题

24

回帖

8

积分

平民

Rank: 1

UID
3622284
第纳尔
15
精华
0
互助
0
荣誉
0
贡献
0
魅力
1
注册时间
2024-2-21
鲜花(3) 鸡蛋(0)
发表于 2024-7-26 21:07:32 来自手机 | 显示全部楼层
秦雨子瀾 发表于 2024-7-26 17:48
现在的问题是 call_script 不知道怎么输出返回值..
自定义的 script 不知道如何实现像 header 里面那种可 ...

全局变量可以直接声明,格式是“$加名称”。但是要考虑到内存影响。另外,虽然不能直接传输,但你可以尝试一些见接的办法,比如通过索引来操作来自: Android客户端

34

主题

87

回帖

206

积分

见习骑士

Rank: 3

UID
3199602
第纳尔
1082
精华
0
互助
34
荣誉
0
贡献
1
魅力
215
注册时间
2020-9-4
鲜花(56) 鸡蛋(0)
发表于 2024-7-30 09:33:18 | 显示全部楼层
秦雨子瀾 发表于 2024-7-26 17:48
现在的问题是 call_script 不知道怎么输出返回值..
自定义的 script 不知道如何实现像 header 里面那种可 ...

(troop_get_type, ":is_female", "xxx),想变成你的troop_get_type_new,就这样:

在script.py里
  ("troop_get_type_new", [#新脚本内容
      (store_script_param_1, ":troop_no"),#从调用那里传入的数据,比如上面那个XXX。兵种。
      (troop_get_type, ":gender_no", ":troop_no"),#获取这个兵种的性别
      ………………………………
      ………………………………
      ………………………………#条件块,处理分析得到的":gender_no",归类为male和female两类,储存进":gender_no"里
      (assign, reg1, ":gender_no"),
    ]),

在原位置(call_script, "script_troop_get_type_new", "xxx"),#调用你的新脚本
             (assign, ":troop_gander", reg1),#返回性别

46

主题

603

回帖

480

积分

骑士

Rank: 4Rank: 4

UID
3398051
第纳尔
1712
精华
0
互助
47
荣誉
5
贡献
10
魅力
336
注册时间
2022-8-13
鲜花(53) 鸡蛋(0)
发表于 2024-7-30 12:04:52 | 显示全部楼层
秦雨子瀾 发表于 2024-7-24 15:59
感谢!! 我回去就试试,也就是把:

(eq, ":gender", 0), #male

mod2,(val_mod,":gender",2),这样双数为男单数为女,就是改script

10

主题

174

回帖

100

积分

见习骑士

Rank: 3

UID
1411320
第纳尔
670
精华
0
互助
5
荣誉
2
贡献
0
魅力
23
注册时间
2013-6-13

战团正版勋章

鲜花(9) 鸡蛋(0)
 楼主| 发表于 2024-8-4 16:11:06 | 显示全部楼层
奥杜因阿卡托什 发表于 2024-7-30 09:33
(troop_get_type, ":is_female", "xxx),想变成你的troop_get_type_new,就这样:

在script.py里

这样的话还需要搞 reg1 这个全局参数,有可能其他地方也有在用的就被影响了呀~~我之前试了一下用 regx 会出奇怪的问题。。

10

主题

174

回帖

100

积分

见习骑士

Rank: 3

UID
1411320
第纳尔
670
精华
0
互助
5
荣誉
2
贡献
0
魅力
23
注册时间
2013-6-13

战团正版勋章

鲜花(9) 鸡蛋(0)
 楼主| 发表于 2024-8-4 16:12:16 | 显示全部楼层
本帖最后由 秦雨子瀾 于 2024-8-4 16:13 编辑
ggfgfgf 发表于 2024-7-30 12:04
mod2,(val_mod,":gender",2),这样双数为男单数为女,就是改script

这个理解,其实判断语句好写,只要我都写在一个 script 里就算要改实现,也只需要改一处即可~ 现在问题就是不知道怎么传出参数..

我现在写的是,它用了 reg几 我就定义了几个 script 。。。 很恶心。。并且外界如果没有使用全局这个 regx 我就没辙了。。只能单独再写

34

主题

87

回帖

206

积分

见习骑士

Rank: 3

UID
3199602
第纳尔
1082
精华
0
互助
34
荣誉
0
贡献
1
魅力
215
注册时间
2020-9-4
鲜花(56) 鸡蛋(0)
发表于 2024-8-4 23:36:46 | 显示全部楼层
秦雨子瀾 发表于 2024-8-4 16:11
这样的话还需要搞 reg1 这个全局参数,有可能其他地方也有在用的就被影响了呀~~我之前试了一下用 regx  ...

立即用完立即转存进其他地方就没有问题,这游戏单线程的,只要你不作死用它们保存信息,就没问题。你自己看native的脚本,全都是这么用的。

46

主题

603

回帖

480

积分

骑士

Rank: 4Rank: 4

UID
3398051
第纳尔
1712
精华
0
互助
47
荣誉
5
贡献
10
魅力
336
注册时间
2022-8-13
鲜花(53) 鸡蛋(0)
发表于 2024-8-5 11:33:27 | 显示全部楼层
秦雨子瀾 发表于 2024-8-4 16:12
这个理解,其实判断语句好写,只要我都写在一个 script 里就算要改实现,也只需要改一处即可~ 现在问题就 ...

script有返回参数
你看调用这个script的部分,是设置reg0,然后根据reg0改变文本,像这样{reg0:男/女},dialog里面,自己看代码

10

主题

174

回帖

100

积分

见习骑士

Rank: 3

UID
1411320
第纳尔
670
精华
0
互助
5
荣誉
2
贡献
0
魅力
23
注册时间
2013-6-13

战团正版勋章

鲜花(9) 鸡蛋(0)
 楼主| 发表于 2024-8-5 17:55:29 | 显示全部楼层
ggfgfgf 发表于 2024-8-5 11:33
script有返回参数
你看调用这个script的部分,是设置reg0,然后根据reg0改变文本,像这样{reg0:男/女},di ...

嗯嗯是这样,问题就是实际使用处的参数用的很杂。。。光reg就用了将近20种,还有其他的 “:is_female" 这样的临时变量。。

10

主题

174

回帖

100

积分

见习骑士

Rank: 3

UID
1411320
第纳尔
670
精华
0
互助
5
荣誉
2
贡献
0
魅力
23
注册时间
2013-6-13

战团正版勋章

鲜花(9) 鸡蛋(0)
 楼主| 发表于 2024-8-5 18:02:23 | 显示全部楼层
奥杜因阿卡托什 发表于 2024-8-4 23:36
立即用完立即转存进其他地方就没有问题,这游戏单线程的,只要你不作死用它们保存信息,就没问题。你自己 ...

嗯嗯理解,假设我定义 troop_get_type_new_use_reg1 里面用 reg1 处理这个gender
但是会有这种情况比如在原本的一段script中:


1.使用reg1
2.get_skin_type reg5
3。使用reg1干别的事

这种情况如果我在 2.get_skin_type 后面使用自己的 troop_get_type_new_use_reg1 赋值了 reg1 就当然会出问题~ 所以至少还需要一个比如 troop_get_type_new_use_reg5 这样。。

如果只有一两处还好,但是上百处挨个我都要看上面有没有使用 reg1 ,如果是使用了 reg1 就用 troop_get_type_new_use_reg5,如果 reg1 reg5 都用了我就要再定义一个 troop_get_type_new_use_regxxx 之类。。

虽然能解决,但是总感觉不太聪明的亚子。。有没有更漂亮的思路呢?

46

主题

603

回帖

480

积分

骑士

Rank: 4Rank: 4

UID
3398051
第纳尔
1712
精华
0
互助
47
荣誉
5
贡献
10
魅力
336
注册时间
2022-8-13
鲜花(53) 鸡蛋(0)
发表于 2024-8-5 18:16:13 | 显示全部楼层
秦雨子瀾 发表于 2024-8-5 18:02
嗯嗯理解,假设我定义 troop_get_type_new_use_reg1 里面用 reg1 处理这个gender
但是会有这种情况比如在 ...



有一部分是这样的,很麻烦,只能一处处改,没有好办法

29

主题

711

回帖

557

积分

骑士

Rank: 4Rank: 4

UID
3322408
第纳尔
1738
精华
0
互助
67
荣誉
0
贡献
0
魅力
4
注册时间
2022-2-3
鲜花(55) 鸡蛋(0)
发表于 2024-8-6 07:26:20 来自手机 | 显示全部楼层
秦雨子瀾 发表于 2024-8-5 18:02
嗯嗯理解,假设我定义 troop_get_type_new_use_reg1 里面用 reg1 处理这个gender
但是会有这种情况比如在 ...

把心放肚子里吧,没有这种事。任何一个脑子正常人的人写的代码,reg都是能不用就不用,而且用完紧接着就转存到自己定义的变量里去了。你call脚本的时候多长个心眼,别塞人家挨着的两行之间不就行了?说到底你随便找个Native的脚本,看看它怎么用的,就不会这样自己想东想西了。来自: Android客户端

34

主题

87

回帖

206

积分

见习骑士

Rank: 3

UID
3199602
第纳尔
1082
精华
0
互助
34
荣誉
0
贡献
1
魅力
215
注册时间
2020-9-4
鲜花(56) 鸡蛋(0)
发表于 2024-8-6 08:43:04 | 显示全部楼层
秦雨子瀾 发表于 2024-8-5 18:02
嗯嗯理解,假设我定义 troop_get_type_new_use_reg1 里面用 reg1 处理这个gender
但是会有这种情况比如在 ...

这游戏需要用reg的基本上就三个地方。一个就是这种从脚本return的,二是打字的时候想放数字进去只能用reg,三是有些地方比如物品触发器里不能新定义全局变量,只能用reg。你多看看就不会焦虑这种事情了,要是发现了乱用reg的情况你一飞机飞到火鸡去把夫妻档碎尸万断就行。

点评

这样吗,才知道物品触发器不能定义全局变量  发表于 2024-8-6 09:42

10

主题

174

回帖

100

积分

见习骑士

Rank: 3

UID
1411320
第纳尔
670
精华
0
互助
5
荣誉
2
贡献
0
魅力
23
注册时间
2013-6-13

战团正版勋章

鲜花(9) 鸡蛋(0)
 楼主| 发表于 2024-8-6 18:54:24 | 显示全部楼层
奥杜因阿卡托什 发表于 2024-8-6 08:43
这游戏需要用reg的基本上就三个地方。一个就是这种从脚本return的,二是打字的时候想放数字进去只能用reg ...

好的 我努力适应~~ 谢谢大佬解惑~~~~

10

主题

174

回帖

100

积分

见习骑士

Rank: 3

UID
1411320
第纳尔
670
精华
0
互助
5
荣誉
2
贡献
0
魅力
23
注册时间
2013-6-13

战团正版勋章

鲜花(9) 鸡蛋(0)
 楼主| 发表于 2024-8-6 18:55:10 | 显示全部楼层
112233lyh 发表于 2024-8-6 07:26
把心放肚子里吧,没有这种事。任何一个脑子正常人的人写的代码,reg都是能不用就不用,而且用完紧接着就 ...

嗯嗯,,好的, 就是每个地方使用的时候都要check一下临近代码了
您需要登录后才可以回帖 登录 | 注册(Register!)

本版积分规则

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

GMT+8, 2024-9-8 07:24 , Processed in 0.208596 second(s), 30 queries , Gzip On, MemCached On.

Powered by Discuz! X3.4 Licensed

© 2001-2023 Discuz! Team.

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