Flyff Drop System!

10/16/2016 14:41 raventh1984#1
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 alfredico#2
int nLoop = 1;
for (int k = 0; k < nLoop; k++)
if(xRandom(100) < 1000)

Here?
10/16/2016 16:31 raventh1984#3
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 alfredico#4
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 raventh1984#5
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 alfredico#6
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:
DROPITEMCDropItemGenerator::GetAt(int nIndexBOOL bUniqueModefloat fProbability)
{
    
//ASSERT( nIndex < m_dwSize );
    
ASSERT(nIndex < (int)GetSize());

    if (
fProbability == 0)
        
fProbability 1;

    
DWORD dwRand xRandom(01000000000);
    
DWORD dwProbability static_cast<DWORD>(m_dropItems[nIndex].dwProbability fProbability);
    if (
dwRand dwProbability)
        return &
m_dropItems[nIndex];
    return 
nullptr;

10/17/2016 09:32 raventh1984#7
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 Nortix#8
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 alfredico#9
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 raventh1984#10
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 alfredico#11
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 shit happens when calculating with low numbers.