Jump to content

[8461] Doors animation fix


Guest Opterman

Recommended Posts

What bug does the patch fix? What features does the patch add?

It fixes wrong door animation at visibility range.

For which repository revision was the patch created?

8432

Who has been writing this patch? Please include either forum user names or email addresses.

Me

This is the patch:

From 91352a4a19cbb6f8a06f69d3e3a85f633e05c396 Mon Sep 17 00:00:00 2001
From: unknown <Administrator@.(none)>
Date: Mon, 31 Aug 2009 08:19:53 -0700
Subject: [PATCH] GAME_OBJECT_TYPE_DOOR Animation

---
src/game/GameObject.cpp |    1 +
src/game/Object.cpp     |    8 ++++----
2 files changed, 5 insertions(+), 4 deletions(-)

diff --git a/src/game/GameObject.cpp b/src/game/GameObject.cpp
index 6ddd5a2..866e468 100644
--- a/src/game/GameObject.cpp
+++ b/src/game/GameObject.cpp
@@ -145,6 +145,7 @@ bool GameObject::Create(uint32 guidlow, uint32 name_id, Map *map, uint32 phaseMa

    SetUInt32Value(GAMEOBJECT_FACTION, goinfo->faction);
    SetUInt32Value(GAMEOBJECT_FLAGS, goinfo->flags);
+    SetUInt32Value(GAMEOBJECT_BYTES_1, uint32(-1));

    SetEntry(goinfo->id);

diff --git a/src/game/Object.cpp b/src/game/Object.cpp
index 1601738..51247fe 100644
--- a/src/game/Object.cpp
+++ b/src/game/Object.cpp
@@ -711,18 +711,18 @@ void Object::_BuildValuesUpdate(uint8 updatetype, ByteBuffer * data, UpdateMask
                        switch(((GameObject*)this)->GetGoType())
                        {
                            case GAMEOBJECT_TYPE_CHEST:
-                                *data << uint32(9);         // enable quest object. Represent 9, but 1 for client before 2.3.0
+                                *data << uint32(0xFFFF0009);         // enable quest object. Represent 9, but 1 for client before 2.3.0
                                break;
                            case GAMEOBJECT_TYPE_GOOBER:
-                                *data << uint32(1);
+                                *data << uint32(0xFFFF0001);
                                break;
                            default:
-                                *data << uint32(0);         // unknown, not happen.
+                                *data << uint32(0xFFFF0000);         // unknown, not happen.
                                break;
                        }
                    }
                    else
-                        *data << uint32(0);                 // disable quest object
+                        *data << uint32(0xFFFF0000);                 // disable quest object
                }
                else
                    *data << m_uint32Values[ index ];       // other cases
-- 
1.6.2.msysgit.0.186.gf7512

Well, when somebody relog in front of a door or is recently at visibility range it animates as if it was opening. I take dumps from official server and i noticed that the high word value of GAMEOBJECT_DYNAMIC was always -1 as unsigned so I think that wow client take -1 high word value as no animation, so that's what i fixed.

This 's the dump:

Updated the 18 values of the object (11658 [GameObject:] 190584).

Value modified [14 / * 0x0000000E * / (GAMEOBJECT_DYNAMIC + 0000)] = 65535 9 / * 0xFFFF 0x0009 - FFFF0009 - * /.

Block 21 is read type 0.

Updated the 18 values of the object (777 [GameObject:] 190584).

Value modified [14 / * 0x0000000E * / (GAMEOBJECT_DYNAMIC + 0000)] = 65535 9 / * 0xFFFF 0x0009 - FFFF0009 - * /.

Block 22 is read type 0.

Updated the 18 values of the object (789 [GameObject:] 190584).

Value modified [14 / * 0x0000000E * / (GAMEOBJECT_DYNAMIC + 0000)] = 65535 9 / * 0xFFFF 0x0009 - FFFF0009 - * /.

