Forum in READ ONLY mode! All questions and discussions on Discord official server, invite link: https://discord.gg/VxsGzJ7
ObjatLayer врет нагло
ObjatLayer врет нагло
Товарищи,я в ступоре.. Написал себе скрипт на майнинг... Точнее переработал на стелс свой инжовый скрипт.. Проблема следующая: есть голова - Program - она читает координаты и решает куда идти копать, из неё вызывается процедура Mine, в ней чар копает и отслеживает вес и другие навороты, из этой процедуры вызываются все остальные, как то: пойти домой, разгрузиться, починиться. В начале процедуры Mine я написал такую строчку:
Kirka:=ObjAtLayer(RHandLayer);
и потом с киркой общаюсь через эту переменную. На первом прогоне до ремонта всё окей. Потом чар идет ремонтиться. Среди прочих действий берет из бэкпака молоток в руки, перед этим локально себе запоминает кирку(ну не сделал глобально - некрасиво, но не приступно) такой же строчкой:
pickaxe:=objatlayer(RhandLayer);
Дальше после прочей лабутни одевает молоток:
equip(RhandLayer, HammerID);
Чинит кирку и потом одевает:
useobject(pickaxe);
Идет копать, при этом функция Mine возобновляется с одной лишь целью - встать на предыдущие координаты, а дальше через основное тело Program вызывается по новой. Так вот и в этот момент, когда чар с киркой в руках(!!!) стоит и хочет копать, он вместо кирки одевает молоток... Ну вот объясните мне, как такое возможно???
Мне кажется я упомянул все важные моменты, чтобы не грузить вас своим кодом, но если он нужен - нет проблем.. а то я чувствую себя идиётом...
Kirka:=ObjAtLayer(RHandLayer);
и потом с киркой общаюсь через эту переменную. На первом прогоне до ремонта всё окей. Потом чар идет ремонтиться. Среди прочих действий берет из бэкпака молоток в руки, перед этим локально себе запоминает кирку(ну не сделал глобально - некрасиво, но не приступно) такой же строчкой:
pickaxe:=objatlayer(RhandLayer);
Дальше после прочей лабутни одевает молоток:
equip(RhandLayer, HammerID);
Чинит кирку и потом одевает:
useobject(pickaxe);
Идет копать, при этом функция Mine возобновляется с одной лишь целью - встать на предыдущие координаты, а дальше через основное тело Program вызывается по новой. Так вот и в этот момент, когда чар с киркой в руках(!!!) стоит и хочет копать, он вместо кирки одевает молоток... Ну вот объясните мне, как такое возможно???
Мне кажется я упомянул все важные моменты, чтобы не грузить вас своим кодом, но если он нужен - нет проблем.. а то я чувствую себя идиётом...
Re: ObjatLayer врет нагло
проще куски кода с комментариями разбирать, а то голова програм процедура майн пересохраняю один и тот же объект по 10 раз...Spinorog wrote:Товарищи,я в ступоре.. Написал себе скрипт на майнинг... Точнее переработал на стелс свой инжовый скрипт.. Проблема следующая: есть голова - Program - она читает координаты и решает куда идти копать, из неё вызывается процедура Mine, в ней чар копает и отслеживает вес и другие навороты, из этой процедуры вызываются все остальные, как то: пойти домой, разгрузиться, починиться. В начале процедуры Mine я написал такую строчку:
Kirka:=ObjAtLayer(RHandLayer);
и потом с киркой общаюсь через эту переменную. На первом прогоне до ремонта всё окей. Потом чар идет ремонтиться. Среди прочих действий берет из бэкпака молоток в руки, перед этим локально себе запоминает кирку(ну не сделал глобально - некрасиво, но не приступно) такой же строчкой:
pickaxe:=objatlayer(RhandLayer);
Дальше после прочей лабутни одевает молоток:
equip(RhandLayer, HammerID);
Чинит кирку и потом одевает:
useobject(pickaxe);
Идет копать, при этом функция Mine возобновляется с одной лишь целью - встать на предыдущие координаты, а дальше через основное тело Program вызывается по новой. Так вот и в этот момент, когда чар с киркой в руках(!!!) стоит и хочет копать, он вместо кирки одевает молоток... Ну вот объясните мне, как такое возможно???
Мне кажется я упомянул все важные моменты, чтобы не грузить вас своим кодом, но если он нужен - нет проблем.. а то я чувствую себя идиётом...
могу посоветовать использовать константый тип кирки, или массив таких типов если кирки бывают разных типов, и искать эти типы в бекпаке или руках.
Я вотъ когда надоело изгаляться стал пользоваться функцией
Code: Select all
function UseType(ObjType : Word;Color : Word) : Cardinal;
Re: ObjatLayer врет нагло
Спасибо, что отозвались!
Согласен, usetype тут может решить проблему, но обидно, что встроенная функция не работает, плюс хочу понять от каких перуетов ещё придётся на стелсе себя ограничить... Или же всё работает нормально, а я пока чего-то не понял... Это считай второй скрипт на стелсе, поэтому пока как-то кривовастенько!
Согласен, usetype тут может решить проблему, но обидно, что встроенная функция не работает, плюс хочу понять от каких перуетов ещё придётся на стелсе себя ограничить... Или же всё работает нормально, а я пока чего-то не понял... Это считай второй скрипт на стелсе, поэтому пока как-то кривовастенько!
Body
Mine
Last edited by Spinorog on 28.07.2014 20:33, edited 2 times in total.
Re: ObjatLayer врет нагло
я так и не увидел, где ты снова берешь кирку в руку, чтобы оттуда прочесть ее айди. Вызывая брейк ты выводишь скрипт из цикла дальше в ремонте, как я понимаю, ты берешь в руки молоток, перед возвратом в цикл у тебя читается из руки айди молотка...
Что не так?
Проверить что у тебя в руке:
Что не так?
Проверить что у тебя в руке:
Code: Select all
program WhatInLayer;
begin
ClickOnObject(ObjAtLayer(RhandLayer));
Wait(1000);
AddToSystemJournal(GetName(ObjAtLayer(RhandLayer)));
end.
Re: ObjatLayer врет нагло
Ох дырявая голова - забыл приложить процедуру ремонта - обратно в ней берется кирка!
Remont
Last edited by Spinorog on 28.07.2014 20:32, edited 1 time in total.
Re: ObjatLayer врет нагло
длинные куски кода лучше засовывать в спойлер, чтоб людям потом удобочитаемей было.Spinorog wrote:Ох дырявая голова - забыл приложить процедуру ремонта - обратно в ней берется кирка!
По теме - ну хз, может где-то что-то самопереписывается. У меня похожие проблемы были, но используя ЮзТайп я от них полностью на 100% ушел.
Re: ObjatLayer врет нагло
Да, с юзтайпом сейчас тоже ушёл, конечно! Спасибо за внимание!drabadan wrote:длинные куски кода лучше засовывать в спойлер, чтоб людям потом удобочитаемей было.Spinorog wrote:Ох дырявая голова - забыл приложить процедуру ремонта - обратно в ней берется кирка!
По теме - ну хз, может где-то что-то самопереписывается. У меня похожие проблемы были, но используя ЮзТайп я от них полностью на 100% ушел.
Re: ObjatLayer врет нагло
ну я не знаю, что сказать. за всю историю стрелса на ObjAtLayer никто не жаловался.
Если ты уверен, что вопрос в стелсе - давай в личку чара в нужном месте с киркой + скрипт из пары строк, демонстрирующий "баг".
Если ты уверен, что вопрос в стелсе - давай в личку чара в нужном месте с киркой + скрипт из пары строк, демонстрирующий "баг".
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
Re: ObjatLayer врет нагло
Сейчас потестирую ещё. Вечером возникла проблема с тем, что он не снимал кирку через unequip(RHandLayer), похоже что-то со слоями... сейчас пару версий проверю, и если подтвердится, то скину чара подготовленного со скриптом!Vizit0r wrote:ну я не знаю, что сказать. за всю историю стрелса на ObjAtLayer никто не жаловался.
Если ты уверен, что вопрос в стелсе - давай в личку чара в нужном месте с киркой + скрипт из пары строк, демонстрирующий "баг".