The wintergrasp walls actually are objects in the ADT. Then on server side they are handled as destroyable gameobjects. that enables you to change the model of a adt-object during runtime.
//33 GAMEOBJECT_TYPE_DESTRUCTIBLE_BUILDING struct { uint32 intactNumHits; //0 uint32 creditProxyCreature; //1 uint32 state1Name; //2 uint32 intactEvent; //3 uint32 damagedDisplayId; //4 uint32 damagedNumHits; //5 uint32 empty3; //6 uint32 empty4; //7 uint32 empty5; //8 uint32 damagedEvent; //9 uint32 destroyedDisplayId; //10 uint32 empty7; //11 uint32 empty8; //12 uint32 empty9; //13 uint32 destroyedEvent; //14 uint32 empty10; //15 uint32 debuildingTimeSecs; //16 uint32 empty11; //17 uint32 destructibleData; //18 uint32 rebuildingEvent; //19 uint32 empty12; //20 uint32 empty13; //21 uint32 damageEvent; //22 uint32 empty14; //23 } building;
struct DestructibleModelDataEntry // sizeof(0x50) { uint32_t m_ID; // +0x0, size 0x4, type 0 uint32_t m_state0Wmo; // +0x4, size 0x4, type 0 uint32_t m_state0ImpactEffectDoodadSet; // +0x8, size 0x4, type 0 uint32_t m_state0AmbientDoodadSet; // +0xC, size 0x4, type 0 uint32_t m_state1Wmo; // +0x10, size 0x4, type 0 uint32_t m_state1DestructionDoodadSet; // +0x14, size 0x4, type 0 uint32_t m_state1ImpactEffectDoodadSet; // +0x18, size 0x4, type 0 uint32_t m_state1AmbientDoodadSet; // +0x1C, size 0x4, type 0 uint32_t m_state2Wmo; // +0x20, size 0x4, type 0 uint32_t m_state2DestructionDoodadSet; // +0x24, size 0x4, type 0 uint32_t m_state2ImpactEffectDoodadSet; // +0x28, size 0x4, type 0 uint32_t m_state2AmbientDoodadSet; // +0x2C, size 0x4, type 0 uint32_t m_state3Wmo; // +0x30, size 0x4, type 0 uint32_t m_state3InitDoodadSet; // +0x34, size 0x4, type 0 uint32_t m_state3AmbientDoodadSet; // +0x38, size 0x4, type 0 uint32_t m_ejectDirection; // +0x3C, size 0x4, type 0 uint32_t m_repairGroundFx; // +0x40, size 0x4, type 0 uint32_t m_doNotHighlight; // +0x44, size 0x4, type 0 uint32_t m_healEffect; // +0x48, size 0x4, type 0 uint32_t m_healEffectSpeed; // +0x4C, size 0x4, type 0 };