找回密码
 点一下
查看: 1179|回复: 10

同样的触发,单机模式运行正常,局域网下运行不正常[已附上相关触发]

[复制链接]
发表于 2009-7-14 13:39:34 | 显示全部楼层 |阅读模式
作图这么久了,第一次遇到这么挫折和莫名的情况

简单来说,就是同样的地图,同样的代码
在单机模式下,全部触发运行正常;
在局域网模式下,个别触发就运行不正常;

稍微具体一点,比如说,M触发:对一个A单位组(预设)进行XX操作,每隔B秒一次。并且传回运行讯息。

单机模式下,或者编辑器测试模式下,运行正常,每隔B秒也会收到DEBUG讯息;

局域网模式下的话,就可能有2种情况:
1.会收到触发运行反馈,知道M运行了;但是单位组内没有反馈,也就是说组动作没有运行成功,应该是A单位组无单位;
2.开始运行正常,反馈显示M运行,显示目前被操作单位的名称;但不久后,就和情况1一样,触发运行,但A单位组根本没被操作;

接下来,更费解的是,情况1下,用测试命令显示A单位组内单位数量,是0。
情况2下,先不是0,后来运行不正常,就是0 。

就像A单位组被随机清空了。

但还不是最奇怪了。我用专门的命令,中途清空A单位组,再灌入A单位组单位,然后马上再显示A单位组单位,还是0 !!

以上这些情况,却在单人模式不会发生

我已经通过物体管理器查看多次了,触发里只用到选取A单位组,并没有任何写入命令。

实在太诡异了!我不停的测试,要疯掉了。

一摸一样的代码,而且又不复杂,在单机里运行正常;但在局域网模式下,虽然也是单人,但是个别触发这次能运行,下次不一定。

请各位高手给点意见,这是怎么回事?

[已解决]另外,附问,一个小问题,地图上放置了一些中立生物和建筑,但是编辑器上明明有,到游戏里,有个别几个就一直没出现。
这也是我作图来,第一次看见的情况。小地图,绝对单位不多。其他都是JASS和T生成。

谢谢了各位,拯救下我吧。


[trigger]
giveAIaHero
    事件
        时间 - 游戏开始 0.00 秒
    条件
    动作
        单位组 - 清空 AIHeroTeam 内所有单位
        玩家组 - 选取 playingAI 内所有玩家做动作
            Loop - 动作
                自定义代码: local location udg_tempPointA
                设置 tempPointA = ((选取玩家) 的游戏开始位置)
                单位 - 创建 1 个 AI_Type[(随机整数,最小值: 1 最大值: 6)] 给 (选取玩家) 在 tempPointA ,面向角度为 默认建筑朝向 度
                设置 tempInt = ((选取玩家) 的玩家索引号)
                设置 playerHero[tempInt] = 最后创建的单位 [R]
                设置 AI_Hero[tempInt] = 最后创建的单位 [R]
                单位组 - 添加 playerHero[tempInt] 到 AIHeroTeam
                单位组 - 添加 playerHero[tempInt] 到 Heros
                单位组 - 添加 playerHero[tempInt] 到 tempZu3
                AI - 忽视 AI_Hero[tempInt] 的警戒点
                单位 - 添加 增加攻击力的物品 (+20) 给 最后创建的单位 [R]
                单位 - 设置 (最后创建的单位) 打开 增加攻击力的物品 (+20) 永久性
                单位 - 添加 能盗取生命值的物品 给 最后创建的单位 [R]
                单位 - 设置 (最后创建的单位) 打开 能盗取生命值的物品 永久性
                单位 - 添加 能提高护甲的物品 (+4) 给 最后创建的单位 [R]
                单位 - 设置 (最后创建的单位) 打开 能提高护甲的物品 (+4) 永久性
                单位 - 添加 能提高英雄属性的物品 (+5 所有属性) 给 最后创建的单位 [R]
                单位 - 设置 (最后创建的单位) 打开 能提高英雄属性的物品 (+5 所有属性) 永久性
                单位 - 添加 能带有火焰伤害的物品 (古尔丹) 给 最后创建的单位 [R]
                单位 - 设置 (最后创建的单位) 打开 能带有火焰伤害的物品 (古尔丹) 永久性
                单位 - 添加 能增加生命值的物品 (较大的) 给 最后创建的单位 [R]
                单位 - 设置 (最后创建的单位) 打开 能增加魔法值的物品 (较大的) 永久性
                AI - 使 (选取玩家) 暂停 当前AI脚本的运行
                英雄 - 设置 (选取玩家) 的经验获得率为 300.00%
                如果所有条件成立则做动作1,否则做动作2
                    If - 条件
                        (playerHero[((选取玩家) 的玩家索引号)] 的类型) 等于 牛头人酋长
                    Then - 动作
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 触发器 - 为 AI congsheng <预设> 添加事件: (单位 - playerHero[((选取玩家) 的玩家索引号)] 的生命值变为 小于 0.00)
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Else - 动作
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 自定义代码: call RemoveLocation( udg_tempPointA )
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 自定义代码: set udg_tempPointA = null
&#160;&#160;&#160;&#160;&#160;&#160;&#160; 触发器 - 删除 (当前触发)

