void BattleCharacterEquipment::removeEquipment(EquipmentPiece *equipment) { switch (equipment->getType()) { case EquipmentPiece::WEAPON: { Weapon *weapon = dynamic_cast<Weapon*>(equipment); switch (weapon->getSubtype()) { case Weapon::MAINHAND: setMainhand(0); break; case Weapon::OFFHAND: setOffhand(0); break; case Weapon::TWOHANDED: setTwohanded(0); break; } } break; case EquipmentPiece::ARMOR: { Armor *armor = dynamic_cast<Armor*>(equipment); switch (armor->getSubtype()) { case Armor::HELMET: setHelmet(0); break; case Armor::TORSO: setTorso(0); break; case Armor::LEGGINGS: setLeggings(0); break; case Armor::GLOVES: setGloves(0); break; case Armor::BOOTS: setBoots(0); break; } } break; case EquipmentPiece::ACCESSORY: { Accessory *accessory = dynamic_cast<Accessory*>(equipment); switch (accessory->getSubtype()) { case Accessory::EARRING: setEarring(0); break; case Accessory::NECKLACE: setNecklace(0); break; case Accessory::RING: setRing(0); break; } } break; } }
void EquipArmor(Hero* aHero) { // Inventory empty? if (aHero->Inventory.Items() == 0) { cout << "Empty inventory. Must buy some weapons first." << endl; return; } // Armors on inventory? if (aHero->Inventory.Armors() == 0) { cout << "You are not carring any armor." << endl; return; } int choise; while (true) { // Choose armor from inventory loop // Display inventory to choose cout << aHero->GetName() << endl; aHero->Inventory.DisplayArmors(); cout << "Give the item position of armor to use (0 to exit): "; cin >> choise; cin.ignore(); // Ignore new line character if (choise == 0) return; // Exit function // Our list of armors isn't in continues numbers, // so we examine if the choise is realy an armor if (aHero->Inventory.GetItemType(choise) != Item::Armor) cout << "Bad choise. Try again." << endl; else break; // Choise made } Armor* choosedArmor = (Armor*) aHero->Inventory.Remove(choise); // Check level if (choosedArmor->GetLevel() > aHero->GetLevel()) { cout << "You don't have the right level to wear " << choosedArmor->GetName() << endl; // Put armor back aHero->Inventory.Add(choosedArmor); delete choosedArmor; return; } // If hero doesn't wear any armor if (aHero->GetArmor() == 0) { aHero->SetArmor(choosedArmor); cout << "Now you are wearing " << choosedArmor->GetName() << endl; } else { cout << "You put " << aHero->GetArmor()->GetName() << " into inventory " << "and wear " << choosedArmor->GetName() << endl; aHero->Inventory.Add(aHero->GetArmor()); // Put wearing armor on inventory aHero->SetArmor(choosedArmor); } delete choosedArmor; return; }
float CardboardArmor::computeDamages(const Armor& a){ if(a.getSolidity() > solidity*2){ state -= 30.f; return 30.f; } else if(a.getSolidity() > solidity){ state -= 10.f; return 10.f; } else{ return 0.f; } }
Armor Inventory::removeArmor(string itemName, int xCord, int yCord){ Armor newArmor; for (int i = 0; i < armorSets.size(); ++i){ if (armorSets[i].getName() == itemName) { //Invoke new Weapon newArmor = armorSets[i]; newArmor.setCord(xCord, yCord); //Delete old weapon armorSets.erase(armorSets.begin() + i); } } return newArmor; }
void Shop::ShopItem::choose(squadst& customers, int& buyer) const { if (is_available()) { ledger.subtract_funds(adjusted_price(), EXPENSE_SHOPPING); switch (itemclass_) { case WEAPON: { Weapon* i = new Weapon(*weapontype[getweapontype(itemtypename_)]); customers.squad[buyer]->give_weapon(*i, &location[customers.squad[0]->base]->loot); if (i->empty()) delete i; else location[customers.squad[0]->base]->loot.push_back(i); break; } case CLIP: { Clip* i = new Clip(*cliptype[getcliptype(itemtypename_)]); customers.squad[buyer]->take_clips(*i, 1); if (i->empty()) delete i; else location[customers.squad[0]->base]->loot.push_back(i); break; } case ARMOR: { Armor* i = new Armor(*armortype[getarmortype(itemtypename_)]); customers.squad[buyer]->give_armor(*i, &location[customers.squad[0]->base]->loot); if (i->empty()) delete i; else location[customers.squad[0]->base]->loot.push_back(i); break; } case LOOT: { Loot* i = new Loot(*loottype[getloottype(itemtypename_)]); location[customers.squad[0]->base]->loot.push_back(i); break; } } } }
void Player::equip(Equipment * eq) { Armor * pArm = dynamic_cast<Armor*>(eq); if (pArm != NULL) { vInventory.push_back(armor); armor = pArm; cout << "You have equipped a " << pArm->getName() << "!" << endl; } Weapon * pWeap = dynamic_cast<Weapon *>(eq); if (pWeap != NULL) { vInventory.push_back(weapon); weapon = pWeap; cout << "You have equipped a " << pWeap->getName() << "!" << endl; } }
bool MenuEquipmentScreen::equipmentFilter(EquipmentPiece *equipment) { // Filter by type (Weapon, Armor or Accessory) EquipmentPiece::Type typeFilter; if (_equippedEquipmentItems.indexOf(_currentEquippedEquipmentItem) < 2) typeFilter = EquipmentPiece::WEAPON; else if (_equippedEquipmentItems.indexOf(_currentEquippedEquipmentItem) < 7) typeFilter = EquipmentPiece::ARMOR; else typeFilter = EquipmentPiece::ACCESSORY; if (equipment->getType() != typeFilter) return false; // Filter by subtype if (typeFilter == EquipmentPiece::WEAPON) { Weapon *weapon = dynamic_cast<Weapon*>(equipment); int subTypeFilter = _equippedEquipmentItems.indexOf(_currentEquippedEquipmentItem); if ((weapon->getSubtype() != Weapon::TWOHANDED) && (subTypeFilter != weapon->getSubtype())) return false; } else if (typeFilter == EquipmentPiece::ARMOR) { Armor *armor = dynamic_cast<Armor*>(equipment); int subTypeFilter = _equippedEquipmentItems.indexOf(_currentEquippedEquipmentItem); if (subTypeFilter != armor->getSubtype()) return false; } else if (typeFilter == EquipmentPiece::ACCESSORY) { Accessory *accessory = dynamic_cast<Accessory*>(equipment); int subTypeFilter = _equippedEquipmentItems.indexOf(_currentEquippedEquipmentItem); if (subTypeFilter != accessory->getSubtype()) return false; } QVector<QPair<Class*, int>> classes = equipment->getClasses(); for (int i = 0; i < classes.size(); i++) { QPair<Class*, int> it = classes.at(i); if ((it.first == _character->getClass()) && (it.second <= _character->getLevel())) return true; } return false; }
void Shop::buy(Human& human, Armor armor) { display->showAttributes(armor); costDisplay(armor.getPrice(), human.getGold()); display->ask("\n| Would you like to buy this item? [y/n]: "); if (strncmp("y", display->getInputBuffer(), 1) == 0) { if (armor.getPrice() <= human.getGold()) { human.setArmor(armor); human.decreaseGoldBy(armor.getPrice()); } else { display->text("\n[!]You cannot afford this item\n"); } } }
/** * Shows the Select Armor window. * @param action Pointer to an action. */ void CraftArmorState::lstSoldiersClick(Action *action) { Soldier *s = _base->getSoldiers()->at(_lstSoldiers->getSelectedRow()); if (!(s->getCraft() && s->getCraft()->getStatus() == "STR_OUT")) { if (action->getDetails()->button.button == SDL_BUTTON_LEFT) { _game->pushState(new SoldierArmorState(_base, _lstSoldiers->getSelectedRow())); } else if (action->getDetails()->button.button == SDL_BUTTON_RIGHT) { SavedGame *save; save = _game->getSavedGame(); Armor *a = _game->getMod()->getArmor(save->getLastSelectedArmor()); if (a && (a->getUnits().empty() || std::find(a->getUnits().begin(), a->getUnits().end(), s->getRules()->getType()) != a->getUnits().end())) { if (save->getMonthsPassed() != -1) { if (_base->getStorageItems()->getItem(a->getStoreItem()) > 0 || a->getStoreItem() == Armor::NONE) { if (s->getArmor()->getStoreItem() != Armor::NONE) { _base->getStorageItems()->addItem(s->getArmor()->getStoreItem()); } if (a->getStoreItem() != Armor::NONE) { _base->getStorageItems()->removeItem(a->getStoreItem()); } s->setArmor(a); _lstSoldiers->setCellText(_lstSoldiers->getSelectedRow(), 2, tr(a->getType())); } } else { s->setArmor(a); _lstSoldiers->setCellText(_lstSoldiers->getSelectedRow(), 2, tr(a->getType())); } } } } }
/** * Shows the Select Armor window. * @param action Pointer to an action. */ void CraftArmorState::lstSoldiersClick(Action *action) { Soldier *s = _base->getSoldiers()->at(_lstSoldiers->getSelectedRow()); if (!(s->getCraft() && s->getCraft()->getStatus() == "STR_OUT")) { if (action->getDetails()->button.button == SDL_BUTTON_LEFT) { _game->pushState(new SoldierArmorState(_base, _lstSoldiers->getSelectedRow())); } else { if (_game->getSavedGame()->getMonthsPassed() != -1) { SavedGame *_save; _save = _game->getSavedGame(); Armor *a = _game->getRuleset()->getArmor(_save->getLastSelectedArmor()); if (_base->getItems()->getItem(a->getStoreItem()) > 0 || a->getStoreItem() == "STR_NONE") { if (s->getArmor()->getStoreItem() != "STR_NONE") { _base->getItems()->addItem(s->getArmor()->getStoreItem()); } if (a->getStoreItem() != "STR_NONE") { _base->getItems()->removeItem(a->getStoreItem()); } s->setArmor(a); _lstSoldiers->setCellText(_lstSoldiers->getSelectedRow(), 2, tr(a->getType())); } } } } }
Armor* Armor::translateFromXML(QDomElement &armorElement) { QString name = armorElement.attributeNode("name").value(); Armor::Subtype type; QString typeString = armorElement.attributeNode("type").value(); if (typeString == "helmet") type = Armor::HELMET; else if (typeString == "torso") type = Armor::TORSO; else if (typeString == "leggings") type = Armor::LEGGINGS; else if (typeString == "gloves") type = Armor::GLOVES; else if (typeString == "boots") type = Armor::BOOTS; else throw ProjectException("No type " + typeString + " exist for armor."); Armor *armor = Armor::create(name, type); armor->setDescription(armorElement.firstChildElement("description").text()); return armor; }
bool Actor::hit(int dmg, const DamageTypes_t damageType) { tracer << "Actor::hit()..." << endl; tracer << "Actor: Damage from parameter: " << dmg << endl; monsterHit(dmg); tracer << "Actor: Damage after monsterHit(): " << dmg << endl; dmg = max(1, dmg); //Filter damage through worn armor if(isHumanoid()) { Armor* armor = dynamic_cast<Armor*>(inventory_->getItemInSlot(slot_armorBody)); if(armor != NULL) { tracer << "Actor: Has armor, running hit on armor" << endl; dmg = armor->takeDurabilityHitAndGetReducedDamage(dmg, damageType); if(armor->isDestroyed()) { tracer << "Actor: Armor was destroyed" << endl; if(this == eng->player) { eng->log->addMessage("My " + eng->itemData->getItemRef(armor, itemRef_plain) + " is torn apart!"); } delete armor; armor = NULL; inventory_->getSlot(slot_armorBody)->item = NULL; } } } // Filter damage through intrinsic armor // TODO Stuff goes here statusEffectsHandler_->isHit(); actorSpecific_hit(dmg); //Damage to corpses if(deadState != actorDeadState_alive) { if(dmg >= getHpMax(true) / 2) { deadState = actorDeadState_mangled; glyph_ = ' '; if(isHumanoid()) { eng->gore->makeGore(pos); } } tracer << "Actor::hit() [DONE]" << endl; return false; } if(this != eng->player || eng->config->BOT_PLAYING == false) { hp_ -= dmg; } const bool IS_ON_BOTTOMLESS = eng->map->featuresStatic[pos.x][pos.y]->isBottomless(); const bool IS_MANGLED = IS_ON_BOTTOMLESS == true ? true : (dmg > ((getHpMax(true) * 5) / 4) ? true : false); if(getHp() <= 0) { die(IS_MANGLED, !IS_ON_BOTTOMLESS, !IS_ON_BOTTOMLESS); actorSpecificDie(); tracer << "Actor::hit() [DONE]" << endl; return true; } else { tracer << "Actor::hit() [DONE]" << endl; return false; } }
int main(int argc, char** argv){ int num_objects = 10; int num_moving = 5; string name; int x, y; char command; int t=1; Player player("player"); Player player2("player2"); //If at least one command-line argument was provided, use it as the number of objects to create. if (argc > 1) { num_objects = atoi(argv[1]); } if (argc > 2) { num_moving = atoi(argv[2]); } //Create all the non-moving objects for (int i = 0; i < num_objects - num_moving; i++) { x = random() % 11; y = random() % 11; name = "random object"; if (i < 7) { name = names[i]; } collection.push_back(new Object(name, x, y)); } for (int i = 0; i < num_moving; i++) { x = random() % 11; y = random() % 11; name = "random moving object"; if (i < 5) { name = moving_names[i]; } collection.push_back(new Monster(name,x,y)); } //Create weapons. for (int i = 0; i < 3; i++) { x = random() % 11; y = random() % 11; name = "weapon"; if (i < 3) { name = weapon_names[i]; } collection.push_back(new Weapon(name,x,y)); } //Create armor. for (int i = 0; i < 3; i++) { x = random() % 11; y = random() % 11; name = "armor"; if (i < 3) { name = armor_names[i]; } collection.push_back(new Armor(name,x,y)); } do{ while(t==1){ cout << "__________________________________________________"<<endl; cout << "Player 1" << endl; cout << "[" << player.x() << ", " << player.y() << "]" << endl; cout << "Your score is: " << player.score() << endl; cout << "________________________________________"<<endl; cout << "Enter a command:" << endl; cout << " 'i' to move up." << endl; cout << " 'm' to move down." << endl; cout << " 'j' to move left." << endl; cout << " 'k' to move right." << endl; cout << " 't' to take an item from this room." << endl; cout << " 'a' to attack a monster in this room." << endl; cout << " 'q' to quit." << endl; cout << "__________________________________________________"<<endl; //Process command and move player. cin >> command; switch (command) { case 'i': player.move_up(); break; case 'm': player.move_down(); break; case 'j': player.move_left(); break; case 'k': player.move_right(); break; case 't': for (vector<Object*>::iterator i=collection.begin(); i != collection.end(); ) { if ((*i)->x() == player.x() && (*i)->y() == player.y()) { Weapon* weap = dynamic_cast<Weapon*>(*i); Armor* arm = dynamic_cast<Armor*>(*i); if (weap){ cout << "You inspect the " << weap->name() << "." << endl; if (player.get_str() < weap->str()) { player.set_weapon(weap); cout << "You pick up the " << weap->name() << " and equip it." << endl; i = collection.erase(i); } else { cout << "You realize the " << weap->name() << " is worse than your " << player.get_weapon() << " so you destory it." << endl; i = collection.erase(i); } } if (arm){ cout << "You inspect the " << arm->name() << "." << endl; if (player.get_tgh() < arm->tgh()) { player.set_armor(arm); cout << "You pick up the " << arm->name() << " and equip it." << endl; i = collection.erase(i); } else { cout << "The " << arm->name() << " is worse than your " << player.get_armor() << " so you destroy it." << endl; i = collection.erase(i); } } if (player.take_item(*i)) { cout << "You take a " << (*i)->name() << endl; i = collection.erase(i); } else { i++; } } else { i++; } break; } case 'a': for (vector<Object*>::iterator i=collection.begin(); i != collection.end(); ) { if ((*i)->x() == player.x() && (*i)->y() == player.y()) { Monster* mon = dynamic_cast<Monster*>(*i); if (mon){ cout << "What do you do?" << endl; cout << "'a' for a normal attack." << endl; cout << "'s' for a special attack." << endl; cin >> command; switch (command) { case 'a': cout << "You attack " << mon->name() << endl; if (random() % 2 == 0) { cout << mon->name() << " wins! You lose" << (5 - player.get_tgh()) << " health." << endl; if (player.hurt_player(5 - player.get_tgh()) == false) { cout << "You have died!" << endl; return 1; } i++; } else { cout << "You win! " << mon->name() << " loses " << (5 + player.get_str()) << " health." << endl; if (mon->hurt_monster(5 + player.get_str()) == false) { cout << "You have killed the monster!" << endl; i = collection.erase(i); player.give_bonus(10); } } case 's': cout << "You use a special attack on " << mon->name() << endl; if (random() % 10 >= 3) { cout << mon->name() << " wins! You lose " << (5 - player.get_tgh()) << " health." << endl; if (player.hurt_player(5 - player.get_tgh()) == false) { cout << "You have died!" << endl; return 1; } i++; } else { cout << "Your special attack hits! " << mon->name() << " loses " << (10 + player.get_str()) << " health." << endl; if (mon->hurt_monster(10 + player.get_str()) == false) { cout << "You have killed the monster!" << endl; i = collection.erase(i); player.give_bonus(10); } } } } else i++; } else i++; } default: break; }
/** * Initializes all the elements in the Soldier Armor window. * @param game Pointer to the core game. * @param base Pointer to the base to get info from. * @param soldier ID of the selected soldier. */ SoldierArmorState::SoldierArmorState(Game *game, Base *base, size_t soldier) : State(game), _base(base), _soldier(soldier) { _screen = false; // Create objects _window = new Window(this, 192, 120, 64, 40, POPUP_BOTH); _btnCancel = new TextButton(140, 16, 90, 136); _txtTitle = new Text(182, 9, 69, 48); _txtSoldier = new Text(182, 9, 69, 56); _txtType = new Text(90, 9, 80, 72); _txtQuantity = new Text(70, 9, 177, 72); _lstArmor = new TextList(160, 48, 73, 88); // Set palette _game->setPalette(_game->getResourcePack()->getPalette("BACKPALS.DAT")->getColors(Palette::blockOffset(4)), Palette::backPos, 16); add(_window); add(_btnCancel); add(_txtTitle); add(_txtSoldier); add(_txtType); add(_txtQuantity); add(_lstArmor); centerAllSurfaces(); // Set up objects _window->setColor(Palette::blockOffset(13)+10); _window->setBackground(_game->getResourcePack()->getSurface("BACK14.SCR")); _btnCancel->setColor(Palette::blockOffset(13)+5); _btnCancel->setText(_game->getLanguage()->getString("STR_CANCEL_UC")); _btnCancel->onMouseClick((ActionHandler)&SoldierArmorState::btnCancelClick); _btnCancel->onKeyboardPress((ActionHandler)&SoldierArmorState::btnCancelClick, (SDLKey)Options::getInt("keyCancel")); _txtTitle->setColor(Palette::blockOffset(13)+5); _txtTitle->setAlign(ALIGN_CENTER); _txtTitle->setText(_game->getLanguage()->getString("STR_SELECT_ARMOR_FOR")); _txtSoldier->setColor(Palette::blockOffset(13)+5); _txtSoldier->setAlign(ALIGN_CENTER); Soldier *s = _base->getSoldiers()->at(_soldier); _txtSoldier->setText(s->getName()); _txtType->setColor(Palette::blockOffset(13)+5); _txtType->setText(_game->getLanguage()->getString("STR_TYPE")); _txtQuantity->setColor(Palette::blockOffset(13)+5); _txtQuantity->setText(_game->getLanguage()->getString("STR_QUANTITY_UC")); _lstArmor->setColor(Palette::blockOffset(13)); _lstArmor->setArrowColor(Palette::blockOffset(13)+5); _lstArmor->setColumns(2, 112, 41); _lstArmor->setSelectable(true); _lstArmor->setBackground(_window); _lstArmor->setMargin(8); const std::vector<std::string> &armors = _game->getRuleset()->getArmorsList(); for (std::vector<std::string>::const_iterator i = armors.begin(); i != armors.end(); ++i) { Armor *a = _game->getRuleset()->getArmor(*i); if (_base->getItems()->getItem(a->getStoreItem()) > 0) { _armors.push_back(a); std::wstringstream ss; ss << _base->getItems()->getItem(a->getStoreItem()); _lstArmor->addRow(2, _game->getLanguage()->getString(a->getType()).c_str(), ss.str().c_str()); } else if (a->getStoreItem() == "STR_NONE") { _armors.push_back(a); _lstArmor->addRow(1, _game->getLanguage()->getString(a->getType()).c_str()); } } _lstArmor->onMouseClick((ActionHandler)&SoldierArmorState::lstArmorClick); }
ArticleStateTFTDArmor::ArticleStateTFTDArmor(ArticleDefinitionTFTD *defs) : ArticleStateTFTD(defs), _row(0) { Armor *armor = _game->getMod()->getArmor(defs->id, true); _lstInfo = new TextList(150, 64, 168, 110); add(_lstInfo); _lstInfo->setColor(Palette::blockOffset(0)+2); _lstInfo->setColumns(2, 125, 25); _lstInfo->setDot(true); // Add armor values addStat("STR_FRONT_ARMOR", armor->getFrontArmor()); addStat("STR_LEFT_ARMOR", armor->getLeftSideArmor()); addStat("STR_RIGHT_ARMOR", armor->getRightSideArmor()); addStat("STR_REAR_ARMOR", armor->getRearArmor()); addStat("STR_UNDER_ARMOR", armor->getUnderArmor()); _lstInfo->addRow(0); ++_row; // Add damage modifiers for (int i = 0; i < DAMAGE_TYPES; ++i) { ItemDamageType dt = (ItemDamageType)i; int percentage = (int)Round(armor->getDamageModifier(dt) * 100.0f); std::string damage = getDamageTypeText(dt); if (percentage != 100 && damage != "STR_UNKNOWN") { addStat(damage, Text::formatPercentage(percentage)); } } _lstInfo->addRow(0); ++_row; // Add unit stats addStat("STR_TIME_UNITS", armor->getStats()->tu, true); addStat("STR_STAMINA", armor->getStats()->stamina, true); addStat("STR_HEALTH", armor->getStats()->health, true); addStat("STR_BRAVERY", armor->getStats()->bravery, true); addStat("STR_REACTIONS", armor->getStats()->reactions, true); addStat("STR_FIRING_ACCURACY", armor->getStats()->firing, true); addStat("STR_THROWING_ACCURACY", armor->getStats()->throwing, true); addStat("STR_MELEE_ACCURACY", armor->getStats()->melee, true); addStat("STR_STRENGTH", armor->getStats()->strength, true); addStat("STR_PSIONIC_STRENGTH", armor->getStats()->psiStrength, true); addStat("STR_PSIONIC_SKILL", armor->getStats()->psiSkill, true); centerAllSurfaces(); }
void armor_edit_new::on_pushButton_clicked() { //cout << "Next pressed\n"; QString arr_qstring[13], description; bool good = false; bool priceerr = false, weighterr = false, armorBonuserr = false; //cout << "Grabbing user input\n"; arr_qstring[0] = ui->name_textbox->text(); arr_qstring[1] = ui->price_textbox->text(); arr_qstring[2] = ui->type_textbox->text(); arr_qstring[3] = ui->weight_textbox->text(); arr_qstring[4] = ui->armor_textbox->text(); arr_qstring[5] = ui->armorCheckPenalty_textbox->text(); arr_qstring[6] = ui->don_textbox->text(); arr_qstring[7] = ui->donHaste_textbox->text(); arr_qstring[8] = ui->remove_textbox->text(); arr_qstring[9] = ui->speedHuman_textbox->text(); arr_qstring[10] = ui->speedDwarf_textbox->text(); arr_qstring[11] = ui->maxDexBonus_textbox->text(); arr_qstring[12] = ui->arcaneSpellFail_textbox->text(); description = ui->description_textbox->toPlainText(); Armor a; a.SetName(arr_qstring[0].toStdString()), a.SetCost(arr_qstring[1].toStdString()), a.SetType(arr_qstring[2].toStdString()), a.SetWeight(arr_qstring[3].toStdString()), a.SetArmorBonus(arr_qstring[4].toStdString()), a.SetArmorCheckPenalty(arr_qstring[5].toStdString()), a.SetDon(arr_qstring[6].toStdString()), a.SetDonHastely(arr_qstring[7].toStdString()), a.SetRemove(arr_qstring[8].toStdString()), a.SetSpeedHuman(arr_qstring[9].toStdString()), a.SetSpeedDwarf(arr_qstring[10].toStdString()), a.SetMaxDexBonus(arr_qstring[11].toStdString()), a.SetArcaneSpellFailure(arr_qstring[12].toStdString()), a.SetDescription(description.toStdString()); for (int i = 0 ; i < a.GetCost().size(); i++) if (!isdigit(a.GetCost()[i]) || a.GetCost()[i] == '.') priceerr = true; for (int i = 0; i < a.GetWeight().size(); i++) if (!isdigit(a.GetWeight()[i])) weighterr = true; for (int i = 0; i < a.GetArmorBonus().size(); i++) if (!isdigit(a.GetArmorBonus()[i])) armorBonuserr = true; if (!priceerr && !weighterr && !armorBonuserr) good = true; else { good = false; //cout << "Something was false\n"; } if (good) { //No need to check the return. //If we're at this point in the code then the database is fine. //cout << "Calling AddtoCEAMS\n"; //if ( AddToCEAMS(a);//) newDB.armor_V->push_back(a); //cout << "Success!\n"; //else //cout << "Fail :(\n"; //cout << "AddToCEAMS has returned\n"; //Close window and signal success //success* goodWindow = new success; // goodWindow->show(); this->close(); } else { //Signal error, highlight error boxes if (priceerr) ui->price_textbox->setStyleSheet("QLabel{background_color:red;}"); else ui->price_textbox->setStyleSheet("QLabel{background_color:white;}"); if (weighterr) ui->weight_textbox->setStyleSheet("QLabel{background_color:red;}"); else ui->weight_textbox->setStyleSheet("QLabel{background_color:white;}"); if (armorBonuserr) ui->armor_textbox->setStyleSheet("QLabel{background_color:red;}"); else ui->armor_textbox->setStyleSheet("QLabel{background_color:white;}"); } /*ui->label_16->setText(name_qstring); ui->label_16->show(); cout << name;*/ }
int main(int argc, char**argv) { Arguments info; if(!parseOptions (argc, argv, info)) return 1; ESMReader esm; esm.setEncoding(info.encoding); string filename = info.filename; cout << "\nFile: " << filename << endl; try { if(info.raw_given) { cout << "RAW file listing:\n"; esm.openRaw(filename); printRaw(esm); return 0; } bool quiet = info.quiet_given; bool loadCells = info.loadcells_given; esm.open(filename); cout << "Author: " << esm.getAuthor() << endl; cout << "Description: " << esm.getDesc() << endl; cout << "File format version: " << esm.getFVer() << endl; cout << "Special flag: " << esm.getSpecial() << endl; cout << "Masters:\n"; ESMReader::MasterList m = esm.getMasters(); for(unsigned int i=0;i<m.size();i++) cout << " " << m[i].name << ", " << m[i].size << " bytes\n"; // Loop through all records while(esm.hasMoreRecs()) { NAME n = esm.getRecName(); esm.getRecHeader(); string id = esm.getHNOString("NAME"); if(!quiet) cout << "\nRecord: " << n.toString() << " '" << id << "'\n"; switch(n.val) { case REC_ACTI: { Activator ac; ac.load(esm); if(quiet) break; cout << " Name: " << ac.name << endl; cout << " Mesh: " << ac.model << endl; cout << " Script: " << ac.script << endl; break; } case REC_ALCH: { Potion p; p.load(esm); if(quiet) break; cout << " Name: " << p.name << endl; break; } case REC_APPA: { Apparatus p; p.load(esm); if(quiet) break; cout << " Name: " << p.name << endl; break; } case REC_ARMO: { Armor am; am.load(esm); if(quiet) break; cout << " Name: " << am.name << endl; cout << " Mesh: " << am.model << endl; cout << " Icon: " << am.icon << endl; cout << " Script: " << am.script << endl; cout << " Enchantment: " << am.enchant << endl; cout << " Type: " << am.data.type << endl; cout << " Weight: " << am.data.weight << endl; break; } case REC_BODY: { BodyPart bp; bp.load(esm); if(quiet) break; cout << " Name: " << bp.name << endl; cout << " Mesh: " << bp.model << endl; break; } case REC_BOOK: { Book b; b.load(esm); if(quiet) break; cout << " Name: " << b.name << endl; cout << " Mesh: " << b.model << endl; break; } case REC_BSGN: { BirthSign bs; bs.load(esm); if(quiet) break; cout << " Name: " << bs.name << endl; cout << " Texture: " << bs.texture << endl; cout << " Description: " << bs.description << endl; break; } case REC_CELL: { Cell b; b.load(esm); if(!quiet) { cout << " Name: " << b.name << endl; cout << " Region: " << b.region << endl; } if(loadCells) loadCell(b, esm, quiet); break; } case REC_CLAS: { Class b; b.load(esm); if(quiet) break; cout << " Name: " << b.name << endl; cout << " Description: " << b.description << endl; break; } case REC_CLOT: { Clothing b; b.load(esm); if(quiet) break; cout << " Name: " << b.name << endl; break; } case REC_CONT: { Container b; b.load(esm); if(quiet) break; cout << " Name: " << b.name << endl; break; } case REC_CREA: { Creature b; b.load(esm, id); if(quiet) break; cout << " Name: " << b.name << endl; break; } case REC_DIAL: { Dialogue b; b.load(esm); break; } case REC_DOOR: { Door d; d.load(esm); if(quiet) break; cout << " Name: " << d.name << endl; cout << " Mesh: " << d.model << endl; cout << " Script: " << d.script << endl; cout << " OpenSound: " << d.openSound << endl; cout << " CloseSound: " << d.closeSound << endl; break; } case REC_ENCH: { Enchantment b; b.load(esm); break; } case REC_GMST: { GameSetting b; b.id = id; b.load(esm); if(quiet) break; cout << " Value: "; if(b.type == VT_String) cout << "'" << b.str << "' (string)"; else if(b.type == VT_Float) cout << b.f << " (float)"; else if(b.type == VT_Int) cout << b.i << " (int)"; cout << "\n Dirty: " << b.dirty << endl; break; } case REC_INFO: { DialInfo p; p.load(esm); if(quiet) break; cout << " Id: " << p.id << endl; cout << " Text: " << p.response << endl; break; } case REC_SOUN: { Sound d; d.load(esm); if(quiet) break; cout << " Sound: " << d.sound << endl; cout << " Volume: " << (int)d.data.volume << endl; break; } case REC_SPEL: { Spell s; s.load(esm); if(quiet) break; cout << " Name: " << s.name << endl; break; } default: esm.skipRecord(); if(quiet) break; cout << " Skipping\n"; } } } catch(exception &e) { cout << "\nERROR:\n\n " << e.what() << endl; return 1; } return 0; }
void ICharacter::equipArmor(Armor armor) { this -> armor = armor; updateStats(armor.getStrength(), armor.getDexterity(), armor.getConstitution(), armor.getIntelligence(), armor.getWisdom(), armor.getCharisma()); }
ArticleStateVehicle::ArticleStateVehicle(Game *game, ArticleDefinitionVehicle *defs, int palSwitch) : ArticleState(game, defs->id, palSwitch) { Unit *unit = _game->getRuleset()->getUnit(defs->id); Armor *armor = _game->getRuleset()->getArmor(unit->getArmor()); RuleItem *item = _game->getRuleset()->getItem(defs->id); // add screen elements _txtTitle = new Text(310, 16, 5, 23); _txtInfo = new Text(300, 150, 10, 122); _lstStats = new TextList(300, 89, 10, 48); // Set palette _game->setPalette(_game->getResourcePack()->getPalette("PALETTES.DAT_3")->getColors()); // _game->setPalette(_game->getResourcePack()->getPalette("BACKPALS.DAT")->getColors(Palette::blockOffset(7)), Palette::backPos, 16); ArticleState::initLayout(); // add other elements add(_txtTitle); add(_txtInfo); add(_lstStats); // Set up objects _game->getResourcePack()->getSurface("BACK10.SCR")->blit(_bg); _btnOk->setColor(Palette::blockOffset(5)); _btnPrev->setColor(Palette::blockOffset(5)); _btnNext->setColor(Palette::blockOffset(5)); _txtTitle->setColor(Palette::blockOffset(15)+4); _txtTitle->setBig(); _txtTitle->setText(Ufopaedia::buildText(_game, defs->title)); _txtInfo->setColor(Palette::blockOffset(15)-1); _txtInfo->setWordWrap(true); _txtInfo->setText(Ufopaedia::buildText(_game, defs->text)); _lstStats->setColor(Palette::blockOffset(15)+4); _lstStats->setColumns(2, 175, 145); _lstStats->setDot(true); std::wstringstream ss; ss << unit->getStats()->tu; _lstStats->addRow(2, _game->getLanguage()->getString("STR_TIME_UNITS").c_str(), ss.str().c_str()); std::wstringstream ss2; ss2 << unit->getStats()->health; _lstStats->addRow(2, _game->getLanguage()->getString("STR_HEALTH").c_str(), ss2.str().c_str()); std::wstringstream ss3; ss3 << armor->getFrontArmor(); _lstStats->addRow(2, _game->getLanguage()->getString("STR_FRONT_ARMOR").c_str(), ss3.str().c_str()); std::wstringstream ss4; ss4 << armor->getSideArmor(); _lstStats->addRow(2, _game->getLanguage()->getString("STR_LEFT_ARMOR").c_str(), ss4.str().c_str()); std::wstringstream ss5; ss5 << armor->getSideArmor(); _lstStats->addRow(2, _game->getLanguage()->getString("STR_RIGHT_ARMOR").c_str(), ss5.str().c_str()); std::wstringstream ss6; ss6 << armor->getRearArmor(); _lstStats->addRow(2, _game->getLanguage()->getString("STR_REAR_ARMOR").c_str(), ss6.str().c_str()); std::wstringstream ss7; ss7 << armor->getUnderArmor(); _lstStats->addRow(2, _game->getLanguage()->getString("STR_UNDER_ARMOR").c_str(), ss7.str().c_str()); _lstStats->addRow(2, _game->getLanguage()->getString("STR_WEAPON").c_str(), _game->getLanguage()->getString(item->getName()).c_str()); std::wstringstream ss8; ss8 << unit->getStats()->tu; _lstStats->addRow(2, _game->getLanguage()->getString("STR_WEAPON_POWER").c_str(), ss8.str().c_str()); if (item->getClipSize() != -1) { RuleItem *ammo = _game->getRuleset()->getItem(item->getCompatibleAmmo()->front()); _lstStats->addRow(2, _game->getLanguage()->getString("STR_AMMUNITION").c_str(), _game->getLanguage()->getString(ammo->getName()).c_str()); std::wstringstream ss9; ss9 << ammo->getClipSize(); _lstStats->addRow(2, _game->getLanguage()->getString("STR_ROUNDS").c_str(), ss9.str().c_str()); _txtInfo->setY(138); } }
void MenuInventory::getViewScreen() { DM::say("Gear:"); Player *player = _game->getPlayer(); Weapon *main = player->getMainWeapon(); if (main) { int base = player->getStrength(); string type = ""; switch (main->getWeaponType()) { case WeaponType::SIMPLE: type = "Simple Weapon"; break; case WeaponType::FINESSE: if (player->getDexterity() > player->getStrength()) { base = player->getDexterity(); } type = "Finesse Weapon"; break; case WeaponType::MARTIAL: type = "Martial Weapon"; break; case WeaponType::HEAVY: type = "heavy Weapon"; break; case WeaponType::SHIELD: type = "Shield"; break; } DM::say("\t<Main> Weapon: " + main->getName() + " (" + to_string(main->getDiceAmount()) + "d" + to_string(main->getDiceSize()) + "+" + to_string(base) + " " + type + ")"); } else { DM::say("\t<Main> Weapon: None"); } Weapon *off = player->getOffHandWeapon(); if (off) { int base = player->getStrength(); string type = ""; switch (off->getWeaponType()) { case WeaponType::SIMPLE: type = "Simple Weapon"; break; case WeaponType::FINESSE: if (player->getDexterity() > player->getStrength()) { base = player->getDexterity(); } type = "Finesse Weapon"; break; case WeaponType::MARTIAL: type = "Martial Weapon"; break; case WeaponType::HEAVY: type = "heavy Weapon"; break; case WeaponType::SHIELD: type = "Shield (+2AC)"; break; } DM::say("\t<Off>hand Weapon: " + off->getName() + " (" + to_string(off->getDiceAmount()) + "d" + to_string(off->getDiceSize()) + "+" + to_string(base) + " " + type + ")"); } else { DM::say("\t<Off>hand Weapon: None"); } Armor *armor = player->getArmor(); if (armor) { string extra = ""; switch (armor->getArmorType()) { case ArmorType::LIGHT: extra = " + Dex "; break; case ArmorType::MEDIUM: extra = " + max 2 Dex "; break; case ArmorType::HEAVY: break; } DM::say("\t<Armor>: " + armor->getName() + " ( AC: " + to_string(armor->getBaseAC()) + extra + ")"); } else { DM::say("\t<Armor>: None"); } DM::say("\nInventory:"); int i = 1; for (map<Item *, int>::iterator item = _inventory->begin(); item != _inventory->end(); ++item) { switch (item->first->getItemType()) { case ItemType::ARMOR: { Armor *armor = (Armor *) item->first; string extra = ""; switch (armor->getArmorType()) { case ArmorType::LIGHT: extra = " + Dex "; break; case ArmorType::MEDIUM: extra = " + max 2 Dex "; break; case ArmorType::HEAVY: break; } DM::say("\t[" + to_string(i) + "]: " + item->first->getName() + " - AC: " + to_string(armor->getBaseAC()) + extra + "(" + to_string(item->second) + "x)"); break; } case ItemType::WEAPON: { Weapon *weapon = (Weapon *) item->first; string type = ""; switch (weapon->getWeaponType()) { case WeaponType::SIMPLE: type = "Simple Weapon"; break; case WeaponType::FINESSE: type = "Finesse Weapon"; break; case WeaponType::MARTIAL: type = "Martial Weapon"; break; case WeaponType::HEAVY: type = "heavy Weapon"; break; case WeaponType::SHIELD: type = "Shield (+2AC)"; break; } DM::say("\t[" + to_string(i) + "]: " + item->first->getName() + " - " + type + " - " + to_string(weapon->getDiceAmount()) + "d" + to_string(weapon->getDiceSize()) + " dmg (" + to_string(item->second) + "x)"); break; } case ItemType::CONSUMABLE: { Consumable *consumable = (Consumable *) item->first; string type = ""; string effect = ""; switch (consumable->getConsumableType()) { case ConsumableType::FOOD: type = "Food"; effect = "hp max per rest"; break; case ConsumableType::HEALING: type = "Healing item"; effect = "hp max on use"; break; case ConsumableType::ILLUMINATION: type = "Illumination"; effect = "room(s) of light"; break; case ConsumableType::BOMB: type = "Bomb"; if (consumable->getDiceAmount() == 0) { effect = "cave-in(s)"; } else { effect = "probable cave-in(s)"; } break; case ConsumableType::TALISMAN: type = "Talisman"; effect = "maximum distance to exit"; break; } if (consumable->getDiceAmount() == 0) { DM::say("\t[" + to_string(i) + "]: " + consumable->getName() + " - " + type + " - " + to_string(consumable->getBaseValue()) + " " + effect + " (" + to_string(item->second) + "x)"); } else { DM::say("\t[" + to_string(i) + "]: " + consumable->getName() + " - " + type + " - " + to_string(consumable->getDiceAmount()) + "d" + to_string(consumable->getDiceSize()) + "+" + to_string(consumable->getBaseValue()) + " " + effect + " (" + to_string(item->second) + "x)"); } break; } } ++i; } if (i == 1) { DM::say("\tNo items"); } }
Armor* ItemDataLoader::processArmor(DOMElement* armorXml) { // Itemname CeGuiString name = XmlHelper::getAttributeValueAsString(armorXml,"Name"); // Beschreibung CeGuiString desc = XmlHelper::getAttributeValueAsString(armorXml,"Beschreibung"); // Eindeutiger Zuordner CeGuiString id = XmlHelper::getAttributeValueAsString(armorXml,"ID"); // Image fürs Inventar CeGuiString imageName = XmlHelper::getValueAsString(XmlHelper::getChildNamed(armorXml, "Bildname")); // Mesh für das Spiel DOMElement* meshNode = XmlHelper::getChildNamed(armorXml, "Mesh"); CeGuiString mesh = ""; if (meshNode->hasChildNodes()) { mesh = XmlHelper::getValueAsString(meshNode); } CeGuiString typeString = XmlHelper::getValueAsString(XmlHelper::getChildNamed(armorXml, "Klasse")); Item::ItemType type = static_cast<Item::ItemType>(getItemTypeFromString(typeString)); // Größe im Inventar int size_x = XmlHelper::getAttributeValueAsInteger(XmlHelper::getChildNamed(armorXml, "Größe"),"X"); int size_y = XmlHelper::getAttributeValueAsInteger(XmlHelper::getChildNamed(armorXml, "Größe"),"Y"); // Containerplatz für andere Gegenstände, die dieser aufnahmen kann int place_x = XmlHelper::getAttributeValueAsInteger(XmlHelper::getChildNamed(armorXml, "Platz"),"X"); int place_y = XmlHelper::getAttributeValueAsInteger(XmlHelper::getChildNamed(armorXml, "Platz"),"Y"); // Rüstungsschutz für bestimmte Zonen int ko = XmlHelper::getValueAsInteger(XmlHelper::getChildNamed(armorXml, "Ko")); int br = XmlHelper::getValueAsInteger(XmlHelper::getChildNamed(armorXml, "Br")); int rue = XmlHelper::getValueAsInteger(XmlHelper::getChildNamed(armorXml, "Rü")); int ba = XmlHelper::getValueAsInteger(XmlHelper::getChildNamed(armorXml, "Ba")); int la = XmlHelper::getValueAsInteger(XmlHelper::getChildNamed(armorXml, "LA")); int ra = XmlHelper::getValueAsInteger(XmlHelper::getChildNamed(armorXml, "RA")); int lb = XmlHelper::getValueAsInteger(XmlHelper::getChildNamed(armorXml, "LB")); int rb = XmlHelper::getValueAsInteger(XmlHelper::getChildNamed(armorXml, "RB")); int ges = XmlHelper::getValueAsInteger(XmlHelper::getChildNamed(armorXml, "Ges.")); int grs = XmlHelper::getValueAsInteger(XmlHelper::getChildNamed(armorXml, "gRs")); int gbe = XmlHelper::getValueAsInteger(XmlHelper::getChildNamed(armorXml, "gBe")); int gewicht = XmlHelper::getValueAsInteger(XmlHelper::getChildNamed(armorXml, "Gewicht")); int preis = XmlHelper::getValueAsInteger(XmlHelper::getChildNamed(armorXml, "Preis")); // Neuen Rüstungsprototyp erzeugen und zurückgeben Armor* a = new Armor( name, desc ); a->setImageName(imageName); a->setMeshName(mesh); a->setItemType(type); a->setSize(size_x,size_y); if (place_x > 0 && place_y > 0) { a->setContainer(true,make_pair<int,int>(place_x,place_y)); } a->setKo(ko); a->setBr(br); a->setRue(rue); a->setBa(ba); a->setLA(la); a->setRA(ra); a->setLB(lb); a->setRB(rb); a->setGes(ges); a->setGRS(grs); a->setGBE(gbe); // Umrechnung Stein->Unzen = Mal 40 a->setWeight(gewicht * 40); a->setPrice(preis); return a; }
ArticleStateArmor::ArticleStateArmor(ArticleDefinitionArmor *defs) : ArticleState(defs->id), _row(0) { Armor *armor = _game->getMod()->getArmor(defs->id); // add screen elements _txtTitle = new Text(300, 17, 5, 24); // Set palette setPalette("PAL_BATTLEPEDIA"); ArticleState::initLayout(); // add other elements add(_txtTitle); // Set up objects _btnOk->setColor(Palette::blockOffset(0)+15); _btnPrev->setColor(Palette::blockOffset(0)+15); _btnNext->setColor(Palette::blockOffset(0)+15); _txtTitle->setColor(Palette::blockOffset(14)+15); _txtTitle->setBig(); _txtTitle->setText(tr(defs->title)); _image = new Surface(320, 200, 0, 0); add(_image); std::string look = armor->getSpriteInventory(); look += "M0.SPK"; if (!CrossPlatform::fileExists(FileMap::getFilePath("UFOGRAPH/" + look)) && !_game->getMod()->getSurface(look)) { look = armor->getSpriteInventory() + ".SPK"; } _game->getMod()->getSurface(look)->blit(_image); _lstInfo = new TextList(150, 96, 150, 46); add(_lstInfo); _lstInfo->setColor(Palette::blockOffset(14)+15); _lstInfo->setColumns(2, 125, 25); _lstInfo->setDot(true); _txtInfo = new Text(300, 56, 8, 150); add(_txtInfo); _txtInfo->setColor(Palette::blockOffset(14)+15); _txtInfo->setWordWrap(true); _txtInfo->setText(tr(defs->text)); // Add armor values addStat("STR_FRONT_ARMOR", armor->getFrontArmor()); addStat("STR_LEFT_ARMOR", armor->getSideArmor()); addStat("STR_RIGHT_ARMOR", armor->getSideArmor()); addStat("STR_REAR_ARMOR", armor->getRearArmor()); addStat("STR_UNDER_ARMOR", armor->getUnderArmor()); _lstInfo->addRow(0); ++_row; // Add damage modifiers for (int i = 0; i < Armor::DAMAGE_TYPES; ++i) { ItemDamageType dt = (ItemDamageType)i; int percentage = (int)Round(armor->getDamageModifier(dt) * 100.0f); std::string damage = getDamageTypeText(dt); if (percentage != 100 && damage != "STR_UNKNOWN") { addStat(damage, Text::formatPercentage(percentage)); } } _lstInfo->addRow(0); ++_row; // Add unit stats addStat("STR_TIME_UNITS", armor->getStats()->tu, true); addStat("STR_STAMINA", armor->getStats()->stamina, true); addStat("STR_HEALTH", armor->getStats()->health, true); addStat("STR_BRAVERY", armor->getStats()->bravery, true); addStat("STR_REACTIONS", armor->getStats()->reactions, true); addStat("STR_FIRING_ACCURACY", armor->getStats()->firing, true); addStat("STR_THROWING_ACCURACY", armor->getStats()->throwing, true); addStat("STR_MELEE_ACCURACY", armor->getStats()->melee, true); addStat("STR_STRENGTH", armor->getStats()->strength, true); addStat("STR_PSIONIC_STRENGTH", armor->getStats()->psiStrength, true); addStat("STR_PSIONIC_SKILL", armor->getStats()->psiSkill, true); centerAllSurfaces(); }
int main(int argc, char * argv[]) { for(int i = 0; i <14; i++) { cout << " " << endl; } cout << "Welcome, my friend to the simplistic game of Trinity's Nightmare. Here, you have" << endl << "reached a dungeon where you are alone, standing with only your car keys and a trash" << endl << "can lid that you found. This is also where the level where the real danger begins." << endl << "You have conquered the attic of man eating camels -- You have trudged through" << endl << "the muddy swamps of Dr. Heinz'science experiment of alligator-dogs, only to" << endl << "come face to face with the most recent obstacle of the fire-breathing" << endl << "coffee-ingesting cookie-stealing SQUIRRELS!! Now, hold on to your" << endl << "Mountain Dew and Pizza, buckle up into your basement chair, and" << endl << "change your profile picture to that of a face of fear, because" << endl << "here you go..." << endl; cout << "To Play: " << endl; cout << "Unless otherwise declaried, you will show up as @" << endl; cout << "1.) Movement:" << endl; cout << " a - moves the player left" << endl; cout << " s - moves the player down" << endl; cout << " d - moves the player right" << endl; cout << " w - moves the player up" << endl; cout << " EXTRA: DIAGONAL:"<< endl; cout << " e - up to the right" << endl; cout << " x - down to the right" << endl; cout << " z - down to the left" << endl; cout << " ` - up to the right" << endl << endl; cout << "2.) Picking up and Using Items:" << endl; cout << " p - pick up, and thus using" << endl; cout << "3.) Attack:" << endl; cout << " - Creatures will attack you if you are within one space of them." << endl; cout << " - Weapons and Experience increase your attacking." << endl << endl; cout << "q will allow you to Quit -- if you are a Quitter..." << endl << endl << endl; mt.seed(time(NULL)); cout << "This is command line" << endl; cout << "Arguments Given : " << argc << endl; //load file into variable string inFileName; string outFileName; ifstream input; int inputValue = 0; if (argc >= 3) { inFileName = argv[1]; outFileName = argv[2]; } else { cout << "Enter a file name with .xml exstension: "; cin >> inFileName; cout << endl; cout << "What do you want to name the output file? " ; cin >> outFileName; cout << endl; } if (argc >= 4) { inputValue = atoi(argv[3]); } else { cout << "How many random Dungeons do you you want generated? " ; cin >> inputValue; cout << endl; } if(!input.good()) { cout << "No file by that name. Try Again. " << endl; return 1; } input.open(inFileName.c_str()); //make vector using XMLSerializable pointer vector<XMLSerializable*> vWorld; //send variables to parseXML parseXML(input, vWorld); //dumpOntoConsole(vWorld); //make output file ofstream output; bool creatureOccupied; bool wallOccupied; int tempX = 0; int tempY = 0; int thingTempX = 0; int thingTempY = 0; int playerX = 0; int playerY = 0; Player * pPlayer = new Player(); Weapon * punch = new Weapon(); Weapon * keys = new Weapon(); Armor * TrashCanLid = new Armor(); keys->setDamage(5); keys->setAccuracy(2); keys->setWeaponType("keychain"); keys->setName("Car Keys"); keys->setDisplayChar('x'); pPlayer->setWeapon(punch); punch->setDamage(5); punch->setAccuracy(5); punch->setWeaponType("flesh"); TrashCanLid->setArmorValue(3); TrashCanLid->setArmorType("trashlid"); TrashCanLid->setName("Trash Can Lid"); TrashCanLid->setDisplayChar('t'); pPlayer->setInventory(TrashCanLid); pPlayer->setInventory(keys); pPlayer->setExperience(0); string sMove; int dNum = 0; int iNum = 0; vector<DungeonLevel*> vDL; vector<vector<Creature*>> vvCreatures; vector<vector<vector<Item*>>> vvvItems; bool nextFloor = true; bool sameFloor = false; bool prevFloor = false; bool creatureTurn; int monsterHP = 0; int HP = 0; int attack = 0; int moveCount = 0; bool bWeapon = true; initscr(); noecho(); while(true) { clear(); if( nextFloor == true ) { nextFloor = false; if( sameFloor == false ) { vDL.push_back(new DungeonLevel(79,20)); } playerX = vDL[dNum]->upstairXCoord(); playerY = vDL[dNum]->upstairYCoord(); vvvItems.resize(dNum+1); vvvItems[dNum].resize(5); vvCreatures.resize(dNum+1); if( sameFloor == false ) { for(int i = 0 ; i<5; i++) { //Creature * pCreature = CreatureFactory::instance().generateCreature(4); vvCreatures[dNum].push_back(CreatureFactory::instance().generateCreature((vDL.size())*2)); while(true) { thingTempX = mt() % 79; thingTempY = mt() % 20; wallOccupied = vDL[dNum]->checkMove(thingTempX, thingTempY); if( wallOccupied == true ) { vDL[dNum]->setCreature(vvCreatures[dNum][i], thingTempX, thingTempY); vvCreatures[dNum][i]->setCoords(thingTempX, thingTempY); break; } } iNum =( (mt() % 5) + 1 ); for( size_t j = 0 ; j < iNum ; j++ ) { vvvItems[dNum][i].push_back(ItemFactory::instance().generateItem(vDL.size()*20)); } while(true) { thingTempX = mt() % 79; thingTempY = mt() % 20; wallOccupied = vDL[dNum]->checkMove( thingTempX, thingTempY ); if( wallOccupied == true ) { for( size_t j = 0 ; j < iNum ; j++ ) { vDL[dNum]->setItems(vvvItems[dNum][i][j], thingTempX,thingTempY); vvvItems[dNum][i][j]->setCoords(thingTempX, thingTempY); } break; } } /*if( pCreature ) { pCreature->dumpObject(); delete pCreature; }*/ } } } else if( prevFloor == true ) { if( dNum < 0 ) { break; //cout << "You Escaped... because you ran away like a pansy. Good Job." << endl; clear(); mvprintw(0,0,"You Escaped... because you ran away like a pansy. Good Job. "); refresh(); } prevFloor = false; playerX = vDL[dNum]->downstairXCoord(); playerY = vDL[dNum]->downstairYCoord(); } //dl.display(); //continue; //cout << endl << "Final State: " << endl << endl; tempX = playerX; tempY = playerY; vDL[dNum]->setCreature(pPlayer, playerX, playerY); while(true) { if( moveCount % 10 == 0 ) { if(pPlayer->getName() =="God") { pPlayer->setHP(1000000000); } else { if( pPlayer->getHP() < 97 ) { pPlayer->setHP( pPlayer->getHP() + 3 ); } } } if( moveCount == 20 ) { vvCreatures[dNum].push_back(CreatureFactory::instance().generateCreature((vDL.size())*2)); while(true) { thingTempX = mt() % 79; thingTempY = mt() % 20; wallOccupied = vDL[dNum]->checkMove(thingTempX, thingTempY); if( wallOccupied == true ) { vDL[dNum]->setCreature(vvCreatures[dNum][vvCreatures.size()-1], thingTempX, thingTempY); vvCreatures[dNum][vvCreatures.size()-1]->setCoords(thingTempX, thingTempY); break; } } } do { for( size_t y = 0; y < 20 ; y++ ) { for( size_t x = 0; x < 79 ; x++ ) { move(y,x); addch(vDL[dNum]->display(x,y)); } refresh(); //cout << endl; } sMove = getch(); move(23,0); clrtoeol(); move(24,0); clrtoeol(); move(25,0); clrtoeol(); move(26,0); clrtoeol(); move(21,0); clrtoeol(); //vDL[dNum]->display(); //refresh(); mvprintw(30,0,"Got it. Next? "); //cout << endl <<"Got it, " << pPlayer->getName() << " What Next? "; //getnstr(sMove, sizeof( users_name ) - 1 ); //cin >> sMove; //cout << endl; if( sMove == "w" ) { //up tempY--; break; } else if( sMove == "s" ) { //down tempY++; break; } else if( sMove == "a" ) { //left tempX--; break; } else if( sMove == "d" ) { //right tempX++; break; } else if( sMove == "e" ) { //up to the right tempX++; tempY--; break; } else if( sMove == "x" ) { //down to the right tempX++; tempY++; break; } else if( sMove == "z" ) { //down to the left tempX--; tempY++; break; } else if( sMove == "`" ) { //up to the left tempX--; tempY--; break; } else if( sMove == "q" ) { clear(); mvprintw(0,0,"Really!? You just quit. Good going."); break; } else if( sMove == ">" ) { if( playerX == vDL[dNum]->downstairXCoord() && playerY == vDL[dNum]->downstairYCoord() ) { clear(); nextFloor = true; break; } pPlayer->setExperience(pPlayer->getExperience() + 5 * vDL.size()); } else if( sMove == "<" ) { if( playerX == vDL[dNum]->upstairXCoord() && playerY == vDL[dNum]->upstairYCoord() ) { prevFloor = true; break; } } else if( sMove == "p" ) { if( vDL[dNum]->checkItem(playerX, playerY) ) { vDL[dNum]->pickUpItem(playerX, playerY); if(pPlayer->getDropItem() != NULL) { vDL[dNum]->setItems(pPlayer->getDropItem(), playerX, playerY); } break; } } else if( sMove == "l" ) { pPlayer->setDropItem(); if( pPlayer->getDropItem() != NULL ) { vDL[dNum]->setItems(pPlayer->getDropItem(), playerX, playerY); } } else if( sMove == "u" ) { pPlayer->getInventory(); } else { //cout << endl << "What!? I try that again. I have no idea what you are trying to do." << endl; mvprintw(21,0,"What!? I try that again. I have no idea what you are trying to do."); } mvprintw(50,0,"Got it, What Next? "); refresh(); }while( sMove != "q" ); if( sMove == "q" ) { //cout << endl << "Really!? You just quit. Good going." << endl; break; } /////////////////////////////////////PLAYER MOVEMENT AND ATTACK/////////////////////////////////////////// for( size_t i = 0 ; i < vvCreatures[dNum].size() ; i++ ) { if( vvCreatures[dNum][i]->getCoordX() == tempX && vvCreatures[dNum][i]->getCoordY() == tempY ) { //cout << "creature occupied set to true" << endl; creatureOccupied = true; break; } } wallOccupied = vDL[dNum]->DungeonLevel::checkMove(tempX,tempY); if(wallOccupied == true && creatureOccupied == false && ( tempX <! 0 || tempX >! 79 || tempY <! 0 || tempY >! 20 )) { vDL[dNum]->removeCreature(playerX, playerY); playerX = tempX; playerY = tempY; vDL[dNum]->setCreature(pPlayer, playerX, playerY); creatureTurn = true; } else if( wallOccupied == true && creatureOccupied == true ) { if( bWeapon == false ) { attack = mt() % (pPlayer->getWeapon())->getDamage(); } else { attack = mt() % (punch->getDamage()); } HP = (vDL[dNum]->getCreature(tempX,tempY))->getHP(); //cout << endl << "Creature's HP before: " << HP << endl; mvprintw(24,0,"Creature's HP before: %i", HP); refresh(); (vDL[dNum]->getCreature(tempX,tempY))->setHP(HP - attack); //cout << endl << pPlayer->getName() << " attacked " << (vDL[dNum]->getCreature(tempX, tempY))->getName() << " for " << attack << " damage " << endl; if( HP - attack <= 0 ) { for( int i = 0 ; i < vvCreatures[dNum].size() ; i++ ) { if( vvCreatures[dNum][i]->getCoordX() == tempX && vvCreatures[dNum][i]->getCoordY() == tempY ) { vDL[dNum]->removeCreature( vvCreatures[dNum][i]->getCoordX(), vvCreatures[dNum][i]->getCoordY() ); //cout << pPlayer->getName() << " killed " << vvCreatures[dNum][i]->getName() << "!" << endl; mvprintw(27,0,"%s killed the creature!",pPlayer->getName().c_str()); delete vvCreatures[dNum][i]; vvCreatures[dNum].erase(vvCreatures[dNum].begin() + i); break; } } pPlayer->setExperience(pPlayer->getExperience() + vDL.size() * 5); } else { HP = (vDL[dNum]->getCreature(tempX,tempY))->getHP(); } //cout << endl << "Creature's HP after: " << HP << endl; mvprintw(26,0,"Creature's HP after: %i", HP); refresh(); creatureOccupied = false; tempX = playerX; tempY = playerY; } else if(wallOccupied == false) { tempX = playerX; tempY = playerY; } //cout << endl << pPlayer->getName() << "'s health is " << pPlayer->getHP() << endl; mvprintw(30,0,"%s's health is %i.", pPlayer->getName().c_str(), pPlayer->getHP()); //cout << endl << "There are " << vvCreatures[dNum].size() << " creatures left on the field. " << endl; mvprintw(31,0,"There are %i creatures left on the field. ", vvCreatures[dNum].size()); //cout << endl << pPlayer->getName() << " has " << pPlayer->getHP() << " Health and " << pPlayer->getExperience() << " Experience right now."; mvprintw(32,0,"%s has %i Health and %i Experience right now.",pPlayer->getName().c_str(),pPlayer->getHP(),pPlayer->getExperience()); //cout << pPlayer->getName() << " killed the monster and gained experience!" << endl; ////////////////////////////////////MONSTER MOVEMENT AND ATTACK///////////////////////////////////////////// for( size_t i = 0 ; i < vvCreatures[dNum].size() ; i++ ) { thingTempX = vvCreatures[dNum][i]->getCoordX(); thingTempY = vvCreatures[dNum][i]->getCoordY(); //cout << endl << "Creature " << i << " moved from (" << thingTempX << ", " << thingTempY << ") to ("; //mvprintw("Creature %i moved from (%i,%i) to (", i,thingTempX,thingTempY); refresh(); if( thingTempX < playerX ) { thingTempX ++; } else if( thingTempX > playerX ) { thingTempX --; } if( thingTempY < playerY ) { thingTempY ++; } else if( thingTempY > playerY ) { thingTempY --; } for( size_t j = 0 ; j < vvCreatures[dNum].size() ; j++ ) { if( vvCreatures[dNum][j]->getCoordX() == thingTempX && vvCreatures[dNum][j]->getCoordY() == thingTempY ) { creatureOccupied = true; } } //cout << ")" << endl; if(wallOccupied == false) { //vDL[dNum]->removeCreature(vvCreatures[dNum][i]->getCoordX(), vvCreatures[dNum][i]->getCoordY()); //cout << endl << "restraint" << endl; mvprintw(23,50,"You cannot move there...It's a wall."); //vDL[dNum]->setCreature(vvCreatures[dNum][i], vvCreatures[dNum][i]->getCoordX(), vvCreatures[dNum][i]->getCoordY()); } else if( (vDL[dNum]->checkMove(thingTempX, thingTempY) == true && creatureOccupied == false) && (playerX != thingTempX && playerY != thingTempY) ) { vDL[dNum]->removeCreature(vvCreatures[dNum][i]->getCoordX(), vvCreatures[dNum][i]->getCoordY()); vvCreatures[dNum][i]->setCoords(thingTempX, thingTempY); vDL[dNum]->setCreature(vvCreatures[dNum][i], thingTempX, thingTempY); } else if( ((abs( playerX - thingTempX ) == 1) && (abs( playerY - thingTempY ) == 1)) || (thingTempX == playerX && thingTempY == playerY) ) { //cout << endl << vvCreatures[dNum][i]->getName() << " attacked " << pPlayer->getName(); mvprintw(25,0,"%s atacked %s",vvCreatures[dNum][i]->getName().c_str(), pPlayer->getName().c_str()); HP = pPlayer->getHP(); attack = mt() % punch->getDamage() - (pPlayer->getArmorType())->getArmorValue(); if ( attack > 0 ) { pPlayer->setHP(HP - attack); //cout << " for " << attack << " damage." << endl; mvprintw(25,30," for %i damage.",attack); refresh(); } else { mvprintw(25,30," for 0 damage"); refresh(); //cout << "for 0 damage" << endl; } //If Player Died in the attack: if(pPlayer->getHP() <= 0) { char regen[ 4 ]; //cout << endl << "You were killed in battle!! Do you want to come back to life? y or n? " << endl; mvprintw(40,0,"You were killed in battle!! Do you want to come back to life? y or n? " ); refresh(); getnstr( regen, sizeof( regen ) - 1 ); //cin >> regen; if (regen == "y") { pPlayer->setHP(100); } break; } //cout << endl << pPlayer->getName() << " now has " << pPlayer->getHP() << " health left " << endl; //vDL[dNum]->setCreature(vvCreatures[dNum][i], vvCreatures[dNum][i]->getCoordX(), vvCreatures[dNum][i]->getCoordY()); creatureOccupied = false; } //cout << endl << vvCreatures[dNum][i]->getCoordX() << ", " << vvCreatures[dNum][i]->getCoordY() << ")" << endl; } if( nextFloor == true ) { dNum++; if( dNum < vDL.size() ) { sameFloor = true; } break; } else if( prevFloor == true ) { dNum--; break; } } if( sMove == "q" ) { //printw("\n You quit... you Quitter!"); //printw("\n"); break; } } for( size_t i = 0 ; i < vDL.size() ; i++ ) { for( size_t j ; j < vvCreatures[i].size() ; j++ ) { delete vvCreatures[i][j]; } } /*cout << "GAME OVER" << endl; cout << "Score - " << pPlayer->getExperience() << endl; cout << "Health at the end - " << pPlayer->getHP() << endl;*/ clear(); mvprintw(0,0,"GAME OVER" ); mvprintw(1,0,"Score - %i", pPlayer->getExperience() ); mvprintw(2,0, "Health at the end - %i", pPlayer->getHP() ); mvprintw(3,0," "); refresh(); delete pPlayer; delete punch; delete keys; delete TrashCanLid; output.open(outFileName); //outputXML(vWorld, output); //delete memory to avoid memory leaks for(auto it = vWorld.begin() ; it != vWorld.end() ; it++) { delete (*it); } //close input and output files! input.close(); output.close(); clear(); return 0; }
void CSmeltArmor::proceesMessage(int type, google::protobuf::Message *msg) { this->setVisible(true); switch (type) { //洗练数据 case SmeltDataRequestMsg: { Armor *res = (Armor*)msg; if(res) { m_armor.armor.atkRange = res->atkrange(); m_armor.armor.hpRange = res->hprange(); m_armor.armor.defRange = res->defrange(); m_armor.armor.IntRange = res->dexrange(); m_armor.armor.hitRange = res->hitrange(); m_armor.armor.critRange = res->critrange(); m_armor.armor.renewRange = res->renewrange(); m_armor.armor.dodgeRange = res->dodgerange(); showSmeltDataToUI(); } }break; //洗练 case SmeltArmorMsg: { SmeltResponse *res = (SmeltResponse*)msg; //1 成功,2 金币不足,3 元宝不足,4 数据错误 if (res->reslut()==1) { //1 攻击addAtk,2 防御addDef,3 血量addHp,4 敏捷addDex,5 命中addHit,6 暴击addCrit,7 回复addRenew,8 闪避addDodge) m_armor.armor.addAtk = res->armor().armor().addatk(); m_armor.armor.addDef = res->armor().armor().adddef(); m_armor.armor.addHp = res->armor().armor().addhp(); m_armor.armor.addDex = res->armor().armor().adddex(); m_armor.armor.addHit = res->armor().armor().addhit(); m_armor.armor.addCrit = res->armor().armor().addcrit(); m_armor.armor.addRenew = res->armor().armor().addrenew(); m_armor.armor.addDodge = res->armor().armor().adddodge(); //更新金钱 UserData *data = DataCenter::sharedData()->getUser()->getUserData(); data->setCoin(data->getCoin() - m_coin); data->setRoleGold(data->getRoleGold() - m_diamond); CSceneManager::sharedSceneManager()->PostMessageA(UPDATE_HERO,0,nullptr,nullptr); CSceneManager::sharedSceneManager()->PostMessageA(UPDATE_ITEM_DATA, 2, nullptr, &m_armor); //播放效果 float fTime = showStrengthEffect(); this->runAction(CCSequence::createWithTwoActions(CCDelayTime::create(fTime), CCCallFunc::create(this, callfunc_selector(CSmeltArmor::showArmorAttr)))); } else if (res->reslut()==2) { //ShowPopTextTip(GETLANGSTR(205)); CShowToBuyResource* pShow = CShowToBuyResource::create(); pShow->showToBuyResourceByType(ShowBuyResourceCoin); } else if (res->reslut()==3) { //ShowPopTextTip(GETLANGSTR(203)); CShowToBuyResource* pShow = CShowToBuyResource::create(); pShow->showToBuyResourceByType(ShowBuyResourceGold); } else if (res->reslut()==4) { ShowPopTextTip(GETLANGSTR(170)); } }break; default: break; } }
/** * Initializes all the elements in the Sell/Sack screen. * @param game Pointer to the core game. * @param base Pointer to the base to get info from. * @param origin Game section that originated this state. */ SellState::SellState(Base *base, OptionsOrigin origin) : _base(base), _sel(0), _total(0), _spaceChange(0), _origin(origin) { bool overfull = Options::storageLimitsEnforced && _base->storesOverfull(); // Create objects _window = new Window(this, 320, 200, 0, 0); _btnOk = new TextButton(overfull? 288:148, 16, overfull? 16:8, 176); _btnCancel = new TextButton(148, 16, 164, 176); _txtTitle = new Text(310, 17, 5, 8); _txtSales = new Text(150, 9, 10, 24); _txtFunds = new Text(150, 9, 160, 24); _txtSpaceUsed = new Text(150, 9, 160, 34); _txtQuantity = new Text(54, 9, 136, 44); _txtSell = new Text(96, 9, 190, 44); _txtValue = new Text(40, 9, 270, 44); _cbxCategory = new ComboBox(this, 120, 16, 10, 36); _lstItems = new TextList(287, 120, 8, 54); // Set palette setInterface("sellMenu"); _ammoColor = _game->getMod()->getInterface("sellMenu")->getElement("ammoColor")->color; add(_window, "window", "sellMenu"); add(_btnOk, "button", "sellMenu"); add(_btnCancel, "button", "sellMenu"); add(_txtTitle, "text", "sellMenu"); add(_txtSales, "text", "sellMenu"); add(_txtFunds, "text", "sellMenu"); add(_txtSpaceUsed, "text", "sellMenu"); add(_txtQuantity, "text", "sellMenu"); add(_txtSell, "text", "sellMenu"); add(_txtValue, "text", "sellMenu"); add(_lstItems, "list", "sellMenu"); add(_cbxCategory, "text", "sellMenu"); centerAllSurfaces(); // Set up objects _window->setBackground(_game->getMod()->getSurface("BACK13.SCR")); _btnOk->setText(tr("STR_SELL_SACK")); _btnOk->onMouseClick((ActionHandler)&SellState::btnOkClick); _btnOk->onKeyboardPress((ActionHandler)&SellState::btnOkClick, Options::keyOk); _btnCancel->setText(tr("STR_CANCEL")); _btnCancel->onMouseClick((ActionHandler)&SellState::btnCancelClick); _btnCancel->onKeyboardPress((ActionHandler)&SellState::btnCancelClick, Options::keyCancel); if (overfull) { _btnCancel->setVisible(false); _btnOk->setVisible(false); } _txtTitle->setBig(); _txtTitle->setAlign(ALIGN_CENTER); _txtTitle->setText(tr("STR_SELL_ITEMS_SACK_PERSONNEL")); _txtSales->setText(tr("STR_VALUE_OF_SALES").arg(Unicode::formatFunding(_total))); _txtFunds->setText(tr("STR_FUNDS").arg(Unicode::formatFunding(_game->getSavedGame()->getFunds()))); _txtSpaceUsed->setVisible(Options::storageLimitsEnforced); std::ostringstream ss; ss << _base->getUsedStores() << ":" << _base->getAvailableStores(); _txtSpaceUsed->setText(ss.str()); _txtSpaceUsed->setText(tr("STR_SPACE_USED").arg(ss.str())); _txtQuantity->setText(tr("STR_QUANTITY_UC")); _txtSell->setText(tr("STR_SELL_SACK")); _txtValue->setText(tr("STR_VALUE")); _lstItems->setArrowColumn(182, ARROW_VERTICAL); _lstItems->setColumns(4, 156, 54, 24, 53); _lstItems->setSelectable(true); _lstItems->setBackground(_window); _lstItems->setMargin(2); _lstItems->onLeftArrowPress((ActionHandler)&SellState::lstItemsLeftArrowPress); _lstItems->onLeftArrowRelease((ActionHandler)&SellState::lstItemsLeftArrowRelease); _lstItems->onLeftArrowClick((ActionHandler)&SellState::lstItemsLeftArrowClick); _lstItems->onRightArrowPress((ActionHandler)&SellState::lstItemsRightArrowPress); _lstItems->onRightArrowRelease((ActionHandler)&SellState::lstItemsRightArrowRelease); _lstItems->onRightArrowClick((ActionHandler)&SellState::lstItemsRightArrowClick); _lstItems->onMousePress((ActionHandler)&SellState::lstItemsMousePress); _cats.push_back("STR_ALL_ITEMS"); const std::vector<std::string> &cw = _game->getMod()->getCraftWeaponsList(); for (std::vector<std::string>::const_iterator i = cw.begin(); i != cw.end(); ++i) { RuleCraftWeapon *rule = _game->getMod()->getCraftWeapon(*i); _craftWeapons.insert(rule->getLauncherItem()); _craftWeapons.insert(rule->getClipItem()); } const std::vector<std::string> &ar = _game->getMod()->getArmorsList(); for (std::vector<std::string>::const_iterator i = ar.begin(); i != ar.end(); ++i) { Armor *rule = _game->getMod()->getArmor(*i); _armors.insert(rule->getStoreItem()); } for (std::vector<Soldier*>::iterator i = _base->getSoldiers()->begin(); i != _base->getSoldiers()->end(); ++i) { if ((*i)->getCraft() == 0) { TransferRow row = { TRANSFER_SOLDIER, (*i), (*i)->getName(true), 0, 1, 0, 0 }; _items.push_back(row); std::string cat = getCategory(_items.size() - 1); if (std::find(_cats.begin(), _cats.end(), cat) == _cats.end()) { _cats.push_back(cat); } } } for (std::vector<Craft*>::iterator i = _base->getCrafts()->begin(); i != _base->getCrafts()->end(); ++i) { if ((*i)->getStatus() != "STR_OUT") { TransferRow row = { TRANSFER_CRAFT, (*i), (*i)->getName(_game->getLanguage()), (*i)->getRules()->getSellCost(), 1, 0, 0 }; _items.push_back(row); std::string cat = getCategory(_items.size() - 1); if (std::find(_cats.begin(), _cats.end(), cat) == _cats.end()) { _cats.push_back(cat); } } } if (_base->getAvailableScientists() > 0) { TransferRow row = { TRANSFER_SCIENTIST, 0, tr("STR_SCIENTIST"), 0, _base->getAvailableScientists(), 0, 0 }; _items.push_back(row); std::string cat = getCategory(_items.size() - 1); if (std::find(_cats.begin(), _cats.end(), cat) == _cats.end()) { _cats.push_back(cat); } } if (_base->getAvailableEngineers() > 0) { TransferRow row = { TRANSFER_ENGINEER, 0, tr("STR_ENGINEER"), 0, _base->getAvailableEngineers(), 0, 0 }; _items.push_back(row); std::string cat = getCategory(_items.size() - 1); if (std::find(_cats.begin(), _cats.end(), cat) == _cats.end()) { _cats.push_back(cat); } } const std::vector<std::string> &items = _game->getMod()->getItemsList(); for (std::vector<std::string>::const_iterator i = items.begin(); i != items.end(); ++i) { int qty = _base->getStorageItems()->getItem(*i); if (Options::storageLimitsEnforced && _origin == OPT_BATTLESCAPE) { for (std::vector<Transfer*>::iterator j = _base->getTransfers()->begin(); j != _base->getTransfers()->end(); ++j) { if ((*j)->getItems() == *i) { qty += (*j)->getQuantity(); } } for (std::vector<Craft*>::iterator j = _base->getCrafts()->begin(); j != _base->getCrafts()->end(); ++j) { qty += (*j)->getItems()->getItem(*i); } } RuleItem *rule = _game->getMod()->getItem(*i, true); if (qty > 0 && (Options::canSellLiveAliens || !rule->isAlien())) { TransferRow row = { TRANSFER_ITEM, rule, tr(*i), rule->getSellCost(), qty, 0, 0 }; _items.push_back(row); std::string cat = getCategory(_items.size() - 1); if (std::find(_cats.begin(), _cats.end(), cat) == _cats.end()) { _cats.push_back(cat); } } } _cbxCategory->setOptions(_cats, true); _cbxCategory->onChange((ActionHandler)&SellState::cbxCategoryChange); updateList(); _timerInc = new Timer(250); _timerInc->onTimer((StateHandler)&SellState::increase); _timerDec = new Timer(250); _timerDec->onTimer((StateHandler)&SellState::decrease); }
ArticleStateVehicle::ArticleStateVehicle(ArticleDefinitionVehicle *defs) : ArticleState(defs->id) { Unit *unit = _game->getMod()->getUnit(defs->id); Armor *armor = _game->getMod()->getArmor(unit->getArmor()); RuleItem *item = _game->getMod()->getItem(defs->id); // add screen elements _txtTitle = new Text(310, 17, 5, 23); _txtInfo = new Text(300, 150, 10, 122); _lstStats = new TextList(300, 89, 10, 48); // Set palette setPalette("PAL_UFOPAEDIA"); ArticleState::initLayout(); // add other elements add(_txtTitle); add(_txtInfo); add(_lstStats); // Set up objects _game->getMod()->getSurface("BACK10.SCR")->blit(_bg); _btnOk->setColor(Palette::blockOffset(5)); _btnPrev->setColor(Palette::blockOffset(5)); _btnNext->setColor(Palette::blockOffset(5)); _txtTitle->setColor(Palette::blockOffset(15)+4); _txtTitle->setBig(); _txtTitle->setText(tr(defs->title)); _txtInfo->setColor(Palette::blockOffset(15)-1); _txtInfo->setWordWrap(true); _txtInfo->setText(tr(defs->text)); _lstStats->setColor(Palette::blockOffset(15)+4); _lstStats->setColumns(2, 175, 145); _lstStats->setDot(true); std::wostringstream ss; ss << unit->getStats()->tu; _lstStats->addRow(2, tr("STR_TIME_UNITS").c_str(), ss.str().c_str()); std::wostringstream ss2; ss2 << unit->getStats()->health; _lstStats->addRow(2, tr("STR_HEALTH").c_str(), ss2.str().c_str()); std::wostringstream ss3; ss3 << armor->getFrontArmor(); _lstStats->addRow(2, tr("STR_FRONT_ARMOR").c_str(), ss3.str().c_str()); std::wostringstream ss4; ss4 << armor->getSideArmor(); _lstStats->addRow(2, tr("STR_LEFT_ARMOR").c_str(), ss4.str().c_str()); std::wostringstream ss5; ss5 << armor->getSideArmor(); _lstStats->addRow(2, tr("STR_RIGHT_ARMOR").c_str(), ss5.str().c_str()); std::wostringstream ss6; ss6 << armor->getRearArmor(); _lstStats->addRow(2, tr("STR_REAR_ARMOR").c_str(), ss6.str().c_str()); std::wostringstream ss7; ss7 << armor->getUnderArmor(); _lstStats->addRow(2, tr("STR_UNDER_ARMOR").c_str(), ss7.str().c_str()); _lstStats->addRow(2, tr("STR_WEAPON").c_str(), tr(defs->weapon).c_str()); if (!item->getCompatibleAmmo()->empty()) { RuleItem *ammo = _game->getMod()->getItem(item->getCompatibleAmmo()->front()); std::wostringstream ss8; ss8 << ammo->getPower(); _lstStats->addRow(2, tr("STR_WEAPON_POWER").c_str(), ss8.str().c_str()); _lstStats->addRow(2, tr("STR_AMMUNITION").c_str(), tr(ammo->getName()).c_str()); std::wostringstream ss9; if (item->getClipSize() > 0) { ss9 << item->getClipSize(); } else { ss9 << ammo->getClipSize(); } _lstStats->addRow(2, tr("STR_ROUNDS").c_str(), ss9.str().c_str()); _txtInfo->setY(138); } else { std::wostringstream ss8; ss8 << item->getPower(); _lstStats->addRow(2, tr("STR_WEAPON_POWER").c_str(), ss8.str().c_str()); } centerAllSurfaces(); }
/** * Initializes all the elements in the Soldier Armor window. * @param game Pointer to the core game. * @param base Pointer to the base to get info from. * @param soldier ID of the selected soldier. */ SoldierArmorState::SoldierArmorState(Base *base, size_t soldier) : _base(base), _soldier(soldier) { _screen = false; // Create objects _window = new Window(this, 192, 120, 64, 40, POPUP_BOTH); _btnCancel = new TextButton(140, 16, 90, 136); _txtTitle = new Text(182, 16, 69, 48); _txtType = new Text(90, 9, 80, 72); _txtQuantity = new Text(70, 9, 177, 72); _lstArmor = new TextList(160, 40, 73, 88); // Set palette setPalette("PAL_BASESCAPE", _game->getRuleset()->getInterface("soldierArmor")->getElement("palette")->color); add(_window, "window", "soldierArmor"); add(_btnCancel, "button", "soldierArmor"); add(_txtTitle, "text", "soldierArmor"); add(_txtType, "text", "soldierArmor"); add(_txtQuantity, "text", "soldierArmor"); add(_lstArmor, "list", "soldierArmor"); centerAllSurfaces(); // Set up objects _window->setBackground(_game->getResourcePack()->getSurface("BACK14.SCR")); _btnCancel->setText(tr("STR_CANCEL_UC")); _btnCancel->onMouseClick((ActionHandler)&SoldierArmorState::btnCancelClick); _btnCancel->onKeyboardPress((ActionHandler)&SoldierArmorState::btnCancelClick, Options::keyCancel); Soldier *s = _base->getSoldiers()->at(_soldier); _txtTitle->setAlign(ALIGN_CENTER); _txtTitle->setText(tr("STR_SELECT_ARMOR_FOR_SOLDIER").arg(s->getName())); _txtType->setText(tr("STR_TYPE")); _txtQuantity->setText(tr("STR_QUANTITY_UC")); _lstArmor->setColumns(2, 112, 41); _lstArmor->setSelectable(true); _lstArmor->setBackground(_window); _lstArmor->setMargin(8); const std::vector<std::string> &armors = _game->getRuleset()->getArmorsList(); for (std::vector<std::string>::const_iterator i = armors.begin(); i != armors.end(); ++i) { Armor *a = _game->getRuleset()->getArmor(*i); if (_base->getItems()->getItem(a->getStoreItem()) > 0) { _armors.push_back(a); std::wostringstream ss; if (_game->getSavedGame()->getMonthsPassed() > -1) { ss << _base->getItems()->getItem(a->getStoreItem()); } else { ss << "-"; } _lstArmor->addRow(2, tr(a->getType()).c_str(), ss.str().c_str()); } else if (a->getStoreItem() == "STR_NONE") { _armors.push_back(a); _lstArmor->addRow(1, tr(a->getType()).c_str()); } } _lstArmor->onMouseClick((ActionHandler)&SoldierArmorState::lstArmorClick); }
/** * Loads a ruleset's contents from a YAML file. * Rules that match pre-existing rules overwrite them. * @param filename YAML filename. */ void Ruleset::loadFile(const std::string &filename) { YAML::Node doc = YAML::LoadFile(filename); for (YAML::const_iterator i = doc["countries"].begin(); i != doc["countries"].end(); ++i) { std::string type = (*i)["type"].as<std::string>(); RuleCountry *rule; if (_countries.find(type) != _countries.end()) { rule = _countries[type]; } else { rule = new RuleCountry(type); _countries[type] = rule; _countriesIndex.push_back(type); } rule->load(*i); } for (YAML::const_iterator i = doc["regions"].begin(); i != doc["regions"].end(); ++i) { std::string type = (*i)["type"].as<std::string>(); RuleRegion *rule; if (_regions.find(type) != _regions.end()) { rule = _regions[type]; } else { rule = new RuleRegion(type); _regions[type] = rule; _regionsIndex.push_back(type); } rule->load(*i); } for (YAML::const_iterator i = doc["facilities"].begin(); i != doc["facilities"].end(); ++i) { std::string type = (*i)["type"].as<std::string>(); RuleBaseFacility *rule; if (_facilities.find(type) != _facilities.end()) { rule = _facilities[type]; } else { rule = new RuleBaseFacility(type); _facilities[type] = rule; _facilitiesIndex.push_back(type); } _facilityListOrder += 100; rule->load(*i, _modIndex, _facilityListOrder); } for (YAML::const_iterator i = doc["crafts"].begin(); i != doc["crafts"].end(); ++i) { std::string type = (*i)["type"].as<std::string>(); RuleCraft *rule; if (_crafts.find(type) != _crafts.end()) { rule = _crafts[type]; } else { rule = new RuleCraft(type); _crafts[type] = rule; _craftsIndex.push_back(type); } _craftListOrder += 100; rule->load(*i, this, _modIndex, _craftListOrder); } for (YAML::const_iterator i = doc["craftWeapons"].begin(); i != doc["craftWeapons"].end(); ++i) { std::string type = (*i)["type"].as<std::string>(); RuleCraftWeapon *rule; if (_craftWeapons.find(type) != _craftWeapons.end()) { rule = _craftWeapons[type]; } else { rule = new RuleCraftWeapon(type); _craftWeapons[type] = rule; _craftWeaponsIndex.push_back(type); } rule->load(*i, _modIndex); } for (YAML::const_iterator i = doc["items"].begin(); i != doc["items"].end(); ++i) { std::string type = (*i)["type"].as<std::string>(); RuleItem *rule; if (_items.find(type) != _items.end()) { rule = _items[type]; } else { rule = new RuleItem(type); _items[type] = rule; _itemsIndex.push_back(type); } _itemListOrder += 100; rule->load(*i, _modIndex, _itemListOrder); } for (YAML::const_iterator i = doc["ufos"].begin(); i != doc["ufos"].end(); ++i) { std::string type = (*i)["type"].as<std::string>(); RuleUfo *rule; if (_ufos.find(type) != _ufos.end()) { rule = _ufos[type]; } else { rule = new RuleUfo(type); _ufos[type] = rule; _ufosIndex.push_back(type); } rule->load(*i, this); } for (YAML::const_iterator i = doc["invs"].begin(); i != doc["invs"].end(); ++i) { std::string type = (*i)["id"].as<std::string>(); RuleInventory *rule; if (_invs.find(type) != _invs.end()) { rule = _invs[type]; } else { rule = new RuleInventory(type); _invs[type] = rule; } rule->load(*i); } for (YAML::const_iterator i = doc["terrains"].begin(); i != doc["terrains"].end(); ++i) { std::string type = (*i)["name"].as<std::string>(); RuleTerrain *rule; if (_terrains.find(type) != _terrains.end()) { rule = _terrains[type]; } else { rule = new RuleTerrain(type); _terrains[type] = rule; _terrainIndex.push_back(type); } rule->load(*i, this); } for (YAML::const_iterator i = doc["armors"].begin(); i != doc["armors"].end(); ++i) { std::string type = (*i)["type"].as<std::string>(); Armor *rule; if (_armors.find(type) != _armors.end()) { rule = _armors[type]; } else { rule = new Armor(type, "", 0); _armors[type] = rule; _armorsIndex.push_back(type); } rule->load(*i); } for (YAML::const_iterator i = doc["soldiers"].begin(); i != doc["soldiers"].end(); ++i) { std::string type = (*i)["type"].as<std::string>(); RuleSoldier *rule; if (_soldiers.find(type) != _soldiers.end()) { rule = _soldiers[type]; } else { rule = new RuleSoldier(type); _soldiers[type] = rule; } rule->load(*i); } for (YAML::const_iterator i = doc["units"].begin(); i != doc["units"].end(); ++i) { std::string type = (*i)["type"].as<std::string>(); Unit *rule; if (_units.find(type) != _units.end()) { rule = _units[type]; } else { rule = new Unit(type, "", ""); _units[type] = rule; } rule->load(*i); } for (YAML::const_iterator i = doc["alienRaces"].begin(); i != doc["alienRaces"].end(); ++i) { std::string type = (*i)["id"].as<std::string>(); AlienRace *rule; if (_alienRaces.find(type) != _alienRaces.end()) { rule = _alienRaces[type]; } else { rule = new AlienRace(type); _alienRaces[type] = rule; _aliensIndex.push_back(type); } rule->load(*i); } for (YAML::const_iterator i = doc["alienDeployments"].begin(); i != doc["alienDeployments"].end(); ++i) { std::string type = (*i)["type"].as<std::string>(); AlienDeployment *rule; if (_alienDeployments.find(type) != _alienDeployments.end()) { rule = _alienDeployments[type]; } else { rule = new AlienDeployment(type); _alienDeployments[type] = rule; _deploymentsIndex.push_back(type); } rule->load(*i); } for (YAML::const_iterator i = doc["research"].begin(); i != doc["research"].end(); ++i) { std::string type = (*i)["name"].as<std::string>(); RuleResearch *rule; if (_research.find(type) != _research.end()) { rule = _research[type]; } else { rule = new RuleResearch(type); _research[type] = rule; _researchIndex.push_back(type); } _researchListOrder += 100; rule->load(*i, _researchListOrder); } for (YAML::const_iterator i = doc["manufacture"].begin(); i != doc["manufacture"].end(); ++i) { std::string type = (*i)["name"].as<std::string>(); RuleManufacture *rule; if (_manufacture.find(type) != _manufacture.end()) { rule = _manufacture[type]; } else { rule = new RuleManufacture(type); _manufacture[type] = rule; _manufactureIndex.push_back(type); } _manufactureListOrder += 100; rule->load(*i, _manufactureListOrder); } for (YAML::const_iterator i = doc["ufopaedia"].begin(); i != doc["ufopaedia"].end(); ++i) { std::string id = (*i)["id"].as<std::string>(); ArticleDefinition *rule; if (_ufopaediaArticles.find(id) != _ufopaediaArticles.end()) { rule = _ufopaediaArticles[id]; } else { UfopaediaTypeId type = (UfopaediaTypeId)(*i)["type_id"].as<int>(); switch (type) { case UFOPAEDIA_TYPE_CRAFT: rule = new ArticleDefinitionCraft(); break; case UFOPAEDIA_TYPE_CRAFT_WEAPON: rule = new ArticleDefinitionCraftWeapon(); break; case UFOPAEDIA_TYPE_VEHICLE: rule = new ArticleDefinitionVehicle(); break; case UFOPAEDIA_TYPE_ITEM: rule = new ArticleDefinitionItem(); break; case UFOPAEDIA_TYPE_ARMOR: rule = new ArticleDefinitionArmor(); break; case UFOPAEDIA_TYPE_BASE_FACILITY: rule = new ArticleDefinitionBaseFacility(); break; case UFOPAEDIA_TYPE_TEXTIMAGE: rule = new ArticleDefinitionTextImage(); break; case UFOPAEDIA_TYPE_TEXT: rule = new ArticleDefinitionText(); break; case UFOPAEDIA_TYPE_UFO: rule = new ArticleDefinitionUfo(); break; default: rule = 0; break; } _ufopaediaArticles[id] = rule; _ufopaediaIndex.push_back(id); } _ufopaediaListOrder += 100; rule->load(*i, _ufopaediaListOrder); } //_startingBase->load(i->second, 0); if (doc["startingBase"]) _startingBase = YAML::Node(doc["startingBase"]); _startingTime.load(doc["startingTime"]); _costSoldier = doc["costSoldier"].as<int>(_costSoldier); _costEngineer = doc["costEngineer"].as<int>(_costEngineer); _costScientist = doc["costScientist"].as<int>(_costScientist); _timePersonnel = doc["timePersonnel"].as<int>(_timePersonnel); for (YAML::const_iterator i = doc["ufoTrajectories"].begin(); i != doc["ufoTrajectories"].end(); ++i) { std::string id = (*i)["id"].as<std::string>(); if (_ufoTrajectories.find(id) != _ufoTrajectories.end()) { _ufoTrajectories[id]->load(*i); } else { std::auto_ptr<UfoTrajectory> rule(new UfoTrajectory); rule->load(*i); _ufoTrajectories[id] = rule.release(); } } for (YAML::const_iterator i = doc["alienMissions"].begin(); i != doc["alienMissions"].end(); ++i) { std::string type = (*i)["type"].as<std::string>(); if (_alienMissions.find(type) != _alienMissions.end()) { _alienMissions[type]->load(*i); } else { std::auto_ptr<RuleAlienMission> rule(new RuleAlienMission()); rule->load(*i); _alienMissions[type] = rule.release(); _alienMissionsIndex.push_back(type); } } _alienItemLevels.clear(); for (YAML::const_iterator i = doc["alienItemLevels"].begin(); i != doc["alienItemLevels"].end(); ++i) { std::vector<int> type = (*i).as< std::vector<int> >(); _alienItemLevels.push_back(type); } for (YAML::const_iterator i = doc["MCDPatches"].begin(); i != doc["MCDPatches"].end(); ++i) { std::string type = (*i)["type"].as<std::string>(); if (_MCDPatches.find(type) != _MCDPatches.end()) { _MCDPatches[type]->load(*i); } else { std::auto_ptr<MCDPatch> patch(new MCDPatch()); patch->load(*i); _MCDPatches[type] = patch.release(); _MCDPatchesIndex.push_back(type); } } for (YAML::const_iterator i = doc["extraSprites"].begin(); i != doc["extraSprites"].end(); ++i) { std::string type = (*i)["type"].as<std::string>(); std::auto_ptr<ExtraSprites> extraSprites(new ExtraSprites()); extraSprites->load(*i, _modIndex); _extraSprites.push_back(std::make_pair(type, extraSprites.release())); _extraSpritesIndex.push_back(type); } for (YAML::const_iterator i = doc["extraSounds"].begin(); i != doc["extraSounds"].end(); ++i) { std::string type = (*i)["type"].as<std::string>(); std::auto_ptr<ExtraSounds> extraSounds(new ExtraSounds()); extraSounds->load(*i, _modIndex); _extraSounds.push_back(std::make_pair(type, extraSounds.release())); _extraSoundsIndex.push_back(type); } for (YAML::const_iterator i = doc["extraStrings"].begin(); i != doc["extraStrings"].end(); ++i) { std::string type = (*i)["type"].as<std::string>(); if (_extraStrings.find(type) != _extraStrings.end()) { _extraStrings[type]->load(*i); } else { std::auto_ptr<ExtraStrings> extraStrings(new ExtraStrings()); extraStrings->load(*i); _extraStrings[type] = extraStrings.release(); _extraStringsIndex.push_back(type); } } _modIndex += 1000; }
ArticleStateArmor::ArticleStateArmor(Game *game, ArticleDefinitionArmor *defs, int palSwitch) : ArticleState(game, defs->id, palSwitch) { Armor *armor = _game->getRuleset()->getArmor(defs->id); // add screen elements _txtTitle = new Text(300, 16, 5, 24); // Set palette _game->setPalette(_game->getResourcePack()->getPalette("PALETTES.DAT_4")->getColors()); ArticleState::initLayout(); // add other elements add(_txtTitle); // Set up objects _btnOk->setColor(Palette::blockOffset(0)+15); _btnPrev->setColor(Palette::blockOffset(0)+15); _btnNext->setColor(Palette::blockOffset(0)+15); _txtTitle->setColor(Palette::blockOffset(14)+15); _txtTitle->setBig(); _txtTitle->setText(Ufopaedia::buildText(_game, defs->title)); _image = new Surface(320, 200, 0, 0); add(_image); std::string look = armor->getSpriteInventory(); look += "M0.SPK"; if (!CrossPlatform::fileExists(CrossPlatform::getDataFile("UFOGRAPH/" + look))) { look = armor->getSpriteInventory() + ".SPK"; } _game->getResourcePack()->getSurface(look)->blit(_image); _lstInfo = new TextList(150, 60, 150, 69); add(_lstInfo); _lstInfo->setColor(Palette::blockOffset(14)+15); _lstInfo->setColumns(2, 125, 25); _lstInfo->setDot(true); std::wstringstream ss; ss.str(L"");ss.clear(); ss << armor->getFrontArmor(); _lstInfo->addRow(2, _game->getLanguage()->getString("STR_FRONT_ARMOR").c_str(), ss.str().c_str()); _lstInfo->setCellColor(0, 1, Palette::blockOffset(15)+4); ss.str(L"");ss.clear(); ss << armor->getSideArmor(); _lstInfo->addRow(2, _game->getLanguage()->getString("STR_LEFT_ARMOR").c_str(), ss.str().c_str()); _lstInfo->setCellColor(1, 1, Palette::blockOffset(15)+4); ss.str(L"");ss.clear(); ss << armor->getSideArmor(); _lstInfo->addRow(2, _game->getLanguage()->getString("STR_RIGHT_ARMOR").c_str(), ss.str().c_str()); _lstInfo->setCellColor(2, 1, Palette::blockOffset(15)+4); ss.str(L"");ss.clear(); ss << armor->getRearArmor(); _lstInfo->addRow(2, _game->getLanguage()->getString("STR_REAR_ARMOR").c_str(), ss.str().c_str()); _lstInfo->setCellColor(3, 1, Palette::blockOffset(15)+4); ss.str(L"");ss.clear(); ss << armor->getUnderArmor(); _lstInfo->addRow(2, _game->getLanguage()->getString("STR_UNDER_ARMOR").c_str(), ss.str().c_str()); _lstInfo->setCellColor(4, 1, Palette::blockOffset(15)+4); _lstInfo->draw(); }
void CArmor::read(const Armor& armor) { this->armorType = armor.armortype(); this->baseHp = armor.basehp(); this->baseDef = armor.basedef(); this->baseAtk = armor.baseatk(); this->strenLv = armor.strenlv(); // this->baptize = armor.baptize(); this->addHp = armor.addhp(); this->addDef = armor.adddef(); this->addAtk = armor.addatk(); this->hero = armor.hero(); // for (int i = 0; i < armor.attr_size(); i++) // { // const ExtAttr& attr = armor.attr(i); // CExtAttr ext; // ext.read(attr); // this->attrList.push_back(ext); // } this->baseDex = armor.basedex(); this->baseHit = armor.basehit(); this->baseCrit = armor.basecrit(); this->baseRenew = armor.baserenew(); this->baseDodge = armor.basedodge(); this->addDex = armor.adddex(); this->addHit = armor.addhit(); this->addCrit = armor.addcrit(); this->addRenew = armor.addrenew(); this->addDodge = armor.adddodge(); this->atkRange = armor.atkrange(); this->hpRange = armor.hprange(); this->defRange = armor.defrange(); this->IntRange = armor.dexrange(); this->hitRange = armor.hitrange(); this->critRange = armor.critrange(); this->renewRange = armor.renewrange(); this->dodgeRange = armor.dodgerange(); this->nextAtk = armor.nextatk(); this->nextHp = armor.nexthp(); this->nextDef = armor.nextdef(); this->nextDex = armor.nextdex(); this->nextHit = armor.nexthit(); this->nextCrit = armor.nextcrit(); this->nextRenew = armor.nextrenew(); this->nextDodge = armor.nextdodge(); this->combat = armor.combat(); this->armor_skill = armor.armor_skill(); }