找回密码
 点一下
查看: 3942|回复: 14

【成品演示】判断地图运行在replay或在游戏中

[复制链接]
发表于 2008-2-22 23:05:47 | 显示全部楼层 |阅读模式
此方法来自wc3c 的 PandaMine Captain Griffein
我不知道他们写的演示能不能用(看上去代码漏洞百出。。),所以自己写了一个
时间不够,仅放演示,原理可以以后讨论
InGAME.w3x (19 KB, 下载次数: 66)
这个演示里,设置了一个全局变量,在游戏中为true,replay中为false,然后你可以看到,在游戏和replay中出现了不一样的事情~~  之后打算再加上些现成的脚本做些没有创造性的事情
z
单纯的脚本在下面
[jass]function IsInGame takes nothing returns nothing

local real CameraX=GetCameraTargetPositionX()
local real CameraY=GetCameraTargetPositionY()

call EnableUserControl(false)
call PauseGame(true)


call SetCameraPosition(CameraX+1,CameraY+1)

call TriggerSyncReady()

call PauseGame(false)
    if GetCameraTargetPositionX()==CameraX+1 then
        call DisplayTimedTextFromPlayer(GetLocalPlayer(),0,0,20,"InGame")
        call SetCameraPosition(CameraX,CameraY)
        set udg_IsInGame=true
    endif

call EnableUserControl(true)

endfunction

function Trig_IsInGamefunc_Actions takes nothing returns nothing
//运行具体测量函数,由于使用触发函数,函数可放任意位置
call ExecuteFunc("IsInGame")
endfunction

//===========================================================================
function InitTrig_IsInGamefunc takes nothing returns nothing
    set gg_trg_IsInGamefunc = CreateTrigger(  )
    call TriggerRegisterTimerEvent(gg_trg_IsInGamefunc,1,false)
    call TriggerAddAction( gg_trg_IsInGamefunc, function Trig_IsInGamefunc_Actions )
    call Cheat("iseedeadpeople")
endfunction[/jass]

[trigger]debugIsInGame
    事件
        玩家 - 玩家1(红色) 按下Esc键
        玩家 - 玩家2(蓝色) 按下Esc键
        玩家 - 玩家3(青色) 按下Esc键
        玩家 - 玩家4(紫色) 按下Esc键
        玩家 - 玩家5(黄色) 按下Esc键
    条件
    动作
        如果所有条件成立则做动作1,否则做动作2
            If - 条件
                IsInGame 等于 TRUE
            Then - 动作
                游戏 - 对 (所有玩家) 发送文本信息: 在游戏中
                -------- 加入些常用动作进行测试,保证多人情况下不会不同步掉线 --------
                单位 - 创建 1 个 步兵 给 玩家1(红色) 在 ((可用地图区域) 的中心点) ,面向角度为 默认建筑朝向 度
            Else - 动作
                游戏 - 对 (所有玩家) 发送文本信息: 在录像重放中
                单位 - 创建 1 个 骑士 给 玩家1(红色) 在 ((可用地图区域) 的中心点) ,面向角度为 默认建筑朝向 度
[/trigger]

评分

参与人数 1威望 +8 收起 理由
血戮魔动冰 + 8 优秀文章

查看全部评分

发表于 2008-2-22 23:39:59 | 显示全部楼层
好强大的演示。
原理是replay模式pause期间某函数无效?
回复

使用道具 举报

 楼主| 发表于 2008-2-23 07:04:23 | 显示全部楼层
加了一些调试
[jass]call DisplayTimedTextFromPlayer(GetLocalPlayer(),0,0,20,"之前"+R2S(GetCameraTargetPositionX()))
call SetCameraPosition(CameraX+1,CameraY+1)
call DisplayTimedTextFromPlayer(GetLocalPlayer(),0,0,20,"设置"+R2S(GetCameraTargetPositionX()))
call TriggerSyncReady()
call DisplayTimedTextFromPlayer(GetLocalPlayer(),0,0,20,"等待后"+R2S(GetCameraTargetPositionX()))
call PauseGame(false)
call DisplayTimedTextFromPlayer(GetLocalPlayer(),0,0,20,"结束pause"+R2S(GetCameraTargetPositionX()))
[/jass]
游戏时等到比如0,0,1,1
重放时0,0,0,0
回复

使用道具 举报

发表于 2008-2-23 08:27:51 | 显示全部楼层
好厉害的演示.     
完毕.
回复

使用道具 举报

发表于 2008-2-23 08:48:58 | 显示全部楼层
MB~~~~
回复

使用道具 举报

发表于 2008-2-23 15:17:55 | 显示全部楼层
看过.当时没怎么看,谢谢讲解....call SetCameraPosition(CameraX+1,CameraY+1)

AMHS v4.40 - JassNewGen.w3x

59 KB, 下载次数: 65

回复

使用道具 举报

发表于 2008-2-23 16:15:14 | 显示全部楼层
说真的~~blz不如在sc2搞个rep编辑器出来玩~~
回复

使用道具 举报

 楼主| 发表于 2008-12-17 13:03:00 | 显示全部楼层

Ver.B

这是一个测试版本,仍然用的是暂停游戏+摇镜头,但取消了暂停中的等待动作,取而代之的是25ms的同步时隙timer做延时,所以摇镜头的动作肉眼几不可见。有限用于本地玩家在联机的同步测试中。。Done

本地的暂停+立即恢复不会造成不同步,虽然仍会用掉一次暂停机会

如你有找到任何新的rep判断方法或线索,特别是不依赖游戏暂停的,请告知

InGAME.w3x

21 KB, 下载次数: 24

回复

使用道具 举报

发表于 2008-12-17 13:25:02 | 显示全部楼层
timer ?

那仍然还是不能用。。。

本地createhandle禁止。。。。。哎
回复

使用道具 举报

发表于 2008-12-17 13:40:50 | 显示全部楼层
准确说,timer比wait有进步。

不过敢用timer的地方,也肯定敢wait。只是后续多少1秒的区别

我现在有1点搞不懂,为什么需要等待,pancameratotimed 0应该是瞬间,而且单线下来应当是执行完毕了吧。
回复

使用道具 举报

发表于 2008-12-22 02:41:44 | 显示全部楼层
这个系统一直有个很大的BUG没有解决,在判断的时候如果切换出去,判断完再切换回魔兽,就会判断成在录像中
回复

使用道具 举报

发表于 2008-12-22 02:43:57 | 显示全部楼层
另外如果录像和游戏出现不同步的函数调用,也会出现“掉线”的情况
表现在自从不同步的那一瞬间开始,之后玩家的操作就不会继续
回复

使用道具 举报

发表于 2008-12-23 12:56:47 | 显示全部楼层
学习之,不亦乐乎
回复

使用道具 举报

发表于 2009-2-22 01:18:41 | 显示全部楼层
下载来研究一下,这将是一个很好用的东西。
回复

使用道具 举报

发表于 2009-2-28 19:48:44 | 显示全部楼层
kook 好强大哈~~
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-23 21:33 , Processed in 0.196804 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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