### Komunikacni protokol

- #### format paketu

  delka [B] | obsah
  1 | msg_type - typ zpravy: simulacni system > visio 1 - RESET 2 - CREATE 3 - KILL 4 - SETPOS_2D 5 - SETPOS_3D 6 - SETINFO 7 - CONNECTION 8 - SPECIAL 9 - VISIBILITY 10 - AGENT_INFO 11 - REMOVE_AGENT 12 - SETINFO_FRAME 13 - SHOW_ACTION 14 - SETRADIUS 15 - SETRADIUS2 16 - SETCHART 17 - REMOVECHART 18 - SETPOS_3D_EXT 21 - PLAN_UPDATE 22 - SET_SIMULATION_SPEED 24 - SCRSHOT3D_FREE 25 - SCRSHOT3D_FOCUSED 26 - SCRSHOT2D_FREE 27 - SCRSHOT2D_FOCUSED 28 - SET_WAYPOINTS 29 - AIRCRAFT_CRASHED 30 - DISPLAY_TIME 31 - RELATION_INFO_UPDATE 34 - SET_ZONE_DIMENSIONS 35 - SET_RADAR_RADIUS 36 - ADD_FORBIDDEN_ZONE 37 - SET_BATCH_INFO 40 - SHOW_REQUEST_IDS 43 - SET_VISIBILITY 44 - DEFINE_ZONE_MESH 45 - ASSIGN_ZONE_MESH 101 - SHOW_LINE 102 - HIDE_LINE visio > simulacni system 19 - SEND_PLAN_START 20 - SEND_PLAN_STOP 22 - SET_SIMULATION_SPEED 23 - SCRSHOT_DATA 32 - SEND_RELINFO_START 33 - SEND_RELINFO_STOP 38 - SEND_REQUEST_IDS_START 39 - SEND_REQUEST_IDS_END 41 - SEND_BATCH_INFO_START 42 - SEND_BATCH_INFO_END 46 - AIRCRAFT_SELECTED
  4 | size - soucet delek tel N zpráv
  ? | telo zpravy 1
  ? | telo zpravy 2
  ? | ...
  ? | telo zpravy N

- #### format tela zpravy RESET (msg_type = 1)

  (telo zpravy je prazdne)

  Reset visia do pocatecniho stavu.

- #### format tela zpravy CREATE (msg_type = 2)

  delka [B] | obsah
  2 | ID - identifikator objektu
  ? | object_name - unikatni jmeno objektu (retezec ukonceny znakem '\0')
  ? | type_name - typ objektu, napo. CAR, PORT atd. (retezec ukonceny znakem '\0')
  ? | texture_name - identifikator volitelne textury objektu, napr. TEXTURE_CAR_KABINA_GREEN (retezec ukonceny znakem '\0')
  2 | radius - primarni radius objektu zobrazovany ve visiu jako 3D kruznice (napr. dosah radioveho signalu atp.)

  Vytvori se novy objekt se zadanymi parametry.
  Pokud prijde zadost o vytvoreni objektu s ID, ktere je jiz prirazeno jinemu existujicimu objektu, stavajici objekt se nejprve automaticky zrusi (~ KILL).
  Zadany primarni radius objektu lze dynamicky zmenit zpravou SETRADIUS (msg_type = 14). Sekundarni radius objektu je implicitne nastaveny na nulu a lze ho dynamicky zmenit zpravou SETRADIUS2 (msg_type = 15).

- #### format tela zpravy KILL (msg_type = 3)

  delka [B] | obsah
  2 | ID - identifikator objektu

  Zrusi objekt.

- #### format tela zpravy SETPOS_2D (msg_type = 4)

  delka [B] | obsah
  2 | ID - identifikator objektu
  2 | x - x-ova souradnice (0 az 65535)
  2 | y - y-ova souradnice (0 az 65535)
  1 | φ - uhel natoceni objektu kolem normaly terenu (0 az 255, kde 0 ~ 0°, 256 ~ 360°)

  Umisti objekt na povrch terenu ve scene v bode (x, y). Treti prostorova souradnice a naklon objektu se dopocitaji automaticky podle vysky a sklonu terenu v danem bode.

- #### format tela zpravy SETPOS_3D (msg_type = 5)

  delka [B] | obsah
  2 | ID - identifikator objektu
  2 | x - vyznam shodny se SETPOS_2D
  2 | y - vyznam shodny se SETPOS_2D
  2 | z - z-ova souradnice (0 az 65535, vyska)
  1 | φ - uhel natoceni objektu kolem osy z (0 az 255, kde 0 ~ 0°, 256 ~ 360°)
  1 | ψ - uhel natoceni objektu kolem osy x (0 az 255, kde 0 ~ 0°, 256 ~ 360°)
  1 | ξ - uhel natoceni objektu kolem osy y (0 az 255, kde 0 ~ 0°, 256 ~ 360°)

  Absolutni umisteni a natoceni objektu ve scene.

