PDA

Просмотр полной версии : Автобафер PP+SE


Alan
06.04.2008, 23:57
Вот слямдил идею навено у -=mks=- решил создать авто бафера. Задача у него за разные суммы кидать разные бафы, те зок воин, 25 лучнег, 20 маг. так вот это я осилил(в скрипте тока на 30 пока прописал, дальше не делал уперся в пару вопросов). вопрос как сделать что бы он кидал после трейда патю. 29 пакет крутил и так и сяк 8)
после бафа выходил из пати, ну и ессно не бежал за ним дальше, решить это наверное можно кидать таргет на сешку что рядом будет стоять. Вопрос второй как бы прикрутить, те к сумме например 30к чтобы сешка кидала вампирик, на 20 вилд и эмпавер. И уже из области фантастики заливала манку пп.

зы
Этот скрипт работает криво, бафает как хочет 8) те я тестил тока первую часть на 30к (тк бафы прописал тока там, остальные не правил пока)те криво, он может кидать в разном порядке и не всегда кидает все бафы.
понятное дело что тут ошибки, профи прошу подправить, подсказать идею как осуществить мою задумку. Пасибо за внимание..........

//by mks
//Бот баффер PP, баффает за 30-20к

const //баффы
b1='2F 10 04 00 00 00 00 00 00 00'; // Shield
b2='2F 26 04 00 00 00 00 00 00 00'; // Berserker Spirit
b3='2F 3D 04 00 00 00 00 00 00 00'; // Acumen
b4='2F B4 04 00 00 00 00 00 00 00'; // Wind Walk
b5='2F 36 04 00 00 00 00 00 00 00'; // Concentration
b6='2F 15 04 00 00 00 00 00 00 00'; // Bless the Body
b7='2F 18 04 00 00 00 00 00 00 00'; // Bless the Soul
b8='2F 14 04 00 00 00 00 00 00 00'; // Regeneration
b9='2F 0B 04 00 00 00 00 00 00 00'; // ментал
b10='2F 35 04 00 00 00 00 00 00 00'; // фокус
b11='2F 36 04 00 00 00 00 00 00 00'; // кон
b12='2F A7 04 00 00 00 00 00 00 00'; // резист к огню
b13='2F 14 04 00 00 00 00 00 00 00'; // ХП реген
b14='2F 0C 04 00 00 00 00 00 00 00'; // маджик барьер
b15='2F 6C 05 00 00 00 00 00 00 00'; // гритер ПА
b16='2F DA 04 00 00 00 00 00 00 00'; // деф виспер
b17='2F D8 04 00 00 00 00 00 00 00'; // гвиданс
var
Target: string;
prof,x,z,y: integer;
timer1: TTimer;

procedure Init;
begin
timer1:=TTimer.Create(nil);
timer1.OnTimer:=@OnTimer;
timer1.enabled:=true;
timer1.interval:=3500;
end;

procedure OnTimer(Sender: TObject);
begin
case x of
1: begin
buf:=hstr(b1);
sendtoserver;
x:=x+1;
end;
2: begin
buf:=hstr(b2);
sendtoserver;
x:=x+1;
end;
3: begin
buf:=hstr(b3);
sendtoserver;
x:=x+1;
end;
4: begin
buf:=hstr(b4);
sendtoserver;
x:=x+1;
end;
5: begin
buf:=hstr(b5);
sendtoserver;
x:=x+1;
end;
6: begin
buf:=hstr(b6);
sendtoserver;
x:=x+1;
end;
7: begin
buf:=hstr(b7);
sendtoserver;
x:=x+1;
end;4: begin
buf:=hstr(b4);
sendtoserver;
x:=x+1;
end;
8: begin
buf:=hstr(b8);
sendtoserver;
x:=x+1;
end;
9: begin
buf:=hstr(b9);
sendtoserver;
x:=x+1;
end;
10: begin
buf:=hstr(b10);
sendtoserver;
x:=x+1;
end;
11: begin
buf:=hstr(b11);
sendtoserver;
x:=x+1;
end;
12: begin
buf:=hstr(b12);
sendtoserver;
x:=x+1;
end;
13: begin
buf:=hstr(b13);
sendtoserver;
x:=x+1;
end;
14: begin
buf:=hstr(b14);
sendtoserver;
x:=x+1;
end;
15: begin
buf:=hstr(b15);
sendtoserver;
x:=x+1;
end;
16: begin
buf:=hstr(b16);
sendtoserver;
x:=x+1;
end;
17: begin
buf:=hstr(b17);
sendtoserver;
x:=0;
end;
end;

begin
case z of
1: begin
buf:=hstr(b5);
sendtoserver;
z:=z+1;
end;
2: begin
buf:=hstr(b6);
sendtoserver;
z:=z+1;
end;
3: begin
buf:=hstr(b7);
sendtoserver;
z:=z+1;
end;
4: begin
buf:=hstr(b8);
sendtoserver;
z:=0;
end;
end;
begin

