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

запуск скрипта из скрипта

тут можно задать вопрос по скриптингу
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Post by Vizit0r »

люди вообще тяжело воспринимают новые вещи, особенно если есть старое, которое криво-косо, но работает.
Это особенно хорошо видно на примере поиска пути - примерно половина пользователей стелса до сих пор используют вместо встроенного поиска пути старый слепой поиск пути "на костылях". а чего, работает и все. а что постоянно глючит - так то не важно.
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
chobi0ne
Neophyte
Neophyte
Posts: 33
Joined: 17.01.2011 13:02
Contact:

Post by chobi0ne »

Vizit0r wrote:люди вообще тяжело воспринимают новые вещи, особенно если есть старое, которое криво-косо, но работает.
Это особенно хорошо видно на примере поиска пути - примерно половина пользователей стелса до сих пор используют вместо встроенного поиска пути старый слепой поиск пути "на костылях". а чего, работает и все. а что постоянно глючит - так то не важно.
Да уж. Ну тут примеры помогают. И документация.

Мне кажется очевидным, что основной документацией является та, которая на сайте, но там и половины фишек нет в описании всяких функций. Я на стелс сел довольно недавно, поэтому быстро понял, сравнив с форумом, что там далеко не все и что нужно смотреть вики (который я тоже не сразу нашел) и форум. Да и на форуме и то не все есть. То же касается версии стелса - на форуме всегда свежая, тоже до этого не сразу дошел, как и все, наверное :)

зы - но реально обрадовался встроенной ходилке. Особенно нравится, что если двери из дома открыты - чар выйдет, а если закрыты - ходилка говорит, что не дойдет :) Круто.
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Post by Vizit0r »

а про ходилку, что двери открывает - не читал?
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
chobi0ne
Neophyte
Neophyte
Posts: 33
Joined: 17.01.2011 13:02
Contact:

Post by chobi0ne »

Vizit0r wrote:а про ходилку, что двери открывает - не читал?
Ох, ёлки. Нет оО Я еще не до конца разобрался в режимах работы ходилки вообще.

moveXY(5570,1149,false,0,true);

так, к примеру, работает быстрей вроде. Еще и бегает.

moveOpenDoor : Boolean

это?

Если выставить True, то будет подбегать к двери и пробовать открыть? А то сейчас, если есть дверь на пути, то чар не двигается с места. Надо попробовать. Вообще шикарная ходилка, по миру ходит вообще без проблем. На слишком больших расстояниях тупит, конечно, но если делать промежуточные в 3-4 экрана, а то и больше, то вполне нормально. С инжектом приходилось делать промежуточные вейпоинты гораздо чаще.
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Post by Vizit0r »

newmovexy
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Post by Vizit0r »

и да, я знаю про ужасную, раскиданную документацию.

но мне откровенно лень формировать полноценный хелп-центр. причем лень уже третий год. год назад я пробовал преодолеть лень - в результате получилось частично заполненное вики. дальше лень опять победила :)
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
chobi0ne
Neophyte
Neophyte
Posts: 33
Joined: 17.01.2011 13:02
Contact:

Post by chobi0ne »

Vizit0r wrote:и да, я знаю про ужасную, раскиданную документацию.

но мне откровенно лень формировать полноценный хелп-центр. причем лень уже третий год. год назад я пробовал преодолеть лень - в результате получилось частично заполненное вики. дальше лень опять победила :)
Очень знакомо)) Ну главное, что есть рабочий форум, на котором активно и быстро отвечают) Кто ищет - тот всегда найдет)
chobi0ne
Neophyte
Neophyte
Posts: 33
Joined: 17.01.2011 13:02
Contact:

Post by chobi0ne »

Так, вот возник очередной вопрос касательно ивентов и moveXY (или newmoveXY).

