CBuildingHandler.cpp 12 KB

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