case y of
1: begin
buf:=hstr(b1);
sendtoserver;
y:=y+1;
end;
2: begin
buf:=hstr(b2);
sendtoserver;
y:=y+1;
end;
3: begin
buf:=hstr(b3);
sendtoserver;
y:=y+1;
end;
4: begin
buf:=hstr(b4);
sendtoserver;
y:=0;
end;
end;
end;
end;
end;

procedure Free;
begin
timer1.Free;
end;
///////////////////////////////////////////////////////////////////
begin

if FromServer and (pck[1]=#$5E) and (x=0) then //подкорректил немного, что б бот не принимал трэйд когда кого-то уже баффает 06.08.07
begin
Target:=#$04+pck[2]+pck[3]+pck[4]+pck[5];
buf:=hstr('44 01 00 00 00');
sendtoserver; //если кидают трэйд, то принимать
end;
if fromclient and (pck[1]=#$44) then pck:=''; {клиент почему-то иногда автоматом отылает кэнсл трэйд, поэтому убиватю этот пакет}
if fromserver and (pck[1]=#$21) then
begin
if pck[14]+pck[15]=#$30#$75 then {если в трэйд положили 30к}
begin
buf:=hstr('17 01 00 00 00');//подтвердить трэйд
prof:=1;
end;
if pck[14]+pck[15]=#$A8#$61 then {если в трэйд положили 25к}
begin
buf:=hstr('17 01 00 00 00');//подтвердить трэйд
prof:=2;
end;
if pck[14]+pck[15]=#$20#$4E then {если в трэйд положили 20к}
begin
buf:=hstr('17 01 00 00 00');//подтвердить трэйд
prof:=3;
end;
if prof=0 then buf:=hstr('17 00 00 00 00');//отмена трэйда
sendtoserver;
end;
if FromServer and (pck[1]+pck[2]=#$22#$01) then
begin
buf:=target;
sendtoserver;

if prof=1 then
begin
x:=1;
prof:=0;
end;
if prof=2 then
begin
z:=1;
prof:=0;
end;
if prof=3 then
begin
y:=1;
prof:=0;
end;
end;
end.

Alan
10.04.2008, 01:05
8)ап........ подскажите как организовать патю после трейда, остальное сделал, вроде работает...... кой чего подправил...... хотя еще с сешкой не решил вопрос.. 8)

QaK
10.04.2008, 08:53
Перенесено в "Скриптинг".
З.Ы. Чувак, юзай теги [ code ] [/ code ] без пробелов).

Alan
10.04.2008, 10:29
пасибо, красиво оформил......... :)

PanAm
10.04.2008, 17:40
уже насколько раз писал....
и до сих пор не понял одной вещи.
зачем брать в пати при бафе? ПП и СЕ не варк, и в оффпати набафают.

Добавлено спустя 1 минуту 32 секунды:
а даже если в пати, то легко узнать профы сопартийцев, и легко написать каму что бафать.

10.04.2008, 17:46
пати нужно для берса.

QaK
10.04.2008, 19:07
пати нужно для берса.
это еще почему?

Grinch
11.04.2008, 08:17
это еще почему?
потому что это факт с с5 нужен пати что кинуть берс или холивеапон, а то для пп на олимпе вообзе сказка на тока кидаешь берс и холи веапон а себе сетлый щит :) и дамаг падает по тебе

Breadfan
29.04.2008, 12:46
Вот тоже попытался коечто слямзить и добавить но....как говорится "дело было не в машине.." вот оно:
//основа by mks
//Бот баффер ПП, должен бафать за 100к и 150к

const //баффы 3й профы
bufer='хххххххх';
b1='2F 0B 04 00 00 00 00 00 00 00 '; //mental shield
b2='2F 0C 04 00 00 00 00 00 00 00 '; //magic barrier
b3='2F 10 04 00 00 00 00 00 00 00 '; // shield
b4='2F 14 04 00 00 00 00 00 00 00 '; // regeneration
b5='2F 15 04 00 00 00 00 00 00 00 '; // bless body
b6='2F 18 04 00 00 00 00 00 00 00 '; //bless soul
b7='2F 2c 04 00 00 00 00 00 00 00 '; //might
b8='2F 35 04 00 00 00 00 00 00 00 '; //focus
b9='2F d8 04 00 00 00 00 00 00 00 '; //guidance
b11='2F 3e 04 00 00 00 00 00 00 00 '; //haste
b10='2F B4 04 00 00 00 00 00 00 00 '; // Wind walk
b12='2F da 04 00 00 00 00 00 00 00 '; //death wisper
b13='2F 26 04 00 00 00 00 00 00 00 '; //berserk spirit
b14='2F 3d 04 00 00 00 00 00 00 00 '; //acumen
b15='2F 36 04 00 00 00 00 00 00 00 '; //concentration
b16='2F db 04 00 00 00 00 00 00 00 '; //bless shield
var
Target: string;
prof,x: integer;
timer1: TTimer;

