Register for your free account! | Forgot your password?

Go Back   elitepvpers > MMORPGs > Flyff > Flyff Private Server
You last visited: Today at 22:22

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



Flyff Drop System!

Discussion on Flyff Drop System! within the Flyff Private Server forum part of the Flyff category.

Reply
 
Old   #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,
raventh1984 is offline  
Old 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?
alfredico is offline  
Old 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
raventh1984 is offline  
Old 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.
alfredico is offline  
Old 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?
raventh1984 is offline  
Old 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:
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;

alfredico is offline  
Old 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.
raventh1984 is offline  
Old 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
Nortix is offline  
Old 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.
alfredico is offline  
Thanks
1 User
Old 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.
raventh1984 is offline  
Old 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.
alfredico is offline  
Reply


Similar Threads Similar Threads
LastRoad l Cap80 l Ch Only l Free Silk l Drop System l OldSchool l Events System
02/22/2016 - SRO PServer Advertising - 94 Replies
http://i.epvpimg.com/fMBhh.gif ### WILL BE ONLINE 24.02.2016 / (18:00 GMT+2) ###



All times are GMT +1. The time now is 22:23.


Powered by vBulletin®
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2026 elitepvpers All Rights Reserved.