IT UO Topic character Part 4 - LIHACHTETAN/ClassicUO-Bad-Newbie-CSharp-Scripts-IDE GitHub Wiki

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

Carattere — 4

Home · C# · IDE · UO API · A–Z · Esempi · Lingue

Parti del riferimento

1 · 2 · 3 · 4 · 5

Riferimento completo dei comandi


UO.MaxStamina

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

Firme C#

int UO.MaxStamina();

Legge la resistenza massima dal modello locale.

Parametri

Non ci sono parametri.

Valore restituito

int è il valore del campo StaminaMax, non una percentuale o bool. 0 può essere un valore reale o un'indicazione di dati mancanti. Il massimo zero non può essere utilizzato come divisore. Per mobile di qualcun altro i significati potrebbero essere sconosciuti. HP/HitsMax può contenere la scala relativa del server anziché i punti esatti. HP=0 non prova la morte; c'è Dead/IsDead per questo.

Comportamento

  • Il comando non apre lo stato e non richiede un aggiornamento del server. Il client legge solo i dati già caricati. Non cambia caratteristiche e non invia pacchetti.
  • Il risultato è una lettura separata. Il mondo può cambiare tra Exists e la prossima sfida; più query non formano uno snapshot atomico.
  • Durante la lettura di un oggetto, World.Get rifiuta l'o mancante o IsDestroyed e risulta in 0. HP/HitsMax vengono letti dall'Entità, inclusi gli elementi con questi campi; Mana/Stamina - solo per dispositivi mobili. Senza discutere, leggi self. La variante con lo stesso nome senza parametri non ha necessariamente una variante con ID: vedi firme.
  • La lettura senza argomenti restituisce anche 0 per un giocatore scomparso o distrutto. Questo vale anche per Mana/Stamina diretti e i loro massimi, non solo per le forme World.Get. Un personaggio morto presente può conservare valori.

Script C# autonomi

Ogni esempio può essere salvato come file separato .csx ed eseguito in IDE. Le funzioni oggetto UO e attesa forniscono l'host della sessione di gioco corrente. Sostituisci i nomi, le coordinate e gli indirizzi demo serial con i tuoi.

Esempio semplice

Esegui questo codice in un file .csx separato. Gli argomenti sono visibili nella chiamata; sostituisci nomi, serial e indirizzi di esempio con i tuoi.

Il risultato di una sola chiamata viene mostrato nel diario. Un numero non viene convertito in bool; per un array viene mostrato il numero di elementi.

var result = UO.MaxStamina();
UO.Print("MaxStamina: " + Convert.ToString(result));

1. Stampa il valore del tuo personaggio - sceneggiatura diretta

Parametri e flusso di esecuzione:

  • La chiamata senza argomenti legge self. value memorizza un numero, Convert.ToString lo converte solo per il messaggio.
var value = UO.MaxStamina();
UO.Print("MaxStamina: " + Convert.ToString(value));

2. Applica valore nel controllo o nel calcolo - funzione script

Parametri e flusso di esecuzione:

  • Viene visualizzata la soglia o il calcolo applicato per questo campo. I numeri nella condizione sono impostazioni di esempio, non limiti del server. Prima di dividere per il massimo se ne controlla la positività.
return  RunScenario();
 object? RunScenario()
{
    var value = UO.MaxStamina();
    if (Truth(value > 0))
    {
        UO.Print("Stamina percent: " + Convert.ToString(UO.Stamina() * 100 / value));
    }

    return null;
}

bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

3. Funzione di supporto completa ReadValue - Classe di script

Parametri e flusso di esecuzione:

  • Questo nome non ha la forma con ID. ReadValue senza parametri legge self; le due chiamate sono separate da UO.Wait(1000). Confrontando due istantanee potrebbero non essere rilevate modifiche intermedie.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

    async public Task<object?> RunScenarioAsync()
    {
        var before = ReadValue();
        await Delay(1000);
        var after = ReadValue();
        UO.Print("Before: " + Convert.ToString(before) + "; after: " + Convert.ToString(after));
        return null;
    }

    dynamic ReadValue()
    {
        return UO.MaxStamina();
    }

    Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
}

Implementazione del comando

C# distingue maiuscole e minuscole. Usare il nome UO esatto. Confrontare i flag numerici con 0; usare bool solo se la firma restituisce bool.

UO.MaxStamina() — UO.MaxStamina()

Parametri: Nessun parametro.

Risultato: int / Integer.

Durante la chiamata:

La chiamata esegue il delegate del gestore memorizzato. Il metodo di registrazione lo crea durante la costruzione dell’API.

Codice interno di implementazione; non è uno script autonomo.

() => bridge.MaxStamina

Creazione API: Queste funzioni registrano l’API. Non vengono eseguite di nuovo a ogni chiamata del comando.


UO.MaxWeight

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

Firme C#

int UO.MaxWeight();

Legge il contatore dello stato del tuo personaggio: peso massimo in pietre.

Parametri

Non ci sono parametri.

Valore restituito

int — peso massimo in pietre, 0..65535 nel modello client. 0 può essere un valore reale, nessun dato o un giocatore scomparso/distrutto. Questa è una quantità, non bool, ID o type: 1 significa un'unità, non successo. Il comando non esegue iterazioni sugli oggetti e non restituisce un array.

Comportamento

  • Il comando non accetta argomenti. Usa le firme esatte sopra.
  • La lettura nel thread del gioco richiede Player.WeightMax se il Player attuale esiste e non è stato distrutto; altrimenti 0. L'attrezzatura non viene ordinata, i bonus non vengono ricalcolati, lo status non viene richiesto e non c'è attesa per gli aggiornamenti. Un fantasma presente non è uguale ad un Giocatore distrutto.
  • MaxWeight legge la cache WeightMax. Lo stato nativo type >= 5 imposta il limite del server su UInt16, anche se è uguale a 0. Il vecchio stato esteso lo calcola una volta alla ricezione: protocollo UO >= 5.0.0a - 7 * floor(Strength / 2) + 40; quello più vecchio è Strength * 4 + 25. Il risultato viene salvato come UInt16; i valori estremi vengono avvolti modulo 65536. Converti.ToString=101 dà rispettivamente 390 o 429. Quando si modifica Strength separatamente, il getter stesso non ricalcola il limite.
  • CharacterStatus controlla il corpo richiesto prima dell'aggiornamento. Weight è disponibile nel suo stato esteso, slot - da type 3, Luck - da type 4, server WeightMax - da type 5. Un pacchetto compatto/vecchio senza un contatore opzionale lascia la cache precedente. Il nuovo Player inizia da zero; la chiamata non dimostra il ricevimento di un nuovo status.
  • Queste funzioni registrano l’API. Non vengono eseguite di nuovo a ogni chiamata del comando. C# distingue maiuscole e minuscole. Usare il nome UO esatto. Confrontare i flag numerici con 0; usare bool solo se la firma restituisce bool.
  • Ogni chiamata legge nuovamente i dati locali. La variabile memorizza l'istantanea; le singole letture potrebbero ricevere diversi aggiornamenti del server. Un risultato diverso da zero non verifica la connessione. Zero può essere un valore o nessun dato.

Script C# autonomi

Ogni esempio può essere salvato come file separato .csx ed eseguito in IDE. Le funzioni oggetto UO e attesa forniscono l'host della sessione di gioco corrente. Sostituisci i nomi, le coordinate e gli indirizzi demo serial con i tuoi.

Esempio semplice

Esegui questo codice in un file .csx separato. Gli argomenti sono visibili nella chiamata; sostituisci nomi, serial e indirizzi di esempio con i tuoi.

Il risultato di una sola chiamata viene mostrato nel diario. Un numero non viene convertito in bool; per un array viene mostrato il numero di elementi.

var result = UO.MaxWeight();
UO.Print("MaxWeight: " + Convert.ToString(result));

1. Visualizza contatore salvato - script diretto

Parametri e flusso di esecuzione:

  • value memorizza una chiamata senza argomento al proprio carattere; Convert.ToString formatta il numero del log senza cambiarne il significato.
var value = UO.MaxWeight();
UO.Print("WeightMax: " + Convert.ToString(value));

2. Osserva il cambiamento - Funzione script

Parametri e flusso di esecuzione:

  • UO.Wait(500) separa il prima e il dopo di 500 millisecondi. difference can be positive, zero or negative; Gli aggiornamenti temporanei e le modifiche ai personaggi potrebbero essere saltati. La pausa è un esempio.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    var before = UO.MaxWeight();
    await Delay(500);
    var after = UO.MaxWeight();
    var difference = after - before;
    UO.Print("Counter change: " + Convert.ToString(difference));
    return null;
}

Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));

3. Funzione di supporto completa: classe di script

Parametri e flusso di esecuzione:

  • CanCarry(extra) ottiene un peso extra in pietre; 10 è un esempio, non il numero di stack. Rifiuta extra negativo, nessun giocatore o massimo <= 0, legge il peso e il limite attuali, quindi restituisce bool: true o false con extra <= massimo - corrente. La sottrazione evita l'eccesso di corrente + extra. In caso di sovraccarico, il risultato è false anche per extra=0. Questa è una valutazione locale, non una risoluzione del server; le letture non sono atomiche e il peso zero potrebbe essere sconosciuto.
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        if (Truth(Truth(CanCarry(10)) == true))
        {
            UO.Print("Local check passed");
        }
        else
        {
            UO.Print("Local check failed or data unavailable");
        }

        return null;
    }

    dynamic CanCarry(dynamic extra)
    {
        if (Truth(extra < 0) || Truth(UO.Self() == 0))
        {
            return false;
        }

        var current = UO.Weight();
        var maximum = UO.MaxWeight();
        if (Truth(maximum <= 0))
        {
            return false;
        }

        return extra <= maximum - current;
    }

    bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}

Implementazione del comando

C# distingue maiuscole e minuscole. Usare il nome UO esatto. Confrontare i flag numerici con 0; usare bool solo se la firma restituisce bool.

UO.MaxWeight() — UO.MaxWeight()

Parametri: Nessun parametro.

Risultato: int / Integer.

Durante la chiamata:

Codice interno di implementazione; non è uno script autonomo.

public int MaxWeight() => bridge.MaxWeight;

UO.Mount

Firme C#

int UO.Mount();
int UO.Mount(object? mount);

Comportamento e risultato

Mount e Dismount inviano l’uso dell’oggetto senza doppio clic manuale o attacco in modalità guerra. int è il serial attuale dell’oggetto sul layer Mount, non un successo. La risposta server è asincrona: Mount può restituire ancora 0 e Dismount il serial prima della rimozione. Controllare poi ObjAtLayer("Mount").

Parametri

  • mount — Seriale cavalcatura; se omesso usa l’ultimo bersaglio.

Ogni blocco è un .csx completo. Sostituire serial, tipi e coordinate di esempio. Ordine e argomenti C# nominati seguono la firma.

Comandi chat

#mount 0x00001234
#mount

Esempi C# completi

Ogni blocco è un .csx completo. Sostituire serial, tipi e coordinate di esempio. Ordine e argomenti C# nominati seguono la firma.

1

int mountLayerSerial = UO.Mount(0x00001234);
UO.Print(UO.Int2Hex(mountLayerSerial));

2

int currentSerial = UO.Mount();
UO.Print(UO.Int2Hex(currentSerial));

3

UO.Mount(0x00001234);
for (int attempt = 0; attempt < 40; attempt++)
{
    var serial = UO.ObjAtLayer("Mount");
    if (Convert.ToString(serial) != "0" && Convert.ToString(serial) != "0x00000000")
    {
        UO.Print(Convert.ToString(serial));
        break;
    }
    await WaitAsync(50);
}

4

new CommandSample().Execute(UO);

sealed class CommandSample
{
    public void Execute(global::ClassicUO.CSharp.CSharpGameApi api)
    {
        int mountLayerSerial = api.Mount(0x00001234);
        api.Print(api.Int2Hex(mountLayerSerial));
    }
}

Chiamate interne

CSharpGameApi.Mount
  -> CSharpScriptGlobals
  -> InjectionScript.Runtime.InjectionApiUO.Mount
ClassicUOInjectionApiBridge -> NativeMountController.Request
  -> OutgoingPackets.Send_UseObjectRequest (0x06)
  -> MountedLayerSerialUnsafe -> Player.FindItemByLayer(Layer.Mount)

Fonti

ClassicUO · ServUO BaseMount


UO.ObjAtLayer

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

Firme C#

dynamic UO.ObjAtLayer(object? layer);

Trova un oggetto nel livello specificato dell'equipaggiamento del tuo personaggio.

Parametri

  • layer — Un argomento obbligatorio: numero di livello 1..29 o un nome di stringa dall'elenco seguente. Il numero 0 e il nome Invalid danno 0. Le maiuscole e gli spazi finali del nome vengono ignorati. Un nome di stringa sconosciuto causa un errore di script; la stringa numerica "1" non sostituisce il numero 1.

Valore restituito

Il formato numerico restituisce int - serial per l'elemento o 0 per un livello vuoto/non valido. La forma stringa restituisce string nella forma "0x40001001" se l'elemento viene trovato, altrimenti int 0. Questo è il ID dell'articolo, non il numero del livello, graphic/type o la quantità. Metadati object? il formato stringa riflette due possibili tipi di risultato.

Comportamento

  • Viene letto il modello client locale; Non ci sono richieste al server, nessuna attesa o spostamento.
  • Il risultato si riferisce al momento della lettura. Dopo UO.Wait o altra azione, l'oggetto e i suoi flag potrebbero cambiare.
  • I dati dell'apparecchiatura self vengono controllati. Il team non apre la borsa, non indossa l'oggetto né invia una richiesta di ispezione.
  • I numeri esterni a 1..29 danno 0 senza conversione modulo 256; ad esempio, 257 non può selezionare la mano destra.
  • Tutti i livelli numerici e i nomi di stringa supportati:
  • 1 OneHanded/Rhand/RightHand; 2 TwoHanded/Lhand/LeftHand; 3 Shoes; 4 Pants; 5 Shirt; 6 Helmet/Hat; 7 Gloves; 8 Ring; 9 Talisman; 10 Necklace/Neck.
  • 11 Hair; 12 Waist; 13 Torso; 14 Bracelet/Brace; 15 Face; 16 Beard; 17 Tunic; 18 Earrings/Ear; 19 Arms; 20 Cloak.
  • 21 Backpack/Bpack/BackpackLayer; 22 Robe; 23 Skirt; 24 Legs; 25 Mount; 26 ShopBuyRestock/Rstk; 27 ShopBuy/NRstk; 28 ShopSell/Sell; 29 Bank.

Script C# autonomi

Ogni esempio può essere salvato come file separato .csx ed eseguito in IDE. Le funzioni oggetto UO e attesa forniscono l'host della sessione di gioco corrente. Sostituisci i nomi, le coordinate e gli indirizzi demo serial con i tuoi.

Esempio semplice

Esegui questo codice in un file .csx separato. Gli argomenti sono visibili nella chiamata; sostituisci nomi, serial e indirizzi di esempio con i tuoi.

object? item = UO.ObjAtLayer("Rhand");
if (item is string serial) UO.Print("Equipped serial: " + serial);
else UO.Print("The layer is empty");

1. Elemento a destra per nome del livello: script diretto

Parametri e flusso di esecuzione:

  • La mano destra seleziona il livello 1. In caso di successo, la mano è una stringa esadecimale; se assente, il numero 0.
  • Convert.ToString consente di visualizzare entrambi i tipi possibili. Il risultato non può essere preso come graphic dell'arma.
object? hand = UO.ObjAtLayer("Rhand");
if (hand is string serial)
{
    UO.Print("Right hand serial: " + serial);
}
else
{
    UO.Print("Right hand is empty or unavailable");
}

bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

2. Livello numerico e proprietà dell'oggetto - funzione dello script

Parametri e flusso di esecuzione:

  • Il numero 2 seleziona TwoHanded. Questo modulo restituisce sempre int.
  • Exists verifica che l'oggetto sia disponibile per la lettura delle sue proprietà. GetGraphic restituisce un type separato.
return  RunScenario();
 object? RunScenario()
{
    var item = UO.ObjAtLayer(2);
    if (Truth(UO.Exists(item)))
    {
        UO.Print("Two-handed layer serial: " + Convert.ToString(item));
        UO.Print("Graphic: " + UO.GetGraphic(item));
    }

    return null;
}

bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

3. Prendi lo zaino e verifica la presenza di livelli non validi - classe di script

Parametri e flusso di esecuzione:

  • 21—strato Backpack; risultato 0 è possibile prima di caricare l'attrezzatura.
  • 257 è fuori dall'elenco e dà sempre 0. Questa non è una designazione alternativa per lo strato 1.
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        var bag = UO.ObjAtLayer(21);
        var invalid = UO.ObjAtLayer(257);
        UO.Print("Backpack serial: " + Convert.ToString(bag));
        UO.Print("Invalid layer: " + Convert.ToString(invalid));
        return null;
    }
}

Implementazione del comando

C# distingue maiuscole e minuscole. Usare il nome UO esatto. Confrontare i flag numerici con 0; usare bool solo se la firma restituisce bool.

UO.ObjAtLayer(layer) — UO.ObjAtLayer(Any)

Parametri: layer (Any/String)

Risultato: dynamic / Integer.

Durante la chiamata:

Codice interno di implementazione; non è uno script autonomo.

case "objatlayer":

                    return new InjectionValue(arguments[0].Kind == InjectionValueKind.String

                        ? GetObject(ObjAtLayer(Text(0))) : bridge.ObjAtLayer(Arg(0)));

UO.ObjAtLayer(layer) — UO.ObjAtLayer(String)

Parametri: layer (Any/String)

Risultato: dynamic / Any.

Durante la chiamata:

Codice interno di implementazione; non è uno script autonomo.

public InjectionValue ObjAtLayer(string layer)

        {

            var id = bridge.ObjAtLayer(ConvertLayer(layer));

            if (id == 0)

                return InjectionValue.Zero;



            return new InjectionValue("0x" + id.ToString("X8"));

        }

UO.ObjAtLayerEx

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

Firme C#

int UO.ObjAtLayerEx(object? layerType, object? playerID);

Legge un elemento/contenitore nel livello specificato per il carattere caricato specificato.

Parametri

  • layerType — Numero numerico del livello 1..29. Accetta un numero intero o una stringa numerica, come 26 o "0x1A". I nomi delle stringhe Rhand/ShopBuyRestock e le costanti del layer nudo non vengono convertiti in numeri qui. Usa un numero.
  • playerID: carattere seriale/mobile, un numero, una stringa esadecimale o un nome di oggetto risolvibile, come "self"/"lasttarget". Il grafico/type dell'articolo o ID del contenitore stesso non sono adatti.

Valore restituito

int: serial dell'oggetto/contenitore sul livello o 0 se il livello è vuoto/sconosciuto, il numero non è valido o non è caricato alcun cellulare. Questo non è bool o un numero di livello.

Comportamento

  • La lettura è locale, senza target, acquisto, apertura di contenitore e richiesta di rete.
  • L'intervallo 1..29 è controllato. La conversione di un parametro stringa inappropriato può causare un errore; Non è necessario passare un nome di livello arbitrario al posto di un numero.
  • È disponibile un UO.ObjAtLayer separato per un carattere personalizzato con un nome di livello stringa. Non confondere il livello con world Z, l'indice statico o la coordinata gump.

Script C# autonomi

Ogni esempio può essere salvato come file separato .csx ed eseguito in IDE. Le funzioni oggetto UO e attesa forniscono l'host della sessione di gioco corrente. Sostituisci i nomi, le coordinate e gli indirizzi demo serial con i tuoi.

Esempio semplice

Esegui questo codice in un file .csx separato. Gli argomenti sono visibili nella chiamata; sostituisci nomi, serial e indirizzi di esempio con i tuoi.

Il risultato di una sola chiamata viene mostrato nel diario. Un numero non viene convertito in bool; per un array viene mostrato il numero di elementi.

