Page 1 of 1

Дорогие скриптеры я обращаюсь с большой просьбой

Posted: 26.12.2009 13:58
by Daimonse
Нужен простой скрипт на мининг и ламбер чтоб вырубывал (обкапывал) определенный участок а дерево выкидывал на пол.
Я очень буду благодарен если этот скрипт будет разложен по косточкам и присутствовало описание всего скрипта. С целью научиться писать простейшие скрипты. Может есть учебник на примерах по стелсу?
Моя аська 471778638.

Posted: 26.12.2009 14:03
by Daimonse
И еще стелс матюкаеться таким сообщением CHECKDEATH

Posted: 26.12.2009 14:04
by Vizit0r
заляни-ка ты в разделы Help и FAQ
как пример прямо в прилепленных там висит топик "Как написать стелс на ламбер".

в асю писать не буду.


и это, пользуйся поиском по форуму.

Posted: 26.12.2009 14:18
by Daimonse
Program Mining_minoc;

type MinePosition = record
x,y,z:integer;
end;

const
positions = 10;



PickAxeType = $0E85;

var
mines: array[0..positions] of MinePosition;
position: integer;
res: boolean;
l_x: integer;
l_y: integer;

h_x: integer;
h_y: integer;

c_x: integer;
c_y: integer;
time: TDateTime;


{$Include 'all.inc'}

procedure Init;
begin
position := 0;
mines[0].x := 2575; mines[0].y := 476; mines[0].z := 0;
mines[1].x := 2575; mines[1].y := 481; mines[1].z := 0;
mines[2].x := 2570; mines[2].y := 477; mines[2].z := 0;
mines[3].x := 2570; mines[3].y := 482; mines[3].z := 0;
mines[4].x := 2570; mines[4].y := 486; mines[4].z := 0;

mines[5].x := 2575; mines[5].y := 476; mines[5].z := 0;
mines[6].x := 2575; mines[6].y := 481; mines[6].z := 0;
mines[7].x := 2570; mines[7].y := 477; mines[7].z := 0;
mines[8].x := 2570; mines[8].y := 482; mines[8].z := 0;
mines[9].x := 2570; mines[9].y := 486; mines[9].z := 0;
end;


procedure CheckEquipment;
var
pickaxe : Cardinal;
Begin
if GetType(ObjAtLayer(RhandLayer)) <> PickAxeType then
begin
Disarm;
wait(1000);
FindType(PickAxeType, backpack);
if FindCount > 0 then
begin
pickaxe := finditem;
Equip(RhandLayer, pickaxe);
repeat
wait(1000);
until ObjAtLayer(RhandLayer) = pickaxe
end
else
begin
AddToSystemJournal('Pickaxe not found.');
SetArStatus(false);
Disconnect;
end
end
end;



procedure CheckElemental;
begin
if InJournalBetweenTimes('what is this?!', time, Now) > 0 then
begin
UOSay('die');
end
end;

// Move - move character
// x, y - position
// prec - precision
// runFlag - run
// delay - in second
function Move(x, y, prec: integer; runFlag: boolean; delay: byte):boolean;
var
charX, charY, dist, distX, distY, lastDist, lastCharX, lastCharY: integer;
pDirec, Direc, lastDirec, blocked: byte;
tMove: TDateTime;
begin
tMove := now;
blocked := 0;
while (true) do begin
WaitConnection(3000);
wait(500);
charX:= GetX(self); charY:= GetY(self);
distX:= Trunc(Abs(x - charX)); distY:= Trunc(Abs(y - charY));
if (distX > distY) then
begin
dist:= distX;
end
else
begin
dist:= distY;
end

if (dist <= prec) then
begin
result:= true;
exit;
end;

if (lastDist = dist) then
begin
blocked:= (blocked + 1);
if (blocked > 10) then
begin
addToSystemJournal('You cannot location!');
result:= false;
exit;
end;
end
else
begin
blocked:= 0;
end;

if (delay <> 0) then begin
if (now > tMove + (1.0 / 1440 * delay)) then
begin
addToSystemJournal('Time move out!');
result:= false;
exit;
end;
end;

if x < charX then begin
if y > charY then begin pDirec:= 5; end;
if y = charY then begin pDirec:= 6; end;
if y < charY then begin pDirec:= 7; end;
end;
if x = charX then
begin
if y > charY then begin pDirec:= 4; end;
if y < charY then begin pDirec:= 0; end;
end;
if x > charX then
begin
if y > charY then begin pDirec:= 3; end;
if y = charY then begin pDirec:= 2; end;
if y < charY then begin pDirec:= 1; end;
end;
//
if (lastCharX = charX) and (lastCharY = charY) then
begin
pDirec:= pDirec + 1;
if (pDirec > 7) then begin pDirec:= 0; end;
end;
//
Direc:= pDirec;
lastCharX:= charX; lastCharY:= charY; lastDirec:= Direc; lastDist:= Dist;
if (GetDirection(self) <> Direc) then begin Raw_Move(Direc,false); end;
Raw_Move(Direc, runFlag);
end;
end;

procedure Mine();
var
z: integer;
begin
l_x := (GetX(self) - 2);
h_x := (GetX(self) + 2);
l_y := (GetY(self) - 2);
h_y := (GetY(self) + 2);
z := GetZ(self);

for c_x := l_x to h_x do
begin
for c_y := l_y to h_y do
begin
if TargetPresent then
begin
CancelTarget;
wait(500);
end
CheckEquipment;
time := Now;
Check;
UseObject(ObjAtLayer(RhandLayer));
WaitTargetXYZ(c_x, c_y, z);
WaitJournalLine(Now, 'no more ore|broke|stop mining|cannot see|far away|cannot mine|what is this?!', 60000);
CheckElemental;
end
end
end;



Begin
AddToSystemJournal('Mining script in minoc[by xmind]');
Init;
while true do
begin
Check;

res := Move(mines[position].x,mines[position].y,0,true,999);
position := position + 1;
if position = positions then
begin
position := 0;
end

if res then
begin
AddToSystemJournal('Mine position: '+IntToStr(position));
Mine;
hungry(1,backpack);
end
end;
end.

В этом скрипте мне нужно чтоб были убраны всякие функции на голод смерть и т.д.
Сейчас стелс выдает ошибку:
Compiler: [Error] (mining final.sc at 169:46): Unknown identifier 'Raw_Move'

Posted: 26.12.2009 14:25
by Vizit0r
что у тебя за стелс?

Posted: 26.12.2009 15:27
by Daimonse
0.96b и есть 1.0 релиз

Posted: 26.12.2009 16:07
by Vizit0r
0.96 - это ж еще найти такую древность надо ))

Posted: 26.12.2009 17:25
by Daimonse
Ты подскажи что делать?

Posted: 26.12.2009 17:33
by Vizit0r
запустить на версии 1.0

Posted: 26.12.2009 19:23
by Daimonse
а насчет упростить скрипт чтоб без всяких проверок просто копал ходил или рубал

Posted: 26.12.2009 19:49
by Vizit0r

Code: Select all

Program Mining_minoc; 

type MinePosition = record 
x,y,z:integer; 
end; 

const 
positions = 10; 



PickAxeType = $0E85; 

var 
mines: array[0..positions] of MinePosition; 
position: integer; 
res: boolean; 
l_x: integer; 
l_y: integer; 

h_x: integer; 
h_y: integer; 

c_x: integer; 
c_y: integer; 
time: TDateTime; 


{$Include 'all.inc'} 

procedure Init; 
begin 
position := 0; 
mines[0].x := 2575; mines[0].y := 476; mines[0].z := 0; 
mines[1].x := 2575; mines[1].y := 481; mines[1].z := 0; 
mines[2].x := 2570; mines[2].y := 477; mines[2].z := 0; 
mines[3].x := 2570; mines[3].y := 482; mines[3].z := 0; 
mines[4].x := 2570; mines[4].y := 486; mines[4].z := 0; 

mines[5].x := 2575; mines[5].y := 476; mines[5].z := 0; 
mines[6].x := 2575; mines[6].y := 481; mines[6].z := 0; 
mines[7].x := 2570; mines[7].y := 477; mines[7].z := 0; 
mines[8].x := 2570; mines[8].y := 482; mines[8].z := 0; 
mines[9].x := 2570; mines[9].y := 486; mines[9].z := 0; 
end; 


procedure Mine(); 
var 
z: integer; 
begin 
l_x := (GetX(self) - 2); 
h_x := (GetX(self) + 2); 
l_y := (GetY(self) - 2); 
h_y := (GetY(self) + 2); 
z := GetZ(self); 

for c_x := l_x to h_x do 
begin 
for c_y := l_y to h_y do 
begin 
if TargetPresent then 
begin 
CancelTarget; 
wait(500); 
end 
time := Now; 
UseObject(ObjAtLayer(RhandLayer)); 
WaitTargetXYZ(c_x, c_y, z); 
WaitJournalLine(Now, 'no more ore|broke|stop mining|cannot see|far away|cannot mine', 60000); 
end 
end 
end; 



Begin 
Init; 
while true do 
begin 
res := Move(mines[position].x,mines[position].y,0,true,999); 
position := position + 1; 
if position = positions then 
begin 
position := 0; 
end 

if res then 
begin 
AddToSystemJournal('Mine position: '+IntToStr(position)); 
Mine; 
end 
end; 
end.
так вроде...

Posted: 26.12.2009 20:29
by Daimonse
Compiler: [Error] (minings.sc at 67:1): Semicolon (';') expected
21:28:44 [Daimon201]: Compiling failed

Posted: 26.12.2009 22:51
by Vizit0r