Welcome!

Join our community of MMO enthusiasts and game developers! By registering, you'll gain access to discussions on the latest developments in MMO server files and collaborate with like-minded individuals. Join us today and unlock the potential of MMO server development!

Join Today!

Official Source Snippets Compilation

Status
Not open for further replies.
i sell platypus
Member
Joined
Jun 26, 2009
Messages
2,640
Reaction score
1,326
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
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:
Improved - Official Source Snippets Compilation - RaGEZONE Forums


It generates data like this:
Improved - Official Source Snippets Compilation - RaGEZONE Forums


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.

Improved - Official Source Snippets Compilation - RaGEZONE Forums


Result:
Improved - Official Source Snippets Compilation - RaGEZONE Forums


Voila, no more profiler logs.

Increase CS Pets speed By cffazot
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 *= [COLOR=Red]5[/COLOR];

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
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
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
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
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 [B]PARTS_BULLET:[/B]

^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
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
Allowing all shields to be pierced/Glow

Go to ModelObject.cpp

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

look this code
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 ^^
Improved - Official Source Snippets Compilation - RaGEZONE Forums




Change colour on name according to PvP By kingolo654
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
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
Military said:
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
m_strWindowTitle = _T( "FlyFF" );

change it to your sole desires.




Unlimited Buffs By mcrolanson
NameHere said:
Just edit SkillInfluence.h

#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
Adler said:
Here's how to change the weapon swing color. Open Mover.cpp first. /contribute

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:

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
Aries said:
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

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
WrongWay said:
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
WrongWay said:
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
nabby59 said:
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
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
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.
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
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
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;
[COLOR=Red]    case JOB_PROP_BOW:
        return pProperty->fMeleeBOW;[/COLOR]
    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,
[COLOR=Red]    JOB_PROP_BOW,[/COLOR]
    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;                //크리티컬 처리
[COLOR=Red]    float   fMeleeBOW;[/COLOR]                
};
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();    
        [COLOR=Red]pProperty->fMeleeBOW         = scanner.GetFloat();[/COLOR]
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
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
Removing ip check at the neuz.ini file.

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

Search for
PHP:
    g_Neuz.LoadOption();        // Neuz.ini¸¦ ·Îµù     
    if( lstrlen( g_Option.m_IPAddress ) > 2 )
        lstrcpy( g_Neuz.m_lpCertifierAddr, g_Option.m_IPAddress );
And edit to
PHP:
    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
Here's some things I found in:

source/_common/ProjectCmn.h

Code:
#define    MAX_OBJARRAY            8
[COLOR=Cyan]#define    MAX_QUICKSLOT            21 //I THINK this is the bag.[/COLOR]
#define    MAX_EQUIPMENT            18
[COLOR=Blue]#define    MAX_INVENTORY            42            [/COLOR]            
[COLOR=Blue]#define MAX_GUILDBANK            42[/COLOR]            
[COLOR=Blue]#define    MAX_BANK            42[/COLOR]
#define    MAX_REPAIR            16
[COLOR=Cyan]#define    MAX_TRADE            25[/COLOR]
#define    MAX_VENDITEM            30
#define    MAX_REPAIRINGITEM        25
[COLOR=Blue]#define    MAX_VENDORNAME            48[/COLOR]
#define    MAX_EXPLPPOINT            41
#define    MAX_EXPSKILL            21
#define    MAX_EXPCHARACTER        200
#define    MAX_FXPCHARACTER        200
[COLOR=Cyan]#define    MAX_CHARACTER_LIST        3 [/COLOR]
[COLOR=Lime]#define    MAX_VENDOR_INVENTORY            100[/COLOR]
[COLOR=Lime]#define    MAX_VENDOR_INVENTORY_TAB    4[/COLOR]
#define MAX_PARTYLEVEL            10
#define MAX_ADDEXPPARTY            16
#define    MAX_STUFF                ( MAX_INVENTORY + MAX_QUICKSLOT )

[COLOR=Red]#define MAX_QUESTITEM    16 < Not exactly sure what this defines. I'm not counting all the QI's ingame :/:[/COLOR]

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
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
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
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
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
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
Remove Gameguard:

First open Neuz.cpp
search for:

Code:
[B]#include "NPGameLib4.h"[/B] comment then out or remove it like [B]//#include "NPGameLib4.h"[/B]

After this look for:

Code:
[B]extern void PreInitNProtect();[/B] and
[B]extern CNPGameLib* GetNProtect();[/B]

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
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:

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
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:
CDPSrvr::OnModifyMode
CDPSrvr::OnSummonPlayer
CDPSrvr::OnTeleportPlayer

and change this :

PHP:
#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:
#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:
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 );

    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
_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
Hi I fixed the swap bug a long time ago it got tested on my server and it worked :thumbup1:
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
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
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
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
Some people know there is a stat bug if you use Restat with 3rd Job classes. Here is my way to fix it.

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

    SetHitPoint( GetMaxHitPoint() );
    SetManaPoint( GetMaxManaPoint() );
    SetFatiguePoint( GetMaxFatiguePoint() );
    ((CUser*)this)->AddSetState( m_nStr, m_nSta, m_nDex, m_nInt, m_nRemainGP );
#if __VER >= 13 // __HONORABLE_TITLE            // ´ÞÀÎ
    ((CUser*)this)->CheckHonorStat();
    ((CUser*)this)->AddHonorListAck();
    g_UserMng.AddHonorTitleChange( this, m_nHonor);
#endif    // __HONORABLE_TITLE            // ´ÞÀÎ
#endif // __WORLDSERVER
}

Sedrika

Game add-ons

Perin Converter By DeadMouse
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:

And recompile.

Automatic Database Backup By Xakzi
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)

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
manneke said:
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:
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:

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:

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
Kyubinoyoko said:
Gay/Lesbian Marriage xD

delete If statements in couplehelper.cpp at line 62

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
Aries said:
Add this to your VersionCommon.h of the Neuz:
#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


Account test
Password test
n2ndPassword 1234
nServer 1
nCharacter 1

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

PartyFinder SystemBy Balancex3
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

Improved - Official Source Snippets Compilation - RaGEZONE Forums


Improved - Official Source Snippets Compilation - RaGEZONE Forums



Credtis to Pumbaaa from Epvpers​

v17 Glows By WebSpider
Etioom must have inspired people to release stuff, so here it goes.

Download:

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:
Improved - Official Source Snippets Compilation - RaGEZONE Forums



Credits to srslynub and Alfons from ePvP.


Quick job changer By TheClouD
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

Improved - Official Source Snippets Compilation - RaGEZONE Forums



Download :




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





Happy source modding!
 
Last edited:
Status
Not open for further replies.
Back
Top