[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
  • Hm..
    So habe ich das verstanden von Wiki aus:
    if(NearestPlayer(poliziststadthalle,5, 10.0)){
    SetPlayerChatBubble(poliziststadthalle,"Guten Tag Sir.", WEISS, 100.0, 10000);
    return 1;
    }


    stock NearestPlayer(playerid,targetid,Float:distance)
    {
    new Float:x, Float:y, Float:z;
    GetPlayerPos(playerid,x,y,z);
    if(IsPlayerInRangeOfPoint(targetid,distance,x,y,z))
    {
    return true;
    }
    return false;
    }

    Aber scheint man muss den NPC anders finden als den Namen. (Undefined stadthallepolizist)

    Mit freundlichen grüßen,
    Braowl

  • OnGameModeInit:
    SetTimer("PoliceNPCCheck", 500, 1);


    Unten im Code:
    forward PoliceNPCCheck();
    public PoliceNPCCheck()
    {
    new spName[MAX_PLAYER_NAME], Float:x, Float:y, Float:z;
    for(new i=0; i<MAX_PLAYERS; i++)
    {
    GetPlayerName(i, spName, MAX_PLAYER_NAME);
    if(IsPlayerNPC(i) && !strcmp(spName, "NAME_DES_POLIZISTEN_HIER"))
    {
    GetPlayerPos(i, x, y, z);
    for(new j=0; j<MAX_PLAYERS; j++)
    {
    if(IsPlayerConnected(j) && j != i && IsPlayerInRangeOfPoint(j, 8.0, x, y, z))
    {
    SetPlayerChatBubble(i,"Guten Tag Sir.", WEISS, 100.0, 10000);
    return 1;
    }
    }
    return 1;
    }
    }
    return 1;
    }


    NAME_DES_POLIZISTEN_HIER logischerweise mit dem Spieler-Name des NPCs ersetzen.


  • Könntest du vielleicht kurz erkären was bedeutet ist?
    Möchte es nicht einfach so reinkopieren.
    Ich verstehe folgendes nicht:

    for(new i=0; i<MAX_PLAYERS; i++)

    Aber vielen Dank für die Hilfe!

    Mit freundlichen grüßen,
    Braowl

  • Kannst du bitte von nun an davon absehen, den gesamten Post (mit Code!) zu zitieren? Dafür wäre ich, und sicher auch viele andere, dir sehr dankbar. :)


    So, zurück zum Thema:
    Das
    for(new i=0; i<MAX_PLAYERS; i++)
    ist eine Schleife von 0 bis MAX_PLAYERS-1, wobei MAX_PLAYERS in der Include a_samp definiert ist (z.B. 500).
    i nimmt dabei bei jedem Durchlauf den nächsten Wert (++ = +1) an, also konkret 0,1,2,3,4,...498,499.


    Mehr dazu:
    http://wiki.sa-mp.com/wiki/Loops

  • Guten morgen, ich habe da ein Problem mit meinem Login System. Ich möchte das man maximal 3 mal das Passwort falsch eingeben darf ( danach Kick ). Aber bei mir will das nicht so ganz, zum einen bekomme ich beim 3 mal keine Kicknachricht, werde jedoch vom Server gekickt. Und ich kann mich nicht mehr einloggen, immer wenn ich normal auf den Server komme, und das "richtige" Passwort eingebe kommt das mit dem "Passwort Falsch". Ich hoffe mir kann jemand Helfen.


    Spoiler anzeigen
    public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
    {
    switch(dialogid)
    {
    case Dialog_Register:
    {
    if(!response)
    {
    SendClientMessage(playerid,0xFF0000FF,"Dieser Vorgang wurde Ab.-oder Unterbrochen\nBitte beenden Sie das Spiel, indem Sie /q als Textnachricht in den Chat eingeben.");
    SetTimerEx("KickPlayer",250,0,"i",playerid);
    return 1;
    }
    if(!inputtext[0] || !(3 <= strlen(inputtext) <= 10))
    {
    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\nbenoetigen wir einige Informationen. Als erstes tragen Sie Bitte ein Sicheres Passwort in das untere Feld ein.\nMerken Sie sich Ihr Passwort Gut.\n\nKlicken Sie anschließend auf Annehmen.","Annehmen","Abbrechen");
    return 1;
    }
    new query[650 + MAX_PLAYER_NAME],Tag,Monat,Jahr,Stunde,Minute,Sekunde;
    getdate(Tag,Monat,Jahr);
    gettime(Stunde,Minute,Sekunde);
    format(query,sizeof(query),"d.d.%d - d:d:%d",Tag,Monat,Jahr,Stunde,Minute,Sekunde);
    mysql_format(DBHandle, query, sizeof(query),"INSERT INTO `Accounts` (`pName`, `pPasswort`, `pAlter`, `pBargeld`, `pKontoguthaben`, `pLastLogin`, `pRegDatum`, `pVersuche`, `pLeben`) VALUES ('%e','%e','%d','0','0','%s','%s','%d','100.0')",Spieler[playerid][pName],inputtext,Spieler[playerid][pAlter],query,query,Spieler[playerid][pWrongPass],Spieler[playerid][pLeben]);
    mysql_tquery(DBHandle, query, "", "");
    Spieler[playerid][pLogged] = true;
    SpawnPlayer(playerid);
    return 1;
    }
    case Dialog_Login:
    {
    if(!response)
    {
    SendClientMessage(playerid,0xFF0000FF,"Dieser Vorgang wurde Ab.-oder Unterbrochen\nBitte beenden Sie das Spiel, indem Sie /q als Textnachricht in den Chat eingeben.");
    SetTimerEx("KickPlayer",250,0,"i",playerid);
    return 1;
    }
    switch(Login_Status[playerid])
    {
    case 0:
    {
    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 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. Versuchen Sie es in einer Stunde nochmal, oder Melden Sie sich bei einem Administrator.");
    SetTimerEx("KickPlayer",250,0,"i",playerid);
    return 1;
    }
    }
    if(!inputtext[0] || !(3 <= strlen(inputtext) <= 25))
    {
    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;
    }
    new query[180 + MAX_PLAYER_NAME];
    mysql_format(DBHandle, query,sizeof(query),"SELECT COUNT(*) AS `count` FROM `Accounts` WHERE `pName` ='%e' AND `pPasswort` ='%e'",Spieler[playerid][pName],inputtext);
    mysql_function_query(DBHandle, query, true,"LoadPlayerDataSequence","dd",playerid,2);
    SpawnPlayer(playerid);
    Spieler[playerid][pLogged] = true;
    return 1;
    }
    }
    return 1;
    }


    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.\n\nSie haben noch 3/3 versuche!","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
    {
    ShowPlayerDialog(playerid,Dialog_Login,DIALOG_STYLE_PASSWORD,"SmR: {0xFF0000EE}Falsches Passwort","{FFFFFF}Das von Ihnen gew�hlte Passwort war leider nicht Richtig.\nGegebenfalls beachten Sie die Gro� und Kleinschreibung.\n\nAchtung! Sie haben nur noch 2/3 versuche.","Einloggen","Abbrechen");
    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][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;
    }


    //Edit
    Etwas hinzugefügt

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

    – Noël Coward

    Einmal editiert, zuletzt von Eddy ()

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Wo fragst du denn ab, ob das Passwort falsch war?


    Das unterste vielleicht? da stehts doch....


    mysql_format(DBHandle, query,sizeof(query),"SELECT COUNT(*) AS `count` FROM `Accounts` WHERE `pName` ='%e' AND `pPasswort` ='%e'",Spieler[playerid][pName],inputtext);

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

    – Noël Coward

  • Du könntest das auch eigentlich anders machen.
    In dem Callback LoadPlayerDataSequence, wenn num_rows false / 0 ist, dann ist das Passwort falsch. Da könntest du die Variable immer um einen erhöhen. Wenn die Variable dann 3 ist, => Kick

  • Du könntest das auch eigentlich anders machen.
    In dem Callback LoadPlayerDataSequence, wenn num_rows false / 0 ist, dann ist das Passwort falsch. Da könntest du die Variable immer um einen erhöhen. Wenn die Variable dann 3 ist, => Kick


    Welches der beiden ist dMn nach der beste Weg, und welcher am besten für Anfänger?

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

    – Noël Coward

  • Ich würde es so machen wie ich es erklärt habe.
    Welche Methode du natürlich jetzt nimmst, ist dir selbst überlassen.

  • Auf Anfrage in PN:


    Eddy:
    So wie mir das scheint, hast du das bei OnPlayerDisconnect vergessen:
    Login_Status[playerid] = -1;
    du kannst es aber auch direkt dort machen, wo du den Timer startest um den Spieler zu kicken.


    Die Nachricht bekommst du nicht, weil das hier mehr als 144 Zeichen sind:

    Zitat

    Sie haben zu oft Ihr Passwort falsch eingegeben, aus Sicherheitsgründen wurden Sie vom System gesperrt. Versuchen Sie es in einer Stunde nochmal, oder Melden Sie sich bei einem Administrator.


    Nämlich 191.



    Syno: Ach ja, stimmt natürlich. Das fängt ja bei 0 an, hab ich glatt übersehen. Danke für den Hinweis. :thumbup:
    Dann müsste auch die Initialisierung so aussehen:
    new Login_Status[MAX_PLAYERS] = {-1,...};
    Schätze mal das hat er auch nicht.

    3HZXdYd.png

    3 Mal editiert, zuletzt von Jeffry ()

  • Jeffry:
    Eddy:


    Aber wenn er diese Variable auf 0 hat wird das hier ja trotzdem ausgeführt:
    switch(Login_Status[playerid])
    {
    case 0:
    {
    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 3/3 versuche!","Einloggen","Abbrechen");
    return 1;
    }
    (...)


    Also wenn dann auf -1 setzen :rolleyes:

  • Hallo ich habe eine Kleine Frage wenn ich mich Registriere bekomme ich Level1 und 2500$ aber der Server speichert das nicht in der Datenbank
    also ich will das Sofern ein Spieler auf dem Server ist er Level 1 und 2500$ bekommt bekommt er auch aber wenn ich mich auslogge und wieder einlogge ist das Level auf 0 genauso wie mein Geld auf 0


    kann mir jemand helfen ?


    savePlayer(playerid)
    {
    if(sInfo[playerid][eingeloggt]==0)return 1;
    //speichern
    new query[128];
    format(query,sizeof(query),"UPDATE user SET level='%i',money='%i',alevel='%i' WHERE id='%i'",sInfo[playerid][level],
    GetPlayerMoney(playerid),sInfo[playerid][alevel],sInfo[playerid][db_id]);
    mysql_function_query(dbhandle,query,false,"","");
    return 1;
    }


    public OnPasswordResponse(playerid)
    {
    new num_fields,num_rows;
    cache_get_data(num_rows,num_fields,dbhandle);
    if(num_rows==1)
    {
    //Spieler laden


    sInfo[playerid][eingeloggt] = 1;
    sInfo[playerid][level] = cache_get_field_content_int(0,"level",dbhandle);
    SetPlayerScore(playerid,sInfo[playerid][level]);
    sInfo[playerid][db_id] = cache_get_field_content_int(0,"id",dbhandle);
    SetPlayerMoney(playerid,cache_get_field_content_int(0,"money",dbhandle));
    sInfo[playerid][alevel] = cache_get_field_content_int(0,"alevel",dbhandle);
    SendClientMessage(playerid,GRÜN,"Erfolgreich eingeloggt!");
    loadPlayerCars(playerid);
    }
    else
    {
    SendClientMessage(playerid,ROT,"Das eigegeben Passwort ist fasch");
    ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_PASSWORD,"Login","Willkommen auf Red-Game0v3r-Reallife,\n\n\n\n Bitte logge dich nun ein!\n\n\n","Login","Abbrechen");
    }
    return 1;
    }


    if(dialogid==DIALOG_REGISTER)
    {
    if(response)
    {
    new name[MAX_PLAYER_NAME],query[128],passwort[35];
    GetPlayerName(playerid,name,sizeof(name));
    if(strlen(inputtext)>3)
    {
    //Registrierungsfunktion
    mysql_escape_string(inputtext,passwort,dbhandle);
    format(query,sizeof(query),"INSERT INTO user (username,password) VALUES ('%s','%s') ",name,passwort);
    mysql_function_query(dbhandle,query,false,"OnPlayerRegister","d",playerid);
    }
    else
    {
    //Kleiner als 4 Zeichen
    SendClientMessage(playerid,ROT,"Dein Passwort muss mindestens 4 Zeichen lang sein.");
    ShowPlayerDialog(playerid,DIALOG_REGISTER,DIALOG_STYLE_INPUT,"Registrierung","Gib bitte dein gewünschtes Passwort an:","Okay","Abbrechen");
    }
    }
    else
    {
    Kick(playerid);
    }
    return 1;
    }
    return 1;
    }


    public OnPlayerRegister(playerid)
    {
    sInfo[playerid][db_id] = mysql_insert_id();
    SendClientMessage(playerid, ROT, "Du hast dich Erfolgreich Registriert !");
    SendClientMessage(playerid, LEUCHTENDBLAU, "=====>Willkommen auf Red-Game0v3r-Reallife<=====");
    SetPlayerMoney(playerid, 2500);
    SetPlayerScore(playerid,1);
    savePlayer(playerid);
    SetPlayerColor(playerid, 0xFF00FFFF);
    }

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