Official Source Snippets Compilation

Results 1 to 1 of 1
  1. #1
    i sell platypus Improved is offline
    MemberRank
    Jun 2009 Join Date
    DenmarkLocation
    2,819Posts

    Official Source Snippets Compilation

    MUST READ:


    There are a few rules and important information to help keep the thread maintained.

    - Do NOT post in this thread. You're only allowed to post in this thread if you got improvements, replacements or new snippets. The thread is open so people can submit new snippets.

    - This is not a help thread. If you're 100% sure that one of below snippets aren't working, then this is an exception.

    - When you submit an entry, a moderator will add it to the thread and delete your post. You will be credited for it as you see in the other entries.

    - Contineusly breaking above rules will result in warning/infractions.

    __






    General edits


    Disable the WorldServer profiler By Maples
    Spoiler:
    Quote Originally Posted by Maples View Post
    Disable the WorldServer profiler

    Don't you hate right-clicking the worldserver GUI everytime to disable the profiler? Here's a simple fix that will disable the profiler. But first, for the ones that do not know what the profiler is, some screenshots:

    WorldServer with profiler on:


    It generates data like this:


    How to disable it:
    1. Open VersionCommon.h in the WorldServer project
    2. Find all occurrences of #define __NEW_PROFILE and comment those lines out (two slashes at the beginning of the line //)
    3. Do the same from above for #define __PROFILE_RUN
    4. Compile the WorldServer and you're done.




    Result:


    Voila, no more profiler logs.


    Increase CS Pets speed By cffazot
    Spoiler:
    Quote Originally Posted by cffazot View Post
    1. Open CreateObj.cpp in _Common folder
    2. Look for this:
    Code:
    #if __VER >= 9    //__AI_0509
                MoverProp* pProp    = pMover->GetProp();
                if( pProp->dwAI == AII_MONSTER )
                {
                    pMover->m_pActMover->m_fSpeed    /= 2.0F;
    //                if( pProp->dwClass == RANK_SUPER )
    //                    pMover->m_pActMover->m_fSpeed    *= 1.5F;
                }
    3. Underneath it add this:
    Code:
                if( pProp->dwAI == AII_PET )
                    pMover->m_pActMover->m_fSpeed *= 5;
    The value in red will multiply the base movement speed of the CS pet.
    Recompile it and you're done.



    pmttd.ini by Account Name By Sedrika
    Spoiler:
    Quote Originally Posted by Sedrika View Post
    Hello RageZoners,

    in this mini tut i'll show you how to change pmttd.ini from ip to account names.

    Open dpsrvr.cpp in Account Server and search for:
    Code:
    if( strstr( lpAddr, m_sAddrPmttd[i] ) )
    and change it with:
    Code:
    if( strstr( lpszAccount, m_sAddrPmttd[i] ) )
    i found this way cause i think its better for everyone who have a dynamic ip address (like me) is annoyed to add everytime his IP in the ini.

    Credits: Me & Myself

    Thanks for reading

    Sedrika



    Disable Remantis in Arena By Jcdacez
    Spoiler:

    Quote Originally Posted by Jcdacez View Post
    Very Basic Release, So I'll get to the point.

    This will alter Remantis so the HP Increase value is source code based (not propitem.txt based), then will refuse usage of the item if you're on the arena map.



    MoverSkill.cpp

    After:
    Code:
    // IK2_FOOD / IK2_REFRESHER
    BOOL    CMover::DoUseItemFood( ItemProp *pItemProp, CItemElem* pItemElem )
    {
    #ifdef __WORLDSERVER

    Add:
    Code:
        CWorld* pWorld    = GetWorld();
    
        if( pItemProp->dwID == II_CHR_FOO_COO_REMANTIS)
        {
            if(  pWorld && pWorld->IsArena() == FALSE )
            {
                SetPointParam( DST_HP, GetMaxHitPoint() );
                return TRUE;
            }
            else
            {
                ((CUser*)this)->AddText("Remantis Have been Disabled in the Arena.");
                return FALSE;
            }
    
        }

    Propitem.txt

    find:

    Code:
    6    II_CHR_FOO_COO_REMANTIS    IDS_PROPITEM_TXT_004466    1    9999    IK1_CHARGED    IK2_FOOD    IK3_COOKING    =    =    1    =    0    =    =    =    =    =    =    =    0    =    =    1    =    =    1    1    =    =    =    =    _NONE    0    =    =    =    =    =    =    =    =    =    =    =    =    =    =    =    =    =    =    =    DST_HP    =    =    999999999    =    =    =    =    =    =    =    =    =    =    =    =    =    =    =    =    =    =    =    =    =    =    =    =    XI_CHR_CURE01    =    =    =    =    =    =    WUI_NOW    =    =    =    =    =    =    =    =    =    0    0    0    0    0    =    =    =    =    =    =    =    =    =    =    =    =    =    =    =    =    =    """Itm_ChrFooCooRemant.dds"""    0    """"""    IDS_PROPITEM_TXT_004467

    Remove the 999999999 from the DST_HP value, Change it to 0

    Code:
    6    II_CHR_FOO_COO_REMANTIS    IDS_PROPITEM_TXT_004466    1    9999    IK1_CHARGED    IK2_FOOD    IK3_COOKING    =    =    1    =    0    =    =    =    =    =    =    =    0    =    =    1    =    =    1    1    =    =    =    =    _NONE    0    =    =    =    =    =    =    =    =    =    =    =    =    =    =    =    =    =    =    =    DST_HP    =    =    0    =    =    =    =    =    =    =    =    =    =    =    =    =    =    =    =    =    =    =    =    =    =    =    =    XI_CHR_CURE01    =    =    =    =    =    =    WUI_NOW    =    =    =    =    =    =    =    =    =    0    0    0    0    0    =    =    =    =    =    =    =    =    =    =    =    =    =    =    =    =    =    """Itm_ChrFooCooRemant.dds"""    0    """"""    IDS_PROPITEM_TXT_004467


    Clockwork laser on normal monsters By Jcdacez
    Spoiler:

    Quote Originally Posted by Jcdacez View Post
    Ok, very basic tutorial, im sure anyonewho has thought to do this, already has it coded...

    This will basically give any other CW (lord alpha or any custom made clockworks) the same attributes as regular clockwork, such as the ground stomp, lasors, cannon, the global Exp stuff and what have you.

    I have not tried this on anything other than a CW so i dont know if you can apply the lasors or stomps to other mobs, feel free to try tho.


    ok......


    Mover.cpp

    Find:

    Code:
                if( GetIndex() == MI_CLOCKWORK1 )    //·¹º§Â÷¿¡ÀÇÇÑ µå¶ø·üÀúÇϰ¡ ¾ø´Ù.
                    bAdjDropRate = FALSE;
    Simply add a OR sign, with the monster you want to also have this. (in this release i will use alpha CW)

    It should loook like this below

    Code:
                if( GetIndex() == MI_CLOCKWORK1 || GetIndex() == MI_LOADCLOCKWORK )    //·¹º§Â÷¿¡ÀÇÇÑ µå¶ø·üÀúÇϰ¡ ¾ø´Ù.
                    bAdjDropRate = FALSE;
                bAdjDropRate = FALSE;
    MoverActEvent.cpp

    find:

    Code:
         if( m_dwIndex == MI_CLOCKWORK1 )    // Ŭ¶ô¿öÅ©ÀÇ °æ¿ì ¶§¸±¶§ ÀÌÆåÆ®.
        {
            OnAttackMelee_ClockWorks( dwState, pHitObj );
            return TRUE;
        }
    and again, add your monster in an OR

    Code:
         if( m_dwIndex == MI_CLOCKWORK1 || m_dwIndex == MI_LOADCLOCKWORK )    // Ŭ¶ô¿öÅ©ÀÇ °æ¿ì ¶§¸±¶§ ÀÌÆåÆ®.
        {
            OnAttackMelee_ClockWorks( dwState, pHitObj );
            return TRUE;
        }
    then find:

    Code:
        if( m_dwIndex == MI_CLOCKWORK1 )    // Ŭ¶ô¿öÅ©ÀÇ °æ¿ì ¶§¸±¶§ ÀÌÆåÆ®.
        {
        #ifdef __WORLDSERVER
            UpdateMatrix();        // ¸öüÀÇ Æ¯Á¤ºÎÀ§¿¡¼­ ³ª´Â µ¥¹ÌÁö¸¦ ó¸®Çϱâ À§Çؼ± ¼­¹ö¿¡¼­µµ ¸ÅÆ®¸¯½º¸¦ °»½ÅÇØ¾ßÇÑ´Ù.
            CModelObject *pModel = (CModelObject *)m_pModel;
            pModel->UpdateMatrixBone();        // ¼­¹ö¿¡¼­´Â º»¾Ö´Ï¸ÞÀ̼ÇÀ» ÇÏÁö ¾ÊÀ¸¹Ç·Î GetEventPos()¸¦ »ç¿ëÇÒ ÀÏÀÌ ÀÖÀ»¶© ¾÷µ¥ÀÌÆ®¸¦ ÇØÁà¾ß ÇÑ´Ù.
        #endif // WorldServer
    and do the same again.

    Code:
        if( m_dwIndex == MI_CLOCKWORK1 || m_dwIndex == MI_LOADCLOCKWORK )    // Ŭ¶ô¿öÅ©ÀÇ °æ¿ì ¶§¸±¶§ ÀÌÆåÆ®.
        {
        #ifdef __WORLDSERVER
            UpdateMatrix();        // ¸öüÀÇ Æ¯Á¤ºÎÀ§¿¡¼­ ³ª´Â µ¥¹ÌÁö¸¦ ó¸®Çϱâ À§Çؼ± ¼­¹ö¿¡¼­µµ ¸ÅÆ®¸¯½º¸¦ °»½ÅÇØ¾ßÇÑ´Ù.
            CModelObject *pModel = (CModelObject *)m_pModel;
            pModel->UpdateMatrixBone();        // ¼­¹ö¿¡¼­´Â º»¾Ö´Ï¸ÞÀ̼ÇÀ» ÇÏÁö ¾ÊÀ¸¹Ç·Î GetEventPos()¸¦ »ç¿ëÇÒ ÀÏÀÌ ÀÖÀ»¶© ¾÷µ¥ÀÌÆ®¸¦ ÇØÁà¾ß ÇÑ´Ù.
        #endif // WorldServer
    then do the same to this

    Code:
    void    CMover::OnActEndJump4()
    {
        if( FALSE == IsEmptyDestPos() )
            SetDestPos( GetDestPos(), m_bForward, FALSE );
    
        if( m_dwIndex == MI_CLOCKWORK1 )
        {
            SendActMsg( OBJMSG_APPEAR );
        }
    }
    Like so:

    Code:
    void    CMover::OnActEndJump4()
    {
        if( FALSE == IsEmptyDestPos() )
            SetDestPos( GetDestPos(), m_bForward, FALSE );
    
        if( m_dwIndex == MI_CLOCKWORK1 || m_dwIndex == MI_LOADCLOCKWORK )
        {
            SendActMsg( OBJMSG_APPEAR );
        }
    }
    ActionMoverState.cpp

    Find this:

    Code:
            #ifdef __CLIENT
                if( pMover->m_dwIndex == MI_CLOCKWORK1 )
                {
                    if( dwState == OBJSTA_ATK3 )
                    {
                        if( (pMover->m_dwFlag & MVRF_LASERCHARGE) == 0 )    // ·¹ÀÌÀúÃæÀü ÀÌÆåÆ®°¡ ¾ÆÁ÷ »ý¼º ¾ÈµÇ¾úÀ½.
    and again, add the Alpha CW (or any other CW) into the if statement with an OR, like so.

    Code:
            #ifdef __CLIENT
                if( pMover->m_dwIndex == MI_CLOCKWORK1 || pMover->m_dwIndex == MI_LOADCLOCKWORK )
                {
                    if( dwState == OBJSTA_ATK3 )
                    {
                        if( (pMover->m_dwFlag & MVRF_LASERCHARGE) == 0 )    // ·¹ÀÌÀúÃæÀü ÀÌÆåÆ®°¡ ¾ÆÁ÷ »ý¼º ¾ÈµÇ¾úÀ½.

    AttackArbiter.cpp

    Find this:
    Code:
        if( m_pDefender->m_dwIndex == MI_CLOCKWORK1 || m_pDefender->m_dwIndex == MI_BIGMUSCLE || m_pDefender->m_dwIndex == MI_KRRR )        
            m_pDefender->SubAroundExp( m_pAttacker, 50.0f );        // ¹Ý°æ50¹ÌÅÍ À̳»¿¡´Â ´Ù °æÇèÄ¡ ³ª´²°¡Áü.
        else
            m_pAttacker->SubExperience( m_pDefender );        // m_pDefender¸¦ Á×ÀÌ°í ³­ÈÄÀÇ m_pAttacker °æÇèÄ¡ ó¸®.
        
        m_pDefender->DropItemByDied( m_pAttacker );
    and Edit like so (more OR stuff):

    Code:
        if( m_pDefender->m_dwIndex == MI_CLOCKWORK1 || m_pDefender->m_dwIndex == MI_LOADCLOCKWORK || m_pDefender->m_dwIndex == MI_BIGMUSCLE || m_pDefender->m_dwIndex == MI_KRRR )        
            m_pDefender->SubAroundExp( m_pAttacker, 50.0f );        // ¹Ý°æ50¹ÌÅÍ À̳»¿¡´Â ´Ù °æÇèÄ¡ ³ª´²°¡Áü.
        else
            m_pAttacker->SubExperience( m_pDefender );        // m_pDefender¸¦ Á×ÀÌ°í ³­ÈÄÀÇ m_pAttacker °æÇèÄ¡ ó¸®.
        
        m_pDefender->DropItemByDied( m_pAttacker );
    OPTIONAL: to increase/decrease/remove the screen shake factor based on which CW it is. Edit the code below.

    Find:

    Code:
    void    CMover::OnActLanding()
    {
    #ifdef __CLIENT    
        if( m_dwIndex == MI_CLOCKWORK1 )
        {
            GetWorld()->m_pCamera->SetQuake( 60, 1.0f );        // º¸½º°¡ ¶³¾îÁö¸é ¶¥ÀÌ Èçµé¸².
        }
    #endif
    }

    edit it to something like this (or however u want)

    Code:
    void    CMover::OnActLanding()
    {
    #ifdef __CLIENT    
        if( m_dwIndex == MI_CLOCKWORK1 )
        {
            GetWorld()->m_pCamera->SetQuake( 60, 1.0f );        // º¸½º°¡ ¶³¾îÁö¸é ¶¥ÀÌ Èçµé¸².
        }
        else if( m_dwIndex == MI_LOADCLOCKWORK )
        {
            GetWorld()->m_pCamera->SetQuake( 60, 1.5f );        // º¸½º°¡ ¶³¾îÁö¸é ¶¥ÀÌ Èçµé¸².
        }
    #endif
    }

    That should be everything try it out and leme know if it works.

    I hope this helped.


    Allowing other items to be awakened such as arrows By RizzyMF
    Spoiler:

    Quote Originally Posted by RizzyMF View Post
    this is just simple and easy.

    just open randomoption.cpp
    find this line switch( pProp->dwParts )

    under

    Code:
    #endif    // __J12_0
                return static_cast<int>( eAwakening );
            case PARTS_CLOTH:
            case PARTS_CLOAK:
    just add a line after case PARTS_CLOAK: (what part do you want to be awaken)

    Example:

    Code:
    #endif    // __J12_0
                return static_cast<int>( eAwakening );
            case PARTS_CLOTH:
            case PARTS_CLOAK:
            case PARTS_BULLET:
    ^in that code you will be able to awake arrows/posters.


    then save and build neuz. your done. :)



    Allowing Baruna weapons to be awakened By Spitfire76
    Spoiler:

    Quote Originally Posted by Spitfire76 View Post
    Thanks for all guys !

    To get Baruna Weapons awakeable these are steps to follow :

    - Remove this in randomoption.cpp

    #ifdef __NEW_ITEM_BARUNA
    if(pItemElem->GetProp()->dwReferStat1 != BARUNA_D)
    {
    #endif //__NEW_ITEM_BARUNA

    and

    #ifdef __NEW_ITEM_BARUNA
    }
    #endif //__NEW_ITEM_BARUNA

    - Remove this from WndManager.cpp

    #ifdef __NEW_ITEM_BARUNA
    if( pItemElem->GetProp()->dwReferStat1 == BARUNA_D )
    g_WndMng.PutString( prj.GetText( TID_MMI_ERRORSENCHANT_BARUNA ), NULL, prj.GetTextColor( TID_MMI_ERRORSENCHANT_BARUNA ) );
    #endif //__NEW_ITEM_BARUNA
    - Remove this from DPSrvr

    #ifdef __NEW_ITEM_BARUNA
    if(pTarget->GetProp()->dwReferStat1 == BARUNA_D)
    {
    pUser->AddText( prj.GetText( TID_MMI_ERRORSENCHANT_BARUNA ) );
    return FALSE;
    }
    #endif //__NEW_ITEM_BARUNA
    Then, recompile all !



    Allowing all shields to be pierced/Glow By Akerius
    Spoiler:



    Quote Originally Posted by Akerius View Post
    Allowing all shields to be pierced/Glow

    Go to ModelObject.cpp

    search this:
    Spoiler:

    void CModelObject::CreateWeaponEffect( int nParts, DWORD dwItemKind3, const D3DXMATRIX *pmWorld, int nType, int nLevel, int nLevel2 )


    look this code
    Spoiler:

    case IK3_SWD : dwSfxRegular = XI_WEA_SWORD01; fOffset = 0.10f; break;
    case IK3_THSWD : dwSfxRegular = XI_WEA_TWOSWORD01; fOffset = 0.00f; break;
    case IK3_AXE : dwSfxRegular = XI_WEA_AXE01; fOffset = 0.10f; break;
    case IK3_THAXE : dwSfxRegular = XI_WEA_TWOAXE01; fOffset = 0.10f; break;
    case IK3_YOYO : dwSfxRegular = XI_WEA_YOYO01; fOffset = 0.00f; break;
    case IK3_KNUCKLEHAMMER : dwSfxRegular = XI_WEA_KNUCK01; fOffset = 0.10f; break;
    case IK3_CHEERSTICK : dwSfxRegular = XI_WEA_STICK01; fOffset = 0.00f; break;
    case IK3_STAFF : dwSfxRegular = XI_WEA_STAFF01; fOffset = 0.00f; break;
    case IK3_CROSSBOW : dwSfxRegular = XI_WEA_CROSSBOW01; fOffset = 0.10f; break;
    case IK3_BOW : dwSfxRegular = XI_WEA_BOW01; fOffset = 0.00f; break;
    case IK3_WAND : dwSfxRegular = XI_WEA_WAND01; fOffset = 0.10f; break;
    case IK3_MAGICBARUNA : dwSfxRegular = XI_WEA_MAGICBOOK01;fOffset = 0.00f; break;
    case IK3_ZEMBARUNA : dwSfxRegular = XI_WEA_FORCEZEM01; fOffset = 0.00f; break;


    add this:
    Code:
    case IK3_SHIELD            : dwSfxRegular = XI_WEA_FORCEZEM01;    fOffset = 0.00f; break;
    * i use XI_WEA_FORCEZEM01 sfx because i dunno if theres sfx for normal shield ^^

    * you can add also glows on parts just follow this step ^^
    Spoiler:







    Change colour on name according to PvP By kingolo654
    Spoiler:

    Quote Originally Posted by kingolo654 View Post
    I've been using this snippet for long and I decide to let some who didn't figure this out.

    How to make your name change according to your PVP score.

    This apply to the same method as to change the color of your name according to your auth level.

    Code:
        if( m_nFame => 50)
            {
                dwColor = 0xff9e054d;
            }
            else if(m_nFame => 100)
            {
                dwColor = 0xff1d8fca;
            }
                AND SO ON.......
    This can also apply to the name tag by replacing IsAuthHigher with m_nFame

    Hope that help



    Change your Neuz's MD5 salt - Source By Xakzi
    Spoiler:
    Quote Originally Posted by Xakzi View Post
    Change your Neuz's MD5 salt - Source

    Delete everything in this void
    Code:
    void CNeuzApp::HashMD5( char* szResult, LPCTSTR szPWD )
    and add this in
    Code:
        char szBuffer[256];
        sprintf( szBuffer, "%s%s", "HASH", szPWD );
        md5( szResult, szBuffer );
    should look like this
    Code:
    void CNeuzApp::HashMD5( char* szResult, LPCTSTR szPWD )
    {
        char szBuffer[256];
        sprintf( szBuffer, "%s%s", "HASH", szPWD );
        md5( szResult, szBuffer );
    }
    change "HASH" to whatever you want the 'salt' to be :) Works for any language.




    Change your window's title By Military
    Spoiler:
    Quote Originally Posted by Military
    Welcome to my second tutorial , I don't quite know C++ so I'm just looking through the source for some stuff.

    Open Neuz.cpp and search for m_strWindowTitle = _T and you will see something like
    Spoiler:
    m_strWindowTitle = _T( "FlyFF" );


    change it to your sole desires.





    Unlimited Buffs By mcrolanson
    Spoiler:
    Quote Originally Posted by NameHere
    Just edit SkillInfluence.h

    Spoiler:
    #ifndef __SKILLINFLUENCE_H__
    #define __SKILLINFLUENCE_H__

    #define BUFF_ITEM 0
    #define BUFF_SKILL 1
    #define BUFF_PET 2
    #define BUFF_ITEM2 3
    #define BUFF_EQUIP 4 // ÀåÂø·ù ¾ÆÀÌÅÛ¿¡ ƯÁ¤ DST(DST_GIFTBOX)¿¡ ´ëÇØ ¹öÇÁ ¾ÆÀÌÄܸ¸ Ãâ·Â
    #define BUFF_NULL_ID (WORD)0xFFFF
    #define MAX_SKILLINFLUENCE 64
    #define MAX_SKILLBUFF_COUNT 14 //to number you like


    in client nuez. maybe you need to edit WndField.cpp to exacly show the buff icons.
    Just edit the x y values.

    void CWndBuffStatus::SetBuffIconInfo()
    {
    BUFFICON_INFO buffinfo;
    int x = 0;
    int y = 0;
    int i;
    CRect rect;
    rect = GetWindowRect(TRUE);

    if(!m_pBuffIconInfo.empty())
    m_pBuffIconInfo.clear();

    if(m_BuffIconViewOpt == 0)
    {
    for(i=0; i<MAX_SKILLBUFF_COUNT; i++)
    {
    buffinfo.pt = CPoint( x, y );
    m_pBuffIconInfo.push_back(buffinfo);
    x += 34;
    if(i == 6)
    {
    x = 0;
    y = 34;
    }
    }
    //widht 238, heigth = 68
    rect.bottom = 68 + rect.top;
    rect.right = 238 + rect.left;
    }
    else if(m_BuffIconViewOpt == 1)
    {
    for(i=0; i<MAX_SKILLBUFF_COUNT; i++)
    {
    buffinfo.pt = CPoint( x, y );
    m_pBuffIconInfo.push_back(buffinfo);
    y += 34;
    if(i == 6)
    {
    y = 0;
    x = 34;
    }
    }
    //widht 54, heigth = 238
    rect.bottom = 238 + rect.top;
    rect.right = 68 + rect.left;
    }
    SetWndRect(rect);
    AdjustWndBase();
    }




    Weapon swing color By Adler
    Spoiler:
    Quote Originally Posted by Adler
    Here's how to change the weapon swing color. Open Mover.cpp first. /contribute

    Spoiler:
    if( IsPlayer() )
    {
    int nOption = 0;
    DWORD dwColor = D3DCOLOR_ARGB( XXX, XXX, XXX, XXX );
    if( IsActiveMover() )
    {
    CItemElem *pItemElem = GetWeaponItem();
    if( pItemElem )
    nOption = pItemElem->GetAbilityOption();
    }
    else
    {
    // Ÿ Ç÷¹À̾î´Â ÆäÀÌÅ©¾ÆÀÌÅÛÀ̹ǷΠ¿©±â¼­¿¡¼­ °ªÀ» »©¿Â´Ù.
    nOption = m_aEquipInfo[PARTS_RWEAPON].nOption & 0xFF;
    }

    if( nOption == 10 )
    dwColor = D3DCOLOR_ARGB( XXX, XXX, XXX, XXX );
    else if( nOption == 9 )
    dwColor = D3DCOLOR_ARGB( XXX, XXX, XXX, XXX );
    else if( nOption >= 7 )
    dwColor = D3DCOLOR_ARGB( XXX, XXX, XXX, XXX );
    else if( nOption >= 5 )
    dwColor = D3DCOLOR_ARGB( XXX, XXX, XXX, XXX );
    else if( nOption >= 3)
    dwColor = D3DCOLOR_ARGB( XXX, XXX, XXX, XXX );
    else if( nOption >= 1 )
    dwColor = D3DCOLOR_ARGB( XXX, XXX, XXX, XXX );
    else
    dwColor = D3DCOLOR_ARGB( XXX, XXX, XXX, XXX );

    pModel->MakeSWDForce( PARTS_RWEAPON, pItemProp->dwItemKind3, (dwOption & MOP_HITSLOW) ? TRUE : FALSE, dwColor, m_fAniSpeed );
    pModel->MakeSWDForce( PARTS_LWEAPON, pItemProp->dwItemKind3, (dwOption & MOP_HITSLOW) ? TRUE : FALSE, dwColor, m_fAniSpeed );
    }


    Change the values after D3DCOLOR_ARGB ( XXX, XXX, XXX, XXX );
    Using the following macros work as well I believe:

    Spoiler:
    D3DCOLOR_XYUV
    D3DCOLOR_AYUV
    D3DCOLOR_ARGB
    D3DCOLOR_RGBA
    D3DCOLOR_XRGB
    D3DCOLOR_COLORVALUE


    Obviously if you set a new D3DCOLOR type you also have to change the values as well. RGBA = red green blue alpha, so change the first three to the colors you desire and the fourth to the alpha level. With XRGB you would have no alpha, just XXX, XXX, XXX. Do note that black is impossible unless you do heavy alterations to the source.

    The format works this way: 255, 255, 255, 0. The numbers are Red, Blue, Green, Alpha. Change each value from 0 to 255 as you wish.

    inb4 every nub server does this /ridi



    Increasing bloom quality By Aries
    Spoiler:
    Quote Originally Posted by Aries
    To change teh Quality of the Bloom effect from 16 bit to 64 bit change this:

    Code:
    if( g_Option.m_nBloom == 1 )
        {
            if( m_d3dCaps.PixelShaderVersion >= D3DPS_VERSION(1,1) )
                g_Glare.Create( m_pd3dDevice, D3DFMT_R5G6B5], g_Option.m_nResWidth, g_Option.m_nResHeight - 48 );
            else
                g_Option.m_nBloom = 0;
    to this:

    Code:
    if( g_Option.m_nBloom == 1 )
        {
            if( m_d3dCaps.PixelShaderVersion >= D3DPS_VERSION(1,1) )
                g_Glare.Create( m_pd3dDevice, D3DFMT_A16B16G16R16F, g_Option.m_nResWidth, g_Option.m_nResHeight - 48 );
            else
                g_Option.m_nBloom = 0;
    The Bloom effect will apply In much sharper Quality now

    To activate Bloom jsut wirte bloom into the ini like this

    Bloom 1
    if you get an CEffectEnviroment error just make a file in the ResourceFolder called EnvironmentEffect.txt and insert this into it



    Change the max. buy count By WrongWay
    Spoiler:
    Quote Originally Posted by WrongWay
    lets keep this topic alive:
    its only some edits i start to learn c++ 3 weeks ago but im a starter so its ok ^_^:
    1:change the max you can buy from shop from 99 to xxxx:
    go to your folder source/_interface
    now open WndShop.cpp
    and find this:
    const int MAX_BUY_ITEMCOUNT = 99;



    Normal players can see others level By WrongWay
    Spoiler:
    Quote Originally Posted by WrongWay
    2:change that normal players again can see the level of other players:
    go to _interface
    open WndWorld.cpp
    and then find this:
    #if __VER >= 8 // __CSC_VER8_1

    and you will see this text:

    Code:
    #if __VER >= 8 // __CSC_VER8_1 
                            // 8ֲק GMְֿ °ז¿ל¸¦ ֱ¦¿ַֿ°ם »ף´כ¹זְַ ·¹÷§ְ» ÷¼¼צ ¾רְ½  
                            if( g_pPlayer->IsAuthHigher( AUTH_GAMEMASTER ) == TRUE )
    Then Change The AUTH_GAMEMASTER TO AUTH_GENERAL .
    then in the same file find this:
    #endif //__CSC_VER11_1

    and then you will see this text:

    Code:
    #endif //__CSC_VER11_1 
    #else 
                            // ֵ¸°ְּ ְ½ֵ÷¸´ 10·¹÷§ ְַּֿ¸י ·¹÷§ְ» ÷¼¼צ ְײְ½. 
                            if( g_pPlayer->IsAuthHigher( AUTH_GAMEMASTER ) == TRUE || g_pPlayer->GetLevel() + 10 > pMover->GetLevel() ) 
                                sprintf( szText, "%s<Lv.%d>", pMover->GetName(), pMover->GetLevel() ); 
                            else 
                                sprintf( szText, "%s<Lv.\?\?>", pMover->GetName() ); 
    #endif //__CSC_VER8_1



    Rejoin guild time By nabby59
    Spoiler:
    Quote Originally Posted by nabby59
    How to change the amount of time before you can rejoin a guild:

    This has two parts. The first is the cache so this works while you stay logged in and the second you have to change some stored procedures in the database.

    First part:

    Find this line in DPCacheSrvr (its in there twice):
    Code:
    pPlayer->m_tGuildMember += CTimeSpan( 2, 0, 0, 0 );
    Change the (2, 0, 0, 0) to what you want in the format of (Days, Hours, Minutes, Seconds). i.e. 5 minutes (0, 0, 5, 0)

    Second part:

    Find the GUILD_STR stored procedure in CHARACTER_DBF and find this in the procedure (Again its there twice):
    Code:
    SET m_tGuildMember = CONVERT(CHAR(8),DATEADD(d,2,GETDATE()),112) 
    + RIGHT('00' + CONVERT(VARCHAR(2),DATEPART(hh,DATEADD(d,2,GETDATE()))),2) 
    + RIGHT('00' + CONVERT(VARCHAR(2),DATEPART(mi,DATEADD(d,2,GETDATE()))),2) 
    + RIGHT('00' + CONVERT(VARCHAR(2),DATEPART(ss,DATEADD(d,2,GETDATE()))),2)
    Now change
    Code:
    DATEADD(d,2,GETDATE())))
    to the same value you entered above. i.e. 5 minutes again
    Code:
    DATEADD(mi,5,GETDATE())))



    Remove aggro protection from ex. trans By Aries
    Spoiler:
    Quote Originally Posted by Aries View Post
    Line 6474 and 6577 in the Mover.cpp

    Code:
    BOOL CMover::IsAttackAble( CObj *pObj )
    {
    #if __VER >= 8 //__Y_FLAG_SKILL_BUFF
        if( HasBuffByIk3(IK3_TEXT_DISGUISE) )
            return FALSE;
    an this

    Code:
    BOOL CMover::IsAttackAbleNPC( CMover* pNPC )
    {
    #if __VER >= 8 //__Y_FLAG_SKILL_BUFF
        if( HasBuffByIk3(IK3_TEXT_DISGUISE) )
            return FALSE;
    Just change Return FALSE to TRUE but imo make a copied function with an else statement or you wont be able to protect yourself against Aggros in Dungeons.


    Make people 19 levels above you not able to see you level By ZuminaSpanky
    Spoiler:
    Quote Originally Posted by ZuminaSpanky View Post
    I felt I should contribute at least once in this thread.

    File: WndWorld.cpp in ...\_Interface\ folder
    Subject: Fixed and updated to v15 standards (With Hero/Master) to see or not see someone's levels whom is 19 levels above you.
    How: Highlight lines 2795 to 2820, or from #if __VER >= 8 // __CSC_VER8_1 to #endif //__CSC_VER8_1, then paste the following information.
    Spoiler:

    Code:
    #if __VER >= 8 // __CSC_VER8_1
                            // 8Â÷ GMÀÏ °æ¿ì¸¦ Á¦¿ÜÇÏ°í »ó´ë¹æÀÇ ·¹º§À» º¼¼ö ¾øÀ½ 
                            if( g_pPlayer->IsAuthHigher( AUTH_GAMEMASTER ) == TRUE )
                                if( pMover->IsHero() )
                                    sprintf( szText, "%s <Lvl %d-H>", pMover->GetName(), pMover->GetLevel() );
                                else if( pMover->IsMaster() )
                                    sprintf( szText, "%s <Lvl %d-M>", pMover->GetName(), pMover->GetLevel() );
                                else
                                    sprintf( szText, "%s <Lvl %d>", pMover->GetName(), pMover->GetLevel() ); 
    
                            else if( g_pPlayer->IsAuthHigher( AUTH_GAMEMASTER ) == FALSE && g_pPlayer->GetLevel() + 20 > pMover->GetLevel() )
                                if( pMover->IsHero() && g_pPlayer->GetLevel() + 20 > pMover->GetLevel())
                                    sprintf( szText, "%s <Lvl %d-H>", pMover->GetName(), pMover->GetLevel() );
                                else if( pMover->IsMaster() && g_pPlayer->GetLevel() + 20 > pMover->GetLevel())
                                    sprintf( szText, "%s <Lvl %d-M>", pMover->GetName(), pMover->GetLevel() );
                                else
                                    sprintf( szText, "%s <Lvl %d>", pMover->GetName(), pMover->GetLevel() ); 
                            else
                                sprintf( szText, "%s <Lvl \?\?>", pMover->GetName() );
    #endif //__CSC_VER8_1


    Before someone starts flaming me on "If you uncomment ____ and change AUTH_GAMEMASTER to AUTH_GENERAL" Well if you just simply put AUTH_GENERAL then your gms won't know the levels of people. Also, Masters could view Hero levels, which would defeat the purpose. This is properly fixing it so everything is current and working.




    colored names of staff members By R3fl3x
    Spoiler:
    [quote=R3fl3x;6073749]Here is small releases from my side:
    Want colored names of staff members?

    Go to your neuz project, go to MoverRender.cpp and search for this one:

    Code:
            // ¸í¼º¿¡ µû¸¥ »öÇ¥½Ã.
    #if __VER >= 13 // __HONORABLE_TITLE
    Go one line below and add this:

    Code:
        if( IsAuthHigher(AUTH_ADMINISTRATOR)) // fnL
            {
                dwColor = 0xff9e054d;
            }
            else if( IsAuthHigher(AUTH_GAMEMASTER))
            {
                dwColor = 0xff1d8fca;
            }
    Since it's scanning for karma, and there is already an opened up if-statement, we'll need to go to

    Code:
    if( IsChaotic() )
    which is one line below, and just change the "if" to an "else if"


    Change Bow DMG By Mentus
    Spoiler:
    Quote Originally Posted by Mentus View Post
    sorry 4 my bad english...

    Change Bow DMG or put it in probjob.inc
    open moverattack.cpp
    and search for
    Code:
    CMover::GetJobPropFactor
    then u see some of JOB_PROP..
    then you have the red text to add
    Code:
        case JOB_PROP_SWD:
            return pProperty->fMeleeSWD;
        case JOB_PROP_AXE:    
            return pProperty->fMeleeAXE;
        case JOB_PROP_STAFF:
            return pProperty->fMeleeSTAFF;
        case JOB_PROP_STICK:
            return pProperty->fMeleeSTICK;
        case JOB_PROP_KNUCKLE:
            return pProperty->fMeleeKNUCKLE;
        case JOB_PROP_WAND:
            return pProperty->fMagicWAND;
        case JOB_PROP_YOYO:
            return pProperty->fMeleeYOYO;
        case JOB_PROP_BOW:
            return pProperty->fMeleeBOW;
        case JOB_PROP_BLOCKING:
            return pProperty->fBlocking;
        case JOB_PROP_CRITICAL:
            return pProperty->fCritical;
    then search for:
    Code:
    nATK = (int)( (((GetDex()-14)*4.0f + (GetLevel()*1.3f) + (GetStr()*0.2f)) * 0.7f) );
    and u find:

    Code:
        case WT_RANGE_BOW:
            nATK = (int)( (((GetDex()-14)*4.0f + (GetLevel()*1.3f) + (GetStr()*0.2f)) * 0.7f) );
            break;
    to push the bow dmg u only must change 0.7f..
    to add the Bow dmg to propjob.inc u must change to this:
    Code:
    case WT_RANGE_BOW:
    nATK = (int)( float(( GetDex() - 14 ) * GetJobPropFactor(JOB_PROP_BOW)) + (float(GetLevel() * 0.7f)) );
    break;
    then open ProjectCmn.h

    and search for
    Code:
    enum JOB_PROP_TYPE
    u will find this:
    Code:
    // 직업에 따른 factor ENUM
    enum JOB_PROP_TYPE
    {
        JOB_PROP_SWD,
        JOB_PROP_AXE,    
        JOB_PROP_STAFF,
        JOB_PROP_STICK,
        JOB_PROP_KNUCKLE,
        JOB_PROP_WAND,
        JOB_PROP_BLOCKING,
        JOB_PROP_BOW,
        JOB_PROP_YOYO,
        JOB_PROP_CRITICAL,
    };
    then you have the red text to add

    then search in ProjectCmn.h for
    Code:
    fMeleeYOYO;
    u will find this:
    Code:
    // 직업에 따른 프로퍼티 ( propJob.inc에서 읽어들임 )
    struct JobProp
    {
        float    fAttackSpeed;            //공속 
        float    fFactorMaxHP;            //최대 HP 계산에 사용되는 factor
        float    fFactorMaxMP;            //최대 MP 계산에 사용되는 factor
        float    fFactorMaxFP;            //최대 FP 계산에 사용되는 factor
        float   fFactorDef;                //물리 방어력 계산에 사용되는 factor
        float    fFactorHPRecovery;        //HP회복 factor
        float    fFactorMPRecovery;        //MP회복 factor
        float    fFactorFPRecovery;        //FP회복 factor
        float    fMeleeSWD;                //WT_MELEE_SWD의 ATK factor
        float    fMeleeAXE;                //WT_MELEE_AXE의 ATK factor
        float   fMeleeSTAFF;             //WT_MELEE_STAFF의 ATK factor
        float   fMeleeSTICK;            //WT_MELEE_STICK의 ATK factor
        float   fMeleeKNUCKLE;            //WT_MELEE_KNUCKLE의 ATK factor
        float   fMagicWAND;                //WT_MAGIC_WAND의 ATK factor 
        float   fBlocking;                //블록킹 factor
        float    fMeleeYOYO;                //요요의 ATK factor 
        float   fCritical;                //크리티컬 처리
        float   fMeleeBOW;                
    };
    then you have the red text to add....

    then open project.cpp
    and search for
    Code:
    fMeleeYOYO
    u will find this:

    Code:
            JobProp* pProperty = &m_aPropJob[nJob];
            pProperty->fAttackSpeed      = scanner.GetFloat();        
            pProperty->fFactorMaxHP      = scanner.GetFloat();        
            pProperty->fFactorMaxMP      = scanner.GetFloat();        
            pProperty->fFactorMaxFP      = scanner.GetFloat();        
            pProperty->fFactorDef        = scanner.GetFloat();        
            pProperty->fFactorHPRecovery = scanner.GetFloat();    
            pProperty->fFactorMPRecovery = scanner.GetFloat();    
            pProperty->fFactorFPRecovery = scanner.GetFloat();    
            pProperty->fMeleeSWD         = scanner.GetFloat();    
            pProperty->fMeleeAXE         = scanner.GetFloat();    
            pProperty->fMeleeSTAFF         = scanner.GetFloat();    
            pProperty->fMeleeSTICK         = scanner.GetFloat();    
            pProperty->fMeleeKNUCKLE     = scanner.GetFloat();    
            pProperty->fMagicWAND         = scanner.GetFloat();    
            pProperty->fBlocking         = scanner.GetFloat();    
            pProperty->fMeleeYOYO        = scanner.GetFloat();    
            pProperty->fCritical         = scanner.GetFloat();    
            pProperty->fMeleeBOW         = scanner.GetFloat();
    then you have the red text to add....

    last part of this guide...
    open propjob.inc
    and add:
    Code:
        
    BOW
    5.0
    5.0
    5.0
    5.0
    5.0
    5.0
    5.0
    5.0
    5.0
    5.0
    5.0
    5.0
    5.0
    5.0
    5.0
    5.0
    5.0
    5.0
    5.0
    5.0
    5.0
    5.0
    5.0
    5.0
    5.0
    5.0
    5.0
    5.0
    5.0
    5.0
    5.0
    5.0


    Cancel awakening window By Mentus
    Spoiler:
    Quote Originally Posted by Mentus View Post
    Cancel Awakening Window...
    or if u wanna delete the cancel awakening window

    open Dpsrvr.cpp (worldserver project)
    and search for
    Code:
    #endif    //__PROTECT_AWAKE
    u will find this here:
    Code:
    pUser->AddDiagText( prj.GetText( nOk ) );
    if you want to delete the window and want text to appear then change to:
    Code:
     pUser->AddText("Awakening removed");
    Okay if u have problems pm me :D



    //edit my postbox work now :D


    Removing ip check at the neuz.ini file By anao
    Spoiler:
    Quote Originally Posted by anao View Post
    Removing ip check at the neuz.ini file.

    First, open the NeuzMsgProc.cpp, located on the Neuz folder.

    Search for
    PHP Code:
        g_Neuz.LoadOption();        // Neuz.ini¸¦ ·Îµù     
        
    if( lstrleng_Option.m_IPAddress ) > )
            
    lstrcpyg_Neuz.m_lpCertifierAddrg_Option.m_IPAddress ); 
    And edit to
    PHP Code:
        g_Neuz.LoadOption();        // Neuz.ini¸¦ ·Îµù     
    //    if( lstrlen( g_Option.m_IPAddress ) > 2 )
    //        lstrcpy( g_Neuz.m_lpCertifierAddr, g_Option.m_IPAddress ); 


    Looking at ProjectCmn By The Hot One
    Spoiler:
    Quote Originally Posted by The Hot One View Post
    Here's some things I found in:

    source/_common/ProjectCmn.h

    Code:
    #define    MAX_OBJARRAY            8
    #define    MAX_QUICKSLOT            21 //I THINK this is the bag.
    #define    MAX_EQUIPMENT            18
    #define    MAX_INVENTORY            42                        
    #define MAX_GUILDBANK            42            
    #define    MAX_BANK            42
    #define    MAX_REPAIR            16
    #define    MAX_TRADE            25
    #define    MAX_VENDITEM            30
    #define    MAX_REPAIRINGITEM        25
    #define    MAX_VENDORNAME            48
    #define    MAX_EXPLPPOINT            41
    #define    MAX_EXPSKILL            21
    #define    MAX_EXPCHARACTER        200
    #define    MAX_FXPCHARACTER        200
    #define    MAX_CHARACTER_LIST        3 
    #define    MAX_VENDOR_INVENTORY            100
    #define    MAX_VENDOR_INVENTORY_TAB    4
    #define MAX_PARTYLEVEL            10
    #define MAX_ADDEXPPARTY            16
    #define    MAX_STUFF                ( MAX_INVENTORY + MAX_QUICKSLOT )
    
    #define MAX_QUESTITEM    16 < Not exactly sure what this defines. I'm not counting all the QI's ingame :/:

    The blue highlighted definitions are the things you can safely edit without much trouble.


    The lime highlights are things I'm 50/50 on, meaning you may be able to edit them safely without much work... or you'll have to do more editing.


    Finally, the cyan highlights are things that can be edited with a bit of effort, if server's are interested.

    (You'll need a good understanding of math and PSCS+)


    I just wanted to point a couple of these things out, incase anyone was wondering.

    source/_common/ProjectCmn.h




    Enable duels By caja
    Spoiler:
    Quote Originally Posted by caja View Post
    WndWorld.cpp -> void CWndWorld::ShowMoverMenu( CMover* pTarget )

    Code:
    m_wndMenuMover.AppendMenu( 0,  MMI_TRADE        , prj.GetText( TID_MMI_TRADE ) );
    m_wndMenuMover.AppendMenu( 0,  MMI_ADD_MESSENGER, prj.GetText( TID_MMI_ADD_MESSENGER ) );
    m_wndMenuMover.AppendMenu( 0,  MMI_FIGHT , prj.GetText( TID_MMI_FIGHT  ) );    // Duel
    m_wndMenuMover.AppendMenu( 0,  MMI_MESSAGE, prj.GetText( TID_MMI_MESSAGE ) );
    m_wndMenuMover.AppendMenu( 0,  MMI_INVITE_PARTY , prj.GetText( TID_MMI_INVITE_PARTY ) );



    Bug fixes


    Remove Force Kill By Sedrika
    Spoiler:
    Quote Originally Posted by Sedrika View Post
    Hello RageZoner

    I'll show you in this small TuT how you can remove the force kill from the Worldserver.

    1) Open the Source files.
    2) Open the World Server.
    3) Open "FuncTextCmd.cpp".
    4) Search for "__roqkf$tlf!GNT!__".
    5) Type anything else in the "" and save.
    6) Build the World Server.

    If you changed it no one can crash the Server if you dont say anyone the Crash Code =)


    Have Fun


    SRO fix By xLethal
    Spoiler:
    Quote Originally Posted by xLethal View Post
    SRO fix:
    Code:
    BOOL TextCmd_SetRandomOption( CScanner & s )
    {
    #ifdef __WORLDSERVER
        CUser* pUser    = (CUser*)s.dwValue;
        CItemElem* pItemElem    = pUser->m_Inventory.GetAt( 0 );
        if( pItemElem )
        {
            int nRandomOptionKind    = g_xRandomOptionProperty->GetRandomOptionKind( pItemElem );
            if( nRandomOptionKind >= 0 )
            {
                g_xRandomOptionProperty->InitializeRandomOption( pItemElem->GetRandomOptItemIdPtr() );
                int nDst, nAdj;
                int cb    = 0;
                nDst    = s.GetNumber();
                while( s.tok != FINISHED )
                {
                    nAdj    = s.GetNumber();
                    if( nDst == 48 ) // Broken attribute
                        break;
                    if ( nDst > 96 || nDst < 1 ) // v16 max/min dst attribute
                        break;
                    if ( nAdj > 512 || nAdj < -512 ) // Prevent integer overflows
                        break;
                    g_xRandomOptionProperty->SetParam( pItemElem->GetRandomOptItemIdPtr(), nDst, nAdj );
                    cb++;
                    if( cb >= MAX_RANDOM_OPTION )
                        break;
                    nDst    = s.GetNumber();
                }
                pUser->UpdateItemEx( (BYTE)( pItemElem->m_dwObjId ), UI_RANDOMOPTITEMID, pItemElem->GetRandomOptItemId() );
            }
        }
    #endif    // __WORLDSERVER
        return TRUE;
    }
    With this, you will be able to set awakenings, such as:
    Code:
    /sro 68 50
    Which will add 50% jump height. This method is much better than exploiting an overflow.


    Make Flyff.a work By Aries
    Spoiler:
    Quote Originally Posted by Aries View Post
    To make Flyff.a work:

    You need to make the following additions to the VersionCommon.h of

    AccountServer
    Certifier
    Neuz

    look for

    Code:
    defined(__INTERNALSERVER)
    defined(__MAINSERVER)
    defined(__TESTSERVER)
    and add the following text under each

    Code:
    #define    __SECURITY_0628
    in the certifier is one extra line needed, this:

    Code:
    #define __JAPAN_AUTH
    then recompile these three and you are done

    Place Flyff.b in the program folder and flyff.a in the Client folder.


    Emote client crash by enter !888888888888889 By Seymourfr
    Spoiler:
    Quote Originally Posted by Seymourfr View Post
    How to fix Emote client crash by enter !888888888888889 in the chat :

    go to DialogMsg.cpp and search for
    Code:
    void CDialogMsg::AddMessage( CObj* pObj, LPCTSTR lpszMessage, DWORD RGB, int nKind, DWORD dwPStyle )
    then search

    Code:
            if( scanner.Token == "!" )
            {
                int nEmoticonIdx = scanner.GetNumber();
                AddEmoticon( pObj, nEmoticonIdx );
                return;
            }
    now replace with this :
    Code:
            if( scanner.Token == "!" )
            {
                int nEmoticonIdx = scanner.GetNumber();
    
                if( nEmoticonIdx > MAX_EMOTICON_NUM )
                    nEmoticonIdx = MAX_EMOTICON_NUM;
                else if( nEmoticonIdx < 0 )
                    nEmoticonIdx = 0;
    
                AddEmoticon( pObj, nEmoticonIdx );
                return;
            }



    Remove Gameguard By Vulcanraven
    Spoiler:
    Quote Originally Posted by Vulcanraven View Post
    Remove Gameguard:

    First open Neuz.cpp
    search for:

    Code:
    #include "NPGameLib4.h" comment then out or remove it like //#include "NPGameLib4.h"
    After this look for:

    Code:
    extern void PreInitNProtect(); and
    extern CNPGameLib* GetNProtect();
    comment them out or remove them...

    Then search for void CNeuzApp::InitNProtect()

    Code:
    void CNeuzApp::InitNProtect()
    {
        CScript s1;
        if( s1.Load(MakePath( DIR_CLIENT, "GameGuard.txt.txt" ) ) )
            s1.LoadString();
        
        CScript s2;
        if( s2.Load(MakePath( DIR_CLIENT, "GameGuard.inc" ) ) )
        {
            s2.GetToken();
            while( s2.tok != FINISHED )
            {
                m_strArray.Add( s2.Token );
                s2.GetToken();
            }
        }
    
        PreInitNProtect();
        DWORD dwResult = GetNProtect()->Init();
        if( dwResult != NPGAMEMON_SUCCESS )
        {
            TCHAR msg[256];
            LPCSTR lpszMsg;
            
            switch (dwResult)
            {
            case NPGAMEMON_ERROR_EXIST:
                lpszMsg    = m_strArray.GetAt(0);//"°ÔÀÓ°¡µå°¡ ÀÌ¹Ì ½ÇÇà Áß ÀÔ´Ï´Ù. ÀçºÎÆÃ ÈÄ ´Ù½Ã ½ÇÇàÇØº¸½Ã±â ¹Ù¶ø´Ï´Ù.";
                break;
            case NPGAMEMON_ERROR_GAME_EXIST:
                lpszMsg    = m_strArray.GetAt(1);//"°ÔÀÓÀÌ Áߺ¹ ½ÇÇàµÇ¾ú°Å³ª °ÔÀÓ°¡µå°¡ ÀÌ¹Ì ½ÇÇà Áß ÀÔ´Ï´Ù. °ÔÀÓ Á¾·á ÈÄ ´Ù½Ã ½ÇÇàÇØº¸½Ã±â ¹Ù¶ø´Ï´Ù.";
                break;
            case NPGAMEMON_ERROR_INIT:
                lpszMsg    = m_strArray.GetAt(2);//"°ÔÀÓ°¡µå ÃʱâÈ­ ¿¡·¯ÀÔ´Ï´Ù. ÀçºÎÆÃ ÈÄ ´Ù½Ã ½ÇÇàÇØº¸°Å³ª Ãæµ¹ÇÒ ¼ö ÀÖ´Â ´Ù¸¥ ÇÁ·Î±×·¥µéÀ» Á¾·áÇÑ ÈÄ ½ÇÇàÇØ º¸½Ã±â ¹Ù¶ø´Ï´Ù.";
                break;
            case NPGAMEMON_ERROR_AUTH_GAMEGUARD:
            case NPGAMEMON_ERROR_NFOUND_GG:
            case NPGAMEMON_ERROR_AUTH_INI:
            case NPGAMEMON_ERROR_NFOUND_INI:
                lpszMsg    = m_strArray.GetAt(3);//"°ÔÀÓ°¡µå ÆÄÀÏÀÌ ¾ø°Å³ª º¯Á¶µÇ¾ú½À´Ï´Ù. °ÔÀÓ°¡µå ¼Â¾÷ ÆÄÀÏÀ» ¼³Ä¡Çغ¸½Ã±â ¹Ù¶ø´Ï´Ù.";
                break;
            case NPGAMEMON_ERROR_CRYPTOAPI:
                lpszMsg    = m_strArray.GetAt(4);//"À©µµ¿ìÀÇ ÀϺΠ½Ã½ºÅÛ ÆÄÀÏÀÌ ¼Õ»óµÇ¾ú½À´Ï´Ù. ÀÎÅÍ³Ý ÀͽºÇ÷η¯(IE)¸¦ ´Ù½Ã ¼³Ä¡Çغ¸½Ã±â ¹Ù¶ø´Ï´Ù.";
                break;
            case NPGAMEMON_ERROR_EXECUTE:
                lpszMsg    = m_strArray.GetAt(5);//"°ÔÀÓ°¡µå ½ÇÇà¿¡ ½ÇÆÐÇß½À´Ï´Ù. °ÔÀÓ°¡µå ¼Â¾÷ ÆÄÀÏÀ» ´Ù½Ã ¼³Ä¡Çغ¸½Ã±â ¹Ù¶ø´Ï´Ù.";
                break;
            case NPGAMEMON_ERROR_ILLEGAL_PRG:
                lpszMsg    = m_strArray.GetAt(6);//"ºÒ¹ý ÇÁ·Î±×·¥ÀÌ ¹ß°ßµÇ¾ú½À´Ï´Ù. ºÒÇÊ¿äÇÑ ÇÁ·Î±×·¥À» Á¾·áÇÑ ÈÄ ´Ù½Ã ½ÇÇàÇØº¸½Ã±â ¹Ù¶ø´Ï´Ù.";
                break;
            case NPGMUP_ERROR_ABORT:
                lpszMsg    = m_strArray.GetAt(7);//"°ÔÀÓ°¡µå ¾÷µ¥ÀÌÆ®¸¦ Ãë¼ÒÇϼ̽À´Ï´Ù. Á¢¼ÓÀÌ °è¼Ó µÇÁö ¾ÊÀ» °æ¿ì ÀÎÅÍ³Ý ¹× ¹æÈ­º® »óŸ¦ Á¡°ËÇØº¸½Ã±â ¹Ù¶ø´Ï´Ù.";
                break;
            case NPGMUP_ERROR_CONNECT:
            case NPGMUP_ERROR_DOWNCFG:
                lpszMsg    = m_strArray.GetAt(8);//"°ÔÀÓ°¡µå ¾÷µ¥ÀÌÆ® ¼­¹ö Á¢¼Ó¿¡ ½ÇÆÐÇÏ¿´½À´Ï´Ù. Àá½Ã ÈÄ Àç½Ãµµ ÇØº¸°Å³ª, ÀÎÅÍ³Ý ¹× ¹æÈ­º® »óŸ¦ Á¡°ËÇØ º¸½Ã±â ¹Ù¶ø´Ï´Ù.";
                break;
            case NPGMUP_ERROR_AUTH:
                lpszMsg    = m_strArray.GetAt(9);//"°ÔÀÓ°¡µå ¾÷µ¥ÀÌÆ®¸¦ ¿Ï·áÇÏÁö ¸ø Çß½À´Ï´Ù. ¹ÙÀÌ·¯½º °Ë»ç¸¦ ÇØº¸½Ã°Å³ª, PC °ü¸® ÇÁ·Î±×·¥À» »ç¿ëÇÏ½Ã¸é ¼³Á¤À» Á¶Á¤ÇÑ ÈÄ °ÔÀÓÀ» ½ÇÇàÇØ º¸½Ã±â ¹Ù¶ø´Ï´Ù.";
                break;
            case NPGAMEMON_ERROR_NPSCAN:
            default:
                // ÀûÀýÇÑ Á¾·á ¸Þ½ÃÁö Ãâ·Â, UI ÃʱâÈ­ ÈĶó¸é MessageBox ´ë½Å °ÔÀÓ UI¸¦ »ç¿ëÇØµµ µÊ
                //wsprintf( msg, "°ÔÀÓ°¡µå ½ÇÇà ¿¡·¯ : %lu", dwResult );
                wsprintf( msg, m_strArray.GetAt(10), dwResult );
                lpszMsg = msg;
                break;
            }
            if( lpszMsg )
                ::Error( "nProtect GameGuard : %s", lpszMsg );
    //            MessageBox( GetSafeHwnd(), lpszMsg, "nProtect GameGuard", MB_OK );
    
            ExitProcess( -1 );
        }
    
    //    GetNProtect()->SetHwnd( GetSafeHwnd() );
    }
    Remove it or comment them out with /* and */

    After this search for: HRESULT CNeuzApp::InitDeviceObjects()

    Inside you see InitNProtect();
    Remove it or comment it out...

    Search now for: BOOL CALLBACK NPGameMonCallback( DWORD dwMsg, DWORD dwArg )

    Code:
    BOOL CALLBACK NPGameMonCallback( DWORD dwMsg, DWORD dwArg )
    {
        if( g_Neuz.m_strArray.GetSize() == 0 )
            return false;
    
        bool bAppExit    = false;
    
        TCHAR msg[128];
        LPCTSTR lpszMsg    = NULL;
    
        switch (dwMsg) 
        {
            case NPGAMEMON_CHECK_CSAUTH2:    // ¼­¹ö·Î ÀÎÁõ ÆÐŶÀ» Àü¼Û
                {
                    GG_AUTH_DATA AuthData;
                    memcpy( &AuthData, (PVOID)dwArg, sizeof(GG_AUTH_DATA) );
                    
                    BEFORESENDSOLE( ar, PACKETTYPE_AUTHQUERY, DPID_UNKNOWN );
                    ar.Write( (void*)&AuthData, sizeof(GG_AUTH_DATA) );
                    SEND( ar, &g_dpLoginClient, DPID_SERVERPLAYER );
    
                    if( g_Neuz.m_loginSI.nCount == 1 )
                    {
                        ++g_Neuz.m_loginSI.nCount;
                        g_dpLoginClient.SendGetPlayerList( g_Neuz.m_loginSI.dwID, g_Neuz.m_loginSI.pszAccount, g_Neuz.m_loginSI.pszPassword );
                    }
                    return true;
                }
            case NPGAMEMON_COMM_ERROR:
            case NPGAMEMON_COMM_CLOSE:
                bAppExit = true;
                return false;
            case NPGAMEMON_INIT_ERROR:        // "°ÔÀÓ°¡µå ÃʱâÈ­ ¿¡·¯
                bAppExit = true;
                wsprintf( msg, g_Neuz.m_strArray.GetAt(17), dwArg );
                lpszMsg    = msg;
                break;
            case NPGAMEMON_SPEEDHACK:        // "½ºÇǵåÇÙÀÌ °¨ÁöµÇ¾ú½À´Ï´Ù."
                bAppExit = true;
                lpszMsg    = g_Neuz.m_strArray.GetAt(18);
                break;
            case NPGAMEMON_GAMEHACK_KILLED:    // "°ÔÀÓÇÙÀÌ ¹ß°ßµÇ¾ú½À´Ï´Ù."
            case NPGAMEMON_GAMEHACK_DETECT:    // "°ÔÀÓÇÙÀÌ ¹ß°ßµÇ¾ú½À´Ï´Ù."
                bAppExit = true;
                lpszMsg    = g_Neuz.m_strArray.GetAt(19);
                break;
            case NPGAMEMON_GAMEHACK_DOUBT:    //"°ÔÀÓÀ̳ª °ÔÀÓ°¡µå°¡ º¯Á¶µÇ¾ú½À´Ï´Ù.";    
                bAppExit = true;
                lpszMsg = g_Neuz.m_strArray.GetAt(20);
                break;
        }
    
        if( lpszMsg )
            MessageBox( g_Neuz.GetSafeHwnd(), lpszMsg, "nProtect GameGuard", MB_OK );
    
        if( bAppExit )
        {
            ExitProcess( -1 );
            return false;
        }
    
        return true;
    }
    Remove this function or comment it out with /* */ now you have removed the ggless neuz.exe...


    Block MootiHack Item creation By Seymourfr
    Spoiler:
    Quote Originally Posted by Seymourfr View Post
    open DPSrvr.cpp and search :

    Code:
    void CDPSrvr::OnBuyingInfo( CAr & ar, DPID dpidCache, DPID dpidUser, LPBYTE lpBuf, u_long uBufSize )
    now comment the code inside this function.

    You can disconnect any player that use this hack with replacing the code inside the function by :

    Code:
    g_dpDBClient.DestroyPlayer( dpidUser );
    return;
    ___

    Improvement by xLethal:

    Quote Originally Posted by xLethal View Post
    The MootiHack fix should be:

    Code:
    return;
    rather than

    Code:
    g_dpDBClient.DestroyPlayer( dpidUser );
    return;
    This way, hackers won't be able to disconnect all of your players. Or, you could keep the functionality of the adbill system like this in DPSrvr.cpp in WorldServer:

    Code:
    void CDPSrvr::OnBuyingInfo( CAr & ar, DPID dpidCache, DPID dpidUser, LPBYTE lpBuf, u_long uBufSize )
    {
        BUYING_INFO2 bi2;
        ar.Read( (void*)&bi2, sizeof(BUYING_INFO2) );
    
        CWorld* pWorld;
        CUser* pUser    = g_UserMng.GetUser( dpidCache, dpidUser );
    
    #ifdef __HACK2011_05
        if( !strstr( bi2.szBxaid, "password" ) ) // change password to what pass you want(use spiken's script with this).
            return;
    #endif // __HACK2011_05
    
    {Rest of function}
    
    }
    Code:
    
    




    fix the onekill / invisible / summon / teleport bug from Toms Hack By rad92
    Spoiler:
    Quote Originally Posted by rad92 View Post
    Hello,
    I show you today how you can fix the
    "onekill / invisible / summon / teleport" bug from Toms Hack

    Copyright @ Yannickmama !!

    1. You go first into the DPSrvr.cpp
    2. You are looking for the following functions:


    PHP Code:
    CDPSrvr::OnModifyMode
    CDPSrvr
    ::OnSummonPlayer
    CDPSrvr
    ::OnTeleportPlayer 
    and change this :

    PHP Code:
    #ifdef __HACK_0516
            
    DPID dpid;
            
    ar >> dpid;
            if( 
    pUser->m_Snapshot.dpidUser != dpid )
            {
                
    Error"[%s] try to hack : PACKETTYPE_MODIFYMODE"pUser->GetName() );
                return;
            }
    #endif    // __HACK_0516 
    to

    PHP Code:
    #ifdef __HACK_0516
            
    DPID dpid;
            
    ar >> dpid;
            if( 
    pUser->m_Snapshot.dpidUser != dpid )
            {
                
    Error"[%s] try to hack : PACKETTYPE_MODIFYMODE"pUser->GetName() );
                return;
            }
            if( !
    pUser->IsAuthHigher(AUTH_GAMEMASTER) )
            {
                
    Error"[%s] try to hack with dpid : PACKETTYPE_MODIFYMODE"pUser->GetName() );
                return;
            }
    #endif    // __HACK_0516 
    If you dont define __HACK_0516 go and define it :-*

    for the Create Item fix from Toms Hack Programm go to :

    CDPSrvr::OnBuyingInfo

    and edit this acutually with you code

    PHP Code:
    void CDPSrvr::OnBuyingInfoCAr arDPID dpidCacheDPID dpidUserLPBYTE lpBufu_long uBufSize )
    {
    /*
        BUYING_INFO2 bi2;
        ar.Read( (void*)&bi2, sizeof(BUYING_INFO2) );

        CWorld* pWorld;
        CUser* pUser    = g_UserMng.GetUser( dpidCache, dpidUser );

        SERIALNUMBER iSerialNumber    = 0;
        if( IsValidObj( pUser ) && ( pWorld = pUser->GetWorld() ) )
        {
            bi2.dwRetVal    = 0;
            CItemElem itemElem;
            itemElem.m_dwItemId        = bi2.dwItemId;
            itemElem.m_nItemNum        = (short)bi2.dwItemNum;
            itemElem.m_bCharged        = TRUE;
            BYTE nId;
            bi2.dwRetVal    = pUser->CreateItem( &itemElem, &nId );
    #ifdef __LAYER_1015
            g_dpDBClient.SavePlayer( pUser, pWorld->GetID(), pUser->GetPos(), pUser->GetLayer() );
    #else    // __LAYER_1015
            g_dpDBClient.SavePlayer( pUser, pWorld->GetID(), pUser->GetPos() );
    #endif    // __LAYER_1015
            if( bi2.dwRetVal )
            {
                CItemElem* pItemElem    = pUser->m_Inventory.GetAtId( nId );
                if( pItemElem )
                {
                    iSerialNumber    = pItemElem->GetSerialNumber();
                    pItemElem->m_bCharged    = TRUE;
                    if( bi2.dwSenderId > 0 )
                    {
                        // %s을 %s님으로부터 선물 받았습니다.
                    }
                }
            }
        }
        g_dpDBClient.SendBuyingInfo( &bi2, iSerialNumber );
    //    FILEOUT( "buyinginfo.txt", "dwServerIndex = %d\tdwPlayerId = %d\tdwItemId = %d\tdwItemNum = %d\n", 
        //    bi2.dwServerIndex, bi2.dwPlayerId, bi2.dwItemId, bi2.dwItemNum );
        static char lpOutputString[260]    = { 0, };
        sprintf( lpOutputString, "dwServerIndex = %d\tdwPlayerId = %d\tdwItemId = %d\tdwItemNum = %d",
            bi2.dwServerIndex, bi2.dwPlayerId, bi2.dwItemId, bi2.dwItemNum );        
        OutputDebugString( lpOutputString );
    */

    Then you have fixed allready the biggest problems

    have fun and good luck <3


    3D Vector increase (I.E. How to fix basilisk crash) By locdogh
    Spoiler:
    _common/Object3d.cpp

    This searches much


    static D3DXVECTOR3 _vPool[4096];
    replace

    static D3DXVECTOR3 _vPool[4202];
    and

    _common/ModelObject.h

    search

    #define MAX_SF_SPLINE 4096
    replace

    #define MAX_SF_SPLINE 4202

    Sorry i don't speak english very well

    have fun !


    Swap bug Quick fix
    By misterkid
    Spoiler:
    Quote Originally Posted by MisterKid View Post
    Hi I fixed the swap bug a long time ago it got tested on my server and it worked
    I posted this because someone kinda posted a youtube thingy about it :O.

    Find this in DPSrv.cpp @ worldserver
    Code:
    void CDPSrvr::OnDoEquip( CAr & ar, DPID dpidCache, DPID dpidUser, LPBYTE lpBuf, u_long uBufSize )
    {
        DWORD nId;
        int nPart;
    
        ar >> nId;
        ar >> nPart;        
        
        if( nPart >= MAX_HUMAN_PARTS )    
            return;
    
        CUser* pUser = g_UserMng.GetUser( dpidCache, dpidUser );
    And put this under it

    Code:
    #ifdef __QUGET_SWAP_FIX
    
                    if( pUser->GetHitPoint() >  pUser->GetMaxHitPoint() )
                         pUser->SetHitPoint( pUser->GetMaxHitPoint());
    
                    if( pUser->GetManaPoint() >  pUser->GetMaxManaPoint() )
                         pUser->SetManaPoint( pUser->GetMaxManaPoint() );
    
                    if( pUser->GetFatiguePoint() >  pUser->GetMaxFatiguePoint() )
                         pUser->SetFatiguePoint( pUser->GetMaxFatiguePoint() );
    
    #endif
    find this in function void CDPClient::OnDoEquip( OBJID objid, CAr & ar ) @ DPClient.cpp
    and add under
    Code:
    if( g_WndMng.m_pWndBeautyShop && g_WndMng.m_pWndBeautyShop->m_pModel )
                {
                    CMover::UpdateParts( pPlayer->GetSex(), pPlayer->m_dwSkinSet, pPlayer->m_dwFace, pPlayer->m_dwHairMesh, pPlayer->m_dwHeadMesh, pPlayer->m_aEquipInfo, g_WndMng.m_pWndBeautyShop->m_pModel, &pPlayer->m_Inventory );
                }
    this
    Code:
    #ifdef __QUGET_SWAP_FIX
                    if( pPlayer->GetHitPoint() >  pPlayer->GetMaxHitPoint() )
                         pPlayer->SetHitPoint( pPlayer->GetMaxHitPoint());
    
                    if( pPlayer->GetManaPoint() >  pPlayer->GetMaxManaPoint() )
                         pPlayer->SetManaPoint( pPlayer->GetMaxManaPoint() );
    
                    if( pPlayer->GetFatiguePoint() >  pPlayer->GetMaxFatiguePoint() )
                         pPlayer->SetFatiguePoint( pPlayer->GetMaxFatiguePoint() );
    
    #endif
    and then define __QUGET_SWAP_FIX in versioncommon.h @neuz and worldserver


    Eel Bug/Asal Glitch Fixes By Alexsh
    Spoiler:
    Quote Originally Posted by Alexsh View Post
    Eel Bug:
    -File:mover.cpp under the restat process [ CMover::ReState() ]
    Code:
        time_t tmCur = (time_t)( CTime::GetCurrentTime().GetTime() );
        for( int i = 0 ; i < SM_MAX ; ++i )
        {
            if( m_dwSMTime[i] > 0 )
            {
                
            ItemProp* aItemprop = prj.GetItemProp( g_AddSMMode.dwSMItemID[i] );
                if( aItemprop )
                {
                    if( i == SM_MAX_HP50 )
                    {
                        ResetDestParam( aItemprop->dwDestParam[0], m_nPlusMaxHitPoint, 1 );
                        ((CUser*)this)->AddSMMode( SM_MAX_HP50, 0 );
                        m_dwSMTime[i] = 0;
                    }
                    g_dpDBClient.SendLogSMItemUse( "2", (CUser*)this, NULL, aItemprop );
                }
                else
                {
                    WriteLog( "%s, %d\r\n\tNo SMItem dwSMItemID[%d] : %d / Name : %s", __FILE__, __LINE__, i, g_AddSMMode.dwSMItemID[i], m_szName );
                }
                
            }
        }
    Asal Glitch:
    -File:AttackArbiter.cpp under the PostAsalraalaikum process [ CAttackArbiter::PostAsalraalaikum() ]
    Code:
        int nMP = m_pAttacker->GetManaPoint();                        // ÀÏ´Ü ¹Þ¾Æ³õ°í
        int nPercent = m_pAttacker->GetManaPointPercent();
        if( m_pAttacker->IsPlayer() && m_pAttacker->IsSMMode( SM_MAINTAIN_MP ) == FALSE && nPercent < 100 )        // MP À¯·á¾ÆÀÌÅÛ ¸Ô¾úÀ»¶§´Â MP´â¸é ¾ÈµÈ´Ù.
            m_pAttacker->SetPointParam( DST_MP, 0 );                // 0À¸·Î ¸¸µë.
                        if( m_pAttacker->GetHitPoint() >  m_pAttacker->GetMaxHitPoint() )
                         {
                             return ( ( ( m_pAttacker->GetStr() / 10 ) * dwSkillLevel ) * 0 );
                         }
                        else if( m_pAttacker->GetManaPoint() >  m_pAttacker->GetMaxManaPoint() )
                        {
                            return ( ( ( m_pAttacker->GetStr() / 10 ) * dwSkillLevel ) * 0 );
                        }
                        else
                        {
        return ( ( ( m_pAttacker->GetStr() / 10 ) * dwSkillLevel ) * ( 5 + nMP / 10 ) + nAddDmg );
                        }



    Fix for the Grilled Eel Restat ExploitBy Jcdacez
    Spoiler:
    Quote Originally Posted by Jcdacez View Post
    I'm not sure if many know of this bug,
    Basically what happens is, Wannabe hacker noob goes full sta,
    Uses a Grilled Eel, then restats back to original stats leaving their HP at overpowered levels.

    In Mover.cpp Find "void CMover::ReState()"
    and Before :

    Code:
    #endif    // __HONORABLE_TITLE            // ´ÞÀÎ
    #endif // __WORLDSERVER
    Add:


    Code:
        if( ((CUser*)this)->IsSMMode(SM_MAX_HP50) )
        {
            SetDestParam( DST_HP, GetMaxOriginHitPoint(), NULL_CHGPARAM, 1 );
            SetHitPoint( GetMaxOriginHitPoint() );
        }
    Then Find "void CMover::ReStateOne( int nKind )"
    and Before :

    Code:
    #endif    // __HONORABLE_TITLE            // ´ÞÀÎ
    #endif // __WORLDSERVER
    Add:

    Code:
    if( ((CUser*)this)->IsSMMode(SM_MAX_HP50) )
        {
            SetDestParam( DST_HP, GetMaxOriginHitPoint(), NULL_CHGPARAM, 1 );
            SetHitPoint( GetMaxOriginHitPoint() );
        }
    What this will do is Detect whether or not a Grilled Eel is Active Then set your HP Back to default


    Finding invisible character fixes By VisualChaser
    Spoiler:
    Quote Originally Posted by VisualChaser View Post
    Well these bugs are kinda small, but it's really annoying if someone uses it to find you.
    The 2 bugs are:

    ~ Right clicking on an invisible player still creates the player menu (with trade, duel, etc)
    ~ Moving your mouse over an invisible player still shows the char info at the top of your screen

    This is my first release ever so please don't blame me if it's a little messy.
    Here are the fixes:

    First find this function:
    CWndWorld::ShowMoverMenu

    Then search for this (It's at the top of the function lol):
    Code:
        // ¸Þ´º¸¦ ¶ç¿ì±â¿¡ Àû´çÇÑ °Å¸®ÀÎÁö È®ÀÎ.
        D3DXVECTOR3 vDist = pTarget->GetPos() - g_pPlayer->GetPos();
        FLOAT fDistSq = D3DXVec3LengthSq( &vDist );
    #if __VER >= 15 // __IMPROVE_SYSTEM_VER15
        if( (fDistSq < 20.0f * 20.0f) && ( m_bRButtonDown == FALSE || ( pTarget->IsPlayer() && m_bRButtonDown == TRUE ) ) )
    #else // __IMPROVE_SYSTEM_VER15
        if( (fDistSq < 20.0f * 20.0f) && m_bRButtonDown == FALSE )
    #endif // __IMPROVE_SYSTEM_VER15
        {
    Below it add this:
    Code:
    if( !g_pPlayer->IsAuthHigher( AUTH_GAMEMASTER ) && ( pTarget->HasBuff( BUFF_SKILL, SI_ACR_SUP_DARKILLUSION ) || pTarget->IsMode( TRANSPARENT_MODE ) ) )
        return;
    This will fix the right clicking bug.
    Now for the second bug find this function:
    CWndWorld::RenderSelectObj

    Inside that function find this:
    Code:
    if( pMover->IsAuthHigher( AUTH_GAMEMASTER ) == TRUE )
    {
        bSkip = TRUE;
    
        if( pMover->HasBuffByIk3(IK3_TEXT_DISGUISE) )
            bSkip = TRUE;
    }
    And replace it with this:
    Code:
    if( pMover->IsAuthHigher( AUTH_GAMEMASTER ) == TRUE || pMover->HasBuff( BUFF_SKILL, SI_ACR_SUP_DARKILLUSION ) || pMover->IsMode( TRANSPARENT_MODE ) )
    {
        bSkip = TRUE;
    
        if( pMover->HasBuffByIk3(IK3_TEXT_DISGUISE) )
            bSkip = TRUE;
    }
    That will fix the char info bug.
    Well that's it, hope it's usefull for some of you!


    CREDITS:

    VisualChaser: 100%



    Restat fix By Sedrika
    Spoiler:

    Quote Originally Posted by Sedrika View Post
    Some people know there is a stat bug if you use Restat with 3rd Job classes. Here is my way to fix it.

    PHP Code:
    void CMover::ReState()
    {
    #ifdef __WORLDSERVER
        
    if( ((CUser*)this)->GetLevel() >= 60 && ((CUser*)this)->GetJob() >= 16 )
            
    m_nRemainGP = ( ( ( ((CUser*)this)->GetLevel() * ) - 59 ) - );
        else
            
    m_nRemainGP = ( ( ((CUser*)this)->GetLevel() * 2) - );
        
        
    m_nStr 15;
        
    m_nSta 15;
        
    m_nDex 15;
        
    m_nInt 15;

        
    SetHitPointGetMaxHitPoint() );
        
    SetManaPointGetMaxManaPoint() );
        
    SetFatiguePointGetMaxFatiguePoint() );
        ((
    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

    Sedrika


    Game add-ons

    Perin Converter By DeadMouse
    Spoiler:

    Quote Originally Posted by DeadMouse View Post
    Perin Converter

    When you reach max amount of penya, it will turn 100m into a perin so you can keep getting penya.

    Mover.cpp


    Preview: Screenshot by Lightshot

    And recompile.


    Automatic Database Backup By Xakzi
    Spoiler:

    Quote Originally Posted by Xakzi View Post
    Yo!

    Some people have had rollback problems due to the database saving the game each 15 minutes..

    so here is a small snippet for how to change the time! :)

    1. You need to have a working source (Will not help with that)
    2. I don't see why you should get an error out of this release
    3. Add this spoiler to the snippet (mod)

    Spoiler:

    Open User.h
    Find
    Code:
    #define SEC_SAVEPLAYER 900
    Seconds = 900 =
    Minutes = 15

    So, if you want it to save each minute,
    you change it to;

    Code:
    #define SEC_SAVEPLAYER 60
    Simple eh? :)


    Sincerely~ Xakzi


    aroundkillcrit/aroundpk/aroundpkcrit By manneke
    Spoiler:
    Quote Originally Posted by manneke
    What this is:
    The title should say it all.

    What you need:
    1. Brain.exe
    2. Source Files + VS2003
    3. Understanding of the IDE and the basics of C++
    4. A GM character that can use GM commands

    How to do it:
    1. Add this under the "TextCmd_AroundKill" function in FuncTextCmd.cpp:
    Spoiler:
    BOOL TextCmd_AroundKillCritical( CScanner & scanner )
    {
    #ifdef __WORLDSERVER
    CUser* pUser = (CUser*)scanner.dwValue;
    if( pUser->GetWeaponItem() == NULL )
    return TRUE;

    CWorld* pWorld = pUser->GetWorld();
    if( pWorld )
    pUser->SendDamageAround( AF_CRITICAL2, (CMover*)pUser, OBJTYPE_MONSTER, 1, 3, 0.0, 2.0f );
    #endif // __WORLDSERVER
    return TRUE;
    }

    BOOL TextCmd_AroundPK( CScanner & scanner )
    {
    #ifdef __WORLDSERVER
    CUser* pUser = (CUser*)scanner.dwValue;
    if( pUser->GetWeaponItem() == NULL )
    return TRUE;

    CWorld* pWorld = pUser->GetWorld();
    if( pWorld )
    pUser->SendDamageAround( AF_MAGICSKILL, (CMover*)pUser, OBJTYPE_PLAYER, 1, 3, 0.0, 1.0f );
    #endif // __WORLDSERVER
    return TRUE;
    }

    BOOL TextCmd_AroundPKCritical( CScanner & scanner )
    {
    #ifdef __WORLDSERVER
    CUser* pUser = (CUser*)scanner.dwValue;
    if( pUser->GetWeaponItem() == NULL )
    return TRUE;

    CWorld* pWorld = pUser->GetWorld();
    if( pWorld )
    pUser->SendDamageAround( AF_CRITICAL2, (CMover*)pUser, OBJTYPE_PLAYER, 1, 3, 0.0, 2.0f );
    #endif // __WORLDSERVER
    return TRUE;
    }


    2. And this under the line that begins with "ON_TEXTCMDFUNC( TextCmd_AroundKill, ", in FuncTextCmd.cpp:

    Spoiler:
    ON_TEXTCMDFUNC( TextCmd_AroundKillCritical, "aroundkillcrit", "akc", "盔秦", "秦", TCM_SERVER, AUTH_GAMEMASTER3 , "绢扼款靛俊 乐绰 阁胶磐" )
    ON_TEXTCMDFUNC( TextCmd_AroundPK, "aroundpk", "apk", "盔力", "力", TCM_SERVER, AUTH_GAMEMASTER3 , "绢扼款靛俊 乐绰" )
    ON_TEXTCMDFUNC( TextCmd_AroundPKCritical, "aroundpkcrit", "apkc", "盔利", "利", TCM_SERVER, AUTH_GAMEMASTER3 , "绢扼款靛俊" )


    3. And replace the if/else statement in MoverSkill.cpp that checks "nDmgType == AF_MAGICSKILL" with this:

    Spoiler:
    if( nDmgType == AF_MAGICSKILL )
    {
    pProp = prj.GetSkillProp( nAttackID ); // UseSkill俊辑 荤侩茄 胶懦狼 橇肺欺萍 波晨
    if( pProp == NULL )
    {
    Error( "CMover::SendDamageAround : %s. 胶懦(%d)狼 橇肺欺萍啊 诀促.", m_szName, nAttackID );
    return; // property not found
    }
    } else
    {
    pProp = prj.GetItemProp( nAttackID ); // 酒捞袍 橇肺欺萍波晨
    if( pProp == NULL )
    {
    //Error( "CMover::SendDamageAround : %s. 酒捞袍(%d)狼 橇肺欺萍啊 诀促.", m_szName, nAttackID );
    //Error( "CMover::SendDamageAround : Property not found on item.", m_szName, nAttackID );
    pProp = prj.GetSkillProp( nAttackID );
    //return; // property not found
    }
    }


    Gay/Lesbian Marriage By Kyubinoyoko
    Spoiler:
    Quote Originally Posted by Kyubinoyoko
    Gay/Lesbian Marriage xD

    delete If statements in couplehelper.cpp at line 62

    Spoiler:
    if( pUser == pTarget )
    {
    pUser->AddDefinedText( TID_GAME_COUPLE_E01 ); // ´ë»óÀÌ ºÎÀûÇÕ ÇÕ´Ï´Ù. Ä¿ÇÃÀÌ ¾Æ´Ñ À̼º ij¸¯ÅÍ¿¡°Ô¸¸ °¡´ÉÇÕ´Ï´Ù.
    return;
    }
    if( pUser->GetSex() == pTarget->GetSex() )
    {
    pUser->AddDefinedText( TID_GAME_COUPLE_E01 ); // ´ë»óÀÌ ºÎÀûÇÕ ÇÕ´Ï´Ù. Ä¿ÇÃÀÌ ¾Æ´Ñ À̼º ij¸¯ÅÍ¿¡°Ô¸¸ °¡´ÉÇÕ´Ï´Ù.
    return;
    }


    Auto login By Aries
    Spoiler:
    Quote Originally Posted by Aries
    Add this to your VersionCommon.h of the Neuz:
    Spoiler:
    #define __CON_AUTO_LOGIN


    Create an ini in the Main folder of Flyff and call it Autologin.ini add this in it and you will auto log into the Game


    Spoiler:
    Account test
    Password test
    n2ndPassword 1234
    nServer 1
    nCharacter 1


    Extended GM Console By Aries
    Spoiler:
    Quote Originally Posted by Aries
    this for the Neuz Console which contains additional commands (VersionCommon.h--> Neuz)
    Spoiler:
    #define __BS_CONSOLE


    PartyFinder SystemBy Balancex3
    Spoiler:
    Quote Originally Posted by Balancex3 View Post
    FuncTextCmd.cpp:
    Code:
    #ifdef __PARTY_FIND
    BOOL TextCmd_getparty( CScanner& scanner )
    {
    #ifdef __WORLDSERVER
        CUser *pUser = (CUser*)scanner.dwValue;
        if( pUser->m_idparty > 0 )
        {
            pUser->AddText( "You are already in a party" );
            return TRUE;
        }
        CParty *pParty;
        pParty = g_PartyMng.GetPartyFree();
        if( pParty )
        {
            g_DPSrvr.InviteParty( pParty->GetLeader()->m_idPlayer, pUser->m_idPlayer, FALSE, TRUE );
        }else
        {
            pUser->AddText( "Sorry, but there is no party for you" );
        }
    #endif
        return TRUE;
    }
    #endif //__PARTY_FIND
    Code:
    BOOL TextCmd_PartyInvite( CScanner& scanner )
    {
    #ifdef __WORLDSERVER
        CUser* pUser = (CUser*)scanner.dwValue;
        MoverProp* pMoverProp = NULL;
        scanner.GetToken();
    #if __VER >= 11 // __SYS_PLAYER_DATA
        u_long uidPlayer    = CPlayerDataCenter::GetInstance()->GetPlayerId( scanner.token );
    #else    // __SYS_PLAYER_DATA
        u_long uidPlayer = prj.GetPlayerID( scanner.Token );
    #endif    // __SYS_PLAYER_DATA
        if( 0 < uidPlayer )
        {
            CUser* pUser2    = g_UserMng.GetUserByPlayerID( uidPlayer );    
            if( IsValidObj( pUser2 ) )
    #ifdef __PARTY_FIND
                g_DPSrvr.InviteParty( pUser->m_idPlayer, pUser2->m_idPlayer, FALSE, FALSE );
    #else
                g_DPSrvr.InviteParty( pUser->m_idPlayer, pUser2->m_idPlayer, FALSE );
    #endif //__PARTY_FIND
            else
                pUser->AddDefinedText( TID_DIAG_0060, "\"%s\"", scanner.Token );
        }
        else
        {
            pUser->AddDefinedText( TID_DIAG_0061, "\"%s\"", scanner.Token );
        }
    #endif // __WORLDSERVER
    
        return TRUE;
    }
    Code:
    #ifdef __PARTY_FIND
        ON_TEXTCMDFUNC( TextCmd_getparty,                "getParty",            "getP",            "",                    "",            TCM_SERVER,    AUTH_GENERAL    ,"" )
    #endif //__PARTY_FIND
    DPClient.cpp;
    Code:
    void CDPClient::OnPartyRequest( CAr & ar )
    {
        u_long uLeader, uMember;
    
        BOOL bTroup
    #ifdef __PARTY_FIND
            , bPartyFind
    #endif// __PARTY_FIND
            ;
        LONG nLeaderLevel, nMemberLevel, nLeaderJob, nMemberJob;
        BYTE byLeaderSex, byMemberSex;
        char szLeaderName[MAX_PLAYER] = {0,};
        ar >> uLeader >> nLeaderLevel >> nLeaderJob >> byLeaderSex;
        ar >> uMember >> nMemberLevel >> nMemberJob >> byMemberSex;
        ar.ReadString( szLeaderName, MAX_PLAYER );
        ar >> bTroup
    #ifdef __PARTY_FIND
            >> bPartyFind
    #endif //__PARTY_FIND
            ;
        
        if( g_Option.m_bParty == FALSE )
        {
            SendPartyMemberCancle( uLeader, uMember, 3 );
            return;
        }
    
    #ifdef __S_SERVER_UNIFY
        if( g_WndMng.m_bAllAction == FALSE )
            return;
    #endif // __S_SERVER_UNIFY
    
        CWndBase* pWndBaseBuf = g_WndMng.GetWndBase( APP_PARTY_CONFIRM );
        
        if( pWndBaseBuf )
        {
            SendBlock( 7, g_pPlayer->GetName(), szLeaderName );
            return;
        }
    #ifdef __PARTY_FIND
        if( bPartyFind )
        {
            SendAddPartyMember( uLeader, nLeaderLevel, nLeaderJob, byLeaderSex, uMember, nMemberLevel, nMemberJob, byMemberSex );
        }else
        {
            g_WndMng.m_pWndPartyConfirm = new CWndPartyConfirm;
            g_WndMng.m_pWndPartyConfirm->SetMember( uLeader, nLeaderLevel, nLeaderJob, byLeaderSex, uMember, nMemberLevel, nMemberJob, byMemberSex, szLeaderName, bTroup );
            g_WndMng.m_pWndPartyConfirm->Initialize();
        }
    #else
        g_WndMng.m_pWndPartyConfirm = new CWndPartyConfirm;
        g_WndMng.m_pWndPartyConfirm->SetMember( uLeader, nLeaderLevel, nLeaderJob, byLeaderSex, uMember, nMemberLevel, nMemberJob, byMemberSex, szLeaderName, bTroup );
        g_WndMng.m_pWndPartyConfirm->Initialize();
    #endif //__PARTY_FIND
    }
    Code:
    #ifdef __PARTY_FIND
    void CDPClient::SendAllowParty( u_long idLeader, u_long idParty, BOOL bAllow )
    {
        BEFORESENDSOLE( ar, PACKETTYPE_ALLOW_PARTY, DPID_UNKNOWN );
        ar << idLeader << idParty << bAllow;
        SEND( ar, this, DPID_SERVERPLAYER );
    
    }
    void CDPClient::OnPartyAllowJoin( CAr & ar )
    {
        ar >> g_Party.m_bAllowEnter;
    }
    #endif //__PARTY_FIND
    Code:
    #ifdef __PARTY_FIND
                case SNAPSHOTTYPE_PARTYALLOW: OnPartyAllowJoin( ar ); break;
    #endif

    party.cpp:
    Code:
    CParty::CParty()
    {
        m_uPartyId    = 0;
        m_nSizeofMember    = 0;
        memset( m_sParty, 0, sizeof(m_sParty) );
        m_nLevel = 1;
        m_nExp = m_nPoint = 0;
        m_nTroupsShareExp = m_nTroupeShareItem = 0;
        m_nKindTroup = 0;                            // ´Ü¸·±Ø´Ü
        m_nReferens = 0;
        m_nGetItemPlayerId = 0;
    #ifdef __PARTY_FIND
        m_bAllowEnter = TRUE;
    #endif //__PARTY_FIND
        for( int i = 0 ; i < MAX_PARTYMODE ; i++ )
        {
            m_nModeTime[i] = 0;
        }
        m_idDuelParty = 0;
    #ifdef __WORLDSERVER
        m_dwWorldId = 0;
    #endif // __WORLDSERVER
    }
    Code:
    void CParty::InitParty()
    {
        m_uPartyId    = 0;
        m_nSizeofMember    = 0;
        memset( m_sParty, 0, sizeof(m_sParty) );
        m_nLevel = 1;
        m_nExp = m_nPoint = 0;
        m_nTroupsShareExp = m_nTroupeShareItem = 0;
        m_nKindTroup = 0;                            // ´Ü¸·±Ø´Ü
        m_nReferens = 0;    
    #ifdef __PARTY_FIND
        m_bAllowEnter = TRUE;
    #endif //__PARTY_FIND
        for( int i = 0 ; i < MAX_PTMEMBER_SIZE ; i++ )
        {
            m_aMember[i].m_uPlayerId    = 0;
            m_aMember[i].m_tTime = CTime::GetCurrentTime();
            m_aMember[i].m_bRemove = FALSE;
    #if __VER < 11 // __SYS_PLAYER_DATA
            m_aMember[i].m_nLevel = m_aMember[i].m_nJob = 0;
            m_aMember[i].m_szName[0] = '\0';
    #endif    // __SYS_PLAYER_DATA
        }
    }
    Code:
    #ifdef __PARTY_FIND
    CParty* CPartyMng::GetPartyFree()
    {
        CParty* pParty, *pPartyTmp = NULL;
        if(  !m_2PartyPtr.begin()->second )
            return NULL;
        BOOL bRan = FALSE;
        DWORD dwRand = 0;
        if( m_2PartyPtr.end()->first >= 1 )
            DWORD dwRand = xRandom( m_2PartyPtr.end()->first );
    
        for( C2PartyPtr::iterator i = m_2PartyPtr.begin(); i != m_2PartyPtr.end(); ++i )
        {
            pParty = (CParty*)i->second;
            if( pParty && pParty->GetSizeofMember() < 8 && pParty->m_bAllowEnter )
            {
                if( i->first > dwRand )
                    return pParty;
                else
                    pPartyTmp = pParty;
            }
        }
        return pPartyTmp;
    }
    #endif //__PARTY_FIND
    DPSrvr.cpp:
    Code:
    #ifdef __PARTY_FIND
    void CDPSrvr::OnAllowParty( CAr & ar, DPID dpidCache, DPID dpidUser, LPBYTE, u_long )
    {
        CUser *pUser = g_UserMng.GetUser( dpidCache, dpidUser );
        if( IsValidObj( pUser ) )
        {
            u_long idLeader, idParty;
            BOOL bAllow;
            ar >> idLeader >> idParty >> bAllow;
            if( idLeader != pUser->m_idPlayer )
                return;
            CParty *pParty = g_PartyMng.GetParty( idParty );
            if( pParty && pParty->IsLeader( idLeader ) )
                pParty->m_bAllowEnter = bAllow;
            else
                return;
    
            CUser *pMember;
            for( int i = 0; i < pParty->m_nSizeofMember; i++ )
            {
                pMember        = (CUser*)prj.GetUserByID( pParty->m_aMember[i].m_uPlayerId );
                if( IsValidObj( (CObj*)pMember ) )
                    pMember->AddPartyAllowJoin( pParty->m_bAllowEnter );
            }
        }
    }
    #endif //__PARTY_FIND
    Code:
    #ifdef __PARTY_FIND
        ON_MSG( PACKETTYPE_ALLOW_PARTY, OnAllowParty );
    #endif //__PARTY_FIND
    Code:
    void CDPSrvr::OnPartyRequest( CAr & ar, DPID dpidCache, DPID dpidUser, LPBYTE lpBuf, u_long uBufSize )
    {
        u_long uLeaderid, uMemberid;
        BOOL bTroup;
        ar >> uLeaderid >> uMemberid;
        ar >> bTroup;
    
        CUser* pUser = g_UserMng.GetUser( dpidCache, dpidUser );
        if( IsValidObj( pUser ) && pUser->m_idPlayer == uLeaderid )
    #ifdef __PARTY_FIND
            InviteParty( uLeaderid, uMemberid, bTroup, FALSE );
    #else
            InviteParty( uLeaderid, uMemberid, bTroup );
    #endif //__PARTY_FIND
    }
    Code:
    #ifdef __PARTY_FIND
    void CDPSrvr::InviteParty( u_long uLeaderid, u_long uMemberid, BOOL bTroup, BOOL bPartyFind )
    #else
    void CDPSrvr::InviteParty( u_long uLeaderid, u_long uMemberid, BOOL bTroup )
    #endif //__PARTY_FIND
    {
        CUser* pUser = g_UserMng.GetUserByPlayerID( uMemberid );
        CUser* pLeaderUser = g_UserMng.GetUserByPlayerID( uLeaderid );
        
        if( IsValidObj( pLeaderUser ) && IsValidObj( pUser ) )
        {
            if( !pUser->IsAuthorization( AUTH_GENERAL ) || !pLeaderUser->IsAuthorization( AUTH_GENERAL ) )
            {
                if( !pUser->IsAuthorization( AUTH_ADMINISTRATOR ) || !pLeaderUser->IsAuthorization( AUTH_ADMINISTRATOR ) )
                {
                    pLeaderUser->AddText("Insufficient Permissions.");
                    pUser->AddText("Insufficient Permissions.");
                    return;
                }
            }
            // ´ëÀüÀå¿¡¼*´Â ÆÄƼ¸¦ ÇÒ¼ö ¾ø½À´Ï´Ù.
            CWorld* pWorld = pUser->GetWorld();
            if( ( pWorld && pWorld->GetID() == WI_WORLD_GUILDWAR ) || pLeaderUser->GetWorld() && pLeaderUser->GetWorld()->GetID() == WI_WORLD_GUILDWAR )
            {            
                pLeaderUser->AddText( prj.GetText(TID_GAME_GUILDCOMBAT_CANNOT_PARTY) );// "¼öÁ¤ÇؾßÇÔ : ±æµå´ëÀüÀå¿¡´Â ÆÄƼ¸¦ ÇÒ¼ö ¾ø½À´Ï´Ù" );
                return;
            }
    #if __VER >= 11 // __GUILD_COMBAT_1TO1
            if( g_GuildCombat1to1Mng.IsPossibleUser( pUser ) )
            {
                pLeaderUser->AddText( prj.GetText(TID_GAME_GUILDCOMBAT_CANNOT_PARTY) );// "¼öÁ¤ÇؾßÇÔ : ±æµå´ëÀüÀå¿¡´Â ÆÄƼ¸¦ ÇÒ¼ö ¾ø½À´Ï´Ù" );
                return;
            }
    #endif // __GUILD_COMBAT_1TO1
    
    #if __VER >= 8 // 8Â÷ µà¾ó 061226 ma
            if( 0 < pUser->m_nDuel ||  0 < pLeaderUser->m_nDuel )
            {
                return;
            }
    #endif // __VER >= 8 // 8Â÷ µà¾ó 061226 ma
            
            if( pLeaderUser->m_nDuel == 2 )
            {            
                pLeaderUser->AddDefinedText( TID_GAME_PPVP_ADDPARTY, "" );        // ±Ø´Ü µà¾óÁß¿£ ÃÊû ¸øÇÔ´Ù.
            } 
            else
            {
                if( 0 < (CMover*)pUser->GetPartyId() )    // ÀÌ¹Ì ÆÄƼ°¡ ÀÖÀ»¶§
                {
                    pLeaderUser->AddPartyRequestCancel( uLeaderid, uMemberid, 1 );
                }
                else
                {
                    if( pUser->IsAttackMode() )
                        pLeaderUser->AddDefinedText( TID_GAME_BATTLE_NOTPARTY, "" );
                    else
    #ifdef __PARTY_FIND
                        pUser->AddPartyRequest( pLeaderUser, pUser, bTroup, bPartyFind );
    #else
                        pUser->AddPartyRequest( pLeaderUser, pUser, bTroup );
    #endif //__PARTY_FIND
                }
            }
        }
        else
        {
            if( IsValidObj( pLeaderUser ) )
                pLeaderUser->AddPartyRequestCancel( uLeaderid, uMemberid, 4 );
        }
    }


    User.cpp:
    Code:
    #ifdef __PARTY_FIND
    void CUser::AddPartyAllowJoin( BOOL bAllow )
    {
        if( IsDelete() ) return;
    
        m_Snapshot.cb++;
        m_Snapshot.ar << GetId();
        m_Snapshot.ar << SNAPSHOTTYPE_PARTYALLOW;
        m_Snapshot.ar << bAllow;
    }
    #endif //__PARTY_FIND
    Code:
    #ifdef __PARTY_FIND
    void CUser::AddPartyRequest( CUser * pLeader, CUser * pMember, BOOL bTroup, BOOL bPartyFind )
    #else
    void CUser::AddPartyRequest( CUser * pLeader, CUser * pMember, BOOL bTroup )
    #endif //__PARTY_FIND
    {
        if( IsDelete() )    return;
        
        m_Snapshot.cb++;
        m_Snapshot.ar << GetId();
        m_Snapshot.ar << SNAPSHOTTYPE_PARTYREQEST;
        m_Snapshot.ar << pLeader->m_idPlayer << pLeader->m_nLevel << pLeader->m_nJob << pLeader->GetSex();
        m_Snapshot.ar << pMember->m_idPlayer << pMember->m_nLevel << pMember->m_nJob << pMember->GetSex();
        m_Snapshot.ar.WriteString( pLeader->m_szName );
        m_Snapshot.ar << bTroup
    #ifdef __PARTY_FIND
            << bPartyFind
    #endif //__PARTY_FIND
            ;
        
    }
    DPSrvr.h(public scope pls):
    Code:
    #ifdef __PARTY_FIND
        void    InviteParty( u_long uLeaderid, u_long uMemberid, BOOL bTroup, BOOL bPartyFind );
    #else
        void    InviteParty( u_long uLeaderid, u_long uMemberid, BOOL bTroup );
    #endif //__PARTY_FIND
    Code:
    #ifdef __PARTY_FIND
        void    OnAllowParty( CAr & ar, DPID dpidCache, DPID dpidUser, LPBYTE, u_long );
    #endif //__PARTY_FIND

    User.h(ebenso):
    Code:
    #ifdef __PARTY_FIND
        void            AddPartyAllowJoin( BOOL bAllow );
        void            AddPartyRequest( CUser * pLeader, CUser * pMember, BOOL bTroup, BOOL bPartyFind );
    #else
        void            AddPartyRequest( CUser * pLeader, CUser * pMember, BOOL bTroup );
    #endif //__PARTY_FIND
    party.h:
    Code:
    #ifdef __PARTY_FIND
        BOOL    m_bAllowEnter;
    #endif
    Code:
    #ifdef __PARTY_FIND
        CParty* GetPartyFree();
    #endif
    WndParty.cpp:
    OnChildNotify:
    Code:
    #ifdef __PARTY_FIND
        else if( nID == WIDC_CHECK1 )
        {
            if( g_Party.IsLeader( g_pPlayer->m_idPlayer ) )
            {
                CWndButton *chk = (CWndButton*)GetDlgItem( WIDC_CHECK1 );
                g_Party.m_bAllowEnter = !chk->GetCheck();
                g_DPlay.SendAllowParty( g_pPlayer->m_idPlayer, g_Party.m_uPartyId, g_Party.m_bAllowEnter );
            }
        }
    #endif //__PARTY_FIND
    OnDraw:
    Code:
    #ifdef __PARTY_FIND
        CWndButton *chk = (CWndButton*)GetDlgItem( WIDC_CHECK1 );
        if( g_Party.IsLeader( g_pPlayer->m_idPlayer ) )
            chk->EnableWindow( TRUE );
        else
            chk->EnableWindow( FALSE );
        chk->SetCheck( !g_Party.m_bAllowEnter );
    #endif
    DPClient.h(public):
    Code:
    #ifdef __PARTY_FIND
        void    OnPartyAllowJoin( CAr& ar );
        void    SendAllowParty( u_long idLeader, u_long idParty, BOOL bAllow );
    #endif //__PARTY_FIND
    No Support,
    Party Window must be Edit per Daisy






    Credtis to Pumbaaa from Epvpers


    v17 Glows By WebSpider
    Spoiler:
    Quote Originally Posted by WebSpider View Post
    Etioom must have inspired people to release stuff, so here it goes.

    Download: File-Upload.net - glow.7z

    Edit these files:
    1. Model.h
    2. ModelGlobal.cpp
    3. ModelGlobal.h
    4. ModelObject.cpp
    5. ModelObject.h
    6. MoverRender.cpp


    After replacing/editing those files, add __NEW_WEAPON_GLOW in your Neuz VersionCommon.h

    Results:



    Credits to srslynub and Alfons from ePvP.



    Quick job changer By TheClouD
    Spoiler:


    Quote Originally Posted by TheClouD View Post
    I found this on e*pvpers, I translated from german to english
    If you are lvl 15,60,129 you can change your job everywhere




    Download :

    http://uploaded.to/file/2j79i7c0


    Creditz
    Pumbaaa 99.9% (coding)
    ClouD 0.1% (translating)






    Happy source modding!
    Last edited by Improved; 20-10-12 at 09:51 PM.




Advertisement