[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
  • Wozu der delay?


    Und wenn, dann SetTimerEx verwenden mit der playerid als Parameter, so würde das nur bei ID 0 funktionieren.


    Dann hast du anscheinend schon AddPlayerClass in deinem Skript, dann kannst du dir das SetSpawnInfo natürlich schenken ^^

    ast2ufdyxkb1.png


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

  • Moin, hab das nun geändert, aber jetzt zeigt er mir wenn ich auf English geh es auf Deutsch an und andersrum? :/


    stock GetPlayerLanguage(playerid)
    {
    return pLanguage[playerid];
    }


    switch(GetPlayerLanguage(playerid))
    {
    case ENG:
    {
    Textdraw23[playerid] = CreatePlayerTextDraw(playerid, 224.333312, 183.348114, "german");
    }
    case GER:
    {
    Textdraw23[playerid] = CreatePlayerTextDraw(playerid, 224.333312, 183.348114, "deutsch");
    }
    }


    MfG

  • Nur noch zur Optimierung, so einfache Funktionen kannst du als Makro schreiben, das ist performanter und einfacher:


    #define GetPlayerLanguage(%0) pLanguage[%0]


    Das sieht richtig aus, die Frage ist jetzt nur, wie du das gesetzt hast ^^

    ast2ufdyxkb1.png


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

  • Ich vermute mal, dass in deinem enum GER vor ENG steht ^^


    bzw steht GER ganz oben im enum und hat daher die ID 0.


    Du setzt also die Sprache für den Spieler erst nachdem du ihm schon einen Dialog anzeigst ^^


    Ich vermute da liegt der Fehler :)


    Achso und wie in einem anderen Post schon erwähnt, switch ist eigentlich nur sinnvoll, wenn du mehr als 2 Sprachen hast, bei 2 kannste das auch so machen:


    Textdraw23[playerid] = CreatePlayerTextDraw(playerid, 224.333312, 183.348114, ((GetPlayerLanguage(playerid) == GER)?("deutsch"):("german")));


    Gebe zu, bisschen umständlich, kannst es dir ja theoretisch in einem Makro kürzen:


    #define L(%0,%1,%2) ((GetPlayerLanguage(%0)==GER)?(%1):(%2))


    Nutzung:


    Textdraw23[playerid] = CreatePlayerTextDraw(playerid, 224.333312, 183.348114, L(playerid,"deutsch","german"));


    Somit sparst du dir viel ein :)

    ast2ufdyxkb1.png


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


  • Hallo,


    Habe das Problem wen ich einfach nur 0 eingebe wird er aus den Fahrzeug geworfen...
    Er soll rausgeworfen werden wen er auf aussteigen klickt.
    Sollte der User 0 eingeben sollte der Dialog wieder angezeigt werden.



    Danke im Vorraus!

  • Das else musst du anders setzen und zwar so, dass es mit dem if von dem response harmoniert :)


    Und da wo du das else jetzt hast schreib darein, dass dem Spieler wieder der Dialog angezeigt werden soll :)

    ast2ufdyxkb1.png


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

  • Das else musst du anders setzen und zwar so, dass es mit dem if von dem response harmoniert :)


    Und da wo du das else jetzt hast schreib darein, dass dem Spieler wieder der Dialog angezeigt werden soll :)

    Das else musst du anders setzen und zwar so, dass es mit dem if von dem response harmoniert :)


    Und da wo du das else jetzt hast schreib darein, dass dem Spieler wieder der Dialog angezeigt werden soll :)



    Habe das so...


    Wo muss ich es einfügen wen er auf Aussteigen klickt das er raus geworfen wird?

  • Wo muss ich es einfügen wen er auf Aussteigen klickt das er raus geworfen wird?

    Habe ich doch geschrieben gehabt :D



    C
    if(response)
    {
        //Dann hast du hier weiteren Code
    }
    else
    {
        //Hier RemovePlayerFromVehicle
    }

    So harmonisiert das else mit dem if(response) ^^

    ast2ufdyxkb1.png


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

  • Beitrag von noahschnapp ()

    Dieser Beitrag wurde vom Autor aus folgendem Grund gelöscht: &//// ().
  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • @Kaliber


    In der Include von dem Streamer steht es aber so drin:



    CreateDynamicActor(modelid, Float:x, Float:y, Float:z, Float:r, invulnerable = 1, Float:health = 100.0, worldid = -1, interiorid = -1, playerid = -1, Float:streamdistance = STREAMER_ACTOR_SD, STREAMER_TAG_AREA areaid = STREAMER_TAG_AREA -1, priority = 0);


    MfG.

    Die Missglückte Persönlichkeit, Ciao!

  • Hab ich noch nicht mit gearbeitet, weiß nicht wie der das Aktualisiert und ob es da Zeiten gibt und wie ausgereift das ist.


    Aufjedenfall muss, sobald du das Interior betrittst der Actor neu gestreamt werden.


    Du solltest das aber anders machen.


    Die Actor nicht Interior spezifisch spawnen lassen, sondern VirtualWorld spezifisch.
    Das liegt eigentlich in ihrer Natur :D

    ast2ufdyxkb1.png


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

  • Du meinst also das ich die Actor noch eine ID zuweißen soll, passt! :)
    So, anstatt die Interior ID zu ändern, setze ich die Actor zB in die Virtuelle Welt 30, und wenn ich das Interior Betrete Neu Spawnen lasse, jetzt ist nur meine Frage, wie soll ich den Actor neu Streamen?


    MfG.

    Die Missglückte Persönlichkeit, Ciao!

  • wie soll ich den Actor neu Streamen?

    Eigentlich sollte das der Streamer automatisch regeln xD


    Probiers einfach mal aus, wenn es nicht geht..eventuell online mal einen anderen streamer verwenden für die Actors, da gibts spezielle ^^

    ast2ufdyxkb1.png


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

  • @Kaliber
    Bin gerade bissel am Verzweifeln. :D


    Hab es mit Normalen Actor Funktion Probiert, via IDs und Virtuelle Welt, Spieler in die Virtuelle Welt gesetzt beim Betreten des Interiorers, Actor wird immer noch nicht Erscheint.



    // Enum:
    enum ActorDaten{
    aID,
    aName[256],
    aSkin,
    Float:aPosX,
    Float:aPosY,
    Float:aPosZ,
    Float:aPosA,
    aHealth,
    aInvulnerable
    }
    new ActorInfo[][ActorDaten] = {
    {0, ""#FARBE_ORANGE"Akira:"#FARBE_WEISS"\nEgal was du brauchst vom Bürgerbüro\nich besorge es dir!\n\n"#FARBE_ORANGE"'N' zum Interagieren.", 186, -2159.4829, 639.6165, 1057.5861, 36.5559, 100, 1} // -> Bürger Büro Actor
    };


    // Erstellen / Laden:
    for(new i = 0; i < sizeof(ActorInfo[]); i++)
    {
    CreateActor(ActorInfo[i][aSkin], ActorInfo[i][aPosX], ActorInfo[i][aPosY], ActorInfo[i][aPosZ], ActorInfo[i][aPosA]);
    SetActorVirtualWorld(ActorInfo[i][aID], 30);
    //CreateDynamicActor(ActorInfo[i][aSkin], ActorInfo[i][aPosX], ActorInfo[i][aPosY], ActorInfo[i][aPosZ], ActorInfo[i][aPosA], ActorInfo[i][aInvulnerable], ActorInfo[i][aHealth], 30);
    //CreateDynamic3DTextLabel(ActorInfo[i][aName], -1, ActorInfo[i][aPosX], ActorInfo[i][aPosY], ActorInfo[i][aPosZ], 15.0);
    }


    Hast du noch irgendeine Lösung parat? :D

    Die Missglückte Persönlichkeit, Ciao!

  • Änderst du auch den Interior vom Spieler?


    Wenn ja, probier einfach mal folgendes und setze im Callback [wiki]OnPlayerInteriorChange[/wiki] die Position von deinem Actor neu ^^


    Wenn du ihn dann immer noch nicht sehen solltest, dann porte dich mal zu ihm, ob er wirklich erstellt wird xD

    ast2ufdyxkb1.png


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

  • @Kaliber
    Hoffe du meinst es so. :D


    public OnPlayerInteriorChange(playerid, newinteriorid, oldinteriorid){ for(new i = 0; i < sizeof(ActorInfo[]); i++) { SetActorPos(ActorInfo[i][aID], ActorInfo[i][aPosX], ActorInfo[i][aPosY], ActorInfo[i][aPosZ]); } return 1;}


    Wie soll ich denn so ein "Befehl" machen um mich zu ihn zu Teleportieren?


    Einfach die Kordinanten aus dem Enum nehmen?


    MfG.



    // Edit:
    Hab da gerade noch was gefunden, hab mal mein "OnGameModeInit" Geprintet, Naja, Ergebnis ist nicht sehr toll!
    Der Print kommt nur bis "Mysql Log".



    public OnGameModeInit()
    {
    // [- GameMode Funktionen -]
    SetGameModeText("DE: Reallife");
    DisableInteriorEnterExits();


    // [- MySQL -]
    Handle = mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASS, MYSQL_DATA);
    mysql_log(ALL);
    print("MySQL Log");
    // [- Pickup Erstellen -]
    for(new i = 0; i < sizeof(IntInfo[]); i++)
    {
    CreateDynamicPickup(1318, 0, IntInfo[i][iEingangX], IntInfo[i][iEingangY], IntInfo[i][iEingangZ]);
    CreateDynamic3DTextLabel(IntInfo[i][iTitel], -1, IntInfo[i][iEingangX], IntInfo[i][iEingangY], IntInfo[i][iEingangZ], 15.0);
    }
    print("Pickup");
    // [- Actor Erstellen -]
    for(new i = 0; i < sizeof(ActorInfo[]); i++)
    {
    CreateActor(ActorInfo[i][aSkin], ActorInfo[i][aPosX], ActorInfo[i][aPosY], ActorInfo[i][aPosZ], ActorInfo[i][aPosA]);
    SetActorVirtualWorld(ActorInfo[i][aID], 30);
    //CreateDynamicActor(ActorInfo[i][aSkin], ActorInfo[i][aPosX], ActorInfo[i][aPosY], ActorInfo[i][aPosZ], ActorInfo[i][aPosA], ActorInfo[i][aInvulnerable], ActorInfo[i][aHealth], 30);
    CreateDynamic3DTextLabel(ActorInfo[i][aName], -1, ActorInfo[i][aPosX], ActorInfo[i][aPosY], ActorInfo[i][aPosZ], 15.0);
    }
    print("Actor Erstellt");
    return 1;
    }


    MfG.

    Die Missglückte Persönlichkeit, Ciao!

  • Hey,


    nicht direkt eine Scriptingfrage, aber hat schon was Bugfix zutun.


    Kann mir einer sagen, warum die Objekte buggen?


    Das obere ist aus dem Mapeditor, das untere dann im Spiel. :|




    Danke schonmal! :D

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