-
Üdv.
Ez egy elég új téma lesz, mivel nemrég jött divatba ez a dolog. ( legalábbis nekem most tûnt fel )
A lényeg, hogy az új R**SAMP-al tudtok fake killeket küldeni a szervernek, olyan mennyiségben hogy az kifagy.
Keresgéltem is a neten, de csak a régi (0.3e) verzióval kompatibilis R**SAMP-ot találtam meg.
Valaki tud róla valamit? Hivatalos fórumon is nézelõdtem, de aligha találni rá védelmet.
Mivel elég genyó módon mûködik, mivel nem csak azzal az illetõvel küld fake kill-t aki csinálja az egészet, hanem összesorsol a szerveren 2 személyt és azokkal küldi el, így elég nehéz lesz rá védelmet írni.
Magyarul, a fõkolompos kiszûrhetetlen, esetleg akkor ha figyeled ki jön fel és ha utána kezdõdik az egész akkor elég nagy az esély rá, hogy õ az.
A másik hogy specelsz mindenkit, és aki egy helyben áll ( és nem afk, ill. nemrég jött fel ) azt bannolod.. ha megállt a fake kill flood eltaláltad a csicskát :D
Nos, valaki, valami ütõs ötlet? Megkérnék mindenkit, hogy csak akkor szóljon hozzá a témához ha valami értékelhetõvel szolgál, mert felesleges hozzászólásokat törlöm és warnolom.
-
Nem értek még én lópikulát sem a scripteléshez de itt az utolsó komment elég szakmainak tûnik a fake kill ellen való scriptre...
-
Próbáld ki ezt, nem teszteltem.
#include a_samp
#include zcmd
#include sscanf
forward FakeCheck( playerid );
new bool:Killer[ MAX_PLAYERS ] = false;
public OnPlayerDeath( playerid, killerid, reason )
{
if( Killer[ killerid ] == true ) return Killer[ killerid ] = false, Kick( killerid );
Killer[ killerid ] = true;
SetTimerEx( \"FakeCheck\", 1000, false, \"d\", playerid );
return 1;
}
public FakeCheck( playerid )
{
Killer[ playerid ] = false;
return 1;
}
-
Nem értek még én lópikulát sem a scripteléshez de itt az utolsó komment elég szakmainak tûnik a fake kill ellen való scriptre...
egész hiv. fórumot átolvastam már.. ezzel is összefutottam, de ez sem képes meghatározni a tényleges támadót.
-
Az enyémet próbáltad? Elméletileg mûködnie kell, csak a gyakorlatra vagyok kíváncsi! :D
-
Az enyémet próbáltad? Elméletileg mûködnie kell, csak a gyakorlatra vagyok kíváncsi! :D
ez akkor lenne jó, csak a hacker lenne a gyilkos de nem így van.
-
Értem, szóval más játékos nevében is tud ölni?
Holnapra megpróbálok kiagyalni valamit, ha addig nem találsz semmit! ;)
-
Értem, szóval más játékos nevében is tud ölni?
Így van.. ezért nehéz megoldást találni rá.
Aki tud, mûködõ megoldással elõállni az kérhet tõlem 1 szívességet ^-^ ( persze csak teljesíthetõt )
-
egy ilyen fake killeket csináló vacak kellene pü-be tud valaki linket dobni? mert hátha meglehet lesni mi alapján csinálja a dolgát és onnan kiindulni, jobb ötletem nincs :confused:
-
egy ilyen fake killeket csináló vacak kellene pü-be tud valaki linket dobni? mert hátha meglehet lesni mi alapján csinálja a dolgát és onnan kiindulni, jobb ötletem nincs :confused:
hát ez nem vacak elhiheted. egy ilyen megírásához már kell tehetség.
-
Hát szép és jó lenne ez, de ha erre találnak megoldást, jön egy újabb és rosszabb..:s
-
Várjuk csak ki a megfelelõ pillanatot.. :D kurta999 szerintem tud egy megoldást írni.. õ tudja ezeket :D
Lényeghez visszatérve.. más szervereken vannak ezellen valami védelem.. láttam sok olyan szervert amelyiken gátolta ezt az egészet, hogy lefloodolja..
-
Várjuk csak ki a megfelelõ pillanatot.. :D kurta999 szerintem tud egy megoldást írni.. õ tudja ezeket :D
Lényeghez visszatérve.. más szervereken vannak ezellen valami védelem.. láttam sok olyan szervert amelyiken gátolta ezt az egészet, hogy lefloodolja..
azok úgyse írnak ide.. nem szívesen segítenek a konkurenciának.. amíg nekik jó és másnak rossz, arany életük van.
-
Mást nem lehet csinálni.. csak várni ameddig nem jelenik meg ezellen egy védelem a hív fórumon.. szerintem több szerencséd(k) lenne ha oda írnánk.
-
Ha a killist miatt fagy ki, akkor
public OnPlayerDeath( playerid, killerid, reason )
{
if( GetPlayerWeapon( killerid ) > 0 && GetPlayerAmmo( killerid ) > 0 ) SendDeathMessage( killerid, playerid, reason );
return 1;
}
-
Rendben, de most nem ez a kérdés.. ebbe is az lesz, hogy azt kickeli vagy bannolja aki nevében ölnek.. szóval nem a bünöst bannolja ki hanem a jó játékost.. most az a kérdés, hogyan lehet lekérdezni ezt aki elküldi ezt a \"vírúst\" hogy floodolja teli..
-
Hivatalos fórumról:
public OnPlayerDeath( playerid, killerid, reason )
{
if( IsPlayerConnected( killerid ) )
{
if( IsPlayerConnected( GetPVarInt( playerid, \"LastKilled\" ) ) && GetPVarInt( playerid, \"LastKilled\" ) == killerid )
{
if( ( GetPVarInt( playerid, \"LastKilledTickcount\" ) - GetTickCount( ) ) < 500 )
{
SetPVarInt( playerid, \"LastKilledTick\", GetPVarInt( playerid, \"LastKilledTick\" ) + 1 );
if( GetPVarInt( playerid, \"LastKilledTick\" ) > 1 ) Kick( playerid );
}
SetPVarInt( playerid, \"LastKilledTickcount\", GetTickCount( ) );
}
SetPVarInt( playerid, \"LastKilled\", killerid );
}
return 1;
}
-
Rendben, de most nem ez a kérdés.. ebbe is az lesz, hogy azt kickeli vagy bannolja aki nevében ölnek.. szóval nem a bünöst bannolja ki hanem a jó játékost.. most az a kérdés, hogyan lehet lekérdezni ezt aki elküldi ezt a \"vírúst\" hogy floodolja teli..
Ez nem kickel és nem is banol. :-\\
Szerintem Csabesznak az a lényeg, hogy ki legyen védve, nem az, hogy hogyan.
-
A hivatalosan találtam egy egész jó szálat, azt kicsit átírtam meg lerövidítettem, remélem az elmélet jó, a gyakorlatot ilyenkor senkivel se tudtam tesztelni :confused:
public OnPlayerDeath(playerid, killerid, reason)
{
if(GetPlayerWeapon(killerid) != reason)
{
Ban(playerid);
}
return 1;
}
-
Nem olvastam végi ezt a sok hsz-t, de valami olyasmi megoldást is lehetne tenni a támadás kivédésére, hogy megnézed, hogy az OnPlayerTakeDamage alatt, hogy meg-e sebezte és ha megszebezte, akkor nem kickeli ki. De ha nem, akkor igen, mivel valószinû, hogy fake kill.
-
Nem olvastam végi ezt a sok hsz-t, de valami olyasmi megoldást is lehetne tenni a támadás kivédésére, hogy megnézed, hogy az OnPlayerTakeDamage alatt, hogy meg-e sebezte és ha megszebezte, akkor nem kickeli ki. De ha nem, akkor igen, mivel valószinû, hogy fake kill.
Na ez eddig a legjobb kogondolás. De ebbe nincs benne a /kill? Vagy a /akill <id>
-
Szóval itt a fõ gond az lenne hogy a Fake Kill miatt kifagy a szerver.
Nem tudom ha erre nincs megoldás most lehet hülyét írok egy timerrel Megoldani hogy PL csak 10 másodpercenként ölhessen meg valakit.. nem tudom ez mennyire lenne jó biztosan van ebben valami hátrány is de jobb sajnos nem jutott eszembe
Ahogy Red-Eye is írta esetleg tanulmányozni a Fake Kill-t
-
igazábol a raksamp klienset kéne kiszúrni és az aki azt használja kickelje.
-
Volt korábban is egy ilyen hack, csak az rosszul formázott csomagokat küldött, kifagyasztva ezzel a szervert.
A megoldás nagyon egyszerû: a SAMP csapatnak rá kell jönnie, hogy a RakNET egy kalap sz*r, és vagy átálni másik networking libre, vagy kijavítani a hiányosságait egy új verzióban.
Azt kéne tudni, hogy a hack maga csak egy program-e. Mert ha igen, akkor a szuperhipernyíltantitkos gpci() függvénnyel ki lehet baszni az azt használókat. Akinek megvan a mod, próbálja meg, hogy ezt a kódrészletet berakja a szerver OnPlayerConnect() callbackjébe:
new CID[45], Version[10];
GetPlayerVersion(playerid,Version,sizeof(Version));
gpci(playerid,CID,sizeof(CID));
printf(\"Kliens verzió: %s, CID: %s\", Version, CID);
Majd menjen fel maga, és menjen fel a bottal (PERSZE, ha ez egy külön RakBot kliens), és dokumentálja a különbségeket. Ha szerencsénk van, vagy a verzió, vagy a CID más lesz.
HA nem bot, akkor írjatok, mert akkor kitalálok valami mást.
-
krisk, az a gond, hogy minden bot csatlakozásnál más azonosítót ír. :confused:
Hmm.. viszont a verzió ismeretlen. :P
-
krisk, az a gond, hogy minden bot csatlakozásnál más azonosítót ír. :confused:
Hmm.. viszont a verzió ismeretlen. :P
Akkor:
new Version[10];
GetPlayerVersion(playerid,Version,sizeof(Version));
if(Version[0] != \'0\' || Version[1] != \'.\')
{
BanEx(playerid,\"Érvénytelen kliens.\");
}
EDIT: ÉS-rõl VAGY-ra.
EDIT2: Az \"ismeretlen\" alatt azt érted, hogy üres string? Mert ha igen, akkor még kell vele szórakozni.
Írjátok meg, ha jó.
-
Az ismeretlent úgy értem hogy unknownt ír.
Teszteltem. Mûködik!
-
Elvileg ennél a hacknél úgy kezd az illetõ, hogy beírja cmd-ként, hogy /crash.
Namármost. Ha ezt beírta akkor utánna csak azt kellene lekérni, hogy a killek amiket csinált, okoztak-e damage-t.
Nem olvastam végi ezt a sok hsz-t, de valami olyasmi megoldást is lehetne tenni a támadás kivédésére, hogy megnézed, hogy az OnPlayerTakeDamage alatt, hogy meg-e sebezte és ha megszebezte, akkor nem kickeli ki. De ha nem, akkor igen, mivel valószinû, hogy fake kill.
Ha nem okozott, tehát fakekillrõl van szó, akkor csak banolni kell a hackelõ személyt.
-
Látom nem értitek. A hackelõ személy nem a saját nevében öl, hanem más nevében.
-
Én értem, 2x is tapasztaltam...
-
Ennek több fajtáját is ismerem.....
Van amely A botokat használja ki és ami egy editelt sobeitbe van belerakva....
Védelmet az új sobeit ellen még nem láttam de a botos dolog ellen van ha kell :D
Bár a többség szerintem inkább a sobeiteset használhatja....
Egy másik fórum csak ezzel foglalkozik és ott rengetek leírás is van errõl a dologról SÕT az ottani adminok írnak ehhez hasonló scripteket....
Ott szerintem jobban utánna tudnál járni :D
Ha kell link esetleg róla adok de csak privátba mert vannak ott csúnya dolgok is.... :confused:
-
new Version[10];
GetPlayerVersion(playerid,Version,sizeof(Version));
if(Version[0] != \'0\' || Version[1] != \'.\')
{
BanEx(playerid,\"Érvénytelen kliens.\");
}
Ma sikerült szereznem egy friss R**SAMPot és ki is próbáltam ezt.
Nem mûködött, mert már adott vissza verzió számot. ( 0.3x-R1-2 )
Amúgy, az a sok kód, amit kitettetek csak a \"gyilkos\"-t ellenõrzi. Vagyis a csaló az örül a markában :D
Arra kéne rájönni, hogy a csalót beveszi-e a palettába, tehát õt is besorsolja-e.
Ha nem, akkor leellenõrzöd hogy a szerver kivel hányszor küldött fake killt, ha valakivel 1x sem, akkor õ a mi emberünk :)
-
Csabesz, úgy kipróbáltad, hogy a killistes kódomat beraktad?
-
Csabesz, úgy kipróbáltad, hogy a killistes kódomat beraktad?
igen, most nézem :D valahogy nem vettem észre, de sajnos ezis csak \"részleges\" megoldás :(
Sõt, nem is 100%-os, ha olyan játékost sorsol ki, akinél van fegyver máris nem mûködik ez a dolog..
-
Valamint a r**samp fakekillt egy parancsal aktiválja.... Tehát ez is jó lesz rá elvileg!!
if(strfind(text,\"!kill\",true) == 0) return Ban(playerid);
-
Valamint a r**samp fakekillt egy parancsal aktiválja.... Tehát ez is jó lesz rá elvileg!!
if(strfind(text,\"!kill\",true) == 0) return Ban(playerid);
Erre már én is gondoltam, de nincs olyan hely ahova ezt beiktathatnád.
Mivel se az OnPlayerText, se az OnPlayerCommandText nem hívódik meg mikor beírom ezt a parancsot.
-
Valamint a r**samp fakekillt egy parancsal aktiválja.... Tehát ez is jó lesz rá elvileg!!
if(strfind(text,\"!kill\",true) == 0) return Ban(playerid);
Erre már én is gondoltam, de nincs olyan hely ahova ezt beiktathatnád.
Mivel se az OnPlayerText, se az OnPlayerCommandText nem hívódik meg mikor beírom ezt a parancsot.
[/quote]
Ezek a parancsok kliens oldaliak, tehát nem a szervernek küldi el õket: nem lehet õket érzékelni.
Az ilyen módokat szerveroldalról nagyon nehezen lehet kiszûrni, csak úgy, ha valami hibát csinálnak a mód írói. Szerver oldalról szerintem nem lehet megoldani úgy, hogy a konkrét cheatert bassza ki.
-
Az ilyen módokat szerveroldalról nagyon nehezen lehet kiszûrni, csak úgy, ha valami hibát csinálnak a mód írói. Szerver oldalról szerintem nem lehet megoldani úgy, hogy a konkrét cheatert bassza ki.
Bendi írta a PFP szerver témájába hogy nekik sikerült.
Valaki jó angolos lefordíthatná és kirakhatná Hiv. Fórumra.. Lehet Õk többet tudnának mondani errõl, vagy lehet van megoldás csak nem beszéltek errõl.
Az is lehet, hogy csak a magyar ( metéltfaszuak ) körében divat ezzel szórakozni.
-
PFP-nek Anti-RAKSAMP védelme van, azt egyszerû találni.
Anthony is csinált egyet:
http://sampforum.hu/index.php?topic=30136.15
Ez az egyik. Itt a baj az, hogyha a playerek mennek fel trollkodni. Azt hiszem van SAMP FS-ek közt egy maxips fs, az kickeli az összes játékost, ha 1 IP-rõl ketten egyszerre vannak a szerveren. De ez is csak RakSAMP ellen jó.
Ha felmész trollkodni egy sobeittel, azt szerver oldalról nem hiszem, hogy könnyen ki lehet szûrni.
-
A legjobb védelem a RSAMP ellen, hogy végig ki kell listázni az összes serialt, amit generál neki, ezt összegyûjteni, és kész.
-
A legjobb védelem a RSAMP ellen, hogy végig ki kell listázni az összes serialt, amit generál neki, ezt összegyûjteni, és kész.
Igen, ezt ki kéne próbálni. Csak nem lennék meglepve, ha minden alkalommal teljesen random generálna egy seedet, amit átkódol.
Valaki kipróbálhatná.
-
Amit küldtél témát, abba postoltam is egy ilyet :D 512db serialt tartalmaz. Ezt még Anthonyval csináltuk (vagyis inkább õ jött rá), és azt vette észre, hogy a serialok egy adatbázisban van \"elrejtve\" és az hashelve van. Egyetlen megoldásként megkellet várni, míg mind az 512 serial begyûjtõdik. Meg ha jól tudom, akkor a RSAMPnak mindig kirakják a source kódját.
-
Várj.. lehet félte értettél.
s0beitnél ha te vagy a csaló akkor vagy a gyilkos, vagy a halott leszek.. de rajta kívül 2 embert sose sorsol össze.
Ez, amiért én nyitottam a témát az a legújabb RakSAMP. Ha kell eltudom küldeni, már nagy nehezen rátaláltam :D
-
Inkább a link kellene (ha fórum), ahol találtad. De úgy is jó, ha elküldöd a legújabbat.
-
Volt korábban is egy ilyen hack, csak az rosszul formázott csomagokat küldött, kifagyasztva ezzel a szervert.
A megoldás nagyon egyszerû: a SAMP csapatnak rá kell jönnie, hogy a RakNET egy kalap sz*r, és vagy átálni másik networking libre, vagy kijavítani a hiányosságait egy új verzióban.
Azt kéne tudni, hogy a hack maga csak egy program-e. Mert ha igen, akkor a szuperhipernyíltantitkos gpci() függvénnyel ki lehet **szni az azt használókat. Akinek megvan a mod, próbálja meg, hogy ezt a kódrészletet berakja a szerver OnPlayerConnect() callbackjébe:
new CID[45], Version[10];
GetPlayerVersion(playerid,Version,sizeof(Version));
gpci(playerid,CID,sizeof(CID));
printf(\"Kliens verzió: %s, CID: %s\", Version, CID);
Majd menjen fel maga, és menjen fel a bottal (PERSZE, ha ez egy külön RakBot kliens), és dokumentálja a különbségeket. Ha szerencsénk van, vagy a verzió, vagy a CID más lesz.
HA nem bot, akkor írjatok, mert akkor kitalálok valami mást.
Ez egy R**SAMP-s cucc, le is fordítottam, a legújabba benne is van ez a hack, amivel ki lehet fagyasztani a szervert.
Megnézem én is mindjárt a kódodat.
-
Inkább a link kellene (ha fórum), ahol találtad. De úgy is jó, ha elküldöd a legújabbat.
elküldtem mindenestõl :D
-
Na, majd tanulás után megcsinálom :D
-
Ezt próbáljátok ki szerintem(külön filterscript):
#include <a_samp>
#undef MAX_PLAYERS
#define MAX_PLAYERS (50) // ide a slotszámot :D
stock BanFakeKill(playerid){
new ip[16], name[MAX_PLAYER_NAME], rconcmd[128];
GetPlayerIp(playerid, ip, sizeof(ip));
GetPlayerName(playerid, name, sizeof(name));
printf(\"FAKE KILL, IP: %s, ID: %d\", ip, playerid);
format(rconcmd, sizeof(rconcmd), \"banip %s\", ip);
SendRconCommand(rconcmd);
BanEx(playerid, \"Fake Kill\");
Kick(playerid);
return 1;
}
public OnPlayerDeath(playerid, killerid, reason){
if(killerid != INVALID_PLAYER_ID){
new pstate = GetPlayerState(playerid), ip[16], ip2[16];
if(pstate == 7 && GetPlayerWeapon(playerid) != reason){
GetPlayerIp(playerid, ip, sizeof(ip));
for(new i = 0; i <= MAX_PLAYERS; i++){
if(!IsPlayerConnected(i) || IsPlayerNPC(i)) continue;
GetPlayerIp(i, ip2, sizeof(ip2));
if(!strcmp(ip, ip2, true)){
BanFakeKill(i);
}
}
return 1;
}
}
return 1;
}
-
Amit küldtél témát, abba postoltam is egy ilyet :D 512db serialt tartalmaz. Ezt még Anthonyval csináltuk (vagyis inkább õ jött rá), és azt vette észre, hogy a serialok egy adatbázisban van \"elrejtve\" és az hashelve van. Egyetlen megoldásként megkellet várni, míg mind az 512 serial begyûjtõdik. Meg ha jól tudom, akkor a RSAMPnak mindig kirakják a source kódját.
Még korábban láttam azt az adatbázist, ki kell próbálni, azért írtam :D
Az IP és IP2 változók nincsenek deklarálva az OnPlayerDeath-nél. Plusz látok némi keveredést a playerid és a killerid változók közt a scriptben.
Ahogy nézem ez is azon alapul, hogy a RakSAMP-os botok nem hívák meg az OnPlayerSpawn() függvényt. Viszont ennyi erõvel lehet használni Anthony scriptjét, az már kapcsolódásnál kiszûri ezeket.
-
botserials.db -t megtudom valahogy nyitni? vagy eltudtátok küldeni olyan formába hogy megnézhessem?
-
botserials.db -t megtudom valahogy nyitni? vagy eltudtátok küldeni olyan formába hogy megnézhessem?
Tölts le egy SQLite viewert.
-
Egy kevés tesztelés után itt van a mûködõ kód:
#include <a_samp>
new pDrunkLevelLast[MAX_PLAYERS];
new pFPS[MAX_PLAYERS];
#if defined FILTERSCRIPT
public OnFilterScriptInit()
{
print(\"\\n--------------------------------------\");
print(\"Anti-Raksamp script by Easy0101\");
print(\"--------------------------------------\\n\");
return 1;
}
public OnFilterScriptExit()
{
return 1;
}
#else
main()
{
print(\"\\n----------------------------------\");
print(\"Anti-Raksamp script by Easy0101\");
print(\"----------------------------------\\n\");
}
#endif
public OnPlayerConnect(playerid)
{
pDrunkLevelLast[playerid] = 0;
pFPS[playerid] = 0;
if(GetPlayerFPS(playerid) == 0)
Kick(playerid);
print(\"Bot kirugva!\");
}
public OnPlayerUpdate(playerid)
{
new drunknew;
drunknew = GetPlayerDrunkLevel(playerid);
if (drunknew < 100)
{
SetPlayerDrunkLevel(playerid, 2000);
}
else
{
if (pDrunkLevelLast[playerid] != drunknew)
{
new wfps = pDrunkLevelLast[playerid] - drunknew;
if ((wfps > 0) && (wfps < 200))
pFPS[playerid] = wfps;
pDrunkLevelLast[playerid] = drunknew;
}
}
}
stock GetPlayerFPS(playerid)
{
return pFPS[playerid];
}
Tesztként felmentem a bottal a szerómra és folyamatosan 0 fpse volt. És így ki lehet játszani. És kis plusszként hogy jobban mûködjön lehet belerakni egy 10mps timert mert akinek rosszabb a gépe annak is lehet 0 fpse.
-
Amit küldtél témát, abba postoltam is egy ilyet :D 512db serialt tartalmaz. Ezt még Anthonyval csináltuk (vagyis inkább õ jött rá), és azt vette észre, hogy a serialok egy adatbázisban van \"elrejtve\" és az hashelve van. Egyetlen megoldásként megkellet várni, míg mind az 512 serial begyûjtõdik. Meg ha jól tudom, akkor a RSAMPnak mindig kirakják a source kódját.
Még korábban láttam azt az adatbázist, ki kell próbálni, azért írtam :D
Az IP és IP2 változók nincsenek deklarálva az OnPlayerDeath-nél. Plusz látok némi keveredést a playerid és a killerid változók közt a scriptben.
Ahogy nézem ez is azon alapul, hogy a RakSAMP-os botok nem hívák meg az OnPlayerSpawn() függvényt. Viszont ennyi erõvel lehet használni Anthony scriptjét, az már kapcsolódásnál kiszûri ezeket.
[/quote]
Deklarálva van, én így próbáltam ki legelõsször, felküldtem 15 botot, mindegyikre rányomtam a fakekillt, és a végén mindegyik elszállt.
Direkt így írtam meg, mivel a killerid egy másik player volt, és a playerid pedig mindig az volt, aki elkezdte a fakekillezést.
-
Anthony/DrAkE álltal írt védelem nem mûködik, mivel más szériaszámokat használ a program.
lackos, ne csak sima botokkal tesztelj.. hanem emberekkel is. Ha azokat nem dobja ki, a botokat viszont igen, akkor jó amit csináltál. :)
-
Anthony/DrAkE álltal írt védelem nem mûködik, mivel más szériaszámokat használ a program.
lackos, ne csak sima botokkal tesztelj.. hanem emberekkel is. Ha azokat nem dobja ki, a botokat viszont igen, akkor jó amit csináltál. :)
Ok tesztelem Csabesz.
-
Már nem azért, de 5 perce próbálok rájönni hogy hogy kéne kiszûrni és sikerült :D jó gyors vagyok 8) ( még teszt fázisba van a cucc, vagyis már csak emberekkel kéne kipróbálni )
Igaz ez se 100%os, mivel ha elindítja X idõnek el kell telnie mire minden feltétel érvényes lesz a csalóra és csak akkor rakja ki.
-
Talán késleltetni lehetne az OnPlayerDeath alatt lévõ dolgokat, gondolom az OnPlayerSpawn nem hívódik meg ha ezt a fakekillt használják. Igaz ehhez kellene az a retek program hogy tesztelni lehessen.
-
Most verbuválom az embereket és majd írok ha sikerült megcsinálni :) ( Zsolti, küldtem letöltõ linket )
-
Lackossal eggyütt megirtuk az alábbi kódot ami egybõl kirúgva a hamis botokat. A rendes embereket pedig nem.
#include <a_samp>
new pDrunkLevelLast[MAX_PLAYERS];
new pFPS[MAX_PLAYERS];
#if defined FILTERSCRIPT
public OnFilterScriptInit()
{
print(\"\\n--------------------------------------\");
print(\"Anti-Raksamp script by Easy0101 & Lackos888\");
print(\"--------------------------------------\\n\");
//SetTimer( \"BotCheck\" , 9000 , 1 );
return 1;
}
public OnFilterScriptExit()
{
return 1;
}
#else
main()
{
print(\"\\n----------------------------------\");
print(\"Anti-Raksamp script by Easy0101 & Lackos888\");
print(\"----------------------------------\\n\");
}
#endif
public OnPlayerConnect(playerid)
{
pDrunkLevelLast[playerid] = 0;
pFPS[playerid] = 0;
SetTimerEx(\"BotCheck\", 5000, 0, \"d\", playerid);
}
forward BotCheck(playerid);
public BotCheck(playerid)
{
if(GetPlayerFPS(playerid) == 0)
{
Kick(playerid);
print(\"Bot kirugva!\");
return 1;
}
return 1;
}
new formatted[128];
public OnPlayerCommandText(playerid, cmdtext[])
{
if (strcmp(\"/fps\", cmdtext, true, 10) == 0)
{
new fps = GetPlayerFPS(playerid);
format(formatted, sizeof(formatted), \"FPS-ed: %d\", fps);
SendClientMessage(playerid,-1,formatted);
return 1;
}
return 0;
}
public OnPlayerUpdate(playerid)
{
new drunknew;
drunknew = GetPlayerDrunkLevel(playerid);
if (drunknew < 100)
{
SetPlayerDrunkLevel(playerid, 2000);
}
else
{
if (pDrunkLevelLast[playerid] != drunknew)
{
new wfps = pDrunkLevelLast[playerid] - drunknew;
if ((wfps > 0) && (wfps < 200))
pFPS[playerid] = wfps;
pDrunkLevelLast[playerid] = drunknew;
}
}
}
stock GetPlayerFPS(playerid)
{
return pFPS[playerid];
}
-
Jha nem rossz kis program kár hogy a készítõje ilyenre pazarolja az idejét, amúgy ez ellen a kick lófaszt se ér automatikus újracsatlakozással rendelkezik.
-
Jha nem rossz kis program kár hogy a készítõje ilyenre pazarolja az idejét, amúgy ez ellen a kick lóf***t se ér automatikus újracsatlakozással rendelkezik.
hmm.. nekem valahogy kick után már nem tudott újracsatlakozni.
-
Akkor végül meg van a megoldás? :D
-
Igen, elvileg ez jól kiszûri. Igazából az ilyen ellenõrzések nagyon ideiglenesek, mert a következõ verzióba úgyis be fognak rakni ellenük védelmet.
-
Hát, serial alapján lehet nemfog menni, most járok a 4000. serialnál :D
-
Hát, serial alapján lehet nemfog menni, most járok a 4000. serialnál :D
forrásba nincs benne az összes?
Amúgy, az én megoldásom olyan 50%-ban tökéletes, mert ki lehet játszani..
Viszont kipróbáltam 1-2 szerveren, ott amint felcsatlakoztam vagy ledobott rögtön, vagy mikor elindítottam a fake killt akkor dobot ki rögtön.
De fogalmam sincs, hogy honnan tudja hogy én voltam az, mikor nem is engem öltek meg se nem én gyilkoltam... mégis engem rakott ki.
(Onnan tudom, hogy én is felmentem magyarul a progival is fent voltam, meg simán is :D )
-
Laciék megoldását átalakítottam kicsit, ha ez jobban tetszene.. :D
annyi változás hogy Banolja a botokat kick helyett..
#include a_samp
#define GetPlayerFPS(%0) GetPVarInt(%0, \"pFPS\")
public OnPlayerConnect(playerid)
{
SetPVarInt(playerid, \"pDrunkLevelLast\", 0);
SetPVarInt(playerid, \"pFPS\", 0);
SetTimerEx(\"BotCheck\", 5000, 0, \"i\", playerid);
return 1;
}
forward BotCheck(playerid);
public BotCheck(playerid) {
if(GetPlayerFPS(playerid) == 0) {
BanEx(playerid, \"Bot kirugva!\");
return 1;
}
return 1;
}
public OnPlayerUpdate(playerid) {
new drunknew;
drunknew = GetPlayerDrunkLevel(playerid);
if (drunknew < 100) {
SetPlayerDrunkLevel(playerid, 2000);
}else{
if(GetPVarInt(playerid, \"pDrunkLevelLast\") != drunknew) {
new wfps = GetPVarInt(playerid, \"pDrunkLevelLast\") - drunknew;
if ((wfps > 0) && (wfps < 200)) SetPVarInt(playerid, \"pFPS\", wfps);
SetPVarInt(playerid, \"pDrunkLevelLast\", drunknew);
}
}
return 1;
}
-
R**KSAMP-al mûködik.. :angel:
#include <a_samp>
new Count[MAX_PLAYERS];
public OnPlayerDeath(playerid, killerid, reason)
{
if( killerid == playerid ) Count[ killerid ] ++;
if( Count[ killerid ] == 3 ) Ban( killerid );
return 1;
}
public OnPlayerConnect(playerid) Count[ playerid ] = 0;
-
^ Ha 3x öngyilkos lesz, akkor bannolja.
-
Átírod 10re és már jó is.
2mp kb amire összegyûlik annyi. ;)
-
Cannon az akkor lenne jó ha egy timer is lenne mert van a /kill azzal töbször is öngyilkos lehet viszont ahogy én láttam ez a fake kill 4mp alatt 100-at csinál és annyi lehetne hogy csinsz egy legyen 20mp-s timer azért h aki 20mp alatt lesz öngyilkos ennyiszer azt bannolja csak.
-
Van olyan aki 10x 20x öngyilkos lesz? :o
Na de mindegy, itt egy másik megoldás.
#include <a_samp>
forward BotTimer();
new Count[MAX_PLAYERS];
public OnPlayerDeath(playerid, killerid, reason)
{
if( killerid == playerid ) Count[ killerid ] ++;
if( Count[ killerid ] == 10 ) Ban( killerid );
return 1;
}
public OnPlayerConnect(playerid) Count[ playerid ] = 0;
public OnGameModeInit() SetTimer( \"BotTimer\", 5000, true );
public BotTimer()
{
for( new i; i < MAX_PLAYERS; i++ )
if( IsPlayerConnected( i ) ) Count[ i ] = 0;
return 1;
}
-
Cannonn... Nem a killerid vagy a playerid a csaló.. Ez a megoldás s0beitnél jó, de RakSAMPnál nem.
Laciék megoldását átalakítottam kicsit, ha ez jobban tetszene.. :D
annyi változás hogy Banolja a botokat kick helyett..