Пример #1
0
 public void chatToClients(ChatPacket p)
 {
     foreach (Guid item in this.server.ClientList)
     {
         threadSafeToComBox("Sending to: " + item.ToString() + "\r\n");
         server.Send(p, item);
     }
 }
Пример #2
0
 public GUIBoard()
 {
     InitializeComponent();
     clientGui.DataReceived += ClientGui_DataReceived;
     clientGui.Start();
     ChatPacket temp = new ChatPacket(0003, "Client", "Client connected.", this.GameID.ToString());
     clientGui.Send(temp);
 }
Пример #3
0
 private void Enter(object sender, KeyEventArgs e)
 {
     if(e.KeyCode == Keys.Enter)
     {
         ChatPacket toSend = new ChatPacket(0003, "Bobby", ChatLine.Text, this.GameID.ToString());
         clientGui.Send(toSend);
         ChatLine.Clear();
     }
 }
Пример #4
0
		public void HandlePacket(EndPoint senderEndPoint, ChatPacket receivedData)
		{
			if (_packetHandlers.ContainsKey(receivedData.ChatDataIdentifier))
			{
				Server.Broadcast(_packetHandlers[receivedData.ChatDataIdentifier](senderEndPoint, receivedData));
			}
			else
			{
				Logger.WriteLine("Bad packet received.");
				Server.Kick(senderEndPoint);
			}
		}
Пример #5
0
        public static void Animation(Session session, params string[] parameters)
        {
            uint animationId;

            try
            {
                animationId = Convert.ToUInt32(parameters[0]);
            }
            catch (Exception)
            {
                ChatPacket.SendServerMessage(session, "Invalid Animation value", ChatMessageType.Broadcast);
                return;
            }

            UniversalMotion motion = new UniversalMotion(MotionStance.Standing, new MotionItem((MotionCommand)animationId));

            session.Player.HandleActionMotion(motion);
        }
    public int Send(Chat_Model_Base model, Type type, int to_id, bool promise = true, Func <Coop_Model_ACK, bool> onReceiveAck = null, Func <Coop_Model_Base, bool> onPreResend = null)
    {
        int              result            = 0;
        ChatPacket       chatPacket        = new ChatPacket();
        ChatPacketHeader chatPacketHeader2 = chatPacket.header = new ChatPacketHeader(0, model.commandId, fromId);

        chatPacket.model = model;
        PacketStream stream = chatPacket.Serialize();

        if (model.commandId == 502)
        {
            goto IL_0040;
        }
        goto IL_0040;
IL_0040:
        NativeSend(stream);
        return(result);
    }
Пример #7
0
        public override void Handle()
        {
            // this check is also done clientside, see: PlayerDesc::PlayerIsPSR
            if (!session.Player.IsAdmin && !session.Player.IsArch && !session.Player.IsPsr)
            {
                return;
            }

            uint cell  = position.Cell;
            uint cellX = (cell >> 3);

            //TODO: Wrap command in a check to confirm session.character IsAdvocate or higher access level

            //TODO: Maybe output to chat window coords teleported to.
            //ChatPacket.SendSystemMessage(session, $"Teleporting to: 0.0[N/S], 0.0[E/W]");
            ChatPacket.SendSystemMessage(session, "Teleporting...");
            session.Player.Teleport(position);
        }
Пример #8
0
        /// <summary>
        /// Handles teleporting a player to the lifestone (/ls or /lifestone command)
        /// </summary>
        public void HandleActionTeleToLifestone()
        {
            if (Sanctuary != null)
            {
                // FIXME(ddevec): I should probably make a better interface for this
                UpdateVital(Mana, Mana.Current / 2);

                if (CombatMode != CombatMode.NonCombat)
                {
                    // this should be handled by a different thing, probably a function that forces player into peacemode
                    var updateCombatMode = new GameMessagePrivateUpdatePropertyInt(this, PropertyInt.CombatMode, (int)CombatMode.NonCombat);
                    SetCombatMode(CombatMode.NonCombat);
                    Session.Network.EnqueueSend(updateCombatMode);
                }

                EnqueueBroadcast(new GameMessageSystemChat($"{Name} is recalling to the lifestone.", ChatMessageType.Recall));
                EnqueueBroadcastMotion(motionLifestoneRecall);

                var startPos = new Position(Location);

                // Wait for animation
                ActionChain lifestoneChain = new ActionChain();

                // Then do teleport
                lifestoneChain.AddDelaySeconds(DatManager.PortalDat.ReadFromDat <MotionTable>(MotionTableId).GetAnimationLength(MotionCommand.LifestoneRecall));
                lifestoneChain.AddAction(this, () =>
                {
                    var endPos = new Position(Location);
                    if (startPos.SquaredDistanceTo(endPos) > RecallMoveThresholdSq)
                    {
                        Session.Network.EnqueueSend(new GameEventWeenieError(Session, WeenieError.YouHaveMovedTooFar));
                        return;
                    }

                    Teleport(Sanctuary);
                });

                lifestoneChain.EnqueueChain();
            }
            else
            {
                ChatPacket.SendServerMessage(Session, "Your spirit has not been attuned to a sanctuary location.", ChatMessageType.Broadcast);
            }
        }
