Example #1
0
        public override void UseItemOn(Character character, Character user)
        {
            var player = character as Player;

            if (player != null)
            {
                // Key items cannot be used; send a message notifying the user
                var packet = new ServerSendGameMessagePacket(GameMessage.ItemCannotBeUsed, new List<string>());
                player.Client.Send(packet);
            }
        }
Example #2
0
        public static void OnChatMessage(GameClient client, ClientChatMessagePacket packet)
        {
            var player = client.HeroEntity;
            var zone = player.Zone;

            // Grab the service and fire off to it
            var chatService = zone.GetGameSystem<ChatService>();

            bool result;

            try
            {
                result = chatService.HandleMessage(player, packet);
            }
            catch (Exception exception)
            {
                // It's invalid, we should kick out and let the player know they need to retry
                var msg = new ServerSendGameMessagePacket(GameMessage.ChatCommandInvalid,
                    new List<string>() {packet.Message});
                player.Client.Send(msg);
                return;
            }

            if (!result)
            {
                var channel = ChatManager.Current.GetChannel(player.Zone.ChatChannel.Id);

                packet.Message = packet.Message.Trim();
                if (channel != null && packet.Message != string.Empty)
                {
                    // Strip out any nasty HTML tags that a player might try and inject
                    packet.Message = HtmlTools.StripTagsCharArray(packet.Message);

                    // Send the actual message to the user as requested
                    var newPacket = new ServerChatMessagePacket(player.Name, packet.Message, channel.Id);
                    channel.SendMessage(newPacket);
                }

            }
        }
        private void PlayerOnExperienceChanged(int newValue, int oldValue, Player player)
        {
            if (newValue > oldValue)
            {

                var packet = new ServerSendGameMessagePacket(GameMessage.GainExperience, new List<string>()
                {
                    (newValue - oldValue).ToString()
                });

                player.Client.Send(packet);
            }
        }
        private void PlayerOnEquipmentChanged(Equipment equipment, Player player, EquipmentSlot slot)
        {
            var request = new ServerEquipmentUpdatePacket(equipment, slot);
            player.Client.Send(request);

            // Send notification to the client
            var request2 = new ServerSendGameMessagePacket(GameMessage.EquipmentChanged);
            player.Client.Send(request2);
        }
Example #5
0
        private void OnProgressChanged(Player player, QuestLogEntry entry, int index, int progress)
        {
            // We can choose to give rewards here when all requirements have suddenly been met
            var step = entry.CurrentStep;

            // Update the user about their progress
            var progressUpdate = new ServerQuestProgressUpdate(entry.QuestInfo.QuestId, index, progress);
            player.Client.Send(progressUpdate);

            entry.Quest.Script.OnQuestStepCompleted(player, step);

            if (step.IsRequirementsMet(player, entry.Progress))
            {
                if (!entry.IsLastStep)
                {
                    // Advance the step and take any requirements
                    step.TakeRequirements(player);
                    entry.AdvanceStep();

                    var message = new ServerSendGameMessagePacket(GameMessage.QuestLogUpdated, new List<string>() { entry.Quest.Name });
                    player.Client.Send(message);

                    var questUpdate = new ServerSendQuestListPacket(player.QuestLog);
                    player.Client.Send(questUpdate);

                }

                    // If is last step, only advance if we can give reward
                else
                {
                    var canGiveRewards = entry.Quest.CanGiveReward(player);

                    if (canGiveRewards)
                    {
                        step.TakeRequirements(player);
                        entry.AdvanceStep();
                    }

                    else
                    {
                        // Let them know for some reason the rewards were not met
                        var message = new ServerSendGameMessagePacket(GameMessage.QuestCannotGiveReward);
                        player.Client.Send(message);
                    }

                }

            }

            // If there's no more steps possible to get through, give the reward
            if (entry.CurrentStep == null)
            {
                // Attempt to complete the quest
                var success = entry.Quest.TryCompleteQuest(player);

                if (success)
                {
                    var message = new ServerSendGameMessagePacket(GameMessage.QuestCompleted, new List<string>() { entry.Quest.Name});
                    player.Client.Send(message);

                    var questUpdate = new ServerSendQuestListPacket(player.QuestLog);
                    player.Client.Send(questUpdate);
                }

                else
                {
                    var message = new ServerSendGameMessagePacket(GameMessage.QuestCannotGiveReward);
                    player.Client.Send(message);
                }

            }
        }
Example #6
0
        /// <summary>
        /// Gives a player a quest. If the quest was already completed, it will be marked as in progress once again.
        /// If the quest has not been seen before, it will be marked as such.
        /// </summary>
        /// <param name="quest"></param>
        /// <param name="player"></param>
        public void GivePlayerQuest(Quest quest, Player player)
        {
            // Attempt to give a quest to the player
            player.QuestLog.TryAddQuest(quest);

            // Send a notification to let them know
            var message = new ServerSendGameMessagePacket(GameMessage.NewQuest);
            player.Client.Send(message);

            Logger.Instance.Info("{0} has been given the quest {1} [#{2}]", player.Name, quest.Name, quest.QuestId);
        }
Example #7
0
 /// <summary>
 /// Sends a system message to everyone in the current zone.
 /// </summary>
 /// <param name="gameMessage"></param>
 /// <param name="args"></param>
 public void SendMessage(GameMessage gameMessage, List<string> args)
 {
     var packet = new ServerSendGameMessagePacket(gameMessage, args);
     Clients.ForEach(x => x.Send(packet));
 }