-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathdata.proto
400 lines (397 loc) · 8.7 KB
/
data.proto
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
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
syntax = "proto3";
package jsettlers;
message Coord {
oneof coord_oneof {
// snake_casing used here generates expected "coord1D" instead of "coord1d"
Coord1D coord1_d = 1;
Coord2D coord2_d = 2;
Coord3D coord3_d = 3;
}
}
message Coord1D {
int32 id = 1;
}
message Coord2D {
int32 row = 1;
int32 column = 2;
}
message Coord3D {
int32 x = 1;
int32 y = 2;
int32 z = 3;
}
message Node {
Coord coord1 = 1;
Coord coord2 = 2;
Coord coord3 = 3;
}
message Edge {
Coord coord1 = 1;
Coord coord2 = 2;
}
message Hex {
HexType type = 1;
Coord coord = 2;
ChitType chit = 3;
}
enum HexType {
NoneHex = 0; // Used for boards that have fixed amount of hexagons
River = 1; // clay
Mountain = 2; // ore
Pasture = 3; // sheep
WheatField = 4; // wheatField instead of Field to have W as first letter
Forest = 5; // timber
Sea = 6;
Desert = 7;
HexFromBag = 8; // the hex is picked from a bag
}
enum ChitType {
ChitNone = 0; // the hex does not have a chit
Chit2 = 1;
Chit3 = 2;
Chit4 = 3;
Chit5 = 4;
Chit6 = 5;
Chit8 = 6;
Chit9 = 7;
Chit10 = 8;
Chit11 = 9;
Chit12 = 10;
ChitFromBag = 11; // the chit is picked from a bag
}
enum PortType {
Clay2To1 = 0;
Ore2To1 = 1;
Sheep2To1 = 2;
Wheat2To1 = 3;
Timber2To1 = 4;
Any3To1 = 5; // 3 of same yields one gold
Any4To1 = 6; // The default 4:1 trading ability
FromBag = 7;
}
enum ResourceType {
Timber = 0;
Wheat = 1;
Ore = 2;
Sheep = 3;
Brick = 4;
Gold = 5;
Unknown = 6; // in opponents' list of resources to reduce spying
}
message BuildTown {
Node node = 1;
}
message BuildRoad {
Edge edge = 1;
}
message BuildCity {
Node node = 1;
}
message BuyDevelopmentCard {
oneof development_card_null {
DevelopmentCard development_card = 1;
}
}
message PlayDevelopmentCard {
DevelopmentCard development_card = 1;
}
message TradeBank {
repeated ResourceType offered = 1;
repeated ResourceType wanted = 2;
}
message RollDice {
message Production {
int32 player_id = 1;
repeated ResourceType resources = 2;
}
message Dice {
int32 die1 = 1;
int32 die2 = 2;
}
Dice dice = 1;
repeated Production productions = 2;
}
message OfferTrade {
repeated ResourceType offered = 1;
repeated ResourceType wanted = 2;
}
message RejectOffer {
enum Reason {
NotGiven = 0; // opponent just rejects
DontHave = 1; // opponent does not have wanted resources
NoResources = 2; // opponent does not have any resources
WantMore = 3; // opponent wants more resources
TimeOut = 4; // maximum time has passed for opponent to respond, so it is auto-rejected
}
int32 trade_offer_id = 1;
Reason reason = 2;
}
message CounterOffer {
int32 trade_offer_id = 1;
repeated ResourceType offered = 2;
repeated ResourceType wanted = 3;
}
message AcceptOffer {
int32 trade_offer_id = 1;
}
message TradePlayer {
int32 trade_offer_id = 1;
int32 trade_response_id = 2;
}
message LooseResources {
repeated ResourceType resources = 1;
}
message RobPlayer {
oneof opponent_id_null {
int32 opponent_id = 1;
}
oneof resource_type_null {
ResourceType resource_type = 2;
}
}
message MoveRobber {
Coord coord = 1;
}
message EndTurn { }
message ClaimVictory { }
message StartGame { }
// a client requests to perform a game action
message GameActionRequest {
int32 request_id = 1; // client-generated id to match response with request to update state
oneof action {
BuildTown build_town = 2;
BuildRoad build_road = 3;
BuildCity build_city = 4;
BuyDevelopmentCard buy_development_card = 5;
PlayDevelopmentCard play_development_card = 6;
TradeBank trade_bank = 7;
RollDice roll_dice = 8;
OfferTrade offer_trade = 9;
RejectOffer reject_offer = 10;
CounterOffer counter_offer = 11;
AcceptOffer accept_offer = 12;
TradePlayer trade_player = 13;
LooseResources loose_resources = 14;
RobPlayer rob_player = 15;
MoveRobber move_robber = 16;
EndTurn end_turn = 17;
StartGame start_game = 18;
ClaimVictory claim_victory = 19;
}
}
message GameAction {
int32 id = 1;
int32 game_id = 2;
int32 player_id = 3;
int32 user_id = 4;
int32 turn_id = 5;
int32 game_phase_id = 6;
int32 turn_phase_id = 7;
oneof action {
BuildTown build_town = 8;
BuildRoad build_road = 9;
BuildCity build_city = 10;
BuyDevelopmentCard buy_development_card = 11;
PlayDevelopmentCard play_development_card = 12;
TradeBank trade_bank = 13;
RollDice roll_dice = 14;
OfferTrade offer_trade = 15;
RejectOffer reject_offer = 16;
CounterOffer counter_offer = 17;
AcceptOffer accept_offer = 18;
TradePlayer trade_player = 19;
LooseResources loose_resources = 20;
RobPlayer rob_player = 21;
MoveRobber move_robber = 22;
EndTurn end_turn = 23;
StartGame start_game = 24;
ClaimVictory claim_victory = 25;
}
}
message DevelopmentCard {
oneof player_id_null {
int32 player_id = 1;
}
oneof turn_bought_null {
int32 turn_bought_index = 2;
}
oneof turn_played_null {
int32 turn_played_index = 3;
}
oneof development_card {
VictoryPoint victory_point = 4;
YearOfPlenty year_of_plenty = 5;
Soldier soldier = 6;
Monopoly monopoly = 7;
RoadBuilding road_building = 8;
}
}
message VictoryPoint { }
message YearOfPlenty {
ResourceType resource_type1 = 1;
ResourceType resource_type2 = 2;
}
message Soldier { }
message Monopoly {
ResourceType resource_type = 1;
}
message RoadBuilding { }
message Board {
string name = 1;
repeated Hex hexes = 2;
repeated Port ports = 3;
Robber robber = 4;
}
message Robber {
Coord coord = 1;
}
message Player {
int32 id = 1;
int32 color = 2;
oneof user_null {
User user = 3;
}
int32 max_hand_resources = 4;
repeated DevelopmentCard development_cards = 5;
repeated DevelopmentCard played_development_cards = 6;
int32 road_building_tokens = 7;
int32 route_length = 8;
Stock stock = 9;
repeated Port ports = 10;
repeated City cities = 11;
repeated Town towns = 12;
repeated Road roads = 13;
repeated ResourceType resources = 14;
}
message User {
int32 id = 1;
string name = 2;
}
message Town {
Node node = 1;
}
message City {
Node node = 1;
}
message Road {
Edge edge = 1;
}
message Port {
PortType type = 1;
oneof sea_coord_null {
Coord sea_coord = 2;
}
oneof part_index_null {
int32 part_index = 3;
}
}
message Stock {
int32 roads = 1;
int32 towns = 2;
int32 cities = 3;
}
message Game {
repeated Player players = 1;
oneof player_on_turn_id_null {
int32 player_on_turn_id = 2;
}
oneof winner_id_null {
int32 winner_id = 3;
}
Board board = 4;
repeated DevelopmentCard development_cards = 5;
Bank bank = 6;
repeated GameAction actions = 7;
LongestRoad longest_road = 8;
LargestArmy largest_army = 9;
Expectation expectation = 10;
oneof dice_null {
Dice dice = 11;
}
int32 victory_points_to_win = 12;
GamePhase initial_placement = 13;
GamePhase play_turns = 14;
GamePhase finished = 15;
int32 current_phase_index = 16;
}
message LongestRoad {
oneof player {
int32 player_id = 1;
}
repeated Edge edges = 2;
}
message LargestArmy {
oneof player {
int32 player_id = 1;
}
}
message Bank {
repeated ResourceType resources = 1;
repeated DevelopmentCard developmentCards = 2;
}
message Expectation {
oneof expectation {
ExpectTradeResponses expect_trade_responses = 1;
PlayTurnActions play_turn_actions = 2;
MoveRobberThenRobPlayer move_robber_then_rob_player = 3;
PlaySoldierOrRollDice play_soldier_or_roll_dice = 4;
LooseResourcesMoveRobberRobPlayer loose_resources_move_robber_rob_player = 5;
BuildTownThenBuildRoad build_town_then_build_road = 6;
BuildTwoRoads build_two_roads = 7;
EndOfGame end_of_game = 8;
}
}
message ExpectTradeResponses {
repeated int32 responded_player_ids = 1;
}
message PlayTurnActions {}
message MoveRobberThenRobPlayer {
bool has_moved_robber = 1;
bool has_robbed_player = 2;
}
message PlaySoldierOrRollDice {
bool has_played_soldier = 1;
}
message LooseResourcesMoveRobberRobPlayer {
repeated int32 lost_resources_player_ids = 1;
MoveRobberThenRobPlayer move_robber_then_rob_player = 2;
}
message BuildTownThenBuildRoad {
int32 action_index = 1;
}
message BuildTwoRoads {
int32 roads_built = 1;
}
message EndOfGame {}
message GamePhase {
oneof phase {
InitialPlacement initialPlacement = 1;
PlayTurns playTurns = 2;
Finished finished = 3;
}
}
message InitialPlacement {
// Though this can currently be BuildTownThenBuildRoad, this anticipates
// future implementation of town-road-city-road-road.
Expectation expectation = 1;
}
message PlayTurns {
repeated Turn turns = 1;
oneof turn_null {
Turn turn = 2;
}
oneof turn_phase {
BeforeRollDicePhase before_roll_dice_phase = 3;
RollDicePhase roll_dice_phase = 4;
TradeAndBuildPhase trade_and_build_phase = 5;
}
}
message Finished {}
message Turn {
int32 number = 1;
int32 player_id = 2;
bool has_played_development_card = 3;
}
message BeforeRollDicePhase {}
message RollDicePhase {}
message TradeAndBuildPhase {}