[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

  • Nein. Nur einen Zeilen Unterschied in der .pwn :D


    mfg. :thumbup:


    Aber bei mehreren Anweisungen wenn man diese in einer reihe schreibt nur sind da die codes ein ganz ganz wenig schneller.
    Beispiel


    return SendClientMessage(playerid,-1,"Hallo"),SendClientMessage(playerid,-1,"wie"),SendClientMessage(playerid,-1,"gehts");


    ist schneller als



    SendClientMessage(playerid,-1,"Hallo");
    SendClientMessage(playerid,-1,"wie");
    SendClientMessage(playerid,-1,"gehts");
    return 1;

  • EDIT:


    So, hab das mal aus dem /engine befehl genommen und versucht einzeln zu verpacken..


    Also nun habe ich ein simples problem. Weis aber nicht was ich tun muss.. :D


    Wenn man im Fahrschulauto ist, soll nach start des Motors die Checkpoints kommen.


    Steigtman in das Auto, fragt der script ab ob motor an oder aus. Ist natürlich aus und der script soll weitermachen wenn motor an


    ABER


    er fragt nur einmal ab! Nur beim einsteigen, danach passiert nix mehr. Wie muss ich das mit den return uws machen? Oder wie mache ich es, dass ständig abgefragt wird ob motor an oder aus?


  • würde es nicht so machen wie XeroX es sagt.... (alles auf einmal ist immer die SCHLECHTESTE Wahl)


    Du denkst schon richtig, nicht zu viel auf einmal. Desto mehr du den Code verteilst (also nicht für alle Spieler zur selben Zeit), desto weniger wird es zu Lag kommen!!!


    Stell dir aber noch die Frage: Ist wirklich für jeden Spieler ein Timer notwendig ? Reicht es vll auch einfach nach jedem Tod (OnPlayerSpawn) den Spieler zu Updaten(ohne Timer dann) ? (oder so in der Art)

  • Das wäre auch eine Option über die man nachdenken könnte.


    Spezieller wird es aber nun da 100% Lags bei meiner Speicherung der Fraktionen entstehen was gut nachzuvollziehen ist.
    Es werden nicht nur insgesamt (bisher) 18 Fraktionen mit sämtlichen Daten gespeichert (mysql) sondern pro 18 Fraktionen nochmal 11 Namen der Ränge (Rang 0 - 10) und anschließend nochmal Fraktionsfahrzeuge (über 400).


    Das es da kurz hängt kann ich gut verstehen...


    public FrakUpdate()
    {
    new Query[500];
    for(new i = 0; i < sizeof Fraktionen; i++)
    {
    mysql_real_escape_string(Fraktionen[i][Frakname], Fraktionen[i][Frakname]);
    format(Query,sizeof(Query),"UPDATE `Fraktionen` SET `Kasse` = '%f', `Mats` = '%d', `Drogen` = '%d', `MaxMember` = '%d', `Respekt` = '%d', `Muebersicht` = '%d', `Buendnis` = '%d', `BMinuten` = '%d', `BStunden` = '%d', `BTage` = '%d', `Grundgehalt` = '%d', `Rangbonus` = '%d', `MaxRangs` = '%d', `Bizzes` = '%d', `kAbgehoben` = '%d' WHERE `Frakname` = '%s'",
    Fraktionen[i][Kasse], Fraktionen[i][Mats], Fraktionen[i][Drogen], Fraktionen[i][MaxMember], Fraktionen[i][Respekt], (Fraktionen[i][Muebersicht]) ? 1:0, Fraktionen[i][Buendnis], Fraktionen[i][BMinuten], Fraktionen[i][BStunden], Fraktionen[i][BTage], Fraktionen[i][Grundgehalt], Fraktionen[i][Rangbonus], Fraktionen[i][MaxRangs], Fraktionen[i][Bizzes], Fraktionen[i][kAbgehoben], Fraktionen[i][Frakname]);
    mysql_query(Query);


    for(new j = 0; j < 11; j++)
    {
    new rstr[10];
    format(rstr,sizeof(rstr),"Rang %d", j);
    mysql_real_escape_string(rstr, rstr);
    mysql_real_escape_string(Rangnamen[i][j], Rangnamen[i][j]);
    format(Query,sizeof(Query),"UPDATE `Fraktion_Raenge` SET `%s` = '%s' WHERE `Frakname` = '%s'", rstr, Rangnamen[i][j], Fraktionen[i][Frakname]);
    mysql_query(Query);
    }
    }
    for(new i = 0; i < sizeof Frakcars; i++)
    {
    format(Query,sizeof(Query),"UPDATE `Fraktion_Fahrzeuge` SET");
    if(Frakcars[i][created])
    {
    new Float:vhp;
    GetVehicleHealth(Frakauto[i],vhp);
    format(Frakcars[i][Nummernschild],30,"%s",vInfo[Frakauto[i]][Nummernschild]);
    format(Query,sizeof(Query),"%s `vHP` = '%f', `vTank` = '%d',",Query, vhp, vInfo[Frakauto[i]][vTank]);
    }
    mysql_real_escape_string(Frakcars[i][CName],Frakcars[i][CName]);
    mysql_real_escape_string(Frakcars[i][Nummernschild],Frakcars[i][Nummernschild]);
    format(Query,sizeof(Query),"%s `Zerstoert` = '%d', `Rang` = '%d', `Tempomat` = '%d', `created` = '%d', `Nummernschild` = '%s', `posx` = '%f', `posy` = '%f', `posz` = '%f', `posa` = '%f' WHERE `CName` = '%s' AND `fID` = '%d' AND `cID` = '%d'",
    Query, Frakcars[i][Zerstoert], Frakcars[i][Rang], (Frakcars[i][Tempomat]) ? 1:0, (Frakcars[i][created]) ? 1:0, Frakcars[i][Nummernschild], Frakcars[i][posx], Frakcars[i][posy], Frakcars[i][posz], Frakcars[i][posa], Frakcars[i][CName], Frakcars[i][Frakid], Frakcars[i][Frakcarid]);
    mysql_query(Query);
    }
    return 1;
    }

  • Und was ist jetzt deine Frage ?
    Logisch, dass es hängt, erst führst du immer nen Query in der Schleife aus (dazu UPDATE Querys die am lahmsten von allen sind) und dann
    sind deine Querys nicht threaded. Würdest du die auf threaded Querys umschreiben, wären deine Laggs sicherlich behoben.


    LG

    Main: CPU: Intel Core i5-4440 @ 3,10 GHz | CPU-Cooling: Matterhorn -PURE- | RAM: 16GB Crucial Ballistix Sport DDR3-1600 DIMM CL9-9-9-24 |
    Motherboard: ASRock B85M Pro4 | GPU: Sapphire Radeon R9 390X Nitro 8GB GDDR5 |

    SSD: Samsung SSD 840 Evo 500GB | Power Supply: 550 Watt Corsair CS Series Modular 80+ Gold | Case: beQuiet! Silent Base 800


    As I walk through the valley of the shadow of death
    I take a look at my life and realize there's nothin' left.

  • Dann ist meine Frage: Wie geht das mit Threaded Querys?


    Weil ich brauche ja Update komme um die SQL Befehle ja nicht umzu und genauso muss ich auch in der schleife diesen Query ausführen.


    //edit: oder reicht es etwa wenn ich einfach irgenteine id als resultid eintrage das Public hinzufüge und einfach leer lasse?

    Einmal editiert, zuletzt von Simon ()