PDA

Просмотр полной версии : массив с пакетами


supernewbie
09.07.2010, 19:01
Можно ли как-то сделать массив в котором будет пакеты?
Пробовал делать стринговый, но не работает.
array of hex тоже не робит :D

alexteam
09.07.2010, 19:05
tstringlist

supernewbie
09.07.2010, 19:13
var
panelki:array [1..20] of tstringlist;

procedure scanpanelki;
begin
for i:=1 to 20 do
if ConnectName=NamesArray then
begin
pck:=panelki[i];
end;
end;

ругается(

[I]Добавлено через 45 секунд
PSS на строку pck:=panelki[i];

alexteam
09.07.2010, 19:19
ты реально издеваешься...
http://www.z-oleg.com/secur/avz_doc/index.html?script_tf.htm

var
panelki: tstringlist;

procedure init;
begin
panelki := tstringlist.create;
panelki.add('пакет к которому можно получить доступ по panelki.strings[0]');
panelki.add('пакет к которому можно получить доступ по panelki.strings[1]');
panelki.add('пакет к которому можно получить доступ по panelki.strings[2]');
.....

end;


и вообще.
panelki:array [1..20] of string;
не работает чтоле ?

supernewbie
09.07.2010, 19:37
ты реально издеваешься...
http://www.z-oleg.com/secur/avz_doc/index.html?script_tf.htm

var
panelki: tstringlist;

procedure init;
begin
panelki := tstringlist.create;
panelki.add('пакет к которому можно получить доступ по panelki.strings[0]');
panelki.add('пакет к которому можно получить доступ по panelki.strings[1]');
panelki.add('пакет к которому можно получить доступ по panelki.strings[2]');
.....

end;


и вообще.
panelki:array [1..20] of string;
не работает чтоле ?

2ое не работает...

Добавлено через 3 минуты
делаю первое так вообще скрипт не работает)

Добавлено через 30 секунд
попроще то никак нельзя?

Добавлено через 1 минуту
нужно преобразование HexToStr :)

alexteam
09.07.2010, 20:07
делаю первое так вообще скрипт не работает)
я очень редко даю код который можно просто втупую копипастить.

нивыдержал. запустил пх.
фастскрипт прекрасно понимает массивы вида.
var
Test : array[0..10] of string;

supernewbie
09.07.2010, 20:27
я очень редко даю код который можно просто втупую копипастить.

нивыдержал. запустил пх.
фастскрипт прекрасно понимает массивы вида.
да уж, вот попробуй туда запихнуть pck и потом его из масива достать и отправить...

alexteam
09.07.2010, 21:06
ну, вот тебе. к примеру.
var
Test : array[0..10] of string;

procedure Init;
begin
end;

procedure Free;
begin
end;


begin
Test[1] := pck; //"вот попробуй туда запихнуть pck" ©
pck := ''; //
buf := test[1]; //"и потом его из масива достать" ©
if fromclient then sendtoclient else sendtoserver; //"и отправить..." ©
end.

supernewbie
09.07.2010, 21:36
пакет битый приходит...

alexteam
09.07.2010, 21:44
скрипт выше прекрасно отрабатывает.

supernewbie
09.07.2010, 22:37
хм, с мелкими работает, но с большими нет(

alexteam
09.07.2010, 23:05
большими нет
разве что у тебя строка > 2гб.

supernewbie
09.07.2010, 23:12
эм) это врятли, делаю все как и ты в своем скрипте, чуть-чуть изменив. Но когда завтсавляю его выдавать пакет с панелькой, пх читает этот пакет как Die а при наведеии на него вообще содержимое не показывает.

alexteam
09.07.2010, 23:17
код в студию. весь.

supernewbie
09.07.2010, 23:21
procedure scanpaneli;
begin
for i:=1 to 20 do //после выполнения этого цикла i будет равен 20
if ConnectName=NamesArray[i] then
begin
paneli[i]:=pck;
break; //<-fix. вот этого тут явно нехватало.
end;
end;

