public override Handler DoPrice(ParsedInput input) { if (input.Words.Length == 1) { return(Handler.HANDLED(MESSAGE_ENUM.ERROR_WHAT, "Price".ToParagraph())); } if (IsDead) { return(Handler.HANDLED(MESSAGE_ENUM.ERROR_PLAYER_IS_DEAD)); } // verify that we're in a shop RoomShop shop = CurrentRoom as RoomShop; if (shop == null) { return(Handler.HANDLED(MESSAGE_ENUM.ERROR_NOT_A_SHOP)); } Handler handler = new Handler(RETURN_CODE.HANDLED, MESSAGE_ENUM.ERROR_BAD_ITEM); foreach (EntityHand hand in Hands.Hands) { handler = shop.DoPriceItem(hand.Item, input.Words[1]); if (handler.MessageCode != MESSAGE_ENUM.ERROR_BAD_ITEM) { break; } } return(handler); }
public override Handler DoSell(ParsedInput input) { if (input.Words.Length == 1) { return(Handler.HANDLED(MESSAGE_ENUM.ERROR_WHAT, "Sell".ToParagraph())); } if (IsDead) { return(Handler.HANDLED(MESSAGE_ENUM.ERROR_PLAYER_IS_DEAD)); } // verify that we're in a shop RoomShop shop = CurrentRoom as RoomShop; if (shop == null) { return(Handler.HANDLED(MESSAGE_ENUM.ERROR_NOT_A_SHOP)); } // attempt to sell item // TODO: find player item first, THEN attempt to sell to shop return(shop.DoBuyFromEntity(this, input.Words[1])); }
public override Handler DoBuy(ParsedInput input) { // if (input.Words.Length == 1) { return Handler.HANDLED(MESSAGE_ENUM.ERROR_WHAT, "Buy".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)); } RoomShop shop = CurrentRoom as RoomShop; if (shop == null) { return(Handler.HANDLED(MESSAGE_ENUM.ERROR_NOT_A_SHOP)); } // "buy" lists items for sale if (input.Words.Length == 1) { return(Handler.HANDLED(MESSAGE_ENUM.BASE_STRING, shop.SoldItemsParagraph)); } // scenario 1: buy <number> // <number> corresponds with the list obtained through SoldItemsString // attempt to parse second word as number int itemIndex; Item boughtItem = null; int nPrice = -1; if (int.TryParse(input.Words[1], out itemIndex)) { if (itemIndex < 1 || itemIndex > shop.SoldItems.Count) { return(Handler.HANDLED(MESSAGE_ENUM.ERROR_BAD_INPUT)); } nPrice = (int)(shop.SoldItems[itemIndex - 1].Value * shop.SellsAt); if (Gold < nPrice) { return(Handler.HANDLED(MESSAGE_ENUM.ERROR_NOT_ENOUGH_GOLD, shop.SoldItems[itemIndex - 1].NameAsParagraph)); } boughtItem = shop.SoldItems[itemIndex - 1].Clone(); } // TODO: scenario 2: parse second word as item keyword // TODO: find item with merged input // MergeInput(int nStartingIndex) // FindItem(string, bool bMultiWord = false) // - if true, match string to full item name if (boughtItem == null) { return(Handler.HANDLED(MESSAGE_ENUM.ERROR_BAD_INPUT)); } if (Hands.Full) { return(Handler.HANDLED(MESSAGE_ENUM.ERROR_HANDS_ARE_FULL)); } EntityHand hand = Hands.GetEmptyHand(); hand.Item = boughtItem; Gold -= nPrice; return(Handler.HANDLED(MESSAGE_ENUM.PLAYER_BUY, boughtItem.NameWithIndefiniteArticle, nPrice.ToString().ToParagraph())); }