public static Paragraph Get(MESSAGE_ENUM message, Paragraph p1 = null, Paragraph p2 = null, Paragraph p3 = null, Paragraph p4 = null) { if (message == MESSAGE_ENUM.NO_MESSAGE) { return(null); } return(Process(MessageDictionary[message].RandomListItem(), p1, p2, p3, p4)); }
public override Handler DoPut(ParsedInput input) { // TODO: put <item> on <surface> //// put <item> in <container> if (input.Words.Length < 4) { return(Handler.HANDLED(MESSAGE_ENUM.ERROR_BAD_INPUT)); } if (input.Words[2] != "in") { return(Handler.HANDLED(MESSAGE_ENUM.ERROR_BAD_INPUT)); } if (IsDead) { return(Handler.HANDLED(MESSAGE_ENUM.ERROR_PLAYER_IS_DEAD)); } // TODO: put <item> in MY <container> // if (input.Words.Length == 5 && input.Words[3] == "my") { return Handler.HANDLED(MESSAGE_ENUM.ERROR_NEED_TO_IMPLEMENT); } // must be holding item // don't remove item here Item item = Hands.GetItem(input.Words[1], false); if (item == null) { return(Handler.HANDLED(MESSAGE_ENUM.ERROR_NOT_CARRYING_ITEM)); } MESSAGE_ENUM message = MESSAGE_ENUM.PLAYER_PUT_IN_PLAYER_CONTAINER; ItemContainer container = ContainerSlots.GetContainer(input.Words[3]); if (container == null) { container = Hands.GetItem(input.Words[3], false, ITEM_TYPE.CONTAINER_ANY) as ItemContainer; } if (container == null || container.Equals(item)) { message = MESSAGE_ENUM.PLAYER_PUT_IN_GROUND_CONTAINER; container = CurrentRoom.Items.Find(input.Words[3], ITEM_TYPE.CONTAINER_ANY) as ItemContainer; } if (container == null) { return(Handler.HANDLED(MESSAGE_ENUM.ERROR_BAD_INPUT)); } if (container.Closed) { return(Handler.HANDLED(MESSAGE_ENUM.ERROR_CONTAINER_CLOSED, container.NameAsParagraph)); } item = Hands.GetItem(input.Words[1], true); container.Items.Add(item); return(Handler.HANDLED(message, item.NameAsParagraph, container.NameAsParagraph)); }
private static async Task LoadMessagesFromXML() { foreach (MESSAGE_ENUM message in Enum.GetValues(typeof(MESSAGE_ENUM))) { MessageDictionary.Add(message, new List <string>()); } var folder = await Windows.ApplicationModel.Package.Current.InstalledLocation.GetFolderAsync("xml\\messages"); var file = await folder.GetFileAsync("messages.xml"); var stream = await file.OpenStreamForReadAsync(); XDocument messagesDocument = XDocument.Load(stream); await stream.FlushAsync(); var messageNodes = from messages in messagesDocument .Elements("messages") .Elements("message") select messages; foreach (var messageNode in messageNodes) { MESSAGE_ENUM message = (MESSAGE_ENUM)(Enum.Parse(typeof(MESSAGE_ENUM), messageNode.Element("id").Value)); List <string> messageList = MessageDictionary[message]; var stringNodes = from strings in messageNode .Elements("strings") .Elements("string") select strings; foreach (var stringNode in stringNodes) { // XML parsing treats \n as literal text messageList.Add(stringNode.Value.Replace("\\n", "\n")); } } // DEBUG MessageDictionary[MESSAGE_ENUM.DEBUG_TODO].Add("DEBUG: On the TODO list!"); // END DEBUG }
public override Handler DoRemove(ParsedInput input) { if (input.Words.Length == 1) { return(Handler.HANDLED(MESSAGE_ENUM.ERROR_WHAT, "Remove".ToParagraph())); } if (input.Words.Length > 2) { return(Handler.HANDLED(MESSAGE_ENUM.ERROR_BAD_INPUT)); } if (IsDead) { return(Handler.HANDLED(MESSAGE_ENUM.ERROR_PLAYER_IS_DEAD)); } EntityHand hand = Hands.GetEmptyHand(); if (hand == null) { return(Handler.HANDLED(MESSAGE_ENUM.ERROR_HANDS_ARE_FULL)); } REMOVE_RESULT result = Body.DoRemove(input.Words[1], hand); if (result == REMOVE_RESULT.NOT_REMOVED) { result = ContainerSlots.DoRemove(input.Words[1], hand); } if (result == REMOVE_RESULT.NOT_REMOVED) { return(Handler.HANDLED(MESSAGE_ENUM.ERROR_BAD_INPUT)); } MESSAGE_ENUM message = Statics.ItemTypeToRemoveMessage[hand.Item.Type]; return(Handler.HANDLED(message, hand.Item.NameAsParagraph)); }
public static void Display(MESSAGE_ENUM message, Paragraph p1 = null, Paragraph p2 = null, Paragraph p3 = null, Paragraph p4 = null) { MessageQueue.Enqueue(Messages.Get(message, p1, p2, p3, p4)); }
public override Handler DoGet(ParsedInput input) { // take <item> from <container> if (input.Words.Length == 4) { return(DoGetExtended(input)); } // take <item> if (input.Words.Length == 1) { return(Handler.HANDLED(MESSAGE_ENUM.ERROR_WHAT, input.Words[0].ToSentenceCase().ToParagraph())); } if (IsDead) { return(Handler.HANDLED(MESSAGE_ENUM.ERROR_PLAYER_IS_DEAD)); } ItemContainer container = null; MESSAGE_ENUM message = MESSAGE_ENUM.PLAYER_GET; // find item in current room Item item = CurrentRoom.Items.Find(input.Words[1]); if (item == null) { // find item in a room container List <Item> containers = CurrentRoom.Items.GetItemsOfType(ITEM_TYPE.CONTAINER_ANY); for (int i = containers.Count() - 1; i >= 0; i--) { container = containers[i] as ItemContainer; item = container.Items.Find(input.Words[1]); if (item != null) { message = MESSAGE_ENUM.PLAYER_GET_FROM_ROOM_CONTAINER; break; } } } if (item == null) { message = MESSAGE_ENUM.PLAYER_GET_FROM_CONTAINER; foreach (EntityHand hand in Hands.Hands) { if (hand.Item == null) { continue; } if (hand.Item.IsType(ITEM_TYPE.CONTAINER_ANY)) { item = container.Items.Find(input.Words[1]); if (item != null) { break; } } } } if (item == null) { item = ContainerSlots.FindItem(input.Words[1]); } if (item == null) { // item not found return(Handler.HANDLED(MESSAGE_ENUM.ERROR_BAD_ITEM)); } // item found; attempt to put in hands if (Hands.Full) { return(Handler.HANDLED(MESSAGE_ENUM.ERROR_HANDS_ARE_FULL)); } EntityHand emptyHand = Hands.GetEmptyHand(); emptyHand.Item = item; // if we found in a container, remove from container if (container != null) { container.Items.RemoveItem(item); } // otherwise, remove from room else { CurrentRoom.Items.Remove(item); } return(Handler.HANDLED(message, item.NameWithIndefiniteArticle, container == null ? null : container.NameAsParagraph)); }
public override Handler DoAttack(ParsedInput input) { if (input.Words.Length == 1) { return(Handler.HANDLED(MESSAGE_ENUM.ERROR_WHAT, input.Words[0].ToSentenceCase().ToParagraph())); } if (IsDead) { return(Handler.HANDLED(MESSAGE_ENUM.ERROR_PLAYER_IS_DEAD)); } string strNPCName = ""; int ordinal = 0; if (input.Words.Length == 2) { strNPCName = input.Words[1]; } else if (input.Words.Length == 3) { if (!Statics.OrdinalStringToInt.TryGetValue(input.Words[1], out ordinal)) { return(Handler.HANDLED(MESSAGE_ENUM.ERROR_BAD_INPUT)); } strNPCName = input.Words[2]; } EntityNPCBase npc = CurrentRoom.NPCs.FindLiving(strNPCName, ordinal); if (npc == null) { npc = CurrentRoom.NPCs.Find(strNPCName, ordinal); } if (npc == null) { return(Handler.HANDLED(MESSAGE_ENUM.ERROR_BAD_INPUT)); } if (npc.IsDead) { return(Handler.HANDLED(MESSAGE_ENUM.ERROR_NPC_ALREADY_DEAD, npc.NameBaseAsParagraph)); } Item weapon = Hands.GetAnyItem(ITEM_TYPE.WEAPON); // TODO: fix this if (weapon == null) { if (Hands.Hands[0].Item != null) { return(Handler.HANDLED(MESSAGE_ENUM.ERROR_PLAYER_ATTACKS_BAD_WEAPON, Hands.Hands[0].Item.NameAsParagraph)); } else if (Hands.Hands[1].Item != null) { return(Handler.HANDLED(MESSAGE_ENUM.ERROR_PLAYER_ATTACKS_BAD_WEAPON, Hands.Hands[1].Item.NameAsParagraph)); } } Paragraph pWeapon = weapon == null ? "fist".ToParagraph() : weapon.NameAsParagraph; // calculate damage MESSAGE_ENUM message = MESSAGE_ENUM.PLAYER_ATTACKS_NPC; int damage = AttackPower - npc.Body.DefensePower; npc.Attributes.CurrentHealth -= damage; if (npc.IsDead) { Paragraph xpPara = Game.Player.ProcessExperience(npc); return(Handler.HANDLED(MESSAGE_ENUM.PLAYER_KILLS_NPC, npc.NameBaseAsParagraph, pWeapon, damage.ToString().ToParagraph(), xpPara)); } return(Handler.HANDLED(message, npc.NameBaseAsParagraph, pWeapon, damage.ToString().ToParagraph())); }
public override Handler DoDrink(ParsedInput input) { if (input.Words.Length == 1) { return(Handler.HANDLED(MESSAGE_ENUM.ERROR_WHAT, "Drink".ToParagraph())); } else if (input.Words.Length > 2) { return(Handler.HANDLED(MESSAGE_ENUM.ERROR_BAD_INPUT)); } if (IsDead) { return(Handler.HANDLED(MESSAGE_ENUM.ERROR_PLAYER_IS_DEAD)); } EntityHand hand = Hands.GetHandWithItem(input.Words[1], ITEM_TYPE.DRINK); if (hand != null) { MESSAGE_ENUM message = MESSAGE_ENUM.PLAYER_DRINK; // hand is holding a drink ItemDrink drink = hand.Item as ItemDrink; if (drink.NumberOfDrinks == 1) { message = MESSAGE_ENUM.PLAYER_DRINK_LAST; hand.Item = null; } else { drink.NumberOfDrinks--; } return(Handler.HANDLED(message, drink.NameAsParagraph, drink.MagicPerDrink.ToString().ToParagraph(), drink.NumberOfDrinks.ToString().ToParagraph())); } else { // not holding a drink; check room ItemDrink drink = CurrentRoom.Items.Find(input.Words[1], ITEM_TYPE.DRINK) as ItemDrink; if (drink != null) { MESSAGE_ENUM message = MESSAGE_ENUM.PLAYER_DRINK_GROUND_ITEM; if (drink.NumberOfDrinks == 1) { message = MESSAGE_ENUM.PLAYER_DRINK_LAST_GROUND_ITEM; CurrentRoom.Items.Remove(drink); } else { drink.NumberOfDrinks--; } return(Handler.HANDLED(message, drink.NameAsParagraph, drink.MagicPerDrink.ToString().ToParagraph(), drink.NumberOfDrinks.ToString().ToParagraph())); } else { return(Handler.HANDLED(MESSAGE_ENUM.ERROR_BAD_INPUT)); } } }
public override Handler DoEat(ParsedInput input) { if (input.Words.Length == 1) { return(Handler.HANDLED(MESSAGE_ENUM.ERROR_WHAT, "Eat".ToParagraph())); } else if (input.Words.Length > 2) { return(Handler.HANDLED(MESSAGE_ENUM.ERROR_BAD_INPUT)); } if (IsDead) { return(Handler.HANDLED(MESSAGE_ENUM.ERROR_PLAYER_IS_DEAD)); } EntityHand hand = Hands.GetHandWithItem(input.Words[1], ITEM_TYPE.FOOD); if (hand != null) { MESSAGE_ENUM message = MESSAGE_ENUM.PLAYER_EAT; // hand is holding food ItemFood food = hand.Item as ItemFood; if (food.NumberOfBites == 1) { message = MESSAGE_ENUM.PLAYER_EAT_LAST; hand.Item = null; } else { food.NumberOfBites--; } return(Handler.HANDLED(message, food.NameAsParagraph, food.HealthPerBite.ToString().ToParagraph(), food.NumberOfBites.ToString().ToParagraph())); } else { // not holding food; check room ItemFood food = CurrentRoom.Items.Find(input.Words[1], ITEM_TYPE.FOOD) as ItemFood; if (food != null) { MESSAGE_ENUM message = MESSAGE_ENUM.PLAYER_EAT_GROUND_ITEM; if (food.NumberOfBites == 1) { message = MESSAGE_ENUM.PLAYER_EAT_LAST_GROUND_ITEM; hand.Item = null; } else { food.NumberOfBites--; } return(Handler.HANDLED(message, food.NameAsParagraph, food.HealthPerBite.ToString().ToParagraph(), food.NumberOfBites.ToString().ToParagraph())); } else { return(Handler.HANDLED(MESSAGE_ENUM.ERROR_BAD_INPUT)); } } }
public static Handler UNHANDLED(MESSAGE_ENUM message = MESSAGE_ENUM.NO_MESSAGE, Paragraph p1 = null, Paragraph p2 = null, Paragraph p3 = null, Paragraph p4 = null) { return(new Handler(RETURN_CODE.UNHANDLED, message, p1, p2, p3, p4)); }
public Handler(RETURN_CODE returnCode, MESSAGE_ENUM messageCode, Paragraph p1 = null, Paragraph p2 = null, Paragraph p3 = null, Paragraph p4 = null) { ReturnCode = returnCode; MessageCode = messageCode; Message = Messages.Get(messageCode, p1, p2, p3, p4); }