IT UO Topic quests virtues - LIHACHTETAN/ClassicUO-Bad-Newbie-CSharp-Scripts-IDE GitHub Wiki

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

Missioni e virtù

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

Richieste generali dei clienti per missioni e virtù. Le missioni del server Age of Power sono descritte in una sezione separata del Wiki.

Sezioni

Argomento Comandi e spiegazioni
QuestRequest UO.QuestRequest
Quest Arrow UO.GetQuestArrow
Virtues Gump UO.ReqVirtuesGump
UseVirtue UO.UseVirtue

Tutti i comandi del tema

Missioni/virtù

UO.QuestRequest · UO.GetQuestArrow · UO.ReqVirtuesGump · UO.UseVirtue

Esempi sull'argomento

Ogni carta comando ha diversi scenari indipendenti: codice diretto, funzioni e classi. Di seguito sono selezionati brevi scenari; restrizioni e un'analisi completa sono nelle carte.

UO.GetQuestArrow

Parametri, risultato e tutti gli scenari

var arrow = UO.GetQuestArrow();
if (Truth(Truth(arrow[0]) == true))
{
    UO.Print(Convert.ToString(arrow[1]) + ", " + Convert.ToString(arrow[2]));
}

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

UO.UseVirtue

Parametri, risultato e tutti gli scenari

UO.Print(UO.UseVirtue("Honor"));

Riferimento completo dei comandi


UO.GetQuestArrow

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

Firme C#

dynamic UO.GetQuestArrow();
dynamic UO.GetQuestArrow(object? point);

Legge la posizione della freccia dell'attività del server. Consente allo script di sapere dove punta la freccia ricevuta dal server; non legge il comando Track.

Parametri

  • point - Segnaposto opzionale deprecato. La forma UO.GetQuestArrow(point) viene mantenuta per compatibilità; l'argomento non viene letto o modificato. Usa UO.GetQuestArrow() e il suo array di ritorno.

Valore restituito

Array [esiste, x, y], esattamente tre numeri interi. [0] - 1 (true), se è presente la freccia del server, altrimenti 0 (false); [1] - X, [2] - Y. Senza freccia [0, 0, 0]. Solo il campo [0] è un attributo logico; l'intero array non è bool. Se sono presenti più frecce, viene letta la prima salvata, non è possibile scegliere con ID.

Comportamento

  • Il server e le frecce locali vengono archiviate separatamente. Track(0) non rimuove la freccia del server. Senza grafica, il marcatore viene salvato e appare all'apertura della finestra. La chiusura della finestra di gioco non rimuove i segnalini; interrompere la connessione li cancella. Il server può spostare o rimuovere la sua freccia. Le coordinate non dimostrano che l’obiettivo è raggiungibile.
  • Coordinate della cella sulla mappa corrente, non pixel della finestra. Z e numero della carta non sono accettati. Seleziona un punto esistente sulla tua mappa; la squadra non controlla il terreno, traccia un percorso o segue un bersaglio in movimento.
  • Segnaposto facoltativo deprecato. La forma UO.GetQuestArrow(point) viene mantenuta per compatibilità; l'argomento non viene letto o modificato. Usa UO.GetQuestArrow() e il suo array di ritorno.

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.GetQuestArrow();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));

1. Applicazione diretta - sceneggiatura diretta

Parametri e flusso di esecuzione:

  • Per prima cosa viene controllato [0]; allora [1]/[2] può essere letto come X/Y. Non passare l'intero array come serial o bool.
var arrow = UO.GetQuestArrow();
if (Truth(Truth(arrow[0]) == true))
{
    UO.Print(Convert.ToString(arrow[1]) + ", " + Convert.ToString(arrow[2]));
}

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

2. Condizioni del gioco - funzione scenario

Parametri e flusso di esecuzione:

  • Copia le coordinate della freccia del server sul marker locale Track. Questo non è un movimento. Se il server successivamente sposta la freccia, quella locale rimarrà nello stesso punto.
return  RunScenario();
 object? RunScenario()
{
    var arrow = UO.GetQuestArrow();
    if (Truth(arrow[0] == 1))
    {
        UO.Track(1, arrow[1], arrow[2]);
    }

    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:

  • ArrowDistance restituisce la distanza UO.GetDistance(x,y) dal punto del server o −1 se non è presente alcuna freccia. A una distanza massima di due celle viene rimosso solo il Track locale, rimane la freccia 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()
    {
        var distance = ArrowDistance();
        if (Truth(distance >= 0) && Truth(distance <= 2))
        {
            UO.Track(0);
        }

        return null;
    }

    dynamic ArrowDistance()
    {
        var arrow = UO.GetQuestArrow();
        if (Truth(arrow[0] == 0))
        {
            return -1;
        }

        return UO.GetDistance(arrow[1], arrow[2]);
    }

    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.GetQuestArrow() — UO.GetQuestArrow()

Parametri: Nessun parametro.

Risultato: dynamic / Array.

Durante la chiamata:

Codice interno di implementazione; non è uno script autonomo.

case "getquestarrow":

                    return new InjectionValue(bridge.GetQuestArrow().Select(value => new InjectionValue(value)).ToArray());

UO.GetQuestArrow(point) — UO.GetQuestArrow(Any)

Parametri: point (Any)

Risultato: dynamic / Array.

Durante la chiamata:

Codice interno di implementazione; non è uno script autonomo.

case "getquestarrow":

                    return new InjectionValue(bridge.GetQuestArrow().Select(value => new InjectionValue(value)).ToArray());

UO.QuestRequest

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

Firme C#

void UO.QuestRequest();

Richiede il menu delle attività del server.

Parametri

Non ci sono parametri.

Valore restituito

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

Comportamento

  • QuestRequest passa GameActions.RequestQuestMenu(_world) allo streaming del gioco. Il team non legge né crea attività.
  • Negli esempi, UO.Wait specifica solo una pausa nello script; la fine della pausa non dimostra che il server abbia completato la richiesta.

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.QuestRequest");
UO.QuestRequest();

1. Chiamata diretta - sceneggiatura diretta

Parametri e flusso di esecuzione:

  • Richiede il menu delle attività del server.
UO.QuestRequest();

2. Opzione esplicita: funzione dello script

Parametri e flusso di esecuzione:

  • QuestRequest passa GameActions.RequestQuestMenu(_world) allo streaming del gioco. Il team non legge né crea attività.
return  RunScenario();
 object? RunScenario()
{
    if (Truth(UO.IsOnline()))
    {
        UO.QuestRequest();
    }

    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:

  • Negli esempi, UO.Wait specifica solo una pausa nello script; la fine della pausa non dimostra che il server abbia completato la 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()
    {
        UO.QuestRequest();
        UO.Wait(500);
        UO.Print(UO.GetGumpsCount());
        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.QuestRequest() — UO.QuestRequest()

Parametri: Nessun parametro.

Risultato: void / Unit.

Durante la chiamata:

Codice interno di implementazione; non è uno script autonomo.

case "questrequest": bridge.QuestRequest(); return InjectionValue.Unit;

UO.ReqVirtuesGump

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

Firme C#

void UO.ReqVirtuesGump();

Richiede la finestra delle virtù di un personaggio.

Parametri

Non ci sono parametri.

Valore restituito

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

Comportamento

  • RequestVirtuesGump, se c'è un Giocatore, chiama ReplyGump con gumpID=0x1CD, pulsante=1 e carattere serial. Senza Player non c'è richiesta.
  • Negli esempi, UO.Wait specifica solo una pausa nello script; la fine della pausa non dimostra che il server abbia completato la richiesta.

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.ReqVirtuesGump");
UO.ReqVirtuesGump();

1. Chiamata diretta - sceneggiatura diretta

Parametri e flusso di esecuzione:

  • Richiede la finestra delle virtù di un personaggio.
UO.ReqVirtuesGump();

2. Opzione esplicita: funzione dello script

Parametri e flusso di esecuzione:

  • RequestVirtuesGump, se c'è un Giocatore, chiama ReplyGump con gumpID=0x1CD, pulsante=1 e carattere serial. Senza Player non c'è richiesta.
return  RunScenario();
 object? RunScenario()
{
    if (Truth(UO.Self() != 0))
    {
        UO.ReqVirtuesGump();
    }

    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:

  • Negli esempi, UO.Wait specifica solo una pausa nello script; la fine della pausa non dimostra che il server abbia completato la 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()
    {
        UO.ReqVirtuesGump();
        UO.Wait(500);
        UO.Print(UO.GetGumpsCount());
        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.ReqVirtuesGump() — UO.ReqVirtuesGump()

Parametri: Nessun parametro.

Risultato: void / Unit.

Durante la chiamata:

Codice interno di implementazione; non è uno script autonomo.

case "reqvirtuesgump": bridge.RequestVirtuesGump(); return InjectionValue.Unit;

UO.UseVirtue

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

Firme C#

dynamic UO.UseVirtue(object? virtueName);

Richiede l'applicazione della virtù.

Parametri

  • virtueName — Nome onore/sacrificio/valore/compassione/onestà/umiltà/giustizia/spiritualità insensibile alle maiuscole e minuscole, con gli spazi esterni rimossi, o double-testo ID 1..8.

Valore restituito

Flag numerico int: 1 - valido ID 1..8 inviato tramite Send_InvokeVirtueRequest; 0 - nome sconosciuto/non valido ID. Questa non è una conferma dell'effetto server.

Comportamento

  • I nomi corrispondono a ID: Onore=1, Sacrificio=2, Valore=3, Compassione=4, Onestà=5, Umiltà=6, Giustizia=7, Spiritualità=8. L'analisi numerica di questa funzione utilizza la conversione int.TryParse, non 0x.
  • La squadra stessa non stabilisce un obiettivo successivo né controlla i punti virtù/disponibilità; questo è determinato dal 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 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.UseVirtue("Honor");
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));

1. Chiamata diretta - sceneggiatura diretta

Parametri e flusso di esecuzione:

  • Richiede l'applicazione della virtù.
UO.Print(UO.UseVirtue("Honor"));

2. Opzione esplicita: funzione dello script

Parametri e flusso di esecuzione:

  • I nomi corrispondono a ID: Onore=1, Sacrificio=2, Valore=3, Compassione=4, Onestà=5, Umiltà=6, Giustizia=7, Spiritualità=8. L'analisi numerica di questa funzione utilizza la conversione int.TryParse, non 0x.
return  RunScenario();
 object? RunScenario()
{
    UO.Print(UO.UseVirtue("1"));
    return null;
}

3. Funzione di supporto completa: classe di script

Parametri e flusso di esecuzione:

  • La squadra stessa non stabilisce un obiettivo successivo né controlla i punti virtù/disponibilità; questo è determinato dal 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()
    {
        var accepted = UO.UseVirtue("Honor");
        if (Truth(accepted))
        {
            UO.Print("Virtue request sent");
        }

        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.UseVirtue(virtueName) — UO.UseVirtue(Any)

Parametri: virtueName (Any)

Risultato: dynamic / Any.

Durante la chiamata:

Codice interno di implementazione; non è uno script autonomo.

case "usevirtue": return new InjectionValue(bridge.UseVirtue(Text(0)));
⚠️ **GitHub.com Fallback** ⚠️