Пример #9
0
        public static void SetVital(Session session, params string[] parameters)
        {
            string paramVital = parameters[0].ToLower();
            string paramValue = parameters[1];

            bool relValue = paramValue[0] == '+' || paramValue[0] == '-';
            int  value    = int.MaxValue;

            if (!int.TryParse(paramValue, out value))
            {
                ChatPacket.SendServerMessage(session, "setvital Error: Invalid set value", ChatMessageType.Broadcast);
                return;
            }

            // Parse args...
            CreatureVital vital = null;

            if (paramVital == "health" || paramVital == "hp")
            {
                vital = session.Player.Health;
            }
            else if (paramVital == "stamina" || paramVital == "stam" || paramVital == "sp")
            {
                vital = session.Player.Stamina;
            }
            else if (paramVital == "mana" || paramVital == "mp")
            {
                vital = session.Player.Mana;
            }
            else
            {
                ChatPacket.SendServerMessage(session, "setvital Error: Invalid vital", ChatMessageType.Broadcast);
                return;
            }

            if (!relValue)
            {
                session.Player.UpdateVital(vital, (uint)value);
            }
            else
            {
                session.Player.DeltaVital(vital, value);
            }
        }
Пример #10
0
        public static void EquipTest(Session session, params string[] parameters)
        {
            if (!(parameters?.Length > 0))
            {
                ChatPacket.SendServerMessage(session, "Usage: @equiptest (hex)clothingTableId [palette_index].\neg '@equiptest 0x100005fd'",
                                             ChatMessageType.Broadcast);
                return;
            }

            uint modelId;

            try
            {
                if (parameters[0].StartsWith("0x"))
                {
                    string strippedmodelid = parameters[0].Substring(2);
                    modelId = UInt32.Parse(strippedmodelid, System.Globalization.NumberStyles.HexNumber);
                }
                else
                {
                    modelId = UInt32.Parse(parameters[0], System.Globalization.NumberStyles.HexNumber);
                }

                int palOption = -1;
                if (parameters.Length > 1)
                {
                    palOption = Int32.Parse(parameters[1]);
                }

                if ((modelId >= 0x10000001) && (modelId <= 0x1000086B))
                {
                    session.Player.TestWieldItem(session, modelId, palOption);
                }
                else
                {
                    ChatPacket.SendServerMessage(session, "Please enter a value greater than 0x10000000 and less than 0x1000086C",
                                                 ChatMessageType.Broadcast);
                }
            }
            catch (Exception)
            {
                ChatPacket.SendServerMessage(session, "Please enter a value greater than 0x10000000 and less than 0x1000086C", ChatMessageType.Broadcast);
            }
        }
Пример #11
0
        private void ProcessChat(ChatPacket obj)
        {
            // Do some validation on chat and then send it off
            var user = ServiceContainer.Users[obj.Sender];

            // Sending this to nothing is useless
            if (user.CurrentSession == null)
            {
                return;
            }

            var newMessage = user.Name + ": " + obj.Message;

            foreach (var recipient in user.CurrentSession.Users)
            {
                var packet = new ChatPacket(newMessage);
                ClientNetworkManager.Instance.SendPacket(packet, recipient.Connection);
            }
        }
Пример #12
0
        private static void HandleWorldChat(GameSession session, string message, ChatType type)
        {
            List <Item> playerInventoryItems = new(session.Player.Inventory.Items.Values);

            Item voucher = playerInventoryItems.FirstOrDefault(x => x.Tag == "FreeWorldChatCoupon");

            if (voucher != null)
            {
                session.Send(NoticePacket.Notice(SystemNotice.UsedWorldChatVoucher, NoticeType.ChatAndFastText));
                InventoryController.Consume(session, voucher.Uid, 1);
            }
            else if (!session.Player.Wallet.RemoveMerets(30))
            {
                session.Send(ChatPacket.Error(session.Player, SystemNotice.InsufficientMerets, ChatType.NoticeAlert));
                return;
            }

            MapleServer.BroadcastPacketAll(ChatPacket.Send(session.Player, message, type));
        }
