Page 1 of 3

Ламбер

Posted: 17.12.2016 3:37
by Xper1al
Добрый день! Помогите пожалуйста со скриптом. Ходит, рубит, складывает в сундук, но когда ломаются топоры чар подходит к сундуку и выдает ошибку :

Code: Select all

23:12:03:341 [dark]: Drag error: Object not found.
. В сундуке есть инготы и тинкер тулс, по идее он их должен брать и делать топоры, но почему-то этого не происходит.
Собственно сам скрипт:
Lamber

Code: Select all

Program AutoLumber_SW;
 
{$Include 'all.inc'}
 
const
/////////////////////////////////////////////////
// Обязательные к изменению настройки скрипта //
Sunduk = $41A8D0E7; //
// //
// Координаты точки перед сундуком //
xTileSunduk = 537; //
yTileSunduk = 2561; //

RB = $42E70F3A; // Roone book <Need Setup>
RunaHome = 1; // Nomer runi перед сундуком [1-16] <Need Setup>
// //
/////////////////////////////////////////////////
TynkType = $1EBC;
AxeType = $0F43;
IngotType = $1BF2;
// Возможные к изменению настройки скрипта 
MyMaxWeight = 300; // Максимальный вес
Hatchet1 = $0F43; // Тип топора1
Hatchet2 = $0F44; // Тип топора2 (перевёрнутый)
 
 
// Размерности массивов
iTTileCount = 39; // Типы тайлов деревьев (менять, только при редактировании массива)
iCTileCount = 1; // Кол-во точек (центров поляны), в которых хотим собирать информацию о деревьях (поляна = 30х30 тайлов)
 
// Журнал
Msg1 = 'That is too';
Msg2 = 'не смогли';
Msg3 = 'hack';
Msg4 = 'You decide not to chop wood';
Msg5 = 'There is nothing';
Msg6 = 'appears immune';
Msg7 = 'no wood here to chop...';
Msg8 = 'reach this';
 
// Прочее
RunSpeed = 250;
iRadiusSearch = 15; // Радиус (не диаметр!) поиска деревьев в тайлах, относительно персонажа
Logs = $1BDD; // Тип логов
WoodType = $0F90; // Тип дедвудов
 
type
ChopTile = Record
x, y : Integer;
end;
 
var
Regs : array [1..3] of Cardinal;
FoundTilesArray : TFoundTilesArray;
TempFoundTilesArray, ChopTilesArray : array of TFoundTile;
TreeTile:array [0..iTTileCount] of word;
ChopTiles : array[1..iCTileCount] of ChopTile;
ctime : TDateTime;
i : Integer;
 
// Инициализация массива типов тайлов деревьев
procedure InitTTilesArray;
begin
TreeTile[0]:=3274;
TreeTile[1]:=3275;
TreeTile[2]:=3277;
TreeTile[3]:=3280;
 
TreeTile[4]:=3283;
TreeTile[5]:=3286;
TreeTile[6]:=3288;
TreeTile[7]:=3290;
 
TreeTile[8]:=3293;
TreeTile[9]:=3296;
TreeTile[10]:=3299;
TreeTile[11]:=3302;
 
TreeTile[12]:=3320;
TreeTile[13]:=3323;
TreeTile[14]:=3326;
TreeTile[15]:=3329;
 
TreeTile[16]:=3393;
TreeTile[17]:=3394;
TreeTile[18]:=3395;
TreeTile[19]:=3396;
 
TreeTile[20]:=3415;
TreeTile[21]:=3416;
TreeTile[22]:=3417;
TreeTile[23]:=3418;
 
TreeTile[24]:=3419;
TreeTile[25]:=3438;
TreeTile[26]:=3439;
TreeTile[27]:=3440;
 
TreeTile[28]:=3441;
TreeTile[29]:=3442;
TreeTile[30]:=3460;
TreeTile[31]:=3461;
 
TreeTile[32]:=3462;
TreeTile[33]:=3476;
TreeTile[34]:=3478;
TreeTile[35]:=3480;
 
TreeTile[36]:=3482;
TreeTile[37]:=3484;
TreeTile[38]:=3492;
TreeTile[39]:=3496;
end;
 
// Инициализация массива координат для поиска деревьев
procedure InitCTilesArray;
begin
ChopTiles[1].x := 1; // Координаты первой точки, на которую идем и ищем деревья
ChopTiles[1].y := 1;
 
// ChopTiles[2].x := 1325; // Координаты второй точки, на которую идем и ищем деревья
// ChopTiles[2].y := 287;
 
// ChopTiles[3].x := 1316; // Координаты третьей точки, на которую идем и ищем деревья
// ChopTiles[3].y := 305;
 
// ChopTiles[4].x := 1299; // Координаты третьей точки, на которую идем и ищем деревья
// ChopTiles[4].y := 312;
end;
 
// Инициализация системных переменных
procedure InitSystem;
begin
SetRunUnmountTimer(RunSpeed);
SetArrayLength(ChopTilesArray, 1);
end;
 
// Инициализация регов
procedure InitReg;
begin
Regs[1] := $0F85; // Ginseng
Regs[2] := $0F88; // Nightshade
Regs[3] := $0F86; // Mandrake Roots
end;
 
// Поиск деревьев
procedure SearchTree;
var
i, j : Integer;
iFoundTilesArrayCount : word;
iTempFoundTilesArrayCount : Integer;
 
begin
for i:= 0 to iTTileCount do
begin
iFoundTilesArrayCount := GetStaticTilesArray((GetX(Self) - iRadiusSearch), (GetY(Self) - iRadiusSearch), (GetX(Self) + iRadiusSearch), (GetY(Self) + iRadiusSearch), 1, TreeTile[i], FoundTilesArray);
if iFoundTilesArrayCount > 0 then
begin
SetArrayLength(TempFoundTilesArray, Length(TempFoundTilesArray) + iFoundTilesArrayCount);
for j := 0 to iFoundTilesArrayCount - 1 do
begin 
TempFoundTilesArray[iTempFoundTilesArrayCount + j] := FoundTilesArray[j];
end;
iTempFoundTilesArrayCount := iTempFoundTilesArrayCount + iFoundTilesArrayCount;
end;
end;
AddToSystemJournal('Найдено деревьев: ' + IntToStr(iTempFoundTilesArrayCount)); 
end;
 
// Чистим записи дубликаты (Vizit0r  :P)
procedure ClearDuplicate;
var
i, j : Integer;
 
begin
ChopTilesArray[Length(ChopTilesArray) - 1] := TempFoundTilesArray[0];
for i:=1 to Length(TempFoundTilesArray) - 1 do
begin
for j:=0 to Length(ChopTilesArray) - 1 do
if (ChopTilesArray[j] = TempFoundTilesArray[i]) then
break;
if j > Length(ChopTilesArray) - 1 then
begin
SetArrayLength(ChopTilesArray, Length(ChopTilesArray) + 1);
ChopTilesArray[Length(ChopTilesArray) - 1] := TempFoundTilesArray[i];
end;
end;
AddToSystemJournal('После отсеивания дубликатов, осталось деревьев:' + IntToStr(Length(ChopTilesArray)));
end;
 
// Возводим в степень 2 (Shinma)
function sqr(a:LongInt):LongInt;
begin
result:=a*a;
end;
 
// Вычисляем длину вектора (Shinma)
function vector_length(c_2:TFoundTile):LongInt;
begin
result:=Round(sqrt(sqr(GetX(self)-c_2.X)+sqr(GetY(self)-c_2.Y)));
end;
 
// «Быстрая сортировка» по длине вектора, от центра последней поляны ко всем собранным координатам деревьев 
procedure QuickSort(A: array of TFoundTile; l,r: integer);
var
i, j: Integer;
x, y: TFoundTile;
 
begin
i := l;
j := r;
x := A[((l + r) div 2)];
repeat
while vector_length(A[i]) < vector_length(x) do inc(i);
while vector_length(x) < vector_length(A[j]) do dec(j);
if not (i>j) then
begin
y:= A[i];
A[i]:= A[j];
A[j]:= y;
inc(i);
dec(j);
end;
until i>j;
if l < j then QuickSort(ChopTilesArray, l,j);
if i < r then QuickSort(ChopTilesArray, i,r);
end;
 
// Находим, исключаем дубликаты, сортируем деревья
procedure MarkTrees;
begin
for i:= 1 to iCTileCount do
begin
NewMoveXY(ChopTiles[i].x, ChopTiles[i].y, False, 1, False);
SearchTree;
AddToSystemJournal('Всего найдено деревьев: ' + IntToStr(Length(TempFoundTilesArray)));
ClearDuplicate;
end;
QuickSort(ChopTilesArray, 0, Length(ChopTilesArray) - 1);
end;
procedure CheckAxe;
begin
while (Count(AxeType) < 4) do
begin
CancelMenu;
if (Count(IngotType) < 4) then
begin
FindType(IngotType,Backpack);
if (FindQuantity < 4) then MoveItem(finditem,4,Sunduk,0,0,0);
wait(1000);
FindType(IngotType,Sunduk);
if (FindQuantity > 4) then MoveItem(finditem,4,Backpack,0,0,0);
wait(500);
 
