Repository navigation
IT UO Topic combat
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
Home · C# · IDE · UO API · A–Z · Esempi · Lingue
Attacco, modalità di combattimento, abilità delle armi e cura delle bende. La richiesta del client e l'azione intrapresa dal server sono diverse.
| Argomento | Comandi e spiegazioni |
|---|---|
| Attack | UO.Attack |
| AttackNearest | UO.AttackNearest |
| LastAttack | UO.LastAttack |
| WarMode | UO.WarMode |
| WarTarget | UO.WarTargetID |
| Abilità delle armi | UO.GetWeaponAbilities · UO.GetAbilityID · UO.GetAbilityName · UO.GetActiveAbility |
| Primary Ability | UO.UsePrimaryAbility |
| Secondary Ability | UO.UseSecondaryAbility |
| Special Moves | UO.Specmove |
| BandageSelf | UO.BandageSelf |
UO.Attack · UO.AttackNearest · UO.LastAttack · UO.WarMode · UO.IsWarMode · UO.SetWarMode · UO.WarTargetID
UO.GetWeaponAbilities · UO.GetAbilityID · UO.GetAbilityName · UO.GetActiveAbility · UO.UseAbility · UO.UsePrimaryAbility · UO.UseSecondaryAbility · UO.Specmove
UO.SetClassMask · UO.ClearClassMask · UO.AttackNearest
I nomi dei gruppi e le tipologie di capi indossati sono specificati dalla sceneggiatura; l'ordine dei nomi fino a | specifica la priorità.
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.
Parametri, risultato e tutti gli scenari
var selected = UO.LastTarget();
var allowed = UO.GetMobiles(10, "5|6", -1, 8, false, false, true, true);
var i = 0;
while (Truth(i < ArrayLength(allowed)))
{
if (Truth(allowed[i] == selected))
{
UO.Attack(selected);
return null;
}
i += 1;
}
UO.Print("Selected target does not pass the filters");
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;Parametri, risultato e tutti gli scenari
var abilities = UO.GetWeaponAbilities();
UO.Print(UO.GetArrayLength(abilities));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.Attack(object? objID);Dirige una richiesta di attacco a uno specifico serial. Adatto quando il bersaglio è già stato selezionato dall'utente o trovato da un'altra squadra; Qui non esiste una ricerca indipendente per abbigliamento/distanza.
-
objID— Seriale mobile: int, stringa decimale/esadecimale o nome oggetto risolvibile (ad esempio lasttarget o nome AddObject). Non graphic/type o il nome della classe. Argomento richiesto; 0 non è un comando per fermare il combattimento. Per selezionare un bersaglio senza il suo ID usa la ricerca o il bersaglio del gioco.
void - nessun valore. Scrivi UO.Attack(enemy) su una riga separata, non var result=UO.Attack(...). La fine di una chiamata non conferma un riscontro, un danno o l'accettazione del server.
- La sfida in sé non respinge morti, distanti, self, alleati, serial vuoti o oggetti. Controlla il target selezionato; preferibilmente filtrato mobile da GetMobiles/FindMan.
- Viene utilizzato lo standard GameActions.Attack: è possibile il problema di un attacco criminale con EnabledCriminalActionQuery. Durante l'avanzamento normale, LastAttack/NewTargetSystemSerial vengono aggiornati e viene inviato un pacchetto di richiesta di attacco.
- Il comando non attiva WarMode, non esegue un doppio clic, non calcola un percorso e non avvia un ciclo di attacchi ripetuti. La modalità di combattimento e il combattimento successivo dipendono dal server.
- Potrebbe verificarsi un errore di risoluzione per una stringa con un nome oggetto sconosciuto. Il test Exists dimostra la presenza di un oggetto, ma non che sia mobile; GetMobiles è dato dai cellulari.
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.
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.Attack");
UO.Attack(UO.LastTarget());Parametri e flusso di esecuzione:
- lasttarget può essere un oggetto o un personaggio amico. L'elenco consentito esclude questi casi; Attack viene chiamato al massimo una volta.
var selected = UO.LastTarget();
var allowed = UO.GetMobiles(10, "5|6", -1, 8, false, false, true, true);
var i = 0;
while (Truth(i < ArrayLength(allowed)))
{
if (Truth(allowed[i] == selected))
{
UO.Attack(selected);
return null;
}
i += 1;
}
UO.Print("Selected target does not pass the filters");
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;Parametri e flusso di esecuzione:
- FindMan restituisce serial e non attacca. Il controllo IsDead viene aggiunto separatamente perché FindMan non ha aliveOnly.
return RunScenario();
object? RunScenario()
{
var enemy = UO.FindMan(5, 6, true, 4, -1, -1, false);
if (Truth(enemy == 0))
{
return null;
}
if (Truth(UO.IsDead(enemy) == 0))
{
UO.AddObject("enemy", enemy);
UO.Attack(enemy);
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Parametri e flusso di esecuzione:
- GetMobiles è già ordinato dal più vicino=true. Se c'è un muro davanti al primo bersaglio, viene controllato quello successivo; la presenza di visibleOnly non sostituisce di per sé CheckLOS. La verifica del server può variare.
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 targets = UO.GetMobiles(8, 5, -1, 10, true, false, true, true);
var i = 0;
while (Truth(i < ArrayLength(targets)))
{
var enemy = targets[i];
if (Truth(UO.CheckLOS(UO.GetX("self"), UO.GetY("self"), UO.GetZ("self"), UO.GetX(enemy), UO.GetY(enemy), UO.GetZ(enemy), UO.WorldNum())))
{
UO.Attack(enemy);
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;
}C# distingue maiuscole e minuscole. Usare il nome UO esatto. Confrontare i flag numerici con 0; usare bool solo se la firma restituisce bool.
Parametri: objID (Any/Integer/String)
Risultato: void / Unit.
Durante la chiamata:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Attack:bridge.Attack(Arg(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
Codice interno di implementazione; non è uno script autonomo.
case "attack": bridge.Attack(Arg(0)); return InjectionValue.Unit;Parametri: objID (Any/Integer/String)
Risultato: void / Unit.
Durante la chiamata:
-
InjectionScript.Runtime.InjectionApiUO.Attack. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Attack:bridge.Attack(id).
Codice interno di implementazione; non è uno script autonomo.
public void Attack(int id) => bridge.Attack(id);Parametri: objID (Any/Integer/String)
Risultato: void / Unit.
Durante la chiamata:
-
InjectionScript.Runtime.InjectionApiUO.Attack. -
InjectionScript.Runtime.InjectionApiUO.Attack:Attack(GetObject(id)). -
InjectionScript.Runtime.InjectionApiUO.GetObject:GetObject(id).
Codice interno di implementazione; non è uno script autonomo.
public void Attack(string id) => Attack(GetObject(id));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.AttackNearest(object? notoriety);
int UO.AttackNearest(object? notoriety, object? distance);
int UO.AttackNearest(object? notoriety, object? distance, object? body);
int UO.AttackNearest(object? notoriety, object? distance, object? body, object? maxZ);
int UO.AttackNearest(object? notoriety, object? distance, object? body, object? maxZ, object? nearest);
int UO.AttackNearest(object? notoriety, object? distance, object? body, object? maxZ, object? nearest, object? color);
int UO.AttackNearest(object? notoriety, object? distance, object? body, object? maxZ, object? nearest, object? color, object? classMask);
int UO.AttackNearest(object? notoriety, object? distance, object? body, object? maxZ, object? nearest, object? color, object? classMask, object? aliveOnly);
int UO.AttackNearest(object? notoriety, object? distance, object? body, object? maxZ, object? nearest, object? color, object? classMask, object? aliveOnly, object? visibleOnly);Seleziona un bersaglio di combattimento adatto e lo passa al gestore dell'attacco. I filtri limitano i caratteri accettabili; personalizzato classMask imposta la priorità dell'attrezzatura e della classe, la scelta più vicina all'interno di una classe.
-
notoriety— Relationship status to the character received from the server: 0 — unknown, 1 — Innocent, 2 — Ally, 3 — Gray, 4 — Criminal, 5 — Enemy, 6 — Murderer, 7 - Invulnerabile. Il numero indica uno stato; "5|6" o un array di numeri - uno qualsiasi dei precedenti. Non è il colore dei vestiti o la classe. Un numero negativo (solitamente -1), 0xFFFF, "qualsiasi", una stringa vuota o un array vuoto disabilitano separatamente questo filtro. Una stringa non valida senza numeri validi non trova nessuno. L'ordine degli stati non stabilisce la priorità. Il filtro 5 seleziona il nemico invece di selezionare automaticamente qualsiasi NPC/mostro; i valori effettivi dipendono dal server. -
distance— Raggio orizzontale nelle celle compreso: 5 consente la distanza 0..5. La distanza è max(abs(dx),abs(dy)), quindi anche la diagonale adiacente è 1. Per impostazione predefinita o se il numero è negativo, viene utilizzato UO.FindDistance() anziché la ricerca illimitata. 0 lascia la stessa cella X/Y. Non la lunghezza del percorso; gli ostacoli e i pavimenti non vengono controllati da questo parametro. -
body- Grafica del corpo del personaggio/NPC, non ID di un personaggio specifico e non type dell'armatura indossata. Un numero, una stringa esadecimale, la stringa "0x0190|0x0191" o un array di numeri. 0x0190 (400) - maschio umano; 0x0191 (401) - donna umana. La maschera unisce entrambi i corpi. L'elenco non include automaticamente altre razze, fantasmi o trasformazioni; tabella dei tipi di corpo grafico standard. Un numero negativo (-1 per impostazione predefinita), 0xFFFF, "qualsiasi", una stringa vuota o un solo array vuoto - qualsiasi corpo. Il testo sconosciuto senza un numero valido produce un risultato vuoto. -
maxZ— Massimi addominali (Z del bersaglio - Z del proprio personaggio), inclusi, in unità Z del mondo. Questo non è il numero di piani o di celle X/Y. maxZ=4 con il giocatore Z 10 consente il bersaglio Z 6..14; 0 richiede esattamente la stessa altezza. Per impostazione predefinita/per un numero negativo, viene preso UO.FindVertical(). Sulle scale, una Z uguale può eliminare il bersaglio desiderato. Anche una piccola differenza in Z non dimostra l'accessibilità del pavimento. -
nearest- true/1 seleziona il carattere corrispondente più vicino per impostazione predefinita; la stessa distanza è consentita dal serial più piccolo. false/0 mantiene il primo oggetto corrispondente nell'ordine dell'elenco dei clienti, non seleziona quello più lontano. Con classMask si applica prima la priorità di classe e poi la distanza intraclasse. -
color— Tonalità di mobile stesso: int o stringa numerica/esadecimale. Numero negativo (-1 per impostazione predefinita) e 0xFFFF - qualsiasi hue; 0 è esattamente hue 0 e non un valore qualsiasi. Non il colore della striscia della notorietà o la tonalità dei vestiti. Questo parametro non controlla il colore del capo indossato. -
classMask— Nomi di regole predefinite da UO.SetClassMask nello stesso runtime dello script. Ad esempio, "DTMH|hunter|spare" - priorità da sinistra a destra; è consentito anche un array di stringhe. Qualsiasi nome, il caso non è importante. Separatori di riga: |, virgola o ;. Qualsiasi nome sconosciuto/elemento vuoto all'interno dell'elenco deseleziona l'intera selezione: risultato 0, nessun attacco. Questa non è una maschera di bit numerica: 7 non significa tre classi. Un argomento mancante, -1, "-1", "any", "all" o una stringa vuota disabilita separatamente il filtro della classe. Mago/Carro armato/Arciere non sono integrati: senza registrare tali regole, non ci saranno partite. -
aliveOnly- true/1 esclude i cellulari con IsDead != 0; false/0 non aggiunge questa condizione per impostazione predefinita. Non confrontare HP con zero, non cercare oggetti cadaveri e non garantire che l'obiettivo rimanga in vita dopo essere stato evocato. -
visibleOnly- true/1 richiede IsVisible=1 secondo lo stato attuale di ClassicUO; false/0 non aggiunge una condizione per impostazione predefinita. Questa è la visibilità dell'oggetto caricato per il client, non un controllo della linea di vista/muro. Per il controllo geometrico è presente un UO.CheckLOS separato con coordinate; il server potrebbe ancora rifiutare l'azione.
int - serial selezionato mobile, o 0 quando non c'è un target adatto o classMask non è valido. Questa non è una bandiera 1/0, non una body/type, non una distanza o una conferma di uno strike. Controlla il nemico!= 0; nemico == true non è valido in C#: int non è paragonabile a bool. Se ID è diverso da zero, il gestore ClassicUO può ancora mostrare la conferma dell'attacco Innocente; il server può rifiutare l'azione.
- Ricerca locale: solo cellulari già scaricati. Ignore viene preso in considerazione; self è escluso, ad eccezione dell'esplicito includeSelf=true nei comandi che lo supportano. I contenitori e gli oggetti non sono mobili.
- Le condizioni si applicano insieme (AND). Le alternative valide all'interno di body/notorietà sono combinate tramite OR. La ricerca non cambia FindItem, FindCount e GetFoundItems.
- In body/notorietà, la maschera con numeri validi utilizza questi: "any|5" la limita ancora a 5. Gli elementi vuoti/non validi accanto ai numeri validi vengono ignorati. Per nessuna restrizione, passa -1 separatamente. Non portare questa regola a classMask: il nome della classe sconosciuta rifiuta l'intero elenco.
- Le squadre non aprono un'area del mondo, non corrono verso la meta e non controllano la percorribilità del percorso. Tra la selezione e l'elaborazione del server, lo stato del mondo può cambiare.
- La trasmissione di true e 1 è equivalente anche per i flag, false e 0. Anche altri numeri diversi da zero si convertono in true, ma 8/9 non sono modalità separate; usa chiaro true/false.
- Il nome è un'etichetta personalizzata, non una professione di server. Puoi chiamare la regola DTMH, my_group o qualsiasi altra parola. Il motore non determina le abilità/classi sul server in base al nome del personaggio.
- Se richiesto, un type o un array piatto significa almeno una cosa dall'elenco. Un array di gruppi significa: hai bisogno di almeno una cosa da CIASCUN gruppo. Ad esempio, [cuoio, doghe] richiede pelle E un bastone. Si tratta di un insieme di alternative e non di un obbligo di indossare l'intero guardaroba elencato.
- Qualsiasi oggetto indossato da Proibito esclude il personaggio da questa regola, anche se vengono soddisfatti quelli richiesti. La pelle più una catena vietata non supera la regola della pelle. Altre regole continuano a essere testate.
- Vengono conteggiati solo gli oggetti caricati indossati sugli strati 1..24 ad eccezione dello zaino 21. Il contenuto dello zaino/baule, della montatura 25, del caricatore 26..28 e della sponda 29 non è considerato abbigliamento. Confronta graphic/type; Le cose serial, nome e hue non vengono utilizzate qui.
- L'elenco non corrisponde senza l'attrezzatura adeguata caricata. L'assenza di un articolo proibito nei dati locali non dimostra la sua assenza sul server se il server non ha ancora inviato l'apparecchiatura. Il client non indovina i dati nascosti.
- Le regole appartengono a uno script runtime, comprese le sue funzioni e Include; non vengono trasferiti ad altri lanci indipendenti e non vengono salvati nel profilo. Quando si ricomincia, definirli nuovamente, ad esempio mediante la procedura di configurazione generale. Un SetClassMask ripetuto sostituisce la regola con lo stesso nome, solo dopo che i nuovi dati sono stati completamente verificati.
- Gli array vengono copiati durante la registrazione. La modifica dell'array originale non cambia la regola: ripeti SetClassMask. Le regole di corrispondenza multiple vengono risolte in base all'ordine dei nomi in classMask. Non esistono tabelle standard per l'abbigliamento del server.
- Sono supportati gli argomenti posizionali 1..9. Puoi saltare la coda; per impostare classMask devono essere passati i primi sei argomenti. Utilizza il nome var per vedere il significato di ciascuna posizione.
- Viene selezionato un bersaglio e l'attacco viene inviato una volta. Questo non è un ciclo di combattimento automatico. Senza classMask il filtro dell'attrezzatura e la lettura degli articoli non vengono eseguiti.
- Prima i filtri generali, poi la priorità da sinistra a destra, poi quella più vicina. neighbor=false mantiene ancora la priorità della classe, ma all'interno della prima classe corrispondente seleziona il primo mobile nell'elenco dei client.
- Il vecchio tentativo di cercare una sottostringa in un nome/titolo è stato sostituito dalle regole dell'equipaggiamento. Sposta tali script in un SetClassMask esplicito; Il nome del personaggio non lo identifica più come una classe specifica.
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.
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.AttackNearest(5, 5);
UO.Print("AttackNearest: " + Convert.ToString(result));Parametri e flusso di esecuzione:
- body=-1, maxZ=FindVertical(), più vicino=true, colore=-1, classMask disabilitato, aliveOnly=false, visibleOnly=false. Per essere sicuri di escludere le persone morte, utilizza il modulo completo sottostante.
var enemy = UO.AttackNearest(5, 5);
if (Truth(enemy == 0))
{
return null;
}
UO.AddObject("combat_target", enemy);
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Parametri e flusso di esecuzione:
- maxZ=0 è utile per confronti rigorosi di altezza, ma potrebbe tagliare il bersaglio sul gradino. visibleOnly non controlla il muro. Tutti e nove gli argomenti sono firmati; restituisce ID, non true.
return RunScenario();
object? RunScenario()
{
var status = "5|6";
var radius = 8;
var bodies = "0x0190|0x0191";
var heightTolerance = 0;
dynamic chooseNearest = true;
var bodyHue = -1;
var equipmentClasses = -1;
dynamic requireAlive = true;
dynamic requireVisible = true;
var enemy = UO.AttackNearest(status, radius, bodies, heightTolerance, chooseNearest, bodyHue, equipmentClasses, requireAlive, requireVisible);
if (Truth(enemy != 0))
{
UO.AddObject("enemy_same_height", enemy);
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Parametri e flusso di esecuzione:
- DTMH viene selezionato per primo; solo se non ci sono DTMH - pesanti adatti, allora cacciatore. DTMH sulle celle 10 ha la priorità su quelle pesanti sulle celle 2. Per invertire l'ordine, cambiare la riga classMask. Dei due DTMH viene selezionato quello più vicino.
- Gear è una funzione utente completamente ridotta C#, non un comando separato UO. I due array in Gear(leather, staves) formano due gruppi obbligatori. L'aggiunta di una tipologia alla pelle amplia le alternative; non richiede di indossare due articoli in pelle.
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 leather = Gear(0x13C4, 0x13C7);
var staves = Gear(0x0DF0, 0x0E81);
var chain = Gear(0x13BF, 0x13C0);
var plate = Gear(0x1415, 0x1411);
var bows = Gear(0x13B2, 0x0F50);
UO.SetClassMask("DTMH", Gear(leather, staves), chain);
UO.SetClassMask("охотник", bows);
UO.SetClassMask("тяжёлый", plate);
var notoriety = "5|6";
var distance = 12;
var body = -1;
var maxZ = 8;
dynamic nearest = true;
var color = -1;
var classMask = "DTMH|тяжёлый|охотник";
dynamic aliveOnly = true;
dynamic visibleOnly = true;
var enemy = UO.AttackNearest(notoriety, distance, body, maxZ, nearest, color, classMask, aliveOnly, visibleOnly);
if (Truth(enemy == 0))
{
UO.Print("No matching enemy; no attack sent");
return null;
}
UO.AddObject("selected_enemy", enemy);
return null;
}
dynamic Gear(params dynamic[] values)
{
return values;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}Parametri e flusso di esecuzione:
- 10 è il raggio, 4 è la differenza Z consentita, entrambi -1 dopo il colore di disabilitazione della bandiera e classMask. L'ordine dell'elenco dei clienti non è garantito tra gli aggiornamenti mondiali. Per una prossimità prevedibile, utilizzare true.
dynamic sortByDistance = false;
var target = UO.AttackNearest(5, 10, -1, 4, sortByDistance, -1, -1, true, true);
if (Truth(target == 0))
{
return null;
}
UO.AddObject("current_enemy", target);
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Parametri e flusso di esecuzione:
- Cambia solo l'ordine delle etichette: non è necessario aggiungere nuove tabelle o nomi di abbigliamento al cliente. Per evitare il fallback su uno pesante, rimuovilo dalla priorità.
return RunScenario();
object? RunScenario()
{
var leather = Gear(0x13C4, 0x13C7);
var staves = Gear(0x0DF0, 0x0E81);
var chain = Gear(0x13BF, 0x13C0);
var plate = Gear(0x1415, 0x1411);
var bows = Gear(0x13B2, 0x0F50);
UO.SetClassMask("DTMH", Gear(leather, staves), chain);
UO.SetClassMask("охотник", bows);
UO.SetClassMask("тяжёлый", plate);
var priority = "охотник|DTMH|тяжёлый";
var enemy = UO.AttackNearest(5, 12, -1, 8, true, -1, priority, true, true);
if (Truth(enemy != 0))
{
UO.AddObject("priority_enemy", enemy);
}
return null;
}
dynamic Gear(params dynamic[] values)
{
return values;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;C# distingue maiuscole e minuscole. Usare il nome UO esatto. Confrontare i flag numerici con 0; usare bool solo se la firma restituisce bool.
Parametri: notoriety (Any)
Risultato: int / Integer.
Durante la chiamata:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCompactSearchApi [AttackNearest]. -
InjectionScript.Runtime.InjectionApiUO.CompactAttackNearest:CompactAttackNearest(values).
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.
values => new InjectionValue(CompactAttackNearest(values))Parametri: notoriety (Any), distance (Any)
Risultato: int / Integer.
Durante la chiamata:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCompactSearchApi [AttackNearest]. -
InjectionScript.Runtime.InjectionApiUO.CompactAttackNearest:CompactAttackNearest(values).
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.
values => new InjectionValue(CompactAttackNearest(values))Parametri: notoriety (Any), distance (Any), body (Any)
Risultato: int / Integer.
Durante la chiamata:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCompactSearchApi [AttackNearest]. -
InjectionScript.Runtime.InjectionApiUO.CompactAttackNearest:CompactAttackNearest(values).
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.
values => new InjectionValue(CompactAttackNearest(values))Parametri: notoriety (Any), distance (Any), body (Any), maxZ (Any)
Risultato: int / Integer.
Durante la chiamata:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCompactSearchApi [AttackNearest]. -
InjectionScript.Runtime.InjectionApiUO.CompactAttackNearest:CompactAttackNearest(values).
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.
values => new InjectionValue(CompactAttackNearest(values))Parametri: notoriety (Any), distance (Any), body (Any), maxZ (Any), nearest (Any)
Risultato: int / Integer.
Durante la chiamata:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCompactSearchApi [AttackNearest]. -
InjectionScript.Runtime.InjectionApiUO.CompactAttackNearest:CompactAttackNearest(values).
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.
values => new InjectionValue(CompactAttackNearest(values))
UO.AttackNearest(notoriety, distance, body, maxZ, nearest, color) — UO.AttackNearest(Any,Any,Any,Any,Any,Any)
Parametri: notoriety (Any), distance (Any), body (Any), maxZ (Any), nearest (Any), color (Any)
Risultato: int / Integer.
Durante la chiamata:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCompactSearchApi [AttackNearest]. -
InjectionScript.Runtime.InjectionApiUO.CompactAttackNearest:CompactAttackNearest(values).
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.
values => new InjectionValue(CompactAttackNearest(values))
UO.AttackNearest(notoriety, distance, body, maxZ, nearest, color, classMask) — UO.AttackNearest(Any,Any,Any,Any,Any,Any,Any)
Parametri: notoriety (Any), distance (Any), body (Any), maxZ (Any), nearest (Any), color (Any), classMask (Any)
Risultato: int / Integer.
Durante la chiamata:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCompactSearchApi [AttackNearest]. -
InjectionScript.Runtime.InjectionApiUO.CompactAttackNearest:CompactAttackNearest(values).
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.
values => new InjectionValue(CompactAttackNearest(values))
UO.AttackNearest(notoriety, distance, body, maxZ, nearest, color, classMask, aliveOnly) — UO.AttackNearest(Any,Any,Any,Any,Any,Any,Any,Any)
Parametri: notoriety (Any), distance (Any), body (Any), maxZ (Any), nearest (Any), color (Any), classMask (Any), aliveOnly (Any)
Risultato: int / Integer.
Durante la chiamata:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCompactSearchApi [AttackNearest]. -
InjectionScript.Runtime.InjectionApiUO.CompactAttackNearest:CompactAttackNearest(values).
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.
values => new InjectionValue(CompactAttackNearest(values))
UO.AttackNearest(notoriety, distance, body, maxZ, nearest, color, classMask, aliveOnly, visibleOnly) — UO.AttackNearest(Any,Any,Any,Any,Any,Any,Any,Any,Any)
Parametri: notoriety (Any), distance (Any), body (Any), maxZ (Any), nearest (Any), color (Any), classMask (Any), aliveOnly (Any), visibleOnly (Any)
Risultato: int / Integer.
Durante la chiamata:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCompactSearchApi [AttackNearest]. -
InjectionScript.Runtime.InjectionApiUO.CompactAttackNearest:CompactAttackNearest(values).
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.
values => new InjectionValue(CompactAttackNearest(values))Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.BandageSelf();Posiziona il personaggio come bersaglio UO.Wait e usa una benda di tipo 0x0E21 selezionata dallo zaino. L'operazione viene inviata dal client ed eseguita in modo asincrono dal server.
Non ci sono parametri.
void. Il metodo non restituisce lo stato del trattamento e non attende il completamento del bendaggio.
- Runtime imposta l'obiettivo
Self, quindi cerca nello zaino l'oggetto di tipo0x0E21più simile a qualsiasi hue e lo utilizza. Se la benda non viene trovata, la ricerca segnala l'accaduto al log di sistema; il risultato della ricerca non viene restituito allo script chiamante. La possibilità e il risultato del trattamento dipendono dallo stato del server del personaggio.
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.
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.BandageSelf");
UO.BandageSelf();Parametri e flusso di esecuzione:
- Usa la benda trovata nello zaino su te stesso una volta.
UO.BandageSelf();2. Prima controlla la connessione, quindi invia l'azione; la chiamata non attende la fine del trattamento. - funzione di script
Parametri e flusso di esecuzione:
- Prima controlla la connessione, quindi invia l'azione; la chiamata non attende la fine del trattamento.
return RunScenario();
object? RunScenario()
{
if (Truth(UO.Connected()))
{
UO.BandageSelf();
}
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. La procedura riporta solo l'utilizzo della benda e non riporta il successo del trattamento. - lezione di sceneggiatura
Parametri e flusso di esecuzione:
- La procedura riporta solo l'utilizzo della benda e non riporta il successo del trattamento.
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()
{
ApplyBandage();
return null;
}
void ApplyBandage()
{
UO.BandageSelf();
}
}C# distingue maiuscole e minuscole. Usare il nome UO esatto. Confrontare i flag numerici con 0; usare bool solo se la firma restituisce bool.
Parametri: Nessun parametro.
Risultato: void / Unit.
Durante la chiamata:
-
InjectionScript.Runtime.InjectionApiUO.BandageSelf. -
InjectionScript.Runtime.InjectionApiUO.FindType:FindType(new InjectionValue(0x0e21), new InjectionValue(0), new InjectionValue("my")). -
InjectionScript.Runtime.InjectionApiUO.WaitTargetSelf:WaitTargetSelf(). -
InjectionScript.Runtime.InjectionApiUO.UseObject:UseObject(foundBandages). -
InjectionScript.Runtime.InjectionApiUO.SystemMessage:SystemMessage("No bandages found.").
Codice interno di implementazione; non è uno script autonomo.
public void BandageSelf()
{
var foundBandages = FindType(new InjectionValue(0x0e21), new InjectionValue(0), new InjectionValue("my"));
if (foundBandages != string.Empty)
{
WaitTargetSelf();
UseObject(foundBandages);
}
else
SystemMessage("No bandages found.");
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.ClearClassMask();
int UO.ClearClassMask(object? name);Rimuove una regola dell'attrezzatura personalizzata o tutte le regole del runtime dello script corrente. Utile prima di riconfigurare i set o disabilitare la priorità temporanea.
-
name— Nome opzionale passato a SetClassMask. Il caso non è importante. Senza argomenti, tutte le regole per questo runtime verranno eliminate. Questa non è una stringa di priorità: "mage|tank" non è consentito qui; rimuoverne uno alla volta o chiamare senza argomenti.
int: numero di regole eliminate. Con il nome 1 significa cancellato, 0 - non esisteva una regola del genere. Senza argomenti, viene restituito 0..N, non un flag booleano. Pertanto, confronta il risultato complessivo con > 0 e non con true.
- Non annulla un attacco già inviato e non ferma lo script. Non cambia l'equipaggiamento del personaggio.
- Una volta cancellato, il nome resta sconosciuto al successivo AttackNearest. Rimuovilo anche da classMask o registralo nuovamente; un nome sconosciuto blocca tutta la selezione.
- I tempi di esecuzione degli altri e le loro regole non vengono influenzati. Per una ricerca regolare senza classi, utilizzare classMask=-1 anziché il set di abbigliamento obbligatorio vuoto.
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.
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.ClearClassMask();
UO.Print("ClearClassMask: " + Convert.ToString(result));Parametri e flusso di esecuzione:
- La rimozione non cambia arma né pone fine al combattimento. Cambia solo un'ulteriore classificazione.
UO.SetClassMask("временный", 0x13B2);
UO.SetClassMask("основной", 0x1415);
UO.ClearClassMask("временный");
var enemy = UO.AttackNearest(5, 10, -1, 8, true, -1, "основной", true, true);
if (Truth(enemy != 0))
{
UO.AddObject("main_enemy", enemy);
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Parametri e flusso di esecuzione:
- rimosse: numero di regole rimosse. Un nuovo set viene creato nello stesso runtime, senza riavviare il client.
return RunScenario();
object? RunScenario()
{
UO.SetClassMask("старый_набор", 0x13B2);
var removed = UO.ClearClassMask();
UO.SetClassMask("новый_набор", 0x0F50);
var enemy = UO.AttackNearest(5, 8, -1, 4, true, -1, "новый_набор", true, true);
if (Truth(enemy != 0))
{
UO.AddObject("new_enemy", enemy);
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Parametri e flusso di esecuzione:
- Non passare il nome remoto: il risultato sarebbe 0. -1 disabilita solo gli indumenti; gli altri filtri continuano a funzionare.
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.SetClassMask("по_одежде", 0x13C4);
UO.ClearClassMask();
var classes = -1;
var enemy = UO.AttackNearest(5, 5, -1, 4, true, -1, classes, true, true);
if (Truth(enemy != 0))
{
UO.AddObject("enemy_without_classes", enemy);
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}C# distingue maiuscole e minuscole. Usare il nome UO esatto. Confrontare i flag numerici con 0; usare bool solo se la firma restituisce bool.
Parametri: Nessun parametro.
Risultato: int / Integer.
Durante la chiamata:
-
InjectionScript.Runtime.InjectionApiUO.RegisterClassMaskApi [ClearClassMask]. -
InjectionScript.Runtime.InjectionApiUO.ClearClassMask:ClearClassMask(null).
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.
args => new InjectionValue(ClearClassMask(null))Parametri: name (Any)
Risultato: int / Integer.
Durante la chiamata:
-
InjectionScript.Runtime.InjectionApiUO.RegisterClassMaskApi [ClearClassMask]. -
InjectionScript.Runtime.InjectionApiUO.ClearClassMask:ClearClassMask(ReadClassName(args[0])). -
InjectionScript.Runtime.InjectionApiUO.ReadClassName:ReadClassName(args[0]).
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.
args => new InjectionValue(ClearClassMask(ReadClassName(args[0])))Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.GetAbilityID(object? abilityName);Risolve il nome dell'abilità dell'arma o la stringa numerica nella directory del client ID.
-
abilityName- string: nome AbilityData, enum Nome abilità o decimale ID. Gli spazi/la punteggiatura vengono rimossi durante il confronto dei nomi e non fanno distinzione tra maiuscole e minuscole.
int 1..AbilityData.Abilities.Length - abilità conosciuta; 0 è un nome sconosciuto, una stringa normalizzata vuota o un numero ID esterno alla directory.
- ResolveClassicUOAbilityId prima analizza l'int decimale, quindi confronta la directory normalizzata e i nomi enum. Il comando non attiva l'abilità né verifica la compatibilità con l'arma corrente.
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.
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.GetAbilityID("Armor Ignore");
UO.Print("GetAbilityID: " + Convert.ToString(result));Parametri e flusso di esecuzione:
- Il numero rappresenta il ID del catalogo, non l'uso dell'abilità.
var id = UO.GetAbilityID("Armor Ignore");
UO.Print(Convert.ToString(id));Parametri e flusso di esecuzione:
- La linea 1 attraversa il percorso numerico del risolutore.
return RunScenario();
object? RunScenario()
{
var id = UO.GetAbilityID("1");
UO.Print(Convert.ToString(id));
return null;
}Parametri e flusso di esecuzione:
- Un nome mancante restituisce 0.
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.GetAbilityID("unknown-example-ability");
UO.Print(Convert.ToString(id));
return null;
}
}C# distingue maiuscole e minuscole. Usare il nome UO esatto. Confrontare i flag numerici con 0; usare bool solo se la firma restituisce bool.
Parametri: abilityName (String)
Risultato: int / Integer.
Durante la chiamata:
-
InjectionScript.Runtime.InjectionApiUO.GetAbilityID. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.ResolveAbility:bridge.ResolveAbility(abilityName).
Codice interno di implementazione; non è uno script autonomo.
public int GetAbilityID(string abilityName) => bridge.ResolveAbility(abilityName);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
string UO.GetAbilityName(object? abilityId);Restituisce il nome dell'abilità di un'arma dalla sua directory ID.
-
abilityId- int: l'indicizzazione ID inizia con 1; il ponte dice AbilityData.Abilità[abilityId-1].
string nome della directory. Per ID inferiore a 1 o maggiore della lunghezza della directory, viene restituita una stringa vuota.
- La lettura è locale e non attiva l'abilità. ID del catalogo non significa che l'abilità sia presente nell'arma attuale.
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.
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.GetAbilityName(1);
UO.Print("GetAbilityName: " + Convert.ToString(result));Parametri e flusso di esecuzione:
- ID 1 corrisponde al primo elemento della directory.
var name = UO.GetAbilityName(1);
UO.Print(name);Parametri e flusso di esecuzione:
- Il nome viene restituito in base a ID trovato dal risolutore.
return RunScenario();
object? RunScenario()
{
var id = UO.GetAbilityID("Armor Ignore");
if (Truth(id > 0))
{
UO.Print(UO.GetAbilityName(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;Parametri e flusso di esecuzione:
- ID 0 restituisce una stringa di lunghezza 0.
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 name = UO.GetAbilityName(0);
UO.Print(Convert.ToString(Len(name)));
return null;
}
int Len(object? value) => Convert.ToString(value)?.Length ?? 0;
}C# distingue maiuscole e minuscole. Usare il nome UO esatto. Confrontare i flag numerici con 0; usare bool solo se la firma restituisce bool.
Parametri: abilityId (Integer)
Risultato: string / String.
Durante la chiamata:
-
InjectionScript.Runtime.InjectionApiUO.GetAbilityName. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetAbilityName:bridge.GetAbilityName(abilityId).
Codice interno di implementazione; non è uno script autonomo.
public string GetAbilityName(int abilityId) => bridge.GetAbilityName(abilityId);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.GetActiveAbility();Legge il nome dell'abilità di combattimento attivata del tuo personaggio.
Non ci sono parametri.
string è il nome inglese dell'abilità attivata, ad esempio Armor Ignore. Stringa "0" se nessuna abilità è attivata o manca un personaggio. Questa non è un'abilità int 0, né un'abilità ID, né è una conferma di un colpo andato a segno.
- Vengono letti i flag PrimaryAbility/SecondaryAbility del carattere corrente. Se entrambi sono attivi, viene scelta l'abilità primaria. Il contrassegno dell'attività viene rimosso dal numero prima che venga cercato il nome.
- I dati vengono letti localmente; il getter stesso non attiva l'abilità e non consuma mana. Dopo l'attacco, il server può rimuovere l'attivazione.
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.
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.GetActiveAbility();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Parametri e flusso di esecuzione:
- Non ci sono argomenti; viene letto il carattere del client corrente.
- Se non c'è attivazione viene stampata la stringa 0.
var name = UO.GetActiveAbility();
UO.Print(name);Parametri e flusso di esecuzione:
- Il confronto viene effettuato con la stringa 0. UsePrimaryAbility viene chiamato separatamente.
- Questa è una richiesta di attivazione, non la prova di un attacco riuscito. La disponibilità dipende dalle armi e dalle regole del server.
return RunScenario();
object? RunScenario()
{
if (Truth(UO.GetActiveAbility() == "0"))
{
UO.UsePrimaryAbility();
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Parametri e flusso di esecuzione:
- GetAbilityID riceve il nome restituito dal getter.
- L'abilità ID non è l'arma o il personaggio serial. Innanzitutto è esclusa l’assenza di un’abilità attiva.
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 name = UO.GetActiveAbility();
if (Truth(name != "0"))
{
var id = UO.GetAbilityID(name);
UO.Print("Ability ID: " + Convert.ToString(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;
}C# distingue maiuscole e minuscole. Usare il nome UO esatto. Confrontare i flag numerici con 0; usare bool solo se la firma restituisce bool.
Parametri: Nessun parametro.
Risultato: dynamic / Any.
Durante la chiamata:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetActiveAbility:bridge.GetActiveAbility().
Codice interno di implementazione; non è uno script autonomo.
case "getactiveability": return new InjectionValue(bridge.GetActiveAbility());Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.GetWeaponAbilities();Bridge legge Player.Abilities, applica il valore ((byte) e 0x7F), memorizza il positivo ID nell'ordine originale.
Non ci sono parametri.
Matrice di abilità int positive ID dell'arma corrente. La bandiera alta 0x80 viene rimossa; sono esclusi i valori zero. Senza Player: un array vuoto.
- Bridge legge Player.Abilities, applica il valore ((byte) e 0x7F), memorizza il positivo ID nell'ordine originale. Restituisce il ID disponibile, non il fatto della modalità attiva e non i nomi.
- Legge lo stato locale attuale. Non esiste alcun pacchetto, destinazione o aggiornamento automatico; le singole letture possono vedere stati diversi.
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.
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.GetWeaponAbilities();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Parametri e flusso di esecuzione:
- Bridge legge Player.Abilities, applica il valore ((byte) e 0x7F), memorizza il positivo ID nell'ordine originale.
var abilities = UO.GetWeaponAbilities();
UO.Print(UO.GetArrayLength(abilities));Parametri e flusso di esecuzione:
- Bridge legge Player.Abilities, applica il valore ((byte) e 0x7F), memorizza il positivo ID nell'ordine originale. Restituisce il ID disponibile, non il fatto della modalità attiva e non i nomi.
return RunScenario();
object? RunScenario()
{
var abilities = UO.GetWeaponAbilities();
if (Truth(UO.GetArrayLength(abilities) > 0))
{
UO.Print(UO.GetAbilityName(abilities[0]));
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Parametri e flusso di esecuzione:
- Legge lo stato locale attuale. Non esiste alcun pacchetto, destinazione o aggiornamento automatico; le singole letture possono vedere stati diversi.
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.GetWeaponAbilities();
UO.Wait(500);
var after = UO.GetWeaponAbilities();
UO.Print(before);
UO.Print(after);
return null;
}
}C# distingue maiuscole e minuscole. Usare il nome UO esatto. Confrontare i flag numerici con 0; usare bool solo se la firma restituisce bool.
Parametri: Nessun parametro.
Risultato: dynamic / Any.
Durante la chiamata:
-
InjectionScript.Runtime.InjectionApiUO.GetWeaponAbilities. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetWeaponAbilities:bridge.GetWeaponAbilities().
Codice interno di implementazione; non è uno script autonomo.
public InjectionValue GetWeaponAbilities() => new InjectionValue(
(bridge.GetWeaponAbilities() ?? Array.Empty<int>()).Select(value => new InjectionValue(value)).ToArray());Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.IsWarMode(object? objID);Controlla la posizione di combattimento mobile.
-
objID— Obbligatorio serial/ID di un oggetto specifico: int, stringa esadecimale o alias self, backpack, lasttarget, lastobject, lastcontainer, laststatus, finditem, lastcorpse o nome AddObject. Questo non è graphic/type. Il nome non specificato si risolve in 0; il comando non apre alcuna nuova destinazione. L'argomento è obbligatorio; per te, supera self.
int 1 - caricato mobile ha l'attributo InWarMode. int 0 - manca l'attributo, l'oggetto non è mobile, sconosciuto o eliminato. Non ti dice chi il personaggio sta attaccando né attiva la modalità combattimento. La lettura della modalità straniera è limitata ai dati ricevuti dal server.
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.
- 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.
- Non ti dice chi il personaggio sta attaccando né attiva la modalità combattimento. La lettura della modalità straniera è limitata ai dati ricevuti dal server.
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.
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.IsWarMode("self");
UO.Print("IsWarMode: " + Convert.ToString(result));Parametri e flusso di esecuzione:
- L'argomento self seleziona esplicitamente il suo carattere. stato - solo 1/0.
- Non ti dice chi il personaggio sta attaccando né attiva la modalità combattimento. La lettura della modalità straniera è limitata ai dati ricevuti dal server.
var state = UO.IsWarMode("self");
if (Truth(state))
{
UO.Print("Combat stance is active");
}
else
{
UO.Print("Combat stance is inactive");
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Parametri e flusso di esecuzione:
- IsNpc esclude soggetto e oggetto sconosciuto. target memorizza un singolo serial anziché un riferimento live a un lasttarget mutevole.
- Il risultato si riferisce al campo InWarMode. I dati vengono aggiornati solo dopo che il client ha ricevuto lo stato appropriato.
return RunScenario();
object? RunScenario()
{
var target = UO.GetSerial("lasttarget");
if (Truth(UO.IsNPC(target)))
{
var state = UO.IsWarMode(target);
UO.Print("Selected mobile state 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;Parametri e flusso di esecuzione:
- UO.Wait(500): pausa in millisecondi. Successivamente, viene controllato separatamente che mobile esista ancora.
- Vengono confrontate due immagini. Le modifiche intermedie potrebbero non essere perse e questa non è una sottoscrizione continua agli eventi del server.
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 target = UO.GetSerial("lasttarget");
if (Truth(UO.IsNPC(target)))
{
var before = UO.IsWarMode(target);
await Delay(500);
if (Truth(UO.IsNPC(target)))
{
var after = UO.IsWarMode(target);
if (Truth(before != after))
{
UO.Print("Flag changed: " + Convert.ToString(before) + " -> " + Convert.ToString(after));
}
}
else
{
UO.Print("Mobile left the local world");
}
}
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;
}C# distingue maiuscole e minuscole. Usare il nome UO esatto. Confrontare i flag numerici con 0; usare bool solo se la firma restituisce bool.
Parametri: objID (Any)
Risultato: int / Integer.
Durante la chiamata:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.IsWarMode:bridge.IsWarMode(Arg(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0). -
InjectionScript.Runtime.InjectionApiUO.WarMode:WarMode().
Codice interno di implementazione; non è uno script autonomo.
case "iswarmode": return new InjectionValue(arguments.Length > 0 ? bridge.IsWarMode(Arg(0)) : WarMode());Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.LastAttack();Legge serial dell'ultimo bersaglio dell'attacco.
Non ci sono parametri.
int — salvato serial; 0 significa che serial non è installato. Non è bool e non graphic/type; un ID diverso da zero potrebbe non esistere più nel mondo.
- Sorgente campo: bridge.LastAttack. Il comando non seleziona, utilizza o attacca l'oggetto.
- Legge lo stato locale attuale. Non esiste alcun pacchetto, destinazione o aggiornamento automatico; le singole letture possono vedere stati diversi.
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.
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.LastAttack();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Parametri e flusso di esecuzione:
- Legge serial dell'ultimo bersaglio dell'attacco.
var id = UO.LastAttack();
UO.Print(Hex(id));
string Hex(object? value) => Convert.ToInt64(value).ToString("X");Parametri e flusso di esecuzione:
- Sorgente campo: bridge.LastAttack. Il comando non seleziona, utilizza o attacca l'oggetto.
return RunScenario();
object? RunScenario()
{
var id = UO.LastAttack();
if (Truth(id != 0) && Truth(UO.Exists(id)))
{
UO.Print(UO.GetName(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;Parametri e flusso di esecuzione:
- Legge lo stato locale attuale. Non esiste alcun pacchetto, destinazione o aggiornamento automatico; le singole letture possono vedere stati diversi.
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.LastAttack();
UO.Wait(500);
var after = UO.LastAttack();
UO.Print(before = after);
return null;
}
}C# distingue maiuscole e minuscole. Usare il nome UO esatto. Confrontare i flag numerici con 0; usare bool solo se la firma restituisce bool.
Parametri: Nessun parametro.
Risultato: dynamic / Any.
Durante la chiamata:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.LastAttack:bridge.LastAttack.
Codice interno di implementazione; non è uno script autonomo.
case "lastattack":
case "wartargetid": return new InjectionValue(bridge.LastAttack);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.SetClassMask(object? name, object? required);
int UO.SetClassMask(object? name, object? required, object? forbidden);Crea o sostituisce una classe di equipaggiamento personalizzata per classMask in UO.AttackNearest. Scegli un nome e cose graphic/type; i titoli di lavoro incorporati non sono richiesti.
-
name— Una stringa non vuota con il tuo nome, ad esempio "DTMH", "my_group", "archer_with_shield". Le maiuscole e minuscole non sono importanti, gli spazi attorno ai bordi vengono rimossi. | , ; proibito: questi sono separatori di priorità. any/all/-1 sono riservati per disabilitare il filtro. -
required— Uno type, una serie piatta di alternative o una serie di gruppi obbligatori. Ogni gruppo è type o un array piatto. Hai bisogno di almeno una cosa da ciascun gruppo; i gruppi obbligatori vuoti non sono consentiti. Ogni type è una int/stringa numerica/esadecimale 1..65534. Non è accettata la nidificazione più profonda di una serie di gruppi. Queste sono cose graphic, non caratteri serial e non body. -
forbidden— Opzionale type o array semplice di tipi illegali. Per impostazione predefinita, non sono presenti articoli proibiti; è consentito anche un array vuoto. Se viene indossato uno di questi oggetti, la regola non corrisponde. Gli stessi confini 1..65534; -1/any non sono accettati qui. È impossibile vietare completamente tutte le alternative a un gruppo obbligatorio.
int 1 - la regola è stata controllata e registrata. Un tipo/nome non valido/gruppo richiesto vuoto/incoerenza provoca un errore di script, che può essere rilevato da try/CATCH; resta la regola precedente. Non restituisce serial né trova caratteri e non avvia un attacco.
- Il nome è un'etichetta personalizzata, non una professione di server. Puoi chiamare la regola DTMH, my_group o qualsiasi altra parola. Il motore non determina le abilità/classi sul server in base al nome del personaggio.
- Se richiesto, un type o un array piatto significa almeno una cosa dall'elenco. Un array di gruppi significa: hai bisogno di almeno una cosa da CIASCUN gruppo. Ad esempio, [cuoio, doghe] richiede pelle E un bastone. Si tratta di un insieme di alternative e non di un obbligo di indossare l'intero guardaroba elencato.
- Qualsiasi oggetto indossato da Proibito esclude il personaggio da questa regola, anche se vengono soddisfatti quelli richiesti. La pelle più una catena vietata non supera la regola della pelle. Altre regole continuano a essere testate.
- Vengono conteggiati solo gli oggetti caricati indossati sugli strati 1..24 ad eccezione dello zaino 21. Il contenuto dello zaino/baule, della montatura 25, del caricatore 26..28 e della sponda 29 non è considerato abbigliamento. Confronta graphic/type; Le cose serial, nome e hue non vengono utilizzate qui.
- L'elenco non corrisponde senza l'attrezzatura adeguata caricata. L'assenza di un articolo proibito nei dati locali non dimostra la sua assenza sul server se il server non ha ancora inviato l'apparecchiatura. Il client non indovina i dati nascosti.
- Le regole appartengono a uno script runtime, comprese le sue funzioni e Include; non vengono trasferiti ad altri lanci indipendenti e non vengono salvati nel profilo. Quando si ricomincia, definirli nuovamente, ad esempio mediante la procedura di configurazione generale. Un SetClassMask ripetuto sostituisce la regola con lo stesso nome, solo dopo che i nuovi dati sono stati completamente verificati.
- Gli array vengono copiati durante la registrazione. La modifica dell'array originale non cambia la regola: ripeti SetClassMask. Le regole di corrispondenza multiple vengono risolte in base all'ordine dei nomi in classMask. Non esistono tabelle standard per l'abbigliamento del server.
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.
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.SetClassMask("simple_sword", 0x0F5E);
UO.Print("SetClassMask: " + Convert.ToString(result));Parametri e flusso di esecuzione:
- DTMH - solo il tuo nome. I valori in myLeather/forbiddenChain sono esempi: sostituisci/integra con il reale graphic del tuo server. Una lista piatta significa OR, non un set completo.
var myLeather = Gear(0x13C4, 0x13C7);
var forbiddenChain = Gear(0x13BF, 0x13C0);
UO.SetClassMask("DTMH", myLeather, forbiddenChain);
var enemy = UO.AttackNearest(5, 10, -1, 8, true, -1, "DTMH", true, true);
if (Truth(enemy != 0))
{
UO.AddObject("leather_enemy", enemy);
}
dynamic Gear(params dynamic[] values)
{
return values;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Parametri e flusso di esecuzione:
- DTMH viene selezionato per primo; solo se non ci sono DTMH - pesanti adatti, allora cacciatore. DTMH sulle celle 10 ha la priorità su quelle pesanti sulle celle 2. Per invertire l'ordine, cambiare la riga classMask. Dei due DTMH viene selezionato quello più vicino.
- Gear è una funzione utente completamente ridotta C#, non un comando separato UO. I due array in Gear(leather, staves) formano due gruppi obbligatori. L'aggiunta di una tipologia alla pelle amplia le alternative; non richiede di indossare due articoli in pelle.
return RunScenario();
object? RunScenario()
{
var leather = Gear(0x13C4, 0x13C7);
var staves = Gear(0x0DF0, 0x0E81);
var chain = Gear(0x13BF, 0x13C0);
var plate = Gear(0x1415, 0x1411);
var bows = Gear(0x13B2, 0x0F50);
UO.SetClassMask("DTMH", Gear(leather, staves), chain);
UO.SetClassMask("охотник", bows);
UO.SetClassMask("тяжёлый", plate);
var notoriety = "5|6";
var distance = 12;
var body = -1;
var maxZ = 8;
dynamic nearest = true;
var color = -1;
var classMask = "DTMH|тяжёлый|охотник";
dynamic aliveOnly = true;
dynamic visibleOnly = true;
var enemy = UO.AttackNearest(notoriety, distance, body, maxZ, nearest, color, classMask, aliveOnly, visibleOnly);
if (Truth(enemy == 0))
{
UO.Print("No matching enemy; no attack sent");
return null;
}
UO.AddObject("selected_enemy", enemy);
return null;
}
dynamic Gear(params dynamic[] values)
{
return values;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Parametri e flusso di esecuzione:
- dichiarando la variabile request[1] si creano due elementi con indici 0 e 1. I due gruppi nidificati richiedono torso E arma; piatto [torsoType,weaponType] significherebbe torso O arma.
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()
{
dynamic[] required = new dynamic[checked((int)(1) + 1)];
dynamic[] torso = new dynamic[checked((int)(0) + 1)];
dynamic[] weapon = new dynamic[checked((int)(0) + 1)];
torso[0] = 0x13C4;
weapon[0] = 0x0DF0;
required[0] = torso;
required[1] = weapon;
UO.SetClassMask("мой_комплект", required);
var enemy = UO.AttackNearest(5, 6, -1, 4, true, -1, "мой_комплект", true, true);
if (Truth(enemy != 0))
{
UO.AddObject("outfit_enemy", enemy);
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}Parametri e flusso di esecuzione:
- La nuova registrazione sostituisce una copia della regola. Il vecchio nome rimane lo stesso, quindi non è necessario riscrivere la riga di priorità.
dynamic[] allowed = new dynamic[checked((int)(0) + 1)];
allowed[0] = 0x13B2;
UO.SetClassMask("приоритетный", allowed);
allowed[0] = 0x0F50;
UO.SetClassMask("приоритетный", allowed);
var enemy = UO.AttackNearest(5, 10, -1, 8, true, -1, "приоритетный", true, true);
if (Truth(enemy != 0))
{
UO.AddObject("updated_outfit", enemy);
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;C# distingue maiuscole e minuscole. Usare il nome UO esatto. Confrontare i flag numerici con 0; usare bool solo se la firma restituisce bool.
Parametri: name (Any), required (Any)
Risultato: int / Integer.
Durante la chiamata:
-
InjectionScript.Runtime.InjectionApiUO.RegisterClassMaskApi [SetClassMask]. -
InjectionScript.Runtime.InjectionApiUO.SetClassMask:SetClassMask(args).
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.
args => new InjectionValue(SetClassMask(args))Parametri: name (Any), required (Any), forbidden (Any)
Risultato: int / Integer.
Durante la chiamata:
-
InjectionScript.Runtime.InjectionApiUO.RegisterClassMaskApi [SetClassMask]. -
InjectionScript.Runtime.InjectionApiUO.SetClassMask:SetClassMask(args).
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.
args => new InjectionValue(SetClassMask(args))Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.SetWarMode(object? value);Richiede la modalità di combattimento o pacifica del personaggio.
-
value- 0 - modalità pacifica; qualsiasi numero intero diverso da zero è la modalità combattimento.
void - nessun valore. Chiama su una linea separata; il completamento non conferma l'azione del server.
- WarMode passa la modalità a GameActions.ToggleWarMode: 0 disabilita, qualsiasi valore diverso da zero abilita. Senza Player non c'è azione.
- Bridge invia la richiesta sullo streaming del gioco. Si applicano le regole del server; Non è prevista l'attesa di conferma.
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.
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.SetWarMode");
UO.SetWarMode(1);Parametri e flusso di esecuzione:
- Richiede la modalità di combattimento o pacifica del personaggio.
UO.SetWarMode(1);Parametri e flusso di esecuzione:
- WarMode passa la modalità a GameActions.ToggleWarMode: 0 disabilita, qualsiasi valore diverso da zero abilita. Senza Player non c'è azione.
return RunScenario();
object? RunScenario()
{
UO.SetWarMode(0);
return null;
}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()
{
ApplyMode(1);
return null;
}
void ApplyMode(dynamic mode)
{
UO.SetWarMode(mode);
}
}C# distingue maiuscole e minuscole. Usare il nome UO esatto. Confrontare i flag numerici con 0; usare bool solo se la firma restituisce bool.
Parametri: value (Any)
Risultato: void / Unit.
Durante la chiamata:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.WarMode:WarMode(Arg(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
Codice interno di implementazione; non è uno script autonomo.
case "setwarmode": WarMode(Arg(0)); return InjectionValue.Unit;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.Specmove(object? direction);
void UO.Specmove(object? direction, object? running);Invia una richiesta di passaggio direttamente al bridge.
-
direction— int; direzione & 7 daët 0..7 N,NE,E,SE,S,SW,W,NW. -
running- Flag numerico opzionale int: 0/none - camminare, diverso da zero - correre.
void - nessun valore. Chiama su una linea separata; il completamento non conferma l'azione del server.
- ExecuteLegacyManualAlias chiama bridge.Step(direzione & 7, esecuzione != 0) e scarta tutto il codice risultato 0/2/3/4/5/7; void ritorna all'esterno. Questo è un passo/giro, non un percorso. Viene mantenuta l'attesa compresa tra Step e 10000 ms, ma lo script non riceve un codice di riconoscimento, errore o timeout.
- Il ramo non soddisfa le condizioni di runtime MoveCheckStamina/MoveExitOnDisconnect/MoveOpenDoor da UO.Step. Bridge/Player.Walk stesso e il server continuano a controllare il movimento.
- QueueStep sullo streaming del gioco controlla il giocatore, la connessione, la direzione, la coda, il tempo e il traffico locale. Prima di Player.Walk, ciascuna chiamata registra separatamente le generazioni Conferma/Nega della sua sequenza e del Walker; quindi restituisce Risultato insieme a questa istantanea. Step e in sospeso StepControlled controlla solo questa coppia memorizzata, non i campi comuni della richiesta successiva; il giocatore/Walker sostitutivo conclude l'attesa con un rifiuto generale. La conferma di un altro comando regolare non conferma questo passaggio. La rotazione senza movimento resta un caso a parte.
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.
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.Specmove");
UO.Specmove(0);Parametri e flusso di esecuzione:
- Invia una richiesta di passaggio direttamente al bridge.
UO.Specmove(0);Parametri e flusso di esecuzione:
- ExecuteLegacyManualAlias chiama bridge.Step(direction&7,running!=0), quindi scarta il 1/0 restituito. Questo è un passo, non un percorso verso una coordinata.
return RunScenario();
object? RunScenario()
{
UO.Specmove(2, 1);
return null;
}Parametri e flusso di esecuzione:
- Il ramo non soddisfa le condizioni di runtime MoveCheckStamina/MoveExitOnDisconnect/MoveOpenDoor da UO.Step. Bridge/Player.Walk stesso e il server continuano a controllare il movimento.
Intervallo minimo di passo: camminare - camminare 400 ms, correre 200 ms; cavalcare - camminare 200 ms, correre 100 ms.
Questi sono limiti client standard, non impostazioni definite automaticamente per il tuo shard. La velocità del server e le modalità di volo vengono conteggiate separatamente. I timer degli script possono rallentare il movimento, ma non riducono questi limiti.
Passi, percorsi, Follow, controlli mouse/tasti e mappa utilizzano la coda condivisa del personaggio. La sostituzione del percorso, la svolta o la regolazione della posizione da parte del server non annulla la pausa rimanente dopo la richiesta del passo. Dopo il ritardo, non vi è alcuna raffica veloce per compensare i fotogrammi persi. L'attesa di conferme, gli ostacoli e la scarsa comunicazione possono rallentare il movimento.
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.GetX();
UO.Specmove(2, 0);
UO.Wait(500);
UO.Print(UO.GetX() - before);
return null;
}
}C# distingue maiuscole e minuscole. Usare il nome UO esatto. Confrontare i flag numerici con 0; usare bool solo se la firma restituisce bool.
Parametri: direction (Any)
Risultato: void / Unit.
Durante la chiamata:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Step:bridge.Step(Arg(0) & 7, arguments.Length > 1 && Arg(1) != 0). -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Arg:Arg(0).
Codice interno di implementazione; non è uno script autonomo.
case "specmove": bridge.Step(Arg(0) & 7, arguments.Length > 1 && Arg(1) != 0); break;Parametri: direction (Any), running (Any)
Risultato: void / Unit.
Durante la chiamata:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Step:bridge.Step(Arg(0) & 7, arguments.Length > 1 && Arg(1) != 0). -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Arg:Arg(0).
Codice interno di implementazione; non è uno script autonomo.
case "specmove": bridge.Step(Arg(0) & 7, arguments.Length > 1 && Arg(1) != 0); break;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.UseAbility(object? abilityId);Richiede l'abilità disponibile per l'arma attuale.
-
abilityId— Nome dell'abilità o int ID 1..AbilityData.Abilities.Length. I nomi sono normalizzati: solo le lettere/numeri vengono memorizzati e confrontati in maiuscolo. Il testo numerico significa ID.
Flag numerico int: 1 - ID corrisponde all'abilità primaria/secondaria del giocatore corrente e viene chiamato il corrispondente GameActions; 0 - nessun giocatore, sconosciuto ID/nome o abilità non appartiene all'arma corrente.
- La forma stringa utilizza ResolveAbility; numerico immediatamente ponte.UseAbility. Bridge maschera 0x80 da due abilità attuali e abbina ID, quindi chiama UsePrimaryAbility o UseSecondaryAbility.
- Si tratta dell'accettazione di una richiesta locale, non della conferma di un successo, di una spesa di mana o di un'attivazione da parte del server. I ID disponibili vengono letti GetWeaponAbilities, il nome attivo è GetActiveAbility.
- GameActions attiva/disattiva il bit di selezione dell'abilità 0x80. Un'abilità già selezionata invia ID 0 e la deseleziona; in caso contrario, entrambi i bit di selezione vengono cancellati, viene inviato il ID selezionato, quindi il suo bit viene impostato localmente. Pertanto, richiamarlo nuovamente potrebbe disattivare l'abilità. Una modifica locale non significa un successo o una conferma del server.
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.
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.UseAbility("Armor Ignore");
UO.Print("UseAbility: " + Convert.ToString(result));Parametri e flusso di esecuzione:
- Richiede l'abilità disponibile per l'arma attuale.
UO.Print(UO.UseAbility("Armor Ignore"));Parametri e flusso di esecuzione:
- La forma stringa utilizza ResolveAbility; numerico immediatamente ponte.UseAbility. Bridge maschera 0x80 da due abilità attuali e abbina ID, quindi chiama UsePrimaryAbility o UseSecondaryAbility.
return RunScenario();
object? RunScenario()
{
var abilities = UO.GetWeaponAbilities();
if (Truth(UO.GetArrayLength(abilities) > 0))
{
UO.Print(UO.UseAbility(abilities[0]));
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Parametri e flusso di esecuzione:
- Si tratta dell'accettazione di una richiesta locale, non della conferma di un successo, di una spesa di mana o di un'attivazione da parte del server. I ID disponibili vengono letti GetWeaponAbilities, il nome attivo è GetActiveAbility.
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.GetAbilityID("Armor Ignore");
if (Truth(id > 0))
{
var accepted = UO.UseAbility(id);
UO.Print(accepted);
UO.Print(UO.GetActiveAbility());
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}C# distingue maiuscole e minuscole. Usare il nome UO esatto. Confrontare i flag numerici con 0; usare bool solo se la firma restituisce bool.
Parametri: abilityId (Integer/String)
Risultato: int / Integer.
Durante la chiamata:
-
InjectionScript.Runtime.InjectionApiUO.UseAbility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.UseAbility:bridge.UseAbility(abilityId).
Codice interno di implementazione; non è uno script autonomo.
public int UseAbility(int abilityId) => bridge.UseAbility(abilityId);Parametri: abilityId (Integer/String)
Risultato: int / Integer.
Durante la chiamata:
-
InjectionScript.Runtime.InjectionApiUO.UseAbility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.ResolveAbility:bridge.ResolveAbility(abilityName). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.UseAbility:bridge.UseAbility(abilityId).
Codice interno di implementazione; non è uno script autonomo.
public int UseAbility(string abilityName)
{
int abilityId = bridge.ResolveAbility(abilityName);
return abilityId > 0 ? bridge.UseAbility(abilityId) : 0;
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.UsePrimaryAbility();Evoca l'abilità primaria dell'arma.
Non ci sono parametri.
void - nessun valore. Chiama su una linea separata; il completamento non conferma l'azione del server.
- UsePrimaryAbility trasmette GameActions.UsePrimaryAbility(_world) tramite Invoke. Non viene restituito alcun segno di accettazione; l'abilità attiva viene controllata separatamente.
- Negli esempi, UO.Wait specifica solo una pausa nello script; la fine della pausa non dimostra che il server abbia completato la richiesta.
- GameActions attiva/disattiva il bit di selezione dell'abilità 0x80. Un'abilità già selezionata invia ID 0 e la deseleziona; in caso contrario, entrambi i bit di selezione vengono cancellati, viene inviato il ID selezionato, quindi il suo bit viene impostato localmente. Pertanto, richiamarlo nuovamente potrebbe disattivare l'abilità. Una modifica locale non significa un successo o una conferma del server.
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.
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.UsePrimaryAbility");
UO.UsePrimaryAbility();Parametri e flusso di esecuzione:
- Evoca l'abilità primaria dell'arma.
UO.UsePrimaryAbility();Parametri e flusso di esecuzione:
- UsePrimaryAbility trasmette GameActions.UsePrimaryAbility(_world) tramite Invoke. Non viene restituito alcun segno di accettazione; l'abilità attiva viene controllata separatamente.
return RunScenario();
object? RunScenario()
{
UO.Print(UO.GetWeaponAbilities());
UO.UsePrimaryAbility();
return null;
}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.UsePrimaryAbility();
UO.Print(UO.GetActiveAbility());
return null;
}
}C# distingue maiuscole e minuscole. Usare il nome UO esatto. Confrontare i flag numerici con 0; usare bool solo se la firma restituisce bool.
Parametri: Nessun parametro.
Risultato: void / Unit.
Durante la chiamata:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.UsePrimaryAbility:bridge.UsePrimaryAbility().
Codice interno di implementazione; non è uno script autonomo.
case "useprimaryability": bridge.UsePrimaryAbility(); return InjectionValue.Unit;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.UseSecondaryAbility();Evoca un'abilità aggiuntiva dell'arma.
Non ci sono parametri.
void - nessun valore. Chiama su una linea separata; il completamento non conferma l'azione del server.
- UseSecondaryAbility trasmette GameActions.UseSecondaryAbility(_world) tramite Invoke. Non viene restituito alcun segno di accettazione; l'abilità attiva viene controllata separatamente.
- Negli esempi, UO.Wait specifica solo una pausa nello script; la fine della pausa non dimostra che il server abbia completato la richiesta.
- GameActions attiva/disattiva il bit di selezione dell'abilità 0x80. Un'abilità già selezionata invia ID 0 e la deseleziona; in caso contrario, entrambi i bit di selezione vengono cancellati, viene inviato il ID selezionato, quindi il suo bit viene impostato localmente. Pertanto, richiamarlo nuovamente potrebbe disattivare l'abilità. Una modifica locale non significa un successo o una conferma del server.
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.
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.UseSecondaryAbility");
UO.UseSecondaryAbility();Parametri e flusso di esecuzione:
- Evoca un'abilità aggiuntiva dell'arma.
UO.UseSecondaryAbility();Parametri e flusso di esecuzione:
- UseSecondaryAbility trasmette GameActions.UseSecondaryAbility(_world) tramite Invoke. Non viene restituito alcun segno di accettazione; l'abilità attiva viene controllata separatamente.
return RunScenario();
object? RunScenario()
{
UO.Print(UO.GetWeaponAbilities());
UO.UseSecondaryAbility();
return null;
}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.UseSecondaryAbility();
UO.Print(UO.GetActiveAbility());
return null;
}
}C# distingue maiuscole e minuscole. Usare il nome UO esatto. Confrontare i flag numerici con 0; usare bool solo se la firma restituisce bool.
Parametri: Nessun parametro.
Risultato: void / Unit.
Durante la chiamata:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.UseSecondaryAbility:bridge.UseSecondaryAbility().
Codice interno di implementazione; non è uno script autonomo.
case "usesecondaryability": bridge.UseSecondaryAbility(); return InjectionValue.Unit;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.WarMode();
void UO.WarMode(object? mode);Legge o interroga la modalità di combattimento del personaggio.
-
mode- Opzionale int: 0 disabilita, qualsiasi valore diverso da zero abilita. Il modulo senza argomenti legge solo.
Nessun argomento Flag numerico int: 1 - giocatore attuale in modalità combattimento, 0 - modalità pacifica/nessun giocatore. Con la modalità - null non vi è alcun risultato.
- WarMode() legge Player.InWarMode localmente. WarMode(mode) richiama GameActions.ToggleWarMode con la modalità selezionata; senza Player la richiesta non viene eseguita.
- Non assegnare il risultato di un modulo con un argomento a una variabile. La rilettura immediata non costituisce una conferma online.
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.
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.WarMode();
UO.Print("WarMode: " + Convert.ToString(result));Parametri e flusso di esecuzione:
- Legge o interroga la modalità di combattimento del personaggio.
var active = UO.WarMode();
UO.Print(active);Parametri e flusso di esecuzione:
- WarMode() legge Player.InWarMode localmente. WarMode(mode) richiama GameActions.ToggleWarMode con la modalità selezionata; senza Player la richiesta non viene eseguita.
return RunScenario();
object? RunScenario()
{
UO.WarMode(1);
UO.Wait(250);
UO.Print(UO.WarMode());
return null;
}Parametri e flusso di esecuzione:
- Non assegnare il risultato di un modulo con un argomento a una variabile. La rilettura immediata non costituisce una conferma online.
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.WarMode();
UO.WarMode(0);
UO.Print(before);
return null;
}
}C# distingue maiuscole e minuscole. Usare il nome UO esatto. Confrontare i flag numerici con 0; usare bool solo se la firma restituisce bool.
Parametri: Nessun parametro.
Risultato: int / Integer.
Durante la chiamata:
-
InjectionScript.Runtime.InjectionApiUO.WarMode. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.WarMode:bridge.WarMode().
Codice interno di implementazione; non è uno script autonomo.
public int WarMode() => bridge.WarMode();Parametri: mode (Integer)
Risultato: void / Unit.
Durante la chiamata:
-
InjectionScript.Runtime.InjectionApiUO.WarMode. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.WarMode:bridge.WarMode(mode).
Codice interno di implementazione; non è uno script autonomo.
public void WarMode(int mode) => bridge.WarMode(mode);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.WarTargetID();Legge serial dell'ultimo bersaglio dell'attacco.
Non ci sono parametri.
int — salvato serial; 0 significa che serial non è installato. Non è bool e non graphic/type; un ID diverso da zero potrebbe non esistere più nel mondo.
- Sorgente campo: bridge.LastAttack. Il comando non seleziona, utilizza o attacca l'oggetto.
- Legge lo stato locale attuale. Non esiste alcun pacchetto, destinazione o aggiornamento automatico; le singole letture possono vedere stati diversi.
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.
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.WarTargetID();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Parametri e flusso di esecuzione:
- Legge serial dell'ultimo bersaglio dell'attacco.
var id = UO.WarTargetID();
UO.Print(Hex(id));
string Hex(object? value) => Convert.ToInt64(value).ToString("X");Parametri e flusso di esecuzione:
- Sorgente campo: bridge.LastAttack. Il comando non seleziona, utilizza o attacca l'oggetto.
return RunScenario();
object? RunScenario()
{
var id = UO.WarTargetID();
if (Truth(id != 0) && Truth(UO.Exists(id)))
{
UO.Print(UO.GetName(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;Parametri e flusso di esecuzione:
- Legge lo stato locale attuale. Non esiste alcun pacchetto, destinazione o aggiornamento automatico; le singole letture possono vedere stati diversi.
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.WarTargetID();
UO.Wait(500);
var after = UO.WarTargetID();
UO.Print(before = after);
return null;
}
}C# distingue maiuscole e minuscole. Usare il nome UO esatto. Confrontare i flag numerici con 0; usare bool solo se la firma restituisce bool.
Parametri: Nessun parametro.
Risultato: dynamic / Any.
Durante la chiamata:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.LastAttack:bridge.LastAttack.
Codice interno di implementazione; non è uno script autonomo.
case "lastattack":
case "wartargetid": return new InjectionValue(bridge.LastAttack);ClassicUO — Bad Newbie & C# Scripts IDE