[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
  • Jeffry:
    Wenn ich im Umkreis von 3 Metern bei nem Spieler sein möchte, muss ich dann auch GetPlayerPos verwenden ja oder ?

    "Imagine if the government went after corruption as hard as it goes after guys who run filesharing sites. Priorities. " - @Snowden
    "More worrying than FBI temporarily running a server that contained child porn, is hacking computers anywhere in the world with one warrant" - @josephfcox


  • Jeffry:
    Wenn ich im Umkreis von 3 Metern bei nem Spieler sein möchte, muss ich dann auch GetPlayerPos verwenden ja oder ?


    Oder du erstellst nen Public:
    public Float:GetDistanceBetweenPlayers(p1,p2)
    {
    new Float:x1,Float:y1,Float:z1,Float:x2,Float:y2,Float:z2;
    if(!IsPlayerConnected(p1) || !IsPlayerConnected(p2))
    {
    return -1.00;
    }
    GetPlayerPos(p1,x1,y1,z1);
    GetPlayerPos(p2,x2,y2,z2);
    return floatsqroot(floatpower(floatabs(floatsub(x2,x1)),2)+floatpower(floatabs(floatsub(y2,y1)),2)+floatpower(floatabs(floatsub(z2,z1)),2));
    }


    Oben forward Float:GetDistanceBetweenPlayers(p1,p2);


    Und fragst dann so ab: if(GetDistanceBetweenPlayers(Person1, Person2) UMKREIS)

  • Fernando.:
    Das wird nicht funktionieren, wenn einer der Spieler nicht online ist, da -1 immer kleiner ist als irgendwie mögliche Abstände.


    return -1.00;
    zu:
    return 999999999.00;


    Generell wäre es so besser:
    stock PlayerNearPlayer(p1,p2,Float:dist)
    {
    new Float:x,Float:y,Float:z;
    GetPlayerPos(p2,x,y,z);
    return IsPlayerInRangeOfPoint(p1, dist, x, y, z);
    }
    ;)


    if(!PlayerNearPlayer(pID, playerid, 3.0)) return SCM(playerid, ROT, "Du bist nicht bei dem Spieler.");

    3HZXdYd.png

    2 Mal editiert, zuletzt von Jeffry () aus folgendem Grund: Tippfehler

  • Bei deiner PN wird das am params liegen, nimm einfach nen neuen array dafür.


    Bei deinem Pay benutzt du IsPlayerInRangeOfPoint.
    Dann bei der ersten abfrage fragst du ab ob der wert unter 0 liegt also >0.
    Dann fragst ab ob die playerid die gewünschte playerid ist wenn ja gehts nicht.

  • Fernando.:
    warning 202: number of arguments does not match definition (Zeile ausgeklammert)
    CMD:pay(playerid, params[])
    {
    new string[128], string2[128], pID, gID, player;
    if(sscanf(params,"ud",pID,gID))return SCM(playerid, GRAU, "{CACA00}[INFO]{FFFFFF} /pay [Name] [Geldbetrag]");
    if(gID < 1) return SCM(playerid, 0xFFFFFFFF, "Ungültiger Betrag.");
    if(pID == playerid) return SCM(playerid, 0xFFFFFFFF, "[INFO]: Du kannst dir kein Geld selbst geben.");
    if(!IsPlayerConnected(pID)) return SCM(playerid, 0xFFFFFFFF, "[INFO]: Der Spieler ist nicht online.");
    //if(!GetDistanceBetweenPlayers(playerid, player, 3.0)) return SCM(playerid, 0xFFFFFFFF, "[INFO]: Du bist nicht in der Nähe des Geldempfaengers.");
    format(string, sizeof(string), "{CACA00}[INFO]{FFFFFF}%s hat dir %d$ gegeben.",PlayerName(player),gID);
    format(string2, sizeof(string2), "{CACA00}[INFO]{FFFFFF}Du hast %s %d$ gegeben.",PlayerName(player), gID);
    SendClientMessage(pID,GRAU,string);
    SendClientMessage(playerid,GRAU,string2);
    GivePlayerMoney(pID,gID);
    GivePlayerMoney(playerid, -gID);
    return 1;


    }


    und vlt. schaffst du das auch noch oder Jeffry:
    stock mysql_GetFloat(Table[], Field[], Where[], Is[])
    {
    new query[128], Float:sqlfloat;
    mysql_real_escape_string(Table, Table);
    mysql_real_escape_string(Field, Field);
    mysql_real_escape_string(Where, Where);
    mysql_real_escape_string(Is, Is);
    format(query, 128, "SELECT `%s` FROM `%s` WHERE `%s` = '%s'", Field, Table, Where, Is);
    mysql_query(query);
    mysql_store_result();
    mysql_fetch_float(sqlfloat);
    mysql_free_result();
    //return sqlfloat;
    }
    warning 213: tag mismatch (Zeile ausgeklammert)

    "Imagine if the government went after corruption as hard as it goes after guys who run filesharing sites. Priorities. " - @Snowden
    "More worrying than FBI temporarily running a server that contained child porn, is hacking computers anywhere in the world with one warrant" - @josephfcox

  • 1.)
    //if(!GetDistanceBetweenPlayers(playerid, player, 3.0)) return SCM(playerid, 0xFFFFFFFF, "[INFO]: Du bist nicht in der Nähe des Geldempfaengers.");
    Nimm meins:
    stock PlayerNearPlayer(p1,p2,Float:dist)
    {
    new Float:x,Float:y,Float:z;
    GetPlayerPos(p2,x,y,z);
    return IsPlayerInRangeOfPoint(p1, dist, x, y, z);
    }
    if(!PlayerNearPlayer(playerid, player, 3.0)) return SCM(playerid, 0xFFFFFFFF, "[INFO]: Du bist nicht in der Nähe des Geldempfaengers.");


    2.)
    stock Float:mysql_GetFloat(Table[], Field[], Where[], Is[])

    3HZXdYd.png

    Einmal editiert, zuletzt von Jeffry ()

  • Jeffry:
    error 017: undefined symbol "x2" (Bei deinem GetPlayerPos)


    Wenn ich den stock namen bekomm krieg ich einen haufen warnings/errors.


    Code
    : warning 208: function with tag result used before definition, forcing reparse
    (937) : warning 219: local variable "query" shadows a variable at a preceding level
    (960) : warning 219: local variable "query" shadows a variable at a preceding level
    (972) : warning 219: local variable "query" shadows a variable at a preceding level
    (983) : warning 219: local variable "query" shadows a variable at a preceding level
    (1010) : warning 219: local variable "query" shadows a variable at a preceding level
    (1038) : error 029: invalid expression, assumed zero
    (1041) : error 021: symbol already defined: "mysql_real_escape_string"
    (1050) : error 010: invalid function or declaration
    (1132) : warning 203: symbol is never used: "sqlfloat"

    "Imagine if the government went after corruption as hard as it goes after guys who run filesharing sites. Priorities. " - @Snowden
    "More worrying than FBI temporarily running a server that contained child porn, is hacking computers anywhere in the world with one warrant" - @josephfcox

  • Jeffry:
    Wenn ich die 2er entferne stürzt mein Compiler ab.
    Fehler gefunden :3


    und zu dem MYSQL wenn ich das hier nehme:
    stock Float:mysql_GetFloat(Table[], Field[], Where[], Is[])
    Gibts die obigen Errors.

    "Imagine if the government went after corruption as hard as it goes after guys who run filesharing sites. Priorities. " - @Snowden
    "More worrying than FBI temporarily running a server that contained child porn, is hacking computers anywhere in the world with one warrant" - @josephfcox

  • Habe das Problem mit dem 3 Passwortversuchen schon fast geschafft, jetzt gibt es nurnoch 2 Probleme.


    1: Beim 2 mal, also bei Phase 2/3 wenn das Passwort richtig ist, Spawne ich mit dem CJ Skin, obwohl es der Skin 185 sein sollte.
    2: Ich werde nach schritt 2/3 vom Server gekickt ( Bei falscher Passwort eingabe ), eigentlich sollte es erst nach der Phase 1/3 passieren. Woran kann es liegen?


    Script:

    Spoiler anzeigen
    public LoadPlayerDataSequence(playerid, l_step)
    {
    switch(l_step)
    {
    case 1:
    {
    new count = cache_get_field_content_int(0,"count");
    if(count)
    {
    ShowPlayerDialog(playerid,Dialog_Login,DIALOG_STYLE_INPUT,"SmR: {0x3252BEFF}Einloggen","{FFFFFF}Sie m�ssen von unserem System Identifiziert werden.\nGeben Sie daf�r Ihr Passwort unten in das Feld ein.\n\n Klicken Sie anschlie�end auf Einloggen, damit Ihre Daten kontrolliert werden k�nnen.","Einloggen","Abbrechen");
    return 1;
    }
    else
    {
    ShowPlayerDialog(playerid,Dialog_Register,DIALOG_STYLE_PASSWORD,"SmR: {0x3252BEFF}Registrierung","{FFFFFF}Herzlich Willkommen auf San Miami Roleplay\n\nUnser System hat Ihre Spielerinformationen\nnicht in unserer Datenbank gefunden. Um einen Charakter auf unserem Server zu Erstellen\nben�tigen wir einige Informationen. Als erstes tragen Sie Bitte ein Sicheres Passwort in das untere Feld ein.\n\nMerken Sie sich Ihr Passwort Gut.\n\nKlicken Sie anschlie�end auf Annehmen.","Annehmen","Abbrechen");
    return 1;
    }
    }
    case 2:
    {
    new count = cache_get_field_content_int(0,"count");
    if(count)
    {
    new query[160 + MAX_PLAYER_NAME];
    mysql_format(DBHandle, query ,sizeof(query),"SELECT * FROM `Accounts` WHERE `pName` = '%e'",Spieler[playerid][pName]);
    mysql_function_query(DBHandle, query, true,"LoadPlayerDataSequence","dd",playerid,3);
    return 1;
    }
    else
    {
    Login_Status[playerid]++;
    switch(Login_Status[playerid])
    {
    case 0:
    {
    ShowPlayerDialog(playerid,Dialog_Login,DIALOG_STYLE_INPUT,"{0x3252BEFF}Falsches Passwort","{FFFFFF}Das von Ihnen angegebene Passwort wurde abgelehnt,\ngeben Sie Bitte Ihr richtiges Passwort unten in das Feld ein.\nDrücken Sie danach auf Einloggen, damit Ihre Daten kontrolliert werden können.\n\nDenken Sie auch an die Groß-,Kleinschreibung\n\nSie haben 3/3 versuche!","Einloggen","Abbrechen");
    return 1;
    }
    case 1:
    {
    Login_Status[playerid]++;
    ShowPlayerDialog(playerid,Dialog_Login,DIALOG_STYLE_INPUT,"{0x3252BEFF}Falsches Passwort","{FFFFFF}Das von Ihnen angegebene Passwort wurde abgelehnt,\ngeben Sie Bitte Ihr richtiges Passwort unten in das Feld ein.\nDrücken Sie danach auf Einloggen, damit Ihre Daten kontrolliert werden können.\n\nDenken Sie auch an die Groß-,Kleinschreibung\n\nSie haben noch 2/3 versuche!","Einloggen","Abbrechen");
    return 1;
    }
    case 2:
    {
    Login_Status[playerid]++;
    ShowPlayerDialog(playerid,Dialog_Login,DIALOG_STYLE_INPUT,"{0x3252BEFF}Falsches Passwort","{FFFFFF}Das von Ihnen angegebene Passwort wurde abgelehnt,\ngeben Sie Bitte Ihr richtiges Passwort unten in das Feld ein.\nDrücken Sie danach auf Einloggen, damit Ihre Daten kontrolliert werden können.\n\nDenken Sie auch an die Groß-,Kleinschreibung\n\nSie haben nurnoch 1/3 versuche!","Einloggen","Abbrechen");
    return 1;
    }
    case 3:
    {
    SendClientMessage(playerid,0x3252BEFF,"Sie haben zu oft Ihr Passwort falsch eingegeben, aus Sicherheitsgründen wurden Sie vom System gesperrt.");
    SendClientMessage(playerid,0x3252BEFF,"Versuchen Sie es in einer Stunde nochmal, oder Melden Sie sich bei einem Administrator.");
    SetTimerEx("KickPlayer",250,0,"i",playerid);
    return 1;
    }
    }
    }
    }
    case 3:
    {
    Spieler[playerid][pAlter] = cache_get_field_content_int(0,"pAlter");
    Spieler[playerid][pAdminlevel] = cache_get_field_content_int(0,"pAdminlevel");
    Spieler[playerid][pBanned] = cache_get_field_content_int(0,"pBanned");
    Spieler[playerid][pBargeld] = cache_get_field_content_int(0,"pBargeld");
    Spieler[playerid][pKontoguthaben] = cache_get_field_content_int(0,"pKontoguthaben");
    cache_get_field_content(0,"pLastLogin",Spieler[playerid][pLastLogin],DBHandle,30);
    cache_get_field_content(0,"pRegDatum",Spieler[playerid][pRegDatum],DBHandle,30);
    Spieler[playerid][pWrongPass] = cache_get_field_content_int(0,"pVersuche");
    Spieler[playerid][pLeben] = cache_get_field_content_float(0,"pLeben");
    Spieler[playerid][pLogged] = true;
    return 1;
    }
    default:
    {
    SendClientMessage(playerid,0x7D0000FF,"Es ist ein Fehler aufgetreten, Bitte starten Sie Ihren Clienten neu, und versuchen Sie es erneut,\nSollten weiterhin Fehler auftreten, so Melde Sie sich umgehend Bitte bei einem Teammitglied.");
    return 1;
    }
    }
    return 1;
    }

    Die Kritik an anderen hat noch keinem die eigene Leistung erspart.

    – Noël Coward

  • Ich kann es ganz normal kompilieren. Da musst du was falsch eingefügt haben. :rolleyes:
    //Edit: Hast's hinbekommen.


    Wegen den anderen Fehlern:
    Du musst die Funktion vor der ersten Benutzung definieren, wegen dem "Tag" (Float:) vor der Funktion. Also entweder du packst die Funktion in eine Include und dann die Include oben hin schreiben, oder du definierst den stock direkt unter den Includes, eben bevor du die Funktion im Code verwendest.

  • Jeffry:
    Ich hab das ganze aber von maddin:
    Und ich weiß nicht was er da angestellt hat '-'

    "Imagine if the government went after corruption as hard as it goes after guys who run filesharing sites. Priorities. " - @Snowden
    "More worrying than FBI temporarily running a server that contained child porn, is hacking computers anywhere in the world with one warrant" - @josephfcox

  • Wie gesagt, es muss vor der ersten Verwendung definiert werden.


    -----------


    Eddy:
    1.)
    Login_Status[playerid]++;
    das musst du aus den case's raus nehmen, es steht ja schon vor dem switch.


    2.)
    Bei case 3 in deinem LoadPlayerDataSequence lädst du den Skin gar nicht, daher bleibt er bei 0.

  • maddin:
    Tschuldige an disch. Hab es standart nach unten gepackt weil ich die Funktion als letztes reingenommen hatte.
    Nochmal komplett durchgelesen und gelesen, dass es oben hin muss.
    Tud misch laid.

    "Imagine if the government went after corruption as hard as it goes after guys who run filesharing sites. Priorities. " - @Snowden
    "More worrying than FBI temporarily running a server that contained child porn, is hacking computers anywhere in the world with one warrant" - @josephfcox

  • Jeffry: Danke, jetzt geht es soweit, aber nach dem letzten schritt, also 1/3 kommt nochmal der Standard Login Dialog und nach dem wird man Gekickt. :wacko:

    Die Kritik an anderen hat noch keinem die eigene Leistung erspart.

    – Noël Coward

  • Nabend, weiß jemand was hier falsch ist?



    //OnPlayerCommandText
    new cmd[5];
    sscanf(cmdtext, "s[5]", cmd);
    if(!strcmp(cmd, "/time", true))
    {
    SendClientMessageToAll(COLOR_YELLOW, "a");
    }
    else
    {
    SendClientMessageToAll(COLOR_YELLOW, "b");
    }
    Es wird immer "b" ausgegeben, nie "a". Egal wie ich den Befehl eingebe.
    Wenn ich die Abfrage so umändere, dass statt /time nur time steht, funktioniert es ebenfalls nicht.


    Vielleicht kann mir @Jeffy: ja helfen :)


    LG

  • Jeffry: Danke, jetzt geht es soweit, aber nach dem letzten schritt, also 1/3 kommt nochmal der Standard Login Dialog und nach dem wird man Gekickt. :wacko:


    Was ist der Standard - Login Dialog? Unter welchem Callback lässt du den anzeigen?
    Zur Not könntest du vor ShowPlayerDialog von dem Standard - Dialog Abfragen, ob Login_Status[playerid] auch -1 ist.


    Cal44:
    Veruch mal:
    new cmd[6];
    Es gibt einen sogenannten 0-Terminator, der belegt die letzte Zelle.



    Eddy: (Post Unten) Kommt vor! :thumbup:

    3HZXdYd.png

    Einmal editiert, zuletzt von Jeffry ()