IP wird nicht gespeichert

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
  • Hey,


    ich benutzte diesen Thread mal für ein neues Thema.


    Ich sitze schon ne Stunde vorm PC und finde einfach keine Lösung obwohl es so EINFACH


    ist eine IP zu speichern.


    Bei Stock: Login

    Code
    new IP[128];
    
    
      GetPlayerIp(playerid, IP, sizeof(IP));
    
    
        dini_Set(Spieler,"PlayerIp",IP);



    Wird die IP (Erfolgreich) gesetzt, aber nach dem Login ist sie wieder 0.


    Speichern kann man aber keinen Dini Wert außer man benutzt halt ein Enum und benutzt dieses dann z.B mit PlayerInfo oder bei mir sSpieler


    Normalerweise muss man das auch garnicht speichern, deshalb wundert es mich auch, dass es nach dem Disconnecten auf 0 ist. Habe das Enum


    auch komplett entfernt, sodass es nicht auf den Wert des Enums gesetzt werden kann, hat aber nix gebracht.


    Mit dem Enum habe ich es auch versucht, aber der hat nur die ersten 2 Ziffern der IP gespeichert sonst nix


    ist also z.B so (keine richtige IP)



    Die IP ist: 42.28.185.189


    Und es wurde nur die 42 gespeichert.



    & Der Autologin funktioniert nicht ( das heißt, man bekommt den Dialog)



    Wenn ich bei Dini per hand einfach die IP eintrage, funktioniert der Autologin auch ohne Probleme.


    Es wird nur immer auf 0 gesetzt....

    Code
    if(!strcmp(IP, dini_Get(Spieler,"PlayerIp")))
    
    
    
    
    
    
    if(!strcmp(IP, sSpieler[playerid][PlayerIp]))


    3 Mal editiert, zuletzt von Coldnew ()

  • Machs doch schöner als bei Nemesus :)


    Nutze den Dialogstyle DIALOG_STYLE_TABLIST. (http://wiki.sa-mp.com/wiki/Dialog_Styles)


    Und dann mach folgendes:


    ast2ufdyxkb1.png


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

  • Danke, aber bin grad n bisschen überfordert :D


    (727 -- 728) : error 029: invalid expression, assumed zero
    (728) : warning 215: expression has no effect
    728) : error 001: expected token: ";", but found "]"
    (728) : error 029: invalid expression, assumed zero
    (728) : fatal error 107: too many error messages on one line



    Wusste erstmal nicht genau wie ich das einfügen soll aber ich habs mal so gemacht: ( und einen Wert als Beispiel genutzt)


    Bin irgendwie etwas durcheinander


    "Item 0",((if(sSpieler[playerid][Prison] == 0))?("ON"):("OFF")), = Linie 128


    Code
    ocmd:teetime(playerid,params[])
    {
        new strings[256] = "{FFFFFF}Itemname\t{FFFFFF}Status\n";
    	format(strings,sizeof(strings),"%s%s\t[%s]\n%s\t[%s]\n",strings,
    	"Item 0",((if(sSpieler[playerid][Prison] == 0))?("ON"):("OFF")),
    	"Item 1",((if(sSpieler[playerid][Prison] == 1))?("ON"):("OFF"))
    	ShowPlayerDialog(playerid, 25, DIALOG_STYLE_TABLIST, "Buy Weapon",strings,"Select", "Cancel");
        return 1;
    }
  • Ich will da nicht so zwischengreifen, Kaliber ist ja der Ehrenmann xd


  • Wieso machst du da irgendwas mit if?!


    Hab ich da if stehen?


    Ein if kannst du da nicht reinpacken, der ternary Operator sorgt schon dafür, dass das richtig verwendet wird.


    Also, lösch das if und mach das so wie ich das gemacht habe :D


    Du musst es nur kopieren, das wird doch nicht allzu schwer sein xD


    Und ich weiß nicht wieso du einmal auf == 0 prüfst und einmal auf == 1...das macht wenig Sinn.


    (x == 1) ? ("Hi") : ("ROFL")


    Der Operator sagt, wen x = 1 ist, dann wird "Hi" ausgegeben, ansonsten "ROFL".


    Du brauchst da nicht unterschiedliche Werte o.ä. prüfen.

    ast2ufdyxkb1.png


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

  • (727 -- 728) : error 029: invalid expression, assumed zero
    (728) : warning 215: expression has no effect
    (728) : error 001: expected token: ";", but found "]"
    (728) : error 029: invalid expression, assumed zero
    (728) : fatal error 107: too many error messages on one line


    Habs mal genau so reinkopiert, leider immernoch Fehler :(



    Code
    ocmd:teetime(playerid,params[])
    {
    	new strings[256] = "{FFFFFF}Itemname\t{FFFFFF}Status\n";
    	format(strings,sizeof(strings),"%s%s\t[%s]\n%s\t[%s]\n",strings,
    	"Item 0",((if(sSpieler[playerid][Prison] == 0))?("ON"):("OFF")),
    	"Item 1",((if(sSpieler[playerid][Prison] == 1))?("ON"):("OFF"))
    );
    	ShowPlayerDialog(playerid, 25, DIALOG_STYLE_TABLIST, "Buy Weapon",strings,"Select", "Cancel");
    	return 1;
    }






    //Edit @Kaliber







    Ich mag if abfragen halt :( xD



    Naja also muss ich den Wert anhand einer Variable oder anhand eines Operators abfragen (was auch immer das ist)?


    Mir schwirren da wieder Millionen Fragen im Kopf :D




    Wäre vielleicht einfacher wenn ich dir ausführlich erkläre wofür das gedacht ist: (Oder ALLEN die hier sind)




    Wie ich schon in dem FlagBanMode Thema erklärt habe:




    Ich möchte einen Befehl für Admins womit man Funktionen der Spieler deaktivieren kann.


    Deshalb auch das ON / OFF


    Und dann brauche ich dafür meine sSpieler Abfrage die den Wert überprüft, es sei denn dieser Operator setzt z.B Archievment(halt der Operator wert) auf 1 wenn sSpieler pMuted auch 1 ist, aber dann müsste dieser Wert doch auch


    noch gespeichert werden, damit sie nicht Unsynchron sind.... Habe keine Ahnung ob du das meinst, oder was anderes. xD Bin wirklich verwirrt.


    Eine einfache abfrage wäre wirklich ein segen

    Einmal editiert, zuletzt von Coldnew ()

  • @Coldnew
    Da ist doch schon ein if??? warum machst du in (( ein if rein?


    Code
    ocmd:teetime(playerid,params[])
    {
        new strings[256] = "{FFFFFF}Itemname\t{FFFFFF}Status\n";
    	format(strings,sizeof(strings),"%s%s\t[%s]\n%s\t[%s]\n",strings,
    	"Item 0",((sSpieler[playerid][Prison] == 0)?("ON"):("OFF")),
    	"Item 1",((sSpieler[playerid][Prison] == 1)?("ON"):("OFF"))
    );
    	ShowPlayerDialog(playerid, 25, DIALOG_STYLE_TABLIST, "Buy Weapon",strings,"Select", "Cancel");
        return 1;
    }


    Mehr transparents zu der Community!
    Aber bitte künftig: Transparenz und nicht Transparents

  • Gut gemacht Kevin, jetzt hast du ihm die Teil-Lösung vorgegeben, die er nur noch Copy Pasten brauch, als kurz drüber nachzudenken.


    Denn Syntaktisch mag das jetzt korrekt sein, allerdings ist die Logik dahinter noch falsch :)


    Damit er das + die Syntax versteht, hatte ich meinen Beitrag da oben verfasst xD


    //Edit:
    Verfass doch einen neuen Beitrag, anstatt das in ein Edit zu packen?! lel


    Wenn du noch so viele Fragen hast, dann frag doch, dafür ist ein Forum doch da xD Andere haben eventuell auch diese Fragen, deshalb ist es doch gut, wenn diese geklärt werden.


    Vielleicht um es dir einfacher zu machen, zum Beispiel das + Zeichen ist ein Operator.


    1+2 = 3


    Die 1 und die 2, sind die sogenannten Operanden, auf diese wird eine Funktion angewandt, nämlich die Addition.
    Und dass das passiert, wird durch den Operator + ausgedrückt.
    und die 3 ist das Ergebnis, der Operation :D


    So viele Fachbegriffe, für den simplen Vorgang, ich habs mir nicht ausgesucht, sry xD


    So hier haben wir nun einen Operator, der aus 2 Teilen besteht, einem ? und einem :.


    Du kannst es dir wie eine if-Abfrage vorstellen:



    if(sSpieler[playerid][Prison] == 0) "ON"
    else "OFF"



    nichts anderes ist:


    (sSpieler[playerid][Prison] == 0) ? ("ON") : ("OFF")


    Ich weiß allerdings nicht, wie ich das Beispiel konkretisieren soll, da das genau das ist, was du suchst.


    ersetze jetzt einfach dein sSpieler[playerid][Prison] mit z.B. Muted o.ä. ^^

    ast2ufdyxkb1.png


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

    Einmal editiert, zuletzt von Kaliber ()

  • Gut gemacht Kevin, jetzt hast du ihm die Teil-Lösung vorgegeben, die er nur noch Copy Pasten brauch, als kurz drüber nachzudenken.


    Denn Syntaktisch mag das jetzt korrekt sein, allerdings ist die Logik dahinter noch falsch :)


    Damit er das + die Syntax versteht, hatte ich meinen Beitrag da oben verfasst xD

    Schön, dass du mir was beibringen willst, aber du sprengst dabei meinen Kopf xD


    Ich lerne irgendwie eher durch direkte Lösungen die ich mir merke und weiter ausbaue und wieder anwenden kann


    // EDIT



    Hier das Ergebnis:
    Ich denke mal da kann ich eine Zeile rausnehmen . Ich weiß nicht ob das jetzt wirklich zu 100% funktioniert ( es gab jedenfalls keine Fehler)


    Ich musste die Bilder mal hier reinkopieren weil ich mein prison system ziemlich geil finde, was evtl. ein bisschen von einem anderem server abgeguckt ist





    Einmal editiert, zuletzt von Coldnew ()

  • Ich denke mal da kann ich eine Zeile rausnehmen

    1. jetzt hab ich n Edit gemacht, weil dein Beitrag mir nicht angezeigt wurde xD


    2. Du verwendest den falschen DialogStyle :) Bzw hatte ich dir einen anderen Gezeigt :)

    ast2ufdyxkb1.png


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

  • Noch was kleines, was mit dem Thema nichts zutun hat:


    Und zwar möchte ich die IP des Spielers speichern bei OnplayerDisconnect


    new IP[16];
    GetPlayerIp(playerid, IP, 16);
    dini_Set(Spieler,"PlayerIp",IP);


    new IP[16];
    GetPlayerIp(playerid, IP, sizeof(IP));
    dini_Set(Spieler,"PlayerIp",IP);


    Ich habe es mit beiden versucht und es kam als IP IMMER 255.255.255.255 raus ( wurde gespeichert)



    Bei meinem Localhost server sowie auch einem Online Server wurde immer diese IP gespeichert.



    // Edit


    Bei GetPlayerIP aber nicht, dort wurde immer die richtige IP angezeigt. Auch online


    stock GIP(playerid)
    {
    new ip[16];
    GetPlayerIp(playerid, ip, 16);
    return ip;
    }
    ocmd:myip(playerid)
    {
    new string[128];
    format(string,sizeof(string),"Deine IP ist: %s",GIP(playerid));
    SendClientMessage(playerid,ROT,string);
    return 1;
    }

  • Die beiden Abfragen, sind ja auch identisch.


    sizeof ist auch ein Operator ;) Weißte ja jetzt bescheid xD


    Und Operatoren werden vom Compiler übersetzt.


    Und der macht aus sizeof(IP) eine 16.


    Also ist egal ob du da 16 oder sizeof(IP) hinschreibst, da ändert sich nichts dran :D


    Der Fehler liegt an dem Ort, wo du es hinschreibst :D


    Unter OnPlayerDisconnect ist der Spieler schon disconnected und deshalb kannst du nicht mehr die IP Abfragen :)


    Deshalb setz die Abfrage doch unter OnPlayerConnect ^^


    Solange der Spieler auf dem Server ist, wird sich seine Ip eh nicht ändern :D

    ast2ufdyxkb1.png


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

  • [wiki]GetPlayerIp[/wiki]



    Zitat von Wiki

    This function does not work when used in OnPlayerDisconnect because the player is already disconnected. It will return an invalid IP (255.255.255.255). Save players' IPs under OnPlayerConnect if they need to be used under OnPlayerDisconnect.

    "Bevor ich mir Informationen aus der "Bild" hole,
    werde ich anfangen, Wahlergebnisse danach vorauszusagen,
    neben welchen Busch unsere Katze gepinkelt hat."

    Margarete Stokowski

  • Beitrag von Coldnew ()

    Dieser Beitrag wurde von Canna aus folgendem Grund gelöscht: Spam ().
  • Da der andere Thread weg ist, hier nochmal der Lösungsvorschlag:
    Wie hast du PlayerIp im enum definiert?
    Es sollte so aussehen:


    PlayerIp[16],



    Außerdem:
    sSpieler[playerid][PlayerIp] = dini_Int(Spieler,"PlayerIp");


    zu:


    format(sSpieler[playerid][PlayerIp], 16, dini_Get(Spieler,"PlayerIp"));



    Die IP ist ein String, kein Integer.

  • Sollte aber funktionieren. Debug es mal. Also printe (mit printf()) was alles wie verarbeitet wird, alo bspw . den IP-String...die prints sind dann in der Server-Log zu sehen und evtl. hilft dies weiter.

    Wer PALWAL-Sternchen vergibt, bekommt aus Prinzip ein Like 😏


    @palwal Donald Trump ist einer der besten Präsidenten welche die USA je hatte, meine Meinung.