procedure Init;
begin
timer1:=TTimer.Create(nil);
timer1.OnTimer:=@OnTimer;
timer1.enabled:=true;
timer1.interval:=2500;
x:=0
end;

procedure OnTimer(Sender: TObject);
begin
case x of
1: begin
buf:=hstr(b1);
SendToServerEx(bufer);
x:=x+1;
end;
2: begin
buf:=hstr(b2);
SendToServerEx(bufer);
x:=x+1;
end;
3: begin
buf:=hstr(b3);
SendToServerEx(bufer);
x:=x+1;
end;
4: begin
buf:=hstr(b4);
SendToServerEx(bufer);
x:=x+1;
end;
5: begin
buf:=hstr(b5);
SendToServerEx(bufer);
x:=x+1;
end;
6: begin
buf:=hstr(b6);
SendToServerEx(bufer);
x:=x+1;
end;
7: begin
if (prof=1) then begin buf:=hstr(b7); SendToServerEx(bufer); end;
x:=x+1;
end;
8: begin
buf:=hstr(b8);
SendToServerEx(bufer);
x:=x+1;
end;
9: begin
if (prof=1) then begin buf:=hstr(b9); SendToServerEx(bufer); end;
x:=x+1
end;
10: begin
buf:=hstr(b10);
SendToServerEx(bufer);
x:=x+1;
end;
11: begin
if (prof=1) then begin buf:=hstr(b11); SendToServerEx(bufer); end;
x:=x+1;
end;
12: begin
if (prof=1) then begin buf:=hstr(b12); SendToServerEx(bufer); end;
x:=x+1
end;
13: begin
buf:=hstr(b13);
SendToServerEx(bufer);
x:=x+1;
end;
14: begin
if (prof=2) then begin buf:=hstr(b14); SendToServerEx(bufer); end;
x:=x+1;
end;
15: begin
if (prof=2) then begin buf:=hstr(b15); SendToServerEx(bufer); end;
x:=x+1;
end;
16: begin
buf:=hstr(b16);
SendToServerEx(bufer);
x:=0;
end;
end;
end;
procedure Free;
begin
timer1.Free;
end;
///////////////////////////////////////////////////////////////////
begin

