ledmon 0.1.10 → 0.1.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c2f085d038b12359165c075857540df062c5a28fded2d7bc7e81c5ba86227e21
4
- data.tar.gz: 614f5c8fcc4840804c81244a7ec8ff486316f059947689c9d94d6c92f443656b
3
+ metadata.gz: 11730abbeb3bb95e93b748b4df5ecbde2b25011a86dadee749435e3eb4e7250c
4
+ data.tar.gz: 546963a89848393d4afb8520c744b772b4f850f48f0d66ffc7e7ecd2573384e9
5
5
  SHA512:
6
- metadata.gz: fb3460de9684c2c6849b96cfac1e601b81e986c60091bb0790563097db302e8d11611b36640dd2f1e3f9c157beafe79559ca413ea21a75cbe267c99bf60216d2
7
- data.tar.gz: ba28cb6f47f36f9a3e0a97cc563c7b95a0fcad4afbcffcd9d89e3e02f9c26c670cdf349458c29eb80f439f00f3439ca3032b9fe2bdbbfabf035631047520db20
6
+ metadata.gz: e6c1a454de0de6260ecfbf61a351a25873d2d473b6697ffa636d6956f7085b2e4af3be4c99ee2ce1182627a9a1bbbcaa7d00055e9e510b2de568215c1fca8667
7
+ data.tar.gz: db34f8d5695e15f52ff6e7cbf7280e1c03e2e4f3f86367f6199191586b207573a96e0c80f882ecf075083631026552a85bdb94b9f051c01167a66b9710fc0b64
data/DOCS.md CHANGED
@@ -16,7 +16,7 @@ def avatar
16
16
  @)<)@"
17
17
  end
18
18
 
19
- def brain
19
+ def brain
20
20
  # Mozog príšerky - tu sa všetko odohráva!
21
21
  loop do
22
22
  # Tvoja logika
@@ -31,6 +31,7 @@ end
31
31
  ## 🎮 Ovládanie a vstup
32
32
 
33
33
  ### `keypress`
34
+
34
35
  Počká na stlačenie klávesy a vráti aká bola stlačená.
35
36
 
36
37
  ```ruby
@@ -41,6 +42,7 @@ end
41
42
  ```
42
43
 
43
44
  ### `ask(otazka)`
45
+
44
46
  Opýta sa užívateľa na niečo a počká na odpoveď.
45
47
 
46
48
  ```ruby
@@ -49,6 +51,7 @@ craft(recipe)
49
51
  ```
50
52
 
51
53
  ### `say(sprava)`
54
+
52
55
  Vypíše správu na obrazovku.
53
56
 
54
57
  ```ruby
@@ -59,6 +62,7 @@ say "Môj život: #{get_health}"
59
62
  ## 🚶 Pohyb
60
63
 
61
64
  ### `move_forward`
65
+
62
66
  Pohne príšerku vpred (v smere, kam sa pozerá).
63
67
 
64
68
  ```ruby
@@ -67,7 +71,8 @@ if key == 'w'
67
71
  end
68
72
  ```
69
73
 
70
- ### `move_backward`
74
+ ### `move_backward`
75
+
71
76
  Pohne príšerku vzad.
72
77
 
73
78
  ```ruby
@@ -77,6 +82,7 @@ end
77
82
  ```
78
83
 
79
84
  ### `turn_left`
85
+
80
86
  Otočí príšerku doľava.
81
87
 
82
88
  ```ruby
@@ -86,6 +92,7 @@ end
86
92
  ```
87
93
 
88
94
  ### `turn_right`
95
+
89
96
  Otočí príšerku doprava.
90
97
 
91
98
  ```ruby
@@ -95,6 +102,7 @@ end
95
102
  ```
96
103
 
97
104
  ### `turn_towards(smer)`
105
+
98
106
  Otočí príšerku vybraným smerom.
99
107
 
100
108
  ```ruby
@@ -102,6 +110,7 @@ turn_towards(["north", "south", "east", "west"].sample)
102
110
  ```
103
111
 
104
112
  ### `get_position`
113
+
105
114
  Vráti ti aktuálnu pozíciu príšerky.
106
115
 
107
116
  ```ruby
@@ -111,6 +120,7 @@ end
111
120
  ```
112
121
 
113
122
  ### `get_heading`
123
+
114
124
  Vráti ti aktuálny smer príšerky.
115
125
 
116
126
  ```ruby
@@ -120,6 +130,7 @@ end
120
130
  ```
121
131
 
122
132
  ### `path_to(x, y)`
133
+
123
134
  Nájde, akým smerom máš ísť k zadanému cieľu. Táto metóda vidí iba mapu o veľkosti look-u, takže sa môže v prípade steny väčšej ako váš rozhľad príšerka nasledujúca túto metódu zaseknúť.
124
135
 
125
136
  ```ruby
@@ -138,6 +149,7 @@ end
138
149
  ## 👀 Rozhliadanie sa
139
150
 
140
151
  ### `look`
152
+
141
153
  Pozrie sa okolo seba a vráti mapu okolia.
142
154
 
143
155
  ```ruby
@@ -160,6 +172,7 @@ end
160
172
  ## ⚔️ Boj
161
173
 
162
174
  ### `attack`
175
+
163
176
  Zaútočí na nepriateľa, ak pred ním stojí.
164
177
 
165
178
  ```ruby
@@ -169,6 +182,7 @@ end
169
182
  ```
170
183
 
171
184
  ### `get_health`
185
+
172
186
  Zistí aktuálny život príšerky.
173
187
 
174
188
  ```ruby
