骑马与砍杀中文站论坛

 找回密码
 注册(Register!)

QQ登录

只需一步,快速开始

搜索
购买霸主CDKEY 购买战帆CDKEY
查看: 809|回复: 6

[求助] 如何实现动态调用script?

[复制链接]

2

主题

7

回帖

3

积分

平民

Rank: 1

UID
3557335
第纳尔
3
精华
0
互助
0
荣誉
0
贡献
0
魅力
0
注册时间
2023-8-31
鲜花(0) 鸡蛋(0)
发表于 2026-8-12 18:14:28 | 显示全部楼层 |阅读模式
如果想实现一个通用的二次确认game_menu,我原本的想法是
第一次调用(call_script,功能script,参数,"$need_reconfirm"),
然后功能区接收,通过判断$need_reconfirm跳转到通用二次确认菜单
(store_script_param_2,":reconfirm"),
(eq,":reconfirm",1),
(jump_to_menu,"mnu_general_reconfirm"),
同时通过全局变量把参数带过去。
最后在二次确认的菜单
(call_script,功能script,带去的全局变量,0),
但有个问题是,如果想实现通用的二次确认,功能script似乎不得不变化,除非功能script也是通用的,但这不太现实
我原本想在每个功能script都定义全局变量(assign,"$reconfirm_script_id",<script_id>),
但call_script似乎不接受除ID_scripts.py里定义的索引以外的变量,而通过索引指定又难以维护。

借用deepseek老师的智慧只能到此为止,我好像有点没招了,希望有路过的大神能指点一下

17

主题

141

回帖

207

积分

见习骑士

Rank: 3

UID
3304622
第纳尔
685
精华
0
互助
26
荣誉
3
贡献
0
魅力
175
注册时间
2021-12-28
鲜花(32) 鸡蛋(0)
发表于 2026-8-13 12:02:37 | 显示全部楼层
你这写的啥,"$need_reconfirm" 全局变量为什么要传呢?直接script函数里面调用即可。

30

主题

276

回帖

297

积分

见习骑士

Rank: 3

UID
3225805
第纳尔
1439
精华
0
互助
41
荣誉
0
贡献
0
魅力
300
注册时间
2021-3-14

元老骑士勋章

鲜花(53) 鸡蛋(0)
发表于 2026-8-13 18:49:19 | 显示全部楼层
没看明白你说的啥 script调用全局变量  只要这个变量不变 那多个地方多次调用就都是一样的呗

2

主题

7

回帖

3

积分

平民

Rank: 1

UID
3557335
第纳尔
3
精华
0
互助
0
荣誉
0
贡献
0
魅力
0
注册时间
2023-8-31
鲜花(0) 鸡蛋(0)
 楼主| 发表于 2026-8-15 19:07:49 | 显示全部楼层
本帖最后由 hacikaya 于 2026-8-15 19:25 编辑
杰喵喵 发表于 2026-8-13 12:02
你这写的啥,"$need_reconfirm" 全局变量为什么要传呢?直接script函数里面调用即可。 ...

大致上我原先的想法是
功能区的每个菜单相关script都通过额外的一个参数判断是否需要再次确认,如果需要就跳入二次确认菜单,不需要就直接执行功能,$need_reconfirm只是这个判断用的参数

菜单第一次call_script时传入功能script本身需要的参数以及额外的判断参数$need_reconfirm


把全局变量传过去的意思是,因为我想做一个通用的二次确认菜单,比方菜单里同时有加钱和给把剑的选项,我想要点击哪个选项都能跳出二次确认,而我又不想每个二次确认都手动指定是加钱还是给把剑,所以我需要一个通用的二次确认菜单,如果是第一次点——跳转二次确认——二次确认点击——执行的构造,在二次确认这一步每个需要调用的script所需参数都不同,甚至每个需要调用的script都不同,所以需要用全局变量在跳转二次确认这一步把需要的参数传递到最终执行,虽然有功能script所需参数数量不固定的问题,不过最大的问题还是最终执行时无法通过全局变量确定需要调用哪个script

2

主题

7

回帖

3

积分

平民

Rank: 1

UID
3557335
第纳尔
3
精华
0
互助
0
荣誉
0
贡献
0
魅力
0
注册时间
2023-8-31
鲜花(0) 鸡蛋(0)
 楼主| 发表于 2026-8-15 19:31:35 | 显示全部楼层
