Forum in READ ONLY mode! All questions and discussions on Discord official server, invite link: https://discord.gg/VxsGzJ7

Заявка на новые возможности, либо на исправление старых

Only for requests.
wend
Neophyte
Neophyte
Posts: 27
Joined: 14.10.2013 15:03

Re: Заявка на новые возможности, либо на исправление старых

Post by wend »

Image

Возможности работы с этим прицелом нету?
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Re: Заявка на новые возможности, либо на исправление старых

Post by Vizit0r »

а это прицел?
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
wend
Neophyte
Neophyte
Posts: 27
Joined: 14.10.2013 15:03

Re: Заявка на новые возможности, либо на исправление старых

Post by wend »

Vizit0r wrote:а это прицел?
http://www.uoguide.com/Client_Patch_5.0.2

Средствами клиента можно перебирать цели, выбрать ближайшую, а так же использовать ее, кастовать в нее и.т.п.
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Re: Заявка на новые возможности, либо на исправление старых

Post by Vizit0r »

мне кажется, это чисто клиентские навороты сродни LastTarget и TargetNext
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
wend
Neophyte
Neophyte
Posts: 27
Joined: 14.10.2013 15:03

Re: Заявка на новые возможности, либо на исправление старых

Post by wend »

В Client.dll питона не будет?
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Re: Заявка на новые возможности, либо на исправление старых

Post by Vizit0r »

точно нет.
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
Quleebeen
Posts: 7
Joined: 16.11.2016 14:55

Re: Заявка на новые возможности, либо на исправление старых

Post by Quleebeen »

Проблема: на шарде X не корректно работает функция Y (в частности - MoveItem, но по сути неважно какая), а через графический клиент ручками - все получается ок.
Решение: послать из стелс-клиента точную копию пакета, который создал родной клиент (предварительно перехватить и скопировать его вручную в логе совсем не сложно)
Запрос: Нужна функция а-ля SendRawPacket(...) в стелс клиенте, которая обернет и отправит по нужному адресу предварительно перехваченную вручную в логах последовательность байт (задавать последовательность можно например через массив byte[], или как строку "0xD6 0x00 0xD7 0x00 ..." перепечатывая ее из HEX редактора, что удобно).

PS Если что - могу помочь с реализацией этого в коде. Мощнейший же по сути инструмент получится, и универсальный, позволяющий не дожидаться фиксов багов клиента или сервера, и реализовывать что угодно.
PPS Если подобное уже возможно, не сочтите за труд - ткните меня носом как. Облазил форумы, изгуглил все вдоль и поперек - не нашел. Ну или запросы формулировал некоректно. Буду признателен за конкретную информацию по этому вопросу.
Last edited by Quleebeen on 16.11.2016 15:47, edited 1 time in total.
drabadan
Expert
Expert
Posts: 730
Joined: 13.12.2012 17:35
Contact:

Re: Заявка на новые возможности, либо на исправление старых

Post by drabadan »

Quleebeen wrote:Проблема: на шарде X не корректно работает функция Y (в частности - MoveItem, но по сути неважно какая), а через графический клиент ручками - все получается ок.
Решение: послать из стелс-клиента точную копию пакета, который создал родной клиент (предварительно перехватить и скопировать его вручную в логе совсем не сложно)
Запрос: Нужна функция а-ля SendRawPacket(...) в стелс клиенте, которая обернет и отправит по нужному адресу предварительно перехваченную вручную в логах последовательность байт (задавать последовательность можно например через массив byte[], или как строку "0xD6 0x00 0xD7 0x00 ..." перепечатывая ее из HEX редактора, что удобно).

PS Если что - могу помочь с реализацией этого в коде. Мощнейший же по сути инструмент получится, и универсальный, позволяющий не дожидаться фиксов багов клиента или сервера, и реализовывать что угодно.
PPS Если подобное уже возможно, не сочтите за труд - ткните меня носом как. Облазил форумы, изгуглил все вдоль и поперек - не нашел. Ну или запросы формулировал некоректно. Буду признателен за инормацию по этому вопросу.
так напиши свой стелс, делов то...
Как поддержитьва "тысячу кастомных" стелсов?
Не проще тогда просить девелоперов выложить на гитхаб в паблик исходники стелса.
Quleebeen
Posts: 7
Joined: 16.11.2016 14:55

Re: Заявка на новые возможности, либо на исправление старых

Post by Quleebeen »

drabadan wrote: так напиши свой стелс, делов то...
Как поддержитьва "тысячу кастомных" стелсов?
Не проще тогда просить девелоперов выложить на гитхаб в паблик исходники стелса.
Ты серьезно? Ты вообще вчитывался в мое сообщение?
Спасибо за совет "по существу". Прям как я просил.
"Написать собсный клиент" на любою проблему - это "пять"! Code reuse? Нет, не слышал.
Ради одного небольшого, но универсального дополнения функционала - писать с нуля решение. Прелесно.
Я точно темой не ошибся? Тут feature request topic или где?
Покажи мне, где я говорил о "выложить, паблик, кастомных"???
Я всего лишь предложил свою помощь в реализации, потому что прекрасно понимаю что у человека может просто не быть свободного времени. А вносить это потом в релиз или нет - уже сам решит. Тебе понятие Pull Request знакомо??? А гитхабом или через приватную систему контроля версий - уже детали.
И что ты вообще там поддерживать собрался?
void SendRawPacket(...) или в худшем случае bool SendRawPacket(...) даже значения не возвращает по сути, так - "получилось/не получилось". Обернула нужные нам байты в сетевой пакет, послала серверу, забыла. /facepalm
Были б сорцы в гитхабе - даже постить тут бы не стал, молча сделал бы все что надо, форкнул бы свой стелс и радовался. А вместе со мной - все те, кому это пришлось бы по душе. Так что оставь такие советы себе.
И ты б фантазию поумерил. Так скоро миллионы форкнутых стелсов поддерживать захочешь. Сам проблему придумал, сам ужаснулся, и наводишь панику тут. Я чуть было сам не запаниковал. Но потом вспомнил про "git merge" и успокоился.

Не знаешь как это реализовать в текущем билде - просто промолчи, ответит кто знает или будет видно, что никто не знает.

PS Многие проекты от перехода в OpenSource выигрывали, так что это и правда могло быть проще. Но тут не мне и не тебе решать, а владельцу кода, так что бессмысленно это даже обсуждать.
drabadan
Expert
Expert
Posts: 730
Joined: 13.12.2012 17:35
Contact:

Re: Заявка на новые возможности, либо на исправление старых

Post by drabadan »

Quleebeen wrote:
drabadan wrote: так напиши свой стелс, делов то...
Как поддержитьва "тысячу кастомных" стелсов?
Не проще тогда просить девелоперов выложить на гитхаб в паблик исходники стелса.
Ты серьезно? Ты вообще вчитывался в мое сообщение?
Спасибо за совет "по существу". Прям как я просил.
"Написать собсный клиент" на любою проблему - это "пять"! Code reuse? Нет, не слышал.
Ради одного небольшого, но универсального дополнения функционала - писать с нуля решение. Прелесно.
Я точно темой не ошибся? Тут feature request topic или где?
Покажи мне, где я говорил о "выложить, паблик, кастомных"???
Я всего лишь предложил свою помощь в реализации, потому что прекрасно понимаю что у человека может просто не быть свободного времени. А вносить это потом в релиз или нет - уже сам решит. Тебе понятие Pull Request знакомо??? А гитхабом или через приватную систему контроля версий - уже детали.
И что ты вообще там поддерживать собрался?
void SendRawPacket(...) или в худшем случае bool SendRawPacket(...) даже значения не возвращает по сути, так - "получилось/не получилось". Обернула нужные нам байты в сетевой пакет, послала серверу, забыла. /facepalm
Были б сорцы в гитхабе - даже постить тут бы не стал, молча сделал бы все что надо, форкнул бы свой стелс и радовался. А вместе со мной - все те, кому это пришлось бы по душе. Так что оставь такие советы себе.
И ты б фантазию поумерил. Так скоро миллионы форкнутых стелсов поддерживать захочешь. Сам проблему придумал, сам ужаснулся, и наводишь панику тут. Я чуть было сам не запаниковал. Но потом вспомнил про "git merge" и успокоился.

Не знаешь как это реализовать в текущем билде - просто промолчи, ответит кто знает или будет видно, что никто не знает.

PS Многие проекты от перехода в OpenSource выигрывали, так что это и правда могло быть проще. Но тут не мне и не тебе решать, а владельцу кода, так что бессмысленно это даже обсуждать.
про кастомные и правда не вчитывался! ;)
По существу - очень узкий круг людей смогут этим пользоваться. В шарпах\дельфах там еще можно будет, что то "на лету" цеплять, но и то.
На сколько мне известно, не так в стелсе все просто устроено с объектами, изменение чего то в raw виде может много всяких неприятных вещей с памятью сделать, отсюда "трудноувловимые" баги. Хотя решать не мне, авось захотят по"баться.

А на том шарде все работает кроме 1 функции? Может проблема не в пакетах а енкрипт етих пакетов?
Quleebeen
Posts: 7
Joined: 16.11.2016 14:55

Re: Заявка на новые возможности, либо на исправление старых

Post by Quleebeen »

drabadan wrote: А на том шарде все работает кроме 1 функции? Может проблема не в пакетах а енкрипт етих пакетов?
Да криптования там вообще нет, снято. Дело точно не в этом.
Похоже на личностное своеобразие сервера.
Со стандартными контейнерами перемещения ок, а вот зарядить рунбуку бросив в нее предмет через MoveItem уже не получается. Предмет вообще исчезает в неведомом направлении :D
Раньше работало, после изменений на сервере - перестало. Хотел обойти это тупо подделав пакет.
Если еще есть варианты зарядить рунбуку скроллами - велкам, любой совет приветствуется.
А то я уже все перебрал... Ну кроме отсылки пакетов. :)

PS Да понятно что подобная функция только для продвинутых, на свой страх и риск. Но я бы рискнул ;)
drabadan
Expert
Expert
Posts: 730
Joined: 13.12.2012 17:35
Contact:

Re: Заявка на новые возможности, либо на исправление старых

Post by drabadan »

Quleebeen wrote:
drabadan wrote: А на том шарде все работает кроме 1 функции? Может проблема не в пакетах а енкрипт етих пакетов?
Да криптования там вообще нет, снято. Дело точно не в этом.
Похоже на личностное своеобразие сервера.
Со стандартными контейнерами перемещения ок, а вот зарядить рунбуку бросив в нее предмет через MoveItem уже не получается. Предмет вообще исчезает в неведомом направлении :D
Раньше работало, после изменений на сервере - перестало. Хотел обойти это тупо подделав пакет.
Если еще есть варианты зарядить рунбуку скроллами - велкам, любой совет приветствуется.
А то я уже все перебрал... Ну кроме отсылки пакетов. :)

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
покажи пакет в хекс виде...
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Re: Заявка на новые возможности, либо на исправление старых

Post by Vizit0r »

Quleebeen wrote: Со стандартными контейнерами перемещения ок, а вот зарядить рунбуку бросив в нее предмет через MoveItem уже не получается. Предмет вообще исчезает в неведомом направлении :D
Раньше работало, после изменений на сервере - перестало. Хотел обойти это тупо подделав пакет.
а ты возьми и тупо скажи мне какой "правильный" пакет шлет клиент, и как "криво" шлет стелс.
Вангую что все это решается выставлением правильных параметров.
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
Quleebeen
Posts: 7
Joined: 16.11.2016 14:55

Re: Заявка на новые возможности, либо на исправление старых

