Ru-MaNGOS

Вернуться   Ru-MaNGOS > Ядро > Патчи > Патчи на рассмотрении

Важная информация

Патчи на рассмотрении Рассматриваемые к принятию патчи

Закрытая тема
 
Опции темы Поиск в этой теме Опции просмотра
Старый 07.03.2010, 15:17   #1
Rage Hunter
Гость
 
Сообщений: n/a
Сообщение [Dev] Destructible Building (type 33)

Патч Go type 33. (обновлен до версии 9949)
Что делает: реализует частичную работу гейм объектов типа 33 (разрушаемые объекты)
Недостатки: еще куча! (надеюсь на ваши подсказки и помощь)

Изночально все было импортировано c ядра тринити + асцент, после чего много пришлось изменить и подогнать под MaNGOS! После изменений в ядре мангоса пришлось все опять подгонять!
Изначально патч писался для использования исключительно на Бг "Берег Древних", посему все события которые передаются отправлятся на Бг. Так же в патч включены строки:
Код:
////////////////// Strand of the Ancients ///////////////////
if (player->CanUseBattleGroundObject())
      if (BattleGround *bg = player->GetBattleGround())
            if (bg->GetTypeID() == BATTLEGROUND_SA)
                  bg->EventPlayerDamegeGO(player, this, info->goober.eventId);
которые позволяют закончить вышеуказанное бг по нажатию на реликвию (также передается собитие)

Патч на Vehicle можете взять с архива в теме [mod] Strand of the Ancients.
Вложения
Тип файла: patch [9949]go_type_33.patch (23.7 Кб, 35 просмотров)

Последний раз редактировалось Rage Hunter; 22.05.2010 в 11:25. Причина: Обновил!
 
8 пользователя(ей) сказали cпасибо:
Den (08.01.2011), Gen1us2k (08.03.2010), Konctantin (23.03.2010), Limpnau (18.08.2010), PSZ (01.04.2010), rootor (08.03.2010)
Старый 07.03.2010, 15:26   #2
Gen1us2k
RMDC Donator
 
Аватар для Gen1us2k
 
Регистрация: 07.03.2010
Адрес: Кыргызстан
Сообщений: 52
Сказал(а) спасибо: 18
Поблагодарили 45 раз(а) в 11 сообщениях
Gen1us2k Скоро придёт к известности
По умолчанию

Код:
diff --git a/src/game/Cell.h b/src/game/Cell.h
index 10ec221..d12f346 100644
--- a/src/game/Cell.h
+++ b/src/game/Cell.h
@@ -160,8 +160,10 @@ struct MANGOS_DLL_DECL Cell
 
     template<class T, class CONTAINER> void Visit(const CellPair &cellPair, TypeContainerVisitor<T, CONTAINER> &visitor, Map &) const;
     template<class T, class CONTAINER> void Visit(const CellPair &cellPair, TypeContainerVisitor<T, CONTAINER> &visitor, Map &m, const WorldObject &obj, float radius) const;
+    template<class T, class CONTAINER> void Visit(const CellPair &cellPair, TypeContainerVisitor<T, CONTAINER> &visitor, Map &, float radius, float x_off, float y_off) const;
 
     static CellArea CalculateCellArea(const WorldObject &obj, float radius);
+    static CellArea CalculateCellArea(float x, float y, float radius);
 
 private:
     template<class T, class CONTAINER> void VisitCircle(const CellPair &cellPair, TypeContainerVisitor<T, CONTAINER> &, Map &, const CellPair& , const CellPair& ) const;
diff --git a/src/game/CellImpl.h b/src/game/CellImpl.h
index a6be9f0..c8400bb 100644
--- a/src/game/CellImpl.h
+++ b/src/game/CellImpl.h
@@ -279,4 +279,49 @@ Cell::VisitCircle(const CellPair &standing_cell, TypeContainerVisitor<T, CONTAIN
     }
 }
 
+template<class T, class CONTAINER>
+inline void
+Cell::Visit(const CellPair &standing_cell, TypeContainerVisitor<T, CONTAINER> &visitor, Map &m, float radius, float x_off, float y_off) const
+{
+    if (standing_cell.x_coord >= TOTAL_NUMBER_OF_CELLS_PER_MAP || standing_cell.y_coord >= TOTAL_NUMBER_OF_CELLS_PER_MAP)
+        return;
+
+    int left = 0, right = 0, upper = 0, lower = 0;
+
+    // Origin = (CENTER_GRID_CELL_OFFSET, CENTER_GRID_CELL_OFFSET)
+    if(CENTER_GRID_CELL_OFFSET - x_off < radius)
+        ++right;
+    if(CENTER_GRID_CELL_OFFSET + x_off < radius)
+        ++left;
+    if(CENTER_GRID_CELL_OFFSET - y_off < radius)
+        ++upper;
+    if(CENTER_GRID_CELL_OFFSET + y_off < radius)
+        ++lower;
+
+    if(!left && !right && !upper && !lower)
+    {
+        m.Visit(*this, visitor);
+        return;
+    }                
+
+    CellPair begin_cell = standing_cell;
+    CellPair end_cell = standing_cell;
+
+    begin_cell << left; //note: need change << if left > 1
+    begin_cell -= lower;
+    end_cell >> right;
+    end_cell += upper;
+
+    // loop the cell range
+    for(uint32 x = begin_cell.x_coord; x <= end_cell.x_coord; x++)
+    {
+        for(uint32 y = begin_cell.y_coord; y <= end_cell.y_coord; y++)
+        {
+            CellPair cell_pair(x,y);
+            Cell r_zone(cell_pair);
+            r_zone.data.Part.nocreate = data.Part.nocreate;
+            m.Visit(r_zone, visitor);
+        }
+    }
+}
 #endif