end;
if (Count(IngotType) >= 4) then
begin
UseObject(FindType(TynkType,Sunduk));
WaitTargetObject(FindType(IngotType,Backpack));
Wait(1000);
AutoMenu('like','Deadly Tools');
AutoMenu('like','Hatchet');
WaitJournalLine(Now, 'You create|make|destroy|Stop|Fail|Success', 30000);
end;
Wait(1000);
end;
Hungry(1,Sunduk);
end;
 
 
// Разгрузка (Edred)
procedure Discharge;
// разгружаем нарубленное в сундук
// нарубленное - реги в массиве Regs[1..3]
// логи - константа Logs
var
m, tmpcnt : integer;
tmpid, tmpstack, tmpcolor : Cardinal;
tmpname : String;
begin
AddToSystemJournal('Разгружаемся');
waitconnection(3000);
if Dead then exit;
UseObject(Sunduk);
wait (500);
CheckAxe;
wait(1000);
checksave;
// выложим реги
for m := 1 to 3 do
begin
tmpcnt := 0;
Repeat
tmpid := Findtype(Regs[m],backpack);
if tmpid = 0 then break;
addtosystemjournal( 'Найдено ' + inttostr(GetQuantity(tmpid)) + ' regs');
tmpcnt := tmpcnt + 1;
if tmpcnt > 10 then
begin
addtosystemjournal('Ошибка: не могу переместить regs!');
wait(15000);
end;
MoveItem(tmpid,GetQuantity(tmpid),Sunduk,0,0,0);
wait(1000);
CheckSave;
until tmpid = 0;
end;
// выложим дид вуды
tmpcnt := 0;
Repeat
tmpid := Findtype(WoodType,backpack);
if tmpid = 0 then break;
addtosystemjournal( 'Найдено ' + inttostr(GetQuantity(tmpid)) + ' dead woods');
tmpcnt := tmpcnt + 1;
if tmpcnt > 10 then
begin
addtosystemjournal('Ошибка: не могу переместить dead woods!');
wait(15000);
end;
tmpstack := Findtype(WoodType,Sunduk);
// Если не найден в банке - тогда просто в контейнер
if tmpstack = 0 then tmpstack := Sunduk;
MoveItem(tmpid,GetQuantity(tmpid),tmpstack,0,0,0);
wait(1000);
CheckSave;
until tmpid = 0;
// выложим логи
tmpcnt := 0;
Repeat
tmpid := Findtype(Logs,backpack);
if tmpid = 0 then break;
tmpcolor := GetColor(tmpid);
tmpname := ' unknown logs';
case tmpcolor of
$0000 : tmpname := ' logs';
$0505 : tmpname := ' birch logs';
$0654 : tmpname := ' herry logs';
$048A : tmpname := ' swamp logs';
$0415 : tmpname := ' oak logs';
$0203 : tmpname := ' hardranger logs';
$0487 : tmpname := ' jade logs';
$0542 : tmpname := ' stormteal logs';
$0489 : tmpname := ' blizzard logs';
$066D : tmpname := ' vulcanic logs';
$0492 : tmpname := ' vampiric logs';
$0488 : tmpname := ' zulu logs';
end;
addtosystemjournal( 'Найдено ' + inttostr(GetQuantity(tmpid)) + tmpname);
tmpcnt := tmpcnt + 1;
if tmpcnt > 10 then
begin
addtosystemjournal('Ошибка: не могу переместить логи');
wait(15000);
end;
repeat
tmpstack := FindtypeEx(Logs,tmpcolor,Sunduk,False);
if GetQuantity(tmpstack) >= 65000 then Ignore(tmpstack);
until (tmpstack = 0) OR (GetQuantity(tmpstack) < 65000);
// Если не найден в сундуке - тогда просто в контейнер
if tmpstack = 0 then tmpstack := Sunduk;
MoveItem(tmpid,GetQuantity(tmpid),tmpstack,0,0,0);
wait(1000);
CheckSave;
until tmpid = 0;
IgnoreReset;
AddToSystemJournal('Разгрузка закончена');
end;
procedure Home;
begin
checksave;
UseObject(RB); 
WaitGump(IntToStr(1024 + RunaHome));
wait(3000);
end;
 
