[Help] Quickjob change window source.

Results 1 to 3 of 3
  1. #1
    Novice Nanobyte is offline
    MemberRank
    Mar 2013 Join Date
    4Posts

    Support [Help] Quickjob change window source.

    Okay so heres how the problem started (obviously)
    So, what i did was i 'added' "WndChangejobex.h and "WndChangejobex.cpp" to the world-server and neuz as an existing item. Neuz compiled with no warnings or errors.

    However worldsever compiled with these errors. If anyone could point out how to fix it would be most kind.

    The problems seemed obvious it looks like .h does not have CWndBase identified, which im thinking is because it's not detecting DPClient.h. But i could be wrong. I tried adding DPClient to worldserver but it threw out some other errors so i reverted it back to how it was.

    P.S. I'm a noob so try to spoon feed me the information, I'm learning as im going though, just like everyone else.

    Spoiler:
    c:\Official Source\_Interface\WndChangeJobEx.h(21): error C2061: syntax error : identifier 'CWndBase'

    C:\Official Source\_Interface\WndChangeJobEx.cpp(3): fatal error C1083: Cannot open include file: 'DPClient.h': No such file or directory

    c:\Official Source\_Interface\WndChangeJobEx.h(7): error C2504: 'CWndNeuz' : base class undefined

    c:\Official Source\_Interface\WndChangeJobEx.h(17): error C2061: syntax error : identifier 'CWndBase'


    Heres the "WndChangeJobEx.h"

    Spoiler:
    //add this to project Neuz



    #ifndef __WND_JOBCHANGE___EX_
    #define __WND_JOBCHANGE___EX_
    class CWndJobChangeEx: public CWndNeuz
    {
    public:
    CWndJobChangeEx( );
    ~CWndJobChangeEx( );


    virtual HRESULT RestoreDeviceObjects();
    virtual HRESULT InvalidateDeviceObjects();
    virtual HRESULT DeleteDeviceObjects();


    public:
    virtual BOOL Initialize( CWndBase* pWndParent = NULL, DWORD nType = MB_OK );
    virtual BOOL OnChildNotify( UINT message, UINT nID, LRESULT* pLResult );
    virtual void OnDraw( C2DRender* p2DRender );
    virtual void OnInitialUpdate();
    virtual BOOL OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase );
    /*virtual void OnSize( UINT nType, int cx, int cy );
    virtual void OnLButtonUp( UINT nFlags, CPoint point );
    virtual void OnLButtonDown( UINT nFlags, CPoint point ); */
    private:
    int newJob;
    int nJobMin;
    int nJobMax;
    int nCurJob;
    int nNewLv;
    bool bInitialized;
    };
    #endif






    Heres the "WndChangeJobEx.cpp"

    Spoiler:
    //add this to project Neuz





    #include "StdAfx.h"
    #include "WndChangeJobEx.h"
    #include "DPClient.h"
    #include "DPLoginClient.h"
    #include "Network.h"
    #include "ResData.h"
    #include "defineText.h"
    #include "mover.h"


    extern CDPClient g_DPlay;


    CWndJobChangeEx::CWndJobChangeEx()
    {
    }


    CWndJobChangeEx::~CWndJobChangeEx()
    {
    DeleteDeviceObjects();
    }


    BOOL CWndJobChangeEx::Initialize( CWndBase* pWndParent, DWORD dwType )
    {


    if( g_pPlayer->GetLevel() == 15 || g_pPlayer->GetLevel() == 60 || g_pPlayer->GetLevel() == 130 || ( ( g_pPlayer->GetLevel() == 129 ) && g_pPlayer->GetExpPercent() == 9999 ) )
    {
    if( g_pPlayer->GetJob() == 0 )
    {
    nJobMin = 1;
    nJobMax = 4;
    nNewLv = 15;
    }
    else if( g_pPlayer->GetJob() < MAX_EXPERT )
    {
    nJobMin = (g_pPlayer->GetJob() + 2) * 2;
    nJobMax = nJobMin + 1;
    nNewLv = 60;
    }
    else if( g_pPlayer->GetJob() < MAX_PROFESSIONAL )
    {
    nJobMin = g_pPlayer->GetJob() + 10;
    nJobMax = nJobMin;
    nNewLv = 60;
    }
    else if( g_pPlayer->GetJob() < MAX_HERO )
    {
    nJobMin = g_pPlayer->GetJob() + 8;
    nJobMax = nJobMin;
    ( g_pPlayer->GetJob() < MAX_MASTER ) ? nNewLv = 121 : nNewLv = 130;
    }
    nCurJob = nJobMin;
    }else{
    nCurJob = 0;
    }
    return CWndNeuz::InitDialog( g_Neuz.GetSafeHwnd(), APP_FASTJOBCHANGE, 0, CPoint( 0, 0 ), pWndParent );
    }


    BOOL CWndJobChangeEx::OnChildNotify( UINT message, UINT nID, LRESULT* pLResult )
    {
    switch( nID )
    {
    case WIDC_BUTTON4:
    g_DPlay.UpdateJob( nCurJob, nNewLv );
    Destroy();
    break;
    case WIDC_BUTTON2:
    if( nCurJob < nJobMax )
    nCurJob++;
    break;
    case WIDC_BUTTON3:
    if( nCurJob > nJobMin )
    nCurJob--;
    break;
    }
    return CWndNeuz::OnChildNotify( message, nID, pLResult );
    }


    void CWndJobChangeEx::OnDraw( C2DRender* p2DRender )
    {
    char* szInfo[] = { "Error", "Mercenaries prefer to partake in close range combat. The main characteristics of this particular class involve physical strength, and a strong body that is able to withstand attacks.",
    "Acrobats are those who mainly wield long distance weapons such as bows or yoyos. Using the skill tactics of speed and accuracy, they are usually able to break anyone willing enough to fight them.",
    "Being an assist, you'll be able to choose to either be a fighter, or a healer. If a fighter is what you desire, assists generally favouritise close and personal combat. If supporting other characters is more your style, you may choose the alternative.",
    "Magicians are ranged spell casters, they are able to focus large amounts of magic upon an enemy, dealing a great deal of damage before they are even reached. Magicians generally have lower defense, lower HP, and sometimes even delay when it comes to casting spells.",
    "<Leer>",
    "Knights are a second class for mercenaries and are the best tanks in the game. As a knight you will receive more health points per stamina point than any other class.",
    "Blades are a second class for mercenaries and are the best damage dealers in the game. As a blade you will be able to wield two weapons at the same time and thus drastically increase your damage output.",
    "Jesters focus on ranged attacks using Yo-Yos. They have a wide range of skills that allow them to be strong PvP'ers with their YoYo attacks, use some of their penya to do increased damage, and escape incoming attacks.",
    "Rangers are a ranged based melee class that focus on using bow skills to damage enemies.",
    "When it comes to partners, this class is the most sought after due to their ability to enhance others abilities and skills. With extra buffs and skills, this assist class is almost considered a necessity for game play; or, at least, they make it easier.",
    "Billposters are undoubtedly the most self-sufficient class in the game. With their normal assist buffs, and their additional damage skills upon second job change, they are a very strong class. They are more of a melee class, and fight using a knuckle and a shield.",
    "Psykeepers are one of the Magician's second classes. These, however, do not deal in the field of elemental damage. Most of the attacks, which are very powerful, tend to be based off mental and demonic forces.",
    "Elementors are a second class for magicians and are a high damage spell casting class that uses staves to cast devastating elemental spells. ",
    "<Leer>",
    "<Leer>",
    "Become master to get more strength",
    "Become hero to get more strength",
    "Templars are the third class for knights. The ultimate guardian, far more than just a meat shield. They are the epitome of defense and are the knights in shining armor legends are made of.",
    "Slayers are the third class for blades. These ferocious fighters never relent on the attack, and their fury never ceases until all those that oppose them have been laid to waste at their hands.",
    "Harlequins are the third class for Jesters and posses dark skills which allow them to attack from behind there foes and even vanish right in front of your eyes. The Harlequins make for a deadly class with there combo of stealth and attacks.",
    "Crackshooters are the third class for Rangers and can kill from a much further distance than Rangers. They can equip the crossbow, a compact and highly lethal weapon, these ranged fighters can and will kill multiple targets.",
    "Seraphs are the third class for Ringmasters. They are capable of mending any wound, big or small and can bless their companions and awaken strength, skill, and abilities few may think are possible and can even invoke the power of temporary immortality.",
    "Force Masters are the third class for Billposters. All ready one of the strongest if not thee strongest class within Madrigal. The addition of the Force Master Skills brings the most welcome boost to party abilities. Any party would welcome the power's of a Force Master.",
    "Mentalists are the third class for Psykeepers. These playful but graceful and fearsome magicians can manipulate the battlefield and foes to an untimely demise.",
    "Arcanists are the third class for Elementors. Arcanists are experts in the art of elements and can rain down the heaven's to destroy all that lie in there way.",
    };




    CWndButton* nJobPic = (CWndButton*)GetDlgItem( WIDC_BUTTON4 );
    CWndStatic* nJobTit = (CWndStatic*)GetDlgItem( WIDC_STATIC1 );
    CWndButton* chk1 = (CWndButton*) GetDlgItem( WIDC_BUTTON2 );
    CWndButton* chk2 = (CWndButton*) GetDlgItem( WIDC_BUTTON3 );
    CWndText* nJobInfo = (CWndText*)GetDlgItem( WIDC_TEXT1 );
    switch( nCurJob )
    {
    case 0:
    nJobPic->SetTexture(D3DDEVICE, MakePath( DIR_THEME, "SlotVan.bmp" ), TRUE );
    nJobPic->EnableWindow( FALSE );
    nJobTit->SetToolTip( "You don't have the right level" );
    nJobTit->SetTitle( "Error" );
    chk1->EnableWindow( FALSE );
    chk2->EnableWindow( FALSE );
    return;
    break;
    case 1:
    nJobPic->SetTexture(D3DDEVICE, MakePath( DIR_THEME, "SlotMer.bmp" ), TRUE );
    break;
    case 2:
    nJobPic->SetTexture(D3DDEVICE, MakePath( DIR_THEME, "SlotArc.bmp" ), TRUE );
    break;
    case 3:
    nJobPic->SetTexture(D3DDEVICE, MakePath( DIR_THEME, "SlotAs.bmp" ), TRUE );
    break;
    case 4:
    nJobPic->SetTexture(D3DDEVICE, MakePath( DIR_THEME, "SlotMag.bmp" ), TRUE );
    break;
    case 6: case 16: case 24:
    nJobPic->SetTexture(D3DDEVICE, MakePath( DIR_THEME, "SlotKnight.bmp" ), TRUE );
    break;
    case 7: case 17: case 25:
    nJobPic->SetTexture(D3DDEVICE, MakePath( DIR_THEME, "SlotBlad.bmp" ), TRUE );
    break;
    case 8: case 18: case 26:
    nJobPic->SetTexture(D3DDEVICE, MakePath( DIR_THEME, "SlotJes.bmp" ), TRUE );
    break;
    case 9: case 19: case 27:
    nJobPic->SetTexture(D3DDEVICE, MakePath( DIR_THEME, "SlotRan.bmp" ), TRUE );
    break;
    case 10: case 20: case 28:
    nJobPic->SetTexture(D3DDEVICE, MakePath( DIR_THEME, "SlotRingm.bmp" ), TRUE );
    break;
    case 11: case 21: case 29:
    nJobPic->SetTexture(D3DDEVICE, MakePath( DIR_THEME, "SlotBillfor.bmp" ), TRUE );
    break;
    case 12: case 22: case 30:
    nJobPic->SetTexture(D3DDEVICE, MakePath( DIR_THEME, "SlotPsy.bmp" ), TRUE );
    break;
    case 13: case 23: case 31:
    nJobPic->SetTexture(D3DDEVICE, MakePath( DIR_THEME, "SlotElem.bmp" ), TRUE );
    break;
    case 32:
    nJobPic->SetTexture(D3DDEVICE, MakePath( DIR_THEME, "SlotLord.bmp" ), TRUE );
    break;
    case 33:
    nJobPic->SetTexture(D3DDEVICE, MakePath( DIR_THEME, "SlotStormb.bmp" ), TRUE );
    break;
    case 34:
    nJobPic->SetTexture(D3DDEVICE, MakePath( DIR_THEME, "SlotWindI.bmp" ), TRUE );
    break;
    case 35:
    nJobPic->SetTexture(D3DDEVICE, MakePath( DIR_THEME, "SlotCracks.bmp" ), TRUE );
    break;
    case 36:
    nJobPic->SetTexture(D3DDEVICE, MakePath( DIR_THEME, "SlotFlor.bmp" ), TRUE );
    break;
    case 37:
    nJobPic->SetTexture(D3DDEVICE, MakePath( DIR_THEME, "SlotForcem.bmp" ), TRUE );
    break;
    case 38:
    nJobPic->SetTexture(D3DDEVICE, MakePath( DIR_THEME, "SlotMent.bmp" ), TRUE );
    break;
    case 39:
    nJobPic->SetTexture(D3DDEVICE, MakePath( DIR_THEME, "SlotElel.bmp" ), TRUE );
    break;
    default:
    return;
    break;
    }
    nJobPic->SetToolTip( prj.m_aJob[nCurJob].szName );
    nJobTit->SetTitle( prj.m_aJob[nCurJob].szName );
    ( nCurJob == nJobMax ) ? chk1->EnableWindow( FALSE ) : chk1->EnableWindow( TRUE );
    ( nCurJob == nJobMin ) ? chk2->EnableWindow( FALSE ):chk2->EnableWindow( TRUE );
    if( nCurJob < MAX_PROFESSIONAL )
    nJobInfo->SetString( szInfo[nCurJob] );
    else if( nCurJob < MAX_MASTER )
    nJobInfo->SetString( szInfo[MAX_PROFESSIONAL] );
    else if( nCurJob < MAX_HERO )
    nJobInfo->SetString( szInfo[MAX_PROFESSIONAL+1] );
    else
    nJobInfo->SetString( szInfo[nCurJob - 14] );


    }


    void CWndJobChangeEx::OnInitialUpdate( )
    {
    CWndNeuz::OnInitialUpdate();
    RestoreDeviceObjects();



    CRect rectRoot = m_pWndRoot->GetLayoutRect();
    CRect rectWindow = GetWindowRect();
    CPoint point( rectRoot.right - rectWindow.Width(), 110 );
    Move( point );
    MoveParentCenter();
    }


    BOOL CWndJobChangeEx::OnCommand( UINT nID, DWORD dwMessage, CWndBase *pWndBase )
    {
    return CWndNeuz::OnCommand( nID, dwMessage, pWndBase );
    }


    HRESULT CWndJobChangeEx::RestoreDeviceObjects()
    {
    CWndNeuz::RestoreDeviceObjects();
    return S_OK;
    }
    HRESULT CWndJobChangeEx::InvalidateDeviceObjects()
    {
    CWndNeuz::InvalidateDeviceObjects();
    return S_OK;
    }
    HRESULT CWndJobChangeEx::DeleteDeviceObjects()
    {
    CWndNeuz::DeleteDeviceObjects();
    InvalidateDeviceObjects();
    return S_OK;
    }


  2. #2
    Member cffazot is offline
    MemberRank
    Mar 2012 Join Date
    53Posts

    Re: [Help] Quickjob change window source.

    Quote Originally Posted by Nanobyte View Post
    'added' ... to the world-server and neuz
    You get these errors because Neuz is not WorldServer. I know this sound silly but that's all it is.
    'DPClient.h' and 'CWndNeuz' are both used by Neuz (a.k.a the client application, NOT the world server)

    Just think about it. These interface components are client-sided only (i.e. only Neuz will use them) so why on earth would a world server need these? All you need to do is add them to the _Interface folder by right-clicking it adding an existing item.

    Remove these files from your world server, you only had to do this for your Neuz.
    Last edited by cffazot; 26-03-13 at 07:42 PM.

  3. #3
    Novice Nanobyte is offline
    MemberRank
    Mar 2013 Join Date
    4Posts

    Re: [Help] Quickjob change window source.

    Quote Originally Posted by cffazot View Post
    You get these errors because Neuz is not WorldServer. I know this sound silly but that's all it is.
    'DPClient.h' and 'CWndNeuz' are both used by Neuz (a.k.a the client application, NOT the world server)

    Just think about it. These interface components are client-sided only (i.e. only Neuz will use them) so why on earth would a world server need these? All you need to do is add them to the _Interface folder by right-clicking it adding an existing item.

    Remove these files from your world server, you only had to do this for your Neuz.
    Thanks i had a feeling i was doing something stupid xD. But hey, mistakes make you pay more attention, Thanks again man.



Advertisement