[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
  • Wenn ich jetzt eine Schleife in zB OnPlayerDisconnect erstelle, und in der Schleife return 1; verwende, wird komplett alles nach der Schleife unterbrochen, richtig?
    Wenn ich nun ein break in der Schleife verwendet, wird nur die Schleife unterbrochen und der Rest unter der Schleife ausgeführt, oder?


    @Jeffry @Kaliber

  • Hi, kann mir jemand bei meinem Timer helfen? Habe es mittlerweile so, aber es updated sich nicht und zeigt keine korrekten Werte an:



    forward boxcountdown(playerid);
    public boxcountdown(playerid)
    {
    new str[144];
    if(countdown[playerid] > gettime())
    {



    countdown[playerid]--;
    format(str, sizeof(str),"%d", countdown[playerid]-gettime());
    Update3DTextLabelText(boxlabel[playerid], 0x00FFFFFF, str);



    }



    if(countdown[playerid] == 0)
    {
    Delete3DTextLabel(boxlabel[playerid]);
    countdown[playerid] = 30;
    return 1;
    }



    return 1;
    }



    Im Befehl:



    new Float:x, Float:y, Float:z;
    GetPlayerPos(playerid, x, y, z);
    box[playerid] = CreateDynamicObject(3798, x, y+3, z-1.0, 0.0, 0.0, 0.0, -1, -1, -1, 200.0, 200.0);
    boxlabel[playerid] = Create3DTextLabel("0:30", 0x00FFFFFF, x,y+3,z, 25, 0, 0);
    SendClientMessage(playerid, -1, "Box {00FF00}created");
    PlayerPlaySound(playerid, 1150, 0.0, 0.0, 0.0);
    blockboxspawn[playerid] = true;



    deleteboxes[playerid] = SetTimerEx("deletebox", 30*1000, 0, "i", playerid);
    SetTimerEx("boxcountdown", 1000, false, "i", playerid);
    boxamount[playerid]--;
    countdown[playerid] = gettime()+30;


    Hatte vor, dass sich der 3D Text updatet und anzeigt wie lange das Objekt das ich erstellt habe noch auf dem Boden bleibt bevor es gelöscht wird, aber ich mache einiges falsch :x


    Mit freundlichen Grüßen
    JustMe.77 8)

    2 Mal editiert, zuletzt von JustMe.77 ()

  • Warum mit gettime und nicht einfach ohne ?
    Also Countdown nur auf 30 Sek und die mit -- einfach auf null zählen?


    Der Timer unten würde ich nach dem setzen vom Countdown Wert erst starten.


    Und er solle sich Wiederholen also true statt false.


    Sonst zieht er ja nur einmal was ab.
    Und pack den Timer in einer Variable den du dann sobald der Counter auf 0 ist oder weniger killst (Killtimer ö.ä.) damit dieser nicht unnötig weiterläuft.


    Bin am Handy kann deswegen nicht nachschauen.


    Aber mit gettime bekommt man nur die Stunde,Minute,Sekunde in den angegebenen Variablen zurück.


    Gettime(Stunde,Minuten,Sekunden)



    Zitat

    new Hour, Minute, Second, Timestamp;Timestamp = gettime(Hour, Minute, Second);




    „Auge um Auge - und die ganze Welt wird blind sein.“
    - Mahatma Gandhi

  • Habe mir einen /spawnvehicle Befehl gescriptet und möchte es so machen, dass wenn der Spieler das Fahrzeug verlässt, das Fahrzeug automatisch zerstört wird.
    Allerdings habe Ich dabei große Schwierigkeiten.
    Wenn das Fahrzeug erstellt (=AddStaticVehicle) wird, dann soll eine Variable das Fahrzeug erstellen
    => car = AddStaticVehicle (...)
    So habe Ich mir das bisjetzt überlegt.

  • Hey ich habe das Problem das er mir immer das Haus gibt obwohl ich ein Haus habe ?


    Code
    HatEinHaus(playerid)
    {
    	for(new i = 0; i < MAX_HOUSE; i++)
    	{
    	    if(hInfo[i][h_ID] == 0) continue;
    	    if(!strcmp(hInfo[i][h_besitzer], getPlayerName(playerid), true, 3)) return 0;
    	}
    	return 1;
    }
  • @Muho55


    Oben im Script ein neues new erstellen:


    C
    //Bsp.
    new playercar[MAX_PLAYERS];

    OnPlayerConnect:

    Code
    playercar[playerid] = 0;

    Befehl: (abfragen ob der Spieler schon ein Fahrzeug erstellt hat)

    C
    if(playercar[playerid]!=0)return SendClientMessage(playerid,-1,"Du hast bereits ein Fahrzeug erstellt!");
    playercar[playerid] = AddStaticVehicle(...

    OnPlayerExitVehicle:

    C
    if(playercar[playerid]==0)return 1;
    DestroyVehicle(playercar[playerid]);
    playercar[playerid] = 0;
    SendClientMessage(playerid, -1, "Fahrzeug zerstört.");

    Fertig :)


    Mit freundlichen Grüßen
    German_ScripterHD

  • @DogZone


    Danke, habe das jetzt so gelöst und es klappt wunderbar :)


    Befehl:



    new Float:x, Float:y, Float:z;
    GetPlayerPos(playerid, x, y, z);
    box[playerid] = CreateDynamicObject(3798, x, y+3, z-1.0, 0.0, 0.0, 0.0, -1, -1, -1, 200.0, 200.0);
    boxlabel[playerid] = Create3DTextLabel("0:30", 0x00FFFFFF, x,y+3,z, 25, 0, 0);
    SendClientMessage(playerid, -1, "Box {00FF00}created");
    PlayerPlaySound(playerid, 1150, 0.0, 0.0, 0.0);
    blockboxspawn[playerid] = true;



    deleteboxes[playerid] = SetTimerEx("deletebox", 30*1000, 0, "i", playerid);
    bUpdate[playerid] = SetTimerEx("boxcountdown", 1000, true, "i", playerid);
    boxamount[playerid]--;
    return 1;


    Label Updaten:



    forward boxcountdown(playerid);
    public boxcountdown(playerid)
    {
    new str[144];
    countdown[playerid]--;
    format(str, sizeof(str),"%d", countdown[playerid]);
    Update3DTextLabelText(boxlabel[playerid], 0x00FFFFFF, str);




    if(countdown[playerid] == 0)
    {
    Delete3DTextLabel(boxlabel[playerid]);
    countdown[playerid] = 30;
    KillTimer(bUpdate[playerid]);
    return 1;
    }



    return 1;
    }


    Mit freundlichen Grüßen
    JustMe.77 8)

  • Drehe in der Funktion HatEinHaus das return 1 und return 0 um.

    Habe es nun so aber es kommt jetze ( wenn ich kein Haus habe )
    Der Spieler hat bereits ein Haus.


    Code
    HatEinHaus(playerid)
    {
    	for(new i = 0; i < MAX_HOUSE; i++)
    	{
    	    if(hInfo[i][h_ID] == 0) continue;
    	    if(!strcmp(hInfo[i][h_besitzer], getPlayerName(playerid), true, 3)) return 1;
    	}
    	return 0;
    }
  • Nutze als Benutzer "root" und kein Passwort. Das sind dann die Standard Einstellungen, die meistens so vorhanden sind.

    danke habs anders gelöst^^


    Jetzt hab ich nachdem Abgefragt wird ob ein Benutzer existiert diesen Error in SQL


    [ERROR] CMySQLQuery::Execute[OnUserCheck(i)] - (error #1064) You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'SELCET id FROM accounts WHERE username='Patrick_Stewart'' at line 1


    Im Script habe ich alles so gemacht wie im Video. Nur wird bei mir auch kein Dialog angezeigt

  • Hey, wollte mal fragen ob mir einer helfen kann :>


    ich möchte das der Spieler nachdem er gesprungen ist und dann gelandet ist, eine Animation ausführt...
    Hab da schon ein bisschen dran rumprobiert, aber das bugt nach dem 1ten - 2-3ten mal irgendwie rum....


    Nochmal erklärt:
    Spieler springt, Landet und die Animation "Landen" wird vom script ausgegeben.


    Tasten:
    KEY_JUMP - KEY_SPRINT KEY_(UP DOWN LEFT RIGHT)


    Code:

    @Jeffry

    Einmal editiert, zuletzt von Dom ()

  • Beitrag von xPatrick ()

    Dieser Beitrag wurde vom Autor gelöscht ().
  • Hallo, wenn man ingame das Adminlevel ändert und man sich ausloggt, steht immernoch das selbe level in der sql datenbank drin


    Wo fehlt etwas?


    ocmd:setadmin(playerid,params[]){new pID,a_level;if(!IsPlayerGM(playerid,4))return 1;if(sscanf(params,"ui",pID,a_level))return SendClientMessage(playerid,FARBE_ROT," INFO: /setadmin [Playerid] [Adminlevel]");sInfo[pID][Adminlevel]=a_level;SpielerSpeichern(pID);SendClientMessage(pID,FARBE_ROT,"Dein Level wurde geändert");SendClientMessage(playerid,FARBE_ROT,"Du hast das Level von Ihm geändert");return 1;}



    SpielerSpeichern(playerid){if(sInfo[playerid][LoginStatus]==0)return 1;new query[128];format(query,sizeof(query),"UPDATE accounts SET level='%i',geld='%i',admin='%i' WHERE id='%i'",sInfo[playerid][Level],GetPlayerMoney(playerid),sInfo[playerid][Adminlevel],sInfo[playerid][Id]);return 1;}




    Und meine 2 FRage ist.


    Wie kann man nun Bezeichnungen für die Range Einfügen mit SQL sparend


    Moderator Supporter Admin

    Einmal editiert, zuletzt von xPatrick ()

  • Guten Morgen Freunde. :)
    Ich habe da mal wieder eine bzw. zwei Fragen. :)


    Erste Frage: Ist es möglich die Funktion auszuschalten das man nicht mehr Sprinten kann?
    Zweite Frage: Wie ist es möglich, das im Textdraw oder Dialog ein Text erscheint als wird er gerade Geschrieben?


    Mit freundlichen Grüßen,


    @Jeffry @Kaliber Ihr weißt es bestimmt! <3