Beiträge von IPrototypeI


    ich hoffe du weisst das dies floats sind daher bringt es nix wenn die tabellen einstellung entweder falsch sind , wenn du MySQL benutzt oder bei dini oder osnst einem filesystem das als integer speicherst.


    Mir ist auch aufgefallen das das ganze nur ab und zu(selten) macht mit dem .999... nach dem Koma.


    Zum dritten Thema ich habs dir schon zwei mal erklärt , da wird dir wohl selbst die lösung einfallen(wenn nicht dann denk ehrlich mal daran damit aufzuhören)
    %05.2f | %05d | %.2f


    und zu deiner vierten frage kannst du das nochmal erklären ich kan mir darunter nix vorstellen was du genau meinst.
    screens würden vllt helfen als auch eine bessere erklärung

    @IPrototypeI



    Ich möchte das so haben, das wenn sich der Spieler Registriert ein Dialog kommt. Dort gibt er dann sein Geburtsdatum ein Beispiel: 18.04.1994. Das Solllte dann Gespeichert werden. Also das Geburtsdatum und das Alter was aus dem Datum raus kommt. In diesem Fall 18 Jahre.


    ok ^^ wenn das nur so ist dann schau im bereich codeschnipsel mal nach das datum speicherst du am besten als string und das Alter als integer


    jetzt habe ich extra schon eine Code geschrieben


    stock unixtime(year, month, day){
    return printf("%d",((60 * 60 * 24 *365 * year)+(60 * 60 * 24 * 30*month)+(60 * 60 * 24 * day)));
    }


    Jedoch wenn dies so ist dan kannst du ja die funktion benutzen


    siehe
    http://forum.sa-mp.de/san-andr…Ctzliche-codeschnipsel-40


    mit beispiel command wo du dir das auch anschauen kannst.
    beim abfragen würde ich es so machen also du willst ja auch die richtigkeit des datum überprüfen daher
    new alter = GetAge(string);
    if(alter == 0){
    ShowPlayerDialog(playerid...
    return SendClientMessage(playerid,-1,"Das Datum war Falsch");
    }


    sollte es richtig sein so speicherst du das alter einfach in einer variabel oder direkt schon in der datenbank.


    Ps: Zu dem Tutorial ich würde mich daran nicht fest machen. Da die Verwendung in der hinsicht auf die Schnelligkeit katastrophal ist und eigentlich nur
    zum kleinen einstieg ist.
    Lenr besser entweder mit dem R7 Plugin umzugehen was am besten ist oder mit dem von Strickenkid( mit sscanf auslesen, Multithreadet).

    Kann mir da echt Niemand bei Helfen? :S


    kommt an wie du das genau machen willst du kannst das ganze als string speichern und das alter als integer dazu brauchst du nur in den codeschnipsel bereich zu schauen
    da gibts es zwei varianten einmal von mir und einmal von Hauke.


    Oder willst du das alles per mysql machen dies geht auch
    siehe
    http://dev.mysql.com/doc/refma…e/datum-calculations.html


    und zum eintragen na gut da würde mir nur eins einfallen aus dem eingegeben datum den timestamp errechnen und den eintragen
    oder dem nach das format jedoch weiß ich selbst nicht wie dies geht musst mal googeln


    Das was du suchst nennt man SetObjectMaterialText damit kannst du ein Text auf einem Objekt anbringen.
    Wie man die Schrift farbig macht ist schon in dem Link enthalten welchen ich dir noch dazu gepostet habe.
    Um einzelne Buchstaben zu Färben benutzt man hexfarbcodes. Zu dem kann man auch für den ganzen text also die font die Farbe festlegen dazu hat es ein parameter im Syntax von SetObjectMaterialText


    http://wiki.sa-mp.com/wiki/SetObjectMaterialText


    Nun zum Anbringen von Texten an den Autos dazu benutzt man auch SetObjectMaterialText nur nicht vergessen beim parameter background also hintergrund dies auzulassen oder 0 zu benutzen um diesen transparent zu machen und danach das objekt mit AttachObjectToVehicle
    an das auto bringen
    http://wiki.sa-mp.com/wiki/AttachObjectToVehicle

    ich meinte eig. diese variable :
    SpielerInfo[playerid][pTut]
    wo setzt du sie? Ich sehe dort geht die auf 2, was dann? Damit dein Code oben ausgeführt werden kann muss diese aber auf 0 gesetzt werden ?
    Wo setzt du also deine variable SpielerInfo[playerid][pTut] auf 0 post ma code wenn du hast ^^


    er muss es nichtmal bewusst auf 0 setzen es kann auch sein das dies entweder nicht gespeichert wird oder ausgelesen wird

    iRFT
    ich denk das sollte von ihm nur ein beispiel sein


    Zitat

    es gibt 4 Orte auf der Map die werden alle 60 min geändert und die Objecte sind gleich und angenommen 99 Stück.


    er hat es schon verstanden davon geh ich mal aus



    new D[99];
    new C[99];
    new B[99];
    new A[99];


    kann man noch vereinfachen
    beispiel:
    new A[99][4];


    jedoch benutz nur so eine große array die du auch benötigst wenn du nur 10 Objekte hast dann benutze nur 10 Zellen
    da kannst auch ein define machen wenn du willst
    #define SCHM_O 10
    new A[SCHM_O ];

    mit dem löschen geht das nicht so wie du willst du kannst nur einer variabel ein wert zuweisen.


    daher für drei objekte ( benutze wenn es sich anbietet immer ein array da dies ressourcen spart im gegensatz zum neu deklarieren von variabeln)


    objekt[3];

    objekt[0] = createObject(blablabla);
    objekt[1] = createObject(blablabla);
    objekt[2] = createObject(blablabla);


    und um alle zu löschen benutzt man eine schleife(loop). sizeof gibt den wert von objekt[] wieder also wie viele werte das array beinhaltet also hier 3.


    for(new i; i < sizeof(objekt); ++i)DestroyObject(objekt[i]);


    zum Thema setzen der Objekte woher nimmst du die zufäälige position aus einem array oder auch aus der ini weil dann könntest du die werte davon nehmen
    und jeweilige werte hinzurechnen
    Bsp:


    objekt[0] = createObject(1337,X,Y+5.0,Z, ......................);
    objekt[1] = createObject(1337,X,Y-5.0,Z, ......................);
    objekt[2] = createObject(1337,X+5,Y.0,Z, ......................);

    also ich seh jetzt hier nicht wirklich ein Fehler außer das du hier statt 300 500 stehen hast das ist dir ja bestimmt selbst bewusst
    du kannst einfach mal das leben ausgeben mit printf und noch was es empfiehlt sich nicht wirklich für jeden Spieler ein Timer zu erstellen( Ressourcen) daher
    benutzt doch einen Timer .

    das liegt an pTut was ja beim beenden des tutorials auf 1 gesetzt und ja auch bei dir abgefragt wird.
    du kannst ja mal in die account ini schauen ob der wert auf 1ist und beim laden auch kein fehler auftritt daher mal zwischen printen mit printf

    in dem fall kannst du bei deiner for schleife ein return 1
    verwenden. da dieses sollte die bedingung stimmen nach dem setzen des neuen checkpoints den code abbricht
    so kannst du ohne probleme dein disablecheckpoint
    ausserhalb der schleife setzen

    Klar geht es, ein Server hatte soger Laser die geschossen haben.


    Nimm einfach ein Beispiel von dem Filterscript namens Raketenwerfer :)


    gehen würde es keine frage , jedoch im endeffekt ist das ergebnis nicht gerade das beste. Zum Thema zu den Raketen sowas ist einfach, da dabei explosionen einfach erstellt werden die ziehen dem umfeld automatisch leben ab. Daher muss man wenn man sowas macht eine schleife erstellt wo man die positionen der personen und autos ermittelt
    und die müssen danach noch vergleicht werden ob diese mit der schussbahn übereinstimmen in einer koordinate.


    Sowas gibt es schon und zwar auf einem Panzer


    http://forum.sa-mp.com/showthread.php?t=280678

    ich hatte dir es doch in der pn geraten das mit floats zu machen :D warum hast du das nicht gemacht das wäre so simpel gewesen


    hahaha Simpel vllt. für einen wie dich nur das sah so kompliziert aus... XD


    PS: Habs mal rein gehauen und es geht, iin der console schreibt er einmal 70.0 und danach 70.00000 und wenn ich show mache dann halt 00000.70^^ ich werde es mir aber mal morgen in ruhe angucken und gegebenenfalls übers WE da ich da weg bin und zeit habe^^ wenn ich wieder oder immernoch ein problem habe sag ich bescheid^^


    Also ich check jetzt nicht wirklich wo da der fehler sein sollte



    also es geht ohne probleme nur mogelt er ein bissle beim unkonvertieren vom string zur float.
    das er aus 11.00
    10.99 macht
    aber der grund wieso ich es zum string konvertiere ist das ich das typische format habe mit zwei dezimalen.
    weil so kannst du so viele zahlen wie du willst hinter dem koma eingeben es wird dennoch nur die zwei dezimale genommen.

    Klingt irgendwie Logisch(Vom sehen her xD) aber ich verstehe es nicht :(


    Naja wenn ich geld gebe durch irgendwas, dann ist vllt. 120 Cent oder so vorhanden und dann lasse ich - 100 rechnen sodass er nur noch 20 cent hat und 1 euro mehr^^


    ich hatte dir es doch in der pn geraten das mit floats zu machen :D warum hast du das nicht gemacht das wäre so simpel gewesen



    new Float:Geld;
    ocmd:geld(playerid,params[])
    {
    new Float:fMyFloat,string2[30];
    if(sscanf(params,"f",fMyFloat))return SendClientMessage(playerid,-1,"Benutzung: /geld [betrag]");
    format(string2,64,"%.2f",fMyFloat);
    printf("%s",string2);
    new Float:fMyFloat2 = floatstr(string2);
    printf("%f",fMyFloat2);
    Geld += fMyFloat2;
    return 1;
    }
    ocmd:show(playerid)
    {
    new string[64];
    format(string,64,"Den Geld ist %05.2f",Geld);
    SendClientMessage(playerid,-1,string);
    return 1;
    }


    ein kleines bespiel kannst ja mal testen


    //edit
    das mit dem Format-Operator für Ausgaben ist sehr simpel es werden dabei so gesehen plätze frei gehalten bei %03d werden drei plätze freigehalten
    also steht im textdraw 000 solltest du %06d verwenden enthält deine ausgabe 6 Nullen so fern wie der wert der variabel auch 0 ist daher
    000000 . Sagen wir der Wert der Variabel hat den wert 125 so wird dies so angegeben 000125. Hat die Variabel den Wert von 12 999 111
    so wird dies so dargestellt 12999111 die nullen sind nicht mehr sichtbar da sie den platz freigehalten haben für einen wert reduziert sich der wert auf
    99 111 so wird es so dargestellt 099111 also wie man sehen kann sind 6 Werte schon "vorgegeben", welche jeweils gefüllt werden. Nun verstanden?

    mit zum beispiel
    %06d 6 Platzhalter erstellen 000000 sollte der wert 1 sein so wird er so angezeigt 000001


    zum zweiten fehler kannst du die cents durch 10 teilen zum beispiel wenn dies auch bei 1 cent vor kommt


    warum so umständlich mach doch ein stunden timer und veränder danach die Zahl random.
    Also eine Zahl aus 23 und diese mit 1 addieren
    da bei random(24) alle Zahlen von 0 - 24 eingeschlossen sind.

    was willst du genau machen ?


    ________________________
    Grundsätzlich kannst du die daten auslesen und diese temporär in einer normalen Variabel oder Spielervariabel ( PVars) speichern und danach erhöhen.


    Mit temporär ist eigentlich nur das auslesen gemeint die variabeln haben nicht immer diesen wert da diese nach einem server restart verworfen sind.

    Trotzdem wie oben genannt wendest du GetPlayerVehicleID falsch an , aber das tut erstmal nix zum Thema.


    Ich hoffe dir ist bewusst , so sieht es zumindestens für mich aus das jeder spieler ein fahrzeug hat das seiner id zugeordnet ist das ganze läuft also über den
    spieler. Wenn "das Auto gesperrt ist" kann natürlich der Spieler kein Auto mehr fahren wie schon oben genannt die variabel existiert für dne Spieler
    nicht individuell für das auto (Die Autoid ).


    Daher veränder den wert für das Auto also der zugeordneten Autoid.