ledmon 0.1.2 → 0.1.5
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 +4 -4
- data/Rakefile +1 -5
- data/lib/ledmon/cli/config.rb +9 -0
- data/lib/ledmon/cli/monster.rb +24 -2
- data/lib/ledmon/monster/deployer.rb +48 -16
- data/lib/ledmon/monster/interaction.rb +16 -2
- data/lib/ledmon/version.rb +1 -1
- data/lib/ledmon/world_pb.rb +5 -2
- data/lib/ledmon/world_services_pb.rb +3 -1
- data/monster.rb.sample +14 -6
- data/protos/world.proto +27 -3
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f486209c9291a52c22d5ac6259658baf6f8f2b77e7609e7099580e8eb0004e80
|
4
|
+
data.tar.gz: dad85796e2f2cad916be6aee797ec476f511fdb903e6e5900261ef0a32af8692
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5023ce4213973a097829916d135a60d12f6f961eb21b350f8b4599c903b7713045d6c64225f84bf464a40091ac30b77af7ae931985bc6ead6790fb726a512d87
|
7
|
+
data.tar.gz: 3c9b8c78c402634ff1c6d7e5349317bef2d9a8210d4255906f0dd44810ff0ef1b2f47df96e0c847981c8a55f7028aeb0fe6cca388df3535c2c1179b0aa5a2334
|
data/Rakefile
CHANGED
data/lib/ledmon/cli/config.rb
CHANGED
@@ -25,5 +25,14 @@ module Ledmon::CLI
|
|
25
25
|
config_value :auth
|
26
26
|
config_value :mode
|
27
27
|
config_value :log_level
|
28
|
+
|
29
|
+
desc "show", "Show current configuration"
|
30
|
+
|
31
|
+
def show
|
32
|
+
%i[host grpc_port http_port http_proto auth mode log_level].each do |name|
|
33
|
+
value = Ledmon::Config.public_send(name)
|
34
|
+
puts "#{name}: #{value}"
|
35
|
+
end
|
36
|
+
end
|
28
37
|
end
|
29
38
|
end
|
data/lib/ledmon/cli/monster.rb
CHANGED
@@ -19,10 +19,10 @@ module Ledmon::CLI
|
|
19
19
|
def deploy
|
20
20
|
packer = Ledmon::Monster::Packer.new(path: Dir.pwd)
|
21
21
|
packer.pack! do |bundle_path|
|
22
|
-
deployer = Ledmon::Monster::Deployer.new
|
22
|
+
deployer = Ledmon::Monster::Deployer.new
|
23
23
|
say "Uploading packed file ...", :yellow
|
24
24
|
|
25
|
-
deployer.deploy! do |json_data|
|
25
|
+
deployer.deploy!(bundle_path:) do |json_data|
|
26
26
|
if json_data['message']
|
27
27
|
say json_data['message'], :cyan
|
28
28
|
elsif json_data['error']
|
@@ -38,5 +38,27 @@ module Ledmon::CLI
|
|
38
38
|
say_error e.message, :red
|
39
39
|
exit 1
|
40
40
|
end
|
41
|
+
|
42
|
+
desc 'logs', 'Fetch logs from the deployed monster'
|
43
|
+
|
44
|
+
def logs
|
45
|
+
say "Fetching logs from the deployed monster ...", :yellow
|
46
|
+
|
47
|
+
deployer = Ledmon::Monster::Deployer.new
|
48
|
+
deployer.logs do |json_data|
|
49
|
+
case json_data['stream']
|
50
|
+
when 'stdout'
|
51
|
+
say json_data['chunk'], :white
|
52
|
+
when 'stderr'
|
53
|
+
say_error json_data['chunk'], :red
|
54
|
+
else
|
55
|
+
if json_data.has_key?('chunk')
|
56
|
+
say json_data['chunk'], :white
|
57
|
+
else
|
58
|
+
say_error "Unknown log format: #{json_data.inspect}", :red
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
41
63
|
end
|
42
64
|
end
|
@@ -2,22 +2,11 @@
|
|
2
2
|
|
3
3
|
module Ledmon::Monster
|
4
4
|
class Deployer
|
5
|
-
|
6
|
-
|
7
|
-
def initialize(bundle_path:)
|
8
|
-
@bundle_path = bundle_path
|
9
|
-
end
|
10
|
-
|
11
|
-
def deploy!(&block)
|
5
|
+
def deploy!(bundle_path:, &block)
|
12
6
|
require 'http'
|
13
7
|
require 'json'
|
14
8
|
|
15
|
-
|
16
|
-
headers = {
|
17
|
-
'Authorization' => "Bearer #{Ledmon::Config.auth}",
|
18
|
-
}
|
19
|
-
|
20
|
-
response = HTTP.headers(headers).post(url, form: { file: HTTP::FormData::File.new(bundle_path) })
|
9
|
+
response = HTTP.headers(build_headers).post(build_upload_url, form: { file: HTTP::FormData::File.new(bundle_path) })
|
21
10
|
|
22
11
|
unless response.status.success?
|
23
12
|
raise Ledmon::Error, "Deploy failed with status: #{response.status}"
|
@@ -29,17 +18,56 @@ module Ledmon::Monster
|
|
29
18
|
|
30
19
|
while buffer.include?("\n")
|
31
20
|
line, buffer = buffer.split("\n", 2)
|
32
|
-
|
21
|
+
process_deploy_line(line, &block)
|
33
22
|
end
|
34
23
|
end
|
35
24
|
|
36
25
|
# Process any remaining data in buffer
|
37
|
-
|
26
|
+
process_deploy_line(buffer, &block) unless buffer.strip.empty?
|
27
|
+
end
|
28
|
+
|
29
|
+
def logs(&block)
|
30
|
+
response = HTTP.headers(build_headers).get(build_logs_url)
|
31
|
+
|
32
|
+
unless response.status.success?
|
33
|
+
raise Ledmon::Error, "Logs failed with status: #{response.status}"
|
34
|
+
end
|
35
|
+
|
36
|
+
buffer = ""
|
37
|
+
response.body.each do |chunk|
|
38
|
+
buffer += chunk
|
39
|
+
|
40
|
+
while buffer.include?("\n")
|
41
|
+
line, buffer = buffer.split("\n", 2)
|
42
|
+
process_log_line(line, &block)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
# Process any remaining data in buffer
|
47
|
+
process_log_line(buffer, &block) unless buffer.strip.empty?
|
38
48
|
end
|
39
49
|
|
40
50
|
private
|
41
51
|
|
42
|
-
def
|
52
|
+
def build_headers
|
53
|
+
{
|
54
|
+
'Authorization' => "Bearer #{Ledmon::Config.auth}",
|
55
|
+
}
|
56
|
+
end
|
57
|
+
|
58
|
+
def process_log_line(line, &block)
|
59
|
+
line = line.strip
|
60
|
+
return if line.empty?
|
61
|
+
|
62
|
+
begin
|
63
|
+
json_data = JSON.parse(line)
|
64
|
+
block&.call(json_data)
|
65
|
+
rescue JSON::ParserError
|
66
|
+
# Skip invalid JSON lines
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
def process_deploy_line(line, &block)
|
43
71
|
line = line.strip
|
44
72
|
return if line.empty?
|
45
73
|
|
@@ -54,5 +82,9 @@ module Ledmon::Monster
|
|
54
82
|
def build_upload_url
|
55
83
|
"#{Ledmon::Config.http_base_url}/deploys"
|
56
84
|
end
|
85
|
+
|
86
|
+
def build_logs_url
|
87
|
+
"#{Ledmon::Config.http_base_url}/deploys/logs"
|
88
|
+
end
|
57
89
|
end
|
58
90
|
end
|
@@ -40,7 +40,7 @@ module Ledmon::Monster
|
|
40
40
|
return true, last_challenge_response.challenge_id, last_challenge_response.challenge_input, last_challenge_algo_output
|
41
41
|
elsif response.action == :FAILURE
|
42
42
|
logger.debug("Challenge failed!")
|
43
|
-
return false, last_challenge_response
|
43
|
+
return false, last_challenge_response&.challenge_id, last_challenge_response&.challenge_input, last_challenge_algo_output
|
44
44
|
end
|
45
45
|
end
|
46
46
|
end
|
@@ -53,6 +53,10 @@ module Ledmon::Monster
|
|
53
53
|
client.research(Ledmon::ItemInfo.new(item:))
|
54
54
|
end
|
55
55
|
|
56
|
+
def scrap(item)
|
57
|
+
client.scrap(Ledmon::ItemInfo.new(item:))
|
58
|
+
end
|
59
|
+
|
56
60
|
def equip_item(item, slot)
|
57
61
|
client.equip_item(Ledmon::EquipInfo.new(item:, slot:))
|
58
62
|
end
|
@@ -74,7 +78,17 @@ module Ledmon::Monster
|
|
74
78
|
end
|
75
79
|
|
76
80
|
def look
|
77
|
-
client.look(Ledmon::Empty.new)
|
81
|
+
look_data = client.look(Ledmon::Empty.new)
|
82
|
+
tiles = []
|
83
|
+
for y in -look_data.distance..look_data.distance
|
84
|
+
tile_col = []
|
85
|
+
for x in -look_data.distance..look_data.distance
|
86
|
+
tile_col << look_data.tiles[(x+look_data.distance)+(y+look_data.distance)*(look_data.distance*2+1)]
|
87
|
+
end
|
88
|
+
tiles << tile_col
|
89
|
+
end
|
90
|
+
|
91
|
+
tiles
|
78
92
|
end
|
79
93
|
end
|
80
94
|
end
|
data/lib/ledmon/version.rb
CHANGED
data/lib/ledmon/world_pb.rb
CHANGED
@@ -5,13 +5,14 @@
|
|
5
5
|
require 'google/protobuf'
|
6
6
|
|
7
7
|
|
8
|
-
descriptor_data = "\n\x0bworld.proto\x12\x06ledmon\"\x07\n\x05\x45mpty\"\'\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\"/\n\x0eSessionRequest\x12\r\n\x05token\x18\x01 \x01(\t\x12\x0e\n\x06\x61vatar\x18\x02 \x01(\t\"C\n\x0cSessionReply\x12%\n\x06status\x18\x01 \x01(\x0e\x32\x15.ledmon.SessionStatus\x12\x0c\n\x04name\x18\x02 \x01(\t\"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\"\x84\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\x42\x0b\n\t_position\"~\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\"
|
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\"/\n\x0eSessionRequest\x12\r\n\x05token\x18\x01 \x01(\t\x12\x0e\n\x06\x61vatar\x18\x02 \x01(\t\"C\n\x0cSessionReply\x12%\n\x06status\x18\x01 \x01(\x0e\x32\x15.ledmon.SessionStatus\x12\x0c\n\x04name\x18\x02 \x01(\t\"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\"\x84\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\x42\x0b\n\t_position\"~\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(\x05:\x02\x38\x01\"\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*=\n\rSessionStatus\x12\x0b\n\x07STARTED\x10\x00\x12\x0c\n\x08\x46INISHED\x10\x01\x12\x11\n\rINVALID_TOKEN\x10\x02*%\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\xbb\x0e\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:\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\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
|
-
pool = Google::Protobuf::DescriptorPool.generated_pool
|
10
|
+
pool = ::Google::Protobuf::DescriptorPool.generated_pool
|
11
11
|
pool.add_serialized_file(descriptor_data)
|
12
12
|
|
13
13
|
module Ledmon
|
14
14
|
Empty = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("ledmon.Empty").msgclass
|
15
|
+
MapInfo = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("ledmon.MapInfo").msgclass
|
15
16
|
EquipInfo = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("ledmon.EquipInfo").msgclass
|
16
17
|
UnequipInfo = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("ledmon.UnequipInfo").msgclass
|
17
18
|
PingReply = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("ledmon.PingReply").msgclass
|
@@ -28,6 +29,7 @@ module Ledmon
|
|
28
29
|
HealthCount = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("ledmon.HealthCount").msgclass
|
29
30
|
ActionResponse = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("ledmon.ActionResponse").msgclass
|
30
31
|
LookResponse = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("ledmon.LookResponse").msgclass
|
32
|
+
LookTile = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("ledmon.LookTile").msgclass
|
31
33
|
LookEntity = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("ledmon.LookEntity").msgclass
|
32
34
|
StorageTransferData = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("ledmon.StorageTransferData").msgclass
|
33
35
|
StorageData = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("ledmon.StorageData").msgclass
|
@@ -36,6 +38,7 @@ module Ledmon
|
|
36
38
|
TradeOffer = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("ledmon.TradeOffer").msgclass
|
37
39
|
TradeOfferId = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("ledmon.TradeOfferId").msgclass
|
38
40
|
ConsumableDuration = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("ledmon.ConsumableDuration").msgclass
|
41
|
+
ScoreboardData = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("ledmon.ScoreboardData").msgclass
|
39
42
|
SessionStatus = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("ledmon.SessionStatus").enummodule
|
40
43
|
MovementResult = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("ledmon.MovementResult").enummodule
|
41
44
|
InteractionRequestAction = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("ledmon.InteractionRequestAction").enummodule
|
@@ -16,10 +16,12 @@ module Ledmon
|
|
16
16
|
|
17
17
|
rpc :Ping, ::Ledmon::Empty, ::Ledmon::PingReply
|
18
18
|
rpc :PingStream, ::Ledmon::Empty, stream(::Ledmon::PingReply)
|
19
|
+
rpc :GetMapInfo, ::Ledmon::Empty, ::Ledmon::MapInfo
|
19
20
|
rpc :Session, ::Ledmon::SessionRequest, stream(::Ledmon::SessionReply)
|
20
21
|
rpc :KeepAlive, ::Ledmon::Empty, ::Ledmon::Empty
|
21
22
|
rpc :GetState, ::Ledmon::Empty, ::Ledmon::StateReply
|
22
23
|
rpc :GetStateStream, ::Ledmon::Empty, stream(::Ledmon::StateReply)
|
24
|
+
rpc :GetScoreboard, ::Ledmon::Empty, ::Ledmon::ScoreboardData
|
23
25
|
rpc :MoveForward, ::Ledmon::Empty, ::Ledmon::MovementResponse
|
24
26
|
rpc :MoveBackward, ::Ledmon::Empty, ::Ledmon::MovementResponse
|
25
27
|
rpc :TurnLeft, ::Ledmon::Empty, ::Ledmon::MovementResponse
|
@@ -30,7 +32,7 @@ module Ledmon
|
|
30
32
|
rpc :StorageTransfer, ::Ledmon::StorageTransferData, ::Ledmon::ActionResponse
|
31
33
|
rpc :StorageList, ::Ledmon::Empty, ::Ledmon::StorageData
|
32
34
|
rpc :Research, ::Ledmon::ItemInfo, ::Ledmon::ActionResponse
|
33
|
-
rpc :
|
35
|
+
rpc :Scrap, ::Ledmon::ItemInfo, ::Ledmon::ActionResponse
|
34
36
|
rpc :GetResearchProgress, ::Ledmon::Empty, ::Ledmon::ResearchProgress
|
35
37
|
rpc :ListTradeOffers, ::Ledmon::Empty, ::Ledmon::TradeOfferList
|
36
38
|
rpc :CreateTradeOffer, ::Ledmon::TradeOffer, ::Ledmon::TradeOfferId
|
data/monster.rb.sample
CHANGED
@@ -1,7 +1,3 @@
|
|
1
|
-
def name
|
2
|
-
'ahmed'
|
3
|
-
end
|
4
|
-
|
5
1
|
def avatar
|
6
2
|
"@@@@@
|
7
3
|
@)))@
|
@@ -42,8 +38,20 @@ def brain
|
|
42
38
|
when 'j' then
|
43
39
|
attack
|
44
40
|
when 'l' then
|
45
|
-
|
46
|
-
|
41
|
+
tiles = look
|
42
|
+
|
43
|
+
for col in tiles
|
44
|
+
for tile in col
|
45
|
+
if tile.entities.size > 0 then
|
46
|
+
print "E "
|
47
|
+
elsif tile.walkable
|
48
|
+
print "_ "
|
49
|
+
else
|
50
|
+
print "O "
|
51
|
+
end
|
52
|
+
end
|
53
|
+
puts ""
|
54
|
+
end
|
47
55
|
else
|
48
56
|
nil
|
49
57
|
end
|
data/protos/world.proto
CHANGED
@@ -6,12 +6,16 @@ service World {
|
|
6
6
|
rpc Ping (Empty) returns (PingReply) {}
|
7
7
|
rpc PingStream (Empty) returns (stream PingReply) {}
|
8
8
|
|
9
|
+
rpc GetMapInfo (Empty) returns (MapInfo) {}
|
10
|
+
|
9
11
|
rpc Session (SessionRequest) returns (stream SessionReply) {}
|
10
12
|
rpc KeepAlive (Empty) returns (Empty) {}
|
11
13
|
|
12
14
|
rpc GetState (Empty) returns (StateReply) {}
|
13
15
|
rpc GetStateStream (Empty) returns (stream StateReply) {}
|
14
16
|
|
17
|
+
rpc GetScoreboard (Empty) returns (ScoreboardData) {}
|
18
|
+
|
15
19
|
rpc MoveForward (Empty) returns (MovementResponse) {}
|
16
20
|
rpc MoveBackward (Empty) returns (MovementResponse) {}
|
17
21
|
rpc TurnLeft (Empty) returns (MovementResponse) {}
|
@@ -23,7 +27,7 @@ service World {
|
|
23
27
|
rpc StorageTransfer (StorageTransferData) returns (ActionResponse) {}
|
24
28
|
rpc StorageList (Empty) returns (StorageData) {}
|
25
29
|
rpc Research (ItemInfo) returns (ActionResponse) {}
|
26
|
-
rpc
|
30
|
+
rpc Scrap (ItemInfo) returns (ActionResponse) {}
|
27
31
|
rpc GetResearchProgress (Empty) returns (ResearchProgress) {}
|
28
32
|
rpc ListTradeOffers (Empty) returns (TradeOfferList) {}
|
29
33
|
rpc CreateTradeOffer (TradeOffer) returns (TradeOfferId) {}
|
@@ -46,6 +50,16 @@ message Empty {
|
|
46
50
|
|
47
51
|
}
|
48
52
|
|
53
|
+
message MapInfo {
|
54
|
+
int32 width = 1;
|
55
|
+
int32 height = 2;
|
56
|
+
int32 tilesize = 3;
|
57
|
+
int32 spawn_x = 4;
|
58
|
+
int32 spawn_y = 5;
|
59
|
+
bool fog_enabled = 6;
|
60
|
+
string map_image = 7;
|
61
|
+
}
|
62
|
+
|
49
63
|
message EquipInfo{
|
50
64
|
string item = 1;
|
51
65
|
string slot = 2;
|
@@ -146,8 +160,15 @@ message ActionResponse {
|
|
146
160
|
}
|
147
161
|
|
148
162
|
message LookResponse{
|
149
|
-
repeated
|
150
|
-
|
163
|
+
repeated LookTile tiles = 1;
|
164
|
+
int32 distance = 2;
|
165
|
+
float sleep_time = 3;
|
166
|
+
}
|
167
|
+
message LookTile{
|
168
|
+
bool walkable = 1;
|
169
|
+
optional string station = 2;
|
170
|
+
repeated LookEntity entities = 3;
|
171
|
+
optional string zone = 4;
|
151
172
|
}
|
152
173
|
message LookEntity{
|
153
174
|
string id = 1;
|
@@ -183,3 +204,6 @@ message TradeOfferId{
|
|
183
204
|
message ConsumableDuration{
|
184
205
|
float time = 1;
|
185
206
|
}
|
207
|
+
message ScoreboardData{
|
208
|
+
string data = 1;
|
209
|
+
}
|