aboutsummaryrefslogtreecommitdiff
path: root/src/network/serveropcodes.cpp
blob: 6ee4ff25685e6583001840fd94daa8c327a881d2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
/*
Minetest
Copyright (C) 2013 celeron55, Perttu Ahola <celeron55@gmail.com>
Copyright (C) 2015 nerzhul, Loic Blot <loic.blot@unix-experience.fr>

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation; either version 2.1 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/

#include "serveropcodes.h"

const static ToServerCommandHandler null_command_handler = { "TOSERVER_NULL", TOSERVER_STATE_ALL, &Server::handleCommand_Null };

const ToServerCommandHandler toServerCommandTable[TOSERVER_NUM_MSG_TYPES] =
{
	null_command_handler, // 0x00 (never use this)
	null_command_handler, // 0x01
	{ "TOSERVER_INIT",                     TOSERVER_STATE_NOT_CONNECTED, &Server::handleCommand_Init }, // 0x02
	null_command_handler, // 0x03
	null_command_handler, // 0x04
	null_command_handler, // 0x05
	null_command_handler, // 0x06
	null_command_handler, // 0x07
	null_command_handler, // 0x08
	null_command_handler, // 0x09
	null_command_handler, // 0x0a
	null_command_handler, // 0x0b
	null_command_handler, // 0x0c
	null_command_handler, // 0x0d
	null_command_handler, // 0x0e
	null_command_handler, // 0x0f
	null_command_handler, // 0x10
	{ "TOSERVER_INIT2",                    TOSERVER_STATE_NOT_CONNECTED, &Server::handleCommand_Init2 }, // 0x11
	null_command_handler, // 0x12
	null_command_handler, // 0x13
	null_command_handler, // 0x14
	null_command_handler, // 0x15
	null_command_handler, // 0x16
	{ "TOSERVER_MODCHANNEL_JOIN",          TOSERVER_STATE_INGAME, &Server::handleCommand_ModChannelJoin }, // 0x17
	{ "TOSERVER_MODCHANNEL_LEAVE",         TOSERVER_STATE_INGAME, &Server::handleCommand_ModChannelLeave }, // 0x18
	{ "TOSERVER_MODCHANNEL_MSG",           TOSERVER_STATE_INGAME, &Server::handleCommand_ModChannelMsg }, // 0x19
	null_command_handler, // 0x1a
	null_command_handler, // 0x1b
	null_command_handler, // 0x1c
	null_command_handler, // 0x1d
	null_command_handler, // 0x1e
	null_command_handler, // 0x1f
	null_command_handler, // 0x20
	null_command_handler, // 0x21
	null_command_handler, // 0x22
	{ "TOSERVER_PLAYERPOS",                TOSERVER_STATE_INGAME, &Server::handleCommand_PlayerPos }, // 0x23
	{ "TOSERVER_GOTBLOCKS",                TOSERVER_STATE_STARTUP, &Server::handleCommand_GotBlocks }, // 0x24
	{ "TOSERVER_DELETEDBLOCKS",            TOSERVER_STATE_INGAME, &Server::handleCommand_DeletedBlocks }, // 0x25
	null_command_handler, // 0x26
	null_command_handler, // 0x27
	null_command_handler, // 0x28
	null_command_handler, // 0x29
	null_command_handler, // 0x2a
	null_command_handler, // 0x2b
	null_command_handler, // 0x2c
	null_command_handler, // 0x2d
	null_command_handler, // 0x2e
	null_command_handler, // 0x2f
	null_command_handler, // 0x30
	{ "TOSERVER_INVENTORY_ACTION",         TOSERVER_STATE_INGAME, &Server::handleCommand_InventoryAction }, // 0x31
	{ "TOSERVER_CHAT_MESSAGE",             TOSERVER_STATE_INGAME, &Server::handleCommand_ChatMessage }, // 0x32
	null_command_handler, // 0x33
	null_command_handler, // 0x34
	{ "TOSERVER_DAMAGE",                   TOSERVER_STATE_INGAME, &Server::handleCommand_Damage }, // 0x35
	null_command_handler, // 0x36
	{ "TOSERVER_PLAYERITEM",               TOSERVER_STATE_INGAME, &Server::handleCommand_PlayerItem }, // 0x37
	{ "TOSERVER_RESPAWN",                  TOSERVER_STATE_INGAME, &Server::handleCommand_Respawn }, // 0x38
	{ "TOSERVER_INTERACT",                 TOSERVER_STATE_INGAME, &Server::handleCommand_Interact }, // 0x39
	{ "TOSERVER_REMOVED_SOUNDS",           TOSERVER_STATE_INGAME, &Server::handleCommand_RemovedSounds }, // 0x3a
	{ "TOSERVER_NODEMETA_FIELDS",          TOSERVER_STATE_INGAME, &Server::handleCommand_NodeMetaFields }, // 0x3b
	{ "TOSERVER_INVENTORY_FIELDS",         TOSERVER_STATE_INGAME, &Server::handleCommand_InventoryFields }, // 0x3c
	null_command_handler, // 0x3d
	null_command_handler, // 0x3e
	null_command_handler, // 0x3f
	{ "TOSERVER_REQUEST_MEDIA",            TOSERVER_STATE_STARTUP, &Server::handleCommand_RequestMedia }, // 0x40
	null_command_handler, // 0x41
	null_command_handler, // 0x42
	{ "TOSERVER_CLIENT_READY",             TOSERVER_STATE_STARTUP, &Server::handleCommand_ClientReady }, // 0x43
	null_command_handler, // 0x44
	null_command_handler, // 0x45
	null_command_handler, // 0x46
	null_command_handler, // 0x47
	null_command_handler, // 0x48
	null_command_handler, // 0x49
	null_command_handler, // 0x4a
	null_command_handler, // 0x4b
	null_command_handler, // 0x4c
	null_command_handler, // 0x4d
	null_command_handler, // 0x4e
	null_command_handler, // 0x4f
	{ "TOSERVER_FIRST_SRP",                TOSERVER_STATE_NOT_CONNECTED, &Server::handleCommand_FirstSrp }, // 0x50
	{ "TOSERVER_SRP_BYTES_A",              TOSERVER_STATE_NOT_CONNECTED, &Server::handleCommand_SrpBytesA }, // 0x51
	{ "TOSERVER_SRP_BYTES_M",              TOSERVER_STATE_NOT_CONNECTED, &Server::handleCommand_SrpBytesM }, // 0x52
};

const static ClientCommandFactory null_command_factory = { "TOCLIENT_NULL", 0, false };

/*
	Channels used for Server -> Client communication
	2: Bulk data (mapblocks, media, ...)
	1: HUD packets
	0: everything else

	Packet order is only guaranteed inside a channel, so packets that operate on
	the same objects are *required* to be in the same channel.
*/

