GTA Közösség - A magyar GTA fórum

San Andreas Multiplayer (SA-MP) => SA-MP: Szerverfejlesztés => A témát indította: Gang[St]e[R] - 2011. április 07. - 18:11:00

Cím: IsPlayerCheater
Írta: Gang[St]e[R] - 2011. április 07. - 18:11:00
Üdv!
Gondolkoztam mit írjak és ez jutott eszembe!
Ez a \"kód\"-al megteheted azt ,hogyha csítel a játékos mi történjen és ha nem csítel akkor mi történjen.
Ha csítel nem bannolja hanem eldöntheted micsináljon vele, csak a számodra megfelelõ helyre írd (mint pl. OnPlayerSpawn, ...) Ha ha csítel és azt akarod ,hogy  történjen valami akkor ezzel a fügvényel kérdezheted le:
 
if(IsPlayerCheater(playerid))

 
De ha azt akarod ,hogy ha nem csítel és akkor történjen a játékossal valami akkor:
 
if(IsPlayerNotCheater(playerid))

 
Ez a kód kicsit scriptnek tûnik, de kódnak szánom:
 

#include <a_samp>
forward OnPlayerCheat(playerid);
new bool:Cheat[MAX_PLAYERS] = {false,...};
new Float:health, Float:armour;
public OnFilterScriptInit()
{
    for(new i; i < MAX_PLAYERS; i++)
{
    SetTimerEx(\"OnPlayerCheat\", 2500, true, \"i\", i);
}
return 1;
}
public OnPlayerSpawn(playerid)
{
Cheat[playerid] = false;
return 1;
}
public OnPlayerCheat(playerid)
{
if(IsPlayerConnected(playerid) && !IsPlayerNPC(playerid))
{
    new weapons = GetPlayerWeapon(playerid);
    GetPlayerHealth(playerid, health);
    GetPlayerArmour(playerid, armour);
    if(health >= 100.1 || armour >= 100.1 || weapons == 35 || weapons == 36 || weapons == 37 || weapons == 38)
    {
        Cheat[playerid] = true;
    }
}
}
stock IsPlayerCheater(playerid)
{
if(Cheat[playerid] == true);
}
stock IsPlayerNotCheater(playerid)
{
if(Cheat[playerid] == false);
}

 
Ez a \"kód\" akkor mutatja ,hogy csíter a játékos ,ha az élete vagy a páncélja nagyobb mint 100.0 vagy akkor ha a 4 nagy tiltott fegyvert használja (Minigun, Rocket Launcher...).
Manapság csak ami scriptjeinkbe vannak úgy a god módok ,hogy 100.0 ra teszi adott idõnként az életet a cheat-ek nél általában nem adott idõnként tölt hanem pl.: 10000-re teszi.
Ez a sajátmagam által írt script, mivel elég kicsi is ha lenne már ilyen kód arrol nem tudtam.
A \"kód\"ot nem teszteltem!
Lesznek még fejlesztések ,és ha zero megengedi beteszem az anti fly scriptjét ,persze mindenhol írnám ,hogy az övé!
Cím: IsPlayerCheater
Írta: ZeRo - 2011. április 07. - 18:57:46
A Cheat szimbólumot vektorként deklaráld, mert így nem fog rendesen mûködni. Tehát például ha ID 2 minigunozna, akkor akárkinek az IDjével futtatnád le az IsPlayerCheater függvényt, az igazzal térne vissza, mivel így csak egy sima változó.
 

new bool: Cheat[ MAX_PLAYERS ] = { false, ... };
Cím: IsPlayerCheater
Írta: Y2K - 2011. április 07. - 19:14:58
Amúgy én nem látok sok értelmet az egészben... Amúgy stock-nak mióta van visszatérése? Vagyis nincs is... de ezmiezmár?
Cím: IsPlayerCheater
Írta: Gang[St]e[R] - 2011. április 07. - 19:26:39
Idézetet írta: Y2K date=1302196498\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"7374\" data-ipsquote-contentclass=\"forums_Topic
Amúgy én nem látok sok értelmet az egészben... Amúgy stock-nak mióta van visszatérése? Vagyis nincs is... de ezmiezmár?
 
Szerintem hasznos is lehet csak kicsit fejlesztgetnem kellene és már nagyon jól mutatná a csítert!
Cím: IsPlayerCheater
Írta: kurta999 - 2011. április 07. - 19:30:04
A cheatok nemrakják a játékos életét 100 felé. Ezt már énis próbáltam, és nemvált be.
Cím: IsPlayerCheater
Írta: Gang[St]e[R] - 2011. április 07. - 19:30:47
Idézetet írta: kurta999 date=1302197404\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"7374\" data-ipsquote-contentclass=\"forums_Topic
A cheatok nemrakják a játékos életét 100 felé. Ezt már énis próbáltam, és nemvált be.
 
Nekem még régen tesztelték és ott úgy volt!
De mindegyik hack más.
Nincs arra megoldás ,hogy stockban lehessen ! jelet tenni?
Cím: IsPlayerCheater
Írta: Stricica - 2011. április 07. - 19:48:18
\" post=\"127994\" timestamp=\"1302197447\"]

A cheatok nemrakják a játékos életét 100 felé. Ezt már énis próbáltam, és nemvált be.
 
[/quote]
Nekem még régen tesztelték és ott úgy volt!
De mindegyik hack más.
Nincs arra megoldás ,hogy stockban lehessen ! jelet tenni?
 
[/quote]
 
stock bool...

 ?
E:
Például:
 
stock bool:IsPlayerCheater(playerid)
{
     new weapons = GetPlayerWeapon(playerid);
     GetPlayerHealth(playerid, health);
     GetPlayerArmour(playerid, armour);
     if(health >= 100.1 || armour >= 100.1 || weapons == 35 || weapons == 36 || weapons == 37 || weapons == 38) return true;
 return false;
}

 
Nem teszteltem, de valahogy így kell.
Cím: IsPlayerCheater
Írta: Gang[St]e[R] - 2011. április 07. - 20:23:36
Idézetet írta: Stricica date=1302198498\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"7374\" data-ipsquote-contentclass=\"forums_Topic

link=topic=11308.msg127994#msg127994 date=1302197447]

A cheatok nemrakják a játékos életét 100 felé. Ezt már énis próbáltam, és nemvált be.
 
Nekem még régen tesztelték és ott úgy volt!
De mindegyik hack más.
Nincs arra megoldás ,hogy stockban lehessen ! jelet tenni?
 
[/quote]
 
stock bool...

 ?
E:
Például:
 
stock bool:IsPlayerCheater(playerid)
{
     new weapons = GetPlayerWeapon(playerid);
     GetPlayerHealth(playerid, health);
     GetPlayerArmour(playerid, armour);
     if(health >= 100.1 || armour >= 100.1 || weapons == 35 || weapons == 36 || weapons == 37 || weapons == 38) return true;
 return false;
}

 
Nem teszteltem, de valahogy így kell.
 
[/quote]
Most mivan stricica? ez mi? azt kérdeztem ,hogy stockban meglehet e oldani a ! (felkiáltó) jelet. És úgy csinálnám meg mint pl az IsPlayerNPC !IsPlayerNPC
Cím: IsPlayerCheater
Írta: Stricica - 2011. április 07. - 20:27:04
Ha a másolt formában csinálod !-el akkor menni fog.
Asszem :D
Cím: IsPlayerCheater
Írta: Zsolesszka - 2011. április 07. - 20:29:14
Hát én is látok pár szörnyûséget.  :(
Tanácsként fogadd el hogy tesztelni sosem árt, akkor nem kerülnének ki a kezed közül ennyire tré kódok.
Ezért pár apróságot leírok.
Láttam egy ilyen részt kérdezném tudod-e hogy ez mit is csinál?
 

new bool:Cheat[MAX_PLAYERS] = {false,true};

 
Ne találgass, leírom.
Ezzel a sorral létrehoztál egy bool típusú változót melynek true és false értéke lehet, \"Cheat\" néven majd ezt megsokszoroztad a MAX_PLAYERS definícióval(500), majd adtál értéket a 0 cellának false és az 1-es cellának true-t.
Tehát ha ki printelnénk a tartalmát a következõ eredményt kapnánk.
 

Cheat[0] = false;
Cheat[1] = true;
Cheat[2] = false;
Cheat[3] = false;
Cheat[4] = false;
Cheat[5] = false;
Cheat[6] = false;
...
Cheat[498] = false;
Cheat[499] = false;

 
Ebbõl már látszik hogy ennek így semmi értelme.
Itt egy kis kód ennek a mûködésének tesztelésére:
 

new
pelda[20] = { 1, 0, 2, ... };
printf(\"pelda változó kiíratása cellánként\");
for(new i; i < sizeof pelda; i++)
{
printf(\"cell: %d | %d\", i, pelda);
}

 
Akkor más, ez most tényleg jó így?
 

    for(new i; i < MAX_PLAYERS; i++)
   {
       SetTimerEx(\"OnPlayerCheat\", 2500, true, \"i\", i);
   }

 
Ezzel nem kevesebb mint 500 darab timer-t indítasz el.
Nem lenne elég ha OnPlayerConnectnél indulna el egy darab timer és OnPlayerDisconnectnél meg leállításra kerülne?
Vagy legyen egy állandó timer és a meghívott funkcióban legyen egy ciklus amely lefut MAX_PLAYERS értékig vagy még jobb ha foreach van alkalmazva.
És nézd meg azt ahogy Stricica írta meg.
Cím: IsPlayerCheater
Írta: Gang[St]e[R] - 2011. április 07. - 20:34:36
De Zero adta azt a kódot és õ profi,de halgatok rád is köszönöm a tanácsot!
Cím: IsPlayerCheater
Írta: kurta999 - 2011. április 07. - 21:12:37
Nem értem ezeket a stockokat.
Amúgy PVar sztem jobb megoldás lenne. De lényegibe mindegy. Ja és itt meg lehet használni a char-os megoldást, ha nincs PVar.
Mér nem így csinálod meg: ( Itt írtam a fórumon, tuti nem 100% :D )
#define IsPlayerCheater(%1) \\
Cheat[%1]
És akkor:
if(!IsPlayerCheater(playerid)) return Ez ok;
if(IsPlayerCheater(playerid)) return Geci cheater;
Cím: IsPlayerCheater
Írta: ZeRo - 2011. április 08. - 14:32:23
\" post=\"128055\" timestamp=\"1302201276\"]
De Zero adta azt a kódot és õ profi,de halgatok rád is köszönöm a tanácsot!
 
[/quote]
Én nem azt írtam le, amit te beraktál a kódodba, nézd csak meg. Te a ... helyett true-t írtál.
Cím: IsPlayerCheater
Írta: Gang[St]e[R] - 2011. április 08. - 14:45:58
Idézetet írta: ZeRo date=1302265943\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"7374\" data-ipsquote-contentclass=\"forums_Topic

link=topic=11308.msg128055#msg128055 date=1302201276]
De Zero adta azt a kódot és õ profi,de halgatok rád is köszönöm a tanácsot!
 
Én nem azt írtam le, amit te beraktál a kódodba, nézd csak meg. Te a ... helyett true-t írtál.
 
[/quote]
Okok javítva!
Cím: IsPlayerCheater
Írta: Bart - 2011. április 15. - 15:57:22
Hát a kód jó, de nem elég pontos.
Ha használod ezt attól még lehet cheater