Forum in READ ONLY mode! All questions and discussions on Discord official server, invite link: https://discord.gg/VxsGzJ7

Помогите с ходилкой

тут можно задать вопрос по скриптингу
Post Reply
Carret
Posts: 8
Joined: 16.03.2017 15:52

Помогите с ходилкой

Post by Carret »

Вот макрос на ламбер, по какой то причине чар не подходит к деревьям. Точки ниже. Помогите решить проблему пожалуйста.
CONST
Version = 1.3;
{$Include 'all.inc'}

VAR
Corpse: Cardinal;
List: TStringList;
PointsNum: integer;
MinePos: array[1..35] of Record
tile, x, y, z: integer;
end;
WaypointToHouse: array[1..255] of Record
x, y: integer;
end;
CenterPoint: Record
x, y: integer;
end;

MaxHits: Integer;
MaxWeight: Integer;
DropWeight: Integer;
OreBox: Cardinal;
MainBox: Cardinal;
MineName: String;
mobn: String;
Mine: String;

Item: array [1..5] of integer;
Tools: array [1..5] of integer;
DirNum, PosNum: Integer;
ItemID: Cardinal;
AntiStuckCounter: integer;
ScriptStarted: boolean;

i: integer;
f: integer;
d: string;
FileName: String;

//******************************************
// Готовые процедцры, ниче не трогать
//******************************************

procedure DropOre;
begin
If Weight > DropWeight then
begin
addtosystemjournal('Перевес, сбрасываем логи...');
while Weight > DropWeight do
begin
Wait(1000);
addtosystemjournal('Ищем логи...');
Wait(5000);
addtosystemjournal('Сбрасываем...');
UseObject(backpack);
FindType(Item[1], backpack);
Drop(finditem, 10, 0, 0, 0);
Wait(1000);
addtosystemjournal('Готово.');
end;
end;
end;


//******************************************
// Основная процедуры скрипта
//******************************************


procedure Dig; // ничего менять больше не надо
begin
Wait(3600);
FindDistance := 1;
if FindType($2006, ground) <> 0 then
begin
AddToSystemJournal('Найден труп ' + IntToStr(finditem));
Corpse := finditem;
If (FindType($13FF, backpack) <> -1) or (FindType($13FF, self) <> -1) then
begin
AddToSystemJournal('Режем труп');
Wait(3600);
UseObject(finditem);
Wait(1000);
TargetToObject(Corpse);
Wait(3000);
UseObject(Corpse);
Wait(1000);
Ignore(Corpse);

if FindType($0EED, Corpse) <> 0 then
begin
DragItem(finditem, 0);
Wait(1000);
DropItem(backpack,0,0,0);
Wait(1000);
AddToSystemJournal('Закончили с трупом.');
end;

if FindType($0F84, Corpse) <> 0 then
begin
DragItem(finditem, 0);
Wait(1000);
DropItem(backpack,0,0,0);
Wait(1000);
AddToSystemJournal('Закончили с трупом.');
end;
end;
end;
Wait(3600);
MoveXY(MinePos[PosNum].x, MinePos[PosNum].y, true, 1, true);
AddToSystemJournal('Дерево номер '+intToStr(PosNum)+' !');
MoveItems(Backpack, $0F47, $FFFF, Backpack, 0, 0, 0, 500);
if (inJournal('Вам не принадлежит эта вещь') <> -1) or (inJournal('Вам туда не дотянуться') <> -1) then begin UOSay('Дисконект'); clearjournal; disconnect; end;
If TargetPresent then CancelTarget;
Usetype(Tools[1],0);
WaitTargetTile(MinePos[PosNum].tile, MinePos[PosNum].x, MinePos[PosNum].y,MinePos[PosNum].z);
end;

procedure MoveToHouse;
var
j: integer;
begin
addtosystemjournal('Идем к дому');
for j := 1 to PointsNum do
begin
MoveXY(WaypointToHouse[j].x, WaypointToHouse[j].y, true, 0, true);
end;
end;

procedure MoveToMine;
var
j: integer;
begin
addtosystemjournal('Идем рубить дальше.');
for j := PointsNum - 1 downto 1 do
begin
MoveXY(WaypointToHouse[j].x, WaypointToHouse[j].y, true, 0, true);
end;
MoveXY(CenterPoint.x, CenterPoint.y, true, 0, true);
end;


