Einfacher Scripten (Ressourcenschonender)

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
  • Guten Abend,


    Ich wollte mir nun ein Pfandflaschensystem bauen, und ich mache es glaub ich ressourcenfressend.


    new flasche1,flasche2;



    //PFANDFLASCHEN LS
    flasche1 = CreatePickup(1551,2,418.2114,-1545.0438,27.5781,-1);//1
    flasche2 = CreatePickup(1551,2,509.3970,-1648.9506,18.6278,-1);//2



    public OnPlayerPickUpPickup(playerid, pickupid)
    {
    if(pickupid == flasche1)
    {
    SendClientMessage(playerid,weis," Du hast eine Pfandflasche gefunden!");
    Spieler[playerid][pfandflaschen] ++;
    Speichern(playerid);
    new query[128],string[128];
    format(query,sizeof(query),"SELECT pfandflaschen='%i' FROM accounts WHERE Username='%s'",Spieler[playerid][pfandflaschen],Name(playerid));
    mysql_function_query(dbhandle,query,false,"","");
    format(string,sizeof(string),"Aktuell: %d",Spieler[playerid][pfandflaschen]);
    SendClientMessage(playerid,weis,string);
    return 1;
    }
    else if(pickupid == flasche2)
    {
    SendClientMessage(playerid,weis," Du hast eine Pfandflasche gefunden!");
    Spieler[playerid][pfandflaschen] ++;
    Speichern(playerid);
    new query[128],string[128];
    format(query,sizeof(query),"SELECT pfandflaschen='%i' FROM accounts WHERE Username='%s'",Spieler[playerid][pfandflaschen],Name(playerid));
    mysql_function_query(dbhandle,query,false,"","");
    format(string,sizeof(string),"Aktuell: %d",Spieler[playerid][pfandflaschen]);
    SendClientMessage(playerid,weis,string);
    return 1;
    }
    return 1;
    }



    Kann man soetwas ressourcenschonender schreiben?

  • Also eins fällt mir schonmal auf.


    Deine strings sind mit 128 doch etwas groß, solltest mal nachzählen / schätzen wie viele du brauchst.
    Tipp: http://www.woerter-zaehlen.de/


    Dann vergiss nicht, das du strings mehrfach benutze kannst, in dem du sie neu formatierst,
    somit sparst du dir einen.


    Ansonsten sieht das ganz vernünftig aus.
    Nur stellt sich die frage, ist "Speichern" auch so vernünftig, das gehört ja auch dazu :P

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

    Margarete Stokowski

  • Ist es so besser? :P


    public OnPlayerPickUpPickup(playerid, pickupid)
    {
    new string[14];
    format(string,sizeof(string),"Aktuell: %d",Spieler[playerid][pfandflaschen]);
    if(pickupid == flasche1)
    {
    SendClientMessage(playerid,weis," Du hast eine Pfandflasche gefunden!");
    Spieler[playerid][pfandflaschen] ++;
    Speichern(playerid);
    new query[128];
    format(query,sizeof(query),"SELECT pfandflaschen='%i' FROM accounts WHERE Username='%s'",Spieler[playerid][pfandflaschen],Name(playerid));
    mysql_function_query(dbhandle,query,false,"","");
    SendClientMessage(playerid,weis,string);
    return 1;
    }
    else if(pickupid == flasche2)
    {
    SendClientMessage(playerid,weis," Du hast eine Pfandflasche gefunden!");
    Spieler[playerid][pfandflaschen] ++;
    Speichern(playerid);
    new query[128];
    format(query,sizeof(query),"SELECT pfandflaschen='%i' FROM accounts WHERE Username='%s'",Spieler[playerid][pfandflaschen],Name(playerid));
    mysql_function_query(dbhandle,query,false,"","");
    SendClientMessage(playerid,weis,string);
    return 1;
    }
    return 1;
    }

  • @Andrzejxy':
    Da würde ich gar nicht drüber meckern, da du gar nicht weißt wie das insgesamt aussieht :thumbup:


    @BaRkS:
    Nicht wirklich.


    Würde das eher so machen:
    public OnPlayerPickUpPickup(playerid, pickupid)
    {
    if(pickupid == flasche1)
    {
    SendClientMessage(playerid,weis," Du hast eine Pfandflasche gefunden!");
    Spieler[playerid][pfandflaschen] ++;
    Speichern(playerid);
    new query[90];
    format(query,sizeof(query),"SELECT pfandflaschen='%i' FROM accounts WHERE Username='%s'",Spieler[playerid][pfandflaschen],Name(playerid));
    mysql_function_query(dbhandle,query,false,"","");
    format(query,sizeof(query),"Aktuell: %d",Spieler[playerid][pfandflaschen]);
    SendClientMessage(playerid,weis,query);
    return 1;
    }
    else if(pickupid == flasche2)
    {
    SendClientMessage(playerid,weis," Du hast eine Pfandflasche gefunden!");
    Spieler[playerid][pfandflaschen] ++;
    Speichern(playerid);
    new query[90];
    format(query,sizeof(query),"SELECT pfandflaschen='%i' FROM accounts WHERE Username='%s'",Spieler[playerid][pfandflaschen],Name(playerid));
    mysql_function_query(dbhandle,query,false,"","");
    format(query,sizeof(query),"Aktuell: %d",Spieler[playerid][pfandflaschen]);
    SendClientMessage(playerid,weis,string);
    return 1;
    }
    return 1;
    }
    Weil sonst hast du zwar eine Pfandflasche gefunden, aber die Anzahl ist defakto falsch 8o

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

    Margarete Stokowski

  • @BlackAce:


    Ich brauche deine Hilfe noch einmal.


    Der Speichert das nicht ab X(


    stock Speichern(playerid)
    {
    if(Spieler[playerid][eingeloggt] == 1)
    {
    new query[250];
    format(query,sizeof(query),"UPDATE accounts SET level='%i',admin='%i',pfandflaschen='%i',rucksack='%i' WHERE Username='%s'",GetPlayerScore(playerid),Spieler[playerid][admin],Spieler[playerid][pfandflaschen],Spieler[playerid][rucksack],Name(playerid));
    mysql_function_query(dbhandle,query,false,"","");
    }
    return 1;
    }

  • Warum den query nicht direkt unter den public?


    Das wäre nur dann sinnig, wenn er keine anderen Pickups habt, die er verwenden möchte oder das CallBack nur dafür verwendet,
    ich gaube nicht das er genau das vorhat


    @BaRkS:
    Nicht eingeloggt oder deine Tabelle stimmt ncht mit deinem Query.
    Du solltest dir mal die dazugehörige Log angucken :thumbup:

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

    Margarete Stokowski

  • Bin ich der einzige, dem diese Query suspekt vorkommt ? ?(


    Stimmt ist mir gar nicht aufgefallen :D


    Das würde aber nicht erklären, warum er nicht speichert ^^

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

    Margarete Stokowski

  • Das würde aber nicht erklären, warum er nicht speichert ^^

    Ich gebe mal 3 Theorien ab:


    1. Die Query in "Speichern" hat einen Syntax-Fehler
    Zwar sollte es rein theoretisch egal sein, aber man kann ja mal testweise eine komplett wohlgeformte MySQL-Query basteln ( wie es sich gehört :rolleyes: )

    SQL
    UPDATE `accounts` SET `level` = %i, `admin` = %i, `pfandflaschen` = %i, `rucksack` = %i WHERE `Username` = "%s"

    Vielleicht geht es dann ja, weil einfache Striche um Integer... ewww....


    2. Die total falsch geformte Query raus
    Siehe 2 Beiträge vorher. Vielleicht gibt es ja echt so etwas, wenn ich mal referenzieren darf...

    PHP
    if(($res = 5*2) >= 10) {  }

    Wenn es das auch mit Select gibt -> überschrieben ?


    3. Verschwörung der Illuminaten
    Sie wurden dadurch verärgert, dass ihr Strohmann aus dem Adminteam getreten ist und sie sich einen anderen bestechlichen Mod suchen müssen :rolleyes:

  • Vielleicht geht es dann ja, weil einfache Striche um Integer... ewww....


    Beim Integer ist das defakto egal, eigentlich macht man das mit den ' immer wenn man einen Wert festlegt, egal ob beim WHERE SET oder sonst wo.



    Wenn du Werte festlegen willst nuztz man die ' nunmal, das hat nichts mit Integer Float oder nem Text zu tun.


    Ich würde viel eher darauf tippen, das seine Tabelle die Großschreibung drin hat.
    Also
    Accounts Level ...
    und nicht
    accounts level ...

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

    Margarete Stokowski

  • [...]
    Wenn du Werte festlegen willst nuztz man die ' nunmal, das hat nichts mit Integer Float oder nem Text zu tun.
    [...]

    Bei Integers / Floats / Doubles / Longs braucht man die nicht, habe sie da nie gebraucht. Aber man lernt nie dazu :D


    Für mal bitte in phpMyAdmin ( oder ähnliches ) folgenden Befehl aus:

    SQL
    SHOW CREATE TABLE `accounts`;


    Bekomme ich noch einen Like von @Andrzejxy': ? D:

  • Mir ist gerade aufgefallen, der speichert auch das Level usw. nicht mehr.


    /edit




    Das kommt, ist das richtig?
    Tion:


    /edit 2


    Ich habe bei dem stock das einmal geprintet, und habe gesehen, dass es gar nicht geprintet wird, beim ausloggen 8|


    stock Speichern(playerid)
    {
    if(Spieler[playerid][eingeloggt] == 1)
    {
    new query[250];
    format(query,sizeof(query),"UPDATE accounts SET level='%i',admin='%i',pfandflaschen='%i',rucksack='%i' WHERE Username='%s'",GetPlayerScore(playerid),Spieler[playerid][admin],Spieler[playerid][pfandflaschen],Spieler[playerid][rucksack],Name(playerid));
    mysql_function_query(dbhandle,query,false,"","");
    print(query);
    }
    return 1;
    }



    public OnPlayerDisconnect(playerid, reason)
    {
    Speichern(playerid);
    Reset(playerid);
    return 1;
    }

    4 Mal editiert, zuletzt von BaRkS ()

  • Das ist exakt das, was wir wollen.


    Nimm mal den Stock bitte so: stock Speichern(playerid){
    print("1");
    if(Spieler[playerid][eingeloggt] == 1)
    {
    print("2");
    new query[250];
    format(query,sizeof(query),"UPDATE accounts SET level='%i',admin='%i',pfandflaschen='%i',rucksack='%i' WHERE Username='%s'",GetPlayerScore(playerid),Spieler[playerid][admin],Spieler[playerid][pfandflaschen],Spieler[playerid][rucksack],Name(playerid));
    print("3");
    mysql_function_query(dbhandle,query,false,"","");
    print(query);
    } else print("Nicht eingeloggt");
    return 1;
    } Und guck dann mal, wie weit er kommt ;)


    Edit: @Andrzejxy': :love: