[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
  • Ich will das ganz gern verstehen deswegen frag ich dich jetzt einfach mal warum dieses +1? das mit der 6 kann ich ja verstehen...


    Meine frage jetzt noch wenn ich z.B einen /bankrob befehl mache soll er einen Maximal Betrag von 120k bekommen heißt das es müsste so aussehen?


    new beute = random(120000)+1;


    @Kaliber



    So habe nun einiges gemacht nun weiß ich einfach nicht weiter, weiß nichtmal ob das alles richtig ist aber habe das versucht wie ich es jetzt verstanden habe, vielleicht kann mal jemand drüber schauen aber es ist bestimmt noch lange nicht fertig. Das ist das was ich jetzt alles habe:


    ocmd:dice(playerid,params[])
    {
    if(!IsPlayerConnected(playerid)) return SendClientMessage(playerid,ROT,"Du kannst den Befehl noch nicht benutzen!");
    new string[64];
    new zahl = random(6)+1;
    format(string,sizeof(string), "Der Spieler %s würfelte die Zahl %i",SpielerName(playerid),zahl);
    SendClientMessage(playerid,0xBE44FFFF,string);
    return 1;
    }


    ocmd:diceinvite(playerid,params[])
    {
    if(!IsPlayerConnected(playerid)) return SendClientMessage(playerid,ROT,"Du kannst den Befehl noch nicht benutzen!");
    new pID, runden, string[128], einsatz;
    if(sscanf(params,"uii",pID,runden,einsatz))return SendClientMessage(playerid,GELB,"[INFO]: /diceinvite [playerid/Name][Runden 1-3] [Menge/Betrag]");
    {
    format(string,sizeof(string),"Der Spieler %s hat dich zu %i Runde/n um %i$ eingeladen!",SpielerName(playerid),runden,einsatz);
    SendClientMessage(playerid,HELLBLAU,string);
    SendClientMessage(playerid,HELLBLAU,"Um die einladung anzunehmen tippe: /accept diceinvite");
    }
    return 1;
    }


    ocmd:accept(playerid,params[])
    {
    new cmd;
    if(strcmp(cmd,"dice",true) == 0)
    {
    SendClientMessage(playerid,GELB,"Die Würfelrunde wird nun gestartet, viel Glück!");
    }
    return 1;
    }

    2 Mal editiert, zuletzt von KinGRaPTiiC ()

  • deswegen frag ich dich jetzt einfach mal warum dieses +1?

    Die Funktion random(x) gibt dir eine zufällige Zahl in dem Bereich von [0, ..., x-1] wieder.


    Da ein Würfel aber keine 0 als Zahl hat und auch eine 6 musst du dementsprechend noch +1 machen, damit das Intervall von [1, ..., x] geht :)


    new beute = random(120000)+1;


    Hier könnte der User eine Beute von 1$ - 120.000$ machen, korrekt.


    Bei deinem Code, bin ich gerade zu faul dir das zu schreiben, sry xD

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • Du sagst da "Der Spieler %s würfelte die Zahl %i" Wieso sendest du das an die PlayerID wenn du das ganze "Würfelte" nennst?
    Du musst es entweder an jeden Spieler senden, oder an die Spieler die in deiner nähe sind @KinGRaPTiiC

  • ocmd:accept(playerid,params[])
    {
    new cmd, pID,einsatz;
    if(strcmp,cmd,"dice",true) == 0)
    {
    if(!diceinv[pID] = true))return SendClientMessage(playerid,DUNKELROT,"Du hast keine Einladung zum Würfeln bekommen!");
    {
    SendClientMessage(playerid,GELB,"Die Runde beginnt jetzt, viel Glück!");
    SendClientMessage(pID,GELB,"Die Runde beginnt jetzt, viel Glück!");
    GivePlayerMoney(playerid, -einsatz);
    GivePlayerMoney(pID, -einsatz);
    PlayerInfo[pID][pMoney] -= einsatz;
    PlayerInfo[playerid][pMoney] -= einsatz;
    SendClientMessage(playerid,HELLBLAU,"Um zu würfeln tippe: /dice");
    diceinv[pID] = false;
    diceinv[playerid] = false;
    }
    }
    return 1;
    }


    Wie bekomme ich das jetzt hin das der einsatz von meinem diceinvite befehl bei accept dice erkannt wird?



    ocmd:diceinvite(playerid,params[])
    {
    if(!IsPlayerConnected(playerid)) return SendClientMessage(playerid,ROT,"Du kannst den Befehl noch nicht benutzen!");
    new pID, runden, string[128], einsatz;
    if(sscanf(params,"uii",pID,runden,einsatz))return SendClientMessage(playerid,GELB,"[INFO]: /diceinvite [playerid/Name][Runden 1-3] [Menge/Betrag]");
    {
    format(string,sizeof(string),"Der Spieler %s hat dich zu %i Runde/n um %i$ eingeladen!",SpielerName(playerid),runden,einsatz);
    SendClientMessage(playerid,HELLBLAU,string);
    SendClientMessage(playerid,HELLBLAU,"Um die einladung anzunehmen tippe: /accept diceinvite");
    diceinv[pID] = true;
    }
    return 1;
    }

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

  • Hallo ich wollte frage wie ich am besten einstelle das der Spieler Pro Buchstabe 15$ Zahlen muss.
    Der Erste Buchstabe kostet 75$ und Weitere Buchstaben 15$ Wie mach ich das am besten.


    @Jeffry

  • Was mache ich falsch? der Code ist aus einem anderen Bereich da ich das mit dem diceinvite nicht so verstanden habe etc.


    Errors:
    C:\Users\Dustin\Desktop\SA-MP Server\gamemodes\Virtual-Reallife.pwn(3667) : error 029: invalid expression, assumed zero
    C:\Users\Dustin\Desktop\SA-MP Server\gamemodes\Virtual-Reallife.pwn(3701) : error 029: invalid expression, assumed zero
    C:\Users\Dustin\Desktop\SA-MP Server\gamemodes\Virtual-Reallife.pwn(3722) : error 029: invalid expression, assumed zero
    C:\Users\Dustin\Desktop\SA-MP Server\gamemodes\Virtual-Reallife.pwn(3725) : error 029: invalid expression, assumed zero
    Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase



    4 Errors.





    Codes:


    ocmd:diceaccept(playerid, params[])
    {
    if(Dice_State[playerid] != DICE_REQUEST)) return SendClientMessage(playerid, -1, "Du hast keine Dice-Anfrage bekommen"); //3667
    new pID = Dice_PartnerID[playerid] - 1; // PartnerID wird ermittelt
    new value = Dice_Pot[playerid]; // Betrag wird ermittelt
    GivePlayerMoney(playerid, value * -1); // Betrag wird mir abgezogen
    GivePlayerMoney(pID, value * -1); // Betrag wird meinem Partner abgezogen
    new myValue = random(6) + 1; // Ich würfle
    new ptValue = random(6) + 1; // Mein Partner würfelt
    if(myValue > ptValue)// Ich würfle einen größeren Wert als mein Partner
    {
    GivePlayerMoney(playerid, value * 2); // Ich bekomme das ganze Geld
    SendClientMessage(playerid, -1, "Du hast gewonnen");
    SendClientMessage(pID, -1, "Du hast verloren");
    }
    else if(myValue == ptValue) { // Unentschieden
    GivePlayerMoney(playerid, value); // Ich bekomme mein Geld zurück
    GivePlayerMoney(pID, value); // Mein Partner bekommt sein Geld zurück
    SendClientMessage(playerid, -1, "Es ist unentschieden");
    SendClientMessage(pID, -1, "Es ist unentschieden");
    }
    else// Ich würfle einen kleineren Wert als mein Partner
    {
    GivePlayerMoney(pID, value * 2); // Mein Partner bekommt das ganze Geld
    SendClientMessage(playerid, -1, "Du hast verloren");
    SendClientMessage(pID, -1, "Du hast gewonnen");
    }// Variablen werden zurückgesetzt
    Dice_PartnerID[playerid] = 0;
    Dice_State[playerid] = 0;
    Dice_PartnerID[pID] = 0;
    Dice_State[pID] = 0;
    return 1;
    }


    ocmd:dicedecline(playerid, params[])
    {
    if(Dice_State[playerid] != DICE_REQUEST)) return SendClientMessage(playerid, -1, "Du hast keine Dice-Anfrage bekommen"); //3701
    new pID = Dice_PartnerID[playerid] - 1; // PartnerID wird ermittelt
    // Variablen werden zurückgesetzt
    Dice_PartnerID[playerid] = 0;
    Dice_State[playerid] = 0;
    Dice_PartnerID[pID] = 0;
    Dice_State[pID] = 0;
    SendClientMessage(playerid, -1, "Deine Dice-Request wurde abgelehnt.");
    SendClientMessage(pID, -1, "Du hast die Dice-Request abgelehnt");
    return 1;
    }



    ocmd:diceinvitef(playerid, params[])
    {
    new partner, value;
    if(sscanf(params,"ud",partner,value)) return SendClientMessage(playerid, -1, "/diceinvite [PlayerID/Name] [Betrag]");
    if(GetPlayerMoney(playerid) < value) return SendClientMessage(playerid, -1, "Du hast nicht genug Geld");
    if(value < 1000 || value > 10000) return SendClientMessage(playerid, -1, "Der Betrag muss zwischen 1000$ und 10000$ liegen");
    if(!IsPlayerConnected(partner)) return SendClientMessage(playerid, -1, "Der Spieler ist nicht online");
    if(Dice_State[partner] != 0) return SendClientMessage(playerid, -1, "Der Spieler würfelt bereits");
    Dice_State[playerid] = DICE_WAIT; // State: Wartet, dass der Spieler annimmt //3722
    Dice_PartnerID[playerid] = partner + 1; // PartnerID wird zwischengespeichert
    Dice_Pot[playerid] = value; // Der Betrag wird zwischengespeichert
    Dice_State[partner] = DICE_REQUEST; // State: Partner hat eine Anfrage bekommen //3725
    Dice_PartnerID[partner] = playerid + 1; // PartnerID von dem Spieler wird ebenfalls gesetzt
    Dice_Pot[partner] = value; // Der Betrag wird zwischengespeichert
    SendClientMessage(partner, -1, "Du hast ein Dice-Request bekommen. Nutze /diceaccept oder /dicedecline");
    return 1;
    }


    #define DICE_WAIT
    #define DICE_REQUEST


    new Dice_PartnerID[MAX_PLAYERS];
    new Dice_State[MAX_PLAYERS];
    new Dice_Pot[MAX_PLAYERS];

  • zu allererst du hast in den zeilen 3667 und 3701
    am ende des if Statements eine Klammer zuviel.


    Und dann haben DICE_WAIT und DICE_REQUEST
    keinen Wert


    Die Zeile die du setzt sieht also so aus
    Dice_State[playerid] = ; Dementsprechend haut dir der Compiler auf einen Fehler raus.


    Die Defines werden im Compilevorgang eigentlich nur mit den dahinter angegeben Wert ersetzt.

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

    Margarete Stokowski

  • Hay.


    Ich kann mein Dialog nicht schließen. Egal was ich mache ich muss dann mein GTA neu starten

  • Womit hat das was zutun ?

    Steht da noch mehr im Log? ^^



    Ich kann mein Dialog nicht schließen. Egal was ich mache ich muss dann mein GTA neu starten

    Code von dem Dialog, also unter OnDialogResponse wird dir anscheinend immer wieder der Dialog aufgerufen..



    Kann es sein dass sich der Server Schließt ?

    Nein, dann wäre er weg :D

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • Verstehe ich nicht ist doch alles richtig? Dice_State hat doch das hier: Dice_State[playerid] != DICE_REQUEST
    und bei den if abfragen wenn ich da eine Klammer weg mache bekomme ich errors mit den return´s die dahinter sind ?( also kann das ja schon einmal nicht stimmen würde ich jetzt mal sagen :D und wenn ich z.B bei den #define DICE_WAIT 1
    #define DICE_REQUEST 2 die zahlen 1 und 2 hinter mache kommen 4 wanings dazu... das wären diese hier:


    C:\Users\Dustin\Desktop\SA-MP Server\gamemodes\Virtual-Reallife.pwn(3666) : warning 215: expression has no effect
    C:\Users\Dustin\Desktop\SA-MP Server\gamemodes\Virtual-Reallife.pwn(3667) : warning 225: unreachable code
    C:\Users\Dustin\Desktop\SA-MP Server\gamemodes\Virtual-Reallife.pwn(3700) : warning 215: expression has no effect
    C:\Users\Dustin\Desktop\SA-MP Server\gamemodes\Virtual-Reallife.pwn(3701) : warning 225: unreachable code
    Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase



    4 Errors.



    und halt hier nochmal alle errors&warnings:


    C:\Users\Dustin\Desktop\SA-MP Server\gamemodes\Virtual-Reallife.pwn(3666) : error 029: invalid expression, assumed zero
    C:\Users\Dustin\Desktop\SA-MP Server\gamemodes\Virtual-Reallife.pwn(3666) : warning 215: expression has no effect
    C:\Users\Dustin\Desktop\SA-MP Server\gamemodes\Virtual-Reallife.pwn(3666) : error 001: expected token: ";", but found "return"
    C:\Users\Dustin\Desktop\SA-MP Server\gamemodes\Virtual-Reallife.pwn(3667) : warning 225: unreachable code
    C:\Users\Dustin\Desktop\SA-MP Server\gamemodes\Virtual-Reallife.pwn(3700) : error 029: invalid expression, assumed zero
    C:\Users\Dustin\Desktop\SA-MP Server\gamemodes\Virtual-Reallife.pwn(3700) : warning 215: expression has no effect
    C:\Users\Dustin\Desktop\SA-MP Server\gamemodes\Virtual-Reallife.pwn(3700) : error 001: expected token: ";", but found "return"
    C:\Users\Dustin\Desktop\SA-MP Server\gamemodes\Virtual-Reallife.pwn(3701) : warning 225: unreachable code
    Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase



    4 Errors.


    und hier die warning zeilen:


    if(Dice_State[playerid] != DICE_REQUEST))return SendClientMessage(playerid, -1, "Du hast keine Dice-Anfrage bekommen"); //3666
    new pID = Dice_PartnerID[playerid] - 1; // PartnerID wird ermittelt //3667
    if(Dice_State[playerid] != DICE_REQUEST))return SendClientMessage(playerid, -1, "Du hast keine Dice-Anfrage bekommen"); //3700
    new pID = Dice_PartnerID[playerid] - 1; // PartnerID wird ermittelt //3701


    MfG.