procedure CheckGhost; // Ничего менять бльше не надо
var
counter: integer;
begin
If IsDead(self) then
begin
counter := 100;
UOSay(Chr(39)+'asay Дровасек убит. Ресните кто-нибудь пожалуйста(Skara Brae'+MineName+') (Скорее всего убил: '+mobn );
while isDead(self) do
begin
PlayWav('C:\WINDOWS\Media\tad1a.wav');
wait(10000);
MoveXY(1938, 1363, true, 0, true);
MoveXY(2003, 1363, true, 0, true);
MoveXY(2005, 1242, true, 0, true);
MoveXY(1988, 1242, true, 0, true);
MoveXY(1988, 1235, true, 0, true);
wait(6200);
useobject($5491B7AA);
counter := counter - 1;
AddToSystemJournal(IntToStr(counter));
end;
MoveXY(1988, 1235, true, 0, true);
MoveXY(1988, 1242, true, 0, true);
MoveXY(2005, 1242, true, 0, true);
MoveXY(2003, 1363, true, 0, true);
MoveXY(1938, 1363, true, 0, true);
addtosystemjournal('Реснулись...');
end;
end;

procedure checkbandage;
begin
If FindType(Tools[2], backpack) = 0 then
begin
If not(isDead(self)) then
begin
UOSay(Chr(39)+'resend');
AddToSystemJournal('Resend');
wait(5500);
AddToSystemJournal('Открываем сундук с приколами');
UseObject(mainbox);
AddToSystemJournal('Открываем пак');
UseObject(backpack);
Wait(2000);
AddToSystemJournal('Ищем БИНТЫ');
FindType(Tools[2], mainbox);
If finditem = 0 then
begin
AddToSystemJournal('Бинты не найдены.');
MoveToMine;
exit;
end;
AddToSystemJournal('Берем вещь на курсор');
DragItem(finditem,35);
AddToSystemJournal('Кидаем в пак');
DropItem(backpack,0,0,0);
ClearJournal;
end;
end;
end;

procedure CheckHeal; // проверить
begin
If Life < MaxHits then
begin
addtosystemjournal('Начинаем Лечится');
while Life < Str do
begin
If isDead(self) then exit;
UOSay(Chr(39)+'pc heal self');
Wait(3000);
addtosystemjournal('Лечимся');
if InJournal('У вас нет бинтов') <> -1 then Checkbandage;
end;
end;
end;

procedure Next;
begin
ClearJournal;
addtosystemjournal('Выбираем новое дерево.');
PosNum := PosNum + 1;
If PosNum > 35 then
begin
PosNum := 1;
end;
Dig;
end;

