Форум работает в тестовом режиме. Все данные были перенесены со старого сайта 2018 года. Некоторая информация может быть недоступна, например вложения или хайды. Просьба сообщать о данных случаях через функционал "Жалоба", прямо под постом, где отсуствуют данные из хайда или проблемы с вложением.
Могут быть проблемы в "выкидыванием" с форума (слетевшей авторизацией). Нужно собрать статистику таких случаев.
Есть Тема, куда можете сообщить о проблемах с сайтом либо просто передать привет.

Делаю скрипт квеста на куру (ХФ) , помогите допилить

Рег
28 Ноя 2015
Сообщения
126
Реакции
0
Собственно делаю скрипт для ХФ хроник на куру, я еще полный ноль, делал смотря в другие скрипты. Косяков наверное много, подскажите что где не так. Скрипт при запуске сразу же отключается, но ошибок не выдает.
Наверняка проблема в переменных\классах. Нужно будет конечно его еще сильно доработать) В каких случаях вообще нужно описывать процедуру?
Uses SysUtils, Classes;
var Item: TL2Item; Npc: TL2Npc; obj: TL2NPC; L2Skill: TL2Skill; // кто может объяснить в каких случаях какие классы используются ?
function CheckStatus: Boolean;
begin
Result:= true;
if User.Dead then begin
Delay(1000);
Engine.FaceControl(0, false);
Engine.GoHome;
Delay(10000);
end;
Result := false;
end;

