/// <summary> /// Attack a character /// </summary> /// <param name="attackingCharacter">The attacking character</param> /// <param name="targetItem">The target string</param> public static void Attack(SMCharacter attackingCharacter, SMCharacter targetCharacter) { // Check that the target has hitpoints if (targetCharacter.Attributes.HitPoints > 0) { // Work out if this is an NPC or not SMRoom room = attackingCharacter.GetRoom(); SMNPC targetNPC = room.GetNPCs().FirstOrDefault(checkChar => checkChar.GetFullName() == targetCharacter.GetFullName()); if (targetNPC != null) { room.ProcessNPCReactions("PlayerCharacter.AttacksThem", attackingCharacter); } List <SMNPC> NPCsInRoom = targetCharacter.GetRoom().GetNPCs().FindAll(npc => npc.GetFullName() != attackingCharacter.GetFullName()); if (NPCsInRoom.Count > 0) { room.ProcessNPCReactions("PlayerCharacter.Attack", attackingCharacter); } // Use the skill attackingCharacter.UseSkill(GetSkillToUse(attackingCharacter), targetCharacter.GetFullName(), true); } else // Report that the target is already dead... { attackingCharacter.sendMessageToPlayer(ResponseFormatterFactory.Get().General($"{targetCharacter.GetFullName()} is already dead!")); } }
/// <summary> /// Gets a character object, and loads it into memory. /// </summary> /// <param name="userID">userID is based on the id from the slack channel</param> /// <param name="newCharacter">newCharacter to change the output of the text based on whether the character is new or not</param> /// <returns>String message for usage</returns> public string GetCharacterOLD(string userID, bool newCharacter = false) { List <SMCharacter> smcs = (List <SMCharacter>)HttpContext.Current.Application["SMCharacters"]; SMCharacter character = smcs.FirstOrDefault(smc => smc.UserID == userID); if ((character != null) && (!newCharacter)) { return("You're already logged in!"); } else { string path = FilePathSystem.GetFilePath("Characters", "Char" + userID); if (File.Exists(path)) { SMCharacter smc = new SMCharacter(); using (StreamReader r = new StreamReader(path)) { string json = r.ReadToEnd(); smc = JsonConvert.DeserializeObject <SMCharacter>(json); } SMRoom room = smc.GetRoom(); if (room != null) { //TODO room.Announce() someone has entered the room or new player ect... } smcs.Add(smc); HttpContext.Current.Application["SMCharacters"] = smcs; if (!newCharacter) { return("Welcome back " + smc.FirstName); } string returnString = "Welcome to SlackMud!\n"; returnString += "We've created your character in the magical world of Arrelvia!"; // TODO, use a welcome script! // TODO, get room details return(returnString); } else { // If the UserID doesn't have a character already, inform them that they need to create one. return("You do not have a character yet, you need to create one..."); } } }
/// <summary> /// Logs someone in with the Slack UserID /// </summary> /// <param name="userID">Slack UserID</param> /// <returns>A string response</returns> public string Login(string userID, bool newCharacter = false, string responseURL = null, string connectionService = "slack", string password = null) { // Variables for the return string string returnString = ""; // Get all current characters List <SMCharacter> smcs = (List <SMCharacter>)HttpContext.Current.Application["SMCharacters"]; SMCharacter character = smcs.FirstOrDefault(smc => smc.UserID == userID); // Get the right path, and work out if the file exists. string path = FilePathSystem.GetFilePath("Characters", "Char" + userID); // Check if the character exists.. if (!File.Exists(path)) { // If they don't exist inform the person as to how to create a new user returnString = ResponseFormatterFactory.Get().General("You must create a character, to do so, use the command /sm CreateCharacter FIRSTNAME,LASTNAME,SEX,AGE"); returnString += ResponseFormatterFactory.Get().General("i.e. /sm CreateCharacter Paul,Hutson,m,34"); // return information [need to return this without a player!] return(returnString); } else { if ((character != null) && (!newCharacter)) { returnString = ResponseFormatterFactory.Get().General("You're already logged in!"); return(returnString); } else { // Get the character character = GetCharacter(userID, password); // Reset the character activity, just in case! character.CurrentActivity = null; // Set the response URL of the character if (responseURL != null) { character.ResponseURL = responseURL; } // Set the connection service character.ConnectionService = connectionService; // Set the last login datetime character.LastLogindate = DateTime.Now; // Check that the currency is OK. if (character.Currency == null) { character.Currency = new SMCurrency(); character.Currency.AmountOfCurrency = 50; } if (!newCharacter) { returnString = ResponseFormatterFactory.Get().Bold("Welcome back " + character.FirstName + " " + character.LastName + " (you are level " + character.CalculateLevel() + ")", 1); } else { returnString = ResponseFormatterFactory.Get().Bold("Welcome to SlackMud!"); returnString += ResponseFormatterFactory.Get().General("We've created your character in the magical world of Arrelvia!"); // TODO, use a welcome script! } // Check if the player was last in an instanced location. if (character.RoomID.Contains("||")) { // Find the details of the original room type SMRoom originalRoom = GetRoom(character.RoomID.Substring(0, character.RoomID.IndexOf("||"))); character.RoomID = originalRoom.InstanceReloadLocation; } // Clear out any old party references character.PartyReference = null; // Get the location details returnString += GetLocationDetails(character.RoomID, character); // Clear old responses an quests from the character character.ClearQuests(); if (character.NPCsWaitingForResponses != null) { character.NPCsWaitingForResponses.RemoveAll(a => a.NPCID != ""); } // Return the text output character.sendMessageToPlayer(returnString); // Walk the character in SMRoom room = character.GetRoom(); if (room != null) { // Announce someone has walked into the room. room.Announce(ResponseFormatterFactory.Get().Italic(character.GetFullName() + " walks in.")); room.ProcessNPCReactions("PlayerCharacter.Enter", character); } return(""); } } }