Guest User

Untitled

a guest
Jan 12th, 2023
131
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.55 KB | None | 0 0
  1. bool ITEM_MANAGER::GetDropPct(LPCHARACTER pkChr, LPCHARACTER pkKiller, OUT int& iDeltaPercent, OUT int& iRandRange)
  2. {
  3. if (NULL == pkChr || NULL == pkKiller)
  4. return false;
  5.  
  6. int iLevel = pkKiller->GetLevel();
  7. iDeltaPercent = 100;
  8.  
  9. if (!pkChr->IsStone() && pkChr->GetMobRank() >= MOB_RANK_BOSS)
  10. iDeltaPercent = PERCENT_LVDELTA_BOSS(pkKiller->GetLevel(), pkChr->GetLevel());
  11. else
  12. iDeltaPercent = PERCENT_LVDELTA(pkKiller->GetLevel(), pkChr->GetLevel());
  13.  
  14. BYTE bRank = pkChr->GetMobRank();
  15.  
  16. if (1 == number(1, 50000))
  17. iDeltaPercent += 1000;
  18. else if (1 == number(1, 10000))
  19. iDeltaPercent += 500;
  20.  
  21. sys_log(3, "CreateDropItem for level: %d rank: %u pct: %d", iLevel, bRank, iDeltaPercent);
  22. iDeltaPercent = iDeltaPercent * CHARACTER_MANAGER::instance().GetMobItemRate(pkKiller) / 100;
  23.  
  24. //if (pkKiller->GetPoint(POINT_MALL_ITEMBONUS) > 0)
  25. //iDeltaPercent += iDeltaPercent * pkKiller->GetPoint(POINT_MALL_ITEMBONUS) / 100;
  26. // ADD_PREMIUM
  27. if (pkKiller->GetPremiumRemainSeconds(PREMIUM_ITEM) > 0 ||
  28. pkKiller->IsEquipUniqueGroup(UNIQUE_GROUP_DOUBLE_ITEM))
  29. iDeltaPercent += iDeltaPercent;
  30. // END_OF_ADD_PREMIUM
  31.  
  32. // PC_BANG_ITEM_ADD
  33. if (pkKiller->GetPoint(POINT_PC_BANG_DROP_BONUS) > 0)
  34. {
  35. if (pkKiller->IsPCBang() == true)
  36. iDeltaPercent += iDeltaPercent * pkKiller->GetPoint(POINT_PC_BANG_DROP_BONUS)/100;
  37. }
  38. // END_PC_BANG_ITEM_ADD
  39.  
  40. iRandRange = 4000000;
  41. iRandRange = iRandRange * 100 /
  42. (100 +
  43. CPrivManager::instance().GetPriv(pkKiller, PRIV_ITEM_DROP) +
  44. pkKiller->IsEquipUniqueItem(UNIQUE_ITEM_DOUBLE_ITEM)?100:0);
  45.  
  46. if (distribution_test_server) iRandRange /= 3;
  47.  
  48. return true;
  49. }
  50.  
  51. #ifdef __SEND_TARGET_INFO__
  52. bool ITEM_MANAGER::CreateDropItemVector(LPCHARACTER pkChr, LPCHARACTER pkKiller, std::vector<LPITEM> & vec_item)
  53. {
  54. {
  55. if (!pkChr || !pkKiller)
  56. return false;
  57. }
  58. if (pkChr->IsPolymorphed() || pkChr->IsPC())
  59. {
  60. return false;
  61. }
  62.  
  63. int iLevel = pkKiller->GetLevel();
  64.  
  65. BYTE bRank = pkChr->GetMobRank();
  66. LPITEM item = NULL;
  67.  
  68. std::vector<CItemDropInfo>::iterator it = g_vec_pkCommonDropItem[bRank].begin();
  69.  
  70. while (it != g_vec_pkCommonDropItem[bRank].end())
  71. {
  72. const CItemDropInfo & c_rInfo = *(it++);
  73.  
  74. if (iLevel < c_rInfo.m_iLevelStart || iLevel > c_rInfo.m_iLevelEnd)
  75. continue;
  76.  
  77. TItemTable * table = GetTable(c_rInfo.m_dwVnum);
  78.  
  79. if (!table)
  80. continue;
  81.  
  82. item = NULL;
  83.  
  84. if (table->bType == ITEM_POLYMORPH)
  85. {
  86. if (c_rInfo.m_dwVnum == pkChr->GetPolymorphItemVnum())
  87. {
  88. item = CreateItem(c_rInfo.m_dwVnum, 1, 0, true);
  89.  
  90. if (item)
  91. item->SetSocket(0, pkChr->GetRaceNum());
  92. }
  93. }
  94. else
  95. item = CreateItem(c_rInfo.m_dwVnum, 1, 0, true);
  96.  
  97. if (item) vec_item.push_back(item);
  98. }
  99.  
  100. // Drop Item Group
  101. {
  102. itertype(m_map_pkDropItemGroup) it;
  103. it = m_map_pkDropItemGroup.find(pkChr->GetRaceNum());
  104.  
  105. if (it != m_map_pkDropItemGroup.end())
  106. {
  107. typeof(it->second->GetVector()) v = it->second->GetVector();
  108.  
  109. for (DWORD i = 0; i < v.size(); ++i)
  110. {
  111. item = CreateItem(v[i].dwVnum, v[i].iCount, 0, true);
  112.  
  113. if (item)
  114. {
  115. if (item->GetType() == ITEM_POLYMORPH)
  116. {
  117. if (item->GetVnum() == pkChr->GetPolymorphItemVnum())
  118. {
  119. item->SetSocket(0, pkChr->GetRaceNum());
  120. }
  121. }
  122.  
  123. vec_item.push_back(item);
  124. }
  125. }
  126. }
  127. }
  128.  
  129. // MobDropItem Group
  130. {
  131. itertype(m_map_pkMobItemGroup) it;
  132. it = m_map_pkMobItemGroup.find(pkChr->GetRaceNum());
  133.  
  134. if ( it != m_map_pkMobItemGroup.end() )
  135. {
  136. CMobItemGroup* pGroup = it->second;
  137.  
  138. // MOB_DROP_ITEM_BUG_FIX
  139. // 20050805.myevan.MobDropItem ? ???? ?? ?? CMobItemGroup::GetOne() ??? ?? ?? ??
  140. if (pGroup && !pGroup->IsEmpty())
  141. {
  142. const CMobItemGroup::SMobItemGroupInfo& info = pGroup->GetOne();
  143. item = CreateItem(info.dwItemVnum, info.iCount, 0, true, info.iRarePct);
  144.  
  145. if (item) vec_item.push_back(item);
  146. }
  147. // END_OF_MOB_DROP_ITEM_BUG_FIX
  148. }
  149. }
  150.  
  151. // Level Item Group
  152. {
  153. itertype(m_map_pkLevelItemGroup) it;
  154. it = m_map_pkLevelItemGroup.find(pkChr->GetRaceNum());
  155.  
  156. if ( it != m_map_pkLevelItemGroup.end() )
  157. {
  158. if ( it->second->GetLevelLimit() <= (DWORD)iLevel )
  159. {
  160. typeof(it->second->GetVector()) v = it->second->GetVector();
  161.  
  162. for ( DWORD i=0; i < v.size(); i++ )
  163. {
  164. DWORD dwVnum = v[i].dwVNum;
  165. item = CreateItem(dwVnum, v[i].iCount, 0, true);
  166. if ( item ) vec_item.push_back(item);
  167. }
  168. }
  169. }
  170. }
  171.  
  172. // BuyerTheitGloves Item Group
  173. {
  174. // by mhh ?? ??? ??? ?? drop ? ???? ??
  175. if (pkKiller->GetPremiumRemainSeconds(PREMIUM_ITEM) > 0 ||
  176. pkKiller->IsEquipUniqueGroup(UNIQUE_GROUP_DOUBLE_ITEM))
  177. {
  178. itertype(m_map_pkGloveItemGroup) it;
  179. it = m_map_pkGloveItemGroup.find(pkChr->GetRaceNum());
  180.  
  181. if (it != m_map_pkGloveItemGroup.end())
  182. {
  183. typeof(it->second->GetVector()) v = it->second->GetVector();
  184.  
  185. for (DWORD i = 0; i < v.size(); ++i)
  186. {
  187.  
  188. DWORD dwVnum = v[i].dwVnum;
  189. item = CreateItem(dwVnum, v[i].iCount, 0, true);
  190. if (item) vec_item.push_back(item);
  191. }
  192. }
  193. }
  194. }
  195.  
  196. // ??
  197. if (pkChr->GetMobDropItemVnum())
  198. {
  199. itertype(m_map_dwEtcItemDropProb) it = m_map_dwEtcItemDropProb.find(pkChr->GetMobDropItemVnum());
  200.  
  201. if (it != m_map_dwEtcItemDropProb.end())
  202. {
  203. item = CreateItem(pkChr->GetMobDropItemVnum(), 1, 0, true);
  204. if (item) vec_item.push_back(item);
  205. }
  206. }
  207.  
  208. if (pkChr->IsStone())
  209. {
  210. if (pkChr->GetDropMetinStoneVnum())
  211. {
  212. item = CreateItem(pkChr->GetDropMetinStoneVnum(), 1, 0, true);
  213. if (item) vec_item.push_back(item);
  214. }
  215. }
  216.  
  217. return vec_item.size();
  218. }
  219. #endif
Advertisement
Add Comment
Please, Sign In to add comment