- A working source
- A brain
- VS 2003 + SP1
So, lets start:
Code:
Small note: Steps 1, 2, 3, 4 & 5 are in the file MoverParam.cpp. Step 6 is in the file DPDatabaseClient.cpp.
Find
and comment everything.
PHP Code:
else if( IsMaster() && m_nLevel > MAX_GENERAL_LEVEL )
{
m_nLevel = MAX_GENERAL_LEVEL;
bLevelUp = FALSE;
m_nExp1 = (prj.m_aExpCharacter[nNextLevel].nExp1 - 1);
nExptmp = 0;
return FALSE;
}
else if( IsHero() && (m_nLevel > MAX_LEGEND_LEVEL ) )
{
m_nLevel = MAX_LEGEND_LEVEL;
bLevelUp = FALSE;
m_nExp1 = (prj.m_aExpCharacter[nNextLevel].nExp1 - 1);
nExptmp = 0;
return FALSE;
}
else if( IsLegendHero() && (m_nLevel > MAX_3RD_LEGEND_LEVEL ) )
{
m_nLevel = MAX_3RD_LEGEND_LEVEL;
bLevelUp = FALSE;
m_nExp1 = (prj.m_aExpCharacter[nNextLevel].nExp1 - 1);
nExptmp = 0;
return FALSE;
}
Step 2:
find this:
just below write this:
PHP Code:
if( m_nExp1 >= prj.m_aExpCharacter[nNextLevel].nExp1 )
PHP Code:
bool bChangeJob = false;
Step 3:
change
to
PHP Code:
if( IsHero() && ( nNextLevel > MAX_LEGEND_LEVEL ) )
{
m_nLevel = MAX_LEGEND_LEVEL;
m_nExp1 = (prj.m_aExpCharacter[nNextLevel].nExp1 - 1);
return FALSE;
}
else if( IsLegendHero() && nNextLevel > MAX_3RD_LEGEND_LEVEL )
{
m_nLevel = MAX_3RD_LEGEND_LEVEL;
m_nExp1 = (prj.m_aExpCharacter[nNextLevel].nExp1 - 1);
return FALSE;
}
else if( !IsHero() && !IsLegendHero() && nNextLevel > MAX_GENERAL_LEVEL )
{
m_nLevel = MAX_GENERAL_LEVEL;
m_nExp1 = (prj.m_aExpCharacter[nNextLevel].nExp1 - 1);
return FALSE;
bChangeJob = true;
}
PHP Code:
if( IsHero() && ( nNextLevel > MAX_LEGEND_LEVEL ) )
{
bChangeJob = true;
}
else if( IsLegendHero() && nNextLevel > MAX_3RD_LEGEND_LEVEL )
{
m_nLevel = MAX_3RD_LEGEND_LEVEL;
m_nExp1 = (prj.m_aExpCharacter[nNextLevel].nExp1 - 1);
return FALSE;
}
else if( !IsHero() && !IsLegendHero() && nNextLevel > MAX_GENERAL_LEVEL )
{
bChangeJob = true;
}
Step 4:
find & edit
to
PHP Code:
m_nFatiguePoint = GetMaxFatiguePoint();
SetJobLevel( m_nLevel, m_nJob );
PHP Code:
m_nFatiguePoint = GetMaxFatiguePoint();
if ( bChangeJob )
{
if ( IsMaster() )
SetJobLevel( m_nLevel, m_nJob+8 );
else if ( IsHero() )
SetJobLevel( m_nLevel, m_nJob+8 );
else
SetJobLevel( 60, m_nJob+10 );
}
else
SetJobLevel( m_nLevel, m_nJob );
Step 5:
Find
and add this above:
PHP Code:
if( m_nDeathLevel < m_nLevel )
{
int nGetPoint = ((GetLevel() - 1) / 20) + 2;
PHP Code:
if ( bChangeJob )
{
LPSKILL pSkill = NULL;
ItemProp* pSkillProp = NULL;
CUser* pUser = (CUser*)this;
CMover* pMover = (CMover*)this;
if ( pMover->IsHero() || pMover->IsMaster() )
{
if ( m_nJob >= 29 && m_nJob <= 30 )
{
CItemElem itemElem;
if ( m_nJob == 29 )
itemElem.m_dwItemId = II_ARM_ARM_SHI_ZEMBATO;// II_ARM_ARM_SHI_ZEMBATO
if ( m_nJob == 30 )
itemElem.m_dwItemId = II_WEA_BOOK_BOKROMAIN;// II_WEA_BOOK_BOKROMAIN
itemElem.m_nItemNum = 1;
pUser->CreateItem( &itemElem );
}
if (pMover->IsHero())
pUser->InitLevel( m_nJob+8, 121 );
else
pUser->InitLevel( m_nJob+8, 60 );
}
else
{
pUser->InitLevel( m_nJob+10, 60 );
}
for( int i = 0; i < MAX_SKILL_JOB; i++ )
{
pSkill = &(pUser->m_aJobSkill[i]);
if( pSkill == NULL || pSkill->dwSkill == 0xffffffff )
continue;
pSkillProp = prj.GetSkillProp( pSkill->dwSkill );
if( pSkillProp == NULL )
continue;
pSkill->dwLevel = pSkillProp->dwExpertMax;
if ( pUser->IsMaster() )
{
if( pSkill->GetProp()->dwItemKind1 != JTYPE_HERO && pSkill->GetProp()->dwItemKind1 != JTYPE_MASTER)
pUser->AddSetSkill( pSkill->dwSkill, pSkill->dwLevel );
}
else
{
if( pSkill->GetProp()->dwItemKind1 != JTYPE_HERO)
pUser->AddSetSkill( pSkill->dwSkill, pSkill->dwLevel );
}
}
pUser->AddSkillPoint( pUser->m_nSkillPoint * -1 );
}
Step 6:
Search for:
Add above:
PHP Code:
#ifdef __ON_ERROR
}
catch( ... )
{
WriteLog( "OnJoin(): %s, %d", pUser->GetName(), nOnError );
}
#endif // __ON_ERROR
PHP Code:
if ( (pUser->IsMaster() || pUser->IsHero() || !pUser->IsMaster() && !pUser->IsHero() && !pUser->IsLegendHero() && pUser->GetLevel() == MAX_GENERAL_LEVEL) &&
pUser->GetExpPercent() == 9999 )
{
LPSKILL pSkill = NULL;
ItemProp* pSkillProp = NULL;
if ( pUser->GetJob() >= 29 && pUser->GetJob() <= 30 )
{
CItemElem itemElem;
if ( pUser->GetJob() == 29 )
itemElem.m_dwItemId = II_ARM_ARM_SHI_ZEMBATO;// II_ARM_ARM_SHI_ZEMBATO
if ( pUser->GetJob() == 30 )
itemElem.m_dwItemId = II_WEA_BOOK_BOKROMAIN;// II_WEA_BOOK_BOKROMAIN
itemElem.m_nItemNum = 1;
pUser->CreateItem( &itemElem );
}
if ( pUser->IsMaster() || pUser->IsHero() )
pUser->InitLevel( pUser->GetJob()+8, pUser->GetLevel()+1 );
else
pUser->InitLevel( pUser->GetJob()+10, 60 );
for( int i = 0; i < MAX_SKILL_JOB; i++ )
{
pSkill = &(pUser->m_aJobSkill[i]);
if( pSkill == NULL || pSkill->dwSkill == 0xffffffff )
continue;
pSkillProp = prj.GetSkillProp( pSkill->dwSkill );
if( pSkillProp == NULL )
continue;
pSkill->dwLevel = pSkillProp->dwExpertMax;
if ( pUser->IsMaster() )
{
if( pSkill->GetProp()->dwItemKind1 != JTYPE_HERO && pSkill->GetProp()->dwItemKind1 != JTYPE_MASTER)
pUser->AddSetSkill( pSkill->dwSkill, pSkill->dwLevel );
}
else
{
if( pSkill->GetProp()->dwItemKind1 != JTYPE_HERO)
pUser->AddSetSkill( pSkill->dwSkill, pSkill->dwLevel );
}
}
pUser->AddSkillPoint( pUser->m_nSkillPoint * -1 );
}