procedure CheckLoading (NpcID: integer); // взял это с другого скрипта, но так и не понял нужна ли вообще тут эта проверка?
begin
while(engine.delay(100)) do
begin
Engine.GetNpcList.ByID(NpcID, obj);
if ((User.DistTo (obj)) < 9000) then Engine.Settarget(30827);// 9000 - Дистанция на которой сканируются NPC
break;
end;
end;
procedure TAKEQUESTGLUDIO; //берем кв у ланди
begin
if User.inrange (-13943,123353, -3112, 1000, 150) then begin
Engine.Settarget(30827); //Взять в таргет ланди;
Delay(1500);
Engine.Dlgopen;
Engine.DlgSel(8);
Engine.DlgSel(1); //берем квест
Delay(5000);
//идем в магаз оружия
Engine.MoveTo(-14424, 123584, -3143);
Engine.MoveTo(-14564, 123737, -3143);
Engine.MoveTo(-14701, 123848, -3143);
Engine.MoveTo(-14788, 123925, -3143);
Engine.MoveTo(-14751, 123412, -3143);
Engine.MoveTo(-14760, 123432, -3143);
Engine.MoveTo(-14802, 123409, -3143);
Engine.MoveTo(-15029, 123417, -3134);
Engine.MoveTo(-15091, 123371, -3134);
Engine.MoveTo(-15123, 123371, -3134);
Engine.MoveTo(-15124, 123376, -3134);
Engine.Settarget(30321); // target сидни в магазине оружия
Engine.Dlgopen;
Delay(1000);
Engine.DlgSel(1);
Delay(300);
Engine.DlgSel(1);
Engine.NPCTrade(false,[8824,1]); //купить молот за 425,250 аден
Delay(1000);
//идем к ланди
Engine.MoveTo(-14894, 123442, -3104);
Engine.MoveTo(-14683, 123477, -3143);
Engine.MoveTo(-14376, 123431, -3143);
Engine.MoveTo(-14057, 123375, -3143);
Engine.MoveTo(-13905, 123357, -3143);
Engine.MoveTo(-13954, 123353, -3143);
Engine.MoveTo(-13946, 123347, -3143);
Engine.Settarget(30827); //Взять в таргет ланди;
Delay(1500);
Engine.Dlgopen;
Engine.DlgSel(8);
Engine.DlgSel(1);
Delay(1000);
//идем за баффом от ланди
Engine.MoveTo(-14227, 123122, -3143);
Engine.MoveTo(-14093, 122589, -3143);
Engine.MoveTo(-14142, 122334, -3079);
Engine.MoveTo(-14099, 122240, -3031);
Engine.MoveTo(-13959, 122014, -3015);
Engine.Settarget(31077);
Engine.Dlgopen;
Engine.DlgSel(2);
Engine.DlgSel(1);
Delay(500);
end;
end;
//идем фармить итемы на лизардов
procedure farmQuest;
begin
Engine.MoveTo(-14575, 123317, -3143);
Engine.MoveTo(-14914, 123884, -3143);
Engine.MoveTo(-17332, 124307, -3183);
Engine.MoveTo(-18052, 124301, -3175);
Engine.MoveTo(-19326, 123564, -3225);
Engine.MoveTo(-19914, 122657, -3340);
Engine.LoadZone('квест кура 27 лвл.zmap');
Delay(500);
Engine.LoadConfig('сх 27 квест кура'); //загружаем конфиг для темного мистика
Delay(500);
Engine.Facecontrol(0,True); //включаем конфиг
if Inventory.User.ByID(7552, Item) and (Item.count = 30) then //если квест итемов =>30
Engine.Facecontrol(0,False);
Engine.UseItem(736); //юзаем сое в город
Delay(10000);
end;
procedure TAKECOUR;
begin
if User.inrange (-14366, 123692, -3112, 5000, 150) then begin
Engine.MoveTo(-14366, 123692, -3112); //идем в центр города
Engine.MoveTo(-13914, 123311, -3143); //идем к ланди
Engine.SetTarget(30827);
Engine.Dlgopen;
Engine.DlgSel(8);
Engine.DlgSel(1);
Delay(1000);
end;
//идем к орку
Engine.MoveTo(-14132, 123709, -3143);
Engine.MoveTo(-14261, 124430, -3146);
Engine.MoveTo(-14202, 125735, -3169);
Engine.MoveTo(-13826, 126059, -3171);
Engine.MoveTo(-13251, 126173, -3171);
Engine.MoveTo(-12699, 124884, -3155);
Engine.MoveTo(-12823, 124887, -3126);
Engine.SetTarget(30505);
Engine.Dlgopen;
Engine.DlgSel(5);
Engine.DlgSel(1);
Delay(500); //идем к ланди
Engine.MoveTo(-12252, 124384, -3131);
Engine.MoveTo(-12128, 123799, -3124);
Engine.MoveTo(-13804, 123488, -3143);
Engine.MoveTo(-13892, 123349, -3143);
Engine.SetTarget(30827);
Engine.Dlgopen;
Engine.DlgSel(8);
Engine.DlgSel(1); //взяли обменник
Delay(1000);
Engine.SetTarget(30827); //меняем на куру
Engine.Dlgopen;
Engine.DlgSel(6);
Engine.DlgSel(1); //получаем куру
end;
begin
end.
 
Неудивительно что она сразу же выключается. В основном теле скрипта нет ни одного оператора (см. нижние две строчки). Скрипт стартует от предпоследней строчки (begin) и заканчивается на последней (end.). Пмог бы больше по скрипту, но совсем не помню что там по квесту делать надо, давно уже его проходил.
 
т.е перед procedure TAKEQUESTGLUDIO; поставить begin? а в конце убрать , в конце я его дописал потому -что ошибку скрипт выдавал)) Ну там по квесту все просто:
1) берется квест у ланди на центр площади глудио
2) затем идем в магаз оружия- покупаем молоток, затем обратно относим к ланди
3) идем бить мобчиков (30 итемов на поляну перед глудио), возвращаемся через сое и к ланди
4) потом от ланди бежим к оркам в глудио, говорим с нпц
5) возвращаемся к ланди - он дает билет на куру
6) снова говорим с ланди и меняем билет на куру
Почему-то еще когда прихожу на спот фармить 30 итемов перед глудио, не срабатывает проверка на количество итемов. Он сразу жмет сое
 
@CMAK, на форуме уже есть скрипт на куру, точнее прокачка до 20го или какого то там лвла и кв на куропатку, пользуйся поиском. И уже либо смотри туда, либо вырезай...
 
Я его видел, ну он под хайдом, да и я сам хочу разобраться, т.к. мне это нужно
 
