gStream Helper

Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link

  • gStream_Helper # Pastebin V.2
    gStream_Helper.rar


    //Edit: Neue Version,Text komplett geändert usw usf.

  • nice :thumbup:
    wo hast du denn die daten für die distances her?


    Hab mir mal ein kleines Programm geschrieben,dass mir die Daten aus den IDE Datein des Spieles ausgelesen hat.

    Zitat

    \data\maps\*\*.IDE
    Bsp:\data\maps\SF\SFe.IDE


    stock Float:GetOptimalIDEDistance(modelid,Float:input) {
    for(new i; i < sizeof(IDEData) ; i++) {
    if(modelid == IDEData[i][IDE_iModelID]) {
    return IDEData[i][IDE_fDistance];
    }
    }
    return input;
    }
    stock CreateDynamicObjectEX(modelid, Float:x, Float:y, Float:z, Float:rx, Float:ry, Float:rz, worldid = -1, interiorid = -1, playerid = -1, Float:distance = 200.0,Float:extra_distance = 20.0) {
    distance = GetOptimalIDEDistance(modelid,distance);
    return CreateDynamicObject(modelid,x,y,z,rx,ry,rz, worldid, interiorid, playerid,distance + extra_distance);
    }
    Entweder benutzt du GetOptimalIDEDistance() und gibst dort eine ModelID und eine default DrawDistance an.Die default DrawDistance wird gebrauchst,falls kein Eintrag für die ModelID gefunden wird.
    GetOptimalIDEDistance(10343,200.0);
    10343 - ModelID
    200.0 - DrawDistance,falls kein Eintrag für diese ModelID gefunden wurde.Denn ungefähr 100 von ~15000 Einträgen fehlen ( Die du aber mit sehr sehr hoher wahrscheinlichkeit eh nicht nutzt,weil das TOBJs sind ).
    Liefert dir direkt als return Wert die Distanz.


    Oder du benutzt direkt CreateDynamicObjectEX(), die ist aber ausgelegt für das Streamer Plugin von Incognito.Du kannst es aber für jeden Streamer benutzten,und anstatt eine DrawDistanz die Funktion GetOptimalIDEDistance einfügen.

  • kenn mich nicht so gut aus, aber wenn da jetzt jedes mal
    wen ein objekt erstellt wird eine schleife 13000 mal läuft


    das geht doch auf die ressourcen oder :?:


    Da hast du auch recht.Nur hatte Ich bisher keine Zeit eine Include auszusuche für BinTrees womit das viel schneller funktionieren würde.
    Seh da aber auch kein wirklich großes Problem drin,da du bzw die meisten ihre Objekte direkt beim Start ( OnGameModeInit() ) erstellen und dies dann ja einmalig ist.Bei mir dauert der StartUp mit etwas mehr als 4000Objekte 1.1 Sekunden,da es ja nur bei OnGameModeInit passiert,ist das für mich kein Problem.


    Ich glaube aber,Ich werde es etwas abändern,sodass zwar das Array im Script wächst,allerdings kein Loop mehr benötigt wird.Man wird also direkt über den Index auf die Distanz zugreifen können.


    //Edit
    Hab es mal getestet.In der Version aus dem Post oben,brauch man ~12500ms um jede ModelID 1x auszulesen. Das bei einer AMX Größe von 138kb,die lediglich aus dem Streamer und dem Testlauf besteht. Dagegen jetzt bei einer AMX Größe von 193kb ( 55kb größer ) nur noch ~5ms bei der FAST_VERSION( Keine prinft() Infos ) und ~1041ms bei der Normalen Version.


    //Edit2:
    Noch etwas verbessert, nun 145kb bei nur noch ~5ms bei der FAST_VERSION( Keine prinft() Infos ) und ~1041ms bei der Normalen Version.

    2 Mal editiert, zuletzt von Goldkiller ()

  • äh warum werden die objekte nur einmal erstellet,
    bei den objekt streamer lauent doch immer timer und
    wen man in der nähe ist wird das objekt erstellt, wen man wieder weg geht wird es glöscht


    oder hab ich das jetzt irgendwie falsch verstanden?

  • Du stellst dir das etwas falsch vor.
    Man erstellt für den Streamer das Objekt einmalig mit diversen Information, wie zB X,Y,Z oder der DrawDistance / Distanz.Der Streamer ( Egal welcher ) weiss dann für sich intern, dass man ein Objekt erstellt haben möchte.
    Wann das Objekt letztendlich für den Spieler erstellt wird, berechnet der Streamer anhand der Distanz die man für ein bestimmte Objekt angegeben hat.Will man,dass ein Objekt von 1000 Units entfernt gestreamt wird, dann wird es für den Spieler nur erstellt sobald man sich innerhalb dieser 1000 Units Abstand befindet.
    Und für das zerstören umgekehrt,ist das Objekt für den Spieler erstellt,er befindet sich aber nicht mehr in den 1000 Units Umkreis,so wird es zerstört.


    Mit diesem Include erhälst du letztendlich die DrawDistance / Distanz , ab wann das Objekt in GTA selber erst angezeigt wird.Denn GTA erstellt dir selbstverständlich keine Objekte die sich in LV befinden ( Eigentlich doch,aber dass sind LOD Objekte die eine sehr niedrige Auflösung haben und kaum Resourcen fressen ) ,wenn du aber in LS bist.Das würde sonst die Resourcen höher treiben :p.