Gibt es bei so grundbefehlen verbesserungs vorschläge?

In 10 Minuten startet der nächtliche Backupvorgang! Es kann währenddessen (ca. 10 Minuten) zu Einschränkungen bei der Nutzung des Forums kommen
Weitere Infos findet ihr im Thema Backup des Forums
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
  • Hallo leute.
    Wie viele wissen, bin ich ja neu im scripten.
    Ich habe mich momentan an ein paar Haupt systeme gesetzt zb /pay und /gotols [id].
    Ich würde gerne wissen wie ihr das für anfänger findet, und was man daran verbessern könnte.


    fagen wir mal mit /pay an


    --------------------------------[/pay]-------------------------------
    if(strcmp(cmd, "/pay", true) == 0)
    {
    if(IsPlayerConnected(playerid))
    {
    tmp = strtok(cmdtext, idx);
    if(!strlen(tmp))
    {
    SendClientMessage(playerid, 0xFF00C3FF, "NUTZUNG: /pay [Spieler ID / Name] [betrag]");
    return 1;
    }
    //giveplayerid = strval(tmp);
    giveplayerid = ReturnUser(tmp);
    tmp = strtok(cmdtext, idx);
    if(!strlen(tmp))
    {
    SendClientMessage(playerid, 0xFF00C3FF, "NUTZUNG: /pay [Spieler ID / Name] [betrag]");
    return 1;
    }
    moneys = strval(tmp);
    if(moneys > 1000 && PlayerInfo[playerid][pLevel] < 1)
    {
    SendClientMessage(playerid, 0xFF00C3FF, "Du musst mindestens Level 3 sein, um über $1000 abgeben zu können.");
    return 1;
    }
    if(moneys < 1 || moneys > 99999)
    {
    SendClientMessage(playerid, 0xFF00C3FF, "Der Betrag muss zwischen $1 und $99999 sein!");
    return 1;
    }
    if (IsPlayerConnected(giveplayerid))
    {
    if(giveplayerid != INVALID_PLAYER_ID)
    {
    if(PlayerInfo[giveplayerid][pLocal] == 106)
    {
    SendClientMessage(playerid, COLOR_GRAD1, "Der Befehl ist nicht erlaubt.");
    return 1;
    }
    if (ProxDetectorS(5.0, playerid, giveplayerid))
    {
    GetPlayerName(giveplayerid, giveplayer, sizeof(giveplayer));
    GetPlayerName(playerid, sendername, sizeof(sendername));
    playermoney = GetPlayerMoney(playerid);
    if (moneys > 0 && playermoney >= moneys)
    {
    ConsumingMoney[giveplayerid] = 1;
    GivePlayerMoney(playerid, (0 - moneys));
    GivePlayerMoney(giveplayerid, moneys);
    format(string, sizeof(string), " Du hast %s(Spieler ID: %d), $%d auf die Hand gegeben.", giveplayer,giveplayerid, moneys);
    PlayerPlaySound(playerid, 1052, 0.0, 0.0, 0.0);
    SendClientMessage(playerid, COLOR_GRAD1, string);
    format(string, sizeof(string), " Du hast $%d von %s(Spieler ID: %d) auf die Hand gegeben.", moneys, sendername, playerid);
    SendClientMessage(giveplayerid, COLOR_GRAD1, string);
    format(string, sizeof(string), "%s hat $%d dem Spieler %s auf die Hand gegeben.", sendername, moneys, giveplayer);
    PayLog(string);
    if(moneys >= 1000000)
    {
    ABroadCast(COLOR_YELLOW,string,1);
    }
    PlayerPlaySound(giveplayerid, 1052, 0.0, 0.0, 0.0);
    format(string, sizeof(string), "* %s nimmt etwas Geld aus seiner Tasche und gibt es %s.", sendername ,giveplayer);
    ProxDetector(30.0, playerid, string, 0xFF00C3FF,0xFF00C3FF,0xFF00C3FF,0xFF00C3FF,0xFF00C3FF);
    }
    else
    {
    SendClientMessage(playerid, 0xFF00C3FF, "Ungültiger Betrag.");
    }
    }
    else
    {
    SendClientMessage(playerid, 0xFF00C3FF, "Du musst näher an dem Spieler sein!");
    }
    }
    }
    else
    {
    format(string, sizeof(string), "%d ist kein aktiver Spieler.", giveplayerid);
    SendClientMessage(playerid, 0xFF00C3FF, string);
    }
    }
    return 1;
    }

    --------------------------------[/gotols]-------------------------------


    if(strcmp(cmd, "/gotols", true) == 0)
    {
    if(IsPlayerConnected(playerid))
    {
    if(PlayerInfo[playerid][pAdmin] >= 1 || PlayerInfo[playerid][pSupporter] >= 1)
    {
    if (GetPlayerState(playerid) == 2)
    {
    new tmpcar = GetPlayerVehicleID(playerid);
    SetVehiclePos(tmpcar, 1514.1854,-1707.9962,14.0469);
    LinkVehicleToInterior(tmpcar,0);
    SetPlayerVirtualWorld(playerid,0);
    TelePos[playerid][0] = 0.0;TelePos[playerid][1] = 0.0;
    }
    else
    {
    SetPlayerPos(playerid, 1514.1854,-1707.9962,14.0469);
    SetPlayerVirtualWorld(playerid,0);
    }
    SendClientMessage(playerid, 0xFF00C3FF, "Du hast dich nach Los Santos geportet.");
    GetPlayerName(playerid, sendername, sizeof(sendername));
    format(string, sizeof(string), "%s hat sich nach Los Santos geportet.", sendername);
    ABroadCast(0xFF00C3FF,string,4);
    SetPlayerInterior(playerid,0);
    PlayerInfo[playerid][pInt] = 0;
    SetPlayerVirtualWorld(playerid,0);
    }
    else
    {
    SendClientMessage(playerid, 0xFF00C3FF, "Du bist nicht befugt !");
    }
    }
    return 1;
    }


    Ich habe diese Befehle nach ein paar tutorial ALLEINE nachgemacht.
    Was kann man da besser machen?


    MFG

  • Etwas aus einem GF zu kopieren kann jeder.

    Habe ich nicht!,
    Ich habe zwar tutorial geguckt , und sie teilweise abgeschrieben , jedoch ein bisschen geändert ,
    Ich versuche was zumachen , und dann heißt es ich würde was kopieren ...

    ja es gibt von meiner seite aus eine große veränderung!


    Ich würde das ganze viel kompakter schreiben.
    Spart Resourcen und Zeilen..

    und wie macht man das?
    MFG

  • Ach du heilige Sch*****.
    Bitte schau dir mal ein Tutorial an zu z.B ocmd und sscanf.
    Ich würde dir empfehlen damit zu arbeiten ist meiner Meinung nach
    um einiges leichter und auch Resourcen und Zeilen sparender.
    Außerdem ist es übersichtlicher:
    [ SCRIPTING ] sscanf 2.0

    Zitat von Elon Musk

    If you're trying to create a company, it's like baking a cake. You have to have all the ingredients in the right proportion.

  • Ach du heilige Sch*****.
    Bitte schau dir mal ein Tutorial an zu z.B ocmd und sscanf.
    Ich würde dir empfehlen damit zu arbeiten ist meiner Meinung nach
    um einiges leichter und auch Resourcen und Zeilen sparender.
    Außerdem ist es übersichtlicher:
    [ SCRIPTING ] sscanf 2.0


    will momentan ocmd "lernen"
    oder mich damit beschäftigen xD
    MFG

  • Ja mehr als genaug, zuviele unnötige klammern..
    Dann sölltest du lieber mit sscanf arbeiten als so n anderen parameter zeugs.
    als nächstes sölltest du erstmal nen string erstellen, bevor du ihn formatierst.

    if(strcmp(cmd, "/pay", true) == 0)
    {
    if(IsPlayerConnected(playerid))
    {
    new string[128];
    tmp = strtok(cmdtext, idx);
    if(!strlen(tmp))returnSendClientMessage(playerid, 0xFF00C3FF, "NUTZUNG: /pay [Spieler ID / Name] [betrag]");
    //giveplayerid = strval(tmp);
    giveplayerid = ReturnUser(tmp);
    tmp = strtok(cmdtext, idx);
    if(!strlen(tmp))return SendClientMessage(playerid, 0xFF00C3FF, "NUTZUNG: /pay [Spieler ID / Name] [betrag]");
    moneys = strval(tmp);
    if(moneys > 1000 && PlayerInfo[playerid][pLevel] < 1)return SendClientMessage(playerid, 0xFF00C3FF, "Du musst mindestens Level 3 sein, um über $1000 abgeben zu können.");
    if(moneys < 1 || moneys > 99999)return SendClientMessage(playerid, 0xFF00C3FF, "Der Betrag muss zwischen $1 und $99999 sein!");
    if (IsPlayerConnected(giveplayerid))
    {
    if(giveplayerid != INVALID_PLAYER_ID)return SendClientMessage(playerid, COLOR_GRAD1, "Der Befehl ist nicht erlaubt.");
    if (ProxDetectorS(5.0, playerid, giveplayerid))
    {
    GetPlayerName(giveplayerid, giveplayer, sizeof(giveplayer));
    GetPlayerName(playerid, sendername, sizeof(sendername));
    playermoney = GetPlayerMoney(playerid);
    if (moneys > 0 && playermoney >= moneys)
    {
    ConsumingMoney[giveplayerid] = 1;
    GivePlayerMoney(playerid, (0 - moneys));
    GivePlayerMoney(giveplayerid, moneys);
    format(string, sizeof(string), " Du hast %s(Spieler ID: %d), $%d auf die Hand gegeben.", giveplayer,giveplayerid, moneys);
    PlayerPlaySound(playerid, 1052, 0.0, 0.0, 0.0);
    SendClientMessage(playerid, COLOR_GRAD1, string);
    format(string, sizeof(string), " Du hast $%d von %s(Spieler ID: %d) auf die Hand gegeben.", moneys, sendername, playerid);
    SendClientMessage(giveplayerid, COLOR_GRAD1, string);
    format(string, sizeof(string), "%s hat $%d dem Spieler %s auf die Hand gegeben.", sendername, moneys, giveplayer);
    PayLog(string);
    if(moneys >= 1000000)return ABroadCast(COLOR_YELLOW,string,1);
    PlayerPlaySound(giveplayerid, 1052, 0.0, 0.0, 0.0);
    format(string, sizeof(string), "* %s nimmt etwas Geld aus seiner Tasche und gibt es %s.", sendername ,giveplayer);
    ProxDetector(30.0, playerid, string, 0xFF00C3FF,0xFF00C3FF,0xFF00C3FF,0xFF00C3FF,0xFF00C3FF);
    }
    else return SendClientMessage(playerid, 0xFF00C3FF, "Ungültiger Betrag.");
    }
    else return SendClientMessage(playerid, 0xFF00C3FF, "Du musst näher an dem Spieler sein!");
    }
    else
    {
    format(string, sizeof(string), "%d ist kein aktiver Spieler.", giveplayerid);
    SendClientMessage(playerid, 0xFF00C3FF, string);
    }
    }
    return 1;
    }

  • Ja mehr als genaug, zuviele unnötige klammern..


    Das stimmt schon mal, aber man kann noch mehr verbessern:


    if(!strcmp(cmd, "/pay", true)){
    new string[128];
    tmp = strtok(cmdtext, idx);
    if(!tmp[0])return SendClientMessage(playerid, 0xFF00C3FF, "NUTZUNG: /pay [Spieler ID / Name] [betrag]");
    giveplayerid = strval(tmp),tmp = strtok(cmdtext, idx);
    if(!tmp[0]) return SendClientMessage(playerid, 0xFF00C3FF, "NUTZUNG: /pay [Spieler ID / Name] [betrag]");
    moneys = strval(tmp);
    if(moneys > 1000 && PlayerInfo[playerid][pLevel] < 1)return SendClientMessage(playerid, 0xFF00C3FF, "Du musst mindestens Level 3 sein, um über $1000 abgeben zu können.");
    if(moneys < 1 || moneys > 99999)return SendClientMessage(playerid, 0xFF00C3FF, "Der Betrag muss zwischen $1 und $99999 sein!");
    if(!IsPlayerConnected(giveplayerid)) return SendClientMessage(playerid, 0xFF00C3FF, "Ein Spieler mit dieser ID ist nicht online!");
    if(!ProxDetectorS(5.0, playerid, giveplayerid)) return SendClientMessage(playerid, 0xFF00C3FF, "Du musst näher an dem Spieler sein!");
    GetPlayerName(giveplayerid,giveplayer,MAX_PLAYER_NAME),GetPlayerName(playerid,sendername,MAX_PLAYER_NAME),playermoney = GetPlayerMoney(playerid);
    if(playermoney < moneys) return SendClientMessage(playerid, 0xFF00C3FF, "Du besitzt nicht genug Geld.");
    ConsumingMoney[giveplayerid] = 1,GivePlayerMoney(playerid,-moneys),GivePlayerMoney(giveplayerid, moneys);
    format(string, sizeof(string), " Du hast %s(Spieler ID: %d), $%d auf die Hand gegeben.", giveplayer,giveplayerid, moneys);
    PlayerPlaySound(playerid, 1052, 0.0, 0.0, 0.0),SendClientMessage(playerid, COLOR_GRAD1, string);
    format(string, sizeof(string), " Du hast $%d von %s(Spieler ID: %d) auf die Hand gegeben.", moneys, sendername, playerid);
    SendClientMessage(giveplayerid, COLOR_GRAD1, string);
    format(string, sizeof(string), "%s hat $%d dem Spieler %s auf die Hand gegeben.", sendername, moneys, giveplayer);
    PayLog(string),PlayerPlaySound(giveplayerid, 1052, 0.0, 0.0, 0.0);
    if(moneys >= 1000000)return ABroadCast(COLOR_YELLOW,string,1);
    format(string, sizeof(string), "* %s nimmt etwas Geld aus seiner Tasche und gibt es %s.", sendername ,giveplayer);
    ProxDetector(30.0, playerid, string, 0xFF00C3FF,0xFF00C3FF,0xFF00C3FF,0xFF00C3FF,0xFF00C3FF);
    return 1;
    }


    Zudem ist strtok so wie es im GF verwendet wird, scheiße :S


    mfg. :thumbup:

    ast2ufdyxkb1.png


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

    Einmal editiert, zuletzt von Kaliber ()

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Vergleich mal deinen Code und wie der Befehl bei mir aussieht:
    ocmd:pay(playerid,params[])
    {
    new pID, money;
    if(sscanf(params,"ui",pID,money)) return SendClientMessage(playerid,ROT,"[INFO] /pay [ID/Name] [Geld]");
    if(IsPlayerConnected(pID) && !IsPlayerNPC(pID))
    {
    new Float:px;
    new Float:py;
    new Float:pz;
    GetPlayerPos(pID,px,py,pz);
    if(IsPlayerInRangeOfPosition(playerid,5.0,px,py,pz))
    {
    if(money < 1 || money > 99999)
    {
    if(GetPlayerMoney(playerid) < money) return SendClientMessage(playerid,ROT,"Du hast nicht soviel Geld dabei !");
    GivePlayerMoney(playerid,GetPlayerMoney(playerid) -money);
    GivePlayerMoney(pID,GetPlayerMoney(pID) +money);
    new text1[75];
    new text2[75];
    new player[MAX_PLAYER_NAME];
    GetPlayerName(pID,player,sizeof(player));
    format(text1,sizeof text1,"Du hast %d$ von %s erhalten.",money,getname(playerid));
    format(text2,sizeof text2,"Du hast %s %d$ übergeben.",player,money);
    SendClientMessage(pID,BLAU,text1);
    SendClientMessage(playerid,BLAU,text2);
    }
    else return SendClientMessage(playerid,ROT,"Der Betrag muss zwischen 1$ und 99999$ liegen.");
    }
    else return SendClientMessage(playerid,ROT,"Der Spieler ist nicht in deiner Reichweite.");
    }
    else return SendClientMessage(playerid,ROT,"Der Spieler ist nicht online.");
    return 1;
    }