[member=TECHNO], у меня он не работал
 
сейчас я немного упростил скрипт, хотя бы чтобы он просто тупо бегал по кв, но тупит в 1 выделенном месте : когда прибегает на спот сразу же жмет сое , либо условие не выполняется - либо неправильно организовал?

Uses SysUtils, Classes;
function CheckItemCount (const itemID: Integer; const questItem: Boolean = False) : Integer;
var tempItem: TL2Item; Npc: TL2Npc; obj: TL2NPC; L2Skill: TL2Skill;
begin
if questItem then Inventory.Quest.ByID(itemID, tempItem)
else Inventory.User.ByID(itemID, tempItem);
Result := tempItem.Count;
end;
//берем кв у ланди
begin
if User.inrange (-13943,123353, -3112, 5000, 300) then begin
Engine.Settarget(30827); //Взять в таргет ланди;
Engine.MoveToTarget(-20);
Delay(5000);
Engine.Dlgopen;
Engine.DlgSel(8);
Engine.DlgSel(1); //берем квест
Delay(5000);
//идем в магаз оружия
Engine.MoveTo(-14424, 123584, -3143);
Engine.MoveTo(-14564, 123737, -3143);
Engine.MoveTo(-14701, 123848, -3143);
Engine.MoveTo(-14788, 123925, -3143);
Engine.MoveTo(-14751, 123412, -3143);
Engine.MoveTo(-14760, 123432, -3143);
Engine.MoveTo(-14802, 123409, -3143);
Engine.MoveTo(-15029, 123417, -3134);
Engine.MoveTo(-15091, 123371, -3134);
Engine.MoveTo(-15123, 123371, -3134);
Engine.MoveTo(-15124, 123376, -3134);
Engine.Settarget(30321); // target сидни в магазине оружия
Engine.MoveToTarget(-20);
Engine.Dlgopen;
Engine.DlgSel(1);
Engine.DlgSel(1);
Delay(2500);
Engine.NpcTrade(false,[168,1]); //купить молот за 425,250 аден
Delay(3000);
//идем к ланди
Engine.MoveTo(-14894, 123442, -3104);
Engine.MoveTo(-14683, 123477, -3143);
Engine.MoveTo(-14376, 123431, -3143);
Engine.MoveTo(-14057, 123375, -3143);
Engine.MoveTo(-13905, 123357, -3143);
Engine.MoveTo(-13954, 123353, -3143);
Engine.MoveTo(-13946, 123347, -3143);
Engine.Settarget(30827); //Взять в таргет ланди;
Delay(1500);
Engine.Dlgopen;
Engine.DlgSel(8);
Engine.DlgSel(1);
Delay(1000);
//идем за баффом от ланди
Engine.MoveTo(-14227, 123122, -3143);
Engine.MoveTo(-14093, 122589, -3143);
Engine.MoveTo(-14142, 122334, -3079);
Engine.MoveTo(-14099, 122240, -3031);
Engine.MoveTo(-13959, 122014, -3015);
Engine.Settarget(31077);
Engine.Dlgopen;
Engine.DlgSel(2);
Engine.DlgSel(1);
Delay(500);
//идем фармить итемы на лизардов
Engine.MoveTo(-14575, 123317, -3143);
Engine.MoveTo(-14914, 123884, -3143);
Engine.MoveTo(-17332, 124307, -3183);
Engine.MoveTo(-18052, 124301, -3175);
Engine.MoveTo(-19326, 123564, -3225);
Engine.MoveTo(-19914, 122657, -3340);
Engine.LoadZone('квест кура 27 лвл.zmap'); // загружаем карту для фарма итемов
Delay(500);
Engine.LoadConfig('сх 27 квест кура'); //загружаем конфиг для темного мистика
Delay(500);
begin
if CheckItemCount(7552, True) < 30 then // если квест итемов <30 вкл бота
Engine.FaceControl(0, True);
end;
begin
if CheckItemCount(7552, True) > 30 then // если квест итемов >30 вкл бота
Engine.FaceControl(0, False);
Engine.UseItem(736); //юзаем сое в город
Delay(10000);
end;
if User.inrange (-14366, 123692, -3112, 5000, 150) then begin
Engine.MoveTo(-14366, 123692, -3112); //идем в центр города
Engine.MoveTo(-13914, 123311, -3143); //идем к ланди
Engine.SetTarget(30827);
Engine.Dlgopen;
Engine.DlgSel(8);
Engine.DlgSel(1);
Delay(1000);
end;
//идем к орку
Engine.MoveTo(-14132, 123709, -3143);
Engine.MoveTo(-14261, 124430, -3146);
Engine.MoveTo(-14202, 125735, -3169);
Engine.MoveTo(-13826, 126059, -3171);
Engine.MoveTo(-13251, 126173, -3171);
Engine.MoveTo(-12699, 124884, -3155);
Engine.MoveTo(-12823, 124887, -3126);
Engine.SetTarget(30505);
Engine.Dlgopen;
Engine.DlgSel(5);
Engine.DlgSel(1);
Delay(500); //идем к ланди
Engine.MoveTo(-12252, 124384, -3131);
Engine.MoveTo(-12128, 123799, -3124);
Engine.MoveTo(-13804, 123488, -3143);
Engine.MoveTo(-13892, 123349, -3143);
Engine.SetTarget(30827);
Engine.Dlgopen;
Engine.DlgSel(8);
Engine.DlgSel(1); //взяли обменник
Delay(1000);
Engine.SetTarget(30827); //меняем на куру
Engine.Dlgopen;
Engine.DlgSel(6);
Engine.DlgSel(1); //получаем куру
end;
end.
 
