PDA

Просмотр полной версии : Скрипт бафф бот


Xen
11.05.2010, 20:49
Сделал сегодня скрипт, пока он сырой, но при компиляции вылезла странная ошибка...

Ошибка: Incompatible types: 'String',''>

При этом НЕ подчеркивается строка с ошибкой, т.е. как будто скрипт проходит проверку, но внизу появляется эта надпись и этим ограничивается. Не запускается.

Файл прикрепил, пробывал менять кодировки, и возвращать в ansi, но и это не помогает (думаю это в этом дело). Ошибка в несоответствии типов, но где эта ошибка локализуется непонятно), щас сам поочереди все закомментирую и выявлю.

NLObP
12.05.2010, 00:34
Xen, вот где ошибка начинается:
Shield:
begin
buf:=WriteC(IDRequestMagicSkillUse);
WriteD(Shield);
WriteD(CtrlPressID);
WriteC(ShiftPressID);
SendToServerEx(BufferName);
delay(BuffTime);
end;


В переменную buf пиши id пакета либо так
buf:=hstr('39');
либо так
buf:=#$39;

Слева от команды WriteX() ничего не должно быть, она сама в buf пишет.

Команда delay(); не рекомендуется в скриптах (если только задержка не в пределах 200-500 мс). Она замораживает прогу вместе с клиентом.
Ниже еще опечатка в переменной, вместо UseBuffID написано UseBuff.

Xen
12.05.2010, 08:23
Спасибо, скриптованием только занялся, еще не все тонкости понятны.

Если кто может поделитесь кусками или целыми скриптами на данную тематику, а именно баффа, для ознакомления и т.д. :rolleyes:
Гуглил и тут искал, но таких скриптов на удивление мало, я б сказал их вообще нет.

С дэлей согласен, оставлять его неразумно, попробую заменить на функцию, которая будет проверять системное сообщение-ответ от сервера об успешности наложения баффа, тогда приступать к след. процессу баффа.

Главная фишка это контроль баффов .)

Breadfan
12.05.2010, 16:57
на твое удивление, здесь на форуме есть скрипты для баферов, бд и свс, полностью автономных, с регулярным бафом и хилом, так что я хз как ты "...Гуглил и тут искал..."

Xen
12.05.2010, 20:11
Спс NLObP, ошибку нашел, значительную часть полностью переписал.
Не подскажеш как объявить массив констант? А то стандартный метод, например:
Const
Mas: array[1..4] of string=('Первый', 'Второй', 'Третий', 'Четвертый');
var
...
begin
...
end.

Это не проходит, хотя корректно. Хочется в "шапку", на "видное место", а не в процедуру инициализации. Не хочется пихать код в плагин или длл, хотя там полное раздолье.


Мне нужно полная функциональность бафа типа валкера. В тех темах, которые я нашел, там очень простые и банальные примеры, по функционалу похожие на макросы клиента.

Сорри конечно, но видимо я не умею искать ) Тыкни меня носом, на эту "автономность", которую я, пролистав более 10 тем по данной тематике, так и не нашел, да есть конечно чтото похожее на "бота", но такими не являются, т.к. ограничены функционалом или не учитывают реалий "активного кача".

Если скрипт бафа, значит он должен не только раз в ацать минут делать перебаф, но проверять свои и чужие баффы, проверять их кол-во, вдруг моб канцель кинул или т.д., учитывать состояни мр, расстояние до игрока, откат скилла, разрешение бафать в режиме боя, проверять собственное положение для баффа, т.к. не всегда основа близко к баферу, а то в некоторых темах про так называемого "бафф-бота", который лишен банальной проверки сидит он или стоит когда бафает, сводит к 0 эффективность этого скрипта сводя его к макросу клиента.
Тогда да, в этом случае такой скрипт можно назвать "бафф бот", который является автономным, а которые я тут увидел, это обычно "макросы", но с небольшими "прибамбасами" типа трейда и др. "лабуды".

Наверно я не правильно акцент поставил с 1 поста, скрипт для кача, чтобы бафер бегал как аля "2окно" и делал всю скучную работу, но главное - баффы, с хилом в разы проще, там не нужно столько телодвижений делать как с бафами.