@@ -179,6 +193,7 @@ say "Môj život: #{health}"
179
193
  ## 🎒 Inventár a vybavenie
180
194
 
181
195
  ### `get_inventory`
196
+
182
197
  Vráti všetky predmety v inventári.
183
198
 
184
199
  ```ruby
@@ -188,6 +203,7 @@ say "Vybavenie: #{inventory.equipment.inspect}"
188
203
  ```
189
204
 
190
205
  ### `equip_item(predmet, slot)`
206
+
191
207
  Nasadí predmet do určitého slotu.
192
208
 
193
209
  ```ruby
@@ -197,6 +213,7 @@ equip_item(item, slot)
197
213
  ```
198
214
 
199
215
  ### `unequip_item(slot)`
216
+
200
217
  Zosadí predmet zo slotu.
201
218
 
202
219
  ```ruby
@@ -204,7 +221,30 @@ slot = ask("Slot: ")
204
221
  unequip_item(slot)
205
222
  ```
206
223
 
224
+ #### ⚠️ V týchto príkladoch je dôležitá premenná `slot`. Pri equipovaní a unequipovaní itemov si musíte vybrať správny slot.
225
+
226
+ Validné sloty sú:
227
+
228
+ ```ruby
229
+ # zbrane
230
+ slot = "hand"
231
+
232
+ # brnenie
233
+ slot = "armor"
234
+
235
+ # batoh
236
+ slot = "backpack"
237
+
238
+ # topánky
239
+ slot = "boots"
240
+
241
+ # amulety
242
+ slot = "charm0"
243
+ slot = "charm1"
244
+ ```
245
+
207
246
  ### `storage_transfer(item, take)`
247
+
208
248
  Vyberie/Vloži item zo storage-u.
209
249
 
210
250
  ```ruby
@@ -214,6 +254,7 @@ storage_transfer(item, take)
214
254
  ```
215
255
 
216
256
  ### `storage_list`
257
+
217
258
  Vráti všetky predmety v storage-i.
218
259
 
219
260
  ```ruby
@@ -221,6 +262,7 @@ say storage_list.inspect
221
262
  ```
222
263
 
223
264
  ### `consume_item(item)`
265
+
224
266
  Zkonzumuje item.
225
267
 
226
268
  ```ruby
@@ -229,6 +271,7 @@ consume_item item
229
271
  ```
230
272
 
231
273
  ### `get_remaining_consumable_duration`
274
+
232
275
  Vráti, koľko ešte bude trvať efekt skonzumovaného itemu.
233
276
 
234
277
  ```ruby
@@ -238,6 +281,7 @@ say get_remaining_consumable_duration
238
281
  ## 🔨 Crafting a výskum
239
282
 
240
283
  ### `craft(recept)`
284
+
241
285
  Vytvorí predmet podľa receptu.
242
286
 
243
287
  ```ruby
@@ -246,6 +290,7 @@ craft(recipe)
246
290
  ```
247
291
 
248
292
  ### `research(predmet)`
293
+
249
294
  Začne výskum určitého predmetu.
250
295
 
251
296
  ```ruby
@@ -254,6 +299,7 @@ research(item)
254
299
  ```
255
300
 
256
301
  ### `get_research_progress`
302
+
257
303
  Zobrazí stav výskumu.
258
304
 
259
305
  ```ruby
@@ -262,6 +308,7 @@ say "Stav výskumu: #{progress}"
262
308
  ```
263
309
 
264
310
  ### `get_recipes`
311
+
265
312
  Zobrazí všetky dostupné recepty.
266
313
 
267
314
  ```ruby
@@ -270,6 +317,7 @@ say "Recepty: #{recipes}"
270
317
  ```
271
318
 
272
319
  ### `scrap(predmet)`
320
+
273
321
  Rozloží predmet na materiály.
274
322
 
275
323
  ```ruby
@@ -279,6 +327,7 @@ scrap("iron_sword")
279
327
  ## 🧩 Výzvy a algoritmy
280
328
 
281
329
  ### `interact`
330
+
282
331
  Interaguje s objektami vo svete, môže spustiť algoritmickú úlohu.
283
332
 
284
333
  ```ruby
@@ -291,6 +340,7 @@ end
291
340
  ```
292
341
 
293
342
  ### `algo(id, input)`
343
+
294
344
  Rieši algoritmické úlohy. Musíš implementovať logiku pre rôzne typy úloh.
295
345
 
296
346
  ```ruby
@@ -305,6 +355,45 @@ def algo(id, input)
305
355
  end
306
356
  ```
307
357
 
358
+ ## 🤝 Obchody
359
+
360
+ ### `create_trade_offer(remaining, inputs, outputs)`
361
+
362
+ Vytvorí obchod.
363
+
364
+ ```ruby
365
+ remaining = ask("remaining: ").to_i
366
+ inputs = ask("inputs: ").split(" ")
367
+ outputs = ask("outputs: ").split(" ")
368
+ say create_trade_offer(remaining, inputs, outputs)
369
+ ```
370
+
371
+ ### `accept_trade_offer(id)`
372
+
373
+ Prijme obchod.
374
+
375
+ ```ruby
376
+ offer = ask("offer: ")
377
+ accept_trade_offer(offer)
378
+ ```
379
+
380
+ ### `cancel_trade_offer(id)`
381
+
382
+ Zruší obchod.
383
+
384
+ ```ruby
385
+ offer = ask("offer: ")
386
+ cancel_trade_offer(offer)
387
+ ```
388
+
389
+ ### `list_trade_offers`
390
+
391
+ Vráti všetky obchody.
392
+
393
+ ```ruby
394
+ say list_trade_offers.inspect
395
+ ```
396
+
308
397
  ## 💡 Kompletný príklad
