请选择 进入手机版 | 继续访问电脑版

GA地精研究院

 找回密码
 立即注册
查看: 66|回复: 1

[教程] 更强的物品合成触发

[复制链接]
发表于 2018-11-27 21:42:35 | 显示全部楼层 |阅读模式
不知道现在WE的UI发展到什么程度了,我这个偶然想到的方案会不会已经毫无意义了

移植比较方便吧,如果新人可以直接拿去用,目前支持99个基础物品和8000个合成物品。呃,其实,基础物品可以扩展到999个(录入的工作量加大一点,多一条动作)甚至9999999(7个9)那么多(多5条动作)


用一个初始化触发声明配件清单,然后声明合成物品的清单,登记3个整数变量(每个合成物品)。然后就行了

其实如果WE支持精确的12位整数变量的话,还能少登记一个变量。然而最多精确到7位,只好拆成左右两个6位的整数凑合用一下。


像这样:
[trigger]对战初始化
    事件
        地图初始化
    条件
    动作
        设置 Item[1] = 敏捷便鞋  +3
        设置 Item[2] = 食人鬼手套 +3
        设置 Item[3] = 智力斗篷 +3
        设置 Item[4] = 贵族圆环
        设置 Item[5] = 速度之靴
        设置 Item[6] = 死亡面罩
        设置 Item[7] = 辉煌之靴
             ★     辉煌鞋000504030201     ★     
        设置 Item_C[33] = 辉煌之靴
        设置 code_r[33] = 30201
        设置 code_l[33] = 504
        设置 code_A[33] = 5
             ★      昏暗鞋070604030201     ★     
        设置 Item_C[55] = 昏暗之靴
        设置 code_r[55] = 30201
        设置 code_l[55] = 70604
        设置 code_A[55] = 6
[/trigger]

然后主触发直接复制粘贴就行了,修改也很方便,只要改动初始化的那个触发就行,主触发不需要动
如果要扩展功能,比如书本合成、雇佣兵合成、其他黑科技的话,也可以在此基础上很容易扩展出来



以下是吹牛(事实)的内容
1--便于移植,15个变量,4个触发器,体量很小,移植的时候不需要对运算部分做任何改动

2--便于使用,新增物品时无需在触发内做物品关联方面的任何条件或者循环动作,只需要在初始化的时候设置一个物品类型,登记三个整数变量即可

3--没有延迟,触发运算过程全是整型变量的计算,不涉及物品类型的判断与循环

4--便于修改升级。增减物品无需修改主触发,方便调试。多个参数可以调用,从而扩展功能(升级卷轴/物品书本化/雇佣兵化)

主触发,贴一下吧

[trigger]get
    事件
        单位 - 任意单位 获得物品
    条件
    动作
        设置 UNIT = (触发单位)
        设置 TC = 0
        设置 TC_A = 0
        For循环整数A从 1 到 6, 做动作
            Loop - 动作
                设置 J[循环整数A [R]] = 0
                设置 K[循环整数A [R]] = 0
                设置 N[循环整数A [R]] = 0
                设置 ol[循环整数A [R]] = 0
                设置 CT[循环整数A [R]] = 0
                设置 M[循环整数A [R]] = 0
        For循环整数A从 1 到 6, 做动作
            Loop - 动作
                设置 output[循环整数A [R]] = 0
                For循环整数B从 1 到 99, 做动作
                    Loop - 动作
                        如果所有条件成立则做动作1,否则做动作2
                            If - 条件
                                所有条件成立
                                    条件
                                        (((触发单位) 物品栏第 循环整数A [R] 格的物品) 的类型) 等于 Item[循环整数B [R]]
                                        ((触发单位) 物品栏第 循环整数A [R] 格的物品) 不等于 没有物品
                            Then - 动作
                                设置 output[循环整数A [R]] = 循环整数B [R]
                            Else - 动作
        触发器 - 运行 seprate <预设> (无视条件)
[/trigger]

