private void HandleStartPlacement(MsgPlacement msg) { CurrentPermission = new PlacementInformation { Range = msg.Range, IsTile = msg.IsTile, }; CurrentPermission.EntityType = msg.ObjType; // tile or ent type CurrentPermission.PlacementOption = msg.AlignOption; BeginPlacing(CurrentPermission); }
//Holds build permissions for all mobs. A list of mobs and the objects they're allowed to request and how. One permission per mob. #region IPlacementManager Members /// <summary> /// Handles placement related client messages. /// </summary> public void HandleNetMessage(MsgPlacement msg) { switch (msg.PlaceType) { case PlacementManagerMessage.StartPlacement: break; case PlacementManagerMessage.CancelPlacement: break; case PlacementManagerMessage.RequestPlacement: HandlePlacementRequest(msg); break; } }
/// <summary> /// Handles placement related client messages. /// </summary> public void HandleNetMessage(MsgPlacement msg) { if (AllowPlacementFunc != null && !AllowPlacementFunc(msg)) { return; } switch (msg.PlaceType) { case PlacementManagerMessage.StartPlacement: break; case PlacementManagerMessage.CancelPlacement: break; case PlacementManagerMessage.RequestPlacement: HandlePlacementRequest(msg); break; case PlacementManagerMessage.RequestEntRemove: HandleEntRemoveReq(msg.EntityUid); break; } }
public void HandlePlacementRequest(MsgPlacement msg) { var alignRcv = msg.Align; var isTile = msg.IsTile; var mapMgr = (MapManager)IoCManager.Resolve <IMapManager>(); ushort tileType = 0; var entityTemplateName = ""; if (isTile) { tileType = msg.TileType; } else { entityTemplateName = msg.EntityTemplateName; } float xRcv = msg.XRcv; float yRcv = msg.YRcv; var dirRcv = msg.DirRcv; IPlayerSession session = IoCManager.Resolve <IPlayerManager>().GetSessionById(msg.MsgChannel.NetworkId); if (session.attachedEntity == null) { return; //Don't accept placement requests from nobodys } PlacementInformation permission = GetPermission(session.attachedEntity.Uid, alignRcv); float a = (float)Math.Floor(xRcv); float b = (float)Math.Floor(yRcv); Vector2f tilePos = new Vector2f(a, b); if (permission != null || true) //isAdmin) Temporarily disable actual permission check / admin check. REENABLE LATER { if (permission != null) { if (permission.Uses > 0) { permission.Uses--; if (permission.Uses <= 0) { BuildPermissions.Remove(permission); SendPlacementCancel(session.attachedEntity); } } else { BuildPermissions.Remove(permission); SendPlacementCancel(session.attachedEntity); return; } } if (!isTile) { var manager = IoCManager.Resolve <IServerEntityManager>(); IEntity created = manager.SpawnEntityAt(entityTemplateName, new Vector2f(xRcv, yRcv)); if (created != null) { created.GetComponent <ITransformComponent>().Position = new Vector2f(xRcv, yRcv); if (created.TryGetComponent <IDirectionComponent>(out var component)) { component.Direction = dirRcv; } } } else { mapMgr.Tiles[tilePos] = new Tile(tileType); } } /* * else //They are not allowed to request this. Send 'PlacementFailed'. TBA * { * Logger.Log("Invalid placement request: " + IoCManager.Resolve<IPlayerManager>().GetSessionByConnection(msg.SenderConnection).name + + " - " + + IoCManager.Resolve<IPlayerManager>().GetSessionByConnection(msg.SenderConnection). + attachedEntity.Uid.ToString() + + " - " + alignRcv.ToString()); + + SendPlacementCancel( + IoCManager.Resolve<IPlayerManager>().GetSessionByConnection(msg.SenderConnection).attachedEntity); + } */ }
public void HandlePlacementRequest(MsgPlacement msg) { var alignRcv = msg.Align; var isTile = msg.IsTile; ushort tileType = 0; var entityTemplateName = ""; if (isTile) { tileType = msg.TileType; } else { entityTemplateName = msg.EntityTemplateName; } var dirRcv = msg.DirRcv; var session = _playerManager.GetSessionByChannel(msg.MsgChannel); var plyEntity = session.AttachedEntity; // Don't have an entity, don't get to place. if (plyEntity == null) { return; } //TODO: Distance check, so you can't place things off of screen. var coordinates = msg.GridCoordinates; /* TODO: Redesign permission system, or document what this is supposed to be doing * var permission = GetPermission(session.attachedEntity.Uid, alignRcv); * if (permission == null) * return; * * if (permission.Uses > 0) * { * permission.Uses--; * if (permission.Uses <= 0) * { * BuildPermissions.Remove(permission); * SendPlacementCancel(session.attachedEntity); * } * } * else * { * BuildPermissions.Remove(permission); * SendPlacementCancel(session.attachedEntity); * return; * } */ if (!isTile) { var created = _entityManager.SpawnEntity(entityTemplateName, coordinates); created.Transform.LocalRotation = dirRcv.ToAngle(); } else { var mapCoords = coordinates.ToMap(_mapManager); PlaceNewTile(tileType, mapCoords.MapId, mapCoords.Position); } }
public void HandlePlacementRequest(MsgPlacement msg) { var alignRcv = msg.Align; var isTile = msg.IsTile; ushort tileType = 0; var entityTemplateName = ""; if (isTile) { tileType = msg.TileType; } else { entityTemplateName = msg.EntityTemplateName; } var xValue = msg.XValue; var yValue = msg.YValue; var dirRcv = msg.DirRcv; var session = _playerManager.GetSessionByChannel(msg.MsgChannel); var plyEntity = session.AttachedEntity; // Don't have an entity, don't get to place. if (plyEntity == null) { return; } // get the MapID the player is on var plyTransform = plyEntity.GetComponent <ITransformComponent>(); var mapIndex = plyTransform.MapID; // no building in null space! if (mapIndex == MapId.Nullspace) { return; } //TODO: Distance check, so you can't place things off of screen. // get the grid under the worldCoords. var grid = _mapManager.GetMap(mapIndex).GetGrid(plyTransform.GridID); var coordinates = new GridLocalCoordinates(xValue, yValue, grid); /* TODO: Redesign permission system, or document what this is supposed to be doing * var permission = GetPermission(session.attachedEntity.Uid, alignRcv); * if (permission == null) * return; * * if (permission.Uses > 0) * { * permission.Uses--; * if (permission.Uses <= 0) * { * BuildPermissions.Remove(permission); * SendPlacementCancel(session.attachedEntity); * } * } * else * { * BuildPermissions.Remove(permission); * SendPlacementCancel(session.attachedEntity); * return; * } */ if (!isTile) { if (!_entityManager.TrySpawnEntityAt(entityTemplateName, coordinates, out IEntity created)) { return; } var transform = created.GetComponent <TransformComponent>(); transform.WorldPosition = new Vector2(xValue, yValue); if (created.TryGetComponent <TransformComponent>(out var component)) { component.LocalRotation = dirRcv.ToAngle(); } } else { coordinates.Grid.SetTile(coordinates, new Tile(tileType)); } }
public void HandlePlacementRequest(MsgPlacement msg) { var alignRcv = msg.Align; var isTile = msg.IsTile; var mapMgr = IoCManager.Resolve <IMapManager>(); ushort tileType = 0; var entityTemplateName = ""; if (isTile) { tileType = msg.TileType; } else { entityTemplateName = msg.EntityTemplateName; } float xRcv = msg.XRcv; float yRcv = msg.YRcv; var dirRcv = msg.DirRcv; IPlayerSession session = IoCManager.Resolve <IPlayerManager>().GetSessionById(msg.MsgChannel.NetworkId); if (session.attachedEntity == null) { return; //Don't accept placement requests from nobodys } PlacementInformation permission = GetPermission(session.attachedEntity.Uid, alignRcv); float a = (float)Math.Floor(xRcv); float b = (float)Math.Floor(yRcv); Vector2 tilePos = new Vector2(a, b); if (permission != null || true) //isAdmin) Temporarily disable actual permission check / admin check. REENABLE LATER { if (permission != null) { if (permission.Uses > 0) { permission.Uses--; if (permission.Uses <= 0) { BuildPermissions.Remove(permission); SendPlacementCancel(session.attachedEntity); } } else { BuildPermissions.Remove(permission); SendPlacementCancel(session.attachedEntity); return; } } if (!isTile) { var manager = IoCManager.Resolve <IServerEntityManager>(); if (manager.TrySpawnEntityAt(entityTemplateName, new Vector2(xRcv, yRcv), out IEntity created)) { created.GetComponent <TransformComponent>().Position = new Vector2(xRcv, yRcv); if (created.TryGetComponent <TransformComponent>(out var component)) { component.Rotation = dirRcv.ToAngle(); } } } else { mapMgr.GetGrid(mapMgr.DefaultGridId).SetTile(tilePos, new Tile(tileType)); } } }