[/trigger]
这是全图唯一对[单位组]AIHeroTeam的内容进行操作的触发

[trigger]
AItakeAction
&#160;&#160;&#160; 事件
&#160;&#160;&#160;&#160;&#160;&#160;&#160; 时间 - AIact 到期
&#160;&#160;&#160; 条件
&#160;&#160;&#160; 动作
&#160;&#160;&#160;&#160;&#160;&#160;&#160; 游戏 - 对 玩家1(红色) 在屏幕位移(0.00,0.00)处显示文本: AI启动
&#160;&#160;&#160;&#160;&#160;&#160;&#160; 单位组 - 选取 AIHeroTeam 内所有单位做动作
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Loop - 动作
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 游戏 - 对 玩家1(红色) 在屏幕位移(0.00,0.00)处显示文本: 找到单位组
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 如果所有条件成立则做动作1,否则做动作2
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; If - 条件
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; AI_RunAway[(((选取单位) 的所有者) 的玩家索引号)] 等于 FALSE
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Then - 动作
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 设置 tempZu = ((可用地图区域) 内的所有单位)
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 设置 tempPointB = ((tempZu 中随机选取的一个单位) 的位置)
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 单位组 - 删除 tempZu
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 如果所有条件成立则做动作1,否则做动作2
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; If - 条件
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; (随机整数,最小值: 1 最大值: 2) 等于 1
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Then - 动作
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 单位 - 对 (选取单位) 发布 AImove [R] 命令到目标点: tempPointB
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 游戏 - 对 玩家1(红色) 在屏幕位移(0.00,0.00)处显示文本: ((((选取单位) 的所有者) 的名字) + AIMOVE)
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Else - 动作
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 单位 - 对 (选取单位) 发布 攻击移动 命令到目标点: tempPointB
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 游戏 - 对 玩家1(红色) 在屏幕位移(0.00,0.00)处显示文本: ((((选取单位) 的所有者) 的名字) + 攻击移动)
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 点 - 清除 tempPointB
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Else - 动作
[/trigger]
这是无法正常运行的触发。表现为,游戏开始以后或中途,只收到“AI启动”的文本,但无法收到其他文本。其中内容已经因测试这个BUG简化。本来是不断放大范围寻路。

[trIgger]
tempTest
&#160;&#160;&#160; 事件
&#160;&#160;&#160;&#160;&#160;&#160;&#160; 玩家 - 玩家1(红色) 输入的聊天信息包含 /AI ,匹配方式: 完全匹配
&#160;&#160;&#160; 条件
&#160;&#160;&#160; 动作
&#160;&#160;&#160;&#160;&#160;&#160;&#160; 玩家组 - 选取 playingAI 内所有玩家做动作
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Loop - 动作
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 单位组 - 添加 playerHero[((选取玩家) 的玩家索引号)] 到 AIHeroTeam
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 游戏 - 对 玩家1(红色) 在屏幕位移(0.00,0.00)处显示文本: (playerHero[((选取玩家) 的玩家索引号)] 的名字)
&#160;&#160;&#160;&#160;&#160;&#160;&#160; 游戏 - 对 玩家1(红色) 在屏幕位移(0.00,0.00)处显示文本: (转换 (AIHeroTeam 中的单位数量) 为字符串)
[/trigger]
这是专门做的测试命令,可以正常反馈给我添加的单位名,但是完成添加后,最后还是显示AIHeroTeam中无单位。为0.

因为地图现在还有些乱,所以还要需要点时间,整理上传。
发表于 2009-7-14 14:25:43 | 显示全部楼层
LZ把字体改小点吧
看都看不清楚怎么解答呢
回复

使用道具 举报

 楼主| 发表于 2009-7-14 14:27:25 | 显示全部楼层
抱歉,已改。
那么大字体是初衷考虑阅读舒适的……
回复

使用道具 举报

