PDA

Просмотр полной версии : Рисую аденой.


bistriy
25.02.2009, 15:09
Вот на досуге за вечер написал скрипт рисование аденой.
Рисует почти все буквы . Всё в ваших руках модифицируйте скрипт .
Осталось добавить недостающие буквы и еще разобраться в отступах между буквами. Скрипт рабочий.

В скрипте проблемма помогите разобраться , когда запускаю скрипт виснет
управление чаром видно как он кидает адену но если щелкнуть левой кнопкой мыши по земле то чар не двигаеться а рисует пока не дорисует как мне сделать чтоб чар по щелчку мыши двигался во время работы скрипта ???

//Скрипт Рисуй аденой.
// MyName запишите свой ник.
// зайдите в игру запустите скрипт киньте 1 адену на землю.
//Пишет почти все буквы.
//Для использования скрипта создайте в директории C:\l2jokes\risuuadenoy
//файл 1.txt запишите в него строку.
var
MyName: String;
f: TStringList;
jokes: array [1..2] of string;
m: TMemo;
MyID: Cardinal;
MyName2: String;
i: Integer;
X, Y, Z: Integer;
X1, Y1, Z1: Integer;
gX: Integer;
N: Char;
MyTest: String;
MyI: Integer;
DL: Integer;
SI: String;
p: Integer;
smeshenie, smeshenie1: Integer;
v: Integer;
procedure Init; //It is called at script turn on
begin
MyName:='bobrul';
i:= 0;
gX := 1;
p := 1;
v := 0;

