[SAMMELTHREAD] Kleine Scripting Fragen

Dein Problem konnte durch einen User gelöst werden? Bedank dich bei ihm indem du seinen Beitrag als Hilfreich markierst sowie einen Daumen oben dalässt
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
  • Einfach unter OnPlayerConnect oder?
    Gerade am handy xD

    Mit freundlichen Grüßen
    [color=#696969][i][b]Maxi
    [tabmenu]
    [tab='Signatur!']

    [tab='Mein Computer System']

    • Gehäuse Delux SH891 Midi-Tower (ATX) schwarz
    • Netzteil 650 Watt Corsair VS650
    • Festplatte 1000GB SATA III 7200upm
    • Mainboard AM3 Gigabyte GA-970A-UD3P (Chipsatz:AMD 970/SB950/ATX)
    • NVIDIA Geforce GTX 770 Gainward Phantom
    • 8192MB DDR3 Single Channel 1600MHz
    • Prozessor AM3+ (FX-Serie) AMD FX-8350 8x 4.0 GHz


    [tab='Meine Handys']

    • HTC ONE M8
    • Samsung S3 mini
    • Vll bald HTC ONE M7


    [tab='Mein Steam Account = 1']

  • Hey gerade am Handy , würde gerne wissen ob der Befehl gehen würde.
    ocmd:auftrag(playerid,params[])
    {
    new auftragN;
    if(sscanf(params,"z",auftragN))return SendClientMessage(playerid,0xff0000ff,"Nutze /auftrag [zahl]");
    if(IsPlayerInFrakt(i,GetPVarInt(playerid,"Trucker")))return SendClientMessage(playerid,0xff0000ff,"Du bist kein Trucker!");
    for(new i=0; i<GetMaxPlayers(); i++)
    {
    if(IsPlayerConnected(i))
    {
    if(IsPlayerInFrakt(i,GetPVarInt(playerid,"Trucker")))
    {

    printf("Spieler %z hat den Auftrag %z angenommen",playerid,auftragN);
    SendClientMessage(playerid,0xff0000ff,"Du hast dir den Auftrag %z angenommen!");
    }
    }
    }
    return 1;
    }
    Oder wie würdet ihr das machen?
    Will das Jemand der IsPlayerInFrakt ein Auftrag annehmen kann.


    Oder so?
    ocmd:auftrag1(playerid,params[])
    {
    SendClientMessage(playerid,0xff0000ff,"Benutze /auftrag [Auftrag], um einen Auftrag anzunehmen");
    new auftragN;
    if(IsPlayerInFrakt(i,GetPVarInt(playerid,"Trucker")))return SendClientMessage(playerid,0xff0000ff,"Du bist kein Trucker!");
    if(sscanf(params,"z",auftragN))return SendClientMessage(playerid,0xff0000ff,"Nutze /auftrag [zahl]");
    printf("Spieler %z hat den Auftrag %z angenommen",playerid,auftragN);
    SendClientMessage(playerid,0xff0000ff,"Du hast dir den Auftrag %z angenommen!");
    return 1;
    }

    Mit freundlichen Grüßen
    [color=#696969][i][b]Maxi
    [tabmenu]
    [tab='Signatur!']

    [tab='Mein Computer System']

    • Gehäuse Delux SH891 Midi-Tower (ATX) schwarz
    • Netzteil 650 Watt Corsair VS650
    • Festplatte 1000GB SATA III 7200upm
    • Mainboard AM3 Gigabyte GA-970A-UD3P (Chipsatz:AMD 970/SB950/ATX)
    • NVIDIA Geforce GTX 770 Gainward Phantom
    • 8192MB DDR3 Single Channel 1600MHz
    • Prozessor AM3+ (FX-Serie) AMD FX-8350 8x 4.0 GHz


    [tab='Meine Handys']

    • HTC ONE M8
    • Samsung S3 mini
    • Vll bald HTC ONE M7


    [tab='Mein Steam Account = 1']

  • Ja habe jetzt wieder 2-4monate nix mehr gemacht und muss wohl mich erstmal einarbeiten.
    Werde mich bis heute abend nochmal dransitzen.
    Habe total falsch angefangen.


    Ich will ein job system mit bestimmten Aufträgen erstellen. Die man dann annimmt. Sollte ich dann Fragen , frag ich wieder :DD

    Mit freundlichen Grüßen
    [color=#696969][i][b]Maxi
    [tabmenu]
    [tab='Signatur!']

    [tab='Mein Computer System']

    • Gehäuse Delux SH891 Midi-Tower (ATX) schwarz
    • Netzteil 650 Watt Corsair VS650
    • Festplatte 1000GB SATA III 7200upm
    • Mainboard AM3 Gigabyte GA-970A-UD3P (Chipsatz:AMD 970/SB950/ATX)
    • NVIDIA Geforce GTX 770 Gainward Phantom
    • 8192MB DDR3 Single Channel 1600MHz
    • Prozessor AM3+ (FX-Serie) AMD FX-8350 8x 4.0 GHz


    [tab='Meine Handys']

    • HTC ONE M8
    • Samsung S3 mini
    • Vll bald HTC ONE M7


    [tab='Mein Steam Account = 1']

  • Ja habe jetzt wieder 2-4monate nix mehr gemacht und muss wohl mich erstmal einarbeiten.
    Werde mich bis heute abend nochmal dransitzen.
    Habe total falsch angefangen.


    Ich will ein job system mit bestimmten Aufträgen erstellen. Die man dann annimmt. Sollte ich dann Fragen , frag ich wieder :DD


    1. z steht für packed strings, für integer musst du i oder d nutzen


    2. Für statische Aufträge kannst du ja ein 2dimensionales Array erstellen mit folgender Struktur, dort kannst du deine Aufträge reinhauen, cTimestamp kann danachgenutzt werden
    um zum einen abtufragen ob dieser auftrag schon gemacht wurde und um den Auftrag erst nach einer gewissen Zeit wieder frei zu geben


    enum cContract {
    cName[40],
    Float:cX,
    Float:cY,
    Float:cZ,
    cWage,
    cTimestamp,
    };


    3. via einer for-schleife kannst du dir alles auflisten lassen entweder im Dialog (ShowPlayerDialog) oder im Chat (SendClientMessage).


    4. Wenn du einen string als platzhalter verwenden möchtest benötigst du %s, nicht %z

  • Zitat

    Was ist eigentlich schneller und besser, ein globaler Timer, der alle Spieler durchgeht und abfragt ob Var X = 4 ist oder aber Timer für jeden Spieler (new Timer[MAX_PLAYERS];)? (Knastsystem)


    LG


    @Jeffy: was meinst du dazu?

  • Was ist eigentlich schneller und besser, ein globaler Timer, der alle Spieler durchgeht und abfragt ob Var X = 4 ist oder aber Timer für jeden Spieler (new Timer[MAX_PLAYERS];)? (Knastsystem)
    @Jeffy: was meinst du dazu?


    Ich würde sagen ein Timer mit einem Loop ist besser, wenn nicht sogar wesentlich besser. Ich kann dir auch sagen warum.


    • Ein Timer der alle X Sekunden einen Loop durchführt belastet die CPU nur wenig innerhalb der X Sekunden bis zum Aufruf (ist ja nur 1 Timer), dann kurzzeitig etwas mehr, da er ja MAX_PLAYERS Durchläufe macht.
    • Hat man aber MAX_PLAYERS Timer, die alle X Sekunden aufgerufen werden, dann laufen MAX_PLAYERS Timer gleichzeitig, was bedeutet die CPU muss während der Zwit zwischen dem Aufruf (MAX_PLAYERS-1)-mal mehr Arbeit leisten. Wenn dann einer der ganzen Timer aufgerufen wird, dann wird zwar nur 1/MAX_PLAYERS -stel der Arbeit verrichtet als beim Timer mit Loop, aber (!) es wird ja jeder Timer aufgerufen, somit summiert sich hier die Arbeit wieder auf die selbe auf, nur, dass wir zwischen den Aufrufen eben eine MAX_PLAYERS-Fache CPU-Leistung brauchen.


    => Ein Timer mit Loop ist ressourcentechnisch gesehen besser.

  • Eine Frage und zwar, wie ist das mit dem attachen hab sowas nie gemacht und naja will bevor erstmal nachfragen ...
    Sprich ich will an einem Spieler ObjektID: 1550 attachen lassen das diese Money Bag am rücken von dem Spieler hängt .. wie kann ich sowas raus finden ...


    Mit einem Editor:
    http://forum.sa-mp.com/showthread.php?p=2385649
    http://forum.sa-mp.com/showthread.php?t=209234
    http://forum.sa-mp.com/showthread.php?t=196342

  • Jeffry: Heißt also, dass ein Timer, der ein Loop hat (foreach :)), wesentlich besser ist als ein Timer mit MAX_PLAYERS, danke dir werde ich mir merken :)


    Korrekt, wenn du mit "Timer mit MAX_PLAYERS" sagen willst, dass es für jeden Spieler einen extra Timer gibt.


    Andere Frage, ist es Möglich, einen Spieler an ein Fahrzeug zu attachen?


    Nein.
    Du könntest es nur so machen: http://forum.sa-mp.com/showpost.php?p=1290737&postcount=2232
    Aber ob das so schön aussieht bezweifle ich.

  • stock randfloat(Float:kleinerfloat, Float:grosserfloat) //by Templer
    {
    new kleinezahl = floatround(kleinerfloat, floatround_round), grossezahl = floatround(grosserfloat, floatround_round);
    return floatadd(float(random(grossezahl - kleinezahl)), kleinerfloat)
    }
    Habe ich gerade in einem alten Beitrag gefunden, wie man sieht hat die Funktion Templer: geschrieben ;)

  • new Float:randomfloat = (random(10)/100);


    Das gibt einfach nur 0 aus, in jedem Fall, da Integers immer auf das drunter liegende Integer abgerundet werden. Da du maximal 9/100 haben kannst => 0,09 => folgt 0.


    So ist es richtig:
    new Float:randomfloat = (float(random(10))/100.0);


    Beachte aber, dass Floats nicht sooo toll sind, meistens kommt da z.B. "0.05999" raus, für 6.0/100.0 .
    Davon abgesehen, wären hier folgende Werte möglich:
    0.00
    0.01
    0.02
    0.03
    0.04
    0.05
    0.06
    0.07
    0.08
    0.09


    Ist das, was du willst?