if FromServer and (pck[1]=#$5E) and (x=0) and (ConnectName=bufer) then //подкорректил немного, что б бот не принимал трэйд когда кого-то уже баффает 06.08.07
begin
Target:=#$04+pck[2]+pck[3]+pck[4]+pck[5];
buf:=hstr('44 01 00 00 00');
SendToServerEx(bufer); //если кидают трэйд, то принимать
end;
if fromclient and (pck[1]=#$44) and (ConnectName=bufer) then pck:=''; {клиент почему-то иногда автоматом отылает кэнсл трэйд, поэтому убиватю этот пакет}
if fromserver and (pck[1]=#$21) then
begin
if pck[14]+pck[15]+pck[16]=#$f0#$49#$02 then {если в трэйд положили 5кк}
begin
buf:=hstr('17 01 00 00 00');//подтвердить трэйд
prof:=1;
end;
if pck[14]+pck[15]+pck[16]=#$a0#$86#$01 then {если в трэйд положили 5кк}
begin
buf:=hstr('17 01 00 00 00');//подтвердить трэйд
prof:=2
end;

if prof=0 then buf:=hstr('17 00 00 00 00');//отмена трэйда
SendToServerEx(bufer);
end;

if FromServer and (pck[1]+pck[2]=#$22#$01) then
begin
buf:=target;
SendToServerEx(bufer);

if prof<>0 then
begin
x:=1;
prof:=0;
end;

end;
end.

Переделал все как посоветовали, синтаксис исправлен, но вложенные условия почему то невыполняются:(

mks
29.04.2008, 13:56
Breadfan, ну при таком расскладе он уже и b9 не должен баффать, получается x доходит до x=8, далее x не повышается, так как в 8 кейсе ты убрал x:=x+1.

NLObP
29.04.2008, 14:36
Вот тоже попытался коечто слямзить и добавить но....как говорится "дело было не в машине.." вот оно:
[...]
если заремить строки проверки x=7 то пп работает, берет торг но бафает только до b(9), b(10) уже не идет...В чем ошибка моя подскажите

Ты забыл про конструкцию типа:
if X then Y;
if X then begin X1; X2; X3; end;

Так по идее должно работать (не забываем inc(x) делать):
begin
case x of
1: begin
buf:=hstr(b1);
SendToServerEx(bufer);
inc(x);
end;
2: begin
buf:=hstr(b2);
SendToServerEx(bufer);
inc(x);
end;
3: begin
buf:=hstr(b3);
SendToServerEx(bufer);
inc(x);
end;
4: begin
buf:=hstr(b4);
SendToServerEx(bufer);
inc(x);
end;
5: begin
buf:=hstr(b5);
SendToServerEx(bufer);
inc(x);
end;
6: begin
buf:=hstr(b6);
SendToServerEx(bufer);
inc(x);
end;
7: begin
if (prof=2) then begin
buf:=hstr(b7);
SendToServerEx(bufer);
end;
inc(x);
end;
8: begin
if (prof=1) then begin
buf:=hstr(b8);
SendToServerEx(bufer);
end;
inc(x);
end;
9: begin
buf:=hstr(b9);
SendToServerEx(bufer);
inc(x);
end;
10: begin
buf:=hstr(b10);
SendToServerEx(bufer);
inc(x);
end;
11: begin
if (prof=1) then begin
buf:=hstr(b11);
SendToServerEx(bufer);
end;
inc(x);
end;
12: begin
buf:=hstr(b12);
SendToServerEx(bufer);
inc(x);
end;
13: begin
buf:=hstr(b13);
SendToServerEx(bufer);
inc(x);
end;
14: begin
if (prof=2) then begin
buf:=hstr(b14);
SendToServerEx(bufer);
end;
inc(x);
end;
15: begin
if (prof=2) then begin
buf:=hstr(b15);
SendToServerEx(bufer);
end;
x:=0;
end;
end;
end;

Breadfan
29.04.2008, 17:37
Переделал скрипт, сейчас синтаксис в порядке, но бафает все равно только до WindWalk дальше останавливается несмотря ни на что, несрабатывают вложенные условия..или тут другой способ добавить их?

mks
29.04.2008, 17:59
Breadfan,

if prof<>0 then
begin
x:=1;
// prof:=0;//убери эту строчку, вставь ее в последний бафф(16)
end;

и будет тебе счастье)

Добавлено через 9 минут
хотя тогда в это условие надо добавить еще and (x=0)
и вообще я тут все бы переделал, у тебя получается если он не баффает не нужный бафф операясь на переменную prof, то 2.5сек на этот бафф один фиг будет отсчитывать

NLObP
29.04.2008, 23:31
9: begin
if (prof=1) then begin buf:=hstr(b9); SendToServerEx(bufer); end;
x:=x+1
end;
12: begin
if (prof=1) then begin buf:=hstr(b12); SendToServerEx(bufer); end;
x:=x+1
end;

Не хватает ';' точки с запятой после x:=x+1!
Поверяй скрипт в пакетхаке нажатием кнопки "ПРОВЕРИТЬ СИНТАКСИС".

Breadfan
30.04.2008, 16:55
Не хватает ';' точки с запятой после x:=x+1!
Поверяй скрипт в пакетхаке нажатием кнопки "ПРОВЕРИТЬ СИНТАКСИС".
Это просто в коде пропушенно..сам скрипт проверку проходит, все нормально НО он не бафает бафы где стоят if...then... Вот в этом и трудность моя. Причем они не срабатывают в обоих случаях prof=1 и prof=2

mks
30.04.2008, 17:13
Breadfan,
ты похоже пропустил что я тебе написал чуть выше, у тебя переменной prof присваивается 0 одновременно с началом баффа, вот он и не баффает когда условие что prof=1 или 2

OlegDX
30.04.2008, 17:21
гон у вас это а не бот, по всем правилам
что оформления кода
что написанию бота
Любой нормальный сервер сразу забанит

mks
30.04.2008, 17:33
гон у вас это а не бот, по всем правилам
что оформления кода
что написанию бота
Любой нормальный сервер сразу забанит

по оформлению согласен....
а по поводу что что сервер сразу забанит, единственное место где серв может прочухать что это бот - пакет Action здесь отправляется не полный, ID таргета есть, а координат нет(Target:=#$04+pck[2]+pck[3]+pck[4]+pck[5];), а это не сложно поправить....

Breadfan
30.04.2008, 18:21
гон у вас это а не бот, по всем правилам
что оформления кода
что написанию бота
Любой нормальный сервер сразу забанит

Абсолютно согласен, дело в том что я вообще то работаю слесарем на заводе и абсолютно никак не связан с программированием....

OlegDX
30.04.2008, 19:45
Uses '.\Scripts\OlegDX by USES.txt';


const
HTML1='<html><body><center><img src="L2UI_CH3.herotower_deco" width=256 height=32><font color="LEVEL">Меню инвентаря "что я типо знаю"'+
'</font><br><font color="LEVEL">Автор: OlegDX</font><img src="L2UI.SquareWhite" width=260 height=1><img src="L2UI.SquareBlank" width=260 height=4><br1>';
HTML2='<br><img src="L2UI.SquareWhite" width=260 height=1><img src="L2UI.SquareBlank" width=260 height=4><br1></center></body></html>';



////////////////////////////////////////////////////////////////////////////////
var
SkillBaffCount,BaffID,BaffType,LiderID:Integer;
SkillBaff:array of integer;
Procedure BaffListAdd(SkillID:Integer;SkillName:String);
Begin
Inc(SkillBaffCount);
SetLength(SkillBaff,SkillBaffCount);
SkillBaff[SkillBaffCount-1]:=SkillID;
End;
Procedure ReBaffListCreate(BaffT:Integer=0);
Begin
BaffType:=BaffT;
SkillBaffCount:=0;
BaffListAdd(1085,'ACUMEN' );
BaffListAdd(1062,'BERSERK_SPIRIT');
BaffListAdd(1045,'BLESS_OF_BOODY');
BaffListAdd(1048,'BLESS_OF_SOUL' );
End;
Procedure BaffListCreate;
Begin
BaffType:=-1;
SkillBaffCount:=0;
BaffListAdd(1085,'ACUMEN' );
BaffListAdd(1086,'HASTE' );
BaffListAdd(1045,'BLESS_OF_BOODY');
BaffListAdd(1048,'BLESS_OF_SOUL' );
BaffListAdd(1036,'MAGIC_BARRIER' );
BaffListAdd(1243,'BLESS_SHIELD' );
BaffListAdd(1044,'REGENERATION' );
//BaffListAdd(1191,'RESIST_FIRE' );
BaffListAdd(1043,'HOLY_WEAPON' );
BaffListAdd(1062,'BERSERK_SPIRIT');
//BaffListAdd(1388,'GREATER_MIGTH' );
BaffListAdd(1389,'GREATER_SHIEL' );
End;

Procedure UsedBaff(Param:Integer=0);
var N:Integer;Done:Boolean;
Begin
Case Param of
0,1:BEGIN
DONE:=FALSE;
IF MyObject[ID]=0 THEN EXIT;
IF Param=0 THEN BaffID:=0;
IF BaffID>=SkillBaffCount THEN UsedBaff(2);
WHILE BaffID<SkillBaffCount DO BEGIN
FOR N:=1 TO mySkillCount DO
IF (SkillBaff[BaffID]= mySkillList[N-1,2]) THEN BEGIN DONE:=TRUE;BREAK; END;
INC(BaffID);
IF DONE THEN BEGIN
UseSkill(SkillBaff[BaffID-1]);
Break;
END;
END;
End;
2,3,4,5:Begin
IF Param=3 THEN BaffListCreate;
IF Param=4 THEN ReBaffListCreate(0);
IF Param=5 THEN ReBaffListCreate(1);
IF Param=2 THEN BEGIN
BaffID:=SkillBaffCount;
IF BaffType=0 THEN SendMSGServer('GoEMP',3);
IF BaffType=1 THEN BEGIN
SendMSGServer('GoTARGET',3);
buf:=hstr('37 01 00');SendToServer;
Action(LiderID);
UsedBaff(3);
UsedBaff(0);
END;
END;
End;
End;
End;
////////////////////////////////////////////////////////////////////////////////
procedure ListSkill;
Var I:Integer; HTMLTEXT:String;
begin
HTMLTEXT:='';
FOR I:=1 TO mySkillCount DO BEGIN
IF mySkillList[I-1,0]=0 THEN BEGIN
HTMLTEXT:=HTMLTEXT+'<br>'+Format('%s(%.d)',[fListSkill.Values[IntToStr(mySkillList[I-1,2])],mySkillList[I-1,2]]);
END;
END;
ShowHTML(HTML1+HTMLTEXT+HTML2);
end;
////////////////////////////////////////////////////////////////////////////////


////////////////////////////////////////////////////////////////////////////////
//*** Вызывается при включении скрипта *****************************************
procedure Init;
begin
Init_old;
LiderID:=0;
UsedBaff(3);
end;
//*** Вызывается при выключении скрипта ****************************************
procedure Free;
begin
free_old;
end;
////////////////////////////////////////////////////////////////////////////////
//Основная часть скрипта вызывается при приходе каждого пакета если скрипт включен
begin
//----------------------------------------------------------------------------
if pck='' then exit;
//----------------------------------------------------------------------------
if FromServer then begin
Case pck[1] of
#$A6:BEGIN TargetID:=ReadD(2); END;
#$04:BEGIN ReadUserInfo; END;
#$58:BEGIN CreateSkillBase; END;
#$76:BEGIN IF ReadD(2)=MyObject[ID] THEN UsedBaff(1); END;
#$49:BEGIN IF ReadD(2)=MyObject[ID] THEN UsedBaff(2); END;
#$4A:Begin
PosIndex:=02;
ObjectID :=ReadD(PosIndex);
MesageType:=ReadD(PosIndex);
MesageStrg:=ReadS(PosIndex);
MesageStrg:=ReadS(PosIndex);
Case MesageType of
3:BEGIN
If (Length(MesageStrg)=4) and (MesageStrg='Baff') Then begin
buf:=hstr('37 01 00');SendToServer;
Action(ObjectID);
UsedBaff(3);
UsedBaff(0);
End Else
If (Length(MesageStrg)=7) and (MesageStrg='akumBAF') Then begin
LiderID:=ObjectID;
buf:=hstr('37 01 00');SendToServer;
Action(MyObject[ID]);
UsedBaff(4);
UsedBaff(0);
End Else
If (Length(MesageStrg)=6) and (MesageStrg='empBAF') Then begin
buf:=hstr('37 01 00');SendToServer;
Action(ObjectID);
UsedBaff(5);
UsedBaff(0);
End Else
If (Length(MesageStrg)=3) and (MesageStrg='tar') Then begin
buf:=hstr('37 01 00');SendToServer;
Action(ObjectID);
End Else;
END;
END
END;
end;
end else
//----------------------------------------------------------------------------
if FromClient then begin
Case pck[1] of
#$38:Begin
PosIndex:=02;
MesageStrg:=ReadS(PosIndex);
MesageType:=ReadD(PosIndex);
Case MesageType of
//Обычный чат 0:Begin End;
//Крик чат 1:Begin End;
//торговый чат 8:Begin End;
3:Begin //Пати чат
If (Length(MesageStrg)=1) and ((MesageStrg[1]='B')or(MesageStrg[1]='b')) Then begin
UsedBaff(0);
End Else
If (Length(MesageStrg)=1) and ((MesageStrg[1]='L')or(MesageStrg[1]='l')) Then begin
ListSkill;
End Else
End;
Else End;
End;
End;
end else;
end.
////////////////////////////////////////////////////////////////////////////////


Добавлено через 4 минуты
//xmlNpc:Variant;
//xmlNpc:=CreateOleObject('Msxml.DOMDocument');
//xmlNpc.Load('.\UserData\itemname-e.xml' );
//xmlNpc.documentElement.selectNodes(Format('/itemname/descrt[@id="%d"]/@name',[Inventory[I,3]])).item[0].text;
//xmlNpc:=nil;

//Uses '.\Scripts\OlegDX by USES.txt';
//************************************************** ***************
Function Sqr(X:Integer):Integer;
Begin
Result:=X*X;
End;
//************************************************** ***************
Function StrToHex(Value:String):String;
Var Len,I:Integer;
Begin
Result:='';
Len:=Length(Value);
IF Len>0 Then Result:= Format('%.2x',[ord(Value[1])]);
For I:=2 to Len do Result:=Result+Format(' %.2x',[ord(Value[I])]);
End;
//************************************************** ***************
procedure ShowHTML(HTML:String);
begin
buf:=#$0F;
WriteD(5);
WriteS(HTML);
WriteD(0);
SendToClient;
end;
//************************************************** ***************
procedure SendMSGClient(value:string;Types:Integer=10);
begin
buf:=#$4A;
WriteD(0);
WriteD(Types);
WriteS('');
WriteS(value);
SendToClient;
end;
//************************************************** ***************
Procedure SendMSGServer(value:String;Types:Integer=0);
Begin
buf:=#$38;
WriteS(value);
WriteD(Types);
SendToServer;
End;
//************************************************** ****************************
procedure DoorAction(DoorID:Cardinal;Status:Cardinal);
begin
buf:=#$4D;
WriteD(DoorID);
WriteD(Status);
WriteD(0);
WriteD(1);
WriteD(0);
SendToClient;
end;
//************************************************** ****************************
procedure Action(ObjectID:Cardinal;Action:Integer=0;X,Y,Z:In teger=0);
begin
buf:=#$04;
WriteD(ObjectID);
WriteD(X);
WriteD(Y);
WriteD(Z);
WriteC(Action);
SendToServer;
end;
//************************************************** ***************
procedure UseItems(ObjectID:Cardinal;shift:Cardinal=0);
begin
buf:=#$14;
WriteD(ObjectID);
WriteD(shift);
SendToServer;
end;
//************************************************** ****************************
procedure UseSkill(SkillID:Integer;Ctrl:Integer=0;Shift:byte =0);
begin
buf:=#$2F;
WriteD(SkillID);
WriteD(Ctrl );
WriteC(Shift);
SendToServer;
end;
//************************************************** ***************
Procedure MoveXYZ(X1,Y1,Z1,X2,Y2,Z2:Integer);
Begin
IF (X1=X2)and(Y1=Y2)and(Z1=Z2) Then Exit;
buf:=#$01;
WriteD(X1);WriteD(Y1);WriteD(Z1);
WriteD(X2);WriteD(Y2);WriteD(Z2);
WriteD(01);
SendToServer
End;
//************************************************** ****************************
// /---|H|---\
// [ >>>|1|_______________|3|___________|2|>> ]
Function GetMoveXYZ(X1,Y1,Z1,X2,Y2,Z2,H:Integer; var X,Y,Z:Integer):Boolean;
var AB:Double;
Begin
Result:=False;
AB:=Sqrt(sqr(X2-X1)+sqr(Y2-Y1)+sqr(Z2-Z1));
IF abs(AB)<=H THEN EXIT;
X:=X2-round(((X2-X1)*H)/AB);
Y:=Y2-round(((Y2-Y1)*H)/AB);
Z:=Z2-round(((Z2-Z1)*H)/AB);
Result:=True;
End;
//************************************************** ****************************



////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
Const ID=0;Xnow=1;Ynow=2;Znow=3;Xold=4;Yold=5;Zold=6;
Var
//--------------------------------------------------------------------------
PosIndex,ObjectID,TargetID,X,Y,Z,W:Integer;
MesageStrg:String;MesageType:Integer;

MyObject: array[0..7] of Integer; //ID,X,Y,Z,Xd,Yd,Zd
MyTarget: array[0..7] of Integer; //ID,X,Y,Z,Xd,Yd,Zd

MySkillCount:Integer;MySkillList:array[0..250,0..3] of Integer;//Group,Lvl,SkillID,Reserved

fListSkill,fListItems,fListMessg:TStringList;//:TStrings;

//--------------------------------------------------------------------------
MyItemsCount:integer; //количество занятых слотов/количество вещей
MyInventory: array[1..250,1..10]of integer; //массив инвентаря
//инвентарь
//1 - ItemType1
//2 - ObjectID
//3 - ItemID
//4 - ItemCount
//5 - ItemType2
//6 - CustType1
//7 - IsEquipped
//8 - BodyPart
//9 - EnchantLevel
//10 - CustType2
//--------------------------------------------------------------------------

////////////////////////////////////////////////////////////////////////////////
Procedure CreateSkillBase;
Begin
PosIndex:=2;
mySkillCount:=ReadD(PosIndex);
For W:= 1 to mySkillCount do begin
mySkillList[W-1,0]:=ReadD(PosIndex);
mySkillList[W-1,1]:=ReadD(PosIndex);
mySkillList[W-1,2]:=ReadD(PosIndex);
mySkillList[W-1,3]:=ReadC(PosIndex);
End;
End;
//************************************************** ****************************
procedure ReadUserInfo;
Begin
PosIndex:=2;
MyObject[Xold]:=ReadD(PosIndex); MyObject[Xnow]:=MyObject[Xold];
MyObject[Yold]:=ReadD(PosIndex); MyObject[Xnow]:=MyObject[Yold];
MyObject[Zold]:=ReadD(PosIndex); MyObject[Xnow]:=MyObject[Zold];
W:=ReadD(PosIndex);
MyObject[ ID]:=ReadD(PosIndex);
End;
//************************************************** ****************************
procedure Init_old;
Begin
MyItemsCount:=0;
MySkillCount:=0;
MyObject[ID]:=0;
MyTarget[ID]:=0;

fListMessg:=nil;fListMessg:=TStringList.Create;//TStrings.Create;
fListItems:=nil;fListItems:=TStringList.Create;//TStrings.Create;
fListSkill:=nil;fListSkill:=TStringList.Create;//TStrings.Create;

fListMessg.LoadFromFile('.\sysmsgid.ini');
fListItems.LoadFromFile('.\itemsid.ini' );
fListSkill.LoadFromFile('.\skillsid.ini');
//ShowTab;UserTab.caption:=fListSkill.Values['150']
End;
procedure Free_Old; //Вызывается при выключении скрипта
begin
HideTab;
fListMessg.free;fListMessg:=nil;
fListItems.free;fListItems:=nil;
fListSkill.free;fListSkill:=nil;
end;
//************************************************** ****************************
////////////////////////////////////////////////////////////////////////////////






////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
//***процедура считывания параметров одного предмета ***************************
//************************************************** ****************************
procedure ItemAction(var Position:integer;CurrentSlot:integer);
begin
MyInventory[CurrentSlot,01]:=ReadH(Position);//ItemType1
MyInventory[CurrentSlot,02]:=ReadD(Position);//ObjectID
MyInventory[CurrentSlot,03]:=ReadD(Position);//ItemID
MyInventory[CurrentSlot,04]:=ReadD(Position);//ItemCount
MyInventory[CurrentSlot,05]:=ReadH(Position);//ItemType2
MyInventory[CurrentSlot,06]:=ReadH(Position);//CustType1
MyInventory[CurrentSlot,07]:=ReadH(Position);//isEquipped
MyInventory[CurrentSlot,08]:=ReadD(Position);//BodyPart
MyInventory[CurrentSlot,09]:=ReadH(Position);//EnchantLevel
MyInventory[CurrentSlot,10]:=ReadH(Position);//CustType2
end;
//************************************************** ****************************
//*** Пакет от сервера 1В - создаем или модифицируем весь инвентарь ************
//************************************************** ****************************
procedure ItemBaseCreate;
var i,PosInt: integer;
begin
//Считываем количество вещей в инвентаре
MyItemsCount:=ReadC(4);PosInt:=6;
for i:=1 to MyItemsCount do ItemAction(PosInt,i);
end;
//************************************************** ****************************
//*** Пакет от сервера 27 - действия (доавить/изменить/удалить)
//*** над одним/несколькими предметами
//************************************************** ****************************
procedure ItemBaseUpdate;
var I,J,N,count,PosInt:integer;
begin
//Считываем количество изменяемых предметов
Count:=ReadC(2);
for I:=1 to Count do begin
N:=(I-1)*30+4;PosInt:=N+2;
Case ReadC(N) of
01:begin //ADD
Inc(MyItemsCount);//Увеличиваем количество занятых слотов
ItemAction(PosInt,MyItemsCount);//Добавляем предмет
end;
02:begin //UPD
N:=ReadD(PosInt+2);
for J:=1 to MyItemsCount do
//Ищем изменяемый предмет по ObjectID в списке обеков
If MyInventory[J,2]=N Then begin ItemAction(PosInt,j);break;end;
end;
03:begin //DEL
N:=ReadD(PosInt+2);
for J:=1 to MyItemsCount do
//Ищем изменяемый предмет по ObjectID в списке обеков
If MyInventory[J,2]=N Then begin
MyInventory[J,01]:=MyInventory[MyItemsCount,01];
MyInventory[J,02]:=MyInventory[MyItemsCount,02];
MyInventory[J,03]:=MyInventory[MyItemsCount,03];
MyInventory[J,04]:=MyInventory[MyItemsCount,04];
MyInventory[J,05]:=MyInventory[MyItemsCount,05];
MyInventory[J,06]:=MyInventory[MyItemsCount,06];
MyInventory[J,07]:=MyInventory[MyItemsCount,07];
MyInventory[J,08]:=MyInventory[MyItemsCount,08];
MyInventory[J,09]:=MyInventory[MyItemsCount,09];
MyInventory[J,10]:=MyInventory[MyItemsCount,10];
Dec(MyItemsCount);//Уменьшаем количество занятых слотов
break;
end
end;
end;
end;
end;
//************************************************** ****************************


//Получить ObjectID предмета, зная его ItemsID *********************************
function ItemBaseGetInfo(ItemsID:integer):integer;
var c1:integer;
begin
Result:=-1;
for c1:=1 to MyItemsCount do
if ItemsID=MyInventory[c1,3] then begin
Result:=MyInventory[c1,2];
exit;//Если нашли - выходим из цикла
end;
end;
//Использовать предмет с заданным ItemsID **************************************
Function ItemBaseUseItem(ItemsID:integer):Boolean;
var c1:integer;
begin
Result:=False;
for c1:=1 to MyItemsCount do
if ItemsID=MyInventory[c1,3] then begin
Result:=True;
UseItems(MyInventory[c1,2]);
//buf:=#$14; WriteD(MyInventory[c1,2]);WriteD(0);SendToServer;
Break; //Чтоб не использовать несколько предметов с одинаковым ItemID (например заточки)
end;
end;

////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////


Begin
End.


Добавлено через 11 минут
сразу извеняюсь за разпрос кодо
но тут правило
1)все команды серверу выносятся в проседуры (а не строчки хекс кода)
2) незя использовать баф который твой чар незнает (нужно проверить что он знаит и от эирго отталкиватся)
3) нужно следить за задержками и ответами сервера

mks
02.05.2008, 03:07
OlegDX, никто ж не оспаривает твои способности))
кстати при использовании case не обязательно ставит begin и end
if FromServer then //begin <--можно убрать;)
Case pck[1] of

OlegDX
06.05.2008, 19:38
я скопировал часть скрипта для примера (у меня он состоит с 4 фаилов)
и одновремено работает в пати для ПП БД и ШЕ
"если заметил там есть несколько команд чата" на которые другие боты реагируют

а по поводу бегин и енд у меня есть правило оформления кода
"возможео токо я им пользуюсь неспорю"