const ClientCommandFactory clientCommandFactoryTable[TOCLIENT_NUM_MSG_TYPES] =
{
	null_command_factory, // 0x00
	null_command_factory, // 0x01
	{ "TOCLIENT_HELLO",                    0, true }, // 0x02
	{ "TOCLIENT_AUTH_ACCEPT",              0, true }, // 0x03
	{ "TOCLIENT_ACCEPT_SUDO_MODE",         0, true }, // 0x04
	{ "TOCLIENT_DENY_SUDO_MODE",           0, true }, // 0x05
	null_command_factory, // 0x06
	null_command_factory, // 0x07
	null_command_factory, // 0x08
	null_command_factory, // 0x09
	{ "TOCLIENT_ACCESS_DENIED",            0, true }, // 0x0A
	null_command_factory, // 0x0B
	null_command_factory, // 0x0C
	null_command_factory, // 0x0D
	null_command_factory, // 0x0E
	null_command_factory, // 0x0F
	{ "TOCLIENT_INIT",                     0, true }, // 0x10
	null_command_factory, // 0x11
	null_command_factory, // 0x12
	null_command_factory, // 0x13
	null_command_factory, // 0x14
	null_command_factory, // 0x15
	null_command_factory, // 0x16
	null_command_factory, // 0x17
	null_command_factory, // 0x18
	null_command_factory, // 0x19
	null_command_factory, // 0x1A
	null_command_factory, // 0x1B
	null_command_factory, // 0x1C
	null_command_factory, // 0x1D
	null_command_factory, // 0x1E
	null_command_factory, // 0x1F
	{ "TOCLIENT_BLOCKDATA",                2, true }, // 0x20
	{ "TOCLIENT_ADDNODE",                  0, true }, // 0x21
	{ "TOCLIENT_REMOVENODE",               0, true }, // 0x22
	null_command_factory, // 0x23
	null_command_factory, // 0x24
	null_command_factory, // 0x25
	null_command_factory, // 0x26
	{ "TOCLIENT_INVENTORY",                0, true }, // 0x27
	null_command_factory, // 0x28
	{ "TOCLIENT_TIME_OF_DAY",              0, true }, // 0x29
	{ "TOCLIENT_CSM_RESTRICTION_FLAGS",    0, true }, // 0x2A
	{ "TOCLIENT_PLAYER_SPEED",             0, true }, // 0x2B
	null_command_factory, // 0x2C
	null_command_factory, // 0x2D
	null_command_factory, // 0x2E
	{ "TOCLIENT_CHAT_MESSAGE",             0, true }, // 0x2F
	null_command_factory, // 0x30
	{ "TOCLIENT_ACTIVE_OBJECT_REMOVE_ADD", 0, true }, // 0x31
	{ "TOCLIENT_ACTIVE_OBJECT_MESSAGES",   0, true }, // 0x32 (may be sent as unrel over channel 1 too)
	{ "TOCLIENT_HP",                       0, true }, // 0x33
	{ "TOCLIENT_MOVE_PLAYER",              0, true }, // 0x34
	{ "TOCLIENT_ACCESS_DENIED_LEGACY",     0, true }, // 0x35
	{ "TOCLIENT_FOV",                      0, true }, // 0x36
	{ "TOCLIENT_DEATHSCREEN",              0, true }, // 0x37
	{ "TOCLIENT_MEDIA",                    2, true }, // 0x38
	null_command_factory, // 0x39
	{ "TOCLIENT_NODEDEF",                  0, true }, // 0x3A
	null_command_factory, // 0x3B
	{ "TOCLIENT_ANNOUNCE_MEDIA",           0, true }, // 0x3C
	{ "TOCLIENT_ITEMDEF",                  0, true }, // 0x3D
	null_command_factory, // 0x3E
	{ "TOCLIENT_PLAY_SOUND",               0, true }, // 0x3f (may be sent as unrel too)
	{ "TOCLIENT_STOP_SOUND",               0, true }, // 0x40
	{ "TOCLIENT_PRIVILEGES",               0, true }, // 0x41
	{ "TOCLIENT_INVENTORY_FORMSPEC",       0, true }, // 0x42
	{ "TOCLIENT_DETACHED_INVENTORY",       0, true }, // 0x43
	{ "TOCLIENT_SHOW_FORMSPEC",            0, true }, // 0x44
	{ "TOCLIENT_MOVEMENT",                 0, true }, // 0x45
	{ "TOCLIENT_SPAWN_PARTICLE",           0, true }, // 0x46
	{ "TOCLIENT_ADD_PARTICLESPAWNER",      0, true }, // 0x47
	null_command_factory, // 0x48
	{ "TOCLIENT_HUDADD",                   1, true }, // 0x49
	{ "TOCLIENT_HUDRM",                    1, true }, // 0x4a
	{ "TOCLIENT_HUDCHANGE",                1, true }, // 0x4b
	{ "TOCLIENT_HUD_SET_FLAGS",            1, true }, // 0x4c
	{ "TOCLIENT_HUD_SET_PARAM",            1, true }, // 0x4d
	{ "TOCLIENT_BREATH",                   0, true }, // 0x4e
	{ "TOCLIENT_SET_SKY",                  0, true }, // 0x4f
	{ "TOCLIENT_OVERRIDE_DAY_NIGHT_RATIO", 0, true }, // 0x50
	{ "TOCLIENT_LOCAL_PLAYER_ANIMATIONS",  0, true }, // 0x51
	{ "TOCLIENT_EYE_OFFSET",               0, true }, // 0x52
	{ "TOCLIENT_DELETE_PARTICLESPAWNER",   0, true }, // 0x53
	{ "TOCLIENT_CLOUD_PARAMS",             0, true }, // 0x54
	{ "TOCLIENT_FADE_SOUND",               0, true }, // 0x55
	{ "TOCLIENT_UPDATE_PLAYER_LIST",       0, true }, // 0x56
	{ "TOCLIENT_MODCHANNEL_MSG",           0, true }, // 0x57
	{ "TOCLIENT_MODCHANNEL_SIGNAL",        0, true }, // 0x58
	{ "TOCLIENT_NODEMETA_CHANGED",         0, true }, // 0x59
	{ "TOCLIENT_SET_SUN",                  0, true }, // 0x5a
	{ "TOCLIENT_SET_MOON",                 0, true }, // 0x5b
	{ "TOCLIENT_SET_STARS",                0, true }, // 0x5c
	null_command_factory, // 0x5d
	null_command_factory, // 0x5e
	null_command_factory, // 0x5f
	{ "TOSERVER_SRP_BYTES_S_B",            0, true }, // 0x60
	{ "TOCLIENT_FORMSPEC_PREPEND",         0, true }, // 0x61
};
Signal (right)" msgstr "Signal mural (droit)" #: advtrains/signals.lua msgid "Wallmounted Signal (top)" msgstr "Signal mural (plafond)" #: advtrains/trackplacer.lua msgid "This node can't be changed using the trackworker." msgstr "Ce nœud ne peut être modifié avec l'outil \"Trackworker\"." #: advtrains/trackplacer.lua msgid "This node can't be rotated using the trackworker." msgstr "Ce nœud ne peut être tourné avec l'outil \"Trackworker\"." #: advtrains/trackplacer.lua msgid "This track can not be changed." msgstr "Cette voie ne peut pas être modifiée." #: advtrains/trackplacer.lua msgid "This track can not be rotated." msgstr "Cette voie ne peut pas être tournée." #: advtrains/trackplacer.lua msgid "" "Track Worker Tool\n" "\n" "Left-click: change rail type (straight/curve/switch)\n" "Right-click: rotate object" msgstr "" "Outil \"Trackworker\"\n" "\n" "Clic-Gauche : change le type de rail (droit/courbé/aiguillage)\n" "\n" "Clic-Droit : tourne l'objet" #: advtrains/tracks.lua msgid "@1 Slope" msgstr "Pente @1" #: advtrains/tracks.lua msgid "Can't place slope: Not enough slope items left (@1 required)." msgstr "" "Placement impossible : quantité insuffisante de voie pentue (@1 manquant)." #: advtrains/tracks.lua msgid "Can't place slope: There's no slope of length @1." msgstr "Placement impossible : il n'y a pas de voie pentue de longueur @1." #: advtrains/tracks.lua msgid "Can't place slope: no supporting node at upper end." msgstr "Placement impossible : pas de nœud d'appui à l'extrémité supérieure." #: advtrains/tracks.lua msgid "Can't place slope: not pointing at node." msgstr "Placement impossible : ne pointe pas un nœud." #: advtrains/tracks.lua msgid "Can't place slope: space occupied." msgstr "Placement impossible : espace occupé." #: advtrains/tracks.lua msgid "Position is occupied by a train." msgstr "Cet emplacement est occupé par un train." #: advtrains/tracks.lua msgid "There's a Signal Influence Point here." msgstr "Il y a un \"Signal Influence Point\" ici." #: advtrains/tracks.lua msgid "There's a Track Circuit Break here." msgstr "Il y a un \"Track Circuit Break\" ici." #: advtrains/tracks.lua msgid "This track can not be removed." msgstr "Cette voie ne peut pas être enlevée." #: advtrains/trainhud.lua msgid "OVERRUN RED SIGNAL! Examine situation and reverse train to move again." msgstr "" "Franchissement de signal rouge : examinez la situation et inversez le sens " "de marche du train." #: advtrains/wagonprop_tool.lua msgid "Insufficient privileges to use this!" msgstr "" #: advtrains/wagonprop_tool.lua #, fuzzy msgid "Wagon Properties Tool" msgstr "Propriétés du wagon" #: advtrains/wagonprop_tool.lua msgid "" "Wagon Properties Tool\n" "Punch a wagon to view and edit the Wagon Properties" msgstr "" #: advtrains/wagons.lua msgid "(Doors closed)" msgstr "(Portes closes)" #: advtrains/wagons.lua msgid "Doors are closed! (Try holding sneak key!)" msgstr "Portes closes : (Essayez la \"sneak key\"!\")" #: advtrains/wagons.lua msgid "" "Doors are closed. Use Sneak+rightclick to ignore the closed doors and get " "off." msgstr "" "Portes closes ! Utilisez \"Marcher lentement (Sneak)\" et Clic-Droit pour " "franchir les portes et débarquer." #: advtrains/wagons.lua msgid "Get off" msgstr "Débarquer" #: advtrains/wagons.lua msgid "Get off (forced)" msgstr "Débarquer (de force)" #: advtrains/wagons.lua msgid "Line" msgstr "Ligne" #: advtrains/wagons.lua msgid "Onboard Computer" msgstr "Ordinateur embarqué" #: advtrains/wagons.lua msgid "Routingcode" msgstr "Code de routage" #: advtrains/wagons.lua msgid "Save wagon properties" msgstr "Sauvegarder les propriétés du wagon" #: advtrains/wagons.lua msgid "Select seat:" msgstr "Choisir le siège :" #: advtrains/wagons.lua msgid "Show Inventory" msgstr "Montrer le stock" #: advtrains/wagons.lua msgid "Text displayed inside train" msgstr "Texte affiché à l'intérieur du train" #: advtrains/wagons.lua msgid "Text displayed outside on train" msgstr "Texte affiché à l'extérieur du train" #: advtrains/wagons.lua msgid "The wagon's inventory is not empty." msgstr "Le stock de ce wagon n'est pas vide." #: advtrains/wagons.lua #, fuzzy msgid "This Wagon ID" msgstr "Ce wagon est plein." #: advtrains/wagons.lua msgid "This wagon has no seats." msgstr "Ce wagon n'a pas de siège." #: advtrains/wagons.lua msgid "This wagon is full." msgstr "Ce wagon est plein." #: advtrains/wagons.lua msgid "This wagon is owned by @1, you can't destroy it." msgstr "Ce wagon est la propriété de @1, vous ne pouvez pas le détruire." #: advtrains/wagons.lua msgid "Train ID" msgstr "" #: advtrains/wagons.lua msgid "Wagon needs to be decoupled from other wagons in order to destroy it." msgstr "" "Les wagons doivent être désaccouplés des autres pour pouvoir être détruits." #: advtrains/wagons.lua msgid "Wagon properties" msgstr "Propriétés du wagon" #: advtrains/wagons.lua msgid "" "Warning: If you destroy this wagon, you only get some steel back! If you are " "sure, hold Sneak and left-click the wagon." msgstr "" "Attention: Si vous détruisez ce wagon, vous ne récupérerez que de la " "ferraille ! Si vous êtes sûr de vous, appuyez la touche \"Marcher lentement " "(Sneak)\" et Clic-Gauche." #: advtrains/wagons.lua msgid "You are not allowed to access the driver stand." msgstr "Accès interdit au poste de pilotage." #: advtrains/wagons.lua msgid "You can't get on this wagon." msgstr "Montée impossible dans ce wagon." #: advtrains_interlocking/routesetting.lua msgid "Route state changed." msgstr "" #: advtrains_interlocking/tsr_rail.lua msgid "Point Speed Restriction Track" msgstr "Voie de point de limitation de vitesse" #: advtrains_interlocking/tsr_rail.lua msgid "Point speed restriction: @1" msgstr "Point de limitation de vitesse : @1" #: advtrains_interlocking/tsr_rail.lua msgid "Set point speed restriction:" msgstr "Placez un point de limitation de vitesse :" #: advtrains_interlocking/tsr_rail.lua msgid "You are not allowed to configure this track without the @1 privilege." msgstr "Vous n'êtes pas autorisé à configurer cette voie sans le privilège @1." #: advtrains_interlocking/tsr_rail.lua advtrains_line_automation/stoprail.lua msgid "You are not allowed to configure this track." msgstr "Vous n'êtes pas autorisé à configurer cette voie." #: advtrains_line_automation/stoprail.lua msgid "Dep. Speed" msgstr "Vitesse de départ" #: advtrains_line_automation/stoprail.lua msgid "Door Delay" msgstr "Durée d'ouverture des portes" #: advtrains_line_automation/stoprail.lua msgid "Door Side" msgstr "Coté d'ouvertures des portes" #: advtrains_line_automation/stoprail.lua msgid "Kick out passengers" msgstr "Éjecter les passagers" #: advtrains_line_automation/stoprail.lua msgid "Reverse train" msgstr "Inversion du sens de marche" #: advtrains_line_automation/stoprail.lua msgid "Station Code" msgstr "Code de Station" #: advtrains_line_automation/stoprail.lua msgid "Station Name" msgstr "Nom de Station" #: advtrains_line_automation/stoprail.lua msgid "Station code \"@1\" already exists and is owned by @2." msgstr "Le code de station \"@1\" existe et est possédé par @2." #: advtrains_line_automation/stoprail.lua msgid "Station/Stop Track" msgstr "Voie d'arrêt en station" #: advtrains_line_automation/stoprail.lua msgid "Stop Time" msgstr "Durée d'arrêt" #: advtrains_line_automation/stoprail.lua msgid "This station is owned by @1. You are not allowed to edit its name." msgstr "" "Cette station est la propriété de @1. Vous n'êtes pas autorisé à modifier " "son nom." #: advtrains_line_automation/stoprail.lua advtrains_train_track/init.lua msgid "Track" msgstr "Voie" #: advtrains_luaautomation/active_common.lua msgid "Clear Local Environment" msgstr "Effacer l'environnement LuaATC" #: advtrains_luaautomation/active_common.lua msgid "Code" msgstr "Code" #: advtrains_luaautomation/active_common.lua msgid "LuaATC Environment" msgstr "Environnement LuaATC" #: advtrains_luaautomation/active_common.lua msgid "LuaATC component assigned to an invalid environment" msgstr "Composant LuaATC assigné à un environnement invalide" #: advtrains_luaautomation/active_common.lua msgid "LuaATC component assigned to environment '@1'" msgstr "Composant LuaATC assigné à l'environnement '@1'" #: advtrains_luaautomation/active_common.lua msgid "LuaATC component with error: @1" msgstr "Erreur @1 du composant LuaATC" #: advtrains_luaautomation/active_common.lua msgid "Unconfigured LuaATC component" msgstr "Composant LuaATC non configuré" #: advtrains_luaautomation/active_common.lua msgid "" "You are not allowed to configure this LuaATC component without the @1 " "privilege." msgstr "Vous ne pouvez configurer ce composant LuaATC sans le privilege @1." #: advtrains_luaautomation/init.lua msgid "" "Can place and configure LuaATC components, including execute potentially " "harmful Lua code" msgstr "" "Permet le placement et la configuration de composants LuaATC avec risque " "d'exécution de code Lua dangereux" #: advtrains_luaautomation/mesecon_controller.lua msgid "LuaATC Mesecon Controller" msgstr "Commande Mesecon de LuaATC" #: advtrains_luaautomation/operation_panel.lua msgid "LuaATC Operation Panel" msgstr "Panneau de commande de LuaATC" #: advtrains_luaautomation/pcnaming.lua msgid "" "Passive Component Naming Tool\n" "\n" "Right-click to name a passive component." msgstr "" "Outil de nommage de composant passif\n" "\n" "Clic-Droit pour nommer un composant passif." #: advtrains_luaautomation/pcnaming.lua msgid "Set name of component (empty to clear)" msgstr "Nommer le composant (chaîne vide pour effacer)" #: advtrains_luaautomation/pcnaming.lua msgid "" "You are not allowed to name LuaATC passive components without the @1 " "privilege." msgstr "Vous ne pouvez nommer un composant LuaATC passif sans le privilege @1." #: advtrains_train_industrial/init.lua msgid "Big Industrial Train Engine" msgstr "Grosse locomotive industrielle" #: advtrains_train_industrial/init.lua advtrains_train_steam/init.lua msgid "Driver Stand (left)" msgstr "Poste de pilotage (gauche)" #: advtrains_train_industrial/init.lua advtrains_train_steam/init.lua msgid "Driver Stand (right)" msgstr "Poste de pilotage (droit)" #: advtrains_train_industrial/init.lua msgid "Industrial Train Engine" msgstr "Locomotive industrielle" #: advtrains_train_industrial/init.lua msgid "Industrial tank wagon" msgstr "Wagon-citerne industriel" #: advtrains_train_industrial/init.lua msgid "Industrial wood wagon" msgstr "Wagon grumier industriel" #: advtrains_train_japan/init.lua msgid "Driver stand" msgstr "Poste de pilotage" #: advtrains_train_japan/init.lua msgid "Japanese Train Engine" msgstr "Motrice Japonaise" #: advtrains_train_japan/init.lua msgid "Japanese Train Inter-Wagon Connection" msgstr "Passage inter-voiture de train Japonais" #: advtrains_train_japan/init.lua msgid "Japanese Train Wagon" msgstr "Voiture Japonaise" #: advtrains_train_steam/init.lua msgid "Box Wagon" msgstr "Wagon de frêt" #: advtrains_train_steam/init.lua msgid "Detailed Steam Engine" msgstr "Locomotive à vapeur complexe" #: advtrains_train_steam/init.lua msgid "Passenger Wagon" msgstr "Voiture passager" #: advtrains_train_steam/init.lua msgid "Steam Engine" msgstr "Locomotive à vapeur" #: advtrains_train_subway/init.lua msgid "Subway Passenger Wagon" msgstr "Voiture de Métropolitain" #: advtrains_train_track/init.lua msgid "3-way turnout" msgstr "Embranchement triple" #: advtrains_train_track/init.lua msgid "90+Angle Diamond Crossing Track" msgstr "Croisement perpendiculo-diagonal" #: advtrains_train_track/init.lua msgid "ATC controller" msgstr "Controlleur ATC" #: advtrains_train_track/init.lua msgid "Bumper" msgstr "Heurtoir" #: advtrains_train_track/init.lua msgid "Detector Rail" msgstr "Voie détectrice" #: advtrains_train_track/init.lua msgid "Diagonal Diamond Crossing Track" msgstr "Croisement diagonal" #: advtrains_train_track/init.lua msgid "Loading Track" msgstr "Voie de Chargement" #: advtrains_train_track/init.lua msgid "Perpendicular Diamond Crossing Track" msgstr "Croisement perpendiculaire" #: advtrains_train_track/init.lua msgid "Unloading Track" msgstr "Voie de Déchargement" #: advtrains_train_track/init.lua msgid "Y-turnout" msgstr "Embranchement en Y" #~ msgid "" #~ "ATC controller, mode @1\n" #~ "Channel: @2" #~ msgstr "" #~ "Controlleur ATC, mode @1\n" #~ "Canal : @2" #~ msgid "Access to @1" #~ msgstr "Accès à @1" #~ msgid "Can't get on: wagon full or doors closed!" #~ msgstr "" #~ "Embarquement impossible : le wagon est plein ou ses portes sont closes !" #~ msgid "Can't place: protected position!" #~ msgstr "Placement impossible : emplacement protégé" #~ msgid "Default Seat" #~ msgstr "Siège par défaut" #~ msgid "Default Seat (driver stand)" #~ msgstr "Siège par défaut (poste de pilotage)" #~ msgid "Deprecated Track" #~ msgstr "Voie déconseillée" #~ msgid "Lock couples" #~ msgstr "Verrouiller l'accouplement" #~ msgid "Speed:" #~ msgstr "Vitesse : " #~ msgid "Target:" #~ msgstr "Destination : " #, fuzzy #~ msgid "This node can't be rotated using the trackworker," #~ msgstr "Ce nœud ne peut être tourné avec l'outil \"Trackworker\" !" #~ msgid "This position is protected!" #~ msgstr "Cet emplacement est protégé !" #~ msgid "Use Sneak+rightclick to bypass closed doors!" #~ msgstr "" #~ "Utilisez \"Marcher lentement (Sneak)\" et Clic-Droit pour franchir les " #~ "portes closes !" #, fuzzy #~ msgid "You are not allowed to modify this protected track." #~ msgstr "Vous ne pouvez pas construire une voie à cet emplacement protégé" #~ msgid "" #~ "You need to own at least one neighboring wagon to destroy this couple." #~ msgstr "" #~ "Vous devez être propriétaire d'au moins un wagon voisin pour supprimer " #~ "cet attelage."