Вернуться   CoderX :: Forums > Lineage II > L2PacketHack > Скриптинг
Войти через OpenID

Скриптинг Форум посвещенный созданию скриптов для L2PacketHack

Чат (Новых сообщений с момента вашего последнего визита нет)
Загрузка...
Задавайте ваши вопросы на форуме. Чат предназначен для небольших разговоров.
 
Ответ
 
Опции темы Опции просмотра
Старый 16.02.2013, 08:52   #1
Новичок
 
Регистрация: 20.04.2012
Сообщений: 4
Сказал Спасибо: 0
Имеет 2 спасибок в 2 сообщенях
cmdprompt пока неопределено
По умолчанию Отличия версий l2phx

В версии phx 3.4 конструкция вида if pck[1]=#3 работала нормально, но в 3.35.33.172 переменная pck как будто не массив, и обращаться к байтам по индеску не получается. Работает только ReadC(1), поэтому конструкция вида case pck[1] of превратилась в case ReadC(1) of и от этого изменилось вот что, если пакет состоит только из 1 байта, то ReadC(1) возвращает 0 или каке-то неверное значение, поэтому этой с помощю этой функции нельзя работать с такими пакетами. Приходится добавлять в оператор выбора действие по умолчанию, например else if pck=#9 then. Странно, что такое сравнение работает, в отличии от if pck[1]=#9 например.

Простое case pck[1] of превратилось в сложное
case ReadC(1) of // для многобайтных пакетов
1:...
2:...
else case pck of // для однобайтных пакетов
#3:..
#4:..
end;
end;


Но это не основное неудобство, самые костыли получаются тогда, когда надо изменить входящий пакет перед отправкой, если раньше можно было например изменить байт пакета так pck[2]:=#0;, то теперь это превращается в такой велосипед: buf:=pck; pck:=''; WriteC(0,2); SendToServer; ужас.

Подскажите, кто сталкивался с такой проблемой, это особенность только моей версии 3.5.33.172 или всех 3.5?

Последний раз редактировалось cmdprompt, 16.02.2013 в 09:08.
cmdprompt вне форума   Ответить с цитированием
Старый 16.02.2013, 23:57   #2
Местный
 
Аватар для J-Fobos
 
Регистрация: 09.06.2008
Сообщений: 867
Сказал Спасибо: 175
Имеет 468 спасибок в 259 сообщенях
J-Fobos пока неопределено
По умолчанию

Переменная pck имеет тип string. Конструкция pck[n] должна работать.
Но не работает, это баг программы. Который устранили. Неужели опять всплыл? На последней версии проверяли?
__________________

В любом из нас спит гений. И с каждым днем все крепче.

Переходим на протокол нового поколения jabber
J-Fobos вне форума   Ответить с цитированием
Старый 17.02.2013, 16:21   #3
Новичок
 
Регистрация: 20.04.2012
Сообщений: 4
Сказал Спасибо: 0
Имеет 2 спасибок в 2 сообщенях
cmdprompt пока неопределено
По умолчанию

Не пробовал последнюю, так как пропатчил 3.35.33.172 через лаунчер (ехе править нельзя, защита ), дабы разгрузить процессор. Уменьшил макс. длину пакета до 16кб (длиннее пакетов никогда не втречал), удалил в нескольких местах вызов процедуры FillMemory - она вызывается раз 10 при приходе каждого(!) пакета. В итоге при большой нагрузке проц стал в 2 раза меньше напрягаться.

А вообще разработчикам напишу то, что я увидел в IDA disassembler. Вы передаёте пакет не по ссылке, а по значению, даже тогда, когда функция изменяет пакет . При приходе пакета вызываются около 4х вложенных функций, и каждый раз пакет копируется из одного буфера в другой, предварительно выделив под него место в стеке, и копируется не столько байт, сколько занимает пакет, а всегда весь буфер 64кб(!) что ОЧЕНЬ напрягает процессор, особенно старые одноядерные. Пропатчил прогу потому, что в тот момент, когда у меня был слабый комп, не были доступны исходники.

Последний раз редактировалось cmdprompt, 17.02.2013 в 16:26.
cmdprompt вне форума   Ответить с цитированием
За это сообщение cmdprompt нажился спасибкой от:
Старый 18.02.2013, 01:16   #4
Местный
 
Аватар для kpa9pt
 
Регистрация: 13.01.2010
Сообщений: 159
Сказал Спасибо: 18
Имеет 30 спасибок в 23 сообщенях
kpa9pt имеет немного плохого в прошлом
По умолчанию

Цитата:
Сообщение от cmdprompt Посмотреть сообщение
Не пробовал последнюю, так как пропатчил 3.35.33.172 через лаунчер (ехе править нельзя, защита ), дабы разгрузить процессор. Уменьшил макс. длину пакета до 16кб (длиннее пакетов никогда не втречал), удалил в нескольких местах вызов процедуры FillMemory - она вызывается раз 10 при приходе каждого(!) пакета. В итоге при большой нагрузке проц стал в 2 раза меньше напрягаться.

А вообще разработчикам напишу то, что я увидел в IDA disassembler. Вы передаёте пакет не по ссылке, а по значению, даже тогда, когда функция изменяет пакет . При приходе пакета вызываются около 4х вложенных функций, и каждый раз пакет копируется из одного буфера в другой, предварительно выделив под него место в стеке, и копируется не столько байт, сколько занимает пакет, а всегда весь буфер 64кб(!) что ОЧЕНЬ напрягает процессор, особенно старые одноядерные. Пропатчил прогу потому, что в тот момент, когда у меня был слабый комп, не были доступны исходники.
Не совсем по теме скажу но вот у меня целерон старый одноядерный(не вкурсе есть ли 2х ядерные). Ужасно тормозит при сильной нагрузке в игре. А на i5 у друга всё отлично( 0 лагов.
kpa9pt вне форума   Ответить с цитированием
Ответ

  CoderX :: Forums > Lineage II > L2PacketHack > Скриптинг


Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 15:10.

vBulletin style designed by MSC Team.
Powered by vBulletin® Version 3.6.11
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Locations of visitors to this page
Rambler's Top100

Вы хотите чувствовать себя в безопасности? чоп Белган обеспечит её!