Reklam
void CUser::GiveRandomItem(uint32& nItemID, uint32& nCount, uint8 bySession)
{
std::map <uint16, _RANDOM_ITEM*> nRandom;
int say = 0;
foreach(itr, g_pMain->m_RandomItemArray)
{
_RANDOM_ITEM* pRandom = *itr;
if (pRandom->SessionID != bySession)
continue;
nRandom.insert(std::make_pair(say, pRandom));
say++;
}
int thisrand = static_cast<int>(nRandom.size());
if (thisrand == 0)
return;
thisrand -= 1;
int rand = myrand(0, thisrand);
auto it = nRandom.find(rand);
if (it != nRandom.end())
{
_RANDOM_ITEM* pRandom = it->second;
nItemID = pRandom->ItemID;
nCount = pRandom->ItemCount;
// 10.05.2024 düzenlemesi
m_randomItem = pRandom->ItemID;
GiveItem("Collection Random Item", nItemID, nCount, true);
// 10.05.2024 düzenlemesi end
}
//printf("bySession Item ID %d %d \n", nItemID, bySession);
}
void CUser::CollectionRaceFinish()
{
_CR_USER_LIST* ptest = g_pMain->pCollectionRaceEvent.m_userlit.GetData(GetName());
if (ptest != nullptr) {
ptest->isFinish = CollectionRace.CheckFinish;
}
uint32 tmp_RewardItemID[10]{};
uint32 tmp_RewardItemCount[10]{};
for (int i = 0; i < 3; i++)
{
CollectionRace.KillCount[i] = 0;
}
for (int i = 0; i < 10; i++)
{
tmp_RewardItemID[i] = 0;
tmp_RewardItemCount[i] = 0;
}
bool isCind = pCindWar.isEventUser() && g_pMain->isCindirellaZone(GetZoneID());
bool lettercheck = false;
for (int i = 0; i < 10; i++)
{
if (g_pMain->pCollectionRaceEvent.RewardItemID[i] > 0)
{
if (isCind)
{
if (g_pMain->pCollectionRaceEvent.RewardItemID[i] == ITEM_GOLD)
{
pCindWar.gainnoah += g_pMain->pCollectionRaceEvent.RewardItemCount[i];
continue;
}
if (g_pMain->pCollectionRaceEvent.RewardItemID[i] == ITEM_EXP)
{
pCindWar.gainexp += g_pMain->pCollectionRaceEvent.RewardItemCount[i];
continue;
}
}
else
{
if (g_pMain->pCollectionRaceEvent.RewardItemID[i] == ITEM_GOLD)
{
GoldGain(g_pMain->pCollectionRaceEvent.RewardItemCount[i]);
continue;
}
if (g_pMain->pCollectionRaceEvent.RewardItemID[i] == ITEM_EXP)
{
ExpChange("collection race", g_pMain->pCollectionRaceEvent.RewardItemCount[i], true);
continue;
}
}
if (g_pMain->pCollectionRaceEvent.RewardItemID[i] == ITEM_COUNT)
{
SendLoyaltyChange("collection race", g_pMain->pCollectionRaceEvent.RewardItemCount[i]);
continue;
}
uint32 xItemID = g_pMain->pCollectionRaceEvent.RewardItemID[i];
uint32 xItemTime = g_pMain->pCollectionRaceEvent.RewardItemTime[i];
uint32 xCount = g_pMain->pCollectionRaceEvent.RewardItemCount[i];
uint32 xRand = g_pMain->pCollectionRaceEvent.RewardItemRate[i];
//if (g_pMain->pCollectionRaceEvent.RewardItemID[i] == 900004000)
// GiveRandomItem(xItemID, xCount, g_pMain->pCollectionRaceEvent.RewardSession[i]);
tmp_RewardItemID[i] = xItemID;
tmp_RewardItemCount[i] = xCount;
_ITEM_TABLE pTable = g_pMain->GetItemPtr(xItemID);
if (!pTable.isnull()) {
int nRate = 0;
if (xRand > 100) xRand = 100;
if (xRand) nRate = myrand(0, 10000);
if (nRate && static_cast<int>(xRand * 100) < nRate) {
tmp_RewardItemID[i] = 0;
tmp_RewardItemCount[i] = 0;
continue;
}
int8 pos = FindSlotForItem(xItemID, xCount);
if ((pCindWar.isEventUser() && g_pMain->isCindirellaZone(GetZoneID())) || pos < 0)
{
if (g_pMain->pCollectionRaceEvent.RewardItemID[i] == 900004000)
{
GiveRandomItem(xItemID, xCount, g_pMain->pCollectionRaceEvent.RewardSession[i]);
tmp_RewardItemID[i] = m_randomItem;
m_randomItem = 0; // 10.05.2024 düzenlemesi
}
else
{
Packet newpkt(WIZ_DB_SAVE_USER, uint8(ProcDbType::CollectionRaceReward));
newpkt << xItemID << xCount;
g_pMain->AddDatabaseRequest(newpkt, this);
}
}
else
{
if (g_pMain->pCollectionRaceEvent.RewardItemID[i] == 900004000)
{
GiveRandomItem(xItemID, xCount, g_pMain->pCollectionRaceEvent.RewardSession[i]);
tmp_RewardItemID[i] = m_randomItem;
m_randomItem = 0; // 10.05.2024 düzenlemesi
}
else
GiveItem("Collection Race", xItemID, xCount, true, xItemTime);
}
//if ((pCindWar.isEventUser() && g_pMain->isCindirellaZone(GetZoneID())) || pos < 0)
//{
// Packet newpkt(WIZ_DB_SAVE_USER, uint8(ProcDbType::CollectionRaceReward));
// newpkt << xItemID << xCount;
// g_pMain->AddDatabaseRequest(newpkt, this);
//}
//else
// GiveItem("Collection Race", xItemID, xCount, true, xItemTime);
}
}
}
Packet result(WIZ_QUEST);
result << uint8(10);
for (int i = 0; i < 10; i++)// cr ödül arttýrmasý 06.05.20204 end
{
if (tmp_RewardItemID[i] && tmp_RewardItemCount[i])
result << tmp_RewardItemID[i] << tmp_RewardItemCount[i];
}
//Packet result(WIZ_QUEST);
//result << uint8(0x0A);
//for (int i = 0; i < 3; i++)
// result << tmp_RewardItemID[i] << tmp_RewardItemCount[i];
//
//result << uint32_t(0x00) << uint32_t(0x00) << uint32_t(0x00) << uint32_t(0x00);
Send(&result);
}