//get item names int Script::getItems(lua_State* L){ short x = (short)luaL_checknumber(L, 1); short y = (short)luaL_checknumber(L, 2); Vector2D pos = Vector2D(x, y); Creature* c = dynamic_cast<Creature*>(wrld.getObject(pos)); if (c){ Inventory* inv = c->getInventory(); vector<Item> items = inv->getItems(); for (unsigned i = 0; i < items.size(); i++){ string name = items[i].getName(); lua_pushstring(L, name.c_str()); } return (int)items.size(); } return 0; }
int main(int argc, char ** argv){ if (argc != 2) { cout << "Enter 1 XML file name!" << endl; return 1; } file<> xmlfile(argv[1]); xml_document<> document; document.parse<0>(xmlfile.data()); //cout << "Name of node: " << document.first_node()->name() << endl; xml_node<> * map = document.first_node(); // Go through all header nodes (room, item, container, etc) for (head_node = map->first_node(); head_node != NULL; head_node = head_node->next_sibling()) { tagName = head_node->name(); valName = head_node->value(); //cout << "Read head node: " << tagName << endl; if(tagName == "room") { Room* room_read = new Room(); rooms.push_back(room_read); //cout << "Making Room..." << endl; // Go through each room properties for(name_node = head_node->first_node();name_node != NULL; name_node = name_node->next_sibling()) { tagName2 = name_node->name(); valName2 = name_node->value(); if(tagName2 == "name") { room_read->setName(valName2); if (valName2 == "Entrance") { current_room = room_read; } //cout << "\tName: " << room_read->getName() << endl; } else if(tagName2 == "description") { room_read->setDescription(valName2); //cout << "\tDescription: " << room_read->getDescription() << endl; } else if(tagName2 == "status") { room_read->setStatus(valName2); //cout << "\tStatus: " << room_read->getStatus() << endl; } else if(tagName2 == "type") { room_read->setType(valName2); //cout << "\tType: " << room_read->getType() << endl; } else if(tagName2 == "border") { //cout << "\tBorder: " << endl; for(sub_node = name_node->first_node(); sub_node != NULL; sub_node = sub_node->next_sibling()) { tagName3 = sub_node->name(); if(tagName3 == "direction") { valName3 = sub_node->value(); direction = valName3; } else if(tagName3 == "name") { valName3 = sub_node->value(); borderName = valName3; } } room_read->addBorder(direction, borderName); //cout << "\t\t" << direction << ": " << room_read->getBorderName(direction) << endl; } else if(tagName2 == "container") { Container * container_thingy = new Container(); containers.push_back(container_thingy); valName2 = name_node->value(); container_thingy -> setName(valName2); room_read -> addContainer(container_thingy); //cout << "\tAdding Container: " << valName2 << endl; } else if(tagName2 == "creature") { Creature * creature_thingy = new Creature(); valName2 = name_node->value(); creature_thingy->setName(valName2); creatures.push_back(creature_thingy); room_read->addCreature(creature_thingy); //cout << "\tAdding Creature: " << valName2 << endl; } else if(tagName2 == "item") { Item * item_thingy = new Item(); items.push_back(item_thingy); valName2 = name_node->value(); items.back()->setName(valName2); room_read->addItem(item_thingy); //cout << "\tAdding Item: " << valName2 << endl; } else if(tagName2 == "trigger") { Triggers * trigger_thingy = new Triggers(); triggers.push_back(trigger_thingy); room_read->addTriggers(trigger_thingy); //cout << "\tAdding Trigger: " << endl; for(sub_node = name_node->first_node(); sub_node != NULL; sub_node = sub_node->next_sibling()) { tagName3 = sub_node->name(); valName3 = sub_node->value(); if(tagName3 == "type") { trigger_thingy->setType(valName3); //cout << "\t\tType: " << trigger_thingy->getType() << endl; } else if(tagName3 == "command") { trigger_thingy->setCommand(valName3); //cout << "\t\tCommand: " << trigger_thingy->getCommand() << endl; } else if(tagName3 == "print") { trigger_thingy->setPrint(valName3); //cout << "\t\tPrint: " << trigger_thingy->getPrint() << endl; } else if(tagName3 == "condition") { //cout << "\t\tCondition: " << endl; has = ""; owner = ""; status = ""; object = ""; for(value_node = sub_node->first_node(); value_node != NULL; value_node = value_node->next_sibling()) { tagName4 = value_node->name(); valName4 = value_node->value(); //cout << "value: " << tagName4 << endl; if(tagName4 == "has" ) { has = valName4; //cout << "\t\t\tHas: " << valName4 << endl; } else if(tagName4 == "owner" ) { owner = valName4; //cout << "\t\t\tOwner: " << valName4 << endl; } else if(tagName4 == "status" ) { status = valName4; //cout << "\t\t\tStatus: " << valName4 << endl; } else if(tagName4 == "object" ) { object = valName4; //cout << "\t\t\tObject: " << valName4 << endl; } } trigger_thingy->setCondition(object, status, has, owner); } } } } } if(tagName == "item") { bool exists = false; //cout << "Making Item.." << endl; temp = head_node->first_node(); Item * item_thingy; valName2 = temp->value(); for(ind = 0; ind < items.size(); ind++) { if(items[ind]->getName().compare(valName2) == 0) { //cout << "found match" << endl; exists = true; item_thingy = items[ind]; } } if(!exists) { item_thingy = new Item(); items.push_back(item_thingy); item_thingy->setName(valName2); } //cout << "\tName: " << item_thingy -> getName() << endl; for(name_node = head_node->first_node(); name_node != NULL; name_node = name_node->next_sibling()) { tagName2 = name_node->name(); valName2 = name_node->value(); if(tagName2 == "writing") { item_thingy->setWriting(valName2); //cout << "\tWriting: " << item_thingy->getWriting() << endl; } else if(tagName2 == "status")//set status { item_thingy->setStatus(valName2); //cout << "\tStatus: " << valName2 << endl; } else if(tagName2 == "turnon") { //cout << "\tTurn on:" << endl; for(sub_node = name_node->first_node(); sub_node != NULL; sub_node = sub_node->next_sibling()) { tagName3 = sub_node->name(); valName3 = sub_node->value(); if(tagName3 == "print") { item_thingy->setPrint(valName3); //cout << "\t\tPrint: " << valName3 << endl; } else if(tagName3 == "action") { item_thingy->addAction(valName3); //cout << "\t\tAction: " << valName3 << endl; } } } } } if(tagName == "container") { //cout << "Making container.. " << endl; name_node = head_node->first_node(); valName2 = name_node->value(); for(ind = 0; ind < containers.size(); ind++) { if(containers[ind]->getName().compare(valName2) == 0) { //cout << "\tName: " << containers[ind]->getName() << endl; for(name_node = head_node->first_node(); name_node != NULL; name_node = name_node->next_sibling()) { tagName2 = name_node->name(); valName2 = name_node->value(); if(tagName2 == "accept") { containers[ind]->setAccept(name_node->value()); //cout << "\tAccept: " << containers[ind]->getAccept() << endl; } if(tagName2 == "status") { containers[ind]->setStatus(name_node->value()); //cout << "\tStatus: " << containers[ind]->getStatus() << endl; } if(tagName2 == "item") { valName2 = name_node->value(); //cout << tempValue2 << endl; int j = 0; for(j = 0; j < items.size(); j++) { if(items[j]->getName() == valName2) { containers[ind]->addItem(items[j]); } } //cout << "\tItem: " << valName2 << endl; } if(tagName2 == "trigger") { Triggers * trigger_thingy = new Triggers(); triggers.push_back(trigger_thingy); containers[ind]->addTriggers(trigger_thingy); //cout << "\tTrigger:" << endl; for(sub_node = name_node->first_node(); sub_node != NULL; sub_node = sub_node->next_sibling()) { tagName3 = sub_node->name(); valName3 = sub_node->value(); if(tagName3 == "type") { trigger_thingy->setType(valName3); //cout << "\t\tType: " << trigger_thingy->getType() << endl; } if(tagName3 == "command") { trigger_thingy->setCommand(valName3); //cout << "\t\tCommand: "<< trigger_thingy->getCommand() << endl; } if(tagName3 == "print") { trigger_thingy->setPrint(valName3); //cout << rooms[i]->getTriggers()[0]->getPrint() << endl; //cout << "\t\tPrint: " << trigger_thingy->getPrint() << endl; } if(tagName3 == "condition") { //cout << "\t\tCondition: " << endl; has = ""; owner = ""; status = ""; object = ""; for(value_node = sub_node->first_node(); value_node != NULL; value_node = value_node->next_sibling()) { tagName4 = value_node->name(); valName4 = value_node->value(); if(tagName4 == "has" ) { has = valName4; //cout << "\t\t\tHas: " << valName4 << endl; } else if(tagName4 == "owner" ) { owner = valName4; //cout << "\t\t\tOwner: " << valName4 << endl; } else if(tagName4 == "status" ) { status = valName4; //cout << "\t\t\tStatus: " << valName4 << endl; } else if(tagName4 == "object" ) { object = valName4; //cout << "\t\t\tObject: " << valName4 << endl; } } trigger_thingy->setCondition(object, status, has, owner); } else if(tagName3 == "action") { trigger_thingy->addAction(valName3); //cout << "\t\tAction: " << valName3 << endl; } } } } } } } if(tagName == "creature") { name_node = head_node->first_node(); valName2 = name_node->value(); found_exist_creature = false; //cout << "Making creature.." << endl; for(ind = 0 ; ind < creatures.size(); ind++) { if(creatures[ind]->getName() == valName2) { found_exist_creature = true; //cout << "\tName: " << creatures[ind]->getName() << endl; for(name_node = head_node->first_node(); name_node != NULL; name_node = name_node->next_sibling()) { tagName2 = name_node->name(); valName2 = name_node->value(); if(tagName2 == "vulnerability") { creatures[ind]->setVulnerability(valName2); //cout << "\tVulnerability: " << creatures[ind]->getVulnerability() << endl; } if(tagName2 == "attack") { //cout << "\tAttack: "<<endl; creatures[ind]->setAttack(new Attack()); for(sub_node = name_node->first_node(); sub_node != NULL; sub_node = sub_node ->next_sibling()) { tagName3 = sub_node->name(); valName3 = sub_node->value(); if(tagName3 == "print") { creatures[ind]->getAttack()->setPrint(valName3); //cout << "\t\tPrint: " << creatures[ind]->getAttack()->getPrint() << endl; } else if(tagName3 == "action") { creatures[ind]->getAttack()->addAction(valName3); for(int q = 0; q < (creatures[ind]->getAttack())->getActions().size(); q++) { //cout << "\t\tAction: " << ((creatures[ind]->getAttack())->getActions())[q] << endl; } } else if(tagName3 == "condition") { //cout << "\t\tCondition: " << endl; for(value_node = sub_node->first_node();value_node != NULL; value_node = value_node->next_sibling()) { tagName4 = value_node->name(); valName4 = value_node->value(); if(tagName4 == "object") { creatures[ind]->getAttack()->setObject(valName4); //cout << "\t\t\tObject: " <<creatures[ind]->getAttack()->getObject() << endl; } if(tagName4 == "status") { creatures[ind]->getAttack()->setStatus(valName4); //cout << "\t\t\tStatus: " << creatures[ind]->getAttack()->getStatus() << endl; } } } } } //triggers if(tagName2 == "trigger") { //cout << "\tTrigger: " << endl; Triggers * trigger_thingy = new Triggers(); triggers.push_back(trigger_thingy); creatures[ind]->addTriggers(trigger_thingy); for(sub_node = name_node->first_node(); sub_node != NULL; sub_node = sub_node->next_sibling()) { tagName3 = sub_node->name(); valName3 = sub_node->value(); if(tagName3 == "type") { trigger_thingy->setType(valName3); //cout << "\t\tType: " << trigger_thingy->getType() << endl; } if(tagName3 == "command") { trigger_thingy->setCommand(valName3); //cout << "\t\tCommand: " << trigger_thingy->getCommand() << endl; } if(tagName3 == "action"){ trigger_thingy->addAction(valName3); } if(tagName3 == "print") { trigger_thingy->setPrint(valName3); //cout << "\t\tPrint: " << creatures[ind]->getTriggers()[0]->getPrint() << endl; } if(tagName3 == "condition") { //cout << "\t\tCondition: " << endl; has = ""; owner = ""; status = ""; object = ""; for(value_node = sub_node->first_node(); value_node != NULL; value_node = value_node->next_sibling()) { tagName4 = value_node->name(); valName4 = value_node->value(); if(tagName4 == "has" ) { has = valName4; //cout << "\t\t\tHas: " << valName4 << endl; } else if(tagName4 == "owner" ) { owner = valName4; //cout << "\t\t\tOwner: " << valName4 << endl; } else if(tagName4 == "status" ) { status = valName4; //cout << "\t\t\tStatus: " << valName4 << endl; } else if(tagName4 == "object" ) { object = valName4; //cout << "\t\t\tObject: " << valName4 << endl; } } trigger_thingy->setCondition(object, status, has, owner); //cout << trigger_thingy->getObject() << endl; } } } } } } if (found_exist_creature == false) { Creature * creature_thingy = new Creature(); creature_thingy->setName(valName2); // cout << "ADDED GIANT" << valName2 << endl; creatures.push_back(creature_thingy); for(name_node = head_node->first_node(); name_node != NULL; name_node = name_node->next_sibling()) { tagName2 = name_node->name(); valName2 = name_node->value(); if(tagName2 == "vulnerability") { creature_thingy->setVulnerability(valName2); //cout << "\tVulnerability: " << creatures[ind]->getVulnerability() << endl; } if(tagName2 == "attack") { //cout << "\tAttack: "<<endl; creature_thingy->setAttack(new Attack()); for(sub_node = name_node->first_node(); sub_node != NULL; sub_node = sub_node ->next_sibling()) { tagName3 = sub_node->name(); valName3 = sub_node->value(); if(tagName3 == "print") { creature_thingy->getAttack()->setPrint(valName3); //cout << "\t\tPrint: " << creatures[ind]->getAttack()->getPrint() << endl; } else if(tagName3 == "action") { creature_thingy->getAttack()->addAction(valName3); for(int q = 0; q < (creatures[ind]->getAttack())->getActions().size(); q++) { //cout << "\t\tAction: " << ((creatures[ind]->getAttack())->getActions())[q] << endl; } } else if(tagName3 == "condition") { //cout << "\t\tCondition: " << endl; for(value_node = sub_node->first_node();value_node != NULL; value_node = value_node->next_sibling()) { tagName4 = value_node->name(); valName4 = value_node->value(); if(tagName4 == "object") { creature_thingy->getAttack()->setObject(valName4); //cout << "\t\t\tObject: " <<creatures[ind]->getAttack()->getObject() << endl; } if(tagName4 == "status") { creature_thingy->getAttack()->setStatus(valName4); //cout << "\t\t\tStatus: " << creatures[ind]->getAttack()->getStatus() << endl; } } } } } //triggers if(tagName2 == "trigger") { //cout << "\tTrigger: " << endl; Triggers * trigger_thingy = new Triggers(); triggers.push_back(trigger_thingy); creature_thingy->addTriggers(trigger_thingy); for(sub_node = name_node->first_node(); sub_node != NULL; sub_node = sub_node->next_sibling()) { tagName3 = sub_node->name(); valName3 = sub_node->value(); if(tagName3 == "type") { trigger_thingy->setType(valName3); //cout << "\t\tType: " << trigger_thingy->getType() << endl; } if(tagName3 == "command") { trigger_thingy->setCommand(valName3); //cout << "\t\tCommand: " << trigger_thingy->getCommand() << endl; } if(tagName3 == "action"){ trigger_thingy->addAction(valName3); } if(tagName3 == "print") { trigger_thingy->setPrint(valName3); //cout << "\t\tPrint: " << creatures[ind]->getTriggers()[0]->getPrint() << endl; } if(tagName3 == "condition") { //cout << "\t\tCondition: " << endl; has = ""; owner = ""; status = ""; object = ""; for(value_node = sub_node->first_node(); value_node != NULL; value_node = value_node->next_sibling()) { tagName4 = value_node->name(); valName4 = value_node->value(); if(tagName4 == "has" ) { has = valName4; //cout << "\t\t\tHas: " << valName4 << endl; } else if(tagName4 == "owner" ) { owner = valName4; //cout << "\t\t\tOwner: " << valName4 << endl; } else if(tagName4 == "status" ) { status = valName4; //cout << "\t\t\tStatus: " << valName4 << endl; } else if(tagName4 == "object" ) { object = valName4; //cout << "\t\t\tObject: " << valName4 << endl; } } trigger_thingy->setCondition(object, status, has, owner); //cout << trigger_thingy->getObject() << endl; } } } } } } } // STARTING THE GAME BOYZ bool found_exit = false; bool hasstuff = false; string input; Item * item_take; Item * t_item; string border_name; vector<string> input_vector; vector<Triggers *> room_triggers; vector<Creature*> room_creatures; string ch; std::vector<Triggers * >::iterator itr_tr; std::vector<Room * >::iterator itr_rm; std::list<Item * >::iterator itr_it; vector<Container *> temp_cont; string get_owner; string get_object; string get_has; string get_status; string current_creature; vector<string> action_list; cout << current_room->getDescription() << endl; while (found_exit == false) { if (action_list.size() != 0) { input = action_list.back(); action_list.pop_back(); }else { // Get input std::getline(std::cin, input); } if (input == "n"){ ch = input; input = "north"; border_name = current_room->getBorderName(input); if (border_name == "nonexistant") {//north is not an option cout << "Can't go that way" << endl; } else {//might be able to go room_triggers = current_room->getTriggers(); bool found_trigger = false; for (itr_tr = room_triggers.begin(); itr_tr != room_triggers.end(); itr_tr++ ) { if ((*itr_tr)->getCommand() == ch) {//a trigger must be activated found_trigger = true; get_has = (*itr_tr)->getHas(); get_object = (*itr_tr)->getObject(); get_owner = (*itr_tr)->getOwner(); get_status = (*itr_tr)->getStatus(); if (get_owner == "inventory") { if(get_has == "no"){ hasstuff = true; } else{ hasstuff = false; } if (inventory.hasa(get_object) ){//== hasstuff) { // iterate rooms find one that matches for (itr_rm = rooms.begin(); itr_rm != rooms.end(); itr_rm++ ) { if ((*itr_rm)->getName() == border_name) { current_room = (*itr_rm); cout << current_room->getDescription() << endl; } } } else { cout << (*itr_tr)->getPrint() << endl; } } else if (get_status == "locked") { cout << (*itr_tr)->getPrint() << endl; } else if (get_status == "unlocked") { for (itr_rm = rooms.begin(); itr_rm != rooms.end(); itr_rm++ ) { if ((*itr_rm)->getName() == border_name) { current_room = (*itr_rm); cout << current_room->getDescription() << endl; } } } } } if (found_trigger == false) {// no trigger is needed fly away my son for (itr_rm = rooms.begin(); itr_rm != rooms.end(); itr_rm++ ) { if ((*itr_rm)->getName() == border_name) { current_room = (*itr_rm); cout << current_room->getDescription() << endl; } } } } }//end if north else if (input == "s"){ ch = input; input = "south"; border_name = current_room->getBorderName(input); if (border_name == "nonexistant") {//north is not an option cout << "Can't go that way" << endl; } else {//might be able to go room_triggers = current_room->getTriggers(); bool found_trigger = false; for (itr_tr = room_triggers.begin(); itr_tr != room_triggers.end(); itr_tr++ ) { if ((*itr_tr)->getCommand() == ch) {//a trigger must be activated found_trigger = true; get_has = (*itr_tr)->getHas(); get_object = (*itr_tr)->getObject(); get_owner = (*itr_tr)->getOwner(); get_status = (*itr_tr)->getStatus(); if (get_owner == "inventory") { if(get_has == "no"){ hasstuff = true; } else{ hasstuff = false; } if (inventory.hasa(get_object) ){//== hasstuff) { // iterate rooms find one that matches for (itr_rm = rooms.begin(); itr_rm != rooms.end(); itr_rm++ ) { if ((*itr_rm)->getName() == border_name) { current_room = (*itr_rm); cout << current_room->getDescription() << endl; } } } else { cout << (*itr_tr)->getPrint() << endl; } } else if (get_status == "locked") { cout << (*itr_tr)->getPrint() << endl; } else if (get_status == "unlocked") { for (itr_rm = rooms.begin(); itr_rm != rooms.end(); itr_rm++ ) { if ((*itr_rm)->getName() == border_name) { current_room = (*itr_rm); cout << current_room->getDescription() << endl; } } } } } if (found_trigger == false) {// no trigger is needed fly away my son for (itr_rm = rooms.begin(); itr_rm != rooms.end(); itr_rm++ ) { if ((*itr_rm)->getName() == border_name) { current_room = (*itr_rm); cout << current_room->getDescription() << endl; } } } } }//end if south else if (input == "e"){ ch = input; input = "east"; border_name = current_room->getBorderName(input); if (border_name == "nonexistant") {//north is not an option cout << "Can't go that way" << endl; } else {//might be able to go room_triggers = current_room->getTriggers(); bool found_trigger = false; for (itr_tr = room_triggers.begin(); itr_tr != room_triggers.end(); itr_tr++ ) { if ((*itr_tr)->getCommand() == ch) {//a trigger must be activated found_trigger = true; get_has = (*itr_tr)->getHas(); get_object = (*itr_tr)->getObject(); get_owner = (*itr_tr)->getOwner(); get_status = (*itr_tr)->getStatus(); if (get_owner == "inventory") { if(get_has == "no"){ hasstuff = true; } else{ hasstuff = false; } if (inventory.hasa(get_object) ){//== hasstuff) { // iterate rooms find one that matches for (itr_rm = rooms.begin(); itr_rm != rooms.end(); itr_rm++ ) { if ((*itr_rm)->getName() == border_name) { current_room = (*itr_rm); cout << current_room->getDescription() << endl; } } } else { cout << (*itr_tr)->getPrint() << endl; } } else if (get_status == "locked") { cout << (*itr_tr)->getPrint() << endl; } else if (get_status == "unlocked") { for (itr_rm = rooms.begin(); itr_rm != rooms.end(); itr_rm++ ) { if ((*itr_rm)->getName() == border_name) { current_room = (*itr_rm); cout << current_room->getDescription() << endl; } } } } } if (found_trigger == false) {// no trigger is needed fly away my son for (itr_rm = rooms.begin(); itr_rm != rooms.end(); itr_rm++ ) { if ((*itr_rm)->getName() == border_name) { current_room = (*itr_rm); cout << current_room->getDescription() << endl; } } } } }//end if east else if (input == "w"){ ch = input; input = "west"; border_name = current_room->getBorderName(input); if (border_name == "nonexistant") {//north is not an option cout << "Can't go that way" << endl; } else {//might be able to go room_triggers = current_room->getTriggers(); bool found_trigger = false; for (itr_tr = room_triggers.begin(); itr_tr != room_triggers.end(); itr_tr++ ) { if ((*itr_tr)->getCommand() == ch) {//a trigger must be activated found_trigger = true; get_has = (*itr_tr)->getHas(); get_object = (*itr_tr)->getObject(); get_owner = (*itr_tr)->getOwner(); get_status = (*itr_tr)->getStatus(); if (get_owner == "inventory") { if(get_has == "no"){ hasstuff = true; } else{ hasstuff = false; } if (inventory.hasa(get_object) ){//== hasstuff) { // iterate rooms find one that matches for (itr_rm = rooms.begin(); itr_rm != rooms.end(); itr_rm++ ) { if ((*itr_rm)->getName() == border_name) { current_room = (*itr_rm); cout << current_room->getDescription() << endl; } } } else { cout << (*itr_tr)->getPrint() << endl; } } else if (get_status == "locked") { cout << (*itr_tr)->getPrint() << endl; } else if (get_status == "unlocked") { for (itr_rm = rooms.begin(); itr_rm != rooms.end(); itr_rm++ ) { if ((*itr_rm)->getName() == border_name) { current_room = (*itr_rm); cout << current_room->getDescription() << endl; } } } } } if (found_trigger == false) {// no trigger is needed fly away my son for (itr_rm = rooms.begin(); itr_rm != rooms.end(); itr_rm++ ) { if ((*itr_rm)->getName() == border_name) { current_room = (*itr_rm); cout << current_room->getDescription() << endl; } } } } }//end if west else if (input ==""){}//fix seg fault else if(input == "i"){ cout << "Inventory: " ; inventory.getItems(); cout << endl; }//end inventory else if (input == "open exit"){ if (current_room->getType() == "exit") { cout << "Game Over" << endl; return 0; } else { cout << "Error" << endl; } } else{ input_vector = split(input, ' '); if (input_vector[0] == "read" && input_vector.size() == 2){ inventory.read(input_vector[1]); } else if (input_vector[0] == "drop" && input_vector.size() == 2){ inventory.drop(input_vector[1],current_room); } else if (input_vector[0] == "put" && input_vector.size() == 4){ t_item = inventory.getItem(input_vector[1]); if (t_item != NULL) { temp_cont = current_room->getContainers(); for (int i = 0; i < temp_cont.size(); i++) { if (temp_cont[i]->getName() == input_vector[3]) { // find the container that matches what you are trying to insert item into if (temp_cont[i]->getAccept() == t_item->getName() || temp_cont[i]->getAccept() == "") { temp_cont[i]->addItem(t_item); inventory.removeItem(t_item->getName()); cout << "Item " <<t_item->getName() << " added to " << temp_cont[i]->getName() << endl; temp_trigg = temp_cont[i]->getTriggers(); for (int j = 0; j < temp_trigg.size(); j++) { if (temp_trigg[j]->getObject() == t_item->getName()) { fixed_vector = temp_trigg[j]->getActions(); int size = fixed_vector.size(); for (int l = 0; l < size; l++) { action_list.push_back( fixed_vector.back()); fixed_vector.pop_back(); } cout << temp_trigg[j]->getPrint() << endl; } } } } } } else { cout << "Error" << endl; } } else if (input_vector[0] == "Game" && input_vector[1] == "Over") { found_exit = true; } else if (input_vector[0] == "turn" && input_vector[1] == "on" && input_vector.size() == 3){ if (inventory.hasa(input_vector[2])) { Item * temp_item = inventory.getItem(input_vector[2]); fixed_vector = temp_item->getActions(); int size = fixed_vector.size(); for (int l = 0; l < size; l++) { action_list.push_back( fixed_vector.back()); fixed_vector.pop_back(); } if (action_list.size() != 0) { cout << "You activate the " << temp_item->getName() << endl; cout << temp_item->getPrint() << endl; } } else { cout << "Error" << endl; } } else if (input_vector[0] == "attack" && input_vector.size() == 4){ t_item = inventory.getItem(input_vector[3]); hasstuff = false; if(t_item != NULL){ current_creature = current_room->getCreature(input_vector[1]); if(current_creature != "nonexistant"){ for(int i = 0 ; i < creatures.size(); i++){ if (creatures[i]->getName() == input_vector[1]) { if (creatures[i]->getVulnerability(input_vector[3])) { if(creatures[i]->getAttack()!= NULL ){ if (creatures[i]->getAttack()->getStatus() == t_item->getStatus()) { hasstuff = true; cout << "You assault the " << input_vector[1] << " with the " <<input_vector[3] << endl; cout << creatures[i]->getAttack()->getPrint() << endl; fixed_vector = creatures[i]->getAttack()->getActions(); int size = fixed_vector.size(); for (int l = 0; l < size; l++) { action_list.push_back( fixed_vector.back()); fixed_vector.pop_back(); } } } else if (creatures[i]->getTriggers().size() != 0){ temp_trigg = creatures[i]->getTriggers(); for (int j = 0; j < temp_trigg.size(); j++ ) { if (temp_trigg[j]->getObject() == input_vector[3] && t_item->getStatus() == temp_trigg[j]->getStatus()){ cout << "You assault the " << input_vector[1] << " with the " <<input_vector[3] << endl; cout << temp_trigg[j]->getPrint() << endl; hasstuff = true; if (triggers[j]->getType() == "single") { triggers.erase(triggers.begin() + j); } //add actions fixed_vector = temp_trigg[j]->getActions(); for (int l = 0; l < fixed_vector.size(); l++) { if(fixed_vector.back() == "Game Over") { while (action_list.size() > 0){ action_list.pop_back(); } action_list.push_back("Game Over"); break; } action_list.push_back( fixed_vector.back()); fixed_vector.pop_back(); } } } } } } } } } if (hasstuff == false) { if (input_vector[1] == "giant" && (input_vector[3] == "axe" || input_vector[3] == "sword")){ cout << "You assault the giant with" <<input_vector[3]<<endl; while (action_list.size() > 0){ action_list.pop_back(); } action_list.push_back("Game Over"); } else{ cout << "Error" << endl; } } } else if (input_vector[0] == "open" && input_vector.size() == 2){ //current_room hasstuff = false; temp_cont = current_room->getContainers(); for(int i = 0; i < temp_cont.size(); i++) { if (temp_cont[i]->getName() == input_vector[1]) { if (temp_cont[i]->items.size() == 0) { cout << temp_cont[i]->getName() << " is empty"; hasstuff = true; } for (int jk = 0; jk < items.size(); jk++ ) { for (int j2 = 0; j2 < temp_cont[i]->items.size(); j2++) { if (items[jk]->getName() == temp_cont[i]->items[j2]->getName()) { cout << temp_cont[i]->getName() << " contains: " << temp_cont[i]->items[j2]->getName() << ", "; current_room->addItem(items[jk]); //temp_cont[i]->deleteItem(items[jk]->getName()); hasstuff = true; } } } } } cout << endl; if (hasstuff == false) { cout << "Error" << endl; } } else if (input_vector[0] == "take" && input_vector.size() == 2){ if (!inventory.hasa(input_vector[1])) { item_take = current_room->take(input_vector[1]); if (item_take != NULL) { cout << "Item " << input_vector[1] << " added to inventory." << endl; inventory.put(item_take); current_room->deleteItem(input_vector[1]); temp_cont = current_room->getContainers(); for (int i = 0; i < temp_cont.size(); i++) { for (int jk = 0; jk < temp_cont[i]->items.size(); jk++) { if (temp_cont[i]->items[jk]->getName() == item_take->getName()) { //cout << "got to delete" << endl; temp_trigg = triggers; for (int j = 0; j < temp_trigg.size(); j++) { if (temp_trigg[j]->getObject() == item_take->getName()) { fixed_vector = temp_trigg[j]->getActions(); int size = fixed_vector.size(); for (int l = 0; l < size; l++) { action_list.push_back( fixed_vector.back()); fixed_vector.pop_back(); } cout << temp_trigg[j]->getPrint() << endl; } } temp_cont[i]->deleteItem(temp_cont[i]->items[jk]->getName()); } } } } else{ cout << "Error item not found" << endl; } } else { cout << "Already have this item" << endl; } } else if (input_vector[0] == "Add" && input_vector.size() == 4){ hasstuff = false; for (int i = 0; i < items.size(); i++) { if (items[i]->getName() == input_vector[1]) { for (int jk = 0; jk < rooms.size(); jk++) { if (rooms[jk]->getName() == input_vector[3]) { hasstuff = true; rooms[jk]->addItem(items[i]); } } if (hasstuff == false) { for (int jk = 0; jk < containers.size(); jk++) { if (containers[jk]->getName() == input_vector[3]) { containers[jk]->addItem(items[i]); hasstuff = true; } } } } } for (int i = 0; i < creatures.size(); i++) { if (creatures[i]->getName() == input_vector[1]) { for (int j = 0; j < rooms.size(); j ++) { if (rooms[j]->getName() == input_vector[3]) { hasstuff = true; rooms[j]->addCreature(creatures[i]); } } } } if (hasstuff == false) { cout << "Error" << endl; } else { cout << "Added "<<input_vector[1] << " to " << input_vector[3] << endl; } }else if (input_vector[0] == "Delete" && input_vector.size() == 2){ hasstuff = false; for (int i = 0; i < rooms.size(); i++) { rooms[i]->deleteBorder(input_vector[1]); rooms[i]->deleteItem(input_vector[1]); if (rooms[i]->getName() == input_vector[1]) { rooms.erase(rooms.begin() + i); } } }else if (input_vector[0] == "Update" && input_vector.size() == 4){ hasstuff = false; for (int i = 0; i < items.size(); i++) { if (items[i]->getName() == input_vector[1]) { items[i]->setStatus(input_vector[3]); for (int j = 0; j < triggers.size(); j++ ) { if (triggers[j]->getObject() == items[i]->getName() && items[i]->getStatus() == triggers[j]->getStatus()){ cout << triggers[j]->getPrint() << endl; hasstuff = true; if (triggers[j]->getType() == "single") { triggers.erase(triggers.begin() + j); } } } } } if(hasstuff == false){ temp_cont = current_room->getContainers(); for (int i = 0; i < temp_cont.size(); i++) { if (temp_cont[i]->getName() == input_vector[1]) { temp_cont[i]->setStatus(input_vector[3]); for (int j = 0; j < triggers.size(); j++ ) { if (triggers[j]->getObject() == input_vector[1]){ triggers[j]->setStatus(input_vector[3]); if (temp_trigg[j]->getType() == "single") { temp_trigg.erase(temp_trigg.begin() + j); } } } } } } } else{//not a valid input cout << "Error Invalid Input" << endl; } }//end multiword else (user input valitdation is donzo) // Check triggers if override command // Execute command if not overridden // Check if effects of command activate trigger_thingy // If command activates trigger, perform indicated actions and check new status if new triggers should happen }//end while cout << "Victory!" << endl; return 0; }//end main