lghdtc 发表于 2018-11-27 21:42:35

更强的物品合成触发

不知道现在WE的UI发展到什么程度了,我这个偶然想到的方案会不会已经毫无意义了

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


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

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


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


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



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

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

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

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

主触发,贴一下吧

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


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


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



附件1是演示图

附件2是UI(很久了吧,随便拿了一个老物用了)


ck5524210 发表于 2018-12-6 15:18:10

以前有个读取颜色代码做的合成更好用

doudou0410 发表于 2021-1-7 01:33:25

萌新顶一下.............................................

月城明 发表于 2023-1-9 19:39:05

萌新顶一下.............................................
页: [1]
查看完整版本: 更强的物品合成触发