Пример #13
0
        public async override void Handle()
        {
            var result = await Session.Player.AddFriend(friendName);

            switch (result)
            {
            case Enum.AddFriendResult.AlreadyInList:
                ChatPacket.SendServerMessage(Session, "That character is already in your friends list", ChatMessageType.Broadcast);
                break;

            case Enum.AddFriendResult.FriendWithSelf:
                ChatPacket.SendServerMessage(Session, "Sorry, but you can't be friends with yourself.", ChatMessageType.Broadcast);
                break;

            case Enum.AddFriendResult.CharacterDoesNotExist:
                ChatPacket.SendServerMessage(Session, "That character does not exist", ChatMessageType.Broadcast);
                break;
            }
        }
Пример #14
0
        private static void HandleWhisperChat(GameSession session, string recipient, string message)
        {
            Player recipientPlayer = GameServer.Storage.GetPlayerByName(recipient);

            if (recipientPlayer == null)
            {
                session.Send(ChatPacket.Error(session.Player, SystemNotice.UnableToWhisper, ChatType.WhisperFail));
                return;
            }

            if (BuddyManager.IsBlocked(session.Player, recipientPlayer))
            {
                session.Send(ChatPacket.Error(session.Player, SystemNotice.UnableToWhisper, ChatType.WhisperFail));
                return;
            }

            recipientPlayer.Session.Send(ChatPacket.Send(session.Player, message, ChatType.WhisperFrom));
            session.Send(ChatPacket.Send(recipientPlayer, message, ChatType.WhisperTo));
        }
    private void OnReceiveMessage(ChatPacket packet)
    {
        Chat_Model_BroadcastClanMessage_Response chat_Model_BroadcastClanMessage_Response = packet.model as Chat_Model_BroadcastClanMessage_Response;
        int result  = 0;
        int result2 = 0;

        int.TryParse(chat_Model_BroadcastClanMessage_Response.SenderId, out result);
        int.TryParse(chat_Model_BroadcastClanMessage_Response.Id, out result2);
        if (result == 0)
        {
            if (this.onReceiveNotification != null)
            {
                this.onReceiveNotification(chat_Model_BroadcastClanMessage_Response.Message);
            }
        }
        else if (chat_Model_BroadcastClanMessage_Response.Message.Contains(STAMP_SYMBOL_BEGIN))
        {
            string s       = chat_Model_BroadcastClanMessage_Response.Message.Substring(STAMP_SYMBOL_BEGIN.Length, 8);
            int    result3 = -1;
            int.TryParse(s, out result3);
            if (this.onReceiveStamp != null)
            {
                ClanChatLogMessageData clanChatLogMessageData = new ClanChatLogMessageData();
                clanChatLogMessageData.uuid       = chat_Model_BroadcastClanMessage_Response.Uuid;
                clanChatLogMessageData.id         = result2;
                clanChatLogMessageData.fromUserId = result;
                clanChatLogMessageData.senderName = chat_Model_BroadcastClanMessage_Response.SenderName;
                clanChatLogMessageData.stampId    = result3;
                this.onReceiveStamp(clanChatLogMessageData);
            }
        }
        else if (this.onReceiveText != null)
        {
            ClanChatLogMessageData clanChatLogMessageData2 = new ClanChatLogMessageData();
            clanChatLogMessageData2.uuid       = chat_Model_BroadcastClanMessage_Response.Uuid;
            clanChatLogMessageData2.id         = result2;
            clanChatLogMessageData2.fromUserId = result;
            clanChatLogMessageData2.senderName = chat_Model_BroadcastClanMessage_Response.SenderName;
            clanChatLogMessageData2.message    = chat_Model_BroadcastClanMessage_Response.Message;
            this.onReceiveText(clanChatLogMessageData2);
        }
    }
Пример #16
0
        public static void HandleTele(Session session, params string[] parameters)
        {
            // Used PhatAC source to implement most of this.  Thanks Pea!

            // usage: @tele [name] longitude latitude
            // This command teleports yourself (or the specified character) to the given longitude and latitude.
            // @tele - Teleports you(or a player) to some location.

            if (session.Player.IsAdvocate && session.Player.AdvocateLevel < 5)
            {
                return;
            }

            List <CommandParameterHelpers.ACECommandParameter> aceParams = new List <CommandParameterHelpers.ACECommandParameter>()
            {
                new CommandParameterHelpers.ACECommandParameter()
                {
                    Type         = CommandParameterHelpers.ACECommandParameterType.Player,
                    Required     = false,
                    DefaultValue = session.Player
                },
                new CommandParameterHelpers.ACECommandParameter()
                {
                    Type         = CommandParameterHelpers.ACECommandParameterType.Location,
                    Required     = true,
                    ErrorMessage = "You must supply a location to teleport to.\nExample: /tele 37s,67w"
                }
            };

            if (!CommandParameterHelpers.ResolveACEParameters(session, parameters, aceParams))
            {
                return;
            }

            // TODO: Check if water block?

            ChatPacket.SendServerMessage(session, $"Position: [Cell: 0x{aceParams[1].AsPosition.LandblockId.Landblock:X4} | Offset: {aceParams[1].AsPosition.PositionX}, " +
                                         $"{aceParams[1].AsPosition.PositionY}, {aceParams[1].AsPosition.PositionZ} | Facing: {aceParams[1].AsPosition.RotationX}, {aceParams[1].AsPosition.RotationY}, " +
                                         $"{ aceParams[1].AsPosition.RotationZ}, {aceParams[1].AsPosition.RotationW}]", ChatMessageType.Broadcast);

            aceParams[0].AsPlayer.Teleport(aceParams[1].AsPosition);
        }
Пример #17
0
        public static void CreateStaticCreature(Session session, params string[] parameters)
        {
            Creature newC = null;

            if (!(parameters?.Length > 0))
            {
                ChatPacket.SendServerMessage(session, "Usage: @createcreature [static] weenieClassId",
                                             ChatMessageType.Broadcast);
                return;
            }
            if (parameters?[0] == "static")
            {
                if (parameters?.Length > 1)
                {
                    uint weenie = Convert.ToUInt32(parameters[1]);
                    newC = MonsterFactory.SpawnCreature(weenie, true, session.Player.Location.InFrontOf(2.0f));
                }
                else
                {
                    ChatPacket.SendServerMessage(session, "Specify a valid weenieClassId after the static option.",
                                                 ChatMessageType.Broadcast);
                    return;
                }
            }
            else
            {
                uint weenie = Convert.ToUInt32(parameters[0]);
                newC = MonsterFactory.SpawnCreature(weenie, false, session.Player.Location.InFrontOf(2.0f));
            }

            if (newC != null)
            {
                ChatPacket.SendServerMessage(session, $"Now spawning {newC.Name}.",
                                             ChatMessageType.Broadcast);
                LandblockManager.AddObject(newC);
            }
            else
            {
                ChatPacket.SendServerMessage(session, "Couldn't find that creature in the database or save it's location.",
                                             ChatMessageType.Broadcast);
            }
        }
Пример #18
0
        public static void Main()
        {
            IConfiguration config = new ConfigurationBuilder()
                                    .AddJsonFile("AppSettings.json", false, true)
                                    .Build();

            var networkerSettings = config.GetSection("Horizon");

            var server = new ServerBuilder()
                         .UseTcp(networkerSettings.GetValue <int>("TcpPort"))
                         .ConfigureLogging(loggingBuilder =>
            {
                loggingBuilder.AddConfiguration(config.GetSection("Logging"));
                loggingBuilder.AddConsole();
            })
                         .RegisterPacketHandler <ChatPacket, ChatPacketHandler>()
                         .UseProtobufNet()
                         .Build();

            server.Start();

            var gameClient = new GameClient();

            gameClient.Client.Connect();

            var packet = new ChatPacket
            {
                Message = "Hello Google Protobuf"
            };

            using (var file = File.Create("chat.bin"))
            {
                Serializer.Serialize(file, packet);
            }

            while (server.Information.IsRunning)
            {
                gameClient.Client.Send(packet);

                Thread.Sleep(1000);
            }
        }
