- 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.
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:
It generates data like this:
How to disable it:
- Open VersionCommon.h in the WorldServer project
- Find all occurrences of #define __NEW_PROFILE and comment those lines out (two slashes at the beginning of the line //)
- Do the same from above for #define __PROFILE_RUN
- Compile the WorldServer and you're done.
Result:
Voila, no more profiler logs.
Increase CS Pets speed By cffazot
1. Open CreateObj.cpp in _Common folder
2. Look for this:
3. Underneath it add 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; }
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 ^^
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 beWorks 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 itBloom 1
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):
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)Code:pPlayer->m_tGuildMember += CTimeSpan( 2, 0, 0, 0 );
Second part:
Find the GUILD_STR stored procedure in CHARACTER_DBF and find this in the procedure (Again its there twice):
Now changeCode: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)
to the same value you entered above. i.e. 5 minutes againCode:DATEADD(d,2,GETDATE())))
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
then u see some of JOB_PROP..Code:CMover::GetJobPropFactor
then you have the red text to add
then search for: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;
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
u will find this:Code:enum JOB_PROP_TYPE
then you have the red text to addCode:// 직업에 따른 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 search in ProjectCmn.h for
u will find this:Code:fMeleeYOYO;
then you have the red text to add....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 open project.cpp
and search for
u will find this:Code:fMeleeYOYO
then you have the red text to add....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]
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
u will find this here:Code:#endif //__PROTECT_AWAKE
if you want to delete the window and want text to appear then change to:Code:pUser->AddDiagText( prj.GetText( nOk ) );
Okay if u have problems pm meCode:pUser->AddText("Awakening removed");
//edit my postbox work now
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
And edit toPHP:g_Neuz.LoadOption(); // Neuz.ini¸¦ ·Îµù if( lstrlen( g_Option.m_IPAddress ) > 2 ) lstrcpy( g_Neuz.m_lpCertifierAddr, g_Option.m_IPAddress );
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:
Which will add 50% jump height. This method is much better than exploiting an overflow.Code:/sro 68 50
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
I posted this because someone kinda posted a youtube thingy about it :O.
Find this in DPSrv.cpp @ worldserver
And put this under itCode: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 );
find this in function void CDPClient::OnDoEquip( OBJID objid, CAr & ar ) @ DPClient.cppCode:#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
and add under
thisCode: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 ); }
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:ostAsalraalaikum() ]
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 :
Add:Code:#endif // __HONORABLE_TITLE // ´ÞÀÎ #endif // __WORLDSERVER
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 :
Add:Code:#endif // __HONORABLE_TITLE // ´ÞÀÎ #endif // __WORLDSERVER
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 SedrikaSome 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:You must be registered to see links
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
Credtis to Pumbaaa from Epvpers
v17 Glows By WebSpider
Etioom must have inspired people to release stuff, so here it goes.
Download:You must be registered to see links
Edit these files:
- Model.h
- ModelGlobal.cpp
- ModelGlobal.h
- ModelObject.cpp
- ModelObject.h
- 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 TheClouDI 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 :
You must be registered to see links
Creditz
Pumbaaa 99.9% (coding)
ClouD 0.1% (translating)
Happy source modding!
Last edited: