Beiträge von Templer

    Seine mysql_usertable stimmt, sonst würde er sich mit einem bestehenden Account nicht einloggen können 8D ...


    Also Skeita probiers mal so aus:


    stock mysqlget(table[],bedien[],abfrag[],data[])
    {
    new query[256];
    format(query,sizeof(query),"SELECT %s FROM %s WHERE %s",abfrag,table,bedien);
    new ergebnis = samp_mysql_query(query);
    if(ergebnis == 0) return false;
    samp_mysql_store_result();
    if(samp_mysql_num_rows())
    {
    samp_mysql_get_field(abfrag, data);
    samp_mysql_free_result();
    return true;
    }
    }

    Google Earth, der war knapp. Hast fast getroffen ^^. Nächstes mal wenn du nüchterner bist, triffst auch rein ^^


    public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
    {
    if(dialogid == 1)
    {
    if(response) //Code wenn er auf den 1 Button klickt, also "Weiter"
    {
    if(strcmp(inputtext,"2002199613")) == 0) // BETAKEY
    {
    SendClientMessage(playerid,0xFFFFFFFF,"Willkommen in der Betaphase!.");
    }
    else
    {
    SendClientMessage(playerid,0xFFFFFFFF,"Du hast einen nicht gültigen Betakey eingegeben!");
    kick(Playerid);
    }
    }
    else //wenn er auf "Abbrechen" klickt
    {
    kick(Playerid);
    }
    }
    else
    {
    new pname[MAX_PLAYERS],accFormat[128];
    GetPlayerName(playerid,pname,sizeof pname);
    format(accFormat,sizeof accFormat,"%s.datei",pname);
    if(response)
    {
    switch(dialogid) // dialogid auswählen
    {
    case DIALOG_LOGIN: // ID Login
    {
    if(!strlen(inputtext))
    {
    ShowPlayerDialog(playerid,DIALOG_LOGIN,1,"Login","Bitte logge dich ein","Abbrechen","Weiter");
    return SendClientMessage(playerid,0xFFFFFFFF,"Kein Passwort angegeben!");
    }
    if(strcmp(inputtext,dini_Get(accFormat,"Passwort")) == 0) // Passwort Direkt aus der Datei Laden
    {
    Spieler[playerid][wanted] = dini_Int(accFormat,"wanted");
    Spieler[playerid][skin] = dini_Int(accFormat,"skin");
    Spieler[playerid][lastx] = dini_Float(accFormat,"lastx");
    Spieler[playerid][lasty] = dini_Float(accFormat,"lasty");
    Spieler[playerid][lastz] = dini_Float(accFormat,"lastz");
    GivePlayerMoney(playerid,dini_Int(accFormat,"Geld"));
    SetPlayerScore(playerid,dini_Int(accFormat,"Score"));
    Spieler[playerid][eingeloggt] = 1; // Spieler ist nun erfolgreich eingeloggt
    SendClientMessage(playerid,0xFFFFFFFF,"Du wurdest erfolgreich eingeloggt.");
    }
    else
    {
    ShowPlayerDialog(playerid,DIALOG_LOGIN,1,"Login","Bitte logge dich ein","Abbrechen","Weiter");
    SendClientMessage(playerid,0xFFFFFFFF,"Das Passwort war Falsch!");
    }
    }
    case DIALOG_REG: // ID Registrieren
    {
    if(!strlen(inputtext)) // Text darf nicht = Null sein Null im Sinne von nichts
    {
    ShowPlayerDialog(playerid,DIALOG_REG,1,"Registrieren","Bitte Registriere dich","Abbrechen","Weiter");
    return SendClientMessage(playerid,0xFFFFFFFF,"Das Passwort ist zu kurz!");
    }
    dini_Create(accFormat);
    dini_Set(accFormat,"Passwort",inputtext);
    Spieler[playerid][eingeloggt] = 1;
    SendClientMessage(playerid,0xFFFFFFFF,"Account wurde angelegt und du wurdest eingeloggt.");
    }
    }
    }
    else
    {
    switch(dialogid)
    {
    case DIALOG_LOGIN:ShowPlayerDialog(playerid,DIALOG_LOGIN,1,"Login","Bitte logge dich ein","Abbrechen","Weiter");
    case DIALOG_REG:ShowPlayerDialog(playerid,DIALOG_REG,1,"Registrieren","Bitte Registriere dich","Abbrechen","Weiter");
    }
    }
    }
    return 1;
    }

    Ai, die Dokumentation von deinem MySQL ist sehr schwach ^^ Kannst du mal für mich was testen? Ersetz mal den stock damit hier:


    stock mysqlget(table[],bedien[],abfrag[],data[])
    {
    new query[256];
    format(query,sizeof(query),"SELECT %s FROM %s WHERE %s",abfrag,table,bedien);
    new ergebnis = samp_mysql_query(query);
    printf("Ergebnis Query: %d", ergebnis);
    samp_mysql_store_result();
    if(samp_mysql_num_rows())
    {
    samp_mysql_get_field(abfrag, data);
    samp_mysql_free_result();
    return true;
    }
    else
    {
    samp_mysql_free_result();
    return false;
    }
    }


    Bedeutet, du sollst dich einmal mit einem Benutzer anmelden der in MySQL eingespeichert ist und einmal der nicht eingespeichert ist, ok? Ich möchte wissen ob da ein Unterschied ist, um den Crash zu verhindern. Bitte die Beiden Debug log´s dann schicken. Danke!

    Nein, aber anscheinend mach ich immer ein Tutorial in jedem Thema xD


    public OnPlayerConnect(playerid)
    {
    //Blahblah anderer Code von OnPlayerConnect ^^
    ShowPlayerDialog(playerid,DIALOG_BETAKEY,1,"BETAKEY","Bitte gebe deinen Betakey ein!","Weiter","Abbrechen");
    return 1;
    }


    public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
    {
    if(dialogid == 1)
    {
    if(response) //Code wenn er auf den 1 Button klickt, also "Weiter"
    {
    if(strcmp(inputtext,"ZAHLENCODE")) == 0) // BETAKEY
    {
    SendClientMessage(playerid,0xFFFFFFFF,"Du wurdest erfolgreich eingeloggt.");
    }
    else
    {
    SendClientMessage(playerid,0xFFFFFFFF,"Du hast einen nicht gültigen Betakey eingegeben!");
    kick(Playerid);
    }
    }
    else //wenn er auf "Abbrechen" klickt
    {
    //Code blahblah ^^
    }
    }
    return 1;
    }

    Ach verdammt sry, denkfehler. Ich hab mich mit MySQL nie beschäftigt, aber aus deinem stock gehört das


    samp_mysql_free_result();


    bei else raus, denn was für ein Ergebnis bitte soll er den finden? Wenn es das gar nicht gibt, verstehst? ^^


    Aber ich müsste mich echt mal mit PAWN-MySQL beschäftigen...

    Du Meinst vom Boden aus, oder? Wenn ja benötigst du das Plugin MapAndreas by Kyle mit dem du die Z Koordinate vom Boden ausgeben lassen kannst, dass du X und Y angibst. z.B.:


    Wenn Spieler auf 500.0,500.0,40.0 Koordinate ist, rechnet man einfach:


    new Float:newZ; //Die Z Koordinate vom Boden.
    MapAndreas_FindZ_For2DCoord(500.0, 500.0, newZ); //Die Z Höhe von 500x500 in newZ speichern.
    if((40.0 - newZ) > 10.0) //Wenn Spieler vom Boden 10.0 höher ist. (Der Wert 40 ist von oben ^^)
    {
    //Aktion für den Spieler hier, wenn er halt höher ist ^^.
    }


    p.S.: Die Z-Koordinate ist die Höhe ^^

    @ Google Earth Beim Callback OnPlayerSpawn wird kein string zurückgegeben, nur die playerid.. Du musst eine Definition beim Spawn setzen und der Spieler sollte dann im Chat was eingeben. bzw du nützt ein Dialog ^^.

    Zu Befehl Chef, dazu noch Schlagobers mit Kirsch? ^^


    stock NoLicCar(vehicleid)
    {
    switch(GetVehicleModel(vehicleid))
    {
    case 462, 510, 509, 481, 462: return true;
    }
    return false;
    }


    public OnPlayerStateChange(playerid, newstate, oldstate)
    {
    if(newstate == PLAYER_STATE_DRIVER && PlayerInfo[playerid][pCarLic] == 0 && !NoLicCar(GetPlayerVehicleID(playerid))
    {
    SendClientMessage(playerid, 0xFFFFFF00, "Fahren ohne Führerschein ist verboten!");
    }
    return 1;
    }

    @ [FoR]Hardcore Du fragst ja nur ab, dass Leute die zu Fuß oder im Auto sind, geportet werden können ^^ Aber das Auto wird immer noch nicht geportet! Deswegen nützt man SetVehiclePos ^^



    Lösung:


    public OnPlayerPickUpPickup(playerid, pickupid)
    {
    if(pickupid == GarageEnter1)
    {
    if(IsPlayerInAnyVehicle(playerid)) SetVehiclePos(GetPlayerVehicleID(playerid),542.2825,-1410.8854,578.4260);
    else SetPlayerPos(playerid,542.2825,-1410.8854,578.4260);
    SetPlayerFacingAngle(playerid,270);
    SetCameraBehindPlayer(playerid);
    }
    if(pickupid == GarageEnter2)
    {
    if(IsPlayerInAnyVehicle(playerid)) SetVehiclePos(GetPlayerVehicleID(playerid),542.2825,-1410.8854,578.4260);
    else SetPlayerPos(playerid,542.2825,-1410.8854,578.4260);
    SetPlayerFacingAngle(playerid,270);
    SetCameraBehindPlayer(playerid);
    }
    if(pickupid == GarageExit1)
    {
    if(IsPlayerInAnyVehicle(playerid)) SetVehiclePos(GetPlayerVehicleID(playerid),542.2825,-1410.8854,578.4260);
    else SetPlayerPos(playerid,168.3734,-1344.4170,69.5407);
    SetPlayerFacingAngle(playerid,180);
    SetCameraBehindPlayer(playerid);
    }
    if(pickupid == GarageExit2)
    {
    if(IsPlayerInAnyVehicle(playerid)) SetVehiclePos(GetPlayerVehicleID(playerid),542.2825,-1410.8854,578.4260);
    else SetPlayerPos(playerid,168.3734,-1344.4170,69.5407);
    SetPlayerFacingAngle(playerid,180);
    SetCameraBehindPlayer(playerid);
    }
    return 1;
    }

    Ok Jungs, ihr müsst den stock auch nützen ^^ Ein stock ist temporär und wird erst mit kompiliert, wenn er benützt wird, also schreibt mal irgendwohin das:

    ReplaceWordInString("Deine Muda stinkt!", "stinkt!", "riecht gut!");


    Also wenn einer nun Deine Mudda stinkt! schreiben würde, wird er umbenannt in Deine Mudda riecht gut! ^^


    Edit:// Weil Schnacke fragte wie man es als Befehl Testen könnte hier:


    public OnPlayerCommandText(playerid, cmdtext[])
    {
    if(!strcmp(cmdtext, "/test", false))
    {
    printf("%s", ReplaceWordInString("Deine Muda stinkt!", "stinkt!", "riecht gut!"));
    return 1;
    }
    return 0;
    }

    So Leute, jetzt wollte ich mal eine Frage stellen ^^


    stock ReplaceWordInString(string[], const findstr[], const repstr[]) //by Templer
    {
    new length = 512, cache[512], pos = strfind(string, findstr, true);
    if(strlen(repstr) != strlen(findstr))
    {
    strmid(cache, string, pos+strlen(findstr), length);
    strdel(string, pos, length);
    strins(string, repstr, pos, length);
    strcat(string, cache, length);
    }
    else
    {
    strdel(string, pos, pos+strlen(findstr));
    strins(string, repstr, pos, length);
    }
    return string;
    }


    Wie man sieht wird cache mit 512 gesetzt. Jedoch ist das unsinnig und nicht so schön und wollte ja eigentlich cache die größe vom string geben, jedoch ergeben bei sizeof oder strlen folgende Fehlermeldung:

    warning 224: indeterminate array size in "sizeof" expression (symbol "")
    Also wie kann ich von diesem string nun die Größe herausfinden ^^


    Hoffe auf ne Antwort, Danke


    Mfg Templer