Breadfan
12.05.2010, 22:27
Grinch, MHz делали уже когда-то скрипт баферов, да и VORON тож....Ворона скрипт взял, добавил баф по таймеру (там, насколько помню - по команде) и вставил проверку на абнормалстатус патимемберов и все. У Grinch`а есть пример организации таймера не по делей, а именно от приходящего пакета с временем каста скила...
А вместо миллиона строк типа
Mental_Shield:
begin
buf:=WriteC(IDRequestMagicSkillUse);WriteD(Mental_ Shield);WriteD(CtrlPressID);WriteC(ShiftPressID);
SendToServerEx(BufferName);
delay(BuffTime);
end;
Bless_Shield:
begin
buf:=WriteC(IDRequestMagicSkillUse);WriteD(Bless_S hield);WriteD(CtrlPressID);WriteC(ShiftPressID);
SendToServerEx(BufferName);
delay(BuffTime);
end;
Advanced_Block:
begin
buf:=WriteC(IDRequestMagicSkillUse);WriteD(Advance d_Block);WriteD(CtrlPressID);WriteC(ShiftPressID);
SendToServerEx(BufferName);
delay(BuffTime);
end;
использовать
begin
buf:=WriteC(IDRequestMagicSkillUse);WriteD(UseBuff ID);WriteD(CtrlPressID);WriteC(ShiftPressID);
SendToServerEx(BufferName);
delay(BuffTime);
end; - религия не позволяет? :)

Xen
12.05.2010, 23:27
На верхнюю копию можешь не смотреть я ее изменил уже несколько раз) Это копипаст кусок с небольшими вкроплениями моего кода, щас я работаю над расширением функционала до валкерского аналога.
Теперь она выглядит проще, выбором на процедуру:

...
case UseBuffID of
Shield: SendPckServerUseSkill(Shield,CtrlPressID,ShiftPres sID);
Mental_Shield: SendPckServerUseSkill(Mental_Shield,CtrlPressID,Sh iftPressID);
...
end;

procedure SendPckServerUseSkill(IDSkill,CtrlStatus,ShiftStat us: integer);
begin
buf:=hstr(IDRequestMagicSkillUse); // Формируем заголовок пакета (ид)
WriteD(IDSkill); // Задаем ИД скилла
WriteD(CtrlStatus); // Задаем значение CtrlPressed
WriteC(ShiftStatus); // Задаем значение ShiftPressed
SendToServerEx(BufferName); // Отправляем на сервер пакет
end;
...

Скрипт получится в итоге довольно объемным, пока все, мб еще хил прикручу и вебморду

NLObP
13.05.2010, 02:01
Не подскажеш как объявить массив констант?
Попробуй через TStringList (можно из файла грузить или прямо присвоить)

Fer123
13.05.2010, 11:34
Не подскажеш как объявить массив констант?
Const
Numbers=['Первый', 'Второй', 'Третий', 'Четвертый'];

Xen
15.05.2010, 18:04
Скрипт значительно пополнился. Скрипт умеет распознавать свой бафф, если отсутствует какой-либо баф он его добафает (по опции вкл/выкл.), имеет ПОЛНЫЙ аналог функций валкеровского бафф-бота, щас пишу функции для баффа всей пати и чтобы скрипт был универсальным =)
В планах хилл и следование за пати лидером.
Кстати не все так сложно, как казалось )

У меня вопросик небольшой, как непосредственно в скрипте подключить модули и можно ли?) типа uses Windows; и другие, не критически, но в хелпе не нашел.

alexteam
15.05.2010, 18:42
в фастскрипте модульность отсуствует.

Xen
16.05.2010, 11:52
Столкнулся со сложностью реализации хранения параметров бафов для сопартийцев.

Т.к. фастскрипт обделен от природы объявлением своих типов, записей и т.п. благ цивилизации, у меня возникла проблема.

Для индентификации требуется:
1. Массив ИД патимемберов (из 9 шт.)
2. КАЖДЫЙ патимембер имеет 2 "свойства": 1-ИД баффа, 2-Текущее время баффа.

Должна получится подобная структура данных:

http://s48.radikal.ru/i119/1005/0e/28a0f14773c7.jpg


Получается "2 массива(ID скилла+Delay скилла) "входящих" в массив(ID патимембера)", в скрипте написал:

// Переменные партии
BuffID_Delay: array [0..20,0..20] of cardinal; // 1.БаффID, 2.Текущая продолжительность БаффID, где MaxSelfBuffs - макс. кол-во итемов
PartyBuffsEffects: array [0..8] of BuffID_Delay;
PartyMembersID: array [0..8] of cardinal; // 1.ID игрока, где MaxSelfBuffs - макс. кол-во итемов


И компилятор это "захавал" хорошо, мб есть более "удобные" способы работать с такими данными?

J-Fobos
16.05.2010, 13:50
BuffsEffects:array [0..8,0..1,0..20] of integer;
Вот например одним массивом будет так, если бафф слотов 20.
BuffsEffects[ID_члена_пати,если_0_то_хранится_текущее_время_ баффа_если_1_то_хранится_ID_баффа,значение_либо_ID _баффа_либо_время_баффа]

Xen
16.05.2010, 14:32
BuffsEffects:array [0..8,0..1,0..20] of integer;
Вот например одним массивом будет так, если бафф слотов 20.
BuffsEffects[ID_члена_пати,если_0_то_хранится_текущее_время_ баффа_если_1_то_хранится_ID_баффа,значение_либо_ID _баффа_либо_время_баффа]
О трехмерном массиве думал. но не приходило в голову проиндексировать 0 или 1 "тип" данных -) Работать с таким массивом главное просто. Спс, думаю так и сделаю.

Если будут еще предложения, пишите;). Ой как же не хватает объявлений своих классов и методов:mad: Код был бы компактнее и красивее.