Forum in READ ONLY mode! All questions and discussions on Discord official server, invite link: https://discord.gg/VxsGzJ7
запуск скрипта из скрипта
люди вообще тяжело воспринимают новые вещи, особенно если есть старое, которое криво-косо, но работает.
Это особенно хорошо видно на примере поиска пути - примерно половина пользователей стелса до сих пор используют вместо встроенного поиска пути старый слепой поиск пути "на костылях". а чего, работает и все. а что постоянно глючит - так то не важно.
Это особенно хорошо видно на примере поиска пути - примерно половина пользователей стелса до сих пор используют вместо встроенного поиска пути старый слепой поиск пути "на костылях". а чего, работает и все. а что постоянно глючит - так то не важно.
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
Да уж. Ну тут примеры помогают. И документация.Vizit0r wrote:люди вообще тяжело воспринимают новые вещи, особенно если есть старое, которое криво-косо, но работает.
Это особенно хорошо видно на примере поиска пути - примерно половина пользователей стелса до сих пор используют вместо встроенного поиска пути старый слепой поиск пути "на костылях". а чего, работает и все. а что постоянно глючит - так то не важно.
Мне кажется очевидным, что основной документацией является та, которая на сайте, но там и половины фишек нет в описании всяких функций. Я на стелс сел довольно недавно, поэтому быстро понял, сравнив с форумом, что там далеко не все и что нужно смотреть вики (который я тоже не сразу нашел) и форум. Да и на форуме и то не все есть. То же касается версии стелса - на форуме всегда свежая, тоже до этого не сразу дошел, как и все, наверное
зы - но реально обрадовался встроенной ходилке. Особенно нравится, что если двери из дома открыты - чар выйдет, а если закрыты - ходилка говорит, что не дойдет Круто.
Ох, ёлки. Нет оО Я еще не до конца разобрался в режимах работы ходилки вообще.Vizit0r wrote:а про ходилку, что двери открывает - не читал?
moveXY(5570,1149,false,0,true);
так, к примеру, работает быстрей вроде. Еще и бегает.
moveOpenDoor : Boolean
это?
Если выставить True, то будет подбегать к двери и пробовать открыть? А то сейчас, если есть дверь на пути, то чар не двигается с места. Надо попробовать. Вообще шикарная ходилка, по миру ходит вообще без проблем. На слишком больших расстояниях тупит, конечно, но если делать промежуточные в 3-4 экрана, а то и больше, то вполне нормально. С инжектом приходилось делать промежуточные вейпоинты гораздо чаще.
и да, я знаю про ужасную, раскиданную документацию.
но мне откровенно лень формировать полноценный хелп-центр. причем лень уже третий год. год назад я пробовал преодолеть лень - в результате получилось частично заполненное вики. дальше лень опять победила
но мне откровенно лень формировать полноценный хелп-центр. причем лень уже третий год. год назад я пробовал преодолеть лень - в результате получилось частично заполненное вики. дальше лень опять победила
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
Очень знакомо)) Ну главное, что есть рабочий форум, на котором активно и быстро отвечают) Кто ищет - тот всегда найдет)Vizit0r wrote:и да, я знаю про ужасную, раскиданную документацию.
но мне откровенно лень формировать полноценный хелп-центр. причем лень уже третий год. год назад я пробовал преодолеть лень - в результате получилось частично заполненное вики. дальше лень опять победила
Так, вот возник очередной вопрос касательно ивентов и moveXY (или newmoveXY).
Моя уходилка от ПК заключается в том, что делается проверка на переменную в разных местах в скрипте. Переменная эта изменяется ивентом. Тут все в порядке, работает, но что делать с ходилкой? В инже я встраивал в ходилку проверки на нужную переменную, но здесь даже ума не приложу, что же сделать. А то чару доставаться будет, пока он ходить будет.
Есть ли какой-нибудь способ с этим разобраться?
Пришло в голову решение использовать SetBadLocation(x,y) и ClearBadLocationList, чтобы ходилка перестала работать, подумав, что в нужную точку не добраться, но тут резко обломался: когда работает ходилка ивенты не обрабатываются вообще. К примеру:
Запускаю скрипт, чар начинает идти в 5567, 1181. Пишу в это время в чате всякую ерунду. Ничего не происходит, чар продолжает идти, доходит до нужной точки и потом выскакивают результаты работы обработчика, после чего уже начинается цикл, с которым обработчик работает нормально.
Похоже без хирургического вмешательства тут никак не обойтись. Отпадает смысл в ивентах, если они не срабатывают в тот же момент.
Но это еще ладно - не факт, что ходилка прекратила бы движение после SetBadLocation. Может есть другой способ?
upd:
Так, решил попробовать newMoveXY - обработчик работает хорошо. Срабатывает во время работы ходилки, но вариант с SetBadLocation(x,y), где x,y - координаты того места, куда идет ходилка - не катит, т.к. ходилка заранее намечает себе какие-то промежуточные точки. Т.е. он же путь - сейчас попробую как-то применить GetPathArray, если я думаю в нужном направлении.
Вот что из этого вышло:
При написании чего либо в чат чар останавливается практически сразу, делает еще 2-3 шага (видимо до той точки, куда он уже шел), но потом еще какое-то время тупит перед тем, как продолжить выполнять действия после ходилки Вот бы какую-нибудь процедуру специально, чтоб в обработчики ивентов вставлять, чтобы немедленно отключать ходилку.
Еще попробовал обработчиком вызывать другой newmoveXY - работает примерно также, как и с SetBadLocation на все точки PathArray.
Моя уходилка от ПК заключается в том, что делается проверка на переменную в разных местах в скрипте. Переменная эта изменяется ивентом. Тут все в порядке, работает, но что делать с ходилкой? В инже я встраивал в ходилку проверки на нужную переменную, но здесь даже ума не приложу, что же сделать. А то чару доставаться будет, пока он ходить будет.
Есть ли какой-нибудь способ с этим разобраться?
Пришло в голову решение использовать SetBadLocation(x,y) и ClearBadLocationList, чтобы ходилка перестала работать, подумав, что в нужную точку не добраться, но тут резко обломался: когда работает ходилка ивенты не обрабатываются вообще. К примеру:
Code: Select all
program lol;
procedure OnUnicodeSpeech(Text, SenderName: String; SenderID: Cardinal);
begin
addtosystemjournal(SenderName+' '+Text);
wait(1000);
SetBadLocation(5567,1181);
end;
begin
ClearBadLocationList;
SetEventProc(evUnicodeSpeech, 'OnUnicodeSpeech');
moveXY(5567,1181,false,0,false);
while 1=1 do begin
wait(1000);
addtosystemjournal('kek');
end;
end.
Похоже без хирургического вмешательства тут никак не обойтись. Отпадает смысл в ивентах, если они не срабатывают в тот же момент.
Но это еще ладно - не факт, что ходилка прекратила бы движение после SetBadLocation. Может есть другой способ?
upd:
Так, решил попробовать newMoveXY - обработчик работает хорошо. Срабатывает во время работы ходилки, но вариант с SetBadLocation(x,y), где x,y - координаты того места, куда идет ходилка - не катит, т.к. ходилка заранее намечает себе какие-то промежуточные точки. Т.е. он же путь - сейчас попробую как-то применить GetPathArray, если я думаю в нужном направлении.
Вот что из этого вышло:
Code: Select all
program lol;
var
PathArr: TPathArray;
i: Integer;
procedure OnUnicodeSpeech(Text, SenderName: String; SenderID: Cardinal);
var
k: Integer;
begin
addtosystemjournal(SenderName+' '+Text);
for k:= 0 to i do begin
SetBadLocation(PathArr[k].x,PathArr[k].y);
end;
end;
begin
i:= 0;
ClearBadLocationList;
SetEventProc(evUnicodeSpeech, 'OnUnicodeSpeech');
i:= GetPathArray(5567,1181,false,0,PathArr);
newmoveXY(5567,1181,false,0,false);
while 1=1 do begin
addtosystemjournal('kek');
wait(1000);
end;
end.
Еще попробовал обработчиком вызывать другой newmoveXY - работает примерно также, как и с SetBadLocation на все точки PathArray.
Спасибо за наводку, сейчас буду пробовать. Просто думал, что можно будет сделать выход из newmoveXY. Надо делать проверку после каждого шага.Vizit0r wrote:мысль про GetPathArray правильная.
только почему вместо цикла с шаганием по точкам из PathArr выполняется newmoveXY с фиксированными координатами?
А все было бы гораздо проще, если б можно было бы как-то прервать работу newmoveXY :3 Пришел в голову подобный алгоритм, но как-то не очень он работает, ходит медленно и криво. Вот кусок:
Code: Select all
i:= GetPathArray(2518,578,false,0,PathArr);
for l := 0 to i do begin
while (GetX(Self) <> PathArr[l].x) and (GetY(Self) <> PathArr[l].y) do begin
if StepQ(CalcDir(PredictedX, PredictedY, PathArr[l].x, PathArr[l].y), False) < 0 then begin
AddToSystemJournal('Не удалось шагнуть');
end;
end;
end;
Если делать просто newmovexy между точками в PathArray, то будет по сути тоже самое, что и описанное мной ранее. Т.е. чар между точками будет уязвим.
Re: запуск скрипта из скрипта
Тема уехала в сторону... В итоге - есть возможность вызвать на запуск один скрипт из другого?
Re: запуск скрипта из скрипта
нет. и не будет.
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
Re: запуск скрипта из скрипта
В Python-версии теоретически можно. Если вызываемый скрипт положить в ту папку с основным скриптом, назвав файл addition.py, то вызвать его можно так:jian wrote:Тема уехала в сторону... В итоге - есть возможность вызвать на запуск один скрипт из другого?
Code: Select all
from addition import *
do_something() ## Функция из файла addition.py
Code: Select all
from addition import do_something, get_heal
do_something() ## Функция из файла addition.py
Code: Select all
import addition
addition.do_something() ## Функция из файла addition.py
Re: запуск скрипта из скрипта
это не запуск "скрипта-из-скрипта", это аналог юнитов/инклюдов в паскальскрипте. Хотя конечно отличия есть.
Re: запуск скрипта из скрипта
Ничто не мешает сделать в том скрипте замыкание (while not Dead()) или же повесить главную функцию скрипта на ивент какой-то.CFA wrote:это не запуск "скрипта-из-скрипта", это аналог юнитов/инклюдов в паскальскрипте. Хотя конечно отличия есть.
И причем, в Python-версии ты можешь "инклудить" скрипт в любом месте программы, в отличии от юнитов и юзесов паскаля.
Code: Select all
if HP() < MaxHP():
from addition import heal_self
heal_self()
else:
from addition import attack_enemy
attack_enemy()