Advertisement
Guest User

Untitled

a guest
Feb 20th, 2018
443
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.10 KB | None | 0 0
  1. Src/exchange.cpp
  2. This is what i had in bool CExchange::CheckSpace()
  3.  
  4. bool CExchange::CheckSpace()
  5. {
  6. static CGrid s_grid1(5, INVENTORY_MAX_NUM/5 / 4);
  7. static CGrid s_grid2(5, INVENTORY_MAX_NUM/5 / 4);
  8. static CGrid s_grid3(5, INVENTORY_MAX_NUM/5 / 4);
  9. static CGrid s_grid4(5, INVENTORY_MAX_NUM/5 / 4);
  10.  
  11. s_grid1.Clear();
  12. s_grid2.Clear();
  13. s_grid3.Clear();
  14. s_grid4.Clear();
  15.  
  16. LPCHARACTER victim = GetCompany()->GetOwner();
  17. LPITEM item;
  18.  
  19. int i;
  20.  
  21. for (i = 0; i < INVENTORY_MAX_NUM / 2; ++i)
  22. {
  23. if (!(item = victim->GetInventoryItem(i)))
  24. continue;
  25.  
  26. s_grid1.Put(i, 1, item->GetSize());
  27. }
  28. for (i = INVENTORY_MAX_NUM / 2; i < INVENTORY_MAX_NUM; ++i)
  29. {
  30. if (!(item = victim->GetInventoryItem(i)))
  31. continue;
  32.  
  33. s_grid2.Put(i - INVENTORY_MAX_NUM / 2, 1, item->GetSize());
  34. }
  35.  
  36. static std::vector <WORD> s_vDSGrid(DRAGON_SOUL_INVENTORY_MAX_NUM);
  37.  
  38. bool bDSInitialized = false;
  39.  
  40. for (i = 0; i < EXCHANGE_ITEM_MAX_NUM; ++i)
  41. {
  42. if (!(item = m_apItems[i]))
  43. continue;
  44.  
  45. #ifdef NEW_ADD_INVENTORY
  46. int envanterblack;
  47. if (item->IsDragonSoul())
  48. envanterblack = victim->GetEmptyDragonSoulInventory(item);
  49. else
  50. envanterblack = victim->GetEmptyInventory(item->GetSize());
  51.  
  52. if (envanterblack < 0)
  53. {
  54. return false;
  55. }
  56. #endif
  57.  
  58. if (item->IsDragonSoul())
  59. {
  60. if (!victim->DragonSoul_IsQualified())
  61. {
  62. return false;
  63. }
  64.  
  65. if (!bDSInitialized)
  66. {
  67. bDSInitialized = true;
  68. victim->CopyDragonSoulItemGrid(s_vDSGrid);
  69. }
  70.  
  71. bool bExistEmptySpace = false;
  72. WORD wBasePos = DSManager::instance().GetBasePosition(item);
  73. if (wBasePos >= DRAGON_SOUL_INVENTORY_MAX_NUM)
  74. return false;
  75.  
  76. for (int i = 0; i < DRAGON_SOUL_BOX_SIZE; i++)
  77. {
  78. WORD wPos = wBasePos + i;
  79. if (0 == s_vDSGrid[wBasePos])
  80. {
  81. bool bEmpty = true;
  82. for (int j = 1; j < item->GetSize(); j++)
  83. {
  84. if (s_vDSGrid[wPos + j * DRAGON_SOUL_BOX_COLUMN_NUM])
  85. {
  86. bEmpty = false;
  87. break;
  88. }
  89. }
  90. if (bEmpty)
  91. {
  92. for (int j = 0; j < item->GetSize(); j++)
  93. {
  94. s_vDSGrid[wPos + j * DRAGON_SOUL_BOX_COLUMN_NUM] = wPos + 1;
  95. }
  96. bExistEmptySpace = true;
  97. break;
  98. }
  99. }
  100. if (bExistEmptySpace)
  101. break;
  102. }
  103. if (!bExistEmptySpace)
  104. return false;
  105. }
  106. else
  107. {
  108. int iPos = s_grid1.FindBlank(1, item->GetSize());
  109.  
  110. if (iPos >= 0)
  111. {
  112. s_grid1.Put(iPos, 1, item->GetSize());
  113. }
  114. else
  115. {
  116. iPos = s_grid2.FindBlank(1, item->GetSize());
  117.  
  118. if (iPos >= 0)
  119. {
  120. s_grid2.Put(iPos, 1, item->GetSize());
  121. }
  122. else
  123. {
  124. return false;
  125. }
  126. }
  127. }
  128. }
  129.  
  130. return true;
  131. }
  132.  
  133.  
  134. Changed it to this :
  135.  
  136. bool CExchange::CheckSpace()
  137. {
  138. static CGrid s_grid1(5, INVENTORY_MAX_NUM/5 / 4);
  139. static CGrid s_grid2(5, INVENTORY_MAX_NUM/5 / 4);
  140. static CGrid s_grid3(5, INVENTORY_MAX_NUM/5 / 4);
  141. static CGrid s_grid4(5, INVENTORY_MAX_NUM/5 / 4);
  142.  
  143. s_grid1.Clear();
  144. s_grid2.Clear();
  145. s_grid3.Clear();
  146. s_grid4.Clear();
  147.  
  148. LPCHARACTER victim = GetCompany()->GetOwner();
  149. LPITEM item;
  150.  
  151. int i;
  152.  
  153. for (i = 0; i < INVENTORY_MAX_NUM / 4; ++i) // slot 1
  154. {
  155. if (!(item = victim->GetInventoryItem(i)))
  156. continue;
  157.  
  158. s_grid1.Put(i, 1, item->GetSize());
  159. }
  160. for (i = INVENTORY_MAX_NUM / 4; i < (INVENTORY_MAX_NUM / 4) * 2; ++i) // slot 2
  161. {
  162. if (!(item = victim->GetInventoryItem(i)))
  163. continue;
  164.  
  165. s_grid2.Put(i - INVENTORY_MAX_NUM / 4, 1, item->GetSize());
  166. }
  167. for (i = (INVENTORY_MAX_NUM / 4) * 2; i < (INVENTORY_MAX_NUM / 4) * 3; ++i) // slot 3
  168. {
  169. if (!(item = victim->GetInventoryItem(i)))
  170. continue;
  171.  
  172. s_grid3.Put(i - (INVENTORY_MAX_NUM / 4) * 2, 1, item->GetSize());
  173. }
  174. for (i = (INVENTORY_MAX_NUM / 4) * 3; i < (INVENTORY_MAX_NUM / 4) * 4; ++i) // slot 4
  175. {
  176. if (!(item = victim->GetInventoryItem(i)))
  177. continue;
  178.  
  179. s_grid4.Put(i - (INVENTORY_MAX_NUM / 4) * 3, 1, item->GetSize());
  180. }
  181.  
  182. static std::vector <WORD> s_vDSGrid(DRAGON_SOUL_INVENTORY_MAX_NUM);
  183.  
  184. bool bDSInitialized = false;
  185.  
  186. for (i = 0; i < EXCHANGE_ITEM_MAX_NUM; ++i)
  187. {
  188. if (!(item = m_apItems[i]))
  189. continue;
  190.  
  191. #ifdef NEW_ADD_INVENTORY
  192. int envanterblack;
  193. if (item->IsDragonSoul())
  194. envanterblack = victim->GetEmptyDragonSoulInventory(item);
  195. else
  196. envanterblack = victim->GetEmptyInventory(item->GetSize());
  197.  
  198. if (envanterblack < 0)
  199. return false;
  200. #endif
  201.  
  202. if (item->IsDragonSoul())
  203. {
  204. if (!victim->DragonSoul_IsQualified())
  205. {
  206. return false;
  207. }
  208.  
  209. if (!bDSInitialized)
  210. {
  211. bDSInitialized = true;
  212. victim->CopyDragonSoulItemGrid(s_vDSGrid);
  213. }
  214.  
  215. bool bExistEmptySpace = false;
  216. WORD wBasePos = DSManager::instance().GetBasePosition(item);
  217. if (wBasePos >= DRAGON_SOUL_INVENTORY_MAX_NUM)
  218. return false;
  219.  
  220. for (int i = 0; i < DRAGON_SOUL_BOX_SIZE; i++)
  221. {
  222. WORD wPos = wBasePos + i;
  223. if (0 == s_vDSGrid[wBasePos])
  224. {
  225. bool bEmpty = true;
  226. for (int j = 1; j < item->GetSize(); j++)
  227. {
  228. if (s_vDSGrid[wPos + j * DRAGON_SOUL_BOX_COLUMN_NUM])
  229. {
  230. bEmpty = false;
  231. break;
  232. }
  233. }
  234. if (bEmpty)
  235. {
  236. for (int j = 0; j < item->GetSize(); j++)
  237. {
  238. s_vDSGrid[wPos + j * DRAGON_SOUL_BOX_COLUMN_NUM] = wPos + 1;
  239. }
  240. bExistEmptySpace = true;
  241. break;
  242. }
  243. }
  244. if (bExistEmptySpace)
  245. break;
  246. }
  247. if (!bExistEmptySpace)
  248. return false;
  249. }
  250. else
  251. {
  252. int iPos = s_grid1.FindBlank(1, item->GetSize());
  253.  
  254. if (iPos >= 0)
  255. {
  256. s_grid1.Put(iPos, 1, item->GetSize());
  257. }
  258. else
  259. {
  260. iPos = s_grid2.FindBlank(1, item->GetSize());
  261.  
  262. if (iPos >= 0)
  263. {
  264. s_grid2.Put(iPos, 1, item->GetSize());
  265. }
  266. else
  267. {
  268. iPos = s_grid3.FindBlank(1, item->GetSize());
  269.  
  270. if (iPos >= 0)
  271. {
  272. s_grid3.Put(iPos, 1, item->GetSize());
  273. }
  274. else
  275. {
  276. iPos = s_grid4.FindBlank(1, item->GetSize());
  277.  
  278. if (iPos >= 0)
  279. {
  280. s_grid4.Put(iPos, 1, item->GetSize());
  281. }
  282. else
  283. {
  284. return false;
  285. }
  286. }
  287. }
  288. }
  289. }
  290. }
  291.  
  292. return true;
  293. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement