Integrate per-save identity and interaction UI
This commit is contained in:
parent
ac82a28f3b
commit
4fda6e97f6
58 changed files with 3471 additions and 461 deletions
|
|
@ -115,7 +115,10 @@ func send_local_message(
|
|||
send_rejected.emit("Chat is unavailable.")
|
||||
return false
|
||||
var clean := NetworkChatProtocol.sanitize_body(body)
|
||||
if clean.is_empty():
|
||||
if not NetworkChatProtocol.valid_user_body(clean):
|
||||
if NetworkChatProtocol.is_roleplay_body(clean):
|
||||
send_rejected.emit("Usage: /me [action].")
|
||||
return false
|
||||
send_rejected.emit("Message is empty or too long.")
|
||||
return false
|
||||
var request := {
|
||||
|
|
@ -412,6 +415,7 @@ func _apply_message(
|
|||
return
|
||||
var kind := int(data["kind"])
|
||||
var valid_signature := false
|
||||
var canonical_sender_name: String = ""
|
||||
if kind == NetworkChatProtocol.Kind.SYSTEM:
|
||||
valid_signature = _session.verify_host_action(
|
||||
"chat_system",
|
||||
|
|
@ -424,6 +428,7 @@ func _apply_message(
|
|||
if record == null:
|
||||
_queue_pending_peer_message(sender_id, data, emit_live_signals)
|
||||
return
|
||||
canonical_sender_name = record.display_name.left(24)
|
||||
valid_signature = (
|
||||
record.identity_fingerprint == str(data["sender_fingerprint"])
|
||||
and _session.verify_peer_action(
|
||||
|
|
@ -437,6 +442,10 @@ func _apply_message(
|
|||
return
|
||||
_seen_messages[data["message_id"]] = true
|
||||
var stored_message := data.duplicate(true)
|
||||
if kind == NetworkChatProtocol.Kind.PLAYER:
|
||||
# The authenticated peer registry, not sender-controlled message data,
|
||||
# owns the name shown beside chat and roleplay actions.
|
||||
stored_message["sender_display_name"] = canonical_sender_name
|
||||
# Suppression is immutable for this received copy. Relationship changes
|
||||
# later must never resurrect text that was hidden on arrival.
|
||||
stored_message["locally_suppressed"] = (
|
||||
|
|
@ -548,7 +557,9 @@ func _on_peer_removed(peer_id: int) -> void:
|
|||
_pending_peer_messages.erase(peer_id)
|
||||
if not _session.is_host():
|
||||
return
|
||||
var display_name: String = _peer_names.get(peer_id, "Player")
|
||||
var display_name: String = _peer_names.get(
|
||||
peer_id, NetworkProfilePreferences.DEFAULT_DISPLAY_NAME
|
||||
)
|
||||
_peer_names.erase(peer_id)
|
||||
_broadcast(_make_message(
|
||||
NetworkChatProtocol.Kind.SYSTEM, 0, "", "%s left." % display_name
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue