Max
07.03.2010, 04:37
Все изменения провожу в Notepad++. (необходимы полностью скаченные исходники Mangos'a)
Возьмем, к примеру, часть патча добавляющая auctionhousebot. В котором, у меня, возникает ошибка.
Пример: 124
У меня ошибка была в этом блоке патча, ошибка в файле mail.cpp. Это обычно показано в начале одного из блоков патча.(я выделил фиолетовым)
1. Собственно нужно убедится что есть сами исходники, программа Git и сам патч (желательно ещё и присутствие программы Compare IT! или других аналогичных)
2. Закидываем патч в корневую папку с исходниками, если патч для ядра. Кликаем правой кнопкой мыши по папке с исходниками и выбираем Git Bash Here. И в консоли вводим patch -p1 < имя_патча.patch, нажимаем Enter
3. Смотрим что у нас получилось, если в строчках присутствует FAILED или *** значит в патче есть ошибки. Git лучше оставить открытым, чтобы можно было найти ошибки.
4. Открываем патч который пропатчился с ошибками, и на основе лога ищем в нём блок который пропатчился с ошибкой. Делаем это основываясь на номере строчки или название файла которая/ый пропатчилась/ся с ошибкой.
Я ориентируюсь на основе:
(Старайтесь при возможность ориентироваться не только по одной строчке, т.к. они повторяются.)
// will delete item or place to receiver mail list
Если таких строчек много, тогда ориентируемся по предыдущим строчкам.
Теперь ищем строчку со знаком -, в патче, которую Git должен удалить или заменить. В моём случае это строчка:
- SendMailTo(MailReceiver(receiver,receiver_guid), MailSender(MAIL_NORMAL, sender_guid), MAIL_CHECK_MASK_RETURNED, deliver_delay);
5. Заходим в папку с исходниками, заходим в папку "src/game/", находим файл на который ссылалась ошибка, и открываем с помощью Visual Studio или блокнота файл, на который Git сослался с ошибкой. У меня в примере Git сослался на файл - Mail.cpp
6. Открыв файл Mail.cpp нажимаем CTRL+F, в появившемся окне поиска вводим строчку которая до знака минуса, или предыдущую. (Тоесть, мы ищем ориентировочную строчку)
К примеру, у меня вместо заменяемой строчки стоит следующее:
Player *receiver = sObjectMgr.GetPlayer(MAKE_NEW_GUID(receiver_guid, 0, HIGHGUID_PLAYER));
Если вы уверены, в том, что, строчка которую вы нашли, должна стоять вместо строчки из патча со знаком минуса в начале. Тогда копируйте эту строчку из файл, вместо строчки со знаком "минус", не забудьте поставить его в начале.
Пример того что должно получиться: 125
Жмём сохранить.
7. В заключении ещё одна важная вещь. Адрес изменения. На отдельном примере
Обратите внимание на цифры в адресе изменения. @@ -1168,10 +1168,10 @@ OpcodeHandler opcodeTable[NUM_MSG_TYPES]
-1168 Обозначает номер ориентировочной строчки кода. По которой Git, будет искать, и удалять не нужные строки при необходимости. 10 Это сумма, которая определяет: кол-во ориентировочных строчек в нужном файле для Git + кол-во удаляемых строчек.
+1168 Обозначает номер ориентировочной строчки кода. По которой Git, будет искать и добавлять и или изменять нужные строчки при необходимости. 10 Это сумма, которая определяет: кол-во ориентировочных строчек в нужном файле для Git + кол-во добавляемых строчек.
OpcodeHandler opcodeTable[NUM_MSG_TYPES] Название блока в исходнике, в котором происходит изменение.
Пример: 126
8. Запускаем консоль Git, как мы делали во 2 пункте, и применяем патч, лучше это делать на чистых исходниках. Если не получилось, делаем по новой.
Альтернативный способ.
Все изменения провожу в Notepad++. (необходимы полностью скаченные исходники Mangos'a)
В этом способе мы подгоняем подгоняем патч под имеющиеся исходники.
Исходный кусок кода патча для примера:
diff --git a/src/game/Group.h b/src/game/Group.h
index 3024438..88eda30 100644
--- a/src/game/Group.h
+++ b/src/game/Group.h
@@ -92,7 +92,8 @@ enum GroupUpdateFlags
GROUP_UPDATE_FLAG_PET_AURAS = 0x00040000, // uint64 mask, for each bit set uint32 spellid + uint8 unk, pet auras...
GROUP_UPDATE_FLAG_VEHICLE_SEAT = 0x00080000, // uint32 vehicle_seat_id (index from VehicleSeat.dbc)
GROUP_UPDATE_PET = 0x0007FC00, // all pet flags
- GROUP_UPDATE_FULL = 0x0007FFFF, // all known flags
+ GROUP_UPDATE_VEHICLE = 0x000FFC00, // all vehicle flags
+ GROUP_UPDATE_FULL = 0x000FFFFF, // all known flags
};
#define GROUP_UPDATE_FLAGS_COUNT 20
diff --git a/src/game/GroupHandler.cpp b/src/game/GroupHandler.cpp
1. Собственно нужно убедится что есть сами исходники, программа Git и сам патч (желательно ещё и присутствие программы Compare IT! или других аналогичных)
2. Закидываем патч в корневую папку с исходниками, если патч для ядра. Кликаем правой кнопкой мыши по папке с исходниками и выбираем Git Bash Here. И в консоли вводим patch -p1 < имя_патча.patch, нажимаем Enter
3. Смотрим что у нас получилось, если в строчках присутствует FAILED или *** значит в патче есть ошибки. Git лучше оставить открытым, чтобы можно было найти ошибки.
4. Открываем патч. Ищем на основе результата применения патча в Git'e ищём нужный блок в котором была ошибка.
В моём примере. Начало блока вносимых изменений из патча в нужный файл исходного кода, это : diff --git a/src/game/Group.h b/src/game/Group.h
В моём примере. Конец блока вносимых изменений из патча в исходный файл нужного кода, это : #define GROUP_UPDATE_FLAGS_COUNT 20
В моём примере. Начало следующего блока вносимых изменений из патча в нужный файл исходного кода, это : diff --git a/src/game/GroupHandler.cpp b/src/game/GroupHandler.cpp
5. Открываем файл, в моём примере это Group.h, и ищем строчку из патча начинающуюся со знака "-". И заменяем эти строчки на строчки которые начинаются со знака +
6. После того как вы внесли все изменения из ошибочного блока патча, удалите этот блок из патча. И продолжите дальше исправление ошибок.
Аккуратно изменяйте патч, при удалении не задевайте другие блоки.
После всех необходимых попробуйте добавить патч на чистые исходники.
P.S. Возможны краши после подгонки патчей.
Взял с rumangos.ru, а они похоже у вас. Отредактировал под Git, поправьте пожалуйста если есть ошибки. . .
Дополнил.
Возьмем, к примеру, часть патча добавляющая auctionhousebot. В котором, у меня, возникает ошибка.
Пример: 124
У меня ошибка была в этом блоке патча, ошибка в файле mail.cpp. Это обычно показано в начале одного из блоков патча.(я выделил фиолетовым)
1. Собственно нужно убедится что есть сами исходники, программа Git и сам патч (желательно ещё и присутствие программы Compare IT! или других аналогичных)
2. Закидываем патч в корневую папку с исходниками, если патч для ядра. Кликаем правой кнопкой мыши по папке с исходниками и выбираем Git Bash Here. И в консоли вводим patch -p1 < имя_патча.patch, нажимаем Enter
3. Смотрим что у нас получилось, если в строчках присутствует FAILED или *** значит в патче есть ошибки. Git лучше оставить открытым, чтобы можно было найти ошибки.
4. Открываем патч который пропатчился с ошибками, и на основе лога ищем в нём блок который пропатчился с ошибкой. Делаем это основываясь на номере строчки или название файла которая/ый пропатчилась/ся с ошибкой.
Я ориентируюсь на основе:
(Старайтесь при возможность ориентироваться не только по одной строчке, т.к. они повторяются.)
// will delete item or place to receiver mail list
Если таких строчек много, тогда ориентируемся по предыдущим строчкам.
Теперь ищем строчку со знаком -, в патче, которую Git должен удалить или заменить. В моём случае это строчка:
- SendMailTo(MailReceiver(receiver,receiver_guid), MailSender(MAIL_NORMAL, sender_guid), MAIL_CHECK_MASK_RETURNED, deliver_delay);
5. Заходим в папку с исходниками, заходим в папку "src/game/", находим файл на который ссылалась ошибка, и открываем с помощью Visual Studio или блокнота файл, на который Git сослался с ошибкой. У меня в примере Git сослался на файл - Mail.cpp
6. Открыв файл Mail.cpp нажимаем CTRL+F, в появившемся окне поиска вводим строчку которая до знака минуса, или предыдущую. (Тоесть, мы ищем ориентировочную строчку)
К примеру, у меня вместо заменяемой строчки стоит следующее:
Player *receiver = sObjectMgr.GetPlayer(MAKE_NEW_GUID(receiver_guid, 0, HIGHGUID_PLAYER));
Если вы уверены, в том, что, строчка которую вы нашли, должна стоять вместо строчки из патча со знаком минуса в начале. Тогда копируйте эту строчку из файл, вместо строчки со знаком "минус", не забудьте поставить его в начале.
Пример того что должно получиться: 125
Жмём сохранить.
7. В заключении ещё одна важная вещь. Адрес изменения. На отдельном примере
Обратите внимание на цифры в адресе изменения. @@ -1168,10 +1168,10 @@ OpcodeHandler opcodeTable[NUM_MSG_TYPES]
-1168 Обозначает номер ориентировочной строчки кода. По которой Git, будет искать, и удалять не нужные строки при необходимости. 10 Это сумма, которая определяет: кол-во ориентировочных строчек в нужном файле для Git + кол-во удаляемых строчек.
+1168 Обозначает номер ориентировочной строчки кода. По которой Git, будет искать и добавлять и или изменять нужные строчки при необходимости. 10 Это сумма, которая определяет: кол-во ориентировочных строчек в нужном файле для Git + кол-во добавляемых строчек.
OpcodeHandler opcodeTable[NUM_MSG_TYPES] Название блока в исходнике, в котором происходит изменение.
Пример: 126
8. Запускаем консоль Git, как мы делали во 2 пункте, и применяем патч, лучше это делать на чистых исходниках. Если не получилось, делаем по новой.
Альтернативный способ.
Все изменения провожу в Notepad++. (необходимы полностью скаченные исходники Mangos'a)
В этом способе мы подгоняем подгоняем патч под имеющиеся исходники.
Исходный кусок кода патча для примера:
diff --git a/src/game/Group.h b/src/game/Group.h
index 3024438..88eda30 100644
--- a/src/game/Group.h
+++ b/src/game/Group.h
@@ -92,7 +92,8 @@ enum GroupUpdateFlags
GROUP_UPDATE_FLAG_PET_AURAS = 0x00040000, // uint64 mask, for each bit set uint32 spellid + uint8 unk, pet auras...
GROUP_UPDATE_FLAG_VEHICLE_SEAT = 0x00080000, // uint32 vehicle_seat_id (index from VehicleSeat.dbc)
GROUP_UPDATE_PET = 0x0007FC00, // all pet flags
- GROUP_UPDATE_FULL = 0x0007FFFF, // all known flags
+ GROUP_UPDATE_VEHICLE = 0x000FFC00, // all vehicle flags
+ GROUP_UPDATE_FULL = 0x000FFFFF, // all known flags
};
#define GROUP_UPDATE_FLAGS_COUNT 20
diff --git a/src/game/GroupHandler.cpp b/src/game/GroupHandler.cpp
1. Собственно нужно убедится что есть сами исходники, программа Git и сам патч (желательно ещё и присутствие программы Compare IT! или других аналогичных)
2. Закидываем патч в корневую папку с исходниками, если патч для ядра. Кликаем правой кнопкой мыши по папке с исходниками и выбираем Git Bash Here. И в консоли вводим patch -p1 < имя_патча.patch, нажимаем Enter
3. Смотрим что у нас получилось, если в строчках присутствует FAILED или *** значит в патче есть ошибки. Git лучше оставить открытым, чтобы можно было найти ошибки.
4. Открываем патч. Ищем на основе результата применения патча в Git'e ищём нужный блок в котором была ошибка.
В моём примере. Начало блока вносимых изменений из патча в нужный файл исходного кода, это : diff --git a/src/game/Group.h b/src/game/Group.h
В моём примере. Конец блока вносимых изменений из патча в исходный файл нужного кода, это : #define GROUP_UPDATE_FLAGS_COUNT 20
В моём примере. Начало следующего блока вносимых изменений из патча в нужный файл исходного кода, это : diff --git a/src/game/GroupHandler.cpp b/src/game/GroupHandler.cpp
5. Открываем файл, в моём примере это Group.h, и ищем строчку из патча начинающуюся со знака "-". И заменяем эти строчки на строчки которые начинаются со знака +
6. После того как вы внесли все изменения из ошибочного блока патча, удалите этот блок из патча. И продолжите дальше исправление ошибок.
Аккуратно изменяйте патч, при удалении не задевайте другие блоки.
После всех необходимых попробуйте добавить патч на чистые исходники.
P.S. Возможны краши после подгонки патчей.
Взял с rumangos.ru, а они похоже у вас. Отредактировал под Git, поправьте пожалуйста если есть ошибки. . .
Дополнил.