- Joined
- May 13, 2011
- Messages
- 1,497
- Reaction score
- 157
Hi Ragezoners.
Well its time for me to release an rebirth system that is non bugged.
This system will also use the m_nCampusPoint field in the database.
This one is an bit different then the most i encountered.
Feel free to leave any comments on it.
@Credits
blessed flyff and akerius
Re-stat Function
me.
Neuz\VersionCommon.h and WorldServer\VersionCommon.h
_Interface\FuncTextCmd.cpp
_Interface\WndField.cpp
Add
_Common\Mover.cpp
_Common\Mover.h
Well if you now use /rebirth in the chat system you will are back to level 60M and you can level again. As you may noticed is that in Mover.cpp you have the ability to set the Remain stat points.
For example
In my source with level cap 150 i have an max level 388 Stat Points
No with Rebirth 1 you have 388+60 = 448 Stat points and so on.
Now you need this to.
_Common\Mover.cpp
Replace your void CMover::ReState()
with this one
This function will allow to save the stat points. Other wise when restatting you will be losing the extra stat points you where gaining when using the rebirth.
So if you want to have higher stats just change the values in Mover.cpp at m_nRemainGP.
Have fun with it.
With kind regards.
Well its time for me to release an rebirth system that is non bugged.
This system will also use the m_nCampusPoint field in the database.
This one is an bit different then the most i encountered.
Feel free to leave any comments on it.
@Credits
blessed flyff and akerius
Re-stat Function
me.
Neuz\VersionCommon.h and WorldServer\VersionCommon.h
#define __REBIRTH
_Interface\FuncTextCmd.cpp
Beneath
BOOL TextCmd_ClearPropose( CScanner & s )
{
#ifdef __WORLDSERVER
CUser* pUser = (CUser*)s.dwValue;
g_dpDBClient.SendClearPropose();
#endif // __WORLDSERVER
return TRUE;
}
Add
#ifdef __REBIRTH
BOOL TextCmd_rebirth( CScanner& scanner )
{
#ifdef __WORLDSERVER
CUser *pUser;
pUser = (CUser*)scanner.dwValue;
if(pUser->m_nCampusPoint >= 5)
{
pUser->AddText("You have already max rebirths!");
}
else if(pUser->m_nLevel >= 149 && pUser->IsLegendHero())
{
pUser->InitLevelRebirth( pUser->m_nJob-16,60);
}
else
pUser->AddText("You do not have the right level for a Rebirth!");
#endif
return TRUE;
}
#endif
#ifdef __REBIRTH
ON_TEXTCMDFUNC( TextCmd_rebirth, "rebirth", "rebirth", "ÅÚ·¹Æ÷Æ®", "ÅÚ·¹", TCM_SERVER, AUTH_GENERAL , "ÅÚ·¹Æ÷Æ®" )
#endif
BOOL TextCmd_ClearPropose( CScanner & s )
{
#ifdef __WORLDSERVER
CUser* pUser = (CUser*)s.dwValue;
g_dpDBClient.SendClearPropose();
#endif // __WORLDSERVER
return TRUE;
}
Add
#ifdef __REBIRTH
BOOL TextCmd_rebirth( CScanner& scanner )
{
#ifdef __WORLDSERVER
CUser *pUser;
pUser = (CUser*)scanner.dwValue;
if(pUser->m_nCampusPoint >= 5)
{
pUser->AddText("You have already max rebirths!");
}
else if(pUser->m_nLevel >= 149 && pUser->IsLegendHero())
{
pUser->InitLevelRebirth( pUser->m_nJob-16,60);
}
else
pUser->AddText("You do not have the right level for a Rebirth!");
#endif
return TRUE;
}
#endif
#ifdef __REBIRTH
ON_TEXTCMDFUNC( TextCmd_rebirth, "rebirth", "rebirth", "ÅÚ·¹Æ÷Æ®", "ÅÚ·¹", TCM_SERVER, AUTH_GENERAL , "ÅÚ·¹Æ÷Æ®" )
#endif
_Interface\WndField.cpp
Under
#ifdef __3RD_LEGEND16
else if(checkhero == LEGEND_CLASS_LEGENDHERO && m_nCampusPoint == 0) //¿µ¿õÀÏ °æ¿ì.
{
if(g_pPlayer->m_nLevel >= 130 && g_pPlayer->m_nLevel < 176 )
strPath = MakePath( DIR_ICON, "Legend_Mark.png");
pTexture = CWndBase::m_textureMng.AddTexture( g_Neuz.m_pd3dDevice, strPath, 0xfff0000f );
if(pTexture != NULL)
pTexture->Render( p2DRender, point );
}
#endif
#ifdef __3RD_LEGEND16
else if(checkhero == LEGEND_CLASS_LEGENDHERO && m_nCampusPoint == 0) //¿µ¿õÀÏ °æ¿ì.
{
if(g_pPlayer->m_nLevel >= 130 && g_pPlayer->m_nLevel < 176 )
strPath = MakePath( DIR_ICON, "Legend_Mark.png");
pTexture = CWndBase::m_textureMng.AddTexture( g_Neuz.m_pd3dDevice, strPath, 0xfff0000f );
if(pTexture != NULL)
pTexture->Render( p2DRender, point );
}
#endif
Add
int m_nCampusPoint;
#ifdef __REBIRTH
else if(m_nCampusPoint == 1)
{
strPath = MakePath( DIR_ICON, "Rebirth1.png");
pTexture = CWndBase::m_textureMng.AddTexture( g_Neuz.m_pd3dDevice, strPath, 0xffff00ff );
//pTexture = g_Neuz.m_pHeroIcon;
if(pTexture != NULL)
{
point.y -= pTexture->m_size.cy + 5;
pTexture->Render( &g_Neuz.m_2DRender, point );
}
}
else if(m_nCampusPoint == 2)
{
strPath = MakePath( DIR_ICON, "Rebirth2.png");
pTexture = CWndBase::m_textureMng.AddTexture( g_Neuz.m_pd3dDevice, strPath, 0xffff00ff );
//pTexture = g_Neuz.m_pHeroIcon;
if(pTexture != NULL)
{
point.y -= pTexture->m_size.cy + 5;
pTexture->Render( &g_Neuz.m_2DRender, point );
}
}
else if(m_nCampusPoint == 3)
{
strPath = MakePath( DIR_ICON, "Rebirth3.png");
pTexture = CWndBase::m_textureMng.AddTexture( g_Neuz.m_pd3dDevice, strPath, 0xffff00ff );
//pTexture = g_Neuz.m_pHeroIcon;
if(pTexture != NULL)
{
point.y -= pTexture->m_size.cy + 5;
pTexture->Render( &g_Neuz.m_2DRender, point );
}
}
else if(m_nCampusPoint == 4)
{
strPath = MakePath( DIR_ICON, "Rebirth4.png");
pTexture = CWndBase::m_textureMng.AddTexture( g_Neuz.m_pd3dDevice, strPath, 0xffff00ff );
//pTexture = g_Neuz.m_pHeroIcon;
if(pTexture != NULL)
{
point.y -= pTexture->m_size.cy + 5;
pTexture->Render( &g_Neuz.m_2DRender, point );
}
}
else if(m_nCampusPoint >= 5)
{
strPath = MakePath( DIR_ICON, "Rebirth5.png");
pTexture = CWndBase::m_textureMng.AddTexture( g_Neuz.m_pd3dDevice, strPath, 0xffff00ff );
//pTexture = g_Neuz.m_pHeroIcon;
if(pTexture != NULL)
{
point.y -= pTexture->m_size.cy + 5;
pTexture->Render( &g_Neuz.m_2DRender, point );
}
}
#endif //__REBIRTH
#ifdef __REBIRTH
else if(m_nCampusPoint == 1)
{
strPath = MakePath( DIR_ICON, "Rebirth1.png");
pTexture = CWndBase::m_textureMng.AddTexture( g_Neuz.m_pd3dDevice, strPath, 0xffff00ff );
//pTexture = g_Neuz.m_pHeroIcon;
if(pTexture != NULL)
{
point.y -= pTexture->m_size.cy + 5;
pTexture->Render( &g_Neuz.m_2DRender, point );
}
}
else if(m_nCampusPoint == 2)
{
strPath = MakePath( DIR_ICON, "Rebirth2.png");
pTexture = CWndBase::m_textureMng.AddTexture( g_Neuz.m_pd3dDevice, strPath, 0xffff00ff );
//pTexture = g_Neuz.m_pHeroIcon;
if(pTexture != NULL)
{
point.y -= pTexture->m_size.cy + 5;
pTexture->Render( &g_Neuz.m_2DRender, point );
}
}
else if(m_nCampusPoint == 3)
{
strPath = MakePath( DIR_ICON, "Rebirth3.png");
pTexture = CWndBase::m_textureMng.AddTexture( g_Neuz.m_pd3dDevice, strPath, 0xffff00ff );
//pTexture = g_Neuz.m_pHeroIcon;
if(pTexture != NULL)
{
point.y -= pTexture->m_size.cy + 5;
pTexture->Render( &g_Neuz.m_2DRender, point );
}
}
else if(m_nCampusPoint == 4)
{
strPath = MakePath( DIR_ICON, "Rebirth4.png");
pTexture = CWndBase::m_textureMng.AddTexture( g_Neuz.m_pd3dDevice, strPath, 0xffff00ff );
//pTexture = g_Neuz.m_pHeroIcon;
if(pTexture != NULL)
{
point.y -= pTexture->m_size.cy + 5;
pTexture->Render( &g_Neuz.m_2DRender, point );
}
}
else if(m_nCampusPoint >= 5)
{
strPath = MakePath( DIR_ICON, "Rebirth5.png");
pTexture = CWndBase::m_textureMng.AddTexture( g_Neuz.m_pd3dDevice, strPath, 0xffff00ff );
//pTexture = g_Neuz.m_pHeroIcon;
if(pTexture != NULL)
{
point.y -= pTexture->m_size.cy + 5;
pTexture->Render( &g_Neuz.m_2DRender, point );
}
}
#endif //__REBIRTH
_Common\Mover.cpp
#ifdef __REBIRTH
void CMover::InitLevelRebirth( int nJob, LONG nLevel, BOOL bGamma )
{
#ifdef __WORLDSERVER
// ¿î¿µÀÚ ¸í·ÉÀ¸·Î ·¹º§¾÷ Çϴ°÷ÀÓ
MoverProp* pProp = GetProp();
if( pProp )
{
if( nJob > 0 && nJob < MAX_LEGEND_HERO )
{
AddChangeJob( nJob );
}else{
return;
}
int nPoint = 0;
if( m_nJob == JOB_MERCENARY )
nPoint += 40;
else if( m_nJob == JOB_ACROBAT )
nPoint += 50;
else if( m_nJob == JOB_ASSIST )
nPoint += 60;
else if( m_nJob == JOB_MAGICIAN )
nPoint += 90;
else if( m_nJob == JOB_KNIGHT || m_nJob == JOB_BLADE )
nPoint += 120;
else if( m_nJob == JOB_JESTER || m_nJob == JOB_RANGER )
nPoint += 150;
else if( m_nJob == JOB_RINGMASTER )
nPoint += 160;
else if( m_nJob == JOB_BILLPOSTER || m_nJob == JOB_PSYCHIKEEPER )
nPoint += 180;
else if( m_nJob == JOB_ELEMENTOR )
nPoint += 390;
else if( nJob == JOB_LORDTEMPLER_HERO || nJob == JOB_STORMBLADE_HERO )
nPoint += 120;
else if( nJob == JOB_WINDLURKER_HERO || nJob == JOB_CRACKSHOOTER_HERO )
nPoint += 150;
else if( nJob == JOB_FLORIST_HERO )
nPoint += 160;
else if( nJob == JOB_FORCEMASTER_HERO || nJob == JOB_MENTALIST_HERO )
nPoint += 180;
else if( nJob == JOB_ELEMENTORLORD_HERO )
nPoint += 390;
AddSkillPoint( nPoint );
m_nLevel = nLevel;
SetJobLevel( nLevel, nJob );
m_nDeathLevel = nLevel;
#if __VER >= 10 // __LEGEND // 10Â÷ Àü½Â½Ã½ºÅÛ Neuz, World, Trans
if(IsMaster())
{
int dwTmpSkLevel = 1;//60, 72, 84, 96, 108
if( nLevel > 59 && nLevel < 72 )
dwTmpSkLevel = 1;
else if( nLevel > 71 && nLevel < 84 )
dwTmpSkLevel = 2;
else if( nLevel > 83 && nLevel < 96 )
dwTmpSkLevel = 3;
else if( nLevel > 95 && nLevel < 108 )
dwTmpSkLevel = 4;
else if( nLevel > 107 && nLevel < 120 )
dwTmpSkLevel = 5;
for( int i = 0; i < MAX_SKILL_JOB; i++ )
{
LPSKILL lpSkill = &(m_aJobSkill);
if( lpSkill && lpSkill->dwSkill != NULL_ID )
{
ItemProp* pSkillProp = prj.GetSkillProp( lpSkill->dwSkill );
if( pSkillProp == NULL )
continue;
if( pSkillProp->dwItemKind1 != JTYPE_MASTER)
continue;
lpSkill->dwLevel = dwTmpSkLevel;
}
}
}
else if(IsHero())
{
for( int i = 0; i < MAX_SKILL_JOB; i++ )
{
LPSKILL lpSkill = &(m_aJobSkill);
if( lpSkill && lpSkill->dwSkill != NULL_ID )
{
ItemProp* pSkillProp = prj.GetSkillProp( lpSkill->dwSkill );
if( pSkillProp == NULL )
continue;
if( pSkillProp->dwItemKind1 != JTYPE_MASTER)
continue;
lpSkill->dwLevel = 5;
}
}
}
else if(IsLegendHero())
{
for( int i = 0; i < MAX_SKILL_JOB; i++ )
{
LPSKILL lpSkill = &(m_aJobSkill);
if( lpSkill && lpSkill->dwSkill != NULL_ID )
{
ItemProp* pSkillProp = prj.GetSkillProp( lpSkill->dwSkill );
if( pSkillProp == NULL )
continue;
if( pSkillProp->dwItemKind1 != JTYPE_MASTER)
continue;
lpSkill->dwLevel = 5;
}
}
}
#endif // __LEGEND // 10Â÷ Àü½Â½Ã½ºÅÛ Neuz, World, Trans
if( bGamma )
{
m_nExp1 = 0;
}
( (CUser*)this )->AddSetChangeJob( nJob );
g_UserMng.AddNearSetChangeJob( this, nJob, &((CUser*)this)->m_aJobSkill[MAX_JOB_SKILL] );
#if __VER >= 11 // __SYS_PLAYER_DATA
g_dpDBClient.SendUpdatePlayerData( (CUser*)this );
#else // __SYS_PLAYER_DATA
g_DPCoreClient.SendPartyMemberJob( (CUser*)this );
g_DPCoreClient.SendFriendChangeJob( (CUser*)this );
if( m_idGuild != 0 )
g_DPCoreClient.SendGuildChangeJobLevel( (CUser*)this );
#endif // __SYS_PLAYER_DATA
SetHitPoint( GetMaxHitPoint() );
SetManaPoint( GetMaxManaPoint() );
SetFatiguePoint( GetMaxFatiguePoint() );
m_nCampusPoint = m_nCampusPoint + 1;
if( nJob >= 1 && nJob <= 4 )
{
m_nStr = m_nSta = m_nDex = m_nInt = 15;
m_nRemainGP = 28;
}
if( nJob >= MAX_PROFESSIONAL && nJob < MAX_MASTER )
{
if ( m_nRemainGP >0)
m_nRemainGP = 0;
if (m_nCampusPoint == 1)
{
m_nRemainGP = 60;
goto end;
}
else if (m_nCampusPoint == 2)
{
m_nRemainGP = 100;
goto end;
}
else if (m_nCampusPoint == 3)
{
m_nRemainGP = 200;
goto end;
}
else if (m_nCampusPoint == 4)
{
m_nRemainGP = 300;
goto end;
}
else if (m_nCampusPoint >= 5)
{
m_nRemainGP = 400;
goto end;
}
}
end:;
m_nStr = m_nSta = m_nDex = m_nInt = 50;
g_UserMng.AddSetLevel( this, (WORD)m_nLevel );
( (CUser*)this )->AddSetGrowthLearningPoint( m_nRemainGP );
( (CUser*)this )->AddSetExperience( GetExp1(), (WORD)m_nLevel, m_nSkillPoint, m_nSkillLevel, m_nCampusPoint );
/*( (CUser*)this )->m_playTaskBar.InitTaskBarShorcutKind( SHORTCUT_SKILL );
( (CUser*)this )->AddTaskBar();*/
( (CUser*)this )->AddSetState( m_nStr, m_nSta, m_nDex, m_nInt, m_nRemainGP );
#if __VER >= 13 // __HONORABLE_TITLE // ´ÞÀÎ
((CUser*)this)->CheckHonorStat();
((CUser*)this)->AddHonorListAck();
g_UserMng.AddHonorTitleChange( this, m_nHonor);
#endif // __HONORABLE_TITLE // ´ÞÀÎ
}
#endif // __WORLDSERVER
}
#endif
void CMover::InitLevelRebirth( int nJob, LONG nLevel, BOOL bGamma )
{
#ifdef __WORLDSERVER
// ¿î¿µÀÚ ¸í·ÉÀ¸·Î ·¹º§¾÷ Çϴ°÷ÀÓ
MoverProp* pProp = GetProp();
if( pProp )
{
if( nJob > 0 && nJob < MAX_LEGEND_HERO )
{
AddChangeJob( nJob );
}else{
return;
}
int nPoint = 0;
if( m_nJob == JOB_MERCENARY )
nPoint += 40;
else if( m_nJob == JOB_ACROBAT )
nPoint += 50;
else if( m_nJob == JOB_ASSIST )
nPoint += 60;
else if( m_nJob == JOB_MAGICIAN )
nPoint += 90;
else if( m_nJob == JOB_KNIGHT || m_nJob == JOB_BLADE )
nPoint += 120;
else if( m_nJob == JOB_JESTER || m_nJob == JOB_RANGER )
nPoint += 150;
else if( m_nJob == JOB_RINGMASTER )
nPoint += 160;
else if( m_nJob == JOB_BILLPOSTER || m_nJob == JOB_PSYCHIKEEPER )
nPoint += 180;
else if( m_nJob == JOB_ELEMENTOR )
nPoint += 390;
else if( nJob == JOB_LORDTEMPLER_HERO || nJob == JOB_STORMBLADE_HERO )
nPoint += 120;
else if( nJob == JOB_WINDLURKER_HERO || nJob == JOB_CRACKSHOOTER_HERO )
nPoint += 150;
else if( nJob == JOB_FLORIST_HERO )
nPoint += 160;
else if( nJob == JOB_FORCEMASTER_HERO || nJob == JOB_MENTALIST_HERO )
nPoint += 180;
else if( nJob == JOB_ELEMENTORLORD_HERO )
nPoint += 390;
AddSkillPoint( nPoint );
m_nLevel = nLevel;
SetJobLevel( nLevel, nJob );
m_nDeathLevel = nLevel;
#if __VER >= 10 // __LEGEND // 10Â÷ Àü½Â½Ã½ºÅÛ Neuz, World, Trans
if(IsMaster())
{
int dwTmpSkLevel = 1;//60, 72, 84, 96, 108
if( nLevel > 59 && nLevel < 72 )
dwTmpSkLevel = 1;
else if( nLevel > 71 && nLevel < 84 )
dwTmpSkLevel = 2;
else if( nLevel > 83 && nLevel < 96 )
dwTmpSkLevel = 3;
else if( nLevel > 95 && nLevel < 108 )
dwTmpSkLevel = 4;
else if( nLevel > 107 && nLevel < 120 )
dwTmpSkLevel = 5;
for( int i = 0; i < MAX_SKILL_JOB; i++ )
{
LPSKILL lpSkill = &(m_aJobSkill);
if( lpSkill && lpSkill->dwSkill != NULL_ID )
{
ItemProp* pSkillProp = prj.GetSkillProp( lpSkill->dwSkill );
if( pSkillProp == NULL )
continue;
if( pSkillProp->dwItemKind1 != JTYPE_MASTER)
continue;
lpSkill->dwLevel = dwTmpSkLevel;
}
}
}
else if(IsHero())
{
for( int i = 0; i < MAX_SKILL_JOB; i++ )
{
LPSKILL lpSkill = &(m_aJobSkill);
if( lpSkill && lpSkill->dwSkill != NULL_ID )
{
ItemProp* pSkillProp = prj.GetSkillProp( lpSkill->dwSkill );
if( pSkillProp == NULL )
continue;
if( pSkillProp->dwItemKind1 != JTYPE_MASTER)
continue;
lpSkill->dwLevel = 5;
}
}
}
else if(IsLegendHero())
{
for( int i = 0; i < MAX_SKILL_JOB; i++ )
{
LPSKILL lpSkill = &(m_aJobSkill);
if( lpSkill && lpSkill->dwSkill != NULL_ID )
{
ItemProp* pSkillProp = prj.GetSkillProp( lpSkill->dwSkill );
if( pSkillProp == NULL )
continue;
if( pSkillProp->dwItemKind1 != JTYPE_MASTER)
continue;
lpSkill->dwLevel = 5;
}
}
}
#endif // __LEGEND // 10Â÷ Àü½Â½Ã½ºÅÛ Neuz, World, Trans
if( bGamma )
{
m_nExp1 = 0;
}
( (CUser*)this )->AddSetChangeJob( nJob );
g_UserMng.AddNearSetChangeJob( this, nJob, &((CUser*)this)->m_aJobSkill[MAX_JOB_SKILL] );
#if __VER >= 11 // __SYS_PLAYER_DATA
g_dpDBClient.SendUpdatePlayerData( (CUser*)this );
#else // __SYS_PLAYER_DATA
g_DPCoreClient.SendPartyMemberJob( (CUser*)this );
g_DPCoreClient.SendFriendChangeJob( (CUser*)this );
if( m_idGuild != 0 )
g_DPCoreClient.SendGuildChangeJobLevel( (CUser*)this );
#endif // __SYS_PLAYER_DATA
SetHitPoint( GetMaxHitPoint() );
SetManaPoint( GetMaxManaPoint() );
SetFatiguePoint( GetMaxFatiguePoint() );
m_nCampusPoint = m_nCampusPoint + 1;
if( nJob >= 1 && nJob <= 4 )
{
m_nStr = m_nSta = m_nDex = m_nInt = 15;
m_nRemainGP = 28;
}
if( nJob >= MAX_PROFESSIONAL && nJob < MAX_MASTER )
{
if ( m_nRemainGP >0)
m_nRemainGP = 0;
if (m_nCampusPoint == 1)
{
m_nRemainGP = 60;
goto end;
}
else if (m_nCampusPoint == 2)
{
m_nRemainGP = 100;
goto end;
}
else if (m_nCampusPoint == 3)
{
m_nRemainGP = 200;
goto end;
}
else if (m_nCampusPoint == 4)
{
m_nRemainGP = 300;
goto end;
}
else if (m_nCampusPoint >= 5)
{
m_nRemainGP = 400;
goto end;
}
}
end:;
m_nStr = m_nSta = m_nDex = m_nInt = 50;
g_UserMng.AddSetLevel( this, (WORD)m_nLevel );
( (CUser*)this )->AddSetGrowthLearningPoint( m_nRemainGP );
( (CUser*)this )->AddSetExperience( GetExp1(), (WORD)m_nLevel, m_nSkillPoint, m_nSkillLevel, m_nCampusPoint );
/*( (CUser*)this )->m_playTaskBar.InitTaskBarShorcutKind( SHORTCUT_SKILL );
( (CUser*)this )->AddTaskBar();*/
( (CUser*)this )->AddSetState( m_nStr, m_nSta, m_nDex, m_nInt, m_nRemainGP );
#if __VER >= 13 // __HONORABLE_TITLE // ´ÞÀÎ
((CUser*)this)->CheckHonorStat();
((CUser*)this)->AddHonorListAck();
g_UserMng.AddHonorTitleChange( this, m_nHonor);
#endif // __HONORABLE_TITLE // ´ÞÀÎ
}
#endif // __WORLDSERVER
}
#endif
_Common\Mover.h
#ifdef __REBIRTH
void InitLevelRebirth( int nJob, LONG nLevel, BOOL bGamma = TRUE ) ;
#endif
void InitLevelRebirth( int nJob, LONG nLevel, BOOL bGamma = TRUE ) ;
#endif
Well if you now use /rebirth in the chat system you will are back to level 60M and you can level again. As you may noticed is that in Mover.cpp you have the ability to set the Remain stat points.
if (m_nCampusPoint == 1)
{
m_nRemainGP = 60;
goto end;
}
else if (m_nCampusPoint == 2)
{
m_nRemainGP = 100;
goto end;
}
else if (m_nCampusPoint == 3)
{
m_nRemainGP = 200;
goto end;
}
else if (m_nCampusPoint == 4)
{
m_nRemainGP = 300;
goto end;
}
else if (m_nCampusPoint >= 5)
{
m_nRemainGP = 400;
goto end;
}
{
m_nRemainGP = 60;
goto end;
}
else if (m_nCampusPoint == 2)
{
m_nRemainGP = 100;
goto end;
}
else if (m_nCampusPoint == 3)
{
m_nRemainGP = 200;
goto end;
}
else if (m_nCampusPoint == 4)
{
m_nRemainGP = 300;
goto end;
}
else if (m_nCampusPoint >= 5)
{
m_nRemainGP = 400;
goto end;
}
For example
In my source with level cap 150 i have an max level 388 Stat Points
No with Rebirth 1 you have 388+60 = 448 Stat points and so on.
Now you need this to.
_Common\Mover.cpp
Replace your void CMover::ReState()
with this one
void CMover::ReState()
{
#ifdef __WORLDSERVER
if( ((CUser*)this)->GetLevel() >= 60 && ((CUser*)this)->GetJob() >= 16 )
{
if(m_nCampusPoint == 1)
{
m_nRemainGP = ( ( ( ( ((CUser*)this)->GetLevel() * 3 ) +60 ) -59 ) -3 ); //448 Points an max level
}
else if(m_nCampusPoint == 2)
{
m_nRemainGP = ( ( ( ( ((CUser*)this)->GetLevel() * 3 ) +100 ) -59 ) -3 ); //488 Points an max level
}
else if(m_nCampusPoint == 3)
{
m_nRemainGP = ( ( ( ( ((CUser*)this)->GetLevel() * 3 ) +200 ) -59 ) -3 ); //588 Points an max level
}
else if(m_nCampusPoint == 4)
{
m_nRemainGP = ( ( ( ( ((CUser*)this)->GetLevel() * 3 ) +300 ) -59 ) -3 ); //688 Points an max level
}
else if(m_nCampusPoint == 5)
{
m_nRemainGP = ( ( ( ( ((CUser*)this)->GetLevel() * 3 ) +400 ) -59 ) -3 ); //788 Points an max level
}
else
{
m_nRemainGP = ( ( ( ((CUser*)this)->GetLevel() * 3 ) - 59 ) - 3 );
}
}
else
{
m_nRemainGP = ( ( ((CUser*)this)->GetLevel() * 2) - 2 );
}
m_nStr = 15;
m_nSta = 15;
m_nDex = 15;
m_nInt = 15;
SetHitPoint( GetMaxHitPoint() );
SetManaPoint( GetMaxManaPoint() );
SetFatiguePoint( GetMaxFatiguePoint() );
((CUser*)this)->AddSetState( m_nStr, m_nSta, m_nDex, m_nInt, m_nRemainGP );
#if __VER >= 13 // __HONORABLE_TITLE // ´ÞÀÎ
((CUser*)this)->CheckHonorStat();
((CUser*)this)->AddHonorListAck();
g_UserMng.AddHonorTitleChange( this, m_nHonor);
#endif // __HONORABLE_TITLE // ´ÞÀÎ
#endif // __WORLDSERVER
}
{
#ifdef __WORLDSERVER
if( ((CUser*)this)->GetLevel() >= 60 && ((CUser*)this)->GetJob() >= 16 )
{
if(m_nCampusPoint == 1)
{
m_nRemainGP = ( ( ( ( ((CUser*)this)->GetLevel() * 3 ) +60 ) -59 ) -3 ); //448 Points an max level
}
else if(m_nCampusPoint == 2)
{
m_nRemainGP = ( ( ( ( ((CUser*)this)->GetLevel() * 3 ) +100 ) -59 ) -3 ); //488 Points an max level
}
else if(m_nCampusPoint == 3)
{
m_nRemainGP = ( ( ( ( ((CUser*)this)->GetLevel() * 3 ) +200 ) -59 ) -3 ); //588 Points an max level
}
else if(m_nCampusPoint == 4)
{
m_nRemainGP = ( ( ( ( ((CUser*)this)->GetLevel() * 3 ) +300 ) -59 ) -3 ); //688 Points an max level
}
else if(m_nCampusPoint == 5)
{
m_nRemainGP = ( ( ( ( ((CUser*)this)->GetLevel() * 3 ) +400 ) -59 ) -3 ); //788 Points an max level
}
else
{
m_nRemainGP = ( ( ( ((CUser*)this)->GetLevel() * 3 ) - 59 ) - 3 );
}
}
else
{
m_nRemainGP = ( ( ((CUser*)this)->GetLevel() * 2) - 2 );
}
m_nStr = 15;
m_nSta = 15;
m_nDex = 15;
m_nInt = 15;
SetHitPoint( GetMaxHitPoint() );
SetManaPoint( GetMaxManaPoint() );
SetFatiguePoint( GetMaxFatiguePoint() );
((CUser*)this)->AddSetState( m_nStr, m_nSta, m_nDex, m_nInt, m_nRemainGP );
#if __VER >= 13 // __HONORABLE_TITLE // ´ÞÀÎ
((CUser*)this)->CheckHonorStat();
((CUser*)this)->AddHonorListAck();
g_UserMng.AddHonorTitleChange( this, m_nHonor);
#endif // __HONORABLE_TITLE // ´ÞÀÎ
#endif // __WORLDSERVER
}
This function will allow to save the stat points. Other wise when restatting you will be losing the extra stat points you where gaining when using the rebirth.
So if you want to have higher stats just change the values in Mover.cpp at m_nRemainGP.
Have fun with it.
With kind regards.
Last edited: