DEFAULT NFK BOT DEVELOPMENT SDK ver 0.4
By areS
http://www.3dpower.org
http://forum.3dpower.org
mailto:seva_8_8@bk.ru
скриптовый язык бота. описание.
зачем он нужен?
на некотором этапе разработки бота я столкнулся с тем, что бот не может думать как человек.
решения, очевидные для человека, для него неочевидны. т.е. , к примеру, вы никогда не сунетесь
за желтым армором, если на нем кемперит противник. а бот - сунется. и исправить эту проблему путем
внесения изменений в код бота можно, но если бы она была одна!... для того, что бы бот стал похожим
на человека, нужно написать ОООоЧЕНЬ много подобных строк кода, чего я сделать просто не в состоянии.
да и неудобно делать это в дельфи, он для этого не подходит. но выход есть - написать скриптовый
движок, который позволял бы читать все эти условия из простого txt-файла, который каждый сможет
изменить и дополнить по своему желанию. совсем не нужно уметь программировать, что бы писать скрипты,
так как это очень легко! итак, начнем.
за основу языка был взят синтаксис Паскаля, как наиболее простой и понятный. вот что поддерживает скрипт -
1. обявление переменных типа
byte
integer
real
string
char
boolean
example:
var
i,j,k:integer;
a.s:string;
pt:char;
r:real;
bool:boolean;
и.т.д
2. поддержка вложенных begin/end. думаю, тут ничего обьяснать не нужно.
3. поддержкка почти всех операторов Паскаля : case, for, if..then, repeat..until, while.
4. естесственно, умение работать с НФК и управлять ботом. для этого используются заранее описанные в длл процедуры
и функции. сейчас речь пойдет именно о них.
GetX(i:byte):byte
функция, возвращающая Х коорринату(в бриках) игрока под номером i. надо заметить, что номер может принимать значения
от 0 до 7, то есть всего 8 игроков, причем, как правило, самый первый зашедший на сервер имеет номер 0, следую-
щий - 1, и.т.д . но это не всегда верно.
GetY(i:byte):byte
аналогична GetX, возвращает У коорринату(в бриках) игрока под номером i
GetHealth(i:byte):byte
возвращает здоровье игрока под индексом i
GetArmor(i:byte):byte
возвращает количество брони игрока под индесом i
GetIndex:byte
возвращает индекс бота, для которого в данный момент был вызван скрипт - дело в том, что он вызывается 50 раз в
секунду для всех ботов поочередно.
GetNearPlayer(i:byte):byte
возвращает индекс игрока, ближайшего к игроку под индексом i
ShowMess(data:string)
выводит на консоль строку data
SetPoint(x,y:byte;priority:integer)
указывает боту, что точка с координатами (х,у) (в бриках) имеет приоритет priority. и если приоритет этой точки
окажется в данный момент самым высоким на карте, бот побежит туда . для сравнения,
средний приоритет рокета - 100-400
средний приоритет шоткана - 50-200
средний 50-хитовой аптечки - 0-1000
средний приоритет желтого - 370 - 840
средний приоритет красного - 2500
и.т.д
SetWeapon(i,w:byte)
ставит оружие игрока равным w, к примеру, у базуки w равно 4
Shot(i:byte)
заставляет игрока стрельнуть
GetWeapon(i:byte):byte
возвращает номер текущего оружия игрка.
HaveWeapon(i,w:byte):boolean
true если у игрока есть оружие под номером w, false если нет
GetMap:string
возвращает имя текущей карты без расширения, к примеру dm0, tourney4, dm2
GetPDir(i:byte):byte
результат - число, зависящее от того, куда повернут игрок. 0 или 2 - влево. 1 или 3 - вправо.
int2str(t:integer):string
str2int(t:string):integer
думаю, их назначение юбьяснять не нужно. ))
учтите, что этот язык имеет много скрытых возможностей, скажу только, что на нем можно , к примеру, пускать
мессажбоксы и даже создавать формы...
// happy bot development! ^_^