about summary refs log tree commit diff stats
path: root/Archipelago/client.gd
diff options
context:
space:
mode:
authorStar Rauchenberger <fefferburbia@gmail.com>2023-04-15 11:57:03 -0400
committerStar Rauchenberger <fefferburbia@gmail.com>2023-04-15 11:57:03 -0400
commitbb9024d323b142d90294d1643516416c7ba99d23 (patch)
tree28803e06d91ef2258efbf071b62dfbde28b556aa /Archipelago/client.gd
parentcbbde6450a2a67f7e8ef561443dde6f61e3a8bf5 (diff)
downloadlingo-archipelago-bb9024d323b142d90294d1643516416c7ba99d23.tar.gz
lingo-archipelago-bb9024d323b142d90294d1643516416c7ba99d23.tar.bz2
lingo-archipelago-bb9024d323b142d90294d1643516416c7ba99d23.zip
Sent items are now displayed
Both sent and received items display player names now. Hints are displayed. Fixed a bug where partially downloading datapackages would overwrite already-downloaded ones.
Diffstat (limited to 'Archipelago/client.gd')
-rw-r--r--Archipelago/client.gd54
1 files changed, 49 insertions, 5 deletions
diff --git a/Archipelago/client.gd b/Archipelago/client.gd index 78ac845..b3d1359 100644 --- a/Archipelago/client.gd +++ b/Archipelago/client.gd
@@ -13,6 +13,7 @@ var _should_process = false
13 13
14var _datapackages = {} 14var _datapackages = {}
15var _item_id_to_name = {} # All games 15var _item_id_to_name = {} # All games
16var _location_id_to_name = {} # All games
16var _item_name_to_id = {} # LINGO only 17var _item_name_to_id = {} # LINGO only
17var _location_name_to_id = {} # LINGO only 18var _location_name_to_id = {} # LINGO only
18 19
@@ -24,6 +25,7 @@ var _seed = ""
24var _team = 0 25var _team = 0
25var _slot = 0 26var _slot = 0
26var _players = [] 27var _players = []
28var _player_name_by_slot = {}
27var _checked_locations = [] 29var _checked_locations = []
28var _slot_data = {} 30var _slot_data = {}
29var _door_ids_by_item = {} 31var _door_ids_by_item = {}
@@ -110,7 +112,8 @@ func _on_data():
110 connectToRoom() 112 connectToRoom()
111 113
112 elif cmd == "DataPackage": 114 elif cmd == "DataPackage":
113 _datapackages = message["data"]["games"] 115 for game in message["data"]["games"].keys():
116 _datapackages[game] = message["data"]["games"][game]
114 saveSettings() 117 saveSettings()
115 processDatapackages() 118 processDatapackages()
116 connectToRoom() 119 connectToRoom()
@@ -123,6 +126,9 @@ func _on_data():
123 _checked_locations = message["checked_locations"] 126 _checked_locations = message["checked_locations"]
124 _slot_data = message["slot_data"] 127 _slot_data = message["slot_data"]
125 128
129 for player in _players:
130 _player_name_by_slot[player["slot"]] = player["alias"]
131
126 if _slot_data.has("door_ids_by_item_id"): 132 if _slot_data.has("door_ids_by_item_id"):
127 _door_ids_by_item = _slot_data["door_ids_by_item_id"] 133 _door_ids_by_item = _slot_data["door_ids_by_item_id"]
128 134
@@ -181,6 +187,39 @@ func _on_data():
181 ) 187 )
182 i += 1 188 i += 1
183 189
190 elif cmd == "PrintJSON":
191 if (
192 !message.has("receiving")
193 or !message.has("item")
194 or message["item"]["player"] != _slot
195 ):
196 continue
197
198 var item_name = "Unknown"
199 if _item_id_to_name.has(message["item"]["item"]):
200 item_name = _item_id_to_name[message["item"]["item"]]
201
202 var location_name = "Unknown"
203 if _location_id_to_name.has(message["item"]["location"]):
204 location_name = _location_id_to_name[message["item"]["location"]]
205
206 var player_name = "Unknown"
207 if _player_name_by_slot.has(message["receiving"]):
208 player_name = _player_name_by_slot[message["receiving"]]
209
210 var messages_node = get_tree().get_root().get_node("Spatial/AP_Messages")
211 if message["type"] == "Hint":
212 var is_for = ""
213 if message["receiving"] != _slot:
214 is_for = " for %s" % player_name
215 if !message.has("found") || !message["found"]:
216 messages_node.showMessage(
217 "Hint: %s%s is on %s" % [item_name, is_for, location_name]
218 )
219 else:
220 if message["receiving"] != _slot:
221 messages_node.showMessage("Sent %s to %s" % [item_name, player_name])
222
184 223
185func _process(_delta): 224func _process(_delta):
186 if _should_process: 225 if _should_process:
@@ -246,10 +285,14 @@ func requestDatapackages(games):
246 285
247func processDatapackages(): 286func processDatapackages():
248 _item_id_to_name = {} 287 _item_id_to_name = {}
288 _location_id_to_name = {}
249 for package in _datapackages.values(): 289 for package in _datapackages.values():
250 for name in package["item_name_to_id"].keys(): 290 for name in package["item_name_to_id"].keys():
251 _item_id_to_name[package["item_name_to_id"][name]] = name 291 _item_id_to_name[package["item_name_to_id"][name]] = name
252 292
293 for name in package["location_name_to_id"].keys():
294 _location_id_to_name[package["location_name_to_id"][name]] = name
295
253 if _datapackages.has("Lingo"): 296 if _datapackages.has("Lingo"):
254 _item_name_to_id = _datapackages["Lingo"]["item_name_to_id"] 297 _item_name_to_id = _datapackages["Lingo"]["item_name_to_id"]
255 _location_name_to_id = _datapackages["Lingo"]["location_name_to_id"] 298 _location_name_to_id = _datapackages["Lingo"]["location_name_to_id"]
@@ -280,9 +323,6 @@ func requestSync():
280func sendLocation(loc_id): 323func sendLocation(loc_id):
281 if _map_loaded: 324 if _map_loaded:
282 sendMessage([{"cmd": "LocationChecks", "locations": [loc_id]}]) 325 sendMessage([{"cmd": "LocationChecks", "locations": [loc_id]}])
283
284 var messages_node = get_tree().get_root().get_node("Spatial/AP_Messages")
285 messages_node.showMessage("Sent %d" % loc_id)
286 else: 326 else:
287 _held_locations.append(loc_id) 327 _held_locations.append(loc_id)
288 328
@@ -333,11 +373,15 @@ func processItem(item, index, from):
333 if _item_id_to_name.has(item): 373 if _item_id_to_name.has(item):
334 item_name = _item_id_to_name[item] 374 item_name = _item_id_to_name[item]
335 375
376 var player_name = "Unknown"
377 if _player_name_by_slot.has(from):
378 player_name = _player_name_by_slot[from]
379
336 var messages_node = get_tree().get_root().get_node("Spatial/AP_Messages") 380 var messages_node = get_tree().get_root().get_node("Spatial/AP_Messages")
337 if from == _slot: 381 if from == _slot:
338 messages_node.showMessage("Found %s" % item_name) 382 messages_node.showMessage("Found %s" % item_name)
339 else: 383 else:
340 messages_node.showMessage("Received %s from %d" % [item_name, from]) 384 messages_node.showMessage("Received %s from %s" % [item_name, player_name])
341 385
342 386
343func doorIsVanilla(door): 387func doorIsVanilla(door):