Block 23 is read type 0.

Updated the 18 values of the object (156 [GameObject:] 191748).

Value modified [14 / * 0x0000000E * / (GAMEOBJECT_DYNAMIC + 0000)] = 65535 0 / * 0xFFFF 0x0000 - FFFF0000 - * /.

Block 24 is read type 0.

Updated the 18 values of the object (158 [GameObject:] 191747).

Value modified [14 / * 0x0000000E * / (GAMEOBJECT_DYNAMIC + 0000)] = 65535 0 / * 0xFFFF 0x0000 - FFFF0000 - * /.

Block 25 is read type 0.

Updated the 18 values of the object (162 [GameObject:] 191541).

Value modified [14 / * 0x0000000E * / (GAMEOBJECT_DYNAMIC + 0000)] = 65535 0 / * 0xFFFF 0x0000 - FFFF0000 - * /.

Block 26 is read type 0.

Updated the 18 values of the object (166 [GameObject:] 191540).

Value modified [14 / * 0x0000000E * / (GAMEOBJECT_DYNAMIC + 0000)] = 65535 0 / * 0xFFFF 0x0000 - FFFF0000 - * /.

Block 27 is read type 0.

Updated the 18 values of the object (725 [GameObject:] 190569).

Value modified [14 / * 0x0000000E * / (GAMEOBJECT_DYNAMIC + 0000)] = 65535 0 / * 0xFFFF 0x0000 - FFFF0000 - * /.

Block 28 is read type 0.

Updated the 18 values of the object (729 [GameObject:] 190569).

Value modified [14 / * 0x0000000E * / (GAMEOBJECT_DYNAMIC + 0000)] = 65535 0 / * 0xFFFF 0x0000 - FFFF0000 - * /.

Block 29 is read type 0.

Updated the 18 values of the object (733 [GameObject:] 190557).

Value modified [14 / * 0x0000000E * / (GAMEOBJECT_DYNAMIC + 0000)] = 65535 0 / * 0xFFFF 0x0000 - FFFF0000 - * /.

Block 30 is read type 0.

Updated the 18 values of the object (799 [GameObject:] 191634).

Value modified [14 / * 0x0000000E * / (GAMEOBJECT_DYNAMIC + 0000)] = 65535 0 / * 0xFFFF 0x0000 - FFFF0000 - * /.

Block 31 is read type 0.

Updated the 18 values of the object (801 [GameObject:] 191617).

Value modified [14 / * 0x0000000E * / (GAMEOBJECT_DYNAMIC + 0000)] = 65535 0 / * 0xFFFF 0x0000 - FFFF0000 - * /.

Block 32 is read type 0.

Updated the 18 values of the object (803 [GameObject:] 191655).

Value modified [14 / * 0x0000000E * / (GAMEOBJECT_DYNAMIC + 0000)] = 65535 0 / * 0xFFFF 0x0000 - FFFF0000 - * /.

It reads the block 33, type 0.

Updated the 18 values of the object (807 [GameObject:] 191631).

Value modified [14 / * 0x0000000E * / (GAMEOBJECT_DYNAMIC + 0000)] = 65535 0 / * 0xFFFF 0x0000 - FFFF0000 - * /.

Block 34 is read type 0.

Updated the 18 values of the object (809 [GameObject:] 191650).

Value modified [14 / * 0x0000000E * / (GAMEOBJECT_DYNAMIC + 0000)] = 65535 0 / * 0xFFFF 0x0000 - FFFF0000 - * /.

It reads the block 35, type 0.

Updated the 18 values of the object (846 [GameObject:] 191590).

Value modified [14 / * 0x0000000E * / (GAMEOBJECT_DYNAMIC + 0000)] = 65535 0 / * 0xFFFF 0x0000 - FFFF0000 - * /.

It reads the block 36, type 0.

Updated the 18 values of the object (867 [GameObject:] 190647).

