From 5a2d1f6f2462636d8389adb46ba3ff237ffe32c7 Mon Sep 17 00:00:00 2001 From: Star Rauchenberger Date: Thu, 28 Aug 2025 15:51:23 -0400 Subject: [Client] Added messages overlay --- client/Archipelago/manager.gd | 102 ++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 98 insertions(+), 4 deletions(-) (limited to 'client/Archipelago/manager.gd') diff --git a/client/Archipelago/manager.gd b/client/Archipelago/manager.gd index 35fc8e3..99cb47b 100644 --- a/client/Archipelago/manager.gd +++ b/client/Archipelago/manager.gd @@ -13,6 +13,9 @@ var connection_history = [] var client +var _received_indexes = [] +var _last_new_item = -1 + signal could_not_connect signal connect_status signal ap_connected @@ -35,6 +38,9 @@ func saveSettings(): func connectToServer(): + _received_indexes = [] + _last_new_item = -1 + client.connectToServer(ap_server, ap_user, ap_pass) @@ -62,9 +68,20 @@ func has_item(item_id): return client.hasItem(item_id) -func _process_item(item_id, _index, _player, _flags): +func _process_item(item, index, from, flags): + if index != null: + if _received_indexes.has(index): + # Do not re-process items. + return + + _received_indexes.append(index) + + var item_name = "Unknown" + if client._item_id_to_name["Lingo 2"].has(item): + item_name = client._item_id_to_name["Lingo 2"][item] + var gamedata = global.get_node("Gamedata") - var door_id = gamedata.door_id_by_ap_id.get(item_id, null) + var door_id = gamedata.door_id_by_ap_id.get(item, null) if door_id != null and gamedata.get_door_map_name(door_id) == global.map: var receivers = gamedata.get_door_receivers(door_id) var scene = get_tree().get_root().get_node_or_null("scene") @@ -79,9 +96,71 @@ func _process_item(item_id, _index, _player, _flags): if pnode != null: pnode.handleTriggered() + # Show a message about the item if it's new. + if index != null and index > _last_new_item: + _last_new_item = index + #saveLocaldata() -func _process_message(_message): - pass + var player_name = "Unknown" + if client._player_name_by_slot.has(from): + player_name = client._player_name_by_slot[from] + + var item_color = colorForItemType(flags) + + var message + if from == client._slot: + message = "Found [color=%s]%s[/color]" % [item_color, item_name] + else: + message = "Received [color=%s]%s[/color] from %s" % [item_color, item_name, player_name] + + global._print(message) + + global.get_node("Messages").showMessage(message) + + +func _process_message(message): + if ( + !message.has("receiving") + or !message.has("item") + or message["item"]["player"] != client._slot + ): + return + + var item_name = "Unknown" + var item_player_game = client._game_by_player[message["receiving"]] + if client._item_id_to_name[item_player_game].has(message["item"]["item"]): + item_name = client._item_id_to_name[item_player_game][message["item"]["item"]] + + var location_name = "Unknown" + var location_player_game = client._game_by_player[message["item"]["player"]] + if client._location_id_to_name[location_player_game].has(message["item"]["location"]): + location_name = ( + client._location_id_to_name[location_player_game][message["item"]["location"]] + ) + + var player_name = "Unknown" + if client._player_name_by_slot.has(message["receiving"]): + player_name = client._player_name_by_slot[message["receiving"]] + + var item_color = colorForItemType(message["item"]["flags"]) + + if message["type"] == "Hint": + var is_for = "" + if message["receiving"] != client._slot: + is_for = " for %s" % player_name + if !message.has("found") || !message["found"]: + global.get_node("Messages").showMessage( + ( + "Hint: [color=%s]%s[/color]%s is on %s" + % [item_color, item_name, is_for, location_name] + ) + ) + else: + if message["receiving"] != client._slot: + var sentMsg = "Sent [color=%s]%s[/color] to %s" % [item_color, item_name, player_name] + #if _hinted_locations.has(message["item"]["location"]): + # sentMsg += " ([color=#fafad2]Hinted![/color])" + global.get_node("Messages").showMessage(sentMsg) func _client_could_not_connect(): @@ -98,3 +177,18 @@ func _client_connected(): func send_location(loc_id): client.sendLocation(loc_id) + + +func colorForItemType(flags): + var int_flags = int(flags) + if int_flags & 1: # progression + if int_flags & 2: # proguseful + return "#f0d200" + else: + return "#bc51e0" + elif int_flags & 2: # useful + return "#2b67ff" + elif int_flags & 4: # trap + return "#d63a22" + else: # filler + return "#14de9e" -- cgit 1.4.1