var result = UO.ObjAtLayerEx(26, UO.GetSerial("lasttarget"));
UO.Print("ObjAtLayerEx: " + Convert.ToString(result));

1. Ricevi un contenitore del negozio ed elenca i prodotti - script diretto

Parametri e flusso di esecuzione:

  • LayerType=26; ID giocatore=venditore; negozio — contenitore serial. Per GetContent viene passato il negozio, non il numero del livello.
  • L'array è indicizzato da 0 alla lunghezza meno 1. Ogni elemento è serial. Un array vuoto significa che non ci sono elementi immediati caricati; l'acquisto non è stato portato a termine.
var vendor = UO.GetSerial("lasttarget");
if (Truth(vendor == "0x00000000"))
{
    UO.Print("Vendor not selected");
    return null;
}
var shop = UO.ObjAtLayerEx(26, vendor);
if (Truth(shop == 0))
{
    UO.Print("ShopBuyRestock container is not loaded");
    return null;
}
UO.Print("Shop container ID: " + Convert.ToString(shop));
var items = UO.GetContent(shop);
var i = 0;
while (Truth(i < ArrayLength(items)))
{
    var item = items[i];
    UO.Print(UO.GetName(item) + " | ID: " + Convert.ToString(item));
    UO.Print("Graphic: " + Convert.ToString(UO.GetType(item)));
    i = i + 1;
}
UO.Print("Loaded entries: " + Convert.ToString(ArrayLength(items)));

int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

2. Seleziona la merce del graphic desiderato e conta le unità - funzione script

Parametri e flusso di esecuzione:

  • wantedType è graphic e l'elemento è ID di un singolo articolo. stack conta record/stack; unità aggiunge il numero in essi contenuto.
  • Si tratta della lettura della quantità già ricevuta, non del saldo garantito da un futuro acquisto. Non c'è nessun prezzo specificato qui.
return  RunScenario();
 object? RunScenario()
{
    var vendor = UO.GetSerial("lasttarget");
    if (Truth(vendor == "0x00000000"))
    {
        UO.Print("Vendor not selected");
        return null;
    }

    var shop = UO.ObjAtLayerEx(26, vendor);
    if (Truth(shop == 0))
    {
        UO.Print("Shop layer is not loaded");
        return null;
    }

    var wantedType = 0x1766;
    var stacks = 0;
    var units = 0;
    var items = UO.GetContent(shop);
    var i = 0;
    while (Truth(i < ArrayLength(items)))
    {
        var item = items[i];
        if (Truth(UO.GetType(item) == wantedType))
        {
            stacks = stacks + 1;
            units = units + UO.GetQuantity(item);
        }

        i = i + 1;
    }

    UO.Print("Stacks: " + Convert.ToString(stacks) + " | Units: " + Convert.ToString(units));
    return null;
}

int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

3. Confronta tre livelli del negozio attraverso la procedura completa: classe di script

Parametri e flusso di esecuzione:

  • ShowVendorLayer è dichiarato nella sua interezza. fornitore - ID NPC, layerNumber - 26/27/28, didascalia - solo firma.
  • I contenitori potrebbero essere sconosciuti al client. 0 viene controllato prima di GetContent: un GetContent(0) esplicito significherebbe chiedere oggetti a terra, cosa che qui non è richiesta.
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        var vendor = UO.GetSerial("lasttarget");
        if (Truth(vendor == "0x00000000"))
        {
            UO.Print("Vendor not selected");
            return null;
        }

        ShowVendorLayer(vendor, 26, "ShopBuyRestock / Rstk");
        ShowVendorLayer(vendor, 27, "ShopBuy / NRstk");
        ShowVendorLayer(vendor, 28, "ShopSell / Sell");
        return null;
    }

    void ShowVendorLayer(dynamic vendor, dynamic layerNumber, dynamic caption)
    {
        var container = UO.ObjAtLayerEx(layerNumber, vendor);
        if (Truth(container == 0))
        {
            UO.Print(caption + ": not loaded");
            return;
        }

        var items = UO.GetContent(container);
        UO.Print(caption + " | Container ID: " + Convert.ToString(container));
        UO.Print("Loaded entries: " + Convert.ToString(ArrayLength(items)));
    }

    int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;
    bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}

Implementazione del comando

C# distingue maiuscole e minuscole. Usare il nome UO esatto. Confrontare i flag numerici con 0; usare bool solo se la firma restituisce bool.

UO.ObjAtLayerEx(layerType, playerID) — UO.ObjAtLayerEx(Any,Any)

Parametri: layerType (Any), playerID (Any)

Risultato: int / Integer.

Durante la chiamata:

Codice interno di implementazione; non è uno script autonomo.

case "objatlayerex": return new InjectionValue(bridge.ObjAtLayerEx(Arg(0), Arg(1)));

UO.Paralyzed

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

Firme C#

int UO.Paralyzed();
int UO.Paralyzed(object? value);

Controlla il flag di paralisi del personaggio noto al client.

Parametri

  • value - Opzionale serial/ID mobile: numero, stringa esadecimale, self, lasttarget o altro nome di oggetto standard o nome AddObject. Questo non è graphic/type. Senza argomento, viene utilizzato self. Il nome sconosciuto viene risolto in 0; l'obiettivo non si apre.

Valore restituito

Flag numerico int: 1 (condizione soddisfatta) - caricato mobile ha flag IsParalyzed; 0 (condizione non soddisfatta) - nessun flag, mobile sconosciuto, eliminato o l'oggetto è un elemento. Questo non è un momento di paralisi e non garantisce la capacità di muoversi con un risultato di 0.

Comportamento

  • Usa Paralyzed per controllare la bandiera della paralisi. Le opzioni Is/Get, GetParalisa, Frozen e GetLocked leggono lo stesso flag.
  • Il comando legge solo i dati locali. Non applica né rimuove la paralisi, non ne attende la fine e non invia una richiesta di aggiornamento al server.
  • Il risultato di questo comando è di tipo int: usa if (valore != 0) o if (valore == 0). Non sono consentiti confronti diretti con true/false e if (valore) in C#. Il valore conserva il significato del flag, non la quantità o ID.

Script C# autonomi

Ogni esempio può essere salvato come file separato .csx ed eseguito in IDE. Le funzioni oggetto UO e attesa forniscono l'host della sessione di gioco corrente. Sostituisci i nomi, le coordinate e gli indirizzi demo serial con i tuoi.

Esempio semplice

Esegui questo codice in un file .csx separato. Gli argomenti sono visibili nella chiamata; sostituisci nomi, serial e indirizzi di esempio con i tuoi.

Il risultato di una sola chiamata viene mostrato nel diario. Un numero non viene convertito in bool; per un array viene mostrato il numero di elementi.

var result = UO.Paralyzed();
UO.Print("Paralyzed: " + Convert.ToString(result));

1. Mettiti alla prova tramite true - script diretto

Parametri e flusso di esecuzione:

  • Le parentesi vuote selezionano self. lo stato memorizza un'istantanea della bandiera; true è la costante numerica 1.
  • Un risultato di false non esclude un muro, mancanza di resistenza o altro motivo per fermarsi.
var state = UO.Paralyzed();
if (Truth(Truth(state) == true))
{
    UO.Print("Paralysis flag is set");
}
else
{
    UO.Print("Paralysis flag is absent or unavailable");
}

bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

2. Controlla la funzione script mobile selezionata

Parametri e flusso di esecuzione:

  • target memorizza la stringa esadecimale serial dell'ultimo target. IsNpc controlla che sia il mobile caricato, giocatori compresi.
  • Il comando con l'argomento legge target. Non sceglie un nuovo personaggio né cambia lasttarget.
return  RunScenario();
 object? RunScenario()
{
    var target = UO.GetSerial("lasttarget");
    if (Truth(UO.IsNPC(target)))
    {
        var state = UO.Paralyzed(target);
        UO.Print("Selected mobile paralysis 1/0: " + Convert.ToString(state));
    }
    else
    {
        UO.Print("No loaded mobile selected");
    }

    return null;
}

bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

3. Attesa limitata per la rimozione della paralisi - classe scenario

Parametri e flusso di esecuzione:

  • Non più di 10 pause per 100 ms. Ogni chiamata senza argomento rilegge self.
  • Dopo il ciclo, la presenza di self viene controllata separatamente. Questa è un'osservazione per circa un secondo più l'esecuzione dei comandi e non una rimozione garantita della paralisi.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

    async public Task<object?> RunScenarioAsync()
    {
        var attempts = 0;
        while (Truth(Truth(UO.Paralyzed()) == true) && Truth(attempts < 10))
        {
            await Delay(100);
            attempts = attempts + 1;
        }

        if (Truth(UO.IsNPC("self")))
        {
            if (Truth(Truth(UO.Paralyzed()) == false))
            {
                UO.Print("Paralysis flag is clear");
            }
            else
            {
                UO.Print("Still paralyzed");
            }
        }
        else
        {
            UO.Print("Self is unavailable");
        }

        return null;
    }

    Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
    bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}

Implementazione del comando

C# distingue maiuscole e minuscole. Usare il nome UO esatto. Confrontare i flag numerici con 0; usare bool solo se la firma restituisce bool.

UO.Paralyzed() — UO.Paralyzed()

Parametri: Nessun parametro.

Risultato: int / Integer.

Durante la chiamata:

Codice interno di implementazione; non è uno script autonomo.

case "paralyzed": return new InjectionValue(bridge.GetLocked(bridge.Self));

UO.Paralyzed(value) — UO.Paralyzed(Any)

Parametri: value (Any)

Risultato: int / Integer.

Durante la chiamata:

La chiamata esegue il delegate del gestore memorizzato. Il metodo di registrazione lo crea durante la costruzione dell’API.

Codice interno di implementazione; non è uno script autonomo.

serial => bridge.GetLocked(serial)

Codice interno di implementazione; non è uno script autonomo.

value => getter(GetObject(value))

Creazione API: Queste funzioni registrano l’API. Non vengono eseguite di nuovo a ogni chiamata del comando.


UO.PhysicalResist

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

Firme C#

int UO.PhysicalResist();

Legge il campo di resistenza del personaggio attuale: armatura/resistenza fisica.

Parametri

Non ci sono parametri.

Valore restituito

int: valore dello stato con segno, -32768..32767 nel modello client. Il valore negativo viene mantenuto. 0 può essere resistenza reale, mancanza di dati o giocatore scomparso/distrutto; GetResist fornisce anche 0 per un selettore sconosciuto. Questo non è un bool, ID, limite di abilità o resistenza. 1 significa un punto, non un successo.

Comportamento

  • Il comando non accetta argomenti. Usa le firme esatte sopra.
  • La lettura nel thread del gioco richiede Player.PhysicalResistance se il Player attuale esiste e non è stato distrutto; altrimenti 0. L'attrezzatura non viene ordinata, i bonus non vengono ricalcolati, lo status non viene richiesto e non c'è attesa per gli aggiornamenti. Un fantasma presente non è uguale ad un Giocatore distrutto.
  • PhysicalResistance - campo armatura/stato del server: il server classico può trasmettere il valore dell'armatura e le regole con resistenze possono trasmettere resistenza fisica. API non converte dall'uno all'altro e non calcola la percentuale di riduzione del danno. Armor e gli alias fisici leggono lo stesso campo.
  • CharacterStatus controlla il corpo richiesto prima di modificare il nome, la salute e le proprie caratteristiche, quindi traduce ogni parola di resistenza in una parola firmata Int16. Un corpo obbligatorio tagliato non modifica i dati precedenti. La coda opzionale type 6 mantiene le stesse regole; i comandi di resistenza non leggono i limiti massimi da esso.
  • Ogni chiamata legge nuovamente i dati locali. La variabile memorizza l'istantanea; le singole letture potrebbero ricevere diversi aggiornamenti del server. Un risultato diverso da zero non verifica la connessione. Zero può essere un valore o nessun dato.
  • Queste funzioni registrano l’API. Non vengono eseguite di nuovo a ogni chiamata del comando. C# distingue maiuscole e minuscole. Usare il nome UO esatto. Confrontare i flag numerici con 0; usare bool solo se la firma restituisce bool.

Script C# autonomi

Ogni esempio può essere salvato come file separato .csx ed eseguito in IDE. Le funzioni oggetto UO e attesa forniscono l'host della sessione di gioco corrente. Sostituisci i nomi, le coordinate e gli indirizzi demo serial con i tuoi.

Esempio semplice

Esegui questo codice in un file .csx separato. Gli argomenti sono visibili nella chiamata; sostituisci nomi, serial e indirizzi di esempio con i tuoi.

Il risultato di una sola chiamata viene mostrato nel diario. Un numero non viene convertito in bool; per un array viene mostrato il numero di elementi.

var result = UO.PhysicalResist();
UO.Print("PhysicalResist: " + Convert.ToString(result));

1. Stampa valore salvato - script diretto

Parametri e flusso di esecuzione:

  • value memorizza il risultato di una chiamata. Convert.ToString formatta il numero per il registro. Non ci sono argomenti: puoi leggere il tuo personaggio.
var value = UO.PhysicalResist();
UO.Print("PhysicalResistance: " + Convert.ToString(value));

2. Confronta due immagini: funzione script

Parametri e flusso di esecuzione:

  • Tra prima e dopo ci sono UO.Wait(500) millisecondi; difference can be negative. Interim updates may be missed. La pausa si riferisce all'esempio, non al ritardo API.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    var before = UO.PhysicalResist();
    await Delay(500);
    var after = UO.PhysicalResist();
    var difference = after - before;
    UO.Print("Resistance change: " + Convert.ToString(difference));
    return null;
}

Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));

3. Funzione completa di test della resistenza minima - Classe di script

Parametri e flusso di esecuzione:

  • minimo=50 è un esempio di requisito, non di limite del cliente. ResistanceAtLeast rifiuta il Giocatore mancante, legge un valore e restituisce bool: true o false se valore >= minimo. La resistenza stessa non è bool. La funzione è completamente dichiarata di seguito.
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        if (Truth(Truth(ResistanceAtLeast(50)) == true))
        {
            UO.Print("Local resistance requirement met");
        }
        else
        {
            UO.Print("Requirement not met or no player");
        }

        return null;
    }

    dynamic ResistanceAtLeast(dynamic minimum)
    {
        if (Truth(UO.Self() == 0))
        {
            return false;
        }

        var value = UO.PhysicalResist();
        return value >= minimum;
    }

    bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}

Implementazione del comando

C# distingue maiuscole e minuscole. Usare il nome UO esatto. Confrontare i flag numerici con 0; usare bool solo se la firma restituisce bool.

UO.PhysicalResist() — UO.PhysicalResist()

Parametri: Nessun parametro.

Risultato: int / Integer.

Durante la chiamata:

La chiamata esegue il delegate del gestore memorizzato. Il metodo di registrazione lo crea durante la costruzione dell’API.

Codice interno di implementazione; non è uno script autonomo.

() => bridge.Armor

Creazione API: Queste funzioni registrano l’API. Non vengono eseguite di nuovo a ogni chiamata del comando.


UO.Poison

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

Firme C#

void UO.Poison();
void UO.Poison(object? target);

Utilizza l'abilità Avvelenamento, se necessario, su un determinato bersaglio.

Parametri

  • target - Opzionale serial/alias target. Nessun argomento - solo UseSkill("Avvelenamento"). Con argomento - UseSkillAtTarget("Avvelenamento", bersaglio).

Valore restituito

void - nessun valore. Chiama su una linea separata; il completamento non conferma l'azione del server.

Comportamento

  • Il comando legacy registrato non è un getter per la resistenza all'avvelenamento o lo stato dell'avvelenamento. Il ramo evoca l'abilità e la scarta 1/0.
  • In un modulo con un bersaglio, UseSkillAtTarget controlla un serial positivo, prepara il bersaglio prima di richiedere l'abilità; se l'abilità non viene accettata, annulla il bersaglio. L'avvelenamento del bersaglio da parte del server non è garantito.

Script C# autonomi

Ogni esempio può essere salvato come file separato .csx ed eseguito in IDE. Le funzioni oggetto UO e attesa forniscono l'host della sessione di gioco corrente. Sostituisci i nomi, le coordinate e gli indirizzi demo serial con i tuoi.

Esempio semplice

Esegui questo codice in un file .csx separato. Gli argomenti sono visibili nella chiamata; sostituisci nomi, serial e indirizzi di esempio con i tuoi.

Il comando è un’istruzione separata. Il messaggio precedente indica l’inizio della chiamata e non conferma un’azione del server.

UO.Print("Calling UO.Poison");
UO.Poison();

1. Chiamata diretta - sceneggiatura diretta

Parametri e flusso di esecuzione:

  • Utilizza l'abilità Avvelenamento, se necessario, su un determinato bersaglio.
UO.Poison();

2. Opzione esplicita: funzione dello script

Parametri e flusso di esecuzione:

  • Il comando legacy registrato non è un getter per la resistenza all'avvelenamento o lo stato dell'avvelenamento. Il ramo evoca l'abilità e la scarta 1/0.
return  RunScenario();
 object? RunScenario()
{
    if (Truth(UO.Exists("lasttarget")))
    {
        UO.Poison("lasttarget");
    }

    return null;
}

bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

3. Funzione di supporto completa: classe di script

Parametri e flusso di esecuzione:

  • In un modulo con un bersaglio, UseSkillAtTarget controlla un serial positivo, prepara il bersaglio prima di richiedere l'abilità; se l'abilità non viene accettata, annulla il bersaglio. L'avvelenamento del bersaglio da parte del server non è garantito.
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        var id = UO.GetSerial("lasttarget");
        if (Truth(UO.Exists(id)))
        {
            UO.Poison(id);
            UO.Print(UO.Waiting());
        }

        return null;
    }

    bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}

Implementazione del comando

C# distingue maiuscole e minuscole. Usare il nome UO esatto. Confrontare i flag numerici con 0; usare bool solo se la firma restituisce bool.

UO.Poison() — UO.Poison()

Parametri: Nessun parametro.

Risultato: void / Unit.

Durante la chiamata:

Codice interno di implementazione; non è uno script autonomo.

case "poison":

                    if (arguments.Length > 0) UseSkillAtTarget(new InjectionValue("Poisoning"), arguments[0]);

                    else UseSkill("Poisoning");

                    break;

UO.Poison(target) — UO.Poison(Any)

Parametri: target (Any)

Risultato: void / Unit.

Durante la chiamata:

Codice interno di implementazione; non è uno script autonomo.

case "poison":

                    if (arguments.Length > 0) UseSkillAtTarget(new InjectionValue("Poisoning"), arguments[0]);

                    else UseSkill("Poisoning");

                    break;

UO.PoisonResist

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

Firme C#

int UO.PoisonResist();

Legge il campo di resistenza del personaggio attuale: veleno.

Parametri

Non ci sono parametri.

Valore restituito

int: valore dello stato con segno, -32768..32767 nel modello client. Il valore negativo viene mantenuto. 0 può essere resistenza reale, mancanza di dati o giocatore scomparso/distrutto; GetResist fornisce anche 0 per un selettore sconosciuto. Questo non è un bool, ID, limite di abilità o resistenza. 1 significa un punto, non un successo.

Comportamento

  • Il comando non accetta argomenti. Usa le firme esatte sopra.
  • La lettura nel thread del gioco richiede Player.PoisonResistance se il Player attuale esiste e non è stato distrutto; altrimenti 0. L'attrezzatura non viene ordinata, i bonus non vengono ricalcolati, lo status non viene richiesto e non c'è attesa per gli aggiornamenti. Un fantasma presente non è uguale ad un Giocatore distrutto.
  • I campi elementari sono estesi CharacterStatus (0x11), type >= 4. Il comando stesso non controlla l'epoca del server. Lo stato compatto/vecchio senza questi campi lascia la cache precedente; Il nuovo Giocatore è inizialmente 0. La Resistenza al Veleno non è una bandiera Poisoned; Inoltre non è un'abilità di resistenza agli incantesimi.
  • CharacterStatus controlla il corpo richiesto prima di modificare il nome, la salute e le proprie caratteristiche, quindi traduce ogni parola di resistenza in una parola firmata Int16. Un corpo obbligatorio tagliato non modifica i dati precedenti. La coda opzionale type 6 mantiene le stesse regole; i comandi di resistenza non leggono i limiti massimi da esso.
  • Ogni chiamata legge nuovamente i dati locali. La variabile memorizza l'istantanea; le singole letture potrebbero ricevere diversi aggiornamenti del server. Un risultato diverso da zero non verifica la connessione. Zero può essere un valore o nessun dato.
  • Queste funzioni registrano l’API. Non vengono eseguite di nuovo a ogni chiamata del comando. C# distingue maiuscole e minuscole. Usare il nome UO esatto. Confrontare i flag numerici con 0; usare bool solo se la firma restituisce bool.

Script C# autonomi

Ogni esempio può essere salvato come file separato .csx ed eseguito in IDE. Le funzioni oggetto UO e attesa forniscono l'host della sessione di gioco corrente. Sostituisci i nomi, le coordinate e gli indirizzi demo serial con i tuoi.

Esempio semplice

Esegui questo codice in un file .csx separato. Gli argomenti sono visibili nella chiamata; sostituisci nomi, serial e indirizzi di esempio con i tuoi.

Il risultato di una sola chiamata viene mostrato nel diario. Un numero non viene convertito in bool; per un array viene mostrato il numero di elementi.

var result = UO.PoisonResist();
UO.Print("PoisonResist: " + Convert.ToString(result));

1. Stampa valore salvato - script diretto

Parametri e flusso di esecuzione:

  • value memorizza il risultato di una chiamata. Convert.ToString formatta il numero per il registro. Non ci sono argomenti: puoi leggere il tuo personaggio.
var value = UO.PoisonResist();
UO.Print("PoisonResistance: " + Convert.ToString(value));

2. Confronta due immagini: funzione script

Parametri e flusso di esecuzione:

  • Tra prima e dopo ci sono UO.Wait(500) millisecondi; difference can be negative. Interim updates may be missed. La pausa si riferisce all'esempio, non al ritardo API.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    var before = UO.PoisonResist();
    await Delay(500);
    var after = UO.PoisonResist();
    var difference = after - before;
    UO.Print("Resistance change: " + Convert.ToString(difference));
    return null;
}

Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));

3. Funzione completa di test della resistenza minima - Classe di script

Parametri e flusso di esecuzione:

  • minimo=50 è un esempio di requisito, non di limite del cliente. ResistanceAtLeast rifiuta il Giocatore mancante, legge un valore e restituisce bool: true o false se valore >= minimo. La resistenza stessa non è bool. La funzione è completamente dichiarata di seguito.
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        if (Truth(Truth(ResistanceAtLeast(50)) == true))
        {
            UO.Print("Local resistance requirement met");
        }
        else
        {
            UO.Print("Requirement not met or no player");
        }

        return null;
    }

    dynamic ResistanceAtLeast(dynamic minimum)
    {
        if (Truth(UO.Self() == 0))
        {
            return false;
        }

        var value = UO.PoisonResist();
        return value >= minimum;
    }

    bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}

Implementazione del comando

C# distingue maiuscole e minuscole. Usare il nome UO esatto. Confrontare i flag numerici con 0; usare bool solo se la firma restituisce bool.

UO.PoisonResist() — UO.PoisonResist()

Parametri: Nessun parametro.

Risultato: int / Integer.

Durante la chiamata:

Codice interno di implementazione; non è uno script autonomo.

case "poisonresist": return new InjectionValue(bridge.PoisonResistance);

UO.Poisoned

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

Firme C#

int UO.Poisoned();
int UO.Poisoned(object? id);

Controlla l'avvelenamento del personaggio.

Parametri

  • id — Oggetto opzionale nei moduli visualizzati: serial per numero/stringa esadecimale, self, lasttarget o nome registrato AddObject. Questo non è type. Senza discutere, leggi self. Il testo sconosciuto in alcuni moduli causa un errore di conversione; controlla il nome prima di chiamare.

Valore restituito

Flag numerico int: 1 (condizione soddisfatta), 0 (condizione non soddisfatta). Questo è un flag numerico: in C# controlla risultato != 0 o risultato == 0. Il confronto diretto di int con true/false e if (risultato) non è consentito. 1 - mobile ha IsPoisoned, 0 non ha flag o mobile manca. Il grado di veleno e il tempo rimanente non vengono restituiti.

Il risultato del comando è un flag numerico: 1 significa una condizione soddisfatta, 0 significa una condizione non soddisfatta. Dopo var risultato = comando(...) controlla se (risultato != 0) o se (risultato == 0). Salva il risultato di una chiamata: una chiamata ripetuta può eseguire nuovamente l'azione o leggere lo stato che è già cambiato.

Comportamento

  • Legge il modello locale: non apre il target, non richiede lo stato, non cambia il flag e non invia il pacchetto. Un oggetto distrutto è considerato mancante anche prima che la voce venga cancellata dal dizionario.
  • Il risultato è una lettura separata. Il mondo può cambiare tra Exists e la prossima sfida; più query non formano uno snapshot atomico.
  • Per Poisoned/Flying viene presa in considerazione la versione del protocollo: fino a 7.0.0.0 il bit 0x04 significa veleno; iniziando con 7.0.0.0 significa fuga e il veleno viene immagazzinato separatamente. Il volo non viene calcolato da Z.

Script C# autonomi

Ogni esempio può essere salvato come file separato .csx ed eseguito in IDE. Le funzioni oggetto UO e attesa forniscono l'host della sessione di gioco corrente. Sostituisci i nomi, le coordinate e gli indirizzi demo serial con i tuoi.

Esempio semplice

Esegui questo codice in un file .csx separato. Gli argomenti sono visibili nella chiamata; sostituisci nomi, serial e indirizzi di esempio con i tuoi.

Il risultato di una sola chiamata viene mostrato nel diario. Un numero non viene convertito in bool; per un array viene mostrato il numero di elementi.

var result = UO.Poisoned();
UO.Print("Poisoned: " + Convert.ToString(result));

1. Controlla il tuo stato - script diretto

Parametri e flusso di esecuzione:

  • Le parentesi vuote leggono self. attivo salva il risultato una volta; true e false definiscono due rami. Print visualizza solo un messaggio di esempio.
var active = UO.Poisoned();
if (Truth(Truth(active) == true))
{
    UO.Print("State is active");
}
else
{
    UO.Print("State is inactive or unavailable");
}

bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

2. Oggetto selezionato e funzione completa ReadState - funzione script

Parametri e flusso di esecuzione:

  • lasttarget – oggetto precedentemente selezionato. Exists ne verifica la presenza. obj è l'unico parametro ReadState; la funzione restituisce il risultato del comando senza modifiche. La sua definizione è inclusa nel codice copiato.
return  RunScenario();
 object? RunScenario()
{
    if (Truth(UO.Exists("lasttarget")))
    {
        var observed = ReadState("lasttarget");
        UO.Print("State 1/0: " + Convert.ToString(observed));
    }

    return null;
}

dynamic ReadState(dynamic obj)
{
    return UO.Poisoned(obj);
}

bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

3. Notare un cambiamento in mezzo secondo: classe di script

Parametri e flusso di esecuzione:

  • Due chiamate senza argomenti leggono self, UO.Wait(500) imposta 500 millisecondi. Vengono confrontate due immagini; le transizioni intermedie possono essere saltate. Non esiste un'attesa infinita.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

    async public Task<object?> RunScenarioAsync()
    {
        var before = UO.Poisoned();
        await Delay(500);
        var after = UO.Poisoned();
        if (Truth(before != after))
        {
            UO.Print("State changed: " + Convert.ToString(before) + " -> " + Convert.ToString(after));
        }

        return null;
    }

    Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
    bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}

Implementazione del comando

C# distingue maiuscole e minuscole. Usare il nome UO esatto. Confrontare i flag numerici con 0; usare bool solo se la firma restituisce bool.

UO.Poisoned() — UO.Poisoned()

Parametri: Nessun parametro.

Risultato: int / Integer.

Durante la chiamata:

Codice interno di implementazione; non è uno script autonomo.

public int Poisoned() => bridge.Poisoned(bridge.Self);

UO.Poisoned(id) — UO.Poisoned(Any)

Parametri: id (Any)

Risultato: int / Integer.

Durante la chiamata:

Codice interno di implementazione; non è uno script autonomo.

public int Poisoned(InjectionValue id) => bridge.Poisoned(GetObject(id));

UO.Race

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

Firme C#

dynamic UO.Race();

Legge la razza del personaggio dal modello client.

Parametri

Non ci sono parametri.

Valore restituito

int — 1=umano, 2=elfo, 3=gargoyle secondo il modello del client. 0 significa nessun carattere caricato. Non è body/graphic e non serial.

Comportamento

  • I dati locali già ricevuti vengono letti. La richiesta non apre lo stato e non forza il server a inviare un aggiornamento. Dopo la morte, la transizione della mappa o l'eliminazione di un oggetto, i valori possono cambiare tra due chiamate.
  • C# distingue maiuscole e minuscole. Usare il nome UO esatto. Confrontare i flag numerici con 0; usare bool solo se la firma restituisce bool.

Script C# autonomi

Ogni esempio può essere salvato come file separato .csx ed eseguito in IDE. Le funzioni oggetto UO e attesa forniscono l'host della sessione di gioco corrente. Sostituisci i nomi, le coordinate e gli indirizzi demo serial con i tuoi.

Esempio semplice

Esegui questo codice in un file .csx separato. Gli argomenti sono visibili nella chiamata; sostituisci nomi, serial e indirizzi di esempio con i tuoi.

Il risultato di una sola chiamata viene mostrato nel diario. Un numero non viene convertito in bool; per un array viene mostrato il numero di elementi.

object? result = UO.Race();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));

1. Visualizza il valore attuale del tuo personaggio - script diretto

Parametri e flusso di esecuzione:

  • La chiamata senza argomenti si riferisce a self. La razza del personaggio viene memorizzata come valore.
  • Convert.ToString converte il numero da emettere e non cambia il significato del risultato.
var value = UO.Race();
UO.Print("Race: " + Convert.ToString(value));

2. Utilizza valore nella convalida dell'applicazione - Funzione script

Parametri e flusso di esecuzione:

  • Il valore viene letto una volta senza argomenti. La razza del personaggio viene utilizzata nel calcolo o nella condizione mostrata.
  • Le soglie numeriche sono esempi di condizioni di script e non di nuovi limiti client. Il campo memorizza le unità server e le restrizioni sopra descritte.
return  RunScenario();
 object? RunScenario()
{
    var value = UO.Race();
    if (Truth(value == 3))
    {
        UO.Print("Player race is gargoyle");
    }

    return null;
}

bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

3. Guarda il cambiamento in un secondo: lezione di script

Parametri e flusso di esecuzione:

  • Entrambe le chiamate senza argomento leggono il loro valore corrente. UO.Wait(1000) dà una pausa in millisecondi tra gli scatti.
  • Cambiamento rispetto: razza del personaggio. Un esempio non cambia nulla al mondo e non aspetta all'infinito. Gli eventi entro questo secondo potrebbero essere persi.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

    async public Task<object?> RunScenarioAsync()
    {
        var before = UO.Race();
        await Delay(1000);
        var after = UO.Race();
        if (Truth(before != after))
        {
            UO.Print("Before: " + Convert.ToString(before) + "; after: " + Convert.ToString(after));
        }

        return null;
    }

    Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
    bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}

Implementazione del comando

C# distingue maiuscole e minuscole. Usare il nome UO esatto. Confrontare i flag numerici con 0; usare bool solo se la firma restituisce bool.

UO.Race() — UO.Race()

Parametri: Nessun parametro.

Risultato: dynamic / Any.

Durante la chiamata:

Codice interno di implementazione; non è uno script autonomo.

case "race": return new InjectionValue(bridge.Race);

UO.RemoveEarrings

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

Firme C#

void UO.RemoveEarrings();

Richiede la rimozione di un elemento dal livello Ear.

Parametri

Non ci sono parametri.

Valore restituito

void - nessun valore. Chiama su una linea separata; il completamento non conferma l'azione del server.

Comportamento

  • ExecuteLegacyManualAlias chiama Unequip("Ear"). ConvertLayer seleziona il livello numerico, bridge.Unequip richiede il trasferimento nello zaino.
  • Il risultato dell'Unequip interno (1/0) del comando legacy viene scartato; chiamare su una linea separata. In mancanza dell'oggetto/zaino la richiesta potrebbe non essere eseguita. Il controllo ObjAtLayer dopo la chiamata legge solo lo stato locale.

Script C# autonomi

Ogni esempio può essere salvato come file separato .csx ed eseguito in IDE. Le funzioni oggetto UO e attesa forniscono l'host della sessione di gioco corrente. Sostituisci i nomi, le coordinate e gli indirizzi demo serial con i tuoi.

Esempio semplice

Esegui questo codice in un file .csx separato. Gli argomenti sono visibili nella chiamata; sostituisci nomi, serial e indirizzi di esempio con i tuoi.

Il comando è un’istruzione separata. Il messaggio precedente indica l’inizio della chiamata e non conferma un’azione del server.

UO.Print("Calling UO.RemoveEarrings");
UO.RemoveEarrings();

1. Chiamata diretta - sceneggiatura diretta

Parametri e flusso di esecuzione:

  • Richiede la rimozione di un elemento dal livello Ear.
UO.RemoveEarrings();

2. Opzione esplicita: funzione dello script

Parametri e flusso di esecuzione:

  • ExecuteLegacyManualAlias chiama Unequip("Ear"). ConvertLayer seleziona il livello numerico, bridge.Unequip richiede il trasferimento nello zaino.
return  RunScenario();
 object? RunScenario()
{
    UO.Print(UO.ObjAtLayer("Ear"));
    UO.RemoveEarrings();
    return null;
}

3. Funzione di supporto completa: classe di script

Parametri e flusso di esecuzione:

  • Il risultato dell'Unequip interno (1/0) del comando legacy viene scartato; chiamare su una linea separata. In mancanza dell'oggetto/zaino la richiesta potrebbe non essere eseguita. Il controllo ObjAtLayer dopo la chiamata legge solo lo stato locale.
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        UO.RemoveEarrings();
        UO.Wait(500);
        UO.Print(UO.ObjAtLayer("Ear"));
        return null;
    }
}

Implementazione del comando

C# distingue maiuscole e minuscole. Usare il nome UO esatto. Confrontare i flag numerici con 0; usare bool solo se la firma restituisce bool.

UO.RemoveEarrings() — UO.RemoveEarrings()

Parametri: Nessun parametro.

Risultato: void / Unit.

Durante la chiamata:

Codice interno di implementazione; non è uno script autonomo.

case "removeearrings": Unequip("Ear"); break;

UO.RemoveHat

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

Firme C#

void UO.RemoveHat();

Richiede la rimozione di un elemento dal livello Hat.

Parametri

Non ci sono parametri.

Valore restituito

void - nessun valore. Chiama su una linea separata; il completamento non conferma l'azione del server.

Comportamento

  • ExecuteLegacyManualAlias chiama Unequip("Hat"). ConvertLayer seleziona il livello numerico, bridge.Unequip richiede il trasferimento nello zaino.
  • Il risultato dell'Unequip interno (1/0) del comando legacy viene scartato; chiamare su una linea separata. In mancanza dell'oggetto/zaino la richiesta potrebbe non essere eseguita. Il controllo ObjAtLayer dopo la chiamata legge solo lo stato locale.

Script C# autonomi

Ogni esempio può essere salvato come file separato .csx ed eseguito in IDE. Le funzioni oggetto UO e attesa forniscono l'host della sessione di gioco corrente. Sostituisci i nomi, le coordinate e gli indirizzi demo serial con i tuoi.

Esempio semplice

Esegui questo codice in un file .csx separato. Gli argomenti sono visibili nella chiamata; sostituisci nomi, serial e indirizzi di esempio con i tuoi.

Il comando è un’istruzione separata. Il messaggio precedente indica l’inizio della chiamata e non conferma un’azione del server.

UO.Print("Calling UO.RemoveHat");
UO.RemoveHat();

1. Chiamata diretta - sceneggiatura diretta

Parametri e flusso di esecuzione:

  • Richiede la rimozione di un elemento dal livello Hat.
UO.RemoveHat();

2. Opzione esplicita: funzione dello script

Parametri e flusso di esecuzione:

  • ExecuteLegacyManualAlias chiama Unequip("Hat"). ConvertLayer seleziona il livello numerico, bridge.Unequip richiede il trasferimento nello zaino.
return  RunScenario();
 object? RunScenario()
{
    UO.Print(UO.ObjAtLayer("Hat"));
    UO.RemoveHat();
    return null;
}

3. Funzione di supporto completa: classe di script

Parametri e flusso di esecuzione:

  • Il risultato dell'Unequip interno (1/0) del comando legacy viene scartato; chiamare su una linea separata. In mancanza dell'oggetto/zaino la richiesta potrebbe non essere eseguita. Il controllo ObjAtLayer dopo la chiamata legge solo lo stato locale.
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        UO.RemoveHat();
        UO.Wait(500);
        UO.Print(UO.ObjAtLayer("Hat"));
        return null;
    }
}

Implementazione del comando

C# distingue maiuscole e minuscole. Usare il nome UO esatto. Confrontare i flag numerici con 0; usare bool solo se la firma restituisce bool.

UO.RemoveHat() — UO.RemoveHat()

Parametri: Nessun parametro.

Risultato: void / Unit.

Durante la chiamata:

Codice interno di implementazione; non è uno script autonomo.

case "removehat": Unequip("Hat"); break;

UO.RemoveNeckless

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

Firme C#

void UO.RemoveNeckless();

Richiede la rimozione di un elemento dal livello Collo.

Parametri

Non ci sono parametri.

Valore restituito

void - nessun valore. Chiama su una linea separata; il completamento non conferma l'azione del server.

Comportamento

  • ExecuteLegacyManualAlias chiama Unequip("Neck"). ConvertLayer seleziona il livello numerico, bridge.Unequip richiede il trasferimento nello zaino.
  • Il risultato dell'Unequip interno (1/0) del comando legacy viene scartato; chiamare su una linea separata. In mancanza dell'oggetto/zaino la richiesta potrebbe non essere eseguita. Il controllo ObjAtLayer dopo la chiamata legge solo lo stato locale.

Script C# autonomi

Ogni esempio può essere salvato come file separato .csx ed eseguito in IDE. Le funzioni oggetto UO e attesa forniscono l'host della sessione di gioco corrente. Sostituisci i nomi, le coordinate e gli indirizzi demo serial con i tuoi.

Esempio semplice

Esegui questo codice in un file .csx separato. Gli argomenti sono visibili nella chiamata; sostituisci nomi, serial e indirizzi di esempio con i tuoi.

Il comando è un’istruzione separata. Il messaggio precedente indica l’inizio della chiamata e non conferma un’azione del server.

UO.Print("Calling UO.RemoveNeckless");
UO.RemoveNeckless();

1. Chiamata diretta - sceneggiatura diretta

Parametri e flusso di esecuzione:

  • Richiede la rimozione di un elemento dal livello Collo.
UO.RemoveNeckless();

2. Opzione esplicita: funzione dello script

Parametri e flusso di esecuzione:

  • ExecuteLegacyManualAlias chiama Unequip("Neck"). ConvertLayer seleziona il livello numerico, bridge.Unequip richiede il trasferimento nello zaino.
return  RunScenario();
 object? RunScenario()
{
    UO.Print(UO.ObjAtLayer("Neck"));
    UO.RemoveNeckless();
    return null;
}

3. Funzione di supporto completa: classe di script

Parametri e flusso di esecuzione:

  • Il risultato dell'Unequip interno (1/0) del comando legacy viene scartato; chiamare su una linea separata. In mancanza dell'oggetto/zaino la richiesta potrebbe non essere eseguita. Il controllo ObjAtLayer dopo la chiamata legge solo lo stato locale.
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        UO.RemoveNeckless();
        UO.Wait(500);
        UO.Print(UO.ObjAtLayer("Neck"));
        return null;
    }
}

Implementazione del comando

C# distingue maiuscole e minuscole. Usare il nome UO esatto. Confrontare i flag numerici con 0; usare bool solo se la firma restituisce bool.

UO.RemoveNeckless() — UO.RemoveNeckless()

Parametri: Nessun parametro.

Risultato: void / Unit.

Durante la chiamata:

Codice interno di implementazione; non è uno script autonomo.

case "removeneckless": Unequip("Neck"); break;

UO.RemoveRing

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

Firme C#

void UO.RemoveRing();

Richiede la rimozione di un elemento dal livello Anello.

Parametri

Non ci sono parametri.

Valore restituito

void - nessun valore. Chiama su una linea separata; il completamento non conferma l'azione del server.

Comportamento

  • ExecuteLegacyManualAlias chiama Unequip("Ring"). ConvertLayer seleziona il livello numerico, bridge.Unequip richiede il trasferimento nello zaino.
  • Il risultato dell'Unequip interno (1/0) del comando legacy viene scartato; chiamare su una linea separata. In mancanza dell'oggetto/zaino la richiesta potrebbe non essere eseguita. Il controllo ObjAtLayer dopo la chiamata legge solo lo stato locale.

Script C# autonomi

Ogni esempio può essere salvato come file separato .csx ed eseguito in IDE. Le funzioni oggetto UO e attesa forniscono l'host della sessione di gioco corrente. Sostituisci i nomi, le coordinate e gli indirizzi demo serial con i tuoi.

Esempio semplice

Esegui questo codice in un file .csx separato. Gli argomenti sono visibili nella chiamata; sostituisci nomi, serial e indirizzi di esempio con i tuoi.

Il comando è un’istruzione separata. Il messaggio precedente indica l’inizio della chiamata e non conferma un’azione del server.

UO.Print("Calling UO.RemoveRing");
UO.RemoveRing();

1. Chiamata diretta - sceneggiatura diretta

Parametri e flusso di esecuzione:

  • Richiede la rimozione di un elemento dal livello Anello.
UO.RemoveRing();

2. Opzione esplicita: funzione dello script

Parametri e flusso di esecuzione:

  • ExecuteLegacyManualAlias chiama Unequip("Ring"). ConvertLayer seleziona il livello numerico, bridge.Unequip richiede il trasferimento nello zaino.
return  RunScenario();
 object? RunScenario()
{
    UO.Print(UO.ObjAtLayer("Ring"));
    UO.RemoveRing();
    return null;
}

3. Funzione di supporto completa: classe di script

Parametri e flusso di esecuzione:

  • Il risultato dell'Unequip interno (1/0) del comando legacy viene scartato; chiamare su una linea separata. In mancanza dell'oggetto/zaino la richiesta potrebbe non essere eseguita. Il controllo ObjAtLayer dopo la chiamata legge solo lo stato locale.
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        UO.RemoveRing();
        UO.Wait(500);
        UO.Print(UO.ObjAtLayer("Ring"));
        return null;
    }
}

Implementazione del comando

C# distingue maiuscole e minuscole. Usare il nome UO esatto. Confrontare i flag numerici con 0; usare bool solo se la firma restituisce bool.

UO.RemoveRing() — UO.RemoveRing()

Parametri: Nessun parametro.

Risultato: void / Unit.

Durante la chiamata:

Codice interno di implementazione; non è uno script autonomo.

case "removering": Unequip("Ring"); break;

UO.RequestStats

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

Firme C#

void UO.RequestStats(object? objID);

Richiede lo stato del personaggio tramite serial.

Parametri

  • objID — Oggetto seriale/ID: int, stringa numerica/esadecimale o alias stabilito, ad esempio "lasttarget". Questo non è graphic/type. Controllare l'oggetto caricato prima di agire.

Valore restituito

void - nessun valore. Chiama su una linea separata; il completamento non conferma l'azione del server.

Comportamento

  • RequestStats chiama RequestMobileStatus(_world, serial, true). La chiamata non restituisce un array di caratteristiche e non attende una risposta; GetHP/GetStr è seguito dalla lettura del modello locale.
  • Bridge invia la richiesta sullo streaming del gioco. Si applicano le regole del server; Non è prevista l'attesa di conferma.

Script C# autonomi

Ogni esempio può essere salvato come file separato .csx ed eseguito in IDE. Le funzioni oggetto UO e attesa forniscono l'host della sessione di gioco corrente. Sostituisci i nomi, le coordinate e gli indirizzi demo serial con i tuoi.

Esempio semplice

Esegui questo codice in un file .csx separato. Gli argomenti sono visibili nella chiamata; sostituisci nomi, serial e indirizzi di esempio con i tuoi.

Il comando è un’istruzione separata. Il messaggio precedente indica l’inizio della chiamata e non conferma un’azione del server.

UO.Print("Calling UO.RequestStats");
UO.RequestStats(UO.GetSerial("lasttarget"));

1. Chiamata diretta - sceneggiatura diretta

Parametri e flusso di esecuzione:

  • Richiede lo stato del personaggio tramite serial.
var id = UO.GetSerial("lasttarget");
if (Truth(UO.Exists(id)))
{
    UO.RequestStats(id);
}

bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

2. Opzione esplicita: funzione dello script

Parametri e flusso di esecuzione:

  • RequestStats chiama RequestMobileStatus(_world, serial, true). La chiamata non restituisce un array di caratteristiche e non attende una risposta; GetHP/GetStr è seguito dalla lettura del modello locale.
return  RunScenario();
 object? RunScenario()
{
    var id = UO.GetSerial("self");
    if (Truth(UO.Exists(id)))
    {
        UO.RequestStats(id);
    }

    return null;
}

bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

3. Funzione di supporto completa: classe di script

Parametri e flusso di esecuzione:

  • Bridge invia la richiesta sullo streaming del gioco. Si applicano le regole del server; Non è prevista l'attesa di conferma.
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        ApplyToLoaded(UO.GetSerial("lasttarget"));
        return null;
    }

    void ApplyToLoaded(dynamic id)
    {
        if (Truth(UO.Exists(id)))
        {
            UO.RequestStats(id);
        }
    }

    bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}

Implementazione del comando

C# distingue maiuscole e minuscole. Usare il nome UO esatto. Confrontare i flag numerici con 0; usare bool solo se la firma restituisce bool.

UO.RequestStats(objID) — UO.RequestStats(Any)

Parametri: objID (Any)

Risultato: void / Unit.

Durante la chiamata:

Codice interno di implementazione; non è uno script autonomo.

case "requeststats": bridge.RequestStats(Arg(0)); return InjectionValue.Unit;

UO.ResistCold

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

Firme C#

int UO.ResistCold();

Legge il campo di resistenza del personaggio attuale: freddo.

Parametri

Non ci sono parametri.

Valore restituito

int: valore dello stato con segno, -32768..32767 nel modello client. Il valore negativo viene mantenuto. 0 può essere resistenza reale, mancanza di dati o giocatore scomparso/distrutto; GetResist fornisce anche 0 per un selettore sconosciuto. Questo non è un bool, ID, limite di abilità o resistenza. 1 significa un punto, non un successo.

Comportamento

  • Il comando non accetta argomenti. Usa le firme esatte sopra.
  • La lettura nel thread del gioco richiede Player.ColdResistance se il Player attuale esiste e non è stato distrutto; altrimenti 0. L'attrezzatura non viene ordinata, i bonus non vengono ricalcolati, lo status non viene richiesto e non c'è attesa per gli aggiornamenti. Un fantasma presente non è uguale ad un Giocatore distrutto.
  • I campi elementari sono estesi CharacterStatus (0x11), type >= 4. Il comando stesso non controlla l'epoca del server. Lo stato compatto/vecchio senza questi campi lascia la cache precedente; Il nuovo Giocatore è inizialmente 0. La Resistenza al Veleno non è una bandiera Poisoned; Inoltre non è un'abilità di resistenza agli incantesimi.
  • CharacterStatus controlla il corpo richiesto prima di modificare il nome, la salute e le proprie caratteristiche, quindi traduce ogni parola di resistenza in una parola firmata Int16. Un corpo obbligatorio tagliato non modifica i dati precedenti. La coda opzionale type 6 mantiene le stesse regole; i comandi di resistenza non leggono i limiti massimi da esso.
  • Ogni chiamata legge nuovamente i dati locali. La variabile memorizza l'istantanea; le singole letture potrebbero ricevere diversi aggiornamenti del server. Un risultato diverso da zero non verifica la connessione. Zero può essere un valore o nessun dato.
  • Queste funzioni registrano l’API. Non vengono eseguite di nuovo a ogni chiamata del comando. C# distingue maiuscole e minuscole. Usare il nome UO esatto. Confrontare i flag numerici con 0; usare bool solo se la firma restituisce bool.

Script C# autonomi

Ogni esempio può essere salvato come file separato .csx ed eseguito in IDE. Le funzioni oggetto UO e attesa forniscono l'host della sessione di gioco corrente. Sostituisci i nomi, le coordinate e gli indirizzi demo serial con i tuoi.

Esempio semplice

Esegui questo codice in un file .csx separato. Gli argomenti sono visibili nella chiamata; sostituisci nomi, serial e indirizzi di esempio con i tuoi.

Il risultato di una sola chiamata viene mostrato nel diario. Un numero non viene convertito in bool; per un array viene mostrato il numero di elementi.

var result = UO.ResistCold();
UO.Print("ResistCold: " + Convert.ToString(result));

1. Stampa valore salvato - script diretto

Parametri e flusso di esecuzione:

  • value memorizza il risultato di una chiamata. Convert.ToString formatta il numero per il registro. Non ci sono argomenti: puoi leggere il tuo personaggio.
var value = UO.ResistCold();
UO.Print("ColdResistance: " + Convert.ToString(value));

2. Confronta due immagini: funzione script

Parametri e flusso di esecuzione:

  • Tra prima e dopo ci sono UO.Wait(500) millisecondi; difference can be negative. Interim updates may be missed. La pausa si riferisce all'esempio, non al ritardo API.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    var before = UO.ResistCold();
    await Delay(500);
    var after = UO.ResistCold();
    var difference = after - before;
    UO.Print("Resistance change: " + Convert.ToString(difference));
    return null;
}

Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));

3. Funzione completa di test della resistenza minima - Classe di script

Parametri e flusso di esecuzione:

  • minimo=50 è un esempio di requisito, non di limite del cliente. ResistanceAtLeast rifiuta il Giocatore mancante, legge un valore e restituisce bool: true o false se valore >= minimo. La resistenza stessa non è bool. La funzione è completamente dichiarata di seguito.
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        if (Truth(Truth(ResistanceAtLeast(50)) == true))
        {
            UO.Print("Local resistance requirement met");
        }
        else
        {
            UO.Print("Requirement not met or no player");
        }

        return null;
    }

    dynamic ResistanceAtLeast(dynamic minimum)
    {
        if (Truth(UO.Self() == 0))
        {
            return false;
        }

        var value = UO.ResistCold();
        return value >= minimum;
    }

    bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}

Implementazione del comando

C# distingue maiuscole e minuscole. Usare il nome UO esatto. Confrontare i flag numerici con 0; usare bool solo se la firma restituisce bool.

UO.ResistCold() — UO.ResistCold()

Parametri: Nessun parametro.

Risultato: int / Integer.

Durante la chiamata:

La chiamata esegue il delegate del gestore memorizzato. Il metodo di registrazione lo crea durante la costruzione dell’API.

Codice interno di implementazione; non è uno script autonomo.

() => bridge.ColdResistance

Creazione API: Queste funzioni registrano l’API. Non vengono eseguite di nuovo a ogni chiamata del comando.


UO.ResistEnergy

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

Firme C#

int UO.ResistEnergy();

Legge il campo di resistenza del personaggio attuale: energia.

Parametri

Non ci sono parametri.

Valore restituito

int: valore dello stato con segno, -32768..32767 nel modello client. Il valore negativo viene mantenuto. 0 può essere resistenza reale, mancanza di dati o giocatore scomparso/distrutto; GetResist fornisce anche 0 per un selettore sconosciuto. Questo non è un bool, ID, limite di abilità o resistenza. 1 significa un punto, non un successo.

Comportamento

  • Il comando non accetta argomenti. Usa le firme esatte sopra.
  • La lettura nel thread del gioco richiede Player.EnergyResistance se il Player attuale esiste e non è stato distrutto; altrimenti 0. L'attrezzatura non viene ordinata, i bonus non vengono ricalcolati, lo status non viene richiesto e non c'è attesa per gli aggiornamenti. Un fantasma presente non è uguale ad un Giocatore distrutto.
  • I campi elementari sono estesi CharacterStatus (0x11), type >= 4. Il comando stesso non controlla l'epoca del server. Lo stato compatto/vecchio senza questi campi lascia la cache precedente; Il nuovo Giocatore è inizialmente 0. La Resistenza al Veleno non è una bandiera Poisoned; Inoltre non è un'abilità di resistenza agli incantesimi.
  • CharacterStatus controlla il corpo richiesto prima di modificare il nome, la salute e le proprie caratteristiche, quindi traduce ogni parola di resistenza in una parola firmata Int16. Un corpo obbligatorio tagliato non modifica i dati precedenti. La coda opzionale type 6 mantiene le stesse regole; i comandi di resistenza non leggono i limiti massimi da esso.
  • Ogni chiamata legge nuovamente i dati locali. La variabile memorizza l'istantanea; le singole letture potrebbero ricevere diversi aggiornamenti del server. Un risultato diverso da zero non verifica la connessione. Zero può essere un valore o nessun dato.
  • Queste funzioni registrano l’API. Non vengono eseguite di nuovo a ogni chiamata del comando. C# distingue maiuscole e minuscole. Usare il nome UO esatto. Confrontare i flag numerici con 0; usare bool solo se la firma restituisce bool.

Script C# autonomi

Ogni esempio può essere salvato come file separato .csx ed eseguito in IDE. Le funzioni oggetto UO e attesa forniscono l'host della sessione di gioco corrente. Sostituisci i nomi, le coordinate e gli indirizzi demo serial con i tuoi.

Esempio semplice

Esegui questo codice in un file .csx separato. Gli argomenti sono visibili nella chiamata; sostituisci nomi, serial e indirizzi di esempio con i tuoi.

Il risultato di una sola chiamata viene mostrato nel diario. Un numero non viene convertito in bool; per un array viene mostrato il numero di elementi.

var result = UO.ResistEnergy();
UO.Print("ResistEnergy: " + Convert.ToString(result));

1. Stampa valore salvato - script diretto

Parametri e flusso di esecuzione:

  • value memorizza il risultato di una chiamata. Convert.ToString formatta il numero per il registro. Non ci sono argomenti: puoi leggere il tuo personaggio.
var value = UO.ResistEnergy();
UO.Print("EnergyResistance: " + Convert.ToString(value));

2. Confronta due immagini: funzione script

Parametri e flusso di esecuzione:

  • Tra prima e dopo ci sono UO.Wait(500) millisecondi; difference can be negative. Interim updates may be missed. La pausa si riferisce all'esempio, non al ritardo API.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    var before = UO.ResistEnergy();
    await Delay(500);
    var after = UO.ResistEnergy();
    var difference = after - before;
    UO.Print("Resistance change: " + Convert.ToString(difference));
    return null;
}

Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));

3. Funzione completa di test della resistenza minima - Classe di script

Parametri e flusso di esecuzione:

  • minimo=50 è un esempio di requisito, non di limite del cliente. ResistanceAtLeast rifiuta il Giocatore mancante, legge un valore e restituisce bool: true o false se valore >= minimo. La resistenza stessa non è bool. La funzione è completamente dichiarata di seguito.
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        if (Truth(Truth(ResistanceAtLeast(50)) == true))
        {
            UO.Print("Local resistance requirement met");
        }
        else
        {
            UO.Print("Requirement not met or no player");
        }

        return null;
    }

    dynamic ResistanceAtLeast(dynamic minimum)
    {
        if (Truth(UO.Self() == 0))
        {
            return false;
        }

        var value = UO.ResistEnergy();
        return value >= minimum;
    }

    bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}

Implementazione del comando

C# distingue maiuscole e minuscole. Usare il nome UO esatto. Confrontare i flag numerici con 0; usare bool solo se la firma restituisce bool.

UO.ResistEnergy() — UO.ResistEnergy()

Parametri: Nessun parametro.

Risultato: int / Integer.

Durante la chiamata:

La chiamata esegue il delegate del gestore memorizzato. Il metodo di registrazione lo crea durante la costruzione dell’API.

Codice interno di implementazione; non è uno script autonomo.

() => bridge.EnergyResistance

Creazione API: Queste funzioni registrano l’API. Non vengono eseguite di nuovo a ogni chiamata del comando.


UO.ResistFire

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

Firme C#

int UO.ResistFire();

Legge il campo di resistenza del personaggio attuale: fuoco.

Parametri

Non ci sono parametri.

Valore restituito

int: valore dello stato con segno, -32768..32767 nel modello client. Il valore negativo viene mantenuto. 0 può essere resistenza reale, mancanza di dati o giocatore scomparso/distrutto; GetResist fornisce anche 0 per un selettore sconosciuto. Questo non è un bool, ID, limite di abilità o resistenza. 1 significa un punto, non un successo.

Comportamento

  • Il comando non accetta argomenti. Usa le firme esatte sopra.
  • La lettura nel thread del gioco richiede Player.FireResistance se il Player attuale esiste e non è stato distrutto; altrimenti 0. L'attrezzatura non viene ordinata, i bonus non vengono ricalcolati, lo status non viene richiesto e non c'è attesa per gli aggiornamenti. Un fantasma presente non è uguale ad un Giocatore distrutto.
  • I campi elementari sono estesi CharacterStatus (0x11), type >= 4. Il comando stesso non controlla l'epoca del server. Lo stato compatto/vecchio senza questi campi lascia la cache precedente; Il nuovo Giocatore è inizialmente 0. La Resistenza al Veleno non è una bandiera Poisoned; Inoltre non è un'abilità di resistenza agli incantesimi.
  • CharacterStatus controlla il corpo richiesto prima di modificare il nome, la salute e le proprie caratteristiche, quindi traduce ogni parola di resistenza in una parola firmata Int16. Un corpo obbligatorio tagliato non modifica i dati precedenti. La coda opzionale type 6 mantiene le stesse regole; i comandi di resistenza non leggono i limiti massimi da esso.
  • Ogni chiamata legge nuovamente i dati locali. La variabile memorizza l'istantanea; le singole letture potrebbero ricevere diversi aggiornamenti del server. Un risultato diverso da zero non verifica la connessione. Zero può essere un valore o nessun dato.
  • Queste funzioni registrano l’API. Non vengono eseguite di nuovo a ogni chiamata del comando. C# distingue maiuscole e minuscole. Usare il nome UO esatto. Confrontare i flag numerici con 0; usare bool solo se la firma restituisce bool.

Script C# autonomi

Ogni esempio può essere salvato come file separato .csx ed eseguito in IDE. Le funzioni oggetto UO e attesa forniscono l'host della sessione di gioco corrente. Sostituisci i nomi, le coordinate e gli indirizzi demo serial con i tuoi.

Esempio semplice

Esegui questo codice in un file .csx separato. Gli argomenti sono visibili nella chiamata; sostituisci nomi, serial e indirizzi di esempio con i tuoi.

Il risultato di una sola chiamata viene mostrato nel diario. Un numero non viene convertito in bool; per un array viene mostrato il numero di elementi.

var result = UO.ResistFire();
UO.Print("ResistFire: " + Convert.ToString(result));

1. Stampa valore salvato - script diretto

Parametri e flusso di esecuzione:

  • value memorizza il risultato di una chiamata. Convert.ToString formatta il numero per il registro. Non ci sono argomenti: puoi leggere il tuo personaggio.
var value = UO.ResistFire();
UO.Print("FireResistance: " + Convert.ToString(value));

2. Confronta due immagini: funzione script

Parametri e flusso di esecuzione:

  • Tra prima e dopo ci sono UO.Wait(500) millisecondi; difference can be negative. Interim updates may be missed. La pausa si riferisce all'esempio, non al ritardo API.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    var before = UO.ResistFire();
    await Delay(500);
    var after = UO.ResistFire();
    var difference = after - before;
    UO.Print("Resistance change: " + Convert.ToString(difference));
    return null;
}

Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));

3. Funzione completa di test della resistenza minima - Classe di script

Parametri e flusso di esecuzione:

  • minimo=50 è un esempio di requisito, non di limite del cliente. ResistanceAtLeast rifiuta il Giocatore mancante, legge un valore e restituisce bool: true o false se valore >= minimo. La resistenza stessa non è bool. La funzione è completamente dichiarata di seguito.
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        if (Truth(Truth(ResistanceAtLeast(50)) == true))
        {
            UO.Print("Local resistance requirement met");
        }
        else
        {
            UO.Print("Requirement not met or no player");
        }

        return null;
    }

    dynamic ResistanceAtLeast(dynamic minimum)
    {
        if (Truth(UO.Self() == 0))
        {
            return false;
        }

        var value = UO.ResistFire();
        return value >= minimum;
    }

    bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}

Implementazione del comando

C# distingue maiuscole e minuscole. Usare il nome UO esatto. Confrontare i flag numerici con 0; usare bool solo se la firma restituisce bool.

UO.ResistFire() — UO.ResistFire()

Parametri: Nessun parametro.

Risultato: int / Integer.

Durante la chiamata:

La chiamata esegue il delegate del gestore memorizzato. Il metodo di registrazione lo crea durante la costruzione dell’API.

Codice interno di implementazione; non è uno script autonomo.

() => bridge.FireResistance

Creazione API: Queste funzioni registrano l’API. Non vengono eseguite di nuovo a ogni chiamata del comando.


UO.ResistPhysical

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

Firme C#

int UO.ResistPhysical();

Legge il campo di resistenza del personaggio attuale: armatura/resistenza fisica.

Parametri

Non ci sono parametri.

Valore restituito

int: valore dello stato con segno, -32768..32767 nel modello client. Il valore negativo viene mantenuto. 0 può essere resistenza reale, mancanza di dati o giocatore scomparso/distrutto; GetResist fornisce anche 0 per un selettore sconosciuto. Questo non è un bool, ID, limite di abilità o resistenza. 1 significa un punto, non un successo.

Comportamento

  • Il comando non accetta argomenti. Usa le firme esatte sopra.
  • La lettura nel thread del gioco richiede Player.PhysicalResistance se il Player attuale esiste e non è stato distrutto; altrimenti 0. L'attrezzatura non viene ordinata, i bonus non vengono ricalcolati, lo status non viene richiesto e non c'è attesa per gli aggiornamenti. Un fantasma presente non è uguale ad un Giocatore distrutto.
  • PhysicalResistance - campo armatura/stato del server: il server classico può trasmettere il valore dell'armatura e le regole con resistenze possono trasmettere resistenza fisica. API non converte dall'uno all'altro e non calcola la percentuale di riduzione del danno. Armor e gli alias fisici leggono lo stesso campo.
  • CharacterStatus controlla il corpo richiesto prima di modificare il nome, la salute e le proprie caratteristiche, quindi traduce ogni parola di resistenza in una parola firmata Int16. Un corpo obbligatorio tagliato non modifica i dati precedenti. La coda opzionale type 6 mantiene le stesse regole; i comandi di resistenza non leggono i limiti massimi da esso.
  • Ogni chiamata legge nuovamente i dati locali. La variabile memorizza l'istantanea; le singole letture potrebbero ricevere diversi aggiornamenti del server. Un risultato diverso da zero non verifica la connessione. Zero può essere un valore o nessun dato.
  • Queste funzioni registrano l’API. Non vengono eseguite di nuovo a ogni chiamata del comando. C# distingue maiuscole e minuscole. Usare il nome UO esatto. Confrontare i flag numerici con 0; usare bool solo se la firma restituisce bool.

Script C# autonomi

Ogni esempio può essere salvato come file separato .csx ed eseguito in IDE. Le funzioni oggetto UO e attesa forniscono l'host della sessione di gioco corrente. Sostituisci i nomi, le coordinate e gli indirizzi demo serial con i tuoi.

Esempio semplice

Esegui questo codice in un file .csx separato. Gli argomenti sono visibili nella chiamata; sostituisci nomi, serial e indirizzi di esempio con i tuoi.

Il risultato di una sola chiamata viene mostrato nel diario. Un numero non viene convertito in bool; per un array viene mostrato il numero di elementi.

var result = UO.ResistPhysical();
UO.Print("ResistPhysical: " + Convert.ToString(result));

1. Stampa valore salvato - script diretto

Parametri e flusso di esecuzione:

  • value memorizza il risultato di una chiamata. Convert.ToString formatta il numero per il registro. Non ci sono argomenti: puoi leggere il tuo personaggio.
var value = UO.ResistPhysical();
UO.Print("PhysicalResistance: " + Convert.ToString(value));

2. Confronta due immagini: funzione script

Parametri e flusso di esecuzione:

  • Tra prima e dopo ci sono UO.Wait(500) millisecondi; difference can be negative. Interim updates may be missed. La pausa si riferisce all'esempio, non al ritardo API.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    var before = UO.ResistPhysical();
    await Delay(500);
    var after = UO.ResistPhysical();
    var difference = after - before;
    UO.Print("Resistance change: " + Convert.ToString(difference));
    return null;
}

Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));

3. Funzione completa di test della resistenza minima - Classe di script

Parametri e flusso di esecuzione:

  • minimo=50 è un esempio di requisito, non di limite del cliente. ResistanceAtLeast rifiuta il Giocatore mancante, legge un valore e restituisce bool: true o false se valore >= minimo. La resistenza stessa non è bool. La funzione è completamente dichiarata di seguito.
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        if (Truth(Truth(ResistanceAtLeast(50)) == true))
        {
            UO.Print("Local resistance requirement met");
        }
        else
        {
            UO.Print("Requirement not met or no player");
        }

        return null;
    }

    dynamic ResistanceAtLeast(dynamic minimum)
    {
        if (Truth(UO.Self() == 0))
        {
            return false;
        }

        var value = UO.ResistPhysical();
        return value >= minimum;
    }

    bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}

Implementazione del comando

C# distingue maiuscole e minuscole. Usare il nome UO esatto. Confrontare i flag numerici con 0; usare bool solo se la firma restituisce bool.

UO.ResistPhysical() — UO.ResistPhysical()

Parametri: Nessun parametro.

Risultato: int / Integer.

Durante la chiamata:

La chiamata esegue il delegate del gestore memorizzato. Il metodo di registrazione lo crea durante la costruzione dell’API.

Codice interno di implementazione; non è uno script autonomo.

() => bridge.Armor

Creazione API: Queste funzioni registrano l’API. Non vengono eseguite di nuovo a ogni chiamata del comando.


UO.ResistPoison

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

Firme C#

int UO.ResistPoison();

Legge il campo di resistenza del personaggio attuale: veleno.

Parametri

Non ci sono parametri.

Valore restituito

int: valore dello stato con segno, -32768..32767 nel modello client. Il valore negativo viene mantenuto. 0 può essere resistenza reale, mancanza di dati o giocatore scomparso/distrutto; GetResist fornisce anche 0 per un selettore sconosciuto. Questo non è un bool, ID, limite di abilità o resistenza. 1 significa un punto, non un successo.

Comportamento

  • Il comando non accetta argomenti. Usa le firme esatte sopra.
  • La lettura nel thread del gioco richiede Player.PoisonResistance se il Player attuale esiste e non è stato distrutto; altrimenti 0. L'attrezzatura non viene ordinata, i bonus non vengono ricalcolati, lo status non viene richiesto e non c'è attesa per gli aggiornamenti. Un fantasma presente non è uguale ad un Giocatore distrutto.
  • I campi elementari sono estesi CharacterStatus (0x11), type >= 4. Il comando stesso non controlla l'epoca del server. Lo stato compatto/vecchio senza questi campi lascia la cache precedente; Il nuovo Giocatore è inizialmente 0. La Resistenza al Veleno non è una bandiera Poisoned; Inoltre non è un'abilità di resistenza agli incantesimi.
  • CharacterStatus controlla il corpo richiesto prima di modificare il nome, la salute e le proprie caratteristiche, quindi traduce ogni parola di resistenza in una parola firmata Int16. Un corpo obbligatorio tagliato non modifica i dati precedenti. La coda opzionale type 6 mantiene le stesse regole; i comandi di resistenza non leggono i limiti massimi da esso.
  • Ogni chiamata legge nuovamente i dati locali. La variabile memorizza l'istantanea; le singole letture potrebbero ricevere diversi aggiornamenti del server. Un risultato diverso da zero non verifica la connessione. Zero può essere un valore o nessun dato.
  • Queste funzioni registrano l’API. Non vengono eseguite di nuovo a ogni chiamata del comando. C# distingue maiuscole e minuscole. Usare il nome UO esatto. Confrontare i flag numerici con 0; usare bool solo se la firma restituisce bool.

Script C# autonomi

Ogni esempio può essere salvato come file separato .csx ed eseguito in IDE. Le funzioni oggetto UO e attesa forniscono l'host della sessione di gioco corrente. Sostituisci i nomi, le coordinate e gli indirizzi demo serial con i tuoi.

Esempio semplice

Esegui questo codice in un file .csx separato. Gli argomenti sono visibili nella chiamata; sostituisci nomi, serial e indirizzi di esempio con i tuoi.

Il risultato di una sola chiamata viene mostrato nel diario. Un numero non viene convertito in bool; per un array viene mostrato il numero di elementi.

var result = UO.ResistPoison();
UO.Print("ResistPoison: " + Convert.ToString(result));

1. Stampa valore salvato - script diretto

Parametri e flusso di esecuzione:

  • value memorizza il risultato di una chiamata. Convert.ToString formatta il numero per il registro. Non ci sono argomenti: puoi leggere il tuo personaggio.
var value = UO.ResistPoison();
UO.Print("PoisonResistance: " + Convert.ToString(value));

2. Confronta due immagini: funzione script

Parametri e flusso di esecuzione:

  • Tra prima e dopo ci sono UO.Wait(500) millisecondi; difference can be negative. Interim updates may be missed. La pausa si riferisce all'esempio, non al ritardo API.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    var before = UO.ResistPoison();
    await Delay(500);
    var after = UO.ResistPoison();
    var difference = after - before;
    UO.Print("Resistance change: " + Convert.ToString(difference));
    return null;
}

Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));

3. Funzione completa di test della resistenza minima - Classe di script

Parametri e flusso di esecuzione:

  • minimo=50 è un esempio di requisito, non di limite del cliente. ResistanceAtLeast rifiuta il Giocatore mancante, legge un valore e restituisce bool: true o false se valore >= minimo. La resistenza stessa non è bool. La funzione è completamente dichiarata di seguito.
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        if (Truth(Truth(ResistanceAtLeast(50)) == true))
        {
            UO.Print("Local resistance requirement met");
        }
        else
        {
            UO.Print("Requirement not met or no player");
        }

        return null;
    }

    dynamic ResistanceAtLeast(dynamic minimum)
    {
        if (Truth(UO.Self() == 0))
        {
            return false;
        }

        var value = UO.ResistPoison();
        return value >= minimum;
    }

    bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}

Implementazione del comando

C# distingue maiuscole e minuscole. Usare il nome UO esatto. Confrontare i flag numerici con 0; usare bool solo se la firma restituisce bool.

UO.ResistPoison() — UO.ResistPoison()

Parametri: Nessun parametro.

Risultato: int / Integer.

Durante la chiamata:

La chiamata esegue il delegate del gestore memorizzato. Il metodo di registrazione lo crea durante la costruzione dell’API.

Codice interno di implementazione; non è uno script autonomo.

() => bridge.PoisonResistance

Creazione API: Queste funzioni registrano l’API. Non vengono eseguite di nuovo a ogni chiamata del comando.


UO.Self

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

Firme C#

int UO.Self();

Restituisce ID del carattere corrente.

Parametri

Non ci sono parametri.

Valore restituito

int - serial/ID, non graphic/type, livello, numero di elementi o bool. 0—non esiste alcun oggetto corrente. Tutti i bit 32 serial vengono salvati; controlla != 0, non == true o > 0. Il risultato salvato non viene aggiornato automaticamente. Legge World.Player.Serial; un giocatore scomparso o distrutto dà 0. La morte è diversa dall'allontanamento: il fantasma presente conserva il ID del personaggio.

Comportamento

  • Non ci sono parametri. Legge i dati locali tramite Invoke sullo streaming del gioco; l'annullamento dello script interrompe l'attesa per quel thread. Non invia il pacco, non apre il contenitore/destinazione e non trasferisce l'oggetto.
  • Il self/backpack integrato senza parentesi viene letto di nuovo a meno che non venga sovrascritto da una variabile di script. I nomi delle stringhe vengono elaborati dal comando di ricezione. Nella destinazione del trasporto, "self" indica lo zaino e UO.Self() restituisce serial del personaggio. Per il contenitore ID, utilizzare UO.Backpack() esplicitamente.
  • World.Clear rimuove il giocatore; le letture successive producono 0. Entrare nel mondo o cambiare la borsa equipaggiata può cambiare ID. Le letture individuali non sono atomiche. Un valore diverso da zero ID non dimostra la connessione, la risoluzione del server o il caricamento del contenuto.

Script C# autonomi

Ogni esempio può essere salvato come file separato .csx ed eseguito in IDE. Le funzioni oggetto UO e attesa forniscono l'host della sessione di gioco corrente. Sostituisci i nomi, le coordinate e gli indirizzi demo serial con i tuoi.

Esempio semplice

Esegui questo codice in un file .csx separato. Gli argomenti sono visibili nella chiamata; sostituisci nomi, serial e indirizzi di esempio con i tuoi.

Il risultato di una sola chiamata viene mostrato nel diario. Un numero non viene convertito in bool; per un array viene mostrato il numero di elementi.

var result = UO.Self();
UO.Print("Self: " + Convert.ToString(result));

1. Leggi e genera ID - script diretto

Parametri e flusso di esecuzione:

  • id memorizza il risultato di una chiamata; HEX formatta serial per il registro. L'esempio non seleziona né utilizza nulla.
var id = UO.Self();
UO.Print("ID: " + Hex(id));

string Hex(object? value) => Convert.ToInt64(value).ToString("X");

2. Rileva modifica ID - Funzione script

Parametri e flusso di esecuzione:

  • prima/dopo vengono letti ad intervalli di 250 ms. UO.Wait aggiunto solo ad esempio. Uguaglianza significa finale identico ID; le modifiche intermedie potrebbero non essere perse.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    var before = UO.Self();
    await Delay(250);
    var after = UO.Self();
    if (Truth(before != after))
    {
        UO.Print("ID changed: " + Hex(after));
    }

    return null;
}

Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
string Hex(object? value) => Convert.ToInt64(value).ToString("X");
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

3. Funzione completa IsOwnSerial - classe di script

Parametri e flusso di esecuzione:

  • candidato - salvato ID LastTarget. IsOwnSerial(candidato) prende uno serial e restituisce bool: true per l'attuale proprio diverso da zero ID, altrimenti false. La definizione della funzione è riportata integralmente; l'obiettivo non cambia
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        var candidate = UO.LastTarget();
        if (Truth(Truth(IsOwnSerial(candidate)) == true))
        {
            UO.Print("Own object selected");
        }
        else
        {
            UO.Print("Different object or no own object");
        }

        return null;
    }

    dynamic IsOwnSerial(dynamic candidate)
    {
        var current = UO.Self();
        return Truth(current != 0) && Truth(current == candidate);
    }

    bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}

Implementazione del comando

C# distingue maiuscole e minuscole. Usare il nome UO esatto. Confrontare i flag numerici con 0; usare bool solo se la firma restituisce bool.

UO.Self() — UO.Self()

Parametri: Nessun parametro.

Risultato: int / Integer.

Durante la chiamata:

Codice interno di implementazione; non è uno script autonomo.

case "self": return new InjectionValue(bridge.Self);

UO.SetARExtParams

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

Firme C#

void UO.SetARExtParams();
void UO.SetARExtParams(object? shardName);
void UO.SetARExtParams(object? shardName, object? charName);
void UO.SetARExtParams(object? shardName, object? charName, object? useAtEveryConnect);

Specifica un server dall'elenco di frammenti e un carattere per l'accesso successivo. Utile quando lo script deve essere ricollegato da un certo personaggio dello stesso account.

Parametri

  • shardName — Nome visualizzato opzionale del server dall'elenco degli accessi, non IP o porta. Un valore vuoto o mancante viene assunto dall'attuale ShardName. Lo spazio bianco attorno ai bordi viene rimosso.
  • charName - Nome facoltativo di un carattere di account esistente. Un valore vuoto o mancante prende il nome self se noto. Questo è il nome, non il numero dello slot o serial; un nome non vuoto ha la precedenza sullo slot del profilo.
  • useAtEveryConnect - Flag opzionale: false/0 per impostazione predefinita - selezione una tantum; true/1 o altro numero intero diverso da zero: salva la selezione per accessi futuri in questa sessione.

Valore restituito

void - nessun valore. Questo sta impostando l'input successivo, non confermando la connessione o l'esistenza del personaggio.

Comportamento

  • Nel gestore, i nonce vengono salvati durante i tentativi di rete falliti e vengono consumati solo dopo essere entrati nel mondo. Alla connessione successiva si ritorna alle impostazioni del profilo. Una scelta persistente dura fino al termine di una nuova impostazione o del proprietario della sessione; Il file del profilo del manager non viene sovrascritto. La nuova impostazione durante il login si applica al login successivo e non viene persa una volta completato quello corrente.
  • In un client grafico separato, il server viene salvato come LastServerName, il carattere viene salvato come LastCharacterManager. Dopo aver effettuato con successo il login, il carattere diventa anche l'ultimo utilizzato: la disponibilità non implica il ritorno automatico al carattere precedente. L'override permanente risiede nel processo corrente.
  • Il comando stesso non abilita la riconnessione automatica e non interrompe la connessione. A tale scopo, SetARStatus, Connect e Disconnect vengono utilizzati separatamente. I nomi devono essere presenti nelle liste dei server; il confronto non distingue tra maiuscole e minuscole. Se l'immissione automatica dei caratteri è disabilitata nel manager, rimane la selezione manuale. Il nome self potrebbe non essere conosciuto offline: specificare i nomi in modo esplicito. Il comando non modifica account, password, IP, porta e crittografia; valori vuoti senza nome corrente disponibile non cancellano la selezione precedentemente impostata.

Script C# autonomi

Ogni esempio può essere salvato come file separato .csx ed eseguito in IDE. Le funzioni oggetto UO e attesa forniscono l'host della sessione di gioco corrente. Sostituisci i nomi, le coordinate e gli indirizzi demo serial con i tuoi.

Esempio semplice

Esegui questo codice in un file .csx separato. Gli argomenti sono visibili nella chiamata; sostituisci nomi, serial e indirizzi di esempio con i tuoi.

Il comando è un’istruzione separata. Il messaggio precedente indica l’inizio della chiamata e non conferma un’azione del server.

UO.Print("Calling UO.SetARExtParams");
UO.SetARExtParams("", "", true);

1. SetARExtParams - 1 - sceneggiatura diretta