- #### format tela zpravy SETINFO (msg_type = 6)

  delka [B] | obsah
  2 | ID - identifikator objektu
  ? | string - textovy retezec ukonceny znakem '\0'

  Nastaveni obsahu informacniho okna zobrazovaneho nad objektem.
  Retezec string obsahujici pouze znak '\0' zpusobi skryti informacniho okna.
  Format textoveho retezce lze ovladat nasledujicimi prepinaci:

  `<n>` | prejde na novy radek (CRLF)
  `<r>` | normalni pismo (regular)
  `<b>` | tucne pismo (bold)
  `<cXXXXXX>` | barva pisma definovana trojici dvouznakovych hexadecimalnich kodu pro slozky RGB

  Implicitni nastaveni je font regular a bila barva textu.
  Priklad:

  `How<n><cFF0000><b>are<r><c00FF00> you<cFFFFFF>?` |  | How are you?

- #### format tela zpravy CONNECTION (msg_type = 7)

  delka [B] | obsah
  1 | type - typ spojeni, vizualne odliseno barvou (viz VisioConstants)
  2 | ID_from - identifikator zdrojoveho objektu
  2 | ID_to - identifikator ciloveho objektu

  Prechodne zobrazi spojeni mezi dvema objekty formou 3D sipek, resp. 2D car (v zavislosti na visiu).
  Dobu zobrazeni spojeni lze nastavit v konfiguracnim souboru visia.

- #### format tela zpravy SPECIAL (msg_type = 8)

  delka [B] | obsah
  2 | ID - identifikator objektu
  4 | size - delka datoveho bloku
  size | datovy blok

  Prikaz SPECIAL obsahuje blok dat (vzdy prave jeden), jehoz interpretace zavisi na typu objektu, ktery zpravu prijal.
  format datoveho bloku:

  delka [B] | obsah
  1 | cmd - typ prikazu
  ? | data - data zavisla na konkretnim typu prikazu

  format dat pro jednotlive typy prikazu:

  interpretace pro objekt typu CAR
  cmd - typ prikazu | data
  delka [B] | obsah
  1 - WHEEL_SPIN | 1 | φ - uhel natoceni kol kolem vodorovne osy (0 az 255, kde 0 ~ 0°, 256 ~ 360°)
  2 - WHEEL_DIR | 1 | ψ - uhel natoceni kol kolem svisle osy (-127 az 127, kde -127 ~ -90°, 0 ~ 0°, 127 ~ 90°)
  3 - LOAD | 1 | load - mnozstvi prevazeneho nakladu (0 az 255, kde 0 ~ prazdne, 255 ~ plne)
  4 - DOCK | 2 | ID - identifikator Portu/Village, do ktereho se auto okamzite zadokuje

  Po zadokovani do Portu/Village auto zpatky oddokujeme prikazem SETPOS_2D nebo SETPOS_3D.

- #### format tela zpravy VISIBILITY (msg_type = 9)

  delka [B] | obsah
  2 | ID1 - identifikator prvniho objektu ve dvojici
  2 | ID2 - identifikator druheho objektu ve dvojici

  Formou 2D usecek zobrazi viditelnost mezi vsemi dvojicemi objektu popsanymi skupinou zprav typu msg_type = 9 v jednom paketu.
  (Neuvedene dvojice se implicitne berou jako vzajemne viditelne.)
  Aktualni viditelnost je platna do prichodu nove zpravy typu msg_type = 9.

- #### format tela zpravy AGENT_INFO (msg_type = 10)

  delka [B] | obsah
  ? | agent_name - jmeno agenta unikatni v celem systemu (retezec ukonceny znakem '\0')
  1 | agent_type - typ agenta, vizualne odliseny barvou (viz VisioConstants)
  2 | parent_ID - identifikator objektu, na kterem se tento agent aktualne nachazi
  2 | num_params - pocet datovych dvojic, ktere nasleduji
  ? | params - dvojice:
  | param_name - jmeno parametru (retezec ukonceny znakem '\0')
  | param_value - hodnota parametru (retezec ukonceny znakem '\0')

  Informace o existenci agenta a jeho prislusnosti k nejakemu jiz vytvorenemu objektu.
  Jednoznacnym identifikatorem je agent_name.
  Aktualni prislusnost a parametry jsou platne do prichodu nove zpravy s tymz identifikatorem.
  Prichod prvni zpravy s danym agent_name odpovida vytvoreni tohoto agenta.
  Agenta lze zrusit dvema moznymi zpusoby:
  1. zrusenim objektu, na kterem se agent nachazel zaslaním zpravy typu msg_type = 3 (KILL)
  2. zaslanim zpravy typu msg_type = 11 (REMOVE_AGENT)

- #### format tela zpravy REMOVE_AGENT (msg_type = 11)

  delka [B] | obsah
  ? | agent_name - jmeno agenta unikatni v celem systemu (retezec ukonceny znakem '\0')

  Explicitni zruseni agenta se jmenem agent_name.

- #### format tela zpravy SETINFO_FRAME (msg_type = 12)

  delka [B] | obsah
  2 | ID - identifikator objektu
  1 | color - index barvy ramecku informacniho okna

  Nastaveni barvy ramecku informacniho okna zobrazovaneho nad objektem.
  Barva je urcena indexem do tabulky barev.

- #### format tela zpravy SHOW_ACTION (msg_type = 13)

  delka [B] | obsah
  ? | agent_name - jmeno agenta (retezec ukonceny znakem '\0')
  2 | parent_ID - identifikator objektu, na kterem se tento agent aktualne nachazi
  1 | type - typ akce: 1 - LOAD 2 - UNLOAD 11 - CFP_GOODS 12 - CFP_TRANSPORT 21 - TRANSPORT_START 41 - GOODS_STOLEN 42 - VEHICLE_DESTROYED 45 - GOODS_FRAUDED 51 - STANDIN_CREATED 52 - STANDIN_KILLED 53 - STANDIN_MIG_OUT 54 - STANDIN_MIG_IN 55 - STANDIN_CLONED 61 - PLANE_CRASHED 62 - COLLISION_DETECTED 71 - POLL_START 72 - POLL_YES 73 - POLL_NO 74 - POLL_EXPELLED 81 - STOP 82 - CONVOY

  Prechodne zobrazi ikonku akce daneho typu provedenou agentem zijicim na zadanem objektu.

- #### format tela zpravy SETRADIUS (msg_type = 14)

  delka [B] | obsah
  2 | ID - identifikator objektu
  2 | radius - primarni radius objektu zobrazovany ve visiu jako 3D kruznice

  Zmeni primarni radius daneho objektu.

- #### format tela zpravy SETRADIUS2 (msg_type = 15)

  delka [B] | obsah
  2 | ID - identifikator objektu
  2 | radius - sekundarni radius objektu zobrazovany ve visiu jako 3D kruznice

  Zmeni sekundarni radius daneho objektu.

- #### format tela zpravy SETCHART (msg_type = 16)

  delka [B] | obsah
  2 | ID - identifikator objektu
  ? | chart_name - jmeno grafu (textovy retezec ukonceny znakem '\0')
  1 | bar_count - pocet sloupcu grafu, resp. datovych bloku, ktere nasleduji
  ? | bar_data - datove bloky popisujici jednotlive sloupce grafu
  delka [B] | obsah
  1 | bar_type - typ sloupce = 1
  ? | bar_label - popisek sloupce (textovy retezec ukonceny znakem '\0')
  1 | bar_color - barva sloupce (viz VisioConstants)
  1 | bar_value - hodnota (relativni vyska) sloupce (0 az 255, kde 0 ~ 0%, 255 ~ 100%)
  delka [B] | obsah
  1 | bar_type - typ sloupce = 2
  ? | bar_label - popisek sloupce (textovy retezec ukonceny znakem '\0')
  1 | element_count - pocet elementu sloupce
  ? | element_data - datove bloky popisujici jednotlive elementy sloupce
  ? | element_label - popisek elementu sloupce (textovy retezec ukonceny znakem '\0')
  1 | element_color - barva elementu (viz VisioConstants)

  Vytvori grafove okno zadaneho jmena (resp. zmeni jeho obsah, pokud okno tohoto jmena jiz existuje) nad zadanym objektem. Okno zobrazuje sloupcovy graf s bar_count sloupci. Existuji dva typy sloupcu: jednobarevny spojity a slozeny z kosticek, z nichz kazda ma definovanou vlastni barvu a nazev.

- #### format tela zpravy REMOVECHART (msg_type = 17)

  delka [B] | obsah
  2 | ID - identifikator objektu
  ? | chart_name - jmeno grafu (textovy retezec ukonceny znakem '\0')

  Zrusi grafove okno zadaneho jmena zobrazovane nad zadanym objektem.

- #### format tela zpravy SETPOS_3D_EXT (msg_type = 18)

  delka [B] | obsah
  2 | ID - identifikator objektu
  4 | x - x-ova GPS souradnice * 106 (signed)
  4 | y - y-ova GPS souradnice * 106 (signed)
  4 | z - z-ova GPS souradnice * 106 (signed) ~ vyska
  2 | φ - uhel natoceni objektu kolem osy z (0 az 65535, kde 0 ~ 0°, 65536 ~ 360°)
  2 | ψ - uhel natoceni objektu kolem osy x (0 az 65535, kde 0 ~ 0°, 65536 ~ 360°)
  2 | ξ - uhel natoceni objektu kolem osy y (0 az 65535, kde 0 ~ 0°, 65536 ~ 360°)

  Absolutni umisteni a natoceni objektu ve scene.
  Oproti zprave SETPOS_3D ma zprava SETPOS_3D_EXT jemnejsi granularitu vsech uhlu natoceni (2 byty).

