Beiträge von Jeffry

    format(string, sizeof(string), "UPDATE `businesse` SET `bowner` = '%s' WHERE `bid` = '%i'", BizzInfo[h][bOwner], h);
    zu:
    format(string, sizeof(string), "UPDATE `businesse` SET `bowner` = '%s' WHERE `bid` = '%i'", BizzInfo[h][bOwner], BizzInfo[h][bID]);


    Das gleiche beim Verkauf.

    Ok, dann ist es genau das was ich vermutet habe. doors = 1 = locked


    Nutze diese Funktion:
    stock FixDoors(vehicleid)
    {
    for(new i = 1; i < sizeof(fvInfo); i++)
    {
    if(vehicleid == fvInfo[i][fvCar])
    {
    for(new p=0; p<MAX_PLAYERS; p++)
    {
    if(!IsPlayerConnected(p)) continueM
    if(fvInfo[i][fvAbgeschlossen] == 1)
    {
    if(fvInfo[i][fvfrakid] == sInfo[p][pFraktion])
    {
    SetVehicleParamsForPlayer(fvInfo[i][fvCar],p,0,0);
    }
    else
    {
    SetVehicleParamsForPlayer(fvInfo[i][fvCar],p,0,1);
    }
    }
    else if(fvInfo[i][fvAbgeschlossen] == 0)
    {
    SetVehicleParamsForPlayer(fvInfo[i][fvCar],p,0,0);
    }
    }
    return 1;
    }
    }
    return 1;
    }


    Und füge im Befehl, jeweils nach dem SetVehicleParamsEx
    FixDoors(vID);
    ein.

    Dann hast du es nicht richtig gemacht.
    Versuche es nochmal. Achte darauf, nicht den Code über die Datei zu öffnen, sondern über /pawno/pawno.exe -> Öffnen -> Datei auswählen.


    Die Include und das Plugin müssen die selbe Version haben.

    Bei UpdateBizz:


    format(query, sizeof(query),
    "UPDATE `businesse` SET bowned = %i,bbx = %.3f,bby = %.3f,bbz = %.3f,blevel = %i,bpreis = %i,btill = %i,bproducts = %i,bmaxproducts = %i,bpriceprod = %i,bkasse = %i,bprods = %i WHERE `bid` = %d",
    BizzInfo[h][bOwned],BizzInfo[h][bEntranceX],BizzInfo[h][bEntranceY],BizzInfo[h][bEntranceZ],BizzInfo[h][bLevelNeeded],BizzInfo[h][bBuyPrice],BizzInfo[h][bTill],BizzInfo[h][bProducts],BizzInfo[h][bMaxProducts],BizzInfo[h][bPriceProd],BizzInfo[h][bKasse],BizzInfo[h][bProds],h);
    zu:
    format(query, sizeof(query),
    "UPDATE `businesse` SET bowned = %i,bbx = %.3f,bby = %.3f,bbz = %.3f,blevel = %i,bpreis = %i,btill = %i,bproducts = %i,bmaxproducts = %i,bpriceprod = %i,bkasse = %i,bprods = %i WHERE `bid` = %d",
    BizzInfo[h][bOwned],BizzInfo[h][bEntranceX],BizzInfo[h][bEntranceY],BizzInfo[h][bEntranceZ],BizzInfo[h][bLevelNeeded],BizzInfo[h][bBuyPrice],BizzInfo[h][bTill],BizzInfo[h][bProducts],BizzInfo[h][bMaxProducts],BizzInfo[h][bPriceProd],BizzInfo[h][bKasse],BizzInfo[h][bProds],BizzInfo[h][bID]);

    new query[768];
    for(new i=0; i<39; i++) format(SpielerInfo[playerid][pSkins], 313, "%s00000000", SpielerInfo[playerid][pSkins]);
    SpielerInfo[playerid][pSkins][303] = '1';
    SpielerInfo[playerid][pSkins][304] = '1';
    SpielerInfo[playerid][pSkins][305] = '1';
    mysql_format(handle, query, sizeof(query), "INSERT INTO accounts (Name, Passwort, Skins) VALUES ('%e', MD5('%e'), '%e')", SpielerInfo[playerid][pName], inputtext, SpielerInfo[playerid][pSkins]);
    mysql_pquery(handle, query, "CreateAccount", "d", playerid);

    Die Farbe muss hier - nicht wie bei Textdraws - in ARGB angegeben werden. Bei Textdraws ist es RGBA.
    Daher ist bei dir A = 00 = Transparent.


    0x00FF00FF
    zu:
    0xFF00FF00


    (0x00FF00FF -> 0xFF00FF00)

    Das return 1 muss aus der Schleife raus.


    if((TakingLesson[playerid] == 1) || IsPlayerNPC(playerid))
    {

    }
    else
    {
    SendClientMessage(playerid, COLOR_GREY, "Du hast noch keinen Führerschein!");
    new sendername[MAX_PLAYER_NAME];
    GetPlayerName(playerid, sendername, sizeof(sendername));
    format(oschein, sizeof(oschein), "HQ: VORSICHT %s faehrt ohne Fuehrerschein Auto", sendername);
    for(new i=0; i<MAX_PLAYERS; i++)
    {
    if(IsACop(i) && IsPlayerConnected(i))
    {
    SendClientMessage(i, COLOR_RED, oschein);
    }
    }
    return 1;
    }
    }

    Dann mach
    for(new i=0; i<MAX_PLAYERS; i++) if(Iter_Contains(DM, i)) Count++;
    zu:
    for(new i=0; i<MAX_PLAYERS; i++) if(IsPlayerConnected(i) && !IsPlayerNPC(i) && Iter_Contains(DM, i)) Count++;


    Dann sollte es passen.

    So:


    public OnPlayerSpawn(playerid)
    {
    printf("OnPlayerSpawn: %d", playerid);
    PreloadPlayerAnims(playerid);
    SetPlayerSkin(playerid,sInfo[playerid][sSkin]);
    printf("sIsDeath: %d", sInfo[playerid][sIsDeath]);
    if(sInfo[playerid][sIsDeath] == 1)
    {
    printf("ok");
    ClearAnimations(playerid);
    SetPlayerVirtualWorld(playerid, sInfo[playerid][sDeathWorld]);
    SetPlayerInterior(playerid, sInfo[playerid][sDeathInterior]);
    SetPlayerPos(playerid, sInfo[playerid][sDeathPosX], sInfo[playerid][sDeathPosY], sInfo[playerid][sDeathPosZ]);
    ApplyAnimation(playerid, "CRACK", "crckdeth2", 4.0, 0, 0, 0, 0, 0);
    SetTimerEx("StartDeathAnim", 500, false, "i", playerid);
    SetTimerEx("DeathTimer", 1000*60*2, false, "i", playerid);
    TogglePlayerControllable(playerid,1);
    return 1;
    }
    return 1;
    }


    forward StartDeathAnim(playerid);
    public StartDeathAnim(playerid)
    {
    ApplyAnimation(playerid, "CRACK", "crckdeth2", 4.0, 0, 0, 0, 0, 0);
    return 1;
    }

    Der X Wert ist die Position PLUS die Größe des nach rechts anklickbaren Bereiches. Der Y Wert ist die geschätzte Höhe.


    Angenommen du erstellst dein Textdraw bei X = 120 und Y = 90. Dann machst du den Text "Hallo Welt" da rein. Sagen wir, der Text ist so groß, dass er in etwa über ein Zehntel deines Bildschirmes geht (musst du abschätzen, oder mit einem Lineal abmessen), dann heißt das 640 durch 10, das wäre 64. Somit ist PlayerTextDrawTextSize-X = 120 + 64 = 184.
    Nun misst, bzw. schätzt, du die Höhe des Textdraws, sagen wir mal du bekommst den Text in etwa 20 mal untereinander hin, bis dein Bildschirm von oben nach unten voll damit wäre. Heißt also: 480 durch 20, das gibt 24. Somit wäre PlayerTextDrawTextSize-Y = 24.

    Siehst du diese Meldung, wenn du in den ersten Checkpoint fährst?
    SendClientMessage(playerid,COLOR_WHITE, "{E8FF60}Fahrschul Schritt ({FF0000}1{E8FF60})");


    Wenn nicht, poste bitte dein ganzes OnPlayerEnterCheckpoint public.

    Ich kenne die Funktionen zwar nicht, aber dem Anschein nach dürfte es so passen:
    forward RoundCheck();
    public RoundCheck()
    {
    new Count;
    for(new i=0; i<MAX_PLAYERS; i++) if(Iter_Contains(DM, i)) Count++;
    if(Count == 1)
    {
    //Beenden
    }
    else
    {
    new str[20];
    format(str, sizeof(str), "Alive: %d", Count);
    TextDrawSetString(...);
    }
    return 1;
    }

    Lass dir den doors-Status mal ausgeben, vielleicht kommt er durch SetVehicleParamsForPlayer durcheinander.
    GetVehicleParamsEx(vID,engine,lights,alarm,doors,bonnet,boot,objective);
    printf("doors: %d", doors);


    Was steht dann im Server Log, wenn du den Motor an machst, als Member, und dann das Fahrzeug verlässt und wieder einsteigen willst, was nicht geht.