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) | ||
