Может кто то,кому нетрудно переделать Юлин скрипт,так чтобы он был привязан к одному нику?,а то немогу играть в 2 окна,скрипт начинает издеваться над титулом основного чара.И ещё(если кто то конечно за это возьмётся просто так)сделать чтобы рассказывался анекдот не за то что у меня чтото купят,а наоборот продадут.Сам этого сделать точно несмогу,так как неразбираюсь,я только в титуле переписал "ANEKDOTI"на "Анекдоты" и текст обращения к игрокам,а больше ничего незнаю :oops:
Может кто то,кому нетрудно переделать Юлин скрипт,так чтобы он был привязан к одному нику?,а то немогу играть в 2 окна,скрипт начинает издеваться над титулом основного чара.И ещё(если кто то конечно за это возьмётся просто так)сделать чтобы рассказывался анекдот не за то что у меня чтото купят,а наоборот продадут.Сам этого сделать точно несмогу,так как неразбираюсь,я только в титуле переписал "ANEKDOTI"на "Анекдоты" и текст обращения к игрокам,а больше ничего незнаю :oops:
Код:
// copyright (c) 2006, 2007 Puella
//модифицировано by NLObP
//Может работать одновременно несколько скриптов.
//Необходимо изменить константу MyNAME!!!
{суть проста, программа ведет учет всех персов в округе, когда по вашему
персу-торговцу кликают, она пишет в френдчат ему предложение купить стрелу
и обешание за это рассказать анекдотик. за покупку программа конечно же как
и обешала рассказывает анекдотик. как показывает практика, самая идеальная
цена чтобы клиенты купили как можно больше ваших стрел, для х1 - это не
более 3к, для х5 - 10к. а для привлечения внимания именно к вашему
торговцу, в титуле (для этого вам надо быть в клане) постоянно мигает
рожица и надпись "АНЕКДОТЫ". Все анекдоты грузяться с папки c:\l2jokes (в
аттаче уже готовый архив с 237 анекдотами), каждый анекдот в отдельном
файле, не более 255 символов}
const
MyName='впиши_сюда_имя чара';
jokes_max = 237;
var
curpos: byte;
TITLE_DATA2: array [0..16] of string;
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;
frm: TForm;
m: TMemo;
t: TTimer;
InTimer: Boolean;
procedure OnTimerProc;
begin
InTimer := true;
buf := #$55;
WriteS(MyName);
WriteS(TITLE_DATA2[curpos]);
SendToServerEx(MyName);
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;
//форма
frm := TForm.Create(nil);
frm.Caption := 'L2Jokes '+MyName;
frm.BorderStyle := bsSizeable;
frm.Position := poScreenCenter;
frm.Width:=500;
frm.Height:=500;
m:=TMemo.Create(frm);
m.parent:=frm;
m.align:=alClient;
m.ReadOnly:=true;
m.ScrollBars:=ssBoth;
m.lines.add('Анекдотов загружено: ' + inttostr(jokes_real));
frm.Show;
end;
procedure Free;
begin
m.Free;
frm.Free;
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 (ConnectName=MyName) and 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);
SendToServerEx(MyName);
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]+'! Я '+MyName+'! Купи у меня стрел и я, в благодарность за это, расскажу тебе анекдот или стишок на тему LineAge2! ;)');
WriteS(names[i]);
SendToServerEx(MyName);
// внесем в лог
m.Lines.Add(TimeToStr(now)+': '+names[i]);
end
end;
end;
end.
xkor, подскажи плиз как запустить скрипт для автоматической сдачи манора, никак не могу понять... там вроде и описано...но чет неполучается никак :(
rexx ты попробуй есчё раз прочитать.. особенно первые строчки там про автора написано прямым текстом и попробуй тупо прочитать пол темы да будет бот и тема про манор посвещена это вопросу, и прочитай правила форума, помоч можно но задавай вопрос конкретней я думаю xkor отправил телепатов в отпуск, жаль конечно :(
нехорошо ставить слип на основной поток :<
там вместо do ; должно было быть do Application.ProcessMessages;
альтернатива делаю, только будут обрабатываться ProcessMessages...
Код:
procedure Delay(ATimeout: Integer);
var
t: Cardinal;
begin
while ATimeout > 0 do
begin
t := GetTickCount;
if MsgWaitForMultipleObjects(0, nil^, False, ATimeOut, QS_ALLINPUT) = WAIT_TIMEOUT then
Exit;
Application.ProcessMessages;
dec(ATimeout, GetTickCount - t);
end;
end;
Последний раз редактировалось NLObP, 09.05.2008 в 15:42.
Таймер со сквозным проходом (mod)
позволяет задавать переменную, по которой будет проверяться время
Код: Выделить всё
function Wait(var tick: integer;Timewait: Integer): Boolean;
// сквозная проверка без остановки скрипта (c)dmitry501
// modifed by Sh00rGo
var
t: integer;
begin
result:=false;
t:=Round(Time*86400);
if t>(tick+Timewait) then begin
if tick>0 then result:=true;
tick:=t;
end;
end;
Мучался, мучался, но так и не понял, как интервал можно сократить... подскажите подалста? Желательно, чтоб можно было задавать хотябы 0.5 секунды.
__________________
Если Вы недовольны моими действиями - то Вам сюда!
Мучался, мучался, но так и не понял, как интервал можно сократить... подскажите подалста? Желательно, чтоб можно было задавать хотябы 0.5 секунды.
В такой реализации можно писать 500 - это 0,5 сек
Код:
function Wait(var tick:integer; Timewait: Integer): Boolean;
//сквозная проверка без остановки скрипта (c)dmitry501
//modifed by Sh00rGo
var
t: integer;
begin
result:=false;
t:=Round(Time*86400);
if t>(tick+Timewait/1000) then begin
if tick>0 then result:=true;
tick:=t;
end;
end;