- #### format tela zpravy SEND_PLAN_START (msg_type = 19)

  delka [B] | obsah
  2 | ID - identifikator objektu (letadla)

  Tuto zpravu posila visio simulacnimu systemu(!).
  Po obdrzeni teto zpravy simulacni system zacne posilat visiu aktualizace letoveho planu (PLAN_UPDATE) zadaneho letadla, dokud neobdrzi od visia zpravu SEND_PLAN_END (s odpovidajicim ID).

- #### format tela zpravy SEND_PLAN_END (msg_type = 20)

  delka [B] | obsah
  2 | ID - identifikator objektu (letadla)

  Tuto zpravu posila visio simulacnimu systemu(!).
  Po obdrzeni teto zpravy simulacni system prestane posilat visiu aktualizace letoveho planu daneho letadla.

- #### format tela zpravy PLAN_UPDATE (msg_type = 21)

  delka [B] | obsah
  2 | ID - identifikator objektu (letadla)
  1 | virtual - virtualni plan? (0 ~ false, jinak ~ true)
  1 | delete_type - typ operace DELETE: 0 - no action 1 - smaz vsechny segmenty od zacatku letoveho planu az po segment delete_segment_ID (vcetne) 2 - smaz vsechny segmenty od segmentu delete_segment_ID (vcetne) az do konce letoveho planu 3 - smaz cely letovy plan
  2 | delete_segment_ID - identifikator segmentu pro operaci DELETE
  2 | add_segment_count - pocet segmentu pridavanych do letoveho planu
  4 | block_width - jednotna sirka bloku pridavanych segmentu (GPS * 106)
  4 | block_height - jednotka vyska bloku pridavanych segmentu (GPS * 106)
  ? | add_segment_data - datove bloky popisujici jednotlive segmenty pridavane do letoveho planu
  delka [B] | obsah
  2 | segment_ID - identifikator segmentu
  1 | segment_type - typ segmentu = 1 (rovny usek)
  4 | x1 - x-ová souradnice pocatecniho bodu useku (GPS * 106)
  4 | y1 - y-ová souradnice pocatecniho bodu useku (GPS * 106)
  4 | z1 - z-ová souradnice pocatecniho bodu useku (GPS * 106)
  4 | x2 - x-ová souradnice koncoveho bodu useku (GPS * 106)
  4 | y2 - y-ová souradnice koncoveho bodu useku (GPS * 106)
  4 | z2 - z-ová souradnice koncoveho bodu useku (GPS * 106)
  delka [B] | obsah
  2 | segment_ID - identifikator segmentu
  1 | segment_type - typ segmentu = 2 (oblouk)
  4 | cx - x-ová souradnice stredu oblouku (GPS * 106)
  4 | cy - y-ová souradnice stredu oblouku (GPS * 106)
  4 | cz - z-ová souradnice stredu oblouku (GPS * 106)
  4 | ux - x-ová slozka koncoveho bodu vektoru u (GPS * 106)
  4 | uy - y-ová slozka koncoveho bodu vektoru u (GPS * 106)
  4 | uz - z-ová slozka koncoveho bodu vektoru u (GPS * 106)
  4 | vx - x-ová slozka koncoveho bodu vektoru v (GPS * 106)
  4 | vy - y-ová slozka koncoveho bodu vektoru v (GPS * 106)
  4 | vz - z-ová slozka koncoveho bodu vektoru v (GPS * 106)
  4 | angle - uhel oblouku (-2147483648 az +2147483647, kde 0 ~ -360°, 65536 ~ +360°)
  4 | elevation - prevyseni (stoupani) oblouku (GPS * 106)

  Aktualizace letoveho planu pro zadane letadlo.
  Pokud priznak virtual==true, jedna se o virtualni plan, ktery neni prirazen zadnemu fyzickemu letadlu, a slouzi pro ucely celkoveho prehledu.
  Nejprve se aplikuje operace DELETE, pote operace ADD (v tomto poradi).
  Kazda z techto operaci muze byt prazdna (delete_type=0, resp. add_segment_count=0) a v takovem pripade se neprovede.
  Interpolace oblouku se provadi podle vztahu:
  P(a) = c + (u-c)*cos(a) + (v-c)*sin(a) + n0*(elevation*(a / angle)),
  kde a Î <0, angle>, n0 = (u-c)x(v-c) / |(u-c)x(v-c)|

- #### format tela zpravy SET_SIMULATION_SPEED (msg_type = 22)

  delka [B] | obsah
  2 | speed - rychlost simulace (0 az 65535, kde 0 ~ 0x (pauza), 4096 ~ 1x (normal), 65536 ~ 16x)

  Nastaveni rychlosti simulace.
  Tuto zpravu lze posilat obousmerne, tj. od simulacniho systemu do visia i naopak.

