//00555150	-> 100%
int CTemporaryUserManager::ClearOverTimeUserData(int Second)	//OK
{
	DWORD dwCurrentTickCount = GetTickCount();
	// ----
	for( int i = 0; i < MAX_TEMP_SLOT; i++ )
	{
		if( !this->m_UserData[i].UserIndex )
		{
			continue;
		}
		// ----
		if( dwCurrentTickCount - this->m_UserData[i].Tick <= 1000 * Second )
		{
			continue;
		}
		// ----
		int PartyNumber = this->m_UserData[i].PartyNumber;
		// ----
		if( OBJMAX_RANGE(PartyNumber) )
		{
			if( CheckInEventMap(i)		== TEMP_NONE 
				|| CheckInEventMap(i)	== TEMP_BLOODCASTLE 
				|| CheckInEventMap(i)	== TEMP_DEVILSQUARE )
			{
				gParty.Delete(PartyNumber, m_UserData[i].UserIndex, gObj[m_UserData[i].UserIndex].DBNumber);
				gParty.UpdatePKPartyPanalty(PartyNumber);
				CGPartyListAll(PartyNumber);
				// ----
				if( gParty.GetCount(PartyNumber) >= 2 )
				{
					continue;
				}
				// ----
				for( int n = 0; n < MAX_USER_IN_PARTY; n++ )
				{
					int number = gParty.m_PartyS[PartyNumber].Number[n];
					// ----
					if( number >= 0 )
					{
						gParty.Delete(PartyNumber, n);
						gObj[number].PartyNumber		= -1;
						gObj[number].PartyTargetUser	= -1;
						GCPartyDelUserSend(number);
					}
				}
				// ----
				gParty.Destroy(PartyNumber);
			}
			// ----
			TidyUpTempuserdate(i);
		}
		else
		{
			TidyUpTempuserdate(i);
		}
	}
	// ----
	return true;
}
//005554b0	-> 100%
void CTemporaryUserManager::DeleteUserInParty(int SlotIndex)	//Need connect with DS, good
{
	if( !IS_TEMP_SLOT(SlotIndex) )
	{
		return;
	}	
	// ----
    int nPartyNumber = this->m_UserData[SlotIndex].PartyNumber;
	// ----
    if( !OBJMAX_RANGE(nPartyNumber) )
    {
		return;
	}
	// ----
	gParty.Delete(nPartyNumber, m_UserData[SlotIndex].UserIndex, gObj[m_UserData[SlotIndex].UserIndex].DBNumber);
	gParty.UpdatePKPartyPanalty(nPartyNumber);
	// ----
    CGPartyListAll(nPartyNumber);
	// ----
    if( gParty.GetCount(nPartyNumber) >= 2 )
    {
		return;
	}
	// ----
	for( int n = 0; n < 5; n++ )
	{
		int number = gParty.m_PartyS[nPartyNumber].Number[n];
		// ----
		if( number >= 0 )
		{
			gParty.Delete(nPartyNumber, n);
			gObj[number].PartyNumber		= -1;
			gObj[number].PartyTargetUser	= -1;
			GCPartyDelUserSend(number);
		}
	}
	// ----
	gParty.Destroy(nPartyNumber);
    TidyUpTempuserdate(SlotIndex);
}
// ------------------------------------------------------------------------------------------------------------------------------------------------------
void CGPartyDelUser(PMSG_PARTYDELUSER * lpMsg, int aIndex)
{
	int usernumber = -1;
	int dbnumber = -1;

	if( gObj[aIndex].PartyNumber < 0 )
	{
		CLog.LogAdd("No Party %s %s", gObj[aIndex].AccountID, gObj[aIndex].Name);
		return;
	}

	if( !gParty.GetIndexUser(gObj[aIndex].PartyNumber, lpMsg->Number, usernumber, dbnumber))
	{
		CLog.LogAdd("User Not found");
		return;
	}

	if( usernumber < 0 )
	{
		CLog.LogAdd("User Not found");
		return;
	}

	int count;
	int number;
	int pnumber = gObj[aIndex].PartyNumber;

	if( pnumber < 0 )
	{
		CLog.LogAdd("%s %d", __FILE__, __LINE__);
		return;
	}

	count = gParty.GetCount(pnumber);

	if( count < 1 )
	{
		CLog.LogAdd("%s %d", __FILE__, __LINE__);
		return;
	}

	if( lpMsg->Number == 0 || count <= 2 )
	{
		for ( int n=0;n<MAX_USER_IN_PARTY;n++)
		{
			number = gParty.m_PartyInfo[pnumber].Number[n];

			if( number >= 0 )
			{
				gParty.DelMember(pnumber, n);
				gObj[number].PartyNumber = -1;
				gObj[number].PartyTargetUser = -1;
				GCPartyDelUserSend(number);
			}
		}

		gParty.Destroy(pnumber);
	}
	else
	{
		gParty.DelMember(pnumber, lpMsg->Number);
		count = gParty.GetCount(gObj[aIndex].PartyNumber);
		gObj[usernumber].PartyNumber = -1;
		gObj[usernumber].PartyTargetUser = -1;
		GCPartyDelUserSend(usernumber);
		CGPartyListAll(pnumber);
	}		
}