Parametri e flusso di esecuzione:

  • Il primo esempio funziona solo online. Le due righe vuote prendono i nomi attuali; true li salva per accessi ripetuti, SetARStatus(true) abilita la policy di riconnessione automatica. Non è prevista una riconnessione immediata.
if (!(Truth(UO.Connected())))
{
    return null;
}
UO.SetARExtParams("", "", true);
UO.SetARStatus(true);

bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

2. SetARExtParams — 2 — funzione di script

Parametri e flusso di esecuzione:

  • Il secondo esempio seleziona Carattere di esempio solo se questo nome è nel vero GetCharsListForShard. L'array è indicizzato con 0; ToLowerInvariant confronta i nomi senza distinzione tra maiuscole e minuscole. false significa un input riuscito, dopo la configurazione, la riconnessione automatica è abilitata e viene chiamato Disconnect. Sostituisci il nome con il tuo. Se non è presente alcun nome, la connessione viene preservata. La pausa automatica potrebbe ritardare il ritorno fino al ripristino della connessione.
return  RunScenario();
 object? RunScenario()
{
    if (!(Truth(UO.Connected())))
    {
        return null;
    }

    var wanted = "Example Character";
    var names = UO.GetCharsListForShard();
    var i = 0;
    while (Truth(i < ArrayLength(names)))
    {
        if (Truth(Convert.ToString(names[i]) == Convert.ToString(wanted)))
        {
            UO.SetARExtParams("", names[i], false);
            UO.SetARStatus(true);
            UO.Disconnect();
            return null;
        }

        i += 1;
    }

    return null;
}

int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

3. SetARExtParams - 3 - classe dello scenario

Parametri e flusso di esecuzione:

  • Il terzo esempio viene avviato da uno script offline in esecuzione. Il frammento di esempio e il carattere di esempio sono specificati esplicitamente; sostituirli con nomi reali. true preserva la selezione, false in SetARStatus disabilita i tentativi automatici, Connect richiede un input. Hai bisogno dei dettagli del tuo account salvato. Connect non aspetta che il mondo sia pronto; Uno script messo in pausa automaticamente non raggiungerà queste righe senza riprendere.
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        if (Truth(UO.Connected()))
        {
            return null;
        }

        UO.SetARExtParams("Example Shard", "Example Character", true);
        UO.SetARStatus(false);
        UO.Connect();
        return null;
    }

    bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}

Implementazione del comando

C# distingue maiuscole e minuscole. Usare il nome UO esatto. Confrontare i flag numerici con 0; usare bool solo se la firma restituisce bool.

UO.SetARExtParams() — UO.SetARExtParams()

Parametri: Nessun parametro.

Risultato: void / Unit.

Durante la chiamata:

Codice interno di implementazione; non è uno script autonomo.

case "setarextparams":

                {

                    string requestedShard = arguments.Length > 0 ? Text(0) : string.Empty;

                    string requestedCharacter = arguments.Length > 1 ? Text(1) : string.Empty;

                    state.AutoReconnectShard = string.IsNullOrWhiteSpace(requestedShard)

                        ? bridge.ShardName

                        : requestedShard;

                    state.AutoReconnectCharacter = string.IsNullOrWhiteSpace(requestedCharacter)

                        ? bridge.GetName(bridge.Self) ?? string.Empty

                        : requestedCharacter;

                    int useAtEveryConnect = arguments.Length > 2 ? Arg(2) : 0;

                    bridge.SetReconnectSelection(state.AutoReconnectShard, state.AutoReconnectCharacter, useAtEveryConnect);

                    return InjectionValue.Unit;

                }

UO.SetARExtParams(shardName) — UO.SetARExtParams(Any)

Parametri: shardName (Any)

Risultato: void / Unit.

Durante la chiamata:

Codice interno di implementazione; non è uno script autonomo.

case "setarextparams":

                {

                    string requestedShard = arguments.Length > 0 ? Text(0) : string.Empty;

                    string requestedCharacter = arguments.Length > 1 ? Text(1) : string.Empty;

                    state.AutoReconnectShard = string.IsNullOrWhiteSpace(requestedShard)

                        ? bridge.ShardName

                        : requestedShard;

                    state.AutoReconnectCharacter = string.IsNullOrWhiteSpace(requestedCharacter)

                        ? bridge.GetName(bridge.Self) ?? string.Empty

                        : requestedCharacter;

                    int useAtEveryConnect = arguments.Length > 2 ? Arg(2) : 0;

                    bridge.SetReconnectSelection(state.AutoReconnectShard, state.AutoReconnectCharacter, useAtEveryConnect);

                    return InjectionValue.Unit;

                }

UO.SetARExtParams(shardName, charName) — UO.SetARExtParams(Any,Any)

Parametri: shardName (Any), charName (Any)

Risultato: void / Unit.

Durante la chiamata:

Codice interno di implementazione; non è uno script autonomo.

case "setarextparams":

                {

                    string requestedShard = arguments.Length > 0 ? Text(0) : string.Empty;

                    string requestedCharacter = arguments.Length > 1 ? Text(1) : string.Empty;

                    state.AutoReconnectShard = string.IsNullOrWhiteSpace(requestedShard)

                        ? bridge.ShardName

                        : requestedShard;

                    state.AutoReconnectCharacter = string.IsNullOrWhiteSpace(requestedCharacter)

                        ? bridge.GetName(bridge.Self) ?? string.Empty

                        : requestedCharacter;

                    int useAtEveryConnect = arguments.Length > 2 ? Arg(2) : 0;

                    bridge.SetReconnectSelection(state.AutoReconnectShard, state.AutoReconnectCharacter, useAtEveryConnect);

                    return InjectionValue.Unit;

                }

UO.SetARExtParams(shardName, charName, useAtEveryConnect) — UO.SetARExtParams(Any,Any,Any)

Parametri: shardName (Any), charName (Any), useAtEveryConnect (Any)

Risultato: void / Unit.

Durante la chiamata:

Codice interno di implementazione; non è uno script autonomo.

case "setarextparams":

                {

                    string requestedShard = arguments.Length > 0 ? Text(0) : string.Empty;

                    string requestedCharacter = arguments.Length > 1 ? Text(1) : string.Empty;

                    state.AutoReconnectShard = string.IsNullOrWhiteSpace(requestedShard)

                        ? bridge.ShardName

                        : requestedShard;

                    state.AutoReconnectCharacter = string.IsNullOrWhiteSpace(requestedCharacter)

                        ? bridge.GetName(bridge.Self) ?? string.Empty

                        : requestedCharacter;

                    int useAtEveryConnect = arguments.Length > 2 ? Arg(2) : 0;

                    bridge.SetReconnectSelection(state.AutoReconnectShard, state.AutoReconnectCharacter, useAtEveryConnect);

                    return InjectionValue.Unit;

                }

UO.SetARStatus

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

Firme C#

void UO.SetARStatus(object? value);

Abilita o disabilita la riconnessione automatica.

Parametri

  • value - 0 si spegne; qualsiasi numero intero diverso da zero include.

Valore restituito

void - nessun valore. Chiama su una linea separata; il completamento non conferma l'azione del server.

Comportamento

  • Bridge.SetAutoReconnect modifica l'impostazione della riconnessione automatica. Il valore viene interpretato come abilitato != 0; Non è previsto il login/logout immediato al server.
  • Modifica l'impostazione del client. Il valore non è il risultato di un test di connessione e non conferma l'elaborazione da parte del server.

Script C# autonomi

Ogni esempio può essere salvato come file separato .csx ed eseguito in IDE. Le funzioni oggetto UO e attesa forniscono l'host della sessione di gioco corrente. Sostituisci i nomi, le coordinate e gli indirizzi demo serial con i tuoi.

Esempio semplice

Esegui questo codice in un file .csx separato. Gli argomenti sono visibili nella chiamata; sostituisci nomi, serial e indirizzi di esempio con i tuoi.

Il comando è un’istruzione separata. Il messaggio precedente indica l’inizio della chiamata e non conferma un’azione del server.

UO.Print("Calling UO.SetARStatus");
UO.SetARStatus(1);

1. Chiamata diretta - sceneggiatura diretta

Parametri e flusso di esecuzione:

  • Abilita o disabilita la riconnessione automatica.
UO.SetARStatus(1);

2. Opzione esplicita: funzione dello script

Parametri e flusso di esecuzione:

  • Bridge.SetAutoReconnect modifica l'impostazione della riconnessione automatica. Il valore viene interpretato come abilitato != 0; Non è previsto il login/logout immediato al server.
return  RunScenario();
 object? RunScenario()
{
    UO.SetARStatus(0);
    return null;
}

3. Funzione di supporto completa: classe di script

Parametri e flusso di esecuzione:

  • Modifica l'impostazione del client. Il valore non è il risultato di un test di connessione e non conferma l'elaborazione da parte del server.
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        ApplyMode(1);
        return null;
    }

    void ApplyMode(dynamic mode)
    {
        UO.SetARStatus(mode);
    }
}

Implementazione del comando

C# distingue maiuscole e minuscole. Usare il nome UO esatto. Confrontare i flag numerici con 0; usare bool solo se la firma restituisce bool.

UO.SetARStatus(value) — UO.SetARStatus(Any)

Parametri: value (Any)

Risultato: void / Unit.

Durante la chiamata:

Codice interno di implementazione; non è uno script autonomo.

case "setarstatus": bridge.SetAutoReconnect(Arg(0)); return InjectionValue.Unit;

UO.SetArm

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

Firme C#

void UO.SetArm(object? name);

Ricorda l'arma e lo scudo attuali in un set con nome.

Parametri

  • name — Nome della stringa del set, ad esempio "viaggio" o "battaglia". I nomi non fanno distinzione tra maiuscole e minuscole. L'abbigliamento e i set di armi sono tenuti separatamente: in entrambi è consentito lo stesso nome. Questa non è una cosa ID o un nome file. Solo SetDress consente l'assenza di un nome: quindi viene registrato un set separato per DressSavedSet/EquipDressSet.

Valore restituito

void - nessun valore. Chiama su una linea separata; non assegnare il risultato né confrontarlo con true. Il salvataggio e l'eliminazione modificano la voce, non l'attrezzatura.

Comportamento

  • Abbigliamento: strati 3,4,5,6,7,8,10,12,13,14,17,18,19,20,22,23,24. Armi: solo 1 e 2. Capelli, barba, zaino, animale e banca non sono inclusi in questi set.
  • Le cose specifiche serial già caricate vengono registrate nei propri livelli. Salvando nuovamente lo stesso nome si sostituisce la voce. Anche gli strati vuoti hanno senso: una volta ripristinati, il corrispondente strato occupato verrà rilasciato nel proprio zaino. Pertanto, un set completamente vuoto salvato rimuove gli elementi dai suoi livelli.
  • Il set viene archiviato nello stato di runtime. La chiamata stessa non crea un file e non garantisce che il set verrà trasferito su un altro profilo o su un nuovo runtime. Innanzitutto, salva il set desiderato nel suo stato utilizzato. Il caricamento/salvataggio dello stato generale del client è un meccanismo separato.
  • UO.SetDress · UO.Dress · UO.DressSavedSet · UO.SetArm · UO.Arm · UO.DressSpeed
  • In un normale host client, questi dati di stato vengono presi dal gestore GetPersistentState e sono comuni a script/chat/macro dello stesso mondo/profilo e non appartengono a uno script. Un altro processo o un InjectionRuntimeState apparentemente separato ha uno stato diverso. Caricare/cancellare un profilo può sostituirlo; salvati serial vengono ancora confrontati con il mondo caricato.

Script C# autonomi

Ogni esempio può essere salvato come file separato .csx ed eseguito in IDE. Le funzioni oggetto UO e attesa forniscono l'host della sessione di gioco corrente. Sostituisci i nomi, le coordinate e gli indirizzi demo serial con i tuoi.

Esempio semplice

Esegui questo codice in un file .csx separato. Gli argomenti sono visibili nella chiamata; sostituisci nomi, serial e indirizzi di esempio con i tuoi.

Il comando è un’istruzione separata. Il messaggio precedente indica l’inizio della chiamata e non conferma un’azione del server.

UO.Print("Calling UO.SetArm");
UO.SetArm("battle");

1. Uso diretto - script diretto

Parametri e flusso di esecuzione:

  • La foto è stata scattata adesso, quando le cose necessarie sono già state indossate. La sfida non equipaggia oggetti dallo zaino.
UO.SetArm("battle");

2. Nomi e modalità query - Funzione script

Parametri e flusso di esecuzione:

  • Lo stesso nome viene utilizzato in diversi repository. SetDress() memorizza anche separatamente il set senza nome; non è una selezione di un nome precedentemente registrato.
return  RunScenario();
 object? RunScenario()
{
    UO.SetArm("battle");
    UO.SetDress("battle");
    return null;
}

3. Script di supporto completo: classe di script

Parametri e flusso di esecuzione:

  • SaveIfReady controlla il livello di controllo: 3 - scarpe per vestiti, 1 - mano destra per armi. Se è vuoto, lo snapshot non verrà sovrascritto. Il 1/0 restituito appartiene all'helper, non a SetDress/SetArm.
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        return SaveIfReady("battle");
        return null;
    }

    dynamic SaveIfReady(dynamic name)
    {
        if (Truth(UO.ObjAtLayerEx(1, UO.Self()) == 0))
        {
            return 0;
        }

        UO.SetArm(name);
        return 1;
    }

    bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}

Implementazione del comando

C# distingue maiuscole e minuscole. Usare il nome UO esatto. Confrontare i flag numerici con 0; usare bool solo se la firma restituisce bool.

UO.SetArm(name) — UO.SetArm(String)

Parametri: name (String)

Risultato: void / Unit.

Durante la chiamata:

Codice interno di implementazione; non è uno script autonomo.

public void SetArm(string name)

            => SetEquip(name, armSets, weaponLayers, "Arm set.");

UO.SetDress

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

Firme C#

void UO.SetDress();
void UO.SetDress(object? name);

Ricorda gli indumenti e le armature attualmente indossati per il successivo restauro.

Parametri

  • name — Nome della stringa del set, ad esempio "viaggio" o "battaglia". I nomi non fanno distinzione tra maiuscole e minuscole. L'abbigliamento e i set di armi sono tenuti separatamente: in entrambi è consentito lo stesso nome. Questa non è una cosa ID o un nome file. Solo SetDress consente l'assenza di un nome: quindi viene registrato un set separato per DressSavedSet/EquipDressSet.

Valore restituito

void - nessun valore. Chiama su una linea separata; non assegnare il risultato né confrontarlo con true. Il salvataggio e l'eliminazione modificano la voce, non l'attrezzatura.

Comportamento

  • Abbigliamento: strati 3,4,5,6,7,8,10,12,13,14,17,18,19,20,22,23,24. Armi: solo 1 e 2. Capelli, barba, zaino, animale e banca non sono inclusi in questi set.
  • Le cose specifiche serial già caricate vengono registrate nei propri livelli. Salvando nuovamente lo stesso nome si sostituisce la voce. Anche gli strati vuoti hanno senso: una volta ripristinati, il corrispondente strato occupato verrà rilasciato nel proprio zaino. Pertanto, un set completamente vuoto salvato rimuove gli elementi dai suoi livelli.
  • Il set viene archiviato nello stato di runtime. La chiamata stessa non crea un file e non garantisce che il set verrà trasferito su un altro profilo o su un nuovo runtime. Innanzitutto, salva il set desiderato nel suo stato utilizzato. Il caricamento/salvataggio dello stato generale del client è un meccanismo separato.
  • UO.SetDress · UO.Dress · UO.DressSavedSet · UO.SetArm · UO.Arm · UO.DressSpeed
  • In un normale host client, questi dati di stato vengono presi dal gestore GetPersistentState e sono comuni a script/chat/macro dello stesso mondo/profilo e non appartengono a uno script. Un altro processo o un InjectionRuntimeState apparentemente separato ha uno stato diverso. Caricare/cancellare un profilo può sostituirlo; salvati serial vengono ancora confrontati con il mondo caricato.

Script C# autonomi

Ogni esempio può essere salvato come file separato .csx ed eseguito in IDE. Le funzioni oggetto UO e attesa forniscono l'host della sessione di gioco corrente. Sostituisci i nomi, le coordinate e gli indirizzi demo serial con i tuoi.

Esempio semplice

Esegui questo codice in un file .csx separato. Gli argomenti sono visibili nella chiamata; sostituisci nomi, serial e indirizzi di esempio con i tuoi.

Il comando è un’istruzione separata. Il messaggio precedente indica l’inizio della chiamata e non conferma un’azione del server.

UO.Print("Calling UO.SetDress");
UO.SetDress();

1. Uso diretto - script diretto

Parametri e flusso di esecuzione:

  • La foto è stata scattata adesso, quando le cose necessarie sono già state indossate. La sfida non equipaggia oggetti dallo zaino.
UO.SetDress("travel");

2. Nomi e modalità query - Funzione script

Parametri e flusso di esecuzione:

  • Lo stesso nome viene utilizzato in diversi repository. SetDress() memorizza anche separatamente il set senza nome; non è una selezione di un nome precedentemente registrato.
return  RunScenario();
 object? RunScenario()
{
    UO.SetArm("battle");
    UO.SetDress("battle");
    UO.SetDress();
    return null;
}

3. Script di supporto completo: classe di script

Parametri e flusso di esecuzione:

  • SaveIfReady controlla il livello di controllo: 3 - scarpe per vestiti, 1 - mano destra per armi. Se è vuoto, lo snapshot non verrà sovrascritto. Il 1/0 restituito appartiene all'helper, non a SetDress/SetArm.
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        return SaveIfReady("travel");
        return null;
    }

    dynamic SaveIfReady(dynamic name)
    {
        if (Truth(UO.ObjAtLayerEx(3, UO.Self()) == 0))
        {
            return 0;
        }

        UO.SetDress(name);
        return 1;
    }

    bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}

Implementazione del comando

C# distingue maiuscole e minuscole. Usare il nome UO esatto. Confrontare i flag numerici con 0; usare bool solo se la firma restituisce bool.

UO.SetDress() — UO.SetDress()

Parametri: Nessun parametro.

Risultato: void / Unit.

Durante la chiamata:

Codice interno di implementazione; non è uno script autonomo.

case "setdress": SetDress("__stealth_saved_set__"); return InjectionValue.Unit;

UO.SetDress(name) — UO.SetDress(String)

Parametri: name (String)

Risultato: void / Unit.

Durante la chiamata:

Codice interno di implementazione; non è uno script autonomo.

public void SetDress(string name)

            => SetEquip(name, dressSets, dressLayers, "Clothing set.");

UO.SetDressSpeed

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

Firme C#

void UO.SetDressSpeed(object? delayms);

Imposta una pausa tra le richieste di cambio d'abito.

Parametri

  • delayms — int, millisecondi. Il valore è limitato a 10..10000 compreso.

Valore restituito

void - nessun valore. Chiama su una linea separata; il completamento non conferma l'azione del server.

Comportamento

  • SetDressSpeed salva lo stato. DressSpeed = max(10, min(10000, ritardi)). Le operazioni sui set salvati ne traggono vantaggio; la velocità delle azioni consentite dal server non cambia.
  • Un valore inferiore a 10 diventa 10, un valore maggiore di 10000 diventa 10000. La squadra non indossa né toglie oggetti.
  • In un normale host client, questi dati di stato vengono presi dal gestore GetPersistentState e sono comuni a script/chat/macro dello stesso mondo/profilo e non appartengono a uno script. Un altro processo o un InjectionRuntimeState apparentemente separato ha uno stato diverso. Caricare/cancellare un profilo può sostituirlo; salvati serial vengono ancora confrontati con il mondo caricato.

Script C# autonomi

Ogni esempio può essere salvato come file separato .csx ed eseguito in IDE. Le funzioni oggetto UO e attesa forniscono l'host della sessione di gioco corrente. Sostituisci i nomi, le coordinate e gli indirizzi demo serial con i tuoi.