发表于 2009-7-14 15:11:38 | 显示全部楼层
额。。这个。。没有具体的图我就只有猜了
猜得不对大家就直接无视好了
关于“地图上放置了一些中立生物和建筑”的问题
难道是你没把对战初始化“去除中立单位”去掉???
或者你改了中立单位使他有隐形技能
再或者你有其他触发把他去掉了
也许是你的地图单位太多吗
关于局域网问题
这个确实比较灵异啊,我刚刚测试没这问题啊
我怀疑是排泄问题
如果不行的话
我建议你测试一下在多人游戏里会不会掉线
如果掉线就当掉线问题处理好了(也就是本地玩家)
回复

使用道具 举报

 楼主| 发表于 2009-7-14 15:47:20 | 显示全部楼层

回 3楼(light) 的帖子

谢谢你的回复
关于对战初始化的问题,你说对了。
我犯了个低级错误,我的地图需要那个“去除中立单位”触发,但是我忽略其中一个的摆放位置
这太低级了,汗

还是说主要问题
我过下,传些代码过来。
触发目前是156个
这次出问题是AI部分(触发模拟)
这部分的触发是基与我另外一幅成品图改造的,那幅图目前大约更新了上百次,里面的触发实践检验,网战,单人都没问题。

奇怪的是,在这幅新图里出现这种情况。
主要就是表现在个别选取XX单位组做动作的触发上,有些工作正常,有些不能。

至于排泄。因为我考虑效率,这个单位组其实就是AI控制的初始英雄
在游戏开始,随机分配给AI英雄后,就加入AI单位组。
此后再也没有写入动作。

不是临时单位组,所以只做为固定的单位组使用。

掉线倒没有,多人玩,和单人,都很稳定。
只是AI在局域网上运行不正常。即使是一个人局域网开图玩。
回复

使用道具 举报

发表于 2009-7-14 17:00:39 | 显示全部楼层
难道是传说中的LT3C??
嗯。先把图(代码也行)上传来看看吧
即使我不行,别人也可以解决啊
回复

使用道具 举报

 楼主| 发表于 2009-7-14 19:56:48 | 显示全部楼层

回 5楼(light) 的帖子

触发已附上

地图还在整理~
回复

使用道具 举报

发表于 2009-7-15 07:08:04 | 显示全部楼层
………………………………………………(意思:我想问一下,你的那些单位组和玩家组都不是null吗?显示的是空单位组还是无?如果是无的话就改成空单位组试试)
………………………………………………(意思:剩下的我也没得可说……当然这种情况发生几率很小…………好吧…………其实我只是在瞎猜罢了…………)
回复

使用道具 举报

 楼主| 发表于 2009-7-15 10:44:42 | 显示全部楼层

Re:同样的触发,单机模式运行正常,局域网下运行不正常[已附上相关触发]

引用第7楼血戮魔动冰于2009-07-15 07:08发表的&#160; :
………………………………………………(意思:我想问一下,你的那些单位组和玩家组都不是null吗?显示的是空单位组还是无?如果是无的话就改成空单位组试试)
………………………………………………(意思:剩下的我也没得可说……当然这种情况发生几率很小…………好吧…………其实我只是在瞎猜罢了…………)
都不是NULL,而且其他的工作正常,AIHeroTeam在单机模式下,也一直是正常的。
也没有单位组-删除AIHeroTeam的语句

局域网下,如果初始正常,会得到AIHeroTeam组的单位名;但过一会,选取AIHeroTeam的语句就无法工作了。判断组内单位数量,是0.可能是NULL也可能是清空。

但根据我贴第三条触发,直接写入内容也无效的话,应该是被删除了。

但是,这种代码有时工作有时不工作的情况太让人崩溃了。毫无逻辑啊~

这样导致我没有办法做AI。尝试用动态注册单位的方式来做动作触发,但是没有适合的事件。

单位组选择这种都无法正常使用。

我从台式机换到笔记本,从1.20升级到1.23,情况依旧。

特别是,看我贴的第一段触发,我注册了和AIHeroTeam内容一样的TempZu3
但如果我把选取AIHeroTeam做动作,改为选取TempZu3做动作的话
局域网模式下,依然是同样的情况

费解
回复

使用道具 举报

发表于 2009-7-15 19:14:30 | 显示全部楼层
先顶一顶
具体问题等我分析一下代码
回复

使用道具 举报

 楼主| 发表于 2009-7-16 00:01:59 | 显示全部楼层
引用第9楼light于2009-07-15 19:14发表的  :
先顶一顶
具体问题等我分析一下代码
有思路了没啊~~
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 点一下

本版积分规则

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

GMT+8, 2024-11-25 17:17 , Processed in 0.039051 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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