Benötigt:
- WorldServer Source
- Hirn
Also fangen wir mal an!
Geht im WorldServer in die datei "DPSrvr.cpp" und sucht nach
diese Funktion überschreibt ihr mitQuote:
CDPSrvr::OnChat
dann geht ihr in die CMover klasse, addet dortQuote:
void CDPSrvr::OnChat( CAr & ar, DPID dpidCache, DPID dpidUser, LPBYTE lpBuf, u_long uBufSize )
{
static TCHAR sChat[1024];
if( uBufSize > 1031 )
return;
ar.ReadString( sChat, 1024 );
CString strChat = sChat;
strChat.Replace( "\\n", " " );
__time64_t nTime = _time64( NULL );
CUser* pUser = g_UserMng.GetUser( dpidCache, dpidUser );
if( IsValidObj( pUser ) && ( pUser->m_nLasChatTime + SEC( 1 ) ) < nTime )
{
if( pUser->m_dwAuthorization >= AUTH_LOGCHATTING )
g_dpDBClient.SendLogGamemaChat( pUser, strChat );
if( sChat[0] == '/' && ParsingCommand( strChat, (CMover*)pUser ) )
return;
if( pUser->IsMode( TALK_MODE ) )
return;
int nText = pUser->GetMuteText();
if( nText )
{
pUser->AddDefinedText( nText );
return;
}
if( pUser->IsMute() )
return;
if( !( pUser->HasBuff( BUFF_ITEM, II_SYS_SYS_SCR_FONTEDIT ) ) )
ParsingEffect( sChat, strlen(sChat) );
pUser->m_nLasChatTime = nTime;
g_UserMng.AddChat( pUser, strChat );
}
}
Anschließend noch in CMover::CMover und darin wiederrum addet ihrQuote:
__time64_t m_nLasChatTime;
Fertig, Chat spaming verhindert.Quote:
#ifdef __WORLDSERVER
m_nLasChatTime = _time64( NULL );
#endif
Nun wer jetzt wieder kommt mit "geht doch sowieso nicht, Client meldet da was" usw, klar ihr habt in erster Linie recht aber nicht all zu ganz, der Client meldet es nur durch das Chat FENSTER, baut man sich allerdings ein Bot und greift in die in die Chat Sende funktion gleich mit ein bzw hol sich die Addressen wie hier:
Dann könnt ihr das Spielchen abziehen von wegen "wir senden dem server mal eben 500 nachrichten" und der Shout wird zu gespamt like Tom's hack, das ganze hab ich auf Forsaken FlyFF abgezogen, funktioniert toll.Quote:
void CNeuz::SendChat( _In_ char* szStr )
{
if( !CPlayerMng::GetInstance()->m_pLocalPlayer->IsValid() )
{
Log( Error, "Invalid Player --> login!!" );
return;
}
DWORD dwThis = 0x00;
DWORD dwCall = 0x00;
_asm
{
push szStr;
mov ecx, dwThis;
call dwCall;
}
}
Addressen wurden zum Schutz von Forsaken unkenntlich gemacht.
Mit dem Fixx könnt ihr nur noch jede Sekunde Chat nachrichten schicken, könnt das auch auf 500 MS stellen, würde auch reichen aber sicher ist sicher, meint ihr net?
Klar man kann es erweitern das der User gemuted wird und co, aber wozu?
Naja es werden noch mehr kleinere fixxes geben, viel spaß noch.^^
Mfg.






