public static void SpawnItemCommand(SpawnItemCommand spawnItemCommand) { using (Packet packet = new Packet((int)ClientPackets.playerSpawnItemCommand)) { packet.Write(spawnItemCommand.spawnCell); packet.Write(spawnItemCommand.direction); packet.Write(spawnItemCommand.spawnItemType); packet.Write(spawnItemCommand.sequenceNumber); SendTCPData(packet); } }
public static void PlayerSpawnItemCommand(int fromClient, Packet packet) { Vector3Int spawnCell = packet.ReadVector3Int(); int direction = packet.ReadInt(); int spawnItemType = packet.ReadInt(); int sequenceNumber = packet.ReadInt(); SpawnItemCommand spawnItemCommand = new SpawnItemCommand(sequenceNumber, direction, spawnItemType, spawnCell); Server.clients[fromClient].serverMasterController.AccumulateSpawnItemCommandsToBePlayedOnServerFromClient(spawnItemCommand); }
public void SpawnServerProjectiles() { if (itemToCast.usableItemType == EnumData.UsableItemTypes.TidalWave) { SpawnItemCommand spawnItemCommand = new SpawnItemCommand(GetLocalSequenceNo(), (int)Facing, (int)itemToCast.usableItemType, GridManager.instance.grid.WorldToCell(actorTransform.position)); ClientSend.SpawnItemCommand(spawnItemCommand); isFiringServerProjectiles = true; onCompletedMotionToPoint = () => { isFiringServerProjectiles = false; onCompletedMotionToPoint = null; }; } else if (itemToCast.usableItemType == EnumData.UsableItemTypes.BubbleShield) { if (bubbleShieldAttackReady) { waitingActionForBubbleShieldItemMove.ReInitialiseTimerToBegin(GameConfig.bubbleShieldItemMoveAttackRateTickRate); SpawnItemCommand spawnItemCommand = new SpawnItemCommand(GetLocalSequenceNo(), (int)Facing, (int)itemToCast.usableItemType, GridManager.instance.grid.WorldToCell(actorTransform.position)); ClientSend.SpawnItemCommand(spawnItemCommand); isFiringServerProjectiles = true; onCompletedMotionToPoint = () => { isFiringServerProjectiles = false; onCompletedMotionToPoint = null; }; } } else if (itemToCast.usableItemType == EnumData.UsableItemTypes.MightyWind) { if (IsHeroAbleToFireProjectiles()) { SpawnItemCommand spawnItemCommand = new SpawnItemCommand(GetLocalSequenceNo(), (int)Facing, (int)itemToCast.usableItemType, GridManager.instance.grid.WorldToCell(actorTransform.position)); ClientSend.SpawnItemCommand(spawnItemCommand); isFiringServerProjectiles = true; onCompletedMotionToPoint = () => { isFiringServerProjectiles = false; onCompletedMotionToPoint = null; }; } } else if (itemToCast.usableItemType == EnumData.UsableItemTypes.FlamePillar) { if (IsHeroAbleToFireProjectiles()) { SpawnItemCommand spawnItemCommand = new SpawnItemCommand(GetLocalSequenceNo(), (int)Facing, (int)itemToCast.usableItemType, GridManager.instance.grid.WorldToCell(actorTransform.position)); ClientSend.SpawnItemCommand(spawnItemCommand); isFiringServerProjectiles = true; onCompletedMotionToPoint = () => { isFiringServerProjectiles = false; onCompletedMotionToPoint = null; }; } } }
public void SpawnItem() { if (itemToCast.usableItemType == EnumData.UsableItemTypes.Minion) { Vector3Int cellToCheckFor = GridManager.instance.grid.WorldToCell(actorTransform.position + GridManager.instance.GetFacingDirectionOffsetVector3(Facing)); if (!GridManager.instance.IsCellBlockedForSpawnObjectPlacementAtPos(cellToCheckFor) && !GridManager.instance.HasTileAtCellPoint(cellToCheckFor, EnumData.GameObjectEnums.BoulderAppearing, EnumData.GameObjectEnums.BoulderDisappearing)) { //send command to server of placement SpawnItemCommand spawnItemCommand = new SpawnItemCommand(GetLocalSequenceNo(), (int)Facing, (int)itemToCast.usableItemType, cellToCheckFor); ClientSend.SpawnItemCommand(spawnItemCommand); } } else if (itemToCast.usableItemType == EnumData.UsableItemTypes.PermamnentBlock) { Vector3Int cellToCheckFor = GridManager.instance.grid.WorldToCell(actorTransform.position + GridManager.instance.GetFacingDirectionOffsetVector3(Facing)); if (!GridManager.instance.IsCellBlockedForSpawnObjectPlacementAtPos(cellToCheckFor) && !GridManager.instance.HasTileAtCellPoint(cellToCheckFor, EnumData.GameObjectEnums.BoulderAppearing, EnumData.GameObjectEnums.BoulderDisappearing)) { //send command to server of placement SpawnItemCommand spawnItemCommand = new SpawnItemCommand(GetLocalSequenceNo(), (int)Facing, (int)itemToCast.usableItemType, cellToCheckFor); ClientSend.SpawnItemCommand(spawnItemCommand); } } else if (itemToCast.usableItemType == EnumData.UsableItemTypes.CereberausHead) { Vector3Int cellToCheckFor = GridManager.instance.grid.WorldToCell(actorTransform.position + GridManager.instance.GetFacingDirectionOffsetVector3(Facing)); if (!GridManager.instance.IsCellBlockedForSpawnObjectPlacementAtPos(cellToCheckFor) && !GridManager.instance.HasTileAtCellPoint(cellToCheckFor, EnumData.GameObjectEnums.BoulderAppearing, EnumData.GameObjectEnums.BoulderDisappearing)) { //send command to server of placement SpawnItemCommand spawnItemCommand = new SpawnItemCommand(GetLocalSequenceNo(), (int)Facing, (int)itemToCast.usableItemType, cellToCheckFor); ClientSend.SpawnItemCommand(spawnItemCommand); } } else if (itemToCast.usableItemType == EnumData.UsableItemTypes.Boulder) { Vector3Int cellToCheckFor = GridManager.instance.grid.WorldToCell(actorTransform.position + GridManager.instance.GetFacingDirectionOffsetVector3(Facing)); if (!GridManager.instance.IsCellBlockedForSpawnObjectPlacementAtPos(cellToCheckFor) && !GridManager.instance.HasTileAtCellPoint(cellToCheckFor, EnumData.TileType.NoBoulder) && !GridManager.instance.HasTileAtCellPoint(cellToCheckFor, EnumData.GameObjectEnums.BoulderAppearing)) { //send command to server of placement SpawnItemCommand spawnItemCommand = new SpawnItemCommand(GetLocalSequenceNo(), (int)Facing, (int)itemToCast.usableItemType, cellToCheckFor); ClientSend.SpawnItemCommand(spawnItemCommand); } } else if (itemToCast.usableItemType == EnumData.UsableItemTypes.ArrowDirectional) { Vector3Int cellToCheckFor = GridManager.instance.grid.WorldToCell(actorTransform.position + GridManager.instance.GetFacingDirectionOffsetVector3(Facing)); if (!GridManager.instance.IsCellBlockedForSpawnObjectPlacementAtPos(cellToCheckFor) && !GridManager.instance.HasTileAtCellPoint(cellToCheckFor, EnumData.GameObjectEnums.BoulderAppearing)) { //send command to server of placement SpawnItemCommand spawnItemCommand = new SpawnItemCommand(GetLocalSequenceNo(), (int)Facing, (int)itemToCast.usableItemType, cellToCheckFor); ClientSend.SpawnItemCommand(spawnItemCommand); } } else if (itemToCast.usableItemType == EnumData.UsableItemTypes.MirrorItem) { Vector3Int cellToCheckFor = GridManager.instance.grid.WorldToCell(actorTransform.position + GridManager.instance.GetFacingDirectionOffsetVector3(Facing)); if (!GridManager.instance.IsCellBlockedForSpawnObjectPlacementAtPos(cellToCheckFor) && !GridManager.instance.HasTileAtCellPoint(cellToCheckFor, EnumData.GameObjectEnums.BoulderAppearing)) { //send command to server of placement SpawnItemCommand spawnItemCommand = new SpawnItemCommand(GetLocalSequenceNo(), (int)Facing, (int)itemToCast.usableItemType, cellToCheckFor); ClientSend.SpawnItemCommand(spawnItemCommand); } } else if (itemToCast.usableItemType == EnumData.UsableItemTypes.GorgonGlass) { Vector3Int cellToCheckFor = GridManager.instance.grid.WorldToCell(actorTransform.position + GridManager.instance.GetFacingDirectionOffsetVector3(Facing)); if (!GridManager.instance.IsCellBlockedForSpawnObjectPlacementAtPos(cellToCheckFor) && !GridManager.instance.HasTileAtCellPoint(cellToCheckFor, EnumData.GameObjectEnums.BoulderAppearing)) { //send command to server of placement SpawnItemCommand spawnItemCommand = new SpawnItemCommand(GetLocalSequenceNo(), (int)Facing, (int)itemToCast.usableItemType, cellToCheckFor); ClientSend.SpawnItemCommand(spawnItemCommand); } } else if (itemToCast.usableItemType == EnumData.UsableItemTypes.Pitfall) { Vector3Int cellToCheck = GridManager.instance.grid.WorldToCell(actorTransform.position + 2 * GridManager.instance.GetFacingDirectionOffsetVector3(Facing)); if (GridManager.instance.HasTileAtCellPoint(cellToCheck, EnumData.TileType.Normal)) { SpawnItemCommand spawnItemCommand = new SpawnItemCommand(GetLocalSequenceNo(), (int)Facing, (int)itemToCast.usableItemType, Vector3Int.zero); ClientSend.SpawnItemCommand(spawnItemCommand); } } else if (itemToCast.usableItemType == EnumData.UsableItemTypes.Earthquake) { SpawnItemCommand spawnItemCommand = new SpawnItemCommand(GetLocalSequenceNo(), (int)Facing, (int)itemToCast.usableItemType, Vector3Int.zero); ClientSend.SpawnItemCommand(spawnItemCommand); } else if (itemToCast.usableItemType == EnumData.UsableItemTypes.Tornado) { Vector3Int cellToCheck = GridManager.instance.grid.WorldToCell(actorTransform.position + GridManager.instance.GetFacingDirectionOffsetVector3(Facing)); if (!GridManager.instance.IsCellBlockedForSpawnObjectPlacementAtPos(cellToCheck)) { SpawnItemCommand spawnItemCommand = new SpawnItemCommand(GetLocalSequenceNo(), (int)Facing, (int)itemToCast.usableItemType, Vector3Int.zero); ClientSend.SpawnItemCommand(spawnItemCommand); } } else if (itemToCast.usableItemType == EnumData.UsableItemTypes.Portal) { Vector3Int cellToCheck = GridManager.instance.grid.WorldToCell(actorTransform.position + GridManager.instance.GetFacingDirectionOffsetVector3(Facing)); if (!GridManager.instance.IsCellBlockedForSpawnObjectPlacementAtPos(cellToCheck)) { SpawnItemCommand spawnItemCommand = new SpawnItemCommand(GetLocalSequenceNo(), (int)Facing, (int)itemToCast.usableItemType, Vector3Int.zero); ClientSend.SpawnItemCommand(spawnItemCommand); } } else if (itemToCast.usableItemType == EnumData.UsableItemTypes.AeloianMight) { SpawnItemCommand spawnItemCommand = new SpawnItemCommand(GetLocalSequenceNo(), (int)Facing, (int)itemToCast.usableItemType, Vector3Int.zero); ClientSend.SpawnItemCommand(spawnItemCommand); } else if (itemToCast.usableItemType == EnumData.UsableItemTypes.QuickSand) { SpawnItemCommand spawnItemCommand = new SpawnItemCommand(GetLocalSequenceNo(), (int)Facing, (int)itemToCast.usableItemType, Vector3Int.zero); ClientSend.SpawnItemCommand(spawnItemCommand); } }