[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
  • Wie verschließe ich alle Türen aller Fahrzeuge beim Serverstart?
    Falls dies nicht möglich ist, ich spawne beim Serverstart alle Fahrzeuge mit einer for-Schleife, dort jedes einzelne zu schließen klappt bei mir nicht, wie muss ichs machen?


    for(new i = 0; i < num_rows; i++)
    {
    //unwichtig
    AddStaticVehicle(mid,x,y,z,a,color1,color2);
    SetVehicleParamsForPlayer(i+1, -1, 0, 1);
    }


    Alle Fahrzeuge spawnen, die Türen sind allerdings nicht verschlossen :)

    Je mehr Käse, desto mehr Löcher.
    Je mehr Löscher, desto weniger Käse.
    Ergo: Je mehr Käse, desto weniger Käse.


  • lle Fahrzeuge spawnen, die Türen sind allerdings nicht verschlossen

    Zitat

    Since 0.3a you will have to reapply this function when OnVehicleStreamIn is called.


    d.h. du musst in OnVehicleStreamIn die Funktion zum abschließen erneut aufrufen, damit diese auch wirklich verschlossen sind.


    http://wiki.sa-mp.com/wiki/SetVehicleParamsForPlayer


    Hier ist auch gleich ein Beispiel mit dabei ;)

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

    Margarete Stokowski

  • Kann mir jemand sagen wie ich gettime convertieren kann? Oder hat jemand eine funktionstüchtiges stock womit man die richtige Zeit rauskriegt?


    Ich habe dich auf der vorherigen Seite bereits zitiert, aber wenn du mir nicht antworten möchtest, dann kann ich dir auch nicht helfen.
    Möchtest du den Timestamp ( die Rückgabe von gettime(); ) konvertieren, oder die Stunden, Minuten und Sekunden bekommen?
    Timestamp => 1440618609 => 26.08.2015 - 21:50:09 Uhr

  • Perfekt, hat direkt funktioniert :)


    Nun muss ich die Fahrzeuge nur noch wieder aufschließen können, dies ist mit meinem Wissen allerdings nur möglich solange man in besagtem Fahrzeug sitzt.
    Ich würde dies gerne auch möglich machen wenn man direkt neben dem Fahrzeug steht. Wie wäre das möglich?


    Ich würde mit IsPlayerInRangeOfPoint arbeiten, allerdings ist dieser Punkt ja variabel, außerdem müsste dabei auch die Fahrzeug-ID übergeben werden damit auch das richtige Fahrzeug aufgeschlossen werden kann.


    Irgendwelche Denkanstöße?


    Vielen Dank!

    Je mehr Käse, desto mehr Löcher.
    Je mehr Löscher, desto weniger Käse.
    Ergo: Je mehr Käse, desto weniger Käse.


  • ch würde mit IsPlayerInRangeOfPoint arbeiten, allerdings ist dieser Punkt ja variabel, außerdem müsste dabei auch die Fahrzeug-ID übergeben werden damit auch das richtige Fahrzeug aufgeschlossen werden kann.


    Naja nicht ganz - hab da mal was für dich rausgesucht.


    stock GetClosestVehicle(playerid, Float:range)
    {
    new Float:p_X;
    new Float:p_Y;
    new Float:p_Z;


    new Float:Distance;
    new Float:PretendentDistance = range +1;
    new Pretendent;


    GetPlayerPos(playerid, p_X, p_Y, p_Z);


    for(new vehicleid=1; vehicleid < MAX_VEHICLES; vehicleid++)
    {
    Distance = GetVehicleDistanceFromPoint(vehicleid, p_X, p_Y, p_Z);


    if(Distance <= range && Distance <= PretendentDistance)
    {
    Pretendent = vehicleid;
    PretendentDistance = Distance;
    }
    }


    return Pretendent;
    }


    Gibt einfach das Auto was am nächsten zum Spieler ist zurück.
    Natürlich in angegebener Range

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

    Margarete Stokowski

  • Super, genau das was ich gesucht habe!
    Leider läuft es noch nicht so wie geplant.


    new vid = GetClosestVehicle(playerid, 2.0);
    SetVehicleParamsForPlayer(vid, -1, 0, 0);


    Findest du einen Fehler hierbei? Egal ob ich neben oder auf dem Fahrzeug stehe, aufgeschlossen wird es nicht. Bedeutet der 2. Parameter "-1", dass diese Einstellung für alle Spieler gilt? Denn hier gehört eigentlich die Spieler-ID rein.


    Außerdem: Kann ich abfragen ob ein Fahrzeug in unmittelbarer Nähe ist durch:
    if(GetClosestVehicle(playerid, 2.0))
    Sehe ich richtig, dass der if-Block nur ausgeführt wird wenn GetClosestVehicle etwas returnt?


    MfG und vielen Dank


    EDIT: Ich habe das Problem gefunden, zur Lösung bräuchte ich eine Methode um zu überprüfen wie viele Fahrzeuge aktuell auf dem Server existieren. Gibt es da eine einfache Methode?

    Je mehr Käse, desto mehr Löcher.
    Je mehr Löscher, desto weniger Käse.
    Ergo: Je mehr Käse, desto weniger Käse.


    2 Mal editiert, zuletzt von Merlin13 ()

  • Bedeutet der 2. Parameter "-1", dass diese Einstellung für alle Spieler gilt?

    Nein.


    Denn hier gehört eigentlich die Spieler-ID rein.

    Korrekt


    Sehe ich richtig, dass der if-Block nur ausgeführt wird wenn GetClosestVehicle etwas returnt?

    Nein, der if Block wird immer ausgeführt, sofern das überhaupt ausgeführt werden soll.
    Wenn GetClosestVehicle etwas anderes als 0 returnt(Funktionen geben idR immer etwas zurück), dann wird der Block ausgeführt.
    Ansonsten nicht.


    Ich habe das Problem gefunden, zur Lösung bräuchte ich eine Methode um zu überprüfen wie viele Fahrzeuge aktuell auf dem Server existieren.

    Du gehst warscheinlich gerade über MAX_VEHICLES, du kannst auch GetVehiclePoolSize() nutzen.


    bspw so:for(new i = 1, Cur_Cars = GetVehiclePoolSize(); i != Cur_Cars; i++)

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

    Margarete Stokowski

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • mein server geht immer aus was machen?


    [01:22:13] [debug] Server crashed while executing gr.amx
    [01:22:13] [debug] AMX backtrace:
    [01:22:13] [debug] #0 native CallLocalFunction () [080dfac0] from samp7011_5444
    [01:22:13] [debug] System backtrace:

  • mein server geht immer aus was machen?


    In CallLocalFunction dürfen keine Leeren Strings übergeben werden...evtl das mal prüfen...


    Passiert meistens wenn du keinen guten "CMD-Prozessor" verwendest...wechsel den einfach mal bzw Update ihn ^^


    Unknown column 'id' in 'where clause'


    Das bedeutet, dass das Feld ID nicht existiert...da du z.B. sowas machst:


    SQL
    SELECT * FROM `Bla` WHERE `id`='0'


    und dieses ID feld existiert nicht, dass musst du einfach erstellen :)


    mfg. :thumbup:

    ast2ufdyxkb1.png


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

  • Ok Danke und wie :D?


    ...Naja:


    new string[2];


    CallLocalFunction("Hallo","s",string); //Crasht da string leer ist
    CallLocalFunction("Hallo","s",string[0]); //Crasht, da auch das leer ist


    Aber update einfach denen cmd-Prozesser...google nach deinem z.B. ocmd und dann downloade dir die neue Include... :rolleyes:

    ast2ufdyxkb1.png


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


  • stock SaveHouseStats(id)
    {
    new query[128];
    format(query, sizeof(query), "UPDATE house SET h_besitzer='%s', h_preis='%i' WHERE id='%i'", HouseInfo[id][h_besitzer], HouseInfo[id][h_preis], HouseInfo[id][h_id]);
    mysql_function_query(handle, query, false, "", "");
    return 1;
    }


    SQL
    [04:41:10] [ERROR] CMySQLQuery::Execute[] - (error #1054) Unknown column 'id' in 'where clause'
    [04:41:10] [DEBUG] CMySQLQuery::Execute[] - error will be triggered in OnQueryError


    Ich habe keine Ahnung wie ich dieses Problem fixen soll.


    House System von MrMonat benutze es als Basis-System.

  • Moin, wie kann ich es so machen das sich das immer aktualliesiert ?



    Textdraw10 = TextDrawCreate(400.000000, 432.000000, "Server wird Geladen 10%");
    TextDrawBackgroundColor(Textdraw10, 255);
    TextDrawFont(Textdraw10, 1);
    TextDrawLetterSize(Textdraw10, 0.500000, 1.000000);
    TextDrawColor(Textdraw10, -1);
    TextDrawSetOutline(Textdraw10, 1);
    TextDrawSetProportional(Textdraw10, 1);
    TextDrawUseBox(Textdraw10, 1);
    TextDrawBoxColor(Textdraw10, 255);
    TextDrawTextSize(Textdraw10, 660.000000, -40.000000);


    Textdraw10 = TextDrawCreate(400.000000, 432.000000, "Server wird Geladen 20%");
    TextDrawBackgroundColor(Textdraw10, 255);
    TextDrawFont(Textdraw10, 1);
    TextDrawLetterSize(Textdraw10, 0.500000, 1.000000);
    TextDrawColor(Textdraw10, -1);
    TextDrawSetOutline(Textdraw10, 1);
    TextDrawSetProportional(Textdraw10, 1);
    TextDrawUseBox(Textdraw10, 1);
    TextDrawBoxColor(Textdraw10, 255);
    TextDrawTextSize(Textdraw10, 660.000000, -40.000000);




    case 0:
    {
    TextDrawShowForPlayer(playerid, Textdraw10);
    InterpolateCameraPos(playerid, 187.600982, -1791.727050, 119.087432, 193.731567, -1789.235473, 118.845245, 5000);
    InterpolateCameraLookAt(playerid, 189.006942, -1790.279785, 114.512641, 195.057144, -1788.512817, 114.078620, 5000);
    SetTimerEx("OnPlayerFinishInterpolateCamera", 5000-600, 0, "id", playerid, 1);
    for(new i = 0; i != 32; i++) SendClientMessage(playerid, -1, " ");
    TextDrawHideForPlayer(Textdraw10);
    }
    case 1:
    {
    TextDrawShowForPlayer(playerid, Textdraw20);
    InterpolateCameraPos(playerid, 300.803771, -1753.841796, 59.482250, 332.887237, -1753.466674, 60.534908, 4000);
    InterpolateCameraLookAt(playerid, 302.467315, -1749.504394, 57.633026, 334.005126, -1748.907470, 58.813385, 4000);
    SetTimerEx("OnPlayerFinishInterpolateCamera", 4000-600, 0, "id", playerid, 2);
    for(new i = 0; i != 32; i++) SendClientMessage(playerid, -1, " ");
    }

  • Wie ist es möglich, dass


    new query2[128];
    format(query2, sizeof(query2), "UPDATE vehicleData SET modelID = '468', posX = '2123.0874', posY = '-1145.1534' WHERE ID = '%i' AND uVID = '%i'", pInfo[playerid][id], amount+1);
    mysql_function_query(dbhandle, query2, false, "", "");
    format(query2, sizeof(query2), "UPDATE vehicleData SET posZ = '24.6857', posA = '83.9742', color1 = '0', color2 = '0' WHERE ID = '%i' AND uVID = '%i'", pInfo[playerid][id], amount+1);
    mysql_function_query(dbhandle, query2, false, "", "");


    alle Werte perfekt speichert, bei


    new query2[128];
    format(query2, sizeof(query2), "UPDATE vehicleData SET modelID = '560', posX = '-1984.3469', posY = '304.3110' WHERE ID = '%i' AND uVID = '%i'", pInfo[playerid][id], amount+1);
    mysql_function_query(dbhandle, query2, false, "", "");
    format(query2, sizeof(query2), "UPDATE vehicleData SET posZ = '34.7430', posA = '87.0143', color1 = '0', color2 = '0' WHERE ID = '%i' AND uVID = '%i'", pInfo[playerid][id], amount+1);
    mysql_function_query(dbhandle, query2, false, "", "");


    allerdings "modelID", "posX", und "posY" stets auf 0 bleiben? Die restlichen Werte speichern richtig. Ich habe bereits versucht die Größe auf 256 (new query2[256]) zu setzen, kein Unterschied.


    Ich bin so verwirrt, da ich den Code nur kopiert habe und die Werte verändert habe. Ich habe auch versucht die zweite Aktion mit query3 ablaufen zu lassen, gleiches Ergebnis.


    MfG

    Je mehr Käse, desto mehr Löcher.
    Je mehr Löscher, desto weniger Käse.
    Ergo: Je mehr Käse, desto weniger Käse.


  • Wird der Code überhaupt aufgerufen? Lass dir das query2 mal printen und schau ob der print im Log steht.
    Wenn er geprintet wird, was steht im MySQL Log - gegebenenfalls mit eingeschaltetem Debug Modus?
    Stimmen im print die angegebenen WHERE-Daten?


    Außerdem ist es performanter, wenn du es so schreibst, dann sendest du nur ein Query:
    new query2[256];
    format(query2, sizeof(query2), "UPDATE vehicleData SET modelID = '560', posX = '-1984.3469', posY = '304.3110', ");
    format(query2, sizeof(query2), "%sposZ = '34.7430', posA = '87.0143', color1 = '0', color2 = '0' WHERE ID = '%i' AND uVID = '%i'", query2, pInfo[playerid][id], amount+1);
    mysql_function_query(dbhandle, query2, false, "", "");

    3HZXdYd.png

    Einmal editiert, zuletzt von Jeffry ()

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