- #### format tela zpravy SCRSHOT_DATA (msg_type = 23)

  delka [B] | obsah
  2 | ID - identifikator screenshotu
  2 | width - sirka screenshotu v pixelech
  2 | height - vyska screenshotu v pixelech
  width*height*3 | pixels - datove bloky jednotlivych pixelu (pocinaje levym hornim rohem)
  delka [B] | obsah
  1 | red - cervena slozka pixelu (0 az 255)
  1 | green - zelena slozka pixelu (0 az 255)
  1 | blue - modra slozka pixelu (0 az 255)

  Tuto zpravu posila visio simulacnimu systemu(!).
  Screenshot z visia.

- #### format tela zpravy SCRSHOT3D_FREE (msg_type = 24)

  delka [B] | obsah
  2 | ID - identifikator screenshotu
  2 | width - sirka screenshotu v pixelech
  2 | height - vyska screenshotu v pixelech
  4 | camera_x - x-ová souradnice pozice kamery (GPS * 106)
  4 | camera_y - y-ová souradnice pozice kamery (GPS * 106)
  4 | camera_z - z-ová souradnice pozice kamery (GPS * 106)
  4 | dir_x - x-ová slozka vektoru smeru pohledu kamery (GPS * 106)
  4 | dir_y - y-ová slozka vektoru smeru pohledu kamery (GPS * 106)
  4 | dir_z - z-ová slozka vektoru smeru pohledu kamery (GPS * 106)
  1 | option_count - pocet parametru vizualizace, ktere nasleduji
  option_count*2 | options - datove bloky parametru vizualizace
  delka [B] | obsah
  1 | option_ID - identifikator parametru: 1 - DISPLAY_INFO_AIRCRAFT (0 ~ no, 1 ~ focused only, 2 ~ all), default = 2 2 - DISPLAY_INFO_FILTERED (0 ~ false, 1 ~ true), default = 1 3 - DISPLAY_ZONES (0 az 6), default = 6 4 - DISPLAY_ZONES_RADIUS (0 ~ false, 1 ~ true), default = 1 5 - DISPLAY_FLIGHT_HISTORY (0 ~ false, 1 ~ true), default = 1 6 - DISPLAY_FLIGHT_PLAN (0 ~ no, 1 ~ all, 2 ~ focused only, 3 ~ non-focused only), default = 1 7 - DISPLAY_WAYPOINTS (0 ~ false, 1 ~ true), default = 0 8 - DISPLAY_LINKED_WAY (65535 ~ none, otherwise ~ ID), default = 65535
  2 | option_value - hodnota parametru (viz vyse)

  Zadost o sejmuti screenshotu ve 3D pohledu s "volnou" kamerou (nesleduje zadny objekt).

- #### format tela zpravy SCRSHOT3D_FOCUSED (msg_type = 25)

  delka [B] | obsah
  2 | ID - identifikator screenshotu
  2 | width - sirka screenshotu v pixelech
  2 | height - vyska screenshotu v pixelech
  2 | object_ID - identifikator sledovaneho objektu
  2 | camera_angle1 - uhel rotace kamery v horizontalni rovine (0 az 65535, kde 0 ~ 0°, 65536 ~ 360°)
  2 | camera_angle2 - uhel rotace kamery ve vertikalni rovine (0 az 65535, kde 0 ~ 0°, 65536 ~ 360°)
  4 | camera_elevation - relativni vyska bodu zacileneho kamerou vuci stredu sledovaneho objektu (GPS * 106)
  4 | camera_distance - vzdalenost kamery od stredu sledovaneho objektu (GPS * 106)
  1 | option_count - pocet parametru vizualizace, ktere nasleduji
  option_count*2 | options - datove bloky parametru vizualizace
  delka [B] | obsah
  1 | option_ID - identifikator parametru (viz zprava SCRSHOT3D_FREE)
  2 | option_value - hodnota parametru (viz zprava SCRSHOT3D_FREE)

  Zadost o sejmuti screenshotu ve 3D pohledu se zacilenou kamerou (sleduje zadany objekt).

- #### format tela zpravy SCRSHOT2D_FREE (msg_type = 26)

  delka [B] | obsah
  2 | ID - identifikator screenshotu
  2 | width - sirka screenshotu v pixelech
  2 | height - vyska screenshotu v pixelech
  4 | camera_x - x-ová souradnice pozice kamery (GPS * 106)
  4 | camera_y - y-ová souradnice pozice kamery (GPS * 106)
  2 | zoom - zoom kamery (0 az 65535, kde 0 ~ 1x, 65535 ~ 16x)
  1 | option_count - pocet parametru vizualizace, ktere nasleduji
  option_count*2 | options - datove bloky parametru vizualizace
  delka [B] | obsah
  1 | option_ID - identifikator parametru (viz zprava SCRSHOT3D_FREE)
  2 | option_value - hodnota parametru (viz zprava SCRSHOT3D_FREE)

  Zadost o sejmuti screenshotu ve 2D pohledu s "volnou" kamerou (nesleduje zadny objekt).

