找回密码
 点一下
查看: 1333|回复: 12

对话框问题与判断问题   (RPWT?)

[复制链接]
发表于 2009-1-31 22:13:36 | 显示全部楼层 |阅读模式
已解决,见9楼





今天做图时碰到了一些诡异的问题...

1.   "对话框"全局变量如果使用数组来记录,在"事件-对话框被点击"里使用则会无效,即不会执行这个事件里的所有动作
解决办法:  使用非数组类型的对话框变量

2.   先看一个T
[trigger]
Set Choose Game Mode info
    事件
        时间 - 游戏开始 3.00 秒
    条件
    动作
        游戏 - 对 (所有玩家) 发送文本信息: |cFFFFFF00等待第...
        对话框 - 设置 Dialog_info 的标题为 您是第一个玩...
        对话框 - 为 Dialog_info 添加按钮, 按钮标题为: |cffffcc001|r 由... 快捷键为: 1
        设置 Dialog_Button[1] = (最后创建的对话框按钮)
        对话框 - 为 Dialog_info 添加按钮, 按钮标题为: |cffffcc002|r 投... 快捷键为: 2
        设置 Dialog_Button[2] = (最后创建的对话框按钮)
        对话框 - 对 FirstPlayer 设置 Dialog_info 显示
[/trigger]
其中的 FirstPlayer 是"玩家"类的全局变量
然后,不管使用下列哪个T,都不能正确获得FirstPlayer的值
[trigger]
Set First Player 1
    事件
        时间 - 游戏开始 0.50 秒
    条件
    动作
        自定义代码: local integer i = 0
        自定义代码: loop
        自定义代码: exitwhen i > 5
        自定义代码: if GetPlayerController(Player(i)) == MAP_CONTROL_USER then
        自定义代码: set udg_FirstPlayer = Player(i)
        自定义代码: return
        自定义代码: endif
        自定义代码: set i = i + 1
        自定义代码: endloop
[/trigger]
[trigger]
Set First Player 2
    事件
        时间 - 游戏开始 0.50 秒
    条件
    动作
        自定义代码: if GetPlayerController(Player(0)) == MAP_CONTROL_USER then
        自定义代码: set udg_FirstPlayer = Player(0)
        自定义代码: elseif GetPlayerController(Player(1)) == MAP_CONTROL_USER then
        自定义代码: set udg_FirstPlayer = Player(1)
        自定义代码: elseif GetPlayerController(Player(2)) == MAP_CONTROL_USER then
        自定义代码: set udg_FirstPlayer = Player(2)
        自定义代码: elseif GetPlayerController(Player(3)) == MAP_CONTROL_USER then
        自定义代码: set udg_FirstPlayer = Player(3)
        自定义代码: elseif GetPlayerController(Player(4)) == MAP_CONTROL_USER then
        自定义代码: set udg_FirstPlayer = Player(4)
        自定义代码: elseif GetPlayerController(Player(5)) == MAP_CONTROL_USER then
        自定义代码: set udg_FirstPlayer = Player(5)
        自定义代码: endif
[/trigger]
[trigger]
Set First Player 3
    事件
        时间 - 游戏开始 0.50 秒
    条件
    动作
        自定义代码: if GetPlayerController(Player(0)) != MAP_CONTROL_USER then
        自定义代码: if GetPlayerController(Player(1)) != MAP_CONTROL_USER then
        自定义代码: if GetPlayerController(Player(2)) != MAP_CONTROL_USER then
        自定义代码: if GetPlayerController(Player(3)) != MAP_CONTROL_USER then
        自定义代码: if GetPlayerController(Player(4)) != MAP_CONTROL_USER then
        自定义代码: if GetPlayerController(Player(5)) != MAP_CONTROL_USER then
        自定义代码: else
        自定义代码: set udg_FirstPlayer = Player(5)
        自定义代码: endif
        自定义代码: else
        自定义代码: set udg_FirstPlayer = Player(4)
        自定义代码: endif
        自定义代码: else
        自定义代码: set udg_FirstPlayer = Player(3)
        自定义代码: endif
        自定义代码: else
        自定义代码: set udg_FirstPlayer = Player(2)
        自定义代码: endif
        自定义代码: else
        自定义代码: set udg_FirstPlayer = Player(1)
        自定义代码: endif
        自定义代码: else
        自定义代码: set udg_FirstPlayer = Player(0)
        自定义代码: endif
