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

 

Ergebnis 1 bis 15 von 15
  1. Beiträge anzeigen #1 Zitieren
    Drachentöter Avatar von Zaphod Beeblebrox
    Registriert seit
    Aug 2008
    Beiträge
    4.898
     
    Zaphod Beeblebrox ist offline

    zCVob_trafoObjToWorld ändern

    Ich möchte an der Position des Helden ein Vob platzieren, wobei die Position etwas vor dem Helden sein sollte und da Vobs auch nicht in der Luft hängen sollen, müsste auch die Höhenposition veränderbar sein.

    Wie kann man mit Ikarus möglichst einfach die Position ändern?

    Code:
    var oCNpc her;	
    var zCVob mein_vob;
    var int heldposx;
    var int heldposy;
    var int heldposz;
    
    	MEM_InitGlobalInst();
    	
    	her = Hlp_GetNpc (PC_Hero);
    	mein_vob = MEM_PtrToInst(MEM_SearchVobByName("MEINVOB"));
    	
    	heldposx = her._zCVob_trafoObjToWorld[3];
    	heldposy = her._zCVob_trafoObjToWorld[7];
    	heldposz = her._zCVob_trafoObjToWorld[11];
    	
    	mein_vob.trafoObjToWorld[zCVob_trafoObjToWorld_X] = heldposx;
    	mein_vob.trafoObjToWorld[zCVob_trafoObjToWorld_Y] = heldposy;
    	mein_vob.trafoObjToWorld[zCVob_trafoObjToWorld_Z] = heldposz;
    Das Vob erscheint nun direkt im Held und sollte eben versetzt werden. Vom Ansatz her den Vector mit einem float multiplizieren und updaten? (mulf?)
    Die gefährlichste aller Weltanschauungen ist die Weltanschauung der Leute, welche die Welt nicht angeschaut haben.
    Alexander von Humboldt

  2. Beiträge anzeigen #2 Zitieren
    Schwertmeister
    Registriert seit
    May 2009
    Beiträge
    924
     
    Umfi ist offline
    Zitat Zitat von Zaphod Beeblebrox Beitrag anzeigen
    Ich möchte an der Position des Helden ein Vob platzieren, wobei die Position etwas vor dem Helden sein sollte und da Vobs auch nicht in der Luft hängen sollen, müsste auch die Höhenposition veränderbar sein.
    Damit das VOB nicht in der Luft schwebt, kann du mit "TraceRay" arbeiten. (Siehe Sektenspinners Irrwichtel - Source)
    Damit kannst du die genau am Boden ausrichten.

    Das Vob erscheint nun direkt im Held und sollte eben versetzt werden. Vom Ansatz her den Vector mit einem float multiplizieren und updaten? (mulf?)
    Ja z.b so:

    Code:
    meinVob.trafoObjToWorld[7] = addf(heldposy, mkf(100));

    Bzw. musst/solltest du nach dem verschieben die Position des VOBs updaten, da es sonst flakert, und fokusname evt. an der falschen Position ist.

    Dazu gibt es die Funktion
    Code:
    VobPositionUpdated();
    DIe soltest du im Ikarus Thread finden.

    mfg Umfi

  3. Beiträge anzeigen #3 Zitieren
    Drachentöter Avatar von Zaphod Beeblebrox
    Registriert seit
    Aug 2008
    Beiträge
    4.898
     
    Zaphod Beeblebrox ist offline
    Zitat Zitat von Umfi Beitrag anzeigen
    Damit das VOB nicht in der Luft schwebt, kann du mit "TraceRay" arbeiten. (Siehe Sektenspinners Irrwichtel - Source)
    Damit kannst du die genau am Boden ausrichten.



    Ja z.b so:

    Code:
    meinVob.trafoObjToWorld[7] = addf(heldposy, mkf(100));

    Bzw. musst/solltest du nach dem verschieben die Position des VOBs updaten, da es sonst flakert, und fokusname evt. an der falschen Position ist.

    Dazu gibt es die Funktion
    Code:
    VobPositionUpdated();
    DIe soltest du im Ikarus Thread finden.

    mfg Umfi
    also

    Code:
    mein_Vob.trafoObjToWorld[3] = addf(heldposx, mkf(200));
    verschiebt das Vob schon mal , danke dafür

    Code:
    VobPositionUpdated(MEM_InstToPtr(mein_Vob));
    damit wird auch alles korrekt neu positioniert, incl Fokus und ohne flirren usw.

    Was muss ich aber verändern, das das Vob seine z Pos verändert?

    EDIT
    Zitat Zitat von Umfi Beitrag anzeigen
    Damit das VOB nicht in der Luft schwebt, kann du mit "TraceRay" arbeiten. (Siehe Sektenspinners Irrwichtel - Source)
    Damit kannst du die genau am Boden ausrichten.
    Damit also das Vob zum Boden ausrichten, das werde ich mal versuchen.
    Die gefährlichste aller Weltanschauungen ist die Weltanschauung der Leute, welche die Welt nicht angeschaut haben.
    Alexander von Humboldt
    Geändert von Zaphod Beeblebrox (10.06.2012 um 18:18 Uhr)

  4. Beiträge anzeigen #4 Zitieren
    Drachentöter Avatar von Zaphod Beeblebrox
    Registriert seit
    Aug 2008
    Beiträge
    4.898
     
    Zaphod Beeblebrox ist offline
    Also mit dem TraceRay komme ich nicht klar, das übersteigt meine Kenntnisse.

    Eine direkte Vectorveränderung würde in dem Fall ausreichen, auch wenn das Vob im Boden steckt...

    heldposx,heldposy,heldposz ist ja genau die Mitte des Helden, der ist 180 cm groß.

    Es würde mir auch schon reichen, wenn ich das Vob irgendwie in der Höhe verändern könnte da es wie gesagt egal ist wenn es im Boden steckt. Es sollte auch noch um 360 Grad gedreht werden da imo die Rückseite angezeigt wird.

    EDIT
    man sollte sich eben auch die float.d mal ansehen bevor man solche dummen Fragen stellt

    Code:
    mein_Vob.trafoObjToWorld[7] 	= subf(heldposy, mkf(100));
    Die gefährlichste aller Weltanschauungen ist die Weltanschauung der Leute, welche die Welt nicht angeschaut haben.
    Alexander von Humboldt
    Geändert von Zaphod Beeblebrox (10.06.2012 um 19:01 Uhr)

  5. Beiträge anzeigen #5 Zitieren
    Dea
    Registriert seit
    Jul 2007
    Beiträge
    10.466
     
    Lehona ist offline
    Also dass um 360° drehen kannst du dir sparen, das ist redundant Um 180° drehen hingegen macht mehr Sinn bei deiner Beschreibung, ist aber auch komplizierter...

    Ich habe mal dieses Script aus den Weiten meiner Festplatte hervorgekramt (von Gottfried):
    Code:
    /******************************************
        Trafo Hilfsfunktionen
    \******************************************
    
    Vorraussetzungen:
     - Ikarus-Skriptpaket von Sektenspinner
     - Floatpaket von Sektenspinner
    
    Folgende Funktionen werden zur Verf�gung gestellt:
    
    == "Set"-Funktionen ==
    
    void TRF_Move(zCVob obj, (f)int dx, (f)int dy, (f)int dz)
      Verschiebt das Objekt um dx, dy, dz
    
    void TRF_MoveTo(zCVob obj, (f)int x, (f)int y, (f)int z)
      Verschiebt das Objekt zum Punkt x, y, z
    
    void TRF_SetRot(zCVob obj, int x, int y, int z)
      Dreht das Objekt nach x, y, z � nach dem Winkelma�
    
    NOTIZ: Alle diese Funktionen besitzen jeweils noch ein Abbild f�r X, Y und Z einzelnd. Die Entsprechende Achse muss nur an den Funktionsnamen geh�ngt werden. (TRF_MoveToX zB.)
    WARNUNG: Bei der Rotation um eine Spezifische Achse werden die beiden Anderen zur�ckgesetzt!
    
    == "Get"-Funktionen ==
    
    (f)int TRF_Deg2Rad(int angle)
      Umwandlung vom Winkelma� zum Bogenma�.
      
    int TRF_Rad2Deg(int angle)
      Umwandlung vom Bogenma� zum Winkelma�.
    
    (f)int TRF_Sin(int angle)
      Sinus des Winkels "angle". (Gradma�)
    
    (f)int TRF_Cos(int angle)
      Cosinus des Winkels "angle". (Gradma�)
      
    (f)int TRF_SinR(int angle)
      Sinus des Winkels "angle". (Bogenma�)
      
    (f)int TRF_CosR(int angle)
      Cosinus des Winkels "angle". (Bogenma�)
      
    int TRF_Arc(int sin, int cos)
      Arkus-Sinus und Arkus-Kosinus. Ich empfehle immer beide Werte anzugeben, da zB. sin(89) und sin(91) �bereinstimmen.
      Sollte ein Wert fehlen, bitte mit der Konstante TRF_NOANGLE angeben. (Bsp.: TRF_Arc(TRF_Sin(50), TRF_NOANGLE))
      R�ckgabewert ist � nach dem Winkelma�
      
    (f)int TRF_ArcSin(int sin)
      Im Gegensatz zu der vorherigen Funktion wird hier kein Vergleich benutzt sondern die Taylorreihe.
      (Funktioniert noch nicht ordnungsgem��, also lieber obere Funktion benutzen)
      R�ckgabewert ist im Bogenma�
      
    (f)int TRF_GetDist(zCVob obj1, zCVob obj2)
      Die Distanz zweier Objekte. Hierbei wird im Gegensatz zu Npc_GetDistToNpc die H�he mit einbezogen.
    
    (f)int TRF_GetDistXY((f)int x0, (f)int y0, (f)int x1, (f)int y1)
      Die Distanz zweier Punkte. 
    
    (f)int TRF_GetDistXYZ((f)int x0, (f)int y0, (f)int z0, (f)int x1, (f)int y1, (f)int z1)
      Dis Distanz zweier Punkte. 
      
    int TRF_GetAngle(zCVob obj1, zCVob, obj2)
      Der Winkel zweier Objekte auf der X und Z-Achse zueinander.
      R�ckgabewert ist � nach dem Winkelma�.
      
    int TRF_GetAngleXY((f)int x0, (f)int y0, (f)int x1, (f)int y1)
      Der Winkel zweier Punkte zueinander. R�ckgabewert ist � nach dem Winkelma�.
    
    \******************************************/
    
    /* = NICHT BER�HREN! = */
    var int TRFInit;
    const int TRF_NOANGLE = 1073741824;
    /* = = = = = = = = = = */
    
    const int TRF_ArcLoop = 20; //Wie oft die Arc-Reihe Wiederholen?
    
    //------------------------MOVETO---------------------------
    func void TRF_MoveTo(var zCVob obj, var int x, var int y, var int z) {
        obj.trafoObjToWorld[ 3] = x;
        obj.trafoObjToWorld[ 7] = y;
        obj.trafoObjToWorld[11] = z;
    };
    func void TRF_MoveToX(var zCVob obj, var int x) {
        obj.trafoObjToWorld[ 3] = x;
    };
    func void TRF_MoveToY(var zCVob obj, var int y) {
        obj.trafoObjToWorld[ 3] = y;
    };
    func void TRF_MoveToZ(var zCVob obj, var int z) {
        obj.trafoObjToWorld[ 3] = z;
    };
    
    //-------------------------MOVE----------------------------
    func void TRF_Move(var zCVob obj, var int dx, var int dy, var int dz) {
        obj.trafoObjToWorld[ 3] = addf(obj.trafoObjToWorld[ 3], dx);
        obj.trafoObjToWorld[ 7] = addf(obj.trafoObjToWorld[ 7], dy);
        obj.trafoObjToWorld[11] = addf(obj.trafoObjToWorld[11], dz);
    };
    func void TRF_MoveX(var zCVob obj, var int dx) {
        obj.trafoObjToWorld[ 3] = addf(obj.trafoObjToWorld[ 3], dx);
    };
    func void TRF_MoveY(var zCVob obj, var int dy) {
        obj.trafoObjToWorld[ 7] = addf(obj.trafoObjToWorld[ 7], dy);
    };
    func void TRF_MoveZ(var zCVob obj, var int dz) {
        obj.trafoObjToWorld[11] = addf(obj.trafoObjToWorld[11], dz);
    };
    
    //--------------------RAD und DEG--------------------------
    const int TRFINT_Rad2Deg = 1113927393; //57.29578
    func int TRF_Deg2Rad(var int x) {
        return divf(mkf(x), TRFINT_Rad2Deg);
    };
    func int TRF_Rad2Deg(var int x) {
        return roundf(mulf(x, TRFINT_Rad2Deg));
    };
    
    const int TRFINT_Adr_Sin = 8599080; //0x833628
    func int TRFINT_SIN(var int x) {
        x = mulf(x, 1148848204); //* 1000.13
        x = addf(x, 1162107260); //+ 1000*PI
        x = roundf(x);
        var int ptr; ptr = MEM_StackPos.position;
        if(x<0) {
            x+=6284;
            MEM_StackPos.position = ptr;
        };
        x = x%6284;
        return MEM_ReadInt(TRFINT_Adr_Sin+(4*x));
    };
    
    func int TRF_Sin(var int offs) {
        return TRFINT_SIN(TRF_Deg2Rad(offs));
    };
    func int TRF_Cos(var int offs) {
        return TRFINT_SIN(TRF_Deg2Rad(offs+90));
    };
    
    func int TRF_SinR(var int offs) {
        return TRFINT_SIN(offs);
    };
    func int TRF_CosR(var int offs) {
        return TRFINT_SIN(offs+90);
    };
    
    //-----------------------SETROT----------------------------
    const int zCVob__RotateWorldX = 6404096; //61B800
    const int zCVob__RotateWorldY = 6404144; //61B830
    const int zCVob__RotateWorldZ = 6404192; //61B860
    const int zCVob__ResetRotationsWorld = 6406144; //61C000
    
    func void TRF_RotateX(var zCVob obj, var int x) {
            CALL_FloatParam(x);
        CALL__thiscall(MEM_InstToPtr(obj), zCVob__RotateWorldX);
    };
    func void TRF_RotateY(var zCVob obj, var int x) {
            CALL_FloatParam(x);
        CALL__thiscall(MEM_InstToPtr(obj), zCVob__RotateWorldY);
    };
    func void TRF_RotateZ(var zCVob obj, var int x) {
            CALL_FloatParam(x);
        CALL__thiscall(MEM_InstToPtr(obj), zCVob__RotateWorldZ);
    };
    func void TRF_Rotate(var zCVob obj, var int x, var int y, var int z) {
            TRF_RotateX(obj, x);
            TRF_RotateY(obj, y);
            TRF_RotateZ(obj, z);
    };
    
    func void TRF_ResetRotation(var zCVob obj) {
        CALL__thiscall(MEM_InstToPtr(obj), zCVob__ResetRotationsWorld);
    };
    
    func void TRF_SetRotX(var zCVob obj, var int x) {
            TRF_ResetRotation(obj);
            TRF_RotateX(obj, x);
    };
    func void TRF_SetRotY(var zCVob obj, var int x) {
            TRF_ResetRotation(obj);
            TRF_RotateY(obj, x);
    };
    func void TRF_SetRotZ(var zCVob obj, var int x) {
            TRF_ResetRotation(obj);
            TRF_RotateZ(obj, x);
    };
    func void TRF_SetRot(var zCVob obj, var int x, var int y, var int z) {
            TRF_ResetRotation(obj);
            TRF_RotateX(obj, x);
            TRF_RotateY(obj, y);
            TRF_RotateZ(obj, z);
    };
    
    func void TRF_SetRotYXZ(var zCVob obj, var int x, var int y, var int z) {
            TRF_ResetRotation(obj);
            TRF_RotateY(obj, y);
            TRF_RotateX(obj, x);
            TRF_RotateZ(obj, z);
    };
    
    //-----------------------GETDIST---------------------------
    func int TRF_GetDistXY(var int x0, var int y0, var int x1, var int y1) {
        var int a; var int b; var int c;
        a = subf(x0, x1);
        b = subf(y0, y1);
        c = addf(mulf(a,a), mulf(b,b));
        return sqrtf(c);
    };
    func int TRF_GetDistXYZ(var int x0, var int y0, var int z0, var int x1, var int y1, var int z1) {
        var int c; var int d; var int e;
        c = TRF_GetDistXY(x0, y0, x1, y1);
        d = subf(z0, z1);
        e = addf(mulf(c,c), mulf(d,d));
        return sqrtf(e);
    };
    func int TRF_GetDist(var zCVob obj, var zCVob obj2) {
        return TRF_GetDistXYZ(obj.trafoObjToWorld[3], obj.trafoObjToWorld[7], obj.trafoObjToWorld[11],
                              obj2.trafoObjToWorld[3],obj2.trafoObjToWorld[7],obj2.trafoObjToWorld[11]);
    };
    
    //-----------------------ARKUS-----------------------------
    const int f1 = floateins;
    func int TRF_Arc(var int sin, var int cos) {
        var int i; var int imax;
        var int j; var int jmax;
        var int mem0; var int mem1;
        mem0 = 0; mem1 = 0;
        var int ptr;
        var int lsin; var int csin;
        
        if(sin > 0) {
            i = 0;
            imax = 90;
            j = 90;
            jmax = 180;
        }
        else {
            i = 180;
            imax = 270;
            j = 270;
            jmax = 360;
        };
        if(sin==TRF_NOANGLE) { i = 360; sin = 0; };
        if(cos==TRF_NOANGLE) { j = 360; cos = 0; };
        
        // Konstante Werte festhalten
        if(gef(cos, f1))       { return 0;   };
        if(gef(sin, f1))       { return 90;  };
        if(lef(cos, negf(f1))) { return 180; };
        if(lef(sin, negf(f1))) { return 270; };
    
        lsin = 0;
        ptr = MEM_StackPos.position;
        if(i<imax) {
            i += 1;
            csin = TRF_Sin(i);
            if (i<=90) { //Steigend
                if(lf(lsin, sin)) {
                    if(gef(csin, sin)) {
                        mem0 = i;
                        i = imax;
                    };
                };
            }
            else { //Fallend
                if(gf(lsin, sin)) {
                    if(lef(csin, sin)) {
                        mem0 = i;
                        i = imax;
                    };
                };
            };
            lsin = csin+0;
            MEM_StackPos.position = ptr;
        };
        lsin = 0;
        ptr = MEM_StackPos.position;
        if(j<jmax) {
            j += 1;
            csin = TRF_Cos(j);
            if(j<=180) {
                if(gf(lsin, cos)) {
                    if(lef(csin, cos)) {
                        mem1 = j;
                        j = jmax;
                    };
                };
            }
            else {
                if(lf(lsin, cos)) {
                    if(gef(csin, cos)) {
                        mem1 = j;
                        j = jmax;
                    };
                };
            };
            lsin = csin+0;
            MEM_StackPos.position = ptr;
        };
    
        if(!mem1) {
            return mem0;
        };
        return mem1;
    };
    
    func int TRF_ArcSin(var int sin) {
        var int Esin; Esin = sin;
        var int z0; var int res;
        var int n0; var int n1;
        var int v0; var int v1;
        res = sin; Esin = mulf(mulf(sin, sin), sin);
        z0 = 1; n0 = 2; n1 = 3;
        
        var int i; i = 0;
        var int pos; pos = MEM_StackPos.position;
        if(i < TRF_ArcLoop) {
            i += 1;
            // Ich wei� nicht, ob es schneller geht wenn man mit
            // floats rechnet oder mit integern und daf�r immer
            // umwandelt.. Ich hab mich f�r letztere Methode 
            // entschieden.
            v0 = divf(mkf(z0), mkf(n0));
            v1 = divf(Esin, mkf(n1));
            res = addf(res, mulf(v0, v1));
            
            z0 *= z0+2;
            n0 *= n0+2;
            n1 += 2;
            Esin = mulf(mulf(Esin, sin), sin);
            
            pos = MEM_StackPos.position;
        };
        return res;
    };
    
    //----------------------GETANGLE---------------------------
    func int TRF_GetAngleXY(var int x0, var int y0, var int x1, var int y1) {
        var int a; var int b; var int c;
        a = subf(x0, x1);
        b = subf(y0, y1);
        c = addf(mulf(a,a), mulf(b,b));
        c = sqrtf(c);
        var int sinA; var int cosA;
        sinA = divf(a,c);
        cosA = divf(b,c);
        return TRF_Arc(sinA, cosA);
    };
    func int TRF_GetAngle(var zCVob obj, var zCVob obj2) {
        return TRF_GetAngleXY(obj.trafoObjToWorld[3], obj.trafoObjToWorld[11], obj2.trafoObjToWorld[3], obj2.trafoObjToWorld[11]);
    };
    Damit sollte es gehen, es werden gleichzeitig auch schöne Funktionen für das Verschieben angeboten. Du musst VobPositionUpdated() trotzdem danach aufrufen.

  6. Beiträge anzeigen #6 Zitieren
    Drachentöter Avatar von Zaphod Beeblebrox
    Registriert seit
    Aug 2008
    Beiträge
    4.898
     
    Zaphod Beeblebrox ist offline
    Also die TRF_Move(var zCVob obj, var int dx, var int dy, var int dz) funktioniert so nicht.
    wenn ich sie so ergänze geht es

    Code:
    //-------------------------MOVE----------------------------
    func void TRF_Move(var zCVob obj, var int dx, var int dy, var int dz) {
    	obj.trafoObjToWorld[ 3] = addf(obj.trafoObjToWorld[ 3], mkf(dx));
    	obj.trafoObjToWorld[ 7] = addf(obj.trafoObjToWorld[ 7], mkf(dy));
    	obj.trafoObjToWorld[11] = addf(obj.trafoObjToWorld[11], mkf(dz));
    };
    was wiederum nichts anderes ist als das

    Code:
    mein_Vob.trafoObjToWorld[7] 	= subf(heldposy, mkf(100));
    Die vob drehungs func werde ich mal versuchen.
    Danke für das Script Paket da sind viele nützliche Scripte vorhanden.
    Die gefährlichste aller Weltanschauungen ist die Weltanschauung der Leute, welche die Welt nicht angeschaut haben.
    Alexander von Humboldt

  7. Beiträge anzeigen #7 Zitieren
    now also in your universe  Avatar von Milky-Way
    Registriert seit
    Jun 2007
    Beiträge
    15.354
     
    Milky-Way ist offline
    Die originale Funktion erwartet, dass die Parameter bereits Floats sind.

  8. Beiträge anzeigen #8 Zitieren
    Drachentöter Avatar von Zaphod Beeblebrox
    Registriert seit
    Aug 2008
    Beiträge
    4.898
     
    Zaphod Beeblebrox ist offline
    Zitat Zitat von Milky-Way Beitrag anzeigen
    Die originale Funktion erwartet, dass die Parameter bereits Floats sind.
    So siehts aus.
    Die gefährlichste aller Weltanschauungen ist die Weltanschauung der Leute, welche die Welt nicht angeschaut haben.
    Alexander von Humboldt

  9. Beiträge anzeigen #9 Zitieren
    Schwertmeister
    Registriert seit
    May 2009
    Beiträge
    924
     
    Umfi ist offline
    Also irgendwie passiert bei mir garnichts bei den Rotationsfunktionen. Ruf ich die falsch auf?


    TRF_SetRotX(Haus, 180); oder TRF_SetRotX (Haus, mkf (180));
    Bei beiden Versionen verändert sich ncihts. (Ja, VobPositionUpdated() wird danach aufgerufen.)

  10. Beiträge anzeigen #10 Zitieren
    Ehrengarde Avatar von Gottfried
    Registriert seit
    Mar 2006
    Beiträge
    2.512
     
    Gottfried ist offline
    Wie initialisierst du 'Haus'? Im Prinzip wäre mkf(180) korrekt und so habe ich es früher auch benutzt - mit Erfolg.

    MfG Gottfried

  11. Beiträge anzeigen #11 Zitieren
    Schwertmeister
    Registriert seit
    May 2009
    Beiträge
    924
     
    Umfi ist offline
    Zitat Zitat von Gottfried Beitrag anzeigen
    Wie initialisierst du 'Haus'? Im Prinzip wäre mkf(180) korrekt und so habe ich es früher auch benutzt - mit Erfolg.

    MfG Gottfried
    Hier mal der Codeteil:

    Code:
        if (...) {
            var int vobPtr; vobPtr = MEM_SearchVobByName("SURVIVAL_HOUSE_00");
            var zCVob Haus;    Haus = MEM_PtrToInst (vobPtr);
            VobSetVisual(vobPtr, "shelter.3DS");
            TRF_SetRotX (Haus, mkf (180));
            VobPositionUpdated(vobPtr);
            SURVIVAL_HOUSE_00_BUILD = TRUE;
        };

    EDIT:

    Code:
    func void VobSetVisual(var int vobPtr, var string str) {
    	const int zCVob__SetVisual = 6301312; //602680
    	
    	CALL_zStringPtrParam(str);
    	CALL__thiscall(vobPtr, zCVob__SetVisual);
    };
    Geändert von Umfi (12.05.2016 um 15:39 Uhr) Grund: VobSetVisual ergänzt

  12. Beiträge anzeigen #12 Zitieren
    Ehrengarde Avatar von Gottfried
    Registriert seit
    Mar 2006
    Beiträge
    2.512
     
    Gottfried ist offline
    Wie genau hast du SURVIVAL_HOUSE_00 im Spacer gesetzt? Funktionieren denn die anderen Funktionen wie zB. Move?

    MfG Gottfried

  13. Beiträge anzeigen #13 Zitieren
    Schwertmeister
    Registriert seit
    May 2009
    Beiträge
    924
     
    Umfi ist offline
    Zitat Zitat von Gottfried Beitrag anzeigen
    Wie genau hast du SURVIVAL_HOUSE_00 im Spacer gesetzt? Funktionieren denn die anderen Funktionen wie zB. Move?

    MfG Gottfried
    Ja die Funktion wie MoveTo() usw. funktionieren.

    Das Vob hab ich nicht im Spacer gesetzt sondern durch Skripte.

    Code:
    if (...) {
        var int housePtr;     housePtr = MEM_InsertVob("shelter_cs.3DS", "BUILD_HOUSE_HERE"); 
        var zCVob Haus;     Haus = MEM_PtrToInst (housePtr);
        
        MEM_RenameVob (housePtr, "SURVIVAL_HOUSE_00");
        
        ...
    };

  14. Beiträge anzeigen #14 Zitieren
    Ehrengarde Avatar von Gottfried
    Registriert seit
    Mar 2006
    Beiträge
    2.512
     
    Gottfried ist offline
    Vielleicht liegt es daran. Hast du auch mal probiert ein im Spacer gesetztes Vob zu rotieren?

    (Tut mir leid dass ich hier selbst nichts testen kann, habe gerade kein Gothic zur Hand..)

    MfG Gottfried

  15. Beiträge anzeigen #15 Zitieren
    Schwertmeister
    Registriert seit
    May 2009
    Beiträge
    924
     
    Umfi ist offline
    Zitat Zitat von Gottfried Beitrag anzeigen
    Vielleicht liegt es daran. Hast du auch mal probiert ein im Spacer gesetztes Vob zu rotieren?

    (Tut mir leid dass ich hier selbst nichts testen kann, habe gerade kein Gothic zur Hand..)

    MfG Gottfried
    Okay, hab es jetzt im Spacer auch probiert (Kollision ein). Hat nicht funktioniert.
    Dann hab ich es nochmal ohne Kollision versucht, dann hat es funktionier.
    Wird dann wohl an der Kollision gelegen haben, ich werds gleich mal aus den Skripten heraus testen.

    EDIT: Jap, lag an der Kollison. Hier mal die Änderung, sollte es jemanden interessieren...
    Code:
        if (...) {
            var int vobPtr; vobPtr = MEM_SearchVobByName("SURVIVAL_HOUSE_00");    
            var zCVob vob;    vob = MEM_PtrToInst (vobPtr);
            
            vob.bitfield[0] = vob.bitfield[0] & ~  zCVob_bitfield0_collDetectionDynamic;
            vob.bitfield[0] = vob.bitfield[0] & ~  zCVob_bitfield0_collDetectionStatic;
    
            VobSetVisual(vobPtr, "shelter.3DS");
            TRF_SetRotY (vob, mkf (180));
            VobPositionUpdated(vobPtr);
            
            vob.bitfield[0] = vob.bitfield[0] |  zCVob_bitfield0_collDetectionDynamic;
            vob.bitfield[0] = vob.bitfield[0] |  zCVob_bitfield0_collDetectionStatic;
            
            SURVIVAL_HOUSE_00_BUILD = TRUE;
    };
    Geändert von Umfi (15.06.2012 um 21:19 Uhr)

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