PDA

Просмотр полной версии : Не верно определяется ConnectName при работе с несколькими клиентами


lexayar
06.02.2009, 12:58
Добрый день.
Столкнулся с такой проблемой: использую скрипт "Помощник в ПВП" (пьет банки ЦП, ХП, МП и т.д., но это не суть важно). Так вот, когда подключаюсь одним клиентом все работает нормально, когда подключаюсь двумя, то часть пакетов StatusUpdate (возможно и других, не проверял) от второго персонажа приходят с ConnectName равным имени первого персонажа, из за чего получается что параметр (см. код ниже) "MyID" изменяется - то ИД первого чара, то ИД второго.
Скрипт урезан, оставил только самое необходимо, но смысл в том, что первой строкой должны резаться все пакеты предназначенные не для основного персонажа.

// скрипт будет работать только для указанного персонажа
// Name - имя 1 персонажа, пакеты от остальных нам не нужны
if (ConnectName<>Name) then
exit;

// обрабатываем пакет статуса.
// 18=StatusUpdate:d(ObjectID)d(AttribCount:Loop.01.0 002)d(AttrID:Get.FSup)d(AttrValue)
if FromServer and (pck[1]=#$18) then
begin
MyID:=ReadD(2);
end;

Подскажите как можно это обойти, проверял на версии l2phx.3.4.1.75, сегодня попробую на последней, но в логе изменений ни чего нет про этот баг.

QaK
06.02.2009, 13:14
if FromServer and (pck[1]=#$18) then
поменяй на
if (FromServer) and (ConnectName=Name) and (pck[1]=#$18) then

З.Ы. это не баг =) эт немножко кривые ручки - без обид.

Grinch
06.02.2009, 15:15
// скрипт будет работать только для указанного персонажа
// Name - имя 1 персонажа, пакеты от остальных нам не нужны
if (ConnectName<>Name) then begin
exit; end else // а может так заработает? если заработает отпишись сам не уверен

// обрабатываем пакет статуса.
// 18=StatusUpdate:d(ObjectID)d(AttribCount:Loop.01.0 002)d(AttrID:Get.FSup)d(AttrValue)
if FromServer and (pck[1]=#$18) then
begin
MyID:=ReadD(2);
end;
хз я плохо кодю но типа может так заработает надо тестить

lexayar
06.02.2009, 16:23
QaK, Без обид, но либо ты просто невнимателен, либо не особо шаришь в программировании:)
Тебе вот эта строка в начале скрипта ни о чем не говорит?
if (ConnectName<>Name) then
exit;
Таким образом твое условие and (ConnectName=Name) уже излишне, другие пакеты (с другим именем) до сюда уже и не дойдут.
З.Ы. Всеравно всем спасибо за оперативные ответы. Только что проверил на версии 83 баг этот исправлен. Спасибо разработчикам.

QaK
06.02.2009, 17:03
Без обид, но либо ты просто невнимателен, либо не особо шаришь в программированиипросто конец рабочей недели, приношу свои извенения ...