本帖最后由 hacikaya 于 2026-8-15 19:35 编辑
快乐风猫 发表于 2026-8-13 18:49
没看明白你说的啥 script调用全局变量  只要这个变量不变 那多个地方多次调用就都是一样的呗 ...

大致上我原先的想法是
功能区的每个菜单相关script都通过额外的一个参数判断是否需要再次确认,如果需要就跳入二次确认菜单,不需要就直接执行功能,$need_reconfirm只是这个判断用的参数

菜单第一次call_script时传入功能script本身需要的参数以及额外的判断参数$need_reconfirm


把全局变量传过去的意思是,因为我想做一个通用的二次确认菜单,比方菜单里同时有加钱和给把剑的选项,我想要点击哪个选项都能跳出二次确认,而我又不想每个二次确认都手动指定是加钱还是给把剑,所以我需要一个通用的二次确认菜单,如果是第一次点——跳转二次确认——二次确认点击——执行的构造,在二次确认这一步每个需要调用的script所需参数都不同,甚至每个需要调用的script都不同,所以需要用全局变量在跳转二次确认这一步把需要的参数传递到最终执行,虽然有功能script所需参数数量不固定的问题,不过最大的问题还是最终执行时无法通过全局变量确定需要调用哪个script
我现在抛弃了这种在通用二次确认菜单确定需要调用哪个script的想法,现在我以类似状态机的结构,指定每一个菜单对应的常量,通过全局状态变量,如果需要二次确认就不更新状态直接call状态机,也算达到了通用二次确认的效果

2

主题

7

回帖

3

积分

平民

Rank: 1

UID
3557335
第纳尔
3
精华
0
互助
0
荣誉
0
贡献
0
魅力
0
注册时间
2023-8-31
鲜花(0) 鸡蛋(0)
 楼主| 发表于 2026-8-15 20:02:30 | 显示全部楼层
本帖最后由 hacikaya 于 2026-8-15 20:03 编辑

我原先的代码大致上类似于

菜单:
("给我把剑选项",0,"给我把剑。","none",[
(call_script,"给我把剑脚本","剑的id",$need_reconfirm),       #使用$need_reconfirm是为了可以实现 设置-是否开启二次确认 这种效果
]),

("给我加钱选项",……
(call_script,"给我加钱脚本","数量",$need_reconfirm),]),

("二次确认菜单"……
[(”确认“),
[(call_script,"全局变量1","全局变量2",0),]]
,[(”取消“),]),
功能:
("给我把剑/给我加钱“,[
获取参数1,2
if 参数2是0,直接给剑,否则
(assign,"全局变量1","参数1"),
(assign,"全局变量2","给我把剑脚本/给我加钱脚本"),
(jump_to_menu,"二次确认菜单"),]),
现在我认为这个思路是行不通,主要在于需要几个参数无法确定,call_script的script_id参数也不支持全局变量
现在我大致上是这样子的
("给我加钱选项",……
(assign,"$菜单状态",加钱状态常量),
(call_script,"菜单状态机"),
菜单状态机里相关功能:
(eq,"$菜单状态",加钱状态常量),
   (try_begin),(eq,"$开启二次确认",关),
   (加钱),
   (else_try),(try_begin),
      (eq,"$已经确认过了",没),
      (jump_to_menu,"二次确认"),
      (else_try),
      (加钱), (assign,"$已经确认过了",没),
      (try_end),(try_end),
二次确认菜单
     ("确认",[
     (assign,"$已经确认过了",有),
     ((call_script,"菜单状态机"),),
    ])

30

主题

276

回帖

297

积分

见习骑士

Rank: 3

UID
3225805
第纳尔
1439
精华
0
互助
41
荣誉
0
贡献
0
魅力
300
注册时间
2021-3-14

元老骑士勋章

鲜花(53) 鸡蛋(0)
发表于 2026-8-17 14:28:09 | 显示全部楼层
hacikaya 发表于 2026-8-15 20:02
我原先的代码大致上类似于

菜单:

你用几个$temp在菜单里临时赋值取值啊
您需要登录后才可以回帖 登录 | 注册(Register!)

本版积分规则

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

GMT+8, 2026-11-4 14:05 , Processed in 0.104861 second(s), 22 queries , Gzip On, MemCached On.

Powered by Discuz! X3.4 Licensed

© 2001-2023 Discuz! Team.

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