Guest User

Untitled

a guest
Dec 4th, 2019
280
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.55 KB | None | 0 0
  1. #ifdef __SEND_TARGET_INFO__
  2. bool ITEM_MANAGER::CreateDropItemVector(LPCHARACTER pkChr, LPCHARACTER pkKiller, std::vector<LPITEM> & vec_item)
  3. {
  4. if (pkChr->IsPolymorphed() || pkChr->IsPC())
  5. {
  6. return false;
  7. }
  8.  
  9. int iLevel = pkKiller->GetLevel();
  10. bool iLevelMin = false;
  11. bool iLevelMax = false;
  12.  
  13. BYTE bRank = pkChr->GetMobRank();
  14. LPITEM item = NULL;
  15.  
  16. std::vector<CItemDropInfo>::iterator it = g_vec_pkCommonDropItem[bRank].begin();
  17.  
  18. while (it != g_vec_pkCommonDropItem[bRank].end())
  19. {
  20. const CItemDropInfo & c_rInfo = *(it++);
  21.  
  22. if (iLevel < c_rInfo.m_iLevelStart || iLevel > c_rInfo.m_iLevelEnd)
  23. continue;
  24.  
  25. //TItemTable * table = GetTable(c_rInfo.m_dwVnum);
  26. DWORD ranItem = number(c_rInfo.m_dwVnumStart, c_rInfo.m_dwVnumEnd);
  27. TItemTable * table = GetTable(ranItem);
  28.  
  29. if (!table)
  30. continue;
  31.  
  32. item = NULL;
  33.  
  34. if (table->bType == ITEM_POLYMORPH)
  35. {
  36. if (ranItem == pkChr->GetPolymorphItemVnum())
  37. {
  38. item = CreateItem(ranItem, 1, 0, true);
  39.  
  40. if (item)
  41. item->SetSocket(0, pkChr->GetRaceNum());
  42. }
  43. }
  44. else
  45. item = CreateItem(ranItem, 1, 0, true);
  46.  
  47. if (item) vec_item.push_back(item);
  48. }
  49.  
  50. // Drop Item Group
  51. {
  52. //itertype(m_map_pkDropItemGroup) it;
  53. auto it = m_map_pkDropItemGroup.find(pkChr->GetRaceNum());
  54.  
  55. if (it != m_map_pkDropItemGroup.end())
  56. {
  57. //typeof(it->second->GetVector())
  58. auto v = it->second->GetVector();
  59.  
  60. for (DWORD i = 0; i < v.size(); ++i)
  61. {
  62. //item = CreateItem(v.dwVnum, v.iCount, 0, true);
  63. item = CreateItem(v.dwVnumStart, v.dwVnumEnd, v.iCount, 0, true);
  64. if (item)
  65. {
  66. if (item->GetType() == ITEM_POLYMORPH)
  67. {
  68. if (item->GetVnum() == pkChr->GetPolymorphItemVnum())
  69. {
  70. item->SetSocket(0, pkChr->GetRaceNum());
  71. }
  72. }
  73.  
  74. vec_item.push_back(item);
  75. }
  76. }
  77. }
  78. }
  79.  
  80. // MobDropItem Group
  81. {
  82. //itertype(m_map_pkMobItemGroup) it;
  83. auto it = m_map_pkMobItemGroup.find(pkChr->GetRaceNum());
  84.  
  85. if (it != m_map_pkMobItemGroup.end())
  86. {
  87. std::vector<CMobItemGroup*>& vec_pGroups = it->second;
  88.  
  89. for (int i = 0; i < vec_pGroups.size(); ++i)
  90. {
  91. CMobItemGroup* pGroup = vec_pGroups;
  92. // MOB_DROP_ITEM_BUG_FIX
  93. // 20050805.myevan.MobDropItem ? ???? ?? ?? CMobItemGroup::GetOne() ??? ?? ?? ??
  94. if (pGroup && !pGroup->IsEmpty())
  95. {
  96. const CMobItemGroup::SMobItemGroupInfo& info = pGroup->GetOne();
  97. //item = CreateItem(info.dwItemVnum, info.iCount, 0, true, info.iRarePct);
  98. item = CreateItem(info.dwItemVnumStart, info.dwItemVnumEnd, info.iCount, 0, true, info.iRarePct);
  99. if (item) vec_item.push_back(item);
  100. }
  101. // END_OF_MOB_DROP_ITEM_BUG_FIX
  102. }
  103. }
  104. }
  105.  
  106. // Level Item Group
  107. {
  108. // itertype(m_map_pkLevelItemGroup) it;
  109. auto it = m_map_pkLevelItemGroup.find(pkChr->GetRaceNum());
  110.  
  111. if (it != m_map_pkLevelItemGroup.end())
  112. {
  113. if (it->second->GetLevelLimitStart() <= (DWORD)iLevel)
  114. {
  115. //pkKiller->ChatPacket(CHAT_TYPE_INFO_ITEM, "GetLevelLimitStart %d", it->second->GetLevelLimitStart());// Only Output Info for test
  116. iLevelMin = true;
  117. }
  118. if (it->second->GetLevelLimitEnd() >= (DWORD)iLevel)
  119. {
  120. //pkKiller->ChatPacket(CHAT_TYPE_INFO_ITEM, "GetLevelLimitEnd %d", it->second->GetLevelLimitEnd());// Only Output Info for test
  121. iLevelMax = true;
  122. }
  123. if (iLevelMin && iLevelMax)
  124. {
  125. // typeof(it->second->GetVector()) v = it->second->GetVector();
  126. auto v = it->second->GetVector();
  127. for (DWORD i = 0; i < v.size(); i++)
  128. {
  129. //DWORD dwVnum = v.dwVNum;
  130. DWORD dwVnum = number(v.dwVNumStart, v.dwVNumEnd);
  131. item = CreateItem(dwVnum, v.iCount, 0, true);
  132. if (item) vec_item.push_back(item);
  133. }
  134. }
  135. }
  136. }
  137.  
  138. // BuyerTheitGloves Item Group
  139. {
  140. // by mhh ?? ??? ??? ?? drop ? ???? ??
  141. if (pkKiller->GetPremiumRemainSeconds(PREMIUM_ITEM) > 0 ||
  142. pkKiller->IsEquipUniqueGroup(UNIQUE_GROUP_DOUBLE_ITEM))
  143. {
  144. //itertype(m_map_pkGloveItemGroup) it;
  145. auto it = m_map_pkGloveItemGroup.find(pkChr->GetRaceNum());
  146.  
  147. if (it != m_map_pkGloveItemGroup.end())
  148. {
  149. //typeof(it->second->GetVector())
  150. auto v = it->second->GetVector();
  151.  
  152. for (DWORD i = 0; i < v.size(); ++i)
  153. {
  154.  
  155. //DWORD dwVnum = v[i].dwVnum;
  156. //item = CreateItem(dwVnum, v[i].iCount, 0, true);
  157. DWORD dwVnum = number(v[i].dwVnumStart, v[i].dwVnumEnd);
  158. item = CreateItem(dwVnum, v[i].iCount, 0, true);
  159. if (item) vec_item.push_back(item);
  160. }
  161. }
  162. }
  163. }
  164.  
  165. // ??
  166. if (pkChr->GetMobDropItemVnum())
  167. {
  168. //itertype(m_map_dwEtcItemDropProb)
  169. auto it = m_map_dwEtcItemDropProb.find(pkChr->GetMobDropItemVnum());
  170.  
  171. if (it != m_map_dwEtcItemDropProb.end())
  172. {
  173. item = CreateItem(pkChr->GetMobDropItemVnum(), 1, 0, true);
  174. if (item) vec_item.push_back(item);
  175. }
  176. }
  177.  
  178. if (pkChr->IsStone())
  179. {
  180. if (pkChr->GetDropMetinStoneVnum())
  181. {
  182. item = CreateItem(pkChr->GetDropMetinStoneVnum(), 1, 0, true);
  183. if (item) vec_item.push_back(item);
  184. }
  185. }
  186.  
  187. return vec_item.size();
  188. }
  189. #endif
Advertisement
Add Comment
Please, Sign In to add comment