- Joined
- Mar 25, 2013
- Messages
- 4
- Reaction score
- 0
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.
Heres the "WndChangeJobEx.h"
Heres the "WndChangeJobEx.cpp"
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.
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'
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"
//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
#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"
//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:
eleteDeviceObjects()
{
CWndNeuz:
eleteDeviceObjects();
InvalidateDeviceObjects();
return S_OK;
}
#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:
{
CWndNeuz:
InvalidateDeviceObjects();
return S_OK;
}

