V17 Char Selection

Joined
Oct 14, 2011
Messages
1,274
Reaction score
122
Edit:

Here's a realeased of a good friend, so I just want to share it in our community that maybe people will love/like it to use in their server/s. I just translated it from German to English so sorry/apologize if there's something wrong about my translation with it.

Translated Quote (English):
Yes, hallucinations. :)

I release once the V17 Char select, why? as beautiful as the old one;>

Of course, here again which will say "C & Titrosampler" blah, my latte.

Ansich there is not much work, but I'd advise you to build it on the server, who call themselves Full V17 +, because you're not.

To my knowledge it is not yet Released and it has not yet been any server, so the thread is here.

What do you need?

- FlyFF Source
- Min. v17 ResData
- Brain (Although I assume if you do read the thread that you have one)

Let's get started!

Opens the source Neuz (Only Neuz!) And examined the file "WndTitle.cpp" in the interface /WndTitle /This file is in there, then it also opens the header file to "WndTitle.h".

In WndTitle.cpp you seek the following:

Code:
 :: CWndSelectChar CWndSelectChar ()

Addet is this:

Code:
 # if __ VER> = 17
    m_bFlash = TRUE;
    m_nFlashAlpha = 0;
    m_nChars = 0;
# Endif

Then you are looking for:

Code:
 BOOL CWndSelectChar :: Process ()

Addet it:

Code:
 # if __ VER> = 17
    if (m_bFlash == TRUE)
    {
        m_nFlashAlpha + = 1;

        if (m_nFlashAlpha> 40)
        {
            m_nFlashAlpha = 40;
            m_bFlash = FALSE;
        }
    }
    else
    {
        m_nFlashAlpha - = 1;

        if (m_nFlashAlpha <0)
        {
            m_nFlashAlpha = 0;
            m_bFlash = TRUE;
        }
    }

    m_nChars = 0;

    if (g_Neuz.m_apPlayer [0] = NULL)
        m_nChars + +;
    if (g_Neuz.m_apPlayer [1] = NULL)
        m_nChars + +;
    if (g_Neuz.m_apPlayer [2] = NULL)
        m_nChars + +;

    CWndStatic pWndStatic * = (CWndStatic *) GetDlgItem (WIDC_ST_CHARCOUNT);
    CStatic char [10];
    sprintf (CStatic, "% d", m_nChars);
    pWndStatic-> SetTitle (CStatic);
# Endif

Now it goes to:

Code:
 void CWndSelectChar :: OnDraw (C2DRender p2DRender *)

This function replaces her completely by this:

