Nützliche Codeschnipsel

Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • #include <a_samp>
    #define RESET_ON_CHANGE 10 // Maximal 10x wird das Geld gezählt nach dem verändern danach setzt sich die Liste zurück und eine neue wird erstellt
    #define MAX_WARN 3 // 3 mal wird man gewarnt sobald man das Geld einfriert danach > Ban!
    forward moneyTask();
    main()
    {
    print("\n----------------------------------");
    print(" Anti Money Hack - by [BFX]Explosion");
    print("----------------------------------\n");
    }
    randomStr(len)
    {
    new rStr[32];
    if(len < 0 || len > 31)return rStr;
    for(new i = 0;i<len;i++)
    {
    new key;
    do{key = random(90);}
    while(key < 65);
    rStr[i] = key;
    }
    return rStr;
    }


    unqKey(playerid)
    {
    new rkey[16];
    do{format(rkey,sizeof rkey,"gk_%s",randomStr(8));}while(GetPVarInt(playerid,rkey) != 0);
    return rkey;
    }
    zusammen(playerid)
    {
    new nm[16],value;
    for(new j = 0;j<GetPVarsUpperIndex(playerid);j++)
    {
    GetPVarNameAtIndex(playerid,j,nm,sizeof nm);
    if(!strcmp(nm,"gk_",true,2))
    {
    value+=GetPVarInt(playerid,nm);
    if(GetPVarInt(playerid,nm) == 0)DeletePVar(playerid,nm);
    }
    }
    return value;
    }


    reset(playerid)
    {
    new nm[16],value;
    for(new j = 0;j<GetPVarsUpperIndex(playerid);j++)
    {
    GetPVarNameAtIndex(playerid,j,nm,sizeof nm);
    if(!strcmp(nm,"gk_",true,2))
    {
    value+=GetPVarInt(playerid,nm);
    DeletePVar(playerid,nm);
    }
    }
    return SetPVarInt(playerid,unqKey(playerid),value);
    }
    public moneyTask()
    {
    for(new i = 0;i<MAX_PLAYERS;i++)
    {
    if(IsPlayerNPC(i) || !IsPlayerConnected(i))continue;
    new gt = zusammen(i);
    if(!gt)continue;
    new warn = 0;
    while(GetPlayerMoney(i) != gt)
    {
    GivePlayerMoney(i,-GetPlayerMoney(i));
    GivePlayerMoney(i,gt);
    SetPVarInt(i,"_reset",GetPVarInt(i,"_reset")+1);
    if(GetPVarInt(i,"_reset") >= RESET_ON_CHANGE)reset(i);
    warn++;
    if(warn == MAX_WARN)Ban(i);
    }
    }
    }


    // Funktionen


    stock nGivePlayerMoneyEx(playerid,geld)
    {
    if(!IsPlayerConnected(playerid) || IsPlayerNPC(playerid))return 0;
    return SetPVarInt(playerid,unqKey(playerid),geld);
    }
    stock nGetPlayerMoneyEx(playerid)return zusammen(playerid);



    Hier ein Ausschnitt aus einem meiner Anti Money Cheat Systeme, dieses System ist anders und arbeitet über Zufallsschlüssel die für den Spieler generiert werde, die Beträge werden gesammelt und sobald sich das Geld verändert zusammen gezählt sprich auch Visuell aktualisert. Will der Spieler Geld einfrieren versucht das System die aktualisierung solange bis er die maximale Anzahl an Warnungen erreicht hat und verbannt den Spieler, wird die Anzeige jedoch erfolgreich auf das echte momentane Spielergeld gesetzt so bleibt alles im grünen Bereich.


    Nach 10 aktualisierungen werden die Beträge zusammen gezählt und in einen einzelnen Schlüssel transferiert danach verschwinden die anderen und es existiert ein Schlüssel für den Spieler der den echten Betrag hält, natürlich werden weitere Beträge wieder in einer Liste abgespeichert und 10x aktualisiert usw...


    Nicht vergessen den Timer moneyTask zu setzen, es reicht wenn er alle 2 Sekunden aktualisiert :)


    Mit einem Zufallsschlüssel/variablen System wird es für den noch Spieler schwerer irgendwas anzurichten, ich werde in nächster Zeit noch etwas nachbessern um es sicherer zu machen :)

    Mfg. BlackFoX_UD_ alias [BFX]Explosion


  • Ist down seid gestern abend

    http://forum.sa-mp.com/


    Schau mal da...


    Enrico
    Wenn ich es mir denke wie du es haben willst mach es so:
    Object erstellen
    Schleife durch alle Spieler,
    Abfragen ob sie in den Radius des Radios sind
    Sind sie es dann PlayAudioStreamForPlayer
    Sind sie es nicht dann
    StopAudioStreamForPlayer
    Schaltet man das Radio ab, dann löscht du das Object und stoppst den Stream bei den die in den Radius sind

    All in all it's just another brick in the wall

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen

  • das habe ich nur gebraucht PlayAudioStreamForPlayer danke :*

  • Hier bin ich mal so nett und nehme euch die Arbeit ab



    stock GetWeaponNameById(weaponid)
    {
    new name[64] = "Fehler";


    switch(weaponid)
    {
    case 1: name = "Bass Knuckles";
    case 2: name = "Golf Club";
    case 3: name = "Nightstick";
    case 4: name = "Knife";
    case 5: name = "Baseball Bat";
    case 6: name = "Shovel";
    case 7: name = "Pool Cue";
    case 8: name = "Katana";
    case 9: name = "Chainsaw";
    case 10: name = "Double-ended Dildo";
    case 11: name = "Dildo";
    case 12: name = "Vibrator";
    case 13: name = "Silver Vibrator";
    case 14: name = "Flowers";
    case 15: name = "Cane";
    case 16: name = "Grenade";
    case 17: name = "Tear Gas";
    case 18: name = "Molotov Cocktail";
    case 22: name = "9mm";
    case 23: name = "Tazer";
    case 24: name = "Desert Eagle";
    case 25: name = "Shotgun";
    case 26: name = "Sawnoff Shotgun";
    case 27: name = "Combat Shotgun";
    case 28: name = "Micro SMG / Uzi";
    case 29: name = "MP5";
    case 30: name = "AK-47";
    case 31: name = "M4";
    case 32: name = "Tec-9";
    case 33: name = "Country Rifle";
    case 34: name = "Sniper Rifle";
    case 35: name = "RPG";
    case 36: name = "HS Rocket";
    case 37: name = "Flamethrower";
    case 38: name = "Minigun";
    case 39: name = "Satchel Charge";
    case 40: name = "Detonator";
    case 41: name = "Spraycan";
    case 42: name = "Fire Extinguisher";
    case 43: name = "Camera";
    case 44: name = "Nights Vus Goggles";
    case 45: name = "Thermal Googles";
    case 46: name = "Parachute";
    }
    return name;


    Der stock funktioniert auch!

  • Naja aber dann würde es doch reichen wenn man nur bei den 3 den Namen manuell ausgibt. Also iwie so
    stock GetWeaponNameByID(wID) {
    new wName[32];
    switch (wID) {
    case 1 .. 17, 22 .. 43, 46: GetWeaponName(wID,wName,32);
    case 0: format(wName,32,"Fist");
    case 18: format(wName,32,"Molotov Cocktail");
    case 44: format(wName,32,"Night Vis Goggles");
    case 45: format(wName,32,"Thermal Goggles");
    default: format(wName,32,"Invalid Weapon Id");
    }
    return wName;
    }

    The fact is, I am right. And if you think I'm wrong, you are wrong.

  • Wäre es so nicht viel einfacher?

    new WaffenName[][] =
    {
    "Faust","Schlagring","Golfschläger","Schlagstock","Messer","Baseballschläger","Schaufel","Billiard Schläger","Katana","Kettensäge",
    "Dildo","Vibrator","Vibrator","Dildo","Blumen","Stock","Granate","Tränengas","Molotow Coctail","-","-","-",
    "9mm Pistole","SDPistole","Deagle","Shotgun","Sawn-Off Shotgun","Combat Shotgun","Micro Uzi","MP5","AK47","M4","Tec9",
    "Rifle","Sniper","RPG","Raketenwerfer","Flammenwerfer","Minigun","Rucksackbomben","Detonator","Sprühdose","Feuerlöscher",
    "Kamera","Nachtsichtgerät","Infrarotsichtgerät","Fallschirm"
    };