示例#1
0
void Player::itemsMessage() {
  vector<View::ListElem> names;
  vector<vector<Item*> > groups;
  getItemNames(creature->getPickUpOptions(), names, groups);
  if (names.size() > 1)
    privateMessage(creature->isBlind() ? "You feel here some items" : "You see here some items.");
  else if (names.size() == 1)
    privateMessage((creature->isBlind() ? string("You feel here ") : ("You see here ")) + 
        (groups[0].size() == 1 ? "a " + groups[0][0]->getNameAndModifiers(false, creature->isBlind()) :
            names[0].getText()));
}
示例#2
0
vector<Item*> Player::chooseItem(const string& text, ItemPredicate predicate, Optional<ActionId> exitAction) {
  map<ItemType, vector<Item*> > typeGroups = groupBy<Item*, ItemType>(
      creature->getEquipment().getItems(), [](Item* const& item) { return item->getType();});
  vector<View::ListElem> names;
  vector<vector<Item*> > groups;
  for (auto elem : typeDisplayOrder) 
    if (typeGroups[elem].size() > 0) {
      names.push_back(View::ListElem(getText(elem), View::TITLE));
      getItemNames(typeGroups[elem], names, groups, predicate);
    }
  Optional<int> index = model->getView()->chooseFromList(text, names, 0, exitAction);
  if (index)
    return groups[*index];
  return vector<Item*>();
}
示例#3
0
void Player::onItemsAppeared(vector<Item*> items, const Creature* from) {
  if (!creature->canPickUp(items))
    return;
  vector<View::ListElem> names;
  vector<vector<Item*> > groups;
  getItemNames(items, names, groups);
  CHECK(!names.empty());
  Optional<int> index = model->getView()->chooseFromList("Do you want to take it?", names);
  if (!index) {
    return;
  }
  int num = groups[*index].size(); //groups[index].size() == 1 ? 1 : howMany(model->getView(), groups[index].size());
  if (num < 1)
    return;
  creature->privateMessage("You take " + getPluralName(groups[*index][0], num));
  creature->pickUp(getPrefix(groups[*index], 0, num), false);
}
示例#4
0
void Player::pickUpAction(bool extended) {
    auto items = creature->getPickUpOptions();
    const Square* square = creature->getConstSquare();
    if (square->getApplyType(creature)) {
        string question = getSquareQuestion(*square->getApplyType(creature), square->getName());
        if (!question.empty() && (items.empty() || model->getView()->yesOrNoPrompt(question))) {
            creature->applySquare();
            return;
        }
    }
    vector<View::ListElem> names;
    vector<vector<Item*> > groups;
    getItemNames(creature->getPickUpOptions(), names, groups);
    if (names.empty())
        return;
    int index = 0;
    if (names.size() > 1) {
        Optional<int> res = model->getView()->chooseFromList("Choose an item to pick up:", names);
        if (!res)
            return;
        else
            index = *res;
    }
    int num = groups[index].size();
    if (num < 1)
        return;
    if (extended && num > 1) {
        Optional<int> res = model->getView()->getNumber("Pick up how many " + groups[index][0]->getName(true) + "?",
                            1, num);
        if (!res)
            return;
        num = *res;
    }
    vector<Item*> pickUpItems = getPrefix(groups[index], 0, num);
    if (creature->canPickUp(pickUpItems)) {
        creature->privateMessage("You pick up " + getPluralName(groups[index][0], num));
        creature->pickUp(pickUpItems);
    }
}