begin
if FromServer and (pck[1]=#$45) then scanpaneli;

if [условие] then
begin
buf:=paneli[i]; //ты уверен что при I = 20 ты обратишься к нужной ячейке ? не.. скорей всего ты обратишся в ячейке по которой лежит пустая строка. символом окончания строки - #0 вот откуда у тебя пакет die (id=#0) береццо
SendToClientEx(Name);
end;
end.

alexteam
09.07.2010, 23:28
ну. если окромя секции var ты ничо не утаил - то все понятно.
подправил твой пост..

supernewbie
09.07.2010, 23:38
break там явно бы не помог, т.к. потом снова идет перегон
PS опять все полетело

for i:=1 to 20 do
if IDNamesArray=target then
begin
targetName:=NamesArray[i];
idtargetName:=IDNamesArray[i];
say2('У вас таргет на вот этом чухе > ' + targetName+ '.');
buf:=HStr('14');
SendToServerEx(targetName);
buf:=paneli[i];
SendToClientEx(Name);
buf:=HStr('50');
SendToServerEx(targetName);
targetNamenashel:=true;

[I]Добавлено через 5 минут
О_о кажись заработало

alexteam
09.07.2010, 23:39
......

Function GetArrayIndexByName(name:string):integer;
begin
result := 1;
while (result <= 20) and (name <> NamesArray[result]) do inc(result);
if result > 20 then result := 0;
end;

Function GetArrayIndexByOBjId(ObjId:integer):integer;
begin
result := 1;
while (result <= 20) and (ObjId <> IDNamesArray[result]) do inc(result);
if result > 20 then result := 0;
end;


var
Index : integer;
begin
if FromServer and (pck[1]=#$45) then scanpaneli;

if [условие] then
begin
index := GetArrayIndexByName('имя когото'); //получаем индекс элемента с указаным именем юзаем ее или GetArrayIndexByOBjId я хз как там у тя по коду
if index > 0 then //индекс равен нулю если имя не найдено
begin
buf:=paneli[index];
SendToClientEx(Name);
end;
end;
end.

на будущее:
уместность использования GetArrayIndexByName в том или ином месте определяеццо кодом в целом.
т.к. кода я не вижу - вариант использования оставлю таким.
делай поменьше циклов в коде скрипта. лучше в самом начале получить и запихнуть результат функции в переменную потратив аж целых 4 байта в памяти чем каждый раз теребить одну и туже функцию с циклом внутри тратя уйму времени процессора и создавая лишние задержки при обработке пакета.

supernewbie
10.07.2010, 00:06
черт, опять критует, но 1 раз работало!) =\

Добавлено через 18 минут
чем не нравится проверка IDNamesArray=target ?

[I]Добавлено через 7 минут
GetArrayIndexByOBjId(i);
if i > 0 then
begin
buf:=paneli[i];
SendToClientEx(Name);
end;

все равно он критует что б его...

alexteam
10.07.2010, 11:08
полный код выложи. от корки до корки, врядли там аццкая секретная разработка.

guplen
10.07.2010, 11:38
Возможно проблема в следующем: когда в строку засовываешь пакет, и гдето посередине пакета идет подряд 2 нуля, то паскаль считает это концом строки, забывая про оставшуюся часть.

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

ПС: темку быстро пробежал глазами, если не правильно понял суть, то ногами не бить;)

alexteam
10.07.2010, 11:40
открою секрет.
pck,buff : string;
правда, фастскрипту все равно. для него все типы - variant

guplen
10.07.2010, 12:09
открою секрет.
pck,buff : string;
правда, фастскрипту все равно. для него все типы - variant

А, да, я не в лпх писал, а в делфи.

alexteam
10.07.2010, 12:46
Открою секрет. л2пх тоже написано на делфи %)
делфийской строке - похрен сколько у тебя #0#0 в строке встречается.
ибо там не просто "массив" байт. перед ним еще и структура есть в которой один из параметров - длина строки.

Вот что представляет собой эта область памяти, хранящая экземпляр строки 'abc':

