Forum in READ ONLY mode! All questions and discussions on Discord official server, invite link: https://discord.gg/VxsGzJ7
Заявка на новые возможности, либо на исправление старых
Re: Заявка на новые возможности, либо на исправление старых
Возможности работы с этим прицелом нету?
Re: Заявка на новые возможности, либо на исправление старых
а это прицел?
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
Re: Заявка на новые возможности, либо на исправление старых
http://www.uoguide.com/Client_Patch_5.0.2Vizit0r wrote:а это прицел?
Средствами клиента можно перебирать цели, выбрать ближайшую, а так же использовать ее, кастовать в нее и.т.п.
Re: Заявка на новые возможности, либо на исправление старых
мне кажется, это чисто клиентские навороты сродни LastTarget и TargetNext
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
Re: Заявка на новые возможности, либо на исправление старых
В Client.dll питона не будет?
Re: Заявка на новые возможности, либо на исправление старых
точно нет.
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
Re: Заявка на новые возможности, либо на исправление старых
Проблема: на шарде X не корректно работает функция Y (в частности - MoveItem, но по сути неважно какая), а через графический клиент ручками - все получается ок.
Решение: послать из стелс-клиента точную копию пакета, который создал родной клиент (предварительно перехватить и скопировать его вручную в логе совсем не сложно)
Запрос: Нужна функция а-ля SendRawPacket(...) в стелс клиенте, которая обернет и отправит по нужному адресу предварительно перехваченную вручную в логах последовательность байт (задавать последовательность можно например через массив byte[], или как строку "0xD6 0x00 0xD7 0x00 ..." перепечатывая ее из HEX редактора, что удобно).
PS Если что - могу помочь с реализацией этого в коде. Мощнейший же по сути инструмент получится, и универсальный, позволяющий не дожидаться фиксов багов клиента или сервера, и реализовывать что угодно.
PPS Если подобное уже возможно, не сочтите за труд - ткните меня носом как. Облазил форумы, изгуглил все вдоль и поперек - не нашел. Ну или запросы формулировал некоректно. Буду признателен за конкретную информацию по этому вопросу.
Решение: послать из стелс-клиента точную копию пакета, который создал родной клиент (предварительно перехватить и скопировать его вручную в логе совсем не сложно)
Запрос: Нужна функция а-ля SendRawPacket(...) в стелс клиенте, которая обернет и отправит по нужному адресу предварительно перехваченную вручную в логах последовательность байт (задавать последовательность можно например через массив byte[], или как строку "0xD6 0x00 0xD7 0x00 ..." перепечатывая ее из HEX редактора, что удобно).
PS Если что - могу помочь с реализацией этого в коде. Мощнейший же по сути инструмент получится, и универсальный, позволяющий не дожидаться фиксов багов клиента или сервера, и реализовывать что угодно.
PPS Если подобное уже возможно, не сочтите за труд - ткните меня носом как. Облазил форумы, изгуглил все вдоль и поперек - не нашел. Ну или запросы формулировал некоректно. Буду признателен за конкретную информацию по этому вопросу.
Last edited by Quleebeen on 16.11.2016 15:47, edited 1 time in total.
Re: Заявка на новые возможности, либо на исправление старых
так напиши свой стелс, делов то...Quleebeen wrote:Проблема: на шарде X не корректно работает функция Y (в частности - MoveItem, но по сути неважно какая), а через графический клиент ручками - все получается ок.
Решение: послать из стелс-клиента точную копию пакета, который создал родной клиент (предварительно перехватить и скопировать его вручную в логе совсем не сложно)
Запрос: Нужна функция а-ля SendRawPacket(...) в стелс клиенте, которая обернет и отправит по нужному адресу предварительно перехваченную вручную в логах последовательность байт (задавать последовательность можно например через массив byte[], или как строку "0xD6 0x00 0xD7 0x00 ..." перепечатывая ее из HEX редактора, что удобно).
PS Если что - могу помочь с реализацией этого в коде. Мощнейший же по сути инструмент получится, и универсальный, позволяющий не дожидаться фиксов багов клиента или сервера, и реализовывать что угодно.
PPS Если подобное уже возможно, не сочтите за труд - ткните меня носом как. Облазил форумы, изгуглил все вдоль и поперек - не нашел. Ну или запросы формулировал некоректно. Буду признателен за инормацию по этому вопросу.
Как поддержитьва "тысячу кастомных" стелсов?
Не проще тогда просить девелоперов выложить на гитхаб в паблик исходники стелса.
Re: Заявка на новые возможности, либо на исправление старых
Ты серьезно? Ты вообще вчитывался в мое сообщение?drabadan wrote: так напиши свой стелс, делов то...
Как поддержитьва "тысячу кастомных" стелсов?
Не проще тогда просить девелоперов выложить на гитхаб в паблик исходники стелса.
Спасибо за совет "по существу". Прям как я просил.
"Написать собсный клиент" на любою проблему - это "пять"! Code reuse? Нет, не слышал.
Ради одного небольшого, но универсального дополнения функционала - писать с нуля решение. Прелесно.
Я точно темой не ошибся? Тут feature request topic или где?
Покажи мне, где я говорил о "выложить, паблик, кастомных"???
Я всего лишь предложил свою помощь в реализации, потому что прекрасно понимаю что у человека может просто не быть свободного времени. А вносить это потом в релиз или нет - уже сам решит. Тебе понятие Pull Request знакомо??? А гитхабом или через приватную систему контроля версий - уже детали.
И что ты вообще там поддерживать собрался?
void SendRawPacket(...) или в худшем случае bool SendRawPacket(...) даже значения не возвращает по сути, так - "получилось/не получилось". Обернула нужные нам байты в сетевой пакет, послала серверу, забыла. /facepalm
Были б сорцы в гитхабе - даже постить тут бы не стал, молча сделал бы все что надо, форкнул бы свой стелс и радовался. А вместе со мной - все те, кому это пришлось бы по душе. Так что оставь такие советы себе.
И ты б фантазию поумерил. Так скоро миллионы форкнутых стелсов поддерживать захочешь. Сам проблему придумал, сам ужаснулся, и наводишь панику тут. Я чуть было сам не запаниковал. Но потом вспомнил про "git merge" и успокоился.
Не знаешь как это реализовать в текущем билде - просто промолчи, ответит кто знает или будет видно, что никто не знает.
PS Многие проекты от перехода в OpenSource выигрывали, так что это и правда могло быть проще. Но тут не мне и не тебе решать, а владельцу кода, так что бессмысленно это даже обсуждать.
Re: Заявка на новые возможности, либо на исправление старых
про кастомные и правда не вчитывался!Quleebeen wrote:Ты серьезно? Ты вообще вчитывался в мое сообщение?drabadan wrote: так напиши свой стелс, делов то...
Как поддержитьва "тысячу кастомных" стелсов?
Не проще тогда просить девелоперов выложить на гитхаб в паблик исходники стелса.
Спасибо за совет "по существу". Прям как я просил.
"Написать собсный клиент" на любою проблему - это "пять"! Code reuse? Нет, не слышал.
Ради одного небольшого, но универсального дополнения функционала - писать с нуля решение. Прелесно.
Я точно темой не ошибся? Тут feature request topic или где?
Покажи мне, где я говорил о "выложить, паблик, кастомных"???
Я всего лишь предложил свою помощь в реализации, потому что прекрасно понимаю что у человека может просто не быть свободного времени. А вносить это потом в релиз или нет - уже сам решит. Тебе понятие Pull Request знакомо??? А гитхабом или через приватную систему контроля версий - уже детали.
И что ты вообще там поддерживать собрался?
void SendRawPacket(...) или в худшем случае bool SendRawPacket(...) даже значения не возвращает по сути, так - "получилось/не получилось". Обернула нужные нам байты в сетевой пакет, послала серверу, забыла. /facepalm
Были б сорцы в гитхабе - даже постить тут бы не стал, молча сделал бы все что надо, форкнул бы свой стелс и радовался. А вместе со мной - все те, кому это пришлось бы по душе. Так что оставь такие советы себе.
И ты б фантазию поумерил. Так скоро миллионы форкнутых стелсов поддерживать захочешь. Сам проблему придумал, сам ужаснулся, и наводишь панику тут. Я чуть было сам не запаниковал. Но потом вспомнил про "git merge" и успокоился.
Не знаешь как это реализовать в текущем билде - просто промолчи, ответит кто знает или будет видно, что никто не знает.
PS Многие проекты от перехода в OpenSource выигрывали, так что это и правда могло быть проще. Но тут не мне и не тебе решать, а владельцу кода, так что бессмысленно это даже обсуждать.
По существу - очень узкий круг людей смогут этим пользоваться. В шарпах\дельфах там еще можно будет, что то "на лету" цеплять, но и то.
На сколько мне известно, не так в стелсе все просто устроено с объектами, изменение чего то в raw виде может много всяких неприятных вещей с памятью сделать, отсюда "трудноувловимые" баги. Хотя решать не мне, авось захотят по"баться.
А на том шарде все работает кроме 1 функции? Может проблема не в пакетах а енкрипт етих пакетов?
Re: Заявка на новые возможности, либо на исправление старых
Да криптования там вообще нет, снято. Дело точно не в этом.drabadan wrote: А на том шарде все работает кроме 1 функции? Может проблема не в пакетах а енкрипт етих пакетов?
Похоже на личностное своеобразие сервера.
Со стандартными контейнерами перемещения ок, а вот зарядить рунбуку бросив в нее предмет через MoveItem уже не получается. Предмет вообще исчезает в неведомом направлении
Раньше работало, после изменений на сервере - перестало. Хотел обойти это тупо подделав пакет.
Если еще есть варианты зарядить рунбуку скроллами - велкам, любой совет приветствуется.
А то я уже все перебрал... Ну кроме отсылки пакетов.
PS Да понятно что подобная функция только для продвинутых, на свой страх и риск. Но я бы рискнул
Re: Заявка на новые возможности, либо на исправление старых
Quleebeen wrote:Да криптования там вообще нет, снято. Дело точно не в этом.drabadan wrote: А на том шарде все работает кроме 1 функции? Может проблема не в пакетах а енкрипт етих пакетов?
Похоже на личностное своеобразие сервера.
Со стандартными контейнерами перемещения ок, а вот зарядить рунбуку бросив в нее предмет через MoveItem уже не получается. Предмет вообще исчезает в неведомом направлении
Раньше работало, после изменений на сервере - перестало. Хотел обойти это тупо подделав пакет.
Если еще есть варианты зарядить рунбуку скроллами - велкам, любой совет приветствуется.
А то я уже все перебрал... Ну кроме отсылки пакетов.
PS Да понятно что подобная функция только для продвинутых, на свой страх и риск. Но я бы рискнул
Code: Select all
DropItem
function DropItem(MoveIntoID : Cardinal; X,Y,Z : Integer) : Boolean
Бросить вещь из рук в место, куда вы укажете.
Ф-ция вернет false если у вас в руках ничего нету.
Если MoveIntoID = Ground, то кинет на землю с указанными координатами.
Если MoveIntoID не существует, то кинет в бекпак вашего персонажа.
В случае "земли" работают относительные координаты.
В случае если MoveIntoID - контейнер, то кинет его как в контейнер.
Если MoveIntoID - айтим, то клиент попытается состыковать айтимы.
В случае нулевых координат - клиент сам попытается подставит нужные.
Важно: Обратите внимание, что эта ф-ция просто бросает предмет из рук, а не перемешает его в другой контейнер.
Также не забывайте, что эта ф-ция должна использоваться только в паре с DragItem.
http://stealth.od.ua/Doc:RU/Manual/Refe ... e#DropItem
покажи пакет в хекс виде...
Re: Заявка на новые возможности, либо на исправление старых
а ты возьми и тупо скажи мне какой "правильный" пакет шлет клиент, и как "криво" шлет стелс.Quleebeen wrote: Со стандартными контейнерами перемещения ок, а вот зарядить рунбуку бросив в нее предмет через MoveItem уже не получается. Предмет вообще исчезает в неведомом направлении
Раньше работало, после изменений на сервере - перестало. Хотел обойти это тупо подделав пакет.
Вангую что все это решается выставлением правильных параметров.
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
Re: Заявка на новые возможности, либо на исправление старых
Начнем с того, что ранее скрипт работал идеально через:
if FindType($1F4C, Chest) > 0 then MoveItem(FindItem, 0, RuneBook, 0,0,0);
Т.е. тут не ошибка в коде новичка, а что-то другое. Проблемы начались после изменения на сервере. Т.к. сервер не офицальный - он поидее как угодно может реагировать на приходящие ему пакеты, все зависит от фантазии разработчиков. Так что это не попытка реализации, а поиск фикса для работающего в прошлом скрипта.
Мои настройки фильтра пакетов под это (мог что-то лишнее зафильтровать, но сомневаюсь):
[PacketType=0x08][ScrollID=41 0A 63 9B][XYZ=FFFF FFFF 00][RuneBookID=40 00 A8 34 ] , на что сервер отвечает 0x25 пакетом Ultima Online Protocol :: Object to Object
Согласно http://necrotoolz.sourceforge.net/kairpacketguide/ это есть что-то похожее на:
Ultima Online Protocol :: Take Object и затем Ultima Online Protocol :: Drop Object
И тогда, это (в теории) имитируется вызовом следующих функций :
function DragItem(ItemID : Cardinal; Count : Integer) : Boolean
function DropItem(MoveIntoID : Cardinal; X,Y,Z : Integer) : Boolean , где X,Y,Z = FFFF FFFF 0000.
Логично.
Что по сути drabadan и советовал. Проверяем!
И обламываемся. Скролл пропал, заряд рунбуки не увеличился. Недоумение растет.
Что-то мы упустили.
Подбор "правильных" параметров ничего не дал, обперебирался (а менять тут только XYZ имеет смысл) - без результатно. Некоторые варианты я специально оставил в коде закомментированными, дабы показать что проверял.
Пробовал как на версии Stealth_v6.7 так и на Stealth_v7.6.2 - глухо.
Так что или вангователь ошибся, или я что-то, да упустил.
Тогда что?
Смотрим что шлет Стелс:
WTF?
Прелесно! Он решил что он умнее, и координаты 00 2F 00 4C 00 00 будут гораздо лучше.
Ок.
И как мне тогда передать координаты FFFF FFFF 0000 ?! Вангователь, ты нужен нам как никогда! Выручай!
Как видно в процитированном коде я пробовал это сделать и через -1, и через 0xFFFF, и просто числом десятичным. Вероятно "защита от дурака" в функции не дает кидать в "отрицательные координаты" - хз, не видел кода...
И чтобы все это выяснить я должен угробить ппц сколько времени и труда на отладку... Вы серьезно?!
И на каждый чих очередного пиратского шарда мне вновь дебажить обмен пакетами под микроскопом?
Данунах! Берем нужный кусок трафика от клиента, copy/paste - послать в RAW виде серверу. Готово. Следующий!
Ребят, я конечно понимаю, что можно отреверсить бинарник стелса, пропатчить то место и наслаждатся. Я и это могу. Или нагородить бутерброд и встрясть между клиентом и сервером тем же Wicked Patcher'ом. Можно и двигатель автомобиля через выхлопную трубу перебирать, и микроскопами гвозди заколачивать...
Всегда есть решения.
Иногда монструозные и извращенные, но найти можно...
Но время! Время жалко!
Вот для проверки гипотез, отладки и хотфиксов я бы и хотел инструмент, которым это могло бы быть осуществимо. Помните Wicked Patcher (WP PPC) by Sauron для ЛА2 (и не только)? Мощнейшая штука.
Позволяет реализовать практически что угодно. Быстро и эффективно. И универсально. И не надо ждать обновлений с исправленой ошибкой. И удобнее диагностировать сравнительными тестами, чем искать на какое множество функций как отображаются на множество пакетов протокола, насколько точно они реализованы и подбирать параметры.
Почему бы не перенять немного "хороших практик" от коллег? Годами проверенное решение, кстати. Что останавливает? И этим покроете все отклонения от официального для множества всех кастомных серверов этим добавлением без постоянного обновления версий попутно.
Ведь иначе - тонна кропотливой и не нужной работы ради того, что я бы мог сделать за считаные минуты. Не по людски
Давайте дружить, а? Сделаем жизнь всем еще немножечко удобнее.
PS Я конечно понимаю, что основной поток "скриптеров" и обычные функции криво пользовать умудряется. Так зачем же обламывать тех, кто понимает, что делает?
Пусть будет. На свой страх и риск (с). Без поддержки. Без документации (лишь упомянуть что такое есть в Release note). Но будет.
Кто разберется - тому и флаг в руки. Остальные - на стандартных функциях могут оставаться, обратная совместимость скриптов не порушиться.
К тому же, делов то - чуть. Вся необходимая обвязка как формировать пакет у вас уже сделана, лишь тело пакета обернуть надо.
А многим крови, нервов и времени сэкономит вагоны.
if FindType($1F4C, Chest) > 0 then MoveItem(FindItem, 0, RuneBook, 0,0,0);
Т.е. тут не ошибка в коде новичка, а что-то другое. Проблемы начались после изменения на сервере. Т.к. сервер не офицальный - он поидее как угодно может реагировать на приходящие ему пакеты, все зависит от фантазии разработчиков. Так что это не попытка реализации, а поиск фикса для работающего в прошлом скрипта.
Конечно пробовал! И все остальные перемещающие функции тоже, с разными прараметрами. И не мог вкурить где засада.drabadan wrote: ...
пробовал?
http://stealth.od.ua/Doc:RU/Manual/Refe ... e#DropItem
покажи пакет в хекс виде...
Мои настройки фильтра пакетов под это (мог что-то лишнее зафильтровать, но сомневаюсь):
Code: Select all
!>DC, !A1, !3C, !24, !22, !AE, !11, !1A, !1C, !1D, !6E, !77, !D6, !BF 00 09 00 10, !<73, !09, !6C, !06, !02, !54, !BF
Вот эти ребята (пакеты от клиента UO):Vizit0r wrote: а ты возьми и тупо скажи мне какой "правильный" пакет шлет клиент, и как "криво" шлет стелс.
Вангую что все это решается выставлением правильных параметров.
Code: Select all
14:47:29:374: Player, Client -> Server: 0x07, len: 7
0000: 07 41 0A 63 9B 00 01 .A.c...
14:47:30:073: Player, Client -> Server: 0x08, len: 15
0000: 08 41 0A 63 9B FF FF FF FF 00 00 40 00 A8 34 [email protected]
Согласно http://necrotoolz.sourceforge.net/kairpacketguide/ это есть что-то похожее на:
Ultima Online Protocol :: Take Object и затем Ultima Online Protocol :: Drop Object
И тогда, это (в теории) имитируется вызовом следующих функций :
function DragItem(ItemID : Cardinal; Count : Integer) : Boolean
function DropItem(MoveIntoID : Cardinal; X,Y,Z : Integer) : Boolean , где X,Y,Z = FFFF FFFF 0000.
Логично.
Что по сути drabadan и советовал. Проверяем!
Code: Select all
AddToSystemJournal('+ Test Start +');
if FindType($22C5, Backpack) > 0 then
RuneBookID := FindItem;
AddToSystemJournal(' RuneBookID: '+IntToStr(FindItem));
if FindType($1F4C, Backpack) > 0 then begin // scroll
AddToSystemJournal(' RecallScrollID: '+IntToStr(FindItem));
if DragItem(FindItem, Backpack) then
AddToSystemJournal(' * DragItem *');
//if DropItem(RuneBookID, -1, -1, 0) then
//if DropItem(RuneBookID, $FFFF, $FFFF, 0) then
if DropItem(RuneBookID, 65535, 65535, 0) then
AddToSystemJournal(' * DropItem *');
end;
AddToSystemJournal('- Test End. -');
Что-то мы упустили.
Подбор "правильных" параметров ничего не дал, обперебирался (а менять тут только XYZ имеет смысл) - без результатно. Некоторые варианты я специально оставил в коде закомментированными, дабы показать что проверял.
Пробовал как на версии Stealth_v6.7 так и на Stealth_v7.6.2 - глухо.
Так что или вангователь ошибся, или я что-то, да упустил.
Тогда что?
Смотрим что шлет Стелс:
Code: Select all
16:21:22:390: Player, Client -> Server: 0x07, len: 7
0000: 07 40 4C 43 4C 00 01 .@LCL..
16:21:22:571: Player, Client -> Server: 0x08, len: 15
0000: 08 40 4C 43 4C 00 2F 00 4C 00 00 40 00 A8 34 .@LCL./[email protected]
Прелесно! Он решил что он умнее, и координаты 00 2F 00 4C 00 00 будут гораздо лучше.
Ок.
И как мне тогда передать координаты FFFF FFFF 0000 ?! Вангователь, ты нужен нам как никогда! Выручай!
Как видно в процитированном коде я пробовал это сделать и через -1, и через 0xFFFF, и просто числом десятичным. Вероятно "защита от дурака" в функции не дает кидать в "отрицательные координаты" - хз, не видел кода...
И чтобы все это выяснить я должен угробить ппц сколько времени и труда на отладку... Вы серьезно?!
И на каждый чих очередного пиратского шарда мне вновь дебажить обмен пакетами под микроскопом?
Данунах! Берем нужный кусок трафика от клиента, copy/paste - послать в RAW виде серверу. Готово. Следующий!
Ребят, я конечно понимаю, что можно отреверсить бинарник стелса, пропатчить то место и наслаждатся. Я и это могу. Или нагородить бутерброд и встрясть между клиентом и сервером тем же Wicked Patcher'ом. Можно и двигатель автомобиля через выхлопную трубу перебирать, и микроскопами гвозди заколачивать...
Всегда есть решения.
Иногда монструозные и извращенные, но найти можно...
Но время! Время жалко!
Вот для проверки гипотез, отладки и хотфиксов я бы и хотел инструмент, которым это могло бы быть осуществимо. Помните Wicked Patcher (WP PPC) by Sauron для ЛА2 (и не только)? Мощнейшая штука.
Позволяет реализовать практически что угодно. Быстро и эффективно. И универсально. И не надо ждать обновлений с исправленой ошибкой. И удобнее диагностировать сравнительными тестами, чем искать на какое множество функций как отображаются на множество пакетов протокола, насколько точно они реализованы и подбирать параметры.
Почему бы не перенять немного "хороших практик" от коллег? Годами проверенное решение, кстати. Что останавливает? И этим покроете все отклонения от официального для множества всех кастомных серверов этим добавлением без постоянного обновления версий попутно.
Ведь иначе - тонна кропотливой и не нужной работы ради того, что я бы мог сделать за считаные минуты. Не по людски
Давайте дружить, а? Сделаем жизнь всем еще немножечко удобнее.
PS Я конечно понимаю, что основной поток "скриптеров" и обычные функции криво пользовать умудряется. Так зачем же обламывать тех, кто понимает, что делает?
Пусть будет. На свой страх и риск (с). Без поддержки. Без документации (лишь упомянуть что такое есть в Release note). Но будет.
Кто разберется - тому и флаг в руки. Остальные - на стандартных функциях могут оставаться, обратная совместимость скриптов не порушиться.
К тому же, делов то - чуть. Вся необходимая обвязка как формировать пакет у вас уже сделана, лишь тело пакета обернуть надо.
А многим крови, нервов и времени сэкономит вагоны.
Re: Заявка на новые возможности, либо на исправление старых
да, косяк был в стелсе.
покопался в ирисе, покопался в офиц. клиенте - нашел еще один способ детектить контейнер, вписал его. Теперь все правильно дропает.
Если вопрос только в этом - пиши в скайп\асю\ПМ - скину новую версию.
Отправлять свои пакеты возможности не будет. тчк.
Я в курсе, что есть варианты инжекта\подмены и т.д. Некоторые из них я и сам использую с клиентом. Если сильно хочется - вперед, кто ж тебе запретит.
покопался в ирисе, покопался в офиц. клиенте - нашел еще один способ детектить контейнер, вписал его. Теперь все правильно дропает.
Если вопрос только в этом - пиши в скайп\асю\ПМ - скину новую версию.
Отправлять свои пакеты возможности не будет. тчк.
Я в курсе, что есть варианты инжекта\подмены и т.д. Некоторые из них я и сам использую с клиентом. Если сильно хочется - вперед, кто ж тебе запретит.
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".