Code:
 void CWndSelectChar :: OnDraw (C2DRender p2DRender *)
{
    CWndButton pWndAccept * = (CWndButton *) GetDlgItem (WIDC_ACCEPT);
    CWndButton pWndCreate * = (CWndButton *) GetDlgItem (WIDC_CREATE);
    CWndButton pWndDelete * = (CWndButton *) GetDlgItem (WIDC_DELETE);

# If __ VER> = 17
    CWndStatic pWndStaticChar * [4];
    pWndStaticChar [1] = (CWndStatic *) GetDlgItem (WIDC_ST_CHARNAME01);
    pWndStaticChar [2] = (CWndStatic *) GetDlgItem (WIDC_ST_CHARNAME02);
    pWndStaticChar [3] = (CWndStatic *) GetDlgItem (WIDC_ST_CHARNAME03);

    CWndButton pWndButton1 * = (CWndButton *) GetDlgItem (WIDC_BT_LEFT);
    CWndButton pWndButton2 * = (CWndButton *) GetDlgItem (WIDC_BT_RIGHT);

    LPWNDCTRL lpCustom [3];
    lpCustom [0] = GetWndCtrl (WIDC_CUSTOM1);
    lpCustom [1] = GetWndCtrl (WIDC_CUSTOM2);
    lpCustom [2] = GetWndCtrl (WIDC_CUSTOM3);
    LPWNDCTRL lpStatic [3];
    lpStatic [0] = GetWndCtrl (WIDC_ST_CHARNAME01);
    lpStatic [1] = GetWndCtrl (WIDC_ST_CHARNAME02);
    lpStatic [2] = GetWndCtrl (WIDC_ST_CHARNAME03);

    pWndButton1-> EnableWindow (false);
    pWndButton2-> EnableWindow (false);
    pWndButton1-> SetVisible (false);
    pWndButton2-> SetVisible (false);
# Endif

    CRect rect;
    for (int i = 0; i <MAX_CHARACTER_LIST; i + +)
    {
        m_aRect rect = [i];
        
        if (g_Neuz.m_apPlayer [i] = NULL)
        {
            if (g_WndMng.GetWndBase (APP_2ND_PASSWORD_NUMBERPAD) == NULL)
            {
                Point point = GetMousePoint ();
                if (m_aRect [i]. PtInRect point ())
                {
                    CRect rectHittest m_aRect = [i];
                    CPoint point2 = point;
                    ClientToScreen (& point2);
                    ClientToScreen (rectHittest);
                    g_WndMng.PutToolTip_Character (i, point2, & rectHittest);
                }
            }
            if (i == m_nSelectCharacter)
            {
# If __ VER> = 17
                CRect rectNew;
                CRect rectFlash;

                rectNew.top lpCustom = [i] -> rect.top;
                rectNew.left lpCustom = [i] -> rect.left;
                rectNew.bottom lpCustom = [i] -> rect.bottom;
                rectNew.right lpCustom = [i] -> rect.right;

                rectFlash.top lpStatic = [i] -> rect.top + 3;
                rectFlash.left lpStatic = [i] -> rect.left + 2;
                rectFlash.bottom lpStatic = [i] -> rect.bottom - 3;
                rectFlash.right lpStatic = [i] -> rect.right - 2;

                / / Background
                p2DRender-> RenderFillRect (rectNew, D3DCOLOR_ARGB (20, 80, 250, 80));
                / / Flash
                p2DRender-> RenderFillRect (rectFlash, D3DCOLOR_ARGB (m_nFlashAlpha, 80, 250, 80));
# Else
                RectTemp CRect rect =;

                rectTemp.top + = 10;
                rectTemp.bottom - = 10;
                rectTemp.left + = i;
                rectTemp.right + = i;
                p2DRender-> RenderFillRect (rectTemp, D3DCOLOR_ARGB (20, 80, 250, 80));
# Endif
                    
# If __ VER> = 17
                pWndStaticChar [i +1] -> SetTitle (g_Neuz.m_apPlayer [i] -> GetName ());

                switch (i)
                {
                case 0: pWndStaticChar [1] -> = m_dwColor 0xFFCA6544, pWndStaticChar [2] -> = 0xFF666666 m_dwColor, pWndStaticChar [3] -> = 0xFF666666 m_dwColor break;
                case 1: pWndStaticChar [1] -> = 0xFF666666 m_dwColor, pWndStaticChar [2] -> = m_dwColor 0xFFCA6544, pWndStaticChar [3] -> = 0xFF666666 m_dwColor break;
                case 2: pWndStaticChar [1] -> = 0xFF666666 m_dwColor, pWndStaticChar [2] -> = 0xFF666666 m_dwColor, pWndStaticChar [3] -> m_dwColor 0xFFCA6544 = break;
                }
# Else
                p2DRender-> TextOut (rect.left, rect.bottom +10, g_Neuz.m_apPlayer [i] -> GetName (), 0xFFFF0000);
                p2DRender-> TextOut (rect.left + 1 + 10 rect.bottom, g_Neuz.m_apPlayer [i] -> GetName (), 0xFFFF0000);
# Endif
            }
            else
            {
                
# If __ VER> = 17
                pWndStaticChar [i +1] -> SetTitle (g_Neuz.m_apPlayer [i] -> GetName ());
# Else
                p2DRender-> TextOut (rect.left, rect.bottom +10, g_Neuz.m_apPlayer [i] -> GetName (), 0xff505050);
# Endif
            }

            CModelObject pModel * = (* CModelObject) m_pBipedMesh [i];
            LPDIRECT3DDEVICE9 pd3dDevice = m_pd3dDevice p2DRender->;

            pd3dDevice-> SetRenderState (D3DRS_ZWRITEENABLE, TRUE);
            pd3dDevice-> SetRenderState (D3DRS_ZENABLE, TRUE);
            pd3dDevice-> SetRenderState (D3DRS_CULLMODE, D3DCULL_CCW);
            pd3dDevice-> SetRenderState (D3DRS_ALPHABLENDENABLE, FALSE);
            pd3dDevice-> SetRenderState (D3DRS_FILLMODE, D3DFILL_SOLID);
            pd3dDevice-> SetTextureStageState (0, D3DTSS_COLOROP, D3DTOP_SELECTARG1);

            pd3dDevice-> SetTextureStageState (0, D3DTSS_COLORARG1, D3DTA_TEXTURE);
            pd3dDevice-> SetTextureStageState (0, D3DTSS_COLOROP, D3DTOP_SELECTARG1);
            pd3dDevice-> SetTextureStageState (0, D3DTSS_COLOROP, D3DTOP_SELECTARG1);

            pd3dDevice-> SetSamplerState (0, D3DSAMP_MINFILTER, D3DTEXF_LINEAR);
            pd3dDevice-> SetSamplerState (0, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR);

            pd3dDevice-> SetRenderState (D3DRS_AMBIENT, D3DCOLOR_ARGB (255, 255,255,255));
            pd3dDevice-> SetRenderState (D3DRS_ZWRITEENABLE, TRUE);

            D3DVIEWPORT9 viewport;

# If __ VER> = 17
            viewport.X = p2DRender-> m_ptOrigin.x lpCustom + [i] -> rect.left;
            viewport.Y = p2DRender-> m_ptOrigin.y lpCustom + [i] -> rect.top;
# Else
            viewport.X = p2DRender-> + m_ptOrigin.x rect.left;
            viewport.Y = p2DRender-> + m_ptOrigin.y rect.top;
# Endif

            viewport.Width rect.Width = ();
            viewport.Height rect.height = ();
            viewport.MinZ = 0.0f;
            viewport.MaxZ = 1.0f;
            pd3dDevice-> SetViewport (and viewport);
            pd3dDevice-> Clear (0, NULL, D3DCLEAR_ZBUFFER, 0xffa08080, 1.0f, 0);

            RectViewport CRect (0, 0, viewport.Width, viewport.Height);
 
            D3DXMATRIX matProj;
            D3DXMatrixIdentity (& matProj);
            FLOAT fAspect = ((FLOAT) viewport.Width) / (FLOAT) viewport.Height;
            D3DXMatrixPerspectiveFovLH (& matProj, D3DX_PI/4.0f, fAspect, CWorld :: m_fNearPlane - 0.01f, CWorld :: m_fFarPlane);
            pd3dDevice-> SetTransform (D3DTS_PROJECTION, & matProj);

            D3DXMATRIX matView;
            D3DXVECTOR3 vecLookAt (0.0f, 0.0f, 1.0f);
            D3DXVECTOR3 vecPos (0.0f, 0.5f, 3.5f,);

            D3DXMatrixLookAtLH (& matView, & vecPos, & vecLookAt, & D3DXVECTOR3 (0.0f, 1.0f, 0.0f));

            pd3dDevice-> SetTransform (D3DTS_VIEW, & matView);

            D3DXMATRIXA16 matWorld;
            D3DXMATRIXA16 matScale;
            D3DXMATRIXA16 MATROT;
            D3DXMATRIXA16 matTrans;

            D3DXMatrixIdentity (& matScale);
            D3DXMatrixIdentity (& MATROT);
            D3DXMatrixIdentity (& matTrans);
            D3DXMatrixIdentity (& matWorld);
            
            D3DXMatrixScaling (& matScale, 1.6f, 1.6f, 1.6f);
            D3DXMatrixTranslation (& matTrans, 0.0f, 1.15f,, 0.0f);

            D3DXMatrixMultiply (& matWorld, & matWorld, & matScale);
            D3DXMatrixMultiply (& matWorld, & matWorld, & MATROT);
            D3DXMatrixMultiply (& matWorld, & matWorld, & matTrans);
            pd3dDevice-> SetTransform (D3DTS_WORLD, & matWorld);

            pd3dDevice-> SetRenderState (D3DRS_ZWRITEENABLE, TRUE);
            pd3dDevice-> SetRenderState (D3DRS_ZENABLE, TRUE);
            pd3dDevice-> SetRenderState (D3DRS_FOGENABLE, FALSE);
            pd3dDevice-> SetRenderState (D3DRS_LIGHTING, FALSE);
            SetLight :: (FALSE);
            SetFog :: (FALSE);
            SetDiffuse (1.0f, 1.0f, 1.0f);
            SetAmbient (1.0f, 1.0f, 1.0f);
            
            * = O3D_ELEMENT Pélem pModel-> GetParts (PARTS_RIDE);
            if (Pélem && Pélem-> m_pObject3D)
                pModel-> TakeOffParts (PARTS_RIDE);
            
            Pélem = pModel-> GetParts (PARTS_HAIR);

            if (Pélem && Pélem-> m_pObject3D)
            {
                Pélem-> m_pObject3D-> m_fAmbient [0] = g_Neuz.m_apPlayer [i] -> m_fHairColorR;
                Pélem-> m_pObject3D-> m_fAmbient [1] = g_Neuz.m_apPlayer [i] -> m_fHairColorG;
                Pélem-> m_pObject3D-> m_fAmbient [2] = g_Neuz.m_apPlayer [i] -> m_fHairColorB;
            }
            
            D3DXVECTOR4 Vconst (1.0f, 1.0f, 1.0f, 1.0f);
# Ifdef __ YENV
            g_Neuz.m_pEffect-> setVector (g_Neuz.m_hvFog, & Vconst);
# Else / / __YENV
            pd3dDevice-> SetVertexShaderConstantF (95, (float *) & Vconst, 1);
# Endif / / __YENV
            SetTransformView :: (matView);
            SetTransformProj :: (matProj);

            g_Neuz.m_apPlayer [i] -> OverCoatItemRenderCheck (pModel);
            
            / / CI ¸ ¸ Ó ¸ ® Ä AEAI «¶ ô ³ ¯ · Á ¾ ° ßÇÏ' JSC ³ Ä? / / AI AI ¥ º ° æ ¿ì ¾ o'a
            DWORD dwID g_Neuz.m_apPlayer = [i] -> m_aEquipInfo [PARTS_CAP] dwID,.
            ItemProp pItemProp * = NULL;

            if (dwID! = NULL_ID)
            {
                O3D_ELEMENT pElement * = NULL;
                pItemProp prj.GetItemProp = (dwID);

                if (pItemProp && pItemProp-> dwBasePartsIgnore! = -1)
                {
                    pElement = pModel-> SetEffect (pItemProp-> dwBasePartsIgnore, XE_HIDE);
                }

                / / ¿ÜÅõÀÇ "OÀ" AO including ¾ "° æ ¿ì ¸ Ó ¸ ® ³ ¯ ¸ ± ° ° ¡JSC AC ± âÁØÀ» ¿¸ ÜÅõ DAU ¸ | ± ¸ ​​· Î ¹ Ù âÁØÀ ² u'u
                dwID g_Neuz.m_apPlayer = [i] -> m_aEquipInfo [PARTS_HAT] dwID.;
                if (dwID! = NULL_ID)
                {
                    if ((g_Neuz.m_apPlayer [i] -> m_aEquipInfo [PARTS_HAT] byFlag & CItemElem :: expired).)
                    {
                        pItemProp prj.GetItemProp = (dwID);
                        if (pItemProp && pItemProp-> dwBasePartsIgnore! = -1)
                        {
                            if (pItemProp-> dwBasePartsIgnore == PARTS_HEAD)
                                pModel-> SetEffect (PARTS_HAIR, XE_HIDE);
                            
                            pModel-> SetEffect (pItemProp-> dwBasePartsIgnore, XE_HIDE);
                        }
                        else
                        {
                            if (pElement)
                                pElement-> m_nEffect & = ~ XE_HIDE;
                        }
                    }
                }
            }
            else
            {
                / / ¿ÜÅõÀÇ "OÀ" AO including ¾ "° æ ¿ì ¸ Ó ¸ ® ³ ¯ ¸ ± ° ° ¡JSC AC ± âÁØÀ» ¿¸ ÜÅõ DAU ¸ | ± ¸ ​​· Î ¹ Ù âÁØÀ ² u'u
                dwID g_Neuz.m_apPlayer = [i] -> m_aEquipInfo [PARTS_HAT] dwID.;
                if (dwID! = NULL_ID)
                {
                    if ((g_Neuz.m_apPlayer [i] -> m_aEquipInfo [PARTS_HAT] byFlag & CItemElem :: expired).)
                    {
                        pItemProp prj.GetItemProp = (dwID);
                        if (pItemProp && pItemProp-> dwBasePartsIgnore! = -1)
                        {
                            if (pItemProp-> dwBasePartsIgnore == PARTS_HEAD)
                                pModel-> SetEffect (PARTS_HAIR, XE_HIDE);

                            pModel-> SetEffect (pItemProp-> dwBasePartsIgnore, XE_HIDE);
                        }
                    }
                }
            }

# Ifdef __ YENV
            SetLightVec (D3DXVECTOR3 (0.0f, 0.0f, 1.0f));
# Endif / / __YENV
            
            pModel-> render (p2DRender-> m_pd3dDevice, & matWorld);

            p2DRender-> m_pd3dDevice-> SetRenderState (D3DRS_ALPHABLENDENABLE, TRUE);
            p2DRender-> m_pd3dDevice-> SetRenderState (D3DRS_CULLMODE, D3DCULL_NONE);
        
# If __ VER> = 17
            viewport.X = p2DRender-> m_ptOrigin.x lpCustom + [i] -> rect.left;
            viewport.Y = p2DRender-> m_ptOrigin.y lpCustom + [i] -> rect.top;
# Else
            viewport.X = p2DRender-> m_ptOrigin.x + 5;
            viewport.Y = p2DRender-> m_ptOrigin.y + 5;
# Endif
            viewport.Width = p2DRender-> m_clipRect.Width ();
            viewport.Height = p2DRender-> m_clipRect.Height ();
            viewport.MinZ = 0.0f;
            viewport.MaxZ = 1.0f;
            pd3dDevice-> SetViewport (and viewport);

        }
        else
        {
# If __ VER> = 17
            pWndStaticChar [i +1] -> SetTitle ("");
# Else
            if (i == m_nSelectCharacter)
                p2DRender-> TextOut (rect.left, rect.bottom +10, prj.GetText (TID_GAME_WND_SELECT_CHARACTER_EMPTY) 0xff6060ff);
            else
                p2DRender-> TextOut (rect.left, rect.bottom +10, prj.GetText (TID_GAME_WND_SELECT_CHARACTER_EMPTY), 0xff505050);
# Endif
        }

        if (i == m_nSelectCharacter)
        {
            if (g_Neuz.m_apPlayer [i])
            {
                pWndCreate-> EnableWindow (FALSE);
                pWndAccept-> EnableWindow (TRUE);
                pWndDelete-> EnableWindow (TRUE);
            }
            else
            {
                pWndCreate-> EnableWindow (TRUE);
                pWndAccept-> EnableWindow (FALSE);
                pWndDelete-> EnableWindow (FALSE);
# If __ VER> = 17
                switch (i)
                {
                case 0: pWndStaticChar [1] -> = m_dwColor 0xFFCA6544, pWndStaticChar [2] -> = 0xFF666666 m_dwColor, pWndStaticChar [3] -> = 0xFF666666 m_dwColor break;
                case 1: pWndStaticChar [1] -> = 0xFF666666 m_dwColor, pWndStaticChar [2] -> = m_dwColor 0xFFCA6544, pWndStaticChar [3] -> = 0xFF666666 m_dwColor break;
                case 2: pWndStaticChar [1] -> = 0xFF666666 m_dwColor, pWndStaticChar [2] -> = 0xFF666666 m_dwColor, pWndStaticChar [3] -> m_dwColor 0xFFCA6544 = break;
                }
# Endif
            }
        }
    }
}

Now you're looking for:

Code:
 void CWndSelectChar :: OnInitialUpdate ()

adds this:

Code:
LPWNDCTRL lpCustom [3];
lpCustom [0] = GetWndCtrl (WIDC_CUSTOM1);
lpCustom [1] = GetWndCtrl (WIDC_CUSTOM2);
lpCustom [2] = GetWndCtrl (WIDC_CUSTOM3);

# If __ VER> = 17
        m_aRect [i] = lpCustom [i] - rect>;
# Else
        m_aRect [i] = rect;
        rect.OffsetRect (170, 0);
# Endif

a.

Now since you have done the heavy work, then save and close, now it goes into the head WndTitle.h file and look for:

Code:
 BEGIN_WNDCLASS (CWndSelectChar)

In it you addet:

Code:
# If __ VER> = 17
private:
    int m_nFlashAlpha;
    bool m_bFlash;
    int m_nChars;
# Endif


Save and Close.

Sale, for those who do not have in the VersionCommon.h Neuz of the __ VER set to 17, dannach compile.

If you did everything right, now has such a picture:

Credits: Gala Labs Crasy, TwiLight (for general info.)

IWANN I'll possibly still Treasure Releasen.

If you need help or have other problems, can contact you.

Someone says that I messed up something about the translation, so if you want to see/have the original quote for this, here's the one.