что это вообще за бегин и енды там в коде, где ты выделил? тебе там надо зациклить это дело с условием выполнять пока квест итемов меньше или равно 30, в теле цикла этого поставить включать бота и делей пару секунд. блин, как вы пишите скрипты, если в программировании ничего не понимаете и без табуляции Х_х
 
unit
Collecting_Spores_Quest;

interface

uses SysUtils, Classes, RespPoint_Gludio, Utils;
const
QuestItemId = 7552;

QuestId = 44;

//Вписываем ник
PmUserName = 'FaN';

//Имя Нпц или Id
QuestNpcName = '30827';

//Писать в пм о ходе выполнения квеста?
ShouldPmToDriver = true;

//максимальное количество смертей
MaxDeathsCount = 5;

implementation

var deathCounts: Integer; obj:TL2Effect;

procedure TakeQuest;
begin
if User.inrange (-13943,123353, -3112, 5000, 300) then begin
Engine.SetTarget(30827);
Engine.MoveToTarget(-20);
Utils.RandomDelay(300, 500);
Engine.DlgOpen();
Utils.RandomDelay(300, 500);
Engine.DlgSel(8);
Utils.RandomDelay(500, 1500);
Engine.DlgSel(1);
Utils.RandomDelay(500, 1500);

end;
end;

procedure Tp; //телепорт в город
begin
Engine.FaceControl(0, False); // вырубаем бота
Engine.UseItem(736); // юзаем сое
Utils.RandomDelay(20000, 30000);
end;

procedure GoToLa;
begin
if User.inrange (-14366, 123692, -3112, 5000, 150) then begin
Engine.MoveTo(-14366, 123692, -3112); //идем в центр города
Engine.MoveTo(-13914, 123311, -3143); //идем к ланди
Engine.SetTarget(30827);
Utils.RandomDelay(500, 1500);
Engine.Dlgopen;
Utils.RandomDelay(500, 1500);
Engine.DlgSel(8);
Utils.RandomDelay(500, 1500);
Engine.DlgSel(1);
Utils.RandomDelay(500, 1500);
end;
end;

procedure GoToOrk;
begin
Engine.MoveTo(-14132, 123709, -3143);
Engine.MoveTo(-14261, 124430, -3146);
Engine.MoveTo(-14202, 125735, -3169);
Engine.MoveTo(-13826, 126059, -3171);
Engine.MoveTo(-13251, 126173, -3171);
Engine.MoveTo(-12699, 124884, -3155);
Engine.MoveTo(-12823, 124887, -3126);
Utils.RandomDelay(500, 1500);
Engine.SetTarget(30505);
Utils.RandomDelay(500, 1500);
Engine.Dlgopen;
Utils.RandomDelay(500, 1500);
Engine.DlgSel(6);
Utils.RandomDelay(500, 1500);
Engine.DlgSel(1);
end;

