private void OnMoveTick(TimeTaskMS tick) { var obj = Client.CurrentZoneActor; if (obj != null) { obj.SendUnitGuard(base.IsEnable); if (base.IsEnable) { if (obj.Parent.Terrain3D is VoxelClientTerrain3D vt) { var pos = obj.Position; if (vt.World.Terrain.TryGetVoxelLayerByObject(ref pos, out var cell, out var layer)) { int size = Math.Max(1, (int)(Config.RandomMoveDistance / vt.World.Terrain.GridCellSize)); var tp = vt.World.FindNearRandomMoveableNode(random, layer, size); //if (pos != null) { //var pos = Terrain.GetUpwardCenterPos(tp);//layer.UpwardCenterPos obj.SendUnitAttackMoveTo(tp.UpwardCenterPos, false); } } } } } }
private void OnMoveTick(TimeTaskMS tick) { var obj = Client.CurrentZoneActor; if (obj != null) { obj.SendUnitGuard(base.IsEnable); if (base.IsEnable) { var pos = obj.Parent.PathFinderTerrain.FindNearRandomMoveableNode(random, obj.X, obj.Y, Config.RandomMoveDistance, false); if (pos != null) { obj.SendUnitAttackMoveTo(pos.x, pos.y, 0, false); } } } }
protected virtual void CheckZoneDispose(EditorScene z, TimeTaskMS t) { if (CheckNeedKeepPlayer(z)) { zoneGameOver = false; keepPlayerLastTick = DateTime.Now; } else if ((DateTime.Now - keepPlayerLastTick) > keepPlayerExpire) { if (!zoneGameOver) { zoneGameOver = true; //notify areamanager close zone. service.area_manager.Invoke(new AreaZoneGameOverNotify() { zoneUUID = this.ZoneUUID, reason = "KeepPlayerTimeOver", }); } t.Dispose(); //start delay desotry. var delayDestoryTime = TimeSpan.FromSeconds(TimerConfig.timer_sec_DelayDestoryTime); // if (delayDestoryTime > TimeSpan.Zero) { //log.Info("ZoneNode Start Delay Destory : " + delayDestoryTime + " " + this.ZoneUUID); var evt = new DeepCore.GameData.Zone.GameOverEvent() { WinForce = 0, message = "KeepPlayerTimeOver" }; service.Provider.Delay((st) => { if (node.IsDisposed) { return; } //log.Info("ZoneNode Send AreaZoneDestoryNotify ZoneUUID : " + this.ZoneUUID); NotifyAllLogicsGameOver(evt); service.area_manager.Invoke(new AreaZoneDestoryNotify() { zoneUUID = this.ZoneUUID, reason = evt.message, }); }, create, delayDestoryTime); } } }