#define VCMI_DLL #include "../stdafx.h" #include "CTownHandler.h" #include "CLodHandler.h" #include #include "../lib/VCMI_Lib.h" #include "CGeneralTextHandler.h" extern CLodHandler * bitmaph; void loadToIt(std::string &dest, std::string &src, int &iter, int mode); /* * CTownHandler.cpp, part of VCMI engine * * Authors: listed in file AUTHORS in main folder * * License: GNU General Public License v2.0 or later * Full text of license available in license.txt file, in main folder * */ CTownHandler::CTownHandler() { VLC->townh = this; } CTownHandler::~CTownHandler() { for( std::map >::iterator i= structures.begin(); i!=structures.end(); i++) for( std::map::iterator j = i->second.begin(); j!=i->second.end(); j++) delete j->second; } void CTownHandler::loadNames() { int si, itr; char bufname[75]; for (si=0; si> tid >> lid >> cid; if(lid < towns[tid].basicCreatures.size()) towns[tid].basicCreatures[lid]=cid; } of.close(); of.clear(); for(int x=0;x> tid >> lid >> cid; if(lid < towns[tid].upgradedCreatures.size()) towns[tid].upgradedCreatures[lid]=cid; } of.close(); of.clear(); of.open(DATA_DIR "/config/building_horde.txt"); while(!of.eof()) { int tid, lid, cid; //town,horde serial,creature level of >> tid >> lid >> cid; towns[tid].hordeLvl[--lid] = cid; } of.close(); of.clear(); of.open(DATA_DIR "/config/mageLevel.txt"); of >> si; for(itr=0; itr> towns[itr].mageLevel >> towns[itr].primaryRes >> towns[itr].warMachine; } of.close(); of.clear(); of.open(DATA_DIR "/config/requirements.txt"); while(!of.eof()) { int ile, town, build, pom; of >> ile; for(int i=0;i> town; while(true) { of.getline(bufname,75); if(!bufname[0] || bufname[0] == '\n' || bufname[0] == '\r') of.getline(bufname,75); std::istringstream ifs(bufname); ifs >> build; if(build<0) break; while(!ifs.eof()) { ifs >> pom; requirements[town][build].insert(pom); } } } } of.close(); of.clear(); } void CTownHandler::loadStructures() { //read buildings coords std::ifstream of(DATA_DIR "/config/buildings.txt"); while(!of.eof()) { Structure *vinya = new Structure; vinya->group = -1; of >> vinya->townID; of >> vinya->ID; of >> vinya->defName; vinya->name = vinya->defName; //TODO - use normal names of >> vinya->pos.x; of >> vinya->pos.y; vinya->pos.z = 0; structures[vinya->townID][vinya->ID] = vinya; } of.close(); of.clear(); //read building priorities of.open(DATA_DIR "/config/buildings2.txt"); int format, idt; std::string s; of >> format >> idt; while(!of.eof()) { std::map >::iterator i; std::map::iterator i2; int itr=1, buildingID; int castleID; of >> s; if (s != "CASTLE") break; of >> castleID; while(1) { of >> s; if (s == "END") break; else if((i=structures.find(castleID))!=structures.end()) if((i2=(i->second.find(buildingID=atoi(s.c_str()))))!=(i->second.end())) i2->second->pos.z=itr++; else tlog3 << "Warning1: No building "< >::iterator i; std::map::iterator i2; int town, id; std::string border, area; of >> town >> id >> border >> border >> area; if((i=structures.find(town))!=structures.end()) if((i2=(i->second.find(id)))!=(i->second.end())) { i2->second->borderName = border; i2->second->areaName = area; } else tlog3 << "Warning2: No building "<> format; if(format!=1) { tlog1 << "Unhandled format of buildings4.txt \n"; } else { of >> s; int itr=1; while(!of.eof()) { std::map >::iterator i; std::map::iterator i2; int buildingID; int castleID; itr++; if (s == "CASTLE") { of >> castleID; } else if(s == "ALL") { castleID = -1; } else { break; } of >> s; while(1) //read groups for castle { if (s == "GROUP") { while(1) { of >> s; if((s == "GROUP") || (s == "EOD") || (s == "CASTLE")) // break; buildingID = atoi(s.c_str()); if(castleID>=0) { if((i=structures.find(castleID))!=structures.end()) if((i2=(i->second.find(buildingID)))!=(i->second.end())) i2->second->group = itr; else tlog3 << "Warning3: No building "<second.begin(); i2!=i->second.end(); i2++) { if(i2->first == buildingID) { i2->second->group = itr; break; } } } } } if(s == "CASTLE") break; itr++; }//if (s == "GROUP") else if(s == "EOD") break; } } of.close(); of.clear(); } } const std::string & CTown::Name() const { if(name.length()) return name; else return VLC->generaltexth->townTypes[typeID]; } const std::vector & CTown::Names() const { if(names.size()) return names; else return VLC->generaltexth->townNames[typeID]; }