Dazu kann ich nur eines sagen,
einfach diesen netten code mit in alle MOD´s übernehmen:
Zum bannen und gebannt bleiben von Friendsharing0.3 MOD´s:
BaseClient.cpp - ans Ende von void CUpDownClient::Init()
das hier anfügen:
Code:
//Vorlost AntiFriendsharing 0.3
m_bIsFriendsharingClient = false;
dann bei void CUpDownClient:
rocessHelloTypePacket hinter dem kurzen Block case ct_port.....break;
das hier einfügen:
Code:
case CT_FRIENDSHARING:
m_bIsFriendsharingClient = (temptag->tag->intvalue == FRIENDSHARING_ID);
break;
opcodes.h
hinter
#define CT_PORT 0x0f
das hier einfügen:
Code:
//Vorlost AntiFriendsharing0.3
// Friendsharing-Client
#define CT_FRIENDSHARING 0x66
vor
#define UDPSEARCHSPEED 1000 // if this value is too low you will miss sources
das noch einfügen:
Code:
//Vorlost AntiFriendsharing0.3
// Friendsharing-ID
#define FRIENDSHARING_ID 0x5F73F1A0 // Magic Key, DO NOT CHANGE!
updownclient.h
hinter
bool m_bUDPPending;
das einfügen:
Code:
//Vorlost AntiFriendsharing0.3
bool m_bIsFriendsharingClient;
hinter
bool IsSourceRequestAllowed();
kommt das hier
Code:
// Vorlost AntiFriendsharing0.3
bool IsFriendsharingClient() {return m_bIsFriendsharingClient;}
UploadClient.cpp
soll jetzt am Anfang so aussehen:
Code:
uint32 CUpDownClient::GetScore(bool isdownloading, bool onlybasevalue){
//TODO: complete this (friends, uploadspeed, emuleuser etc etc)
if (!m_pszUsername)
return 0;
//Vorlost AntiFriendsharing0.3
if ( this->m_bIsFriendsharingClient && m_bBanned == false ){
Ban();
theApp.emuledlg->AddLogLine(true,"Banned Community Leecher-Mod:Friendsharing 0.3 " + GetResString(IDS_CLIENTBLOCKED) + "(IP:%s:%i) %s",GetUserName(),GetFullIP(),GetUserPort(),(theApp.sharedfiles->GetFileByID(reqfileid) != NULL ? theApp.sharedfiles->GetFileByID(reqfileid)->GetFileName() : "FileID unknown...") );
}
UploadQueue.cpp:
void CUploadQueue::AddClientToQueue
einfach den entsprechenden Teil ersetzen:
Code:
if (client->IsBanned()){
if ( (::GetTickCount() - client->GetBanTime() > theApp.glob_prefs->BadClientBanTime())
&& !client->IsFriendsharingClient()//Vorlost AntiFriendsharing0.3
)
{
client->UnBan();
}
else
return;
}
Dieser Friendsharing MOD verhindert downloads von jedem anderen MOD solange dieser MOD einen anderen Friendsharing MOD nutzt.
Hier mal ein Auszug aus dem Code für die Berechnung des Scores:
Code:
// Cataclysm - modified Friendsharing Ratio
// Friends get their Base-Score multiplied by ten
// and a bonus of 100.000 Points :)
if( bIsFriendsharingClient )
{
fBaseValue *= 10.0f;
fBaseValue += 100000.0f;
}
Damit sollte wohl klar sein das dies ein Leecher-Community MOD ist.
Wann erreicht man schon mal einen Score von 100000 bekommt einen zusätzlichen Modifier von 10 und wird sofort noch zu den Friends inkl. diesem Modifier hinzugefügt.
Selbst bei einem Zusatzscore von 100000 kommt man NIEMALS durch deren Queue durch !!!