[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
  • Vielen Dank, so werde ich es machen :)


    Zu einem anderen Problem:
    Ich will erreichen, dass man ATMs aktivieren kann sobald man in deren nähe ist. Leider wird die Abfrage bei vielen ATMs sehr lang, gibt es da eine effizientere Weise dies abzufragen?


    if (IsPlayerInRangeOfPoint(playerid, 0.5, 1014.1, -928.70001, 41.9) || IsPlayerInRangeOfPoint(playerid, 0.5, 2561.6873,1962.0399,-5.4011) || IsPlayerInRangeOfPoint(playerid, 0.5, 2561.6875,1960.7579,-5.4011) || IsPlayerInRangeOfPoint(playerid, 0.5, 2561.6873,1959.3591,-5.4011) || IsPlayerInRangeOfPoint(playerid, 0.5, 2561.6868,1958.0519,-5.4011) || IsPlayerInRangeOfPoint(playerid, 0.5, 2561.6860,1956.4935,-5.4011))

    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.


  • Nutze ein Array mit den Daten:
    new Float:ATMPos[][] =
    {
    {1014.1, -928.70001, 41.9},
    {2561.6873,1962.0399,-5.4011} //Das letzte Item darf kein Komma haben
    };


    Und dann eine Schleife:
    for(new i=0; i<sizeof(ATMPos); i++)
    {
    if(IsPlayerInRangeOfPoint(playerid, 0.5, ATMPos[i][0], ATMPos[i][1], ATMPos[i][2]))
    {
    //In der Nähe
    return 1;
    }
    }
    //Nicht in der Nähe



    EDIT:
    Merlin13: Öh ja, natürlich mit dem i-Index. Gut, dass du es hinbekommen hast! :thumbup:

    3HZXdYd.png

    Einmal editiert, zuletzt von Jeffry ()

  • Vielen Dank!
    Ich hab' deinen Code noch leicht verändert damit er auch funktioniert:


    for(new i=0; i<sizeof(ATMPos); i++)
    {
    if(IsPlayerInRangeOfPoint(playerid, 0.5, ATMPos[i][0], ATMPos[i][1], ATMPos[i][2]))
    {
    //In der Nähe
    return 1;
    }
    }
    (keine Ahnung warum die ersten {} automatisch eingeschoben werden)


    Jetzt läuft alles einwandfrei, danke!


    Jeffry: Neue Frage ^^


    Das implementieren des Bank-Interiors hat einwandfrei funktioniert, um die Übersicht zu behalten habe ich mir dann ein Filterscript für alles gemappte erstellt. Leider existiert das Interior nun nicht mehr. Kannst du mir da evtl. meinen Fehler aufzeigen?


    #include <a_samp>


    #if defined FILTERSCRIPT


    public OnFilterScriptInit()
    {
    //Hier das, was sonst bei "OnGameModeInit()" im gamemode stand (also das Mapping).
    return 1;
    }


    public OnFilterScriptExit()
    {
    return 1;
    }
    #else
    #endif

    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.


    Einmal editiert, zuletzt von Merlin13 ()

  • Leider keine Besserung :/


    Die Konsole bestätigt mir, dass das Filterscript geladen wird, leider falle ich beim Teleport zum Interior nur ins nichts.
    Ich teleportiere mich mit Sicherheit zur richtigen Stelle, denn ich habe nur das Mapping in ein Filterscript verschoben, die Methode zum Teleport ist unverändert.


    Ich habe mein gesamtes Filterscript aufgrund der Länge mal hier ausgelagert, könntest du vielleicht mal kurz drüberschauen ob dir ein Fehler auffällt?


    Vielen Dank schon mal :)

    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.


  • Hab vor ein Anti-Multiaccount System zu machen.
    Wie muss ich da an die MySQL Abfragen ran?


    Hab bis jetzt:
    format(query,sizeof(query),"SELECT `username` FROM `user` WHERE `IP` = '%s' AND NOT `username`='%s'",Spieler[playerid][p_IP], SpielerName(playerid));
    mysql_query(dbhandle,query);
    mysql_store_result();
    while(mysql_fetch_row(nstr)) format(str,sizeof(str),"%s%s ",str,nstr);
    mysql_free_result();
    Um die Multiaccounts aufzulisten.
    Will jetzt also machen, wenn Multiaccounts vorhanden sind, dass man sich einfahc keinen Account erstellen kann, also gekickt wird.

  • format(query,sizeof(query),"SELECT `username` FROM `user` WHERE `IP` = '%s' AND NOT `username`='%s'",Spieler[playerid][p_IP], SpielerName(playerid));
    mysql_query(dbhandle,query);
    mysql_store_result();
    if(mysql_num_rows())
    {
    //Multi
    mysql_free_result();
    return 1;
    }
    mysql_free_result();


    Merlin13: Hast du vielleicht schon zu viele Objekte im Server?

  • Bis auf die der gemappten Bank habe ich nur noch einen ATM und drei Fahrzeuge, das wars!
    Wenn du sonst keinen Fehler findest werde ich nochmal alles überprüfen, vielleicht hat sich ja doch noch irgendwo ein Fehler eingeschlichen.


    EDIT: Jeffry Komisch, jetzt gehts doch! Keine Ahnung was da schief gelaufen ist. Könntest du mir vielleicht kurz erklären, warum #if defined FILTERSCRIPT usw. weg mussten? Sollte doch eigentlich keinen Unterschied machen, oder? Auf jeden Fall vielen Dank für deine Hilfe!

    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.


    Einmal editiert, zuletzt von Merlin13 ()

  • Oh achso! Ich dachte das beziehe sich darauf ob es in der Config als Filterscript angegeben wird, aber wenn das so ist wie du sagst ist es natürlich klar, dass es nicht ging :)

    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.


  • Ist das beabsichtigt, dass das Callback


    public OnPlayerTakeDamage(playerid, issuerid, Float:amount, weaponid)
    {
    return 1;
    }


    nich im Blank Script drin ist und man es selber hinzufügen muss?
    Ist das nur ein Einzelfall oder sind da mehrere Callbacks "versteckt"?


    (Falls das in dieses Forum nicht reinpasst, einfach verschieben :whistling:)

  • Wie muss das hier
    if(mysql_num_rows())
    {
    //Multi
    mysql_free_result();
    return 1;
    }
    aussehen wenn ich im Query noch etwas abfragen will, also `Banned`
    format(query,sizeof(query),"SELECT `username`, `Banned` FROM `user` WHERE `IP` = '%s' AND NOT `username`='%s'",Spieler[playerid][p_IP], SpielerName(playerid));


    Möchte es nämlich so machen, dass wenn er multiaccounts hat und diese noch nicht gebannt sind, dass kein Account erstellt werden kann.


    Code bis jetzt:
    format(query,sizeof(query),"SELECT `username` FROM `user` WHERE `IP` = '%s' AND NOT `username`='%s'",Spieler[playerid][p_IP], SpielerName(playerid));
    mysql_query(dbhandle,query);
    mysql_store_result();
    if(mysql_num_rows())
    {
    //Multi
    mysql_free_result();
    return 1;
    }
    mysql_free_result();

  • Wies wird nicht die richtige ID ausgegeben?
    Es kommt immer 1 oder sowas


    new query[400], HausID;
    HausID = format(query, sizeof(query), "SELECT `ID` FROM `hauser` WHERE `Fertig` = '0'");
    mysql_query(query);
    printf("%i",HausID);

    Mit freundlichen Grüßen
    [KoSoVa] :klugs:

  • Gibt's ne Funktion womit ich den Spieler durch die Wände schleuder, hoch, runter, links und rechts?


    Also wenn ja dann würde ich ein Befehl planen womit ich ein Wert eingeben kann, und z.B 5 Meter nach Rechts teleportiert/geschleudert werde whatever, aber auch durch JEDES Objekt.


    Jeffry: Gibts da was?


    Mit freundlichen Grüßen
    JustMe.77 8)

  • Jeffry: Gibts da was?


    Auch wenn ich nicht Jeffry bin, ja das kannst du einfach mit SetPlayerPos machen :)


    //Ein Beispiel:
    new Float:x,Float:y,Float:z,Float:a;
    GetPlayerPos(playerid,x,y,z),GetPlayerFacingAngle(playerid,a);
    const Float:distance = 5.0; //Wie viele Meter er versetzt werden soll


    //Um den Spieler nachvorne zu setzen:
    x += (distance * floatsin(-a, degrees));
    y += (distance * floatcos(-a, degrees));
    //Um den Spieler nachhinten zu setzen:
    x += (-distance * floatsin(-a, degrees));
    y += (-distance * floatcos(-a, degrees));
    //Um den Spieler nach rechts zu setzen:
    a+=90.0;
    x += (distance * floatsin(-a, degrees));
    y += (distance * floatcos(-a, degrees));
    //Um den Spieler nach links zu setzen:
    a-=90.0;
    x += (distance * floatsin(-a, degrees));
    y += (distance * floatcos(-a, degrees));


    //Und dann halt einfach:
    SetPlayerPos(playerid,x,y,z);


    mfg. :thumbup:

    ast2ufdyxkb1.png


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


  • //Wenn Passwort richtig eingegeben
    //px, py, pz, skin aus Datenbank laden
    SetSpawnInfo(playerid, NO_TEAM, pInfo[playerid][skin], px, py, pz, 0, 0, 0, 0, 0, 0, 0);
    SpawnPlayer(playerid);


    Kann mir jemand sagen warum ich mit diesem Code nur manchmal spawne, und wenn nur bei 0|0|0 ?
    Ich habe alle Variablen mal ausgegeben (SendClientMessage), diese werden definitiv richtig geladen.


    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.


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