diff --git a/src/game/DBCStructure.h b/src/game/DBCStructure.h
index 30d000f..fbede52 100644
--- a/src/game/DBCStructure.h
+++ b/src/game/DBCStructure.h
@@ -844,9 +844,14 @@ struct GameObjectDisplayInfoEntry
 {
     uint32      Displayid;                                  // 0        m_ID
     // char* filename;                                      // 1
-    // uint32 unknown2[10];                                 // 2-11     unknown data
-    // float  unknown12[6];                                 // 12-17    unknown data
-    // uint32 unknown18;                                    // 18       unknown data
+    //uint32  unk1[10];   //2-11
+    float   minX;
+    float   minY;
+    float   minZ;
+    float   maxX;
+    float   maxY;
+    float   maxZ;
+    //uint32  transport;  //18
 };
 
 struct GemPropertiesEntry
diff --git a/src/game/GameObject.cpp b/src/game/GameObject.cpp
index b75076a..5a784f5 100644
--- a/src/game/GameObject.cpp
+++ b/src/game/GameObject.cpp
@@ -151,6 +151,9 @@ bool GameObject::Create(uint32 guidlow, uint32 name_id, Map *map, uint32 phaseMa
     SetGoArtKit(0);                                         // unknown what this is
     SetGoAnimProgress(animprogress);
 
+    if(goinfo->type == GAMEOBJECT_TYPE_DESTRUCTIBLE_BUILDING)
+        m_health = goinfo->destructibleBuilding.damagedHealth;
+
     //Notify the map's instance data.
     //Only works if you create the object in it, not if it is moves to that map.
     //Normally non-players do not teleport to other maps.
@@ -1000,6 +1003,11 @@ void GameObject::Use(Unit* user)
                 {
                     sLog.outDebug("Goober ScriptStart id %u for GO entry %u (GUID %u).", info->goober.eventId, GetEntry(), GetDBTableGUIDLow());
                     GetMap()->ScriptsStart(sEventScripts, info->goober.eventId, player, this);
+					////////////////// Strand of the Ancients ///////////////////
+					/*if (player->CanUseBattleGroundObject())
+    					if (BattleGround *bg = player->GetBattleGround())
+        					if (bg->GetTypeID() == BATTLEGROUND_SA)
+           	 				bg->EventPlayerDamegeGO(player, this, info->goober.eventId);*/
                 }
 
                 // possible quest objective for active quests
@@ -1349,6 +1357,120 @@ void GameObject::Use(Unit* user)
     spell->prepare(&targets);
 }
 