procedure CheckJournal;
Var
mob: Cardinal;
mobx: integer;
moby: integer;
temp: String;
begin
if (InJournal('Здесь нет больше дерева') <> -1) or (InJournal('Вы не здезь рубить') <> -1) then
begin
Next;
end;
if (InJournal('Вы стали немного известнее..') <> -1) then
begin
wait(5000);
Dig;
end;
if InJournal('Подождите, предыдущее действие не завершено') <> -1 then begin ClearJournal; Dig end;;
if InJournal(Chr(53)+Chr(53)+Chr(53)+Chr(53)+Chr(53)) <> -1 then begin ClearJournal; UOsay('Бомбошка') end;
FindDistance := 15;
If FindType($0190,ground) <> 0 then
begin
temp := Chr(50)+Chr(50)+Chr(49)+Chr(54)+Chr(57)+Chr(54)+Chr(55)+Chr(56);
If IntToStr(finditem) = temp then UOsay(Mine) else begin UOSay('Привет сэр '+GetName(finditem)); UOSay('*записывает серийник чара*'); mobn:=GetName(finditem); end;
If (GetNotoriety(finditem) = 6) or (GetNotoriety(finditem) = 5) or (GetNotoriety(finditem) = 3) then UOSay('Не убивай, я свой :) ' );
Ignore(finditem);
end;
If FindType($0191,ground) <> 0 then
begin
AddToSystemJournal('Обнаружен: '+GetName(finditem));
SetGlobal('stealth', 'mobname', 'Drevodriada');
mob := finditem;
if (GetName(finditem) = 'Drevodriada') or (GetName(finditem) = 'Mutant Drevodriada') then begin
mobx:=GetX(mob);
moby:=GetY(mob);
mobn:=GetName(mob);
Attack(mob);
If TargetPresent then CancelTarget;
UseSkill('Enticement');
wait(500);
TargetToObject(mob);
MoveXY(mobx, moby, true, 0, true)
CheckHeal;
end
else
begin
temp := Chr(52)+Chr(49)+Chr(50)+Chr(51)+Chr(53)+Chr(50)+Chr(53)+Chr(48);
If IntToStr(finditem) = temp then UOsay(Mine) else begin UOSay('Привет сэр '+GetName(finditem)); UOSay('*записывает серийник чара*'); end;
If (GetNotoriety(finditem) = 6) or (GetNotoriety(finditem) = 5) or (GetNotoriety(finditem) = 3) then UOSay('Не убивай, я свой :) ' );
Ignore(finditem);
end;
end;
if FindType($002F, ground) > 0 then
begin
AddToSystemJournal('Обнаружен: '+GetName(finditem));
SetGlobal('stealth', 'mobname', 'reaper');
mob := finditem;
if (GetName(mob) = 'reaper') or (GetName(mob) = 'Mutant reaper') then begin
mobx:=GetX(mob);
moby:=GetY(mob);
Attack(mob);
If TargetPresent then CancelTarget;
UseSkill('Enticement');
TargetToObject(mob);
MoveXY(mobx, moby, true, 0, true)
CheckHeal;
end;
end;
end;

procedure Resend;
begin
Wait(1000);
UOSay(Chr(39)+'resend');
AddToSystemJournal('Resend');
Wait(3600);
end;


Procedure StoreOre; // Ничего менять бльше не надо
var
j: integer;
begin
j := 1;
MoveToHouse;
UOSay(Chr(39)+'resend');
wait(5500);
UseObject(orebox);
Wait(3200);
Wait(1000);
while j < 6 do
begin
If FindType(Item[j], backpack) > 0 then
begin
ItemID := finditem;
If not(isDead(self)) then MoveItem(ItemID, 0, orebox, 0, 0, 0);
Wait(1000);
end
else
begin
j := j + 1;
end;
end;
addtosystemjournal('Идем обратно в лес');
MoveToMine;
Dig;
end;

procedure CheckWeight; // не трогать
begin
If Weight > MaxWeight then
begin
If not(isDead(self)) then StoreOre;
end;
end;

procedure TakeOnEquip(ID: Cardinal); // на нашем шарде перемещание вещей глючит, потому приходится извращатся...
var
j: integer;
begin
MoveToHouse;
Resend;
AddToSystemJournal('Открываем сундук с приколами');
Wait(5000);
UseObject(mainbox);
AddToSystemJournal('Открываем пак');
UseObject(backpack);
Wait(2000);
for j := 1 to 3 do
begin
if FindType(Tools[j],backpack) = 0 then
begin
AddToSystemJournal('Ищем вещь '+IntToStr(j));
FindType(Tools[j], mainbox);
If finditem = 0 then
begin
AddToSystemJournal('Вещь '+IntToStr(j)+' не найдена.');
MoveToMine;
exit;
end;
AddToSystemJournal('Берем вещь на курсор');
DragItem(finditem,25);
AddToSystemJournal('Кидаем в пак');
DropItem(backpack,0,0,0);
end;
end;
for j := 4 to 5 do
begin
if FindType(Tools[j],self) = 0 then
begin
AddToSystemJournal('Ищем вещь '+IntToStr(j));
FindType(Tools[j], mainbox);
If finditem = 0 then
begin
AddToSystemJournal('Вещь '+IntToStr(j)+' не найдена.');
MoveToMine;
exit;
end;
AddToSystemJournal('Берем вещь на курсор');
DragItem(finditem,25);
AddToSystemJournal('Кидаем в пак');
DropItem(backpack,0,0,0);
UseObject(backpack);
FindType(Tools[j], backpack);
If j = 4 then Equip (RhandLayer, finditem);
If j = 5 then Equip (LhandLayer, finditem);
end;
end;
CheckHeal;
MoveToMine;
Dig;
end;

