佳丽云

英雄无敌3-WoG中文站

 找回密码
 英雄注册|Register
查看: 2484|回复: 3

[经验交流]在DL触发器中重新 分析打开 本DL模板的方法

[复制链接]
  • TA的每日心情
    开心
    2 小时前
  • 签到天数: 205 天

    连续签到: 13 天

    [LV.7]血污怪

    244

    回帖

    1万

    金币

    3

    精华

    论坛嘉宾

    Rank: 9Rank: 9Rank: 9

    积分
    4777

    退役版主

    发表于 2014-1-21 19:27:41 | 显示全部楼层 |阅读模式
    主要用途:在复杂DL内,只需要定义一个DL会话项目定义/更新主体函数,在DL触发器导致的会话项目发生大量变动时,只需要重新
    运行该主体函数,不需要重新定义计算。举例如下:
    错误的方法:

    ZVSE
    !!FU645:P;
    !?FU645;
    !!DL645:N^645.txt^;  分析模板
    **会话项目定义**
    .
    .
    .
    !!DL645:S1;  显示DL对话框
    !!FU:E;
    !?DL&v998=645/v999=123/v1000=13;  左键点击ID123的会话时
    **各种子触发、各种运算**
    .
    .
    .
    !!DL645:C1;  关闭DL645
    !!FU645:P;   重新打开DL645
    !!FU:E;


    这样的调用是错误的,原因是,在DL触发器中无法重新分析本DL模板,无法调用本DL显示。
    为了实现重新调用,想了很久,比如重新增加一个相同的DL646互相调用,但都是没想通。
    突然想到,为什么执着于再打开呢。。我可以想办法让DL一直反复打开,不需要时关闭就行了。
    于是,方案如下:
    ZVSE
    !!DO645/0/0/0:P;   使用循环函数,保证每次加载DL模板时都处于释放状态,x16作为控制开头,可通过改变x16控制DL开头
    !?FU645;
    !!DL645:N^645.txt^;  分析模板
    **会话项目定义**
    .
    .
    .
    !!VRv16:S0;   DL开关
    !!DL645:S1;  显示DL对话框
    !!VRx16:Sv16;  循环条件判定
    !!FU:E;
    !?DL&v998=645/v999=123/v1000=13;  左键点击ID123的会话时
    **各种子触发、各种运算**
    .
    .
    .
    !!DL645:C1;  关闭DL645,会自动重新分析模板,重新计算,重新打开
    **如果真的想关闭DL645**
    !?DL&v998=645/v999=321/v1000=13;  左键点击ID321的会话时
    !!VRv16:S1;
    !!DL645:C1;  关闭DL645,这次真的关了
    !!FU:E;

    评分

    1

    查看全部评分

  • TA的每日心情
    郁闷
    2015-6-6 16:12
  • 签到天数: 52 天

    连续签到: 1 天

    [LV.5]女巫

    4949

    回帖

    3万

    金币

    35

    精华

    超级版主

    Rank: 11Rank: 11Rank: 11Rank: 11

    积分
    34677

    论坛守望者论坛元老杰出贡献

    发表于 2014-1-22 08:29:35 | 显示全部楼层
    好像没看懂主要用途.
    在DL对话框调用自己,这个怎么理解?
    同时显示多个"相同ID的DL对话框"吗?
    按理一般情况不需要显示多个自身对话框吧.

    如果让对话框内容更改,实则是不需要重新关闭和加载对话框的.直接DL:A项目就可以更新显示了.

    点评

    其实我还有另外一个方案 就是在每个可能激活DL的地方加入DL:N分析模板 而函数F只负责计算和变更。 要不就是加一个外函数如 !?647; !!DL645:N^645.txt^; !!FU645:P 每次调用FU647 但考虑还是存在很多问题,  详情 回复 发表于 2014-1-22 21:18
    比如说我的DL645有上百个ID元素,我把最常用的ID状态直接写入DL模版,来减少程序量。 而DL绝大多状态是根据十几个变量计算得来的。 我先写一个函数,用来定义这十几个变量和ID元素的对应关系,姑且叫这个函数为F。  详情 回复 发表于 2014-1-22 20:27
  • TA的每日心情
    开心
    2 小时前
  • 签到天数: 205 天

    连续签到: 13 天

    [LV.7]血污怪

    244

    回帖

    1万

    金币

    3

    精华

    论坛嘉宾

    Rank: 9Rank: 9Rank: 9

    积分
    4777

    退役版主

     楼主| 发表于 2014-1-22 20:27:32 | 显示全部楼层
    贤知有您 发表于 2014-1-22 08:29
    好像没看懂主要用途.
    在DL对话框调用自己,这个怎么理解?
    同时显示多个"相同ID的DL对话框"吗?

    比如说我的DL645有上百个ID元素,我把最常用的ID状态直接写入DL模版,来减少程序量。
    而DL绝大多状态是根据十几个变量计算得来的。
    我先写一个函数,用来定义这十几个变量和ID元素的对应关系,姑且叫这个函数为F。
    然后打开DL645.
    再然后就是通过!?DL触发器,触发的一系统操作改变这十几个变量。
    这时,当然可以通过DL:A进行DL修正。
    这里存在3个考虑:
    1是这些算法我在函数F已经定义了。。存在重复。。当然你也可以采用多个分块函数。。
    2是如果可变动的状态实在太多,每个都单独定义太麻烦,而且容易漏条件。
    3是如果存在多次定义,如果以后要改东西,很容易漏掉个别模块,我认为,同一个功能越少重复相关模块越好,最好是一对一。
    所以,我的方法是,只要变量改变结束,重新运行函数F,所有ID元素就能重新定义了。
    但是这里有个问题,变量改变是DL触发器中改变的,这时是不能重新分析DL模版的,即使你用DL:C关闭掉也不行,除非触发器完全结束,也就是我原贴中的错误方案。
    为保证DL触发器结束后,DL能继续被触发(重新分析打开),我才想出这个方法。
    我已经测试可用了。不存在逻辑问题和反复调用的死循环。
  • TA的每日心情
    开心
    2 小时前
  • 签到天数: 205 天

    连续签到: 13 天

    [LV.7]血污怪

    244

    回帖

    1万

    金币

    3

    精华

    论坛嘉宾

    Rank: 9Rank: 9Rank: 9

    积分
    4777

    退役版主

     楼主| 发表于 2014-1-22 21:18:00 | 显示全部楼层
    贤知有您 发表于 2014-1-22 08:29
    好像没看懂主要用途.
    在DL对话框调用自己,这个怎么理解?
    同时显示多个"相同ID的DL对话框"吗?

    其实我还有另外一个方案
    就是在每个可能激活DL的地方加入DL:N分析模板
    而函数F只负责计算和变更。
    要不就是加一个外函数如
    !?647;
    !!DL645:N^645.txt^;
    !!FU645:P
    每次调用FU647
    但考虑还是存在很多问题,并且没有在触发器中重复打开DL功能。
    最主要,还是不符合我的习惯。。呵呵。
    ahome_bigavatar:guest
    ahome_bigavatar:welcomelogin
    您需要登录后才可以回帖 登录 | 英雄注册|Register

    本版积分规则

    捐赠
    关注我们,英3Mod一网打尽!

    WoG中文站 ( 辽B2-20210485-10 )|辽公网安备 21128202000228 号

    GMT+8, 2024-11-15 12:18 , Processed in 1.344993 second(s), 14 queries , Gzip On, File On.

    Powered by Discuz! X3.4

    Copyright © 2004-2022, Beijing Second Sight Technology Co., LTD.

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