PDA

Просмотр полной версии : Door Action..


He3eMHou
11.06.2009, 16:25
Можете помочь с ошибкой? я могу открывать двери но не могу закрывать.. как исправить ошибку?

http://attackbroad.clan.su/DooR.JPG

mks
11.06.2009, 16:42
зачем тебе их закрывать, всеравно то что ты их открыл видешь только ты сам

8tomat8
11.06.2009, 16:44
скрипт сам выложи, скорее всего дело в том что в скрипте этого нету, и когда ты пытаешся закрыть он пытается заново их открывать

He3eMHou
11.06.2009, 16:46
8tomat8,

// Открытие/закрытие любых дверей, ворот и т.д. А также проход в дальнейщем через откртую дверь дальше.
// Работает на всех серверах, но пройти через открытую дверь можно на сервере, где нет геодаты (java).
// Чтобы использовать скрипт, выделите нужную вам дверь через Shift + левая кнопка мыши
// Автор: Furious
// Версия: 0.2

var
Bypass: String;
ObjectID, ActionID, Status: Integer;

const
HTML='<html><body><center><img src="L2UI_CH3.herotower_deco"'+
' width=256 height=32><font color="LEVEL">Меню управления во'+
'ротами и дверями</font><br><font color="LEVEL">Автор: Furio'+
'us</font><img src="L2UI.SquareWhite" width=260 height=1><im'+
'g src="L2UI.SquareBlank" width=260 height=4><br1><td><butto'+
'n value="Открыть" action="bypass -h open" width=70 height=1'+
'5 back="sek.cbui94" fore="sek.cbui92"></td><br><td><button '+
'value="Закрыть" action="bypass -h close" width=70 height=15'+
' back="sek.cbui94" fore="sek.cbui92"></td><br></tr><img src'+
'="L2UI.SquareWhite" width=260 height=1><img src="L2UI.Squar'+
'eBlank" width=260 height=4><br1></center></body></html>';

procedure ShowHTML;
begin
buf:=#$0F;
WriteD(5);
WriteS(HTML);
SendToClient;
end;

procedure DoorAction;
begin
buf:=#$4D;
WriteD(ObjectID);
WriteD(Status);
WriteD(0);
WriteD(1);
WriteD(0);
SendToClient;
end;


begin
if FromClient and (pck[1]=#$04) then
begin
ActionID:=ReadC(18);
if ActionID=1 then
begin
ObjectID:=ReadD(2);
ShowHTML;
end;
end;
if FromClient and (pck[1]=#$21) then
begin
Bypass:=ReadS(2);
case Bypass of
'open':Status:=0 and DoorAction;
'close':Status:=1 and DoorAction;
end;
end;
end.

8tomat8
11.06.2009, 16:57
тут не прописана процедура закрытия... можеш сам отловить и по принципу открывания сделать закрывание
begin
if FromClient and (pck[1]=#$04) then
begin
ActionID:=ReadC(18);
if ActionID=1 then
begin
ObjectID:=ReadD(2);
ShowHTML;
end;
end;

Это открывание

pmen
11.06.2009, 17:19
Когда я пользовался этим скриптом я закрывал двери просто 2 раза нажав на саму дверь.. =)

Smertonosec
11.06.2009, 17:39
В чом понт?) геодата все ровно на месте остается почемуто)хоят дверь открывается)

pmen
11.06.2009, 17:46
Я на сервах с норм геодатой проходил иногда xD

Markulus
13.06.2009, 17:30
He3eMHou, увидел на скрине скрипты на ЛС. не можешь скинуть?

He3eMHou
13.06.2009, 20:18
Markulus,

