|
You last visited: Today at 22:22
Advertisement
Flyff Drop System!
Discussion on Flyff Drop System! within the Flyff Private Server forum part of the Flyff category.
10/16/2016, 14:41
|
#1
|
elite*gold: 0
Join Date: Oct 2012
Posts: 948
Received Thanks: 157
|
Flyff Drop System!
Hi elitepvpers,
I am altering the way how Items will drop from NPC's
now before i proceed here is my code of the drop system for testing
Code:
BOOL CMover::DropItem(CMover* pAttacker)
{
MoverProp* lpMoverProp = GetProp();
#ifdef __WORLDSERVER
if( pAttacker->IsPlayer() && IsNPC())
{
int nLoop = 1;
BOOL bUnique = FALSE;
D3DXVECTOR3 vPos;
for (int k = 0; k < nLoop; k++) //Making loop to count how many times it should go true the drops.
{
//if(xRandom(100) < GetItemDropRateFactor(pAttacker)) //If random number is lower then GetItemDrop then drop an item else dont do anything.
if(xRandom(100) < 1000)
{
int nSize = lpMoverProp->m_DropItemGenerator.GetSize();
int nNumber = 0;
DROPITEM* lpDropItem;
int i;
for(i = 0; i < nSize; i++) //Looping true all the items in the array m_DropItemGenerator.GetSize()
{
if((lpDropItem = lpMoverProp->m_DropItemGenerator.GetAt(i, bUnique, GetArmorDropRateFactor(pAttacker))) != NULL)
{
if(lpDropItem->dtType == DROPTYPE_ARMOR)
{
DWORD dwNum = lpDropItem->dwNumber;
if (dwNum == (DWORD)-1)
dwNum = 1;
CItemElem* pItemElem = new CItemElem;
pItemElem->m_dwItemId = lpDropItem->dwIndex;
pItemElem->m_nItemNum = (short)(xRandom(dwNum) + 1);
ItemProp* pItemProp = pItemElem->GetProp();
if (pItemProp)
{
pItemElem->m_nHitPoint = pItemProp->dwEndurance;
//pItemElem->SetRandomOpt(CRandomOptItemGen::GetInstance()->GenRandomOptItem(lpMoverProp->dwLevel, /*(FLOAT)nProbability / 100.0f,*/ pItemProp, lpMoverProp->dwClass));
}
pItemElem->SetAbilityOption(lpDropItem->dwLevel);
pItemElem->SetSerialNumber();
CItem* pItem = new CItem;
pItem->m_pItemBase = pItemElem;
BOOL bJJim = TRUE;
if (bJJim)
{
pItem->m_idOwn = pAttacker->GetId(); // ? ???? ??? pAttacker(???)??? ??.
pItem->m_dwDropTime = timeGetTime(); // ?? ????? ??? ???.
}
pItem->m_bDropMob = TRUE; // ?? ??? ?? ?? ??? ??.
if (pItem->m_pItemBase->m_dwItemId == 0) Error("DropItem:2nd %s\n", GetName());
pItem->SetIndex(D3DDEVICE, pItem->m_pItemBase->m_dwItemId);
vPos = GetPos();
vPos.x += (xRandomF(2.0f) - 1.0f);
vPos.z += (xRandomF(2.0f) - 1.0f);
vPos.y = GetPos().y;
pItem->SetPos(vPos);
GetWorld()->ADDOBJ(pItem, TRUE, GetLayer());
if (lpDropItem->dwNumber != (DWORD)-1)
nNumber++;
if (pItemProp->dwItemKind1 == IK1_WEAPON || pItemProp->dwItemKind1 == IK1_ARMOR || (pItemProp->dwItemKind1 == IK1_GENERAL && pItemProp->dwItemKind2 == IK2_JEWELRY))
{
switch (pItemProp->nLog)
{
case 1: g_dpDBClient.SendLogUniqueItem(pAttacker, pItem, pItemElem->GetAbilityOption()); // ?? ??? +???
break;
case 2: g_dpDBClient.SendLogUniqueItem(pAttacker, pItem, 200); // ??? ???
break;
case 3: g_dpDBClient.SendLogUniqueItem(pAttacker, pItem, 100); // ??? ???
break;
}
}
if (nNumber == lpMoverProp->m_DropItemGenerator.m_dwMax)
break;
}
}
}
}
}//End for loop
}
#endif
return TRUE;
}
Inside PropMoverEx i have
DropItem(II_ARM_JST_HELMET_SET_15 ,3000000000, 0, 1);
I have set ArmorDropRate at 9999
Now the problem i am facing is that sometimes it wont drop an item 1 out of 4. And other times its one out of 3 or one out of 5. Its totaly random.
Is there something else i need to check?
With kind regards,
|
|
|
10/16/2016, 15:05
|
#2
|
elite*gold: 0
Join Date: Mar 2008
Posts: 665
Received Thanks: 230
|
int nLoop = 1;
for (int k = 0; k < nLoop; k++)
if(xRandom(100) < 1000)
Here?
|
|
|
10/16/2016, 16:31
|
#3
|
elite*gold: 0
Join Date: Oct 2012
Posts: 948
Received Thanks: 157
|
I wish it was that it would make it simpler.
nLoop just shows how many times it should go true the snippet.
xRandom(100) < 1000) Simply means if the random number 0~100 is lower then 1000 then drop an item. So it always drops an item.
Could it be that it is because of PropDropEvent.inc?
Cause i have some items in there that also should drop.
However it doesnt always drop.
Example
PropMoverEx
DropArmor(II_ARM_JST_HELMET_SET_15 ,3000000000, 0, 1); //According to CDropItemGenerator::GetAt
Inside PropDropEvent.
DropArmor(II_ARM_ELE_BOOTS_SET_32 , -1, 300000000, 1, 130);
Both items should drop 100% however it doesn't
|
|
|
10/16/2016, 19:51
|
#4
|
elite*gold: 0
Join Date: Mar 2008
Posts: 665
Received Thanks: 230
|
Ok, I didn't understand well the first post until this reply.
Check this function DROPITEM* CDropItemGenerator::GetAt(int nIndex, BOOL bUniqueMode, float fProbability)
And this part, if((lpDropItem = lpMoverProp->m_DropItemGenerator.GetAt(i, bUnique, GetArmorDropRateFactor(pAttacker))) != NULL) especially the GetArmorDropRateFactor function output values. I think the 9999 drop rate may be causing some weird values.
|
|
|
10/16/2016, 20:46
|
#5
|
elite*gold: 0
Join Date: Oct 2012
Posts: 948
Received Thanks: 157
|
Thanks i have built in an Error handeling to see if something comes up.
I have removed the items from PropMoverEx.inc so it will only read from PropDropEvent.inc
here is the file
Code:
// DROPLIST ALL DROPS WILL BE LISTED HERE
//
//Propability
//1000000000 = 100%
//100000000 = 10%
//10000000 = 1%
//1000000 = 0.10%
//100000 = 0.01%
//10000 = 0.001%
//1000 = 0.0001%
//100 = 0.00001%
//10 = 0.000001%
//1 = 0.0000001%
//====================== WEAPONS ==================
//NORMAL
//DropNormal(II_WEA_SWO_PETAL,0, 1, 5);
//DropNormal(II_WEA_SWO_BLINK,0, 1, 5);
//DropNormal(II_WEA_SWO_OUTLAW,0, 1, 5);
//DropNormal(II_WEA_SWO_FAIRSLENDER,0, 1, 20);
//DropNormal(II_WEA_SWO_CLIP,0, 1, 20);
//DropNormal(II_WEA_SWO_TAO,0, 1, 20);
//DropNormal(II_WEA_SWO_SEPAL,0, 1, 25);
//DropNormal(II_WEA_SWO_CYLOS,0,1,175);
//====================== ARMOR ==================
DropArmor(II_ARM_VAG_HELMET04 ,-1, 1000000000, 2, 14);
DropArmor(II_ARM_VAG_SUIT04 ,-1, 100000, 2, 14);
DropArmor(II_ARM_VAG_GAUNTLET04 ,-1, 200000, 2, 14);
DropArmor(II_ARM_VAG_BOOTS04 ,-1, 200000, 2, 14);
DropArmor(II_ARM_MER_HELMET_SET_01 ,-1, 200000, 20, 34);
DropArmor(II_ARM_MER_SUIT_SET_01 ,-1, 60000, 20, 34);
DropArmor(II_ARM_MER_GAUNTLET_SET_01 ,-1, 120000, 20, 34);
DropArmor(II_ARM_MER_BOOTS_SET_01 ,-1, 200000, 20, 34);
DropArmor(II_ARM_ACR_HELMET_SET_01 ,-1, 200000, 20, 34);
DropArmor(II_ARM_ACR_SUIT_SET_01 ,-1, 60000, 20, 34);
DropArmor(II_ARM_ACR_GAUNTLET_SET_01 ,-1, 120000, 20, 34);
DropArmor(II_ARM_ACR_BOOTS_SET_01 ,-1, 200000, 20, 34);
DropArmor(II_ARM_ASS_HELMET_SET_01 , -1, 200000, 20, 34);
DropArmor(II_ARM_ASS_SUIT_SET_01 , -1, 60000, 20, 34);
DropArmor(II_ARM_ASS_GAUNTLET_SET_01 , -1, 120000, 20, 34);
DropArmor(II_ARM_ASS_BOOTS_SET_01 , -1, 200000, 20, 34);
DropArmor(II_ARM_MAG_HELMET_SET_01 , -1, 200000, 20, 34);
DropArmor(II_ARM_MAG_SUIT_SET_01 , -1, 60000, 20, 34);
DropArmor(II_ARM_MAG_GAUNTLET_SET_01 , -1, 120000, 20, 34);
DropArmor(II_ARM_MAG_BOOTS_SET_01 , -1, 200000, 20, 34);
DropArmor(II_ARM_MER_HELMET_SET_02 , -1, 200000, 35, 49);
DropArmor(II_ARM_MER_SUIT_SET_02 , -1, 60000, 35, 49);
DropArmor(II_ARM_MER_GAUNTLET_SET_02 , -1, 120000, 35, 49);
DropArmor(II_ARM_MER_BOOTS_SET_02 , -1, 200000, 35, 49);
DropArmor(II_ARM_ACR_HELMET_SET_02 , -1, 200000, 35, 49);
DropArmor(II_ARM_ACR_SUIT_SET_02 , -1, 60000, 35, 49);
DropArmor(II_ARM_ACR_GAUNTLET_SET_02 , -1, 120000, 35, 49);
DropArmor(II_ARM_ACR_BOOTS_SET_02 , -1, 200000, 35, 49);
DropArmor(II_ARM_ASS_HELMET_SET_02 , -1, 200000, 35, 49);
DropArmor(II_ARM_ASS_SUIT_SET_02 , -1, 60000, 35, 49);
DropArmor(II_ARM_ASS_GAUNTLET_SET_02 , -1, 120000, 35, 49);
DropArmor(II_ARM_ASS_BOOTS_SET_02 , -1, 200000, 35, 49);
DropArmor(II_ARM_MAG_HELMET_SET_02 , -1, 200000, 35, 49);
DropArmor(II_ARM_MAG_SUIT_SET_02 , -1, 60000, 35, 49);
DropArmor(II_ARM_MAG_GAUNTLET_SET_02 , -1, 120000, 35, 49);
DropArmor(II_ARM_MAG_BOOTS_SET_02 , -1, 200000, 35, 49);
DropArmor(II_ARM_MER_HELMET_SET_03 , -1, 150000, 50, 64);
DropArmor(II_ARM_MER_SUIT_SET_03 , -1, 50000, 50, 64);
DropArmor(II_ARM_MER_GAUNTLET_SET_03 , -1, 100000, 50, 64);
DropArmor(II_ARM_MER_BOOTS_SET_03 , -1, 150000, 50, 64);
DropArmor(II_ARM_ACR_HELMET_SET_03 , -1, 300000, 50, 64);
DropArmor(II_ARM_ACR_SUIT_SET_03 , -1, 100000, 50, 64);
DropArmor(II_ARM_ACR_GAUNTLET_SET_03 , -1, 200000, 50, 64);
DropArmor(II_ARM_ACR_BOOTS_SET_03 , -1, 300000, 50, 64);
DropArmor(II_ARM_ASS_HELMET_SET_03 , -1, 150000, 50, 64);
DropArmor(II_ARM_ASS_SUIT_SET_03 , -1, 50000, 50, 64);
DropArmor(II_ARM_ASS_GAUNTLET_SET_03 , -1, 100000, 50, 64);
DropArmor(II_ARM_ASS_BOOTS_SET_03 , -1, 150000, 50, 64);
DropArmor(II_ARM_MAG_HELMET_SET_03 , -1, 150000, 50, 64);
DropArmor(II_ARM_MAG_SUIT_SET_03 , -1, 50000, 50, 64);
DropArmor(II_ARM_MAG_GAUNTLET_SET_03 , -1, 100000, 50, 64);
DropArmor(II_ARM_MAG_BOOTS_SET_03 , -1, 150000, 50, 64);
// 60렙 셋템
DropArmor(II_ARM_MER_HELMET_SET_04 , -1, 150000, 65, 79);
DropArmor(II_ARM_MER_SUIT_SET_04 , -1, 50000, 65, 79);
DropArmor(II_ARM_MER_GAUNTLET_SET_04 , -1, 100000, 65, 79);
DropArmor(II_ARM_MER_BOOTS_SET_04 , -1, 150000, 65, 79);
DropArmor(II_ARM_ACR_HELMET_SET_05 , -1, 150000, 65, 79);
DropArmor(II_ARM_ACR_SUIT_SET_05 , -1, 50000, 65, 79);
DropArmor(II_ARM_ACR_GAUNTLET_SET_05 , -1, 100000, 65, 79);
DropArmor(II_ARM_ACR_BOOTS_SET_05 , -1, 150000, 65, 79);
DropArmor(II_ARM_ASS_HELMET_SET_06 , -1, 150000, 65, 79);
DropArmor(II_ARM_ASS_SUIT_SET_06 , -1, 50000, 65, 79);
DropArmor(II_ARM_ASS_GAUNTLET_SET_06 , -1, 100000, 65, 79);
DropArmor(II_ARM_ASS_BOOTS_SET_06 , -1, 150000, 65, 79);
DropArmor(II_ARM_MAG_HELMET_SET_07 , -1, 150000, 65, 79);
DropArmor(II_ARM_MAG_SUIT_SET_07 , -1, 50000, 65, 79);
DropArmor(II_ARM_MAG_GAUNTLET_SET_07 , -1, 100000, 65, 79);
DropArmor(II_ARM_MAG_BOOTS_SET_07 , -1, 150000, 65, 79);
// 75렙 셋템
DropArmor(II_ARM_KIN_HELMET_SET_08 , -1, 100000, 80, 94);
DropArmor(II_ARM_KIN_SUIT_SET_08 , -1, 30000, 80, 94);
DropArmor(II_ARM_KIN_GAUNTLET_SET_08 , -1, 60000, 80, 94);
DropArmor(II_ARM_KIN_BOOTS_SET_08 , -1, 100000, 80, 94);
DropArmor(II_ARM_BLA_HELMET_SET_11 , -1, 100000, 80, 94);
DropArmor(II_ARM_BLA_SUIT_SET_11 , -1, 30000, 80, 94);
DropArmor(II_ARM_BLA_GAUNTLET_SET_11 , -1, 60000, 80, 94);
DropArmor(II_ARM_BLA_BOOTS_SET_11 , -1, 100000, 80, 94);
DropArmor(II_ARM_JST_HELMET_SET_14 , -1, 100000, 80, 94);
DropArmor(II_ARM_JST_SUIT_SET_14 , -1, 30000, 80, 94);
DropArmor(II_ARM_JST_GAUNTLET_SET_14 , -1, 60000, 80, 94);
DropArmor(II_ARM_JST_BOOTS_SET_14 , -1, 100000, 80, 94);
DropArmor(II_ARM_RAG_HELMET_SET_17 , -1, 100000, 80, 94);
DropArmor(II_ARM_RAG_SUIT_SET_17 , -1, 30000, 80, 94);
DropArmor(II_ARM_RAG_GAUNTLET_SET_17 , -1, 60000, 80, 94);
DropArmor(II_ARM_RAG_BOOTS_SET_17 , -1, 100000, 80, 94);
DropArmor(II_ARM_RIN_HELMET_SET_20 , -1, 100000, 80, 94);
DropArmor(II_ARM_RIN_SUIT_SET_20 , -1, 30000, 80, 94);
DropArmor(II_ARM_RIN_GAUNTLET_SET_20 , -1, 60000, 80, 94);
DropArmor(II_ARM_RIN_BOOTS_SET_20 , -1, 100000, 80, 94);
DropArmor(II_ARM_BIL_HELMET_SET_23 , -1, 100000, 80, 94);
DropArmor(II_ARM_BIL_SUIT_SET_23 , -1, 30000, 80, 94);
DropArmor(II_ARM_BIL_GAUNTLET_SET_23 , -1, 60000, 80, 94);
DropArmor(II_ARM_BIL_BOOTS_SET_23 , -1, 100000, 80, 94);
DropArmor(II_ARM_PSY_HELMET_SET_26 , -1, 100000, 80, 94);
DropArmor(II_ARM_PSY_SUIT_SET_26 , -1, 30000, 80, 94);
DropArmor(II_ARM_PSY_GAUNTLET_SET_26 , -1, 60000, 80, 94);
DropArmor(II_ARM_PSY_BOOTS_SET_26 , -1, 100000, 80, 94);
DropArmor(II_ARM_ELE_HELMET_SET_29 , -1, 100000, 80, 94);
DropArmor(II_ARM_ELE_SUIT_SET_29 , -1, 30000, 80, 94);
DropArmor(II_ARM_ELE_GAUNTLET_SET_29 , -1, 60000, 80, 94);
DropArmor(II_ARM_ELE_BOOTS_SET_29 , -1, 100000, 80, 94);
// 90렙 셋템
DropArmor(II_ARM_KIN_HELMET_SET_09 , -1, 60000, 95, 109);
DropArmor(II_ARM_KIN_SUIT_SET_09 , -1, 10000, 95, 109);
DropArmor(II_ARM_KIN_GAUNTLET_SET_09 , -1, 20000, 95, 109);
DropArmor(II_ARM_KIN_BOOTS_SET_09 , -1, 60000, 95, 109);
DropArmor(II_ARM_BLA_HELMET_SET_12 , -1, 60000, 95, 109);
DropArmor(II_ARM_BLA_SUIT_SET_12 , -1, 10000, 95, 109);
DropArmor(II_ARM_BLA_GAUNTLET_SET_12 , -1, 20000, 95, 109);
DropArmor(II_ARM_BLA_BOOTS_SET_12 , -1, 60000, 95, 109);
DropArmor(II_ARM_JST_HELMET_SET_15 , -1, 100000, 95, 109);
DropArmor(II_ARM_JST_SUIT_SET_15 , -1, 30000, 95, 109);
DropArmor(II_ARM_JST_GAUNTLET_SET_15 , -1, 60000, 95, 109);
DropArmor(II_ARM_JST_BOOTS_SET_15 , -1, 100000, 95, 109);
DropArmor(II_ARM_RAG_HELMET_SET_18 , -1, 60000, 95, 109);
DropArmor(II_ARM_RAG_SUIT_SET_18 , -1, 10000, 95, 109);
DropArmor(II_ARM_RAG_GAUNTLET_SET_18 , -1, 20000, 95, 109);
DropArmor(II_ARM_RAG_BOOTS_SET_18 , -1, 60000, 95, 109);
DropArmor(II_ARM_RIN_HELMET_SET_21 , -1, 60000, 95, 109);
DropArmor(II_ARM_RIN_SUIT_SET_21 , -1, 10000, 95, 109);
DropArmor(II_ARM_RIN_GAUNTLET_SET_21 , -1, 20000, 95, 109);
DropArmor(II_ARM_RIN_BOOTS_SET_21 , -1, 60000, 95, 109);
DropArmor(II_ARM_BIL_HELMET_SET_24 , -1, 60000, 95, 109);
DropArmor(II_ARM_BIL_SUIT_SET_24 , -1, 10000, 95, 109);
DropArmor(II_ARM_BIL_GAUNTLET_SET_24 , -1, 20000, 95, 109);
DropArmor(II_ARM_BIL_BOOTS_SET_24 , -1, 60000, 95, 109);
DropArmor(II_ARM_PSY_HELMET_SET_27 , -1, 60000, 95, 109);
DropArmor(II_ARM_PSY_SUIT_SET_27 , -1, 10000, 95, 109);
DropArmor(II_ARM_PSY_GAUNTLET_SET_27 , -1, 20000, 95, 109);
DropArmor(II_ARM_PSY_BOOTS_SET_27 , -1, 60000, 95, 109);
DropArmor(II_ARM_ELE_HELMET_SET_30 , -1, 60000, 95, 109);
DropArmor(II_ARM_ELE_SUIT_SET_30 , -1, 10000, 95, 109);
DropArmor(II_ARM_ELE_GAUNTLET_SET_30 , -1, 20000, 95, 109);
DropArmor(II_ARM_ELE_BOOTS_SET_30 , -1, 60000, 95, 109);
// 105렙 셋템
DropArmor(II_ARM_KIN_HELMET_SET_10 , -1, 30000, 100, 130);
DropArmor(II_ARM_KIN_SUIT_SET_10 , -1, 5000, 100, 130);
DropArmor(II_ARM_KIN_GAUNTLET_SET_10 , -1, 10000, 100, 130);
DropArmor(II_ARM_KIN_BOOTS_SET_10 , -1, 30000, 100, 130);
DropArmor(II_ARM_BLA_HELMET_SET_13 , -1, 30000, 100, 130);
DropArmor(II_ARM_BLA_SUIT_SET_13 , -1, 5000, 100, 130);
DropArmor(II_ARM_BLA_GAUNTLET_SET_13 , -1, 10000, 100, 130);
DropArmor(II_ARM_BLA_BOOTS_SET_13 , -1, 30000, 100, 130);
DropArmor(II_ARM_JST_HELMET_SET_16 , -1, 30000, 100, 130);
DropArmor(II_ARM_JST_SUIT_SET_16 , -1, 5000, 100, 130);
DropArmor(II_ARM_JST_GAUNTLET_SET_16 , -1, 10000, 100, 130);
DropArmor(II_ARM_JST_BOOTS_SET_16 , -1, 30000, 100, 130);
DropArmor(II_ARM_RAG_HELMET_SET_19 , -1, 30000, 100, 130);
DropArmor(II_ARM_RAG_SUIT_SET_19 , -1, 5000, 100, 130);
DropArmor(II_ARM_RAG_GAUNTLET_SET_19 , -1, 10000, 100, 130);
DropArmor(II_ARM_RAG_BOOTS_SET_19 , -1, 30000, 100, 130);
DropArmor(II_ARM_RIN_HELMET_SET_22 , -1, 30000, 100, 130);
DropArmor(II_ARM_RIN_SUIT_SET_22 , -1, 5000, 100, 130);
DropArmor(II_ARM_RIN_GAUNTLET_SET_22 , -1, 10000, 100, 130);
DropArmor(II_ARM_RIN_BOOTS_SET_22 , -1, 30000, 100, 130);
DropArmor(II_ARM_BIL_HELMET_SET_25 , -1, 30000, 100, 130);
DropArmor(II_ARM_BIL_SUIT_SET_25 , -1, 5000, 100, 130);
DropArmor(II_ARM_BIL_GAUNTLET_SET_25 , -1, 10000, 100, 130);
DropArmor(II_ARM_BIL_BOOTS_SET_25 , -1, 30000, 100, 130);
DropArmor(II_ARM_PSY_HELMET_SET_28 , -1, 30000, 100, 130);
DropArmor(II_ARM_PSY_SUIT_SET_28 , -1, 5000, 100, 130);
DropArmor(II_ARM_PSY_GAUNTLET_SET_28 , -1, 10000, 100, 130);
DropArmor(II_ARM_PSY_BOOTS_SET_28 , -1, 30000, 100, 130);
DropArmor(II_ARM_ELE_HELMET_SET_31 , -1, 30000, 100, 130);
DropArmor(II_ARM_ELE_SUIT_SET_31 , -1, 5000, 100, 130);
DropArmor(II_ARM_ELE_GAUNTLET_SET_31 , -1, 10000, 100, 130);
DropArmor(II_ARM_ELE_BOOTS_SET_31 , -1, 30000, 100, 130);
// 105렙 셋템(3차)
DropArmor(II_ARM_KIN_HELMET_SET_32 , -1, 30000, 100, 130);
DropArmor(II_ARM_KIN_SUIT_SET_32 , -1, 5000, 100, 130);
DropArmor(II_ARM_KIN_GAUNTLET_SET_32 , -1, 10000, 100, 130);
DropArmor(II_ARM_KIN_BOOTS_SET_32 , -1, 30000, 100, 130);
DropArmor(II_ARM_BLA_HELMET_SET_32 , -1, 30000, 100, 130);
DropArmor(II_ARM_BLA_SUIT_SET_32 , -1, 5000, 100, 130);
DropArmor(II_ARM_BLA_GAUNTLET_SET_32 , -1, 10000, 100, 130);
DropArmor(II_ARM_BLA_BOOTS_SET_32 , -1, 30000, 100, 130);
DropArmor(II_ARM_JST_HELMET_SET_32 , -1, 30000, 100, 130);
DropArmor(II_ARM_JST_SUIT_SET_32 , -1, 5000, 100, 130);
DropArmor(II_ARM_JST_GAUNTLET_SET_32 , -1, 10000, 100, 130);
DropArmor(II_ARM_JST_BOOTS_SET_32 , -1, 30000, 100, 130);
DropArmor(II_ARM_RAG_HELMET_SET_32 , -1, 30000, 100, 130);
DropArmor(II_ARM_RAG_SUIT_SET_32 , -1, 5000, 100, 130);
DropArmor(II_ARM_RAG_GAUNTLET_SET_32 , -1, 10000, 100, 130);
DropArmor(II_ARM_RAG_BOOTS_SET_32 , -1, 30000, 100, 130);
DropArmor(II_ARM_RIN_HELMET_SET_32 , -1, 30000, 100, 130);
DropArmor(II_ARM_RIN_SUIT_SET_32 , -1, 5000, 100, 130);
DropArmor(II_ARM_RIN_GAUNTLET_SET_32 , -1, 10000, 100, 130);
DropArmor(II_ARM_RIN_BOOTS_SET_32 , -1, 30000, 100, 130);
DropArmor(II_ARM_BIL_HELMET_SET_32 , -1, 30000, 100, 130);
DropArmor(II_ARM_BIL_SUIT_SET_32 , -1, 5000, 100, 130);
DropArmor(II_ARM_BIL_GAUNTLET_SET_32 , -1, 10000, 100, 130);
DropArmor(II_ARM_BIL_BOOTS_SET_32 , -1, 30000, 100, 130);
DropArmor(II_ARM_PSY_HELMET_SET_32 , -1, 30000, 100, 130);
DropArmor(II_ARM_PSY_SUIT_SET_32 , -1, 5000, 100, 130);
DropArmor(II_ARM_PSY_GAUNTLET_SET_32 , -1, 10000, 100, 130);
DropArmor(II_ARM_PSY_BOOTS_SET_32 , -1, 30000, 100, 130);
DropArmor(II_ARM_ELE_HELMET_SET_32 , -1, 30000, 100, 130);
DropArmor(II_ARM_ELE_SUIT_SET_32 , -1, 5000, 100, 130);
DropArmor(II_ARM_ELE_GAUNTLET_SET_32 , -1, 10000, 100, 130);
DropArmor(II_ARM_ELE_BOOTS_SET_32 , 1, 300000000, 1, 130);
DropGold(II_GOLD_SEED1, -1, 100000000,1, 150);
//====================== FOODS AND DRINKS ==================
DropFood(II_GEN_POT_DRI_VITAL100, -1, 100000000, 6, 12); //fp
DropFood(II_GEN_POT_DRI_VITAL200, -1, 70000000, 13, 28);
DropFood(II_GEN_POT_DRI_VITAL300, -1, 70000000, 29, 32);
DropFood(II_GEN_POT_DRI_VITAL400, -1, 70000000, 33, 39);
DropFood(II_GEN_POT_DRI_VITAL500, -1, 70000000, 40, 52);
DropFood(II_GEN_POT_DRI_VITAL600, -1, 70000000, 53, 59);
DropFood(II_GEN_POT_DRI_VITAL700, -1, 70000000, 60, 69);
DropFood(II_GEN_POT_DRI_VITAL800, -1,70000000, 70, 130);
DropFood(II_GEN_REF_REF_FIRST, -1, 300000000, 12, 13); // mp
DropFood(II_GEN_REF_REF_SECOND, -1, 200000000, 14, 18);
DropFood(II_GEN_REF_REF_THIRD, -1, 200000000, 19, 20);
DropFood(II_GEN_REF_REF_FOUTH, -1, 200000000, 21, 24);
DropFood(II_GEN_REF_REF_FIFTH, -1, 200000000, 25, 46);
DropFood(II_GEN_REF_REF_SIXTH, -1, 200000000, 47, 56);
DropFood(II_GEN_REF_REF_SEVENTH, -1, 200000000, 57, 69);
DropFood(II_GEN_REF_REF_EIGHTH, -1, 200000000, 70, 130);
DropFood(II_GEN_FOO_INS_LOLLIPOP, -1, 700000000, 1, 4);
DropFood(II_GEN_FOO_INS_BISCUIT, -1, 500000000, 9, 14);
DropFood(II_GEN_FOO_INS_CHOCOLATE, -1, 500000000, 21, 24);
DropFood(II_GEN_FOO_INS_MILK, -1, 500000000, 31, 34);
DropFood(II_GEN_FOO_INS_BREAD, -1, 500000000, 39, 44);
DropFood(II_GEN_FOO_INS_HOTDOG, -1, 500000000, 51, 56);
DropFood(II_GEN_FOO_INS_HODDUK, -1, 500000000, 63, 66);
DropFood(II_GEN_FOO_COO_MEATSKEWER, -1, 900000000, 5, 8);
DropFood(II_GEN_FOO_COO_BARBECUE, -1, 600000000, 15, 20);
DropFood(II_GEN_FOO_COO_SEAFOODPANCAKE, -1, 600000000, 25, 30);
DropFood(II_GEN_FOO_COO_FISHSOUP, -1, 600000000, 35, 38);
DropFood(II_GEN_FOO_COO_SAUSAGECASSEROLE,-1, 600000000, 45, 50);
DropFood(II_GEN_FOO_COO_FISHSTEW, -1, 600000000, 57, 58);
DropFood(II_GEN_FOO_COO_STEAMEDSEAFOOD, -1, 600000000, 67, 70);
DropFood(II_GEN_FOO_COO_MEATSALAD, -1, 600000000, 71, 130 );
DropFood(II_GEN_FOO_ICE_ORANGEJUIICE, -1, 500000000, 3, 10);
DropFood(II_GEN_FOO_ICE_STRAWBERRYSHAKE, -1, 400000000, 11, 20);
DropFood(II_GEN_FOO_ICE_FRUITJUICE, -1, 400000000, 39, 44);
DropFood(II_GEN_FOO_ICE_FRUITICEWATER, -1, 400000000, 49, 52);
DropFood(II_GEN_FOO_ICE_FRUITPARFAIT, -1, 400000000, 59, 66);
DropFood(II_GEN_FOO_ICE_FRUITSHERBET, -1, 400000000, 67, 70);
DropFood(II_GEN_FOO_ICE_ICECREAMCAKE, -1, 400000000, 71, 130);
//====================== SPECIALS ==================
DropSpecial(II_SYS_SYS_VIS_KEY01, -1, 10000, 40, 120);
Now the error log produces this
Code:
2016/10/16 20:36:16 DropItem 1000000000 DWID 522 ArmorDropRate 0
2016/10/16 20:36:16 DropItem 1000000000 DWID 522 ArmorDropRate 0
2016/10/16 20:36:16 DropItem 100000 DWID 523 ArmorDropRate 0
2016/10/16 20:36:16 DropItem 200000 DWID 524 ArmorDropRate 0
2016/10/16 20:36:16 DropItem 200000 DWID 525 ArmorDropRate 0
2016/10/16 20:36:16 DropItem 300000000 DWID 22349 ArmorDropRate 0
2016/10/16 20:36:16 DropItem 700000000 DWID 2800 ArmorDropRate 0
2016/10/16 20:36:16 DropItem 500000000 DWID 2816 ArmorDropRate 0
522 is VAG_HELMET04 523 524 525 are SUIT Gaunt and boots
22349 = II_ARM_ELE_BOOTS_SET_32
Now it also puts out PropFood dwItemID are 2800 for lolipop and 2816 for OrangeJuice.
So instead of going down true all items it just randomly selects the items inside that list.
Now the 0 is the fProbability.
I have scipted it like this
Code:
DROPITEM* CDropItemGenerator::GetAt( int nIndex, BOOL bUniqueMode, float fProbability )
{
//ASSERT( nIndex < m_dwSize );
ASSERT( nIndex < (int)GetSize() );
if( fProbability > 0.0f )
{
DROPITEM* lpDropItem = &m_dropItems[ nIndex ];
DWORD dwProbability = lpDropItem->dwProbability;
DWORD dwRand = xRandom( 3000000000 );
#if __VER >= 9 && defined(__WORLDSERVER) // __EVENTLUA, __WORLDSERVER
dwRand = static_cast<DWORD>(dwRand / fProbability );
#endif // __EVENTLUA && __WORLDSERVER
Error("DropItem %d DWID %d ArmorDropRate %d", lpDropItem->dwProbability, lpDropItem->dwIndex, fProbability);
return( dwRand < dwProbability? lpDropItem: NULL );
}
else
{
return &m_dropItems[ nIndex ];
}
}
All in all it seems that the fProbability is 0
Am i missing somewhat or do i read it wrong?
|
|
|
10/17/2016, 08:40
|
#6
|
elite*gold: 0
Join Date: Mar 2008
Posts: 665
Received Thanks: 230
|
There is something which doesn't make sense there. Check the fProbability value as float, it has to be 0.X because of if( fProbability > 0.0f ). And check this function GetArmorDropRateFactor() output values too. The probability number comes from there and should return a bigger value.
I did a quick rewrite that might help you
PHP Code:
DROPITEM* CDropItemGenerator::GetAt(int nIndex, BOOL bUniqueMode, float fProbability)
{
//ASSERT( nIndex < m_dwSize );
ASSERT(nIndex < (int)GetSize());
if (fProbability == 0)
fProbability = 1;
DWORD dwRand = xRandom(0, 1000000000);
DWORD dwProbability = static_cast<DWORD>(m_dropItems[nIndex].dwProbability * fProbability);
if (dwRand < dwProbability)
return &m_dropItems[nIndex];
return nullptr;
}
|
|
|
10/17/2016, 09:32
|
#7
|
elite*gold: 0
Join Date: Oct 2012
Posts: 948
Received Thanks: 157
|
Thank you Alfredico.
The problem above is solved.
The dwProbability did sometimes returns an Negative number cause i had forgotten an piece of code
EventLua.cpp
void CEventLuaProxy::Initialize( CEventLua* pEventLua )
SetArmorDropRate( pEventLua->GetArmorDropRate(FALSE));
Because i forgot to add that one it didnt make any sence.
So that is one problem solved.
Now here is an other one.
maybe you can shed some light on it.
in the script propDropEvent.inc i have all the drops.
However the problem is its always only returning 1 drop.
For example
i have 4 drops
Code:
DropArmor(II_ARM_VAG_HELMET04 ,-1, 100000, 2, 14);
DropArmor(II_ARM_VAG_SUIT04 ,-1, 100000, 2, 14);
DropArmor(II_ARM_VAG_GAUNTLET04 ,-1, 200000, 2, 14);
DropArmor(II_ARM_VAG_BOOTS04 ,-1, 200000, 2, 14);
it only returns the first one.
If i set nLoop on 10 it will drop only 10 pieces of Helmets
If i set the MaxItem inside PropMoverEx it doenst help at all.
From what i have reading is that PropDropEvent holds all items that can drop at an certain level.
|
|
|
10/17/2016, 09:50
|
#8
|
elite*gold: 0
Join Date: Mar 2008
Posts: 333
Received Thanks: 284
|
That's how the Flyff Drop system works. The rate of the first item is so high that it'll always drop and the others aren't even looked at. Lower the drop rate of the first one and you'll probably get the second one too
|
|
|
10/17/2016, 09:56
|
#9
|
elite*gold: 0
Join Date: Mar 2008
Posts: 665
Received Thanks: 230
|
Again check the values and check the m_dropItems vector contains that items. Your version for loading drops is sightly modified from the original so I couldn't tell if there is something wrong there, but check it too.
Drops usually got bugged because of high rates and causes exactly same bug as you have.
|
|
|
10/17/2016, 10:56
|
#10
|
elite*gold: 0
Join Date: Oct 2012
Posts: 948
Received Thanks: 157
|
Yes i noticed it.
I have lowered the rates. Cause indeed 9999 was only for testing.
i have set it on 200.
Now its dropping sometimes. an random piece between the level 2,14.
So its indeed bugged if you do uber high rates.
Thank you verry much for helping.
P.s. Its strange that flyff uses so much wierd mechanics.
|
|
|
10/17/2016, 11:07
|
#11
|
elite*gold: 0
Join Date: Mar 2008
Posts: 665
Received Thanks: 230
|
It's not weird mechanics, I think it's an overflow although I haven't tested.
The probability is stored in float and 100% of drop chance is 3.000.000.000 = 3b so once you increase with a big rate like x9999 in your case we get this number 29.997.000.000.000
And you know, at this point **** happens when calculating with low numbers.
|
|
|
All times are GMT +1. The time now is 22:23.
|
|