Просмотр полной версии : В каких случаях сервер шлет пакет 03=CharInfo?
glukmaker
05.03.2013, 01:33
То что этот пакет посылается при появлении персонажа в зоне видимости наблюдателя - это понятно. Но ведь это не единственное условие.
Эксперименты показывают что данный пакет может посылаться много раз.
И еще: Если персонаж начал перемещение из одной точки в другую то сервер присылает нам пакет 01=MoveToLocation, как я понял текущее местоположение чара после начала движения и до его окончания для отображения в клиете вычисляются самим клиентом на основании данных про скорость персонажа.
А что будет если в процессе перемещения скорость персонажа изменилась? (например был наложен баф или вышло время бафа)
Как оповещает сервер клиента про данное событие:
- присылает пакет о смене некоторых параметров объекта (0E=StatusUpdate)
- присылает пакет 03=CharInfo
- присылает оба этих пакета
- прочий вариант
?
Zergatul
05.03.2013, 03:20
2 пакета обычно шлет. Сервера то не очень оптимизированы по вопросам трафика, так что шлют все подряд, не разбираясь.
glukmaker
05.03.2013, 15:33
2 пакета обычно шлет. Сервера то не очень оптимизированы по вопросам трафика, так что шлют все подряд, не разбираясь.
Собственно хочу написать програмку, которая бы визуально отображала расположение игроков и мобов, в пределах видимости отдельного перса.
Пока использую пакеты
16=NpcInfo
03=CharInfo
для добавления или модификации данных в массиве
01=MoveToLocation
для отслеживания их перемещения
12=DeleteObject
для удаления данных из массива.
По таймеру 20 раз в секунду отрисовываю данные из масива на TBitmap, посте чего копикую содержимое битмапа на TImage
Получается пока что-то типа показанного на скриншоте
Но движения персов хочу сделать плавными, а в MoveToLocation передаются только начальные и конечные координаты.
Планирую записывать время когда поступил пакет и потом на основании скорости объекта каждый раз при отрисовке вычислять новые координаты
(если известны начальная и конечная координаты, время прихода пакета, время, когда происходит оотрисовка очередного кадра, скорость объекта то можно вычислить и координаты объекта в моментотрисовки кадра).
Но в процессе движения скорость может поменяться... вот это мне нужно учесть, потому и спросил..
ну и еще вопрос: что еще нужно учитывать при определении координат объекта? пакет MoveToPawn - нужно обрабатывать? И какие есть еще пакеты необходимые для того, чтобы правильно отрисовать картину?
glukmaker
05.03.2013, 20:29
Еще возникла проблема с пакетом 03=CharInfo
Нужно взять оттуда скорость персонажа, но никак не могу найти ее.
В файле packetsc4.ini есть такая информация:
03=CharInfo:d(X)d(Y)d(Z)d(Heading)d(ObjectID)s(Nam e)d(Race)d(Sex)d(ClassID:Get.ClassID)d(DHair)d(Hea d:Get.Func01)d(RHand:Get.Func01)d(LHand:Get.Func01 )d(Gloves:Get.Func01)d(Chest:Get.Func01)d(Legs:Get .Func01)d(Feet:Get.Func01)d(Back:Get.Func01)d(LRHa nd:Get.Func01)d(Hair:Get.Func01)d(PvpFlag)d(Karma) d(MSpeed)d(PSpeed)d(PvpFlag)d(Karma)d(runSpd)d(wal kSpd)d(swimRSpd)d(swimWSpd)d(flRunSpd)d(flWalkSpd) d(flyRSpd)d(flyWSpd)f(SpdMul)f(ASpdMul)f(collisRad ius)f(collisHeight)d(HairStyle)d(HairColor)d(Face) s(Title)d(clanID)d(clanCrest)d(allyID)d(allyCrest) d(siegeFlag)c(isStand)c(isRun)c(isInFight)c(isAlik eDead)c(Invis)c(Mount)c(shop)h(cubics:For.0001)h(c ubID)c(findparty)d(abnEffects)c(RecomLeft)h(RecomH ave)d(classID:Get.ClassID)d(maxCP)d(curCP)c(isMoun ted)c(Team)d(clanBigCrestId)c(isNoble)c(isHero)c(i sFishing)d(fishX)d(fishY)d(fishZ)d(NameColor:Get.F Col)c(isRun)d(d)d(PItem)d(PledgeClass)d(?PledgeCol or:Get.FCol)d(TitleColor:Get.FCol)d(Cursed)
вот пакет от персонажа без бафа:
0B 01 03 EF BE FE FF 75 21 02 00 48 F4 FF FF 00 | . . . п ѕ ю . u ! . . H ф . . .
00 00 00 28 2D 70 4C 4E 00 69 00 6F 00 62 00 65 | . . . ( - p L N . i . o . b . e
00 00 00 02 00 00 00 01 00 00 00 2B 00 00 00 00 | . . . . . . . . . . . + . . . .
00 00 00 6E 09 00 00 00 00 00 00 BE 09 00 00 96 | . . . n . . . . . . . ѕ . . . –
09 00 00 B7 01 00 00 D7 01 00 00 7B 09 00 00 00 | . . . · . . . Ч . . . { . . . .
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | . . . . . . . . . . . . . . . .
00 00 00 85 01 00 00 35 01 00 00 00 00 00 00 00 | . . . … . . . 5 . . . . . . . .
00 00 00 7A 00 00 00 55 00 00 00 32 00 00 00 32 | . . . z . . . U . . . 2 . . . 2
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | . . . . . . . . . . . . . . . .
00 00 00 7B 14 AE 47 E1 7A F0 3F 5C 20 41 F1 63 | . . . { . ® G б z р ? \ A с c
CC F1 3F 00 00 00 00 00 00 1C 40 00 00 00 00 00 | М с ? . . . . . . . @ . . . . .
80 37 40 01 00 00 00 01 00 00 00 00 00 00 00 00 | Ђ 7 @ . . . . . . . . . . . . .
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | . . . . . . . . . . . . . . . .
00 00 00 00 00 01 01 00 00 01 00 00 00 00 00 00 | . . . . . . . . . . . . . . . .
00 00 00 00 00 00 00 00 00 00 2B 00 00 00 00 00 | . . . . . . . . . . + . . . . .
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | . . . . . . . . . . . . . . . .
00 00 00 00 00 00 00 FF FF FF 00 | . . . . . . . . . . .
а вот пакет с бафнутым ВВ:
0B 01 03 EF BE FE FF 75 21 02 00 48 F4 FF FF 00 | . . . п ѕ ю . u ! . . H ф . . .
00 00 00 28 2D 70 4C 4E 00 69 00 6F 00 62 00 65 | . . . ( - p L N . i . o . b . e
00 00 00 02 00 00 00 01 00 00 00 2B 00 00 00 00 | . . . . . . . . . . . + . . . .
00 00 00 6E 09 00 00 00 00 00 00 BE 09 00 00 96 | . . . n . . . . . . . ѕ . . . –
09 00 00 B7 01 00 00 D7 01 00 00 7B 09 00 00 00 | . . . · . . . Ч . . . { . . . .
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | . . . . . . . . . . . . . . . .
00 00 00 85 01 00 00 35 01 00 00 00 00 00 00 00 | . . . … . . . 5 . . . . . . . .
00 00 00 7A 00 00 00 55 00 00 00 32 00 00 00 32 | . . . z . . . U . . . 2 . . . 2
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | . . . . . . . . . . . . . . . .
00 00 00 BE C4 3C 7E D0 CE F4 3F 5C 20 41 F1 63 | . . . ѕ Д < ~ Р О ф ? \ A с c
CC F1 3F 00 00 00 00 00 00 1C 40 00 00 00 00 00 | М с ? . . . . . . . @ . . . . .
80 37 40 01 00 00 00 01 00 00 00 00 00 00 00 00 | Ђ 7 @ . . . . . . . . . . . . .
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | . . . . . . . . . . . . . . . .
00 00 00 00 00 01 01 00 00 01 00 00 00 00 00 00 | . . . . . . . . . . . . . . . .
00 00 00 00 00 00 00 00 00 00 2B 00 00 00 00 00 | . . . . . . . . . . + . . . . .
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | . . . . . . . . . . . . . . . .
00 00 00 00 00 00 00 FF FF FF 00 | . . . . . . . . . . .
различия начинаются с байта $93 ($90- от начала тела пакета или $70 байт от начала данных следующих после имени перса) и занимают 7 байт (следующий за ними байт вероятно тоже относится к искомым данным, хотя и одинаковый)
Но все равно не могу понять что там находится...
Добавлено через 6 минут
только что проверил. Если считать эти 8 байт числом типа Double (в Дельфи), то в бафнутом состоянии оно равно 1,30049180327869
что совсем не похоже ни на какую скорость (в свойствах перса отображается 158)
Разве что оно смахивает на множитель, который дает ВВ. Но тогда где найти базовую скорость? жду пока слетит ВВ чтобы глянуть на значение без ВВ.
В небафнутом состоянии брал скорость из свойств перса (вроде как базовая должна быть, ибо на персе не надет шмот изменяющий скорость), переводил в шестнадцатеричный вид , но такого числа не находил в пакете (т.е. получается что ее нет в пакете в целочисленном виде?).
Помогите, а то нифига не понимаю.
Добавлено через 3 минуты
Да, и еще, если брать значение runspd, что вроде как по смыслу подразумевает скорость, то оно все равно не соответствует тому, что указано в клиенте в свойствах перса, хотя и близковато...
Добавлено через 18 минут
Вроде понял... если runspd умножить на то число, которое у меня получалось, то получим скорость бега совпадающую с указанной в свойствах перса
supernewbie
05.03.2013, 22:03
glukmaker, кури сорцы ява сервера
Zergatul
05.03.2013, 23:56
Добавлено через 18 минут
Вроде понял... если runspd умножить на то число, которое у меня получалось, то получим скорость бега совпадающую с указанной в свойствах перса
Да, кажется ты прав. Писал когда-то радар на си шарпе для ГОДа. Можешь позырить исходники:
https://github.com/Zergatul/ulHelper/blob/master/ulHelper.L2Objects/L2Character.cs
this.Speed = (int)Math.Round((pck.IsRun == 1 ? pck.RunSpeed : pck.WalkSpeed) * pck.MoveMult);
Мобы и персонажи двигались по карте более менее норм.
glukmaker
06.03.2013, 12:36
Мобы и персонажи двигались по карте более менее норм.
Угу. У меня тоже уже MoveToLocation обрабатывается нормально и перемещения по карте выглядят плавными...
Теперь возникла проблема с MoveToPawn
но наверное этот вопрос задам в другом разделе, ибо там уже проблема не в самом пакете, а в том как правильно поступать с полученными данными.
vBulletin® v3.6.11, Copyright ©2000-2025, Jelsoft Enterprises Ltd. Перевод: zCarot