[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
  • Hey,
    Habe ein kleines Problem:


    Code
    new vid = GetPlayerVehicleID(i);
    						SetVehicleHealth(vid, random(150));

    Ich will das die random 150 abgezogen werden und nicht gesetzt werden

    wm2c6p1.png
    Ich weiß, dass ich weiß, dass ich nichts weiß.

  • Hey,
    Habe ein kleines Problem:


    Code
    new vid = GetPlayerVehicleID(i);
    						SetVehicleHealth(vid, random(150));

    Ich will das die random 150 abgezogen werden und nicht gesetzt werden

    probiers mal so:


    Code
    new vid = GetPlayerVehicleID(i), float:health;
    GetVehicleHealth(vid, health);
    SetVehicleHealth(vid, health-random(150));
  • Geht so nicht.
    Er gibt mir auch in den ersten paar Zeilen Tag mismatch an.

    Code
    new vid = GetPlayerVehicleID(i), float:health;
    						GetVehicleHealth(vid, health);
    						SetVehicleHealth(vid, health-random(200));
    						if(health < 300)
    						{
    							tmp_engine = 0;
    							SetVehicleParamsEx(vehicleid, tmp_engine, tmp_lights, tmp_alarm, tmp_doors, tmp_bonnet, tmp_boot, tmp_objective);
    						}

    wm2c6p1.png
    Ich weiß, dass ich weiß, dass ich nichts weiß.

  • Code
    new vid = GetPlayerVehicleID(i), float:health, float:r = random(200), float:newhealth;
    					    GetVehicleHealth(vid, health);
    					    newhealth = health - r;
    					    SetVehicleHealth(vid, newhealth);
    						if(health < 300)

    zeigt in allen Zeilen Tag mismatch an.

    wm2c6p1.png
    Ich weiß, dass ich weiß, dass ich nichts weiß.

  • Hallo,


    ich bin mir gerade etwas unsicher, ob ich break; oder continue; verwenden soll.
    forward SecondTimer();
    public SecondTimer()
    {
    for(new i = 0, j = GetPlayerPoolSize(); i <= j; i++) //Schleife durch alle Spieler
    {
    if(!IsPlayerConnected(i))continue; //Abfrage, ob der Spieler verbunden ist
    //Abfrage, ob der Spieler eingeloggt ist
    if(pInterior_Flight[i] != 0) //Ist pInterior_Flight nicht 0, dann..
    {
    pInterior_Flight[i] --; //.. runterzählen
    }
    else if(pInterior_Flight[i] == 0) continue; //Sobald pInterior_Flight 0 ist, wird die Schleife hier unterbrochen


    }
    return 1;
    }

  • [debug] Run time error 4: "Array index out of bounds"
    [debug] Attempted to read/write array element at index 65535 in array of size 2000
    [debug] AMX backtrace:
    [debug] #0 00065058 in ?? (34, 1926256, 0, 1141493789, -996284512, 1099415840, 1124079062, 1, 1) from cops.amx
    [debug] #1 0004e83c in public OnDialogResponse (0, 37, 1, -1, 1926252) from cops.amx



    if(dialogid == XV_DIALOGID+5)
    {
    if(response)
    {
    new xid = xVeh[GetPlayerVehicleID(playerid)];
    if(GetPlayerxVehicleCount(playerid) >= MAX_PLAYER_POSSVEHS) return SendClientMessage(playerid, -1, "{FF0000}[!] {F0AE0F}You have reached the limit! You can't buy more vehicle."), RemovePlayerFromVehicle(playerid);
    if(GetPlayerMoney(playerid) < xVehicle[xid][xv_Fiyat]) return SendClientMessage(playerid, -1, "{FF0000}[!] {F0AE0F}You don't have enough money!"), RemovePlayerFromVehicle(playerid);
    GivePlayerMoney(playerid, -xVehicle[xid][xv_Fiyat]);
    CreatexVehicle(xid,GetName(playerid),xVehicle[xid][xv_Fiyat],551.2518,-1263.2383,16.9693,128.0853,1,1);
    }
    else
    {
    if(!IsPlayerAdmin(playerid)) RemovePlayerFromVehicle(playerid);
    }
    }



    https://pastebin.com/KpN6emD6




    Ideen? Funtkioniert nicht

  • Number of vehicle models: 5
    OnNormalCarsLoad wurde aufgerufen
    [xVehicle] 2 vehicle loaded.
    [xVehicle] 0 vehicle loaded.
    wid wert 5
    ID ist 2
    [debug] Run time error 4: "Array index out of bounds"
    [debug] Attempted to read/write array element at index 65535 in array of size 2000
    [debug] AMX backtrace:
    [debug] #0 0006518c in ?? (5, 1926440, 1, 1141493789, -996284512, 1099415840, 1124079062, 1, 1) from cops.amx
    [debug] #1 0004e918 in public OnDialogResponse (0, 37, 1, -1, 1926436) from cops.amx

  • Abend Jungs,

    Code
    new seconds = pInfo[playerid][pAutoRestzeit] - gettime();
    	new days = seconds / 86400;
    	seconds -= days * 86400;
    	new hours = seconds / 3600;
    	seconds -= hours * 3600;
    	new minutes = seconds / 60;
    	seconds -= minutes * 60;
    	new year, month, day, hour, minute, second;
    	TimestampToDate(pInfo[playerid][pAutoDatum], year, month, day, hour, minute, second, 2);
    	if(pInfo[playerid][pAutosperre]) format(string, sizeof(string), "%s\n{bc4343} | %02d.%02d.%d | •Autoschein Sperre (%d:%d:%d)", string, day, month, year, hours, minutes, seconds);


    Welchen Wert muss ich denn jetzt speichern und bzw. welcher Wert ist die Restzeit. Wie wird sie gespeichert und als was?
    Nicht vergessen ist TimestampToDate. Meine ich hatte das schon aber habe gemerkt das es nirgends gespeichert wird.


    Muss ich dazu noch einen Timer erstellen der prüft ob die Zeit abgelaufen ist sagen wir so alle 2 Minuten? Wenn ja wie sieht der
    Code aus einfach ob die Restzeit <0 ist?


    Muss es eine Float sein? Wenn ja wie viele nach Komma Stellen?

    wm2c6p1.png
    Ich weiß, dass ich weiß, dass ich nichts weiß.

  • TimestampToDate() wandelt einen UNIX-Timestamp in ein Datum um. Der UNIX-Timestamp für gerade JETZT lautet 1539246883 und würde per TimestampToDate() dir folgendes zurückgeben:
    year = 2018, month = 10, day = 11, hour = 10, minute = 35. Speichern würde ich generell immer den UNIX-Timestamp den du in der Variable pAutoRestzeit speicherst. Damit kannst du dir nämlich immer berechnen, wie lange es noch bis zur Zeit pAutoRestzeit dauert, als auch welche Zeit es genau ist.


    Der UNIX-Timestamp ist eine ganze Zahl (int), demnach musst du keinerlei Komma-Stellen beachten. Zur Überprüfung kannst du einfach schauen, ob gettime() > als pAutoRestzeit ist - falls ja, ist die Zeit abgelaufen.

  • Moin Jungs,


    Ich hab ein kleines Problem ... Seitdem ich mein Callback OnLoadTanke hinzugefügt habe, kann er mein Tacho System nicht mehr zeigen ... Wenn ich das Callback auskommentiere funktioniert mein Tacho wieder...



    Jemand eine Idee?


    @LeonMrBonnie / @Kaliber / @Jeffry


    Wie gesagt wenn das Callback auskommentiert ist, dann funktioniert mein Tacho ...


    MfG
    XonarZ

  • Also ich seh da jetzt keinen Fehler.
    Poste am besten mal den ganzen Callback.


    (Übrigens noch:
    Erstelle die Variablen nicht im Loop, sondern davor, sonst werden die immer neu erstellt, und das ist unnötig)

    Wie gesagt, eig. ist der restliche Code Irrelevant, weil wenn ich bis new string[128], id = i+1; alles entferne, dann funktioniert mein Tacho, sobald aber die aller erste Zeile mit dem cache ... id drinne steht geht mein Tacho nicht mehr. Also wird nicht mehr angezeigt.


    //EDIT also ich habe nun die Zeile mit der id als letztes gemacht (unter den letzten cache) und nun funktionierts ... WoW


    MfG
    XonarZ

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