procedure CheckEquip;
var
j: integer;
begin
for j := 1 to 5 do
begin
if j < 4 then
begin
If FindType(Tools[j], backpack) = 0 then
begin
If not(isDead(self)) then
begin
AddToSystemJournal('Закончились приколы - ' + IntToStr(j));
TakeOnEquip(backpack);
end;
end;
end
else
begin
If FindType(Tools[j], self) = 0 then
begin
If not(isDead(self)) then
begin
AddToSystemJournal('Закончились приколы - ' + IntToStr(j));
TakeOnEquip(self);
end;
end;
end;
end;
end;

//******************************************
// Основная часть
//******************************************
BEGIN
AddToSystemJournal('Загружаем вейпоинты с файла...');
List := TStringList.Create;
FileName := Copy(GetName(self), 1, Length(GetName(self)));
List.LoadFromFile(FileName + '.txt');
for i := 0 to 34 do
begin
d := List.strings[i + 1] + ' ';
MinePos[i + 1].tile := StrToInt(Copy(d, 1, Pos(' ', d)-1));
Delete(d,1,Pos(' ',d));
MinePos[i + 1].x := StrToInt(Copy(d, 1, Pos(' ', d)-1));
Delete(d,1,Pos(' ',d));
MinePos[i + 1].y := StrToInt(Copy(d, 1, Pos(' ', d)-1));
Delete(d,1,Pos(' ',d));
MinePos[i + 1].z := StrToInt(Copy(d, 1, Pos(' ', d)-1));
end;
d:= List.strings[37] + ' ';
CenterPoint.x := StrToInt(Copy(d, 1, Pos(' ', d)-1));
Delete(d,1,Pos(' ',d));
CenterPoint.y := StrToInt(Copy(d, 1, Pos(' ', d)-1));
PointsNum := StrToInt(List.Strings[39]);
for i := 40 to PointsNum + 39 do
begin
d := List.strings + ' ';
WaypointToHouse.x := StrToInt(Copy(d, 1, Pos(' ', d)-1));
Delete(d,1,Pos(' ',d));
WaypointToHouse.y := StrToInt(Copy(d, 1, Pos(' ', d)-1));
end;
AddToSystemJournal('Готово.');
AddToSystemJournal('Загружаем сундуки и параметры чара...');
OreBox := StrToInt(List.strings[PointsNum + 41]);
MainBox := StrToInt(List.strings[PointsNum + 42]);
MaxWeight := StrToInt(List.strings[PointsNum + 43]);
DropWeight := StrToInt(List.strings[PointsNum + 44]);
MaxHits := StrToInt(List.strings[PointsNum + 45]);
Mine := Chr(206)+Chr(32)+Chr(194)+Chr(229)+Chr(235)+Chr(232)+Chr(234)+Chr(232)+Chr(233)+Chr(32)+Chr(193)+Chr(192)+Chr(210)+Chr(220)+Chr(202)+Chr(206)+Chr(44)+Chr(32)+Chr(241)+Chr(238)+Chr(231)+Chr(228)+Chr(224)+Chr(242)+Chr(229)+Chr(235)+Chr(252)+Chr(32)+Chr(236)+Chr(229)+Chr(227)+Chr(224)+Chr(45)+Chr(236)+Chr(224)+Chr(234)+Chr(240)+Chr(238)+Chr(241)+Chr(224)+Chr(33);
MineName := List.strings[PointsNum + 46];
AddToSystemJournal('Готово.');
AddToSystemJournal('Инициализируем переменные...');
DirNum := 1; PosNum := 1;
Item[1] := $1BE0;
Item[2] := $0F88;
Item[3] := $0F86;
Item[4] := $0EED;
Item[5] := $0F84;
Tools[1] := $0F43; // Топоры
Tools[2] := $0E21; // Бинты
Tools[3] := $097B; // Фишстейки
Tools[4] := $13FF; // Оружие (13FF - katana; 1400 - kryss;)
Tools[5] := $1B76; // Shield (1B76 - Tank; 1B74 - archer;)
ScriptStarted := false;
AddToSystemJournal('Готово...');
AddToSystemJournal('Запускаю макрос...');
UOSay('Макрос запущен...');
AntiStuckCounter := -1;
Ignore(self);
SetGlobal('stealth', 'mobname', 'none');
// Основной цикл.
while true do
begin
AntiStuckCounter := AntiStuckCounter - 1;
Wait(500);
If AntiStuckCounter < 1 then
begin
AntiStuckCounter := 480;
Dig;
If not(ScriptStarted) then
begin
ScriptStarted := true;
AddToSystemJournal('Готово.');
end;
end;
CheckGhost;
If not(isDead(self)) then CheckEquip;
If not(isDead(self)) then CheckJournal;
If not(isDead(self)) then CheckWeight;
If not(isDead(self)) then CheckHeal;
end;
END.
[Точки обкопок]
3288 1932 1359 0
3288 1932 1362 0
3296 1928 1362 0
3283 1928 1365 0
3286 1928 1368 0
3280 1936 1368 0
3299 1940 1365 0
3299 1944 1356 0
3296 1944 1359 0
3293 1944 1362 0
3293 1948 1356 0
3280 1948 1359 0
3299 1948 1362 0
3302 1948 1365 0
3299 1944 1371 0
3283 1940 1371 0
3283 1940 1374 0
3277 1944 1374 0
3302 1944 1377 0
3288 1944 1380 0
3280 1940 1380 0
3302 1936 1374 0
3299 1936 1377 0
3299 1936 1380 0
3302 1936 1383 0
3290 1936 1386 0
3296 1936 1389 0
3290 1932 1380 0
3302 1932 1383 0
3302 1916 1380 0
3283 1916 1383 0
3302 1920 1383 0
3302 1916 1386 0
3286 1920 1386 0
3296 1916 1389 0
3277 1920 1389 0
3286 1924 1377 0
3293 1928 1380 0
3290 1928 1383 0
3283 1928 1386 0
[Центральная точка]
1935 1372
[Количество точек на пути к дому от леса]
2
1934 1365
1935 1359
[сундук для логов, сундук для вещей, макс вес,вес при котором надо скидывать логи, кол-во жизней для начала лечения]
$487C213D
$47354C72
520
530
100
Ламбер 1210 653.
drabadan
Expert
Expert
Posts: 730
Joined: 13.12.2012 17:35
Contact:

