예제 #1
0
        //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);
            }
        }
예제 #2
0
        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;
            }
        }
예제 #3
0
        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);
                    }
                }
            }
        }
예제 #4
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);
                }
            }
        }
예제 #5
0
        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);
        }
예제 #6
0
		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;
		}
예제 #7
0
 public static void SendAllPlayersPermissions()
 {
     for (int i = 0; i < Network.Players.Length; i++)
     {
         HEROsModPlayer player = Network.Players[i];
         if (player.ServerInstance.IsActive)
         {
             SendPlayerPermissions(i);
         }
     }
 }
예제 #8
0
		//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);
		}
예제 #9
0
		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);
				}
			}
		}
예제 #10
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);
        }
예제 #11
0
 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]);
     }
 }
예제 #12
0
 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);
             }
         }
     }
 }
예제 #13
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));
         }
     }
 }
예제 #14
0
        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);
            }
        }
예제 #15
0
		/// <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;
		}
예제 #16
0
		/// <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;
		}
예제 #17
0
        // 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();
            }
        }
예제 #18
0
        // 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);
        }
예제 #19
0
		//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);
		}