IT UO Topic shops vendors - LIHACHTETAN/ClassicUO-Bad-Newbie-CSharp-Scripts-IDE GitHub Wiki
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
Home · C# · IDE · UO API · A–Z · Esempi · Lingue
Acquisto, vendita, elenchi di negozi, ritardi e prezzi commerciali personali. AllPrice e MassPriceMove utilizzano type dell'elemento dove specificato nelle loro opzioni.
Apri catalogo completo ed esempi
| Argomento | Comandi e spiegazioni |
|---|---|
| Buy | UO.Buy |
| Sell | UO.Sell |
| AutoBuy | UO.AutoBuy |
| AutoSell | UO.AutoSell |
| Shop List | UO.GetShopList · UO.ClearShopList · UO.Shop |
| Prices | UO.GetPrice · UO.AllPrice · UO.MassPriceMove |
| VendorMenu | UO.VendorMenu |
| SendShopReply | UO.SendShopReply |
UO.Buy · UO.Sell · UO.AutoBuy · UO.AutoBuyEx · UO.AutoSell · UO.Shop · UO.GetShopList · UO.ClearShopList · UO.VendorMenu · UO.SendShopReply
UO.GetPrice · UO.AllPrice · UO.MassPriceMove
UO.GetAutoBuyDelay · UO.GetAutoSellDelay · UO.SetAutoBuyDelay · UO.SetAutoSellDelay
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
UO.AllPrice(125);
UO.Print("Drop goods into your vendor inventory");Parametri, risultato e tutti gli scenari
UO.MassPriceMove(350, 50, 0, 125);
UO.Print("Drag one complete stack into your vendor bag");Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.AllPrice();
void UO.AllPrice(object? price);
void UO.AllPrice(object? price, object? @type);Abilita l'immissione automatica del prezzo dopo aver inserito un articolo nell'inventario del tuo fornitore. La squadra non trasporta oggetti da sola. Innanzitutto attiva la modalità, quindi trascina l'elemento. Il prezzo viene inviato solo dopo una corrispondente richiesta del server. Il secondo parametro filtra il TYPE dell'articolo.
-
price— Il primo parametro è il prezzo intero per l'intero articolo/stack esposto, da 0 a 2147483647. 125 significa prezzo 125. 0 - prezzo chiaramente zero (gratuito se consentito dal server), nessun arresto. Un valore negativo disattiva la modalità; Si consiglia UO.AllPrice() senza argomenti. -
type— Il secondo parametro opzionale è TYPE/Grafico da 0 a 65535, un numero o una stringa esadecimale, ad esempio 0x0EED. 0 o assenza - qualsiasi tipo. Il numero di serie dell'articolo e il nome dell'oggetto non sono appropriati. Il colore non viene filtrato.
void: nessun valore. Attiva AllPrice segnala l'attivazione. La riga di prezzo inviata indica che la risposta è stata inviata, non l'accettazione del prezzo confermato dal server.
- La modalità si applica ai trasferimenti successivi finché non viene disattivata. Una richiesta di prezzo già in sospeso prima dell'inclusione/trasferimento non viene soddisfatta automaticamente. Non risponde alle richieste di ridenominazione del fornitore/negozio.
- Richiede che il contenitore appartenga ad un altro carattere/NPC noto al client. Il diritto di gestire il venditore e l'accettabilità del prezzo vengono controllati dal server. Lo zaino normale del personaggio, il baule a terra e il terreno non ricevono un prezzo automatico.
- Per un venditore standard, la richiesta di prezzo cliloc 1043303 viene riconosciuta indipendentemente dalla lingua del cliente. Sono supportati anche i messaggi di testo del sistema che iniziano con Digita un prezzo, Inserisci un prezzo, Inserisci il prezzo, Inserisci un prezzo o Inserisci un prezzo. Viene lasciato un invito sconosciuto per la risposta manuale.
- Sono supportate le query del server ASCII e Unicode. Se l'invito non arriva entro 10 secondi, la risposta ritardata viene annullata. Durante un trasferimento collettivo anche la coda si ferma. Le risposte già inviate non verranno ritirate.
- L'altro articolo TYPE non riceve un prezzo. Se MassMove è abilitato, l'invio successivo attende l'elaborazione della richiesta di prezzo; una richiesta sconosciuta o inappropriata interrompe la coda per evitare di confondere gli elementi.
- AllPrice() cancella i prezzi in sospeso e disattiva la modalità. TerminateAll(), abbandonare, morire o cambiare carta ripristinano anche il prezzo automatico. Questo comando non modifica i prezzi dei prodotti già elencati.
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.AllPrice");
UO.AllPrice();Parametri e flusso di esecuzione:
- price=125 — il prezzo intero di ciascun articolo. type assente: sono adatti tutti i tipi.
- Dopo il lancio, aggiungi manualmente l'articolo all'inventario del tuo fornitore. Il cliente risponderà a una richiesta di prezzo con 125. Ogni articolo successivo riceve lo stesso prezzo finché non viene spento.
- Print assomiglia solo all'azione; Questa procedura in sé non trasferisce nulla.
UO.AllPrice(125);
UO.Print("Drop goods into your vendor inventory");Parametri e flusso di esecuzione:
- salePrice viene trasmesso come prezzo=250. itemType viene trasmesso come type=0x0F7A, non serial di un prodotto separato.
- Il prezzo 250 si riferisce all'intero stack visualizzato. Il comando non moltiplica il prezzo per il numero di unità al suo interno.
- Altri tipi rimangono senza risposta automatica. Per questi, inserisci il prezzo manualmente o includi AllPrice con un filtro diverso.
return RunScenario();
object? RunScenario()
{
var itemType = "0x0F7A";
var salePrice = 250;
UO.AllPrice(salePrice, itemType);
return null;
}Parametri e flusso di esecuzione:
- price=0 — invia la stringa 0 al server come prezzo. Questo non significa cancellare il dialogo o spegnersi.
- type=0x0F7A limita il prezzo gratuito a questo tipo. Il comportamento della vendita gratuita dipende dalle regole del server.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
UO.AllPrice(0, "0x0F7A");
return null;
}
}Parametri e flusso di esecuzione:
- Nessun argomento: la modalità è disattivata e le risposte in sospeso vengono eliminate.
- Il prezzo già impostato dal server non cambia. L'utente compila personalmente la successiva richiesta di prezzo.
Shop liste / Liste di acquisto e vendita
UO.AllPrice();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.ExecuteLegacyManualAlias. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.AllPrice:bridge.AllPrice(arguments.Length > 0 ? NumberConversions.ToInt(arguments[0]) : -1, arguments.Length > 1 ? ResolveType(arguments[1]) : 0). -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(arguments[0]). -
InjectionScript.Runtime.InjectionApiUO.ResolveType:ResolveType(arguments[1]).
Codice interno di implementazione; non è uno script autonomo.
case "allprice":
bridge.AllPrice(arguments.Length > 0 ? NumberConversions.ToInt(arguments[0]) : -1,
arguments.Length > 1 ? ResolveType(arguments[1]) : 0);
break;Parametri: price (Any)
Risultato: void / Unit.
Durante la chiamata:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.AllPrice:bridge.AllPrice(arguments.Length > 0 ? NumberConversions.ToInt(arguments[0]) : -1, arguments.Length > 1 ? ResolveType(arguments[1]) : 0). -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(arguments[0]). -
InjectionScript.Runtime.InjectionApiUO.ResolveType:ResolveType(arguments[1]).
Codice interno di implementazione; non è uno script autonomo.
case "allprice":
bridge.AllPrice(arguments.Length > 0 ? NumberConversions.ToInt(arguments[0]) : -1,
arguments.Length > 1 ? ResolveType(arguments[1]) : 0);
break;Parametri: price (Any), type (Any)
Risultato: void / Unit.
Durante la chiamata:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.AllPrice:bridge.AllPrice(arguments.Length > 0 ? NumberConversions.ToInt(arguments[0]) : -1, arguments.Length > 1 ? ResolveType(arguments[1]) : 0). -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(arguments[0]). -
InjectionScript.Runtime.InjectionApiUO.ResolveType:ResolveType(arguments[1]).
Codice interno di implementazione; non è uno script autonomo.
case "allprice":
bridge.AllPrice(arguments.Length > 0 ? NumberConversions.ToInt(arguments[0]) : -1,
arguments.Length > 1 ? ResolveType(arguments[1]) : 0);
break;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.AutoBuy(object? itemType, object? itemColor, object? quantity);Crea, aggiorna o elimina una regola di acquisto automatico nell'elenco predefinito principale dell'attuale profilo Bad Newbie. Il comando configura l'elaborazione futura dell'offerta del venditore NPC; non dice compra/vendi, non apre un negozio e non conferma la transazione. Procedura completa: elenchi dei negozi.
-
itemType- Prodotto grafico 0..65535: ad esempio 0x0F7A - Black Pearl, 0x0F51 - pugnale. Questo non è il serial del venditore/oggetto e non il body del personaggio. Un numero negativo o un numero maggiore di 65535 viene rifiutato. Qui 0xFFFF è uno specifico graphic, non una maschera di tutti i beni. -
itemColor— Tonalità prodotto: numero negativo o 0xFFFF — qualsiasi; 0 - solo articoli non verniciati. Per un hue preciso utilizzare 0..65534. Non utilizzare colori al di fuori di questo intervallo: un valore positivo viene convertito in ushort. Necessario. -
quantity— Il numero di UNITÀ di merce per offerta di negozio ricevuta, non il numero di pile e non il saldo desiderato nello zaino. Il positivo è limitato a 65535. 0/negative rimuove la regola di corrispondenza type+color da Default; non è “l’intera quantità”. Necessario.
void - nessun valore. Chiamata su una linea separata, senza risultato var = e senza se. La fine della chiamata significa la fine della configurazione, non una transazione riuscita. Se non è presente alcun profilo o non è valido graphic la regola non viene creata; Non esiste un risultato numerico dell'errore. Controlla la transazione effettiva in base al contenuto dello zaino, dell'oro e della risposta del server.
- Tutti gli argomenti 3 sono obbligatori. Questa è un'impostazione di regole, non una funzione di attesa.
- La chiave della regola è graphic e la maschera hue in Default. La chiamata ripetuta sostituisce la quantità e gli altri campi di questa regola; non aggiunge un altro limite al precedente. Senza prezzo/nome, le precedenti restrizioni su questi campi vengono rimosse.
- Regola nuova/aggiornata Abilitata=true. Il cambio generale di acquisto/vendita viene impostato in base alla presenza di regole e il profilo viene salvato. La stessa lista Default disabilitata non viene abilitata automaticamente: sia la modalità generale che la lista devono essere abilitate nelle impostazioni. Gli altri elenchi nominati non vengono modificati.
- La lavorazione inizia quando arriva una lista di merci. Il limite viene speso in totale tra le righe corrispondenti a una regola. Per ciascuna posizione viene utilizzata la prima regola corrispondente abilitata. La riapertura del negozio dà una nuova offerta e un nuovo limite mentre la regola è attiva.
- Funziona al massimo con Bad Newbie; in Classic questa automazione è disabilitata. Non sostituire nei parametri il nome NPC o il nome della lista salvata. AutoBuyEx aggiunge filtri prezzo/nome al momento dell'acquisto; ClearShopList resetta completamente entrambe le automazioni.
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.AutoBuy");
UO.AutoBuy(0x0F7A, -1, 1);Parametri e flusso di esecuzione:
- 0x0F7A - Reagente graphic, non ID NPC. Quantità - 1; colore: qualsiasi. Non è specificato alcun tetto massimo di prezzo in questo modulo. Lo script in sé non dice nulla e non apre il negozio. La regola continua ad applicarsi per le frasi successive finché non la modifichi/disattivi.
UO.AutoBuy(0x0F7A, -1, 1);Parametri e flusso di esecuzione:
- 20 - al massimo una risposta del negozio, e non “portare la quantità a 20”. AutoBuy non ha argomenti di prezzo e nome. Se sono necessari, utilizzare AutoBuyEx; il suo esempio completo è disponibile al link sottostante. La mancanza di beni, denaro e regole del server determinano il risultato.
return RunScenario();
object? RunScenario()
{
UO.AutoBuy(0x0F7A, 0, 20);
return null;
}Parametri e flusso di esecuzione:
- L'assistente accetta graphic. Vengono cancellate solo le regole predefinite con AnyHue; le singole regole hue=0 vengono mantenute. Ciò non annulla un accordo già inviato al server. Per rimuovere un colore esatto passare lo stesso hue con cui è stata creata la regola.
Shop liste / Liste di acquisto e vendita
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()
{
DisableReagentRule(0x0F7A);
DisableReagentRule(0x0F84);
return null;
}
void DisableReagentRule(dynamic itemType)
{
UO.AutoBuy(itemType, -1, 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: itemType (Any), itemColor (Any), quantity (Any)
Risultato: void / Unit.
Durante la chiamata:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SetAutoBuyRule:bridge.SetAutoBuyRule(Arg(0), Arg(1), Arg(2), 0, string.Empty). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
Codice interno di implementazione; non è uno script autonomo.
case "autobuy":
bridge.SetAutoBuyRule(Arg(0), Arg(1), Arg(2), 0, string.Empty); return InjectionValue.Unit;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.AutoBuyEx(object? itemType, object? itemColor, object? quantity, object? price, object? name);Crea, aggiorna o elimina una regola di acquisto automatico nell'elenco predefinito principale dell'attuale profilo Bad Newbie. Il comando configura l'elaborazione futura dell'offerta del venditore NPC; non dice compra/vendi, non apre un negozio e non conferma la transazione. Procedura completa: elenchi dei negozi.
-
itemType- Prodotto grafico 0..65535: ad esempio 0x0F7A - Black Pearl, 0x0F51 - pugnale. Questo non è il serial del venditore/oggetto e non il body del personaggio. Un numero negativo o un numero maggiore di 65535 viene rifiutato. Qui 0xFFFF è uno specifico graphic, non una maschera di tutti i beni. -
itemColor— Tonalità prodotto: numero negativo o 0xFFFF — qualsiasi; 0 - solo articoli non verniciati. Per un hue preciso utilizzare 0..65534. Non utilizzare colori al di fuori di questo intervallo: un valore positivo viene convertito in ushort. Necessario. -
quantity— Il numero di UNITÀ di merce per offerta di negozio ricevuta, non il numero di pile e non il saldo desiderato nello zaino. Il positivo è limitato a 65535. 0/negative rimuove la regola di corrispondenza type+color da Default; non è “l’intera quantità”. Necessario. -
price— Prezzo massimo di UNA unità, non dell'intera transazione. 0/negativo – nessun tetto massimo di prezzo. Sono ammessi i prodotti più costosi rispetto al limite positivo. Il prezzo non viene scambiato o modificato sul server. Necessario. -
name— Sottostringa del nome PRODOTTO, senza distinzione tra maiuscole e minuscole; gli spazi sul bordo vengono rimossi, linea vuota - nessun filtro. Questo non è il nome del venditore o il nome dell'inserzione. Ad esempio, "Black Pearl" controlla il testo della posizione del negozio se il server ha inviato esattamente questo nome. Necessario.
void - nessun valore. Chiamata su una linea separata, senza risultato var = e senza se. La fine della chiamata significa la fine della configurazione, non una transazione riuscita. Se non è presente alcun profilo o non è valido graphic la regola non viene creata; Non esiste un risultato numerico dell'errore. Controlla la transazione effettiva in base al contenuto dello zaino, dell'oro e della risposta del server.
- Tutti gli argomenti 5 sono obbligatori. Questa è un'impostazione di regole, non una funzione di attesa.
- La chiave della regola è graphic e la maschera hue in Default. La chiamata ripetuta sostituisce la quantità e gli altri campi di questa regola; non aggiunge un altro limite al precedente. Senza prezzo/nome, le precedenti restrizioni su questi campi vengono rimosse.
- Regola nuova/aggiornata Abilitata=true. Il cambio generale di acquisto/vendita viene impostato in base alla presenza di regole e il profilo viene salvato. La stessa lista Default disabilitata non viene abilitata automaticamente: sia la modalità generale che la lista devono essere abilitate nelle impostazioni. Gli altri elenchi nominati non vengono modificati.
- La lavorazione inizia quando arriva una lista di merci. Il limite viene speso in totale tra le righe corrispondenti a una regola. Per ciascuna posizione viene utilizzata la prima regola corrispondente abilitata. La riapertura del negozio dà una nuova offerta e un nuovo limite mentre la regola è attiva.
- Funziona al massimo con Bad Newbie; in Classic questa automazione è disabilitata. Non sostituire nei parametri il nome NPC o il nome della lista salvata. AutoBuyEx aggiunge filtri prezzo/nome al momento dell'acquisto; ClearShopList resetta completamente entrambe le automazioni.
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.AutoBuyEx");
UO.AutoBuyEx(0x0F7A, -1, 1, 5, "");Parametri e flusso di esecuzione:
- 0x0F7A - Reagente graphic, non ID NPC. Quantità - 1; colore: qualsiasi. Prezzo massimo 5 per unità. Lo script in sé non dice nulla e non apre il negozio. La regola continua ad applicarsi per le frasi successive finché non la modifichi/disattivi.
UO.AutoBuyEx(0x0F7A, -1, 1, 5, "");Parametri e flusso di esecuzione:
- 20 - massimo in una risposta del negozio e non "portare la quantità a 20". 5 – prezzo per unità, “Black Pearl” – sottostringa del nome del prodotto. Se il server chiama il reagente in modo diverso, cambiare il filtro o passare "". La mancanza di beni, denaro e regole del server determinano il risultato.
return RunScenario();
object? RunScenario()
{
UO.AutoBuyEx(0x0F7A, 0, 20, 5, "Black Pearl");
return null;
}Parametri e flusso di esecuzione:
- L'assistente accetta graphic. Vengono cancellate solo le regole predefinite con AnyHue; le singole regole hue=0 vengono mantenute. Ciò non annulla un accordo già inviato al server. Per rimuovere un colore esatto passare lo stesso hue con cui è stata creata la regola.
Shop liste / Liste di acquisto e vendita
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()
{
DisableReagentRule(0x0F7A);
DisableReagentRule(0x0F84);
return null;
}
void DisableReagentRule(dynamic itemType)
{
UO.AutoBuyEx(itemType, -1, 0, 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: itemType (Any), itemColor (Any), quantity (Any), price (Any), name (Any)
Risultato: void / Unit.
Durante la chiamata:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SetAutoBuyRule:bridge.SetAutoBuyRule(Arg(0), Arg(1), Arg(2), Arg(3), Text(4)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Text:Text(4).
Codice interno di implementazione; non è uno script autonomo.
case "autobuyex":
bridge.SetAutoBuyRule(Arg(0), Arg(1), Arg(2), Arg(3), Text(4)); return InjectionValue.Unit;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.AutoSell(object? itemType, object? itemColor, object? quantity);Crea, aggiorna o elimina una regola di vendita automatica nell'elenco predefinito principale dell'attuale profilo Bad Newbie. Il comando configura l'elaborazione futura dell'offerta del venditore NPC; non dice compra/vendi, non apre un negozio e non conferma la transazione. Procedura completa: elenchi dei negozi.
-
itemType- Prodotto grafico 0..65535: ad esempio 0x0F7A - Black Pearl, 0x0F51 - pugnale. Questo non è il serial del venditore/oggetto e non il body del personaggio. Un numero negativo o un numero maggiore di 65535 viene rifiutato. Qui 0xFFFF è uno specifico graphic, non una maschera di tutti i beni. -
itemColor— Tonalità prodotto: numero negativo o 0xFFFF — qualsiasi; 0 - solo articoli non verniciati. Per un hue preciso utilizzare 0..65534. Non utilizzare colori al di fuori di questo intervallo: un valore positivo viene convertito in ushort. Necessario. -
quantity— Il numero di UNITÀ di merce per offerta di negozio ricevuta, non il numero di pile e non il saldo desiderato nello zaino. Il positivo è limitato a 65535. 0/negative rimuove la regola di corrispondenza type+color da Default; non è “l’intera quantità”. Necessario.
void - nessun valore. Chiamata su una linea separata, senza risultato var = e senza se. La fine della chiamata significa la fine della configurazione, non una transazione riuscita. Se non è presente alcun profilo o non è valido graphic la regola non viene creata; Non esiste un risultato numerico dell'errore. Controlla la transazione effettiva in base al contenuto dello zaino, dell'oro e della risposta del server.
- Tutti gli argomenti 3 sono obbligatori. Questa è un'impostazione di regole, non una funzione di attesa.
- La chiave della regola è graphic e la maschera hue in Default. La chiamata ripetuta sostituisce la quantità e gli altri campi di questa regola; non aggiunge un altro limite al precedente. Senza prezzo/nome, le precedenti restrizioni su questi campi vengono rimosse.
- Regola nuova/aggiornata Abilitata=true. Il cambio generale di acquisto/vendita viene impostato in base alla presenza di regole e il profilo viene salvato. La stessa lista Default disabilitata non viene abilitata automaticamente: sia la modalità generale che la lista devono essere abilitate nelle impostazioni. Gli altri elenchi nominati non vengono modificati.
- La lavorazione inizia quando arriva una lista di merci. Il limite viene speso in totale tra le righe corrispondenti a una regola. Per ciascuna posizione viene utilizzata la prima regola corrispondente abilitata. La riapertura del negozio dà una nuova offerta e un nuovo limite mentre la regola è attiva.
- Funziona al massimo con Bad Newbie; in Classic questa automazione è disabilitata. Non sostituire nei parametri il nome NPC o il nome della lista salvata. AutoBuyEx aggiunge filtri prezzo/nome al momento dell'acquisto; ClearShopList resetta completamente entrambe le automazioni.
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.AutoSell");
UO.AutoSell(0x0F51, -1, 1);Parametri e flusso di esecuzione:
- 0x0F51 - graphic pugnale, qualsiasi hue, 1 - uno per frase. Il team non seleziona un serial specifico e non verifica l'utilità/valore dell'oggetto. Seleziona l'esatto type/colore del tuo articolo.
UO.AutoSell(0x0F51, -1, 1);Parametri e flusso di esecuzione:
- 0x1F03 è un esempio di una veste standard graphic, 0x0044 è un esempio di hue. Sostituiscili entrambi con il tuo prodotto. 5 — unità, non prezzo; i parametri prezzo minimo e nome Sell/AutoSell non sono accettati. Il server deve includere l'articolo nell'offerta di vendita.
return RunScenario();
object? RunScenario()
{
UO.AutoSell(0x1F03, 0x0044, 5);
return null;
}Parametri e flusso di esecuzione:
- Il nome della procedura è arbitrario; itemType e hue sono i suoi parametri. Vengono mantenute altre regole, acquisti ed elenchi con nomi personalizzati. Se anche un'altra lista abilitata vende questi articoli, disabilita la regola corrispondente in essa tramite le impostazioni.
Shop liste / Liste di acquisto e vendita
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()
{
RemoveSaleRule(0x0F51, -1);
RemoveSaleRule(0x1F03, 0x0044);
return null;
}
void RemoveSaleRule(dynamic itemType, dynamic hue)
{
UO.AutoSell(itemType, hue, 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: itemType (Any), itemColor (Any), quantity (Any)
Risultato: void / Unit.
Durante la chiamata:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SetAutoSellRule:bridge.SetAutoSellRule(Arg(0), Arg(1), Arg(2)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
Codice interno di implementazione; non è uno script autonomo.
case "autosell":
bridge.SetAutoSellRule(Arg(0), Arg(1), Arg(2)); return InjectionValue.Unit;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.Buy(object? @type);
void UO.Buy(object? @type, object? color);
void UO.Buy(object? @type, object? color, object? quantity);
void UO.Buy(object? @type, object? color, object? quantity, object? maxPrice);
void UO.Buy(object? @type, object? color, object? quantity, object? maxPrice, object? name);Crea, aggiorna o elimina una regola di acquisto automatico nell'elenco predefinito principale dell'attuale profilo Bad Newbie. Il comando configura l'elaborazione futura dell'offerta del venditore NPC; non dice compra/vendi, non apre un negozio e non conferma la transazione. Procedura completa: elenchi dei negozi.
-
type- Prodotto grafico 0..65535: ad esempio 0x0F7A - Black Pearl, 0x0F51 - pugnale. Questo non è il serial del venditore/oggetto e non il body del personaggio. Un numero negativo o un numero maggiore di 65535 viene rifiutato. Qui 0xFFFF è uno specifico graphic, non una maschera di tutti i beni. -
color— Tonalità prodotto: numero negativo o 0xFFFF — qualsiasi; 0 - solo articoli non verniciati. Per un hue preciso utilizzare 0..65534. Non utilizzare colori al di fuori di questo intervallo: un valore positivo viene convertito in ushort. L'impostazione predefinita è 1. -
quantity— Il numero di UNITÀ di merce per offerta di negozio ricevuta, non il numero di pile e non il saldo desiderato nello zaino. Il positivo è limitato a 65535. 0/negative rimuove la regola di corrispondenza type+color da Default; non è “l’intera quantità”. L'impostazione predefinita è 1. -
maxPrice— Prezzo massimo di UNA unità, non dell'intera transazione. 0/negativo – nessun tetto massimo di prezzo. Sono ammessi i prodotti più costosi rispetto al limite positivo. Il prezzo non viene scambiato o modificato sul server. L'impostazione predefinita è 0. -
name— Sottostringa del nome PRODOTTO, senza distinzione tra maiuscole e minuscole; gli spazi sul bordo vengono rimossi, linea vuota - nessun filtro. Questo non è il nome del venditore o il nome dell'inserzione. Ad esempio, "Black Pearl" controlla il testo della posizione del negozio se il server ha inviato esattamente questo nome. L'impostazione predefinita è una stringa vuota.
void - nessun valore. Chiamata su una linea separata, senza risultato var = e senza se. La fine della chiamata significa la fine della configurazione, non una transazione riuscita. Se non è presente alcun profilo o non è valido graphic la regola non viene creata; Non esiste un risultato numerico dell'errore. Controlla la transazione effettiva in base al contenuto dello zaino, dell'oro e della risposta del server.
- Buy accetta argomenti da 1 a 5; manca a destra colore=-1, quantità=1, maxPrice=0, nome="".
- La chiave della regola è graphic e la maschera hue in Default. La chiamata ripetuta sostituisce la quantità e gli altri campi di questa regola; non aggiunge un altro limite al precedente. Senza prezzo/nome, le precedenti restrizioni su questi campi vengono rimosse.
- Regola nuova/aggiornata Abilitata=true. Il cambio generale di acquisto/vendita viene impostato in base alla presenza di regole e il profilo viene salvato. La stessa lista Default disabilitata non viene abilitata automaticamente: sia la modalità generale che la lista devono essere abilitate nelle impostazioni. Gli altri elenchi nominati non vengono modificati.
- La lavorazione inizia quando arriva una lista di merci. Il limite viene speso in totale tra le righe corrispondenti a una regola. Per ciascuna posizione viene utilizzata la prima regola corrispondente abilitata. La riapertura del negozio dà una nuova offerta e un nuovo limite mentre la regola è attiva.
- Funziona al massimo con Bad Newbie; in Classic questa automazione è disabilitata. Non sostituire nei parametri il nome NPC o il nome della lista salvata. AutoBuyEx aggiunge filtri prezzo/nome al momento dell'acquisto; ClearShopList resetta completamente entrambe le automazioni.
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.Buy");
UO.Buy(0x0F7A);Parametri e flusso di esecuzione:
- 0x0F7A - Reagente graphic, non ID NPC. Quantità - 1; colore: qualsiasi. Non è specificato alcun tetto massimo di prezzo in questo modulo. Lo script in sé non dice nulla e non apre il negozio. La regola continua ad applicarsi per le frasi successive finché non la modifichi/disattivi.
UO.Buy(0x0F7A);Parametri e flusso di esecuzione:
- 20 - massimo in una risposta del negozio e non "portare la quantità a 20". 5 – prezzo per unità, “Black Pearl” – sottostringa del nome del prodotto. Se il server chiama il reagente in modo diverso, cambiare il filtro o passare "". La mancanza di beni, denaro e regole del server determinano il risultato.
return RunScenario();
object? RunScenario()
{
UO.Buy(0x0F7A, 0, 20, 5, "Black Pearl");
return null;
}Parametri e flusso di esecuzione:
- L'assistente accetta graphic. Vengono cancellate solo le regole predefinite con AnyHue; le singole regole hue=0 vengono mantenute. Ciò non annulla un accordo già inviato al server. Per rimuovere un colore esatto passare lo stesso hue con cui è stata creata la regola.
Shop liste / Liste di acquisto e vendita
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()
{
DisableReagentRule(0x0F7A);
DisableReagentRule(0x0F84);
return null;
}
void DisableReagentRule(dynamic itemType)
{
UO.Buy(itemType, -1, 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: type (Any)
Risultato: void / Unit.
Durante la chiamata:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SetAutoBuyRule:bridge.SetAutoBuyRule(Arg(0), arguments.Length > 1 ? Arg(1) : -1, arguments.Length > 2 ? Arg(2) : 1, arguments.Length > 3 ? Arg(3) : 0, arguments.Length > 4 ? Text(4) : string.Empty). -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Arg:Arg(0). -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Text:Text(4).
Codice interno di implementazione; non è uno script autonomo.
case "buy":
bridge.SetAutoBuyRule(Arg(0), arguments.Length > 1 ? Arg(1) : -1, arguments.Length > 2 ? Arg(2) : 1, arguments.Length > 3 ? Arg(3) : 0, arguments.Length > 4 ? Text(4) : string.Empty);
break;Parametri: type (Any), color (Any)
Risultato: void / Unit.
Durante la chiamata:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SetAutoBuyRule:bridge.SetAutoBuyRule(Arg(0), arguments.Length > 1 ? Arg(1) : -1, arguments.Length > 2 ? Arg(2) : 1, arguments.Length > 3 ? Arg(3) : 0, arguments.Length > 4 ? Text(4) : string.Empty). -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Arg:Arg(0). -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Text:Text(4).
Codice interno di implementazione; non è uno script autonomo.
case "buy":
bridge.SetAutoBuyRule(Arg(0), arguments.Length > 1 ? Arg(1) : -1, arguments.Length > 2 ? Arg(2) : 1, arguments.Length > 3 ? Arg(3) : 0, arguments.Length > 4 ? Text(4) : string.Empty);
break;Parametri: type (Any), color (Any), quantity (Any)
Risultato: void / Unit.
Durante la chiamata:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SetAutoBuyRule:bridge.SetAutoBuyRule(Arg(0), arguments.Length > 1 ? Arg(1) : -1, arguments.Length > 2 ? Arg(2) : 1, arguments.Length > 3 ? Arg(3) : 0, arguments.Length > 4 ? Text(4) : string.Empty). -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Arg:Arg(0). -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Text:Text(4).
Codice interno di implementazione; non è uno script autonomo.
case "buy":
bridge.SetAutoBuyRule(Arg(0), arguments.Length > 1 ? Arg(1) : -1, arguments.Length > 2 ? Arg(2) : 1, arguments.Length > 3 ? Arg(3) : 0, arguments.Length > 4 ? Text(4) : string.Empty);
break;Parametri: type (Any), color (Any), quantity (Any), maxPrice (Any)
Risultato: void / Unit.
Durante la chiamata:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SetAutoBuyRule:bridge.SetAutoBuyRule(Arg(0), arguments.Length > 1 ? Arg(1) : -1, arguments.Length > 2 ? Arg(2) : 1, arguments.Length > 3 ? Arg(3) : 0, arguments.Length > 4 ? Text(4) : string.Empty). -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Arg:Arg(0). -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Text:Text(4).
Codice interno di implementazione; non è uno script autonomo.
case "buy":
bridge.SetAutoBuyRule(Arg(0), arguments.Length > 1 ? Arg(1) : -1, arguments.Length > 2 ? Arg(2) : 1, arguments.Length > 3 ? Arg(3) : 0, arguments.Length > 4 ? Text(4) : string.Empty);
break;Parametri: type (Any), color (Any), quantity (Any), maxPrice (Any), name (Any)
Risultato: void / Unit.
Durante la chiamata:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SetAutoBuyRule:bridge.SetAutoBuyRule(Arg(0), arguments.Length > 1 ? Arg(1) : -1, arguments.Length > 2 ? Arg(2) : 1, arguments.Length > 3 ? Arg(3) : 0, arguments.Length > 4 ? Text(4) : string.Empty). -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Arg:Arg(0). -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Text:Text(4).
Codice interno di implementazione; non è uno script autonomo.
case "buy":
bridge.SetAutoBuyRule(Arg(0), arguments.Length > 1 ? Arg(1) : -1, arguments.Length > 2 ? Arg(2) : 1, arguments.Length > 3 ? Arg(3) : 0, arguments.Length > 4 ? Text(4) : string.Empty);
break;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.ClearShopList();Rimuove le regole per l'acquisto e la vendita automatica del profilo attivo.
Non ci sono parametri.
void: nessun valore restituito.
- Cancella BackNewbieAutoBuyRules e BackNewbieAutoSellRules, disattiva AutoBuy/AutoSell condivisi, aggiorna OptionsGump e salva il profilo. L'elenco del bottino non cambia; l'assenza di un profilo dà un'azione vuota.
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.ClearShopList");
UO.ClearShopList();Parametri e flusso di esecuzione:
- Rimuove le regole per l'acquisto e la vendita automatica del profilo attivo.
UO.ClearShopList();Parametri e flusso di esecuzione:
- Rimuovi la regola per l'acquisto di bende insieme al resto delle regole commerciali.
return RunScenario();
object? RunScenario()
{
UO.AutoBuy(0x0E21, -1, 10);
UO.ClearShopList();
return null;
}Parametri e flusso di esecuzione:
- La cancellazione di un set vuoto è accettabile e non crea una nuova impostazione.
Shop liste / Liste di acquisto e vendita
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.ClearShopList();
UO.ClearShopList();
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.ClearAutoShopRules:bridge.ClearAutoShopRules().
Codice interno di implementazione; non è uno script autonomo.
case "clearshoplist":
bridge.ClearAutoShopRules(); return InjectionValue.Unit;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.GetAutoBuyDelay();Legge l'attuale ritardo di acquisto automatico dal profilo cliente.
Non ci sono parametri.
int: ritardo corrente in millisecondi. I valori scritti dal setter sono limitati a 0…65535. 0 significa nessun ritardo aggiuntivo; questo non è un errore Se non è presente alcun profilo caricato, viene restituito 3. La lettura non restituisce la quantità dell'articolo né conferma la transazione.
- L'impostazione è generale per il profilo corrente: le modifiche in un altro script o UI saranno visibili la prossima volta che lo leggerai. Zero è un'impostazione valida, non un segno di dati mancanti e non un motivo per ripristinare la vecchia cache degli script.
- Il valore predefinito è 3 ms. Dopo aver inviato un'operazione automatica, il gestore imposta l'ora per la successiva operazione consentita. Gli elenchi fornitori arrivati prima non vengono elaborati da questo passaggio; getter non attiva un'attesa e non invia un acquisto/vendita.
- Questo non è un ritardo di MassMove, Drag/Drop o trading manuale. Il nuovo valore viene applicato quando si pianifica il ritardo successivo; il momento già assegnato non viene ricalcolato.
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.GetAutoBuyDelay();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Parametri e flusso di esecuzione:
- Non ci sono argomenti. ritardo: tempo in millisecondi.
- Il valore riflette il profilo al momento della chiamata. La var salvata non verrà aggiornata in seguito.
var delay = UO.GetAutoBuyDelay();
UO.Print("Delay ms: " + Convert.ToString(delay));Parametri e flusso di esecuzione:
- il setter ottiene 70000 ms; il massimo consentito è 65535. Nell'esempio viene modificata l'impostazione del profilo.
- effettivo deve contenere 65535 quando il profilo viene caricato. Getter restituisce il valore vincolato effettivo anziché l'argomento originale 70000.
return RunScenario();
object? RunScenario()
{
UO.SetAutoBuyDelay(70000);
var actual = UO.GetAutoBuyDelay();
UO.Print(Convert.ToString(actual));
return null;
}Parametri e flusso di esecuzione:
- Lo zero viene controllato esplicitamente. Questo esempio non modifica il profilo.
- La latenza zero non significa che l'operazione è stata completata. Per l'esito della transazione, controlla gli oggetti del gioco.
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 current = UO.GetAutoBuyDelay();
if (Truth(current == 0))
{
UO.Print("No additional delay");
}
else
{
UO.Print("Delay: " + Convert.ToString(current) + " ms");
}
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.GetAutoBuyDelay:bridge.GetAutoBuyDelay().
Codice interno di implementazione; non è uno script autonomo.
case "getautobuydelay":
return new InjectionValue(bridge.GetAutoBuyDelay());Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.GetAutoSellDelay();Legge l'attuale ritardo della vendita automatica dal profilo cliente.
Non ci sono parametri.
int: ritardo corrente in millisecondi. I valori scritti dal setter sono limitati a 0…65535. 0 significa nessun ritardo aggiuntivo; questo non è un errore Se non è presente alcun profilo caricato, viene restituito 3. La lettura non restituisce la quantità dell'articolo né conferma la transazione.
- L'impostazione è generale per il profilo corrente: le modifiche in un altro script o UI saranno visibili la prossima volta che lo leggerai. Zero è un'impostazione valida, non un segno di dati mancanti e non un motivo per ripristinare la vecchia cache degli script.
- Il valore predefinito è 3 ms. Dopo aver inviato un'operazione automatica, il gestore imposta l'ora per la successiva operazione consentita. Gli elenchi fornitori arrivati prima non vengono elaborati da questo passaggio; getter non attiva un'attesa e non invia un acquisto/vendita.
- Questo non è un ritardo di MassMove, Drag/Drop o trading manuale. Il nuovo valore viene applicato quando si pianifica il ritardo successivo; il momento già assegnato non viene ricalcolato.
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.GetAutoSellDelay();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Parametri e flusso di esecuzione:
- Non ci sono argomenti. ritardo: tempo in millisecondi.
- Il valore riflette il profilo al momento della chiamata. La var salvata non verrà aggiornata in seguito.
var delay = UO.GetAutoSellDelay();
UO.Print("Delay ms: " + Convert.ToString(delay));Parametri e flusso di esecuzione:
- il setter ottiene 70000 ms; il massimo consentito è 65535. Nell'esempio viene modificata l'impostazione del profilo.
- effettivo deve contenere 65535 quando il profilo viene caricato. Getter restituisce il valore vincolato effettivo anziché l'argomento originale 70000.
return RunScenario();
object? RunScenario()
{
UO.SetAutoSellDelay(70000);
var actual = UO.GetAutoSellDelay();
UO.Print(Convert.ToString(actual));
return null;
}Parametri e flusso di esecuzione:
- Lo zero viene controllato esplicitamente. Questo esempio non modifica il profilo.
- La latenza zero non significa che l'operazione è stata completata. Per l'esito della transazione, controlla gli oggetti del gioco.
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 current = UO.GetAutoSellDelay();
if (Truth(current == 0))
{
UO.Print("No additional delay");
}
else
{
UO.Print("Delay: " + Convert.ToString(current) + " ms");
}
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.GetAutoSellDelay:bridge.GetAutoSellDelay().
Codice interno di implementazione; non è uno script autonomo.
case "getautoselldelay":
return new InjectionValue(bridge.GetAutoSellDelay());Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.GetPrice(object? objID);Legge l'Item.Price noto al client per l'articolo serial.
-
objID— Numero seriale dell'oggetto o nome supportato di self/backpack/lasttarget/oggetto salvato; le stringhe numeriche e le stringhe 0x vengono risolte dal runtime.
int: conversione non controllata di uint Item.Price in int. Un elemento mancante dà 0; i prezzi superiori a 2147483647 vengono visualizzati come int negativi.
- Il team non richiede una proposta al fornitore. Il valore dipende dai dati precedentemente ricevuti dal client. Zero può indicare un prezzo sconosciuto/zero o l'assenza di un articolo; per verificare un oggetto utilizzare Exists.
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.GetPrice(UO.LastTarget());
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Parametri e flusso di esecuzione:
- Il risultato è un Item.Price memorizzato nella cache.
var item = UO.LastTarget();
if (Truth(UO.Exists(item)))
{
var price = UO.GetPrice(item);
UO.Print(Convert.ToString(price));
}
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:
- Un elemento mancante dà 0.
return RunScenario();
object? RunScenario()
{
var price = UO.GetPrice(0);
UO.Print(Convert.ToString(price));
return null;
}Parametri e flusso di esecuzione:
- Solo una nuova chiamata rilegge il modello; la pausa in sé non chiede prezzo.
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 item = UO.LastTarget();
var before = UO.GetPrice(item);
await Delay(500);
var after = UO.GetPrice(item);
UO.Print(Convert.ToString(before) + " " + Convert.ToString(after));
return null;
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
}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: dynamic / Any.
Durante la chiamata:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetPrice:bridge.GetPrice(Arg(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
Codice interno di implementazione; non è uno script autonomo.
case "getprice":
return new InjectionValue(bridge.GetPrice(Arg(0)));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.GetShopList();Legge i prodotti dell'ultima offerta attiva del venditore NPC. Ti consente di controllare il tipo, la quantità e il prezzo prima di acquistare o vendere.
Non ci sono parametri.
Array of string — array di stringhe, indici da 0. Ogni riga: serial|graphic|hue|importo|prezzo|nome. Seriale - ID posizione specifica, graphic - tipo, hue - colore; i primi tre campi sono scritti in formato 0x. Importo: unità disponibili meno la bozza nella finestra, prezzo: prezzo di una unità, nome: nome. Questo non è un elenco serial e nemmeno un elenco bool. Se non è presente alcuna offerta, l'array è vuoto. Il nome può contenere |: i primi cinque delimitatori definiscono i campi, il resto è il nome.
- Innanzitutto, come normale azione di gioco, apri un acquisto o una vendita dal NPC desiderato e attendi che il server offra. Queste squadre stesse non cercano un venditore, non aprono scambi, non stabiliscono un prezzo per un venditore personale e non trasferiscono oggetti tra i forzieri. Non viene passato come parametro il ID del venditore: in caso di più offerte viene utilizzata l'ultima.
- Nel manager l'offerta viene memorizzata nella sessione di gioco. Chiudendo il client grafico si salva la proposta e la bozza, aprendolo si ripristina la finestra. Chiudendo il negozio stesso, rispondendo, chiudendo il server o disconnettendo la connessione si rimuove l'offerta. Autobuy/autosell Bad Newbie può elaborarlo prima dello script.
- La lettura non invia richieste al server. Questa è un'istantanea della fornitura già ricevuta, non una garanzia dello stock attuale di NPC. Il campo quantità riflette le unità, non il numero di righe/pile. ArrayLength(righe) conta le posizioni. I prezzi qui sono GetShopList; SendShopReply non accetta il prezzo.
- L'elenco esplicito sostituisce la bozza e non viene aggiunto ad essa. Ripetendo uno serial si somma la quantità; il totale è limitato dalla quantità totale dell'articolo nell'offerta. Sconosciuto serial, quantità errata o non positiva rifiuta l'intera risposta prima di inviarla, salvando l'offerta. Se non è presente alcuna frase, SendShopReply segnala un errore. La riga "0" non è un comando di annullamento; utilizzo "".
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.GetShopList();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Parametri e flusso di esecuzione:
- GetWord utilizza l'indice di 0: 0 - serial, 1 - graphic, 2 - hue, 3 - quantità, 4 - prezzo. Prima di righe[0] viene controllata la lunghezza dell'array.
var rows = UO.GetShopList();
if (Truth(ArrayLength(rows) == 0))
{
return null;
}
var serial = ReadField(rows[0], 0, "|");
var itemType = ReadField(rows[0], 1, "|");
var amount = Convert.ToInt32(ReadField(rows[0], 3, "|"));
var price = Convert.ToDouble(ReadField(rows[0], 4, "|"));
UO.Print(serial + " / " + itemType + " / " + Convert.ToString(amount) + " / " + Convert.ToString(price));
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;
string ReadField(object? row, int index, string separator) { string[] fields = (Convert.ToString(row) ?? "").Split(new[] { separator }, StringSplitOptions.None); return index >= 0 && index < fields.Length ? fields[index] : ""; }Parametri e flusso di esecuzione:
- Solo per l'offerta ACQUISTA pre-apertura. 0x0E21 — bende, 5 — prezzo unitario massimo, 10 — quantità richiesta. Viene assunta la prima posizione idonea; esatto serial viene letto dalla frase. Il codice non avvia l'acquisto stesso.
return RunScenario();
object? RunScenario()
{
var rows = UO.GetShopList();
for (int i = (int)(0); i <= ArrayLength(rows) - 1; i += (int)(1))
{
var row = rows[i];
if (Truth(ReadField(row, 1, "|") == "0x0E21"))
{
var price = Convert.ToDouble(ReadField(row, 4, "|"));
var amount = Convert.ToInt32(ReadField(row, 3, "|"));
if (Truth(price > 0) && Truth(price <= 5) && Truth(amount > 0))
{
if (Truth(amount > 10))
{
amount = 10;
}
UO.SendShopReply(ReadField(row, 0, "|") + ":" + Convert.ToString(amount));
return null;
}
}
}
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;
string ReadField(object? row, int index, string separator)
{
string[] fields = (Convert.ToString(row) ?? "").Split(new[] { separator }, StringSplitOptions.None);
return index >= 0 && index < fields.Length ? fields[index] : "";
}Parametri e flusso di esecuzione:
- La funzione ausiliaria è riportata per intero: somma il campo importo di tutte le posizioni del tipo specificato. Se la clausola è vuota, restituisce 0; questo è il numero di unità disponibili, non il numero di animali o oggetti sul personaggio.
Shop liste / Liste di acquisto e vendita
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 available = CountOfferedType("0x0E21");
if (Truth(available < 10))
{
UO.Print("Bandage stock below 10: " + Convert.ToString(available));
}
return null;
}
dynamic CountOfferedType(dynamic itemType)
{
var total = 0;
var rows = UO.GetShopList();
for (int i = (int)(0); i <= ArrayLength(rows) - 1; i += (int)(1))
{
if (Truth(ReadField(rows[i], 1, "|") == itemType))
{
total = total + Convert.ToInt32(ReadField(rows[i], 3, "|"));
}
}
return total;
}
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;
string ReadField(object? row, int index, string separator)
{
string[] fields = (Convert.ToString(row) ?? "").Split(new[] { separator }, StringSplitOptions.None);
return index >= 0 && index < fields.Length ? fields[index] : "";
}
}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.GetShopList. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetShopList:bridge.GetShopList().
Codice interno di implementazione; non è uno script autonomo.
public InjectionValue GetShopList()
=> new InjectionValue((bridge.GetShopList() ?? Array.Empty<string>()).Select(item => new InjectionValue(item)).ToArray());Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.MassPriceMove();
void UO.MassPriceMove(object? delay, object? quantity, object? @type, object? price);
void UO.MassPriceMove(object? delay, object? quantity, object? @type, object? price, object? destination);
void UO.MassPriceMove(object? delay, object? quantity, object? @type, object? price, object? destination, object? x, object? y, object? z);Abilita il trasferimento di massa di articoli di un TYPE con prezzi automatici nell'inventario del tuo fornitore. La fonte è determinata dal primo trasferimento manuale. Ciascuna pila viene trasferita interamente ed è considerata un elemento; dopo la sua richiesta di prezzo, il cliente risponde e solo dopo continua la coda.
-
delay— Il primo parametro è il ritardo tra le richieste di trasferimento in millisecondi, un numero intero da 0 a 2147483647. 350 significa 0,35 secondi. Con 0 non viene inviato più di un carry successivo per frame di gioco. Nessun ritardo viene aggiunto a GrabDelay. Un valore negativo disabilita la modalità e cancella la coda; per lo spegnimento è preferibile una chiara notazione UO.MassPriceMove(). -
quantity- Il secondo parametro è il limite TOTALE dei singoli articoli (articoli), compreso il primo trasferimento manuale. Una pila/pila è considerata un articolo, indipendentemente dalla quantità contenuta. 50 significa fino a 50 pile intere o 50 singoli elementi. Lo stack NON viene diviso a questo limite. 0 - tutti gli articoli adatti. Non sono ammessi valori negativi. -
type- Il terzo parametro è il codice del tipo di oggetto (Grafico/Tipo), il numero intero 0..65535, ad esempio 0x0EED o la stringa "0x0EED" per l'oro. Questo NON è serial/ID e NON il nome AddObject. 0 determina il tipo mediante il primo trasferimento manuale. Con un tipo esplicito, il trascinamento di un altro tipo non attiva la coda; La modalità continua ad attendere un elemento adatto. -
price— Il quarto parametro richiesto è il prezzo intero 0..2147483647 per ogni articolo/pila completo visualizzato. 0 significa libero, senza spegnimento. Il prezzo negativo viene rifiutato. -
destination- Il quinto parametro opzionale è serial o il nome salvato del contenitore nell'inventario del tuo fornitore. Se assente viene prelevato dal reset manuale. Uno zaino normale, una cassa a terra e destinazione=0 qui vengono deviati: è impossibile stabilire un prezzo a terra. -
x- Sesto parametro - X all'interno del contenitore del venditore: -1 o 65535 per il posizionamento automatico, altrimenti 0..65535. Indicato solo insieme a Y e Z. -
y- Settimo parametro - Y all'interno del contenitore del venditore: -1/65535 per il posizionamento automatico, altrimenti 0..65535. Indicato solo insieme a X e Z. -
z— L'ottavo parametro è l'altezza -128..127, all'interno del contenitore solitamente 0. Senza X/Y/Z espliciti, con una determinata destinazione, vengono utilizzati -1,-1,0; Quando si assegna manualmente, viene presa la posizione di ripristino.
void: nessun valore. Attiva MassPriceMove abilita l'attesa manuale del campione. I messaggi di trasferimento e di prezzo indicano le richieste inviate e non una garanzia di accettazione da parte del server.
- Forme con argomenti 0, 4, 5 o 8. Ordine esatto: ritardo, quantità, type, prezzo, destinazione, x, y, z. Le triple di coordinate parziali non sono supportate.
- Innanzitutto, chiama il comando, quindi prendi e trascina l'intero elemento appropriato. Digita 0 lo ricorda TYPE; un tipo esplicito ignora gli avvolgimenti manuali di altri tipi. La fonte è sempre tratta dal primo elemento idoneo.
- La quantità comprende il primo articolo manuale. 50 significa 50 pile piene da 100, non 50 unità dallo stack. 0 - tutti gli oggetti diritti adatti. Il colore non viene filtrato e i contenitori nidificati non vengono espansi.
- Si applicano le regole di riconoscimento della richiesta di prezzo AllPrice, tra cui ASCII/Unicode e 10-second wait. Ritardo pausa - intervallo minimo: un server lento lo aumenta per non confondere i prezzi.
- Non è necessario abilitare la modalità generale AllPrice. Il prezzo di questa operazione ha la precedenza su AllPrice. Non è consigliabile modificare il prezzo AllPrice o trasferire manualmente articoli aggiuntivi durante la coda: una risposta sconosciuta o un guasto del server interrompono la coda.
- MassPriceMove() disattiva la coda di trasferimento corrente e annulla la risposta del prezzo in sospeso; viene mantenuta la AllPrice generale, se abilitata separatamente. TerminateAll() disattiva entrambe le modalità. Questa è una coda in comune con MassMove: la nuova attivazione sostituisce quella vecchia.
- Se la richiesta di prezzo non viene riconosciuta, il comando lascia la finestra di dialogo per l'inserimento manuale e interrompe ulteriori trasferimenti. Anche il guasto del server, la morte, la modifica della mappa e l'oggetto/contenitore non disponibile smettono di funzionare.
- Richiamare correttamente lo stesso comando ripetutamente, mentre la modalità è ancora in attesa del primo trascinamento del mouse, disattiva l'attesa: Disattiva MassMove/MassPriceMove appare direttamente nella finestra di gioco. La chiamata successiva riattiva la modalità. Dopo il primo trasferimento, utilizza il modulo senza argomenti per interrompere la coda rimanente. Le richieste già inviate non vengono annullate.
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.MassPriceMove");
UO.MassPriceMove();Parametri e flusso di esecuzione:
- ritardo=350 ms; quantità=50 dei singoli articoli, compreso il primo manuale; type=0 ricorda TYPE campione; prezzo=125 per ogni articolo intero.
- mancano destinazione e coordinate: trascina il campione direttamente nell'inventario del tuo venditore.
- Se gli stack originali sono 100, verrà trasferito un massimo di 50 stack completi. Ognuno riceve un prezzo 125 dopo la richiesta del server.
UO.MassPriceMove(350, 50, 0, 125);
UO.Print("Drag one complete stack into your vendor bag");Parametri e flusso di esecuzione:
- AddObject ti chiede di selezionare una borsa del venditore e la salva come borsa_venditore. Questa è la destinazione ID; type rimane il codice 0x0F7A.
- ritardo=500, quantità=0 senza limiti, type=0x0F7A, prezzo=250, destinazione=vendor_bag.
- X/Y/Z mancanti: -1,-1,0. Per avviare una coda, trascina manualmente un elemento del tipo appropriato; da esso si determina la borsa originaria.
return RunScenario();
object? RunScenario()
{
UO.AddObject("vendor_bag");
UO.MassPriceMove(500, 0, "0x0F7A", 250, "vendor_bag");
UO.Print("Now drag one matching item from the source");
return null;
}3. Specificare tutti gli otto parametri e la posizione all'interno della borsa: classe dello scenario
Parametri e flusso di esecuzione:
- ritardo=350 ms; quantità=10 articoli completi; type=itemType=0x0EED; prezzo=1000 per ogni stack completo.
- destinazione=vendorBag è il vero ID delle borse del tuo venditore, sostituisci l'esempio. Questo è il quinto parametro, non il quarto.
- x=60, y=70 è il posto all'interno di questa borsa, z=0. Queste non sono le coordinate del personaggio sulla mappa.
- Una volta richiamato, trascina e rilascia manualmente il campione appropriato dalla sorgente. Se il server rifiuta il posizionamento, ulteriori richieste vengono interrotte.
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 itemType = "0x0EED";
var vendorBag = "0x40005678";
UO.MassPriceMove(350, 10, itemType, 1000, vendorBag, 60, 70, 0);
return null;
}
}Parametri e flusso di esecuzione:
- Senza argomenti, il comando disattiva la coda generale dei trasferimenti di massa e cancella la risposta sul prezzo in sospeso.
- I prezzi e i trasferimenti già accettati dal server non vengono ripristinati. Per interrompere altre procedure e abilitate separatamente AllPrice, utilizzare UO.TerminateAll().
Shop liste / Liste di acquisto e vendita
UO.MassPriceMove();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.ExecuteLegacyManualAlias. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.MassPriceMove:bridge.MassPriceMove(-1, 0, 0, 0, -1, -1, -1, 0). -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(arguments[0]). -
InjectionScript.Runtime.InjectionApiUO.ResolveType:ResolveType(arguments[2]). -
InjectionScript.Runtime.InjectionApiUO.ResolveTransferDestination:ResolveTransferDestination(arguments[4], true).
Codice interno di implementazione; non è uno script autonomo.
case "masspricemove":
if (arguments.Length == 0) bridge.MassPriceMove(-1, 0, 0, 0, -1, -1, -1, 0);
else bridge.MassPriceMove(NumberConversions.ToInt(arguments[0]),
NumberConversions.ToInt(arguments[1]), ResolveType(arguments[2]),
NumberConversions.ToInt(arguments[3]),
arguments.Length > 4 ? ResolveTransferDestination(arguments[4], true) : -1,
arguments.Length > 5 ? NumberConversions.ToInt(arguments[5]) : -1,
arguments.Length > 6 ? NumberConversions.ToInt(arguments[6]) : -1,
arguments.Length > 7 ? NumberConversions.ToInt(arguments[7]) : 0);
break;Parametri: delay (Any), quantity (Any), type (Any), price (Any)
Risultato: void / Unit.
Durante la chiamata:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.MassPriceMove:bridge.MassPriceMove(-1, 0, 0, 0, -1, -1, -1, 0). -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(arguments[0]). -
InjectionScript.Runtime.InjectionApiUO.ResolveType:ResolveType(arguments[2]). -
InjectionScript.Runtime.InjectionApiUO.ResolveTransferDestination:ResolveTransferDestination(arguments[4], true).
Codice interno di implementazione; non è uno script autonomo.
case "masspricemove":
if (arguments.Length == 0) bridge.MassPriceMove(-1, 0, 0, 0, -1, -1, -1, 0);
else bridge.MassPriceMove(NumberConversions.ToInt(arguments[0]),
NumberConversions.ToInt(arguments[1]), ResolveType(arguments[2]),
NumberConversions.ToInt(arguments[3]),
arguments.Length > 4 ? ResolveTransferDestination(arguments[4], true) : -1,
arguments.Length > 5 ? NumberConversions.ToInt(arguments[5]) : -1,
arguments.Length > 6 ? NumberConversions.ToInt(arguments[6]) : -1,
arguments.Length > 7 ? NumberConversions.ToInt(arguments[7]) : 0);
break;Parametri: delay (Any), quantity (Any), type (Any), price (Any), destination (Any)
Risultato: void / Unit.
Durante la chiamata:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.MassPriceMove:bridge.MassPriceMove(-1, 0, 0, 0, -1, -1, -1, 0). -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(arguments[0]). -
InjectionScript.Runtime.InjectionApiUO.ResolveType:ResolveType(arguments[2]). -
InjectionScript.Runtime.InjectionApiUO.ResolveTransferDestination:ResolveTransferDestination(arguments[4], true).
Codice interno di implementazione; non è uno script autonomo.
case "masspricemove":
if (arguments.Length == 0) bridge.MassPriceMove(-1, 0, 0, 0, -1, -1, -1, 0);
else bridge.MassPriceMove(NumberConversions.ToInt(arguments[0]),
NumberConversions.ToInt(arguments[1]), ResolveType(arguments[2]),
NumberConversions.ToInt(arguments[3]),
arguments.Length > 4 ? ResolveTransferDestination(arguments[4], true) : -1,
arguments.Length > 5 ? NumberConversions.ToInt(arguments[5]) : -1,
arguments.Length > 6 ? NumberConversions.ToInt(arguments[6]) : -1,
arguments.Length > 7 ? NumberConversions.ToInt(arguments[7]) : 0);
break;
UO.MassPriceMove(delay, quantity, type, price, destination, x, y, z) — UO.MassPriceMove(Any,Any,Any,Any,Any,Any,Any,Any)
Parametri: delay (Any), quantity (Any), type (Any), price (Any), destination (Any), x (Any), y (Any), z (Any)
Risultato: void / Unit.
Durante la chiamata:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.MassPriceMove:bridge.MassPriceMove(-1, 0, 0, 0, -1, -1, -1, 0). -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(arguments[0]). -
InjectionScript.Runtime.InjectionApiUO.ResolveType:ResolveType(arguments[2]). -
InjectionScript.Runtime.InjectionApiUO.ResolveTransferDestination:ResolveTransferDestination(arguments[4], true).
Codice interno di implementazione; non è uno script autonomo.
case "masspricemove":
if (arguments.Length == 0) bridge.MassPriceMove(-1, 0, 0, 0, -1, -1, -1, 0);
else bridge.MassPriceMove(NumberConversions.ToInt(arguments[0]),
NumberConversions.ToInt(arguments[1]), ResolveType(arguments[2]),
NumberConversions.ToInt(arguments[3]),
arguments.Length > 4 ? ResolveTransferDestination(arguments[4], true) : -1,
arguments.Length > 5 ? NumberConversions.ToInt(arguments[5]) : -1,
arguments.Length > 6 ? NumberConversions.ToInt(arguments[6]) : -1,
arguments.Length > 7 ? NumberConversions.ToInt(arguments[7]) : 0);
break;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.Sell(object? @type);
void UO.Sell(object? @type, object? color);
void UO.Sell(object? @type, object? color, object? quantity);Crea, aggiorna o elimina una regola di vendita automatica nell'elenco predefinito principale dell'attuale profilo Bad Newbie. Il comando configura l'elaborazione futura dell'offerta del venditore NPC; non dice compra/vendi, non apre un negozio e non conferma la transazione. Procedura completa: elenchi dei negozi.
-
type- Prodotto grafico 0..65535: ad esempio 0x0F7A - Black Pearl, 0x0F51 - pugnale. Questo non è il serial del venditore/oggetto e non il body del personaggio. Un numero negativo o un numero maggiore di 65535 viene rifiutato. Qui 0xFFFF è uno specifico graphic, non una maschera di tutti i beni. -
color— Tonalità prodotto: numero negativo o 0xFFFF — qualsiasi; 0 - solo articoli non verniciati. Per un hue preciso utilizzare 0..65534. Non utilizzare colori al di fuori di questo intervallo: un valore positivo viene convertito in ushort. L'impostazione predefinita è 1. -
quantity— Il numero di UNITÀ di merce per offerta di negozio ricevuta, non il numero di pile e non il saldo desiderato nello zaino. Il positivo è limitato a 65535. 0/negative rimuove la regola di corrispondenza type+color da Default; non è “l’intera quantità”. L'impostazione predefinita è 1.
void - nessun valore. Chiamata su una linea separata, senza risultato var = e senza se. La fine della chiamata significa la fine della configurazione, non una transazione riuscita. Se non è presente alcun profilo o non è valido graphic la regola non viene creata; Non esiste un risultato numerico dell'errore. Controlla la transazione effettiva in base al contenuto dello zaino, dell'oro e della risposta del server.
- Sell accetta argomenti da 1 a 3; manca a destra colore=-1, quantità=1.
- La chiave della regola è graphic e la maschera hue in Default. La chiamata ripetuta sostituisce la quantità e gli altri campi di questa regola; non aggiunge un altro limite al precedente. Senza prezzo/nome, le precedenti restrizioni su questi campi vengono rimosse.
- Regola nuova/aggiornata Abilitata=true. Il cambio generale di acquisto/vendita viene impostato in base alla presenza di regole e il profilo viene salvato. La stessa lista Default disabilitata non viene abilitata automaticamente: sia la modalità generale che la lista devono essere abilitate nelle impostazioni. Gli altri elenchi nominati non vengono modificati.
- La lavorazione inizia quando arriva una lista di merci. Il limite viene speso in totale tra le righe corrispondenti a una regola. Per ciascuna posizione viene utilizzata la prima regola corrispondente abilitata. La riapertura del negozio dà una nuova offerta e un nuovo limite mentre la regola è attiva.
- Funziona al massimo con Bad Newbie; in Classic questa automazione è disabilitata. Non sostituire nei parametri il nome NPC o il nome della lista salvata. AutoBuyEx aggiunge filtri prezzo/nome al momento dell'acquisto; ClearShopList resetta completamente entrambe le automazioni.
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.Sell");
UO.Sell(0x0F51);Parametri e flusso di esecuzione:
- 0x0F51 - graphic pugnale, qualsiasi hue, 1 - uno per frase. Il team non seleziona un serial specifico e non verifica l'utilità/valore dell'oggetto. Seleziona l'esatto type/colore del tuo articolo.
UO.Sell(0x0F51);Parametri e flusso di esecuzione:
- 0x1F03 è un esempio di una veste standard graphic, 0x0044 è un esempio di hue. Sostituiscili entrambi con il tuo prodotto. 5 — unità, non prezzo; i parametri prezzo minimo e nome Sell/AutoSell non sono accettati. Il server deve includere l'articolo nell'offerta di vendita.
return RunScenario();
object? RunScenario()
{
UO.Sell(0x1F03, 0x0044, 5);
return null;
}Parametri e flusso di esecuzione:
- Il nome della procedura è arbitrario; itemType e hue sono i suoi parametri. Vengono mantenute altre regole, acquisti ed elenchi con nomi personalizzati. Se anche un'altra lista abilitata vende questi articoli, disabilita la regola corrispondente in essa tramite le impostazioni.
Shop liste / Liste di acquisto e vendita
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()
{
RemoveSaleRule(0x0F51, -1);
RemoveSaleRule(0x1F03, 0x0044);
return null;
}
void RemoveSaleRule(dynamic itemType, dynamic hue)
{
UO.Sell(itemType, hue, 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: type (Any)
Risultato: void / Unit.
Durante la chiamata:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SetAutoSellRule:bridge.SetAutoSellRule(Arg(0), arguments.Length > 1 ? Arg(1) : -1, arguments.Length > 2 ? Arg(2) : 1). -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Arg:Arg(0).
Codice interno di implementazione; non è uno script autonomo.
case "sell":
bridge.SetAutoSellRule(Arg(0), arguments.Length > 1 ? Arg(1) : -1, arguments.Length > 2 ? Arg(2) : 1);
break;Parametri: type (Any), color (Any)
Risultato: void / Unit.
Durante la chiamata:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SetAutoSellRule:bridge.SetAutoSellRule(Arg(0), arguments.Length > 1 ? Arg(1) : -1, arguments.Length > 2 ? Arg(2) : 1). -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Arg:Arg(0).
Codice interno di implementazione; non è uno script autonomo.
case "sell":
bridge.SetAutoSellRule(Arg(0), arguments.Length > 1 ? Arg(1) : -1, arguments.Length > 2 ? Arg(2) : 1);
break;Parametri: type (Any), color (Any), quantity (Any)
Risultato: void / Unit.
Durante la chiamata:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SetAutoSellRule:bridge.SetAutoSellRule(Arg(0), arguments.Length > 1 ? Arg(1) : -1, arguments.Length > 2 ? Arg(2) : 1). -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Arg:Arg(0).
Codice interno di implementazione; non è uno script autonomo.
case "sell":
bridge.SetAutoSellRule(Arg(0), arguments.Length > 1 ? Arg(1) : -1, arguments.Length > 2 ? Arg(2) : 1);
break;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.SendShopReply(object? reply);Invia la selezione del prodotto all'ultima offerta attiva del venditore NPC. La direzione della transazione è determinata dall'offerta: acquistare da NPC o vendergli.
-
reply— Stringa: "serial:quantità"; più posizioni sono separate da |, ; o virgola. Invece di: diciamo =. Seriale: posizioni ID da GetShopList, decimale o 0x, non graphic e non ID venditore. La quantità è un numero intero positivo di unità, non il numero di pile; senza di essa, viene preso 1. "accetta" non fa distinzione tra maiuscole e minuscole o "1" conferma la bozza della finestra; una riga vuota annulla la transazione con una risposta vuota.
void - Non è previsto alcun valore di restituzione: né true/false, né l'importo, né la conferma dell'acquisto. Il server decide se la transazione è valida. Dopo l'invio, controlla gli articoli aggiornati, l'oro o il messaggio del server.
- Innanzitutto, come normale azione di gioco, apri un acquisto o una vendita dal NPC desiderato e attendi che il server offra. Queste squadre stesse non cercano un venditore, non aprono scambi, non stabiliscono un prezzo per un venditore personale e non trasferiscono oggetti tra i forzieri. Non viene passato come parametro il ID del venditore: in caso di più offerte viene utilizzata l'ultima.
- Nel manager l'offerta viene memorizzata nella sessione di gioco. Chiudendo il client grafico si salva la proposta e la bozza, aprendolo si ripristina la finestra. Chiudendo il negozio stesso, rispondendo, chiudendo il server o disconnettendo la connessione si rimuove l'offerta. Autobuy/autosell Bad Newbie può elaborarlo prima dello script.
- La lettura non invia richieste al server. Questa è un'istantanea della fornitura già ricevuta, non una garanzia dello stock attuale di NPC. Il campo quantità riflette le unità, non il numero di righe/pile. ArrayLength(righe) conta le posizioni. I prezzi qui sono GetShopList; SendShopReply non accetta il prezzo.
- L'elenco esplicito sostituisce la bozza e non viene aggiunto ad essa. Ripetendo uno serial si somma la quantità; il totale è limitato dalla quantità totale dell'articolo nell'offerta. Sconosciuto serial, quantità errata o non positiva rifiuta l'intera risposta prima di inviarla, salvando l'offerta. Se non è presente alcuna frase, SendShopReply segnala un errore. La riga "0" non è un comando di annullamento; utilizzo "".
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.SendShopReply");
UO.SendShopReply("");Parametri e flusso di esecuzione:
- Sono selezionate fino a 3 unità di prima posizione; serial non ha la pelle dura. Per una proposta di acquisto si tratta di un acquisto, per una proposta di vendita è una vendita. Controlla quale offerta hai aperto.
var rows = UO.GetShopList();
if (Truth(ArrayLength(rows) == 0))
{
return null;
}
var amount = Convert.ToInt32(ReadField(rows[0], 3, "|"));
if (Truth(amount > 3))
{
amount = 3;
}
if (Truth(amount > 0))
{
UO.SendShopReply(ReadField(rows[0], 0, "|") + ":" + Convert.ToString(amount));
}
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;
string ReadField(object? row, int index, string separator) { string[] fields = (Convert.ToString(row) ?? "").Split(new[] { separator }, StringSplitOptions.None); return index >= 0 && index < fields.Length ? fields[index] : ""; }Parametri e flusso di esecuzione:
- Solo per l'offerta ACQUISTA: budget 30, digitare 0x0E21. Viene selezionata un'unità da ciascun articolo idoneo se il prezzo è positivo e rientra nel budget rimanente. La stringa viene concatenata utilizzando |; uno SendShopReply invia l'intera selezione.
return RunScenario();
object? RunScenario()
{
double budget = 30;
var reply = "";
var rows = UO.GetShopList();
for (int i = (int)(0); i <= ArrayLength(rows) - 1; i += (int)(1))
{
var row = rows[i];
if (Truth(ReadField(row, 1, "|") == "0x0E21"))
{
var price = Convert.ToDouble(ReadField(row, 4, "|"));
var amount = Convert.ToInt32(ReadField(row, 3, "|"));
if (Truth(price > 0) && Truth(price <= budget) && Truth(amount > 0))
{
if (Truth(reply != ""))
{
reply = reply + "|";
}
reply = reply + ReadField(row, 0, "|") + ":1";
budget = budget - price;
}
}
}
if (Truth(reply != ""))
{
UO.SendShopReply(reply);
}
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;
string ReadField(object? row, int index, string separator)
{
string[] fields = (Convert.ToString(row) ?? "").Split(new[] { separator }, StringSplitOptions.None);
return index >= 0 && index < fields.Length ? fields[index] : "";
}Parametri e flusso di esecuzione:
- Preseleziona le quantità nella vetrina del negozio. "accetta" invia esattamente questa bozza; Dopo aver chiuso la finestra del gioco viene salvata. Se non viene selezionato nulla, verrà inviata una risposta vuota. "1" è sinonimo di conferma, non di serial soggetto.
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.SendShopReply("accept");
return null;
}
}Parametri e flusso di esecuzione:
- Una riga vuota invia una risposta vuota e chiude l'offerta attiva. Il controllo GetShopList evita di essere chiamato quando non ci sono beni, ma non distingue tra frase vuota e frase assente.
Shop liste / Liste di acquisto e vendita
if (Truth(ArrayLength(UO.GetShopList()) > 0))
{
UO.SendShopReply("");
}
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: reply (Any)
Risultato: void / Unit.
Durante la chiamata:
-
InjectionScript.Runtime.InjectionApiUO.SendShopReply. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SendShopReply:bridge.SendShopReply(reply.ToString()). -
InjectionScript.Runtime.InjectionValue.ToString:reply.ToString().
Codice interno di implementazione; non è uno script autonomo.
public void SendShopReply(InjectionValue reply) => bridge.SendShopReply(reply.ToString());Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.SetAutoBuyDelay(object? value);Imposta il ritardo di acquisto automatico e salva il profilo corrente.
-
value— Numero richiesto di millisecondi. Un valore negativo è limitato a 0, un valore maggiore di 65535 è limitato al numero 65535. 0 disabilita il ritardo aggiuntivo, ma non disabilita il trading automatico stesso.
void: nessun valore restituito. Chiama come una linea separata, quindi usa GetAutoBuyDelay() per leggere l'impostazione effettiva. Se non è presente alcun profilo, il setter non salva nulla; getter in questo stato fornisce lo standard 3 ms.
- L'impostazione è generale per il profilo corrente: le modifiche in un altro script o UI saranno visibili la prossima volta che lo leggerai. Zero è un'impostazione valida, non un segno di dati mancanti e non un motivo per ripristinare la vecchia cache degli script.
- Il valore predefinito è 3 ms. Dopo aver inviato un'operazione automatica, il gestore imposta l'ora per la successiva operazione consentita. Gli elenchi fornitori arrivati prima non vengono elaborati da questo passaggio; getter non attiva un'attesa e non invia un acquisto/vendita.
- Questo non è un ritardo di MassMove, Drag/Drop o trading manuale. Il nuovo valore viene applicato quando si pianifica il ritardo successivo; il momento già assegnato non viene ricalcolato.
- In un normale host client, questi dati di stato vengono presi dal gestore GetPersistentState e sono comuni a script/chat/macro dello stesso mondo/profilo e non appartengono a uno script. Un altro processo o un InjectionRuntimeState apparentemente separato ha uno stato diverso. Caricare/cancellare un profilo può sostituirlo; salvati serial vengono ancora confrontati con il mondo caricato.
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.SetAutoBuyDelay");
UO.SetAutoBuyDelay(350);Parametri e flusso di esecuzione:
- Valore=350 — millisecondi tra le operazioni automatiche consentite.
- L'impostazione viene salvata nel profilo corrente ed è visibile ad altri script.
UO.SetAutoBuyDelay(350);
UO.Print(Convert.ToString(UO.GetAutoBuyDelay()));Parametri e flusso di esecuzione:
- Valore=0 ha un significato indipendente; non viene sostituito dal precedente valore diverso da zero.
- Cambia solo il ritardo. Le regole, gli elenchi e il cambio automatico generale del trading vengono impostati separatamente.
return RunScenario();
object? RunScenario()
{
UO.SetAutoBuyDelay(0);
var actual = UO.GetAutoBuyDelay();
if (Truth(actual == 0))
{
UO.Print("Delay disabled");
}
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:
- richiesto=70000 supera il massimo. applicato legge il profilo dopo le restrizioni del setter.
- Quando il profilo viene caricato, il risultato sarà 65535. Per ripristinare il ritardo standard, chiama esplicitamente il setter con 3.
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 requested = 70000;
UO.SetAutoBuyDelay(requested);
var applied = UO.GetAutoBuyDelay();
UO.Print("Requested: " + Convert.ToString(requested));
UO.Print("Applied: " + Convert.ToString(applied));
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: value (Any)
Risultato: void / Unit.
Durante la chiamata:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SetAutoBuyDelay:bridge.SetAutoBuyDelay(state.AutoBuyDelay).
Codice interno di implementazione; non è uno script autonomo.
case "setautobuydelay":
state.AutoBuyDelay = Math.Max(0, Arg(0));
bridge.SetAutoBuyDelay(state.AutoBuyDelay);
return InjectionValue.Unit;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.SetAutoSellDelay(object? value);Imposta il ritardo della vendita automatica e salva il profilo corrente.
-
value— Numero richiesto di millisecondi. Un valore negativo è limitato a 0, un valore maggiore di 65535 è limitato al numero 65535. 0 disabilita il ritardo aggiuntivo, ma non disabilita il trading automatico stesso.
void: nessun valore restituito. Chiama come una linea separata, quindi usa GetAutoSellDelay() per leggere l'impostazione effettiva. Se non è presente alcun profilo, il setter non salva nulla; getter in questo stato fornisce lo standard 3 ms.
- L'impostazione è generale per il profilo corrente: le modifiche in un altro script o UI saranno visibili la prossima volta che lo leggerai. Zero è un'impostazione valida, non un segno di dati mancanti e non un motivo per ripristinare la vecchia cache degli script.
- Il valore predefinito è 3 ms. Dopo aver inviato un'operazione automatica, il gestore imposta l'ora per la successiva operazione consentita. Gli elenchi fornitori arrivati prima non vengono elaborati da questo passaggio; getter non attiva un'attesa e non invia un acquisto/vendita.
- Questo non è un ritardo di MassMove, Drag/Drop o trading manuale. Il nuovo valore viene applicato quando si pianifica il ritardo successivo; il momento già assegnato non viene ricalcolato.
- In un normale host client, questi dati di stato vengono presi dal gestore GetPersistentState e sono comuni a script/chat/macro dello stesso mondo/profilo e non appartengono a uno script. Un altro processo o un InjectionRuntimeState apparentemente separato ha uno stato diverso. Caricare/cancellare un profilo può sostituirlo; salvati serial vengono ancora confrontati con il mondo caricato.
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.SetAutoSellDelay");
UO.SetAutoSellDelay(350);Parametri e flusso di esecuzione:
- Valore=350 — millisecondi tra le operazioni automatiche consentite.
- L'impostazione viene salvata nel profilo corrente ed è visibile ad altri script.
UO.SetAutoSellDelay(350);
UO.Print(Convert.ToString(UO.GetAutoSellDelay()));Parametri e flusso di esecuzione:
- Valore=0 ha un significato indipendente; non viene sostituito dal precedente valore diverso da zero.
- Cambia solo il ritardo. Le regole, gli elenchi e il cambio automatico generale del trading vengono impostati separatamente.
return RunScenario();
object? RunScenario()
{
UO.SetAutoSellDelay(0);
var actual = UO.GetAutoSellDelay();
if (Truth(actual == 0))
{
UO.Print("Delay disabled");
}
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:
- richiesto=70000 supera il massimo. applicato legge il profilo dopo le restrizioni del setter.
- Quando il profilo viene caricato, il risultato sarà 65535. Per ripristinare il ritardo standard, chiama esplicitamente il setter con 3.
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 requested = 70000;
UO.SetAutoSellDelay(requested);
var applied = UO.GetAutoSellDelay();
UO.Print("Requested: " + Convert.ToString(requested));
UO.Print("Applied: " + Convert.ToString(applied));
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: value (Any)
Risultato: void / Unit.
Durante la chiamata:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SetAutoSellDelay:bridge.SetAutoSellDelay(state.AutoSellDelay).
Codice interno di implementazione; non è uno script autonomo.
case "setautoselldelay":
state.AutoSellDelay = Math.Max(0, Arg(0));
bridge.SetAutoSellDelay(state.AutoSellDelay);
return InjectionValue.Unit;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.Shop();Stampa un elenco locale delle linee commerciali.
Non ci sono parametri.
void - nessun valore. Chiama su una linea separata; il completamento non conferma l'azione del server.
- ExecuteLegacyManualAlias legge bridge.GetShopList e concatena le righe tramite "|" per SystemMessage. Il menu venditore non si apre, l'acquisto/vendita non viene effettuato.
- Modifica o visualizza solo i dati locali specificati. Questo comando non ha la 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.Shop");
UO.Shop();Parametri e flusso di esecuzione:
- Stampa un elenco locale delle linee commerciali.
UO.Shop();Parametri e flusso di esecuzione:
- ExecuteLegacyManualAlias legge bridge.GetShopList e concatena le righe tramite "|" per SystemMessage. Il menu venditore non si apre, l'acquisto/vendita non viene effettuato.
return RunScenario();
object? RunScenario()
{
UO.Shop();
UO.Print(UO.GetArrayLength(UO.GetShopList()));
return null;
}Parametri e flusso di esecuzione:
- Modifica o visualizza solo i dati locali specificati. Questo comando non ha la conferma del server.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
UO.Shop();
UO.TextOpen();
UO.TextPrint("Shop list was printed in the journal");
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.ExecuteLegacyManualAlias. -
InjectionScript.Runtime.InjectionApiUO.SystemMessage:SystemMessage(string.Join(" | ", bridge.GetShopList())). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetShopList:bridge.GetShopList().
Codice interno di implementazione; non è uno script autonomo.
case "shop": SystemMessage(string.Join(" | ", bridge.GetShopList())); break;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.VendorMenu(object? vendor);
void UO.VendorMenu(object? menu, object? choice);Utilizza un venditore o registra un hook di menu permanente.
-
vendor— Modulo con un argomento: serial/alias dell'oggetto venditore. -
menu— Un modulo con due argomenti: un titolo e un elemento di menu, entrambi come testo. Questa è un'operazione diversa; il primo argomento non è serial. -
choice— Un modulo con due argomenti: un titolo e un elemento di menu, entrambi come testo. Questa è un'operazione diversa; il primo argomento non è serial.
void - nessun valore. Chiama su una linea separata; il completamento non conferma l'azione del server.
- Un argomento chiama bridge.UseObject. I due argomenti chiamano bridge.AddMenuHook(menu,choice,true), dove true indica un hook ripetibile.
- Non acquista né vende automaticamente. L'apertura e la selezione dei menu è determinata dal server; l'hook registrato agisce sui successivi menù abbinati fino alla cancellazione.
- Per i moduli di menu/scelta, il gestore seleziona il primo menu il cui titolo contiene prompt, senza distinzione tra maiuscole e minuscole; SessionMenu seleziona il primo elemento il cui nome contiene una scelta, anch'essa senza distinzione tra maiuscole e minuscole. Il testo vuoto è adatto a chiunque; il testo numerico è un frammento del nome, non un indice. Una selezione riuscita invia una risposta e chiude il menu locale. Un hook singolo viene eliminato solo dopo una selezione riuscita; rimane un gancio permanente.
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.VendorMenu");
UO.VendorMenu("lasttarget");Parametri e flusso di esecuzione:
- Utilizza un venditore o registra un hook di menu permanente.
if (Truth(UO.Exists("lasttarget")))
{
UO.VendorMenu("lasttarget");
}
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:
- Un argomento chiama bridge.UseObject. I due argomenti chiamano bridge.AddMenuHook(menu,choice,true), dove true indica un hook ripetibile.
return RunScenario();
object? RunScenario()
{
UO.VendorMenu("Vendor", "Buy");
return null;
}Parametri e flusso di esecuzione:
- Non acquista né vende automaticamente. L'apertura e la selezione dei menu è determinata dal server; l'hook registrato agisce sui successivi menù abbinati fino alla cancellazione.
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.VendorMenu("Vendor", "Buy");
UO.Print(UO.MenuHookPresent());
UO.CancelMenu();
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: vendor (Any)
Risultato: void / Unit.
Durante la chiamata:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.AddMenuHook:bridge.AddMenuHook(Text(0), Text(1), true). -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Text:Text(0). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.UseObject:bridge.UseObject(Arg(0, bridge.LastTarget)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Arg:Arg(0, bridge.LastTarget). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.LastTarget:bridge.LastTarget.
Codice interno di implementazione; non è uno script autonomo.
case "vendormenu":
if (arguments.Length >= 2) bridge.AddMenuHook(Text(0), Text(1), true);
else bridge.UseObject(Arg(0, bridge.LastTarget));
break;Parametri: menu (Any), choice (Any)
Risultato: void / Unit.
Durante la chiamata:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.AddMenuHook:bridge.AddMenuHook(Text(0), Text(1), true). -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Text:Text(0). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.UseObject:bridge.UseObject(Arg(0, bridge.LastTarget)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Arg:Arg(0, bridge.LastTarget). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.LastTarget:bridge.LastTarget.
Codice interno di implementazione; non è uno script autonomo.
case "vendormenu":
if (arguments.Length >= 2) bridge.AddMenuHook(Text(0), Text(1), true);
else bridge.UseObject(Arg(0, bridge.LastTarget));
break;