Esempio semplice

Esegui questo codice in un file .csx separato. Gli argomenti sono visibili nella chiamata; sostituisci nomi, serial e indirizzi di esempio con i tuoi.

Il comando è un’istruzione separata. Il messaggio precedente indica l’inizio della chiamata e non conferma un’azione del server.

UO.Print("Calling UO.SetDressSpeed");
UO.SetDressSpeed(250);

1. Chiamata diretta - sceneggiatura diretta

Parametri e flusso di esecuzione:

  • Imposta una pausa tra le richieste di cambio d'abito.
UO.SetDressSpeed(250);

2. Opzione esplicita: funzione dello script

Parametri e flusso di esecuzione:

  • SetDressSpeed salva lo stato. DressSpeed = max(10, min(10000, ritardi)). Le operazioni sui set salvati ne traggono vantaggio; la velocità delle azioni consentite dal server non cambia.
return  RunScenario();
 object? RunScenario()
{
    UO.SetDressSpeed(0);
    UO.Print(UO.DressSpeed());
    return null;
}

3. Funzione di supporto completa: classe di script

Parametri e flusso di esecuzione:

  • Un valore inferiore a 10 diventa 10, un valore maggiore di 10000 diventa 10000. La squadra non indossa né toglie oggetti.
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        UO.SetDressSpeed(20000);
        UO.Print(UO.DressSpeed());
        return null;
    }
}

Implementazione del comando

C# distingue maiuscole e minuscole. Usare il nome UO esatto. Confrontare i flag numerici con 0; usare bool solo se la firma restituisce bool.

UO.SetDressSpeed(delayms) — UO.SetDressSpeed(Integer)

Parametri: delayms (Integer)

Risultato: void / Unit.

Durante la chiamata:

Codice interno di implementazione; non è uno script autonomo.

public void SetDressSpeed(int delayms) => state.DressSpeed = Math.Max(10, Math.Min(10_000, delayms));

UO.SetStatLockState

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

Firme C#

void UO.SetStatLockState(object? statNum, object? statState);

Richiede una modifica alla modalità caratteristica.

Parametri

  • statNum - Numero caratteristico obbligatorio: 0 - Converti.ToString, 1 - DEX, 2 - INT. Questo non è il suo valore corrente e non il nome della stringa.
  • statState — Modalità obbligatoria: 0 — aumento, 1 — diminuzione, 2 — blocco. Questi sono tre codici, non bool; true/false non sostituiscono i nomi di tutte le modalità.

Valore restituito

void - nessun valore restituito. Il risultato non può essere utilizzato come successo/fallimento o paragonato a true. La lettura successiva mostra il modello locale, non la conferma del server.

Comportamento

  • Una richiesta valida invia un pacchetto attraverso GameActions e cambia immediatamente la modalità locale. Il server può applicare le proprie restrizioni; Gli aumenti di abilità o statistiche non sono garantiti. Abilità sconosciuta, indice/modalità non validi e carattere mancante vengono ignorati senza pacchetto.
  • Numero caratteristico obbligatorio: 0 - STR, 1 - DEX, 2 - INT. Questo non è il suo valore corrente e non il nome della stringa.
  • ExecuteClientApiCompatibility seleziona il ramo di comando. Il testo legge il selettore delle abilità, Arg legge i numeri numerici e le modalità. Un argomento non convertibile potrebbe fallire la chiamata con un errore di conversione.

Script C# autonomi

Ogni esempio può essere salvato come file separato .csx ed eseguito in IDE. Le funzioni oggetto UO e attesa forniscono l'host della sessione di gioco corrente. Sostituisci i nomi, le coordinate e gli indirizzi demo serial con i tuoi.

Esempio semplice

Esegui questo codice in un file .csx separato. Gli argomenti sono visibili nella chiamata; sostituisci nomi, serial e indirizzi di esempio con i tuoi.

Il comando è un’istruzione separata. Il messaggio precedente indica l’inizio della chiamata e non conferma un’azione del server.

UO.Print("Calling UO.SetStatLockState");
UO.SetStatLockState(0, 2);

1. Lettura e output: script diretto

Parametri e flusso di esecuzione:

  • Nell'esempio, il selettore e, durante la registrazione, la modalità sono specificati esplicitamente. La prima riga seleziona un'abilità per nome o una caratteristica per numero. Print visualizza solo il risultato.
var selector = 0;
var mode = 2;
UO.SetStatLockState(selector, mode);
UO.Print(Convert.ToString(UO.GetStatLockState(selector)));

2. Applica in condizione o confronto - funzione script

Parametri e flusso di esecuzione:

  • La soglia 95.1 e le modalità 0/1/2 sono fornite come esempio. −1 viene controllato prima di cambiare modalità. Dopo la scrittura viene letta solo la copia locale; non sta aspettando che il server risponda.
return  RunScenario();
 object? RunScenario()
{
    var selector = 0;
    var before = UO.GetStatLockState(selector);
    if (Truth(before >= 0) && Truth(before <= 2))
    {
        UO.SetStatLockState(selector, 0);
        UO.Print(Convert.ToString(UO.GetStatLockState(selector)));
    }

    return null;
}

bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

3. Funzione di supporto completa: classe di script

Parametri e flusso di esecuzione:

  • Tutto il codice helper è riportato di seguito Main. il selettore seleziona un'abilità/caratteristica, la modalità imposta la modalità di registrazione. ReadValue/ReadMode restituisce il numero originale; ApplyMode controlla gli argomenti, esegue l'azione e non restituisce un valore. UO.Wait(1000) nell'esempio di lettura separa due immagini.
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        ApplyMode(0, 2);
        return null;
    }

    void ApplyMode(dynamic selector, dynamic mode)
    {
        if (Truth(mode < 0) || Truth(mode > 2))
        {
            return;
        }

        if (Truth(UO.GetStatLockState(selector) < 0))
        {
            return;
        }

        UO.SetStatLockState(selector, mode);
    }

    bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}

Implementazione del comando

C# distingue maiuscole e minuscole. Usare il nome UO esatto. Confrontare i flag numerici con 0; usare bool solo se la firma restituisce bool.

UO.SetStatLockState(statNum, statState) — UO.SetStatLockState(Any,Any)

Parametri: statNum (Any), statState (Any)

Risultato: void / Unit.

Durante la chiamata:

Codice interno di implementazione; non è uno script autonomo.

case "setstatlockstate":

                case "setstatstate": bridge.SetStatLockState(Arg(0), Arg(1)); return InjectionValue.Unit;

UO.SetStatState

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

Firme C#

void UO.SetStatState(object? statNum, object? statState);

Richiede una modifica alla modalità caratteristica.

Parametri

  • statNum - Numero caratteristico obbligatorio: 0 - Converti.ToString, 1 - DEX, 2 - INT. Questo non è il suo valore corrente e non il nome della stringa.
  • statState — Modalità obbligatoria: 0 — aumento, 1 — diminuzione, 2 — blocco. Questi sono tre codici, non bool; true/false non sostituiscono i nomi di tutte le modalità.

Valore restituito

void - nessun valore restituito. Il risultato non può essere utilizzato come successo/fallimento o paragonato a true. La lettura successiva mostra il modello locale, non la conferma del server.

Comportamento

  • Una richiesta valida invia un pacchetto attraverso GameActions e cambia immediatamente la modalità locale. Il server può applicare le proprie restrizioni; Gli aumenti di abilità o statistiche non sono garantiti. Abilità sconosciuta, indice/modalità non validi e carattere mancante vengono ignorati senza pacchetto.
  • Numero caratteristico obbligatorio: 0 - STR, 1 - DEX, 2 - INT. Questo non è il suo valore corrente e non il nome della stringa.
  • ExecuteClientApiCompatibility seleziona il ramo di comando. Il testo legge il selettore delle abilità, Arg legge i numeri numerici e le modalità. Un argomento non convertibile potrebbe fallire la chiamata con un errore di conversione.

Script C# autonomi

Ogni esempio può essere salvato come file separato .csx ed eseguito in IDE. Le funzioni oggetto UO e attesa forniscono l'host della sessione di gioco corrente. Sostituisci i nomi, le coordinate e gli indirizzi demo serial con i tuoi.

Esempio semplice

Esegui questo codice in un file .csx separato. Gli argomenti sono visibili nella chiamata; sostituisci nomi, serial e indirizzi di esempio con i tuoi.

Il comando è un’istruzione separata. Il messaggio precedente indica l’inizio della chiamata e non conferma un’azione del server.

UO.Print("Calling UO.SetStatState");
UO.SetStatState(0, 2);

1. Lettura e output: script diretto

Parametri e flusso di esecuzione:

  • Nell'esempio, il selettore e, durante la registrazione, la modalità sono specificati esplicitamente. La prima riga seleziona un'abilità per nome o una caratteristica per numero. Print visualizza solo il risultato.
var selector = 0;
var mode = 2;
UO.SetStatState(selector, mode);
UO.Print(Convert.ToString(UO.GetStatLockState(selector)));

2. Applica in condizione o confronto - funzione script

Parametri e flusso di esecuzione:

  • La soglia 95.1 e le modalità 0/1/2 sono fornite come esempio. −1 viene controllato prima di cambiare modalità. Dopo la scrittura viene letta solo la copia locale; non sta aspettando che il server risponda.
return  RunScenario();
 object? RunScenario()
{
    var selector = 0;
    var before = UO.GetStatLockState(selector);
    if (Truth(before >= 0) && Truth(before <= 2))
    {
        UO.SetStatState(selector, 0);
        UO.Print(Convert.ToString(UO.GetStatLockState(selector)));
    }

    return null;
}

bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

3. Funzione di supporto completa: classe di script

Parametri e flusso di esecuzione:

  • Tutto il codice helper è riportato di seguito Main. il selettore seleziona un'abilità/caratteristica, la modalità imposta la modalità di registrazione. ReadValue/ReadMode restituisce il numero originale; ApplyMode controlla gli argomenti, esegue l'azione e non restituisce un valore. UO.Wait(1000) nell'esempio di lettura separa due immagini.
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        ApplyMode(0, 2);
        return null;
    }

    void ApplyMode(dynamic selector, dynamic mode)
    {
        if (Truth(mode < 0) || Truth(mode > 2))
        {
            return;
        }

        if (Truth(UO.GetStatLockState(selector) < 0))
        {
            return;
        }

        UO.SetStatState(selector, mode);
    }

    bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}

Implementazione del comando

C# distingue maiuscole e minuscole. Usare il nome UO esatto. Confrontare i flag numerici con 0; usare bool solo se la firma restituisce bool.

UO.SetStatState(statNum, statState) — UO.SetStatState(Any,Any)

Parametri: statNum (Any), statState (Any)

Risultato: void / Unit.

Durante la chiamata:

Codice interno di implementazione; non è uno script autonomo.

case "setstatlockstate":

                case "setstatstate": bridge.SetStatLockState(Arg(0), Arg(1)); return InjectionValue.Unit;

UO.Sex

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

Firme C#

dynamic UO.Sex();

Legge il sesso e il codice razziale dal modello client.

Parametri

Non ci sono parametri.

Valore restituito

int - codice compatibile: 0=maschio umano, 1=femmina umana, 2=maschio elfo, 3=femmina elfo, 4=maschio gargoyle, 5=femmina gargoyle. Anche senza carattere è 0, quindi controlla la disponibilità di Exists(self). Questa non è una semplice femmina bool.

Comportamento

  • I dati locali già ricevuti vengono letti. La richiesta non apre lo stato e non forza il server a inviare un aggiornamento. Dopo la morte, la transizione della mappa o l'eliminazione di un oggetto, i valori possono cambiare tra due chiamate.
  • C# distingue maiuscole e minuscole. Usare il nome UO esatto. Confrontare i flag numerici con 0; usare bool solo se la firma restituisce bool.

Script C# autonomi

Ogni esempio può essere salvato come file separato .csx ed eseguito in IDE. Le funzioni oggetto UO e attesa forniscono l'host della sessione di gioco corrente. Sostituisci i nomi, le coordinate e gli indirizzi demo serial con i tuoi.

Esempio semplice

Esegui questo codice in un file .csx separato. Gli argomenti sono visibili nella chiamata; sostituisci nomi, serial e indirizzi di esempio con i tuoi.

Il risultato di una sola chiamata viene mostrato nel diario. Un numero non viene convertito in bool; per un array viene mostrato il numero di elementi.

object? result = UO.Sex();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));

1. Visualizza il valore attuale del tuo personaggio - script diretto

Parametri e flusso di esecuzione:

  • La chiamata senza argomenti si riferisce a self. Il sesso e il codice razziale vengono memorizzati nel valore.
  • Convert.ToString converte il numero da emettere e non cambia il significato del risultato.
var value = UO.Sex();
UO.Print("Sex: " + Convert.ToString(value));

2. Utilizza valore nella convalida dell'applicazione - Funzione script

Parametri e flusso di esecuzione:

  • Il valore viene letto una volta senza argomenti. Il sesso e il codice razza vengono utilizzati nel calcolo o nella condizione mostrata.
  • Le soglie numeriche sono esempi di condizioni di script e non di nuovi limiti client. Il campo memorizza le unità server e le restrizioni sopra descritte.
return  RunScenario();
 object? RunScenario()
{
    var value = UO.Sex();
    if (Truth(value == 4) || Truth(value == 5))
    {
        UO.Print("Gargoyle sex/race code");
    }

    return null;
}

bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

3. Guarda il cambiamento in un secondo: lezione di script

Parametri e flusso di esecuzione:

  • Entrambe le chiamate senza argomento leggono il loro valore corrente. UO.Wait(1000) dà una pausa in millisecondi tra gli scatti.
  • Il cambiamento viene confrontato: genere e codice razziale. Un esempio non cambia nulla al mondo e non aspetta all'infinito. Gli eventi entro questo secondo potrebbero essere persi.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

    async public Task<object?> RunScenarioAsync()
    {
        var before = UO.Sex();
        await Delay(1000);
        var after = UO.Sex();
        if (Truth(before != after))
        {
            UO.Print("Before: " + Convert.ToString(before) + "; after: " + Convert.ToString(after));
        }

        return null;
    }

    Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
    bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}

Implementazione del comando

C# distingue maiuscole e minuscole. Usare il nome UO esatto. Confrontare i flag numerici con 0; usare bool solo se la firma restituisce bool.

UO.Sex() — UO.Sex()

Parametri: Nessun parametro.

Risultato: dynamic / Any.

Durante la chiamata:

Codice interno di implementazione; non è uno script autonomo.

case "sex": return new InjectionValue(bridge.Sex);

UO.Stam

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

Firme C#

dynamic UO.Stam();

Legge la resistenza attuale dal modello locale.

Parametri

Non ci sono parametri.

Valore restituito

int è il valore del campo Stamina, non una percentuale o bool. 0 può essere un valore reale o un'indicazione di dati mancanti. Il massimo zero non può essere utilizzato come divisore. Per mobile di qualcun altro i significati potrebbero essere sconosciuti. HP/HitsMax può contenere la scala relativa del server anziché i punti esatti. HP=0 non prova la morte; c'è Dead/IsDead per questo.

Comportamento

  • Il comando non apre lo stato e non richiede un aggiornamento del server. Il client legge solo i dati già caricati. Non cambia caratteristiche e non invia pacchetti.
  • Il risultato è una lettura separata. Il mondo può cambiare tra Exists e la prossima sfida; più query non formano uno snapshot atomico.
  • Durante la lettura di un oggetto, World.Get rifiuta l'o mancante o IsDestroyed e risulta in 0. HP/HitsMax vengono letti dall'Entità, inclusi gli elementi con questi campi; Mana/Stamina - solo per dispositivi mobili. Senza discutere, leggi self. La variante con lo stesso nome senza parametri non ha necessariamente una variante con ID: vedi firme.
  • La lettura senza argomenti restituisce anche 0 per un giocatore scomparso o distrutto. Questo vale anche per Mana/Stamina diretti e i loro massimi, non solo per le forme World.Get. Un personaggio morto presente può conservare valori.

Script C# autonomi

Ogni esempio può essere salvato come file separato .csx ed eseguito in IDE. Le funzioni oggetto UO e attesa forniscono l'host della sessione di gioco corrente. Sostituisci i nomi, le coordinate e gli indirizzi demo serial con i tuoi.

Esempio semplice

Esegui questo codice in un file .csx separato. Gli argomenti sono visibili nella chiamata; sostituisci nomi, serial e indirizzi di esempio con i tuoi.

Il risultato di una sola chiamata viene mostrato nel diario. Un numero non viene convertito in bool; per un array viene mostrato il numero di elementi.

object? result = UO.Stam();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));

1. Stampa il valore del tuo personaggio - sceneggiatura diretta

Parametri e flusso di esecuzione:

  • La chiamata senza argomenti legge self. value memorizza un numero, Convert.ToString lo converte solo per il messaggio.
var value = UO.Stam();
UO.Print("Stam: " + Convert.ToString(value));

2. Applica valore nel controllo o nel calcolo - funzione script

Parametri e flusso di esecuzione:

  • Viene visualizzata la soglia o il calcolo applicato per questo campo. I numeri nella condizione sono impostazioni di esempio, non limiti del server. Prima di dividere per il massimo se ne controlla la positività.
return  RunScenario();
 object? RunScenario()
{
    var value = UO.Stam();
    if (Truth(value < 15))
    {
        UO.Print("Known stamina is below the movement threshold of 15");
    }

    return null;
}

bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

3. Funzione di supporto completa ReadValue - Classe di script

Parametri e flusso di esecuzione:

  • Questo nome non ha la forma con ID. ReadValue senza parametri legge self; le due chiamate sono separate da UO.Wait(1000). Confrontando due istantanee potrebbero non essere rilevate modifiche intermedie.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

    async public Task<object?> RunScenarioAsync()
    {
        var before = ReadValue();
        await Delay(1000);
        var after = ReadValue();
        UO.Print("Before: " + Convert.ToString(before) + "; after: " + Convert.ToString(after));
        return null;
    }

    dynamic ReadValue()
    {
        return UO.Stam();
    }

    Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
}

Implementazione del comando

C# distingue maiuscole e minuscole. Usare il nome UO esatto. Confrontare i flag numerici con 0; usare bool solo se la firma restituisce bool.

UO.Stam() — UO.Stam()

Parametri: Nessun parametro.

Risultato: dynamic / Any.

Durante la chiamata:

Codice interno di implementazione; non è uno script autonomo.

case "stam": return new InjectionValue(bridge.Stamina);

UO.Stamina

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

Firme C#

int UO.Stamina();

Legge la resistenza attuale dal modello locale.

Parametri

Non ci sono parametri.

Valore restituito

int è il valore del campo Stamina, non una percentuale o bool. 0 può essere un valore reale o un'indicazione di dati mancanti. Il massimo zero non può essere utilizzato come divisore. Per mobile di qualcun altro i significati potrebbero essere sconosciuti. HP/HitsMax può contenere la scala relativa del server anziché i punti esatti. HP=0 non prova la morte; c'è Dead/IsDead per questo.

Comportamento

  • Il comando non apre lo stato e non richiede un aggiornamento del server. Il client legge solo i dati già caricati. Non cambia caratteristiche e non invia pacchetti.
  • Il risultato è una lettura separata. Il mondo può cambiare tra Exists e la prossima sfida; più query non formano uno snapshot atomico.
  • Durante la lettura di un oggetto, World.Get rifiuta l'o mancante o IsDestroyed e risulta in 0. HP/HitsMax vengono letti dall'Entità, inclusi gli elementi con questi campi; Mana/Stamina - solo per dispositivi mobili. Senza discutere, leggi self. La variante con lo stesso nome senza parametri non ha necessariamente una variante con ID: vedi firme.
  • La lettura senza argomenti restituisce anche 0 per un giocatore scomparso o distrutto. Questo vale anche per Mana/Stamina diretti e i loro massimi, non solo per le forme World.Get. Un personaggio morto presente può conservare valori.