Пример #19
0
        public void SpendXp(Enum.Ability ability, uint amount)
        {
            uint   baseValue   = character.Abilities[ability].Base;
            uint   result      = SpendAbilityXp(character.Abilities[ability], amount);
            bool   isSecondary = (ability == Enum.Ability.Health || ability == Enum.Ability.Stamina || ability == Enum.Ability.Mana);
            uint   ranks       = character.Abilities[ability].Ranks;
            uint   newValue    = character.Abilities[ability].UnbuffedValue;
            string messageText = "";

            if (result > 0u)
            {
                GameMessage abilityUpdate;
                if (!isSecondary)
                {
                    abilityUpdate = new GameMessagePrivateUpdateAbility(Session, ability, ranks, baseValue, result);
                }
                else
                {
                    abilityUpdate = new GameMessagePrivateUpdateVital(Session, ability, ranks, baseValue, result, character.Abilities[ability].Current);
                }

                // checks if max rank is achieved and plays fireworks w/ special text
                if (IsAbilityMaxRank(ranks, isSecondary))
                {
                    // fireworks
                    PlayParticleEffect(Effect.WeddingBliss);
                    messageText = $"Your base {ability} is now {newValue} and has reached its upper limit!";
                }
                else
                {
                    messageText = $"Your base {ability} is now {newValue}!";
                }
                var xpUpdate   = new GameMessagePrivateUpdatePropertyInt64(Session, PropertyInt64.AvailableExperience, character.AvailableExperience);
                var soundEvent = new GameMessageSound(this.Guid, Network.Enum.Sound.RaiseTrait, 1f);
                var message    = new GameMessageSystemChat(messageText, ChatMessageType.Advancement);
                Session.Network.EnqueueSend(abilityUpdate, xpUpdate, soundEvent, message);
            }
            else
            {
                ChatPacket.SendServerMessage(Session, $"Your attempt to raise {ability} has failed.", ChatMessageType.Broadcast);
            }
        }
Пример #20
0
        public override void Handle()
        {
            var targetSession = WorldManager.FindByPlayerName(target);

            if (targetSession == null)
            {
                var statusMessage = new GameEventDisplayStatusMessage(Session, StatusMessageType1.CharacterNotAvailable);
                NetworkManager.SendWorldMessages(Session, new GameMessage[] { statusMessage });
            }
            else
            {
                if (Session.Player != targetSession.Player)
                {
                    ChatPacket.SendServerMessage(Session, $"You tell {target}, \"'{message}'\"", ChatMessageType.OutgoingTell);
                }

                var tell = new GameEventTell(targetSession, message, Session.Player.Name, Session.Player.Guid.Full, targetSession.Player.Guid.Full, ChatMessageType.PrivateTell);
                NetworkManager.SendWorldMessages(targetSession, new GameMessage[] { tell });
            }
        }
 protected virtual void PacketUpdate()
 {
     if (!stopPacketUpdate)
     {
         int i = 0;
         for (int count = packets.Count; i < count; i++)
         {
             if (stopPacketUpdate)
             {
                 break;
             }
             ChatPacket packet = packets[i];
             if (HandleCoopEvent(packet))
             {
                 AddDeleteQueue(packet);
             }
         }
         EraseUsedPacket();
     }
 }
Пример #22
0
        /// <summary>
        /// Remove a single friend and update the database.
        /// </summary>
        /// <param name="friendId">The ObjectGuid of the friend that is being removed</param>
        public void HandleActionRemoveFriend(ObjectGuid friendId)
        {
            var friendToRemove = Character.CharacterPropertiesFriendList.SingleOrDefault(f => f.FriendId == friendId.Full);

            // Not in friend list
            if (friendToRemove == null)
            {
                ChatPacket.SendServerMessage(Session, "That character is not in your friends list!", ChatMessageType.Broadcast);
                return;
            }

            // remove friend in DB
            if (Character.TryRemoveFriend(friendId, out var entity) && entity.Id != 0)
            {
                DatabaseManager.Shard.RemoveEntity(entity, null);
            }

            // send network message
            Session.Network.EnqueueSend(new GameEventFriendsListUpdate(Session, GameEventFriendsListUpdate.FriendsUpdateTypeFlag.FriendRemoved, friendToRemove));
        }
Пример #23
0
        public static async void Handle(ClientMessage message, Session session)
        {
            var friendName = message.Payload.ReadString16L().Trim();
            var result     = await session.Player.AddFriend(friendName);

            switch (result)
            {
            case Enum.AddFriendResult.AlreadyInList:
                ChatPacket.SendServerMessage(session, "That character is already in your friends list", ChatMessageType.Broadcast);
                break;

            case Enum.AddFriendResult.FriendWithSelf:
                ChatPacket.SendServerMessage(session, "Sorry, but you can't be friends with yourself.", ChatMessageType.Broadcast);
                break;

            case Enum.AddFriendResult.CharacterDoesNotExist:
                ChatPacket.SendServerMessage(session, "That character does not exist", ChatMessageType.Broadcast);
                break;
            }
        }
