about summary refs log tree commit diff stats
path: root/client/Archipelago/client.gd
diff options
context:
space:
mode:
Diffstat (limited to 'client/Archipelago/client.gd')
-rw-r--r--client/Archipelago/client.gd55
1 files changed, 45 insertions, 10 deletions
diff --git a/client/Archipelago/client.gd b/client/Archipelago/client.gd index f0f36d7..843647d 100644 --- a/client/Archipelago/client.gd +++ b/client/Archipelago/client.gd
@@ -32,17 +32,23 @@ var _players = []
32var _player_name_by_slot = {} 32var _player_name_by_slot = {}
33var _game_by_player = {} 33var _game_by_player = {}
34var _checked_locations = [] 34var _checked_locations = []
35var _received_items = [] 35var _received_indexes = []
36var _received_items = {}
36var _slot_data = {} 37var _slot_data = {}
37 38
38signal could_not_connect 39signal could_not_connect
39signal connect_status 40signal connect_status
40signal client_connected(slot_data) 41signal client_connected(slot_data)
41signal item_received(item_id, index, player, flags) 42signal item_received(item_id, index, player, flags, amount)
42signal message_received(message) 43signal message_received(message)
44signal location_scout_received(item_id, location_id, player, flags)
43 45
44 46
45func _init(): 47func _init():
48 set_process_mode(Node.PROCESS_MODE_ALWAYS)
49
50 _ws.inbound_buffer_size = 8388608
51
46 global._print("Instantiated APClient") 52 global._print("Instantiated APClient")
47 53
48 # Read AP datapackages from file, if there are any 54 # Read AP datapackages from file, if there are any
@@ -74,6 +80,8 @@ func _reset_state():
74 _authenticated = false 80 _authenticated = false
75 _try_wss = false 81 _try_wss = false
76 _has_connected = false 82 _has_connected = false
83 _received_items = {}
84 _received_indexes = []
77 85
78 86
79func _errored(): 87func _errored():
@@ -219,7 +227,7 @@ func _process(_delta):
219 error_message = "Unknown error." 227 error_message = "Unknown error."
220 228
221 _initiated_disconnect = true 229 _initiated_disconnect = true
222 _ws.disconnect_from_host() 230 _ws.close()
223 231
224 emit_signal("could_not_connect", error_message) 232 emit_signal("could_not_connect", error_message)
225 global._print("Connection to AP refused") 233 global._print("Connection to AP refused")
@@ -228,21 +236,40 @@ func _process(_delta):
228 elif cmd == "ReceivedItems": 236 elif cmd == "ReceivedItems":
229 var i = 0 237 var i = 0
230 for item in message["items"]: 238 for item in message["items"]:
231 if not _received_items.has(int(item["item"])): 239 var index = int(message["index"] + i)
232 _received_items.append(int(item["item"])) 240 i += 1
241
242 if _received_indexes.has(index):
243 # Do not re-process items.
244 continue
245
246 _received_indexes.append(index)
247
248 var item_id = int(item["item"])
249 _received_items[item_id] = _received_items.get(item_id, 0) + 1
233 250
234 emit_signal( 251 emit_signal(
235 "item_received", 252 "item_received",
236 int(item["item"]), 253 item_id,
237 int(message["index"]) + i, 254 index,
238 int(item["player"]), 255 int(item["player"]),
239 int(item["flags"]) 256 int(item["flags"]),
257 _received_items[item_id]
240 ) 258 )
241 i += 1
242 259
243 elif cmd == "PrintJSON": 260 elif cmd == "PrintJSON":
244 emit_signal("message_received", message) 261 emit_signal("message_received", message)
245 262
263 elif cmd == "LocationInfo":
264 for loc in message["locations"]:
265 emit_signal(
266 "location_scout_received",
267 int(loc["item"]),
268 int(loc["location"]),
269 int(loc["player"]),
270 int(loc["flags"])
271 )
272
246 elif state == WebSocketPeer.STATE_CLOSED: 273 elif state == WebSocketPeer.STATE_CLOSED:
247 if _has_connected: 274 if _has_connected:
248 _closed() 275 _closed()
@@ -284,7 +311,7 @@ func connectToServer(server, un, pw):
284 % err 311 % err
285 ) 312 )
286 ) 313 )
287 global._print("Could not connect to AP: " + err) 314 global._print("Could not connect to AP: %d" % err)
288 return 315 return
289 _should_process = true 316 _should_process = true
290 317
@@ -378,5 +405,13 @@ func completedGoal():
378 sendMessage([{"cmd": "StatusUpdate", "status": 30}]) # CLIENT_GOAL 405 sendMessage([{"cmd": "StatusUpdate", "status": 30}]) # CLIENT_GOAL
379 406
380 407
408func scoutLocations(loc_ids):
409 sendMessage([{"cmd": "LocationScouts", "locations": loc_ids}])
410
411
381func hasItem(item_id): 412func hasItem(item_id):
382 return _received_items.has(item_id) 413 return _received_items.has(item_id)
414
415
416func getItemAmount(item_id):
417 return _received_items.get(item_id, 0)