[trigger]seprate
    事件
    条件
    动作
        For循环整数A从 1 到 66, 做动作
            Loop - 动作
                设置 TC = 循环整数A [R]
                设置 TC_A = code_A[循环整数A [R]]
                设置 M[1] = (code_r[循环整数A [R]] mod 100)
                设置 M[2] = ((code_r[循环整数A [R]] - M[1]) mod 10000)
                设置 M[2] = (M[2] / 100)
                设置 M[3] = (((code_r[循环整数A [R]] - (M[2] x 100)) - M[1]) mod 1000000)
                设置 M[3] = (M[3] / 10000)
                设置 M[4] = (code_l[循环整数A [R]] mod 100)
                设置 M[5] = ((code_l[循环整数A [R]] - M[4]) mod 10000)
                设置 M[5] = (M[5] / 100)
                设置 M[6] = (((code_l[循环整数A [R]] - (M[5] x 100)) - M[4]) mod 1000000)
                设置 M[6] = (M[6] / 10000)
                设置 K[0] = 1
                For循环整数B从 1 到 6, 做动作
                    Loop - 动作
                        设置 ol[循环整数B [R]] = output[循环整数B [R]]
                        设置 N[循环整数B [R]] = 0
                For循环整数B从 1 到 TC_A, 做动作
                    Loop - 动作
                        设置 K[循环整数B [R]] = 0
                        如果所有条件成立则做动作1,否则做动作2
                            If - 条件
                                M[循环整数B [R]] 等于 ol[1]
                            Then - 动作
                                设置 K[循环整数B [R]] = 1
                                设置 CT[循环整数B [R]] = M[循环整数B [R]]
                                设置 ol[1] = 0
                                设置 N[1] = 1
                            Else - 动作
                                如果所有条件成立则做动作1,否则做动作2
                                    If - 条件
                                        M[循环整数B [R]] 等于 ol[2]
                                    Then - 动作
                                        设置 K[循环整数B [R]] = 1
                                        设置 CT[循环整数B [R]] = M[循环整数B [R]]
                                        设置 ol[2] = 0
                                        设置 N[2] = 1
                                    Else - 动作
                                        如果所有条件成立则做动作1,否则做动作2
                                            If - 条件
                                                M[循环整数B [R]] 等于 ol[3]
                                            Then - 动作
                                                设置 K[循环整数B [R]] = 1
                                                设置 CT[循环整数B [R]] = M[循环整数B [R]]
                                                设置 ol[3] = 0
                                                设置 N[3] = 1
                                            Else - 动作
                                                如果所有条件成立则做动作1,否则做动作2
                                                    If - 条件
                                                        M[循环整数B [R]] 等于 ol[4]
                                                    Then - 动作
                                                        设置 K[循环整数B [R]] = 1
                                                        设置 CT[循环整数B [R]] = M[循环整数B [R]]
                                                        设置 ol[4] = 0
                                                        设置 N[4] = 1
                                                    Else - 动作
                                                        如果所有条件成立则做动作1,否则做动作2
                                                            If - 条件
                                                                M[循环整数B [R]] 等于 ol[5]
                                                            Then - 动作
                                                                设置 K[循环整数B [R]] = 1
                                                                设置 CT[循环整数B [R]] = M[循环整数B [R]]
                                                                设置 ol[5] = 0
                                                                设置 N[5] = 1
                                                            Else - 动作
                                                                如果所有条件成立则做动作1,否则做动作2
                                                                    If - 条件
                                                                        M[循环整数B [R]] 等于 ol[6]
                                                                    Then - 动作
                                                                        设置 K[循环整数B [R]] = 1
                                                                        设置 CT[循环整数B [R]] = M[循环整数B [R]]
                                                                        设置 ol[6] = 0
                                                                        设置 N[6] = 1
                                                                    Else - 动作
                        设置 K[0] = (K[0] x K[循环整数B [R]])
                如果所有条件成立则做动作1,否则做动作2
                    If - 条件
                        所有条件成立
                            条件
                                K[0] 等于 1
                                TC_A 不等于 0
                    Then - 动作
                        For循环整数B从 1 到 6, 做动作
                            Loop - 动作
                                游戏 - 显示Debug信息: ((N + (转换 循环整数B [R] 为字符串)) + ( =  + (转换 N[循环整数B [R]] 为字符串)))
                        游戏 - 显示Debug信息: ((TC + <空字符串>) + ( =  + (转换 TC 为字符串)))
                             ★     以上几个用于测试的动作,返回部分变量参数供参考,可以删除     ★     
                        触发器 - 运行 operate <预设> (无视条件)
                        跳过剩余动作
                    Else - 动作
[/trigger]

[trigger]operate
    事件
    条件
    动作
        For循环整数A从 1 到 6, 做动作
            Loop - 动作
                如果所有条件成立则做动作1,否则做动作2
                    If - 条件
                        N[循环整数A [R]] 等于 1
                    Then - 动作
                        物品 - 删除 (UNIT 物品栏第 循环整数A [R] 格的物品)
                    Else - 动作
        设置 Item_T = (新建 Item_C[TC] 在((UNIT 所在X轴坐标),(UNIT 所在Y轴坐标)))
        游戏 - 对 (UNIT 的所有者) 在屏幕位移(0.00,0.00)处显示文本: ((Item_T 的名字) +  合成成功)
        英雄 - 给予 UNIT Item_T
[/trigger]


附件1是演示图
物品合成-1126.w3x (24.5 KB, 下载次数: 1)
发表于 2018-12-6 15:18:10 | 显示全部楼层
以前有个读取颜色代码做的合成更好用
回复 支持 反对

使用道具 举报

*滑动验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|移动端|小黑屋|地精研究院

GMT+8, 2018-12-16 03:08 , Processed in 0.084076 second(s), 8 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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