Script C# autonomi

Ogni esempio può essere salvato come file separato .csx ed eseguito in IDE. Le funzioni oggetto UO e attesa forniscono l'host della sessione di gioco corrente. Sostituisci i nomi, le coordinate e gli indirizzi demo serial con i tuoi.

Esempio semplice

Esegui questo codice in un file .csx separato. Gli argomenti sono visibili nella chiamata; sostituisci nomi, serial e indirizzi di esempio con i tuoi.

Il risultato di una sola chiamata viene mostrato nel diario. Un numero non viene convertito in bool; per un array viene mostrato il numero di elementi.

var result = UO.Stamina();
UO.Print("Stamina: " + Convert.ToString(result));

1. Stampa il valore del tuo personaggio - sceneggiatura diretta

Parametri e flusso di esecuzione:

  • La chiamata senza argomenti legge self. value memorizza un numero, Convert.ToString lo converte solo per il messaggio.
var value = UO.Stamina();
UO.Print("Stamina: " + Convert.ToString(value));

2. Applica valore nel controllo o nel calcolo - funzione script

Parametri e flusso di esecuzione:

  • Viene visualizzata la soglia o il calcolo applicato per questo campo. I numeri nella condizione sono impostazioni di esempio, non limiti del server. Prima di dividere per il massimo se ne controlla la positività.
return  RunScenario();
 object? RunScenario()
{
    var value = UO.Stamina();
    if (Truth(value < 15))
    {
        UO.Print("Known stamina is below the movement threshold of 15");
    }

    return null;
}

bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

3. Funzione di supporto completa ReadValue - Classe di script

Parametri e flusso di esecuzione:

  • Questo nome non ha la forma con ID. ReadValue senza parametri legge self; le due chiamate sono separate da UO.Wait(1000). Confrontando due istantanee potrebbero non essere rilevate modifiche intermedie.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

    async public Task<object?> RunScenarioAsync()
    {
        var before = ReadValue();
        await Delay(1000);
        var after = ReadValue();
        UO.Print("Before: " + Convert.ToString(before) + "; after: " + Convert.ToString(after));
        return null;
    }

    dynamic ReadValue()
    {
        return UO.Stamina();
    }

    Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
}

Implementazione del comando

C# distingue maiuscole e minuscole. Usare il nome UO esatto. Confrontare i flag numerici con 0; usare bool solo se la firma restituisce bool.

UO.Stamina() — UO.Stamina()

Parametri: Nessun parametro.

Risultato: int / Integer.

Durante la chiamata:

La chiamata esegue il delegate del gestore memorizzato. Il metodo di registrazione lo crea durante la costruzione dell’API.

Codice interno di implementazione; non è uno script autonomo.

() => bridge.Stamina

Creazione API: Queste funzioni registrano l’API. Non vengono eseguite di nuovo a ogni chiamata del comando.


UO.Str

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

Firme C#

int UO.Str();

Legge la forza attuale (Strength) del personaggio.

Parametri

Non ci sono parametri.

Valore restituito

int — punti statistici attuali, 0..65535 nel modello client; non percentuale, ID, abilità, modalità di blocco o bool. 0 significa anche carattere mancante/cancellato o oggetto inaccessibile. Confrontare con il requisito numerico, non == true. Questo non è un limite statistico o un valore base garantito senza modificatori.

Comportamento

  • Il comando non accetta argomenti. Usa le firme esatte sopra.
  • Legge Player.Strength se Player esiste e non è stato distrutto; altrimenti 0. Un personaggio morto presente non è un oggetto rimosso. La statistica non viene calcolata da HP, mana o resistenza.
  • GetStr/GetInt/GetDex accetta ObjID. I dati PlayerMobile sono disponibili solo per self; per un altro serial - 0, anche per mobile caricato. Le caratteristiche di qualcun altro non vengono sostituite o indovinate.
  • Invoca letture sul flusso di gioco con la possibilità di annullare l'attesa tramite script. Non interroga lo stato, non apre il target, non invia un pacchetto, non cambia le caratteristiche e non aggiunge ritardo.
  • Ogni chiamata legge nuovamente i dati locali. La variabile memorizza l'istantanea; le singole letture potrebbero ricevere diversi aggiornamenti del server. Un risultato diverso da zero non verifica la connessione. Zero può essere un valore o nessun dato.
  • Usare i nomi C# esatti: UO.Str(), UO.Strength(), UO.GetStr() o UO.GetStrength(). C# distingue maiuscole e minuscole.

Script C# autonomi

Ogni esempio può essere salvato come file separato .csx ed eseguito in IDE. Le funzioni oggetto UO e attesa forniscono l'host della sessione di gioco corrente. Sostituisci i nomi, le coordinate e gli indirizzi demo serial con i tuoi.

Esempio semplice

Esegui questo codice in un file .csx separato. Gli argomenti sono visibili nella chiamata; sostituisci nomi, serial e indirizzi di esempio con i tuoi.

Il risultato di una sola chiamata viene mostrato nel diario. Un numero non viene convertito in bool; per un array viene mostrato il numero di elementi.

var result = UO.Str();
UO.Print("Str: " + Convert.ToString(result));

1. Leggere e visualizzare punti - script diretto

Parametri e flusso di esecuzione:

  • value memorizza il risultato numerico; Convert.ToString lo formatta semplicemente per la rivista. Non ci sono argomenti o azioni dei personaggi.
var value = UO.Str();
UO.Print("Strength: " + Convert.ToString(value));

2. Confronta due immagini: funzione script

Parametri e flusso di esecuzione:

  • prima e dopo 1000 ms separati; UO.Wait aggiunto all'esempio. change=after-before può essere positivo, zero o negativo. Di per sé, non distingue tra tutti gli aggiornamenti intermedi e l'uscita dal mondo.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    var before = UO.Str();
    await Delay(1000);
    var after = UO.Str();
    var change = after - before;
    UO.Print("Change: " + Convert.ToString(change));
    return null;
}

Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));

3. Funzione di convalida dei requisiti completa - Classe di script

Parametri e flusso di esecuzione:

  • minimo=80 è un esempio di requisito, non di limite del cliente. AttributeAtLeast(minimo) rifiuta il carattere mancante, legge la caratteristica una volta e restituisce bool: true o false se >= minimo. Il significato logico è dato dal confronto, non dalla caratteristica stessa.
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        if (Truth(Truth(AttributeAtLeast(80)) == true))
        {
            UO.Print("Requirement met");
        }
        else
        {
            UO.Print("Requirement not met or no player");
        }

        return null;
    }

    dynamic AttributeAtLeast(dynamic minimum)
    {
        if (Truth(UO.Self() == 0))
        {
            return false;
        }

        var value = UO.Str();
        return value >= minimum;
    }

    bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}

Implementazione del comando

C# distingue maiuscole e minuscole. Usare il nome UO esatto. Confrontare i flag numerici con 0; usare bool solo se la firma restituisce bool.

UO.Str() — UO.Str()

Parametri: Nessun parametro.

Risultato: int / Integer.

Durante la chiamata:

Codice interno di implementazione; non è uno script autonomo.

case "str": return new InjectionValue(bridge.Strength);

UO.Strength

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

Firme C#

int UO.Strength();

Legge la potenza attuale (Strength, Str) del carattere.

Parametri

Non ci sono parametri.

Valore restituito

int — punti statistici attuali, 0..65535 nel modello client; non percentuale, ID, abilità, modalità di blocco o bool. 0 significa anche carattere mancante/cancellato o oggetto inaccessibile. Confrontare con il requisito numerico, non == true. Questo non è un limite statistico o un valore base garantito senza modificatori.

Comportamento

  • Il comando non accetta argomenti. Usa le firme esatte sopra.
  • Legge Player.Strength se Player esiste e non è stato distrutto; altrimenti 0. Un personaggio morto presente non è un oggetto rimosso. La statistica non viene calcolata da HP, mana o resistenza.
  • GetStr/GetInt/GetDex accetta ObjID. I dati PlayerMobile sono disponibili solo per self; per un altro serial - 0, anche per mobile caricato. Le caratteristiche di qualcun altro non vengono sostituite o indovinate.
  • Invoca letture sul flusso di gioco con la possibilità di annullare l'attesa tramite script. Non interroga lo stato, non apre il target, non invia un pacchetto, non cambia le caratteristiche e non aggiunge ritardo.
  • Ogni chiamata legge nuovamente i dati locali. La variabile memorizza l'istantanea; le singole letture potrebbero ricevere diversi aggiornamenti del server. Un risultato diverso da zero non verifica la connessione. Zero può essere un valore o nessun dato.
  • C# distingue maiuscole e minuscole. Usare il nome UO esatto. Confrontare i flag numerici con 0; usare bool solo se la firma restituisce bool. UO.Str(), UO.Strength(), UO.GetStr(), UO.GetStrength().

Script C# autonomi

Ogni esempio può essere salvato come file separato .csx ed eseguito in IDE. Le funzioni oggetto UO e attesa forniscono l'host della sessione di gioco corrente. Sostituisci i nomi, le coordinate e gli indirizzi demo serial con i tuoi.

Esempio semplice

Esegui questo codice in un file .csx separato. Gli argomenti sono visibili nella chiamata; sostituisci nomi, serial e indirizzi di esempio con i tuoi.

Il risultato di una sola chiamata viene mostrato nel diario. Un numero non viene convertito in bool; per un array viene mostrato il numero di elementi.

var result = UO.Strength();
UO.Print("Strength: " + Convert.ToString(result));

1. Leggere e visualizzare punti - script diretto

Parametri e flusso di esecuzione:

  • value memorizza il risultato numerico; Convert.ToString lo formatta semplicemente per la rivista. Non ci sono argomenti o azioni dei personaggi.
var value = UO.Strength();
UO.Print("Strength: " + Convert.ToString(value));

2. Confronta due immagini: funzione script

Parametri e flusso di esecuzione:

  • prima e dopo 1000 ms separati; UO.Wait aggiunto all'esempio. change=after-before può essere positivo, zero o negativo. Di per sé, non distingue tra tutti gli aggiornamenti intermedi e l'uscita dal mondo.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    var before = UO.Strength();
    await Delay(1000);
    var after = UO.Strength();
    var change = after - before;
    UO.Print("Change: " + Convert.ToString(change));
    return null;
}

Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));

3. Funzione di convalida dei requisiti completa - Classe di script

Parametri e flusso di esecuzione:

  • minimo=80 è un esempio di requisito, non di limite del cliente. AttributeAtLeast(minimo) rifiuta il carattere mancante, legge la caratteristica una volta e restituisce bool: true o false se >= minimo. Il significato logico è dato dal confronto, non dalla caratteristica stessa.
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        if (Truth(Truth(AttributeAtLeast(80)) == true))
        {
            UO.Print("Requirement met");
        }
        else
        {
            UO.Print("Requirement not met or no player");
        }

        return null;
    }

    dynamic AttributeAtLeast(dynamic minimum)
    {
        if (Truth(UO.Self() == 0))
        {
            return false;
        }

        var value = UO.Strength();
        return value >= minimum;
    }

    bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}

Implementazione del comando

C# distingue maiuscole e minuscole. Usare il nome UO esatto. Confrontare i flag numerici con 0; usare bool solo se la firma restituisce bool.

UO.Strength() — UO.Strength()

Parametri: Nessun parametro.

Risultato: int / Integer.

Durante la chiamata:

La chiamata esegue il delegate del gestore memorizzato. Il metodo di registrazione lo crea durante la costruzione dell’API.

Codice interno di implementazione; non è uno script autonomo.

() => bridge.Strength

Creazione API: Queste funzioni registrano l’API. Non vengono eseguite di nuovo a ogni chiamata del comando.


UO.TicksDead

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

Firme C#

int UO.TicksDead();

Legge o segnala una morte notata per la prima volta.

Parametri

Non ci sono parametri.

Valore restituito

int — UO.Timer in decimi di secondo dall'inizio del runtime, inizialmente 0. Non il numero di morti e non la durata della morte.

Comportamento

  • Ad ogni chiamata, se bridge.Dead()!=0 e ticksDead==0, salva Timer(). Altrimenti restituisce il precedente ticksDead. Dopo il risveglio, il campo non viene ripristinato con questo metodo.
  • Questo è il segno della prima chiamata TicksDead al momento della morte osservata, non l'ora esatta dell'evento del server. Nel primo decimo di secondo il valore di 0 può essere ripristinato.

Script C# autonomi

Ogni esempio può essere salvato come file separato .csx ed eseguito in IDE. Le funzioni oggetto UO e attesa forniscono l'host della sessione di gioco corrente. Sostituisci i nomi, le coordinate e gli indirizzi demo serial con i tuoi.

Esempio semplice

Esegui questo codice in un file .csx separato. Gli argomenti sono visibili nella chiamata; sostituisci nomi, serial e indirizzi di esempio con i tuoi.

Il risultato di una sola chiamata viene mostrato nel diario. Un numero non viene convertito in bool; per un array viene mostrato il numero di elementi.

var result = UO.TicksDead();
UO.Print("TicksDead: " + Convert.ToString(result));

1. Chiamata diretta - sceneggiatura diretta

Parametri e flusso di esecuzione:

  • Legge o segnala una morte notata per la prima volta.
UO.Print(UO.TicksDead());

2. Opzione esplicita: funzione dello script

Parametri e flusso di esecuzione:

  • Ad ogni chiamata, se bridge.Dead()!=0 e ticksDead==0, salva Timer(). Altrimenti restituisce il precedente ticksDead. Dopo il risveglio, il campo non viene ripristinato con questo metodo.
return  RunScenario();
 object? RunScenario()
{
    if (Truth(UO.IsDead()))
    {
        var stamp = UO.TicksDead();
        UO.Print(UO.Timer() - stamp);
    }

    return null;
}

bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

3. Funzione di supporto completa: classe di script

Parametri e flusso di esecuzione:

  • Questo è il segno della prima chiamata TicksDead al momento della morte osservata, non l'ora esatta dell'evento del server. Nel primo decimo di secondo il valore di 0 può essere ripristinato.
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        var before = UO.TicksDead();
        UO.Wait(500);
        UO.Print(before = UO.TicksDead());
        return null;
    }
}

Implementazione del comando

C# distingue maiuscole e minuscole. Usare il nome UO esatto. Confrontare i flag numerici con 0; usare bool solo se la firma restituisce bool.

UO.TicksDead() — UO.TicksDead()

Parametri: Nessun parametro.

Risultato: int / Integer.

Durante la chiamata:

Codice interno di implementazione; non è uno script autonomo.

public int TicksDead()

        {

            if (bridge.Dead() != 0 && ticksDead == 0)

                ticksDead = Timer();

            return ticksDead;

        }

UO.ToggleFly

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

Firme C#

void UO.ToggleFly();

Richiede di cambiare il volo del proprio Gargoyle: da terra a volo, da volo a terra. Questa è un'azione e UO.Flying() controlla solo lo stato. Il comando sarà utile prima di un percorso che richiede una determinata modalità.

Parametri

Non ci sono parametri.

Valore restituito

void - nessun valore. Questa non è true/false o la conferma del server. Controllare il risultato effettivo tramite UO.Flying() dopo aver elaborato la risposta del server.

Comportamento

  • L'unica forma è UO.ToggleFly(), senza ID, coordinate e parametro true/false. Si riferisce al tuo personaggio; il volo di un altro mobile non può essere modificato.
  • Invia una richiesta 0xBF con un sottocomando 0x0032. La chiamata in sé non controlla la razza, la versione del protocollo, le autorizzazioni del server o la modalità corrente; sceglilo per il tuo Gargoyle su un server abilitato al volo.
  • Il server potrebbe non funzionare e l'aggiornamento dello stato arriverà successivamente. Non chiamare ToggleFly in un ciclo di attesa: richiamare nuovamente potrebbe annullare il passaggio precedente. Invia una richiesta e leggi Flying fino al timeout.
  • L'altitudine Z e il segno di volo sono dati diversi. UO.Flying() restituisce int 1/true o 0/false; false è possibile anche se non è presente alcun carattere o il vecchio protocollo.

Script C# autonomi

Ogni esempio può essere salvato come file separato .csx ed eseguito in IDE. Le funzioni oggetto UO e attesa forniscono l'host della sessione di gioco corrente. Sostituisci i nomi, le coordinate e gli indirizzi demo serial con i tuoi.

Esempio semplice

Esegui questo codice in un file .csx separato. Gli argomenti sono visibili nella chiamata; sostituisci nomi, serial e indirizzi di esempio con i tuoi.

Il comando è un’istruzione separata. Il messaggio precedente indica l’inizio della chiamata e non conferma un’azione del server.

UO.Print("Calling UO.ToggleFly");
UO.ToggleFly();

1. Abilita il volo se necessario e controlla il risultato: script diretto

Parametri e flusso di esecuzione:

  • L'esempio è per il tuo Gargoyle su un server che supporta il volo. EnsureFlight(timeoutMs) restituisce 1/true se si osserva il volo, altrimenti 0/false. 2000 — limite di attesa in millisecondi; controlla ogni 50 ms. Se stai già volando, ToggleFly non viene chiamato. Viene inviata al massimo una richiesta, poi viene controllato lo stato della risposta. La pausa dello script/il ritardo della pianificazione può aumentare il tempo reale.
if (Truth(await EnsureFlight(2000)))
{
    UO.Print("Flight confirmed; ready for the next stage");
}
else
{
    UO.Print("Flight not confirmed; route was not started");
}

async Task<dynamic> EnsureFlight(dynamic timeoutMs)
{
    if (!(Truth(UO.Connected())) || Truth(UO.Dead()))
    {
        return false;
    }
    if (Truth(UO.Flying()))
    {
        return true;
    }
    UO.ToggleFly();
    var waited = 0;
    while (Truth(waited < timeoutMs))
    {
        if (!(Truth(UO.Connected())))
        {
            return false;
        }
        if (Truth(UO.Flying()))
        {
            return true;
        }
        await Delay(50);
        waited += 50;
    }
    return UO.Flying();
}

Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

2. Richiedi l'imbarco solo durante il volo - funzione script

Parametri e flusso di esecuzione:

  • Fino a 40 attende 50 ms, solo una richiesta. Il controllo Connected impedisce che l'arresto venga accettato come atterraggio riuscito. Mettere in pausa lo script può aumentare il tempo effettivo.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    if (Truth(UO.Connected()) && Truth(UO.Flying()))
    {
        UO.ToggleFly();
        var checks = 0;
        while (Truth(UO.Connected()) && Truth(UO.Flying()) && Truth(checks < 40))
        {
            await Delay(50);
            checks += 1;
        }

        if (Truth(UO.Connected()) && !(Truth(UO.Flying())))
        {
            UO.Print("Landing state observed");
        }
        else
        {
            UO.Print("Landing not confirmed");
        }
    }

    return null;
}

Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

3. Comando di attivazione/disattivazione manuale per tasto di scelta rapida - Classe di script

Parametri e flusso di esecuzione:

  • Assegna Main a un tasto per una richiesta di commutazione. Questo non è EnsureFlight: premendo nuovamente durante l'atterraggio delle richieste di volo. Una ripetizione chiave o due script paralleli possono inviare più richieste; nessun limitatore è installato qui.
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        if (Truth(UO.Connected()) && !(Truth(UO.Dead())))
        {
            UO.ToggleFly();
        }

        return null;
    }

    bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}

Implementazione del comando

C# distingue maiuscole e minuscole. Usare il nome UO esatto. Confrontare i flag numerici con 0; usare bool solo se la firma restituisce bool.

UO.ToggleFly() — UO.ToggleFly()

Parametri: Nessun parametro.

Risultato: void / Unit.

Durante la chiamata:

Codice interno di implementazione; non è uno script autonomo.

case "togglefly": bridge.ToggleFly(); return InjectionValue.Unit;
⚠️ **GitHub.com Fallback** ⚠️