PDA

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


z0mbie
27.04.2009, 21:56
Напишите пожалуйста юлин скрипт под интерлюд.

{ Юля Сегодня, 11:46
Помню этот небольшой скриптик принес мне просто бешеное богатсво на сервере
где я играла, но поскольку я больше не играю, то выкладываю в массы суть
проста, программа ведет учет всех персов в округе, когда по вашему
персу-торговцу кликают, она пишет в френдчат ему предложение купить стрелу
и обешание за это рассказать анекдотик. за покупку программа конечно же как
и обешала рассказывает анекдотик. как показывает практика, самая идеальная
цена чтобы клиенты купили как можно больше ваших стрел, для х1 - это не
более 3к, для х5 - 10к. а для привлечения внимания именно к вашему
торговцу, в титуле (для этого вам надо быть в клане) постоянно мигает
рожица и надпись "АНЕКДОТЫ". Все анекдоты грузяться с папки c:\l2jokes (в
аттаче уже готовый архив с 237 анекдотами), каждый анекдот в отдельном
файле, не более 255 символов. Пользуйтесь на здоровье
}
// copyright (c) 2006, 2007 Puella

var curpos: byte;
TITLE_DATA2: array [0..16] of string;

const
jokes_max = 237;

var
f: TStringList;
jokes: array [1..jokes_max] of string;
jokes_real: integer;
IDs: array [1..2000] of cardinal;
Names: array [1..2000] of String;
count: Integer;
MyID: Cardinal;
MyName: String;
m: TMemo;
t: TTimer;

InTimer: Boolean;

procedure OnTimerProc;
begin
InTimer := true;
buf := #$55;
WriteS(MyName);
WriteS(TITLE_DATA2[curpos]);
SendToServer;

curpos := curpos + 1;
if curpos > 16 then curpos := 0;

InTimer := false;
end;

procedure Init;
var i: byte;
begin
randomize;
count := 0;