const
Name='CuJIyC'; // ник
ItemID=6594; // пуха
LifeID=8762; // лайфстон
GemsID=2131; // гемстон
GemsAmount=25; //кол-во гемов
max=180; // инвентарь
var
LifeBase:array[1..max] of integer;
ColvoLife,ColvoGems,Life,Item,Gems,SocialID,augid: integer;
procedure Init;
var i:integer;
begin
buf:=hstr('0F');
SendToServerEx(Name);
end;
procedure Free;
var i:integer;
begin
for i:=1 to max do
LifeBase[i]:=0;
end;
function StrToHex2(packet: string):string;
var
i:integer;
tmp:byte;
function ByteToHex(b: byte): Char;
begin
if b<10 then result:=chr(b+$30)
else result:=chr(b+$37);
end;
begin
result:='';
for i:=1 to length(packet) do begin
tmp:=ord(packet[i]) div 16;
result:=result+ByteToHex(tmp);
tmp:=ord(packet[i]) - tmp*16;
result:=result+ByteToHex(tmp)+' ';
end;
end;
function inttohex(n:integer):string;
var i:integer;
t:string;
a:array[0..15] of char;
begin
a[0]:='0';
a[1]:='1';
a[2]:='2';
a[3]:='3';
a[4]:='4';
a[5]:='5';
a[6]:='6';
a[7]:='7';
a[8]:='8';
a[9]:='9';
a[10]:='A';
a[11]:='B';
a[12]:='C';
a[13]:='D';
a[14]:='E';
a[15]:='F';
result:='';
t:='';
i:=0;
while n<>0 do begin
if (i mod 2=0)and(i>0) then begin
result:=result+t+' ';
t:='';
end;
t:=a[n mod 16]+t;
n:=n div 16;
inc(i);
end;
result:=result+t;
end;
procedure Say;
var i:integer;
s:string;
begin
s:='<tr><td>LS='+inttostr(ColvoLife)+' (*'+inttostr(GemsAmount)+'='+inttostr(ColvoLife*Ge msAmount)+')</td></tr>';
s:=s+'<tr><td>Gems='+inttostr(ColvoGems)+' (/'+inttostr(GemsAmount)+'='+inttostr(ColvoGems div GemsAmount)+')</td></tr>';
s:=s+'<tr><td>---</td></tr>';
if Item=0 then
s:=s+'<tr><td>No Weapon</td></tr>'
else if augid>0 then
s:=s+'<tr><td>Augmented ('+inttohex(augid)+')</td></tr>'
else
s:=s+'<tr><td>Not augmented</td></tr>';
buf:=hstr('0F 01 00 00 00');
WriteS('<html><body><br><table width=100%>'+s+'</table><br><br><br><br><br><br>'+
'"Social Yes" - Cancel Augment(if augmented) and Augment(if you have enough gems and LSs)<br>'+
'"Social No" - Show this help<br><br>'+
'Sometimes client dont get packet InventoryUpdate and you see "Not augment" when weapon is augmented.'+
' Simply press [Tab] twice or wear weapon.<br><br>'+
'(c) raid aka Mamy</body></html>');
// '(c) raid aka Mamy<br>'+strtohex(pck)+'</body></html>');
WriteD(0);
SendToClientEx(Name);
end;
procedure CreateItemBase;
var i,ss,j,ObjID,ItmID,ListCount,count,aug:integer;
begin
Item:=0;
ss:=1;
j:=4;
ListCount:=ReadH(j);
if ListCount>max then ListCount:=max;
j:=8;
for i:=1 to ListCount do begin
ObjID:=ReadD(j);
ItmID:=ReadD(j);
Count:=ReadD(j);
j:=j+14;
aug:=ReadD(j);
case ItmID of
LifeID: begin
LifeBase[ss]:=ObjID;
inc(ss);
end;
ItemID: begin
Item:=ObjID;
augid:=aug;
end;
GemsID: begin
Gems:=ObjID;
ColvoGems:=Count;
end;
end;
j:=j+6;
end;
ColvoLife:=ss-1;
Say;
end;
procedure UpdateItemBase;
var i,ii,j,ObjID,ItmID,ListCount,Count,UpdType,aug: integer;
begin
ListCount:=ReadH(2);
j:=4;
for i:=1 to ListCount do begin
UpdType:=ReadH(j);
j:=j+2;
ObjID:=ReadD(j);
ItmID:=ReadD(j);
Count:=ReadD(j);
j:=j+14;
aug:=ReadD(j);
case UpdType of
1:case ItmID of
ItemID: begin
Item:=ObjID;
augid:=aug;
end;
LifeID: begin
for ii:=1 to max do
if LifeBase[ii]=0 then begin
LifeBase[ii]:=ObjID;
ColvoLife:=ColvoLife+1;
break;
end;
end;
GemsID: begin
Gems:=ObjID;
ColvoGems:=Count;
end;
end;
2:case ItmID of
ItemID: begin
Item:=ObjID;
augid:=aug;
end;
GemsID: begin
Gems:=ObjID;
ColvoGems:=Count;
end;
end;
3:case ItmID of
ItemID:
Item:=0;
GemsID: begin
Gems:=ObjID;
ColvoGems:=Count;
end;
LifeID: begin
for ii:=1 to max do
if LifeBase[ii]=ObjID then begin
LifeBase[ii]:=0;
ColvoLife:=ColvoLife-1;
end;
end;
end;
end;
j:=j+6;
end;
Say;
end;
function GetNextLife: integer;
var i:integer;
begin
Result:=-1;
for i:=1 to max do begin
if (LifeBase[i]<>0) then begin
Result:=LifeBase[i];
exit;
end;
end;
end;
procedure Augment;
begin
buf:=hstr('D0 29 00');
WriteD(Item);
SendToServerEx(Name);
delay(100);
buf:=hstr('D0 2A 00');
WriteD(Item);
WriteD(Life);
SendToServerEx(Name);
delay(100);
buf:=hstr('D0 2B 00');
WriteD(Item);
WriteD(Life);
WriteD(Gems);
WriteD(GemsAmount);
SendToServerEx(Name);
delay(100);
buf:=hstr('D0 2C 00');
WriteD(Item);
WriteD(Life);
WriteD(Gems);
WriteD(GemsAmount);
SendToServerEx(Name);
end;
procedure DisAugment;
begin
buf:=hstr('D0 2D 00');
WriteD(Item);
SendToServerEx(Name);
buf:=hstr('D0 2E 00');
WriteD(Item);
SendToServerEx(Name);
end;
begin
if pck='' then exit;
if FromClient and (ConnectName=Name) and (pck[1]=#$1B) then begin
SocialID:=ReadD(2);
pck:='';
case SocialID of
7: begin
buf:=hstr('A7 2A A0 00 00 80 84 1E 00 0A 00 00 00 00 00 00 00 00 00 00 00');
SendToServerEx(Name);
buf:=hstr('A7 29 A0 00 00 40 0D 03 00 FA 00 00 00 00 00 00 00 00 00 00');
SendToServerEx(Name);

exit;
end;
6: begin
if augid>0 then begin
DisAugment;
delay(300);
end;
Life:=GetNextLife;
if (Life=-1)or(ColvoGems<GemsAmount)or(ColvoLife<1) then
exit;
Augment;
exit;
end;
5: begin
Say;
exit;
end;
end;
end;
if FromServer then
case pck[1] of
#$1B: CreateItemBase;
#$27: UpdateItemBase;
end;
end.

Markulus
14.06.2009, 02:34
He3eMHou, спасибо

Sashafaq
08.09.2009, 19:53
ап темы можно ли переделать скриптик под грацию финал попробывал переделать но там немного другой пакет и формирование пакета и кажется даже 2 пакета приходит от двери
9F D9 8B 61 01 81 04 01 10 01 00 00 00 01 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 2C 09 01 00 2C 09 01 00 00 00 00 00 00 00 00 00
4D 81 04 01 10 00 00 00 00 00 00 00 00 00 00 00 00 D9 8B 61 01 2C 09 01 00 2C 09 01 00

это открытая дверь
9F D9 8B 61 01 81 04 01 10 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 00 00 00 00 2C 09 01 00 2C 09 01 00 00 00 00 00 00 00 00 00
4D 81 04 01 10 01 00 00 00 00 00 00 00 00 00 00 00 D9 8B 61 01 2C 09 01 00 2C 09 01 00
это закрытая
мой немного переделаный скрипт под грацию финал
// Открытие/закрытие любых дверей, ворот и т.д. А также проход в дальнейщем через откртую дверь дальше.
// Работает на всех серверах, но пройти через открытую дверь можно на сервере, где нет геодаты (java).
// Чтобы использовать скрипт, выделите нужную вам дверь через Shift + левая кнопка мыши
// Автор: Furious
// Версия: 0.2

var
Bypass: String;
ObjectID, ActionID, DoorID, Status: Integer;

const
HTML='<html><body><center><img src="L2UI_CH3.herotower_deco"'+
' width=256 height=32><font color="LEVEL">Меню управления во'+
'ротами и дверями</font><img src="L2UI.SquareWhite" width=260'+
' height=1><img src="L2UI.SquareBlank" width=260 height=4><br1><td><butto'+
'n value="Открыть" action="bypass -h open" width=70 height=1'+
'5 back="sek.cbui94" fore="sek.cbui92"></td><br><td><button '+
'value="Закрыть" action="bypass -h close" width=70 height=15'+
' back="sek.cbui94" fore="sek.cbui92"></td><br></tr><img src'+
'="L2UI.SquareWhite" width=260 height=1><img src="L2UI.Squar'+
'eBlank" width=260 height=4><br1></center></body></html>';

procedure ShowHTML;
begin
buf:=#$19;
WriteD(5);
WriteS(HTML);
SendToClient;
end;

procedure DoorAction;
begin
buf:=#$4D;
WriteD(ObjectID);
WriteD(Status);
WriteD(0);
WriteD(0);
WriteD(DoorID);
WriteD(1);
WriteD(42);
SendToClient;
end;

procedure DoorAction1;
begin
buf:=#$4D;
WriteD(ObjectID);
WriteD(1);
WriteD(0);
WriteD(1);
WriteD(0);
SendToClient;
end;

begin
if FromClient and (pck[1]=#$1F) then
begin
ActionID:=ReadC(18);
if ActionID=1 then
begin
ObjectID:=ReadD(2);
ShowHTML;
end;
end;
if FromClient and (pck[1]=#$23) then
begin
Bypass:=ReadS(2);
case Bypass of
'open':Status:=0 and DoorAction;
'close':Status:=1 and DoorAction1;
end;
end;
end.

TeJIoXpaHuTeJIb
20.09.2010, 07:37
Может не по теме.... но сталкивался с проблемой этих скриптов на открытие дверей. Не робили просто, хотя всё делал норм. Можно открывать и закрывать двери пакетом DoorStatusUpdate(через l2phx). К примеру дверь на корабле у закена:

4D F1 A3 00 10 01 00 00 00 00 00 00 00 01 00 00 00 C6 18 44 01 6C DC 02 00 6C DC 02 00


Tип: 0x4D (DoorStatusUpdate)
Pазмер: 29+2
Время прихода: 06:30:37:625
0002 d objectID: 268477425 (0x1000A3F1)
0006 d Open: 1 (0x00000001)
000A d Damage: 0 (0x00000000)
000E d enemy: 1 (0x00000001)
0012 d DoorID: 21240006 (0x014418C6)


Выделив в таргет менять 0006 d параметр и отправлять пакет на клиент 01 00 00 00 закрыть 00 00 00 00 открыть.

Тестил на Interlude (l2phx.3.5.28.151)