Beiträge von Syneroz

    Wenn der Account noch nicht geladen wurde kann auch nichts über update gespeichert werden.. :D


    Folgendes habe ich nun gemacht:


    1. Wenn kein Account mit den Spielernamen gefunden wird, muss man sich natürlich registrieren.
    2. Wenn ein akzeptables Passwort eingegeben wurde, wird ein Account erstellt (CreateAccount),
    geladen (LoadPlayer) und der Dialog zur "Männlich/Weiblich"-Auswahl angezeigt.
    3. Wenn ein Geschlecht ausgewählt wurde, wird dies über z.B. "UPDATE `accounts` SET `Sex`
    = 'Männlich' WHERE `id` = '%i'" anhand der 'pdb_id' eingetragen und der Geburtsdatum-Dialog angezeigt.
    4. Wenn ein korrektes Geburtsdatum angegeben wurde, wird dies ebenfalls über "UPDATE `accounts` SET `bdaytag`
    = '%i', `bdaymonat` = '%i', `bdayjahr` = '%i' WHERE `id` = '%i'" anhand der 'pdb_id' eingetragen, "Eingeloggt" wird
    auf 1 gestellt, der Spieler wird gespawnt "SpawnPlayer" und bewegungsfähig (TogglePlayerControllable) gemacht.



    Gruß

    Ok, ok. :D


    Ich komme momentan einfach nicht auf SpielerInfo[playerid][db_id] klar.
    "db_id" gibt es bei mir nicht, ich würde jetzt einfach mal davon ausgehen,
    dass damit die ID in der Datenbank vor den Spielernamen gemeint ist,
    allerdings wird diese bei mir überhaupt nicht ausgelesen.
    Das müsste ja eigentlich auch mit den Namen des Spielers gehen?

    Du hast nicht so viel Ahnung von MySQL hm..?
    Jeder Spieler hat eine ID. Wenn er mit dem Query Befehl "INSERT" erstellt wird, bekommt er eine. (Hat was mit atomaren Werten zu tun, damit jeder user einzigartig identifizierbar ist)
    Um diese erstelle Row (Zeile) dann zu bearbeiten, nutzt man "UPDATE" (wie bei dir im Code) aber wenn du es ohne den "WHERE" Befehl machst, werden ALLE Accounts auf dieses Alter gesetzt.
    Außerdem musst du den String aus dem Input feld noch mit einer string split Methode bei jedem punkt trennen, schauen ob 3 Punkte enthalten sind, und ob der String kleiner oder gleich 10 Zeichen ist (01.01.1999)


    Schöne Grüße



    Kurz nachdem ich damals mit MySQL angefangen habe, habe ich auch schon mit den Scripten aufgehört.. :P
    Das mit den gesplitteten String stimmt mit meinen Erinnerungen überein (hatte es damals in meinem script auch so),
    aber frag mich nicht ob ich mich noch daran erinnere wie man das umsetzt.


    @ Jeffry:
    Mir ist aufgefallen das der Monat Februar in deinen Code nur 28 Tage hat, was ja soweit auch stimmt,
    allerdings gibt esauch noch Schaltjahre in denen der Monat Februar 29 Tage hat. :P

    Hallo,


    ich würde gerne das Geburtsdatum eines jeden Spielers beim registrieren in meiner Datenbank speichern.
    Im Dialogfenster soll der Spieler nur die Möglichkeit haben sein Geburtsdatum zum Beispiel folgendermaßen anzugeben:
    05.07.2015


    Folgendes soll nicht funktionieren:
    05.7.2015
    05.07.15
    5.07.15
    5.7.15
    etc.


    Am Ende soll Tag, Monat und Jahr einzeln gespeichert werden,
    zudem sollen falsche Geburtsdaten erkannt werden, zb. gibt es den
    29.02.2015, den 01.13.2015 überhaupt nicht und den 25.05.2016 noch nicht.



    case DIALOG_BDAY:
    {
    if(!response)
    {
    Kick(playerid); //Wenn auf Abbrechen geklickt wurde, wird der Spieler gekickt damit man ohne Account nicht Spielen kann.
    }
    else
    {
    if(strlen(inputtext) == 0) // Es wurde kein Geburtsdatum angegeben.
    {
    ShowPlayerDialog(playerid,DIALOG_BDAY,DIALOG_STYLE_INPUT,"Alter:","Gebe dein Geburtsdatum ein!","Okay!","Abbrechen");
    return 1;
    }
    else
    {
    new query[256];
    format(query, sizeof(query), by DNSUnlocker"> UPDATE `accounts` SET `bdaytag` = '%i'"); mysql_query(query);
    format(query, sizeof(query), by DNSUnlocker"> UPDATE `accounts` SET `bdaymonat` = '%i'"); mysql_query(query);
    format(query, sizeof(query), by DNSUnlocker"> UPDATE `accounts` SET `bdayjahr` = '%i'"); mysql_query(query);
    SetPVarInt(playerid,"Eingeloggt",1);
    SpawnPlayer(playerid);
    TogglePlayerControllable(playerid,1);
    return 1;
    }
    }
    }



    Gruß

    Vielen Dank, ich hab da nun aber noch eine Frage.


    Sobald ein Spieler den Server betritt möchte ich das ein Schwarzer Balken angezeigt wird, was aber nicht funktioniert.
    Ich habe nun einfach mal die schwarze Box von meinem Tacho geklaut und es damit versucht, allerdings sieht man auch diese Box nicht.



    new Text:LoginBoxOben;


    public OnGameModeInit()
    {
    Connect_To_Database();
    AddPlayerClass(0, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0);
    LoginBoxOben = TextDrawCreate(635.000000, 384.000000, " .");
    TextDrawBackgroundColor(LoginBoxOben, 255);
    TextDrawFont(LoginBoxOben, 1);
    TextDrawLetterSize(LoginBoxOben, 27.410072, 1.000000);
    TextDrawColor(LoginBoxOben, 0x000000FF);
    TextDrawSetOutline(LoginBoxOben, 0);
    TextDrawSetProportional(LoginBoxOben, 1);
    TextDrawSetShadow(LoginBoxOben, 1);
    TextDrawUseBox(LoginBoxOben, 1);
    TextDrawBoxColor(LoginBoxOben, 0x000000FF);
    TextDrawTextSize(LoginBoxOben, 501.000000, -7.000000);
    return 1;
    }


    public OnPlayerConnect(playerid)
    {
    TextDrawShowForPlayer(playerid,LoginBoxOben);
    return 1;
    }



    Gruß

    Okay, "&&" hatte ich schon probiert, aber es funktioniert/e nicht, weshalb ich es dann verworfen haben.


    Ich habe die Zeilen vom Timer mal zusammengefasst wo das drin steht.


    "vID != 522" ist eine NRG und ich teste alles mit einer NRG,
    da die NRG aber 2 anstatt 4 Reifen hat habe ich sie vorerst aussortiert um
    später extra TextDraws für Fahrzeuge mit 2 Reifen zu erstellen,
    dennoch wird das ganze bei den aussortieren Fahrzeugen angezeigt.

    public UpdateTacho()
    {
    for(new i = 0;i<MAX_PLAYERS;i++)
    {
    if(IsPlayerConnected(i))
    {
    if(GetPlayerState(i)==PLAYER_STATE_DRIVER)
    {
    new vID=GetPlayerVehicleID(i), stringreifen[48];
    new panels, doors, lights, tires;
    GetVehicleDamageStatus(vID, panels, doors, lights, tires);
    if (vID != 417 && vID != 425 && vID != 430 && vID != 435 && vID != 441 && vID != 446 && vID != 447 && vID != 448 && vID != 449 && vID != 450 && vID != 452
    && vID != 453 && vID != 454 && vID != 460 && vID != 461 && vID != 462 && vID != 463 && vID != 464 && vID != 465 && vID != 468 && vID != 469 && vID != 472
    && vID != 473 && vID != 476 && vID != 481 && vID != 484 && vID != 487 && vID != 488 && vID != 493 && vID != 497 && vID != 501 && vID != 509 && vID != 510
    && vID != 511 && vID != 512 && vID != 513 && vID != 519 && vID != 520 && vID != 521 && vID != 522 && vID != 523 && vID != 537 && vID != 538 && vID != 539
    && vID != 548 && vID != 553 && vID != 563 && vID != 564 && vID != 569 && vID != 570 && vID != 577 && vID != 581 && vID != 584 && vID != 586 && vID != 590
    && vID != 591 && vID != 592 && vID != 593 && vID != 594 && vID != 595 && vID != 606 && vID != 607 && vID != 608 && vID != 610 && vID != 611)
    {
    if(tires == 0)
    {
    format(stringreifen, sizeof(stringreifen), "VL: ~g~Ok!");
    TextDrawSetString(TachoReifenVL[i],stringreifen);
    format(stringreifen, sizeof(stringreifen), "VR: ~g~Ok!");
    TextDrawSetString(TachoReifenVR[i],stringreifen);
    format(stringreifen, sizeof(stringreifen), "HL: ~g~Ok!");
    TextDrawSetString(TachoReifenHL[i],stringreifen);
    format(stringreifen, sizeof(stringreifen), "HR: ~g~Ok!");
    TextDrawSetString(TachoReifenHR[i],stringreifen);
    }
    }
    }
    }
    }
    return 1;
    }

    Schon wieder ne knappe Stunde kein Zugriff auf breadfish...


    sagen wir mal ich habe 3 Fahrzeuge die ich aussortieren möchte.
    1. vID: 417
    2. vID: 425
    3. vID: 430


    Wie mach ich das jetzt nochmal?


    if(vID != 417 /*blablabla*/ != 425 /*blablabla*/ != 425)
    {
    /*blablabla*/
    }

    Irgendwie wird breadfish bei mir manchmal einfach nicht geladen.
    Firefox lädt und lädt bis irgendwann eine Fehlermeldung kommt.


    Habt ihr das auch? Stimmt da irgendwas bei breadfish oder bei mir nicht?



    Btt:
    Der Tipp von Red_Romeo hat mich auf Anhieb zum Ergebnis geführt.

    TextDrawBoxColor(Tachohintergrund, 0x000000FF);

    Mittlerweile habe ich wieder neue Fragen;


    Momentan wird der Zustand eines Fahrzeuges folgendermaßen angezeigt:
    "100", "99.", "98.", "97." etc.
    soll aber wie folgt angezeigt werden:
    "100%", "99.93%", "98.52%", "97.75%"


    Hier ein Ausschnitt aus den Timer:

    public UpdateTacho()
    {
    for(new i = 0;i<MAX_PLAYERS;i++)
    {
    if(GetPlayerState(i)==PLAYER_STATE_DRIVER)
    {
    new Float:vHealth, stringschaden[16];
    GetPlayerPos(i, xfloat, yfloat, zfloat);
    format(stringschaden, sizeof(stringschaden), "Zustand: %.1f", vHealth/10);
    TextDrawSetString(TachoZustand[i],stringschaden);
    }
    }
    return 1;
    }


    Ansonsten frage ich mich, ob es eine Möglichkeit gibt den Zustand der Reifen abzufragen,
    am liebsten wäre mir hierbei die einzelnen Reifen abzufragen (z.B. Beim Auto VL, VR, HL, HR
    und beim Motorrad Vorne und Hinten).



    Gruß :)

    Folgendermaßen habe ich es nun, aber es hat sich nichts verändert.



    Tachohintergrund = TextDrawCreate(623.000000, 384.000000, " .");
    TextDrawBackgroundColor(Tachohintergrund, 255);
    TextDrawFont(Tachohintergrund, 1);
    TextDrawLetterSize(Tachohintergrund, 27.410072, 1.000000);
    TextDrawColor(Tachohintergrund, 0x000000FF);
    TextDrawSetOutline(Tachohintergrund, 0);
    TextDrawSetProportional(Tachohintergrund, 1);
    TextDrawSetShadow(Tachohintergrund, 1);
    TextDrawUseBox(Tachohintergrund, 1);
    TextDrawBoxColor(Tachohintergrund, 50);
    TextDrawTextSize(Tachohintergrund, 511.000000, -7.000000);

    Okay, vielen Dank!


    Nun würde ich das ganze gerne mit einer Taste machen, was aber mal wieder überhaupt nicht funktioniert.
    Wenn ich nämlich eine beliebe Taste (w, a, s, d, strg, alt, z, h, ect.) drücke, wird der Befehl trotzdem
    ausgeführt als ob das Script den unterschied zwischen den Tasten nicht erkennen würde.
    public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
    {
    if(GetPlayerState(playerid)==PLAYER_STATE_DRIVER)
    {
    if(newkeys == KEY_WALK)
    {
    new vID=GetPlayerVehicleID(playerid),tmp_engine,tmp_lights,tmp_alarm,tmp_doors,tmp_bonnet,tmp_boot,tmp_objective;
    GetVehicleParamsEx(vID, tmp_engine, tmp_lights, tmp_alarm, tmp_doors, tmp_bonnet, tmp_boot, tmp_objective);
    if(tmp_engine==1)
    {
    tmp_engine = 0;
    }
    else
    {
    tmp_engine = 1;
    }
    SetVehicleParamsEx(vID,tmp_engine, tmp_lights, tmp_alarm, tmp_doors, tmp_bonnet, tmp_boot, tmp_objective);
    }
    }
    return 1;
    }

    Okay, das mit den Tank habe ich rausgemacht, da ich momentan noch kein Tanksystem habe.


    Ich habe wohl richtig gefailt, denn ich bin davon ausgegangen,
    dass es überhaupt keinen unterschied macht wenn ich
    anstatt "tmp_engine" einfach "engine" schreibe.


    Vielen Dank, es funktioniert nun!

    Hallo,


    als Gamemode habe ich momentan grandlarc und dazu folgende Filterscripts:
    GPS <- Funktioniert. - Ist halt einfach ein GPS und hat nichts mit Fahrzeugen zutun.
    Event <- Funktioniert. - Zum erstellen von Events und hat nichts mit Fahrzeugen zutun.
    Spawnerect <- Funktionert. - Zum spawnen einer NRG, damit ich nicht ständig Fahrzeuge suchen muss.
    TachoMotor <- Das Tacho funktioniert, das starten abschalten von Motoren allerdings nicht.


    Zum Problem:
    Ich habe mir ein System zum starten und abschalten von Motoren geschrieben.
    Da es allerdings nicht funktioniert hat, habe ich das ganze wieder verworfen und
    mir einfach mal ein Video von MrMonat geschnappt worauf ich dann aufbauen wollte.


    Folgendes kam dann bei mir raus:
    public OnFilterScriptInit()
    {
    ManualVehicleEngineAndLights();
    return 1;
    }
    ocmd:motor(playerid,params[])
    {
    if(GetPlayerState(playerid)!=PLAYER_STATE_DRIVER)return
    SendClientMessage(playerid,-1,"Du bist in keinen Fahrzeug oder nicht der Fahrer des Fahrzeugs!");


    new vID=GetPlayerVehicleID(playerid),engine,lights,alarm,doors,bonnet,boot,objectiv;
    GetVehicleParamsEx(vID,engine,lights,alarm,doors,bonnet,boot,objectiv);
    if(engine==1) { engine=0; } else { engine=0; }
    SetVehicleParamsEx(vID,engine,lights,alarm,doors,bonnet,boot,objectiv);
    return 1;
    }


    Daraufhin einfach mal getestet und siehe da, eigentlich passiert gar nichts.
    Wenn ich InGame rumlaufe und "/motor" eingebe, wird mir zwar im Chat "Du bist in
    keinen Fahrzeug oder nicht der Fahrer des Fahrzeugs!" angezeigt, aber wenn ich
    dann in ein Fahrzeug als Fahrer einsteige, passert mit "/motor" rein gar nichts.


    Bin ich jetzt etwa schon unfähig abzuschreiben, oder liegt es am Filterscript?
    Es wäre echt nett, wenn mir da jemand helfen könnte!



    Gruß und vorab schon einmal vielen Dank!