- #### format tela zpravy SCRSHOT2D_FOCUSED (msg_type = 27)

  delka [B] | obsah
  2 | ID - identifikator screenshotu
  2 | width - sirka screenshotu v pixelech
  2 | height - vyska screenshotu v pixelech
  2 | object_ID - identifikator sledovaneho objektu
  2 | zoom - zoom kamery (0 az 65535, kde 0 ~ 1x, 65535 ~ 16x)
  1 | option_count - pocet parametru vizualizace, ktere nasleduji
  option_count*2 | options - datove bloky parametru vizualizace
  delka [B] | obsah
  1 | option_ID - identifikator parametru (viz zprava SCRSHOT3D_FREE)
  2 | option_value - hodnota parametru (viz zprava SCRSHOT3D_FREE)

  Zadost o sejmuti screenshotu ve 2D pohledu se zacilenou kamerou (sleduje zadany objekt).

- #### format tela zpravy SET_WAYPOINTS (msg_type = 28)

  delka [B] | obsah
  2 | ID - identifikator objektu (letadla)
  1 | virtual - virtualni waypointy? (0 ~ false, jinak ~ true)
  2 | count - pocet waypointu, ktere nasleduji
  ? | waypoints - datove bloky waypointu
  delka [B] | obsah
  4 | x - x-ová souradnice waypointu (GPS * 106)
  4 | y - y-ová souradnice waypointu (GPS * 106)
  4 | z - z-ová souradnice waypointu (GPS * 106)
  ? | time_info - casovy udaj (retezec ukonceny znakem '\0')

  Priradi waypointy (~ hruby plan trasy) danemu objektu (letadlu).
  Pokud priznak virtual==true, jedna se o virtualni waypointy, ktere nejsou prirazeny zadnemu fyzickemu letadlu, a slouzi pro ucely celkoveho prehledu.

- #### format tela zpravy AIRCRAFT_CRASHED (msg_type = 29)

  delka [B] | obsah
  2 | ID - identifikator objektu

  Oznaci dany objekt (letadlo) jako CRASHED.

- #### format tela zpravy DISPLAY_TIME (msg_type = 30)

  delka [B] | obsah
  4 | curr_time - aktualni cas (long)

  Zobrazi zadany aktualni (globalni) cas.

