// ----------------------------------------------------------------------------------------
void CDoubleGoer::ChestDrop(int aIndex, unsigned char Type, unsigned char Map, unsigned char X, unsigned char Y)
{
	LPOBJ lpObj = &gObj[aIndex];

	int RandomItem;
	int Item;
	unsigned char Skill;
	unsigned char Luck;
	unsigned char Opt;
	unsigned char Level;
	unsigned char Dur;
	unsigned char Exe;
	unsigned char Anc;
	unsigned char Socket[5];
	
	Socket[0] = 0xFF;
	Socket[1] = 0xFF;
	Socket[2] = 0xFF;
	Socket[3] = 0xFF;
	Socket[4] = 0xFF;
	Skill = 0;
	Luck = 0;
	Opt = 0;
	Level = 0;
	Dur = 0;
	Exe = 0;
	Anc = 0;
	Item = 0;

	RandomItem = rand()%gDoubleGoer.ItemCount[Type];

	Item = ITEMGET(gDoubleGoer.Type[Type][RandomItem],gDoubleGoer.Index[Type][RandomItem]);

	if ( rand()%1000 < 50 )
	{
		Skill = gDoubleGoer.Skill[Type][RandomItem];
	}

	if ( rand()%1000 < 50 )
	{
		Luck = gDoubleGoer.Luck[Type][RandomItem];
	}

	if ( rand()%1000 < 50 )
	{
		if ( gDoubleGoer.Level[Type][RandomItem] > 0 )
		{
			Level = rand()%(gDoubleGoer.Level[Type][RandomItem]+1);
		}
		else
		{
			Level = 0;
		}
	}

	if ( rand()%1000 < 50 )
	{
		if ( gDoubleGoer.Opt[Type][RandomItem] > 0 )
		{
			Opt = rand()%(gDoubleGoer.Opt[Type][RandomItem]+1);
		}
		else
		{
			Opt = 0;
		}
	}

	if ( rand()%1000 < 50 )
	{
		Exe = GetRandomExeOption(gDoubleGoer.Exe[Type][RandomItem]+1);
	}

	if ( rand()%1000 < 10 )
	{
		if ( gDoubleGoer.Anc[Type][RandomItem] == 5 || gDoubleGoer.Anc[Type][RandomItem] == 10 )
		{
			Anc = gDoubleGoer.Anc[Type][RandomItem];
		}
		else
		{
			Anc = 0;
		}
	}
	if ( rand()%1000 < 50 )
	{
		Socket[0] = gDoubleGoer.Socket[0][Type][RandomItem];

		if ( rand()%1000 < 50 )
		{
			Socket[1] = gDoubleGoer.Socket[1][Type][RandomItem];

			if ( rand()%1000 < 50 )
			{
				Socket[2] = gDoubleGoer.Socket[2][Type][RandomItem];

				if ( rand()%1000 < 50 )
				{
					Socket[3] = gDoubleGoer.Socket[3][Type][RandomItem];

					if ( rand()%1000 < 50 )
					{
						Socket[4] = gDoubleGoer.Socket[4][Type][RandomItem];
					}
				}
			}
		}
	}

	ItemSerialCreateSend(aIndex,Map,X,Y,Item,Level,Dur,Luck,Skill,Opt,aIndex,Exe,Anc,Socket);

}
bool CItemDropManager::ProccessItemDrop(LPOBJ lpMobObj)
{
	unsigned char Map = lpMobObj->MapNumber;
	unsigned char X = lpMobObj->X;
	unsigned char Y = lpMobObj->Y;
	int Type = 0;
	char Level = 0;
	unsigned char Dur = 0;
	char Luck = 0;
	char Skill = 0;
	char Opt = 0;
	char Exe = 0;
	char Anc = 0;
	unsigned char Socket[5];
	Socket[0] = 0xFF;
	Socket[1] = 0xFF;
	Socket[2] = 0xFF;
	Socket[3] = 0xFF;
	Socket[4] = 0xFF;

	if ( gItemDropManager.ItemsCount > 0 )
	{
		int iTopHitUser = gObjMonsterTopHitDamageUser(lpMobObj);

		for (int i=0;i<gItemDropManager.ItemsCount;++i)
		{
			if ( lpMobObj->MapNumber == gItemDropManager.DropMap[i] || gItemDropManager.DropMap[i] == -1 )
			{
				if ( lpMobObj->Level >= gItemDropManager.MobMinLvl[i] && lpMobObj->Level <= gItemDropManager.MobMaxLvl[i] )
				{
					if ( (rand()%10000) < gItemDropManager.DropRate[i] )
					{
						Type = ItemGetNumberMake(gItemDropManager.ItemType[i],gItemDropManager.ItemIndex[i]);

						Level = gItemDropManager.ItemLevel[i];
						Dur = gItemDropManager.ItemDur[i];
						Luck = gItemDropManager.ItemLuck[i];
						Skill = gItemDropManager.ItemSkill[i];
						Opt = gItemDropManager.ItemOption[i];
						if ( gItemDropManager.ItemExe[i] > 0 )
						{
							Exe = GetRandomExeOption(gItemDropManager.ItemExe[i]+1);
						}
						if ( gItemDropManager.ItemAncient[i] == 5 || gItemDropManager.ItemAncient[i] == 10 )
						{
							Anc = gItemDropManager.ItemAncient[i];
						}
						if ( gItemDropManager.Socket[0][i] != 255 )
						{
							Socket[0] = gItemDropManager.Socket[0][i];

							if ( gItemDropManager.Socket[1][i] != 255 )
							{
								Socket[1] = gItemDropManager.Socket[1][i];

								if ( gItemDropManager.Socket[2][i] != 255 )
								{
									Socket[2] = gItemDropManager.Socket[2][i];

									if ( gItemDropManager.Socket[3][i] != 255 )
									{
										Socket[3] = gItemDropManager.Socket[3][i];

										if ( gItemDropManager.Socket[4][i] != 255 )
										{
											Socket[4] = gItemDropManager.Socket[4][i];
										}
									}
								}
							}
						}

						ItemSerialCreateSend(lpMobObj->m_Index,Map,X,Y,Type,Level,Dur,Skill,Luck,Opt,iTopHitUser,Exe,Anc,Socket);
						return true;
					}
				}
			}
		}
	}
	return false;
}