Salta ai contenuti

Profilo

Il profilo è il testo che un giocatore scrive sul suo personaggio. Il client lo mostra con il pulsante Profilo del paperdoll, e il giocatore modifica il proprio nella stessa finestra. Non serve nessun comando: il client trasforma il pulsante nel pacchetto del profilo (0xB8).

  • Un giocatore legge il proprio profilo a qualsiasi distanza. Il profilo di un altro giocatore si legge quando entrambi stanno sulla stessa mappa entro 12 caselle e chi guarda non è escluso dal vederlo: il profilo di un giocatore nascosto è solo per lo staff. Il profilo di un NPC non si legge.
  • La finestra mostra in alto il titolo del paperdoll (per esempio “Lord Anna, the Brave”), poi il testo. Sotto il testo del giocatore, una riga dice quanti giorni ha il personaggio: “Questo personaggio ha 3 giorno/i.”
  • Un giocatore modifica solo il proprio profilo. Il pacchetto indica un seriale, ma il server non si fida mai: una modifica che indica un altro giocatore non cambia nessuno e non riceve risposta. Dopo una modifica il client chiede di nuovo, quindi il server non risponde.
  • Il testo viene ripulito prima di essere tenuto: i caratteri di controllo (NUL compreso) e le metà isolate di una coppia surrogata vengono tolti, le interruzioni di riga restano, gli estremi vengono tagliati e il testo è ridotto a 511 caratteri. Un testo vuoto cancella il profilo.

Il testo è la proprietà profile del personaggio, quindi il salvataggio del mondo lo scrive con il personaggio e non serve nessuna migrazione. Un personaggio senza profilo non ha la proprietà.

Il modulo profile lo legge e lo scrive, per uno script o un comando dello staff:

Funzione Cosa fa
profile.get(player) Il testo del profilo; una stringa vuota quando non c’è, per un NPC o per un seriale sconosciuto
profile.set(player, text) Scrive il profilo, ripulito e tagliato come la modifica di un giocatore; nil o un testo vuoto lo cancella. true quando è cambiato

0xB8 arriva dal client con una modalità: 0 chiede di mostrare il profilo di un seriale, 1 lo modifica (due byte saltati, il numero di caratteri, poi il testo UTF-16BE senza terminatore). Una richiesta con una modalità che il server non conosce, o una modifica senza spazio per il conteggio, viene ignorata; una modifica legge i caratteri che contiene davvero, qualunque cosa dica il conteggio, e una coppia surrogata rotta viene scartata dalla pulizia. Niente di tutto ciò costa al client la connessione. Il server risponde a una richiesta di visualizzazione con 0xB8: il seriale, il titolo in Latin-1, poi il piè di pagina e il corpo in UTF-16BE. Sul filo il piè di pagina viene per primo; il client lascia modificare il corpo al giocatore. Vedi Pacchetti.

Il blocco del profilo che ha ModernUO, un trigger di script a ogni lettura o scrittura, un limite alla frequenza delle modifiche e un filtro di parole.

Creato con ❤️ da Tom

Offrimi un caffè