PDA

Просмотр полной версии : хз как это вбить в поиск)


supernewbie
11.05.2010, 01:18
Как можно в l2phx сделать так, чтобы он читал текст в юникоде и узнавал его размер? Чтобы потом отступить это значение...
PS в основном это понадобится при чтении userinfo, при разных никах и титулах.

J-Fobos
11.05.2010, 01:28
я думаю вам надо это
procedure UserInfo;
var
i, CubicsSize, tmpCharObjectId: integer;
tmpMyName, tmpMyTitle: string;
begin
tmpCharObjectId:=ReadD(18);
if CharObjectId=0 then CharObjectId:=tmpCharObjectId;
case tmpCharObjectId of
CharObjectId:
begin
MyCorX:=ReadD(2);
MyCorY:=ReadD(6);
MyCorZ:=ReadD(10);
i:=22;
tmpMyName:=ReadS(i);
i:=i+48;
MaxHP:=ReadD(i);
CurHP:=ReadD(i);
MaxMP:=ReadD(i);
CurMP:=ReadD(i);
i:= 552 + length(tmpMyName) * 2;
tmpMyTitle:=ReadS(i);
i:= i + 31;
CubicsSize:= ReadH(i);
i:= i + 28 + (CubicsSize * 2);
MaxCP:=ReadD(i);
CurCP:=ReadD(i);
end;
end;
end;

автор Vilson


PS: если я не ошибаюсь то текст в ANSI, а не в юникоде

supernewbie
11.05.2010, 01:38
блин) чуть-чуть понял) было бы лучше если бы было с комментами там чтоли, с описанием...

Добавлено через 1 минуту
length(tmpMyName) это как бы длинна имени, я правельно понял?

J-Fobos
11.05.2010, 01:48
Функция Length возвращает число элементов в массиве или строке. Возвращает или число символов в SourceString, или число элементов в SourceArray. Массивы, по умолчанию, начинаются с индекса = 0. Так что длина такого массива на 1 меньше чем самый высокий индекс.

supernewbie
11.05.2010, 01:50
по-русски пож(

J-Fobos
11.05.2010, 02:14
Ну на примере покажу.
s:string;

s:='12345'
Length(s) = 5 //пять символов

s:='01234'
Length(s) = 5 //опять пять символов

s:='фыва'
Length(s) = 4 //четыре символа

supernewbie
11.05.2010, 10:01
короче чтобы узнать кол-во бит пользуюсь этим...
MyName:=ReadS(22);
MyNameLength:=(length(MyName) * 2 + 1 * 2);

Добавлено через 2 минуты
спс за помощь)

Sherman
11.05.2010, 11:59
короче чтобы узнать кол-во бит пользуюсь этим...
MyName:=ReadS(22);
MyNameLength:=(length(MyName) * 2 + 1 * 2);

Добавлено через 2 минуты
спс за помощь)

Для количества бит еще и на 8 надо умножить ;)

А вообще длинна Unicode_cтроки = длина_ANSI_строки * 2 + 2 байта

Prixmegently
11.05.2010, 13:52
Юникод строка = анси строка * 2, ибо анси нуль терминированная строка тоже имеет нуль символ в конце.

supernewbie
11.05.2010, 15:41
Для количества бит еще и на 8 надо умножить ;)

ну значит байт)