[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

  • Tipp 1: Sich selbst weg bannen, wenn man den Befehl eingibt?
    Tipp 2: Jemanden Bannen und dann noch eine seiner Variablen verändern ? ;) -> Nicht sicher ob der Tipp sinn macht ^^


    Sollten genug tipps sein ^^ Es handelt sich um die letzten 2 zeilen ;)

  • So habe den Befehl nochmal etwas übearbeitet , leider wird der Spieler nur gekickt, aber wenn man wieder online kommt passiert nichts!

    ocmd:ban(playerid,params[])
    {
    if(SpielerInfo[playerid][Alevel] >= 1)
    {
    new pID,string[256],aname[MAX_PLAYER_NAME],SpielerName[MAX_PLAYER_NAME],grund[256];
    GetPlayerName(pID,SpielerName,sizeof(SpielerName));
    GetPlayerName(playerid,aname,sizeof(aname));
    if(sscanf(params,"us",pID,grund))return SendClientMessage(playerid, Rot,"[FEHLER]{FFFFFF} Benutze: /Kick [ID/Name] [Grund]");
    if(!IsPlayerConnected(pID) || IsPlayerNPC(pID))return SendClientMessage(playerid, Rot, "[FEHLER]{FFFFFF} Der Spieler ist nicht eingeloggt!");
    SpielerInfo[pID][Banned] = 1;
    format(string,sizeof(string),"[INFO]{FFFFFF} %s {FF9D00}%s {FFFFFF}hat {FF9D00}%s {FFFFFF}verbannt. Grund: {FF9D00}%s",GetPlayerAdminRankName(playerid),aname,SpielerName,grund);
    SendClientMessageToAll(Rot,string);
    SavePlayer(playerid);
    Kick(pID);
    }
    return 1;
    }

    //EDIT: MySQL error ist nun weg.. aber es wird trz nicht in die MYSQL datenbank eingetragen!
    //EDIT 2 : Es wird garnichts gespeichert!



    Hier die Save Funktion:



    SavePlayer(playerid)
    {
    if(SpielerInfo[playerid][eingeloggt] == 0)return 1;
    {
    new query[1024];
    format(query,sizeof(query),"UPDATE user SET Level='%i',Fraktion='%i',Geldaufhand='%i',Kills='%i',Tode='%i',Alevel='%i',Skin='%i',Banned='%i',p_x='%f',p_y='%f',p_z='%f',Health='%f' WHERE id='%i'",SpielerInfo[playerid][Level],SpielerInfo[playerid][Fraktion],GetPlayerMoney(playerid),SpielerInfo[playerid][Kills],SpielerInfo[playerid][Tode],SpielerInfo[playerid][Alevel],SpielerInfo[playerid][Skin],
    SpielerInfo[playerid][Banned],SpielerInfo[playerid][p_x],SpielerInfo[playerid][p_y],SpielerInfo[playerid][p_z],SpielerInfo[playerid][db_id]);
    mysql_function_query(dbhandle,query,false,"","");
    }
    return 1;
    }

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

    5 Mal editiert, zuletzt von [GeD]Max ()

  • So habe den Befehl nochmal etwas übearbeitet , leider wird der Spieler nur gekickt, aber wenn man wieder online kommt passiert nichts!


    Was soll den passieren wenn der Spieler online kommt?
    Poste mal den Code dazu, das was passieren soll, wenn der Spieler online kommt.


    Wird Banned = 1 in der Datenbank gespeichert? Wenn nein: Hast du die Spalte in der Tabelle erstellt? Wenn ja, und es trotzdem nicht gespeichert wird, poste bitte den MySQL Log.


  • Was soll den passieren wenn der Spieler online kommt?
    Poste mal den Code dazu, das was passieren soll, wenn der Spieler online kommt.


    Wird Banned = 1 in der Datenbank gespeichert? Wenn nein: Hast du die Spalte in der Tabelle erstellt? Wenn ja, und es trotzdem nicht gespeichert wird, poste bitte den MySQL Log.


    1) Wenn man Online kommt, soll man direkt gekickt werden.


    2)
    //unter OnPasswordRespone
    if(SpielerInfo[playerid][Banned] == 1)
    {
    Kick(playerid);
    }



    3) Es wird nichts gespeichert + Tabelle wurde erstellt + MySQL log steht nichts vorhin war ein Synx fehler , aber wurde auch behoben!


    NebenInfo:


    Es wird allgemein nichts mehr gespeichert.. selbst das Geld nicht mehr

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

  • Dann schalte bitte den MySQL Debug Modus an und poste was im Log steht, wenn du den Spieler bannst.
    Wie du den Debug Modus an machst steht hier: Tipps: Scripting-Probleme richtig erklären (Kapitel 1.4.)


    EDIT:
    SavePlayer(playerid);
    ändere das nebenbei mal zu:
    SavePlayer(pID);


    Hier:



    //EDIT 2: Habe geändert , passiert immer noch nichts.

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

  • SavePlayer(playerid)
    {
    if(SpielerInfo[playerid][eingeloggt] == 0) return 1;
    new query[1024];
    format(query,sizeof(query),"UPDATE user SET Level='%i',Fraktion='%i',Geldaufhand='%i',Kills='%i',Tode='%i',Alevel='%i',Skin='%i',Banned='%i',p_x='%f',p_y='%f',p_z='%f' WHERE id='%i'",SpielerInfo[playerid][Level],SpielerInfo[playerid][Fraktion],GetPlayerMoney(playerid),SpielerInfo[playerid][Kills],SpielerInfo[playerid][Tode],SpielerInfo[playerid][Alevel],SpielerInfo[playerid][Skin],
    SpielerInfo[playerid][Banned],SpielerInfo[playerid][p_x],SpielerInfo[playerid][p_y],SpielerInfo[playerid][p_z],SpielerInfo[playerid][db_id]);
    mysql_function_query(dbhandle,query,false,"","");
    return 1;
    }


    Das Health war zu viel im Query. die Klammern brauchst du auch nicht. So sollte es passen.


  • okay danke geht nun, aber ist jetzt "Health" weg oder? Weil ich es nicht mehr sehe und ich brauch es später noch..

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

  • okay danke geht nun, aber ist jetzt "Health" weg oder? Weil ich es nicht mehr sehe und ich brauch es später noch..


    Ja, das musst du dann später, wenn du die Variable hast, wieder (mit Variable!) in das Query einfügen. Du hattest es ohne eine Variable für die Health anzugeben im Query. Deshalb hat es deine DB-ID in das Health Feld geschrieben, und das Feld der ID war leer, folglich hat es deine Stats nicht mehr aktualisiert.


    Die Platzhalter (%s, %d, ...) müssen immer gleich viele sein, wie Variablen in den Parametern am Ende vom format.


  • Ja, das musst du dann später, wenn du die Variable hast, wieder (mit Variable!) in das Query einfügen. Du hattest es ohne eine Variable für die Health anzugeben im Query. Deshalb hat es deine DB-ID in das Health Feld geschrieben, und das Feld der ID war leer, folglich hat es deine Stats nicht mehr aktualisiert.


    Die Platzhalter (%s, %d, ...) müssen immer gleich viele sein, wie Variablen in den Parametern am Ende vom format.


    Alles klar danke dir! geht nun Perfekt!


    Jedoch habe noch eine Frage


    -> Wie mache ich das mit den Alter,RegisterDatum,Männlich/Weiblich etc? Am besten bitte einen Beispiel dazu! :)

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

  • Was meinst du damit?
    Hast du denn dazu schon einen Code? Was willst du überhaupt machen? Speichern, oder die gesamte Eingabe, oder für was brauchst du Hilfe?


    Am besten du fängst erst mal an mit dem was du vor hast und postest dann den Teil an dem du hängst.

  • Was meinst du damit?
    Hast du denn dazu schon einen Code? Was willst du überhaupt machen? Speichern, oder die gesamte Eingabe, oder für was brauchst du Hilfe?


    Am besten du fängst erst mal an mit dem was du vor hast und postest dann den Teil an dem du hängst.


    Nein Code habe ich leider nicht.. Anfang möchte ich ja , aber ich weiß ehrlichgesagt nicht wie genau.. nehmen wir an , ich möchte als erstes den RegisterDatum in die Datenbank abspeichern und wie mache ich das jetzt genau , und wo muss ich das einfügen? (ich weiß nur das es etwasmit Getdata zu tuen hat)

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

  • INSERT INTO




    //Unter OnPlayerDialog....
    if(dialogid==DIALOG_REGISTER)
    {
    if(response)
    {
    new name[MAX_PLAYER_NAME],query[128],passwort[35];
    GetPlayerName(playerid,name,sizeof(name));
    if(strlen(inputtext)>=3)
    {
    //Registerfunktion
    mysql_escape_string(inputtext,passwort,dbhandle);
    format(query,sizeof(query),"INSERT INTO user (username,passwort) VALUES ('%s',MD5('%s')) ",name,passwort);
    mysql_function_query(dbhandle,query,false,"OnPlayerRegister","i",playerid);
    SpawnPlayer(playerid);
    }
    else
    {
    //Kleiner als 4 Zeichen
    ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD,"Registrierung","Das angegebende Passwort war zu kurz! Bitte versuchs nochmal:","Register","Abbrechen");
    }


    }
    else
    {
    SendClientMessage(playerid,Rot,"[INFO]{FFFFFF} Du hast auf Abbrechen gedrückt!");
    }
    return 1;
    }

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

  • Da der Spieler sich da registriert, kannst du es direkt hier erstellen, also über:
    format(query,sizeof(query),"INSERT INTO user (username,passwort) VALUES ('%s',MD5('%s')) ",name,passwort);
    machst du:
    new tag, monat, jahr, datum[16];
    getdate(tag, monat, jahr);
    format(datum, sizeof(datum), "%02d.%02d.%d", tag, monat, jahr);


    und dann fügst du es in das Query ein:
    format(query,sizeof(query),"INSERT INTO user (username,passwort) VALUES ('%s',MD5('%s')) ",name,passwort);
    zu:
    format(query,sizeof(query),"INSERT INTO user (username,passwort,registerdatum) VALUES ('%s',MD5('%s'),'%s') ",name,passwort,datum);


    => Nicht vergessen in der Tabelle eine Spalte "registerdatum" als VARCHAR anzulegen.


  • alles klar danke! Aber warum die 02 in der formatirung?



    Und wie mache ich dass jetzt mit der Junge/Mädchen abfrage + Alter abfrage ? Diesmal ist es ja kein Datum etc.

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

    Einmal editiert, zuletzt von [GeD]Max ()

  • alles klar danke! Aber warum die 02 in der formatirung?


    Das bewirkt, dass da zum Beispiel 01.01.2015 steht, anstatt 1.1.2015.


    Und wie mache ich dass jetzt mit der Junge/Mädchen abfrage + Alter abfrage ? Diesmal ist es ja kein Datum etc.


    Das machst du ähnlich, nur eben dass du einen Dialog machst in dem du den Spieler das Geschlecht auswählen lässt (LIST-Dialog) und dann einen Input Dialog in den der Spieler sein Alter eingeben kann. Beides speicherst du jeweils in eine Variable und speicherst es das ganz normal über die Statistiken, oder du fragst es vor der Registration ab, dann kannst du es auch im selben Query wie das Register-Datum einfügen.
    Wenigstens die Dialoge solltest du hinbekommen, beginne einfach mal.



    CapriZ: http://forum.sa-mp.com/showthread.php?t=282883 Objekt: 18646

  • Hay,
    weiß einer ob man einen Sirenen Mod Scripten kann oder ob jeder Spieler sich einen Runterladen müsste?

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