CBuildingHandler.cpp 12 KB

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