Value modified [14 / * 0x0000000E * / (GAMEOBJECT_DYNAMIC + 0000)] = 65535 0 / * 0xFFFF 0x0000 - FFFF0000 - * /.

It reads the block 37, type 0.

Updated the 18 values of the object (912 [GameObject:] 190584).

Value modified [14 / * 0x0000000E * / (GAMEOBJECT_DYNAMIC + 0000)] = 65535 9 / * 0xFFFF 0x0009 - FFFF0009 - * /.

It reads the block 38, type 0.

Updated the 18 values of the object (914 [GameObject:] 190584).

Value modified [14 / * 0x0000000E * / (GAMEOBJECT_DYNAMIC + 0000)] = 65535 9 / * 0xFFFF 0x0009 - FFFF0009 - * /.

Block 39 is read type 0.

Updated the 18 values of the object (930 [GameObject:] 191650).

Value modified [14 / * 0x0000000E * / (GAMEOBJECT_DYNAMIC + 0000)] = 65535 0 / * 0xFFFF 0x0000 - FFFF0000 - * /.

It reads the block 40, type 0.

Updated the 18 values of the object (938 [GameObject:] 191633).

Value modified [14 / * 0x0000000E * / (GAMEOBJECT_DYNAMIC + 0000)] = 65535 0 / * 0xFFFF 0x0000 - FFFF0000 - * /.

Block 41 is read type 0.

Updated the 18 values of the object (939 [GameObject:] 191655).

Value modified [14 / * 0x0000000E * / (GAMEOBJECT_DYNAMIC + 0000)] = 65535 0 / * 0xFFFF 0x0000 - FFFF0000 - * /.

It reads the block 42, type 0.

Updated the 18 values of the object (940 [GameObject:] 191618).

Value modified [14 / * 0x0000000E * / (GAMEOBJECT_DYNAMIC + 0000)] = 65535 0 / * 0xFFFF 0x0000 - FFFF0000 - * /.

It reads the block 43, type 0.

Updated the 18 values of the object (944 [GameObject:] 191581).

Value modified [14 / * 0x0000000E * / (GAMEOBJECT_DYNAMIC + 0000)] = 65535 0 / * 0xFFFF 0x0000 - FFFF0000 - * /.

It reads the block 44, type 0.

Updated the 18 values of the object (945 [GameObject:] 191580).

Value modified [14 / * 0x0000000E * / (GAMEOBJECT_DYNAMIC + 0000)] = 65535 0 / * 0xFFFF 0x0000 - FFFF0000 - * /.

It reads the block 45, type 0.

Updated the 18 values of the object (947 [GameObject:] 191577).

Value modified [14 / * 0x0000000E * / (GAMEOBJECT_DYNAMIC + 0000)] = 65535 0 / * 0xFFFF 0x0000 - FFFF0000 - * /.

It reads the block 46, type 0.

Updated the 18 values of the object (949 [GameObject:] 191582).

Value modified [14 / * 0x0000000E * / (GAMEOBJECT_DYNAMIC + 0000)] = 65535 0 / * 0xFFFF 0x0000 - FFFF0000 - * /.

It reads the block 47, type 0.

Updated values of the object 18 (1016 [GameObject:] 191664).

Value modified [14 / * 0x0000000E * / (GAMEOBJECT_DYNAMIC + 0000)] = 65535 0 / * 0xFFFF 0x0000 - FFFF0000 - * /.

It reads the block 48, type 0.

Updated values of the object 18 (1019 [GameObject:] 191583).

Value modified [14 / * 0x0000000E * / (GAMEOBJECT_DYNAMIC + 0000)] = 65535 0 / * 0xFFFF 0x0000 - FFFF0000 - * /.

It reads the block 49, type 0.

Updated values of the object 18 (1020 [GameObject:] 191589).

Value modified [14 / * 0x0000000E * / (GAMEOBJECT_DYNAMIC + 0000)] = 65535 0 / * 0xFFFF 0x0000 - FFFF0000 - * /.

Block 50 is read type 0.

Updated the 18 values of the object (1054 [GameObject:] 191632).

Value modified [14 / * 0x0000000E * / (GAMEOBJECT_DYNAMIC + 0000)] = 65535 0 / * 0xFFFF 0x0000 - FFFF0000 - * /.

It reads the block 51, type 0.

Updated the 18 values of the object (1059 [GameObject:] 191616).

Value modified [14 / * 0x0000000E * / (GAMEOBJECT_DYNAMIC + 0000)] = 65535 0 / * 0xFFFF 0x0000 - FFFF0000 - * /.

It reads the block 52, type 0.

Updated values of the object 18 (6004 [GameObject:] 190584).

Value modified [14 / * 0x0000000E * / (GAMEOBJECT_DYNAMIC + 0000)] = 65535 9 / * 0xFFFF 0x0009 - FFFF0009 - * /.

It reads the block 53, type 0.

Updated the 18 values of the object (11036 [GameObject:] 190584).

Value modified [14 / * 0x0000000E * / (GAMEOBJECT_DYNAMIC + 0000)] = 65535 9 / * 0xFFFF 0x0009 - FFFF0009 - * /.

It reads the block 54, type 0.

Updated the 18 values of the object (15594 [GameObject:] 190584).

Value modified [14 / * 0x0000000E * / (GAMEOBJECT_DYNAMIC + 0000)] = 65535 9 / * 0xFFFF 0x0009 - FFFF0009 - * /.

It reads the block 55, type 0.

Updated values of the object 18 (1011 [GameObject:] 191649).

Value modified [14 / * 0x0000000E * / (GAMEOBJECT_DYNAMIC + 0000)] = 65535 0 / * 0xFFFF 0x0000 - FFFF0000 - * /.

It reads the block 56, type 0.

Updated the 18 values of the object (155 [GameObject:] 191539).

Value modified [14 / * 0x0000000E * / (GAMEOBJECT_DYNAMIC + 0000)] = 65535 0 / * 0xFFFF 0x0000 - FFFF0000 - * /.

Block 57 is read type 0.

Updated the 18 values of the object (163 [GameObject:] 191538).

Value modified [14 / * 0x0000000E * / (GAMEOBJECT_DYNAMIC + 0000)] = 65535 0 / * 0xFFFF 0x0000 - FFFF0000 - * /.

Block 58 is read type 0.

Updated the 18 values of the object (703 [GameObject:] 191554).

Value modified [14 / * 0x0000000E * / (GAMEOBJECT_DYNAMIC + 0000)] = 65535 0 / * 0xFFFF 0x0000 - FFFF0000 - * /.

It reads the block 59, type 0.

Updated the 18 values of the object (707 [GameObject:] 191554).

Value modified [14 / * 0x0000000E * / (GAMEOBJECT_DYNAMIC + 0000)] = 65535 0 / * 0xFFFF 0x0000 - FFFF0000 - * /.

It reads the block 60 of type 0.

Updated the 18 values of the object (716 [GameObject:] 190569).

Value modified [14 / * 0x0000000E * / (GAMEOBJECT_DYNAMIC + 0000)] = 65535 0 / * 0xFFFF 0x0000 - FFFF0000 - * /.

It reads the block 61, type 0.

Updated the 18 values of the object (726 [GameObject:] 190569).

Value modified [14 / * 0x0000000E * / (GAMEOBJECT_DYNAMIC + 0000)] = 65535 0 / * 0xFFFF 0x0000 - FFFF0000 - * /.

It reads the block 62, type 0.

Updated the 18 values of the object (730 [GameObject:] 190569).

Value modified [14 / * 0x0000000E * / (GAMEOBJECT_DYNAMIC + 0000)] = 65535 0 / * 0xFFFF 0x0000 - FFFF0000 - * /.

It reads the block 63, type 0.

Updated the 18 values of the object (827 [GameObject:] 191612).

Value modified [14 / * 0x0000000E * / (GAMEOBJECT_DYNAMIC + 0000)] = 65535 0 / * 0xFFFF 0x0000 - FFFF0000 - * /.

It reads the block 64, type 0.

Updated the 18 values of the object (828 [GameObject:] 191613).

Value modified [14 / * 0x0000000E * / (GAMEOBJECT_DYNAMIC + 0000)] = 65535 0 / * 0xFFFF 0x0000 - FFFF0000 - * /.

It reads the block 65, type 0.

Updated the 18 values of the object (829 [GameObject:] 191613).

Value modified [14 / * 0x0000000E * / (GAMEOBJECT_DYNAMIC + 0000)] = 65535 0 / * 0xFFFF 0x0000 - FFFF0000 - * /.

It reads the 66 block of type 0.

Updated the 18 values of the object (830 [GameObject:] 191609).

Value modified [14 / * 0x0000000E * / (GAMEOBJECT_DYNAMIC + 0000)] = 65535 0 / * 0xFFFF 0x0000 - FFFF0000 - * /.

It reads the block 67, type 0.

Updated the 18 values of the object (831 [GameObject:] 191612).

Value modified [14 / * 0x0000000E * / (GAMEOBJECT_DYNAMIC + 0000)] = 65535 0 / * 0xFFFF 0x0000 - FFFF0000 - * /.

It reads the block 68, type 0.

Updated the 18 values of the object (832 [GameObject:] 191609).

Value modified [14 / * 0x0000000E * / (GAMEOBJECT_DYNAMIC + 0000)] = 65535 0 / * 0xFFFF 0x0000 - FFFF0000 - * /.

It reads the block 69, type 0.

Updated the 18 values of the object (74 [GameObject:] 190568).

Value modified [14 / * 0x0000000E * / (GAMEOBJECT_DYNAMIC + 0000)] = 65535 0 / * 0xFFFF 0x0000 - FFFF0000 - * /.

I initialize GAMEOBJECT_BYTES_1 too as -1 because in official servers its done by this way too, at least the highest byte value.

Value modified [17 / * 0x00000011 * / (GAMEOBJECT_BYTES_1 + 0000)] = 255 0 3 1 / * 0xFF 0x00 0x03 0x01 - FF000301 - * /.

Value modified [17 / * 0x00000011 * / (GAMEOBJECT_BYTES_1 + 0000)] = 255 0 9 1 / * 0xFF 0x00 0x09 0x01 - FF000901 - * /.

Value modified [17 / * 0x00000011 * / (GAMEOBJECT_BYTES_1 + 0000)] = 255 0 3 1 / * 0xFF 0x00 0x03 0x01 - FF000301 - * /.

Value modified [17 / * 0x00000011 * / (GAMEOBJECT_BYTES_1 + 0000)] = 255 0 6 1 / * 0xFF 0x00 0x06 0x01 - FF000601 - * /.

Greetings, Opterman

Link to comment
Share on other sites

+    SetUInt32Value(GAMEOBJECT_BYTES_1, uint32(-1));

GAMEOBJECT_BYTES_1 is not TWO_SHORT, andvalues are already set below in code by

    SetGoState(go_state);
   SetGoType(GameobjectTypes(goinfo->type));
   SetGoAnimProgress(animprogress);

You mean SetUInt16Value(GAMEOBJECT_DYNAMIC, 1, uint16(-1)); maybe?

Edit: i tested patch, and had some problems when object created. That was solved by the below code (*data split in two uint16 values, since we now know type is really TWO_SHORT).