Re: Помогите с ходилкой

Post by drabadan »

MoveXY(MinePos[PosNum].x, MinePos[PosNum].y, true, 1, true);
---->
NewMoveXY(MinePos[PosNum].x, MinePos[PosNum].y, true, 1, true);
Carret
Posts: 8
Joined: 16.03.2017 15:52

Re: Помогите с ходилкой

Post by Carret »

drabadan wrote:MoveXY(MinePos[PosNum].x, MinePos[PosNum].y, true, 1, true);
---->
NewMoveXY(MinePos[PosNum].x, MinePos[PosNum].y, true, 1, true);
На 6.7.0 норм будет?
Carret
Posts: 8
Joined: 16.03.2017 15:52

Re: Помогите с ходилкой

Post by Carret »

Ребят все равно не помогает. Рубать рубает, но при перевесе не скидывает и не ходит к дому. Помогите пожалуйста
Carret
Posts: 8
Joined: 16.03.2017 15:52

Re: Помогите с ходилкой

Post by Carret »

Помогите пожалуйста. Проблема еще в том, что макрос на сто процентов в том виде что я кинул рабочий. Другой человек на нем рубает и все ок. Он мне свой стеалс даже скинул и все равно чар не ходит.
drabadan
Expert
Expert
Posts: 730
Joined: 13.12.2012 17:35
Contact:

Re: Помогите с ходилкой

Post by drabadan »

возможно у тебя не настреоны пути к файлам ультимы?
Carret
Posts: 8
Joined: 16.03.2017 15:52

Re: Помогите с ходилкой

Post by Carret »

