Beiträge von Jeffry

    drop[i][wd_ID] = CreatePickup(384,1,x,y,z,0);
    zu:
    drop[i][wd_ID] = CreatePickup(384,1,x,y,z,0);
    break;


    Sonst erstellt es dir alle Pickups am gleichen Platz auf einmal.

    Laut dem Wiki können im Text nicht mehr als 4096 Zeichen angezeigt werden, daher brauchst du das auch nicht höher machen.
    Versuche es, indem du das ShowPlayerDialog aus der Schleife nimmst, das darf nicht da drin sein:
    if(strcmp(cmd, "/häuser", true) == 0)
    {
    new str[4096];
    if(IsPlayerConnected(playerid))
    {
    if(PlayerInfo[playerid][pAdmin] >= 9)
    {
    if(AdminDuty[playerid] == 1)
    {
    for(new i = 0; i < sizeof(HouseInfo); i++)
    {
    format(str, sizeof(str), "%s{00FF00}%s {FFFF00}Hausnummer: {00FF00}%d {FFFF00}Besitzer: {00FF00}%s {FFFF00}Level: {00FF00}%d\n",str,HouseInfo[i][hDiscription],i,HouseInfo[i][hOwner],HouseInfo[i][hLevel]);
    }
    ShowPlayerDialog(playerid, INFODIALOG, DIALOG_STYLE_MSGBOX, "{FFFF00}Alle Häuser", str, "{FFFF00}Ok ","");
    }
    else
    {
    SendClientMessage(playerid, TEAM_BLUE_COLOR,"Du bist nicht im Admindienst");
    }
    }
    }
    return 1;
    }


    Allerdings musst du bedenken, dass der MSGBOX Dialog keine 200 Zeilen haben kann (kann er schon, wird dann aber oben und unten über den Bildschirm raus gehen). Da musst du gegebenenfalls mit einer zweiten Seite arbeiten, oder mit einer LIST.

    Wieso hast du bei dem ersten case 0: nicht case 0..3: gemacht? Weil es ja von 0 bis 3 geht so wie unten auch, oder nicht?

    Nein, denn 10% sind eine Zahl aus 10 (random) Zahlen. Daher nur 0. Und unten die 90% sind 1 bis 9 = 9 Zahlen aus 10 = 90%.


    Zwecks dem playerid: Lass das dran, du musst ja bei den case's noch etwas einfügen, was die playerid betrifft (Geld geben oder so).




    @JohnsonC
    if(SpielerInfo[playerid][Deaths] > 0) KD[playerid] = floatdiv(SpielerInfo[playerid][Kills],SpielerInfo[playerid][Deaths]);
    else KD[playerid] = 0.0;

    Die Chance dass genau ein Event zutrifft ist immer 100 / die Zahl im random.
    In dem Fall also 100 / 3 = 33.3%


    Das +1 heißt, dass nicht zwischen 0,1,2 ausgesucht wird, sondern zwischen 1,2,3, wie du es bei deinem switch angegeben hattest.

    Ah, verstehe. Das liegt daran, dass OnVehicleSpawn beim Erstellen nicht aufgerufen wird. Du müsstest es beim Erstellen so machen:
    forward OnPlayerVehiclesLoad(playerid);
    public OnPlayerVehiclesLoad(playerid)
    {
    new num_fields, num_rows, engine, lights, alarm, doors, bonnet, boot, objective;
    cache_get_data(num_rows, num_fields, handle);
    if(!num_rows)return 1;
    for(new i=0; i < num_rows; i++)
    {
    VehicleInfo[i][v_Besitzer] = cache_get_field_content_int(i, "besitzer", handle);
    VehicleInfo[i][v_Model] = cache_get_field_content_int(i, "model", handle);
    VehicleInfo[i][v_Color1] = cache_get_field_content_int(i, "color1", handle);
    VehicleInfo[i][v_Color2] = cache_get_field_content_int(i, "color2", handle);
    VehicleInfo[i][v_X] = cache_get_field_content_float(i, "x", handle);
    VehicleInfo[i][v_Y] = cache_get_field_content_float(i, "y", handle);
    VehicleInfo[i][v_Z] = cache_get_field_content_float(i, "z", handle);
    VehicleInfo[i][v_R] = cache_get_field_content_float(i, "r", handle);
    VehicleInfo[i][v_Schloss] = bool:cache_get_field_content_int(i, "schloss", handle);
    VehicleInfo[i][v_ID] = cache_get_field_content_int(i, "id", handle);
    printf("Schloss: %d", VehicleInfo[i][v_Schloss]);
    if(VehicleInfo[i][v_Model] >= 400 && VehicleInfo[i][v_Model] <= 611)
    {
    VehicleInfo[i][v_DLID] = CreateVehicle(VehicleInfo[i][v_Model], VehicleInfo[i][v_X], VehicleInfo [i][v_Y], VehicleInfo[i][v_Z], VehicleInfo[i][v_R], VehicleInfo[i][v_Color1], VehicleInfo[i][v_Color2], -1, 0);
    GetVehicleParamsEx(VehicleInfo[i][v_DLID], engine, lights, alarm, doors, bonnet, boot, objective);
    doors = 1; // Türen werden geschlossen
    SetVehicleParamsEx(VehicleInfo[i][v_DLID], engine, lights, alarm, doors, bonnet, boot, objective);
    }
    else
    {
    printf("[FEHLER] Fahrzeug-Model %d existiert nicht (DB-ID: %d).", VehicleInfo[i][v_Model], i);
    }
    }
    return 1;
    }

    Wie schaut es mit der Performance aus wenn sagen wir mal 50 Leute zur selben Zeit ein Geschenk aufheben. Heißt doch es werden 50 Timer gestartet oder?

    Das stimmt, aber das wird mit ziemlicher Sicherheit kein Problem darstellen.



    Das Objekt wird gelöscht und später wieder erstellt, aber man erhält immer noch ein Geschenk wenn man an der selben Position den Befehl zum aufheben eingibt.

    Stimmt! Im Befehl muss noch eine Abfrage hinzugefügt werden, also so:
    CMD:takegift(playerid)
    {
    for(new i = 0; i < MaxGifts; i++)
    {
    if(GiftBox[i][e_x] == 0.0 && GiftBox[i][e_y] == 0.0 && GiftBox[i][e_z] == 0.0) continue;
    if(GiftBox[i][e_oID] == -1) continue;
    if(IsPlayerInRangeOfPoint(playerid, 2.0, GiftBox[i][e_x], GiftBox[i][e_y], GiftBox[i][e_z]))
    {
    RandomGift(playerid);
    DestroyDynamicObject(GiftBox[i][e_oID]);
    DestroyDynamic3DTextLabel (GiftBox[i][e_label] );
    GiftBox[i][e_oID] = -1;
    return 1;
    }
    }
    return 1;
    }

    Das wird nicht möglich sein, da keiner weiß, was in der Datenbank steht. Außer es findet sich jemand, der den gleichen Code nutzt.
    Am besten du kontaktierst den Ersteller des Codes, der kann dir sicher sagen, wie die Tabelle aufgebaut sein muss, und welche Daten sie beinhalten muss.


    Gegebenenfalls befindet sie sich auch im Download Paket.