|
|
Модератор форума: Dimitro |
Форум TrinityCore Установка / Настройка TrinityCore FaQ По переводу патчей под новые ревизии (Смотрим Тему:) |
FaQ По переводу патчей под новые ревизии |
Вот решил написать небольшой FAQ по переводу патчей под новые ревизии.
Пример будет рассмотрен для сборки с помощью Microsoft Visual Studio 2005 (необходима сама программа и полностью скаченные исходники Trinity-Mangos подойдут любые) Вот возьмём к примеру несложный патч, правит обилки Rip и Rupture (оригинал): Code Index: src/game/SharedDefines.h =================================================================== --- src/game/SharedDefines.h (revision 3207) +++ src/game/SharedDefines.h (working copy) @@ -1016,5 +1016,7 @@ #define UNIT_FLAG_ANIMATION_FROZEN 0x0400 #define UNIT_FLAG_WAR_PLAYER 0x1000 -#define SPELL_ID_AGGRO 22764 +#define SPELL_ID_AGGRO 22764 +#define SPELL_ICONID_RIP 108 +#define SPELL_ICONID_RUPTURE 500 #endif Index: src/game/SpellAuras.cpp =================================================================== --- src/game/SpellAuras.cpp (revision 3207) +++ src/game/SpellAuras.cpp (working copy) @@ -240,7 +240,8 @@ if(caster->GetTypeId() == TYPEID_PLAYER) { comboPoints = (uint8)((caster->GetUInt32Value(PLAYER_FIELD_BYTES) & 0xFF00) >> 8); - caster->SetUInt32Value(PLAYER_FIELD_BYTES,((caster->GetUInt32Value(PLAYER_FIELD_BYTES) & ~(0xFF << 8)) | (0x00 << 8))); + if (!(spellproto->EffectPointsPerComboPoint[0] > 0 && (spellproto->SpellIconID == SPELL_ICONID_RIP || spellproto->SpellIconID == SPELL_ICONID_RUPTURE ))) + caster->SetUInt32Value(PLAYER_FIELD_BYTES,((caster->GetUInt32Value(PLAYER_FIELD_BYTES) & ~(0xFF << 8)) | (0x00 << 8))); } comboPoints = comboPoints < 5 ? comboPoints : 5; m_duration += int32((maxduration - m_duration) * comboPoints / 5); @@ -264,6 +265,8 @@ { m_caster_guid = caster->GetGUID(); damage = CalculateDamage(); + if ((spellproto->EffectPointsPerComboPoint[0] > 0 && (spellproto->SpellIconID == SPELL_ICONID_RIP || spellproto->SpellIconID == SPELL_ICONID_RUPTURE ))) + caster->SetUInt32Value(PLAYER_FIELD_BYTES,((caster->GetUInt32Value(PLAYER_FIELD_BYTES) & ~(0xFF << 8)) | (0x00 << 8))); } m_effIndex = eff; Index: src/game/Unit.cpp =================================================================== --- src/game/Unit.cpp (revision 3207) +++ src/game/Unit.cpp (working copy) @@ -4602,8 +4602,11 @@ if(comboDamage > 0) { value += (int32)(comboDamage * comboPoints); - if(GetTypeId() == TYPEID_PLAYER) - SetUInt32Value(PLAYER_FIELD_BYTES,((GetUInt32Value(PLAYER_FIELD_BYTES) & ~(0xFF << 8)) | (0x00 << 8))); + if(GetTypeId() == TYPEID_PLAYER) + { + if (!(spellProto->EffectPointsPerComboPoint[0] > 0 && (spellProto->SpellIconID == SPELL_ICONID_RIP || spellProto->SpellIconID == SPELL_ICONID_RUPTURE ))) + SetUInt32Value(PLAYER_FIELD_BYTES,((GetUInt32Value(PLAYER_FIELD_BYTES) & ~(0xFF << 8)) | (0x00 << 8))); + } } return value; СПОСОБ 1 (Дешёвый, но долгий): Разберём всё по шагам. Code comboPoints = (uint8)((caster->GetUInt32Value(PLAYER_FIELD_BYTES) & 0xFF00) >> 8); **Обращаем внимание только на строки, начинающиеся со знака "+" или "-", либо соседние** и удаляем ту строку, около которой в самом патче был знак "-" (в самом файле естественно не будет знака "-" и его пытаться искать в файле ненужно - просто отбрасываем его). То есть [code]caster->SetUInt32Value(PLAYER_FIELD_BYTES,((caster->GetUInt32Value(PLAYER_FIELD_BYTES) & ~(0xFF << 8)) | (0x00 << 8))); и на её место вставляем (так же нужно правельно сдвигать строки! Не лепить куски нового кода в ту же строку) Code + if (!(spellproto->EffectPointsPerComboPoint[0] > 0 && (spellproto->SpellIconID == SPELL_ICONID_RIP || spellproto->SpellIconID == SPELL_ICONID_RUPTURE ))) + caster->SetUInt32Value(PLAYER_FIELD_BYTES,((caster->GetUInt32Value(PLAYER_FIELD_BYTES) & ~(0xFF << 8)) | (0x00 << 8))); **При переписке патчей нужно очень много использовать CTRL+C и CTRL+V что ускорит процесс. И ОБЯЗАТЕЛЬНО УДАЛЯЕМ ЗНАК "+" В НАЧАЛЕ КАЖДОЙ СТРОКИ ПОСЛЕ КОПИРОВАНИЯ В ФАЙЛ** После этой замены получается вот такое Code if( m_duration != maxduration ) { uint8 comboPoints=0; if (caster && caster->GetTypeId() == TYPEID_PLAYER) { comboPoints = (uint8)((caster->GetUInt32Value(PLAYER_FIELD_BYTES) & 0xFF00) >> 8); if (!(spellproto->EffectPointsPerComboPoint[0] > 0 && (spellproto->SpellIconID == SPELL_ICONID_RIP || spellproto->SpellIconID == SPELL_ICONID_RUPTURE ))) caster->SetUInt32Value(PLAYER_FIELD_BYTES,((caster->GetUInt32Value(PLAYER_FIELD_BYTES) & ~(0xFF << 8)) | (0x00 << 8))); } comboPoints = comboPoints < 5 ? comboPoints : 5; m_duration += int32((maxduration - m_duration) * comboPoints / 5); 5) После внесения всех изменений, что были указаны в патче в файл, жмём кнопку Save на панели инструментов Visual Studio в редакторе и выходим. Теперь можно приступать к следующему файлу - Unit.cpp 6) Как и в предыдущий раз, открываем файл Unit.cpp, ищем в самом патче строку
Code Index: src/game/Unit.cpp и смотрим ниже строки, где в начале присутвуют + и -. Найдя строки Code - if(GetTypeId() == TYPEID_PLAYER) - SetUInt32Value(PLAYER_FIELD_BYTES,((GetUInt32Value(PLAYER_FIELD_BYTES) & ~(0xFF << 8)) | (0x00 << 8))); (Только без "-")
Code + if(GetTypeId() == TYPEID_PLAYER) + { + if (!(spellProto->EffectPointsPerComboPoint[0] > 0 && (spellProto->SpellIconID == SPELL_ICONID_RIP || spellProto->SpellIconID == SPELL_ICONID_RUPTURE ))) + SetUInt32Value(PLAYER_FIELD_BYTES,((GetUInt32Value(PLAYER_FIELD_BYTES) & ~(0xFF << 8)) | (0x00 << 8))); + } Затем удаляем все "+" вначале добавленных строк. СПОСОБ 2 (Быстрый, но платный): Не откожусь от +сиков
Сообщение # 1 написано 11.04.2011 в 19:08
|
| |||
| |||