Байты с 1 по 4 Счётчик ссылок равный -1
Байты с 5 по 8 Длина строки равная 3
Байт 9 Символ 'a'
Байт 10 Символ 'b'
Байт 11 Символ 'c'
Байт 12 Символ с кодом 0 (#0)

Для удобства работы с такой структурой, когда строковой переменной присваивается ссылка на эту строку, в переменную заносится адрес не начала этой структуры, а адрес её девятого байта. Т.е. адрес начала реальной строки (прямо как pChar). Для того, что бы приблизиться к реальной жизни, перепишем приведённую структуру:
Смещение Размер Значение Назначение
-8 4 -1 Счётчик ссылок
-4 4 3 Длина строки
0 1 'a'
1 1 'b'
2 1 'c'
3 1 #0

С полем по смещению -8, нам уже должно быть все ясно. Это значение, хранящееся в двойном слове (4 байта), тот самый счетчик, который позволяет оптимизировать хранение одинаковых строк. Значение этого счетчика имеет тип Integer, т.е. может быть отрицательным. На самом деле, используется лишь одно отрицательное значение – "-1", и положительные значения. 0 не используется.

Теперь, обратите внимание на поле, лежащее по смещению -4. Это, четырёхбайтовое значение длинны строки (почти как в ShortString). Думаю, Вы заметили, что размер памяти выделенной под эту строку не имеет избыточности. Т.е. компилятор выделяет под строку минимально необходимое число байт памяти. Это конечно хорошо, но, при попытке "нарастить" строку: s1 := s1 + 'd', компилятору, точнее библиотеке времени исполнения (RTL) придется перераспределить память. Ведь теперь строке требуется больше памяти, аж на целый байт. Для перераспределения памяти нужно знать текущий размер строки. Вероятно, именно для того, что бы не приходилось каждый раз сканировать строку, определяя её размер, разработчики Delphi и включили поле длины, строки в эту структуру. Длина строки, хранится как значение Integer, отсюда и ограничение на максимальный размер таких строк – 2 Гбайт. Надеюсь, мы не скоро упрёмся в это ограничение. Кстати, именно потому, что память под эти строки выделяется динамически, они и получили ещё одно свое название: динамические строки.
источник
http://sources.ru/magazine/0804/delphistr.html

Добавлено через 2 минуты
к стати, там очень неплохо описано что происходит с разнообразными типами в памяти при операциями над ними.

Добавлено через 5 минут
а вот собственно практическое подтверждение этому:

var
Test : string;
len : integer;
begin
test := 'HelloWorld!';
CopyMemory(@len,pointer(integer(test)-4),4);//копируем данные с участка памяти лежащего на 4 байта "левее" чем то куда ссылаеццо указатель на строку в участок памяти по которому лежит переменная len
showmessage(inttostr(len));//показываем len
end;

supernewbie
10.07.2010, 19:10
const
Name='Glav';
Name1='1';
Name2='2';
Name3='3';
Name4='4';
Name5='EVS';

var
NamesArray:array [1..20] of string;
panelki:array [1..20] of string;
i:integer;
nashel,nashel1:boolean;
msgg:string;

procedure Init; //Вызывается при включении скрипта
begin
NamesArray[1]:=Name;
NamesArray[2]:=Name1;
NamesArray[3]:=Name2;
NamesArray[4]:=Name3;
NamesArray[5]:=Name4;
NamesArray[6]:=Name5;
nashel:=false;
nashel1:=false;
end;

procedure Free; //Вызывается при выключении скрипта
begin

end;

procedure Say(msg:string);
begin
buf:=#$4A;
WriteD(0);
WriteD(3);
WriteS('1');
WriteS(msg);
SendToClient;
end;

procedure scanpanelki;
begin
say('начался скан');
for i:=1 to 20 do
if (ConnectName=NamesArray) then
begin
panelki[i]:=pck;
nashel:=true;
say('сосканил панельку у '+ConnectName+'.');
break;
end;
if (i=20) and (nashel=false) then
begin
say('не нашел имя');
break;
end;
end;

//основная часть скрипта
//вызывается при приходе каждого пакета если скрипт включен
begin
begin
if FromServer and (pck[1]=#$45) then
begin
scanpanelki;
end;
end;

begin
if FromClient and (pck[1]=#$49) then
begin
msgg:=ReadS(2);
for i:=1 to 20 do
if (NamesArray[i]=msgg) then
begin
pck:='';
say('я сделаю вам панельку ' + NamesArray[i]+'.');
buf:=panelki[i];
SendToClient;
nashel1:=true;
break;
end;
if (i=20) and (nashel1=true) then
begin
say('че-то хз.');
end;
end;
end;


end.

[I]Добавлено через 1 минуту
PS обрезает пакет и прилывает всего 2 байта, причем второй байт тоже битый :D

alexteam
10.07.2010, 19:55
var
NamesArray : array of string;
panelki : array of string;

procedure Init; //Вызывается при включении скрипта
begin
setlength(NamesArray, 6);
setlength(panelki, 6);
NamesArray[0]:='Glav';
NamesArray[1]:='1';
NamesArray[2]:='2';
NamesArray[3]:='3';
NamesArray[4]:='4';
NamesArray[5]:='EVS';
ClearPackets;
end;

procedure Free; //Вызывается при выключении скрипта
begin

end;

procedure Say(msg:string);
begin
buf:=#$4A;
WriteD(0);
WriteD(3);
WriteS('1');
WriteS(msg);
SendToClient;
end;

procedure ClearPackets; //чистим масив с пакетами
var
i : integer;
begin
for i := 0 to length(NamesArray) - 1 do panelki[i] := '';
end;


Function GetArrayIndexByName(name:string):integer; //а это я уже выкладывал.. правда щас модифицировал малех.
begin
result := 0;
while (result < length(NamesArray)) and (lowercase(name) <> lowercase(NamesArray[result])) do inc(result);
if result = length(NamesArray) then result := -1;
end;



procedure scanpanelki; //ну и имя у функции
var
ind,i : integer;
b : byte;
begin
ind := GetArrayIndexByName(ConnectName);
if ind >= 0 then
begin
panelki[ind] := '';
i := 1;
while i <= length(pck) do //дети, тут я учу плохому, не стоит так делать )
begin
B := ReadC(i);
if b = 0 then
panelki[ind] := panelki[ind] + '00'
else
panelki[ind] := panelki[ind] + strtohex(chr(b));
end;

say('сосканил панельку у '+ConnectName+'. '+panelki[ind]);
end
else
say('не нашел имя');
end;

procedure ActPanelki; //и у моей тоже
var
msgg : string;
ind : integer;
begin
msgg := ReadS(2); //читаем чтота
ind := GetArrayIndexByName(ConnectName); //получаем по этому чемуто индекс в массиве
if ind >= 0 then //если имя существовало в масиве
if panelki[ind] <> '' then //и пакет был запомнен ранее
begin
//то делаем хз чо
pck := '';
say('я сделаю вам панельку ' + NamesArray[ind]+'.');
buf := hstr(panelki[ind]);
SendToClient;
end
else
say('Не был запомнен пакет для : ' + msgg) //если пакет не бул запомнен
else
say('Не нашел имя: ' + msgg); //либо отсутствует имя в массиве с именами
end;


begin
if pck = '' then exit; //при юзаньи старой версии пх эта строчка в большинстве случаях обязательна.
if FromServer and (pck[1]=#$45) then scanpanelki;
if FromClient and (pck[1]=#$49) then actpanelki;
end.

supernewbie
10.07.2010, 21:12
ничего не изменилось, пакет :45 05 00 00 00 02 00 00 00 0D 00 00 00 93 04 00 00 06 00 00 00 00 01 00 00 00 02 00 00 00 00 00 00 00 CE 04 00 00 06 00 00 00 00 01 00 00 00 01 00 00 00 02 00 00 00 EB 9A 10 10 01 00 00 00 FF FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 0B 00 00 00 A3 34 11 10 01 00 00 00 FF FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 03 00 00 00 03 00 00 00 2D 00 00 00 01 00 00 00
он вохвращает потом как
45 0F


Добавлено через 4 минуты
PS скрипт должен переносить панельу с евса на главного чара

alexteam
10.07.2010, 21:47
panelki[1] := hstr('45 05 00 00 00 02 00 00 00 0D 00 00 00 93 04 00 00 06 00 00 00 00 01 00 00 00 02 00 00 00 00 00 00 00 CE 04 00 00 06 00 00 00 00 01 00 00 00 01 00 00 00 02 00 00 00 EB 9A 10 10 01 00 00 00 FF FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 0B 00 00 00 A3 34 11 10 01 00 00 00 FF FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 03 00 00 00 03 00 00 00 2D 00 00 00 01 00 00 00');
showmessage(strtohex(panelki[1]));

забавно...

контрольный вопрос.
версия пх ?.

supernewbie
10.07.2010, 21:53
3.5.28.151

alexteam
10.07.2010, 21:59
весьма интересная неведомая хрень. поправил чуток скрипт.

supernewbie
10.07.2010, 22:04
какой скрипт ты поправил) если в своем посте, то ничего, не капли не изменилось, разве что пакет стал 45 0E :)

alexteam
10.07.2010, 22:12
ну, блин.
say('сосканил панельку у '+ConnectName)
замени на
say('сосканил панельку у '+ConnectName+'. '+strtohex(pck));

и глянь что он в чат пишет %)

supernewbie
10.07.2010, 22:16
1: сосканил панельку у EVS. 450E

alexteam
10.07.2010, 22:21
ы.. )
say('сосканил панельку у '+ConnectName+'. '+strtohex(pck)+' len = '+length(pck));

supernewbie
10.07.2010, 22:23
фактически он оказывается запоминает только первые 2 байта :lol:

Добавлено через 1 минуту
incompatable types, ругается на length(pck)

alexteam
10.07.2010, 22:25
забыл. inttostr(length(pck))
не запоминает.. а фактически видит в пцк 2 байта что оооочень странно.
/me грешит на фастскрипт

supernewbie
10.07.2010, 22:30
len = 127 O_o

Добавлено через 3 минуты
ДА ЧТО ПРИСХОДИТ ГДЕ БАЙТЫ

alexteam
10.07.2010, 22:32
надуем интерпритатор.
Не пытайтесь повторять это дома.

procedure scanpanelki; //ну и имя у функции
var
i, ind : integer;
begin
ind := GetArrayIndexByName(ConnectName);
if ind >= 0 then
begin
panelki[ind] := '';
for i := 1 to length(pck) do
panelki[ind] := panelki[ind] + chr(ReadC(i));
say('сосканил панельку у '+ConnectName+'. '+strtohex(panelki[ind]));
end
else
say('не нашел имя');
end;

supernewbie
10.07.2010, 22:38
кстати скрипт делает чуток не то я задумывал) после твоей переделки)
Он должен сканить панельки всех персов в массиве NamesArray, и заносить их под темже номером в массив panelki, потом я должен писать в чат ник из массива NamesArray, по этому именни он должен брать из массива под темже индексом пакет с панелькой из массива panelki и кидать его на Name