- #### format tela zpravy RELATION_INFO_UPDATE (msg_type = 31)

  delka [B] | obsah
  2 | parent_container_ID - identifikator rodicovskeho kontejneru
  ? | parent_agent_name - jmeno rodicovskeho agenta (retezec ukonceny znakem '\0')
  1 | column_count - pocet sloupcu informacniho okna
  ? | column_title(column #1) - nazev (titulek) 1. sloupce
  2 | agent_count(column #1) - pocet dat. bloku agent_info pro 1. sloupec
  ? | agent_list(column #1) - seznam datovych bloku agent_info pro 1. sloupec
  delka [B] | obsah
  ? | agent_name - jmeno agenta - nezobrazuje se (retezec ukonceny znakem '\0')
  2 | container_ID - identifikator kontejneru, na kterem se agent nachazi
  ? | info_string - informacni retezec o agentovi (retezec ukonceny znakem '\0')
  1 | info_color - kod barvy, kterou se ma informacni retezec zobrazit (0 az 127): 0 ~ cervena ... 64 ~ zluta ... 127 ~ zelena
  ? | column_title(column #2) - nazev (titulek) 2. sloupce
  2 | agent_count(column #2) - pocet dat. bloku agent_info pro 2. sloupec
  ? | agent_list(column #2) - seznam datovych bloku agent_info pro 2. sloupec
  ? | ...
  ? | column_title(column #N) - nazev (titulek) N. sloupce
  2 | agent_count(column #N) - pocet dat. bloku agent_info pro N. sloupec
  ? | agent_list(column #N) - seznam datovych bloku agent_info pro N. sloupec

  Informace o socialnich vztazich daneho agenta vzhledem k ostatnim agentum v systemu.
  O kazdem agentovi se zobrazi zadany info_string barvou urcenou kodem info_color.

- #### format tela zpravy SEND_RELINFO_START (msg_type = 32)

  delka [B] | obsah
  ? | agent_name - jmeno agenta (retezec ukonceny znakem '\0')
  2 | container_ID - identifikator kontejneru, na kterem se agent nachazi

  Tuto zpravu posila visio simulacnimu systemu(!).
  Po obdrzeni teto zpravy simulacni system zacne posilat visiu aktualizace informaci o socialnich vztazich (RELATION_INFO_UPDATE) zadaneho agenta, dokud neobdrzi od visia zpravu SEND_RELINFO_END.

- #### format tela zpravy SEND_RELINFO_END (msg_type = 33)

  delka [B] | obsah
  ? | agent_name - jmeno agenta (retezec ukonceny znakem '\0')
  2 | container_ID - identifikator kontejneru, na kterem se agent nachazi

  Tuto zpravu posila visio simulacnimu systemu(!).
  Po obdrzeni teto zpravy simulacni system prestane posilat visiu aktualizace informaci o socialnich vztazich (RELATION_INFO_UPDATE) daneho agenta.

- #### format tela zpravy SET_ZONE_DIMENSIONS (msg_type = 34)

  delka [B] | obsah
  2 | ID - identifikator objektu (letadla)
  1 | zone_index - index zony (1 az 4, nebo 0)
  4 | radius - radius valcove zony (GPS * 106)
  4 | height - vyska valcove zony (GPS * 106)

  Pro zadane letadlo nastavi rozmery jeho valcove zony (zone_index = 1 az 4, kde index 1 odpovida nejvnitrnejsi zone).
  Pokud je zone_index = 0, zadane rozmery se pouziji pro krajni vnejsi zonu a ostatni vnitrni zony se dopocitaji podle ni.

- #### format tela zpravy SET_RADAR_RADIUS (msg_type = 35)

  delka [B] | obsah
  2 | ID - identifikator objektu (letadla)
  4 | radius - radius kulove zony (GPS * 106)

  Pro zadane letadlo nastavi rozmery jeho vnejsi kulove zony (~ dosah radaru).

- #### format tela zpravy ADD_FORBIDDEN_ZONE (msg_type = 36)

  delka [B] | obsah
  4 | cx - x-ova souradnice stredu kulove zony (GPS * 106)
  4 | cy - y-ova souradnice stredu kulove zony (GPS * 106)
  4 | cz - z-ova souradnice stredu kulove zony (GPS * 106)
  4 | radius - radius kulove zony (GPS * 106)

  Prida do sceny kulovou zakazanou zonu zadanych parametru.

- #### format tela zpravy SET_BATCH_INFO (msg_type = 37)

  delka [B] | obsah
  ? |
  delka [B] | obsah
  1 | type = 1
  2 | ID - identifikator objektu
  delka [B] | obsah
  1 | type = 2
  2 | x - x-ova souradnice (0 az 65535)
  2 | y - y-ova souradnice (0 az 65535)
  ? | string - textovy retezec ukonceny znakem '\0'

  Nad zadanym objektem (type=1) resp. nad zadanym mistem (type=2) zobrazi textove okno s informacemi o batchi.
  Retezec string obsahujici pouze znak '\0' zpusobi skryti informacniho okna.

- #### format tela zpravy SEND_REQUEST_IDS_START (msg_type = 38)

  (telo zpravy je prazdne)

  Tuto zpravu posila visio simulacnimu systemu(!).
  Po obdrzeni teto zpravy simulacni system zacne prubezne posilat visiu aktualni seznam zakazek (SHOW_REQUEST_IDS), dokud neobdrzi od visia zpravu SEND_REQUEST_IDS_END.

- #### format tela zpravy SEND_REQUEST_IDS_STOP (msg_type = 39)

  (telo zpravy je prazdne)

  Tuto zpravu posila visio simulacnimu systemu(!).
  Po obdrzeni teto zpravy simulacni system prestane prubezne posilat visiu aktualni seznam zakazek (SHOW_REQUEST_IDS).

- #### format tela zpravy SHOW_REQUEST_IDS (msg_type = 40)

  delka [B] | obsah
  2 | container_ID - identifikator objektu, na kterem se nachazi HumAgent
  1 | n - pocet polozek v seznamu identifikatoru zakazek
  ? | req_ID_1 - identifikator zakazky 1 (textovy retezec ukonceny znakem) '\0'
  ? | req_ID_2 - identifikator zakazky 2 (textovy retezec ukonceny znakem) '\0'
  ? | ...
  ? | req_ID_n - identifikator zakazky n (textovy retezec ukonceny znakem) '\0'

  Zobrazi okno se seznamem identifikatoru zakazek.

- #### format tela zpravy SEND_BATCH_INFO_START (msg_type = 41)

  delka [B] | obsah
  ? | req_ID - identifikator zakazky (retezec ukonceny znakem '\0')

  Tuto zpravu posila visio simulacnimu systemu(!).
  Po obdrzeni teto zpravy simulacni system zacne posilat visiu informace o batchich (SET_BATCH_INFO) pro zadanou zakazku, dokud neobdrzi od visia zpravu SEND_BATCH_INFO_END.

- #### format tela zpravy SEND_BATCH_INFO_END (msg_type = 42)

  delka [B] | obsah
  ? | req_ID - identifikator zakazky (retezec ukonceny znakem '\0')

  Tuto zpravu posila visio simulacnimu systemu(!).
  Po obdrzeni teto zpravy simulacni system prestane posilat visiu informace o batchich (SET_BATCH_INFO) pro danou zakazku.

- #### format tela zpravy SET_VISIBILITY (msg_type = 43)

  delka [B] | obsah
  2 | ID - identifikator objektu
  1 | visible - priznak viditelnosti objektu: 0 ~ skryty 1 ~ viditelny

  Nastavi viditelnost objektu (show / hide).

- #### format tela zpravy DEFINE_ZONE_MESH (msg_type = 44)

  delka [B] | obsah
  2 | zone_ID - identifikator zony
  4 | scale_x - x-ova velikost vnejsiho kvadru, GPS * 106 (signed)
  4 | scale_y - y-ova velikost vnejsiho kvadru, GPS * 106 (signed)
  4 | scale_z - z-ova velikost vnejsiho kvadru, GPS * 106 (signed) ~ vyska
  4 | ref_x - x-ova souradnice referencniho bodu, GPS * 106 (signed)
  4 | ref_y - y-ova souradnice referencniho bodu, GPS * 106 (signed)
  4 | ref_z - z-ova souradnice referencniho bodu, GPS * 106 (signed)
  2 | φ - uhel natoceni telesa kolem osy z (0 az 65535, kde 0 ~ 0°, 65536 ~ 360°)
  2 | ψ - uhel natoceni telesa kolem osy x (0 az 65535, kde 0 ~ 0°, 65536 ~ 360°)
  4 | size - pocet nasledujich bytu definujicich oktantovy strom
  size | octree data - data definujici oktantovy strom (depth-first): 0 ~ empty 1 ~ full 2 ~ mixed (additional data follow)

  Nadefinuje geometrii zony pomoci oktantoveho stromu.

- #### format tela zpravy ASSIGN_ZONE_MESH (msg_type = 45)

  delka [B] | obsah
  2 | object_ID - identifikator objektu (letadla)
  2 | zone_ID - identifikator zony
  4 | x - x-ova souradnice referencniho bodu zony, GPS * 106 (signed)
  4 | y - y-ova souradnice referencniho bodu zony, GPS * 106 (signed)
  4 | z - z-ova souradnice referencniho bodu zony, GPS * 106 (signed) ~ vyska
  2 | φ - uhel natoceni objektu kolem osy z (0 az 65535, kde 0 ~ 0°, 65536 ~ 360°)
  2 | ψ - uhel natoceni objektu kolem osy x (0 az 65535, kde 0 ~ 0°, 65536 ~ 360°)
  2 | ξ - uhel natoceni objektu kolem osy y (0 az 65535, kde 0 ~ 0°, 65536 ~ 360°)
  4 | scale - relativni zvetseni/zmenseni, double * 106

  Priradi drive nadefinovanou zonu (viz DEFINE_ZONE_MESH) objektu (letadlu), nadefinuje jeji aktualni pozici, natoceni a relativni zvetseni/zmenseni.
  Pokud zone_ID == -1, prirazeni zony letadlu se zrusi.

- #### format tela zpravy AIRCRAFT_SELECTED (msg_type = 46)

  delka [B] | obsah
  2 | ID - identifikator letadla

  Tuto zpravu posila visio simulacnimu systemu(!).
  Visio informuje simulacni system, ze uzivatel kliknul na letadlo.
  Pokud ID == -1, uzivatel zrusil predchozi selekci letadla.

- #### format tela zpravy SEND_BATCH_INFO_START (msg_type = 41)

  delka [B] | obsah
  ? | req_ID - identifikator zakazky (retezec ukonceny znakem '\0')

  Tuto zpravu posila visio simulacnimu systemu(!).
  Po obdrzeni teto zpravy simulacni system zacne posilat visiu informace o batchich (SET_BATCH_INFO) pro zadanou zakazku, dokud neobdrzi od visia zpravu SEND_BATCH_INFO_END.

- #### format tela zpravy SHOW_LINE (msg_type = 101)

  delka [B] | obsah
  2 | ID - identifikator usecky
  4 | x1 - x-ová souradnice pocatecniho bodu usecky (GPS * 106)
  4 | y1 - y-ová souradnice pocatecniho bodu usecky (GPS * 106)
  4 | z1 - z-ová souradnice pocatecniho bodu usecky (GPS * 106)
  4 | x2 - x-ová souradnice koncoveho bodu usecky (GPS * 106)
  4 | y2 - y-ová souradnice koncoveho bodu usecky (GPS * 106)
  4 | z2 - z-ová souradnice koncoveho bodu usecky (GPS * 106)
  1 | r - cervena slozka barvy (0 az 255)
  1 | g - zelena slozka barvy (0 az 255)
  1 | b - modra slozka barvy (0 az 255)

  Vykresli usecku ve 3D prostoru zadanou barvou.
  Pokud usecka zadaneho ID jiz existuje, aktualizuji se jeji parametry.

- #### format tela zpravy HIDE_LINE (msg_type = 102)

  delka [B] | obsah
  2 | ID - identifikator usecky

  Zrusi usecku drive vytvorenou pomoci zpravy SHOW_LINE.