diff options
Diffstat (limited to 'client/Archipelago/client.gd')
-rw-r--r-- | client/Archipelago/client.gd | 32 |
1 files changed, 24 insertions, 8 deletions
diff --git a/client/Archipelago/client.gd b/client/Archipelago/client.gd index f0f36d7..52ce047 100644 --- a/client/Archipelago/client.gd +++ b/client/Archipelago/client.gd | |||
@@ -32,13 +32,14 @@ var _players = [] | |||
32 | var _player_name_by_slot = {} | 32 | var _player_name_by_slot = {} |
33 | var _game_by_player = {} | 33 | var _game_by_player = {} |
34 | var _checked_locations = [] | 34 | var _checked_locations = [] |
35 | var _received_items = [] | 35 | var _received_indexes = [] |
36 | var _received_items = {} | ||
36 | var _slot_data = {} | 37 | var _slot_data = {} |
37 | 38 | ||
38 | signal could_not_connect | 39 | signal could_not_connect |
39 | signal connect_status | 40 | signal connect_status |
40 | signal client_connected(slot_data) | 41 | signal client_connected(slot_data) |
41 | signal item_received(item_id, index, player, flags) | 42 | signal item_received(item_id, index, player, flags, amount) |
42 | signal message_received(message) | 43 | signal message_received(message) |
43 | 44 | ||
44 | 45 | ||
@@ -74,6 +75,8 @@ func _reset_state(): | |||
74 | _authenticated = false | 75 | _authenticated = false |
75 | _try_wss = false | 76 | _try_wss = false |
76 | _has_connected = false | 77 | _has_connected = false |
78 | _received_items = {} | ||
79 | _received_indexes = [] | ||
77 | 80 | ||
78 | 81 | ||
79 | func _errored(): | 82 | func _errored(): |
@@ -228,17 +231,26 @@ func _process(_delta): | |||
228 | elif cmd == "ReceivedItems": | 231 | elif cmd == "ReceivedItems": |
229 | var i = 0 | 232 | var i = 0 |
230 | for item in message["items"]: | 233 | for item in message["items"]: |
231 | if not _received_items.has(int(item["item"])): | 234 | var index = int(message["index"] + i) |
232 | _received_items.append(int(item["item"])) | 235 | i += 1 |
236 | |||
237 | if _received_indexes.has(index): | ||
238 | # Do not re-process items. | ||
239 | continue | ||
240 | |||
241 | _received_indexes.append(index) | ||
242 | |||
243 | var item_id = int(item["item"]) | ||
244 | _received_items[item_id] = _received_items.get(item_id, 0) + 1 | ||
233 | 245 | ||
234 | emit_signal( | 246 | emit_signal( |
235 | "item_received", | 247 | "item_received", |
236 | int(item["item"]), | 248 | item_id, |
237 | int(message["index"]) + i, | 249 | index, |
238 | int(item["player"]), | 250 | int(item["player"]), |
239 | int(item["flags"]) | 251 | int(item["flags"]), |
252 | _received_items[item_id] | ||
240 | ) | 253 | ) |
241 | i += 1 | ||
242 | 254 | ||
243 | elif cmd == "PrintJSON": | 255 | elif cmd == "PrintJSON": |
244 | emit_signal("message_received", message) | 256 | emit_signal("message_received", message) |
@@ -380,3 +392,7 @@ func completedGoal(): | |||
380 | 392 | ||
381 | func hasItem(item_id): | 393 | func hasItem(item_id): |
382 | return _received_items.has(item_id) | 394 | return _received_items.has(item_id) |
395 | |||
396 | |||
397 | func getItemAmount(item_id): | ||
398 | return _received_items.get(item_id, 0) | ||