Ich mach mal eine Sammlung von Source Edits
nicht alle von mir einige auch von anderen ( werde Credits angeben ).
Post Bug Fix
Post Bug Fix
Neue NPC Dialoge [Sehr NICE!]
"Neue NPC Dialoge [Sehr NICE!
"]
[Source]How to add new NPC Dialog's
So, Hallo erstmal an alle, die hier in der Flyff welt ihre Seele verloren haben
Ich will euch heute mal zeigen wie man eigene NPC Dialoge via WorldDialog.dll + WorldDialog.txt Addet in paar einfach Schritten, damit es auch 100% jeder Kapiert.
Als erstes brauchen wie folgende daten:
- WorldDialog.txt
- character.txt.txt
- character.inc
- WorldDialog.dll (Besser: Source)
- Mathe Kenntnisse
So dann fangen wir mal an
Als erstes öffnen wir mal die "character.inc" dann sieht das am anfang so aus:
[align=left] //이 파일 수정 시에 절대 EditPlus를 사용하시지 마십시요.
//유니코드 부분에 충돌이 있습니다.
//메모장을 사용하여 주십시요.
/*
국가별 NPC 출력 설정 방법
SetLang( 국가 디파인 )
SetLang( 국가 디파인, 국가 서브 디파인 )
SetOutput( truth )
setLang으로 국가 설정. SetOutput으로 설정된 국가에만 NPC를 출력 할지(ture), 출력 안할지(false) 설정.
기본값은 truth임
*/
/*
국가별 MMI 출력 설정 방법
AddMenuLang( LANG_KOR, 0, MMI_XXXX )
가운데 0은 SUB LANG
여러국가에서 나와야 하는경우엔 여러개 써야함
AddVendorSlotLang
설명 : AddVendorSlot( 0, IDS_CHARACTER_INC_000022 );의 확장입니다.
사용법 : AddVendorSlotLang( LANG_JAP, 0, 0, IDS_CHARACTER_INC_000022 );
// 뒤 2개 인자는 AddVendorSlot과 동일 하고 앞의 두개는
// 국가 디파인, 국가 서브 디파인입니다.
... usw
[/align]
Alles anzeigen
dort scrollen wir mal ganz runter, und adden einen neuen NPC mit diesem Code:
MaFi_TUT_CRASY
{
setting
{
SetOutput( false );
AddMenu( MMI_DIALOG );
SetImage
(
IDS_CHARACTER_INC_000864
);
m_szDialog= "MaFl_Herold.txt";
}
SetName
(
IDS_CHARACTER_INC_000865
);
}
Alles anzeigen
So, das "MaFi_Herold.txt" könnt ihr erstmal ignorieren, das zeig ich euch in meinem nächsten tut.
Wichtig ist im moment nur:
Name = "MaFi_TUT_CRASY"
Figur = "IDS_CHARACTER_INC_000864" (könnt z.b. auch ihn als Aibatt hin haun)
IG Name = "IDS_CHARACTER_INC_000865"
als nächstes addet ihr in der "Character.txt.txt" folgendes ganz unten:
Wichtig ist, das die ID hinter "INC_" genau überein stimmt mit der ID in der Character.inc, so nun habt ihr eigentlich schon die Hälfte geschafft, aber zu hauptteil kommen wir erst jetzt.
Und zwar öffnet ihr nun mal die Source, btw nicht nur ihrgend eine Source sondern die "WorldDialog71.sln" diese findet ihr im Ordner "WORLDDIALOG" in der Source, wenn ihr dies getan habt öffnet ihr an der seite (bei mir rechts) die 2 dateien "NpcScript.cpp" und die dazugehörende ".h" datei, als erstes kommen wir zu der "NpcScript.cpp" datei wenn ihr die offen habt steht am anfang erstmal nur sowas:
[COLOR=#000000][COLOR=#ff8000]#include "stdafx.h"
#include "NpcScript.h"
/////////////////////////////////////////////////////////////////////////////
// extern functions
/////////////////////////////////////////////////////////////////////////////
[/COLOR][COLOR=#0000bb]extern void InitFunctions[/COLOR][COLOR=#007700]();
[/COLOR][COLOR=#0000bb]extern PFN GetFunction[/COLOR][COLOR=#007700]( const [/COLOR][COLOR=#0000bb]char[/COLOR][COLOR=#007700]* [/COLOR][COLOR=#0000bb]szFunction [/COLOR][COLOR=#007700]);
[/COLOR][COLOR=#ff8000]/////////////////////////////////////////////////////////////////////////////
// global variable
[/COLOR][COLOR=#0000bb]usw[/COLOR][COLOR=#007700].. [/COLOR][/COLOR]
Alles anzeigen
Das ist für uns aber im moment nicht wichtig.
Geht nun in dieser datei ans ende bis zu "//Script End" addet vor dem "//Script End" folgenden code:
[align=left] void CNpcScript::mafl_Crasy_0()
{
Speak( NpcId(), 1267 );
SetScriptTimer( 15 );
}
void CNpcScript::mafl_Crasy_1()
{
}
void CNpcScript::mafl_Crasy_2()
{
AddKey( 9 );
AddKey( 10 );
}
void CNpcScript::mafl_Crasy_3()
{
}
void CNpcScript::mafl_Crasy_4()
{
Say( ZEILE );
}
void CNpcScript::mafl_Crasy_5()
{
}
void CNpcScript::mafl_Crasy_6()
{
}
void CNpcScript::mafl_Crasy_7()
{
}
void CNpcScript::mafl_Crasy_8()
{
}
void CNpcScript::mafl_Crasy_9()
{
Say( ZEILE );
}
void CNpcScript::mafl_Crasy_10()
{
Speak( NpcId(), 1268 );
Exit();
[/align]
}
Alles anzeigen
So, dort seht ihr "Say( ZEILE );" dies ist momentan noch nicht wichtig, dazu kommen wir später, nun ist nur wichtig das ihr in der "NpcScript.h" datei folgendes addet ganz unten vor dem "};":
void mafl_Crasy_0();
void mafl_Crasy_1();
void mafl_Crasy_2();
void mafl_Crasy_3();
void mafl_Crasy_4();
void mafl_Crasy_5();
void mafl_Crasy_6();
void mafl_Crasy_7();
void mafl_Crasy_8();
void mafl_Crasy_9();
void mafl_Crasy_10();
Alles anzeigen
so nun öffnet ihr mal die "WorldDialog.txt" datei und addet ganz unten das, was euer NPC sagen soll, ich nehme nun mal einfach "Hallo, mein Name ist: Crasy" und als 2. adde ich darunter "Wie lautet dein Name?" dann sollte das einfach mal so aussehen:
ihr dürft es nicht hinter einander schreiben!
Okay, jetzt geht ihr auf den text "Hallo, mein Name ist: Crasy" oder einfach euern 1. Text, wenn ihr das habt macht ihr mal "STRG + G" dann bekomt ihr eine Zeile angezeigt, in meinem Fall sind das die "1251" und "1252", jetzt gehen wir mit diesen 2 zeilen wieder zurück zu unserer "NpcScript.cpp" und da seht ihr, das ich 2x "Say( ZEILE)" addet habe, diese ersetzt ihr nun durch:
So, ihr habt es eigentlich geschafft, alles speichern und die WorldDialog Compilen, ihr den Res ordner ziehen und fertig, schon kann euer NPC Reden 
Hier noch paar Codes, für die, die nicht auf den lw text stehen:
#b = Ihr schreibt Fett
#FarbCode = Farbig schreiben, format: Hex
#i = Euer Text ist unterstrichen
Wer noch, will, das der NPC den text wo ihr wollt öfters Say't dann müsst ihr
ändern, und der NPC ist schneller 
Wer Probleme o. Fragen hat, kann die hier o. per PN stellen.
Ich werde bald auch ein Tut schreiben wo wir "Speak, AddKey" behandeln, bin im moment zu Müde dafür 
Öhm ja, hier noch Credits:
Found + Geschrieben von: Crasy 100%
Wachhalten + Unterhaltung: Cross, danke auch dafür 
So, das wars erstmal bis später.
Mfg euer Crasy 
Sunkist entfernen / ändern
Sunkist entfernen / ändern
Ihr sucht in der Neuz nach sunkist und dann werdet ihr das sehen.
Kommentiert es aus und ihr könnt die neuz einfach so starten.
Wenn ihr verändern wollt ändert einfach das wort sunkist
MD5 Hash ändern
MD5 Hash ändern
Ihr kommt nicht Ingame kommt immer Passwort falsch dan liegt es warscheinlich daran das bei LANG_ENG nicht kikugalanet steht so könnt ihr das ändern.
Also ihr sucht in der neuz nach kikugalanet und werdet das hier finden und ändert das wort zu Kikugalanet.
Bow Damage in Propjob.inc hinzufügen
Bow Damage hinzufügen
Bow Damage in Propjob.inc hinzufügen
Öffne Moverattack.cpp
und suche :
Du wirst was sehen von Job_PROP
Da musst du den roten Text hinzufügen.
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;
Alles anzeigen
then search for:
Du wirst finden :
case WT_RANGE_BOW:
nATK = (int)( (((GetDex()-14)*4.0f + (GetLevel()*1.3f) + (GetStr()*0.2f)) * 0.7f) );
break;
Du musst das dan in das hier umwandeln :
case WT_RANGE_BOW:
nATK = (int)( float(( GetDex() - 14 ) * GetJobPropFactor(JOB_PROP_BOW)) + (float(GetLevel() * 0.7f)) );
break;
Öffne ProjectDmn.h
Und suche :
Du wirst das finden :
// 직업에 따른 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,
};
Alles anzeigen
Dann fügst dann den roten Text hinzu.
Dann such in ProjectCmn.h das hier :
Du wirst das hier finden :
// 직업에 따른 프로퍼티 ( 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]
};
Du musst den roten Text hinzufügen.
Dann suchst du das hier :
[CODE] fMeleeYOYO [/CODE]Du wirst das hier finden :
[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] [/CODE] Den roten Text müsst ihr hinzufügen
Der Letze Teil des Guides
Ihr müsst das hier in die probjob.inc hinzufügen.
[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 [/CODE]Credits : Mentus
Ich hab es auf Deutsch nur geschrieben. ^^
Alles anzeigen
Shop Items einzeln hinzufügen
Shop Items einzeln hinzufügen
Was ist das?
Kennt ihr das lästige hinzufügen von Items durch AddVendorShop? Es nervt, dass es keine Funktion dafür gibt einzelne Items hinzufügen zu können. Deswegen stelle ich euch hier meine Mod zur Verfügung und ein kleines How To wie ihr sie einfach in euren Source hinzufügen könnt.
Nach dem einfügen könnt ihr einfach in der character.inc die Funktion AddShopItem benutzen.
Beispiel: AddShopItem( 0, II_WEA_WOODEN );
Das würde ein Wooden Sword im Tab 0 hinzufügen
Ihr sucht nach
und nach der Zeile
(am Ende der Funktion) fügt ihr das ein
#ifdef __ADDSHOPITEM
else if( script.Token == "AddShopItem" )
{
script.GetToken(); // (
int nSlot = script.GetNumber(); script.GetToken(); //
DWORD dwId = script.GetNumber(); script.GetToken(); //
LPVENDOR_ITEM pVendorItem = new VENDOR_ITEM;
pVendorItem->m_dwItemId = dwId;
lpCharacter->m_venderItemAry3[ nSlot ].Add( pVendorItem );
}
#endif
Alles anzeigen
Danach sucht ihr nach
und nach der Zeile
fügt ihr das ein
#ifdef __ADDSHOPITEM
for( j = 0; j < MAX_VENDOR_INVENTORY_TAB; j++ )
{
for( i = 0; i < lpCharacter->m_venderItemAry3[ j ].GetSize(); i++)
safe_delete( (LPVENDOR_ITEM)lpCharacter->m_venderItemAry3[ j ].GetAt(i) );
}
#endif
Dann sucht ihr nach
und nach den Zeilen
fügt ihr das ein
#ifdef __ADDSHOPITEM
if( pCharacter->m_venderItemAry3[i].GetSize() )
{
fShop = TRUE;
for( int j = 0; j < pCharacter->m_venderItemAry3[i].GetSize(); j++)
{
pVendor = (LPVENDOR_ITEM)pCharacter->m_venderItemAry3[i].GetAt(j);
CItemElem itemElem;
itemElem.m_dwItemId = pVendor->m_dwItemId;
itemElem.m_nItemNum = (short)( prj.GetItemProp( pVendor->m_dwItemId )->dwPackMax );
itemElem.m_nHitPoint = prj.GetItemProp( pVendor->m_dwItemId )->dwEndurance;
m_ShopInventory[i]->Add( &itemElem );
}
}
#endif
Alles anzeigen
Und zum Schluss sucht ihr
und fügt DRÜBER das ein
Natürlich müsst ihr noch in jeder VersionCommon.h #define __ADDSHOPITEM hinzufügen
Nicht vergessen alle Server und die Neuz neu zu kompilieren
Credits: Flyff-Service
Hier nochmal GM Name vor den Shout hab ich zwar auch selber herausgefunden finde das TuT von Cross aber einfach toll :D
Gm Name hsout
Hallo,
in diesem Tutorial erkläre ich eich einmal wie ihr den GM Namen vor den "/sys" Shout bekommt.
Zuerst suchen wir in der FuncTextCmd.cpp nach diesem Code:
Dies sagt uns das wir beim befehl /system (= /sys) sind.
Hier müssen wir nun 2 Teile einfügen.
1.
Dies sucht den Namen des Users und wir binden ihn an die Variable "strName".
Der gesamtCode sieht nun so aus:
BOOL TextCmd_System( CScanner & scanner )
{
#ifdef __WORLDSERVER
CHAR szString[512] = "";
CUser* pUser = (CUser*)scanner.dwValue;
CString strName;
strName = pUser->GetName();
scanner.GetLastFull();
if( strlen( scanner.token ) >= 512 )
return TRUE;
strcpy( szString, scanner.token );
StringTrimRight( szString );
g_DPCoreClient.SendSystem( szString );
#endif // __WORLDSERVER
return TRUE;
}
Alles anzeigen
2. Jetzt müssen wir noch die ausgabe einfügen.
dies machen wir mit:
Dieser Code sagt da die ausgabe des befehls /Sys [strName] szString (message) sein soll
Unser Endcode:
BOOL TextCmd_System( CScanner & scanner )
{
#ifdef __WORLDSERVER
CHAR szString[512] = "";
CUser* pUser = (CUser*)scanner.dwValue;
CString strName;
strName = pUser->GetName();
scanner.GetLastFull();
if( strlen( scanner.token ) >= 512 )
return TRUE;
strcpy( szString, scanner.token );
StringTrimRight( szString );
g_DPCoreClient.SendSystem( "[" + strName + "]" + szString );
#endif // __WORLDSERVER
return TRUE;
}
Alles anzeigen
Credits:
Schreiben: Cross
Code: Basis > Aeonsoft
erweiterung: Cross
Weitergabe nur mit ausdrücklicher angabe dieser Credits gestattet!
Greetings,
cross
Crash Pakets fixxen
Crash Pakets
Deutsche Übersetzung für euch: ( von Cross )
Ok leute, da ich derzeit nichts zu tun habe werde ich hier releasen wie ihr jedes crash/dupe Packet blocken und die/den ID/Nicknamen der Person, die versucht euren Server zu crashen, zu speichern.
Als erstes benötigt ihr ein installiertes VS.NET 2003 mit Service Pack 1 und den/die Flyff Source
Um diese packete zu blocken, müsst ihr due DPServer.cpp öffnen, welche sich im WORLDSERVER ordner befinded.
Equiptment Crash
Suche nach:
Füge unter das gefundene hinzu:
CUser* pUser = g_UserMng.GetUser( dpidCache, dpidUser );
//Crash packet
if ( nPart > 30 || dwData < 0 ) {
Error( "CDPSrvr::OnDoUseItem : Crash Try -> [Player ID: %07d], [Player Name: %s], [Packet used: %d,%d,%d]",
pUser->m_idPlayer, pUser->GetName(), dwData, objid, nPart );
return;
}
Und kommentiere das erste
unter dem eingefügtem aus.
Buy Crash
Du musst dieses 2x machen!! Einmal für normale Käufe und einmal für Käufe mit Red Chips!!
Suche nach:
ar >> cTab >> nId >> nNum >> dwItemId;
if( cTab >= MAX_VENDOR_INVENTORY_TAB || nNum < 1 )
return;
Füge darunter hinzu:
CUser* pUser = g_UserMng.GetUser( dpidCache, dpidUser );
//CRASH
if( cTab > 3 || cTab < 0 || nId < 0 || nNum <= 0 || nNum > 9999 || dwItemId < 0 ) {
Error( "CDPSrvr::OnBuyItem : Crash Try -> [Player ID: %07d], [Player Name: %s], [Packet used: %d,%d,%d,%d]",
pUser->m_idPlayer, pUser->GetName(), cTab, nId, nNum, dwItemId );
return;
}
Und kommentiere das erste
unter dem eingefügtem aus.
Pocket Crash
Suche nach:
Füge darunter hinzu:
//DUPE CODE
if( nNum <= 0 ) {
Error( "CDPSrvr::OnMoveItemOnPocket : Dupe Try -> [Player ID: %07d], [Player Name: %s], [Packet used: %d,%d,%d,%d]",
pUser->m_idPlayer, pUser->GetName(), nPocket1, nItem, nNum, nPocket2 );
return;
}
//CRASH
if( nItem < 0 || nPocket2 > 2 || nPocket1 < -1 || nPocket1 > 52 ) {
Error( "CDPSrvr::OnMoveItemOnPocket : Crash Try -> [Player ID: %07d], [Player Name: %s], [Packet used: %d,%d,%d,%d]",
pUser->m_idPlayer, pUser->GetName(), nPocket1, nItem, nNum, nPocket2 );
return;
}
Alles anzeigen
Entschuldigt bitte falls ein paar English-fehler im Text sind, da ich Brasilianer bin.
Ach, ich würde es gut finden wenn es jemand auf Deutsch übersetzen kann
kkthbye
Fenstername ändern
Fenstername ändern
Homo Couple usw.
Homo Lespen Couple
Ihr öffnet couplehelper.cpp und sucht nach den 2 If Abfragen
[COLOR=#000000][COLOR=#007700]if( [/COLOR][COLOR=#0000bb]pUser [/COLOR][COLOR=#007700]== [/COLOR][COLOR=#0000bb]pTarget [/COLOR][COLOR=#007700])
{
[/COLOR][COLOR=#0000bb]pUser[/COLOR][COLOR=#007700]->[/COLOR][COLOR=#0000bb]AddDefinedText[/COLOR][COLOR=#007700]( [/COLOR][COLOR=#0000bb]TID_GAME_COUPLE_E01 [/COLOR][COLOR=#007700]); [/COLOR][COLOR=#007700]
}
if( [/COLOR][COLOR=#0000bb]pUser[/COLOR][COLOR=#007700]->[/COLOR][COLOR=#0000bb]GetSex[/COLOR][COLOR=#007700]() == [/COLOR][COLOR=#0000bb]pTarget[/COLOR][COLOR=#007700]->[/COLOR][COLOR=#0000bb]GetSex[/COLOR][COLOR=#007700]() )
{
[/COLOR][COLOR=#0000bb]pUser[/COLOR][COLOR=#007700]->[/COLOR][COLOR=#0000bb]AddDefinedText[/COLOR][COLOR=#007700]( [/COLOR][COLOR=#0000bb]TID_GAME_COUPLE_E01 [/COLOR][COLOR=#007700]); [/COLOR][COLOR=#ff8000]
[/COLOR][COLOR=#007700]return;
} [/COLOR][/COLOR]
Nun können alle gleichgeschlechtigen Spielern Couple machen.
GM Level Anzeige für Normale Spieler
GM Anzeige
Shop max. Kaufanzahl ändern
Shopmax.
Jobchange Statpoints anpassen
Jobchangedd
Als erstes öffnet ihr die WorldDialog Source dann NPCScript.cpp
und sucht nach :
Ihr werdet dann zum Master Jobchange kommen dort seht ihr diese Funktionen :
ChangeJob( 17 ); // Zu den wechselnde Job
InitStat(); // Initallisieren
SetLevel(60); // So wird das Level gesetzt
AddGPPoint( -120 ); // Hier werden 120 Stats abgesetzt
So könnt ihr den Spieler mehr GPPoint geben.
Update 18.03
Emotion clientcrashfix:
Fix
Hier zeige ich euch, wie ihr es fixen könnt, dass der Client crasht, wenn ihr im chat !888888888888889 eingebt!
Als erstes geht ihr in die _Common\DialogMsg.cpp und sucht nach der Funktion:
void CDialogMsg::AddMessage( CObj* pObj, LPCTSTR lpszMessage, DWORD RGB, int nKind, DWORD dwPStyle )
<-- Sie befindet sich auf Zeile 813 -->
Dannach sucht ihr in dieser Funktion nach dieser If-Schleife:
if( scanner.Token == "!" )
{
int nEmoticonIdx = scanner.GetNumber();
AddEmoticon( pObj, nEmoticonIdx );
return;
}
<-- Ab Zeile 856 -->
Nun ersetzt ihr den bereits dastehenden Text durch den text, den ich hier jetzt angebe:
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;
}
Alles anzeigen
Und schon seit ihr fertig!
Sro Fix[found on RZ]
sro fix
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;
}
Alles anzeigen
With this, you will be able to set awakenings, such as:
Bloomeffeckt verbessern:
Bloom
Sucht in der Neuz.cpp nach folgendenden Zeilen:
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;
und ersetzt diese durch:
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;
Zuguter letzt müsste ihr noch in der Neuz.ini (im Client) folgende Zeile hinzufügen:
Den Gameguard aus eurem Source verbannen !
GG EnTF
Ihr müsst nur die Neuz.cpp bearbeiten!
Sucht nach folgenden Zeilen und löscht sie, oder kommentiert sie aus ("//", "/*,*/"):
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() );
}
Alles anzeigen
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;
}
Alles anzeigen
Und fertig ;)
Version im Login BG changen
Version im Login BG changen
Hallo,
diesmal habe ich ein kleines "ShortTut" für euch ;)
Hier dreht es sich um die "Version" die beim Login LINKS(!) oben steht.
Zuerst:
Was brauchen wir?
- Ms Visual Studio 2003
- _\Interface\ITheme.cpp
- Gehirn,Finger etc.. also das übliche ;)
Wir öffnen die ITheme.cpp mit Visual Studio 2003 und suchen den folgenden text:
Hier finden wir diesen code:
void CTheme::SetVersion(int Lang)
{
sprintf( g_szVersion, "%s %s %d", __DATE__, __TIME__, Lang );
}
Dies giebt dann im Login Background zb aus [wenn wir die neuz am 18.03.2011 um 17.50 mit Language 1 gebuilded haben]:
Dies können wir nun zb für Copyright Rechte changen.
Ein Beispiel:
void CTheme::SetVersion(int Lang)
{
sprintf( g_szVersion, "ServerName rev 2|Developed by Cross" );
}
Die ausgabe hier:
Das g_szVersion liefert den textbaustein "Version" und sollte daher immer vorne stehen.
Wir können aber auch zb dies machen:
void CTheme::SetVersion(int Lang)
{
sprintf( g_szVersion, "ServerName rev 2|Developed by Cross| %s", __DATE__ );
}
Damit würden wir die ausgabe auf:
umstellen.
Wie immer gilt:
C&P nur mit angabe der Credits!
grüße
cross
Cross Zitat
Zitat von Cross;227608Alles anzeigen;)
hab noch was (klein aber fein)
v15 Wetter system abschalten
spoil
hallo,
viele 'unerfahrene' src Modder die alles C&P nehmen haben ein Problem, weil es weder regnet noch schneit etc.
Dies liegt daran das in V15 ein neueres wetter system gecoded wurde, aber dies anscheinend nicht fertig ist/funktioniert.
Hier zeige ich euch als Simples Tutorial wie ihr es abschalten und so auch wieder
das Schnee und Regen EXP event nutzen könnt.Als erstes suchen wir:
WORLDSERVER\VersionsCommon.h
dort suchen wir nach:
Und ändern dies zu:
Das //v15 weather sys ist eine gedächtnisstütze
das // vor dem #define sagt das es nicht gelesen werden soll und somit die funktion nicht in Kraft trittNun suchen wir die datei:
Neuz\VersionsCommon.h
und suchen hier wieder nach:
Und ändern dies wieder zu:
Nun nurnoch Worldserver + Neuz neu builden und das Wetter System ist wieder so, dass es Regnet + Schneit )
Eigentlich keine große Arbeit, jedoch wissen es die meisten anscheinend nicht ;)
Credits:
100% cross (Weiterverbreitung nur unter angabe dieser Credits)
greetings
Ich werde es immer updaten.
Ich hoffe es gefällt euch.
MFG Luoo