f := TStringList.Create;
jokes_real := 0;
for i := 1 to jokes_max do
begin
try
f.LoadFromFile('C:\l2jokes\' + IntToStr(i) + '.txt');
jokes_real := jokes_real + 1;
except
end;
jokes[jokes_real] := f.Text;
end;
f.free;

TITLE_DATA2[0] := '@(o_O)@';
TITLE_DATA2[1] := '@(O_o)@';
TITLE_DATA2[2] := '@(o_O)@';
TITLE_DATA2[3] := '@(O_o)@';
TITLE_DATA2[4] := '';
TITLE_DATA2[5] := 'ANEKDOTI';
TITLE_DATA2[6] := '';
TITLE_DATA2[7] := 'ANEKDOTI';
TITLE_DATA2[8] := '';
TITLE_DATA2[9] := 'ANEKDOTI';
TITLE_DATA2[10] := '';
TITLE_DATA2[11] := '@(o_O)@';
TITLE_DATA2[12] := '@(O_o)@';
TITLE_DATA2[13] := '@(o_O)@';
TITLE_DATA2[14] := '@(O_o)@';
TITLE_DATA2[15] := '@(o_O)@';
TITLE_DATA2[16] := '@(O_o)@';

curpos := 0;

t := TTimer.Create(nil);
t.Enabled := false;
t.Interval := 2000;
t.OnTimer := @OnTimerProc;

ShowTab;

m:=TMemo.Create(UserTab);
m.parent:=UserTab;
m.align:=alClient;
m.ReadOnly:=true;
m.ScrollBars:=ssBoth;
m.lines.add('Анекдотов загружено: ' + inttostr(jokes_real));
end;

procedure Free;
begin
m.Free;
HideTab;

t.OnTimer := nil;
t.Enabled := false;
t.Interval := 0;
t.Free;
end;

function FindPlayer(ObjID: cardinal): integer;
var k: cardinal;
begin
result := -1;
if Count > 0 then
for k := 1 to Count do
if IDs[k] = ObjID then
begin
result := k;
break
end;
end;

var
i, k: integer;
objid: cardinal;
name: string;
begin
if FromServer then
case pck[1] of
#$64:
begin
i := 2;
if ReadD(i) = 380 then {S1_PURCHASED_S3_S2_s}
begin
i := i + 4*2;
name := ReadS(i);
if (name = '') then
begin
// внесем в лог (blacklist)
m.Lines.Add(TimeToStr(now)+': '+name+' purchased (BLACKLISTED)');
end
else
begin
while (InTimer = true) do i := i;

buf := #$CC;
i := int(random * jokes_real) + 1;
WriteS(jokes[i]);
WriteS(name);
SendToServer;

if (Length(m.Lines.Text) > 60000) then m.Lines.Text := '<cleared>';
// внесем в лог
m.Lines.Add(TimeToStr(now)+': '+name+' purchased');
m.Lines.Add('> ' + jokes[i]);
end;
end
end;

#$03: // CharInfo
begin
i := 4 + 4 * 4 - 2;
objid := ReadD(i);

i := FindPlayer(ObjID);

if i = -1 then
begin
i := 4 + 4 * 5 - 2;
name := ReadS(i);
// blacklist
if (name = '') then
begin
// (none)
end
else begin
// добавление
count := count + 1;
IDs[count] := ObjID;
Names[count] := name;
//m.Lines.Add(IntToStr(count) + ' - ' + Format('%x', [ObjId])+' = '+ Names[count]);
end;
end;
end;

#$04: //UserInfo
begin
i := 2 + 4*4;
MyID := ReadD(i);
MyName := ReadS(i);
t.Enabled := true;
end;

#$12: // ObjectDelete
begin
i := 2;
objid := ReadD(i);

i := FindPlayer(objid);

if i <> -1 then
begin
IDs[i] := IDs[count];
Names[i] := Names[count];
count := count - 1;
end
end;

#$29: //TargetSeleted
begin
i := 2;
objid := ReadD(i);

if ReadD(i) <> MyID then exit;

i := FindPlayer(objid);

if i <> -1 then
begin
while (InTimer = true) do i := i;

buf := #$CC;
WriteS('Привет, '+names[i]+'! Я бот! Купи у меня стрел и я, в благодарность за это, расскажу тебе анекдот или стишок на тему LineAge2! ;)');
WriteS(names[i]);
SendToServer;
// внесем в лог
m.Lines.Add(TimeToStr(now)+': '+names[i]);
end
end;
end;
end.

NLObP
27.04.2009, 22:59
Напишите пожалуйста юлин скрипт под интерлюд.

Почитай форум, по изучай пакеты. Замени в скрипте ID пакетов на интерлюдские.

Xardas
27.04.2009, 23:10
что то я сомневаюсь, что на этом ты сделаешь кучу денег на шоке. Например потому что онлайн Шоков упал более чем вдвое...

z0mbie
28.04.2009, 11:02
Почитай форум, по изучай пакеты. Замени в скрипте ID пакетов на интерлюдские.

Немогу найти ID пакетов.Форум читал но так ничего и не понял:(

Добавлено через 51 секунду
что то я сомневаюсь, что на этом ты сделаешь кучу денег на шоке. Например потому что онлайн Шоков упал более чем вдвое...

Я играю не на шоке а на lineage-game.ru

NLObP
28.04.2009, 13:24
Немогу найти ID пакетов

Формат пакетов для Интерлюдии описан в файле packetsT0.ini, который есть в составе пакетхака и лежит в папке ./settings/

ps: пакеты описаны не все и не все верно.

DzumoHu4
28.04.2009, 14:57
Есть идея по интереснее, в общем человек кликает по торговцу ему в приват предложение отгодать загадку, он пишет ответ если совпадает то трейд и игроку выиграш

QaK
28.04.2009, 19:18
DzumoHu4, можно уж тогда в шаут орать загадки,допустим, первые 3 ПМ а правильных засчитывать, подсчитыват количество очков в конце викторины и выдавать приз победителю.

z0mbie
28.04.2009, 20:08
Я вот этот скрипт пробовал:
Бот рассказывающий анекдоты если у него кто то купил 1 соску .
Создайте папку C:\l2jokes запишите анекдоты в файлы 1.txt, 2.txt и тд.
jokes_max = 100; здесь поставьте количество анекдотов помните что длинна анекдота не должна превышать 255 символов.
MyName:='bobrul'; Поменяйте на своё имя.
if ReadD(i) = 1152 then {S1_PURCHASED_S3_S2_s} поменяйте ID соски С воин на любой другой предмета который будете продавать.
const
jokes_max = 15;

var
TITLE_DATA2: array [0..16] of string;
IDs: array [1..2000] of cardinal;
Names: array [1..2000] of String;
jokes: array [1..jokes_max] of string;
InTimer: Boolean;
curpos: byte;
f: TStringList;
t: TTimer;
m: TMemo;
MyName: String;
count: Integer;
MyID: Cardinal;
jokes_real: integer;

procedure OnTimerProc;
begin
InTimer := true;
buf := #$0B;
WriteS(MyName);
WriteS(TITLE_DATA2[curpos]);
SendToServer;

curpos := curpos + 1;
if curpos > 16 then curpos := 0;

InTimer := false;
end;

procedure Init;
var
i: byte;
begin
MyName:='Ruslan';
curpos := 0;

randomize;
count := 0;

f := TStringList.Create;
jokes_real := 0;
for i := 1 to jokes_max do
begin
try
f.LoadFromFile('C:\l2jokes\' + IntToStr(i) + '.txt');
jokes_real := jokes_real + 1;
except
end;
jokes[jokes_real] := f.Text;
end;
f.free;

//Создаю таймер
t := TTimer.Create(nil);
t.Enabled := false;
t.Interval := 700;
t.OnTimer := @OnTimerProc;


TITLE_DATA2[0] := '@(o_O)@';
TITLE_DATA2[1] := '@(O_o)@';
TITLE_DATA2[2] := '@(o_O)@';
TITLE_DATA2[3] := '@(O_o)@';
TITLE_DATA2[4] := '';
TITLE_DATA2[5] := 'ANEKDOTI';
TITLE_DATA2[6] := '';
TITLE_DATA2[7] := 'ANEKDOTI';
TITLE_DATA2[8] := '';
TITLE_DATA2[9] := 'ANEKDOTI';
TITLE_DATA2[10] := '';
TITLE_DATA2[11] := '@(o_O)@';
TITLE_DATA2[12] := '@(O_o)@';
TITLE_DATA2[13] := '@(o_O)@';
TITLE_DATA2[14] := '@(O_o)@';
TITLE_DATA2[15] := '@(o_O)@';
TITLE_DATA2[16] := '@(O_o)@';

ShowTab;
//Создаю TMemo
m:=TMemo.Create(UserTab);
m.parent:=UserTab;
m.align:=alClient;
m.ReadOnly:=true;
m.ScrollBars:=ssBoth;
m.lines.add('Анекдотов загружено: ' + inttostr(jokes_real));
end;
procedure Free;
begin
t.OnTimer := nil;
t.Enabled := false;
t.Interval := 0;
t.Free;

m.Free;
HideTab;
end;

function FindPlayer(ObjID: cardinal): integer; //Ищет ObjID в массиве IDs
var k: cardinal;
begin
result := -1;
if Count > 0 then
for k := 1 to Count do
if IDs[k] = ObjID then
begin
result := k;
break
end;
end;

var
i: integer;
objid: cardinal;
name: string;
begin

if FromServer then
case pck[1] of
#$31: // CharInfo
begin
i := 18; //В етой позиции находиться ObjectID в пакете CharInfo
objid := ReadD(i);
i := FindPlayer(ObjID);
if i = -1 then
begin
i := 22; //В етой позиции находиться Name в пакете CharInfo
name := ReadS(i);
// Добавление имени в массив ников IDs это ObjectID и Names это Name
if (name = '') then
begin
// (none)
end
else begin
count := count + 1;
IDs[count] := ObjID;
Names[count] := name;
m.Lines.Add(IntToStr(count) + ' - ' + Format('%x', [ObjId])+' = '+ Names[count]);
end;
end;
end;

#$32: //UserInfo Ищет мой ObjectID
begin
i := 18;
MyID := ReadD(i);
i := 22;
MyName := ReadS(i);
//Включает таймер бегущей строки в том случае если мой ObjectID найден
//Тогда начинает работать бегущая строка
t.Enabled := true;
end;

#$23: //TargetSeleted
begin
i := 2;
objid := ReadD(i);
if ReadD(i) <> MyID then exit;
i := FindPlayer(objid);

if i <> -1 then
begin
buf := #$49;
WriteS('Привет, '+names[i]+'! Я бот! Купи у меня сосок и я, в благодарность за это, расскажу тебе анекдот или стишок на тему LineAge2! ;)');
WriteD(2);
WriteS(names[i]);
SendToServer;
// в лог
m.Lines.Add(TimeToStr(now)+': '+names[i]+'Взял вас в таргет.');
end;
end;

#$08: // ObjectDelete
begin
i := 2;
objid := ReadD(i);

i := FindPlayer(objid);

if i <> -1 then
begin
IDs[i] := IDs[count];
Names[i] := Names[count];
count := count - 1;
end;
end;

#$62:
begin
i := 2;
if ReadD(i) = 1152 then {S1_PURCHASED_S3_S2_s}
begin
i := i + 4*2;
name := ReadS(i);
buf := #$49;
i := int(random * jokes_real) + 1;
WriteS(jokes[i]);
WriteD(2);
WriteS(name);
SendToServer;

if (Length(m.Lines.Text) > 1000) then m.Lines.Text := '<cleared>';
// внесем в лог
m.Lines.Add(TimeToStr(now)+': '+name+' purchased');
m.Lines.Add('> ' + jokes[i]);


end;
end;

end;
end.

Но у меня всё время ошибка выходит. Мой ник руслан. 15 анекдотов. Нада ли быть в клане чтобы этот скрипт работал?

DzumoHu4
29.04.2009, 01:15
DzumoHu4, можно уж тогда в шаут орать загадки,допустим, первые 3 ПМ а правильных засчитывать, подсчитыват количество очков в конце викторины и выдавать приз победителю.

Здорово, правда врятли кто то догадается что "Апельсин в ящике" это официальное поздравление президента украины с Новым Годом, или "Самый быстрый звёздный воин"(ответ) Черновецкий

z0mbie
29.04.2009, 17:57
Формат пакетов для Интерлюдии описан в файле packetsT0.ini, который есть в составе пакетхака и лежит в папке ./settings/

ps: пакеты описаны не все и не все верно.

А в файле ItemsID id вещей для интерлюд?

Grinch
29.04.2009, 22:19
z0mbie, прочти ФАГ целиком.

z0mbie
30.04.2009, 12:59
Вроде всё получилось но непокупаеться то что я продаю,а потом и вовсе анекдот непришёл