[Source TUT]Rebirth via Command

10/18/2011 21:17 Jopsi332#1
Da seit dem V15 Source und File Release keiner mehr Rebirth benutzt das es via HP nicht mehr geht zeig ich euch wie ihr es per Source machen könnt mit einem Chat befehel

geht in Mover.h und added
PHP Code:
unter: void            InitLevel( int nJob, LONG nLevel, BOOL bGamma = TRUE );            // °´Ã¼¸¦ nLevel·Î ¹Ù²ãÁÜ

das: void            InitLevelPumbaaa( int nJob, LONG nLevel, BOOL bGamma = TRUE ) ; 
dann geht ihr und mover.cpp und added
PHP Code:
void CMover::InitLevelPumbaaa( 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[i]);
                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[i]);
                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[i]);
                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() );
        if( 
nJob >= 1 && nJob <= 4 )
        {
            
m_nStr = m_nSta = m_nDex = m_nInt = 15;
            
m_nRemainGP = 28;
        }
        if( 
nJob >= MAX_PROFESSIONAL && nJob < MAX_MASTER )
        {
            
m_nRemainGP = 118;
            
//m_nRemainGP = ( m_nSta - 15 ) + ( m_nStr - 15 ) + ( m_nDex - 15 ) + ( m_nInt - 15 ) + m_nRemainGP;
            
m_nStr = m_nSta = m_nDex = m_nInt = 15;
        }
        if( 
nJob == JOB_MENTALIST_HERO || nJob == JOB_FORCEMASTER_HERO )
        {
            
CItemElem itemelem;
            
itemelem.m_nItemNum = 1;
            
itemelem.m_bCharged = TRUE;
            
BYTE nID;

            if( 
nJob == JOB_MENTALIST_HERO )
                
itemelem.m_dwItemId = II_WEA_BOOK_BOKROMAIN;
            if( 
nJob == JOB_FORCEMASTER_HERO )
                
itemelem.m_dwItemId = II_ARM_ARM_SHI_ZEMBATO;

            ( ( 
CUser*)this)->CreateItem( &itemelem, &nID );
        }
        
g_UserMng.AddSetLevel( this, (WORD)m_nLevel );
        ( (
CUser*)this )->AddSetGrowthLearningPoint( m_nRemainGP );
        ( (
CUser*)this )->AddSetExperience( GetExp1(), (WORD)m_nLevel, m_nSkillPoint, m_nSkillLevel );
        
/*( (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
} 
dann geht ihr in functextcmd.cpp und added unter
PHP Code:
ON_TEXTCMDFUNC( TextCmd_say,                   "say",               "say",            "¸»",             "¸»",      TCM_SERVER, AUTH_GENERAL      , "¼Ó»èÀÓ [/¸í·É ¾ÆÀ̵𠳻¿ë]" )
das
ON_TEXTCMDFUNC
( TextCmd_rebirth,              "rebirth",          "rebirth",             "ÅÚ·¹Æ÷Æ®",       "ÅÚ·¹",    TCM_SERVER, AUTH_GENERAL   , "ÅÚ·¹Æ÷Æ®" ) 
dann geht ihr
PHP Code:
unter
BOOL TextCmd_ClearPropose
( CScanner & s )
{
#ifdef __WORLDSERVER
    
CUser* pUser    = (CUser*)s.dwValue;
    
g_dpDBClient.SendClearPropose();
#endif    // __WORLDSERVER
    
return TRUE;
}
das
BOOL TextCmd_rebirth
( CScanner& scanner )
{
#ifdef __WORLDSERVER
CUser *pUser;
pUser = (CUser*)scanner.dwValue;
if(
pUser->m_nLevel >= 150 && pUser->IsLegendHero())
pUser->InitLevelPumbaaa( pUser->m_nJob-16,60);
else
pUser->AddText("Du hast nicht das passende Level für einen Rebirth!");
#endif
return TRUE;
} 
und schon könnt ihr über lvl 150 und Legend einen Rebirth auf 60 Master machen.
Einfach /rebirth eingeben und ihr seit wieder lvl 60 master

Credits :
Pumbaaa für seine InitLevel funktion + Hilfe :D
Mich : für die Idee und die Codes in FuncTextCmd
10/18/2011 21:20 Yoshii50000#2
Nett, wusst ich zwar schon habs so ähnlich gemacht ( hab den quickjobchange erweiter das ein fenster kommt ) hastn thanks
10/18/2011 21:26 xFruchti.#3
Nicht schlecht nur jetzt wird mal wieder jeder server Rebirth haben :D
10/18/2011 21:27 Jopsi332#4
Wie du lesen kannst war das auch der Sinn da eh kein Server mehr rebirth hat :D
10/18/2011 21:28 achiles997#5
Schöön (:
10/18/2011 21:30 Pumbaaa#6
Bah Rebirth, Stats stacken bis ins Unendliche xDDD

Hastn Thanks für die Mühe :o
10/18/2011 21:32 Jopsi332#7
für die ganzen pur gw server nützlich :D
10/19/2011 06:39 MysticAngelz#8
Man solte vllt den Chat befehl dazu schreiben für die die entweder zu faul sind den code durchzulesen oder es nicht verstehen wo man ihn sucht :P

Ich würde sagen das der Chat Befehl rebirth ist
10/19/2011 10:18 Sedrika#9
#Indexed

Kümmer dich aber ums stacken :D
10/19/2011 18:55 ™Dryad#10
Werd ich bei mir evtl einbaun^^..
Für deine mühe bekommste natürlich ein THX ;)

lg
10/19/2011 19:07 xFruchti.#11
Quote:
Originally Posted by Jopsi332 View Post
für die ganzen pur gw server nützlich :D
Würde da aber eine Begrenzung machen sonst sind die neuen spieler zu 100% im nachteil
10/19/2011 19:16 Jopsi332#12
ja ich bin schon am gucken wie ich das anstelle bzw wie man im databaseserver ne neue spalte einliest ;D
04/06/2012 22:43 N8Schatten#13
habe mal ne fage läuft das jetzt oder is es noch immer buggy?

und is das stacken gefixxt?

EDIT: Ich würde sagen das das TUT zu den Releases gehört oder? Bitte moven
04/07/2012 10:03 Jopsi332#14
Das stacken ist einfach nur das es keib rb limit gibt
04/07/2012 11:00 N8Schatten#15
aber an und für sich klappt alles error frei?