+bool GameObject::IsInRange(float x, float y, float z, float radius) const
+{
+    GameObjectDisplayInfoEntry const * info = sGameObjectDisplayInfoStore.LookupEntry(GetUInt32Value(GAMEOBJECT_DISPLAYID));
+    if(!info)
+        return IsWithinDist3d(x, y, z, radius);
+
+    float sinA = sin(GetOrientation());
+    float cosA = cos(GetOrientation());
+    float dx = x - GetPositionX();
+    float dy = y - GetPositionY();
+    float dz = z - GetPositionZ();
+    float dist = sqrt(dx*dx + dy*dy);
+    float sinB = dx / dist;
+    float cosB = dy / dist;
+    dx = dist * (cosA * cosB + sinA * sinB);
+    dy = dist * (cosA * sinB - sinA * cosB);
+    return dx < info->maxX + radius && dx > info->minX - radius
+        && dy < info->maxY + radius && dy > info->minY - radius
+        && dz < info->maxZ + radius && dz > info->minZ - radius;
+}
+
+void GameObject::TakenDamage(uint32 damage, Unit* pKiller)
+{
+    if(!m_health)
+        return;
+
+    if(m_health > damage)
+    {
+        m_health -= damage;
+        return;
+    }
+
+    m_health = 0;
+
+	if (HasFlag(GAMEOBJECT_FLAGS,GO_FLAG_DAMAGED) && !HasFlag(GAMEOBJECT_FLAGS,GO_FLAG_DESTROYED)) // from damaged to destroyed
+	{
+		RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_DAMAGED);
+		SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_DESTROYED);
+		SetUInt32Value(GAMEOBJECT_DISPLAYID, m_goInfo->destructibleBuilding.destroyedDisplayId);
+		m_health = 0;
+	}
+    else if(!HasFlag(GAMEOBJECT_FLAGS,GO_FLAG_DAMAGED) && !HasFlag(GAMEOBJECT_FLAGS,GO_FLAG_DESTROYED))
+    {
+        SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_DAMAGED);
+        SetUInt32Value(GAMEOBJECT_DISPLAYID, m_goInfo->destructibleBuilding.damagedDisplayId);
+        if(m_goInfo->destructibleBuilding.destroyedDisplayId)
+        {
+            m_health = m_goInfo->destructibleBuilding.destroyedHealth;
+            if(!m_health)
+                m_health = 1;
+        }
+        else
+            m_health = 0;
+    }
+}
+
+void GameObject::Rebuild(Unit* pKiller)
+{
+	RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_DAMAGED + GO_FLAG_DESTROYED);
+	SetUInt32Value(GAMEOBJECT_DISPLAYID, m_goInfo->displayId);
+	m_health = m_goInfo->destructibleBuilding.damagedHealth;
+	if (!pKiller)
+		return;
+	Player* unitPlayer;
+	if(pKiller->GetTypeId() == TYPEID_PLAYER)
+		unitPlayer = (Player*)pKiller;
+	else if(((Creature*)pKiller)->isVehicle())
+		unitPlayer = (Player*)pKiller->GetCharmerOrOwnerOrSelf();
+	else
+		unitPlayer = NULL;
+
+	if (unitPlayer->CanUseBattleGroundObject())
+		EventInform(m_goInfo->destructibleBuilding.rebuildingEvent, unitPlayer);
+}
+
 // overwrite WorldObject function for proper name localization
 const char* GameObject::GetNameForLocaleIdx(int32 loc_idx) const
 {
diff --git a/src/game/GameObject.h b/src/game/GameObject.h
index d92da00..c2ae485 100644
--- a/src/game/GameObject.h
+++ b/src/game/GameObject.h
@@ -356,17 +356,17 @@ struct GameObjectInfo
         //33 GAMEOBJECT_TYPE_DESTRUCTIBLE_BUILDING
         struct
         {
-            uint32 intactNumHits;                           //0
+            uint32 damagedHealth;                           //0
             uint32 creditProxyCreature;                     //1
             uint32 empty1;                                  //2
             uint32 intactEvent;                             //3
-            uint32 empty2;                                  //4
-            uint32 damagedNumHits;                          //5
+            uint32 damagedDisplayId;                        //4
+            uint32 destroyedHealth;                         //5
             uint32 empty3;                                  //6
             uint32 empty4;                                  //7
             uint32 empty5;                                  //8
             uint32 damagedEvent;                            //9
-            uint32 empty6;                                  //10
+            uint32 destroyedDisplayId;                      //10
             uint32 empty7;                                  //11
             uint32 empty8;                                  //12
             uint32 empty9;                                  //13
@@ -687,6 +687,12 @@ class MANGOS_DLL_SPEC GameObject : public WorldObject
 
         bool isActiveObject() const { return false; }
         uint64 GetRotation() const { return m_rotation; }
+
+		bool IsInRange(float x, float y, float z, float radius) const;
+        void TakenDamage(uint32 damage, Unit* pKiller);
+        void Rebuild(Unit* pKiller);
+
     protected:
         uint32      m_spellId;
         time_t      m_respawnTime;                          // (secs) time of next respawn (or despawn if GO have owner()),
@@ -694,6 +700,7 @@ class MANGOS_DLL_SPEC GameObject : public WorldObject
         LootState   m_lootState;
         bool        m_spawnedByDefault;
         time_t      m_cooldownTime;                         // used as internal reaction delay time store (not state change reaction).
+		uint32      m_health;
                                                             // For traps this: spell casting cooldown, for doors/buttons: reset time.
         std::list<uint32> m_SkillupList;
 
diff --git a/src/game/GridNotifiers.h b/src/game/GridNotifiers.h
index 5c132e6..dacaed5 100644
--- a/src/game/GridNotifiers.h
+++ b/src/game/GridNotifiers.h
@@ -654,6 +654,24 @@ namespace MaNGOS
             NearestGameObjectFishingHole(NearestGameObjectFishingHole const&);
     };
 
+    class NearestGameObjectCheck
+    {
+        public:
+            NearestGameObjectCheck(WorldObject const& obj) : i_obj(obj), i_range(999) {}
+            bool operator()(GameObject* go)
+            {
+                i_range = i_obj.GetDistance(go);        // use found GO range as new range limit for next check
+                return true;
+            }
+            float GetLastRange() const { return i_range; }
+        private:
+            WorldObject const& i_obj;
+            float i_range;
+
+            // prevent clone this object
+            NearestGameObjectCheck(NearestGameObjectCheck const&);
+    };
+
     // Success at unit in range, range update for next check (this can be use with GameobjectLastSearcher to find nearest GO)
     class NearestGameObjectEntryInObjectRangeCheck
     {
@@ -1027,6 +1045,18 @@ namespace MaNGOS
             NearestCreatureEntryWithLiveStateInObjectRangeCheck(NearestCreatureEntryWithLiveStateInObjectRangeCheck const&);
     };
 
+    class GameObjectInRangeCheck
+    {
+    public:
+        GameObjectInRangeCheck(float _x, float _y, float _z, float _range) : x(_x), y(_y), z(_z), range(_range) {}
+        bool operator() (GameObject* go)
+        {
+            return go->IsInRange(x, y, z, range);
+        }
+    private:
+        float x, y, z, range;
+    };
+
     class AnyPlayerInObjectRangeCheck
     {
     public:
diff --git a/src/game/Map.h b/src/game/Map.h
index 6e68529..0ff3799 100644
--- a/src/game/Map.h
+++ b/src/game/Map.h
@@ -406,6 +406,8 @@ class MANGOS_DLL_SPEC Map : public GridRefManager<NGridType>, public MaNGOS::Obj
         void RemoveFromActive(T* obj) { RemoveFromActiveHelper(obj); }
 
         void RemoveFromActive(Creature* obj);
+		
+		template<class NOTIFIER> void VisitGrid(const float &x, const float &y, float radius, NOTIFIER &notifier);
 
         Creature* GetCreature(uint64 guid);
         Vehicle* GetVehicle(uint64 guid);
@@ -629,4 +631,17 @@ Map::Visit(const Cell& cell, TypeContainerVisitor<T, CONTAINER> &visitor)
         getNGrid(x, y)->Visit(cell_x, cell_y, visitor);
     }
 }