Original Quote (German):
Ja, Hallu. :)

Ich Release mal das V17 Char Select, warum? weil schöner als das alte ist ;>

Natürlich werden hier wieder welche sagen "C&Pler" bla, mir latte.

Ansich ist es nicht viel Arbeit, aber ich würd euch raten es ein zu bauen für die Server, die sich Full V17+ nennen, denn ihr seid es nicht.

Meines wissens nach ist es noch nicht Released und es hat auch noch kein Server, also kommt der Thread hier.

Was benötigt ihr?

- FlyFF Source
- Mind. v17 ResData
- Brain ( Wobei ich ausgehen, wenn ihr das Thread lesen tut, das ihr keins habt )

Fangen wir an!

Öffnet die Neuz Source ( Nur Neuz! ) und sucht die datei "WndTitle.cpp" im Interface/WndTitle/ ist diese Datei drin, anschließend öffnet ihr auch noch die Header Datei dazu "WndTitle.h".

In der WndTitle.cpp sucht ihr folgendes:

Code:
CWndSelectChar::CWndSelectChar()

Addet darin das:

Code:
#if __VER >= 17
    m_bFlash        = TRUE;
    m_nFlashAlpha    = 0;
    m_nChars        = 0;
#endif

Anschließend sucht ihr:

Code:
BOOL CWndSelectChar::Process()

