Scripting fragen (4)

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
  • 1. Wie ist die Abfrage den Spieler zum verbieten als beifahrer eine waffe zu halten
    2. Wie ist die Abfrage den Spieler die Waffe zu geben (z.b. M4,AK,Deagle)
    3. Wie erstelle ich ein Serverside Geld system (hab nichts gefunden bei der Sufu oder der TuT liste)
    4. Wie geht das hier

    Airbreak


    *Geschwindigkeit prüfen - FUNKTIONSFÄHIG, BEACHTEN: Einzelne Maximalgeschwindigkeiten pro Auto definieren, eine Hydra ist schneller als ein Taxi, BEACHTEN: NICHT GetPlayerVelocity nutzen, s0beit kann verhindern, dass getplayervelocity daten empfängt


    *Höhe prüfen (MapAndreas etc) - FUNKTIONSFÄHIG, BEACHTEN: Am besten 2x in 2 sekunden abstand die Höhe nehmen (zu Fuß), und schauen, ob es weniger wird (fallen)

  • 1. SetPlayerArmedWeapon(playerid,0);


    2. GivePlayerWeapon(playerid, weaponid, ammo);


    3. Eine 2. Variable erstellen in der Das geld gespeichert wird. Beispiel:


    new pMoney[MAX_PLAYERS];
    nun würde ich eine eigene funktion schreiben und die anstelle von GivePlayerMoney und ResetPlayerMoney benutzen:


    stock p_GivePlayerMoney(playerid, money)
    {
    GivePlayerMoney(playerid,money);
    pMoney[playerid] += money;
    return 1;
    }


    stock p_ResetPlayerMoney(playerid)
    {
    ResetPlayerMoney(playerid);
    pMoney[playerid] = 0;
    return 1;
    }


    und nun einfach mit GetPlayerMoney abfragen ob das geld was er auf der hand hat höher ist als das was in der variablen steht.


    4. ist etwas komplizierter

  • SetPlayerArmedWeapon(playerid, weaponid);


    Sorry, hatte mich versehen :D


    Ja kannst du genau mit dieser Funktion: Bei Deagle: SetPlayerArmedWeapon(playerid,24); Du musst ihm ggf. die Waffe vorher geben mit GivePlayerWeapon(playerid,24,munition);


    3. Wie soll ich das verstehen?

  • zu 1. Wen der Spieler einsteigt muss ich dann einfach
    SetPlayerArmedWeapon(playerid,0);
    machen?
    zu 2. Danke :)
    zu 3. Ja das das Geld ServerSide gespeichert wird also das über der eigentlichen Geldanzeige ein eigener Textdraw ist mit dem Geld das man hat ^^

  • 3. Das meinte ich eigentlich mit eigenem Textdraw ^^


    Textdraws sind dafür eher ungeeignet, da viele auch einen Font Mod drin haben und es auch schwer ist einen guten Textdraw dafür zu machen ;)

    "Bevor ich mir Informationen aus der "Bild" hole,
    werde ich anfangen, Wahlergebnisse danach vorauszusagen,
    neben welchen Busch unsere Katze gepinkelt hat."

    Margarete Stokowski


  • Textdraws sind dafür eher ungeeignet, da viele auch einen Font Mod drin haben und es auch schwer ist einen guten Textdraw dafür zu machen ;)


    Wie würdest du das den sonst lösen? hab kb das man sich Geld ercheaten kann und auch kb dafür ein extra Moneycheat zu haben ^^

  • Eigentlich könntest du das "standard" Geldsystem lassen,
    du müsstest dann nur z.B. in OnPlayerUpdate abfragen ob der spieler mehr Geld auf der Hand hat, als in der Variable steht -> wenn ja cheater,
    wenn weniger Geld runtersetzen,
    wenn gleich nichts machen

    "Bevor ich mir Informationen aus der "Bild" hole,
    werde ich anfangen, Wahlergebnisse danach vorauszusagen,
    neben welchen Busch unsere Katze gepinkelt hat."

    Margarete Stokowski

  • public OnPlayerEnterVehicle(playerid, vehicleid)
    {
    SetPlayerArmedWeapon(playerid,0);
    return 1;
    }


    Du musst einen eigenen Textdraw erstellen und dann einfach:

    new string[10];
    format(string,sizeof(string),"$%09d",GetPlayerMoney(playerid)); //Ich glaube die normale Geldanzeige hat 9 stellen, bin mir nicht sicher.
    PlayerTextDrawSetString(playerid, Textdrawid, string);



    Und wenn du ein AntiMoney CHeat haben willst, dann so wie ich es in der 1. antwort erklärt habe

  • @BlackAce
    Ich lasse mein Geld so laden/speichern



    mysql_SetInt("accounts", "Geld", GetPlayerMoney(playerid), "Name", SpielerInfo[playerid][pName]);//Speichern
    P_GivePlayerMoney(playerid,(mysql_GetInt("accounts", "Geld", "Name", SpielerInfo[playerid][pName])));//Laden
    stock P_GivePlayerMoney(playerid,summe)
    {
    SpielerInfo[playerid][pGeld] += summe;
    GivePlayerMoney(playerid,summe);
    }


    Muss ich dann immer wen ich jemanden Geld gebe
    "P_GivePlayerMoney" nutzen? oder kann ich "GivePlayerMoney" lassen?

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Ich hab nun überall "GivePlayerMoney" mit "P_GivePlayerMoney" ersetzt und wollte nun fragen ob "OnPlayerUpdate" so richtig ist ^^
    public OnPlayerUpdate(playerid)
    {
    new string[128],Geld=GetPlayerMoney(playerid);
    if(Geld>SpielerInfo[playerid][pGeld]){
    format(string,sizeof(string),"AdmCmd: %s wurde wegen MoneyHack gebannt",SpielerName(playerid));
    SendClientMessageToAll(ROT,string);
    SpielerInfo[playerid][pGebannt]=1;SavePlayer(playerid);Kick(playerid);
    }
    return 1;
    }

  • füg noch ein else hinzu:


    }
    else SpielerInfo[playerid][pGeld] = GetPlayerMoney(playerid);


    und ich würde dir raten erstmal ein Warning senden zu lassen und das Geld abzuziehen. Könnte auch ein Lag sein und dann wird er gleich gebannt.

  • So in etwa?
    public OnPlayerUpdate(playerid)
    {
    new string[128],Geld=GetPlayerMoney(playerid);
    if(Geld>SpielerInfo[playerid][pGeld]){
    if(MoneyCheat[playerid]==0){
    SendClientMessage(playerid,ROT,"Du stehst in verdacht auf MoneyHack!");
    SendClientMessage(playerid,GELB,"Es kann auch sein das durch ein Laag ein fehler auftrat!");
    }else if(MoneyCheat[playerid]==1){
    SendClientMessage(playerid,ROT,"Du stehst in verdacht auf MoneyHack!");
    SendClientMessage(playerid,GELB,"Es kann auch sein das durch ein Laag ein fehler auftrat!");
    }else if(MoneyCheat[playerid]==2){
    format(string,sizeof(string),"AdmCmd: %s wurde wegen MoneyHack gebannt",SpielerName(playerid));
    SendClientMessageToAll(ROT,string);
    SpielerInfo[playerid][pGebannt]=1;SavePlayer(playerid);Kick(playerid);
    }
    }
    else SpielerInfo[playerid][pGeld]=GetPlayerMoney(playerid);
    return 1;
    }

  • du machst es dir schwerer als es ist:


    new Cheatwarn[MAX_PLAYERS];
    public OnPlayerUpdate(playerid)
    {
    new string[128],Geld=GetPlayerMoney(playerid);
    if(Geld>SpielerInfo[playerid][pGeld])
    {
    if(Cheatwarn[playerid]<= 2)
    {
    SendClientMessage(playerid,ROT,"Du stehst in verdacht auf MoneyHack!");
    SendClientMessage(playerid,GELB,"Es kann auch sein das durch ein Laag ein fehler auftrat!");
    Cheatwarn[playerid]++;
    }
    else
    {
    format(string,sizeof(string),"AdmCmd: %s wurde wegen MoneyHack gebannt",SpielerName(playerid));
    SendClientMessageToAll(ROT,string);
    SpielerInfo[playerid][pGebannt]=1;
    SavePlayer(playerid);
    Kick(playerid);
    }
    }
    else SpielerInfo[playerid][pGeld]=GetPlayerMoney(playerid);
    return 1;
    }

  • Okay danke :) aber weiß jemand eine Lösung zu Problem 4?


    //edit
    Ich werde immer wen mir Geld abgezogen wird also z.b. "-25" gebannt -.-? Hab Simon schon gefragt ob das "+" im Code falsch ist er meinte "nein"