procedure GoToLa2;
begin
Engine.MoveTo(-12252, 124384, -3131);
Engine.MoveTo(-12128, 123799, -3124);
Engine.MoveTo(-13804, 123488, -3143);
Engine.MoveTo(-13892, 123349, -3143);
Engine.SetTarget(30827);
Utils.RandomDelay(500, 1500);
Engine.Dlgopen;
Utils.RandomDelay(500, 1500);
Engine.DlgSel(8);
Utils.RandomDelay(500, 1500);
Engine.DlgSel(1);
end;

procedure EndQuest;
begin
Engine.SetTarget(30827); //меняем на куру
Utils.RandomDelay(500, 1500);
Engine.Dlgopen;
Utils.RandomDelay(500, 1500);
Engine.DlgSel(6);
Utils.RandomDelay(500, 1500);
Engine.DlgSel(1);
Print('Поздравляю у Вас есть Кура!!!');

end;

procedure MoveToSpot;
begin
Engine.MoveTo(-14575, 123317, -3143);
Engine.MoveTo(-14914, 123884, -3143);
Engine.MoveTo(-17332, 124307, -3183);
Engine.MoveTo(-18052, 124301, -3175);
Engine.MoveTo(-19326, 123564, -3225);
Engine.MoveTo(-19914, 122657, -3340);
Print('Пришли на место');
end;

procedure MoveToNpc;
begin

Engine.MoveTo(-14760, 123432, -3143);
Engine.MoveTo(-14802, 123409, -3143);
Engine.MoveTo(-15029, 123417, -3134);
Engine.MoveTo(-15091, 123371, -3134);
Engine.MoveTo(-15123, 123371, -3134);
Engine.MoveTo(-15124, 123376, -3134);
end;

procedure BuyToNpc;
begin
Engine.Settarget(30321); // target сидни в магазине оружия
Engine.MoveToTarget(-20);
Utils.RandomDelay(300, 500);
Engine.Dlgopen;
Utils.RandomDelay(300, 500);
Engine.DlgSel(1);
Utils.RandomDelay(300, 500);
Engine.DlgSel(1);
Utils.RandomDelay(300, 500);
Engine.NpcTrade(false,[168,1]); //купить молот за 425,250 аден
end;

procedure GoToLandy;
begin
Utils.RandomDelay(300, 500); //идем к ланди
Engine.MoveTo(-14894, 123442, -3104);
Engine.MoveTo(-14683, 123477, -3143);
Engine.MoveTo(-14376, 123431, -3143);
Engine.MoveTo(-14057, 123375, -3143);
Engine.MoveTo(-13905, 123357, -3143);
Engine.MoveTo(-13954, 123353, -3143);
Engine.MoveTo(-13946, 123347, -3143);
Engine.Settarget(30827); //Взять в таргет ланди;
Utils.RandomDelay(300, 500);
Engine.Dlgopen;
Utils.RandomDelay(300, 500);
Engine.DlgSel(8);
Utils.RandomDelay(300, 500);
Engine.DlgSel(1);
Utils.RandomDelay(300, 500);
end;

procedure CheckBuff; //идем за баффом от ланди
begin
Print('Идем за Бафом');
Engine.MoveTo(-14227, 123122, -3143);
Engine.MoveTo(-14093, 122589, -3143);
Engine.MoveTo(-14142, 122334, -3079);
Engine.MoveTo(-14099, 122240, -3031);
Engine.MoveTo(-13959, 122014, -3015);
Engine.Settarget(31077);
Utils.RandomDelay(100, 200);
Engine.Dlgopen;
Utils.RandomDelay(100, 200);
Engine.DlgSel(1);
Utils.RandomDelay(100, 200);
Delay(500);
end;