Addet darin:

Code:
#if __VER >= 17
    if( m_bFlash == TRUE )
    {
        m_nFlashAlpha += 1;

        if( m_nFlashAlpha > 40 )
        {
            m_nFlashAlpha = 40;
            m_bFlash = FALSE;
        }
    }
    else
    {
        m_nFlashAlpha -= 1;

        if( m_nFlashAlpha < 0 )
        {
            m_nFlashAlpha = 0;
            m_bFlash = TRUE;
        }
    }

    m_nChars = 0;

    if( g_Neuz.m_apPlayer[0] != NULL )
        m_nChars ++;
    if( g_Neuz.m_apPlayer[1] != NULL )
        m_nChars ++;
    if( g_Neuz.m_apPlayer[2] != NULL )
        m_nChars ++;

    CWndStatic* pWndStatic = (CWndStatic*)GetDlgItem( WIDC_ST_CHARCOUNT );
    char cStatic[10];
    sprintf( cStatic, "%d", m_nChars );
    pWndStatic->SetTitle( cStatic );
#endif

nun geht ihr zu:

Code:
void CWndSelectChar::OnDraw( C2DRender* p2DRender )

Diese funktion ersetzt ihr vollständig durch das hier:

Code:
void CWndSelectChar::OnDraw( C2DRender* p2DRender )
{
    CWndButton* pWndAccept = (CWndButton*)GetDlgItem( WIDC_ACCEPT );
    CWndButton* pWndCreate = (CWndButton*)GetDlgItem( WIDC_CREATE );
    CWndButton* pWndDelete = (CWndButton*)GetDlgItem( WIDC_DELETE );

#if __VER >= 17
    CWndStatic* pWndStaticChar[4];
    pWndStaticChar[1] = (CWndStatic*)GetDlgItem( WIDC_ST_CHARNAME01 );
    pWndStaticChar[2] = (CWndStatic*)GetDlgItem( WIDC_ST_CHARNAME02 );
    pWndStaticChar[3] = (CWndStatic*)GetDlgItem( WIDC_ST_CHARNAME03 );

    CWndButton*    pWndButton1 = (CWndButton*)GetDlgItem( WIDC_BT_LEFT );
    CWndButton*    pWndButton2 = (CWndButton*)GetDlgItem( WIDC_BT_RIGHT );

    LPWNDCTRL lpCustom[3];
    lpCustom[0] = GetWndCtrl( WIDC_CUSTOM1 );
    lpCustom[1] = GetWndCtrl( WIDC_CUSTOM2 );
    lpCustom[2] = GetWndCtrl( WIDC_CUSTOM3 );
    LPWNDCTRL lpStatic[3];
    lpStatic[0] = GetWndCtrl( WIDC_ST_CHARNAME01 );
    lpStatic[1] = GetWndCtrl( WIDC_ST_CHARNAME02 );
    lpStatic[2] = GetWndCtrl( WIDC_ST_CHARNAME03 );

    pWndButton1->EnableWindow( false );
    pWndButton2->EnableWindow( false );
    pWndButton1->SetVisible( false );
    pWndButton2->SetVisible( false );
#endif

    CRect rect;
    for( int i = 0; i < MAX_CHARACTER_LIST; i++ )
    {
        rect = m_aRect[ i ];
        
        if( g_Neuz.m_apPlayer[i] != NULL )
        {
            if( g_WndMng.GetWndBase( APP_2ND_PASSWORD_NUMBERPAD ) == NULL )
            {
                POINT point = GetMousePoint();
                if( m_aRect[ i ].PtInRect( point ) )
                {
                    CRect rectHittest = m_aRect[ i ];
                    CPoint point2 = point;
                    ClientToScreen( &point2 );
                    ClientToScreen( rectHittest );
                    g_WndMng.PutToolTip_Character( i, point2, &rectHittest );
                }
            }
            if( m_nSelectCharacter == i )
            {
#if __VER >= 17
                CRect rectNew;
                CRect rectFlash;

                rectNew.top        = lpCustom[i]->rect.top;
                rectNew.left    = lpCustom[i]->rect.left;
                rectNew.bottom    = lpCustom[i]->rect.bottom;
                rectNew.right    = lpCustom[i]->rect.right;

                rectFlash.top        = lpStatic[i]->rect.top + 3;
                rectFlash.left        = lpStatic[i]->rect.left + 2;
                rectFlash.bottom    = lpStatic[i]->rect.bottom - 3;
                rectFlash.right        = lpStatic[i]->rect.right - 2;

                // Background
                p2DRender->RenderFillRect(rectNew, D3DCOLOR_ARGB( 20, 80, 250, 80 ) );
                // Flash
                p2DRender->RenderFillRect(rectFlash, D3DCOLOR_ARGB( m_nFlashAlpha, 80, 250, 80 ) );
#else
                CRect rectTemp = rect;

                rectTemp.top += 10;
                rectTemp.bottom -= 10;
                rectTemp.left += i;
                rectTemp.right += i;
                p2DRender->RenderFillRect(rectTemp, D3DCOLOR_ARGB( 20, 80, 250, 80 ) );
#endif
                    
#if __VER >= 17
                pWndStaticChar[i+1]->SetTitle( g_Neuz.m_apPlayer[i]->GetName() );

                switch( i )
                {
                case 0:        pWndStaticChar[1]->m_dwColor = 0xFFCA6544,    pWndStaticChar[2]->m_dwColor = 0xFF666666,    pWndStaticChar[3]->m_dwColor = 0xFF666666; break;
                case 1:        pWndStaticChar[1]->m_dwColor = 0xFF666666,    pWndStaticChar[2]->m_dwColor = 0xFFCA6544,    pWndStaticChar[3]->m_dwColor = 0xFF666666; break;
                case 2:        pWndStaticChar[1]->m_dwColor = 0xFF666666,    pWndStaticChar[2]->m_dwColor = 0xFF666666,    pWndStaticChar[3]->m_dwColor = 0xFFCA6544; break;
                }
#else
                p2DRender->TextOut( rect.left, rect.bottom + 10, g_Neuz.m_apPlayer[i]->GetName(), 0xffFF0000 );
                p2DRender->TextOut( rect.left + 1, rect.bottom + 10, g_Neuz.m_apPlayer[i]->GetName(), 0xffFF0000 );
#endif
            }
            else
            {
                
#if __VER >= 17
                pWndStaticChar[i+1]->SetTitle( g_Neuz.m_apPlayer[i]->GetName() );
#else        
                p2DRender->TextOut( rect.left, rect.bottom + 10, g_Neuz.m_apPlayer[i]->GetName(), 0xff505050 );
#endif
            }

            CModelObject* pModel = (CModelObject*)m_pBipedMesh[ i ];
            LPDIRECT3DDEVICE9 pd3dDevice = p2DRender->m_pd3dDevice;

            pd3dDevice->SetRenderState( D3DRS_ZWRITEENABLE, TRUE );
            pd3dDevice->SetRenderState( D3DRS_ZENABLE, TRUE );
            pd3dDevice->SetRenderState( D3DRS_CULLMODE, D3DCULL_CCW );
            pd3dDevice->SetRenderState( D3DRS_ALPHABLENDENABLE, FALSE );
            pd3dDevice->SetRenderState( D3DRS_FILLMODE, D3DFILL_SOLID );
            pd3dDevice->SetTextureStageState( 0, D3DTSS_COLOROP,   D3DTOP_SELECTARG1 );

            pd3dDevice->SetTextureStageState( 0, D3DTSS_COLORARG1, D3DTA_TEXTURE );
            pd3dDevice->SetTextureStageState( 0, D3DTSS_COLOROP,   D3DTOP_SELECTARG1 );
            pd3dDevice->SetTextureStageState( 0, D3DTSS_COLOROP,   D3DTOP_SELECTARG1 );

            pd3dDevice->SetSamplerState( 0, D3DSAMP_MINFILTER, D3DTEXF_LINEAR );        
            pd3dDevice->SetSamplerState( 0, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR );        

            pd3dDevice->SetRenderState( D3DRS_AMBIENT,  D3DCOLOR_ARGB( 255, 255,255,255) );
            pd3dDevice->SetRenderState( D3DRS_ZWRITEENABLE, TRUE );

            D3DVIEWPORT9 viewport;

#if __VER >= 17
            viewport.X      = p2DRender->m_ptOrigin.x + lpCustom[i]->rect.left;
            viewport.Y      = p2DRender->m_ptOrigin.y + lpCustom[i]->rect.top;    
#else
            viewport.X      = p2DRender->m_ptOrigin.x + rect.left;
            viewport.Y      = p2DRender->m_ptOrigin.y + rect.top;
#endif

            viewport.Width  = rect.Width();
            viewport.Height = rect.Height();
            viewport.MinZ   = 0.0f;
            viewport.MaxZ   = 1.0f;
            pd3dDevice->SetViewport(&viewport);
            pd3dDevice->Clear(0, NULL, D3DCLEAR_ZBUFFER, 0xffa08080, 1.0f, 0 ) ;

            CRect rectViewport( 0, 0, viewport.Width, viewport.Height );
 
            D3DXMATRIX matProj;
            D3DXMatrixIdentity( &matProj );
            FLOAT fAspect = ((FLOAT)viewport.Width) / (FLOAT)viewport.Height;
            D3DXMatrixPerspectiveFovLH( &matProj, D3DX_PI/4.0f, fAspect, CWorld::m_fNearPlane - 0.01f, CWorld::m_fFarPlane );
            pd3dDevice->SetTransform( D3DTS_PROJECTION, &matProj );

            D3DXMATRIX  matView;
            D3DXVECTOR3 vecLookAt( 0.0f, 0.0f, 1.0f );
            D3DXVECTOR3 vecPos(  0.0f, 0.5f, -3.5f );

            D3DXMatrixLookAtLH( &matView, &vecPos, &vecLookAt, &D3DXVECTOR3(0.0f,1.0f,0.0f) );

            pd3dDevice->SetTransform( D3DTS_VIEW, &matView );

            D3DXMATRIXA16 matWorld;
            D3DXMATRIXA16 matScale;
            D3DXMATRIXA16 matRot;
            D3DXMATRIXA16 matTrans;

            D3DXMatrixIdentity(&matScale);
            D3DXMatrixIdentity(&matRot);
            D3DXMatrixIdentity(&matTrans);
            D3DXMatrixIdentity(&matWorld);
            
            D3DXMatrixScaling(&matScale,1.6f,1.6f,1.6f);
            D3DXMatrixTranslation(&matTrans,0.0f,-1.15f,0.0f);

            D3DXMatrixMultiply(&matWorld,&matWorld,&matScale);
            D3DXMatrixMultiply(&matWorld, &matWorld,&matRot);
            D3DXMatrixMultiply(&matWorld, &matWorld, &matTrans );
            pd3dDevice->SetTransform( D3DTS_WORLD, &matWorld );

            pd3dDevice->SetRenderState( D3DRS_ZWRITEENABLE, TRUE );
            pd3dDevice->SetRenderState( D3DRS_ZENABLE, TRUE );
            pd3dDevice->SetRenderState( D3DRS_FOGENABLE, FALSE );
            pd3dDevice->SetRenderState( D3DRS_LIGHTING, FALSE );
            ::SetLight( FALSE );
            ::SetFog( FALSE );
            SetDiffuse( 1.0f, 1.0f, 1.0f );
            SetAmbient( 1.0f, 1.0f, 1.0f );
            
            O3D_ELEMENT *pElem = pModel->GetParts( PARTS_RIDE );
            if( pElem && pElem->m_pObject3D )
                pModel->TakeOffParts( PARTS_RIDE );
            
            pElem = pModel->GetParts( PARTS_HAIR );

            if( pElem && pElem->m_pObject3D )
            {
                pElem->m_pObject3D->m_fAmbient[0] = g_Neuz.m_apPlayer[i]->m_fHairColorR;
                pElem->m_pObject3D->m_fAmbient[1] = g_Neuz.m_apPlayer[i]->m_fHairColorG;
                pElem->m_pObject3D->m_fAmbient[2] = g_Neuz.m_apPlayer[i]->m_fHairColorB;
            }
            
            D3DXVECTOR4 vConst( 1.0f, 1.0f, 1.0f, 1.0f );
#ifdef __YENV
            g_Neuz.m_pEffect->SetVector( g_Neuz.m_hvFog, &vConst );
#else //__YENV                        
            pd3dDevice->SetVertexShaderConstantF( 95, (float*)&vConst, 1 );
#endif //__YENV
            ::SetTransformView( matView );
            ::SetTransformProj( matProj );

            g_Neuz.m_apPlayer[i]->OverCoatItemRenderCheck(pModel);
            
            // Çï¸äÀÌ ¸Ó¸®Ä«¶ô ³¯·Á¾ßÇϴ°ÍÀ̳Ä?  // Àκ¥ÀÌ ¾ø´Â°æ¿ì
            DWORD dwId    = g_Neuz.m_apPlayer[i]->m_aEquipInfo[PARTS_CAP].dwId;
            ItemProp* pItemProp = NULL;

            if( dwId != NULL_ID )
            {
                O3D_ELEMENT* pElement = NULL;
                pItemProp    = prj.GetItemProp( dwId );

                if( pItemProp && pItemProp->dwBasePartsIgnore != -1 )
                {
                    pElement = pModel->SetEffect(pItemProp->dwBasePartsIgnore, XE_HIDE );
                }

                // ¿ÜÅõÀÇ»óÀ» ÀÔ¾úÀ»°æ¿ì ¸Ó¸®³¯¸±°ÍÀΰ¡ÀÇ ±âÁØÀ» ¿ÜÅõ ¸ðÀÚ¸¦ ±âÁØÀ¸·Î ¹Ù²Û´Ù
                dwId    = g_Neuz.m_apPlayer[i]->m_aEquipInfo[PARTS_HAT].dwId;
                if( dwId != NULL_ID )
                {
                    if( !(g_Neuz.m_apPlayer[i]->m_aEquipInfo[PARTS_HAT].byFlag & CItemElem::expired) )
                    {
                        pItemProp    = prj.GetItemProp( dwId );
                        if( pItemProp && pItemProp->dwBasePartsIgnore != -1 )
                        {
                            if( pItemProp->dwBasePartsIgnore == PARTS_HEAD )
                                pModel->SetEffect(PARTS_HAIR, XE_HIDE );
                            
                            pModel->SetEffect(pItemProp->dwBasePartsIgnore, XE_HIDE );
                        }
                        else
                        {
                            if( pElement )
                                pElement->m_nEffect &= ~XE_HIDE;
                        }
                    }
                }
            }
            else
            {
                // ¿ÜÅõÀÇ»óÀ» ÀÔ¾úÀ»°æ¿ì ¸Ó¸®³¯¸±°ÍÀΰ¡ÀÇ ±âÁØÀ» ¿ÜÅõ ¸ðÀÚ¸¦ ±âÁØÀ¸·Î ¹Ù²Û´Ù
                dwId    = g_Neuz.m_apPlayer[i]->m_aEquipInfo[PARTS_HAT].dwId;
                if( dwId != NULL_ID )
                {
                    if( !(g_Neuz.m_apPlayer[i]->m_aEquipInfo[PARTS_HAT].byFlag & CItemElem::expired) )
                    {                        
                        pItemProp    = prj.GetItemProp( dwId );
                        if( pItemProp && pItemProp->dwBasePartsIgnore != -1 )
                        {
                            if( pItemProp->dwBasePartsIgnore == PARTS_HEAD )
                                pModel->SetEffect(PARTS_HAIR, XE_HIDE );

                            pModel->SetEffect(pItemProp->dwBasePartsIgnore, XE_HIDE );
                        }
                    }
                }
            }

#ifdef __YENV
            SetLightVec( D3DXVECTOR3( 0.0f, 0.0f, 1.0f ) );
#endif //__YENV
            
            pModel->Render( p2DRender->m_pd3dDevice, &matWorld );

            p2DRender->m_pd3dDevice->SetRenderState( D3DRS_ALPHABLENDENABLE, TRUE );
            p2DRender->m_pd3dDevice->SetRenderState( D3DRS_CULLMODE, D3DCULL_NONE );
        
#if __VER >= 17
            viewport.X      = p2DRender->m_ptOrigin.x + lpCustom[i]->rect.left;
            viewport.Y      = p2DRender->m_ptOrigin.y + lpCustom[i]->rect.top;
#else
            viewport.X      = p2DRender->m_ptOrigin.x + 5;
            viewport.Y      = p2DRender->m_ptOrigin.y + 5;
#endif
            viewport.Width  = p2DRender->m_clipRect.Width();
            viewport.Height = p2DRender->m_clipRect.Height();
            viewport.MinZ   = 0.0f;
            viewport.MaxZ   = 1.0f;
            pd3dDevice->SetViewport(&viewport);

        }
        else
        {
#if __VER >= 17
            pWndStaticChar[i+1]->SetTitle( "" );
#else
            if( m_nSelectCharacter == i )
                p2DRender->TextOut( rect.left, rect.bottom + 10, prj.GetText( TID_GAME_WND_SELECT_CHARACTER_EMPTY ), 0xff6060ff );
            else
                p2DRender->TextOut( rect.left, rect.bottom + 10, prj.GetText( TID_GAME_WND_SELECT_CHARACTER_EMPTY ), 0xff505050 );
#endif
        }            

        if( m_nSelectCharacter == i )
        {
            if( g_Neuz.m_apPlayer[i]  )
            {
                pWndCreate->EnableWindow( FALSE );
                pWndAccept->EnableWindow( TRUE );
                pWndDelete->EnableWindow( TRUE );
            }
            else
            {
                pWndCreate->EnableWindow( TRUE );
                pWndAccept->EnableWindow( FALSE );
                pWndDelete->EnableWindow( FALSE );
#if __VER >= 17
                switch( i )
                {
                case 0:        pWndStaticChar[1]->m_dwColor = 0xFFCA6544,    pWndStaticChar[2]->m_dwColor = 0xFF666666,    pWndStaticChar[3]->m_dwColor = 0xFF666666; break;
                case 1:        pWndStaticChar[1]->m_dwColor = 0xFF666666,    pWndStaticChar[2]->m_dwColor = 0xFFCA6544,    pWndStaticChar[3]->m_dwColor = 0xFF666666; break;
                case 2:        pWndStaticChar[1]->m_dwColor = 0xFF666666,  pWndStaticChar[2]->m_dwColor = 0xFF666666,    pWndStaticChar[3]->m_dwColor = 0xFFCA6544; break;
                }
#endif
            }
        }
    }
}

