basic_robot_terminal/docs/robot_doc_3.md
2019-05-03 16:42:39 +02:00

7.2 KiB

Robot API

Ce document présente la plupart des fonctions et la syntaxe pour la programmation des robots.

BASIC LUA SYNTAX

la plupart des syntaxes basique du langage lua sont autorisés.

if x==1 then A else B end for i = 1, 5 do something end while i<6 do A; i=i+1; end

Tableaux:

myTable1 = {1,2,3}, myTable2 = {["entry1"]=5, ["entry2"]=1}

( Voir la documentation sur le langage lua pour plus de détails )

COMMANDES POUR LES ROBOTS

MOVEMENT,DIGGING, PLACING, INVENTORY TAKE/INSERT

move.direction() turn.left(), turn.right(), turn.angle(45) dig.direction() place.direction('default:dirt', optional orientation param) read_node.direction() insert.direction(item, inventory) check_inventory.direction(itemname, inventory, index) activate.direction(mode) pickup(r) craft(item,mode) take.direction(item, inventory) read_text.direction(stringname,mode) write_text.direction(text,mode)


move.direction() Où direction peut être : forward, backward, left,right, up, down La direction forward_down ne fonctionne qu'avec dig, place et read_node

turn.left(), turn.right(), turn.angle(45)

dig.direction()

place.direction('default:dirt', optional orientation param)

read_node.direction() Renvoie le nom du bloc

insert.direction(item, inventory) Ajoute un objet dans l'inventaire cible depuis l'invetaire du robot

check_inventory.direction(itemname, inventory, index) Inspecte le bloc et renvoie false/true

  • direction peut être self
  • si index > 0 , renvoie itemname. Si itemname == '' , test si l'inventaire est vide.

activate.direction(mode) Active le bloc cible

pickup(r) Rammasse tous les objets autours du robot dans un rayon de r. r doit être < 8. Renvoie la liste des objets ou nil.

craft(item,mode) Craft item si les matériaux nécessaires sont présents dans l'inventaire. mode = 1 renvoie la recette

take.direction(item, inventory) Prends item dans l'inventaire cible et l'ajoute à celui du robot.

read_text.direction(stringname,mode) Lit le texte d'un panneau, coffre, ou autre bloc. Paramètre stringname optionnel pour d'autres meta, mode 1 s'il s'agit d'un nombre

write_text.direction(text,mode) Écrit le texte dans le bloc cible (en tant qu'infotext)

BOOKS/CODE

title,text=book.read(i) book.write(i,title,text) code.run(text) code.set(text) find_nodes('default:dirt',3)


title,text=book.read(i) Renvoie titre, contenut du livre à la position i de la bibliothèque

book.write(i,title,text) Ecrit dans le livre à la position i de la bibliothèque

code.run(text) compile et execute le code dans la sandbox

code.set(text) remplace le code actuel du robot

find_nodes('default:dirt',3) renvoie la distance du bloc dans un rayon de 3 ou false s'il n'y en a pas

PLAYERS

find_player(3) attack(target) grab(target) player.getpos(name)

find_player(3) finds players in radius 3 around robot and returns list, if none returns nil

attack(target) attempts to attack target player if nearby

grab(target) attempt to grab target player if nearby and returns true if succesful

player.getpos(name) return position of player, player.connected() returns list of players

ROBOT

say(\"hello\") self.listen(0/1) speaker, msg = self.listen_msg() self.send_mail(target,mail) sender,mail = self.read_mail() self.pos() self.name() self.set_properties({textures=.., visual=..,visual_size=.., , ) self.set_animation(anim_start,anim_end,anim_speed,anim_stand_start) self.spam(0/1) self.remove() self.reset() self.spawnpos() self.viewdir() self.fire(speed, pitch,gravity) self.fire_pos() self.label(text) self.display_text(text,linesize,size) self.sound(sample,volume)


say(\"hello\") will speak

self.listen(0/1) (de)attaches chat listener to robot

speaker, msg = self.listen_msg() retrieves last chat message if robot listens

self.send_mail(target,mail) sends mail to target robot sender,mail = self.read_mail() reads mail, if any self.pos() returns table {x=pos.x,y=pos.y,z=pos.z} self.name() returns robot name self.set_properties({textures=.., visual=..,visual_size=.., , ) sets visual appearance set_animation(anim_start,anim_end,anim_speed,anim_stand_start) set mesh animation self.spam(0/1) (dis)enable message repeat to all self.remove() stops program and removes robot object self.reset() resets robot position self.spawnpos() returns position of spawner block self.viewdir() returns vector of view for robot self.fire(speed, pitch,gravity) fires a projectile from robot self.fire_pos() returns last hit position self.label(text) changes robot label self.display_text(text,linesize,size) displays text instead of robot face, if no size return text self.sound(sample,volume) plays sound named 'sample' at robot location rom is aditional table that can store persistent data, like rom.x=1 .

KEYBOARD

place spawner at coordinates (20i,40j+1,20k) to monitor events

keyboard.get() keyboard.set(pos,type) keyboard.read(pos)


keyboard.get() returns table {x=..,y=..,z=..,puncher = .. , type = .. } for keyboard event keyboard.set(pos,type) set key at pos of type 0=air, 1..6, limited to range 10 around keyboard.read(pos) return node name at pos

TECHNIC FUNCTIONALITY

namespace 'machine'. most functions return true or nil, error

machine.energy() machine.generate_power(fuel, amount) machine.smelt(input,amount) machine.grind(input) machine.compress(input) machine.transfer_power(amount,target_robot_name)


machine.energy() displays available energy machine.generate_power(fuel, amount) = energy, attempt to generate power from fuel material if amount>0 try generate amount of power using builtin generator - this requires 40 gold/mese/diamonblock upgrades for each 1 amount machine.smelt(input,amount) = progress/true. works as a furnace if amount>0 try to use power to smelt - requires 10 upgrades for each 1 amount, energy cost is 1/40*(1+amount) machine.grind(input) grinds input material, requires upgrades for harder material machine.compress(input) requires upgrades - energy intensive process machine.transfer_power(amount,target_robot_name)

CRYPTOGRAPHY

namespace 'crypto'

crypto.encrypt(input,password) crypto.decrypt(input,password) crypto.scramble(input,randomseed,sgn) crypto.basic_hash(input,n)


crypto.encrypt(input,password) returns encrypted text, password is any string crypto.decrypt(input,password) attempts to decrypt encrypted text crypto.scramble(input,randomseed,sgn) (de)permutes text randomly according to sgn = -1,1 crypto.basic_hash(input,n) returns simple mod hash from string input within range 0...n-1