procedure MoveHome;
begin
Engine.MoveTo(37345, 60235, -3584);
Utils.RandomDelay(100, 200);
Engine.MoveTo(36982, 58862, -3648);
Utils.RandomDelay(100, 200);
Engine.MoveTo(36376, 56651, -3664);
Utils.RandomDelay(100, 200);
Engine.MoveTo(36155, 55622, -3536);
Utils.RandomDelay(100, 200);
Engine.MoveTo(36130, 54336, -3496);
Utils.RandomDelay(100, 200);
Engine.MoveTo(36531, 53598, -3576);
Utils.RandomDelay(100, 200);
Engine.MoveTo(38101, 53966, -3600);
Utils.RandomDelay(100, 200);
Engine.MoveTo(40703, 52809, -3224);
Utils.RandomDelay(100, 200);
Engine.MoveTo(41763, 52043, -3032);
Utils.RandomDelay(100, 200);
Engine.MoveTo(42882, 51188, -2992);
Utils.RandomDelay(100, 200);
Engine.MoveTo(42912, 50633, -2984);
Utils.RandomDelay(100, 200);
Engine.MoveTo(42847, 50061, -2976);
end;

procedure ExecuteCollectingSporesQuest;
var
index: Integer;
item:TL2Item;
tempStr:string;
lastcount:Integer;
begin

if(User.Dead) then begin
Print('Stop bot');
Engine.FaceControl(0, false);
Utils.RandomDelay(1000, 2000);
Print('Go to town');
Engine.GoHome;

deathCounts := deathCounts + 1;

while not User.InRange(-13943,123353, -3112, 5000, 3550) do //ïðîâåðÿåì â ãîðîäå ëè ìû, åñëè íåò çàäåðæêà è òàê çàöèêëèâàåì
begin
Print('Не правильный город портанись в Глудио!');
Delay(10000);
end;
end;

Utils.RandomDelay(500, 1000);

if((Inventory.Quest.ByID(QuestItemId, item) = true) and (item.count = 30) ) then begin
Print('Квест выполнен идем сдавать!');
Tp; //тп в город
GoToLa; //идем сдавать
GoToOrk; //продолжаем
GoToLa2; //next)
EndQuest;
end;

if(not Engine.QuestStatus(QuestId, 44)) then begin //берем квест
Print('Взяли Квест на Курицу');
TakeQuest;
end;

Print('Идем в магазине за кувалдой');
MoveToNpc;

Print('Покупаем Кувалду');
BuyToNpc;

Print('Идем к Landy');
GoToLandy;

Print('Проверяем Бафф если нету идем бафаемся');
CheckBuff;

Print('Идем на спот');
MoveToSpot;

Utils.RandomDelay(500, 1500);

Print('Набиваем');
Engine.FaceControl(0, true);

//Проверяет сколько штук и пишет в системе бота осталось:
while( (Inventory.Quest.ByID(QuestItemId, item) = false) or (item.count < 30)) do begin
if(lastcount <> item.count) then begin
tempStr:= 'Осталось набить шт:' + IntToStr(30 - item.count);
Print(tempStr);
end;

lastcount:= item.count;
if(User.Dead) then begin
Engine.FaceControl(0, false);
Tp;

exit;
end;
end;


end;

begin
while ( (1=1) and (deathCounts < MaxDeathsCount) ) do begin
ExecuteCollectingSporesQuest();
end;
end.

Для работы скрипта понадобится 2 текстовых файла)
По скрипту - выполняет свою функцию, проверок нет. Нужно иметь сое, необходимое количество денег на Булаву.
Далее квест сам все делает и меняет на кукабару.
Файлики - Utils для рандомного времени выполнения действий
Resppoint_Gludio -из названия понятно но не проверял, и в этом просьба. Ребят проверьте допилите это условие.
Проверял на хф х50 фришке, отличие было в расположении строк у орка, а так все точки взял с вашего скрипта.
Файлики сложить в корень.
 

Вложения

  • Utils.txt
    474 байт · Просмотры: 11
  • RespPoint_Gludio.txt
    1.7 KB · Просмотры: 11
Назад
Сверху