Пример #24
0
        public static void TestCorpse(Session session, params string[] parameters)
        {
            if (session.Player.SelectedTarget != 0)
            {
                var target = new ObjectGuid(session.Player.SelectedTarget);
                var wo     = LandblockManager.GetWorldObject(session, target);

                if (target.IsCreature())
                {
                    if (wo != null)
                    {
                        (wo as Creature).OnKill(session);
                    }
                }
            }
            else
            {
                ChatPacket.SendServerMessage(session, "No creature selected.", ChatMessageType.Broadcast);
            }
        }
Пример #25
0
        /// <summary>
        /// Adds a friend and updates the database.
        /// </summary>
        /// <param name="friendName">The name of the friend that is being added.</param>
        public void HandleActionAddFriend(string friendName)
        {
            if (string.Equals(friendName, Name, StringComparison.CurrentCultureIgnoreCase))
            {
                ChatPacket.SendServerMessage(Session, "Sorry, but you can't be friends with yourself.", ChatMessageType.Broadcast);
            }

            // Check if friend exists
            if (Friends.SingleOrDefault(f => string.Equals(f.Name, friendName, StringComparison.CurrentCultureIgnoreCase)) != null)
            {
                ChatPacket.SendServerMessage(Session, "That character is already in your friends list", ChatMessageType.Broadcast);
            }

            // TODO: check if player is online first to avoid database hit??
            // Get character record from DB
            throw new System.NotImplementedException();

            /* TODO fix for new EF model
             * DatabaseManager.Shard.GetObjectInfoByName(friendName, ((ObjectInfo friendInfo) =>
             * {
             *  if (friendInfo == null)
             *  {
             *      ChatPacket.SendServerMessage(Session, "That character does not exist", ChatMessageType.Broadcast);
             *      return;
             *  }
             *
             *  Friend newFriend = new Friend();
             *  newFriend.Name = friendInfo.Name;
             *  newFriend.Id = new ObjectGuid(friendInfo.Guid);
             *
             *  // Save to DB, assume success
             *  DatabaseManager.Shard.AddFriend(Guid.Low, newFriend.Id.Low, (() =>
             *  {
             *      // Add to character object
             *      Character.AddFriend(newFriend);
             *
             *      // Send packet
             *      Session.Network.EnqueueSend(new GameEventFriendsListUpdate(Session, GameEventFriendsListUpdate.FriendsUpdateTypeFlag.FriendAdded, newFriend));
             *  }));
             * }));*/
        }
Пример #26
0
        public static void HandleTeleportLOC(Session session, params string[] parameters)
        {
            try
            {
                uint cell;

                if (parameters[0].StartsWith("0x"))
                {
                    string strippedcell = parameters[0].Substring(2);
                    cell = (uint)int.Parse(strippedcell, System.Globalization.NumberStyles.HexNumber);
                }
                else
                {
                    cell = (uint)int.Parse(parameters[0], System.Globalization.NumberStyles.HexNumber);
                }


                var positionData = new float[7];
                for (uint i = 0u; i < 7u; i++)
                {
                    float position;
                    if (!float.TryParse(parameters[i + 1].Trim(new Char[] { ' ', '[', ']' }), out position))
                    {
                        return;
                    }

                    positionData[i] = position;
                }

                session.Player.Teleport(new Position(cell, positionData[0], positionData[1], positionData[2], positionData[4], positionData[5], positionData[6], positionData[3]));
            }
            catch (Exception)
            {
                ChatPacket.SendServerMessage(session, "Invalid arguments for @teleloc", ChatMessageType.Broadcast);
                ChatPacket.SendServerMessage(session, "Hint: @teleloc follows the same number order as displayed from @loc output", ChatMessageType.Broadcast);
                ChatPacket.SendServerMessage(session, "Usage: @teleloc cell [x y z] (qw qx qy qz)", ChatMessageType.Broadcast);
                ChatPacket.SendServerMessage(session, "Example: @teleloc 0x7F0401AD [12.319900 -28.482000 0.005000] -0.338946 0.000000 0.000000 -0.940806", ChatMessageType.Broadcast);
                ChatPacket.SendServerMessage(session, "Example: @teleloc 0x7F0401AD 12.319900 -28.482000 0.005000 -0.338946 0.000000 0.000000 -0.940806", ChatMessageType.Broadcast);
                ChatPacket.SendServerMessage(session, "Example: @teleloc 7F0401AD 12.319900 -28.482000 0.005000", ChatMessageType.Broadcast);
            }
        }
