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! ^_^