Advertisement
Guest User

Untitled

a guest
Aug 31st, 2016
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.60 KB | None | 0 0
  1. namespace NPartyExpDistribute
  2. {
  3. struct FPartyTotaler
  4. {
  5. int total;
  6. int member_count;
  7. int x, y;
  8.  
  9. FPartyTotaler(LPCHARACTER center)
  10. : total(0), member_count(0), x(center->GetX()), y(center->GetY())
  11. {};
  12.  
  13. void operator () (LPCHARACTER ch)
  14. {
  15. if (DISTANCE_APPROX(ch->GetX() - x, ch->GetY() - y) <= PARTY_DEFAULT_RANGE)
  16. {
  17. if (LC_IsYMIR())
  18. total += ch->GetLevel();
  19. else
  20. total += party_exp_distribute_table[ch->GetLevel()];
  21.  
  22. ++member_count;
  23. }
  24. }
  25. };
  26.  
  27. struct FPartyDistributor
  28. {
  29. int total;
  30. LPCHARACTER c;
  31. int x, y;
  32. DWORD _iExp;
  33. int m_iMode;
  34. int m_iMemberCount;
  35.  
  36. FPartyDistributor(LPCHARACTER center, int member_count, int total, DWORD iExp, int iMode)
  37. : total(total), c(center), x(center->GetX()), y(center->GetY()), _iExp(iExp), m_iMode(iMode), m_iMemberCount(member_count)
  38. {
  39. if (m_iMemberCount == 0)
  40. m_iMemberCount = 1;
  41. };
  42.  
  43. void operator () (LPCHARACTER ch)
  44. {
  45. if (DISTANCE_APPROX(ch->GetX() - x, ch->GetY() - y) <= PARTY_DEFAULT_RANGE)
  46. {
  47. DWORD iExp2 = 0;
  48.  
  49. switch (m_iMode)
  50. {
  51. case PARTY_EXP_DISTRIBUTION_NON_PARITY:
  52. if (LC_IsYMIR())
  53. iExp2 = (DWORD) ((_iExp * ch->GetLevel()) / total);
  54. else
  55. iExp2 = (DWORD) (_iExp * (float) party_exp_distribute_table[ch->GetLevel()] / total);
  56. break;
  57.  
  58. case PARTY_EXP_DISTRIBUTION_PARITY:
  59. iExp2 = _iExp / m_iMemberCount;
  60. break;
  61.  
  62. default:
  63. sys_err("Unknown party exp distribution mode %d", m_iMode);
  64. return;
  65. }
  66.  
  67. GiveExp(c, ch, iExp2);
  68. }
  69. }
  70. };
  71. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement