Здравствуйте, гость ( Вход | Регистрация )

2 страниц V  1 2 >  
Ответить в эту темуОткрыть новую тему
> Баг с трупами
Aimed
сообщение 21.5.2015, 2:02
Сообщение #1


*********

Grandmaster
Сообщений: 2.250
Регистрация: 29.12.2012
Группа: Пользователи
Наличность: 8676
Пользователь №: 15.607



Когда имеется одетый труп гуманоида со шмотками и вы убегаете за экран, а потом прибегаете обратно - труп всегда голый, пока его не дабл кликнешь.

Кто-нибудь знает в чем дело?

(IMG:style_emoticons/default/biggrin.gif)

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

Давай Сотерик, я в тебя верю.

1й вопрос тест, его нашёл и решил. Просто интересно что вы на это скажите (IMG:style_emoticons/default/smile.gif) Нашёл когда пытался сделать вопрос номер 2.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
StaticZ
сообщение 21.5.2015, 11:49
Сообщение #2


*********

Разработчик проекта "Квинтэссенция"
Сообщений: 2.155
Регистрация: 15.6.2009
Группа: Пользователи
Наличность: 0
Из: РФ, Москва
Пользователь №: 11.948



Цитата(Aimed @ 21.5.2015, 2:02) *

Когда имеется одетый труп гуманоида со шмотками и вы убегаете за экран, а потом прибегаете обратно - труп всегда голый, пока его не дабл кликнешь.

Кто-нибудь знает в чем дело?

Скорее всего дело в том что по тем или иным причинам не отсылается или не коректно отсылается экипировка, а чем это вызвано тут уже надо в дебагаре ковыряться... Вообще что в ранке что в сфере очень много косяков в сетевом протоколе - к примеру дублирующиеся пакеты, отсылка инфы об эквипе до информации о мобайле (маразм усиливается тем что там помимо прочего шлется сериал предка, а клиент естественного информации о таком сериале еще не получал), а работает это по той причине что это же отсылается второй раз после отправки информации о мобайле. При логине вся эта каша к примеру шлется раза 3-4. При дабл клике идет "пересбор" анимаций и гампов, так что в принципе можно обойтись не очень красивым решением - принудительно заставить клиент сделать это.



Цитата(Aimed @ 21.5.2015, 2:02) *
Вопрос номер 2.
Как сделать что бы труп гуманоида был одет, а шмоток в трупе не было и их нельзя было вытащить инжектом.

Давай Сотерик, я в тебя верю.

1й вопрос тест, его нашёл и решил. Просто интересно что вы на это скажите (IMG:style_emoticons/default/smile.gif) Нашёл когда пытался сделать вопрос номер 2.
С ходу в голову приходят три решения:
1) Через фейковые предметы к примеру (невидимые тайлы), с запретом перемещения. Даже если инжект будет собирать их по сериалам, сервер будет отклонять все запросы на попытки их перемещения, ну а поскольку они невидимы визуально будет выглядеть как-будто ничего и нет.
2) Использование фейкового трупа, вместо реального трупа помещаем просто "маникен" - смотрите принцип работы статуй, поменяйте анимацию и получите трупы без бекапа, при желании можно отлавить дабл клик и открыть фековый бекап трупа без экипировки.
3) В принципе возможно просто запретить открытие бекапа, возможно даже проканает тупо его удаление у трупа.

Сообщение отредактировал StaticZ - 21.5.2015, 11:52


--------------------
RP сервер UO: Quintessence, а также ПО: EssenceUCS, EssenceUDK, CentrEd+, Fiddler+ и др.
Game isn't a dream, it is the reality, reality which is coming while we dream...
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Aimed
сообщение 21.5.2015, 13:00
Сообщение #3


*********

Grandmaster
Сообщений: 2.250
Регистрация: 29.12.2012
Группа: Пользователи
Наличность: 8676
Пользователь №: 15.607



У трупа нет бэкпака.

Вечером отвечу развернуто.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
StaticZ
сообщение 21.5.2015, 15:25
Сообщение #4


*********

Разработчик проекта "Квинтэссенция"
Сообщений: 2.155
Регистрация: 15.6.2009
Группа: Пользователи
Наличность: 0
Из: РФ, Москва
Пользователь №: 11.948



Цитата(Aimed @ 21.5.2015, 13:00) *

У трупа нет бэкпака.

Вечером отвечу развернуто.
Бекпак всмысле контейнер. У трупа он конечно другой, но должен быть, иначе его не возможно былобы лутать.


--------------------
RP сервер UO: Quintessence, а также ПО: EssenceUCS, EssenceUDK, CentrEd+, Fiddler+ и др.
Game isn't a dream, it is the reality, reality which is coming while we dream...
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Aimed
сообщение 21.5.2015, 20:59
Сообщение #5


*********

Grandmaster
Сообщений: 2.250
Регистрация: 29.12.2012
Группа: Пользователи
Наличность: 8676
Пользователь №: 15.607



Цитата(StaticZ @ 21.5.2015, 10:49) *

Скорее всего дело в том что по тем или иным причинам не отсылается или не коректно отсылается экипировка, а чем это вызвано тут уже надо в дебагаре ковыряться... Вообще что в ранке что в сфере очень много косяков в сетевом протоколе - к примеру дублирующиеся пакеты, отсылка инфы об эквипе до информации о мобайле (маразм усиливается тем что там помимо прочего шлется сериал предка, а клиент естественного информации о таком сериале еще не получал), а работает это по той причине что это же отсылается второй раз после отправки информации о мобайле. При логине вся эта каша к примеру шлется раза 3-4. При дабл клике идет "пересбор" анимаций и гампов, так что в принципе можно обойтись не очень красивым решением - принудительно заставить клиент сделать это.


Это всё и так известно (IMG:style_emoticons/default/smile.gif)


Цитата(StaticZ @ 21.5.2015, 10:49) *
С ходу в голову приходят три решения:
1) Через фейковые предметы к примеру (невидимые тайлы), с запретом перемещения. Даже если инжект будет собирать их по сериалам, сервер будет отклонять все запросы на попытки их перемещения, ну а поскольку они невидимы визуально будет выглядеть как-будто ничего и нет.
2) Использование фейкового трупа, вместо реального трупа помещаем просто "маникен" - смотрите принцип работы статуй, поменяйте анимацию и получите трупы без бекапа, при желании можно отлавить дабл клик и открыть фековый бекап трупа без экипировки.
3) В принципе возможно просто запретить открытие бекапа, возможно даже проканает тупо его удаление у трупа.


Так то и я всем могу помочь.
1)Невидимые тайлы будет видно в отображении количества предметов в трупе, не пойдет. + отображение одетых шмоток на трупе не будет работать, как только ты сменишь айдишники реальным вещам - всё заканчивается.
2)Как это сделать? Такой вариант не сработает. Я уже 3й вечер после работы в дебаге сижу, уже пакеты все разобрал, очереди для обновления айтемов в мире, как труп обновлять и нашли баг с CorpseContent пакетом. Он не работает как обычный 0x3C пакет ContainerContent6017. Нельзя просто сделать *одетый маникен* в УО. Каждая вещь на трупе, - это репрезентация реального айтема, который должен находится в этом конкретном трупе
3)Не пойдёт, в трупе может быть другой лут, как лут самого моба и его игроки могут лутать. Просто сам моб ещё одет в определенные шмотки, которые не должны попасть к игрокам, но должны быть видны на теле.
+ если удалить все шмотки Items( то что ты называешь *бекапом*) у трупа - их и на трупе видно не будет -))
Иногда всё-же лучше сначало самому залезть в дебаг, прежде чем советы давать. (IMG:style_emoticons/default/wink.gif)
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Aimed
сообщение 21.5.2015, 21:26
Сообщение #6


*********

Grandmaster
Сообщений: 2.250
Регистрация: 29.12.2012
Группа: Пользователи
Наличность: 8676
Пользователь №: 15.607



Soteric, надежда всё ещё есть (IMG:style_emoticons/default/smile.gif)

Кстати, я придумал решение этой проблемы.

Нужно сделать класс-наследник у трупа, у которого будут оверрайды на дабл клик, клик, опен и так далее.

Этот оверрайд будет открывать игроку другую сумку/показывать количество ЕЁ предметов как кол-во предметов трупа, что хранится в трупе. А у самой сумки просто гамп трупа прописать и лут моба, - имеем одетых трупов. (IMG:style_emoticons/default/smile.gif)

В классе самого трупа нужно сделать метод-статику для создания этого трупа и через виртуальное свойство для делегата-создателя трупа в мобайле - сделать оверрайд этого свойства у нужных мобайлов(т.е. те у которых будут одетые трупы).


Но баг с CorpseContent всё ещё в силе. Кто сможет обьяснить почему он из-за EquipItems нормально не работает, в то время как ContainerContent6017 используя Items - работает, - тот нереально крут (IMG:style_emoticons/default/smile.gif)
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
StaticZ
сообщение 21.5.2015, 22:31
Сообщение #7


*********

Разработчик проекта "Квинтэссенция"
Сообщений: 2.155
Регистрация: 15.6.2009
Группа: Пользователи
Наличность: 0
Из: РФ, Москва
Пользователь №: 11.948



Цитата(Aimed @ 21.5.2015, 20:59) *
1)Невидимые тайлы будет видно в отображении количества предметов в трупе, не пойдет. + отображение одетых шмоток на трупе не будет работать, как только ты сменишь айдишники реальным вещам - всё заканчивается.
Тайлдату надо править, чтобы у таких шмототок анимация была.



Цитата(Aimed @ 21.5.2015, 20:59) *
2)Как это сделать? Такой вариант не сработает. Я уже 3й вечер после работы в дебаге сижу, уже пакеты все разобрал, очереди для обновления айтемов в мире, как труп обновлять и нашли баг с CorpseContent пакетом. Он не работает как обычный 0x3C пакет ContainerContent6017. Нельзя просто сделать *одетый маникен* в УО. Каждая вещь на трупе, - это репрезентация реального айтема, который должен находится в этом конкретном трупе
Вы смотрите не трупы а статуи. Если конкретнее то пакет BF.19.05.FF. В ранке есть рабочий пример.




Цитата(Aimed @ 21.5.2015, 20:59) *
3)Не пойдёт, в трупе может быть другой лут, как лут самого моба и его игроки могут лутать. Просто сам моб ещё одет в определенные шмотки, которые не должны попасть к игрокам, но должны быть видны на теле.
+ если удалить все шмотки Items( то что ты называешь *бекапом*) у трупа - их и на трупе видно не будет -))
Иногда всё-же лучше сначало самому залезть в дебаг, прежде чем советы давать. (IMG:style_emoticons/default/wink.gif)
Все зависит от того как удалять. Если вы тупо удалите, то да ранка сама их уберет. Тут нужно обойти стандартную логику ранки, чтобы их не было в бекапе но при этом что бы сервак их отсылал как эквип анимации.



PS Можно также делать два разных трупа - один отсылать другим игрокам а другой владельцу. В случае проблем может помочь с любым вариантом.



Цитата(Aimed @ 21.5.2015, 20:59) *
Иногда всё-же лучше сначало самому залезть в дебаг, прежде чем советы давать. (IMG:style_emoticons/default/wink.gif)
Советы это не готовые решения их цель - помощь в определении в какую сторону копать. К тому же я без понятия как работает инжект.

Цитата(Aimed @ 21.5.2015, 21:26) *
Каждая вещь на трупе, - это репрезентация реального айтема, который должен находится в этом конкретном трупе
На самом деле не так, айтемы одетые на чаре хранятся в клиенте в специальной области памяти в классе мобайла. При этом где эти сами айтемы роли не играет, но поскольку идентификация идет по сериалу, они конечно должны быть переданы сервером клиенту. Вообщем это не пустой треп - сам какраз сейчас с этим ковыряюсь и мне спокойно удалось одеть лежащий на полу предмет (конечно путем хака клиента)...



Цитата(Aimed @ 21.5.2015, 21:26) *
Но баг с CorpseContent всё ещё в силе. Кто сможет обьяснить почему он из-за EquipItems нормально не работает, в то время как ContainerContent6017 используя Items - работает, - тот нереально крут smile.gif


Скорее потому что так работает клиент )) В принципе это здраво - эквип у трупа никто не будет менять, а при смерти наверное летит этот пакет (ContainerContent6017).. Вообщем сильно не заморачивайтесь - клиент писали вредные разрабы для себя, поэтому о нас никто не думал и на всякие извращения никто не рассчитывал.


--------------------
RP сервер UO: Quintessence, а также ПО: EssenceUCS, EssenceUDK, CentrEd+, Fiddler+ и др.
Game isn't a dream, it is the reality, reality which is coming while we dream...
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Aimed
сообщение 21.5.2015, 22:36
Сообщение #8


*********

Grandmaster
Сообщений: 2.250
Регистрация: 29.12.2012
Группа: Пользователи
Наличность: 8676
Пользователь №: 15.607



Цитата(StaticZ @ 21.5.2015, 21:31) *

Скорее потому что так работает клиент )) В принципе это здраво - эквип у трупа никто не будет менять, а при смерти наверное летит этот пакет (ContainerContent6017).. Вообщем сильно не заморачивайтесь - клиент писали вредные разрабы для себя, поэтому о нас никто не думал и на всякие извращения никто не рассчитывал.



Прикол тут в том, что на сфере этого бага нету, а пакеты посылаются теже самые (IMG:style_emoticons/default/dry.gif)

Я не знаю как понимать про пакет *BF.19.05.FF*, можешь пояснить?
Я про пакеты с таким значением ниразу не слышал.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
StaticZ
сообщение 21.5.2015, 22:43
Сообщение #9


*********

Разработчик проекта "Квинтэссенция"
Сообщений: 2.155
Регистрация: 15.6.2009
Группа: Пользователи
Наличность: 0
Из: РФ, Москва
Пользователь №: 11.948



Цитата(Aimed @ 21.5.2015, 22:36) *

Прикол тут в том, что на сфере этого бага нету, а пакеты посылаются теже самые (IMG:style_emoticons/default/dry.gif)

Я не знаю как понимать про пакет *BF.19.05.FF*, можешь пояснить?
Я про пакеты с таким значением ниразу не слышал.

Ну со стороны клиента нет разницы между сферой и ранкой, разница лишь в отсылаемых ими пакетах. Так что если на сфере работает то либо проглядели какое-то различие в пакетах (я имею в виду отсылаемых пакетов, т.е. надо через снифер проверять, а не тупо сравнивать описание пакетов в коде сферы и ранки) или проверяли на разных клиентах.

Цитата(Aimed @ 21.5.2015, 22:36) *
Я не знаю как понимать про пакет *BF.19.05.FF*, можешь пояснить?
Я про пакеты с таким значением ниразу не слышал.
Из гайда Вятта:

(IMG:http://pix.academ.org/img/2015/05/22/5f48141a07cd7dc9dde57670ab80f0f9.png)

Это все есть в ранке, смотрите как работают статуи, именно для этого он и юзается на оси (статуя - неподвижная анимация чара)


--------------------
RP сервер UO: Quintessence, а также ПО: EssenceUCS, EssenceUDK, CentrEd+, Fiddler+ и др.
Game isn't a dream, it is the reality, reality which is coming while we dream...
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Aimed
сообщение 21.5.2015, 22:49
Сообщение #10


*********

Grandmaster
Сообщений: 2.250
Регистрация: 29.12.2012
Группа: Пользователи
Наличность: 8676
Пользователь №: 15.607



Цитата(StaticZ @ 21.5.2015, 21:31) *

Тайлдату надо править, чтобы у таких шмототок анимация была.

Для меня это не вариант.



Цитата(StaticZ @ 21.5.2015, 21:31) *
На самом деле не так, айтемы одетые на чаре хранятся в клиенте в специальной области памяти в классе мобайла. При этом где эти сами айтемы роли не играет, но поскольку идентификация идет по сериалу, они конечно должны быть переданы сервером клиенту. Вообщем это не пустой треп - сам какраз сейчас с этим ковыряюсь и мне спокойно удалось одеть лежащий на полу предмет (конечно путем хака клиента)...


Когда BaseCreature мобайла убивают - его просто удаляет из мира.
В случае с трупом, труп каким-то образом получает анимацию убитого мобайла - как я пока так и не выяснил.

0xBF это такой общий пакет, в него много чего можно засунуть, я так понял.

Вот одна из(наверное 30 его имплементаций, как раз та что ты выложил)
Код
Subcommand: 0x19: Extended stats
BYTE[1] subsubcommand (0x2 for 2D client, 0x5 for KR client)
BYTE[4] serial
BYTE[1] unknown (always 0)
BYTE[1] Lock flags (0 = up, 1 = down, 2 = locked, FF = update mobile status animation ( KR only )

Lock flags = 00SSDDII ( in binary )
00 = up
01 = down
10 = locked

If(subsubcommand = 0x05 (KR))

If(Lock flags = 0xFF) //Update mobile status animation
BYTE[1] Status // Unveryfied if lock flags == FF the locks will be handled here
BYTE[1] unknown (0x00)
BYTE[1] Animation
BYTE[1] unknown (0x00)
BYTE[1] Frame
else
BYTE[1] unknown (0x00)
BYTE[4] unknown (0x00000000)
endif

endif


Всё инфо о пакете тут
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Aimed
сообщение 21.5.2015, 23:04
Сообщение #11


*********

Grandmaster
Сообщений: 2.250
Регистрация: 29.12.2012
Группа: Пользователи
Наличность: 8676
Пользователь №: 15.607



А ты не мог бы поясить про удаление? Как вот удалить шмотку так, что б обойти удаление ранУО и отослать её в пакет клиенту?
Я примерное похожее пробовал - сервер сам удалял такие вещи.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Aimed
сообщение 21.5.2015, 23:40
Сообщение #12


*********

Grandmaster
Сообщений: 2.250
Регистрация: 29.12.2012
Группа: Пользователи
Наличность: 8676
Пользователь №: 15.607



РанУОшный баг с голыми трупами пофиксил. Теперь трупы не становятся голыми, если заного зайти в зону апдейт ренжа.

Вот фикс:
Код
    public sealed class CorpseContent : Packet
    {
        public CorpseContent( Mobile beholder, Corpse beheld )
            : base( 0x3C )
        {
            List<Item> items = beheld.EquipItems;
            int count = items.Count;

            if( beheld.Hair != null && beheld.Hair.ItemID > 0 )
                count++;
            if( beheld.FacialHair != null && beheld.FacialHair.ItemID > 0 )
                count++;

            EnsureCapacity( 5 + (count * 20) );   //расширям пакет, вместо 19 делаем 20.

            long pos = m_Stream.Position;

            int written = 0;

            m_Stream.Write( (ushort)0 );

            for( int i = 0; i < items.Count; ++i )
            {
                Item child = items[i];

                if( !child.Deleted && child.Parent == beheld && beholder.CanSee( child ) )
                {
                    m_Stream.Write( (int)child.Serial );
                    m_Stream.Write( (ushort)child.ItemID );
                    m_Stream.Write( (byte)0 ); // signed, itemID offset
                    m_Stream.Write( (ushort)child.Amount );
                    m_Stream.Write( (short)child.X );
                    m_Stream.Write( (short)child.Y );
                    m_Stream.Write((byte)0); // Grid Location?  //добавление этой строки + расширение пакета сверху
                    m_Stream.Write( (int)beheld.Serial );
                    m_Stream.Write( (ushort)child.Hue );

                    ++written;
                }
            }

            if( beheld.Hair != null && beheld.Hair.ItemID > 0 )
            {
                m_Stream.Write( (int)HairInfo.FakeSerial( beheld.Owner ) - 2 );
                m_Stream.Write( (ushort)beheld.Hair.ItemID );
                m_Stream.Write( (byte)0 ); // signed, itemID offset
                m_Stream.Write( (ushort)1 );
                m_Stream.Write( (short)0 );
                m_Stream.Write( (short)0 );
                m_Stream.Write( (int)beheld.Serial );
                m_Stream.Write( (ushort)beheld.Hair.Hue );

                ++written;
            }

            if( beheld.FacialHair != null && beheld.FacialHair.ItemID > 0 )
            {
                m_Stream.Write( (int)FacialHairInfo.FakeSerial( beheld.Owner ) - 2 );
                m_Stream.Write( (ushort)beheld.FacialHair.ItemID );
                m_Stream.Write( (byte)0 ); // signed, itemID offset
                m_Stream.Write( (ushort)1 );
                m_Stream.Write( (short)0 );
                m_Stream.Write( (short)0 );
                m_Stream.Write( (int)beheld.Serial );
                m_Stream.Write( (ushort)beheld.FacialHair.Hue );

                ++written;
            }

            m_Stream.Seek( pos, SeekOrigin.Begin );
            m_Stream.Write( (ushort)written );
        }
    }


Сниффером сферовские пакеты смотрел, обнаружил что у каждого айтема посылается Grid, причем со значением, а не просто 0.
Прописал для пакета труп контента что-бы Grid cо значением 0 отсылался, как и у ContainerContent пакетов - проблема решилась.

Хотя интересно узнать что там за значения сфера шлёт и что они означают...
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
StaticZ
сообщение 22.5.2015, 0:06
Сообщение #13


*********

Разработчик проекта "Квинтэссенция"
Сообщений: 2.155
Регистрация: 15.6.2009
Группа: Пользователи
Наличность: 0
Из: РФ, Москва
Пользователь №: 11.948



Цитата(Aimed @ 21.5.2015, 22:49) *
Когда BaseCreature мобайла убивают - его просто удаляет из мира.
В случае с трупом, труп каким-то образом получает анимацию убитого мобайла - как я пока так и не выяснил.
Хмм а вообще да, сериал то надо отдать живому игроку... В принципе самое простое решение было бы - создание фейкового мобайла, но может разрабы поступили по другому. Честно говоря никогда трупами не интересовался... Гм..



Цитата(Aimed @ 21.5.2015, 22:49) *
0xBF это такой общий пакет, в него много чего можно засунуть, я так понял.
Угу, изначально в протоколе на ID пакета отводился всего 1 байт, естественно со временем этого стало не хватать, вот и ввели расширение протокола - пакет 0xBF является контейнером для других пакетов, то есть там дальше идет внутренний ID иногда несколько.




Цитата(Aimed @ 21.5.2015, 22:49) *

Я больше доверяю трудам Вятта. А вообще их там много:
Код

Client:
BF.05 - Screen Size
BF.06.01 - Party Add Member
BF.06.02 - Party Remove Member
BF.06.04 - Party Chat
BF.06.06 - Party Set Can Loot
BF.06.08 - Party Accept Invitation
BF.06.09 - Party Decline Invitation
BF.07 - Quest Arrow
BF.09 - Disarm Request
BF.0A - Stun Request
BF.0B - Client Language
BF.0C - Close Status
BF.0E - Animate
BF.0F - Client Info
BF.10 - Query Properties
BF.13 - Context Menu Request
BF.15 - Context Menu Request
BF.1A - Stat Lock Change
BF.1C - Cast Spell
BF.1E - Query Design Details
BF.2A - Change Race Request
BF.2C - Use Targeted Item
BF.2D - Cast Targeted Spell
BF.2E - Use Targeted Skill
BF.30 - UO3D Target By Resource Macro
BF.32 - Toggle Gargoyle Flying
BF.33 - Wheel Boat Moving

Server:
BF.01 - Fast Walk
BF.02 - Add Walk Key
BF.04 - Close Gump
BF.06.01 - Party Display Members List
BF.06.02 - Party Remove Member
BF.06.04 - Party Chat
BF.06.07 - Party Invitation
BF.08 - Map Change
BF.10 - Display Equipment Info
BF.14.02 - Display Context Menu
BF.16 - Close User Interface Window
BF.17 - Display Help Topic
BF.18 - Map Patches
BF.19 - Miscellaneous status
BF.19.02 - Stat Lock Info
BF.19.05 - UO3D Stat Lock Info
BF.19.05.FF - Update Mobile Status Animation
BF.19.05.FF - New Bonded Status
BF.1B - Spellbook Content
BF.1D - Design House
BF.20 - House Customization
BF.20.01 - Update House Customization
BF.20.04 - Begin House Customization
BF.20.05 - End House Customization
BF.21 - Clear Weapon Ability
BF.25 - Toggle Special Moves
BF.26 - Movement Speed Mode
BF.2A - Change Race Response
BF.2B - Set Mobile Animation
BF.31 - UO3D Start Hotbar Slot Timer

Both:
BF - Extended Command
BF.06 - Party
BF.06.03 - Party Private Message
BF.10 - OPL Info
BF.14.01 - Display Context Menu (Old version)
BF.19.00 - Bonded status
BF.22 - Damage Packet
BF.2F - KR House Menu Response

Unknown:
BF.24 - Unknown
BF.27 - Unknown




Цитата(Aimed @ 21.5.2015, 22:49) *
А ты не мог бы поясить про удаление? Как вот удалить шмотку так, что б обойти удаление ранУО и отослать её в пакет клиенту?
Я примерное похожее пробовал - сервер сам удалял такие вещи.
Ну тут нужно глубоко влезать в работу сервера надо. Обычными высокоуровневыми методами это не сделаешь (хотя помоему свойство Invisible какраз и делает нечто подобное). Сам принцип вообщем-то прост получаем NetState клиента и дальше можем вручную отсылать любые пакеты, но тут конечно надо понимать что отсылаешь и быть готовым к потенциальным конфликтам, ибо нет никаких гарантий что клиент не крашнет при отправке к примеру пакета на удаление уже удаленного предмета (2й пакет ранка отошлет автоматически при удалении объекта физически), ну а поскольку многие пакеты отсылаются в результате запросов клиента, то может потребоваться перегружать хендлеры пакетов или модифицировать код сервера. В целом я бы так и делал - сделал какоето свое свойство в Server.Item и дальше к примеру при отсылке еквипа просто сделалбы проверку в стиле
Код
if (Parent == null || Parent.Parent != from) return;
Ну тут опять же ковыряться надо, смотреть, как и че так сходу не скажу. Наверное нужно будет в событии OnDeath() добавить линк предметам на хозяина трупа, при перемещении подчистить его. Наверное по ходу всплывет еще чтонибудь.

Цитата(Aimed @ 21.5.2015, 23:40) *
Сниффером сферовские пакеты смотрел, обнаружил что у каждого айтема посылается Grid, причем со значением, а не просто 0.
Прописал для пакета труп контента что-бы Grid cо значением 0 отсылался, как и у ContainerContent пакетов - проблема решилась.

Хотя интересно узнать что там за значения сфера шлёт и что они означают...

Ну вот наверное и проблема - ошибка в протоколе. Что касается Grid точно не знаю, но есть подозрение что это номер ячейки для енчант клиентов (там же можно делать инвентарь по ячейкам). Возможно также связанно както с индексами спелов (вроде этот же пакет для них юзается).

Кстати нашел еще пакет? вроде чето связанное какраз с анимацией трупов:

(IMG:http://pix.academ.org/img/2015/05/22/137b1ff0a6a3192f307d5fe89ef8cd3c.png)


--------------------
RP сервер UO: Quintessence, а также ПО: EssenceUCS, EssenceUDK, CentrEd+, Fiddler+ и др.
Game isn't a dream, it is the reality, reality which is coming while we dream...
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Aimed
сообщение 22.5.2015, 0:14
Сообщение #14


*********

Grandmaster
Сообщений: 2.250
Регистрация: 29.12.2012
Группа: Пользователи
Наличность: 8676
Пользователь №: 15.607



0x89 посылается сразу после 0x3C CorpseContent в оверрайде метода
Код
public override void SendInfoTo( NetState state, bool sendOplPacket )        
в классе трупа.
Для 0x3C - CorpseContent я выложил фикс сверху.

А для решения задачи с одетыми трупами, я, наверное, всё-таки попробую своё решение классом-наследником у трупа, у которого все доступы к контенту трупа оверрайдятся и перенапрявляются на сумку из трупа с гампом трупа (IMG:style_emoticons/default/biggrin.gif) . Оно более простое и не требует сильной заморочки в низкоуровневом коде (IMG:style_emoticons/default/smile.gif)
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Juzzver
сообщение 22.5.2015, 0:16
Сообщение #15


**********

Модератор RunUO
Сообщений: 3.425
Регистрация: 1.11.2008
Группа: Супермодераторы
Наличность: 22567
Из: Северная Корея
Пользователь №: 11.273



В свежих версиях ранки так раз реализовано то, что ты сделал, включая Grid Lines(что видимо и является тем расширением пакета)
public sealed class CorpseContent6017 : Packet
https://github.com/runuo/runuo/blob/master/...pses/Packets.cs

Ну и если я правильно понял, то клиенты начиная с 6.0.1.7+ версии должны правильно все это дело обрабатывать.


--------------------
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Aimed
сообщение 22.5.2015, 0:25
Сообщение #16


*********

Grandmaster
Сообщений: 2.250
Регистрация: 29.12.2012
Группа: Пользователи
Наличность: 8676
Пользователь №: 15.607



Цитата(Juzzver @ 21.5.2015, 23:16) *

В свежих версиях ранки так раз реализовано то, что ты сделал, включая Grid Lines(что видимо и является тем расширением пакета)
public sealed class CorpseContent6017 : Packet
https://github.com/runuo/runuo/blob/master/...pses/Packets.cs

Ну и если я правильно понял, то клиенты начиная с 6.0.1.7+ версии должны правильно все это дело обрабатывать.


А это из какой версии?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Juzzver
сообщение 22.5.2015, 0:29
Сообщение #17


**********

Модератор RunUO
Сообщений: 3.425
Регистрация: 1.11.2008
Группа: Супермодераторы
Наличность: 22567
Из: Северная Корея
Пользователь №: 11.273



Цитата
У меня 2.2 ранка, а это из какой версии?

из неофициальной 2.5 версии.
В официальных ревизиях ранки это дополнение так же присутствует:
http://runuo.googlecode.com/svn/devel/Scri...pses/Packets.cs


--------------------
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Aimed
сообщение 22.5.2015, 0:34
Сообщение #18


*********

Grandmaster
Сообщений: 2.250
Регистрация: 29.12.2012
Группа: Пользователи
Наличность: 8676
Пользователь №: 15.607



(IMG:style_emoticons/default/dry.gif)
Часов 5 точно потратил...
А оно, наверное, уже с релиза 2.3 было пофикшено (IMG:style_emoticons/default/biggrin.gif)
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Juzzver
сообщение 22.5.2015, 0:59
Сообщение #19


**********

Модератор RunUO
Сообщений: 3.425
Регистрация: 1.11.2008
Группа: Супермодераторы
Наличность: 22567
Из: Северная Корея
Пользователь №: 11.273



Цитата
А оно, наверное, уже с релиза 2.3 было пофикшено biggrin.gif

Верно, где-то так (в 2013м году) (IMG:style_emoticons/default/smile.gif)

Есть подозрения, что вы использовали клиенты выше 6ки, где присутствовали грид клетки, в связи с чем передавали неверную последовательность пакетных значений, тобишь там где ожидалась грид клетка - там передавался серийник, а дальше уже все по наклоной херилось.

К слову о предложенных костылях выше с подменой вещей или трупов. Возможно было бы уместнее просто заново отсылать пакет по возвращению персонажа в зону трупа?
Цитата
state.Send(new CorpseEquip(state.Mobile, this));


Сообщение отредактировал Juzzver - 22.5.2015, 1:00


--------------------
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Aimed
сообщение 22.5.2015, 1:11
Сообщение #20


*********

Grandmaster
Сообщений: 2.250
Регистрация: 29.12.2012
Группа: Пользователи
Наличность: 8676
Пользователь №: 15.607



Цитата(Juzzver @ 21.5.2015, 23:59) *

Есть подозрения, что вы использовали клиенты выше 6ки, где присутствовали грид клетки, в связи с чем передавали неверную последовательность пакетных значений, тобишь там где ожидалась грид клетка - там передавался серийник, а дальше уже все по наклоной херилось.

Разумеется, а именно 6.0.14.3 клиент.

Цитата(Juzzver @ 21.5.2015, 23:59) *
К слову о предложенных костылях выше с подменой вещей или трупов. Возможно было бы уместнее просто заново отсылать пакет по возвращению персонажа в зону трупа?


Там так просто наврятли получится. Да и если получится, в любом случае надо новый класс для трупов создавать, что-бы оверрайдить текущее обновление при приближении и ещё оверрайд для виртуального делегата-создателя трупа делать уже в самом мобайле, как и сам метод создания трупа для этого делегата.

Завтра займусь, как сделаю - выложу.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

2 страниц V  1 2 >
Ответить в эту темуОткрыть новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия | Версия для КПК Сейчас: 28.4.2024, 2:09
Designed by Nickostyle