Моя уходилка от ПК заключается в том, что делается проверка на переменную в разных местах в скрипте. Переменная эта изменяется ивентом. Тут все в порядке, работает, но что делать с ходилкой? В инже я встраивал в ходилку проверки на нужную переменную, но здесь даже ума не приложу, что же сделать. А то чару доставаться будет, пока он ходить будет.

Есть ли какой-нибудь способ с этим разобраться?

Пришло в голову решение использовать 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.
Запускаю скрипт, чар начинает идти в 5567, 1181. Пишу в это время в чате всякую ерунду. Ничего не происходит, чар продолжает идти, доходит до нужной точки и потом выскакивают результаты работы обработчика, после чего уже начинается цикл, с которым обработчик работает нормально.

Похоже без хирургического вмешательства тут никак не обойтись. Отпадает смысл в ивентах, если они не срабатывают в тот же момент.

Но это еще ладно - не факт, что ходилка прекратила бы движение после 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.
При написании чего либо в чат чар останавливается практически сразу, делает еще 2-3 шага (видимо до той точки, куда он уже шел), но потом еще какое-то время тупит перед тем, как продолжить выполнять действия после ходилки :( Вот бы какую-нибудь процедуру специально, чтоб в обработчики ивентов вставлять, чтобы немедленно отключать ходилку.

Еще попробовал обработчиком вызывать другой newmoveXY - работает примерно также, как и с SetBadLocation на все точки PathArray.
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Post by Vizit0r »

мысль про GetPathArray правильная.
только почему вместо цикла с шаганием по точкам из PathArr выполняется newmoveXY с фиксированными координатами?
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
chobi0ne
Neophyte
Neophyte
Posts: 33
Joined: 17.01.2011 13:02
Contact:

Post by chobi0ne »

Vizit0r wrote:мысль про GetPathArray правильная.
только почему вместо цикла с шаганием по точкам из PathArr выполняется newmoveXY с фиксированными координатами?
Спасибо за наводку, сейчас буду пробовать. Просто думал, что можно будет сделать выход из 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, то будет по сути тоже самое, что и описанное мной ранее. Т.е. чар между точками будет уязвим.
jian
Neophyte
Neophyte
Posts: 14
Joined: 18.11.2011 7:08

Re: запуск скрипта из скрипта

Post by jian »

Тема уехала в сторону... В итоге - есть возможность вызвать на запуск один скрипт из другого?
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Re: запуск скрипта из скрипта

Post by Vizit0r »

нет. и не будет.
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
chernysh
Novice
Novice
Posts: 61
Joined: 05.06.2011 14:54
Location: Ukraine

Re: запуск скрипта из скрипта

Post by chernysh »

jian wrote:Тема уехала в сторону... В итоге - есть возможность вызвать на запуск один скрипт из другого?
В Python-версии теоретически можно. Если вызываемый скрипт положить в ту папку с основным скриптом, назвав файл addition.py, то вызвать его можно так:

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
CFA
Developer
Developer
Posts: 492
Joined: 20.04.2006 6:03
Contact:

Re: запуск скрипта из скрипта

Post by CFA »

это не запуск "скрипта-из-скрипта", это аналог юнитов/инклюдов в паскальскрипте. Хотя конечно отличия есть.
chernysh
Novice
Novice
Posts: 61
Joined: 05.06.2011 14:54
Location: Ukraine

Re: запуск скрипта из скрипта

Post by chernysh »

CFA wrote:это не запуск "скрипта-из-скрипта", это аналог юнитов/инклюдов в паскальскрипте. Хотя конечно отличия есть.
Ничто не мешает сделать в том скрипте замыкание (while not Dead()) или же повесить главную функцию скрипта на ивент какой-то.

И причем, в Python-версии ты можешь "инклудить" скрипт в любом месте программы, в отличии от юнитов и юзесов паскаля.

Code: Select all

if HP() < MaxHP():
    from addition import heal_self
    heal_self()
else:
    from addition import attack_enemy
    attack_enemy()
Post Reply