コード例 #1
0
ファイル: SProtocol.cpp プロジェクト: AkiraJue/OpenMuS9
void JGAnsMapSvrAuth(PMSG_ANS_MAPSVRAUTH * lpMsg)
{
	if ( !OBJMAX_RANGE(lpMsg->iIndex))
	{
		LogAddC(2, "[MapServerMng] Packet Error JG [0x7B] - Index out of bound : %d",
			lpMsg->iIndex);
		
		return;
	}

	LPOBJ lpObj = &gObj[lpMsg->iIndex];
	memcpy(lpObj->Name, lpMsg->szCharName, MAX_ACCOUNT_LEN);


	if ( lpObj->m_bMapSvrMoveReq == false )
	{
		LogAddC(2, "[MapServerMng] MapSvr MoveReq Error JG [0x7B] - No Request [%s] (%d)",
			lpObj->AccountID, lpObj->m_Index);

		gObjDel(lpMsg->iIndex);
		return;
	}

	BOOL bAuthOK = FALSE;
	int iSendResult = 0;
	char szId[11];
	char szJN[21] = "";
	int iIndex = lpMsg->iIndex;
	SDHP_DBCHARINFOREQUEST pMsg;
	char szName[11];

	memset(szId, 0, sizeof(szId));
	memcpy(szId, lpMsg->szAccountID, MAX_ACCOUNT_LEN);
	memcpy(szJN, lpMsg->cJoominNumber, sizeof(lpMsg->cJoominNumber));
	
	switch ( lpMsg->iResult )
	{
		case 0:
			iSendResult = 0;
			bAuthOK = FALSE;

			if ( !gObjSetAccountLogin(iIndex, szId, lpMsg->iUserNumber, lpMsg->iDBNumber, szJN))
			{
				GJPAccountFail(iIndex, szId, lpMsg->iDBNumber, lpMsg->iUserNumber);
				lpMsg->iResult = 4;
			}
			else
			{
				LogAddTD(lMsg.Get(MSGGET(1, 211)), gObj[iIndex].Ip_addr, szId, lpMsg->iUserNumber, lpMsg->iDBNumber);
				iSendResult = 1;
				bAuthOK = TRUE;
			}

			if ( lpMsg->iUserNumber == 0 && lpMsg->iDBNumber == 0 )
			{
				LogAddTD(lMsg.Get(MSGGET(1, 212)), szId, lpMsg->iUserNumber, lpMsg->iDBNumber);
			}

			switch ( lpMsg->btBlockCode )
			{
				case 70:	// 0x46
					gObj[iIndex].m_cAccountItemBlock = 1;
					break;
			}
			break;

		default:
			iSendResult = 0;
			bAuthOK = FALSE;
			break;
	}

	GCAnsMapSvrAuth(iIndex, iSendResult);

	if ( bAuthOK == FALSE )
	{
		LogAddC(2, "[MapServerMng] [%s][%s] JG [0x7B] - Join Result Failed : RST:%d, BLK:%c",
			szId, lpMsg->szCharName, lpMsg->iResult, lpMsg->btBlockCode);
		gObjDel(lpMsg->iIndex);

		return;
	}
	
	gObj[iIndex].m_sPrevMapSvrCode = lpMsg->wPrevMapSvrCode;
	gObj[iIndex].m_sDestMapNumber  = lpMsg->wMapNumber;
	gObj[iIndex].m_btDestX = lpMsg->btX;
	gObj[iIndex].m_btDestY = lpMsg->btY;
	gObj[iIndex].bEnableDelCharacter = FALSE;

#if (ENABLETEST_ARCA == 1)
	if( g_ArcaBattle.IsArcaBattleServer() )
    {
          g_ArcaBattle.SendArcaBattlePlayInfo(gObj[iIndex], 1);
          g_ArcaBattle.SendArcaBattleCurrentState(gObj[iIndex]);
    }
#endif

	PHeadSetB((LPBYTE)&pMsg, 0x06, sizeof(pMsg));
	memset(szName, 0, sizeof(szName));
	memcpy(szName, lpMsg->szCharName, MAX_ACCOUNT_LEN);
	BuxConvert(szName, MAX_ACCOUNT_LEN);
	memcpy(pMsg.Name, szName, MAX_ACCOUNT_LEN);
	strcpy(pMsg.AccountID, lpMsg->szAccountID);
	pMsg.Number = lpObj->m_Index;

	cDBSMng.Send((PCHAR)&pMsg, pMsg.h.size);

	LogAddTD("[MapServerMng] [%s][%s] JG [0x7B] - Join Result OK : RST:%d, BLK:%c",
		szId, lpMsg->szCharName, lpMsg->iResult, lpMsg->btBlockCode);

}
コード例 #2
0
ファイル: SProtocol.cpp プロジェクト: gustavobm/p4f-free-emu
void JGAnsMapSvrAuth(PMSG_ANS_MAPSVRAUTH * lpMsg)
{
    if ( !OBJMAX_RANGE(lpMsg->iIndex))
    {
        LogAdd( "[MapServerMng] Packet Error JG [0x7B] - Index out of bound : %d",
                lpMsg->iIndex);

        return;
    }

    LPOBJ lpObj = &gObj[lpMsg->iIndex];
    memcpy(lpObj->Name, lpMsg->szCharName, MAX_ACCOUNT_LEN);


    if ( lpObj->m_bMapSvrMoveReq == false )
    {
        LogAdd( "[MapServerMng] MapSvr MoveReq Error JG [0x7B] - No Request [%s] (%d)",
                lpObj->AccountID, lpObj->m_Index);

        gObjDel(lpMsg->iIndex);
        return;
    }

    BOOL bAuthOK = FALSE;
    int iSendResult = 0;
    char szId[11];
    char szJN[14] = "";
    int iIndex = lpMsg->iIndex;
    SDHP_DBCHARINFOREQUEST pMsg;
    char szName[11];

    memset(szId, 0, sizeof(szId));
    memcpy(szId, lpMsg->szAccountID, MAX_ACCOUNT_LEN);
    memcpy(szJN, lpMsg->cJoominNumber, sizeof(lpMsg->cJoominNumber));

    switch ( lpMsg->iResult )
    {
    case 0:
        iSendResult = 0;
        bAuthOK = FALSE;

        if ( !gObjSetAccountLogin(iIndex, szId, lpMsg->iUserNumber, lpMsg->iDBNumber, szJN))
        {
            GJPAccountFail(iIndex, szId, lpMsg->iDBNumber, lpMsg->iUserNumber);
            lpMsg->iResult = 4;
        }
        else
        {
            LogAdd("***0467*** login     : (%s)[%s] number:%d/ db:%d", gObj[iIndex].Ip_addr, szId, lpMsg->iUserNumber, lpMsg->iDBNumber);
            iSendResult = 1;
            bAuthOK = TRUE;
        }

        if ( lpMsg->iUserNumber == 0 && lpMsg->iDBNumber == 0 )
        {
            LogAdd("Both user number and DB number are 0 (%s) %d %d", szId, lpMsg->iUserNumber, lpMsg->iDBNumber);
        }

        switch ( lpMsg->btBlockCode )
        {
        case 70:	// 0x46
            gObj[iIndex].m_cAccountItemBlock = 1;
            break;
        }
        break;

    default:
        iSendResult = 0;
        bAuthOK = FALSE;
        break;
    }

    GCAnsMapSvrAuth(iIndex, iSendResult);

    if ( bAuthOK == FALSE )
    {
        LogAdd( "[MapServerMng] [%s][%s] JG [0x7B] - Join Result Failed : RST:%d, BLK:%c",
                szId, lpMsg->szCharName, lpMsg->iResult, lpMsg->btBlockCode);
        gObjDel(lpMsg->iIndex);

        return;
    }

    gObj[iIndex].m_sPrevMapSvrCode = lpMsg->wPrevMapSvrCode;
    gObj[iIndex].m_sDestMapNumber  = lpMsg->wMapNumber;
    gObj[iIndex].m_btDestX = lpMsg->btX;
    gObj[iIndex].m_btDestY = lpMsg->btY;
    gObj[iIndex].bEnableDelCharacter = FALSE;

    PHeadSetB((LPBYTE)&pMsg, 0x06, sizeof(pMsg));
    memset(szName, 0, sizeof(szName));
    memcpy(szName, lpMsg->szCharName, MAX_ACCOUNT_LEN);
    BuxConvert(szName, MAX_ACCOUNT_LEN);
    memcpy(pMsg.Name, szName, MAX_ACCOUNT_LEN);
    strcpy_s(pMsg.AccountID, sizeof(pMsg.AccountID), lpMsg->szAccountID);
    pMsg.Number = lpObj->m_Index;

    wsDataServerCli.DataSend((PCHAR)&pMsg, pMsg.h.size);

    LogAdd("[MapServerMng] [%s][%s] JG [0x7B] - Join Result OK : RST:%d, BLK:%c",
           szId, lpMsg->szCharName, lpMsg->iResult, lpMsg->btBlockCode);

}
コード例 #3
0
ファイル: SProtocol.cpp プロジェクト: AkiraJue/OpenMuS9
void JGPAccountRequest(SDHP_IDPASSRESULT * lpMsg)
{
	char szId[11];
	int aIndex;
	char szJN[20]="";
	
	memset(szId, 0, sizeof(szId));
	memcpy(szId, lpMsg->Id , sizeof(lpMsg->Id));
	memcpy(szJN, lpMsg->JoominNumber , sizeof(lpMsg->JoominNumber));

	aIndex = lpMsg->Number ;

	switch ( lpMsg->result  )
	{
		case 1:
		case 15:
			if (gObjSetAccountLogin(aIndex, szId, lpMsg->UserNumber , lpMsg->DBNumber, szJN ) == 0 )
			{
				GJPAccountFail(aIndex, szId, lpMsg->DBNumber , lpMsg->UserNumber  );
				lpMsg->result  = 4;
			}
			else
			{	
				LogAddTD(lMsg.Get(MSGGET(1, 211)), gObj[aIndex].Ip_addr, szId, lpMsg->UserNumber , lpMsg->DBNumber );
			}

			if ( lpMsg->UserNumber  == 0 && lpMsg->DBNumber  == 0)
			{
				LogAddTD(lMsg.Get(MSGGET(1, 212)), szId, lpMsg->UserNumber , lpMsg->DBNumber );
			}
	}
#if (ENABLE_CUSTOM_OFFLINETRADE==1)

	if( lpMsg->result == 6 )
	{
		for (int n=OBJ_STARTUSERINDEX;n<OBJMAX; n++)
		{
			if ( gObj[n].Connected >= PLAYER_PLAYING)
			{
				if ( gObj[n].AccountID[0] == *szId )
				{
					if ( strcmp(&gObj[n].AccountID[0] , szId) == 0)
					{
						if( gObj[n].bOffTrade )
						{
							gObjDel(n);
						}
						break;
					}
				}
			}
		}

		lpMsg->result = 3;
	}
#else

	if( lpMsg->result == 6 )
		lpMsg->result = 3;

#endif

	if ( lpMsg->result == 0 )
		lpMsg->result = 2;

	if ( lpMsg->result  == 15 )
	{
		lpMsg->result  = 1;
		gObj[aIndex].m_cAccountItemBlock = 1;
	}
	
	gObj[aIndex].LoginMsgSnd = 0;

	if (gObj[aIndex].LoginMsgCount >= 3 )
	{
		lpMsg->result = 8;
	}

	GCJoinResult(lpMsg->result , aIndex);

	if ( lpMsg->result  != 1 )
	{
		if ( gObj[aIndex].LoginMsgCount > 3 )
		{
			CloseClient(aIndex);
		}
	}
}
コード例 #4
0
ファイル: SProtocol.cpp プロジェクト: gustavobm/p4f-free-emu
void JGPAccountRequest(SDHP_IDPASSRESULT * lpMsg)
{
    char szId[11];
    int aIndex;
    char szJN[14]="";

    memset(szId, 0, sizeof(szId));
    memcpy(szId, lpMsg->Id , sizeof(lpMsg->Id));
    memcpy(szJN, lpMsg->JoominNumber , sizeof(lpMsg->JoominNumber));

    aIndex = lpMsg->Number ;

    if ( lpMsg->result  == 1 || lpMsg->result  == 15 )
    {
        if ( gNonPK == 0 && gLanguage == 0 )
        {
            if (gJoomin15Check(szJN) == 0 )
            {
                GJPAccountFail(aIndex, szId, lpMsg->DBNumber , lpMsg->UserNumber );
                lpMsg->result  = 17;
            }
        }

        if ( gPkLimitFree == 1 && gLanguage == 0 )
        {
            if (gJoominCheck(szJN, 18) == 0 )
            {
                GJPAccountFail(aIndex, szId, lpMsg->DBNumber , lpMsg->UserNumber );
                lpMsg->result  = 17;
            }
        }
    }

    switch ( lpMsg->result  )
    {
    case 1:
    case 15:
        if (gObjSetAccountLogin(aIndex, szId, lpMsg->UserNumber , lpMsg->DBNumber, szJN ) == 0 )
        {
            GJPAccountFail(aIndex, szId, lpMsg->DBNumber , lpMsg->UserNumber  );
            lpMsg->result  = 4;
        }
        else
        {
            LogAdd("***0467*** login     : (%s)[%s] number:%d/ db:%d", gObj[aIndex].Ip_addr, szId, lpMsg->UserNumber , lpMsg->DBNumber );
        }

        if ( lpMsg->UserNumber  == 0 && lpMsg->DBNumber  == 0)
        {
            LogAdd("Both user number and DB number are 0 (%s) %d %d", szId, lpMsg->UserNumber , lpMsg->DBNumber );
        }
    }

    if ( lpMsg->result == 0 )
        lpMsg->result = 2;

    if ( lpMsg->result  == 15 )
    {
        lpMsg->result  = 1;
        gObj[aIndex].m_cAccountItemBlock = 1;
    }

    gObj[aIndex].LoginMsgSnd = 0;

    if (gObj[aIndex].LoginMsgCount >= 3 )
    {
        lpMsg->result = 8;
    }

    GCJoinResult(lpMsg->result , aIndex);

    if ( lpMsg->result  != 1 )
    {
        if ( gObj[aIndex].LoginMsgCount > 3 )
        {
            CloseClient(aIndex);
        }
    }
}