А выражение "проще научить человека ловить рыбу чем кормить его ею всегда" растолковывается скорее "научись программировать на паскале и пиши скрипты сам".

Ну вобшето ему не кто не сказал пиши скрипт самBlaze wrote:Есть люди, далёкие от программирования, но играющие в УО. На этом форуме они расчитывают получить помощь, а не отказ в помощи.
А выражение "проще научить человека ловить рыбу чем кормить его ею всегда" растолковывается скорее "научись программировать на паскале и пиши скрипты сам".
Уверен что именно мой скрипт тестил? У меня он не кладет мешок в пак, мешки лежат в суднуке.Там же мешок и наполняется.При заполнении мешок перекидывается в соответствующий сундук.Kynep wrote:Роняет он неки, хоть убей. Без дисконектов и прочего. Щас собрал штук 25 за 30 минут работы. Кароч, дело такое, чар с мешком в паке, пускаю скрипт, наполняет пак и начинает кидать на пол. Т.е. он не видит мешок после реконекта.
RaTaMaHaTTa wrote:Ну вобшето ему не кто не сказал пиши скрипт самBlaze wrote:Есть люди, далёкие от программирования, но играющие в УО. На этом форуме они расчитывают получить помощь, а не отказ в помощи.
А выражение "проще научить человека ловить рыбу чем кормить его ею всегда" растолковывается скорее "научись программировать на паскале и пиши скрипты сам".![]()
Там поменять то делов 2 минуты
И если человек играющий в уо не может заменить типы то уж извини .
Качайтесь на Uo lope.
Code: Select all
Program Tinker_Necklace;
const
Sunduk_With_Iron_and_Tools=$40160e74;
Sunduk_With_Empty_Bags=$4015fa2e;
Sunduk_With_Full_Bags=$40160e74;
Bag=$0E76;
Tools=$1EBC;
Ingot=$1BEF;
Pig=$09BB;
Necklace=$1085;
var
k : integer;
TimeStart : TDateTime;
Neck_Bag : Cardinal;
Quantity : integer;
procedure Check_Necklace;
begin
Neck_Bag:=FindType(Bag,Backpack);
if Quantity<255 then
begin
FindType(Necklace,Backpack);
if FindCount>0 then
while FindCount>0 do
begin
MoveItem(FindItem,1,Neck_Bag,0,0,0);
wait(250);
AddToSystemJournal('В бекпаке есть некласы - перемещаем в мешок!');
wait(250);
UseObject(Neck_Bag);
wait(250);
FindType(Necklace,Neck_Bag);
Quantity:=FindCount;
if Quantity=255 then
begin
AddToSystemJournal(IntToStr(Quantity)+' necklaces на данный момент в мешке.');
MoveItem(Neck_Bag,1,Sunduk_With_Full_Bags,0,0,0);
wait(250);
AddToSystemJournal('Мешок заполнен в backpacke. Берём новый');
UseObject(Sunduk_With_Empty_Bags);
wait(250);
FindType(Bag,Sunduk_With_Empty_Bags);
if FindCount>0 then
begin
MoveItem(FindType(Bag,Sunduk_With_Empty_Bags),1,Backpack,0,0,0);
wait(250);
Neck_Bag:=FindType(Bag,Backpack);
end
FindType(Necklace,Neck_Bag);
Quantity:=FindCount;
end;
FindType(Necklace,Backpack);
end;
end
else
begin
MoveItem(Neck_Bag,1,Sunduk_With_Full_Bags,0,0,0);
wait(250);
Quantity:=0;
end
end;
procedure Check_Bag;
begin
Neck_Bag:=FindType(Bag,Backpack);
if FindCount>0 then
begin
UseObject(Neck_Bag);
wait(250);
FindType(Necklace,Neck_Bag);
Quantity:=FindCount;
if Quantity>0 then AddToSystemJournal(IntToStr(Quantity)+' necklaces на данный момент в мешке.');
if Quantity=0 then AddToSystemJournal('Начинаем новую партию изделий.');
end
else
begin
AddToSystemJournal('Мешок не найден в backpacke. Берём новый');
UseObject(Sunduk_With_Empty_Bags);
wait(250);
FindType(Bag,Sunduk_With_Empty_Bags);
if FindCount>0 then
begin
MoveItem(FindType(Bag,Sunduk_With_Empty_Bags),1,Backpack,0,0,0);
wait(250);
end
end
end;
procedure Check_World_Save;
begin
if InJournal('saving')<>-1 then
begin
ClearJournal;
k:=0;
repeat
wait(10000)
k:=k+1;
AddToSystemJournal('World is saving more than '+IntToStr(k*10)+' seconds.');
until (InJournal('data')<>-1) or (k>30)
end
end;
procedure Check_Connect;
begin
if not Connected then
while not Connected do
begin
Connect;
wait(1000);
end
end;
procedure Check_Iron;
begin
FindType(Ingot,Backpack);
if (FindCount=0) OR (Count(Ingot)<50) then
begin
UseObject(Sunduk_With_Iron_and_Tools);
wait(250);
FindType(Ingot,Sunduk_With_Iron_and_Tools);
if (FindCount>0) and (CountEx(Ingot,$0000,Sunduk_With_Iron_and_Tools)>50) then
begin
MoveItem(FindItem,50,Backpack,0,0,0);
wait(250);
AddToSystemJournal('Добрали 50 iron ingots. На данный момент имеем '+IntToStr(Count(Ingot))+' штук. Осталось ещё '+IntToStr(CountEx(Ingot,$0000,Sunduk_With_Iron_and_Tools))+' iron ingots.');
end
else
AddToSystemJournal('Ошибка во время добора Iron Ignots.');
end
end;
Begin
ClearJournal;
while not Dead do
begin
Check_Connect;
Check_Necklace;
Check_Iron;
Check_Bag;
AddToSystemJournal('Попытка сделать неклас - использую тулс.');
k:=0;
TimeStart:=Now;
WaitMenu( 'Tinkering' , 'Jew' );
WaitMenu( 'Jew' , 'neck' );
UseObject(FindType(Tools,Backpack));
repeat
wait(100);
k := k + 1;
Check_World_Save;
until (InJournalBetweenTimes('You put|failed', TimeStart, Now)<>-1) or (k > 300);
wait(100);
// Проверка - не упал ли на землю некласы!
FindType(Necklace, Ground);
if FindCount > 0 then
while FindCount > 0 do
begin
MoveItem(FindItem,1,Neck_Bag,0,0,0);
AddToSystemJournal('Подняли с пола неклас.');
wait(600);
FindType(Necklace, Ground);
End;
// Конец такой проверки
FindType(Necklace,Backpack);
if Count(Necklace)>0 then Check_Necklace;
end
End.
Code: Select all
Program kluch;
{$Include 'all.inc'}
{$Include 'CheckLag.inc'}
Const
Sunduk_With_Iron_and_Tools=$40325F58; // сундук с айрон инготами и тинкер тулсами
Sunduk_With_Empty_Bags=$40F09DA0; // сундук с пустыми сумочками
Sunduk_With_Full_Bags=$40F08386; // сундук ,куда складываем заполненные сумочки
Bag=$0E76;
Tools=$1EBC;
Ingot=$1BEF; //(Antares)
Eda=$097B;
MaxQnt=250; //максимальное кол-во никлейсов в сумке
Var
NeckType: array of word;
CurrentBag: cardinal;
i: integer;
LastContOpen: TDateTime;
procedure Check_World_Save;
begin
if InJournal('saving')<>-1 then
begin
SetJournalLine(InJournal('saving'),'');
SetJournalLine(InJournal('data'),'');
i:=0;
repeat
wait(10000);
i:=i+1;
AddToSystemJournal('World is saving more than '+IntToStr(i*10)+' seconds.');
until (InJournal('data')<>-1) or (i>30);
end;
end;
procedure LoadIron;
Begin
If Dead Or (Not Connected) then Exit;
If Count(Ingot)<2 then
begin
FindTypeEx(Ingot,$0000,Sunduk_With_Iron_and_Tools,false);
If Not DragItem(FindItem,100) then AddToSystemJournal('В сундуке кончились айрон инготы!');
Wait(500);
If (Weight>(STR*4)) then
begin
DropItem(Sunduk_With_Iron_and_Tools,0,0,0);
raiseException(erCustomError,'У НАС ЯВНЫЙ ПЕРЕГРУЗ!!!МЫ НЕ МОЖЕМ ВЗЯТЬ ИНГОТЫ!!!');
end
Else DropItem(backpack,0,0,0);
end;
End;
procedure Check_Food;
begin
UseObject(Sunduk_With_Iron_and_Tools)
wait(250);
FindType(Eda,Sunduk_With_Iron_and_Tools);
if FindCount>0 then
begin
MoveItem(FindItem,1,Backpack,0,0,0);
wait(250);
UseObject(FindItem);
FindType(Eda,Backpack);
if FindCount=0 then AddToSystemJournal('Покушали.');
if FindCount>0 then MoveItem(FindItem,1,Sunduk_With_Iron_and_Tools,0,0,0);
end
else
AddToSystemJournal('a Eda не был найден в сундуке.');
end;
procedure LoadTinkerTools;
Begin
If Dead Or (Not Connected) then Exit;
If Count(Tools)<1 then
begin
If FindType(Tools,Sunduk_With_Iron_and_Tools)=0 then AddToSystemJournal('Не могу найти тинкер тулсу!')
Else Moveitem(FindItem,1,backpack,0,0,0);
end;
End;
procedure Craftkluch;
Var
STime: TDateTime;
FailCounter: integer;
Begin
Check_World_Save;
Stime:=Now;
UseType(Tools,$FFFF);
AutoMenu('Tinkering','Keys');
AutoMenu( 'Keys','Iron key' );
WaitJournalLine(STime,'You put|failed',30000);
wait(200);
If (InJournalBetweenTimes('failed',Stime,Now)<>-1) then FailCounter:=(FailCounter+1);
If (InJournalBetweenTimes('You put',Stime,Now)<>-1) then FailCounter:=0;
If FailCounter>=20 then Wait(30000);
End;
procedure FindEmptyBag;
var
TempBag: cardinal;
SumQnt: integer;
Begin
FindType(bag,Sunduk_With_Empty_Bags);
While FindCount>0 do
begin
If Dead or (Not Connected) then Exit;
Check_World_Save;
TempBag:=FindItem;
UseObject(FindItem);
Wait(1000);
SumQnt:=CountEx(NeckType[0],$FFFF,TempBag)+CountEx(NeckType[1],$FFFF,TempBag);
If (SumQnt<MaxQnt) then
begin
AddToSystemJournal('запоминаем пустую сумочку...');
CurrentBag:=TempBag;
Exit;
end
else
begin
AddToSystemJournal('Найденная сумочка забита до отказа!Перекладываем в сундук с заполненными сумками.');
MoveItem(TempBag,1,Sunduk_With_Full_Bags,0,0,0);
Wait(1000);
end;
FindType(bag,Sunduk_With_Empty_Bags);
wait(200);
end;
If (FindCount<1) then raiseException(erCustomError,'Свободных сумочек больше нету.останавливаем скрипт.')
End;
procedure OpenContainer(f : boolean);
// если f - true - просто открываем все нужные контейнеры, то есть:
// SundukIngots,SundukEmptyBag,Sunduk2Craft и curbag (если он не равен 0)
// если f - false - проверяем, был ли реконнект чара после последнего
// открывания контейнеров, если был - переоткрываем контейнеры и записываем
// новое значение в переменную LastContOpen, если не был - ничего не делаем
Begin
If Dead or (Not Connected) then Exit;
if (f = true) or (LastContOpen < ConnectedTime) then
begin
UseObject(Sunduk_With_Empty_Bags);
wait(1000);
Check_World_Save;
UseObject(Sunduk_With_Full_Bags);
wait(1000);
Check_World_Save;
UseObject(Sunduk_With_Iron_and_Tools);
wait(1000);
Check_World_Save;
if CurrentBag <> 0 then
begin
UseObject(CurrentBag);
wait(1000);
Check_World_Save;
end
Else
FindEmptyBag;
LastContOpen := Now;
addtosystemjournal('Контейнеры открыты в ' + DateTimeToStr(Now));
end;
End;
procedure UnLoadNecklace;
Begin
If (Weight>(4*Str-100)) or ((Count(NeckType[0])+Count(NeckType[1]))>=MaxQnt) then
begin
For i:=0 to 1 do
repeat
If Dead Or (Not Connected) then Exit;
Check_World_Save;
If (CountEx(NeckType[0],$FFFF,CurrentBag)+CountEx(NeckType[1],$FFFF,CurrentBag))>=MaxQnt then
begin
AddToSystemJournal('Сумку заполнили полностью!Перекладываем в сундук с заполненными сумками.');
MoveItem(CurrentBag,1,Sunduk_With_Full_Bags,0,0,0);
Wait(1000);
FindEmptyBag;
end;
FindType(NeckType[0],Backpack);
if FindCount>0 then
begin
MoveItem(FindItem,1,CurrentBag,0,0,0);
end;
until (FindType(NeckType[0],Backpack)=0);
end;
End;
BEGIN
NeckType[0]:=$1010;
WaitConnection(3000);
SetARStatus(true);
LastContOpen:=Now;
OpenContainer(true);
While not Dead do
begin
If Connected then
begin
OpenContainer(false);
LoadIron;
Check_Food
LoadTinkerTools;
Craftkluch;
UnloadNecklace;
end
Else Wait(3000);
end;
END.
Code: Select all
NeckType: array of word;
Code: Select all
BEGIN
NeckType[0]:=$1010;<------------------------
WaitConnection(3000);
SetARStatus(true);
LastContOpen:=Now;
OpenContainer(true);
....
Code: Select all
If (CountEx(NeckType[0],$FFFF,CurrentBag)+CountEx(NeckType[1],$FFFF,CurrentBag))>=MaxQnt
Code: Select all
BEGIN
NeckType[0]:=$1010;
NeckType[1]:=$????<----------------------
WaitConnection(3000);
SetARStatus(true);
LastContOpen:=Now;
OpenContainer(true);
....
Code: Select all
22:56:44 [Corvin]: Compiling
22:56:44 [Corvin]: Compiled succesfully
22:56:44 [Corvin]: UseObject error: Object not finded.
22:56:45 [Corvin]: UseObject error: Object not finded.
22:56:47 [Corvin]: Свободных сумочек больше нету.останавливаем скрипт. at 53.1044
22:56:47 [Corvin]: Script Тинкер.sc stopped successfuly
Code: Select all
Program Keys;
{$Include 'all.inc'}
{$Include 'CheckLag.inc'}
Const
Sunduk_With_Iron_and_Tools=$40325F58; // сундук с айрон инготами и тинкер тулсами
Sunduk_With_Empty_Bags=$40F09DA0; // сундук с пустыми сумочками
Sunduk_With_Full_Bags=$40F08386; // сундук ,куда складываем заполненные сумочки
Bag=$0E76;
Tools=$1EBC;
Ingot=$1BEF; //(Antares)
Eda=$097B;
MaxQnt=250; //максимальное кол-во никлейсов в сумке
Var
KeyType: array [0..1] of word;
CurrentBag: cardinal;
i: integer;
LastContOpen: TDateTime;
procedure Check_World_Save;
begin
if InJournal('saving')<>-1 then
begin
SetJournalLine(InJournal('saving'),'');
SetJournalLine(InJournal('data'),'');
i:=0;
repeat
wait(10000);
i:=i+1;
AddToSystemJournal('World is saving more than '+IntToStr(i*10)+' seconds.');
until (InJournal('data')<>-1) or (i>30);
end;
end;
procedure LoadIron;
Begin
If Dead Or (Not Connected) then Exit;
If Count(Ingot)<2 then
begin
FindTypeEx(Ingot,$0000,Sunduk_With_Iron_and_Tools,false);
If Not DragItem(FindItem,100) then AddToSystemJournal('В сундуке кончились айрон инготы!');
Wait(500);
If (Weight>(STR*4)) then
begin
DropItem(Sunduk_With_Iron_and_Tools,0,0,0);
raiseException(erCustomError,'У НАС ЯВНЫЙ ПЕРЕГРУЗ!!!МЫ НЕ МОЖЕМ ВЗЯТЬ ИНГОТЫ!!!');
end
Else DropItem(backpack,0,0,0);
end;
End;
procedure LoadTinkerTools;
Begin
If Dead Or (Not Connected) then Exit;
If Count(Tools)<1 then
begin
If FindType(Tools,Sunduk_With_Iron_and_Tools)=0 then AddToSystemJournal('Не могу найти тинкер тулсу!')
Else Moveitem(FindItem,1,backpack,0,0,0);
end;
End;
procedure CraftKeys;
Var
STime: TDateTime;
FailCounter: integer;
Begin
Check_World_Save;
Stime:=Now;
UseType(Tools,$FFFF);
AutoMenu( 'Tinkering' , 'Keys' );
AutoMenu( 'Keys','Iron key' );
WaitJournalLine(STime,'You put|failed',30000);
wait(200);
If (InJournalBetweenTimes('failed',Stime,Now)<>-1) then FailCounter:=(FailCounter+1);
If (InJournalBetweenTimes('You put',Stime,Now)<>-1) then FailCounter:=0;
If FailCounter>=20 then Wait(30000);
End;
procedure FindEmptyBag;
var
TempBag: cardinal;
SumQnt: integer;
Begin
FindType(bag,Sunduk_With_Empty_Bags);
If FindCount>0 then
begin
If Dead or (Not Connected) then Exit;
Check_World_Save;
TempBag:=FindItem;
UseObject(FindItem);
CheckLag;
Wait(1000);
SumQnt:=CountEx(KeyType[0],$FFFF,TempBag)+CountEx(KeyType[1],$FFFF,TempBag);
If (SumQnt<MaxQnt) then
begin
AddToSystemJournal('запоминаем пустую сумочку...');
CurrentBag:=TempBag;
Exit;
end
else
begin
AddToSystemJournal('Найденная сумочка забита до отказа!Перекладываем в сундук с заполненными сумками.');
MoveItem(TempBag,1,Sunduk_With_Full_Bags,0,0,0);
Wait(1000);
end;
FindType(bag,Sunduk_With_Empty_Bags);
wait(200);
end;
If (FindCount<1) then raiseException(erCustomError,'Свободных сумочек больше нету.останавливаем скрипт.')
End;
procedure OpenContainer(f : boolean);
// если f - true - просто открываем все нужные контейнеры, то есть:
// SundukIngots,SundukEmptyBag,Sunduk2Craft и curbag (если он не равен 0)
// если f - false - проверяем, был ли реконнект чара после последнего
// открывания контейнеров, если был - переоткрываем контейнеры и записываем
// новое значение в переменную LastContOpen, если не был - ничего не делаем
Begin
If Dead or (Not Connected) then Exit;
if (f = true) or (LastContOpen < ConnectedTime) then
begin
UseObject(Sunduk_With_Empty_Bags);
wait(1000);
Check_World_Save;
UseObject(Sunduk_With_Full_Bags);
wait(1000);
Check_World_Save;
UseObject(Sunduk_With_Iron_and_Tools);
wait(1000);
Check_World_Save;
if CurrentBag <> 0 then
begin
UseObject(CurrentBag);
wait(1000);
Check_World_Save;
end
Else
FindEmptyBag;
LastContOpen := Now;
addtosystemjournal('Контейнеры открыты в ' + DateTimeToStr(Now));
end;
End;
procedure UnLoadKeys;
Begin
If (Weight>(4*Str-100)) or ((Count(KeyType[0])+Count(KeyType[1]))>=MaxQnt) then
begin
For i:=0 to 1 do
repeat
If Dead Or (Not Connected) then Exit;
Check_World_Save;
If (CountEx(KeyType[0],$FFFF,CurrentBag)+CountEx(KeyType[1],$FFFF,CurrentBag))>=MaxQnt then
begin
AddToSystemJournal('Сумку заполнили полностью!Перекладываем в сундук с заполненными сумками.');
MoveItem(CurrentBag,1,Sunduk_With_Full_Bags,0,0,0);
Wait(1000);
FindEmptyBag;
end;
FindType(KeyType[i],Backpack);
if FindCount>0 then
begin
MoveItem(FindItem,1,CurrentBag,0,0,0);
CheckLag;
end;
until (FindType(KeyType[i],Backpack)=0);
end;
End;
BEGIN
KeyType[0]:=$1010;
KeyType[1]:=$1085;
WaitConnection(3000);
SetARStatus(true);
LastContOpen:=Now;
OpenContainer(true);
While not Dead do
begin
If Connected then
begin
OpenContainer(false);
LoadIron;
LoadTinkerTools;
CraftKeys;
UnloadKeys;
end
Else Wait(3000);
end;
END.
Code: Select all
LastContOpen:=Now;
OpenContainer(true);
<----------------------
While not Dead do
......
Code: Select all
FindType(Bag,Sunduk_With_Empty_Bags);
case FindCount of
0:AddToSystemJournal('Или в сундуке нет сумок или я его не смог открыть. ');
else
AddToSystemJournal('В сундуке нашлось '+IntToStr(FindCount)+' сумок.');
end;