//Загружаю текст из файла 1.txt
f := TStringList.Create;
f.LoadFromFile('C:\l2jokes\risuuadenoy\' + IntToStr(1) + '.txt');
jokes[1] := f.Text;
f.free;

ShowTab;
//Создаю TMemo
m:=TMemo.Create(UserTab);
m.parent:=UserTab;
m.align:=alClient;
m.ReadOnly:=true;
m.ScrollBars:=ssBoth;
m.lines.add('Загружен текст из файла 1.txt :');
MyTest:=Trim(Lowercase(jokes[1]));
m.lines.add(MyTest); //В MyTest содержиться строка из файла.
MyI:=Length(MyTest); //Длина строки MyTest

end;

procedure Free; //It is called at script turn off
begin
//Уничтожаю TMemo
m.Free;
HideTab;
end;


procedure RisP; //Кидает адену на землю.
begin
buf := #$17;
buf := buf + HStr('A1 81 02 10 01 00 00 00');
WriteD(X); //X
WriteD(Y); //Y
WriteD(Z); //Z
SendToServer;
Delay(2000);
Application.ProcessMessages;
end;

procedure Vverx(J: Integer);
begin
gX:=1;
for gX:= 1 to J do
begin
Y:=Y - 5; //Рисует вверх.
Application.ProcessMessages;
RisP;
Application.ProcessMessages;
gX:=gX+1;
end;
gX:=1;
end;

procedure Vpravo(J: Integer);
begin
gX:=1;
for gX:= 1 to J do
begin
X:=X + 5; //Рисует вправо.
Application.ProcessMessages;
RisP;
Application.ProcessMessages;
gX:=gX+1;
end;
//Запомнить максимальное смещение вправо.
smeshenie := X - X1;

gX:=1;
end;

procedure Vniz(J: Integer);
begin
gX:=1;
for gX:= 1 to J do
begin
Y:=Y + 5; //Рисует вниз.
Application.ProcessMessages;
RisP;
Application.ProcessMessages;
gX:=gX+1;
end;
gX:=1;
end;

procedure Vlevo(J: Integer);
begin
gX:=1;
for gX:= 1 to J do
begin
X:=X - 5; //Рисует влево.
Application.ProcessMessages;
RisP;
Application.ProcessMessages;
gX:=gX+1;
end;
gX:=1;
end;

//Заготовки букв.

procedure BP(SI: String); // Рисование бувы п.
begin
if SI = 'а' then
begin
vverx(1);
Y:=Y - 5;
vpravo(1);
Y:=Y - 5;
vpravo(1);
Y:=Y - 5;
vpravo(1);
Y:=Y - 5;
vpravo(1);
Y:=Y - 5;
vpravo(1);
X:=X + 5;
vniz(1);
X:=X + 5;
vniz(1);
X:=X + 5;
vniz(1);
X:=X + 5;
vniz(1);
X:=X + 5;
vniz(1);
X:=X - 35; // Рисует вправо.
Y:=Y - 5; //ВВерх
vverx(1);
vpravo(4);
X:=X + 15;
//smeshenie1 := X - X1;
//smeshenie := smeshenie1;
end;

if SI = 'б' then
begin
vverx(6);
vpravo(3);
vverx(1);
X:=X - 15; // Рисует вправо.
Y:=Y + 30; //ВВерх
vpravo(3);
vverx(3);
vlevo(2);
end;

if SI = 'в' then
begin
vverx(6);
vpravo(3);
vniz(2);
vlevo(2);
vniz(1);
vpravo(1);
X:=X + 5; // Рисует вправо.
vniz(2);
vlevo(2);
end;

if SI = 'г' then
begin
vverx(6);
vpravo(3);
vniz(2);
end;

if SI = 'д' then
begin
vverx(2);
vpravo(5);
vniz(1);
X:=X - 20; // Рисует вправо.
Y:=Y - 5; //ВВерх
vverx(4);
vpravo(3);
vniz(3);
end;

if SI = 'и' then
begin
vverx(6);
Y:=Y + 20;
vpravo(1);
Y:=Y - 5;
vpravo(1);
Y:=Y - 5;
vpravo(1);
Y:=Y - 5;
vpravo(1);
Y:=Y - 5;
vpravo(1);
vniz(5);
end;



if SI = 'е' then
begin
Y:=Y - 5;
vverx(3);
Y:=Y - 5;
vpravo(1);
Y:=Y - 5;
vpravo(2);
X:=X + 5;
vniz(1);
X:=X + 5;
vniz(1);
vlevo(4);
Y:=Y + 10;
vniz(1);
vpravo(3);
Y:=Y - 5;
vpravo(1);
end;

if SI = 'ё' then
begin
Y:=Y - 5;
vverx(3);
Y:=Y - 5;
vpravo(1);
Y:=Y - 5;
vpravo(2);
X:=X + 5;
vniz(1);
X:=X + 5;
vniz(1);
vlevo(4);
Y:=Y + 10;
vniz(1);
vpravo(3);
Y:=Y - 5;
vpravo(1);
Y:=Y - 30;
vlevo(1);
X:=X - 10;
vlevo(1);
end;

if SI = 'ж' then
begin
vverx(1);
Y:=Y - 5;
vpravo(1);
Y:=Y - 5;
vpravo(1);
vverx(1);
X:=X - 5;
vverx(1);
X:=X + 5;
vverx(1);
X:=X + 10;
vpravo(1);
vniz(5);
X:=X + 10;
vpravo(1);
Y:=Y - 5;
vlevo(1);
Y:=Y - 5;
vlevo(1);
vverx(1);
X:=X + 5;
vverx(1);
X:=X + 5;
vverx(1);
end;

if SI = 'з' then
begin
vverx(1);
vpravo(4);
Y:=Y - 5;
vpravo(1);
vverx(1);
Y:=Y - 5;
vlevo(4);
Y:=Y - 10;
vlevo(1);
vpravo(5);
vniz(1);
end;

if SI = 'п' then
begin
vverx(6);
vpravo(3);
vniz(5);
end;

if SI = 'р' then
begin
vverx(6);
vpravo(3);
vniz(3);
vlevo(2);
end;

if SI = 'с' then
begin
vverx(6);
vpravo(3);
X:=X - 15; // Рисует вправо.
Y:=Y + 25; //ВВерх
vpravo(3);
end;

if SI = 'т' then
begin
Y:=Y - 20; //ВВерх
vverx(2);
vpravo(4);
vniz(1);
X:=X - 5; // Рисует вправо.
vlevo(1);
vniz(4);
end;

if SI = 'у' then
begin
vverx(1);
Y:=Y - 20; //ВВерх
vverx(1);
X:=X + 5; // Рисует вправо.
vniz(1);
X:=X + 5; // Рисует вправо.
vniz(2);
X:=X - 5; // Рисует вправо.
vniz(1);
X:=X + 10; // Рисует вправо.
Y:=Y - 5; //ВВерх
vverx(3);
X:=X + 15;
end;

if SI = 'ф' then
begin
Y:=Y - 15; //ВВерх
vverx(1);
Y:=Y - 5; //ВВерх
vpravo(7);
X:=X + 5; // Рисует вправо.
vniz(1);
X:=X - 5; // Рисует вправо.
vniz(1);
vlevo(6);
X:=X + 15; // Рисует вправо.
Y:=Y - 10; //ВВерх
vverx(1);
Y:=Y + 5; //ВВерх
vniz(1);
Y:=Y + 5; //ВВерх
vniz(2);
end;

if SI = 'х' then
begin
vverx(1);
Y:=Y - 20; //ВВерх
vverx(1);
X:=X + 5;
vniz(1);
X:=X + 5;
vniz(1);
X:=X + 5;
vniz(1);
X:=X + 5;
vniz(1);
X:=X + 5;
vniz(1);
X:=X - 20;
vverx(1);
X:=X + 5;
vverx(1);
X:=X + 5;
vverx(1);
X:=X + 5;
vverx(1);
X:=X + 5;
vverx(1);
end;

if SI = 'ц' then
begin
vverx(6);
Y:=Y + 25;
vpravo(3);
vverx(5);
Y:=Y + 25;
X:=X + 5;
vniz(1);
X:=X + 5;
vniz(2);
end;

if SI = 'ч' then
begin
Y:=Y - 10;
vverx(4);
Y:=Y + 15;
vpravo(3);
vverx(3);
Y:=Y + 15;
vniz(2);
vlevo(1);
X:=X + 5;
vpravo(1);
Y:=Y - 25;
X:=X - 5;
vlevo(1);
X:=X - 10;
vlevo(1);
end;

//Запомню максимальное смещение вправо.

end;


begin

if FromClient then
case pck[1] of
#$17:
begin
if p = 1 then
begin
X := ReadD(10);
Y := ReadD(14);
Z := ReadD(18);

X1 := ReadD(10);
Y1 := ReadD(14);
Z1 := ReadD(18);

p := 2;
end;
//Подходим ближе к тому месту где будем рисовать.
buf := #$0F;
WriteD(X); //X
WriteD(Y + 10); //Y
WriteD(Z); //Z
WriteD(X); //X
WriteD(Y); //Y
WriteD(Z); //Z
buf := buf + HStr('01 00 00 00 ');
SendToServer;
Delay(2000);
Application.ProcessMessages;

for DL:= 1 to MyI do //MyI длина строки MyTest
begin
SI:=Copy(MyTest,DL,1);
m.lines.add(SI);
BP(SI); //Рисую все буквы по порядку.
SI := '';
//Возвращаю позицию в позицию для рисования следующей буквы.
X := X1 + smeshenie + 10; //Перевод вправо на 10 позиций чтобы рисовать следующую букву.
v := v - 5;
Y := Y1;
Z := Z1;
//перемещение вправо перед рисованием следующей буквы.
buf := #$0F;
WriteD(X); //X
WriteD(Y + 10); //Y
WriteD(Z); //Z
WriteD(X); //X
WriteD(Y); //Y
WriteD(Z); //Z
buf := buf + HStr('01 00 00 00 ');
SendToServer;
Delay(2000);
Application.ProcessMessages;
end;
v := 0;
p := 1;
end;
end;


end.

Еще вопрос кто нибудь подскажите. Хочу дописать скрипт.
План такой:
1. Поместить в файл например 'привет игра Lineage !'.
И вторая строка 'меня зовут bobrul'.
2. Прочитать слово из файла по буквам потом ворое третье и т д.
Закончилась строка перейти на вторую строку прочитать по буквам слово потом второе третье и тд.
3. При чтении каждой буквы рисовать её на земле. При переходе на новую строку переместить перса на исходную позицию и рисовать по буквам вторую строку и т д. пока не закончаться все буквы.

Исправил скрип


Вопрос: Как мне осуществить чтение слов из файла по буквам.
Как определить конец строки.
Как брать буквы из первой строки .
Как брать буквы из второй строки.
Как определить конец файла .

Пишу скрипты на заказ пишите сюда: bistriy@bk.ru

QaK
25.02.2009, 15:25
Всё в ваших руках модифицируйте скрипт .нафига? =)