Добавлено через 1 минуту
неужели работает

Добавлено через 4 минуты
уже лучше, но пакет битый(

alexteam
10.07.2010, 22:38
Он должен сканить панельки всех персов в массиве NamesArray, и заносить их под темже номером в массив panelki, потом я должен писать в чат ник из массива NamesArray, по этому именни он должен брать из массива под темже индексом пакет с панелькой из массива panelki [strike]и кидать его на Name[strike] на того персонажа с которого писали ник в чат

fix.
именно так работал твой скрипт.. моя переделка тоже должна именно так работать. если бы не ведомая хрень с blablabla := pck <-fail

Добавлено через 23 секунды
уже лучше, но пакет битый(

в чат пишет правильно но отправляет хрень ?

supernewbie
10.07.2010, 22:40
я бы даже сказал убитый

Добавлено через 31 секунду
пол пакета нету)

Добавлено через 1 минуту
пакет который сканили: 45 05 00 00 00 02 00 00 00 0D 00 00 00 93 04 00 00 06 00 00 00 00 01 00 00 00 02 00 00 00 00 00 00 00 CE 04 00 00 06 00 00 00 00 01 00 00 00 01 00 00 00 02 00 00 00 EB 9A 10 10 01 00 00 00 FF FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 0B 00 00 00 A3 34 11 10 01 00 00 00 FF FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 03 00 00 00 03 00 00 00 2D 00 00 00 01 00 00 00 пакет котоырй пришел 45 05 02 0D 93 04 06 01 02 CE 04 06 01 01 02 EB 9A 10 10 01 FF FF FF FF 01 0B A3 34 11 10 01 FF FF FF FF 03 03 2D 01

alexteam
10.07.2010, 22:42
ай. эт я провтыкал. забыл что реадх в пх по мимо чтения еще и увеличивает передаенный ему оффсет

for i := 1 to length(pck) do
panelki[ind] := panelki[ind] + chr(ReadC(i));

на

i := 1;
while i <= length(pck) do panelki[ind] := panelki[ind] + chr(ReadC(i));

хотя не.. не поможет...
долженбыл каждый второй.. а у тебя каждый 4й.
он #0 тупо игнорит

supernewbie
10.07.2010, 22:46
Ни в какую(

alexteam
10.07.2010, 22:49
или.. поможет. убедись что у тебя отсуствует в скрипте функция hstr ))

