[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:
untervoid            InitLevelint nJobLONG nLevelBOOL bGamma TRUE );            // °´Ã¼¸¦ nLevel·Î ¹Ù²ãÁÜ

dasvoid            InitLevelPumbaaaint nJobLONG nLevelBOOL bGamma TRUE ) ; 
dann geht ihr und mover.cpp und added
PHP Code:
void CMover::InitLevelPumbaaaint nJobLONG nLevelBOOL bGamma )
{
#ifdef __WORLDSERVER
    // ¿î¿µÀÚ ¸í·ÉÀ¸·Î ·¹º§¾÷ Çϴ°÷ÀÓ
    
MoverProppProp GetProp();
    if( 
pProp )
    {
        if( 
nJob && nJob MAX_LEGEND_HERO )
        {
            
AddChangeJobnJob );
        }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;

        
AddSkillPointnPoint );
        
m_nLevel nLevel;

        
SetJobLevelnLevelnJob );
        
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 0MAX_SKILL_JOBi++ ) 
            {                
                
LPSKILL lpSkill = &(m_aJobSkill[i]);
                if( 
lpSkill && lpSkill->dwSkill != NULL_ID )
                {
                    
ItemProppSkillProp    prj.GetSkillProplpSkill->dwSkill );            
                    if( 
pSkillProp == NULL )
                        continue;
                    if( 
pSkillProp->dwItemKind1 != JTYPE_MASTER)
                        continue;
                    
lpSkill->dwLevel dwTmpSkLevel;
                }
            }
        }
        else if(
IsHero())
        {
            for( 
int i 0MAX_SKILL_JOBi++ ) 
            {                
                
LPSKILL lpSkill = &(m_aJobSkill[i]);
                if( 
lpSkill && lpSkill->dwSkill != NULL_ID )
                {
                    
ItemProppSkillProp    prj.GetSkillProplpSkill->dwSkill );            
                    if( 
pSkillProp == NULL )
                        continue;
                    if( 
pSkillProp->dwItemKind1 != JTYPE_MASTER)
                        continue;
                    
lpSkill->dwLevel 5;
                }
            }
        }
        else if(
IsLegendHero())
        {
            for( 
int i 0MAX_SKILL_JOBi++ ) 
            {                
                
LPSKILL lpSkill = &(m_aJobSkill[i]);
                if( 
lpSkill && lpSkill->dwSkill != NULL_ID )
                {
                    
ItemProppSkillProp    prj.GetSkillProplpSkill->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 )->AddSetChangeJobnJob );
        
g_UserMng.AddNearSetChangeJobthisnJob, &((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 != )
            
g_DPCoreClient.SendGuildChangeJobLevel( (CUser*)this );
#endif    // __SYS_PLAYER_DATA
        
SetHitPointGetMaxHitPoint() );
        
SetManaPointGetMaxManaPoint() );
        
SetFatiguePointGetMaxFatiguePoint() );
        if( 
nJob >= && nJob <= )
        {
            
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.AddSetLevelthis, (WORD)m_nLevel );
        ( (
CUser*)this )->AddSetGrowthLearningPointm_nRemainGP );
        ( (
CUser*)this )->AddSetExperienceGetExp1(), (WORD)m_nLevelm_nSkillPointm_nSkillLevel );
        
/*( (CUser*)this )->m_playTaskBar.InitTaskBarShorcutKind( SHORTCUT_SKILL );
        ( (CUser*)this )->AddTaskBar();*/
        
( (CUser*)this )->AddSetStatem_nStrm_nStam_nDexm_nIntm_nRemainGP );
#if __VER >= 13 // __HONORABLE_TITLE            // ´ÞÀÎ
        
((CUser*)this)->CheckHonorStat();
        ((
CUser*)this)->AddHonorListAck();
        
g_UserMng.AddHonorTitleChangethism_nHonor);
#endif    // __HONORABLE_TITLE            // ´ÞÀÎ
    
}
#endif // __WORLDSERVER

dann geht ihr in functextcmd.cpp und added unter
PHP Code:
ON_TEXTCMDFUNCTextCmd_say,                   "say",               "say",            "¸»",             "¸»",      TCM_SERVERAUTH_GENERAL      "¼Ó»èÀÓ [/¸í·É ¾ÆÀ̵𠳻¿ë]" )
das
ON_TEXTCMDFUNC
TextCmd_rebirth,              "rebirth",          "rebirth",             "ÅÚ·¹Æ÷Æ®",       "ÅÚ·¹",    TCM_SERVERAUTH_GENERAL   "ÅÚ·¹Æ÷Æ®" 
dann geht ihr
PHP Code:
unter
BOOL TextCmd_ClearPropose
CScanner )
{
#ifdef __WORLDSERVER
    
CUserpUser    = (CUser*)s.dwValue;
    
g_dpDBClient.SendClearPropose();
#endif    // __WORLDSERVER
    
return TRUE;
}
das
BOOL TextCmd_rebirth
CScannerscanner )
{
#ifdef __WORLDSERVER
CUser *pUser;
pUser = (CUser*)scanner.dwValue;
if(
pUser->m_nLevel >= 150 && pUser->IsLegendHero())
pUser->InitLevelPumbaaapUser->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?