diff --git a/src/game/GameObject.cpp b/src/game/GameObject.cpp
index 6ddd5a2..e4c631f 100644
--- a/src/game/GameObject.cpp
+++ b/src/game/GameObject.cpp
@@ -150,9 +150,10 @@ bool GameObject::Create(uint32 guidlow, uint32 name_id, Map *map, uint32 phaseMa

    SetUInt32Value(GAMEOBJECT_DISPLAYID, goinfo->displayId);

+    // GAMEOBJECT_BYTES_1, index at 0, 1, 2 and 3
    SetGoState(go_state);
    SetGoType(GameobjectTypes(goinfo->type));
-
+    SetGoArtKit(0);                                         // unknown what this is
    SetGoAnimProgress(animprogress);

    //Notify the map's instance data.
diff --git a/src/game/Object.cpp b/src/game/Object.cpp
index 1601738..71b691f 100644
--- a/src/game/Object.cpp
+++ b/src/game/Object.cpp
@@ -592,10 +592,9 @@ void Object::_BuildValuesUpdate(uint8 updatetype, ByteBuffer * data, UpdateMask
        if (isType(TYPEMASK_GAMEOBJECT) && !((GameObject*)this)->IsTransport())
        {
            if ( ((GameObject*)this)->ActivateToQuest(target) || target->isGameMaster())
-            {
                IsActivateToQuest = true;
-                updateMask->SetBit(GAMEOBJECT_DYNAMIC);
-            }
+
+            updateMask->SetBit(GAMEOBJECT_DYNAMIC);
        }
        else if (isType(TYPEMASK_UNIT))
        {
@@ -711,18 +710,27 @@ void Object::_BuildValuesUpdate(uint8 updatetype, ByteBuffer * data, UpdateMask
                        switch(((GameObject*)this)->GetGoType())
                        {
                            case GAMEOBJECT_TYPE_CHEST:
-                                *data << uint32(9);         // enable quest object. Represent 9, but 1 for client before 2.3.0
+                                // enable quest object. Represent 9, but 1 for client before 2.3.0
+                                *data << uint16(9);
+                                *data << uint16(-1);
                                break;
                            case GAMEOBJECT_TYPE_GOOBER:
-                                *data << uint32(1);
+                                *data << uint16(1);
+                                *data << uint16(-1);
                                break;
                            default:
-                                *data << uint32(0);         // unknown, not happen.
+                                // unknown, not happen.
+                                *data << uint16(0);
+                                *data << uint16(-1);
                                break;
                        }
                    }
                    else
-                        *data << uint32(0);                 // disable quest object
+                    {
+                        // disable quest object
+                        *data << uint16(0);
+                        *data << uint16(-1);
+                    }
                }
                else
                    *data << m_uint32Values[ index ];       // other cases

Besides that, it now works ok.

Link to comment
Share on other sites

+    SetUInt32Value(GAMEOBJECT_BYTES_1, uint32(-1));

GAMEOBJECT_BYTES_1 is not TWO_SHORT, andvalues are already set below in code by

    SetGoState(go_state);
   SetGoType(GameobjectTypes(goinfo->type));
   SetGoAnimProgress(animprogress);

You mean SetUInt16Value(GAMEOBJECT_DYNAMIC, 1, uint16(-1)); maybe?

Edit: i tested patch, and had some problems when object created. That was solved by the below code (*data split in two uint16 values, since we now know type is really TWO_SHORT).

diff --git a/src/game/GameObject.cpp b/src/game/GameObject.cpp
index 6ddd5a2..e4c631f 100644
--- a/src/game/GameObject.cpp
+++ b/src/game/GameObject.cpp
@@ -150,9 +150,10 @@ bool GameObject::Create(uint32 guidlow, uint32 name_id, Map *map, uint32 phaseMa

    SetUInt32Value(GAMEOBJECT_DISPLAYID, goinfo->displayId);

+    // GAMEOBJECT_BYTES_1, index at 0, 1, 2 and 3
    SetGoState(go_state);
    SetGoType(GameobjectTypes(goinfo->type));
-
+    SetGoArtKit(0);                                         // unknown what this is
    SetGoAnimProgress(animprogress);

    //Notify the map's instance data.
diff --git a/src/game/Object.cpp b/src/game/Object.cpp
index 1601738..71b691f 100644
--- a/src/game/Object.cpp
+++ b/src/game/Object.cpp
@@ -592,10 +592,9 @@ void Object::_BuildValuesUpdate(uint8 updatetype, ByteBuffer * data, UpdateMask
        if (isType(TYPEMASK_GAMEOBJECT) && !((GameObject*)this)->IsTransport())
        {
            if ( ((GameObject*)this)->ActivateToQuest(target) || target->isGameMaster())
-            {
                IsActivateToQuest = true;
-                updateMask->SetBit(GAMEOBJECT_DYNAMIC);
-            }
+
+            updateMask->SetBit(GAMEOBJECT_DYNAMIC);
        }
        else if (isType(TYPEMASK_UNIT))
        {
@@ -711,18 +710,27 @@ void Object::_BuildValuesUpdate(uint8 updatetype, ByteBuffer * data, UpdateMask
                        switch(((GameObject*)this)->GetGoType())
                        {
                            case GAMEOBJECT_TYPE_CHEST:
-                                *data << uint32(9);         // enable quest object. Represent 9, but 1 for client before 2.3.0
+                                // enable quest object. Represent 9, but 1 for client before 2.3.0
+                                *data << uint16(9);
+                                *data << uint16(-1);
                                break;
                            case GAMEOBJECT_TYPE_GOOBER:
-                                *data << uint32(1);
+                                *data << uint16(1);
+                                *data << uint16(-1);
                                break;
                            default:
-                                *data << uint32(0);         // unknown, not happen.
+                                // unknown, not happen.
+                                *data << uint16(0);
+                                *data << uint16(-1);
                                break;
                        }
                    }
                    else
-                        *data << uint32(0);                 // disable quest object
+                    {
+                        // disable quest object
+                        *data << uint16(0);
+                        *data << uint16(-1);
+                    }
                }
                else
                    *data << m_uint32Values[ index ];       // other cases

Besides that, it now works ok.

I want to test it but i don't know if you patch is full patch or it has to be with original patch?

Link to comment
Share on other sites

very nice patch . tested and works thank you

but my question it is correctly?

@@ -592,10 +592,9 @@ void Object::_BuildValuesUpdate(uint8 updatetype, ByteBuffer * data, UpdateMask
        if (isType(TYPEMASK_GAMEOBJECT) && !((GameObject*)this)->IsTransport())
        {
            if ( ((GameObject*)this)->ActivateToQuest(target) || target->isGameMaster())
-            {
                IsActivateToQuest = true;
-                updateMask->SetBit(GAMEOBJECT_DYNAMIC);
-            }
+
+            updateMask->SetBit(GAMEOBJECT_DYNAMIC);
        }
        else if (isType(TYPEMASK_UNIT))
        {

Link to comment
Share on other sites

very nice patch . tested and works thank you

but my question it is correctly?

@@ -592,10 +592,9 @@ void Object::_BuildValuesUpdate(uint8 updatetype, ByteBuffer * data, UpdateMask
        if (isType(TYPEMASK_GAMEOBJECT) && !((GameObject*)this)->IsTransport())
        {
            if ( ((GameObject*)this)->ActivateToQuest(target) || target->isGameMaster())
-            {
                IsActivateToQuest = true;
-                updateMask->SetBit(GAMEOBJECT_DYNAMIC);
-            }
+
+            updateMask->SetBit(GAMEOBJECT_DYNAMIC);
        }
        else if (isType(TYPEMASK_UNIT))
        {

It's needed because if the object is not activated to quest server sends the default value ( closed ) 0xFFFF0000

and in fact this patch is already into git branch

Greetings, Opterman

Link to comment
Share on other sites

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. Privacy Policy Terms of Use