jetzt sucht ihr:

Code:
void CWndSelectChar::OnInitialUpdate()

fügt darin:

Code:
LPWNDCTRL lpCustom[3];
lpCustom[0] = GetWndCtrl( WIDC_CUSTOM1 );
lpCustom[1] = GetWndCtrl( WIDC_CUSTOM2 );
lpCustom[2] = GetWndCtrl( WIDC_CUSTOM3 );

#if __VER >= 17
        m_aRect[ i ] = lpCustom[i]->rect;
#else
        m_aRect[ i ] = rect;
        rect.OffsetRect( 170, 0 );
#endif

ein.

Jetzt seit ihr mit der Schweren Arbeit fertig, nun Speichern und Schließen, jetzt geht ihr in die Head Datei WndTitle.h und sucht nach:

Code:
BEGIN_WNDCLASS( CWndSelectChar )

Darin addet ihr:

Code:
#if __VER >= 17
private:
    int        m_nFlashAlpha;
    bool    m_bFlash;
    int        m_nChars;
#endif


Abspeichern und Schließen.

Jetzt nur noch, für die, die es noch nicht haben in der VersionCommon.h der Neuz die __VER auf 17 setzen, dannach Compilen.

Wer alles richtig gemacht hat, hat nun so ein Bild:

Credits: Gala Labs, Crasy, TwiLight ( Für die allgemeinen Infos. )

Iwann werd ich evtl. noch Treasure Releasen.

Wer Hilfe braucht, oder sonstige Probleme hat, kann sich gerne melden.

Mfg.
 
Last edited:
One question about amount of characters and arrows that this window has shouldn't be there aviablity to mkae more than 3 chars. I checked right now eFlyff but they doesn't have any arrow there O_o.
 
Could you please let the people who use this source translate it? I was only able to succesfully get the snippets in my source by looking for the german (official?) version to get things right.
 
What i mean to say is: The snippet is fucked up becuz of the translation, therefore, let the users who wanna use it, translate it theirselfs.

I actually know what he's talking about.
When I first added the Colosseum to my source, from a german post, I had translated the entire page with google translate. The translating process actually messed up a lot of the C++ coding.
 
still not in good position
Untitled - V17 Char Selection - RaGEZONE Forums
 
Back