//static public int[] boundNPC = new int[] { NPCID.BoundGoblin, NPCID.BoundMechanic, NPCID.BoundWizard}; private static void ProcessSpawnNPCRequest(ref BinaryReader reader, int playerNumber) { HEROsModPlayer player = Network.Players[playerNumber]; if (player.Group.HasPermission("SpawnNPCs")) { int npcType = reader.ReadInt32(); NPC newNPC = new NPC(); newNPC.SetDefaults(npcType); if (newNPC.townNPC || global::HEROsMod.HEROsModServices.NPCStats.boundNPC.Contains(npcType)) { for (int i = 0; i < Main.npc.Length; i++) { NPC npc = Main.npc[i]; if (npc.type == newNPC.type) { npc.Teleport(player.GameInstance.position, 1); //npc.position = player.GameInstance.position; //NetMessage.SendData(23, -1, -1, "", i, 0f, 0f, 0f, 0); return; } } } NPC.NewNPC((int)player.GameInstance.position.X, (int)player.GameInstance.position.Y, npcType); } }
public static void ProcessRegistrationRequest(string username, string password, int playerNumber) { DatabaseController.RegistrationResult regResult = DatabaseController.Register(username, password); switch (regResult) { case DatabaseController.RegistrationResult.Sucess: Network.SendTextToPlayer("You have successfully registered. Please login.", playerNumber); for (int i = 0; i < Network.Players.Length; i++) { HEROsModPlayer player = Network.Players[i]; if (player.ServerInstance.IsActive && player.Group.IsAdmin) { GeneralMessages.SendRegisteredUsersToPlayer(i); } } break; case DatabaseController.RegistrationResult.UsernameTaken: Network.SendTextToPlayer("This username has already been taken.", playerNumber); break; case DatabaseController.RegistrationResult.Error: Network.SendTextToPlayer("An error occured when trying to register.", playerNumber); break; } }
public static void ResendPlayerTileData(HEROsModPlayer player) { int sectionX = Netplay.GetSectionX((int)(player.GameInstance.position.X / 16f)); int sectionY = Netplay.GetSectionY((int)(player.GameInstance.position.Y / 16f)); int num = 0; for (int i = sectionX - 1; i < sectionX + 2; i++) { for (int j = sectionY - 1; j < sectionY + 2; j++) { if (i >= 0 && i < Main.maxSectionsX && j >= 0 && j < Main.maxSectionsY) { num++; } } } int num2 = num; NetMessage.SendData(9, player.Index, -1, Lang.inter[44].ToNetworkText(), num2, 0f, 0f, 0f, 0); Netplay.Clients[player.Index].StatusText2 = "is receiving tile data"; Netplay.Clients[player.Index].StatusMax += num2; for (int k = sectionX - 1; k < sectionX + 2; k++) { for (int l = sectionY - 1; l < sectionY + 2; l++) { if (k >= 0 && k < Main.maxSectionsX && l >= 0 && l < Main.maxSectionsY) { NetMessage.SendSection(player.Index, k, l, false); NetMessage.SendData(11, player.Index, -1, null, k, (float)l, (float)k, (float)l, 0); } } } }
public static void SendPlayerPermissions(int playerNumber) { if (Network.NetworkMode == NetworkMode.Server) { WriteHeader(MessageType.SetPlayerGroup); HEROsModPlayer player = Network.Players[playerNumber]; Group group = player.Group; Writer.Write(group.Name); Writer.Write(group.ID); Writer.Write(group.IsAdmin); byte[] permissions = group.ExportPermissions(); //if(CTF.CaptureTheFlag.GameInProgress) //{ // permissions = Network.CTFGroup.ExportPermissions(); //} Writer.Write(permissions.Length); Writer.Write(permissions); Network.SendDataToPlayer(playerNumber); if (group.IsAdmin) { GeneralMessages.SendRegisteredUsersToPlayer(playerNumber); } } }
private static void SendPlayerInfo(int indexOfRequestedPlayer, int playerNumber) { WriteHeader(MessageType.PlayerInfo); HEROsModPlayer player = Network.Players[indexOfRequestedPlayer]; Writer.Write(player.Username); Writer.Write(player.Group.ID); Writer.Write(indexOfRequestedPlayer); Network.SendDataToPlayer(playerNumber); }
public static void SendPlayerToPosition(HEROsModPlayer player, Vector2 position) { position /= 16; int prevSpawnX = player.GameInstance.SpawnX; int prevSpawnY = player.GameInstance.SpawnY; player.GameInstance.SpawnX = (int)position.X; player.GameInstance.SpawnY = (int)position.Y; NetMessage.SendData(12, -1, -1, null, player.Index, 0f, 0f, 0f, 0); player.GameInstance.SpawnX = prevSpawnX; player.GameInstance.SpawnY = prevSpawnY; }
public static void SendAllPlayersPermissions() { for (int i = 0; i < Network.Players.Length; i++) { HEROsModPlayer player = Network.Players[i]; if (player.ServerInstance.IsActive) { SendPlayerPermissions(i); } } }
//public static bool SendDataCheck(int msgType, int number) //{ // switch (msgType) // { // case 27: //projectiles // if (!GravestonesAllowed) // { // Projectile proj = Main.projectile[number]; // if (proj.type == 43 || (proj.type > 200 && proj.type < 206)) // { // proj.active = false; // return true; // } // } // break; // } // return false; //} private static void PlayerJoined(int playerNumber) { Players[playerNumber] = new HEROsModPlayer(playerNumber); // chat message hack: SendTextToPlayer(HEROsModCheckMessage, playerNumber, Color.Red); var packet = HEROsMod.instance.GetPacket(); packet.Write((byte)MessageType.LoginMessage); packet.Write((byte)LoginService.MessageType.ServerToClientHandshake); packet.Send(playerNumber); GeneralMessages.TellClientsPlayerJoined(playerNumber); }
private static void FreezeNonLoggedInPlayers() { for (int i = 0; i < Players.Length; i++) { HEROsModPlayer player = Players[i]; if (player.ServerInstance.IsActive && !player.Group.HasPermission("CanMove") { //player.GameInstance.AddBuff(47, 7200); // Console.WriteLine("Freeze " + i); NetMessage.SendData(55, player.Index, -1, "", player.Index, 47, 120, 0f, 0); } } }
public static bool PlayerHasPermissionToBuildAtBlock(HEROsModPlayer player, int x, int y) { bool canBuild = false; if (player.Group.IsAdmin /* && !CTF.CaptureTheFlag.GameInProgress*/) { canBuild = true; } if (!canBuild /*&& !CTF.CaptureTheFlag.GameInProgress*/ && player.Group.HasPermission("ModifyTerrain")) { canBuild = true; for (int i = 0; i < Regions.Count; i++) { //if region contains tile if (Regions[i].ContainsTile(x, y)) { bool canBuildInRegion = false; for (int j = 0; j < Regions[i].AllowedGroupsIDs.Count; j++) { if (player.Group.ID == Regions[i].AllowedGroupsIDs[j]) { //can build in region canBuildInRegion = true; break; } } // if can't build in region chack if player can build in the region if (!canBuildInRegion) { for (int j = 0; j < Regions[i].AllowedPlayersIDs.Count; j++) { if (player.ID == Regions[i].AllowedPlayersIDs[j]) { canBuildInRegion = true; break; } } } canBuild = canBuildInRegion; if (!canBuild) { break; } } } } return(canBuild); }
public static void RecordChanges(HEROsModPlayer player, int x, int y) { if (player.ID < 0) { return; } if (!TileChanges.ContainsKey(player.ID)) { TileChanges.Add(player.ID, new TileChange[Main.maxTilesX, Main.maxTilesY]); } if (TileChanges[player.ID][x, y] == null) { TileChanges[player.ID][x, y] = new TileChange(Main.tile[x, y]); } }
private static void FreezeNonLoggedInPlayers() { for (int i = 0; i < Players.Length; i++) { HEROsModPlayer player = Players[i]; if (player.ServerInstance.IsActive) { if (player.Username == string.Empty) { //player.GameInstance.AddBuff(47, 7200); // Console.WriteLine("Freeze " + i); NetMessage.SendData(55, player.Index, -1, null, player.Index, 47, 120, 0f, 0); } } } }
public static void ProcessLogoutRequest(int playerNumber) { if (Network.NetworkMode == NetworkMode.Server) { HEROsModPlayer player = Network.Players[playerNumber]; player.Group = Network.DefaultGroup; player.Username = String.Empty; if (player.UsingHEROsMod) { WriteHeader(MessageType.LogoutSucess); Writer.Write(player.Group.ID); Network.SendDataToPlayer(playerNumber); SendPlayerPermissions(playerNumber); } if (Network.WillFreezeNonLoggedIn) { Network.SendPlayerToPosition(player, new Vector2(Main.spawnTileX * 16, Main.spawnTileY * 16)); } } }
private static void ProcessSetOfflinePlayerGroupRequest(ref BinaryReader reader, int playerNumber) { if (Network.Players[playerNumber].Group.IsAdmin) { int id = reader.ReadInt32(); int groupID = reader.ReadInt32(); //Network.Players[id].Group = Network.GetGroupByID(groupID); //SendPlayerPermissions(id); DatabaseController.SetPlayerGroup(id, groupID); for (int i = 0; i < Network.Players.Length; i++) { HEROsModPlayer player = Network.Players[i]; if (player.ServerInstance.IsActive && player.Group.IsAdmin) { GeneralMessages.SendRegisteredUsersToPlayer(i); } } //GeneralMessages.SendRegisteredUsersToPlayer(playerNumber); } }
/// <summary> /// Checks to see whether the player can open a chest inside a region at this tile location. Returns true if user is trusted or is in a trusted group. /// </summary> /// <param name="player">Player that is opening the chest.</param> /// <param name="x">X coordinate of chest.</param> /// <param name="y">Y coordinate of chest.</param> /// <returns></returns> public static bool PlayerHasPermissionToOpenChestAtLocation(HEROsModPlayer player, int x, int y) { bool canOpen = true; // Admins have global access if (player.Group.IsAdmin) return true; //if (!canOpen && player.Group.HasPermission("OpenChests?")) for (int i = 0; i < Regions.Count; i++) { //if region contains tile if (Regions[i].ContainsTile(x, y) && Regions[i].ChestsProtected == true) { canOpen = PlayerTrustedInRegion(Regions[i], player); if (!canOpen) break; } } return canOpen; }
/// <summary> /// Determines whether a player has access to the region. Searches through groups and individual trusts. /// </summary> /// <param name="region">Region to check.</param> /// <param name="player">Player to check against.</param> /// <returns>True if trusted.</returns> public static bool PlayerTrustedInRegion(Region region, HEROsModPlayer player) { // Verify player is in trusted group for region for (int i = 0; i < region.AllowedGroupsIDs.Count; i++) { if (player.Group.ID == region.AllowedGroupsIDs[i]) { return true; } } // Verify player is a trusted player in this region for (int i = 0; i < region.AllowedPlayersIDs.Count; i++) { if (player.ID == region.AllowedPlayersIDs[i]) { return true; } } return false; }
// On Load Mod public static void Init() { // Reset Values to defaults. Group.PermissionList.Clear(); foreach (var item in Group.DefaultPermissions) { Group.PermissionList.Add(item); } ServerUsingHEROsMod = false; GravestonesAllowed = true; WillFreezeNonLoggedIn = true; Groups = new List <Group>(); Players = new HEROsModPlayer[255]; RegisteredUsers = new List <UserWithID>(); for (int i = 0; i < Players.Length; i++) { Players[i] = new HEROsModPlayer(i); } Regions = new List <Region>(); ResetWriter(); LoggedIn = false; AdminGroup = new Group("Admin"); AdminGroup.MakeAdmin(); DatabaseController.Init(); if (NetworkMode == NetworkMode.Server) { //TileLastChangedBy = new int[Main.maxTilesX, Main.maxTilesY]; //for (int x = 0; x < TileLastChangedBy.GetLength(0); x++) //{ // for (int y = 0; y < TileLastChangedBy.GetLength(1); y++) // { // TileLastChangedBy[x, y] = -1; // } //} //TileChangeController.Init(); Groups = DatabaseController.GetGroups(); //Regions = DatabaseController.GetRegions(); //CTFGroup = new Group("CTFGroup"); //CTFGroup.Permissions["StartCTF"] = true; foreach (Group group in Groups) { if (group.Name == "Default") { DefaultGroup = group; break; } } LoginService.GroupChanged += LoginService_GroupChanged; AuthCode = Main.rand.Next(100000, 999999); Console.ForegroundColor = ConsoleColor.Yellow; Console.WriteLine("HERO's Mod: Create an account, login, and type /auth " + AuthCode + " to become Admin."); Console.ResetColor(); } }
// TODO -- How will any of these work....? public static bool CheckIncomingDataForHEROsModMessage(ref byte msgType, ref BinaryReader binaryReader, int playerNumber) { long readerPos = binaryReader.BaseStream.Position; switch (msgType) { case 12: if (NetworkMode == NetworkMode.Server) { //if (CTF.CaptureTheFlag.GameInProgress && Netplay.Clients[playerNumber].State == 10) //{ // if (Players[playerNumber].CTFTeam != CTF.TeamColor.None) // { // CTF.CTFMessages.SendPlayerToSpawnPlatform(Players[playerNumber]); // return true; // } //} if (Netplay.Clients[playerNumber].State == 3) { PlayerJoined(playerNumber); } } break; //case 14: // if (NetworkMode != global::HEROsModMod.NetworkMode.Server) // { // if (CTF.CaptureTheFlag.GameInProgress) // { // int index = (int)binaryReader.ReadByte(); // byte active = binaryReader.ReadByte(); // if (Players[index].CTFTeam == CTF.TeamColor.None && active == 1 && Players[index].GameInstance.ghost) // { // return true; // } // } // } // break; case 17: //Terrain Modified if (NetworkMode == NetworkMode.Server) { bool canBuild = false; TileModifyType tileModifyType = (TileModifyType)binaryReader.ReadByte(); int x = (int)binaryReader.ReadInt16(); int y = (int)binaryReader.ReadInt16(); short placeType = binaryReader.ReadInt16(); int style = (int)binaryReader.ReadByte(); bool fail = placeType == 1; HEROsModPlayer player = Players[playerNumber]; Tile tile; if (x >= 0 && y >= 0 && x < Main.maxTilesX && y < Main.maxTilesY) { tile = Main.tile[x, y]; } else { binaryReader.BaseStream.Position = readerPos; return(false); } //if (CTF.CaptureTheFlag.GameInProgress && player.CTFTeam != CTF.TeamColor.None && CTF.CaptureTheFlag.AllowTerrainModification) //{ // canBuild = true; // if (CTF.CaptureTheFlag.ListeningForTileChanges) // { // Tile backupTile = CTF.CaptureTheFlag.ModifiedTiles[x, y]; // if (backupTile == null) // { // CTF.CaptureTheFlag.ModifiedTiles[x, y] = new Tile(); // CTF.CaptureTheFlag.ModifiedTiles[x, y].CopyFrom(tile); // Console.WriteLine("tile added"); // } // } //} if (!canBuild) { canBuild = PlayerHasPermissionToBuildAtBlock(player, x, y); } if (tileModifyType == TileModifyType.PlaceTile && placeType == TileID.LandMine) { SendTextToPlayer("Landmines are disabled on this server", playerNumber, Color.Red); } else if (canBuild) { TileLastChangedBy[x, y] = player.ID; binaryReader.BaseStream.Position = readerPos; if (tileModifyType == TileModifyType.KillTile) { LastTileKilledBy = player; WorldGen.KillTile(x, y, fail, false, false); NetMessage.SendData(17, -1, playerNumber, null, (int)tileModifyType, (float)x, (float)y, (float)placeType, style); LastTileKilledBy = null; return(true); } else { TileChangeController.RecordChanges(player, x, y); } return(false); } else { SendTextToPlayer("You do not have permission to build here", playerNumber, Color.Red); } switch (tileModifyType) { case TileModifyType.KillTile: NetMessage.SendData(17, playerNumber, -1, null, (int)TileModifyType.PlaceTile, (float)x, (float)y, (float)tile.type, tile.slope()); break; case TileModifyType.PlaceTile: NetMessage.SendData(17, playerNumber, -1, null, (int)TileModifyType.KillTile, (float)x, (float)y, (float)placeType, style); break; case TileModifyType.KillWall: NetMessage.SendData(17, playerNumber, -1, null, (int)TileModifyType.PlaceWall, (float)x, (float)y, (float)tile.wall, style); break; case TileModifyType.PlaceWall: NetMessage.SendData(17, playerNumber, -1, null, (int)TileModifyType.KillWall, (float)x, (float)y, (float)placeType, style); break; case TileModifyType.KillTileNoItem: NetMessage.SendData(17, playerNumber, -1, null, (int)TileModifyType.PlaceTile, (float)x, (float)y, (float)tile.type, tile.slope()); break; case TileModifyType.PlaceWire: NetMessage.SendData(17, playerNumber, -1, null, (int)TileModifyType.KillWire, (float)x, (float)y, (float)placeType, style); break; case TileModifyType.PlaceWire2: NetMessage.SendData(17, playerNumber, -1, null, (int)TileModifyType.KillWire2, (float)x, (float)y, (float)placeType, style); break; case TileModifyType.PlaceWire3: NetMessage.SendData(17, playerNumber, -1, null, (int)TileModifyType.KillWire3, (float)x, (float)y, (float)placeType, style); break; case TileModifyType.KillWire: NetMessage.SendData(17, playerNumber, -1, null, (int)TileModifyType.PlaceWire, (float)x, (float)y, (float)placeType, style); break; case TileModifyType.KillWire2: NetMessage.SendData(17, playerNumber, -1, null, (int)TileModifyType.PlaceWire2, (float)x, (float)y, (float)placeType, style); break; case TileModifyType.KillWire3: NetMessage.SendData(17, playerNumber, -1, null, (int)TileModifyType.PlaceWire3, (float)x, (float)y, (float)placeType, style); break; case TileModifyType.KillActuator: NetMessage.SendData(17, playerNumber, -1, null, (int)TileModifyType.PlaceActuator, (float)x, (float)y, (float)placeType, style); break; case TileModifyType.PlaceActuator: NetMessage.SendData(17, playerNumber, -1, null, (int)TileModifyType.KillActuator, (float)x, (float)y, (float)placeType, style); break; case TileModifyType.PoundTile: NetMessage.SendData(17, playerNumber, -1, null, (int)TileModifyType.PoundTile, (float)x, (float)y, (float)placeType, tile.slope()); break; case TileModifyType.SlopeTile: NetMessage.SendData(17, playerNumber, -1, null, (int)TileModifyType.SlopeTile, (float)x, (float)y, (float)placeType, tile.slope()); break; } return(true); } break; /* case 25: //received a chat message * * binaryReader.ReadByte(); * Color color = binaryReader.ReadRGB(); * string text = binaryReader.ReadString(); * if (NetworkMode == NetworkMode.Client) * { * if (text == HEROsModCheckMessage) * { * ServerUsingHEROsMod = true; * HEROsMod.ServiceHotbar.Visible = true; * GeneralMessages.TellSereverImUsingHEROsMod(); * return true; * } * } * else if (NetworkMode == NetworkMode.Server) * { * if (text.Length > 1 && text.Substring(0, 1) == "/") * { * string[] parameters = text.Substring(1, text.Length - 1).Split(' '); * parameters[0] = parameters[0].ToLower(); * switch (parameters[0]) * { * case "auth": * if (parameters.Length != 2 || parameters[1].Length != 6) * { * SendTextToPlayer("Invalid Input", playerNumber); * return true; * } * string authStr = parameters[1]; * if (authStr == AuthCode.ToString()) * { * if (!Players[playerNumber].UsingHEROsMod) * { * SendTextToPlayer("You need HEROsMod Mod to use this feature", playerNumber); * return true; * } * if (Players[playerNumber].Username.Length > 0) * { * Players[playerNumber].Group = AdminGroup; * DatabaseController.SetPlayerGroup(Players[playerNumber].ID, Players[playerNumber].Group.ID); * LoginService.SendPlayerPermissions(playerNumber); * SendTextToPlayer("You are now Admin", playerNumber); * return true; * } * else * { * SendTextToPlayer("Please login first", playerNumber); * return true; * } * } * else * { * SendTextToPlayer("Invalid Auth Code", playerNumber); * return true; * } * case "login": * if (parameters.Length != 3) * { * SendTextToPlayer("Invalid Input", playerNumber); * return true; * } * LoginService.ProcessLoginRequest(parameters[1], parameters[2], playerNumber); * return true; * case "logout": * if (parameters.Length != 1) * { * SendTextToPlayer("Invalid Input", playerNumber); * return true; * } * LoginService.ProcessLogoutRequest(playerNumber); * return true; * case "register": * if (parameters.Length != 3) * { * SendTextToPlayer("Invalid Input", playerNumber); * return true; * } * LoginService.ProcessRegistrationRequest(parameters[1], parameters[2], playerNumber); * break; * case "help": * if (parameters.Length != 1) * { * SendTextToPlayer("Invalid Input", playerNumber); * } * SendTextToPlayer("/login <username> <password> - Login with your account", playerNumber); * SendTextToPlayer("/register <username> <password> - Create an account", playerNumber); * SendTextToPlayer("/logout - Logout of your account", playerNumber); * SendTextToPlayer("Use HEROsMod Mod to unlock all server features.", playerNumber); * break; * default: * SendTextToPlayer("Invalid Command, type /help for a list of commands.", playerNumber); * break; * * } * } * else * { * string text2 = text.ToLower(); * if (text2 == Lang.mp[6] || text2 == Lang.mp[21]) * { * string text3 = ""; * for (int i = 0; i < 255; i++) * { * if (Main.player[i].active) * { * if (text3 == "") * { * text3 = Main.player[i].name; * } * else * { * text3 = text3 + ", " + Main.player[i].name; * } * } * } * NetMessage.SendData(25, playerNumber, -1, Lang.mp[7] + " " + text3 + ".", 255, 255f, 240f, 20f, 0); * } * else if (text2.StartsWith("/me ")) * { * NetMessage.SendData(25, -1, -1, "*" + Main.player[playerNumber].name + " " + text.Substring(4), 255, 200f, 100f, 0f, 0); * } * else if (text2 == Lang.mp[8]) * { * NetMessage.SendData(25, -1, -1, string.Concat(new object[] * { * "*", * Main.player[playerNumber].name, * " ", * Lang.mp[9], * " ", * Main.rand.Next(1, 101) * }), 255, 255f, 240f, 20f, 0); * } * else if (text2.StartsWith("/p ")) * { * int num28 = Main.player[playerNumber].team; * color = Main.teamColor[num28]; * if (num28 != 0) * { * for (int i = 0; i < 255; i++) * { * if (Main.player[i].team == num28) * { * NetMessage.SendData(25, i, -1, text.Substring(3), 255, (float)color.R, (float)color.G, (float)color.B, 0); * } * } * } * else * { * NetMessage.SendData(25, playerNumber, -1, Lang.mp[10].ToNetworkText(), 255, 255f, 240f, 20f, 0); * } * } * else * { * return false; * // why are chat messages randomized? * //color = chatColor[chatColorIndex]; * //chatColorIndex++; * //if (chatColorIndex >= chatColor.Length) chatColorIndex = 0; * //NetMessage.SendData(25, -1, -1, text, 255, (float)color.R, (float)color.G, (float)color.B, 0); * //if (Main.dedServ) * //{ * // Console.WriteLine("<" + Main.player[playerNumber].name + "> " + text); * //} * } * } * return true; * } * break;*/ //case 27: // if (ItemBanner.ItemsBanned && !Players[playerNumber].Group.IsAdmin) // { // int projIdentity = (int)binaryReader.ReadInt16(); // Vector2 position = binaryReader.ReadVector2(); // Vector2 velocity = binaryReader.ReadVector2(); // float knockback = binaryReader.ReadSingle(); // int damage = (int)binaryReader.ReadInt16(); // int owner = (int)binaryReader.ReadByte(); // int type = (int)binaryReader.ReadInt16(); // Console.WriteLine("Prof: " + type); // int[] bannedProjectiles = ItemBanner.bannedProjectiles; // for (int i = 0; i < bannedProjectiles.Length; i++) // { // if (bannedProjectiles[i] == type) // { // Projectile newProj = new Projectile(); // newProj.SetDefaults(type); // SendTextToPlayer(newProj.name + " is banned on the server", playerNumber, Color.Red); // int projIndex = 0; // for (int j = 0; j < 1000; j++) // { // if (!Main.projectile[j].active) // { // Projectile proj = Main.projectile[j]; // proj.owner = owner; // projIndex = j; // break; // } // } // NetMessage.SendData(27, playerNumber, -1, "", projIndex); // NetMessage.SendData(29, playerNumber, -1, "", projIdentity, (float)owner); // return true; // } // } // } // break; //case 30: // if (NetworkMode == global::HEROsModMod.NetworkMode.Server) // { // if (CTF.CaptureTheFlag.GameInProgress) // { // SendTextToPlayer("You cannot change your hostility while Capture the Flag is in progress.", playerNumber); // CTF.CaptureTheFlag.SetPlayerHostility(Players[playerNumber]); // return true; // } // } // break; //case 45: // if (NetworkMode == global::HEROsModMod.NetworkMode.Server) // { // if (CTF.CaptureTheFlag.GameInProgress) // { // SendTextToPlayer("You cannot change parties while Capture the Flag is in progress.", playerNumber); // CTF.CaptureTheFlag.SetPlayerHostility(Players[playerNumber]); // return true; // } // } // break; case 63: //block painted if (NetworkMode == global::HEROsMod.NetworkMode.Server) { int x = (int)binaryReader.ReadInt16(); int y = (int)binaryReader.ReadInt16(); byte paintColor = binaryReader.ReadByte(); HEROsModPlayer player = Players[playerNumber]; if (PlayerHasPermissionToBuildAtBlock(player, x, y)) { TileLastChangedBy[x, y] = player.ID; binaryReader.BaseStream.Position = readerPos; return(false); } else { NetMessage.SendData(63, playerNumber, -1, null, x, (float)y, (float)Main.tile[x, y].color()); SendTextToPlayer("You do not have permission to build here", playerNumber, Color.Red); return(true); } } break; case 64: //wall painted if (NetworkMode == global::HEROsMod.NetworkMode.Server) { int x = (int)binaryReader.ReadInt16(); int y = (int)binaryReader.ReadInt16(); byte paintColor = binaryReader.ReadByte(); HEROsModPlayer player = Players[playerNumber]; if (PlayerHasPermissionToBuildAtBlock(player, x, y)) { TileLastChangedBy[x, y] = player.ID; binaryReader.BaseStream.Position = readerPos; return(false); } else { NetMessage.SendData(64, playerNumber, -1, null, x, (float)y, (float)Main.tile[x, y].wallColor()); SendTextToPlayer("You do not have permission to build here", playerNumber, Color.Red); return(true); } } break; } //if (msgType == HEROsModNetworkMessageType) //{ // //We found a HEROsMod only message // MessageType subMsgType = (MessageType)binaryReader.ReadByte(); // switch(subMsgType) // { // case MessageType.GeneralMessage: // GeneralMessages.ProcessData(ref binaryReader, playerNumber); // break; // case MessageType.LoginMessage: // LoginService.ProcessData(ref binaryReader, playerNumber); // break; // case MessageType.CTFMessage: // CTF.CTFMessages.ProcessData(ref binaryReader, playerNumber); // break; // } //} //we need to set the stream position back to where it was before we got it binaryReader.BaseStream.Position = readerPos; return(false); }
//public static bool SendDataCheck(int msgType, int number) //{ // switch (msgType) // { // case 27: //projectiles // if (!GravestonesAllowed) // { // Projectile proj = Main.projectile[number]; // if (proj.type == 43 || (proj.type > 200 && proj.type < 206)) // { // proj.active = false; // return true; // } // } // break; // } // return false; //} private static void PlayerJoined(int playerNumber) { Players[playerNumber] = new HEROsModPlayer(playerNumber); SendTextToPlayer(HEROsModCheckMessage, playerNumber, Color.Red); GeneralMessages.TellClientsPlayerJoined(playerNumber); }