CBuildingHandler.cpp 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677
  1. #include "stdafx.h"
  2. #include "CBuildingHandler.h"
  3. void CBuildingHandler::loadBuildings()
  4. {
  5. std::ifstream inp("H3bitmap.lod\\BUILDING.TXT", std::ios::in | std::ios::binary);
  6. inp.seekg(0,std::ios::end); // na koniec
  7. int andame = inp.tellg(); // read length
  8. inp.seekg(0,std::ios::beg); // wracamy na poczatek
  9. char * bufor = new char[andame]; // allocate memory
  10. inp.read((char*)bufor, andame); // read map file to buffer
  11. inp.close();
  12. std::string buf = std::string(bufor);
  13. delete [andame] bufor;
  14. int i=0; //buf iterator
  15. int hmcr=0;
  16. for(i; i<andame; ++i) //omitting rubbish
  17. {
  18. if(buf[i]=='\r')
  19. ++hmcr;
  20. if(hmcr==3)
  21. break;
  22. }
  23. i+=2;
  24. EbuildingType currType; //current type of building
  25. bool currDwel = false; //true, if we are reading dwellings
  26. while(!inp.eof())
  27. {
  28. CBuilding nbu; //currently read building
  29. if(buildings.size()>200 && buf.substr(i, buf.size()-i).find('\r')==std::string::npos)
  30. break;
  31. std::string firstStr;
  32. int befi=i;
  33. for(i; i<andame; ++i)
  34. {
  35. if(buf[i]=='\t')
  36. break;
  37. }
  38. firstStr = buf.substr(befi, i-befi);
  39. ++i;
  40. if(firstStr == std::string(""))
  41. {
  42. for(i; i<andame; ++i) //omitting rubbish
  43. {
  44. if(buf[i]=='\r')
  45. break;
  46. }
  47. i+=2;
  48. continue;
  49. }
  50. if(firstStr == std::string("Castle"))
  51. {
  52. currType = CASTLE;
  53. for(i; i<andame; ++i) //omitting rubbish
  54. {
  55. if(buf[i]=='\r')
  56. break;
  57. }
  58. i+=2;
  59. continue;
  60. }
  61. else if(firstStr == std::string("Rampart"))
  62. {
  63. currType = RAMPART;
  64. for(i; i<andame; ++i) //omitting rubbish
  65. {
  66. if(buf[i]=='\r')
  67. break;
  68. }
  69. i+=2;
  70. continue;
  71. }
  72. else if(firstStr == std::string("Tower"))
  73. {
  74. currType = TOWER;
  75. for(i; i<andame; ++i) //omitting rubbish
  76. {
  77. if(buf[i]=='\r')
  78. break;
  79. }
  80. i+=2;
  81. continue;
  82. }
  83. else if(firstStr == std::string("Inferno"))
  84. {
  85. currType = INFERNO;
  86. for(i; i<andame; ++i) //omitting rubbish
  87. {
  88. if(buf[i]=='\r')
  89. break;
  90. }
  91. i+=2;
  92. continue;
  93. }
  94. else if(firstStr == std::string("Necropolis"))
  95. {
  96. currType = NECROPOLIS;
  97. for(i; i<andame; ++i) //omitting rubbish
  98. {
  99. if(buf[i]=='\r')
  100. break;
  101. }
  102. i+=2;
  103. continue;
  104. }
  105. else if(firstStr == std::string("Dungeon"))
  106. {
  107. currType = DUNGEON;
  108. for(i; i<andame; ++i) //omitting rubbish
  109. {
  110. if(buf[i]=='\r')
  111. break;
  112. }
  113. i+=2;
  114. continue;
  115. }
  116. else if(firstStr == std::string("Stronghold"))
  117. {
  118. currType = STRONGHOLD;
  119. for(i; i<andame; ++i) //omitting rubbish
  120. {
  121. if(buf[i]=='\r')
  122. break;
  123. }
  124. i+=2;
  125. continue;
  126. }
  127. else if(firstStr == std::string("Fortress"))
  128. {
  129. currType = FORTRESS;
  130. for(i; i<andame; ++i) //omitting rubbish
  131. {
  132. if(buf[i]=='\r')
  133. break;
  134. }
  135. i+=2;
  136. continue;
  137. }
  138. else if(firstStr == std::string("Conflux"))
  139. {
  140. currType = CONFLUX;
  141. for(i; i<andame; ++i) //omitting rubbish
  142. {
  143. if(buf[i]=='\r')
  144. break;
  145. }
  146. i+=2;
  147. continue;
  148. }
  149. else if(firstStr == std::string("Neutral Buildings"))
  150. {
  151. currType = NEUTRAL;
  152. for(i; i<andame; ++i) //omitting rubbish
  153. {
  154. if(buf[i]=='\r')
  155. break;
  156. }
  157. i+=2;
  158. continue;
  159. }
  160. else if(firstStr == std::string("Dwellings"))
  161. {
  162. currDwel = true;
  163. for(i; i<andame; ++i) //omitting rubbish
  164. {
  165. if(buf[i]=='\r')
  166. break;
  167. }
  168. i+=2;
  169. continue;
  170. }
  171. else
  172. {
  173. nbu.wood = atoi(firstStr.c_str());
  174. }
  175. befi=i;
  176. for(i; i<andame; ++i)
  177. {
  178. if(buf[i]=='\t')
  179. break;
  180. }
  181. nbu.mercury = atoi(buf.substr(befi, i-befi).c_str());
  182. ++i;
  183. befi=i;
  184. for(i; i<andame; ++i)
  185. {
  186. if(buf[i]=='\t')
  187. break;
  188. }
  189. nbu.ore = atoi(buf.substr(befi, i-befi).c_str());
  190. ++i;
  191. befi=i;
  192. for(i; i<andame; ++i)
  193. {
  194. if(buf[i]=='\t')
  195. break;
  196. }
  197. nbu.sulfur = atoi(buf.substr(befi, i-befi).c_str());
  198. ++i;
  199. befi=i;
  200. for(i; i<andame; ++i)
  201. {
  202. if(buf[i]=='\t')
  203. break;
  204. }
  205. nbu.crystal = atoi(buf.substr(befi, i-befi).c_str());
  206. ++i;
  207. befi=i;
  208. for(i; i<andame; ++i)
  209. {
  210. if(buf[i]=='\t')
  211. break;
  212. }
  213. nbu.gems = atoi(buf.substr(befi, i-befi).c_str());
  214. ++i;
  215. befi=i;
  216. for(i; i<andame; ++i)
  217. {
  218. if(buf[i]=='\t')
  219. break;
  220. }
  221. nbu.gold = atoi(buf.substr(befi, i-befi).c_str());
  222. ++i;
  223. befi=i;
  224. for(i; i<andame; ++i)
  225. {
  226. if(buf[i]=='\r' || buf[i]=='\t')
  227. break;
  228. }
  229. nbu.refName = buf.substr(befi, i-befi);
  230. i+=2;
  231. nbu.type = currType;
  232. nbu.isDwelling = currDwel;
  233. if(nbu.refName[0]==' ')
  234. nbu.refName = nbu.refName.substr(1, nbu.name.size()-1);
  235. buildings.push_back(nbu);
  236. }
  237. loadNames();
  238. loadNeutNames();
  239. loadDwellingNames();
  240. }
  241. void CBuildingHandler::loadNames()
  242. {
  243. std::ifstream inp("H3bitmap.lod\\BLDGSPEC.TXT", std::ios::in | std::ios::binary);
  244. inp.seekg(0,std::ios::end); // na koniec
  245. int andame = inp.tellg(); // read length
  246. inp.seekg(0,std::ios::beg); // wracamy na poczatek
  247. char * bufor = new char[andame]; // allocate memory
  248. inp.read((char*)bufor, andame); // read map file to buffer
  249. inp.close();
  250. std::string buf = std::string(bufor);
  251. delete [andame] bufor;
  252. int i=0; //buf iterator
  253. for(int ii=0; ii<9; ++ii)
  254. {
  255. for(int q=0; q<11; ++q)
  256. {
  257. if (q<9) //normal building names and descriptions
  258. {
  259. int befi=i;
  260. for(i; i<andame; ++i)
  261. {
  262. if(buf[i]=='\t')
  263. break;
  264. }
  265. buildings[ii*9+q].name = buf.substr(befi, i-befi);
  266. ++i;
  267. befi=i;
  268. for(i; i<andame; ++i)
  269. {
  270. if(buf[i]=='\r')
  271. break;
  272. }
  273. buildings[ii*9+q].description = buf.substr(befi, i-befi);
  274. i+=2;
  275. }
  276. else if (q==9) //for graal buildings
  277. {
  278. CBuilding graal;
  279. int befi=i;
  280. for(i; i<andame; ++i)
  281. {
  282. if(buf[i]=='\t')
  283. break;
  284. }
  285. graal.name = buf.substr(befi, i-befi);
  286. ++i;
  287. befi=i;
  288. for(i; i<andame; ++i)
  289. {
  290. if(buf[i]=='\r')
  291. break;
  292. }
  293. graal.description = buf.substr(befi, i-befi);
  294. i+=2;
  295. graal.type = EbuildingType(ii+1);
  296. graal.wood = graal.mercury = graal.ore = graal.sulfur = graal.crystal = graal.gems = graal.gold = 0;
  297. graal.isDwelling = false;
  298. grails.push_back(graal);
  299. }
  300. else //for resource silos
  301. {
  302. CBuilding graal;
  303. int befi=i;
  304. for(i; i<andame; ++i)
  305. {
  306. if(buf[i]=='\t')
  307. break;
  308. }
  309. graal.name = buf.substr(befi, i-befi);
  310. ++i;
  311. befi=i;
  312. for(i; i<andame; ++i)
  313. {
  314. if(buf[i]=='\r')
  315. break;
  316. }
  317. graal.description = buf.substr(befi, i-befi);
  318. i+=2;
  319. graal.type = EbuildingType(ii+1);
  320. graal.wood = graal.mercury = graal.ore = graal.sulfur = graal.crystal = graal.gems = graal.gold = 0;
  321. graal.isDwelling = false;
  322. resourceSilos.push_back(graal);
  323. }
  324. }
  325. }
  326. ///////////////reading artifact merchant
  327. int befi=i;
  328. for(i; i<andame; ++i)
  329. {
  330. if(buf[i]=='\t')
  331. break;
  332. }
  333. artMerchant.name = buf.substr(befi, i-befi);
  334. ++i;
  335. befi=i;
  336. for(i; i<andame; ++i)
  337. {
  338. if(buf[i]=='\r')
  339. break;
  340. }
  341. artMerchant.description = buf.substr(befi, i-befi);
  342. i+=2;
  343. //////////////////////reading level1 creature horde
  344. befi=i;
  345. for(i; i<andame; ++i)
  346. {
  347. if(buf[i]=='\t')
  348. break;
  349. }
  350. l1horde.name = buf.substr(befi, i-befi);
  351. ++i;
  352. befi=i;
  353. for(i; i<andame; ++i)
  354. {
  355. if(buf[i]=='\r')
  356. break;
  357. }
  358. l1horde.description = buf.substr(befi, i-befi);
  359. i+=2;
  360. //////////////////////reading level2 creature horde
  361. befi=i;
  362. for(i; i<andame; ++i)
  363. {
  364. if(buf[i]=='\t')
  365. break;
  366. }
  367. l2horde.name = buf.substr(befi, i-befi);
  368. ++i;
  369. befi=i;
  370. for(i; i<andame; ++i)
  371. {
  372. if(buf[i]=='\r')
  373. break;
  374. }
  375. l2horde.description = buf.substr(befi, i-befi);
  376. i+=2;
  377. //////////////////////reading shipyard
  378. befi=i;
  379. for(i; i<andame; ++i)
  380. {
  381. if(buf[i]=='\t')
  382. break;
  383. }
  384. shipyard.name = buf.substr(befi, i-befi);
  385. ++i;
  386. befi=i;
  387. for(i; i<andame; ++i)
  388. {
  389. if(buf[i]=='\r')
  390. break;
  391. }
  392. shipyard.description = buf.substr(befi, i-befi);
  393. i+=2;
  394. //////////////////////omitting rubbish
  395. int hmcr = 0;
  396. for(i; i<andame; ++i) //omitting rubbish
  397. {
  398. if(buf[i]=='\r')
  399. ++hmcr;
  400. if(hmcr==2)
  401. break;
  402. }
  403. i+=2;
  404. //////////////////////reading level3 creature horde
  405. befi=i;
  406. for(i; i<andame; ++i)
  407. {
  408. if(buf[i]=='\t')
  409. break;
  410. }
  411. l3horde.name = buf.substr(befi, i-befi);
  412. ++i;
  413. befi=i;
  414. for(i; i<andame; ++i)
  415. {
  416. if(buf[i]=='\r')
  417. break;
  418. }
  419. l3horde.description = buf.substr(befi, i-befi);
  420. i+=2;
  421. //////////////////////reading level4 creature horde
  422. befi=i;
  423. for(i; i<andame; ++i)
  424. {
  425. if(buf[i]=='\t')
  426. break;
  427. }
  428. l4horde.name = buf.substr(befi, i-befi);
  429. ++i;
  430. befi=i;
  431. for(i; i<andame; ++i)
  432. {
  433. if(buf[i]=='\r')
  434. break;
  435. }
  436. l4horde.description = buf.substr(befi, i-befi);
  437. i+=2;
  438. //////////////////////reading level5 creature horde
  439. befi=i;
  440. for(i; i<andame; ++i)
  441. {
  442. if(buf[i]=='\t')
  443. break;
  444. }
  445. l5horde.name = buf.substr(befi, i-befi);
  446. ++i;
  447. befi=i;
  448. for(i; i<andame; ++i)
  449. {
  450. if(buf[i]=='\r')
  451. break;
  452. }
  453. l5horde.description = buf.substr(befi, i-befi);
  454. i+=2;
  455. //////////////////////reading grail
  456. befi=i;
  457. for(i; i<andame; ++i)
  458. {
  459. if(buf[i]=='\t')
  460. break;
  461. }
  462. grail.name = buf.substr(befi, i-befi);
  463. ++i;
  464. befi=i;
  465. for(i; i<andame; ++i)
  466. {
  467. if(buf[i]=='\r')
  468. break;
  469. }
  470. grail.description = buf.substr(befi, i-befi);
  471. i+=2;
  472. //////////////////////reading resource silo
  473. befi=i;
  474. for(i; i<andame; ++i)
  475. {
  476. if(buf[i]=='\t')
  477. break;
  478. }
  479. resSilo.name = buf.substr(befi, i-befi);
  480. ++i;
  481. befi=i;
  482. for(i; i<andame; ++i)
  483. {
  484. if(buf[i]=='\r')
  485. break;
  486. }
  487. resSilo.description = buf.substr(befi, i-befi);
  488. i+=2;
  489. }
  490. void CBuildingHandler::loadNeutNames()
  491. {
  492. std::ifstream inp("H3bitmap.lod\\BLDGNEUT.TXT", std::ios::in | std::ios::binary);
  493. inp.seekg(0,std::ios::end); // na koniec
  494. int andame = inp.tellg(); // read length
  495. inp.seekg(0,std::ios::beg); // wracamy na poczatek
  496. char * bufor = new char[andame]; // allocate memory
  497. inp.read((char*)bufor, andame); // read map file to buffer
  498. inp.close();
  499. std::string buf = std::string(bufor);
  500. delete [andame] bufor;
  501. int i=0; //buf iterator
  502. for(int q=0; q<15; ++q)
  503. {
  504. int befi=i;
  505. for(i; i<andame; ++i)
  506. {
  507. if(buf[i]=='\t')
  508. break;
  509. }
  510. buildings[81+q].name = buf.substr(befi, i-befi);
  511. ++i;
  512. befi=i;
  513. for(i; i<andame; ++i)
  514. {
  515. if(buf[i]=='\r')
  516. break;
  517. }
  518. buildings[81+q].description = buf.substr(befi, i-befi);
  519. i+=2;
  520. }
  521. for(i; i<andame; ++i)
  522. {
  523. if(buf[i]=='\r')
  524. break;
  525. }
  526. i+=2;
  527. ////////////////////////////reading blacksmith
  528. int befi=i;
  529. for(i; i<andame; ++i)
  530. {
  531. if(buf[i]=='\t')
  532. break;
  533. }
  534. CBuilding b1;
  535. b1.type = EbuildingType(0);
  536. b1.name = buf.substr(befi, i-befi);
  537. ++i;
  538. befi=i;
  539. for(i; i<andame; ++i)
  540. {
  541. if(buf[i]=='\r')
  542. break;
  543. }
  544. b1.description = buf.substr(befi, i-befi);
  545. i+=2;
  546. blacksmith = b1;
  547. //////////////////////////////reading moat
  548. befi=i;
  549. for(i; i<andame; ++i)
  550. {
  551. if(buf[i]=='\t')
  552. break;
  553. }
  554. b1.name = buf.substr(befi, i-befi);
  555. ++i;
  556. befi=i;
  557. for(i; i<andame; ++i)
  558. {
  559. if(buf[i]=='\r')
  560. break;
  561. }
  562. b1.description = buf.substr(befi, i-befi);
  563. i+=2;
  564. moat = b1;
  565. /////////////////////////reading shipyard with ship
  566. befi=i;
  567. for(i; i<andame; ++i)
  568. {
  569. if(buf[i]=='\t')
  570. break;
  571. }
  572. b1.name = buf.substr(befi, i-befi);
  573. ++i;
  574. befi=i;
  575. for(i; i<andame; ++i)
  576. {
  577. if(buf[i]=='\r')
  578. break;
  579. }
  580. b1.description = buf.substr(befi, i-befi);
  581. i+=2;
  582. shipyardWithShip = b1;
  583. /////////////////////////reading blacksmiths
  584. for(int q=0; q<9; ++q)
  585. {
  586. CBuilding black; //
  587. int befi=i;
  588. for(i; i<andame; ++i)
  589. {
  590. if(buf[i]=='\t')
  591. break;
  592. }
  593. black.name = buf.substr(befi, i-befi);
  594. ++i;
  595. befi=i;
  596. for(i; i<andame; ++i)
  597. {
  598. if(buf[i]=='\r')
  599. break;
  600. }
  601. black.description = buf.substr(befi, i-befi);
  602. i+=2;
  603. black.type = EbuildingType(q+1);
  604. blacksmiths.push_back(black);
  605. }
  606. }
  607. void CBuildingHandler::loadDwellingNames()
  608. {
  609. std::ifstream inp("H3bitmap.lod\\DWELLING.TXT", std::ios::in | std::ios::binary);
  610. inp.seekg(0,std::ios::end); // na koniec
  611. int andame = inp.tellg(); // read length
  612. inp.seekg(0,std::ios::beg); // wracamy na poczatek
  613. char * bufor = new char[andame]; // allocate memory
  614. inp.read((char*)bufor, andame); // read map file to buffer
  615. inp.close();
  616. std::string buf = std::string(bufor);
  617. delete [andame] bufor;
  618. int i = 0; //buf iterator
  619. int whdw = 98; //wchich dwelling we are currently reading
  620. for(whdw; whdw<224; ++whdw)
  621. {
  622. int befi=i;
  623. for(i; i<andame; ++i)
  624. {
  625. if(buf[i]=='\t')
  626. break;
  627. }
  628. buildings[whdw].name = buf.substr(befi, i-befi);
  629. ++i;
  630. befi=i;
  631. for(i; i<andame; ++i)
  632. {
  633. if(buf[i]=='\r')
  634. break;
  635. }
  636. buildings[whdw].description = buf.substr(befi, i-befi);
  637. i+=2;
  638. }
  639. }