ERASE
25.02.2009, 15:41
Я начинал делать похожую шнягу, но из-за отсутствия времени перестал.

Насколько я знаю, в паскале/дельфи конец файла - eof (возвращает true или false)... Тут не знаю. Тебе поможет мануал по Fast Script. Тут где-то выкладывали. Там должны быть функции работы с файлами.

Добавлено через 2 минуты
Кстати, у меня все это реализовано было непосредственно через координаты. Ну, там задавалось не "вправо(х)", "влево(х)", а рисование по самим координатам... Если время будет, допишу и выложу... Хотя, все говорят, что никому это не надо, тут все довольно-таки интересно)

QaK
25.02.2009, 15:55
Хотя, все говорят, что никому это не надо, тут все довольно-таки интересно)никому не надо пока готовое, хотябы 60% рабочее, кто-нить не выложит.
А вообще лучше сделать так: рисуешь в любом графическом редакторе черным по белому. Сохраняешь как матрицу нулей и единиц 0 - белый, 1 - черный, потом читаешь матрицу и, соответственно выкидываешь адену по всему массиву.
З.Ы. идея интересная, реализовывать - тупо лень =)

AD!
25.02.2009, 16:21
Был бот, сча название не помню, в него загружалась картинка и он ее реализовывал, красиво получалось, быстро рисовалось, но и банили тож быстро)

Добавлено через 54 секунды
L2Helper название его)

Krona
25.02.2009, 21:17
народ извините за скромный вопрос.... просто недавно начал писать скрипты те что в формате .SEC... и вот теперь смотрю на это и понимаю что это совершенно не такое ... скажите эти скрипты также пишутся просто по другому работают и другие команды или они ваще к валкеру никакого отношения не имеют?

QaK
26.02.2009, 06:28
Krona,
они ваще к валкеру никакого отношения не имеют?