[Release] SpecialChat for Opennos

12/01/2018 15:59 Nephya#1
I drop my chat system here is a little tutorial.

1: Order package creates a new OpenNos.GameObject/Packet/CommandPacket
Add new class.

Code:
using OpenNos.Core;
using OpenNos.Domain;

namespace OpenNos.GameObject.Packets.CommandPackets
{
    [PacketHeader("$Chat", PassNonParseablePacket = true, Authority = AuthorityType.User)]
    public class TimeSpaceSayPackets : PacketDefinition
    {
        [PacketIndex(0, SerializeToEnd = true)]
        public string Message { get; set; }
    }
}
2: Go in OpenNos.Handler/CommandPacketHandler and put this,

Code:
        /// <summary>
        /// ! Command
        /// </summary>
        /// <param name="TimeSpaceSayPacket"></param>
        public void SpecialChat(TimeSpaceSayPackets timeSpaceSayPacket)
        {
            if (Session.Account.Authority == AuthorityType.User)
            {
                if (!string.IsNullOrEmpty(timeSpaceSayPacket.Message))
                {
                    string message = $"<Canal Discussion> [{Session.Character.Name}]:{timeSpaceSayPacket.Message}";
                    ServerManager.Instance.Broadcast(Session.Character.GenerateSay(message, 11));
                    Session.SendPacket(Session.Character.GenerateSay($"La vente est interdite dans ce canal !", 10));

                }
            }
                

            if (!string.IsNullOrEmpty(timeSpaceSayPacket.Message))
            {
                if (Session.Account.Authority == AuthorityType.GameMaster)
                {
                    string message1 = $"<Canal Discussion> [{Session.Character.Name}]:{timeSpaceSayPacket.Message}";
                    ServerManager.Instance.Broadcast(Session.Character.GenerateSay(message1, 10));
                }
            }
        }
I change the code so that the players speak in pink and gm speak in yellow

[Only registered and activated users can see links. Click Here To Register...]
12/01/2018 17:21 NT Z0ltar#2
I think it's better if you change your class name ("TimeSpaceSayPacket"), because it's not explicit with this name :)

And it can be a little better like this:
Code:
        /// <summary>
        /// ! Command
        /// </summary>
        /// <param name="TimeSpaceSayPacket"></param>
        public void SpecialChat(TimeSpaceSayPackets timeSpaceSayPacket)
        {
            if (!string.IsNullOrEmpty(timeSpaceSayPacket.Message))
            {
                ServerManager.Instance.Broadcast(Session.Character.GenerateSay($"<Canal Discussion> [{Session.Character.Name}]:{timeSpaceSayPacket.Message}", Session.Account.Authority == AuthorityType.GameMaster ? 10 : 11));
		if(Session.Account.Authority != AuthorityType.GameMaster)
		    Session.SendPacket(Session.Character.GenerateSay("La vente est interdite dans ce canal !", 10));
            }
        }