|
发表于 2014-2-16 21:45:33
|
显示全部楼层
本帖最后由 天江衣 于 2014-2-16 21:49 编辑
- globals
- gamecache udg_sync_gc
- endglobals
- //同步函数SyncReal,用于在缓存中同步一个实数
- function SyncReal takes gamecache gc, string mk, string k, real r returns nothing
- local real t
- set t = GetStoredReal(gc, mk, k)//先获取同步之前的值,在同步开始后还原,避免出现数据异步而掉线
- call StoreReal(gc, mk, k, r)
- call SyncStoredReal(gc, mk, k)
- call StoreReal(gc, mk, k, t)
- endfunction
- //等待函数WaitForReal,直到缓冲中的某个实数等于r时返回
- function WaitForReal takes gamecache gc, string mk, string k, real r returns nothing
- loop
- exitwhen(GetStoredReal(gc, mk, k) == r)
- call TriggerSleepAction(0.00)
- endloop
- endfunction
- //创建用于同步的缓冲,需要在地图初始化时调用一次
- function Sync_InitGC takes nothing returns nothing
- if(udg_sync_gc == null)then
- call FlushGameCache(InitGameCache("Sync"))
- set udg_sync_gc = InitGameCache("Sync")
- endif
- endfunction
- //获得以玩家P为标准的同步点
- function Sync_GetLocation takes player p, real x, real y returns location
- local string mk = I2S(GetPlayerId(p))
- call WaitForReal(udg_sync_gc, mk, "state", 0.00)//等待直到state==0,表示可以开始同步
- call StoreReal(udg_sync_gc, mk, "state", 1.00)//设置state=1,表示同步开始
- if(GetLocalPlayer() == p)then//以玩家p为标准执行同步
- call SyncReal(udg_sync_gc, mk, "x", x)
- call SyncReal(udg_sync_gc, mk, "y", y)
- call SyncReal(udg_sync_gc, mk, "state", 2.00)//同步state=2,表示同步结束
- endif
- call WaitForReal(udg_sync_gc, mk, "state", 2.00)//等待同步结束
- call StoreReal(udg_sync_gc, mk, "state", 0.00)//标志可以开始下一次同步
- set x = GetStoredReal(udg_sync_gc, mk, "x")
- set y = GetStoredReal(udg_sync_gc, mk, "y")
- return Location(x, y)
- endfunction
- //获得玩家p的当前镜头点
- function Sync_CameraTarget takes player p returns location
- return Sync_GetLocation(p, GetCameraTargetPositionX(), GetCameraTargetPositionY())
- endfunction
复制代码 |
|