-#endif
+
+template<class NOTIFIER>
+inline void
+Map::VisitGrid(const float &x, const float &y, float radius, NOTIFIER &notifier)
+{
+    CellPair p(MaNGOS::ComputeCellPair(x, y));
+    Cell cell(p);
+    cell.data.Part.reserved = ALL_DISTRICT;
+    cell.SetNoCreate();
+
+    TypeContainerVisitor<NOTIFIER, GridTypeMapContainer >  grid_object_notifier(notifier);
+    cell.Visit(p, grid_object_notifier, *this, radius, x, y);
+}
+#endif
\ No newline at end of file
diff --git a/src/game/Object.cpp b/src/game/Object.cpp
index 6d1a2b2..64f27d7 100644
--- a/src/game/Object.cpp
+++ b/src/game/Object.cpp
@@ -733,7 +733,7 @@ void Object::BuildValuesUpdate(uint8 updatetype, ByteBuffer * data, UpdateMask *
             if( updateMask->GetBit( index ) )
             {
                 // send in current format (float as float, uint32 as uint32)
-                if ( index == GAMEOBJECT_DYNAMIC )
+                if (/*false && */index == GAMEOBJECT_DYNAMIC )
                 {
                     if(IsActivateToQuest )
                     {
diff --git a/src/game/SharedDefines.h b/src/game/SharedDefines.h
index db31834..61d06d5 100644
--- a/src/game/SharedDefines.h
+++ b/src/game/SharedDefines.h
@@ -1070,6 +1070,7 @@ enum Targets
     TARGET_DYNAMIC_OBJECT_BEHIND       = 48,
     TARGET_DYNAMIC_OBJECT_LEFT_SIDE    = 49,
     TARGET_DYNAMIC_OBJECT_RIGHT_SIDE   = 50,
+	TARGET_OBJECT_AREA_SRC             = 51,
     TARGET_AREAEFFECT_CUSTOM_2         = 52,
     TARGET_CURRENT_ENEMY_COORDINATES   = 53,                // set unit coordinates as dest, only 16 target B imlemented
     TARGET_LARGE_FRONTAL_CONE          = 54,
@@ -1197,8 +1198,8 @@ enum GameObjectFlags
     GO_FLAG_TRIGGERED       = 0x00000040,                   //typically, summoned objects. Triggered by spell or other events
     GO_FLAG_UNK_8           = 0x00000080,
     GO_FLAG_UNK_9           = 0x00000100,                   //? Seen on type 33, possible meaning "destruct in progress"
-    GO_FLAG_UNK_10          = 0x00000200,                   //? Seen on type 33
-    GO_FLAG_UNK_11          = 0x00000400                    //? Seen on type 33, possibly meaning "destructed"
+    GO_FLAG_DAMAGED         = 0x00000200,                   //? Seen on type 33
+    GO_FLAG_DESTROYED       = 0x00000400                    //? Seen on type 33, possibly meaning "destructed"
 };
 
 enum TextEmotes
diff --git a/src/game/Spell.cpp b/src/game/Spell.cpp
index 0c80e73..6c9552f 100644
--- a/src/game/Spell.cpp
+++ b/src/game/Spell.cpp
@@ -1429,9 +1429,38 @@ void Spell::SetTargetMap(uint32 effIndex, uint32 targetMode, UnitList& targetUni
         case TARGET_SELF:
         case TARGET_SELF2:
         case TARGET_AREAEFFECT_CUSTOM:
-        case TARGET_AREAEFFECT_CUSTOM_2:
             targetUnitMap.push_back(m_caster);
             break;
+        case TARGET_AREAEFFECT_CUSTOM_2:
+        {
+            float x, y, z;
+            if(targetMode == TARGET_OBJECT_AREA_SRC)
+            {
+                if(m_targets.HasSrc())
+                {
+                    x = m_targets.m_srcX;
+                    y = m_targets.m_srcY;
+                    z = m_targets.m_srcZ;
+                }
+                else
+                    break;
+            }
+            else if(m_targets.HasDst())
+            {
+                x = m_targets.m_destX;
+                y = m_targets.m_destY;
+                z = m_targets.m_destZ;
+            }
+            else
+                break;
+
+            MaNGOS::GameObjectInRangeCheck check(x, y, z, radius + 15);
+            std::list<GameObject*> goList;
+            MaNGOS::GameObjectListSearcher<MaNGOS::GameObjectInRangeCheck> searcher(m_caster, goList, check);
+            m_caster->GetMap()->VisitGrid(x, y, radius, searcher);
+            for(std::list<GameObject*>::iterator itr = goList.begin(); itr != goList.end(); ++itr)
+                AddGOTarget(*itr, effIndex);
+		}
         case TARGET_RANDOM_ENEMY_CHAIN_IN_AREA:
         {
             m_targets.m_targetMask = 0;
diff --git a/src/game/Spell.h b/src/game/Spell.h
index 00878b4..058c8a9 100644
--- a/src/game/Spell.h
+++ b/src/game/Spell.h
@@ -164,6 +164,8 @@ class SpellCastTargets
         }
 
         bool IsEmpty() const { return m_GOTargetGUID==0 && m_unitTargetGUID==0 && m_itemTarget==0 && m_CorpseTargetGUID==0; }
+        bool HasSrc() const { return m_targetMask & TARGET_FLAG_SOURCE_LOCATION; }
+        bool HasDst() const { return m_targetMask & TARGET_FLAG_DEST_LOCATION; }
 
         void Update(Unit* caster);
 
@@ -323,6 +325,8 @@ class Spell
         void EffectKillCreditPersonal(uint32 i);
         void EffectKillCredit(uint32 i);
         void EffectQuestFail(uint32 i);
+        void EffectWMODamage(uint32 i);
+        void EffectWMORepair(uint32 i);
         void EffectActivateRune(uint32 i);
         void EffectTitanGrip(uint32 i);
         void EffectEnchantItemPrismatic(uint32 i);
diff --git a/src/game/SpellEffects.cpp b/src/game/SpellEffects.cpp
index 5e18c1b..6ad6932 100644
--- a/src/game/SpellEffects.cpp
+++ b/src/game/SpellEffects.cpp
@@ -144,8 +144,8 @@ pEffect SpellEffects[TOTAL_SPELL_EFFECTS]=
     &Spell::EffectStuck,                                    // 84 SPELL_EFFECT_STUCK
     &Spell::EffectSummonPlayer,                             // 85 SPELL_EFFECT_SUMMON_PLAYER
     &Spell::EffectActivateObject,                           // 86 SPELL_EFFECT_ACTIVATE_OBJECT
-    &Spell::EffectUnused,                                   // 87 SPELL_EFFECT_WMO_DAMAGE
-    &Spell::EffectUnused,                                   // 88 SPELL_EFFECT_WMO_REPAIR
+    &Spell::EffectWMODamage,                                // 87 SPELL_EFFECT_WMO_DAMAGE
+    &Spell::EffectWMORepair,                                // 88 SPELL_EFFECT_WMO_REPAIR
     &Spell::EffectUnused,                                   // 89 SPELL_EFFECT_WMO_CHANGE
     &Spell::EffectKillCreditPersonal,                       // 90 SPELL_EFFECT_KILL_CREDIT              Kill credit but only for single person
     &Spell::EffectUnused,                                   // 91 SPELL_EFFECT_THREAT_ALL               one spell: zzOLDBrainwash
@@ -3158,7 +3158,7 @@ void Spell::EffectOpenLock(uint32 effIndex)
             if (BattleGround *bg = player->GetBattleGround())
             {
                 // check if it's correct bg
-                if (bg->GetTypeID() == BATTLEGROUND_AB || bg->GetTypeID() == BATTLEGROUND_AV)
+                if (bg->GetTypeID() == BATTLEGROUND_AB || bg->GetTypeID() == BATTLEGROUND_AV || bg->GetTypeID() == BATTLEGROUND_SA)
                     bg->EventPlayerClickedOnFlag(player, gameObjTarget);
                 return;
             }
@@ -6965,3 +6965,15 @@ void Spell::EffectPlayMusic(uint32 i)
     data << uint32(soundid);
     ((Player*)unitTarget)->GetSession()->SendPacket(&data);
 }
+
+void Spell::EffectWMODamage(uint32 /*i*/)
+{
+    if(gameObjTarget && gameObjTarget->GetGoType() == GAMEOBJECT_TYPE_DESTRUCTIBLE_BUILDING)
+        gameObjTarget->TakenDamage((uint32)damage,m_caster);
+}
+
+void Spell::EffectWMORepair(uint32 /*i*/)
+{
+    if(gameObjTarget && gameObjTarget->GetGoType() == GAMEOBJECT_TYPE_DESTRUCTIBLE_BUILDING)
+        gameObjTarget->Rebuild(m_caster);
+}
Патч на ядро,
автор: Rage Hunter.
Однако надо его чуть чуть переписать, ибо 9245 коммит
Цитата:
[9245] Remove CellLock class and all cell-level thread locking.
* CellLock was just a 'proxy' between Cell and CellPair and in some cases carried redundant data.
Gen1us2k вне форума  
Старый 07.03.2010, 15:39   #3
tempura
Forum bot
 
Аватар для tempura
 
Регистрация: 01.02.2010
Адрес: пусто
Сообщений: 841
Сказал(а) спасибо: 286
Поблагодарили 418 раз(а) в 190 сообщениях
Записей в дневнике: 60
tempura отключил(а) отображение уровня репутации
По умолчанию

Автор на форуме - если это именно он, если он займется - посмотрим на результаты.
__________________
Совершенно безопасен для людей, обладающих хотя бы некоторыми минимальными зачатками интеллекта, и способными строить причинно-следственные цепочки.
tempura вне форума  
Старый 07.03.2010, 17:03   #4
Gen1us2k
RMDC Donator
 
Аватар для Gen1us2k
 
Регистрация: 07.03.2010
Адрес: Кыргызстан
Сообщений: 52
Сказал(а) спасибо: 18
Поблагодарили 45 раз(а) в 11 сообщениях
Gen1us2k Скоро придёт к известности
По умолчанию

я попробую сам обновить патч до текущей ревизии... посмотрим что из этого получиться
Gen1us2k вне форума  
Пользователь сказал cпасибо:
YuruY (07.03.2010)
Старый 07.03.2010, 20:11   #5
Gen1us2k
RMDC Donator
 
Аватар для Gen1us2k
 
Регистрация: 07.03.2010
Адрес: Кыргызстан
Сообщений: 52
Сказал(а) спасибо: 18
Поблагодарили 45 раз(а) в 11 сообщениях
Gen1us2k Скоро придёт к известности
По умолчанию

ну... когда перекопал половину кода в патче...
ЗЫ конечно, давай, можно и подождать
Gen1us2k вне форума  
Старый 08.03.2010, 02:19   #6
tempura
Forum bot
 
Аватар для tempura
 
Регистрация: 01.02.2010
Адрес: пусто
Сообщений: 841
Сказал(а) спасибо: 286
Поблагодарили 418 раз(а) в 190 сообщениях
Записей в дневнике: 60
tempura отключил(а) отображение уровня репутации
По умолчанию

Цитата:
Сообщение от Rage Hunter Посмотреть сообщение
У меня есть обновленный! Я с работы приду и выложу! За появился Ру форум, то можно и продолжить дело!
этого и ждем... надеемся.

Не оставите же вы русский мангос, когда он так в вас нуждается?
__________________
Совершенно безопасен для людей, обладающих хотя бы некоторыми минимальными зачатками интеллекта, и способными строить причинно-следственные цепочки.
tempura вне форума  
2 пользователя(ей) сказали cпасибо:
Gen1us2k (08.03.2010)
Старый 08.03.2010, 10:41   #7
Gen1us2k
RMDC Donator
 
Аватар для Gen1us2k
 
Регистрация: 07.03.2010
Адрес: Кыргызстан
Сообщений: 52
Сказал(а) спасибо: 18
Поблагодарили 45 раз(а) в 11 сообщениях
Gen1us2k Скоро придёт к известности
По умолчанию

Кстати, Всем тем, кто будет собирать вместе с вехиклом... в GameObject.cpp надо будет закоментить код
Код:
void GameObject::DealSiegeDamage(uint32 damage)
{
    m_actualHealth -= damage;

    // TODO : there are a lot of thinghts to do here
    if(m_actualHealth < 0)
    {
        m_actualHealth = GetGOInfo()->destructibleBuilding.intactNumHits;
        SetLootState(GO_JUST_DEACTIVATED);
    }
}
напоролся на ошибку при компиле...
Gen1us2k вне форума  
Пользователь сказал cпасибо:
Старый 08.03.2010, 11:26   #8
Rage Hunter
Гость
 
Сообщений: n/a
По умолчанию

Цитата:
Сообщение от Gen1us2k Посмотреть сообщение
Кстати, Всем тем, кто будет собирать вместе с вехиклом... в GameObject.cpp надо будет закоментить код
Код:
void GameObject::DealSiegeDamage(uint32 damage)
{
    m_actualHealth -= damage;

    // TODO : there are a lot of thinghts to do here
    if(m_actualHealth < 0)
    {
        m_actualHealth = GetGOInfo()->destructibleBuilding.intactNumHits;
        SetLootState(GO_JUST_DEACTIVATED);
    }
}
напоролся на ошибку при компиле...
Я бы сказал что ее можно не только закоментировать, а просто удалить с того патча. От нее все равно ни какого толка нет, все равно не работает!

PS: я использую немного изменненый патч, он во вложении!
Вложения
Тип файла: patch vehicle_for_go_type_33.patch (147.6 Кб, 35 просмотров)

Последний раз редактировалось Rage Hunter; 08.03.2010 в 11:53.
 
3 пользователя(ей) сказали cпасибо:
ANTOMA (08.03.2010), Gen1us2k (08.03.2010)
Старый 08.03.2010, 14:14   #9
Gen1us2k
RMDC Donator
 
Аватар для Gen1us2k
 
Регистрация: 07.03.2010
Адрес: Кыргызстан
Сообщений: 52
Сказал(а) спасибо: 18
Поблагодарили 45 раз(а) в 11 сообщениях
Gen1us2k Скоро придёт к известности
По умолчанию

хы... скомпилил... при запуске
Код:
2010-03-08 18:13:52 ERROR:ERROR: Size of 'GameObjectDisplayInfo.dbc' setted by format string (4) not equal size of C++ structure (28).
Gen1us2k вне форума  
Старый 08.03.2010, 14:24   #10
tempura
Forum bot
 
Аватар для tempura
 
Регистрация: 01.02.2010
Адрес: пусто
Сообщений: 841
Сказал(а) спасибо: 286
Поблагодарили 418 раз(а) в 190 сообщениях
Записей в дневнике: 60
tempura отключил(а) отображение уровня репутации
По умолчанию

Код:
-const char VehicleEntryfmt[]="niffffiiiiiiiifffffffffffffffssssfifixxx";
+const char VehicleEntryfmt[]="niffffiiiiiiiifffffffffffffffssssfifiixx";
__________________
Совершенно безопасен для людей, обладающих хотя бы некоторыми минимальными зачатками интеллекта, и способными строить причинно-следственные цепочки.
tempura вне форума  
2 пользователя(ей) сказали cпасибо:
Gen1us2k (08.03.2010), rootor (08.03.2010)
Старый 08.03.2010, 17:47   #11
Gen1us2k
RMDC Donator
 
Аватар для Gen1us2k
 
Регистрация: 07.03.2010
Адрес: Кыргызстан
Сообщений: 52
Сказал(а) спасибо: 18
Поблагодарили 45 раз(а) в 11 сообщениях
Gen1us2k Скоро придёт к известности
По умолчанию

Цитата:
Сообщение от tempura Посмотреть сообщение
Код:
-const char VehicleEntryfmt[]="niffffiiiiiiiifffffffffffffffssssfifixxx";
+const char VehicleEntryfmt[]="niffffiiiiiiiifffffffffffffffssssfifiixx";
вот именно, что так... все равно ругаеться...
Gen1us2k вне форума  
Старый 08.03.2010, 21:13   #12
YuruY
YTDB Dev
 
Аватар для YuruY
 
Регистрация: 01.02.2010
Сообщений: 288
Сказал(а) спасибо: 125
Поблагодарили 97 раз(а) в 53 сообщениях
YuruY Скоро придёт к известностиYuruY Скоро придёт к известности
По умолчанию

YuruY вне форума  
Пользователь сказал cпасибо:
rootor (08.03.2010)
Старый 09.03.2010, 01:39   #13
Rage Hunter
Гость
 
Сообщений: n/a
По умолчанию

Цитата:
Сообщение от Gen1us2k Посмотреть сообщение
хы... скомпилил... при запуске
Код:
2010-03-08 18:13:52 ERROR:ERROR: Size of 'GameObjectDisplayInfo.dbc' setted by format string (4) not equal size of C++ structure (28).
Судя по вашей ошибке стоит обратить внимание на строку
Код:
const char GameObjectDisplayInfofmt[]="nxxxxxxxxxxxxxxxxxx";
но я используя данный патч ни когда ее вообще не менял! Теоретически там и так все верно! (пока что) Я бы мог бы предложить что ДБЦ не соотвестстуют, но по моему этот файл уже не менял хз сколько ревизий клиента!

Для теста скомпилировал ядро только с 2 патчами выложенными в данной теме, все отлично запустилось и ошибки нет!



Хотя попробуйте строку
Код:
const char GameObjectDisplayInfofmt[]="nxxxxxxxxxxxxxxxxxx";
заменить на
Код:
const char GameObjectDisplayInfofmt[]="nxxxxxxxxxxxffffffx";
и отпишете результат!

Последний раз редактировалось Rage Hunter; 09.03.2010 в 01:45.
 
Старый 10.03.2010, 17:12   #14
Gen1us2k
RMDC Donator
 
Аватар для Gen1us2k
 
Регистрация: 07.03.2010
Адрес: Кыргызстан
Сообщений: 52
Сказал(а) спасибо: 18
Поблагодарили 45 раз(а) в 11 сообщениях
Gen1us2k Скоро придёт к известности
По умолчанию

Сегодня скомпильну, отпишу, что получилось...
Скомпилил.. запустил... спасибо, все работает

Последний раз редактировалось Gen1us2k; 11.03.2010 в 01:59.
Gen1us2k вне форума  
Пользователь сказал cпасибо:
Старый 21.03.2010, 18:46   #15
Tibec
Гость
 
Сообщений: n/a
По умолчанию

Со своей стороны с последним патчем я эту ошибку компиляции:
Цитата:
../../../src/game/GameObject.cpp: в пустоте геймобъекту член функцию ': DealSieDamage (uint32)':
../../../src/game/GameObject.cpp: 1647: ошибка: 'сопзЬ структура GameObjectInfo: <anymous union>: <Anonymous>' не имеет члена под названием 'intactNumHits'
../../../src/game/GameObject.cpp: 1657: ошибка: 'сопзЬ структура GameObjectInfo: <anymous union>: <Anonymous>' не имеет члена под названием 'intactNumHits'
../../../src/game/GameObject.cpp: 1666: ошибка: 'сопзЬ структура GameObjectInfo: <anymous union>: <Anonymous>' не имеет члена под названием 'damagedNumHits'
 
Старый 25.03.2010, 09:26   #16
Anti
Пользователь
 
Аватар для Anti
 
Регистрация: 12.03.2010
Адрес: Беларусь
Сообщений: 54
Сказал(а) спасибо: 8
Поблагодарили 24 раз(а) в 17 сообщениях
Записей в дневнике: 1
Anti На верном пути
Отправить сообщение для Anti с помощью ICQ Отправить сообщение для Anti с помощью Skype™
По умолчанию

Цитата:
Сообщение от Tibec Посмотреть сообщение
Со своей стороны с последним патчем я эту ошибку компиляции:
Зачем было переводить? Давали бы как есть, на английском.

к структуре применяются не её методы. Вы тут никак не поправите, ждите разработчика.
Anti вне форума  
Старый 25.03.2010, 10:17   #17
Rage Hunter
Гость
 
Сообщений: n/a
По умолчанию

Цитата:
Сообщение от Tibec Посмотреть сообщение
Со своей стороны с последним патчем я эту ошибку компиляции:
Вам следует с патча Vehicle удалить
Код:
void GameObject::DealSiegeDamage(uint32 damage)
{
    m_actualHealth -= damage;

    // TODO : there are a lot of thinghts to do here
    if(m_actualHealth < 0)
    {
        m_actualHealth = GetGOInfo()->destructibleBuilding.intactNumHits;
        SetLootState(GO_JUST_DEACTIVATED);
    }
}
Код:
void DealSiegeDamage(uint32 damage);
Все значения там не актуальны, да к тому же функция DealSiegeDamage не работает!

PS: если получится все таки патч Vehicle под дбц подогнать, то выложу!
 
3 пользователя(ей) сказали cпасибо:
Anti (27.03.2010)
Старый 18.08.2010, 17:01   #18
tempura
Forum bot
 
Аватар для tempura
 
Регистрация: 01.02.2010
Адрес: пусто
Сообщений: 841
Сказал(а) спасибо: 286
Поблагодарили 418 раз(а) в 190 сообщениях
Записей в дневнике: 60
tempura отключил(а) отображение уровня репутации
По умолчанию

outdated

closed
__________________
Совершенно безопасен для людей, обладающих хотя бы некоторыми минимальными зачатками интеллекта, и способными строить причинно-следственные цепочки.
tempura вне форума  
Закрытая тема


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Creature type critter Den Баг-репорты 0 22.12.2010 19:54
[fix 10606]Невозможно взять лут с Critters(type 8) J.Murdoch Корзина 9 08.10.2010 19:23
[10591] Simplify LoadGameObjectForQuests for case GO type 3 newsbot CMaNGOS Commits 0 08.10.2010 14:00
[10298] Clear tavern rest when leaving building and prevent forced unmount when in GM mode. newsbot CMaNGOS Commits 0 31.07.2010 11:00
[10057] Type in UNIT_STAT_CONTROLLED newsbot CMaNGOS Commits 0 14.06.2010 21:10


Текущее время: 22:51. Часовой пояс GMT +3.


ru-mangos.ru - Русское сообщество MaNGOS
Главная цель проекта MaNGOS - обучающая, поэтому разрешается использовать исходный код и собранную программу только для образовательных целей.
Вы не можете использовать MaNGOS в коммерческих целях, а также не разрешается устанавливать публичные серверы на базе MaNGOS.
Любое копирование материалов, информации в любом виде без указания источника - форума Ru-MaNGOS будет считаться нарушением авторских прав и нарушением Уголовного Кодекса РФ, ст. 146 ст. 147.
Перевод vBulletin: zCarot