Portal-Zone Gothic-Zone Gothic II-Zone Gothic 3-Zone Gothic 4-Zone Modifikationen-Zone Download-Zone Foren-Zone RPG-Zone Almanach-Zone Spirit of Gothic

 

Seite 1 von 3 123 Letzte »
Ergebnis 1 bis 20 von 47
  1. Beiträge anzeigen #1 Zitieren
    Legende der Amazonen Avatar von Bisasam
    Registriert seit
    Dec 2006
    Ort
    Meine Faust in Sinis Gesicht
    Beiträge
    9.629
     
    Bisasam ist offline

    Vobs während der Laufzeit einfügen - Skriptdiskussion und Bugfixes für G1

    Bezüglich dieses Posts und Skriptes von Mud-Freak: https://forum.worldofplayers.de/foru...1#post25712257

    Erstmal VIELEN dank, dass du dir die Mühe gemacht und eine G1-kompatible Version geschrieben hast! Das hat mir wirklich sehr geholfen.

    In meiner Version von Ikarus existierte die Klasse zCClassDef in der EngineClasses_G1.d nicht. Ich musste sie aus dem G2 Ikarus kopieren und manuell einfügen. Danach funktionierte es aber.

    An und für sich kann ich keine Abstürze oder direkte Fehlermeldungen erkennen, ABER bei Insert[]WP wird das Vob IMMER invertiert*.
    Ich habs mit InsertVob, InsertMob, InsertMobInter, InsertMobDoor u.ä. getestet mit unterschiedlichen Visuals. Das ist immer so, egal ob mds, asc oder 3ds.

    Anscheinend läuft da was bei der Ausrichtung schief. Wenn ich per Animationssystem die Sachen aufhebe und am Helden ausrichten lasse, werden sie wieder "umgekrempelt" und sehen richtig herum aus. Aber ich will das Teil halt nicht am Helden ausrichten, sondern am WP.
    Ich durchblicke deinen Code leider nicht genug, um selbst eine gute Lösung zu finden. Bin mir zu unsicher, was ich an diesen Calls verändern soll, damit es richtig aussieht.

    Könntest du da vielleicht helfen?

    *mit Invertiert meine ich, dass alle normalen gedreht werden. Das Mob sieht dadurch aus, als hätte es jemand umgekrempelt. Von Betten kann man dann beispielsweise nur noch den Rahmen sehen, wenn man sich nicht mit der Kamera in das bett reincheatet und von unten auf die Faces guckt.

    Außerdem habe ich das Skript bei mir erweitert um eine Funktion, die den owner setzt. Ist vor allem dann wichtig, wenn man eine Mod hat, in der man das Diebstahlsystem um Mobs erweitert hat. Dann sollte man den "PC_HERO" als ownerStr eintragen und als Ausnahme im Diebstahlsystem anzeigen.
    Das Skript dazu sieht fast genauso aus wie das Misc-Skript:

    Code:
    func void SetMobOwner(var int mobPtr, var string owner, var string ownerGuild) {
        if (!Hlp_Is_oCMobInter(mobPtr)) {
            MEM_Warn("Not a oCMobInter!");
            return;
        };
    
        var oCMobInter mob; mob = _^(mobPtr);
        mob._oCMob_ownerStr   = owner;
        mob._oCMob_ownerGuildStr     = ownerGuild;
    
    };
    owner z.B. "PC_HERO"
    ownerGuild z.B. "GIL_GRD"

    Wenn man eins von beiden nicht füllen möchte, kann man es einfach mit "" angeben und es bleibt leer.
    Man muss hier deswegen _oCMob_ noch mit angeben weil das (zumindest in G1) genau so als Klasseneigenschaft deklariert wurde.

    Desweiteren würde ich gerne Feuerstellen (3ds) automatisch mit Feuer befüllen. Lichtvobs dazu wären auch schön. Nur für Lichter gibts noch gar kein Skript. Unterscheidet sich das stark von den normalen Vobs, oder muss man da nur ganz minimale Änderungen durchführen damit das klappt?


    "Das erinnert doch sehr erfreulich an das, was man sich als Gothicfan wünscht!"
    -Korallenkette

  2. Beiträge anzeigen #2 Zitieren
    Ehrengarde Avatar von mud-freak
    Registriert seit
    Dec 2005
    Beiträge
    2.199
     
    mud-freak ist offline
    Danke, Bisasam, fürs Testen der Skripte in Gothic 1!

    Ich habe das Skript im verlinkten Post aktualisiert. Darauf dass die Klasse zCClassDef in Gothic 1 fehlt, wird jetzt Rücksicht genommen, sodass es nun nicht mehr notwendig ist, diese Klasse von den Gothic 2 Skripten zu kopieren. Deine Funktion zum Setzen des Besitzers habe ich auch übernommen (auf oCMobs generalisiert). Vielen Dank dafür. Ich habe die Funktion jetzt nicht selbst ausprobiert. Hattest du getestet, ob das Setzen der beiden Owner-Strings ausreicht? Es gibt nämlich noch weitere Mob-Eigenschaften, die etwas mit dem Besitzer zutun haben.

    Mit den Skripten kannst du jegliche Welt-Objekte (alles was von zCVob erbt) einfügen und es bedarf dafür keine neuen Funktionen. Dazu kannst du die InsertObject*-Funktionen benutzen. Die sind identisch zu den InsertVob*-Funktionen, nur dass du über ein zusätzliches Argument die gewünschte Klasse bestimmen kannst. (Die InserstVob*-Funktionen wie all die anderen, sind einfach nur Wrapper-Funktionen zum einfacheren Aufrufen für die InsertObject*-Funktionen für ausgewählte Klassen.)
    Code:
    InsertObjectWP  (string className, string objName, string visual, string waypoint, int parentVobPtr)
    InsertObjectPos (string className, string objName, string visual, int[3] *pos, int[3] *dir, int parentVobPtr)
    InsertObject    (string className, string objName, string visual, int[16] *trafoMat, int parentVobPtr)
    Wenn du bspw. ein zCVobLight einfügen willst, kannst du das mit:
    Code:
    InsertObjectWP  ("zCVobLight", "MyLight", "", "WAYPOINT", 0);
    und anschließend die entsprechenden Eigenschaften des Lichts anpassen. Was genau so ein Licht für Eigenschaften braucht (und ob ein Visual im dritten Argument angegeben werde muss) damit es sichtbar ist kannst du dir evtl. im Spacer abgucken, das weiß ich jetzt nicht auf Anhieb.

    Dass da etwas mit der Transformationsmatrix beim Einfügen in Gothic 1 nicht stimmt konnte ich gerade reproduzieren. Vermutlich erwartet eine der genutzten Enginefunktionen in Gothic 1 eine andere Parameterreihenfolge als in Gothic 2. Wenn du nicht oder niemand anderes in der Zwischenzeit dahinter kommt, müsstest du dich etwas gedulden bis ich dazu komme.


    EDIT: Der Grund war, dass Gothic 2 die Matrizen automatisch normalisiert, Gothic 1 aber nicht. Ich habe das Skript aktualisiert. Vielleicht kannst du einmal testen, ob die Ausrichtung der Vobs nun funktioniert.
    Geändert von mud-freak (15.02.2019 um 16:08 Uhr)

  3. Beiträge anzeigen #3 Zitieren
    Legende der Amazonen Avatar von Bisasam
    Registriert seit
    Dec 2006
    Ort
    Meine Faust in Sinis Gesicht
    Beiträge
    9.629
     
    Bisasam ist offline
    Danke für das Update. Ich ziehs mir gleich auf den Stick und sehe zu, dass ich meine Daten aktualisiere. Falls es Fehler gibt, melde ich das in ein paar Tagen hier im Topic.

    Mir ist zum Thema Licht aber noch ein Problem eingefallen. Undzwar muss das Licht in Gothic neu kompiliert werden, wenn man ein neues Lichtvob einfügt. Ansonsten hat man zwar das Vob in der Welt, aber es hat keinerlei Auswirkungen. Oder kurz: Es ist und bleibt dunkel.

    Es sei denn Gothic würde automatisch das Licht neu kompilieren, was während der Laufzeit meines Wissens nach nicht passiert. Vermutlich würde das ganze nur mit dem Renderer funktionieren. Oder hast du irgendwo eine compile light funktion rumfliegen? Wie wäre wohl ganz praktisch.

    Vielleicht sollten wir da Degenerated dazuziehen.


    "Das erinnert doch sehr erfreulich an das, was man sich als Gothicfan wünscht!"
    -Korallenkette

  4. Beiträge anzeigen #4 Zitieren
    now also in your universe  Avatar von Milky-Way
    Registriert seit
    Jun 2007
    Beiträge
    15.191
     
    Milky-Way ist gerade online
    Zitat Zitat von Bisasam Beitrag anzeigen
    Danke für das Update. Ich ziehs mir gleich auf den Stick und sehe zu, dass ich meine Daten aktualisiere. Falls es Fehler gibt, melde ich das in ein paar Tagen hier im Topic.

    Mir ist zum Thema Licht aber noch ein Problem eingefallen. Undzwar muss das Licht in Gothic neu kompiliert werden, wenn man ein neues Lichtvob einfügt. Ansonsten hat man zwar das Vob in der Welt, aber es hat keinerlei Auswirkungen. Oder kurz: Es ist und bleibt dunkel.

    Es sei denn Gothic würde automatisch das Licht neu kompilieren, was während der Laufzeit meines Wissens nach nicht passiert. Vermutlich würde das ganze nur mit dem Renderer funktionieren. Oder hast du irgendwo eine compile light funktion rumfliegen? Wie wäre wohl ganz praktisch.

    Vielleicht sollten wir da Degenerated dazuziehen.
    Meine Vermutung wäre, dass das Kompilieren der Lichter nur für statische Lichter notwendig ist und dynamische Lichter auch so funktionieren könnten?

  5. Beiträge anzeigen #5 Zitieren
    Legende der Amazonen Avatar von Bisasam
    Registriert seit
    Dec 2006
    Ort
    Meine Faust in Sinis Gesicht
    Beiträge
    9.629
     
    Bisasam ist offline
    Ich werde die dynamischen Lichter mal ausprobieren. Meiner Erfahrung nach ist es in G1 aber so, dass wirklich gar kein Licht ohne Neukompilierung funktioniert.

    Achja wegen ownerstr @Mud-Freak ich persönlich beziehe mich in meinem neuen System auf den ownerstr(ing). Per DoForSpehere wird bei Mob-Benutzung diese eigenschaft abgefragt und wenn da nicht PC_HERO steht, wird Diebstahlbehandlung aktiviert. Die anderen owner-Werte erwarten einen integer. Bin mir unsicher, ob ich da jetzt die Gilde als Zahl eintragen soll. Auf das normale System ohne mods hat das soweit ich weiß keine Auswirkungen.


    "Das erinnert doch sehr erfreulich an das, was man sich als Gothicfan wünscht!"
    -Korallenkette

  6. Beiträge anzeigen #6 Zitieren
    Ehrengarde Avatar von mud-freak
    Registriert seit
    Dec 2005
    Beiträge
    2.199
     
    mud-freak ist offline
    Ich habe mal etwas nachgeforscht und entsprechende Funktionen zusammengesucht/-geschrieben. Ich habe das Skript in dem Post aktualisiert. Vielleicht nehme ich es wieder heraus, denn es ist nicht so praktikabel: Selbst auf niedrigster Licht-Qualität (nur Vertexlighting, keine Light maps) dauert es bei mir in Gothic 1 (WORLD.ZEN) 4 Sekunden und in Gothic 2 (NEWWORLD.ZEN) 30 Sekunden. Das bedeutet kompletter Stillstand des Spiels. Nicht besonders schön. Wenn du die Funktion geschickt in einem Dialog oder einen künstlichen Ladebildschirm einbettest (wo Kamera und Bewegung fixiert sind) könntest du vielleicht damit davon kommen.

    Hier ein wenig Beispielcode, der voll und ganz ausreicht, um eine neue Lichtquelle zu erstellen und "anzuschalten".
    Code:
    var int lightPtr; lightPtr = InsertObjectWP("zCVobLight", "MyLight", "", Npc_GetNearestWP(hero), 0);
    SetVoblightPreset(lightPtr, "AURA");
    Getestet habe ich es nicht allzu ausgiebig. Das müsstest du noch etwas machen (bzw. einfach ein Auge drauf haben, ob es verlässlich funktioniert).

    Ein paar Worte zur Implementierung: Nach setzen des Presets, wird die Beleuchtung der Welt neu kompiliert, wie das im Spacer passiert. D.h. es gibt wie dort auch die 4 Optionen: Nur Vertexlighting und Lightmaps in drei verschiedenen Qualitäten. In SetVoblightPreset wird nur das Vertexlighting neu generiert, weil das allein schon, je nach Anzahl der Lichter in der Welt, einige Sekunden dauert. Die Lightmaps neu zu generieren halte ich nicht für sinnvoll, weil es zu lang dauert.



    EDIT: Der Bottleneck für die Dauer ist nicht die Anzahl der Lichter, sondern die Anzahl der Vertices der Welt. Es bringt also leider nichts, nur die Beleuchtung des neuen Lichts generieren zu lassen, anstatt aller Lichter. Außerdem habe ich festgestellt, dass beim Einfügen eines zweiten Lichts die Lichtfarbe immer rot ist - ich weiß nicht ob das am Setzen des Presets oder am generieren der Weltbeleuchtung liegt. Ich habe die Funktionen wieder aus dem insertAnything-Skript herausgenommen, weil mir das nicht stabil genug ist. Ich lasse die Funktionen aber mal hier, falls jemand anderes sich damit befassen will. Für mich ist hier jetzt erst einmal meine Zeit dafür ausgeschöpft.

    Spoiler:(zum lesen bitte Text markieren)
    Code:
    // enum zCWorld::zTStaticWorldLightMode {
        const int LIGHT_VERTEX_ONLY           = 0;
        const int LIGHT_VERTEX_LIGHTMAPS_LOW  = 1;
        const int LIGHT_VERTEX_LIGHTMAPS_MID  = 2;
        const int LIGHT_VERTEX_LIGHTMAPS_HIGH = 3;
    // }
    
    /*
     * Re-generate world lighting. Depending on the number of lights in the world, this may take around 3-5 seconds!
     * Mode corresponds to the setting used in the Spacer when compiling the light. Anything above LIGHT_VERTEX_ONLY takes
     * considerably longer and thus does not seem to be a good option mid-game. Nevertheless, a region (zTBBox3D) may be
     * specified to decrease the area effected. If mode is LIGHT_VERTEX_ONLY, this second argument is ignored and may be 0.
     */
    func void Wld_GenerateStaticLighting(var int mode, var int bboxPtr) {
        const int zCWorld__GenerateStaticWorldLighting_G1 = 6294368; //0x600B60
        const int zCWorld__GenerateStaticWorldLighting_G2 = 6486896; //0x62FB70
    
        var int modePtr; modePtr = _@(mode);
        var int world; world = MEM_Game._zCSession_world;
    
        const int call = 0;
        if (CALL_Begin(call)) {
            CALL_PtrParam(_@(bboxPtr)); // zTBBox3D * (only relevant if mode > LIGHT_VERTEX_ONLY)
            CALL_PtrParam(_@(modePtr)); // zCWorld::zTStaticWorldLightMode const &
            CALL__thiscall(_@(world), MEMINT_SwitchG1G2(zCWorld__GenerateStaticWorldLighting_G1,
                                                        zCWorld__GenerateStaticWorldLighting_G2));
            call = CALL_End();
        };
    };
    
    
    /*
     * Set zCVobLight by preset and recompile the world lighting (vertex lighting only!)
     */
    func void SetVoblightPreset(var int vobPtr, var string preset) {
        if (!Hlp_Is_zCVobLight(vobPtr)) {
            MEM_Warn("Not a zCVobLight!");
            return;
        };
    
        const int zCVobLight__SetByPreset_G1 = 6144960; //0x5DC3C0
        const int zCVobLight__SetByPreset_G2 = 6327264; //0x608BE0
    
        var int strPtr; strPtr = _@s(preset);
    
        const int call = 0;
        if (CALL_Begin(call)) {
            CALL_PtrParam(_@(strPtr));
            CALL__thiscall(_@(vobPtr), MEMINT_SwitchG1G2(zCVobLight__SetByPreset_G1, zCVobLight__SetByPreset_G2));
            call = CALL_End();
        };
    
        // Recompile light
        Wld_GenerateStaticLighting(LIGHT_VERTEX_ONLY, 0);
    
        // To also re-generate the light maps you should use LIGHT_VERTEX_LIGHTMAPS_* instead, but select a small region
        // around the light (see Wld_GenerateStaticLighting). This will, however, increase generation time.
    };
    Geändert von mud-freak (16.02.2019 um 23:02 Uhr)

  7. Beiträge anzeigen #7 Zitieren
    Legende der Amazonen Avatar von Bisasam
    Registriert seit
    Dec 2006
    Ort
    Meine Faust in Sinis Gesicht
    Beiträge
    9.629
     
    Bisasam ist offline
    Danke, dass du dir die Zeit dafür genommen hast. Ich probiere selbst mal ein wenig herum, vielleicht werde ich ja fündig.

    Was ich aber an einem Bug zu melden habe, der direkt das ursprüngliche Skript betrifft:

    Wenn man ein oCMob einfügt. Also wirklich nur das und nicht ocMobInter, dann funktioniert das nicht. Es passiert schlicht gar nichts. Kein Visual, kein Fokus, nichts.
    Die anderen Klassen scheinen aber problemlos zu funktionieren.


    "Das erinnert doch sehr erfreulich an das, was man sich als Gothicfan wünscht!"
    -Korallenkette
    Geändert von Bisasam (17.02.2019 um 23:01 Uhr)

  8. Beiträge anzeigen #8 Zitieren
    Ehrengarde Avatar von mud-freak
    Registriert seit
    Dec 2005
    Beiträge
    2.199
     
    mud-freak ist offline
    Zitat Zitat von Bisasam Beitrag anzeigen
    Was ich aber an einem Bug zu melden habe, der direkt das ursprüngliche Skript betrifft:

    Wenn man ein oCMob einfügt. Also wirklich nur das und nicht ocMobInter, dann funktioniert das nicht. Es passiert schlicht gar nichts. Kein Visual, kein Fokus, nichts.
    Die anderen Klassen scheinen aber problemlos zu funktionieren.
    Tatsache, da stimmte der Name der Klassendefinition nicht (interessanterweise "oCMOB" anstatt "oCMob"). Das habe ich im Skript in dem Post korrigiert. Sollte nun klappen. Danke für den Hinweis!

  9. Beiträge anzeigen #9 Zitieren
    Legende der Amazonen Avatar von Bisasam
    Registriert seit
    Dec 2006
    Ort
    Meine Faust in Sinis Gesicht
    Beiträge
    9.629
     
    Bisasam ist offline
    Deine Childvob-Funktion scheint nicht richtig zu funktionieren. Hab versucht, das Kamin-Problem mit Hilfe von oCMobFire zu lösen. Das eingefügte Mob funktioniert auch tatsächlich. Es macht Licht, ist aktivierbar und alles. ABER es ist eben nicht das Child-Vob.

    Folgende Vorgehensweise habe ich:

    Parent-Vob (Kamin) VORHER mit MobInterWP eingefügt - ist da, alles paletti.

    Danach mit InsertMobFireWPAsChild ein interaktives Lagerfeuer insertet. Lagerfeuer ist sichtbar, alle Optionen sind gesetzt. Durch einen print in der Abfrage, ob ParentPtr gültig ist, weiß ich auch, dass das Parent von mir richtig übergeben wird. Ich schnappe es mir mit MEM_SearchVobByName.
    Wenn ich mir aber das Parent per Animationssystem schnappe, kommt das MobFire nicht mit. Es bleibt an Ort und Stelle.

    Ich dachte zuerst, dass mein Animationssystem vielleicht dran schuld ist, darum hab ich per Spacer ein MobInter mit Child MobFire eingefügt und das dann mitgenommen. Aber nein, bei dem Test kam das Feuerchen brav mit. Es liegt also an einer nicht richtig gesetzten Parent-Child-Beziehung.


    "Das erinnert doch sehr erfreulich an das, was man sich als Gothicfan wünscht!"
    -Korallenkette
    Geändert von Bisasam (18.02.2019 um 22:28 Uhr)

  10. Beiträge anzeigen #10 Zitieren
    Ehrengarde Avatar von mud-freak
    Registriert seit
    Dec 2005
    Beiträge
    2.199
     
    mud-freak ist offline
    Die Parent-Child Verbindung funktioniert. Das habe ich gerade noch einmal getestet. Beispiel:
    Code:
    var string itmInst;
    var string vis;
    if (GOTHIC_BASE_VERSION == 1) {
        itmInst = "ITFOCHEESE";
        vis = "ItFo_Cheese_01.3ds";
    } else {
        itmInst = "ITFO_CHEESE";
        vis = "ItFo_Cheese.3ds";
    };
    
    var int parPtr; parPtr = InsertItemWP(itmInst, 1, Npc_GetNearestWP(hero));
    InsertMobAsChildWP("MyChld", vis, Npc_GetNextWP(hero), parPtr);
    Nimmt man das eingefügte Item auf, so verschwindet auch der zweite Käse.

    Ich kann mir vorstellen, dass die Eigenschaften von einem oCMobFire vor dem Einfügen in die Welt gesetzt sein müssen - oder etwas ähnliches. Ich kann es gerade nicht ausprobieren. Hast du vielleicht Code um ein funktionierendes/brennendes oCMobFire einzufügen? Ich weiß nicht genau welche Eigenschaften dafür nötig sind.

  11. Beiträge anzeigen #11 Zitieren
    Ehrengarde Avatar von mud-freak
    Registriert seit
    Dec 2005
    Beiträge
    2.199
     
    mud-freak ist offline
    Bei mir klappt es:
    Code:
    var string itmInst;
    if (GOTHIC_BASE_VERSION == 1) {
        itmInst = "ITFOCHEESE";
    } else {
        itmInst = "ITFO_CHEESE";
    };
    
    var int parPtr; parPtr = InsertItemWP(itmInst, 1, Npc_GetNearestWP(hero));
    var int childPtr; childPtr = InsertMobFireAsChildWP("CHILD", "FIREPLACE_HIGH2.ASC", Npc_GetNextWP(hero), parPtr);
    SetVobToFloor(childPtr);
    
    var oCMobFire fire; fire = _^(childPtr);
    fire.fireSlot = "BIP01 FIRE";
    fire.fireVobtreeName = "FIRETREE_MEDIUM.ZEN";
    Wld_SetMobRoutine(00,00, "FIREPLACE", 1);
    Wld_SendTrigger("CHILD");
    Ich weiß nicht, ob ich dich falsch verstanden habe und du etwas anderes vorhast. Aber vielleicht wäre es sinnvoll mal deinen Code zu posten.

  12. Beiträge anzeigen #12 Zitieren
    Legende der Amazonen Avatar von Bisasam
    Registriert seit
    Dec 2006
    Ort
    Meine Faust in Sinis Gesicht
    Beiträge
    9.629
     
    Bisasam ist offline
    Unsere Codes unterscheiden sich darin, dass du die durch Insert zurückgegebene ptr in zwei verschiedenen Variablen speicherst.

    Ich benutzt chestPtr=InsertParent und direkt darunter chestPtr=InsertChild (Code im übertragenen Sinne). Vielleicht liegt da ja auch der Fehler. Ich versuche mal deine Methode und übergebe das parent über den Rückgabewert von Insert.

    Achja nen Sendtrigger und SetRoutine mach ich nicht, dadurch würde das ja sofort Feuer fangen und das will ich ja nicht. Soll optional anzündbar sein. Die anderen Eigenschaften setze ich fast 1 zu 1 genauso.


    "Das erinnert doch sehr erfreulich an das, was man sich als Gothicfan wünscht!"
    -Korallenkette

  13. Beiträge anzeigen #13 Zitieren
    Ehrengarde Avatar von mud-freak
    Registriert seit
    Dec 2005
    Beiträge
    2.199
     
    mud-freak ist offline
    Zitat Zitat von Bisasam Beitrag anzeigen
    Unsere Codes unterscheiden sich darin, dass du die durch Insert zurückgegebene ptr in zwei verschiedenen Variablen speicherst.

    Ich benutzt chestPtr=InsertParent und direkt darunter chestPtr=InsertChild (Code im übertragenen Sinne). Vielleicht liegt da ja auch der Fehler. Ich versuche mal deine Methode und übergebe das parent über den Rückgabewert von Insert.

    Achja nen Sendtrigger und SetRoutine mach ich nicht, dadurch würde das ja sofort Feuer fangen und das will ich ja nicht. Soll optional anzündbar sein. Die anderen Eigenschaften setze ich fast 1 zu 1 genauso.
    Was noch einen Unterschied machen könnte ist, dass ich in dem Code das Parentvob als Item erstellt habe (um es aufzuheben). Du hattest geschrieben, dass dein Parentvob ein oCMobInter ist. Wie genau kann ich mir dein Animationssystem vorstellen, dass du erstellt hast? Kann ein NPC damit ein Mob aufheben oder an sich anheften, o.Ä.? Dein Animationsystem stelle ich nicht in Frage - damit hat es ja schon mit den im Spacer einfügten Mobs funktioniert - ich frage mich nur auf was für Mechaniken das aufbaut und ob es z.B. Eigenschaften wie "takeable" und "moveable" voraussetzt.

    Vielleicht könntest du auch einmal meinen Code-Schnipsel kopieren und unverändert ausprobieren, um sicherzustellen, dass da nicht ein fundamentaler Fehler an ganz anderer Stelle liegt.

  14. Beiträge anzeigen #14 Zitieren
    Legende der Amazonen Avatar von Bisasam
    Registriert seit
    Dec 2006
    Ort
    Meine Faust in Sinis Gesicht
    Beiträge
    9.629
     
    Bisasam ist offline
    Ich habe den Fehler mittlerweile gefunden. Es lag an automatisch gesetzter Collision.
    Wenn man ein Parent bewegt und das Child nicht mitkann weil es z.B. im Mesh festhängt, dann wundert mich das nicht länger. Coll nun für das Child deaktiviert und alles geht wunderbar.

    Das Animationssystem funktioniert so, dass das Vob immer wieder eine Positionsanpassung an den Spieler erfährt. Npcs können keine Mobs aufheben, das ist dem Hero vorbehalten. Das ganze wird mit einem Tastendruck aktiviert. Die ptr kriegt man über hero.focusvob. Die Einschränkungen gibts nur über ownership, moveable ist wurscht.

    Was mir aber aufgefallen ist und was womöglich bei der Betrachtung von MobFires beachtet werden müsste: Bei der Abfrage Hlp_IsoCMob von Ikarus wird das MobFire NICHT richtig anerkannt! Es zählt laut Ikarus-Logik nicht zu dieser Klasse und muss gesondert betrachtet werden.
    Keine Ahnung ob Sektenspinner da nur die Hlp-Funktion verhauen hat oder die Engine tatsächlich so denkt. Ich halte es nur für sinnvoll, das mal anzusprechen.

    PS: Freepoints gelten doch auch als Erben des zCVob oder? Müsste also eigentlich möglich sein, sie einzufügen...


    "Das erinnert doch sehr erfreulich an das, was man sich als Gothicfan wünscht!"
    -Korallenkette

  15. Beiträge anzeigen #15 Zitieren
    Ehrengarde Avatar von mud-freak
    Registriert seit
    Dec 2005
    Beiträge
    2.199
     
    mud-freak ist offline
    Zitat Zitat von Bisasam Beitrag anzeigen
    Ich habe den Fehler mittlerweile gefunden. Es lag an automatisch gesetzter Collision.
    Wenn man ein Parent bewegt und das Child nicht mitkann weil es z.B. im Mesh festhängt, dann wundert mich das nicht länger. Coll nun für das Child deaktiviert und alles geht wunderbar.
    Sehr gut, schön zu hören!


    Zitat Zitat von Bisasam Beitrag anzeigen
    Das Animationssystem funktioniert so, dass das Vob immer wieder eine Positionsanpassung an den Spieler erfährt. Npcs können keine Mobs aufheben, das ist dem Hero vorbehalten. Das ganze wird mit einem Tastendruck aktiviert. Die ptr kriegt man über hero.focusvob. Die Einschränkungen gibts nur über ownership, moveable ist wurscht.
    Interessant! Man kann also Dinge aufheben und an andere Position verschieben? Erstellst du etwa eine Aufräum-Mod?


    Zitat Zitat von Bisasam Beitrag anzeigen
    Was mir aber aufgefallen ist und was womöglich bei der Betrachtung von MobFires beachtet werden müsste: Bei der Abfrage Hlp_IsoCMob von Ikarus wird das MobFire NICHT richtig anerkannt! Es zählt laut Ikarus-Logik nicht zu dieser Klasse und muss gesondert betrachtet werden.
    Keine Ahnung ob Sektenspinner da nur die Hlp-Funktion verhauen hat oder die Engine tatsächlich so denkt. Ich halte es nur für sinnvoll, das mal anzusprechen.
    Kannst du den Hinweis noch einmal im Ikarusthread posten? Da wäre der gut aufgehoben. Da man aber gut mit einem extra Aufruf von Hlp_Is_oCMobFire zurecht kommt, glaube ich nicht, dass sich da was an Ikarus "ändern" wird.


    Zitat Zitat von Bisasam Beitrag anzeigen
    PS: Freepoints gelten doch auch als Erben des zCVob oder? Müsste also eigentlich möglich sein, sie einzufügen...
    Ich glaube FreePoints sind "zCVobSpot". Damit könntest du es mal probieren.

  16. Beiträge anzeigen #16 Zitieren
    Legende der Amazonen Avatar von Bisasam
    Registriert seit
    Dec 2006
    Ort
    Meine Faust in Sinis Gesicht
    Beiträge
    9.629
     
    Bisasam ist offline
    Aufräum-Mod? Oh Mann...

    Nein, das ist ein atmosphärisches Feature. Du kannst damit deine Hütte dekorieren - oder gleich vollends in die Wildnis ziehen, dir ne Höhle suchen und dir ne Base einrichten. Das wollte ich damals in G1 schon immer mal machen und nun ist es möglich. macht mega Spaß, eine Gegend von Viechern zu säubern und sich dann häuslich einzurichten.

    Davon abgesehen wird das Bewegen von Mobs aber auch für Quests verwendet. Du musst z.B. eine Leiter ranschaffen um an einen hoch gelegenen Ort zu kommen und dort etwas zu erledigen oder Npcs durch die Gegend schleppen, die sich entweder nicht selbst bewegen können (verletzt) oder sich nicht zu diesem Ort bewegen wollen weil es das Lager ihrer Feinde ist (entführung).
    Ich habe noch jede Menge mehr solcher Situationen eingebaut. Man muss sich in seiner Welt umsehen und mit ihr interagieren, um an sein Ziel zu kommen. Dadurch könnte Legende der Amazonen zur immersivsten Mod überhaupt werden.

    Freepoints wollte ich übrigens mit dem Kamin zusammen einbauen. Die Npcs in der Umgebung sollten in der Lage sein, damit zu interagieren und sich z.B. davorzusetzen. Allerdings bin ich zu faul, um die Rotation der FPs anzupassen


    "Das erinnert doch sehr erfreulich an das, was man sich als Gothicfan wünscht!"
    -Korallenkette

  17. Beiträge anzeigen #17 Zitieren
    Legende der Amazonen Avatar von Bisasam
    Registriert seit
    Dec 2006
    Ort
    Meine Faust in Sinis Gesicht
    Beiträge
    9.629
     
    Bisasam ist offline
    Ich mal wieder, diesmal hab ich ein paar Tests unter Gothic 2 gemacht.

    Die Funktion InsertPileOfitems scheint nicht korrekt zu funktionieren. Ich habe mir testweise am Nullpunkt der Welt (KEIN Portalraum!) einen Haufen Bananen (5 Stk) insertet und sie werden nicht richtig angezeigt. Ich kann sie anvisieren und aufheben und sie werden im Inventar auch korrekt angezeigt, aber vorher waren sie unsichtbar.

    Die Funktion InsertMobWP funktioniert weder mit groß- noch mit kleinschreibung bei der Klasse.

    Außerdem habe ich Probleme mit den InsertAtPos-Funktionen.

    Die Sache mit dem Array habe ich natürlich gesehen. Aber ich kriege es nicht hin, das array mit einer Position zu füllen.
    Wie kriege ich die Position eines Vobs abgefragt und in ein von deiner Funktion verwertbares Format gebracht? Könntest du vielleicht eine Funktion zu dem Paket hinzufügen, mit dem man die Pos eines Vobs oder Npcs (vorzugsweise über ptr) abfragen und ohne Änderungen an deine Funktionen übergeben kann?

    Ich hatte es folgendermaßen versucht:

    var int dx, dy und dz deklariert. Variablen mit vob.trafoObjToWorld[3],7 und 11 (lt. Lehona die X, Y und Z koordinaten) gefüllt.
    Anschließend const float pos[3] = {dx,dy,dz};

    Und ich krieg nen Fehler, dass der die Variablen nicht will. Dachte zuerst es liegt daran, dass er floats übergeben haben will, aber mkf bringt mir nichts als ne Fehlermeldung, dass der das auch nicht will.

    Ich versteh nicht was ich falsch mache. Ich verstehe auch die Fehlermeldungen nicht, der schreibt mir nonsens. Dabei ist es doch so wichtig, dass ich die Positionen von Vobs übergeben kann <.<


    "Das erinnert doch sehr erfreulich an das, was man sich als Gothicfan wünscht!"
    -Korallenkette

  18. Beiträge anzeigen #18 Zitieren
    Dea
    Registriert seit
    Jul 2007
    Beiträge
    10.446
     
    Lehona ist offline
    Gibt es sogar schon (fast).

    Mit TrfToPos(trafoPtr, posPtr) kannst du die Daten aus einer Transformationsmatrix in einen Positionsvektor kopieren. Als erstes brauchst du also einen Pointer auf die Transformationsmatrix des Vobs (oder NPCs). Vielleicht geht es sogar mit _@(vob.trafoObjToWorld) (allerdings bin ich mir da nicht sehr sicher), aber auf jedenfall kann man das Offset in der Klassendefinition seitens Ikarus ablesen:

    Code:
      var int    trafoObjToWorld[16];       // 0x003C zMATRIX4
    Mit 0x3C = 60 gilt dann

    Code:
    var int trafoPtr; trafoPtr = _@(vob) + 60;
    An einen Positionsvektor kommst du sogar noch einfacher:

    Code:
    var int pos[3];
    Zusammen dann:
    Code:
    TrfToPos(_@(vob)+60, _@(pos));
    Und jetzt kannst du _@(pos) an die jeweilige Funktion übergeben.

    Edit: _@(vob.trafoObjToWorld) sollte sogar auch funktionieren!

  19. Beiträge anzeigen #19 Zitieren
    Legende der Amazonen Avatar von Bisasam
    Registriert seit
    Dec 2006
    Ort
    Meine Faust in Sinis Gesicht
    Beiträge
    9.629
     
    Bisasam ist offline
    Ich seh schon, ich werd mit Trafos bis zum Ende meines Lebens nicht mehr warm.
    Danke, Leon. Leider verstehe ich die Logik dahinter immer noch nicht so recht. Wenn ich vob.trafoobjtoworld ohne [n] nehme, kopiert der mir also die komplette Matrix inkl. Ausrichtung und Schirmchen? Und das kann ich dann einfach so übergeben?

    Funktion ohne Füllung, nur Parameter:

    Code:
    InsertMobPos(var string nm, var string vis, var int pos, var int dir)
    Gefüllt:

    Code:
    InsertMobPos("TESTVOB", "Itfo_apple.3ds", _@(Vob.trafoobjtoworld),_@(Vob.dir))
    (Wobei ich nicht sicher bin, ob ich die Direction so einfach übergeben kann)


    "Das erinnert doch sehr erfreulich an das, was man sich als Gothicfan wünscht!"
    -Korallenkette

  20. Beiträge anzeigen #20 Zitieren
    Dea
    Registriert seit
    Jul 2007
    Beiträge
    10.446
     
    Lehona ist offline
    Ne, wenn die Funktion eine Position (= ein Positionsvektor) erwartet, musst du auch einen Positionsvektor übergeben. Also: Daten aus der trafo in den Positionsvektor kopieren (siehe mein Post) und dann _@(pos) übergeben.

Seite 1 von 3 123 Letzte »

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
Impressum | Link Us | intern
World of Gothic © by World of Gothic Team
Gothic, Gothic 2 & Gothic 3 are © by Piranha Bytes & Egmont Interactive & JoWooD Productions AG, all rights reserved worldwide