[/trigger]
结果是没有任何对话框对任何玩家显示.......为什么?
发表于 2009-1-31 22:15:49 | 显示全部楼层
可能条件有问题。
回复

使用道具 举报

发表于 2009-1-31 22:28:32 | 显示全部楼层
又是事件无法使用数组么?
回复

使用道具 举报

发表于 2009-1-31 22:29:01 | 显示全部楼层
用给触发增加事件来设置就可以
回复

使用道具 举报

发表于 2009-1-31 22:36:07 | 显示全部楼层
Set Choose Game Mode info
事件
时间 - 游戏开始 3.00 秒
再看你第二个。。和第三个。别糊涂。
回复

使用道具 举报

 楼主| 发表于 2009-1-31 22:43:09 | 显示全部楼层

Re:对话框问题与判断问题   (RPWT?)

引用第4楼xiaojiao于2009-01-31 22:36发表的  :
Set Choose Game Mode info
事件
时间 - 游戏开始 3.00 秒
再看你第二个。。和第三个。别糊涂。
下面三个T都是为了计算出上面那个T里所用的变量而存在的呢
回复

使用道具 举报

发表于 2009-1-31 22:59:26 | 显示全部楼层
hmmm………………
暂时米有看出问题,能不能做成一个小示意图发上来看下呢?
回复

使用道具 举报

发表于 2009-1-31 23:32:48 | 显示全部楼层
在后面的T中加一句call BJDebugMsg(I2S(GetPlayerId(udg_FirstPlayer)))看看是否有数字显示,然后再进行下一步判断。

哦,对了,测试前别忘了先把最上面判断的T的return删掉。
回复

使用道具 举报

 楼主| 发表于 2009-2-1 00:59:27 | 显示全部楼层
无论单人还是多人测试,使用Set First Player 2来取值,DEBUG都返回0,也就是说始终只给第一个玩家创建对话框

RPWT.w3x

25 KB, 下载次数: 6

回复

使用道具 举报

发表于 2009-2-1 01:18:11 | 显示全部楼层
hmmm,知道老,再加一句判断玩家游戏状态为正在游戏

RPWT.w3x (15 KB, 下载次数: 7)

3种方法都修改好了
回复

使用道具 举报

发表于 2009-2-1 01:18:44 | 显示全部楼层
因为你条件里写少了个玩家游戏状态
回复

使用道具 举报

 楼主| 发表于 2009-2-1 01:26:55 | 显示全部楼层

Re:对话框问题与判断问题   (RPWT?)

引用第9楼zhuzeitou于2009-02-01 01:18发表的  :
hmmm,知道老,再加一句判断玩家游戏状态为正在游戏



3种方法都修改好了
感谢提醒,问题已解决...

原来要同时判断两个条件啊...
[jass]if GetPlayerController(Player(i)) == MAP_CONTROL_USER and GetPlayerSlotState(Player(i)) == PLAYER_SLOT_STATE_PLAYING then[/jass]
回复

使用道具 举报

 楼主| 发表于 2009-2-1 01:30:59 | 显示全部楼层

Re:对话框问题与判断问题  (RPWT?)

顺便还问个问题吧

为什么用WEHelper保存过的地图会比用原版WE保存过的地图多200K?

偶用的这个http://www.islga.org/bbs/read.php?tid=15253
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-25 07:57 , Processed in 0.037677 second(s), 21 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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