309
398
 
310
399
  ```ruby
@@ -319,10 +408,10 @@ end
319
408
  def brain
320
409
  loop do
321
410
  key = keypress
322
-
411
+
323
412
  case key
324
413
  when 'w' then move_forward
325
- when 's' then move_backward
414
+ when 's' then move_backward
326
415
  when 'a' then turn_left
327
416
  when 'd' then turn_right
328
417
  when 'j' then attack
@@ -376,5 +465,6 @@ end
376
465
  3. **Používaj `say`** - vypisuj si informácie, aby si videl, co sa deje
377
466
  4. **Experimentuj** - skúšaj rôzne kombinácie príkazov
378
467
  5. **Pozri sa na sample** - monster.rb.sample obsahuje dobrý príklad
468
+ 6. **Vypíš si error_message** - všetky akcie(equip_item, unequip_item, craft, research, scrap, consume_item, storage_tranfser) vracajú string error_message
379
469
 
380
- Veľa zábavy s programovaním svojej príšerky! 🚀
470
+ Veľa zábavy s programovaním svojej príšerky! 🚀
@@ -61,7 +61,7 @@ module Ledmon::CLI
61
61
  end
62
62
  end
63
63
 
64
- desc 'docs', 'Generate and open API documentation in browser'
64
+ desc 'docs', 'Generate and serve API documentation on localhost'
65
65
 
66
66
  def docs
67
67
  say "Generating API documentation ...", :yellow
@@ -80,21 +80,45 @@ module Ledmon::CLI
80
80
  # Convert to HTML
81
81
  html_content = markdown_to_html(markdown_content)
82
82
 
83
- # Create temporary HTML file
84
- require 'tempfile'
85
- Tempfile.create(%w[ledmon-docs .html]) do |temp_file|
86
- temp_file.write(html_content)
87
- temp_file.close
83
+ # Start simple web server
84
+ require 'webrick'
88
85
 
89
- say "Opening documentation in browser ...", :green
86
+ port = 31337
87
+ server = WEBrick::HTTPServer.new(Port: port, Logger: WEBrick::Log.new('/dev/null'))
90
88
 
91
- # Open in default browser using launchy
92
- require 'launchy'
93
- Launchy.open("file://#{temp_file.path}")
89
+ server.mount_proc '/docs' do |req, res|
90
+ res.content_type = 'text/html'
91
+ res.body = html_content
92
+ end
93
+
94
+ say "Documentation server started at http://localhost:#{port}/docs", :green
95
+
96
+ # Start server in background thread
97
+ server_thread = Thread.new { server.start }
94
98
 
95
- say "Documentation opened! Press any key to continue ...", :cyan
96
- STDIN.getch rescue nil
99
+ # Give server a moment to start
100
+ sleep 1
101
+
102
+ # Open in browser
103
+ require 'launchy'
104
+ Launchy.open("http://localhost:#{port}/docs") do |error|
105
+ if RbConfig::CONFIG['host_os'] == 'linux' && %x[uname -a] =~ /WSL/
106
+ ENV['BROWSER'] = 'cmd.exe /c start'
107
+ Launchy.open("http://localhost:#{port}/docs")
108
+ else
109
+ say_error "Failed to open browser automatically: #{error.message}", :red
110
+ end
97
111
  end
112
+
113
+ say "Press any key to stop the server ...", :cyan
114
+
115
+ # Wait for keypress
116
+ STDIN.getch rescue nil
117
+
118
+ # Stop server
119
+ server.shutdown
120
+ server_thread.join
121
+ say "Documentation server stopped", :yellow
98
122
  rescue Ledmon::Error => e
99
123
  say_error e.message, :red
100
124
  exit 1
@@ -139,7 +163,7 @@ module Ledmon::CLI
139
163
  <html>
140
164
  <head>
141
165
  <meta charset="utf-8">
142
- <title>Ledmon API Documentation</title>
166
+ <title>Ledmon API Documentation - ledmon gem #{Ledmon::VERSION}</title>
143
167
  <style>
144
168
  body { font-family: Arial, sans-serif; max-width: 800px; margin: 0 auto; padding: 20px; line-height: 1.6; }
145
169
  h1, h2, h3 { color: #333; }
@@ -93,6 +93,22 @@ module Ledmon::Monster
93
93
  client.storage_list(Ledmon::Empty.new).items.to_a
94
94
  end
95
95
 
96
+ def list_trade_offers
97
+ client.list_trade_offers(Ledmon::Empty.new)
98
+ end
99
+
100
+ def create_trade_offer(remaining, inputs, outputs)
101
+ client.create_trade_offer(Ledmon::TradeOffer.new(remaining:, inputs:, outputs:)).id
102
+ end
103
+
104
+ def cancel_trade_offer(id)
105
+ client.cancel_trade_offer(Ledmon::TradeOfferId.new(id:))
106
+ end
107
+
108
+ def accept_trade_offer(id)
109
+ client.accept_trade_offer(Ledmon::TradeOfferId.new(id:))
110
+ end
111
+
96
112
  def consume_item(item)
97
113
  client.consume_item(Ledmon::ItemInfo.new(item:))
98
114
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Ledmon
4
- VERSION = "0.1.10"
4
+ VERSION = "0.1.13"
5
5
  end
@@ -5,7 +5,7 @@
5
5
  require 'google/protobuf'
6
6
 
7
7
 
8
- descriptor_data = "\n\x0bworld.proto\x12\x06ledmon\"\x07\n\x05\x45mpty\"\x84\x01\n\x07MapInfo\x12\r\n\x05width\x18\x01 \x01(\x05\x12\x0e\n\x06height\x18\x02 \x01(\x05\x12\x10\n\x08tilesize\x18\x03 \x01(\x05\x12\x0f\n\x07spawn_x\x18\x04 \x01(\x05\x12\x0f\n\x07spawn_y\x18\x05 \x01(\x05\x12\x13\n\x0b\x66og_enabled\x18\x06 \x01(\x08\x12\x11\n\tmap_image\x18\x07 \x01(\t\"\'\n\tEquipInfo\x12\x0c\n\x04item\x18\x01 \x01(\t\x12\x0c\n\x04slot\x18\x02 \x01(\t\"\x1b\n\x0bUnequipInfo\x12\x0c\n\x04slot\x18\x01 \x01(\t\"\x1c\n\tPingReply\x12\x0f\n\x07message\x18\x01 \x01(\t\"0\n\x0eSessionRequest\x12\r\n\x05token\x18\x01 \x01(\t\x12\x0f\n\x07\x61vatars\x18\x02 \x03(\t\"\x1d\n\x0b\x41vatarIndex\x12\x0e\n\x06\x61vatar\x18\x01 \x01(\x05\"\x81\x01\n\x0cSessionReply\x12%\n\x06status\x18\x01 \x01(\x0e\x32\x15.ledmon.SessionStatus\x12\x0c\n\x04name\x18\x02 \x01(\t\x12/\n\x08movement\x18\x03 \x01(\x0b\x32\x18.ledmon.MovementResponseH\x00\x88\x01\x01\x42\x0b\n\t_movement\"F\n\nStateReply\x12\x12\n\x05state\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x11\n\x04\x64iff\x18\x02 \x01(\tH\x01\x88\x01\x01\x42\x08\n\x06_stateB\x07\n\x05_diff\" \n\x08Position\x12\t\n\x01x\x18\x01 \x01(\x05\x12\t\n\x01y\x18\x02 \x01(\x05\"\xa6\x01\n\x10MovementResponse\x12&\n\x06result\x18\x01 \x01(\x0e\x32\x16.ledmon.MovementResult\x12\'\n\x08position\x18\x02 \x01(\x0b\x32\x10.ledmon.PositionH\x00\x88\x01\x01\x12\x12\n\nsleep_time\x18\x03 \x01(\x02\x12\x14\n\x07heading\x18\x04 \x01(\tH\x01\x88\x01\x01\x42\x0b\n\t_positionB\n\n\x08_heading\"~\n\x12InteractionRequest\x12\x30\n\x06\x61\x63tion\x18\x01 \x01(\x0e\x32 .ledmon.InteractionRequestAction\x12\x1f\n\x12\x63hallenge_response\x18\x02 \x01(\tH\x00\x88\x01\x01\x42\x15\n\x13_challenge_response\"\xa6\x01\n\x13InteractionResponse\x12\x31\n\x06\x61\x63tion\x18\x01 \x01(\x0e\x32!.ledmon.InteractionResponseAction\x12\x19\n\x0c\x63hallenge_id\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x1c\n\x0f\x63hallenge_input\x18\x03 \x01(\tH\x01\x88\x01\x01\x42\x0f\n\r_challenge_idB\x12\n\x10_challenge_input\"\x89\x01\n\rInventoryData\x12\r\n\x05items\x18\x01 \x03(\t\x12\x37\n\tequipment\x18\x02 \x03(\x0b\x32$.ledmon.InventoryData.EquipmentEntry\x1a\x30\n\x0e\x45quipmentEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\x1b\n\tCraftData\x12\x0e\n\x06recipe\x18\x01 \x01(\t\"\x18\n\x08ItemInfo\x12\x0c\n\x04item\x18\x01 \x01(\t\"\x1d\n\x0bHealthCount\x12\x0e\n\x06health\x18\x01 \x01(\x02\"J\n\x0e\x41\x63tionResponse\x12$\n\x06result\x18\x01 \x01(\x0e\x32\x14.ledmon.ActionResult\x12\x12\n\nsleep_time\x18\x02 \x01(\x02\"U\n\x0cLookResponse\x12\x1f\n\x05tiles\x18\x01 \x03(\x0b\x32\x10.ledmon.LookTile\x12\x10\n\x08\x64istance\x18\x02 \x01(\x05\x12\x12\n\nsleep_time\x18\x03 \x01(\x02\"\x80\x01\n\x08LookTile\x12\x10\n\x08walkable\x18\x01 \x01(\x08\x12\x14\n\x07station\x18\x02 \x01(\tH\x00\x88\x01\x01\x12$\n\x08\x65ntities\x18\x03 \x03(\x0b\x32\x12.ledmon.LookEntity\x12\x11\n\x04zone\x18\x04 \x01(\tH\x01\x88\x01\x01\x42\n\n\x08_stationB\x07\n\x05_zone\"O\n\nLookEntity\x12\n\n\x02id\x18\x01 \x01(\t\x12\"\n\x08position\x18\x02 \x01(\x0b\x32\x10.ledmon.Position\x12\x11\n\tequipment\x18\x03 \x03(\t\"G\n\x13StorageTransferData\x12\x0c\n\x04item\x18\x01 \x01(\t\x12\"\n\x04mode\x18\x02 \x01(\x0e\x32\x14.ledmon.TransferMode\"\x1c\n\x0bStorageData\x12\r\n\x05items\x18\x01 \x03(\t\"}\n\x10ResearchProgress\x12\x38\n\x08progress\x18\x01 \x03(\x0b\x32&.ledmon.ResearchProgress.ProgressEntry\x1a/\n\rProgressEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x02:\x02\x38\x01\".\n\x0bRecipesData\x12\x1f\n\x07recipes\x18\x01 \x03(\x0b\x32\x0e.ledmon.Recipe\"<\n\x06Recipe\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x13\n\x0bingredients\x18\x04 \x03(\t\x12\x10\n\x08products\x18\x05 \x03(\t\"\x94\x01\n\x0eTradeOfferList\x12\x32\n\x06offers\x18\x01 \x03(\x0b\x32\".ledmon.TradeOfferList.OffersEntry\x12\x0b\n\x03own\x18\x02 \x03(\t\x1a\x41\n\x0bOffersEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12!\n\x05value\x18\x02 \x01(\x0b\x32\x12.ledmon.TradeOffer:\x02\x38\x01\"@\n\nTradeOffer\x12\x0e\n\x06inputs\x18\x01 \x03(\t\x12\x0f\n\x07outputs\x18\x02 \x03(\t\x12\x11\n\tremaining\x18\x03 \x01(\x05\"\x1a\n\x0cTradeOfferId\x12\n\n\x02id\x18\x01 \x01(\t\"\"\n\x12\x43onsumableDuration\x12\x0c\n\x04time\x18\x01 \x01(\x02\"\x1e\n\x0eScoreboardData\x12\x0c\n\x04\x64\x61ta\x18\x01 \x01(\t*I\n\rSessionStatus\x12\x0b\n\x07STARTED\x10\x00\x12\x0c\n\x08\x46INISHED\x10\x01\x12\x11\n\rINVALID_TOKEN\x10\x02\x12\n\n\x06\x44\x45NIED\x10\x03*%\n\x0eMovementResult\x12\x06\n\x02OK\x10\x00\x12\x0b\n\x07\x42LOCKED\x10\x01*;\n\x18InteractionRequestAction\x12\t\n\x05START\x10\x00\x12\x14\n\x10SUBMIT_CHALLENGE\x10\x01*D\n\x19InteractionResponseAction\x12\x0b\n\x07SUCCESS\x10\x00\x12\x0b\n\x07\x46\x41ILURE\x10\x01\x12\r\n\tCHALLENGE\x10\x02**\n\x0c\x41\x63tionResult\x12\x0e\n\nSUCCESSFUL\x10\x00\x12\n\n\x06\x46\x41ILED\x10\x01*%\n\x0cTransferMode\x12\x08\n\x04TAKE\x10\x00\x12\x0b\n\x07\x44\x45POSIT\x10\x01\x32\xa2\x0f\n\x05World\x12*\n\x04Ping\x12\r.ledmon.Empty\x1a\x11.ledmon.PingReply\"\x00\x12\x32\n\nPingStream\x12\r.ledmon.Empty\x1a\x11.ledmon.PingReply\"\x00\x30\x01\x12.\n\nGetMapInfo\x12\r.ledmon.Empty\x1a\x0f.ledmon.MapInfo\"\x00\x12;\n\x07Session\x12\x16.ledmon.SessionRequest\x1a\x14.ledmon.SessionReply\"\x00\x30\x01\x12+\n\tKeepAlive\x12\r.ledmon.Empty\x1a\r.ledmon.Empty\"\x00\x12/\n\x08GetState\x12\r.ledmon.Empty\x1a\x12.ledmon.StateReply\"\x00\x12\x37\n\x0eGetStateStream\x12\r.ledmon.Empty\x1a\x12.ledmon.StateReply\"\x00\x30\x01\x12\x38\n\rGetScoreboard\x12\r.ledmon.Empty\x1a\x16.ledmon.ScoreboardData\"\x00\x12\x38\n\x0bMoveForward\x12\r.ledmon.Empty\x1a\x18.ledmon.MovementResponse\"\x00\x12\x39\n\x0cMoveBackward\x12\r.ledmon.Empty\x1a\x18.ledmon.MovementResponse\"\x00\x12\x35\n\x08TurnLeft\x12\r.ledmon.Empty\x1a\x18.ledmon.MovementResponse\"\x00\x12\x36\n\tTurnRight\x12\r.ledmon.Empty\x1a\x18.ledmon.MovementResponse\"\x00\x12\x37\n\nTurnAround\x12\r.ledmon.Empty\x1a\x18.ledmon.MovementResponse\"\x00\x12I\n\x08Interact\x12\x1a.ledmon.InteractionRequest\x1a\x1b.ledmon.InteractionResponse\"\x00(\x01\x30\x01\x12\x34\n\x05\x43raft\x12\x11.ledmon.CraftData\x1a\x16.ledmon.ActionResponse\"\x00\x12H\n\x0fStorageTransfer\x12\x1b.ledmon.StorageTransferData\x1a\x16.ledmon.ActionResponse\"\x00\x12\x33\n\x0bStorageList\x12\r.ledmon.Empty\x1a\x13.ledmon.StorageData\"\x00\x12\x36\n\x08Research\x12\x10.ledmon.ItemInfo\x1a\x16.ledmon.ActionResponse\"\x00\x12\x33\n\x05Scrap\x12\x10.ledmon.ItemInfo\x1a\x16.ledmon.ActionResponse\"\x00\x12@\n\x13GetResearchProgress\x12\r.ledmon.Empty\x1a\x18.ledmon.ResearchProgress\"\x00\x12\x32\n\nGetRecipes\x12\r.ledmon.Empty\x1a\x13.ledmon.RecipesData\"\x00\x12:\n\x0fListTradeOffers\x12\r.ledmon.Empty\x1a\x16.ledmon.TradeOfferList\"\x00\x12>\n\x10\x43reateTradeOffer\x12\x12.ledmon.TradeOffer\x1a\x14.ledmon.TradeOfferId\"\x00\x12\x42\n\x10\x41\x63\x63\x65ptTradeOffer\x12\x14.ledmon.TradeOfferId\x1a\x16.ledmon.ActionResponse\"\x00\x12\x39\n\x10\x43\x61ncelTradeOffer\x12\x14.ledmon.TradeOfferId\x1a\r.ledmon.Empty\"\x00\x12\x31\n\tSetAvatar\x12\x13.ledmon.AvatarIndex\x1a\r.ledmon.Empty\"\x00\x12\x36\n\x0cGetInventory\x12\r.ledmon.Empty\x1a\x15.ledmon.InventoryData\"\x00\x12\x38\n\tEquipItem\x12\x11.ledmon.EquipInfo\x1a\x16.ledmon.ActionResponse\"\x00\x12<\n\x0bUnequipItem\x12\x13.ledmon.UnequipInfo\x1a\x16.ledmon.ActionResponse\"\x00\x12\x31\n\tGetHealth\x12\r.ledmon.Empty\x1a\x13.ledmon.HealthCount\"\x00\x12\x31\n\x06\x41ttack\x12\r.ledmon.Empty\x1a\x16.ledmon.ActionResponse\"\x00\x12\x39\n\x0b\x43onsumeItem\x12\x10.ledmon.ItemInfo\x1a\x16.ledmon.ActionResponse\"\x00\x12M\n\x1eGetRemainingConsumableDuration\x12\r.ledmon.Empty\x1a\x1a.ledmon.ConsumableDuration\"\x00\x12-\n\x04Look\x12\r.ledmon.Empty\x1a\x14.ledmon.LookResponse\"\x00\x62\x06proto3"
8
+ descriptor_data = "\n\x0bworld.proto\x12\x06ledmon\"\x07\n\x05\x45mpty\"\x84\x01\n\x07MapInfo\x12\r\n\x05width\x18\x01 \x01(\x05\x12\x0e\n\x06height\x18\x02 \x01(\x05\x12\x10\n\x08tilesize\x18\x03 \x01(\x05\x12\x0f\n\x07spawn_x\x18\x04 \x01(\x05\x12\x0f\n\x07spawn_y\x18\x05 \x01(\x05\x12\x13\n\x0b\x66og_enabled\x18\x06 \x01(\x08\x12\x11\n\tmap_image\x18\x07 \x01(\t\"\'\n\tEquipInfo\x12\x0c\n\x04item\x18\x01 \x01(\t\x12\x0c\n\x04slot\x18\x02 \x01(\t\"\x1b\n\x0bUnequipInfo\x12\x0c\n\x04slot\x18\x01 \x01(\t\"\x1c\n\tPingReply\x12\x0f\n\x07message\x18\x01 \x01(\t\"0\n\x0eSessionRequest\x12\r\n\x05token\x18\x01 \x01(\t\x12\x0f\n\x07\x61vatars\x18\x02 \x03(\t\"\x1d\n\x0b\x41vatarIndex\x12\x0e\n\x06\x61vatar\x18\x01 \x01(\x05\"\x81\x01\n\x0cSessionReply\x12%\n\x06status\x18\x01 \x01(\x0e\x32\x15.ledmon.SessionStatus\x12\x0c\n\x04name\x18\x02 \x01(\t\x12/\n\x08movement\x18\x03 \x01(\x0b\x32\x18.ledmon.MovementResponseH\x00\x88\x01\x01\x42\x0b\n\t_movement\"F\n\nStateReply\x12\x12\n\x05state\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x11\n\x04\x64iff\x18\x02 \x01(\tH\x01\x88\x01\x01\x42\x08\n\x06_stateB\x07\n\x05_diff\" \n\x08Position\x12\t\n\x01x\x18\x01 \x01(\x05\x12\t\n\x01y\x18\x02 \x01(\x05\"\xa6\x01\n\x10MovementResponse\x12&\n\x06result\x18\x01 \x01(\x0e\x32\x16.ledmon.MovementResult\x12\'\n\x08position\x18\x02 \x01(\x0b\x32\x10.ledmon.PositionH\x00\x88\x01\x01\x12\x12\n\nsleep_time\x18\x03 \x01(\x02\x12\x14\n\x07heading\x18\x04 \x01(\tH\x01\x88\x01\x01\x42\x0b\n\t_positionB\n\n\x08_heading\"~\n\x12InteractionRequest\x12\x30\n\x06\x61\x63tion\x18\x01 \x01(\x0e\x32 .ledmon.InteractionRequestAction\x12\x1f\n\x12\x63hallenge_response\x18\x02 \x01(\tH\x00\x88\x01\x01\x42\x15\n\x13_challenge_response\"\xa6\x01\n\x13InteractionResponse\x12\x31\n\x06\x61\x63tion\x18\x01 \x01(\x0e\x32!.ledmon.InteractionResponseAction\x12\x19\n\x0c\x63hallenge_id\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x1c\n\x0f\x63hallenge_input\x18\x03 \x01(\tH\x01\x88\x01\x01\x42\x0f\n\r_challenge_idB\x12\n\x10_challenge_input\"\x89\x01\n\rInventoryData\x12\r\n\x05items\x18\x01 \x03(\t\x12\x37\n\tequipment\x18\x02 \x03(\x0b\x32$.ledmon.InventoryData.EquipmentEntry\x1a\x30\n\x0e\x45quipmentEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\x1b\n\tCraftData\x12\x0e\n\x06recipe\x18\x01 \x01(\t\"\x18\n\x08ItemInfo\x12\x0c\n\x04item\x18\x01 \x01(\t\"\x1d\n\x0bHealthCount\x12\x0e\n\x06health\x18\x01 \x01(\x02\"a\n\x0e\x41\x63tionResponse\x12$\n\x06result\x18\x01 \x01(\x0e\x32\x14.ledmon.ActionResult\x12\x12\n\nsleep_time\x18\x02 \x01(\x02\x12\x15\n\rerror_message\x18\x03 \x01(\t\"U\n\x0cLookResponse\x12\x1f\n\x05tiles\x18\x01 \x03(\x0b\x32\x10.ledmon.LookTile\x12\x10\n\x08\x64istance\x18\x02 \x01(\x05\x12\x12\n\nsleep_time\x18\x03 \x01(\x02\"\x80\x01\n\x08LookTile\x12\x10\n\x08walkable\x18\x01 \x01(\x08\x12\x14\n\x07station\x18\x02 \x01(\tH\x00\x88\x01\x01\x12$\n\x08\x65ntities\x18\x03 \x03(\x0b\x32\x12.ledmon.LookEntity\x12\x11\n\x04zone\x18\x04 \x01(\tH\x01\x88\x01\x01\x42\n\n\x08_stationB\x07\n\x05_zone\"O\n\nLookEntity\x12\n\n\x02id\x18\x01 \x01(\t\x12\"\n\x08position\x18\x02 \x01(\x0b\x32\x10.ledmon.Position\x12\x11\n\tequipment\x18\x03 \x03(\t\"G\n\x13StorageTransferData\x12\x0c\n\x04item\x18\x01 \x01(\t\x12\"\n\x04mode\x18\x02 \x01(\x0e\x32\x14.ledmon.TransferMode\"\x1c\n\x0bStorageData\x12\r\n\x05items\x18\x01 \x03(\t\"}\n\x10ResearchProgress\x12\x38\n\x08progress\x18\x01 \x03(\x0b\x32&.ledmon.ResearchProgress.ProgressEntry\x1a/\n\rProgressEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x02:\x02\x38\x01\".\n\x0bRecipesData\x12\x1f\n\x07recipes\x18\x01 \x03(\x0b\x32\x0e.ledmon.Recipe\"<\n\x06Recipe\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x13\n\x0bingredients\x18\x04 \x03(\t\x12\x10\n\x08products\x18\x05 \x03(\t\"\x94\x01\n\x0eTradeOfferList\x12\x32\n\x06offers\x18\x01 \x03(\x0b\x32\".ledmon.TradeOfferList.OffersEntry\x12\x0b\n\x03own\x18\x02 \x03(\t\x1a\x41\n\x0bOffersEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12!\n\x05value\x18\x02 \x01(\x0b\x32\x12.ledmon.TradeOffer:\x02\x38\x01\"@\n\nTradeOffer\x12\x0e\n\x06inputs\x18\x01 \x03(\t\x12\x0f\n\x07outputs\x18\x02 \x03(\t\x12\x11\n\tremaining\x18\x03 \x01(\x05\"\x1a\n\x0cTradeOfferId\x12\n\n\x02id\x18\x01 \x01(\t\"\"\n\x12\x43onsumableDuration\x12\x0c\n\x04time\x18\x01 \x01(\x02\"\x1e\n\x0eScoreboardData\x12\x0c\n\x04\x64\x61ta\x18\x01 \x01(\t*I\n\rSessionStatus\x12\x0b\n\x07STARTED\x10\x00\x12\x0c\n\x08\x46INISHED\x10\x01\x12\x11\n\rINVALID_TOKEN\x10\x02\x12\n\n\x06\x44\x45NIED\x10\x03*%\n\x0eMovementResult\x12\x06\n\x02OK\x10\x00\x12\x0b\n\x07\x42LOCKED\x10\x01*;\n\x18InteractionRequestAction\x12\t\n\x05START\x10\x00\x12\x14\n\x10SUBMIT_CHALLENGE\x10\x01*D\n\x19InteractionResponseAction\x12\x0b\n\x07SUCCESS\x10\x00\x12\x0b\n\x07\x46\x41ILURE\x10\x01\x12\r\n\tCHALLENGE\x10\x02**\n\x0c\x41\x63tionResult\x12\x0e\n\nSUCCESSFUL\x10\x00\x12\n\n\x06\x46\x41ILED\x10\x01*%\n\x0cTransferMode\x12\x08\n\x04TAKE\x10\x00\x12\x0b\n\x07\x44\x45POSIT\x10\x01\x32\xa2\x0f\n\x05World\x12*\n\x04Ping\x12\r.ledmon.Empty\x1a\x11.ledmon.PingReply\"\x00\x12\x32\n\nPingStream\x12\r.ledmon.Empty\x1a\x11.ledmon.PingReply\"\x00\x30\x01\x12.\n\nGetMapInfo\x12\r.ledmon.Empty\x1a\x0f.ledmon.MapInfo\"\x00\x12;\n\x07Session\x12\x16.ledmon.SessionRequest\x1a\x14.ledmon.SessionReply\"\x00\x30\x01\x12+\n\tKeepAlive\x12\r.ledmon.Empty\x1a\r.ledmon.Empty\"\x00\x12/\n\x08GetState\x12\r.ledmon.Empty\x1a\x12.ledmon.StateReply\"\x00\x12\x37\n\x0eGetStateStream\x12\r.ledmon.Empty\x1a\x12.ledmon.StateReply\"\x00\x30\x01\x12\x38\n\rGetScoreboard\x12\r.ledmon.Empty\x1a\x16.ledmon.ScoreboardData\"\x00\x12\x38\n\x0bMoveForward\x12\r.ledmon.Empty\x1a\x18.ledmon.MovementResponse\"\x00\x12\x39\n\x0cMoveBackward\x12\r.ledmon.Empty\x1a\x18.ledmon.MovementResponse\"\x00\x12\x35\n\x08TurnLeft\x12\r.ledmon.Empty\x1a\x18.ledmon.MovementResponse\"\x00\x12\x36\n\tTurnRight\x12\r.ledmon.Empty\x1a\x18.ledmon.MovementResponse\"\x00\x12\x37\n\nTurnAround\x12\r.ledmon.Empty\x1a\x18.ledmon.MovementResponse\"\x00\x12I\n\x08Interact\x12\x1a.ledmon.InteractionRequest\x1a\x1b.ledmon.InteractionResponse\"\x00(\x01\x30\x01\x12\x34\n\x05\x43raft\x12\x11.ledmon.CraftData\x1a\x16.ledmon.ActionResponse\"\x00\x12H\n\x0fStorageTransfer\x12\x1b.ledmon.StorageTransferData\x1a\x16.ledmon.ActionResponse\"\x00\x12\x33\n\x0bStorageList\x12\r.ledmon.Empty\x1a\x13.ledmon.StorageData\"\x00\x12\x36\n\x08Research\x12\x10.ledmon.ItemInfo\x1a\x16.ledmon.ActionResponse\"\x00\x12\x33\n\x05Scrap\x12\x10.ledmon.ItemInfo\x1a\x16.ledmon.ActionResponse\"\x00\x12@\n\x13GetResearchProgress\x12\r.ledmon.Empty\x1a\x18.ledmon.ResearchProgress\"\x00\x12\x32\n\nGetRecipes\x12\r.ledmon.Empty\x1a\x13.ledmon.RecipesData\"\x00\x12:\n\x0fListTradeOffers\x12\r.ledmon.Empty\x1a\x16.ledmon.TradeOfferList\"\x00\x12>\n\x10\x43reateTradeOffer\x12\x12.ledmon.TradeOffer\x1a\x14.ledmon.TradeOfferId\"\x00\x12\x42\n\x10\x41\x63\x63\x65ptTradeOffer\x12\x14.ledmon.TradeOfferId\x1a\x16.ledmon.ActionResponse\"\x00\x12\x39\n\x10\x43\x61ncelTradeOffer\x12\x14.ledmon.TradeOfferId\x1a\r.ledmon.Empty\"\x00\x12\x31\n\tSetAvatar\x12\x13.ledmon.AvatarIndex\x1a\r.ledmon.Empty\"\x00\x12\x36\n\x0cGetInventory\x12\r.ledmon.Empty\x1a\x15.ledmon.InventoryData\"\x00\x12\x38\n\tEquipItem\x12\x11.ledmon.EquipInfo\x1a\x16.ledmon.ActionResponse\"\x00\x12<\n\x0bUnequipItem\x12\x13.ledmon.UnequipInfo\x1a\x16.ledmon.ActionResponse\"\x00\x12\x31\n\tGetHealth\x12\r.ledmon.Empty\x1a\x13.ledmon.HealthCount\"\x00\x12\x31\n\x06\x41ttack\x12\r.ledmon.Empty\x1a\x16.ledmon.ActionResponse\"\x00\x12\x39\n\x0b\x43onsumeItem\x12\x10.ledmon.ItemInfo\x1a\x16.ledmon.ActionResponse\"\x00\x12M\n\x1eGetRemainingConsumableDuration\x12\r.ledmon.Empty\x1a\x1a.ledmon.ConsumableDuration\"\x00\x12-\n\x04Look\x12\r.ledmon.Empty\x1a\x14.ledmon.LookResponse\"\x00\x62\x06proto3"
9
9
 
10
10
  pool = ::Google::Protobuf::DescriptorPool.generated_pool
11
11
  pool.add_serialized_file(descriptor_data)
data/protos/world.proto CHANGED
@@ -168,6 +168,7 @@ enum ActionResult {
168
168
  message ActionResponse {
169
169
  ActionResult result = 1;
170
170
  float sleep_time = 2;
171
+ string error_message = 3;
171
172
  }
172
173
 
173
174
  message LookResponse{
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ledmon
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.10
4
+ version: 0.1.13
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ahmed Al Hafoudh
@@ -191,6 +191,20 @@ dependencies:
191
191
  - - "~>"
192
192
  - !ruby/object:Gem::Version
193
193
  version: '3.1'
194
+ - !ruby/object:Gem::Dependency
195
+ name: webrick
196
+ requirement: !ruby/object:Gem::Requirement
197
+ requirements:
198
+ - - "~>"
199
+ - !ruby/object:Gem::Version
200
+ version: '1.9'
201
+ type: :runtime
202
+ prerelease: false
203
+ version_requirements: !ruby/object:Gem::Requirement
204
+ requirements:
205
+ - - "~>"
206
+ - !ruby/object:Gem::Version
207
+ version: '1.9'
194
208
  - !ruby/object:Gem::Dependency
195
209
  name: grpc-tools
196
210
  requirement: !ruby/object:Gem::Requirement