Post by Quleebeen »

Начнем с того, что ранее скрипт работал идеально через:
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
Vizit0r wrote: а ты возьми и тупо скажи мне какой "правильный" пакет шлет клиент, и как "криво" шлет стелс.
Вангую что все это решается выставлением правильных параметров.
Вот эти ребята (пакеты от клиента UO):

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]
[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 и советовал. 8) Проверяем!

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]
WTF?
Прелесно! Он решил что он умнее, и координаты 00 2F 00 4C 00 00 будут гораздо лучше.
Ок.
И как мне тогда передать координаты FFFF FFFF 0000 ?! Вангователь, ты нужен нам как никогда! Выручай! :D
Как видно в процитированном коде я пробовал это сделать и через -1, и через 0xFFFF, и просто числом десятичным. Вероятно "защита от дурака" в функции не дает кидать в "отрицательные координаты" - хз, не видел кода...

И чтобы все это выяснить я должен угробить ппц сколько времени и труда на отладку... Вы серьезно?!
И на каждый чих очередного пиратского шарда мне вновь дебажить обмен пакетами под микроскопом? :x
Данунах! Берем нужный кусок трафика от клиента, copy/paste - послать в RAW виде серверу. Готово. Следующий!

Ребят, я конечно понимаю, что можно отреверсить бинарник стелса, пропатчить то место и наслаждатся. Я и это могу. Или нагородить бутерброд и встрясть между клиентом и сервером тем же Wicked Patcher'ом. Можно и двигатель автомобиля через выхлопную трубу перебирать, и микроскопами гвозди заколачивать...
Image

Всегда есть решения.
Иногда монструозные и извращенные, но найти можно...

Но время! Время жалко!
Вот для проверки гипотез, отладки и хотфиксов я бы и хотел инструмент, которым это могло бы быть осуществимо. Помните Wicked Patcher (WP PPC) by Sauron для ЛА2 (и не только)? Мощнейшая штука.
Позволяет реализовать практически что угодно. Быстро и эффективно. И универсально. И не надо ждать обновлений с исправленой ошибкой. И удобнее диагностировать сравнительными тестами, чем искать на какое множество функций как отображаются на множество пакетов протокола, насколько точно они реализованы и подбирать параметры.
Почему бы не перенять немного "хороших практик" от коллег? Годами проверенное решение, кстати. Что останавливает? И этим покроете все отклонения от официального для множества всех кастомных серверов этим добавлением без постоянного обновления версий попутно.
Ведь иначе - тонна кропотливой и не нужной работы ради того, что я бы мог сделать за считаные минуты. Не по людски :(
Давайте дружить, а? 8) Сделаем жизнь всем еще немножечко удобнее.

PS Я конечно понимаю, что основной поток "скриптеров" и обычные функции криво пользовать умудряется. Так зачем же обламывать тех, кто понимает, что делает?
Пусть будет. На свой страх и риск (с). Без поддержки. Без документации (лишь упомянуть что такое есть в Release note). Но будет.
Кто разберется - тому и флаг в руки. Остальные - на стандартных функциях могут оставаться, обратная совместимость скриптов не порушиться.
К тому же, делов то - чуть. Вся необходимая обвязка как формировать пакет у вас уже сделана, лишь тело пакета обернуть надо.
А многим крови, нервов и времени сэкономит вагоны.
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Re: Заявка на новые возможности, либо на исправление старых

Post by Vizit0r »

да, косяк был в стелсе.
покопался в ирисе, покопался в офиц. клиенте - нашел еще один способ детектить контейнер, вписал его. Теперь все правильно дропает.
Если вопрос только в этом - пиши в скайп\асю\ПМ - скину новую версию.

Отправлять свои пакеты возможности не будет. тчк.
Я в курсе, что есть варианты инжекта\подмены и т.д. Некоторые из них я и сам использую с клиентом. Если сильно хочется - вперед, кто ж тебе запретит.
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
Post Reply