[SAMMELTHREAD] Kleine Scripting Fragen

In 10 Minuten startet der nächtliche Backupvorgang! Es kann währenddessen (ca. 10 Minuten) zu Einschränkungen bei der Nutzung des Forums kommen
Weitere Infos findet ihr im Thema Backup des Forums
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
  • pwn(3598) : error 017: undefined symbol "GetName"
    pwn(3599) : error 017: undefined symbol "ProxDetector"


    public OnPlayerText(playerid, text[])
    {
    new string[128];
    format(string, sizeof(string), "%s sagt: %s", GetName(playerid), text);
    ProxDetector(20.0, playerid, string, COLOR_FADE1, COLOR_FADE2, COLOR_FADE3, COLOR_FADE4, COLOR_FADE5);
    return 0;
    }


    Kann jemand mir weiter helfen bitte? :D

  • forward ProxDetector(Float:radi, playerid, string[],col1,col2,col3,col4,col5);
    public ProxDetector(Float:radi, playerid, string[],col1,col2,col3,col4,col5)
    {
    if(IsPlayerConnected(playerid))
    {
    new Float:posx, Float:posy, Float:posz;
    new Float:oldposx, Float:oldposy, Float:oldposz;
    new Float:tempposx, Float:tempposy, Float:tempposz;
    GetPlayerPos(playerid, oldposx, oldposy, oldposz);
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(IsPlayerConnected(i) && !IsPlayerNPC(i) && i != INVALID_PLAYER_ID)
    {
    GetPlayerPos(i, posx, posy, posz);
    tempposx = (oldposx -posx);
    tempposy = (oldposy -posy);
    tempposz = (oldposz -posz);
    if (((tempposx < radi/16) && (tempposx > -radi/16)) && ((tempposy < radi/16) && (tempposy > -radi/16)) && ((tempposz < radi/16) && (tempposz > -radi/16)))
    {
    SendClientMessage(i, col1, string);
    }
    else if (((tempposx < radi/8) && (tempposx > -radi/8)) && ((tempposy < radi/8) && (tempposy > -radi/8)) && ((tempposz < radi/8) && (tempposz > -radi/8)))
    {
    SendClientMessage(i, col2, string);
    }
    else if (((tempposx < radi/4) && (tempposx > -radi/4)) && ((tempposy < radi/4) && (tempposy > -radi/4)) && ((tempposz < radi/4) && (tempposz > -radi/4)))
    {
    SendClientMessage(i, col3, string);
    }
    else if (((tempposx < radi/2) && (tempposx > -radi/2)) && ((tempposy < radi/2) && (tempposy > -radi/2)) && ((tempposz < radi/2) && (tempposz > -radi/2)))
    {
    SendClientMessage(i, col4, string);
    }
    else if (((tempposx < radi) && (tempposx > -radi)) && ((tempposy < radi) && (tempposy > -radi)) && ((tempposz < radi) && (tempposz > -radi)))
    {
    SendClientMessage(i, col5, string);
    }
    }
    }
    }
    return 1;
    }


    stock GetName(playerid){new name[MAX_PLAYER_NAME];GetPlayerName(playerid,name,MAX_PLAYER_NAME);return name;}

  • Hab noch ein Problem.


    Ich wollte versuchen das der Spieler im Interior spawnt. Der Spieler fällt durch die Welt.
    Habs so ausprobiert.
    forward SetPlayerSpawn(playerid);
    public SetPlayerSpawn(playerid)
    {
    SetPlayerInterior(playerid, 10);
    }

    Einmal editiert, zuletzt von PHP-Typ ()

  • forward SetPlayerSpawn(playerid);
    public SetPlayerSpawn(playerid)
    {
    SetPlayerPos(playerid,0,1729.2349,-1668.2310);
    SetPlayerInterior(playerid, 10);
    }


    Der Spieler spawnt in Blueberry? Der sollte eig. woanders spawn..

    • Offizieller Beitrag

    Der Spieler spawnt in Blueberry? Der sollte eig. woanders spawn..

    Du scheinst dich ja noch nicht wirklich mit der Funktion auseinandergesetzt zu haben, grundsetztlich ist hier immer das Wiki ganz ratsam, teilweise gibt es dies auch auf Deutsch, ansonsten auf Englisch. (http://wiki.sa-mp.com/wiki/SetPlayerPos)
    [PS: Das englische Wiki ist meistens Informativer, da Zusatzinformationen enthalten sind!]


    Nun solltest du genug über die Funktion wissen, du brauchst also nur die drei Koordinaten. Du kannst standardmäßig Ingame den Befehl /save verwenden, dieser speichert deine aktuellen Koordinaten in die savedpositions.txt, die findest du in folgendem Ordner C:\Users\DEIN_NAME\Documents\GTA San Andreas User Files\SAMP, dort wird AddPlayerClass oder AddStaticVehicle verwendet, die erste Variable ist also für dich irrelevant (Dies ist entweder der Skin oder das Fahrzeug [ModelID]). Du nimmst also den zweiten bis vierten Parameter und fügst sie bei der Funktion SetPlayerPos in deinem Script ein.


    Eventuell möchtest du nun doch den Spieler in eine bestimmte Richtung drehen, dies erreichst du mit der Funktion SetPlayerFacingAngle, jene findest du auch im Wiki, hier benötigst du die fünfte Koordinate in der savedpositions.txt.
    Viele benutzen nun noch SetCameraBehindPlayer, jene Funktion setzt die Kamera hinder den Spieler, so guckt auch die Kamera in die richtige Richtung.

  • Du scheinst dich ja noch nicht wirklich mit der Funktion auseinandergesetzt zu haben, grundsetztlich ist hier immer das Wiki ganz ratsam, teilweise gibt es dies auch auf Deutsch, ansonsten auf Englisch. (http://wiki.sa-mp.com/wiki/SetPlayerPos)[PS: Das englische Wiki ist meistens Informativer, da Zusatzinformationen enthalten sind!]


    Nun solltest du genug über die Funktion wissen, du brauchst also nur die drei Koordinaten. Du kannst standardmäßig Ingame den Befehl /save verwenden, dieser speichert deine aktuellen Koordinaten in die savedpositions.txt, die findest du in folgendem Ordner C:\Users\DEIN_NAME\Documents\GTA San Andreas User Files\SAMP, dort wird AddPlayerClass oder AddStaticVehicle verwendet, die erste Variable ist also für dich irrelevant (Dies ist entweder der Skin oder das Fahrzeug [ModelID]). Du nimmst also den zweiten bis vierten Parameter und fügst sie bei der Funktion SetPlayerPos in deinem Script ein.


    Eventuell möchtest du nun doch den Spieler in eine bestimmte Richtung drehen, dies erreichst du mit der Funktion SetPlayerFacingAngle, jene findest du auch im Wiki, hier benötigst du die fünfte Koordinate in der savedpositions.txt.
    Viele benutzen nun noch SetCameraBehindPlayer, jene Funktion setzt die Kamera hinder den Spieler, so guckt auch die Kamera in die richtige Richtung.

    Der zweite Absatz kenne ich schon. Trotzdem danke es wurde gefixxt dank @Daniel_Waynee

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Wenn es nicht geladen werden konnte aus irgendeinem Grund.

    Ja, das ist doch aber der Punkt.


    Es kann ja nur nicht geladen werden, wegen einem Skript Fehler oder weil der Name nicht stimmt.


    Also beim Skripten musste halt testen, da sollte kein Fehler passieren und beim Namen ja auch nicht, da du den ja statisch angibst.


    Wenn es dynamisch gemacht wird mit /rcon loadfs filterscript kommt ja eine Nachricht, ob es geladen wurde oder nicht :)


    Also es sollte zu 100% eig immer geladen werden ^^

    ast2ufdyxkb1.png


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

  • Guten Abend,
    ich habe in einem Enum einen "String", jetzt möchte ich gerne Abfragen ob etwas in diesem String steht.
    Wie kann ich dies am besten Abfragen?


    zB. format(str, 128, "Test");
    Jetzt möchte ich abfragen ob es mehr als 3 Zeichen in diesem String stehen, wie genau geht dies?


    MfG.

    Die Missglückte Persönlichkeit, Ciao!

  • Guten Abend,
    bin gerade an einem Sprachsystem dran, nun spuckt er mir nen Warning aus.
    warning 213: tag mismatch


    Textdraw22[playerid] = LanguageTextDraw(playerid, 416.000000, 230.222106, "ger", "eng");


    stock LanguageTextDraw(playerid, Float:cod1, Float:cod2, ger3[], eng4[])
    {
    if(tLanguage == 1) {CreatePlayerTextDraw(playerid, cod1, cod2, eng4);}
    if(tLanguage == 2) {CreatePlayerTextDraw(playerid, cod1, cod2, ger3);}
    return 1;
    }


    MfG
    Zreeq

  • Du schreibst Textdraw22[playerid] = Das ist wahrscheinlich vom Typ PlayerText: allerdings returnt deine Funktion nur 1.


    Aber ich verstehe nicht genau was du da machst.


    Also tLanguage ist ja eine globale Variable. Wenn du das Skript nur Global einsprachig machen willst, dann solltest du mit Defines und Makros arbeiten, eben mit dem Precompiler. Stichwort: [wiki]Keywords:Directives[/wiki]


    Wenn du es Spielerbezogen machen willst, dass sich jeder Spieler die Sprache aussuchen soll, dann arbeite mit switch! Oder wenn es nur 2 sprachig ist, kannst du es einfach so machen:


    return CreatePlayerTextDraw(playerid, cod1, cod2, (tLanguage==1)?eng4:ger3);


    Am besten erstellst du auch für Sprachen Makros bzw nutzt einen enum:


    C
    enum
    {
        GERMAN,
        ENGLISH
    };
    //Und dann eben
    (tLanguage==ENGLISH)?eng4:ger3

    ast2ufdyxkb1.png


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

  • Guten Abend/Morgen,
    hab noch einmal ein Problem mit meinem Actor.
    Der Actor ist in einem Interior, leider wird er dort aber nichts Gespawnt, ich erstelle den Actor via Streamer Plugin (Aktuelle Version).



    // Actor Erstellen via Enum
    enum ActorDaten{
    aName[256],
    aSkin,
    Float:aPosX,
    Float:aPosY,
    Float:aPosZ,
    Float:aPosA,
    aHealth,
    aInvulnerable
    }
    new ActorInfo[][ActorDaten] = {
    {""#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
    };


    // Actor Erstellen bei OnGameModeInit
    for(new i = 0; i < sizeof(ActorInfo[]); i++)
    {
    //CreateActor(ActorInfo[i][aSkin], ActorInfo[i][aPosX], ActorInfo[i][aPosY], ActorInfo[i][aPosZ], ActorInfo[i][aPosA]);
    CreateDynamicActor(ActorInfo[i][aSkin], ActorInfo[i][aPosX], ActorInfo[i][aPosY], ActorInfo[i][aPosZ], ActorInfo[i][aPosA], ActorInfo[i][aInvulnerable], ActorInfo[i][aHealth], -1, 1, -1, 50.0);
    CreateDynamic3DTextLabel(ActorInfo[i][aName], -1, ActorInfo[i][aPosX], ActorInfo[i][aPosY], ActorInfo[i][aPosZ], 15.0);
    }


    Mit freundlichen Grüßen,

    Die Missglückte Persönlichkeit, Ciao!

  • Du nutzt die Parameter falsch.


    Schau mal, deine Angaben:


    ActorInfo[i][aSkin], ActorInfo[i][aPosX], ActorInfo[i][aPosY], ActorInfo[i][aPosZ], ActorInfo[i][aPosA], ActorInfo[i][aInvulnerable], ActorInfo[i][aHealth], -1, 1, -1, 50.0)


    Aber das ist die Falsche Belegung, schau mal:


    (modelid, Float:x, Float:y, Float:z, Float:angle, worldid = -1, interiorid = -1, bool:invulnerable = true, Float:health = 100.0)

    ast2ufdyxkb1.png


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

  • Wie kann man diesen Dialog entfernen?

    Unter OnPlayerRequestClass direkt SetSpawnInfo verwenden und dann SpawnPlayer.


    Dann spawnt der Spieler direkt. Musst halt deine ganzen Abfragen nach OnPlayerSpawn verlagern und prüfen, ob der Spieler gerade vom connecten kommt :)

    ast2ufdyxkb1.png


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

  • Unter OnPlayerRequestClass direkt SetSpawnInfo verwenden und dann SpawnPlayer.
    Dann spawnt der Spieler direkt. Musst halt deine ganzen Abfragen nach OnPlayerSpawn verlagern und prüfen, ob der Spieler gerade vom connecten kommt :)

    Jo danke. Habe es so gemacht es klappt auch so.
    public OnPlayerRequestClass(playerid, classid)
    {
    SetTimer("Spawn", 10, false);
    return 1;
    }
    forward Spawn(playerid);
    public Spawn(playerid)
    {
    SpawnPlayer(playerid);
    return 1;
    }

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