Beiträge von Kaliber

    Okay, dann hier mal meine Idee ^^


    Wir nutzen einfach hier die Reihenfolge im Enum aus :)



    Wichtig hier, sorg nun dafür, dass BagApple immer das oberste Item ist und alle anderen Items hänge einfach unten dran. So wie man es normal auch tun würde.


    Dann kannste es nämlich einfach so machen:


    C
    stock AddItem(playerid, x, dtc_PlayerCar:item, amount)
    {
        PlayerCar[playerid][x][item] += amount;
        PlayerCar[playerid][x][item] += ItemSpace[item-BagApple];
    }


    Nutzung dann einfach so:



    C
    AddItem(playerid,veh,BagApple,10); //Gibt 10 Äpfel z.B.

    Also, man kann das so machen, wie Jeffry das gezeigt hat.
    Das wäre denke ich mal einer der einfachsten Wege.



    Man kann das aber auch elegant in O(1) lösen, ohne Strings zu vergleichen.

    Will das nur mal demonstrieren, allerdings müsste ich dafür noch wissen, wozu du das als String deklariert hast im enum?!


    Was soll das, was hat das für einen Sinn? Du willst doch dafür nur sagen, wie viel Raum das einnimmt und das ja immer ein int und kein String ^^

    Das geht nicht :)


    Aber muss es ja auch nicht, wieso willst du da unbedingt einen String wert benutzen?


    Nutz doch einfach direkt BagApple oder mach ein Makro/Enum und Mapp den wert auf z.B. ITEM_APPLE oder sowas :)

    Ich hoffe ihr könnt mir bei den letzen fehlern helfen danke im Vorraus!

    Du weißt, dass es ein Wiki gibt mit Beispielen, wie man die Funktionen nutzt oder? :D


    Hier mal als Beispiel: http://wiki.sa-mp.com/wiki/MyS…#cache_get_value_name_int


    C
    //Sprich so machen:
    new EintragID, Money;
    cache_get_value_name_int(i,"SQLid", EintragID); //39455
    cache_get_value_name_int(i,"Money", Money); //39456

    Und mysql_num_rows gibts nicht mehr, das heißt jetzt: cache_num_rows() :)

    Viel zu viele Schleifen überall :D


    Und du solltest keine Variablen in Schleifen deklarieren :)


    Hier, mal etwas effizienter:


    C
    //OnPlayerConnect
    new text[MAX_PLAYER_NAME + 35];
    format(text,sizeof(text),"%s [ID: %d] hat den Server betreten",PlayerName(playerid),playerid);
    for(new i; i<MAX_PLAYERS; i++)
    {
        if(IsPlayerConnected(i) && PlayerInfo[i][togeinlogg] == 1) SendClientMessage(i,COLOR_RED,text);
    }



    C
    //OnPlayerDisconnect
    new text[MAX_PLAYER_NAME + MAX_ZONE_NAME + 35];
    GetPlayer2DZone(playerid, text, MAX_ZONE_NAME);
    format(text,sizeof(text),"%s [ID: %d] hat den Server in %s verlassen",PlayerName(playerid),playerid,text);
    for(new i; i<MAX_PLAYERS; i++)
    {
        if(IsPlayerConnected(i) && PlayerInfo[i][togeinlogg] == 1) SendClientMessage(i,COLOR_RED,text);
    }

    Okay, das ist ein bekannter Bug ;)


    Der Boden verschwindet nämlich, wenn du im Interior bist und dann fallen die Autos unter die Map und werden dann einfach random wieder hingestellt :D


    Die einfachste Möglichkeit ist es mit CreateObject ein größeres Objekt direkt unter die Grove Street zu packen, damit da nix runter fällt ;)

    Ja, wie du siehst ObjectSlotsUsed ist bei 999.


    Sprich du lädst zu viele Objekte :)


    Falls du irgendwo CreateObject nutzt, solltest du überlegen es auf CreateDynamicObject zu ändern, andernfalls ummappen könnte helfen oder die DrawDistance von kleineren Objekten umsetzen (das aber ne ganz schöne fuddel Arbeit)...


    :)

    Das bezieht sich ja nur auf CreateObject und generell kann man das für einzelne Objekte ja umstellen :D


    Egal, wie dem auch sei, drück doch einfach mal F5 wenn du da hin gehst zu deinen Objekten und schau wie viele Slots voll sind, dann weißt du es, woran es liegt :)

    Wieviele Objekte dürfen an einen Ort sein?

    Das kommt darauf an, es sind nur 1000 möglich an einem Ort.


    Allerdings, wenn du viel CreateObject nutzt, sind natürlich viel weniger an einem Ort möglich, da diese Slots verbraucht sind.


    In diesem Sinne, behalte das im Hinterkopf.


    Es kann aber auch gut sein, dass die Draw/Streamdistance einfach bescheiden eingestellt ist :)

    Ich weiß das es auf einigen Server vorhanden ist, deswegen frag ich.

    Du könntest prüfen ob KEY_CTRL_BACK unter OnPlayerKeyStateChange gedrückt wurde (das ist die H Taste) und ihn dann ins Fahrzeug mit [wiki]PutPlayerInVehicle[/wiki] setzen :)