Пример #27
0
        /// <summary>
        /// Handle the !Unf request
        /// </summary>
        /// <param name="chatEvent"></param>
        private void HandleUnfCommand(ChatEvent chatEvent)
        {
            // Create the chat response message
            ChatPacket response = new ChatPacket();

            // Set the player Identifier top reply to
            response.Event.PlayerId  = chatEvent.PlayerId;
            response.Event.ChatType  = ChatTypes.Private;
            response.Event.SoundCode = SoundCodes.Ohhhhh;

            if (chatEvent.PlayerName == "PsyOps")
            {
                response.Event.Message = "Unf always and forever!";
            }
            else
            {
                response.Event.Message = "Im sorry silly lil person, I belong to PsyOps!";
            }

            m_session.TransmitPacket(response);
        }
Пример #28
0
        public void SpendXp(Skill skill, uint amount)
        {
            uint baseValue = 0;
            uint result    = SpendSkillXp(character.Skills[skill], amount);

            if (result > 0u)
            {
                uint ranks        = character.Skills[skill].Ranks;
                uint newValue     = character.Skills[skill].UnbuffedValue;
                var  status       = character.Skills[skill].Status;
                var  xpUpdate     = new GameMessagePrivateUpdatePropertyInt64(Session, PropertyInt64.AvailableExperience, character.AvailableExperience);
                var  ablityUpdate = new GameMessagePrivateUpdateSkill(Session, skill, status, ranks, baseValue, result);
                var  soundEvent   = new GameMessageSound(this.Guid, Network.Enum.Sound.AbilityIncrease, 1f);
                var  message      = new GameMessageSystemChat($"Your base {skill} is now {newValue}!", ChatMessageType.Broadcast);
                NetworkManager.SendWorldMessages(Session, new GameMessage[] { xpUpdate, ablityUpdate, soundEvent, message });
            }
            else
            {
                ChatPacket.SendServerMessage(Session, $"Your attempt to raise {skill} has failed.", ChatMessageType.Broadcast);
            }
        }
Пример #29
0
        public static void Handle(ClientMessage message, Session session)
        {
            var target   = message.Payload.ReadString16L();
            var position = new Position(message.Payload);

            // this check is also done clientside, see: PlayerDesc::PlayerIsPSR
            if (!session.Player.IsAdmin && !session.Player.IsArch && !session.Player.IsPsr)
            {
                return;
            }

            uint cell  = position.LandblockId.Raw;
            uint cellX = (cell >> 3);

            // TODO: Wrap command in a check to confirm session.character IsAdvocate or higher access level

            // TODO: Maybe output to chat window coords teleported to.
            // ChatPacket.SendSystemMessage(session, $"Teleporting to: 0.0[N/S], 0.0[E/W]");
            ChatPacket.SendServerMessage(session, "Teleporting...", ChatMessageType.Broadcast);
            session.Player.Teleport(position);
        }
Пример #30
0
        /// <summary>
        /// Remove a single friend and update the database.
        /// </summary>
        /// <param name="friendId">The ObjectGuid of the friend that is being removed</param>
        public void HandleActionRemoveFriend(ObjectGuid friendId)
        {
            Friend friendToRemove = Friends.SingleOrDefault(f => f.Id.Low == friendId.Low);

            // Not in friend list
            if (friendToRemove == null)
            {
                ChatPacket.SendServerMessage(Session, "That character is not in your friends list!", ChatMessageType.Broadcast);
                return;
            }

            // Remove from DB
            DatabaseManager.Shard.DeleteFriend(Guid.Low, friendId.Low, (() =>
            {
                // Remove from character object
                HandleActionRemoveFriend(friendId);

                // Send packet
                Session.Network.EnqueueSend(new GameEventFriendsListUpdate(Session, GameEventFriendsListUpdate.FriendsUpdateTypeFlag.FriendRemoved, friendToRemove));
            }));
        }
Пример #31
0
        private void HandleVoteKick(GameSession session, PacketReader packet)
        {
            long charId = packet.ReadLong();

            Party party = GameServer.PartyManager.GetPartyById(session.Player.PartyId);

            if (party == null)
            {
                return;
            }

            Player kickedPlayer = GameServer.Storage.GetPlayerById(charId);

            if (kickedPlayer == null)
            {
                return;
            }

            party.BroadcastPacketParty(ChatPacket.Send(session.Player, session.Player.Name + " voted to kick " + kickedPlayer.Name, ChatType.NoticeAlert3));
            //TODO: Keep a counter of vote kicks for a player?
        }
Пример #32
0
 public static void HandleDebugEcho(Session session, params string[] parameters)
 {
     try
     {
         if (Enum.TryParse(parameters[1], true, out ChatMessageType cmt))
         {
             if (Enum.IsDefined(typeof(ChatMessageType), cmt))
             {
                 ChatPacket.SendServerMessage(session, parameters[0], cmt);
             }
             else
             {
                 ChatPacket.SendServerMessage(session, parameters[0], ChatMessageType.Broadcast);
             }
         }
     }
     catch (Exception)
     {
         ChatPacket.SendServerMessage(session, parameters[0], ChatMessageType.Broadcast);
     }
 }