// Идем к сундуку и выгружаемся
procedure UnloadOrDead;
begin
NewMoveXY(xTileSunduk, yTileSunduk, false, 1, false);
if not Dead then begin Discharge; end
else begin AddToSystemJournal('Персонаж мертв.');
wait(1000);
uosay('.rescue');
wait(3000);
Addtosystemjournal('IS_DEAD');
home;
end; 
end;
 
function CheckHatchet : Boolean;
var tmpser : Cardinal;
begin
Result := true;
if (ObjAtLayerEx(LhandLayer,self) = 0) then
begin
tmpser := findtype(Hatchet1,backpack);
if tmpser = 0 then tmpser := findtype(Hatchet2,backpack);
if tmpser = 0 then
begin
Result := false;
exit;
end;
if not equip(LhandLayer,tmpser) then
begin
wait(1000);
if not equip(LhandLayer,tmpser) then
begin
Result := false;
exit;
end;
end;
wait(500);
checksave;
end;
end;
// Рубим дерево (Edred)
function LumbCurTree(tile,x,y,z : Integer) : Boolean;
// рубим указанный тайл. Возвращаем false если перевес или чар мертв.
var
q, m1, m2, m3, m4, m5, m6, m7, m8, CountFizzle, NextTree : integer;
 
begin
Result := true;
CountFizzle := 0;
repeat 
if not CheckHatchet then
begin
exit;
end;
if WarMode = true then SetWarMode(false);
if TargetPresent then CancelTarget;
ctime := Now;
if Dead then begin Result := false; exit; end;
UseSkill('Arms Lore');
WaitForTarget(5000);
WaitTargetType ($0F43);
UseObject(ObjAtLayerEx(LhandLayer,self));
WaitForTarget(5000);
If TargetPresent then TargetToTile(tile, x, y, z);
q := 0;
repeat
wait(100);
q := q + 1;
checksave;
m1 := InJournalBetweenTimes(Msg1, ctime, Now);
m2 := InJournalBetweenTimes(Msg2, ctime, Now);
m3 := InJournalBetweenTimes(Msg3, ctime, Now);
m4 := InJournalBetweenTimes(Msg4, ctime, Now);
m5 := InJournalBetweenTimes(Msg5, ctime, Now);
m6 := InJournalBetweenTimes(Msg6, ctime, Now);
m7 := InJournalBetweenTimes(Msg7, ctime, Now);
m8 := InJournalBetweenTimes(Msg8, ctime, Now);
until (m1<>-1) or (m2<>-1) or (m3<>-1) or (m4<>-1) or (m5<>-1) or (m6<>-1) or (m7<>-1) or (m8<>-1) or Dead or (q > 150);
if (m2<>-1) or (m3<>-1) or (m4<>-1) then CountFizzle := CountFizzle + 1;
if Dead or (Weight > MyMaxWeight) then begin Result := false; exit; end;
if (q > 150) then NextTree := NextTree + 1;
until (m5<>-1) OR (m6<>-1) OR (m7<>-1) OR (m8<>-1) OR (CountFizzle = 10) OR (NextTree > 3);
if NextTree >= 3 then NextTree := 0;
end;
 
 
// Главная функция 
Begin 
InitTTilesArray;
InitCTilesArray;
InitSystem;
InitReg;
MarkTrees;
 
repeat
for i:= 0 to Length(ChopTilesArray) - 1 do
begin 
FindTypeEx($0F43,$ffff,backpack,False);
if (FindQuantity < 1) then UnloadOrDead;
AddToSystemJournal(IntToStr(findcount) + ' - Hatchet');
NewMoveXY(ChopTilesArray[i].x, ChopTilesArray[i].y, false, 1, false);
if not LumbCurTree(ChopTilesArray[i].tile, ChopTilesArray[i].x, ChopTilesArray[i].y, ChopTilesArray[i].z) then UnloadOrDead;
end;
until true
End.

Re: Ламбер

Posted: 17.12.2016 10:24
by drabadan
а сундук открыт?

Re: Ламбер

Posted: 17.12.2016 17:39
by Xper1al
drabadan wrote:а сундук открыт?
Да, он секъюрный

Re: Ламбер

Posted: 17.12.2016 18:41
by 80aX
Я у себя вызов процедуры CheckAxe поставил в самый конец разгрузки, прям перед

Code: Select all

AddToSystemJournal('Разгрузка закончена'); 
и чуть по другому переписал саму процедуру:
CheckAxe

Code: Select all

// проверяем кол-во топоров в паке, если <10 делаем ещё
procedure CheckAxe;
  begin
	while (Count(Hatchet1) < 10) do
	  begin
		FindType(IngotType,Sunduk);
		if (FindQuantity < 4) then exit;
		MoveItem(FindItem,4,Backpack,0,0,0);
		Wait(1000);
		if (Count(IngotType) >= 4) then
		  begin
			CancelMenu;
			WaitMenu('like','Deadly Tools');
			WaitMenu('like','Hatchet');
			UseObject(FindType(TinkType,Sunduk));
			WaitTargetObject(FindType(IngotType,Backpack));
			Wait(5000);
			WaitJournalLine(Now, 'You create|make|destroy|Stop|Fail|Success', 30000);
		  end;
		Wait(1000);
	 end;
  end;
И всё работает как часы.

Re: Ламбер

Posted: 18.12.2016 15:28
by Xper1al
80aX wrote:Я у себя вызов процедуры CheckAxe поставил в самый конец разгрузки, прям перед

Code: Select all

AddToSystemJournal('Разгрузка закончена'); 
и чуть по другому переписал саму процедуру:
CheckAxe

Code: Select all

// проверяем кол-во топоров в паке, если <10 делаем ещё
procedure CheckAxe;
  begin
	while (Count(Hatchet1) < 10) do
	  begin
		FindType(IngotType,Sunduk);
		if (FindQuantity < 4) then exit;
		MoveItem(FindItem,4,Backpack,0,0,0);
		Wait(1000);
		if (Count(IngotType) >= 4) then
		  begin
			CancelMenu;
			WaitMenu('like','Deadly Tools');
			WaitMenu('like','Hatchet');
			UseObject(FindType(TinkType,Sunduk));
			WaitTargetObject(FindType(IngotType,Backpack));
			Wait(5000);
			WaitJournalLine(Now, 'You create|make|destroy|Stop|Fail|Success', 30000);
		  end;
		Wait(1000);
	 end;
  end;
И всё работает как часы.
Спасибо! попробую

Re: Ламбер

Posted: 19.12.2016 0:23
by olimpik
80aX wrote:Я у себя вызов процедуры CheckAxe поставил в самый конец разгрузки, прям перед

Code: Select all

AddToSystemJournal('Разгрузка закончена'); 
и чуть по другому переписал саму процедуру:
CheckAxe

Code: Select all

// проверяем кол-во топоров в паке, если <10 делаем ещё
procedure CheckAxe;
  begin
	while (Count(Hatchet1) < 10) do
	  begin
		FindType(IngotType,Sunduk);
		if (FindQuantity < 4) then exit;
		MoveItem(FindItem,4,Backpack,0,0,0);
		Wait(1000);
		if (Count(IngotType) >= 4) then
		  begin
			CancelMenu;
			WaitMenu('like','Deadly Tools');
			WaitMenu('like','Hatchet');
			UseObject(FindType(TinkType,Sunduk));
			WaitTargetObject(FindType(IngotType,Backpack));
			Wait(5000);
			WaitJournalLine(Now, 'You create|make|destroy|Stop|Fail|Success', 30000);
		  end;
		Wait(1000);
	 end;
  end;
И всё работает как часы.
Если брать к примеру зулу, то происходит следующая ошибка
иногда остается не закрытое окно выбора производства предмета, в итоге 4 инга остаются прилочеными( так как якобы юзаются), он берет следующие 4 которые не могут состыковатся с предудщими так как они прилочены, юзает их, не получается сделать топор ломает один инг и все запара, он не может найти выбор топора так как теперь может делать только предметы из кол-ва ингов 3 штуки

cancelmenu ни как не закрывает этот выбор предметов для производства, я их 4 штуки в скрипт поставил проверить )

Re: Ламбер

Posted: 19.12.2016 0:42
by olimpik
Все же у топик стартера более верный скрипт он накидывает инги и стыкует их с теми что уже находятся в работе, как следствие нету заедания скрипта

Code: Select all

procedure CheckAxe;
  begin
     while (Count(Hatchet1) < 10) do
      begin
       CancelMenu;
        if (Count(IngotType) < 4) then
         begin
          FindType(IngotType,Backpack);
          if (FindQuantity < 4) then MoveItem(finditem,4,Sunduk,0,0,0);
          wait(1000);
          FindType(IngotType,Sunduk);
          if (FindQuantity > 4) then MoveItem(finditem,4,Backpack,0,0,0);
          wait(500);    
         end;
if (Count(IngotType) >= 4) then
        begin
         CancelMenu;
         WaitMenu('What would you like to make?','Deadly'); 
         wait(300);
         WaitMenu('What would you like to make?','Hatchet');
         wait(300);
         UseObject(FindType($1EBC,Sunduk));
         WaitTargetObject(FindType(IngotType,Backpack));
         Wait(5000);  
         CancelMenu; 
         wait(100);
         CancelMenu;
         WaitJournalLine(Now, 'You create|make|destroy|Stop|Fail|Success', 30000);
        end;
      Wait(1000);
    end;
  end;

Re: Ламбер

Posted: 19.12.2016 2:39
by 80aX
Рублю со старта зулу, пока не сталкивался с такой ситуацией) А графический клиент закрыт в этот момент? Я как то попадал на такие штуки(прилоченная вещь в паке) когда клиент открыт, приходится реконнект делать, но чтоб такую штуку словить без графического клиента, не видел.

У топик стартера процедура более хитрая, бесспорно, не знаю насколько она такая нужна... Ток её всё равно можно немного поправить. Добавить проверку на жмурика, а то убьют когда скрипт будет в цикле производства топоров и всё, скрипт на этом встанет.

Вот так например в главном цикле дописать:

Code: Select all

while (Count(Hatchet1) < 10) and (not Dead) do

Re: Ламбер

Posted: 19.12.2016 18:33
by Xper1al
Еще такой вопрос, реально ли к этому скрипту добавить движение к лодке, в случае смерти?

Re: Ламбер

Posted: 19.12.2016 19:30
by 80aX
Xper1al wrote:Еще такой вопрос, реально ли к этому скрипту добавить движение к лодке, в случае смерти?
А это зачем?
Реально конечно, стелс штука достаточно мощная, много чего можно реализовать. Тут всё зависит от желания и возможностей игрока)

Re: Ламбер

Posted: 19.12.2016 20:05
by Xper1al
80aX wrote:
Xper1al wrote:Еще такой вопрос, реально ли к этому скрипту добавить движение к лодке, в случае смерти?
А это зачем?
Реально конечно, стелс штука достаточно мощная, много чего можно реализовать. Тут всё зависит от желания и возможностей игрока)
ну реколы же по скрипту сам не пополняет и рано или поздно закончатся.

Re: Ламбер

Posted: 20.12.2016 2:10
by 80aX
Xper1al wrote: ну реколы же по скрипту сам не пополняет и рано или поздно закончатся.
А лодка то тут причём?)

Re: Ламбер

Posted: 20.12.2016 2:41
by Xper1al
80aX wrote:
Xper1al wrote: ну реколы же по скрипту сам не пополняет и рано или поздно закончатся.
А лодка то тут причём?)
Возле неё оживает)

Re: Ламбер

Posted: 20.12.2016 13:14
by 80aX
Xper1al wrote: Возле неё оживает)
Вот оно чё) не знал, думал только когда на ней находишься ресает.

Эт не сложно реализовать, только тут мне кажется нужно что то одно выбрать либо через .rescue и рунбуку возвращаться, либо только у лодки ресаться.

Можно и зарядку рунбуки добавить в скрипт, тоже не сложная процедура.

быстрым поиском нашёл скрипт для зулу с зарядкой, не проверял, но в описании написано что заряжает рунбуку, как вариант, по аналогии сделать для себя такую же процедуру.
http://stealth.od.ua/forum/viewtopic.php?f=3&t=2387

Re: Ламбер

Posted: 20.12.2016 16:36
by olimpik
Вот так замени и после смерти когда вернется по рунбуку возьмет из сундука 1 рекол скрол и положит его в рунбук

Code: Select all

// Идем к сундуку и выгружаемся
procedure UnloadOrDead;
begin
NewMoveXY(xTileSunduk, yTileSunduk, false, 1, false);
if not Dead then begin Discharge; end
else begin AddToSystemJournal('Персонаж мертв.');
wait(1000);
uosay('.rescue');
wait(3000);
Addtosystemjournal('IS_DEAD');
home;
useobject(Sunduk);
wait(3000);
findtype($1F4C,Sunduk);
checksave;
if (findcount > 0) then MoveItem(finditem, 1, RB, 0,0,0);
wait(3000);
end; 
end;