Beiträge von UncleSub

    Wie werden denn die Fahrzeuge erstellt? Auch unter OnGameModeInit, oder werden sie extern erst geladen und dann erstellt?
    Könnte nämlich sein, dass wenn du die Fahrzeuge in einer Datenbank/Datei hast und dann lädst und erstellst, dass der eine Sultan noch nicht erstellt wurde.


    Mfg,
    UncleSub


    Edit: Das es bei OnVehicleSpawn nicht geht, liegt daran, dass dieses Callback erst aufgerufen wird, wenn ein Fahrzeug REspawnt.

    Füge das oben in dein Script ein:



    #define HOLDING(%0) \
    ((newkeys & (%0)) == (%0))
    #define PRESSED(%0) \
    (((newkeys & (%0)) == (%0)) && ((oldkeys & (%0)) != (%0)))
    #define RELEASED(%0) \
    (((newkeys & (%0)) != (%0)) && ((oldkeys & (%0)) == (%0)))


    Dann musst du machen:


    if(RELEASED(KEY_SECONDARY_ATTACK)


    Weil mit PRESSED wird das irgendwie 2x ausgeführt. (Wahrscheinlich weil das Tasten Anschlagen und Loslassen als zwei Aktionen gewertet werden.)


    Warum du das machen musst? Lies das hier.


    Mfg,
    UncleSub

    Frage: Warum mit Timer arbeiten? Nutzt unnötige Ressourcen.


    Mach, wenn der Spieler sich einloggt eine Abfrage, ob er Wanteds hat, dann erstellst du das Label. Wenn er ein Wanted bekommt änderst du den String des 3dTextLabels mit dieser Funktion. Analog dazu musst du das natürlich auch machen, wenn der Spieler Wanteds verliert (Durch /clear, normaler Wantedverlust durch Timer,...).


    Mfg,
    UncleSub

    Die Variable D_TAXI hat genauso, wie D_NONE den Wert 0. Am besten du schreibst in dein Spieler Informations Enum noch "JobDuty" oder ähnliches. Dann setzt du, wenn der Spieler Job Duty geht die Variable auf einen entsprechenden Wert.
    Außerdem solltest du in der for Schleife noch IsPlayerConnected(i) abfragen, weil der Wert in den Spieler Variablen nach dem Logout erhalten bleiben (Außer du setzt alle Variablen auf 0).


    Mfg,
    UncleSub


    stock GetVehicleInfo(vehicleid, infotype, &Float:x, &Float:y, &Float:z, &Float:angle)
    {
    if(vehicleid == INVALID_VEHICLE_ID) return 0;


    new Float:mX, Float:mY, Float:mZ;


    GetVehicleModelInfo(GetVehicleModel(vehicleid), infotype, mX, mY, mZ);


    z += mZ;


    x += (mY * floatsin(-angle, degrees));
    y += (mY * floatcos(-angle, degrees));


    angle += 270.0;
    x += (mX * floatsin(-angle, degrees));
    y += (mX * floatcos(-angle, degrees));
    angle -= 270.0;
    return 1;
    }


    Bei Infotype einfach das gewünschte eingeben. (z.B. VEHICLE_MODEL_INFO_WHEELSREAR )


    Mfg,
    UncleSub

    Hast schon ne Abfrage, nur dahinter return 1; heißt, dass er normal weitermacht.


    if(PlayerInfo[playerid][pLevel] < 3)
    {
    SendClientMessage(playerid, COLOR_GRAD1, "Du mußt mindestens Level 3 haben um einen Vertrag zu erstellen.");
    return 1;
    }


    Richtig wäre es so:



    if(PlayerInfo[playerid][pLevel] < 3)
    {
    return SendClientMessage(playerid, COLOR_GRAD1, "Du mußt mindestens Level 3 haben um einen Vertrag zu erstellen.");


    }

    EDIT:

    Zitat

    Da das Auslesen mit einer while schleife funktioniert (while(mysql_fetch_row(data)), wird leider das Auslesen unterbrochen, sobald man mit dem Einlesen beginnt (neue Query).


    Einfach nach der while Schleife eine neue Schleife erstellen, die alle Werte updated.


    z.B. In der while Schleife eine Variable hochzählen lassen und dann eine for Schleife basteln:


    for(new i; i < count; i++)


    Darin dann halt immer UPDATE Bla SET Var WHERE bla.


    Mfg

    Du kannst dir auch einen Algorithmus ausdenken, der das "Levelwachstum" beschreibt. Ansonsten müsstest du für jedes Xte Level aufschreiben, wie viele Respektpunkte er braucht.


    Als Beispiel:


    Code
    stock LevelRespektPoints(level)
    {
          return ((2*level)+2);
    }


    Würde z.B. für Level 1 = 4 sein und für Level 2 = 6 usw. Denk dir was aus ;)


    Mfg,
    UncleSub

    Dialog Style DIALOG_STYLE_LIST sollts tun.


    Ein kleines Beispiel:



    #define DIALOG_IPOD
    if (!strcmp(cmdtext, "/ipodan", true))
    {
    ShowPlayerDialog(playerid, DIALOG_IPOD, DIALOG_STYLE_LIST, "iPod - Wähle deinen Sender", "Technobase \n....\n.....", "Auswählen", "Abrrechen");
    }


    //Ondialogresponse
    if(dialogid == DIALOG_IPOD)
    {
    if(response)
    {
    if(listitem == 0)
    {
    /* Dein Code */
    }
    if(listitem == 1)
    {
    /* Dein Code */
    }
    //Und weitere nach belieben
    }
    }


    Mfg,
    UncleSub

    Beantwortet immer noch nicht, ob du vor dem Spawn den Spieler laden lässt. Also hast du bei z.B. OnPlayerConnect die Funktion SpielerLaden(playerid) ausgeführt? Ansonsten ist die Variable leer und es kommt zu Problemen (denke ich).


    Mfg

    Das einzige, was ich mir vorstellen könnte ist, dass du vor dem Spawn nicht die Spieler Daten geladen hast. Sonst könnte es nur mit deiner Spieler Laden Funktion zusammenhängen.


    Guck am besten, ob du auch vor dem Spawn die Daten geladen hast. Ansonsten musst du halt bei deiner Spieler Laden Funktion mal schaun und ggf. hier posten.


    Mfg

    if(vehhealth <= 950 && vehhealth >= 999)


    Auf Duetsch: Wenn vehhealth kleiner oder gleich 950 ist UND vehhealth größer oder gleich 999 ist.


    Ist einfach nie erfüllt. Wann hat ein Auto ein Leben von kleiner 950 und gleichzeitig größer 999?


    Mfg,
    UncleSub

    SpielerSpeichern(playerid);

    new Float:X,Float:Y,Float:Z,Float:A;
    GetPlayerPos(playerid,X,Y,Z);
    GetPlayerFacingAngle(playerid,A);
    PlayerInfo[playerid][pX] = X;
    PlayerInfo[playerid][pY] = Y;
    PlayerInfo[playerid][pZ] = Z;
    PlayerInfo[playerid][pA] = A;


    Wenn du es so hast, wird zuerst die alte Position, die in der Variable pX gespeichert ist in deine Datenbank geschrieben. Danach updatest du aber erst die Werte in pX,...
    Du machst es am besten so:



    GetPlayerPos(playerid,PlayerInfo[playerid][pX],PlayerInfo[playerid][pY],PlayerInfo[playerid][pZ]);
    GetPlayerFacingAngle(playerid,PlayerInfo[playerid][pA]);
    SpielerSpeichern(playerid);


    Sparst sogar noch ein paar Zeilen ;)


    Mfg,
    UncleSub