PDA

Просмотр полной версии : всем привет, хочу научится немного скрипт писать..вот пример


poizon
22.04.2008, 15:40
я немного писал скрипты на АС тулсе, там конечно всё гораздо проще, для меня покрайней мере.
ну так вот хочу написать небольшой скрипт только не могу разобраться.нужно вот что

вопервых не могу понять каким пакетом от сервера приходит информация о текущем MP .
сам скрипт простой

procedure make
if MP = maxMp
set lomp = 0
loop while lowmp = 0 зацикливает пока переменная lowmp = 0
compute rnd1 = 1 + int(rnd(2)) // рассчитать рандомное число для делея
delay $rnd1 sec
sendtoserver "AF 14 00 00 00 " //вобщем типа послать сервуру этот пакет , нажимает на кнопку создания соулшота.

if mp < 40 //если маны мало то "вырубает" данный цикл
set lowmp = 1
end
end // конец цикла с условием
call make
else //если переменная МП не = макс МП то выполняет вызывает опять

call make
end //конец процедуры мейк


вобщем хочу понять на премере как всё делается в пакет хаке...
нужно значит следить за маной..ну я думаю вы поняли, буду очень признателен за помошь )) если не сложно то с комментариями типа как я писал сделайте пожалуйста....

nezabudkin
22.04.2008, 17:35
господа, программеры!

а ведь нету на нашем форуме скрипта для бота-крафтера сосок, а ведь тема то актуальная.

Ptica
22.04.2008, 17:40
чего уж так скромно то? тогда уж и с автопродажей сразу

poizon
22.04.2008, 23:19
ну тогда ваще надо полноценный делать скрипд.

типа можно выбрать рец. который будет крафтится

задать имя персонажа
------
задать первый предмет для крафта/продажи
сколько стоит маны mpCost1
задать кол-во сколько нужно накрафтить
--------
задать ХХ предмет для крафта /продажи
задать колво скока надо сделать
MpCost
---------
задать сообщение для продажи
задать цену продажи 1 предмета 2 предмета третьего и тп
первый предмет продавать всё? (если да то 0 если нет то количество)
второй предмет продавать всё? (если да то 0 если нет то количество)


далее скрипт

1. октрыть книгу рецептов
2. проверка сколько шотов в инвент. если >shoMin call trade
else сесть
3.выбрать первый рец для крафта
далее set mpcost = xx call make

procedure trade
кнопка магазина
кнопка сообщения ввести заданный текст
ок
первый предмет
цена
колво (или кнопка алл или количество)
тоже самое второй предмет (если задан)

ок (начало торговли)

4.начать крафтить
если накрафтили скока надо то нажать назад, открыть новый рец

вобщем я запутался уже...

Добавлено через 4 часа 34 минуты
ладно вобщемто начинать надо с малого, как получать количество маны? и как поставить отсыл пакета несколько раз при условии когда мана максимальна?

NLObP
23.04.2008, 14:25
во первых не могу понять каким пакетом от сервера приходит информация о текущем MP .

Пакет:
s0E=StatusUpdate:h(ObjectID)d(AttribCount)d(AttrID )d(AttrValue)
в пакете может быть несколько атрибутов за один раз.
Пример использования:
//************************************************** *
procedure StatusUpdate; // обновление данных о себе
var
i: integer;
begin
for i:=0 to ReadD(6)-1 do begin
case pck[i*8+10] of
#$09: CurHP:=ReadD(i*8+14);
#$0A: MaxHP:=ReadD(i*8+14);
#$0B: MyMP:=ReadD(i*8+14);
#$0C: MyMaxMP:=ReadD(i*8+14);
#$21: MyCP:=ReadD(i*8+14);
#$22: MyMaxCP:=ReadD(i*8+14);
end;
end;
end;

begin
if (ConnectName=Name) and FromServer then begin
case pck[1] of
#$0E: if (MyID=ReadD(2)) then StatsUpdate;
end;
end;
end.

сам скрипт простой
procedure make
if MP = maxMp
set lomp = 0
loop while lowmp = 0 зацикливает пока переменная lowmp = 0
compute rnd1 = 1 + int(rnd(2)) // рассчитать рандомное число для делея
delay $rnd1 sec
sendtoserver "AF 14 00 00 00 " //вобщем типа послать сервуру этот пакет , нажимает на кнопку создания соулшота.
if mp < 40 //если маны мало то "вырубает" данный цикл
set lowmp = 1
end
end // конец цикла с условием
call make
else //если переменная МП не = макс МП то выполняет вызывает опять
call make
end //конец процедуры мейк
1. Работа с пакетами в скрипте происходит асинхронно.
2. Циклов задержки в процедурах ставить нельзя все станет колом из-за задержек прохождения других пакетов.
3. Расчитывай на флаги, которые сообщают о происшедших событиях.
4. Скрипты кнопок давить не могут. Все действия осуществляются посылкой определенных пакетов.
5. Последовательность можно посмотреть пакетхаком по логам, предварительно проделав их в клиенте.

poizon
26.04.2008, 13:43
да это оказалось сложнее чем я думал...
значит
var
i: integer;

задаём переменную и - числовую, а эндом закрывать ендом надо?


begin
получается чтобы выполнить какието команды надо их обязательно засунуть сюда? тоесть просто если я напишу какуюто команду и она тут не будет она не выполнится?
end;


for i:=0 to ReadD(6)-1 do begin

это типа если и находится в пределе i:=0 to ReadD(6)-1 то выполнять следующие команды , да?
end;


case pck[i*8+10] of
#$09: CurHP:=ReadD(i*8+14);
#$0A: MaxHP:=ReadD(i*8+14);
#$0B: MyMP:=ReadD(i*8+14);
#$0C: MyMaxMP:=ReadD(i*8+14);
#$21: MyCP:=ReadD(i*8+14);
#$22: MyMaxCP:=ReadD(i*8+14);
end;
кейс это типа преобразовать пакет pck в 16тиричное значение ?
эту операцию я не понимаю совсем....
написано текущий пакет , а ак скрипт узнаёт какой текущий пакет?
и очень часто встречается [i*8+10] зачаем и умножать на 8 и прибавлять 10 или 14 я не понимаю)

как это кейс работает?

begin
if (ConnectName=Name) and FromServer then begin
case pck[1] of
#$0E: if (MyID=ReadD(2)) then StatsUpdate;
end;
end;
end.

тут значит если имя перса равно имя перса в скрипте и FromServer
что FromServer то? ни знака равно ни чего не понимаю.(если от сервера то начать , непонимаю)

а далее опять кейс и pck непонимаю) обьяните пожалуйста....

NLObP
26.04.2008, 15:07
poizon, тебе бы немного про Паскаль почитать, потому что здесь скрипты на Паскале-подобном языке. Еще лучше Дельфи изучить.

Немного теории. Скрипт состоит из нескольких частей.
const //описываем глобальные константы
Name='';
var //описываем глобальные переменные
Title : string;
procedure Init; //Вызывается при включении скрипта
begin
//здесь инициализируются переменные
...
end;

procedure Free; //Вызывается при выключении скрипта
begin
//здесь удаляются объекты и производятся завершающие действия
...
end;
//здесь описываем процедуры и функции, которые будут вызываться из основной части скрипта
...

//основная часть скрипта
//вызывается при приходе каждого пакета если скрипт включен
begin
//здесь описываем обработчики пакетов входящие/исходящие
...
end.

Лучше всего взять небольшой готовый скрипт и разобраться в его работе.