PDA

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


creaDo
15.10.2008, 10:21
При розговоре с нпс ГК получаю хтмлку что-то вроде:
HTML: <html><body><font color="LEVEL">Gatekeeper Karin:</font><br>Вы закончили ваши дела? Если у вас всё ещё есть что продать, и вы хотите что то купить я могу вновь открыть дверь измерений.<br><a action="bypass -h 9081690ddf308712">Переместиться на другой этаж</a><br><a action="bypass -h 34cc702de1aee003">Задание</a>
</body></html>

как отсюда можно выдернуть ключик? (9081690ddf308712)
Ключ постоянно меняеться, ниче лучше чем переливать его в buf по байтово нипридумал, мб есть какие-то другие варианты?
длина 16 символов (32 байта)

сделал вариант для первой кнопки.

var n, t:integer; st:string;
procedure fly(k:integer);
begin
buf:=#$23;
for n:=0 to 31 do begin
writec(readc(n+k));
end;
writeH(0);
sendtoserver;
end;
function find(d:integer):integer;
begin
result:=0
for n:=1 to d do if (result=0) and (pck[n-6]=#$2d) and (pck[n-4]=#$68) and (pck[n-2]=#$20) then result:=n;
end;
begin
if (FromServer) and (pck[1]=#$19) then fly(find(668));

да и еше где можно выдирнуть розмер пакета? пх его знает, есть какая-то переменная где храниться размер пакета?

Breadfan
15.10.2008, 11:57
http://coderx.ru/showthread.php?p=14512#post14512 - скрипт на скупку свитков в КХ, http://coderx.ru/showthread.php?t=143&page=4 - скрипт на скупку семян, в обоих скриптах есть процедура поиска ключей команд и подсчета их количества. Длина пакета - length(pck)

PanAm
15.10.2008, 14:42
Алгоритм в примерах не ахти
в фастскрипте достаточно функций для работы со строками
читайте fs.rtf

Строковые функции
function Length(s: String): Integer
Длина строки

function Copy(s: String; from, count: Integer): String
Возвращает подстроку из строки с заданной позиции заданной длины

function Pos(substr, s: String): Integer
Позиция подстроки в строке

procedure Delete(var s: String; from, count: Integer)
Удаляет подстроку из строки с заданной позиции заданной длины

procedure Insert(s: String; var s2: String; pos: Integer)
Добавляет первую строку ко второй строке

function Uppercase(s: String): String
Перевод строки в верхний регистр

function Lowercase(s: String): String
Перевод строки в нижний регистр

function Trim(s: String): String
Удаляет окружающие пробелы из строки

function NameCase(s: String): String
Перевод первого символа в верхний регистр

function CompareText(s, s1: String): Integer
Сравнение строк

function Chr(i: Integer): Char
Возвращает символ с заданным номером

function Ord(ch: Char): Integer
Возвращает номер заданного символа

procedure SetLength(var S: String; L: Integer)
Устанавливает длину строки

Вполне хватит для поиска подстроки для алгоритма без вложенного цикла

Breadfan
15.10.2008, 16:00
В выложенных примерах спрашивал кто что может подсказать по работе со строками, все промолчали вот так и получилось - главное работает

PanAm
16.10.2008, 14:55
я наверно так написал бы
как пример работы со строками, в работе не проверялся
//Анализ HTML кода
procedure HTMLParsing(S : string);
var
p : integer; //позиция в тексте
code : string;
begin
p := Pos('bypass -h ', S); //находим
while p > 0 do begin //а вдруг не нашли
code := copy(S, p+10, 16); //в Code копируем кусок из 16 символов,
//пропуская 'bypass -h '
/////////////////////////////////////////////////
// .... тут ваш код для обработки строки code
/////////////////////////////////////////////////
Delete(S, 1, p+26); //удаляем обработанный кусок строки
p := Pos('bypass -h ', S); //ищем дальше
end; //кстати тут точка с запятой не нужна,
//но форум тогда не подсвечивает end
end;

Var
HTML : String;

begin
if FromServer and (pck[1]=#$19) then begin
HTML := ReadS(6); //Считываем текст диалога
HTMLParsing(HTML) //и передаем на анализ
end; //и тут ; не надо ))))
end.

creaDo
18.10.2008, 22:20
ПОлучай спасибку. Еше 1 вопросик:
После каких функций в end надо ставить ; а после каких ненадо?
(не в етом с крипте а вообще)

PanAm
20.10.2008, 14:59
чесно говоря хз :confused:
не найду сейчас точного описания, тут почитайне
http://wm-help.net/books-online/print-page/22873/22873-3.html
начало статьи описывает немного синтаксис паскаля.
Вобсчем, главное перед ELSE не ставить. :)

xkor
23.10.2008, 09:49
creaDo, после end нельзя ставить точку с запятой только если за ним идёт else в блоке if ... then begin ... end else begin ... end;