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 2 von 3 « Erste 123 Letzte »
Ergebnis 21 bis 40 von 47
  1. Beiträge anzeigen #21 Zitieren
    Legende der Amazonen Avatar von Bisasam
    Registriert seit
    Dec 2006
    Ort
    Meine Faust in Sinis Gesicht
    Beiträge
    9.639
     
    Bisasam ist offline
    Okay jetzt bin ich komplett verwirrt.

    Aaalso. Mein positionsvektor ist pos[3] den ich dann befüllen und über _@(pos) übergeben muss. Richtig?

    Meine eigentliche Frage ist, wie ich den Positionsvektor korrekt befülle. Muss ich


    pos[3]{_@(vob.trafoObjToWorld[3]),_@(vob.trafoObjToWorld[7]),_@(vob.trafoObjToWorld[11])};


    schreiben? Mit DEM Part hab ich Probleme. Ich weiß, es nervt wenn jemand so dumme Fragen stellt. Ich kenn mich damit aber eben nicht so gut aus. Das ist als würdest du "Rechts abbiegen" sagen und ich wüsste nicht mal wie man das Gaspedal bedient


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

  2. Beiträge anzeigen #22 Zitieren
    Dea
    Registriert seit
    Jul 2007
    Beiträge
    10.447
     
    Lehona ist offline
    Zitat Zitat von Bisasam Beitrag anzeigen
    Okay jetzt bin ich komplett verwirrt.

    Aaalso. Mein positionsvektor ist pos[3] den ich dann befüllen und über _@(pos) übergeben muss. Richtig?
    Richtig.

    Zitat Zitat von Bisasam Beitrag anzeigen
    Meine eigentliche Frage ist, wie ich den Positionsvektor korrekt befülle.
    Das weiß ich :P Deswegen hab ich diese Frage ja auch in meinem ersten Post beantwortet Ist vielleicht zwischen den vielen Codeblöcken untergegangen. In den Scripten von mud-freak gibt es bereits die Funktion TrfToPos(), die dir genau diese Werte aus dem Trafo rauskopiert und in den Positionsvektor schreibt. Das musst du dann nichtmehr selber machen. Die genaue Benutzung siehst du weiter unten im letzten Codeblock meines ersten Postes.

    Zitat Zitat von Bisasam Beitrag anzeigen
    Muss ich
    pos[3]{_@(vob.trafoObjToWorld[3]),_@(vob.trafoObjToWorld[7]),_@(vob.trafoObjToWorld[11])};
    schreiben? Mit DEM Part hab ich Probleme.
    Du traust Daedalus viel zu viel zu. So wäre es richtig:

    Code:
    pos[0] = vob.trafoObjToWorld[3];
    pos[1] = vob.trafoObjToWorld[7];
    pos[2] = vob.trafoObjToWorld[11];
    Zitat Zitat von Bisasam Beitrag anzeigen
    Ich weiß, es nervt wenn jemand so dumme Fragen stellt. Ich kenn mich damit aber eben nicht so gut aus.
    Das sind keine dummen Fragen, aber ausnahmsweise hab ich mal genug erklärt und du nur was überlesen

  3. Beiträge anzeigen #23 Zitieren
    Legende der Amazonen Avatar von Bisasam
    Registriert seit
    Dec 2006
    Ort
    Meine Faust in Sinis Gesicht
    Beiträge
    9.639
     
    Bisasam ist offline
    Ich habe TrfToPos nicht richtig verstanden. Mir war nicht klar, dass die Funktion doch glatt eine Variable füllt und nicht den Wert einer Variable nimmt. Bin es gewohnt, mit WolfCount 4 zu übergeben statt WolfCount per Funktion mit 4 zu befüllen. Das ist eine Umdenkung, die nötig ist.

    Jetzt glaube ich es verstanden zu haben. Wenn ich es getestet habe, kann ich ja ein kurzes Fazit und ggf. eine vereinfachte Funktion des Vorgangs für alle anderen Anfänger und Ottonormaluser schreiben.


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

  4. Beiträge anzeigen #24 Zitieren
    Legende der Amazonen Avatar von Bisasam
    Registriert seit
    Dec 2006
    Ort
    Meine Faust in Sinis Gesicht
    Beiträge
    9.639
     
    Bisasam ist offline
    Okay Kommando zurück. Die Items steckten beim Insert am Nullpunkt wohl genau in der Bodendiele fest, weshalb sie nicht ordentlich sichtbar waren.

    Die Position kann am einfachsten tatsächlich über _@(vob.trafoobjtoworld) übergeben werden. Eine Kurzanleitung also für die, die sich unsicher sind:

    1. var zCVob [Beliebiger Variablenname] deklarieren

    2. Variable mit MEM_PtrToInst befüllen (die Ptr kriegt man über MEM_SearchVobByname oder über Insert[x])

    3. Die deklarierte und nun befüllte Variable mit _@([Variablenname].trafoobjwoworld) an die Insert[x]-Funktionen übergeben


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

  5. Beiträge anzeigen #25 Zitieren
    Legende der Amazonen Avatar von Bisasam
    Registriert seit
    Dec 2006
    Ort
    Meine Faust in Sinis Gesicht
    Beiträge
    9.639
     
    Bisasam ist offline
    Ich habe ein paar Spezialfragen zum Thema Mover und Boundingboxen und Zonen.

    Also eine Default-Zone ist ohne Boundingbox wirksam. Die kann man einfach einfügen. Aber wenn ich jetzt eine Music-Zone oder Fog-Zone einfügen will, muss ich die Boundingbox und die Reichweite irgendwie verändern. Aber wie kann ich das im Skript erreichen? Ich hab keine Ahnung, wie man ZBools übergibt oder ändert oder überhaupt abfragt. Und die BBox-Eigenschaft in der Klasse gibt mir keinen Hinweis darüber wie ich damit umzugehen habe.

    Außerdem weiß ich nicht wie ich einen Mover mit Bewegungskoordinaten einfüge. Ich wollte automatisch ausrichtende Fischschwärme auf diese Weise einfügen, aber irgendwie weiß ich nicht wie.


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

  6. Homepage besuchen Beiträge anzeigen #26 Zitieren
    Apprentice Avatar von Migos
    Registriert seit
    Mar 2016
    Beiträge
    45
     
    Migos ist offline
    Zitat Zitat von mud-freak Beitrag anzeigen
    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.
    Hey, ich befasse mich gerade auch damit. Mir ist aufgefallen, dass im Spacer mit Standard-Einstellungen das einzige Preset mit einem statischen Licht "TEST" heißt und nur rotes Licht mit einer Range von 100 erzeugt.
    [Bild: presetv81i0y8b.jpg]
    Das Preset "AURA" aus deinem Beispiel funktioniert bei mir nur so halb, wahrscheinlich weil es ein Preset für dynamische Lichter ist. Mir ist jedenfalls aufgefallen, dass die eingestellte Range aus dem Preset übernommen wird, nicht aber die Farbe. Die ist bei mir immer rot.

    Interessant ist auch der Unterschied zwischen
    Wld_GenerateStaticLighting(LIGHT_VERTEX_ONLY, 0);
    und
    Wld_GenerateStaticLighting(LIGHT_VERTEX_LIGHTMAPS_HIGH, 0);
    Ich habe in meinem Testlevel nur einen Raum mit einem Licht. Per Script füge ich zwei weitere Räume mit jew. einem Licht ein.
    Im Modus LIGHT_VERTEX_LIGHTMAPS_HIGH verändert das in meinem Testlevel die eingestellten Werte des einzigen Lichts, das per Spacer gesetzt ist und ändert die Farbe in ein helles Blau. Die restlichen Lichter sind rot. Im LIGHT_VERTEX_ONLY Modus wird das Spacer-Licht nicht geändert, aber alle Lichter sind ebenso wieder Rot.
    Eigene Presets (im Bild zu sehen -> "PURP") nimmt er übrigens gar nicht und berechnet dann das Licht nicht (ganz schön zickig!).

    Dann dachte ich mir, dass man das vllt umgehen kann, indem man sich das Objekt hinter dem lightPtr holt und die Werte selbst ändert und nach stundenlangem rumtesten geht es endlich. Presets braucht man hierbei auch keine mehr.

    Mein Code zum Testen:
    Spoiler:(zum lesen bitte Text markieren)
    Code:
    print("Platziere Objekte");
    var float pos[3]; 
    
    pos[0] = 0.0; pos[1] = 0.0; pos[2] = 0.0;
    InsertObjectPos("zCVob", "HoehleDurchgang", "HOEHLEDURCHGANG.3DS", _@f(pos), 0, 0);
    pos[0] = 0.0; pos[1] = 0.0; pos[2] = 800.0;
    InsertObjectPos("zCVob", "HoehleEnde", "HOEHLEENDE.3DS", _@f(pos), 0, 0);
    pos[0] = -200.0; pos[1] = 5.0; pos[2] = 300.0;
    InsertObjectPos("oCMobContainer", "myNewChest", "CHESTBIG_OCCHESTLARGE.MDS", _@f(pos), 0, 0);
    
    print("Platziere Lichter");
    var int lightPtr;
    var zCVobLight light;
    
    pos[0] = 50.0; pos[1] = 250.0; pos[2] = 300.0;
    lightPtr = InsertObjectPos("zCVobLight", "MyLight1", "", _@f(pos), 0, 0);
    light = MEM_PtrToInst(lightPtr);
    light.range = _@f(1500.0);
    light.lightColor = RGBA(0, 255, 0, 255); // LeGo RGBA()
    
    pos[0] = 100.0; pos[1] = 250.0; pos[2] = 1000.0;
    lightPtr = InsertObjectPos("zCVobLight", "MyLight2", "", _@f(pos), 0, 0);
    light = MEM_PtrToInst(lightPtr);
    light.range = _@f(1000.0);
    light.lightColor = RGBA(255, 255, 100, 255);
    
    
    print("Generiere Lightmap");
    Wld_GenerateStaticLighting(LIGHT_VERTEX_ONLY, 0);
    // Wld_GenerateStaticLighting(LIGHT_VERTEX_LIGHTMAPS_HIGH, 0);


    Ich werde damit jetzt noch etwas weiter rumspielen. Aber zumindest sind jetzt die größten Probleme damit gefixt.
    Ein schönes Szenario wäre zB ein kleines Level, bei dem neue Räume zur Laufzeit hinzugefügt werden.
    Aber nicht die Baking-Zeit vergessen

    Migos
    [Bild: spineSignature.php?name=Migos]
    Entwickler von Jharkendar-Online Deathmatch & Roleplay (zu finden in Spine).
    Komm doch auf unseren Discord und lerne unsere nette Community kennen.
    Mal gucken, was gerade entwickelt wird? Hier ist unsere Roadmap.

  7. Beiträge anzeigen #27 Zitieren
    Legende der Amazonen Avatar von Bisasam
    Registriert seit
    Dec 2006
    Ort
    Meine Faust in Sinis Gesicht
    Beiträge
    9.639
     
    Bisasam ist offline
    Ich persönlich löse das Lichtproblem über die Lampenmobs. Ich setze gar keine Lichter mehr über InsertObject.
    Lampenmobs erstellen automatisch ein Lightvob während der Laufzeit, das auch immer richtig dargestellt wird.

    Aber schön zu sehen, dass Migox sich auch dafür interessiert. Arbeitest du an ner Singleplayer-Mod?


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

  8. Beiträge anzeigen #28 Zitieren
    Legende der Amazonen Avatar von Bisasam
    Registriert seit
    Dec 2006
    Ort
    Meine Faust in Sinis Gesicht
    Beiträge
    9.639
     
    Bisasam ist offline
    WICHTIG:

    Die Funktion zum Einfügen von Items (InsertItem) funktioniert nicht, wenn das Item ein SpellFX hat.

    Es wird schlicht gar nichts eingefügt.

    Dadurch ist alles was glitzert nicht mit den Funktionen kompatibel.


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

  9. Beiträge anzeigen #29 Zitieren
    Ehrengarde Avatar von mud-freak
    Registriert seit
    Dec 2005
    Beiträge
    2.199
     
    mud-freak ist offline
    Was ist InsertItem? Worauf beziehst du dich? Geht es um das InsertAnything-Skript, siehe hier?

    Probier doch mal stattdessen die externe Funktion Wld_InsertItem (erwartet einen Wegpunkt) und schau, ob es damit funktioniert. Ich sehe keinen Grund, dass das mit einem Item-Effekt zu tun haben könnte.

  10. Beiträge anzeigen #30 Zitieren
    Legende der Amazonen Avatar von Bisasam
    Registriert seit
    Dec 2006
    Ort
    Meine Faust in Sinis Gesicht
    Beiträge
    9.639
     
    Bisasam ist offline
    Ja es geht um das Skript.

    Da ich mit Positionen arbeiten muss, kommt die Benutzung von der FP-Variante nicht in Frage.

    Ich habe den Effekt entfernt und sofort ging es wieder. Es liegt 100% am Effekt. Ich habs getestet.


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

  11. Beiträge anzeigen #31 Zitieren
    Ehrengarde Avatar von mud-freak
    Registriert seit
    Dec 2005
    Beiträge
    2.199
     
    mud-freak ist offline
    Zitat Zitat von Bisasam Beitrag anzeigen
    Da ich mit Positionen arbeiten muss, kommt die Benutzung von der FP-Variante nicht in Frage.
    Mir ging es darum es testweise mit der externen Funktion zu probieren, ob es generell am Einfügen von Items mit Effekten liegt.

  12. Beiträge anzeigen #32 Zitieren
    Legende der Amazonen Avatar von Bisasam
    Registriert seit
    Dec 2006
    Ort
    Meine Faust in Sinis Gesicht
    Beiträge
    9.639
     
    Bisasam ist offline
    Pardon.

    Getestet mit:

    Wld_InsertItem (ItPo_PotionOfDeath_01_Mis,"FP_STAND_JORGEN");

    Hat problemlos funktioniert. Die Externe kriegt es also hin.


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

  13. Beiträge anzeigen #33 Zitieren
    Ehrengarde Avatar von mud-freak
    Registriert seit
    Dec 2005
    Beiträge
    2.199
     
    mud-freak ist offline
    Das ist gut zu wissen. Danke fürs Testen.

    Kannst du mal schauen, ob du die Version des Skripts nutzt die ich verlinkt habe? Da hatte sich über die Zeit immer mal wieder etwas geändert. Speziell: Sehen bei dir die InsertItem-Funktionen so aus?
    Spoiler:(zum lesen bitte Text markieren)
    Code:
    /*
     * oCItem functions:
     *
     * InsertItemWP (string itemInstance, int amount, string waypoint)
     * InsertItemPos(string itemInstance, int amount, int* pos, int* dir)
     * InsertItem   (string itemInstance, int amount, int* trafoMat)
     */
    func int InsertItemWP(var string itmInst, var int amount, var string wp) {
        Wld_InsertItem(MEM_GetSymbolIndex(itmInst), wp);
    
        var zCTree newTreeNode; newTreeNode = _^(MEM_World.globalVobTree_firstChild);
        var int itmPtr; itmPtr = newTreeNode.data;
    
        if (!itmPtr) {
            MEM_Warn(ConcatStrings("Could not insert item: ", itmInst));
            return 0;
        };
    
        var oCItem itm; itm = _^(itmPtr);
        itm.amount = amount;
    
        return itmPtr;
    };
    func int InsertItem(var string itmInst, var int amount, var int trf) {
        var int itmPtr; itmPtr = InsertItemWP(itmInst, amount, MEM_FARFARAWAY);
    
        AlignVobAt(itmPtr, trf);
    
        return itmPtr;
    };
    func int InsertItemPos(var string itmInst, var int amount, var int pos, var int dir) {
        var int trafo[16];
        NewTrafo(_@(trafo));
        PosDirToTrf(pos, dir, _@(trafo));
    
        var int itmPtr; itmPtr = InsertItem(itmInst, amount, _@(trafo));
        SetVobToFloor(itmPtr);
    
        return itmPtr;
    };


    Darin wird nämlich auch auf Wld_InsertItem zurückgegriffen. Deshalb scheint es etwas merkwürdig, dass es dort nicht funktioniert.

  14. Beiträge anzeigen #34 Zitieren
    Legende der Amazonen Avatar von Bisasam
    Registriert seit
    Dec 2006
    Ort
    Meine Faust in Sinis Gesicht
    Beiträge
    9.639
     
    Bisasam ist offline
    Lass mal sehen.


    Code:
    /*
     * oCItem functions:
     *
     * InsertItemWP (string itemInstance, int amount, string waypoint)
     * InsertItemPos(string itemInstance, int amount, int* pos, int* dir)
     * InsertItem   (string itemInstance, int amount, int* trafoMat)
     */
    func int InsertItemWP(var string itmInst, var int amount, var string wp) {
        Wld_InsertItem(MEM_GetSymbolIndex(itmInst), wp);
    
        var zCTree newTreeNode; newTreeNode = _^(MEM_World.globalVobTree_firstChild);
        var int itmPtr; itmPtr = newTreeNode.data;
    
        if (!itmPtr) {
            MEM_Warn(ConcatStrings("Could not insert item: ", itmInst));
            return 0;
        };
    
        var oCItem itm; itm = _^(itmPtr);
        itm.amount = amount;
    
        return itmPtr;
    };
    func int InsertItem(var string itmInst, var int amount, var int trf) {
        var int itmPtr; itmPtr = InsertItemWP(itmInst, amount, MEM_FARFARAWAY);
    	const int sizeof_zMAT4 = 64;
        AlignVobAt(itmPtr, trf);
    	
    	var int trafo[16];
        MEM_CopyBytes(trf, _@(trafo), sizeof_zMAT4);
    
            // Increase height for better piling (will be "dropped")
            
        if STR_StartsWith (itmInst,"ITPO")
        {
        trafo[ 7] = addf(trafo[ 7], mkf(10));
        
         	
        }else
        {
        trafo[ 7] = addf(trafo[ 7], mkf(3)); 	
        };    
        
    	AlignVobAt(itmPtr, _@(trafo));
        
    	SetVobToFloor(itmPtr);   
        return itmPtr;
    };
    func int InsertItemPos(var string itmInst, var int amount, var int pos, var int dir) {
        var int trafo[16];
        NewTrafo(_@(trafo));
        PosDirToTrf(pos, dir, _@(trafo));
    
        var int itmPtr; itmPtr = InsertItem(itmInst, amount, _@(trafo));
        SetVobToFloor(itmPtr);
    
        return itmPtr;
    };

    ich hab die Funktion erweitert um die Items besser zu droppen. Dadurch stecken die nicht mehr im Boden fest.
    Davon abgesehen sehe ich aber keine Abweichungen.

    ich rufe die Funktion so auf:

    Code:
    StorePTR=InsertItem       (Nimmitm, 1, _@(mob._zCVob_trafoobjtoworld));
    Nimmitm wird zuvor mit einem str befüllt, z.B. "itmi_gold"

    Das "mob" ist das Item, das ersetzt wird. Ich war nur zu faul um das in itm oder sowas umzubenennen.

    Code:
    var oCItem mob; mob = _^(vobPtr);
    Und mit nicht glitzernden Items gehts ja problemlos.


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

  15. Beiträge anzeigen #35 Zitieren
    Legende der Amazonen Avatar von Bisasam
    Registriert seit
    Dec 2006
    Ort
    Meine Faust in Sinis Gesicht
    Beiträge
    9.639
     
    Bisasam ist offline
    Hmm... also die Funktion insertet ja das Item am WP "Tot". Was wenn das Problem bei AlignVobAt steht


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

  16. Beiträge anzeigen #36 Zitieren
    Ehrengarde Avatar von mud-freak
    Registriert seit
    Dec 2005
    Beiträge
    2.199
     
    mud-freak ist offline
    Ja, es könnte sein, dass durchs nachträgliche Verschieben, der Item-Effekt nicht neugestartet wird. Du kannst mal testweise MEM_InsertItem probieren. Da stammt aus LeGo und erwartet neben der Instanz-ID drei Koordinaten als Float.

  17. Beiträge anzeigen #37 Zitieren
    Lehrling Avatar von dataframe
    Registriert seit
    Mar 2021
    Beiträge
    25
     
    dataframe ist offline
    Hallo zusammen,

    das insertAnything-Script funktioniert tadellos bei mir - danke @mud-freak dafür!

    Gibt es auch eine Möglichkeit eingefügte Vobs wieder zu löschen?

  18. Beiträge anzeigen #38 Zitieren
    Knight
    Registriert seit
    Aug 2009
    Ort
    Hessen
    Beiträge
    1.487
     
    Cryp18Struct ist gerade online
    In Ikarus.d:
    Code:
    MEM_DeleteVob(var int vobPtr)

  19. Beiträge anzeigen #39 Zitieren
    Lehrling Avatar von dataframe
    Registriert seit
    Mar 2021
    Beiträge
    25
     
    dataframe ist offline
    Hey super, danke dir.

    Weiß noch jemand wie ich ein mir bekanntes Vob positionieren kann? Ich habe einen Positionsvektor und eine existierende Vob-Instanz. Ich würde nun gern die Position des Vobs anpassen, nach der Erzeugung des Vobs.

    Hiermit konnte ich mein Problem lösen:


    // https://forum.worldofplayers.de/foru...tPositionWorld
    func void zCVob_SetPositionWorld(var int zCVobPtr, var int fX, var int fY, var int fZ) {
    const int zCVob__SetPositionWorld = 6404976; //0x61BB70
    const int arr[3] = {0,0,0};
    arr[0] = fX;
    arr[1] = fY;
    arr[2] = fZ;
    CALL_PtrParam(MEM_GetIntAddress(arr[0]));
    CALL__thiscall(zCVobPtr, zCVob__SetPositionWorld);
    };
    Geändert von dataframe (27.03.2021 um 15:46 Uhr)

  20. Beiträge anzeigen #40 Zitieren
    Lehrling Avatar von dataframe
    Registriert seit
    Mar 2021
    Beiträge
    25
     
    dataframe ist offline
    Wie ist es eigentlich möglich einem Vob, bzw einem oCMobDoor, eine Funkion zu übergeben wenn der Spieler das Vob im Fokus hat und "benutzt" ? Ich würde gerne ein benutzbares Bett spawnen - dazu gibt es ja die Methoden InsertMobDoorPos, usw. , aus dem Skript - im Spacer habe ich nun eine OnStateFunc "SLEEPABIT" gesehen - wie kann soetwas via Skript übergeben werden?

Seite 2 von 3 « Erste 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