Hallo alle zusammen im laufe der zeit werden viele Fragen gestellt und als antwort werden nicht zu selten code Snippets
gepostet welche somit zwar irgendwo stehen aber meist nicht wieder gefunden werden auch denn die Funktion dieser Snippets meist recht praktisch ist hier werde ich einige dieser Snippets zusammentragen um das ewige suchen zu erleichtern.
Maximaler Speed
Neues NPC-Menü hat keinen Namen
Auto Convert Penja To Perin
Credits:
[Only registered and activated users can see links. Click Here To Register...] Siehe [Only registered and activated users can see links. Click Here To Register...]
[Only registered and activated users can see links. Click Here To Register...] Siehe [Only registered and activated users can see links. Click Here To Register...]
[Only registered and activated users can see links. Click Here To Register...] Siehe [Only registered and activated users can see links. Click Here To Register...]
[Only registered and activated users can see links. Click Here To Register...] Siehe [Only registered and activated users can see links. Click Here To Register...]
Nervige WS Warnings (warning LNK4089: all references...)
[Only registered and activated users can see links. Click Here To Register...] Siehe [Only registered and activated users can see links. Click Here To Register...]
Auto Skill Max Working:
How To Debug (z.B. Neuz)
[Only registered and activated users can see links. Click Here To Register...] Siehe [Only registered and activated users can see links. Click Here To Register...]
[Only registered and activated users can see links. Click Here To Register...] Siehe [Only registered and activated users can see links. Click Here To Register...]
Was Muss in den Client
Credits:
[Only registered and activated users can see links. Click Here To Register...] Siehe [Only registered and activated users can see links. Click Here To Register...]
QuickJobchage vebesserungen:
Müste soweit gehen bis Hero ists getestet und Funktioniert.
So macht damit was ihr wollt davon ist nichts von mir habe es nur zusammengetragen...
Ich schaue mal auf meinen anderen PC´s ob ich da noch die anderen Links habe...
Fals ihr noch was habt gerne posten nehme es dann auf.
PS: Das hier ist eigentlich für alles da was einen Release Thread nicht wert ist aber dennoch praktisch ist und public werden soll.
gepostet welche somit zwar irgendwo stehen aber meist nicht wieder gefunden werden auch denn die Funktion dieser Snippets meist recht praktisch ist hier werde ich einige dieser Snippets zusammentragen um das ewige suchen zu erleichtern.
Maximaler Speed
MoverParam.cpp -> FLOAT CMover::GetSpeed(FLOAT fSrcSpeed)
unter:
fügt ihr das hier ein:
So nun definiertihr noch in der VersionCommon.h __LIMIT_MAX_SPEED
und zusätzlich noch MAX_SPEED und zwar so:
Somit ist der maximale speed = 350
Credits [Only registered and activated users can see links. Click Here To Register...] Siehe [Only registered and activated users can see links. Click Here To Register...]
unter:
Code:
int nAdjValue = GetAdjParam( DST_SPEED );
if( nAdjValue != 0 )
{
Code:
#ifdef __LIMIT_MAX_SPEED if( nAdjValue > MAX_SPEED ) nAdjValue = MAX_SPEED; else if( nChgValue > MAX_SPEED ) nChgValue = MAX_SPEED; #endif //__LIMIT_MAX_SPEED
und zusätzlich noch MAX_SPEED und zwar so:
Code:
#define MAX_SPEED 350
Credits [Only registered and activated users can see links. Click Here To Register...] Siehe [Only registered and activated users can see links. Click Here To Register...]
Neues NPC-Menü hat keinen Namen
Credits [Only registered and activated users can see links. Click Here To Register...] Siehe [Only registered and activated users can see links. Click Here To Register...]Quote:
Das ist eine ziemlich lustige Angelenheit. Ohne den Source ist es echt schwer darauf zu kommen.
Du definierst ja das MMI_MENU in der DefineNeuz, den Text (TID_MMI_MENU) jedoch in der defineText.
Diese TID's werden in der TextClient eingetragen. Doch wie "verbindet" man den Text mit dem Dialog
Die define's müssen genau 7000 höher sein. Also wenn du z.B. "MMI_QUEST" Quest anschaust,
siehst du dass es als 1 definiert ist.
Das heißt du musst TID_MMI_QUEST in der defineText als 7001 definieren.
Verstanden?
Auto Convert Penja To Perin
Quote:
Hier eine komplett Bugfreie Version :
User.cpp :
defineText.h (Im Resource Ordner der Source / im Resource)Code:void CUser::AddGoldText( int nPlus ) { char szPlus[64]; char szGold[64]; sprintf( szPlus, "%d", nPlus ); sprintf( szGold, "%d", GetGold() ); CString strPlus = GetNumberFormatEx( szPlus ); CString strGold = GetNumberFormatEx( szGold ); if( GetGold() > 2100000000 && this->m_Inventory.GetEmptyCount() == 0 && CMover::GetPerinNum() > 0 ) { CItemElem pItem; pItem.m_nItemNum = CMover::GetPerinNum() + 21; pItem.m_bCharged = TRUE; pItem.m_dwItemId = II_SYS_SYS_SCR_PERIN; BYTE nID; CMover::RemovePerin( CMover::GetPerinNum() ); CreateItem( &pItem, &nID ); AddGold( -2100000000 ); AddDefinedText( TID_GAME_MAKEPERIN ); } else if (GetGold() > 2100000000 && this->m_Inventory.GetEmptyCount() > 0 && CMover::GetPerinNum() == 0) { CItemElem pItem; pItem.m_nItemNum = 21; pItem.m_bCharged = TRUE; pItem.m_dwItemId = II_SYS_SYS_SCR_PERIN; BYTE nID; CreateItem( &pItem, &nID ); AddGold( -2100000000 ); AddDefinedText( TID_GAME_MAKEPERIN ); } else if (GetGold() > 2100000000 && this->m_Inventory.GetEmptyCount() > 0 && CMover::GetPerinNum() > 1) { CItemElem pItem; pItem.m_nItemNum = 21; pItem.m_bCharged = TRUE; pItem.m_dwItemId = II_SYS_SYS_SCR_PERIN; BYTE nID; CreateItem( &pItem, &nID ); AddGold( -2100000000 ); AddDefinedText( TID_GAME_MAKEPERIN ); } else if (GetGold() > 2100000000 && this->m_Inventory.GetEmptyCount() == 0 && CMover::GetPerinNum() == 0) { AddDefinedText( TID_GAME_MAKEPERIN_FAILURE ); } AddDefinedText( TID_GAME_REAPMONEY, "%s %s", strPlus, strGold ); }
textClient.inc (Im Resource)Code:TID_GAME_MAKEPERIN 0xffbb00 { IDS_TEXTCLIENT_INC_100000 } TID_GAME_MAKEPERIN_FAILURE 0xff0000 { IDS_TEXTCLIENT_INC_100001 }
textClient.txt.txt (Im Resource)Code:TID_GAME_MAKEPERIN 0xffbb00 { IDS_TEXTCLIENT_INC_100000 } TID_GAME_MAKEPERIN_FAILURE 0xff0000 { IDS_TEXTCLIENT_INC_100001 }
Perin Stacks werden beibehalten, es werden nur Perins erstellt / Penya abgezogen wenn Inventar Platz hat, oder ein Perin Stack vorhanden ist. Es wird eine (goldene xD) Nachricht ausgegeben, wenn die Perins erstellt wurden, oder eine (rote) ausgegeben, wenn kein Platz im Inventar ist.Code:IDS_TEXTCLIENT_INC_100000 Es wurden 21 Perins erstellt. Der Betrag wurde von deinen Penya abgezogen. IDS_TEXTCLIENT_INC_100001 Es konnten keine Perins erstellt werden, bitte prüfe dein Inventar.
Quote:
Also die defineText.h muss doch anders sein oder ?
wie z.B:
#define TID_GAME_MAKEPERIN 4702
#define TID_GAME_MAKEPERIN_FAILURE 4703
Credits:
[Only registered and activated users can see links. Click Here To Register...] Siehe [Only registered and activated users can see links. Click Here To Register...]
[Only registered and activated users can see links. Click Here To Register...] Siehe [Only registered and activated users can see links. Click Here To Register...]
[Only registered and activated users can see links. Click Here To Register...] Siehe [Only registered and activated users can see links. Click Here To Register...]
[Only registered and activated users can see links. Click Here To Register...] Siehe [Only registered and activated users can see links. Click Here To Register...]
Nervige WS Warnings (warning LNK4089: all references...)
Credits:Quote:
Right Click the WorldServer solution
and click the linker tab
then click the command
then type this
/IGNORE:4089
then hit ok then rebuild
[Only registered and activated users can see links. Click Here To Register...] Siehe [Only registered and activated users can see links. Click Here To Register...]
Auto Skill Max Working:
MoverParam.cpp -> BOOL CMover::AddChangeJob( int nJob )
sucht nach:
und fügt darunter das ein:
Das müsst ihr mindestens 3mal machen 4mal wenn ihr die 3rd jobs drin habt aber nur in der oben genannten Funktion
außerdem müsst ihr noch:
mover.cpp
sucht nach:
und fügt darunter das ein:
Hier müssten es 2 stellen sein an denen es vorkommt.
zu guter letzt definiert ihr noch in der VerisonCommon.h (vom WS und der Neuz) __AUTO_SKILL_MAX und fertig
Credits:
BloodyFlyff
[Only registered and activated users can see links. Click Here To Register...] siehe [Only registered and activated users can see links. Click Here To Register...]
sucht nach:
Code:
lpSkill->dwSkill = pSkillProp->dwID;
Code:
#ifdef __AUTO_SKILL_MAX lpSkill->dwLevel = pSkillProp->dwExpertMax; #endif //__AUTO_SKILL_MAX
außerdem müsst ihr noch:
mover.cpp
sucht nach:
Code:
lpSkill->dwSkill = pSkillProp->dwID;
Code:
#ifdef __AUTO_SKILL_MAX lpSkill->dwLevel = pSkillProp->dwExpertMax; #endif //__AUTO_SKILL_MAX
zu guter letzt definiert ihr noch in der VerisonCommon.h (vom WS und der Neuz) __AUTO_SKILL_MAX und fertig
Credits:
BloodyFlyff
[Only registered and activated users can see links. Click Here To Register...] siehe [Only registered and activated users can see links. Click Here To Register...]
How To Debug (z.B. Neuz)
Quote:
Eig hat ers voll simple erklärt, sodass selbst ich es nachmachen könnte, die keinerlei Ahnung von dem Programm hat.^^
Na,ja hier in Bildern:
1. propeties debug den workingpath einstellen
[Only registered and activated users can see links. Click Here To Register...]
2. im linker den ausgabe pfad
[Only registered and activated users can see links. Click Here To Register...]
3. start parameter im debugger einstellen(sunkist z.b.) -> müsste das sein, aber frag lieber nochmal Google.
[Only registered and activated users can see links. Click Here To Register...]
4. neuz->rechtsklick->debug->start new instance
[Only registered and activated users can see links. Click Here To Register...]
Credits:Quote:
fast, im debug working path muss der client pfad sein
[Only registered and activated users can see links. Click Here To Register...] Siehe [Only registered and activated users can see links. Click Here To Register...]
[Only registered and activated users can see links. Click Here To Register...] Siehe [Only registered and activated users can see links. Click Here To Register...]
Was Muss in den Client
Jetzt die Neuz.exe und .ini nicht vergessen und dann geht es los.Quote:
Ordner
DLLQuote:
Char
Client
Dialog
Icon
Item
Model
Music
Sfx
Theme
World
Weather
Quote:
dbghelp.dll
DSETUP.dll
mss32.dll
NeuzD.dll
mssogg.asi
Credits:
[Only registered and activated users can see links. Click Here To Register...] Siehe [Only registered and activated users can see links. Click Here To Register...]
QuickJobchage vebesserungen:
Quote:
MoverParam.cpp
ersetzt:
[CODE]
#ifdef __CLIENT
if( (GetLevel() == 120 || GetLevel() == 129) && GetExpPercent() == 9999 )
{
SAFE_DELETE( g_WndMng.m_pJobChangeEx );
g_WndMng.m_pJobChangeEx = new CWndJobChangeEx;
g_WndMng.m_pJobChangeEx->Initialize();
}
#endif
mit:
Ist besser finde ich :)Code:#ifdef __CLIENT if( (GetLevel() == MAX_GENERAL_LEVEL || GetLevel() == MAX_LEGEND_LEVEL) && GetExpPercent() == 9999 ) { SAFE_DELETE( g_WndMng.m_pJobChangeEx ); g_WndMng.m_pJobChangeEx = new CWndJobChangeEx; g_WndMng.m_pJobChangeEx->Initialize(); } #endif
Credits für beides Ich^^Quote:
Auto Master Hero 3rd Jobchange (Der einfache Weg)
ersetzt euremit dieser hier:Code:BOOL CWndJobChangeEx::Initialize( CWndBase* pWndParent, DWORD dwType )
und definiert in eurer Neuz __AUTO_MASTER_HERO_3RD_JOBCHANGECode:BOOL CWndJobChangeEx::Initialize( CWndBase* pWndParent, DWORD dwType ) { BYTE currentJob = g_pPlayer->GetJob(); short currentLevel = g_pPlayer->GetLevel(); if( currentLevel == 15 || currentLevel == 60 || ( ( currentLevel == MAX_GENERAL_LEVEL || currentLevel == MAX_LEGEND_LEVEL ) && g_pPlayer->GetExpPercent() == 9999 ) ) { if( currentJob == 0 ){ nJobMin = 1; nJobMax = 4; nNewLv = 15; } else if( currentJob < MAX_EXPERT ){ nJobMin = (currentJob + 2) * 2; nJobMax = nJobMin + 1; nNewLv = 60; } else if( currentJob < MAX_PROFESSIONAL ){ nCurJob = currentJob + 10; nJobMin = nCurJob; nJobMax = nCurJob; nNewLv = 60; #ifdef __AUTO_MASTER_HERO_3RD_JOBCHANGE g_DPlay.UpdateJob( nCurJob, nNewLv ); return true; #endif //__AUTO_MASTER_HERO_3RD_JOBCHANGE } else if( currentJob < MAX_MASTER ){ nCurJob = currentJob + 8; nJobMin = nCurJob; nJobMax = nCurJob; nNewLv = MAX_GENERAL_LEVEL; #ifdef __AUTO_MASTER_HERO_3RD_JOBCHANGE g_DPlay.UpdateJob( nCurJob, nNewLv ); return true; #endif //__AUTO_MASTER_HERO_3RD_JOBCHANGE } else if( currentJob < MAX_HERO ){ nCurJob = currentJob + 8; nJobMin = nCurJob; nJobMax = nCurJob; nNewLv = MAX_LEGEND_LEVEL; #ifdef __AUTO_MASTER_HERO_3RD_JOBCHANGE g_DPlay.UpdateJob( nCurJob, nNewLv ); return true; #endif //__AUTO_MASTER_HERO_3RD_JOBCHANGE } nCurJob = nJobMin; }else{ nCurJob = 0; } return CWndNeuz::InitDialog( g_Neuz.GetSafeHwnd(), APP_FASTJOBCHANGE, 0, CPoint( 0, 0 ), pWndParent ); }
Müste soweit gehen bis Hero ists getestet und Funktioniert.
So macht damit was ihr wollt davon ist nichts von mir habe es nur zusammengetragen...
Ich schaue mal auf meinen anderen PC´s ob ich da noch die anderen Links habe...
Fals ihr noch was habt gerne posten nehme es dann auf.
PS: Das hier ist eigentlich für alles da was einen Release Thread nicht wert ist aber dennoch praktisch ist und public werden soll.