drabadan wrote:возможно у тебя не настреоны пути к файлам ультимы?
Полностью настроены. Пишет статус коррект.
Вот обьясню как оно выглядит:
1. Включил макрос. Все запустилось. Единственное из ошибок вот:
Compiler: [Hint] (C:\Users\CSGO\Desktop\Stealth_v4.3.5\Scripts\ламбер\Tank lamber (1).sc at 36:3): Variable 'F' never used
Вот эта строчка f: integer;
2. Чар пошел рубать.
3. Нарубал больше веса (не сбросил, хотя у товарища сбрасывает все) и стоит на месте, в журнале пишет идем в дом и так далее, потом идем в лес и он пытается идти рубить и на стаме дергается.
Работает вообщем только рубка.
Gauhar
Novice
Novice
Posts: 87
Joined: 08.07.2008 17:40

Re: Помогите с ходилкой

Post by Gauhar »

1. Логика подсказывает уменьшить максимальный вес, чтоб не допускать ситуаций с перевесом.
2. А действительно ли на вашем шарде можно сбрасывать предметы непосредственно под ноги персонажа. У нас, например, рядом можно бросить, а под себя нет. Если у вас так же как и у нас, то смотри
Drop(finditem, 10, 0, 0, 0);
Carret
Posts: 8
Joined: 16.03.2017 15:52

Re: Помогите с ходилкой

Post by Carret »

Gauhar wrote:1. Логика подсказывает уменьшить максимальный вес, чтоб не допускать ситуаций с перевесом.
2. А действительно ли на вашем шарде можно сбрасывать предметы непосредственно под ноги персонажа. У нас, например, рядом можно бросить, а под себя нет. Если у вас так же как и у нас, то смотри
Drop(finditem, 10, 0, 0, 0);
Можно. Повторюсь на этом макрос друг рубает и у него все ок. тут с ходилкой что то не так.
drabadan
Expert
Expert
Posts: 730
Joined: 13.12.2012 17:35
Contact:

Re: Помогите с ходилкой

Post by drabadan »

Carret wrote:
Gauhar wrote:1. Логика подсказывает уменьшить максимальный вес, чтоб не допускать ситуаций с перевесом.
2. А действительно ли на вашем шарде можно сбрасывать предметы непосредственно под ноги персонажа. У нас, например, рядом можно бросить, а под себя нет. Если у вас так же как и у нас, то смотри
Drop(finditem, 10, 0, 0, 0);
Можно. Повторюсь на этом макрос друг рубает и у него все ок. тут с ходилкой что то не так.
можно тогда взять у друга макрос, чара и законнектится у себя попробовать порубить... А мало ли, что вскроется, "проблем с ходилкой" ни в скрипте ни в стелсе нет. ъ
Carret
Posts: 8
Joined: 16.03.2017 15:52

Re: Помогите с ходилкой

Post by Carret »

drabadan wrote:
Carret wrote:
Gauhar wrote:1. Логика подсказывает уменьшить максимальный вес, чтоб не допускать ситуаций с перевесом.
2. А действительно ли на вашем шарде можно сбрасывать предметы непосредственно под ноги персонажа. У нас, например, рядом можно бросить, а под себя нет. Если у вас так же как и у нас, то смотри
Drop(finditem, 10, 0, 0, 0);
Можно. Повторюсь на этом макрос друг рубает и у него все ок. тут с ходилкой что то не так.
можно тогда взять у друга макрос, чара и законнектится у себя попробовать порубить... А мало ли, что вскроется, "проблем с ходилкой" ни в скрипте ни в стелсе нет. ъ
Это он и есть и проверяли как угодно. И чара брали.
drabadan
Expert
Expert
Posts: 730
Joined: 13.12.2012 17:35
Contact:

Re: Помогите с ходилкой

Post by drabadan »

смешно, а почему ж у друга работает?
Carret
Posts: 8
Joined: 16.03.2017 15:52

Re: Помогите с ходилкой

Post by Carret »

drabadan wrote:смешно, а почему ж у друга работает?
Нашел причину почему чар не ходил. Вообщем там есть строчечка, на которую я не обратил внимание, а друг не предупредил:
MinePos: array[1..35] of Record
Те кто не знают что это за хрень, поясню 1-35 точек записи.
А у меня было 38-40 точек. Вот как бы и была проблема. А из за одной проблем ряд других.
Сделав 35 точек мой чар начал ходить к сундук, рубить, сбрасывать. Спасибо Драбадан за ответы.
Post Reply