Beiträge von Noneatme

    Ja, weil MTA Open Source ist und SA:MP nicht..
    überleg mal wie viel du machen könntest wenn SA:MP wie MTA wäre..


    Dann werden die Leute gar nichts an SA-MP machen, da der Server so scheiße resourceninperformant programmiert würde, das jeder Durchschnittsprogrammierer einen Krampf in der Hand bekommt, wenn er den Code anfassen würde.
    Auf die Tatsache das jedesmal wenn ich den SA-MP Server starte eine kleine Diode in meinem Prozessor suizid begeht, müsste man den Code erstmal komplett umstrukturieren sodass man überhaupt zusammen an diesem Code arbeiten kann.


    Das arbeiten mit einem SVN würde die Arbeit zwar erleichtern, aber man müsste den Code erstmal so anpassen das es überhaupt Funktioniert, im Team zu arbeiten.


    (Meiner Meinung nach.)

    Hallo,
    in diesem Tutorial möchte ich erklären, wie die Limits in SA:MP zustande kommen und wie sie umgangen werden können.


    Um Limits umgehen zu können, muss zunächst ihr Ursprung geklärt werden.
    Viele Leute denken sich sicherlich, dass dies daran liegt, dass GTA: SA ein relativ altes Spiel ist und daher nur eine begrenzte Anzahl an Elementen unterstützt.
    Diese Aussage ist nur zum einem sehr kleinen Teil der Fall:
    Feste hardware-unabhängige Limits, wie sie in SA:MP der Fall sind, entstehen in der Programmierung hauptsächlich dann, wenn der Speicher statisch begrenzt wird.
    Das bedeutet, dass Speicher für Elemente nicht dynamisch angefordert wird, sondern von vorne rein reserviert wird.


    Als Ausweg und Einführung "dynamischer Limits" (also letztendlich keine Limits) kann Speicher dynamisch angefordert werden, also immer dann, wenn neuer Speicher gebraucht wird, also z.B., wenn ein neuer Spieler auf den Server kommt oder ein neues Objekt erstellt wurde.


    Zur Veranschaulichung ein Sourcecodebeispiel aus SA:MP (Achtung: Pseudocode, aber exakt SA:MP 0.3z entsprechend):

    Code
    CPlayerPool* pPlayerPool = (CPlayerPool *)operator new(0x184C0u); // Reservierung von 99 520 Bytes (knapp 100KiB) Speicher
    if ( pPlayerPool )
    	this->m_pPlayerPool = CPlayerPool::CPlayerPool(pPlayerPool); // Klassenkonstruktor aufrufen (PlayerPool initialisieren)
    
    
    pObjectPool = (CObjectPool *)operator new(0x3D37E0u); // Reservierung von 4 012 000 (knapp 4MiB) Speicher
    if ( pObjectPool )
    	this->m_pObjectPool = CObjectPool::CObjectPool(pObjectPool); // Klassenkonstruktor aufrufen (ObjectPool initialisieren)


    Innerhalb dieser Strukturen befinden sich dann weitere Arrays in einer Größe der Anzahl der Spieler, Objekte, etc.:


    Hier sieht man, dass, obwohl nur eine kleine Anzahl an Slots reserviert ist, viel Speicher benötigt wird, obwohl dieser überhaupt gar nicht genutzt wird.
    Das bedeutet, dass nur mit einer Erhöhung der Konstante PLAYER_LIMIT das Limit erhöht wird, dafür aber auch viel mehr Speicher benötigt wird.


    Heutzutage (und auch schon vor 10 Jahren) wird in C++-Büchern gelehrt, dass statt statischen Arrays (wie sie in SA:MP genutzt werden) dynamische Container genutzt werden sollten. Dadurch kann Speicher viel effektiver genutzt werden, sodass er nur angefordert wird, wenn er auch benötigt wird.


    Wie schon grob angedeutet, gibt es im Wesentlichen 3 Möglichkeiten die lästigen Limits zu umgehen:
    1.) Den SA:MP-Code nehmen und die Konstanten erhöhen.
    Nachteil: Es wird noch mehr Speicher unnötig verschwendet, und die Ladezeiten des Servers werden um Jahrzehnte erhöht.


    2.) Wie 1.) mit dem Unterschied, dass bestehende statische Strukturen in dynamische Container verwandelt werden:
    Vorteil: Effektive Speichernutzung
    Nachteil: Dies würde den Umfang eines SA:MP Updates sprengen und innerhalb von 4 Jahren nicht umsetzbar sein


    3.) Zu MTA wechseln:
    MTA wurde von Anfang an mit Nutzung dynamischer Strukturen konzipiert, sodass von seiten MTA gar keine Limits existieren.
    Die einzige Limits sind die von GTA, die jedoch zu Großteilen durch Patching in dynamische Strukturen (wie 2.)/Patching der Größen (wie 1.) erhöht wurden.
    Weitere positiver Nebeneffekt: MTA bietet eine Vielzahl an zusätzlichen Features und bessere Synchronisation
    Nachteil: Verabschiedung von der tollen SA:MP Community


    Mit freundlichen Grüßen

    And there it goes, ein gutes Projekt, den Bach runter.
    Schade eigentlich.


    Mein Abgang damals, war ja Bombenstimmung damals, aber dafür hab ich mich ja schon entschuldigt :)


    Naja, ich hab die Website Archiviert ;D


    Auf auf der Waybackmachine ist das Forum auch schon.
    Fehlt nurnoch die Map, aber die hast du leider auch nichtmehr :D

    getAccountData und .xml ist Unsicher.


    Zudem solltest du deine Passwörter verschlüsseln. SHA-256 hilft dir dabei weiter.


    Was man jetzt noch machen kann, ist das man das ganze System ins Objektorientierte weiterschreibt, und mit MySQL verbindet.

    Haha xD
    Als ob ich die Absicht habe, in ein 2 Jahre alten Gamemode ein Trojaner einzubauen xD Made my Night...


    Mal ernsthaft: Damit hab ich nichts zutun, beschwert euch bei dem Sccanf Ersteller danach. Der Virus stammt von ihn. Ich hab bei mir kein Virus.

    Vorstellung ist so einigermaßen okay.


    Falls ich euch ein Tipp geben kann:
    Roleplay ist was KOMPLETT ANDERES als Reallife. Die meisten Server denken, Roleplay wär so eine art Reallife.
    Das ist leider Falsch, denn in Roleplay wird auf Reallife GESCHISSEN.


    Eine Fahrschule mit Lizenzen hat also in einem Roleplay Gamemode nichts veloren :)


    Ich sag das deshalb, weil ich auch schon ein Reingewürgt bekam.


    mfg

    Sehr Schön!
    Darf ich die Map für mein Roleplay gamemode verwenden? Mache da nämlich so Peds hin, die sich gegenseitig Schlagen, und wo man mit jemanden Sprechen muss :)


    mfg

    Sieht gut aus, ich würde dir so 8/10 Punkten geben.


    Jedoch mein Beileid, das das rund 8000. Zeilen sind. Ich hätte es kürzer gemacht, um so ein bessen Überblick zu bekommen ;)


    mfg

    Sieht MTA So aus, als wäre es eine Modifikation für SA-MP? Falsch!


    Bastel dir nen eigenen Map Editor und dann weißt du, wie du die Objekte da rein bekommst.


    Aber um dir eine Hilfe zu geben:


    Die Parameter in deiner CreateObject Funktion musst du in der .xml Attribute reinsetzten, wobei die Parameterbeschreibung gleich mit deiner Funktion sein muss, und den Syntax der .xml Datei besitzen muss.



    mfg

    Toll. Mit dem Anmelden auf der Webseite hier hat breadfish auch meine IP.
    Gehe ich auf einem SA-MP/MTA Server, haben die auch meine IP. Für immer in der Server Log gespeichert.
    Gehe ich auf einem Teamspeak server, haben die auch meine IP.
    Man kann sogar noch viel Mehr als die IP bekommen oO You don't say!


    mfg