Здравствуйте!
Ищу наставника по стелсу - человека, которому можно написать в скайп свои мелкие временные вопросики, пока я снова не научусь писать макросы сам.
Я играю в ультиму с 2001 года, с некоторыми перерывами. Раньше умел писать макросы на изи уо. В 2011-2012 был мой прошлый рецидив игры в УО - тогда я полюбил програму стелс, и писал множество макросов(в том числе на пвм) чем помню тогда особо гордился.
Но увы за несколько лет перерыва я подзабыл а старые макросы увы не сохранились чтобы по ним восстановить свою логику.
Сейчас снова играю на шарде http://www.forestwars.ru/ и учусь заново - проштудировал гайды по Паскалю и материалы для новичков на этом и другом форуме. Потихоньку понимание логики макросов становится на своё место))
Если с самыми простыми макросами уже проблем нету - то со средними - пока что немогу заставить делать их то, что хочу.
Forum in READ ONLY mode! All questions and discussions on Discord official server, invite link: https://discord.gg/VxsGzJ7
Ищу наставника по стелсу(когото, кто как и я сидит в скайпе)
Ищу наставника по стелсу(когото, кто как и я сидит в скайпе)
Last edited by Faifer on 22.02.2016 15:21, edited 1 time in total.
Re: Ищу наставника по стелсу(когото, кто как и я сидит в ска
Итак сейчас я мучаю макрос с таким алгоритмом:
И вот собственно сам макрос:
Макрос заработал, но делает немного не то, что я хочу. Я запускаю сразу 10-20 мультов(так как иначе на сервере Форест Варс детект не прокачать) - но:
1) персы пытаются юзать абилку постоянно до тех пор пока маны не начинает быть меньше 50, хотя время действия еще не прошло(
2) хайдящиеся чары неуспевают даже 1 шага ступить в хайде, чтобы качнуть стелс - или с задержками какаято лажа или они слишком засинхроненые и детектят в те 0.1 секунды когда надо начинать движение.
3) есть подозрение что я всё-таки неправильно расписал логику скрипта и я не достигну желаемого результата(быстрая вкачка хайда\стелса\детекта\абилки без потерь времени)
Прошу знающих людей помочь либо дать(можно в приват) свой скайп, где я мог бы задавать свои маленькие вопросики =))
Code: Select all
шапка
1) пока живы то
2) юзнуть абилку(если есть 50 или больше маны) FOCUS
3) если стелс не 100 : входим в хайд, ходим туда-сюда
4) если стелс 100, а хайд меньше 100 – входим в хайд и снова в хайд
5) если стелс 100, хайд 100, а детект меньше 100 - юзать детект
6) если стелс и хайд и детект по 100 - юзать медитацию если маны меньше максимальной
7) если всё вкачал - то просто стоять в хайде, чтобы те, кто отстают могли вкачать детект(ну или просто спрятаться и стоять в хайде)
Code: Select all
Program Detect_Meditation_Ability_Hide_Stealth;
{$Include 'checksave.inc'}
procedure Medit;
begin
CheckSave;
if (WarMode = True) then SetWarMode(False);
if (Mana < MaxMana) then
begin
UseSkill('Meditation');
repeat
wait(3500);
until (Mana = MaxMana);
end;
wait (100);
end;
procedure Abil;
var abtime:TdateTime;
begin
CheckSave;
if (Mana >= 50) then
begin
if (InJournalBetweenTimes('истекло',abtime,now)>0) or ((DateTimeToUnix(now)-DateTimeToUnix(abtime))>60) then
begin
UOSay('.useability 1');
ClearJournal;
abtime:=now;
end;
end;
end;
procedure Stels;
begin
CheckSave;
repeat
UseSkill('Hiding');
wait (4400);
until (Hidden = True);
wait (100);
repeat
NewMoveXY(GetX(Self), GetY(Self) + 1,False,0,False);
wait (100);
NewMoveXY(GetX(Self), GetY(Self) -1,False,0,False);
wait (100);
until (Hidden = False);
end;
procedure Hide;
begin
CheckSave;
repeat
UseSkill('Hiding');
wait (4400);
until (Hidden = True);
end;
procedure Detect;
begin
CheckSave;
UseSkill('Detecting Hidden');
wait (3400);
end;
BEGIN
SetARStatus(True);
SetPauseScriptOnDisconnectStatus(True);
SetWarMode(False);
while (Dead = False) do
begin
CheckSave;
if ((GetSkillValue('Focus') < 100) or (GetSkillValue('Meditation') < 100)) then Abil;
wait (100);
if (GetSkillValue('Stealth') < 100) then Stels;
wait (100);
if ((GetSkillValue('Stealth') = 100) and (GetSkillValue('Hiding') < 100)) then Hide;
wait (100);
if ((GetSkillValue('Stealth') = 100) and (GetSkillValue('Hiding') = 100) and (GetSkillValue('Detecting Hidden') < 100)) then Detect;
wait (100);
if ((GetSkillValue('Stealth') = 100) and (GetSkillValue('Hiding') = 100) and (GetSkillValue('Detecting Hidden') = 100) and (GetSkillValue('Meditation') < 100)) then Medit;
wait (100);
if ((GetSkillValue('Focus') = 100) and (GetSkillValue('Meditation') = 100)) then Hide;
wait (100);
end;
END.
1) персы пытаются юзать абилку постоянно до тех пор пока маны не начинает быть меньше 50, хотя время действия еще не прошло(
2) хайдящиеся чары неуспевают даже 1 шага ступить в хайде, чтобы качнуть стелс - или с задержками какаято лажа или они слишком засинхроненые и детектят в те 0.1 секунды когда надо начинать движение.
3) есть подозрение что я всё-таки неправильно расписал логику скрипта и я не достигну желаемого результата(быстрая вкачка хайда\стелса\детекта\абилки без потерь времени)
Прошу знающих людей помочь либо дать(можно в приват) свой скайп, где я мог бы задавать свои маленькие вопросики =))
Re: Ищу наставника по стелсу(когото, кто как и я сидит в ска
аська в профиле указана, чем смогу...
Re: Ищу наставника по стелсу(когото, кто как и я сидит в ска
Слегка изменил скрипт
Но оно всеравно досихпор не делает что хочу на все 100%.... Я подумал что раз куча чаров с разными скилами чтобы не стояли без дела - пусть юзают скилы по очереди - абил, стелс, хайд, детект, медит.
Но те чары которые качали хайд - продолжают его качать с абилкой и медитацией, а вот детект не юзают. Да и стелс - ни один чар ни на 0.1 не прокачал =(
Code: Select all
Program Detect_Meditation_Ability_Hide_Stealth; //v1.5
{$Include 'checksave.inc'}
procedure Medit;
begin
CheckSave;
if (WarMode = True) then SetWarMode(False);
if (Mana < MaxMana) then
begin
UseSkill('Meditation');
repeat
wait(3500);
until (Mana = MaxMana);
end;
wait (100);
end;
procedure Abil;
var abtime:TdateTime;
begin
CheckSave;
if (Mana >= 50) then
begin
if (InJournalBetweenTimes('истекло',abtime,now)>0) or ((DateTimeToUnix(now)-DateTimeToUnix(abtime))>60) then
begin
UOSay('.useability 1');
abtime:=now;
end;
end;
end;
procedure Stels;
begin
CheckSave;
repeat
UseSkill('Hiding');
wait (4400);
until (Hidden = True);
wait (100);
repeat
NewMoveXY(GetX(Self), GetY(Self) + 1,False,0,False);
wait (100);
NewMoveXY(GetX(Self), GetY(Self) -1,False,0,False);
wait (100);
until (Hidden = False);
end;
procedure Hide;
begin
CheckSave;
repeat
UseSkill('Hiding');
wait (4400);
until (Hidden = True);
end;
procedure Detect;
begin
CheckSave;
UseSkill('Detecting Hidden');
wait (3400);
end;
BEGIN
SetARStatus(True);
SetPauseScriptOnDisconnectStatus(True);
SetWarMode(False);
while (Dead = False) do
begin
CheckSave;
if ((GetSkillValue('Focus') < 100) or (GetSkillValue('Meditation') < 100)) then Abil;
wait (100);
if (GetSkillValue('Stealth') < 100) then Stels;
wait (100);
if (GetSkillValue('Hiding') < 100) then Hide;
wait (100);
if (GetSkillValue('Detecting Hidden') < 100) then Detect;
wait (100);
if (GetSkillValue('Meditation') < 100) then Medit;
wait (100);
if ((GetSkillValue('Focus') = 100) and (GetSkillValue('Meditation') = 100)) then Hide;
wait (100);
end;
END.
Но те чары которые качали хайд - продолжают его качать с абилкой и медитацией, а вот детект не юзают. Да и стелс - ни один чар ни на 0.1 не прокачал =(
Re: Ищу наставника по стелсу(когото, кто как и я сидит в ска
а почему бы не подумать и не перепроектировать "вот это вот все..." Скажем, ты можешь написать функцию в которой определить план прокачки, хайд - стелс - детект ... в зависимости от тех скиллов которые есть на чаре. Провести 1 раз инициализацию этой очереди и юзать тот скил который стоит сейчас в очереди. Переопредели большинство своих процедур в функции ибо их механика, по моему мнению больше подходит функции, подумай о рекурсии в функциях типа медитации. Подключи ивенты для обработки событий журнала или бафов, создай структуру в которой храни пул флагов для важных дел, опиши функцию для обработки этих флагов. Обильно снабди код системными сообщениями, старайся любое действие представлять как булеву величину, выполнилось или нет, раньше ты ведь не можешь знать выполнится оно или нет, значит нужно проверить, а выполняется ли, корректно ли...
Переопредели немного скрипт, какой простой бы он ни был, напиши себе темплейт для работы и дальше все пойдет как по накатанной.
Переопредели немного скрипт, какой простой бы он ни был, напиши себе темплейт для работы и дальше все пойдет как по накатанной.
Re: Ищу наставника по стелсу(когото, кто как и я сидит в ска
Извини, но ты использовал некоторые термины, которые я не понимаю =))) Аськи у меня к сожалению нету - но это покачто))) Если бы в скайпе поспрашивать по порядку - мб мне стало бы понятнее))
Насчет булевой я еще понял - да действительно будет нагляднее если я заполоню скрипт системными сообщениями и буду видеть какой шаг он проходит, а какой нет. Попробую этот совет для начала.
Насчет очередей - я покачто недоконца понимаю как работать с массивами и переборками - потому боюсь несмогу составить логику скрипта.
Почему функции? Как представить юз скил детект или юз скил хайд в виде функции? Просто заменить procedure Detect; на function Detect(DetectUse:Boolean); и потом обьявлять как Detect(True); ?
Что такое рекурсия в конексте написания скриптов на стелс? (я почитал вики и даже почитал что такое рекурсия в программировании, но неочень понял как она должна выглядеть в скрипте).. Можно хоть один пример?
Ивенты для обработки событий журнала или бафов - это та проверка на сообщение в журнале? Она посути актуальна лишь для абилки - в других случаях можно либо обойтись другими проверками, либо они вообще ненужны там - разве нет?
Создай структуру в которой храни пул флагов - вот это я вообще непонял.
Темплейт судя по словарю - шаблон. Грубо говоря я и пытаюсь вывести шаблон для всех моих будущих скриптов - которые будут преследовать 2 цели - основную и побочную(в данный момент это прокачка абилки паралельно с качкой лоров). Дальше это будет прокачка абилки с варами.
Насчет булевой я еще понял - да действительно будет нагляднее если я заполоню скрипт системными сообщениями и буду видеть какой шаг он проходит, а какой нет. Попробую этот совет для начала.
Насчет очередей - я покачто недоконца понимаю как работать с массивами и переборками - потому боюсь несмогу составить логику скрипта.
Почему функции? Как представить юз скил детект или юз скил хайд в виде функции? Просто заменить procedure Detect; на function Detect(DetectUse:Boolean); и потом обьявлять как Detect(True); ?
Что такое рекурсия в конексте написания скриптов на стелс? (я почитал вики и даже почитал что такое рекурсия в программировании, но неочень понял как она должна выглядеть в скрипте).. Можно хоть один пример?
Ивенты для обработки событий журнала или бафов - это та проверка на сообщение в журнале? Она посути актуальна лишь для абилки - в других случаях можно либо обойтись другими проверками, либо они вообще ненужны там - разве нет?
Создай структуру в которой храни пул флагов - вот это я вообще непонял.
Темплейт судя по словарю - шаблон. Грубо говоря я и пытаюсь вывести шаблон для всех моих будущих скриптов - которые будут преследовать 2 цели - основную и побочную(в данный момент это прокачка абилки паралельно с качкой лоров). Дальше это будет прокачка абилки с варами.
Re: Ищу наставника по стелсу(когото, кто как и я сидит в ска
function Detect :Boolean;Как представить юз скил детект или юз скил хайд в виде функции?
begin
....
if XXX then
Result := True
else
Result := False;
if Detect then... // оно же if Detect = True
причем тут рекурсия я тоже не очень понял.
typeструктуру в которой храни пул флагов для важных дел
XXX = record
HideState,
StealthState,
....
ZZZState : Boolean;
end;
обращаться например через
if xxx.HideState then
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
Re: Ищу наставника по стелсу(когото, кто как и я сидит в ска
Не дописанная функция рекола с рекурсией.
Глобальный пул флагов, это если есть необходимость юзать больше 1-2 условных трайскаунтов. Тогда их лучше организовывать в структуры. К твоему скрипту применительно 1 трайскаунт на использование скилла, если скажем 100 юзов не дали прироста то вайнить в журнал - всем капец скрипт не работает, как дальше жить... Ну или переход на след скилл, с месседжем, что "вот это вот все" не сработало и будем пробовать дальше.
Честно говоря, каждый пишет под свой стиль, кто то может написать скрипт, поставить чаров и 2 недели не проверять с уверенностью, что там все агонь. А кому то хватит банальщины без всяких наворотов типа вайл тру ду и бб гл хф. Если нравится присматривать за ботами и нет нужды в погоне за 99.9% аптаймом и эффективностью то пиши в свое удовольствие, не морочься.
Code: Select all
function Recall(Where: Cardinal) : Boolean;
var
selfPos : TPoint;
i : Integer;
begin
Result := False;
selfPos.X := GetX(Self);
selfPos.Y := GetY(Self);
if not (Mana > MaxMana/3) then begin
UseSkill('Meditation');
for i := 0 to 300 do
if (Mana > MaxMana/3) then
break;
end;
if not CheckRegs then
GetRecallRegs(ObjAtLayer(BankLayer));
Cast('Recall');
if WaitForTarget(5000) then
TargetToObject(Where)
else
AddToSystemJournal('Error, targeting rune!');
CancelTarget;
for i := 0 to 100 do
if InverseCheckSelfPositionWith(selfPos.X, selfPos.Y) then begin
Result := True;
AddToSystemJournal('Recall successfull!');
break;
end
else
Wait(100);
if not Result and TriesCount < 5 then begin//TriesCount глобальный флаг для подсчета попыток. Перед вызовом обязательно его занулить.
Inc(TriesCount);
Recall(Where); //если не достигли результата тру при выполнении, запускаем заново.
end
else
AddToSystemJournal('Something globally wrong, reached TriesCount < 5!');
end;
procedure GoHome();
begin
TriesCount := 0;
if Recall(HomeRune) then
AddToSystemJournal('Ура все получилось');
end;
Честно говоря, каждый пишет под свой стиль, кто то может написать скрипт, поставить чаров и 2 недели не проверять с уверенностью, что там все агонь. А кому то хватит банальщины без всяких наворотов типа вайл тру ду и бб гл хф. Если нравится присматривать за ботами и нет нужды в погоне за 99.9% аптаймом и эффективностью то пиши в свое удовольствие, не морочься.