Пример #33
0
        /// <summary>
        /// Handle the !help request
        /// </summary>
        /// <param name="chatEvent"></param>
        private void HandleBotHelpCommand(ChatEvent chatEvent)
        {
            // Create the chat response message
            ChatPacket response = new ChatPacket();

            // Set the player Identifier top reply to
            response.Event.PlayerId = chatEvent.PlayerId;
            response.Event.ChatType = ChatTypes.Private;

            // Show the header block
            response.Event.Message = "< ===================== >";
            m_session.TransmitPacket(response);
            response.Event.Message = "<    BattleCore Help    >";
            m_session.TransmitPacket(response);
            response.Event.Message = "< ===================== >";
            m_session.TransmitPacket(response);

            if (chatEvent.ModLevel >= ModLevels.SMod)
            {
                response.Event.Message = "< !blist              | Lists loaded and available behaviors";
                m_session.TransmitPacket(response);
                response.Event.Message = "< !load               | Load a behavior ";
                m_session.TransmitPacket(response);
                response.Event.Message = "< !unload             | Unload a behavior";
                m_session.TransmitPacket(response);
                response.Event.Message = "< !listbots           | list available bots";
                m_session.TransmitPacket(response);
                response.Event.Message = "< !spawn Bot:Arena    | Spawn a new bot in arena";
                m_session.TransmitPacket(response);
                response.Event.Message = "< !kill               | kills the bot (must be PM)";
                m_session.TransmitPacket(response);
            }

            // Show All Available Help Commands
            response.Event.Message = "< !info               | Display core information";
            m_session.TransmitPacket(response);

            response.Event.Message = "< ===================== >";
            m_session.TransmitPacket(response);
        }
Пример #34
0
        private static void HandleJoin(GameSession session, PacketReader packet)
        {
            Party party = GameServer.PartyManager.GetPartyById(session.Player.PartyId);

            if (party == null)
            {
                return;
            }

            long clubId = packet.ReadLong();

            Club club = GameServer.ClubManager.GetClubById(clubId);

            if (club == null)
            {
                return;
            }

            if (club.Leader.CharacterId == session.Player.CharacterId)
            {
                party.BroadcastPacketParty(ClubPacket.UpdatePlayerClubList(session.Player, club));
            }
            else
            {
                int response = packet.ReadInt(); // 0 = accept, 76 (0x4C) = reject

                if (response == 0)
                {
                    party.BroadcastPacketParty(ClubPacket.ConfirmCreate(club.Id));
                    club.Leader.Session.Send(ClubPacket.Join(session.Player, club));
                    club.Leader.Session.Send(ClubPacket.Establish(club));
                    // TODO add member to club (club.AddMember(session.Player);)
                }
                else
                {
                    // TODO update to proper rejection packet
                    party.Leader.Session.Send(ChatPacket.Send(party.Leader, session.Player.Name + " declined the invitation.", ChatType.NoticeAlert2));
                }
            }
        }
Пример #35
0
 private void button3_Click(object sender, EventArgs e)
 {
     ChatPacket toSend = new ChatPacket(0003, "Bobby", ChatLine.Text, this.GameID.ToString());
     clientGui.Send(toSend);
     ChatLine.Clear();
 }
Пример #36
0
		private void Logout()
		{
			try
			{
				if (_clientSocket != null)
				{
					// Initialize a packet object to store the data to be sent.
					var sendData = new ChatPacket()
					{
						ChatDataIdentifier = DataIdentifier.LogOut,
						ChatName = _chatName,
						ChatMessage = null
					};

					// Get packet as byte array.
					var data = sendData.Serialize();

					// Send packet to the server.
					_clientSocket.SendTo(data, 0, data.Length, SocketFlags.None, _serverEndPoint);
				}
			}
			catch (Exception ex)
			{
				Logger.WriteLine("Logout error!");
				Logger.WriteLine(ex.Message);
			}
			finally
			{
				// Close the socket.
				_clientSocket.Close();
				_clientSocket = null;
			}
		}
Пример #37
0
 private void toClient_Click(object sender, EventArgs e)
 {
     ChatPacket sendPacket = new ChatPacket(0000, "Server", "Welcome to Scrabble!", "0");
     chatToClients(sendPacket);
 }