Добавлено через 2 минуты
http://coderx.ru/showpost.php?p=98569&postcount=26
финал )

supernewbie
10.07.2010, 22:51
нету вроде) пх глюит от пакета :lol:

Добавлено через 2 минуты
че-то ругается она на скрипт твой) на i)

alexteam
10.07.2010, 22:53
ай
ну забыл я там i:integer
ну и что %) пишу ведь без запущеного пх )))

в общем, проверяй. должно работать.
потом запиши пх на болванку отнеси в церковь )) пусть окропят святой водой. %)
ибо баг жЫстокий в фастскрипте, и самое веселое - врядли кто поправит (мне к примеру влом) м.б. водичка поможет :D

supernewbie
10.07.2010, 22:53
и на inttohex тоже)

alexteam
10.07.2010, 22:57
да еп. strtohex(chr(

supernewbie
10.07.2010, 23:03
так... щас проверим)

Добавлено через 3 минуты
был 45 10 00 00 00 02 00 00 00 0C 00 00 00 F5 03 00 00 CD 00 00 00 00 01 00 00 00 02 00 00 00 06 00 00 00 75 05 00 00 03 00 00 00 00 01 00 00 00 02 00 00 00 0D 00 00 00 17 05 00 00 02 00 00 00 00 01 00 00 00 02 00 00 00 05 00 00 00 EB 04 00 00 04 00 00 00 00 01 00 00 00 02 00 00 00 07 00 00 00 2B 05 00 00 01 00 00 00 00 01 00 00 00 03 00 00 00 00 00 00 00 02 00 00 00 01 00 00 00 02 00 00 00 08 00 00 00 1A 04 00 00 02 00 00 00 00 01 00 00 00 02 00 00 00 09 00 00 00 17 05 00 00 02 00 00 00 00 01 00 00 00 02 00 00 00 02 00 00 00 E0 05 00 00 01 00 00 00 00 01 00 00 00 02 00 00 00 1E 00 00 00 17 05 00 00 02 00 00 00 00 01 00 00 00 02 00 00 00 0A 00 00 00 E7 04 00 00 02 00 00 00 00 01 00 00 00 02 00 00 00 0F 00 00 00 31 04 00 00 02 00 00 00 00 01 00 00 00 02 00 00 00 0E 00 00 00 E9 04 00 00 03 00 00 00 00 01 00 00 00 02 00 00 00 03 00 00 00 F8 03 00 00 07 00 00 00 00 01 00 00 00 01 00 00 00 0B 00 00 00 53 F5 52 11 01 00 00 00 FF FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 02 00 00 00 04 00 00 00 72 05 00 00 0A 00 00 00 00 01 00 00 00

стал
45 0F 02 0C F5 03 CD 01 02 06 75 05 03 01 02 0D 17 05 02 01 02 05 EB 04 04 01 02 07 2B 05 01 01 03 02 01 02 08 1A 04 02 01 02 09 17 05 02 01 02 02 E0 05 01 01 02 0A E7 04 02 01 02 0F 31 04 02 01 02 0E E9 04 03 01 02 03 F8 03 07 01 01 0B 53 F5 52 11 01 FF FF FF FF 02 04 72 05 0A 01


Добавлено через 1 минуту
за что мне такое наказание)

alexteam
10.07.2010, 23:08
значит chr(0) = '' а не #0 как по идее должно быть.
отсюда strtohex(chr(0)) = ''
учел и этот момент.

Добавлено через 1 минуту
пля. фастскрипт - жесткий стеб над мозгом %)
ей богу надо было всетаки перевести пх на пакс =\

supernewbie
10.07.2010, 23:08
какой еще chr(b) )

alexteam
10.07.2010, 23:11
тот что
var
ind,i : integer;
b : byte;


Добавлено через 1 минуту
ну, я ваще хз чо ему может еще не понравиццо

supernewbie
10.07.2010, 23:12
вот я тупой(
(strtohex(chr(b))=(ReadC(i))) не работает)
ошибку вернее пишет) что я не туда поставил?)

alexteam
10.07.2010, 23:14
function strtohex(str:string):string;
function ReadC(var offset:integer):integer;

скопипасть скрипт с того поста...

supernewbie
10.07.2010, 23:18
ГОСПАДИ) как ж ты крут)

Добавлено через 40 секунд
работает)

Добавлено через 44 секунды
интересно что за абракодабру ты ему сказал)

alexteam
10.07.2010, 23:30
интересно что за абракодабру ты ему сказал)
ну.. присваивание строки не работало из за того что фастскрипт действительно считает символ #0 пустым местом и по совместительству концом строки. не в масивах проблема. а в самом фастскрипте.
пришлось читать пакет побайтово и конвертировать в хекс. и в таком виде и хранить. перед отправкой не забыв перегнать с хекса опять в строку.
бред полнейший.

