Eigene .hmap erstellen

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
  • Hey,
    ich beschäftige mich derzeit mit dem MapAndreas Plugin, da es sehr wichtig für meinen Gamemode ist, nur ist da ein Problem. Die .hmap die mit dem Plugin mitgeliefert wird, ist nur für die normale SA Map geeignet, aber ich habe sehr viele und auch große eigene Maps auf dem Server. Ich wüsste zwar wie ich mir eine .hmap für die normale SA Map erstelle, aber wie kann ich das mit gemappten Objekten machen ? Möglich ist es anscheinend: http://forum.sa-mp.com/showthread.php?t=508552
    Wie hat er das gemacht ? Ich denke er nicht, dass er das manuell gemacht hat, und jeden Meter einzeln abgelaufen ist.
    Wäre enorm dankbar wenn jemand eine Lösung für mich hat :)

  • Ich hätte eine Idee, die hat aber nichts mit SA-MP direkt zu tun.
    In MTA gibt es folgende Funktion: https://wiki.multitheftauto.com/wiki/GetGroundPosition
    Da du die Maps wohl in MTA erstellst, könntest du versuchen, ob MTA schlau genug ist, um diese selbst gemappten Objekte zu erkennen. Dann könntest du einen Code dafür schreiben und für jede X/Y Position dir die Z Koordinate ausgeben lassen.
    Ist so ähnlich wie die SetPlayerPosFindZ Funktion, nur dass diese eben nicht immer gescheit funktioniert.


    Oder du fragst den der das gemacht hat mal, ob er es dir erklärt. aber ich würde es erst mal so versuchen, vielleicht klappt es ja.

  • Nein, ich mappe nicht mit MTA aber wenn es funktionieren würde wäre es mir meine Maps zu konvertieren. Ich werde es mal probieren, danke für den Tipp :thumbup:
    Aber selbst wenn es funktioniert stehe ich noch vor der Herausforderung Lua :D

  • Danke, genau sowas habe ich gesucht. Ich war zwar in Mauzen's thread aber habe es irgendwie übersehen :whistling: Jetzt muss ich das nur irgendwie in die bestehende .hmap einbauen :|

  • Das ist genau das selbe Prinzip welches bei dem One Piece Server genutzt wurde nur hat der die ganzen Daten in einer Datenbank gespeichert und mit Mathlab visualisiert.


    /edit


    Oskaar1994
    Wieso ?


    Du musst nur die neue hmap noch einbinden.
    Die koordinaten werden in den Arbeitsspeicher geladen davon werden die Z koordinaten letztendlich ermittelt

    Einmal editiert, zuletzt von IPrototypeI ()

  • Habe mir den Code noch mal genauer durchgelesen und habe es jetzt kapiert :thumbup: Noch eine Frage: Wäre es schlauer den Code mit einer Schleife oder einem Timer mit einem Intervall von ca 500ms zu nutzen ? Ich kann mir vorstellen, dass der Server mit einer Schleife entweder abschmieren würde oder dass alles total laggt und dadurch die Koordinaten ungenau werden ?

  • Das wird eher durch den Timer laggen als durch die Schleife.
    PAWn ist so konzipiert, dass es solange auf die nächste Ausführung des Codes wartet bis die Aktion abgeschlossen ist.
    Defkato -> keine laggs.


    Bei Laggs kommen auch keine Ungenauigkeiten zustande, sondern es dauert einfach nur länger.

    "Bevor ich mir Informationen aus der "Bild" hole,
    werde ich anfangen, Wahlergebnisse danach vorauszusagen,
    neben welchen Busch unsere Katze gepinkelt hat."

    Margarete Stokowski

  • Das wird eher durch den Timer laggen als durch die Schleife.
    PAWn ist so konzipiert, dass es solange auf die nächste Ausführung des Codes wartet bis die Aktion abgeschlossen ist.
    Defkato -> keine laggs.


    Bei Laggs kommen auch keine Ungenauigkeiten zustande, sondern es dauert einfach nur länger.


    Naja was mögliche ist , ist den code über einen bot laufen zu lassen da jeder bot in einem eigenen thread besitzt.


    Also wäre zur performanc Steigerung noch multiprocessing möglich :D.


    Lass das ganze doch nicht seperat ablaufen aondern einzelnt ^^.

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Habe jetzt noch ein paar kleine Probleme. Mir sind auf Anhieb ein paar Fehler aufgefallen, die habe ich jetzt verbessert, aber ein paar Dinge sind mir noch Rätselhaft.
    Erstmal der Code:
    new objectModels[MAX_OBJECTS];
    forward ScanObject(playerid, objectid, Float:curx, Float:cury);
    public ScanObject(playerid, objectid, Float:curx, Float:cury)
    {
    // End on invalid objects
    if (!IsValidObject(objectid)) return;
    new Float:sphere=GetColSphereRadius(objectModels[objectid]);


    new Float:px, Float:py, Float:pz;
    GetPlayerPos(playerid, px, py, pz);
    // Update z value, -0.5 offset might need to be adjusted
    MapAndreas_SetZ_For2DCoord(px, py, pz-0.5);


    if (++curx > sphere*2) {
    cury++;
    curx = 0.0;
    }
    if (cury > sphere*2) {
    // Object done, continue with the next one, 300ms falling time
    SetTimerEx("ScanObject", 500, 0, "iiff", playerid, curobject+1, 0.0, 0.0);
    return;
    }


    // Scan the next position for that object
    GetObjectPos(curobject, px, py, pz);
    SetPlayerPos(playerid, px-sphere+curx, py-sphere+cury, pz+sphere);
    SetTimerEx("ScanObject", 500, 0, "iiff", playerid, curobject, curx, cury);
    }
    Curobject ist nicht definiert, also wenn ich jetzt curobject erstelle, welchen Wert soll ich dann zuweisen ? curobject = objectid ? Dann wäre da noch objectModels und objectid. Bei objectModels soll ich dann nochmal einzeln alle Objektmodele zuweisen ? Also grade blick ich garnicht mehr durch.

  • Deine erste annahme ist richtig einfach den namen des Funktionsparameters umschreiben.


    Du benötigst die modelsize include von Y_Less und bei der funktion GetColSphereRadius wird die modelid benötigt daher auch das Array. Du kannst daher CreateObject hooken oder arbeitest mit dem streamer.