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); } }
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); }
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); } } }
/// <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); }
/// <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)); }