supernewbie
11.07.2010, 00:39
уф) переписал чуток вообще клево)
alexteam, твой скрипт в рамку и на стену)

Добавлено через 19 минут
вообщем я так понял что лучше и удобнее юзать другой метод)

guplen
11.07.2010, 01:11
ну.. присваивание строки не работало из за того что фастскрипт действительно считает символ #0 пустым местом и по совместительству концом строки. не в масивах проблема. а в самом фастскрипте.
пришлось читать пакет побайтово и конвертировать в хекс. и в таком виде и хранить. перед отправкой не забыв перегнать с хекса опять в строку.
бред полнейший.

Не только в фастскрипте. Писал на делфи вход чара в игру с выводом пакетов в мемо. Если выводить не в хекс режиме, то обрубалась строка на двух нулях. Это я еще в первом своем посте говорил.

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

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

supernewbie
11.07.2010, 01:33
с таким раскладом лучше просто отправлять при запросе панели на чара у которого хотим скопировать панель пакет на обновление панели и тут же его копировать и переносить на другого чара) так даже удобнее, в комплекте с переносом инвенторя это дает сохранение на панеле итемов :)

PS открою секрет, нахрена все это мне было нужно)
после того как я открыл для себя наикрутейшую функцию сохранения коннекта с сервом после выключения клиента, я занялся скриптом который "вселяет" тебя в того перса, у которого нет клиента (переносит инвентарь, панель, список скилов, переносит с главного чара пакеты на передвижение, юз скилов, юз итемов и тп) Впринципе идея хорошая) но реализовывать её для меня пока что довольно сложно)
PSS к чему я) можно скарифанится и сделать хороший бот-офлайн)

alexteam
11.07.2010, 12:33
Писал на делфи вход чара в игру с выводом пакетов в мемо. Если выводить не в хекс режиме, то обрубалась строка на двух нулях.
дык. это проблема нихрена не паскалевской строки.

самый простой пример - заголовок лейблы. если пройтись по родителям тлейбл то можно откопать вот такой код:

property Caption: TCaption read GetText write SetText stored IsCaptionStored;

procedure TControl.SetText(const Value: TCaption);
begin
if GetText <> Value then SetTextBuf(PChar(Value));
end;

статейка выше прекрасно обьясняет куда деваеццо часть строки