daily pastebin goal
11%
SHARE
TWEET

Untitled

a guest Mar 15th, 2019 59 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.         for (auto const& data : m_mapDungeonData.at(pInfo->dwWorldId).vecRewards)
  2.         {
  3.             BOOL doubleIP = FALSE;
  4.             BOOL partyFound = FALSE;
  5.             BOOL LootGiven = FALSE;
  6.             vector<char*> partyIP;
  7.             vector<u_long> vec_validPlayers;
  8.             vec_validPlayers.clear();
  9.             partyIP.clear();
  10.             vector<DWORD> vec_dwLoggedUsers;
  11.             vec_dwLoggedUsers.clear();
  12.  
  13.             if (partyFound)
  14.                 break;
  15.  
  16.             CWorld* pWorld = g_WorldMng.GetWorld(pInfo->dwWorldId);
  17.             if (!pWorld || !pWorld->m_linkMap.GetLinkMap(static_cast<int>(dwDungeonId)))
  18.                 return;
  19.  
  20.             CObj* pObj;
  21.             for (DWORD i = 0; i < pWorld->m_dwObjNum; i++)
  22.             {
  23.                 pObj = pWorld->m_apObject[i];
  24.                 if (IsValidObj(pObj) && pObj->GetLayer() == static_cast<int>(dwDungeonId)
  25.                     && pObj->GetType() == OT_MOVER && static_cast<CUser*>(pObj)->IsPlayer())
  26.                 {
  27.                     CUser* pUser = static_cast<CUser*>(pObj);
  28.  
  29.                     CParty* pParty = g_PartyMng.GetParty(pUser->GetPartyId());
  30.  
  31.                     if (pParty)
  32.                     {
  33.                         partyFound = TRUE;
  34.                         for (DWORD o = 0; o < pParty->m_nSizeofMember; o++)
  35.                         {
  36.                             CUser* pMember = (CUser*)g_UserMng.GetUserByPlayerID(pParty->m_aMember[o].m_uPlayerId);
  37.                             TCHAR* UserIP = pMember->m_playAccount.lpAddr;
  38.                             if (IsValidObj(pMember))
  39.                             {
  40.                                 if (partyIP.size() > 0)
  41.                                 {
  42.                                     for (int o = 0; o < partyIP.size(); o++)
  43.                                     {
  44.                                         if (strcmp(UserIP, partyIP[o]) == 0)
  45.                                         {
  46.                                             doubleIP = TRUE;
  47.                                         }
  48.                                     }
  49.                                     if (doubleIP == FALSE && pMember->GetWorld()->GetID() == pWorld->GetID() && pInfo->nRewardKillCount >= data.nMobCount)
  50.                                     {
  51.                                         if (pInfo->nRewardState >= data.nState)
  52.                                         {
  53.                                             partyIP.push_back(UserIP);
  54.                                             vec_validPlayers.push_back(pMember->m_idPlayer);
  55.                                         }
  56.                                     }
  57.                                     else
  58.                                     {
  59.                                         doubleIP = FALSE;
  60.                                     }
  61.                                 }
  62.                                 else {
  63.                                     if (pInfo->nRewardState >= data.nState  && pMember->GetWorld()->GetID() == pInfo->dwWorldId && pInfo->nRewardKillCount >= data.nMobCount)
  64.                                     {
  65.                                         partyIP.push_back(UserIP);
  66.                                         vec_validPlayers.push_back(pMember->m_idPlayer);
  67.  
  68.                                     }
  69.                                 }
  70.                             }
  71.                         }
  72.                         if (vec_validPlayers.size() > 0 && !LootGiven)
  73.                         {
  74.                             int n_NumPerPlayers;
  75.  
  76.                             if (data.nRewardItemAmount != 1)
  77.                                 n_NumPerPlayers = (int)(data.nRewardItemAmount / vec_validPlayers.size());
  78.                             else
  79.                                 n_NumPerPlayers = 1;
  80.  
  81.                             if (n_NumPerPlayers == 1 || data.nRewardItemAmount % vec_validPlayers.size() == 0)
  82.                             {
  83.                                 for (auto pit : vec_validPlayers)
  84.                                 {
  85.                                     CUser* pUser = (CUser*)prj.GetUserByID(pit);
  86.                                     if (IsValidObj(pUser))
  87.                                     {
  88.                                         CItemElem pItemElem;
  89.                                         pItemElem.m_dwItemId = data.dwRewardItem;
  90.                                         pItemElem.m_bCharged = prj.GetItemProp(data.dwRewardItem)->bCharged;
  91.                                         pItemElem.m_nItemNum = n_NumPerPlayers;
  92.                                         pItemElem.SetSerialNumber();
  93.  
  94.                                         if (pUser->CreateItem(&pItemElem))
  95.                                         {
  96.                                             LogItemInfo aLogItem;
  97.                                             aLogItem.Action = "W";
  98.                                             aLogItem.SendName = "BossToken";
  99.                                             strcpy(aLogItem.szItemName, pItemElem.GetName());
  100.                                             aLogItem.RecvName = pUser->GetName();
  101.                                             aLogItem.itemNumber = pItemElem.m_nItemNum;
  102.                                             g_DPSrvr.OnLogItem(aLogItem, &pItemElem, pItemElem.m_nItemNum);
  103.                                             vec_dwLoggedUsers.push_back(pUser->m_idPlayer);
  104.                                         }
  105.                                     }
  106.                                 }
  107.                             }
  108.                             else {
  109.                                 int maxRewards = data.nRewardItemAmount;
  110.                                 int nLoopCount = 0;
  111.  
  112.                                 while (maxRewards > 0)
  113.                                 {
  114.                                     if (nLoopCount > 0)
  115.                                         n_NumPerPlayers = data.nRewardItemAmount / vec_validPlayers.size();
  116.  
  117.                                     if (n_NumPerPlayers == 0)
  118.                                         n_NumPerPlayers = 1;
  119.  
  120.                                     for (auto pit : vec_validPlayers)
  121.                                     {
  122.                                         if (maxRewards <= 0)
  123.                                             break;
  124.  
  125.                                         if (maxRewards < n_NumPerPlayers)
  126.                                             n_NumPerPlayers = maxRewards;
  127.  
  128.  
  129.  
  130.                                         // There is a random chance this users gets skipped
  131.                                         if (nLoopCount > 0 && vec_validPlayers.size() > 1)
  132.                                         {
  133.                                             if (xRandom(100000 / vec_validPlayers.size()) < (25000 / vec_validPlayers.size()))
  134.                                                 continue;
  135.                                         }
  136.  
  137.                                         CUser* pUser = (CUser*)prj.GetUserByID(pit);
  138.                                         if (IsValidObj(pUser))
  139.                                         {
  140.                                             CItemElem pItemElem;
  141.                                             pItemElem.m_dwItemId = data.dwRewardItem;
  142.                                             pItemElem.m_bCharged = prj.GetItemProp(data.dwRewardItem)->bCharged;
  143.                                             pItemElem.m_nItemNum = n_NumPerPlayers;
  144.                                             pItemElem.SetSerialNumber();
  145.  
  146.                                             if (pUser->CreateItem(&pItemElem))
  147.                                             {
  148.                                                 LogItemInfo aLogItem;
  149.                                                 aLogItem.Action = "W";
  150.                                                 aLogItem.SendName = "BossToken";
  151.                                                 strcpy(aLogItem.szItemName, pItemElem.GetName());
  152.                                                 aLogItem.RecvName = pUser->GetName();
  153.                                                 aLogItem.itemNumber = pItemElem.m_nItemNum;
  154.                                                 g_DPSrvr.OnLogItem(aLogItem, &pItemElem, pItemElem.m_nItemNum);
  155.                                                 vec_dwLoggedUsers.push_back(pUser->m_idPlayer);
  156.                                                 maxRewards -= n_NumPerPlayers;
  157.                                             }
  158.                                         }
  159.                                     }
  160.                                     nLoopCount++;
  161.                                 }
  162.                             }
  163.                             LootGiven = TRUE;
  164.                         }
  165.                     }
  166.                 }
  167.             }
  168.         }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top