Repository navigation
FR UO Topic magic
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
Accueil · C# · IDE · UO API · A–Z · Exemples · Langues
Sorts, capacités et mouvements avec magie. Pour une action ciblée, fixez l’objectif à l’avance et vérifiez les conditions d’application.
Ouvrir le catalogue complet et les exemples
| Sujet | Commandes et explications |
|---|---|
| Cast | UO.Cast |
| CastToObject | UO.CastToObject |
| CastAbility | UO.CastAbility |
| Active Spell Ability | UO.IsActiveSpellAbility |
| Spell Timers | UO.TicksSpell |
UO.Cast · UO.CastToObject · UO.CastAbility · UO.IsActiveSpellAbility · UO.TicksSpell
Chaque carte de commande possède plusieurs scénarios indépendants : code direct, fonctions et classes. Vous trouverez ci-dessous une sélection de courts scénarios ; des restrictions et une analyse complète sont à prévoir.
Paramètres, résultat et tous les scénarios
UO.CancelWaitTarget();
if (Truth(UO.Cast("Cure")))
{
UO.Print("Choose the character with the spell cursor");
}
else
{
UO.Print("Cure request rejected");
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Paramètres, résultat et tous les scénarios
var accepted = UO.CastToObject("Heal", "self");
UO.Print(Convert.ToString(accepted));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.AddGate(object? bookSerial);-
bookSerialest une valeur d'identifiant que le script compatible enregistre en tant qu'entrée de liste héritée. Au moment de l'exécution actuelle, la valeur est sérialisée en chaîne ; La commande ne vérifie pas l'existence d'un objet dans le monde.
void. L'équipe ne confirme pas la disponibilité du livre ni la création du portail de jeu.
- La valeur est ajoutée à la liste
AddGatede l'état d'exécution actuel. Dans ClassicUO, cette liste de compatibilité ne déclenche pas d'action de jeu et n'a pas de getter public documenté à lire.
Chaque exemple peut être enregistré dans un fichier séparé .csx et exécuté dans IDE. Les fonctions d'objet UO et d'attente fournissent l'hôte de la session de jeu en cours. Remplacez les noms, coordonnées et adresses de la démo serial par les vôtres.
Exécutez ce code dans un fichier .csx séparé. Les arguments sont visibles dans l’appel ; remplacez les noms, serials et adresses d’exemple par les vôtres.
La commande forme une instruction séparée. Le message précédent indique le début de l’appel et ne confirme aucune action du serveur.
UO.Print("Calling UO.AddGate");
UO.AddGate("0x40012345");Paramètres et déroulement de l’exécution :
- Enregistrez l'ID en tant que données héritées sans ouvrir le portail.
UO.AddGate("0x40012345");Paramètres et déroulement de l’exécution :
- Utilisez la valeur de la chaîne transmise à un script compatible.
return RunScenario();
object? RunScenario()
{
var bookSerial = "0x40012345";
UO.AddGate(bookSerial);
return null;
}Paramètres et déroulement de l’exécution :
- Écrivez la valeur dans la liste d'exécution AddGate.
- L'appel stocke les données de compatibilité ; il n'utilise pas le livre dans le monde.
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()
{
RememberGateBook("0x40012345");
return null;
}
void RememberGateBook(dynamic bookSerial)
{
UO.AddGate(bookSerial);
}
}C# distingue les majuscules. Utilisez le nom UO exact. Comparez les indicateurs numériques à 0 ; utilisez bool seulement si la signature renvoie bool.
Paramètres: bookSerial (Any)
Résultat: void / Unit.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::LegacyList:LegacyList(name). -
InjectionScript.Runtime.InjectionValue.ToString:value.ToString().
Code interne de l’implémentation ; ce n’est pas un script autonome.
case "adddir":
case "addfindlist":
case "addgate":
case "addrecall":
case "addstep":
LegacyList(name).Add(string.Join("|", arguments.Select(value => value.ToString())));
break;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.AddRecall(object? bookSerial);-
bookSerialest une valeur d'identifiant que le script compatible enregistre en tant qu'entrée de liste héritée. Le runtime sérialise la valeur transmise dans une chaîne.
void. L'appel ne renvoie aucun résultat et ne confirme pas la présence du livre.
- La valeur est ajoutée à la liste
AddRecallde l'état d'exécution actuel. Dans ClassicUO, cette liste de compatibilité elle-même n'envoie pas de commandes de jeu et n'a pas de getter public documenté à lire.
Chaque exemple peut être enregistré dans un fichier séparé .csx et exécuté dans IDE. Les fonctions d'objet UO et d'attente fournissent l'hôte de la session de jeu en cours. Remplacez les noms, coordonnées et adresses de la démo serial par les vôtres.
Exécutez ce code dans un fichier .csx séparé. Les arguments sont visibles dans l’appel ; remplacez les noms, serials et adresses d’exemple par les vôtres.
La commande forme une instruction séparée. Le message précédent indique le début de l’appel et ne confirme aucune action du serveur.
UO.Print("Calling UO.AddRecall");
UO.AddRecall("0x40012345");1. Enregistrez la valeur en tant que données de compatibilité, n'exécutez pas Recall. - scénario direct
Paramètres et déroulement de l’exécution :
- Enregistrez la valeur en tant que données de compatibilité, n'exécutez pas Recall.
UO.AddRecall("0x40012345");Paramètres et déroulement de l’exécution :
- Passez l'identifiant via une variable chaîne.
return RunScenario();
object? RunScenario()
{
var bookSerial = "0x40012345";
UO.AddRecall(bookSerial);
return null;
}Paramètres et déroulement de l’exécution :
- Chaque appel ajoute une entrée distincte à AddRecall du runtime actuel.
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.AddRecall("0x40012345");
UO.AddRecall("0x40012346");
return null;
}
}C# distingue les majuscules. Utilisez le nom UO exact. Comparez les indicateurs numériques à 0 ; utilisez bool seulement si la signature renvoie bool.
Paramètres: bookSerial (Any)
Résultat: void / Unit.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::LegacyList:LegacyList(name). -
InjectionScript.Runtime.InjectionValue.ToString:value.ToString().
Code interne de l’implémentation ; ce n’est pas un script autonome.
case "adddir":
case "addfindlist":
case "addgate":
case "addrecall":
case "addstep":
LegacyList(name).Add(string.Join("|", arguments.Select(value => value.ToString())));
break;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.Cast(object? spellName);Demande l'utilisation d'un sort par nom. Exactement un paramètre : spellName, par exemple UO.Cast("Heal"). La cible est sélectionnée séparément : avec la souris en utilisant le réticule apparu ou via WaitTargetObject avant Cast. Accepter une demande ne confirme pas un effet réussi.
-
spellName- Ligne obligatoire - le nom anglais du sort entre guillemets : "Heal", "Cure", "Greater Heal". Les noms ne sont pas traduits avec l'interface. Le dictionnaire reconnaît également les alias intégrés et les mots orthographiés. Le numérique ID, y compris la chaîne "29", la cible, la distance, la notoriété, maxZ et l'attente ne sont pas des paramètres Cast. Tous les noms et écoles.
int : 1/true—le client a accepté la demande ; 0/false - le nom n'est pas reconnu ou la demande est localement rejetée. Vous pouvez écrire if UO.Cast("Heal") { ... } ou comparer avec 1/true. Ce ne sont pas des sorts ID ou des preuves de guérison/dégâts. Un argument manquant ou supplémentaire provoque une erreur. Le commandement ne s'attend pas à viser et à terminer le sort.
- Forme unique : UO.Cast(spellName). Il n’y a pas de deuxième argument ou d’argument ultérieur. La recherche d'une cible, la préparation d'une réponse, l'attente et l'effacement sont effectués par des commandes distinctes.
- Pour sélectionner manuellement, effacez votre file d'attente précédente CancelWaitTarget, appelez Cast et cliquez sur l'objet souhaité avec votre réticule. Le Cast lui-même ne vide pas la file d'attente : le script aurait pu le préparer à l'avance.
- Pour une cible automatique, appelez d'abord WaitTargetObject(serial/alias), puis Cast(name). Cet ordre vous permet de répondre à la visée rapide du serveur. Pour les sorts sans portée, ne préparez pas de réponse.
- Le serveur détermine la disponibilité du sort, les ressources, la cible valide, la portée et l'effet. Un résultat positif ne fait que confirmer l'acceptation locale de la demande.
- La file d'attente préparée peut rester sans surveillance en cas de panne du serveur. Supprimez-le CancelWaitTarget après une attente limitée ou un échec local. N'exécutez pas d'autres scripts en parallèle avec la cible.
- Une demande acceptée met à jour TicksSpell. Cast n'attend pas que HP soit animé, soigné ou modifié. Le catalogue ID explique le protocole interne, mais ne remplace pas le nom dans l'argument.
Chaque exemple peut être enregistré dans un fichier séparé .csx et exécuté dans IDE. Les fonctions d'objet UO et d'attente fournissent l'hôte de la session de jeu en cours. Remplacez les noms, coordonnées et adresses de la démo serial par les vôtres.
Exécutez ce code dans un fichier .csx séparé. Les arguments sont visibles dans l’appel ; remplacez les noms, serials et adresses d’exemple par les vôtres.
Le résultat d’un seul appel est affiché dans le journal. Un nombre n’est pas converti en bool ; un tableau est affiché par son nombre d’éléments.
var result = UO.Cast("Cure");
UO.Print("Cast: " + Convert.ToString(result));Paramètres et déroulement de l’exécution :
- Cure est le seul argument de Cast. Après le lancement, sélectionnez le personnage à l'aide du viseur du jeu. Vérifiez la panne du serveur et le résultat dans le jeu.
UO.CancelWaitTarget();
if (Truth(UO.Cast("Cure")))
{
UO.Print("Choose the character with the spell cursor");
}
else
{
UO.Print("Cure request rejected");
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Paramètres et déroulement de l’exécution :
- self — argument WaitTargetObject ; Guérir est le seul argument de Cast. 3000 - trois secondes pour viser dans cet exemple, ce n'est pas une garantie d'achèvement de la guérison. Supprime enfin la réponse restante et en cas d'échec.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
UO.CancelWaitTarget();
try
{
UO.WaitTargetObject("self");
if (Truth(UO.Cast("Heal")))
{
await Delay(3000);
}
}
finally
{
UO.CancelWaitTarget();
}
return null;
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Paramètres et déroulement de l’exécution :
- spellName, target, cleanupDelayMs - paramètres de votre fonction CastAtObject, pas de surcharge UO.Cast. En interne, Cast n'accepte que spellName. ASC convertit la chaîne ID en nombre ; 4000 — délai de suppression de la file d'attente. true signifie acceptation de la demande et non réussite du traitement.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
async public Task<object?> RunScenarioAsync()
{
var target = Asc(UO.GetSerial("lasttarget"), 0);
if (Truth(await CastAtObject("Greater Heal", target, 4000)))
{
UO.Print("Request sent; verify healing in the game");
}
return null;
}
async Task<dynamic> CastAtObject(dynamic spellName, dynamic target, dynamic cleanupDelayMs)
{
if (!(Truth(UO.Connected())) || Truth(UO.Dead()) || Truth(target <= 0) || !(Truth(UO.Exists(target))))
{
return false;
}
dynamic accepted = false;
UO.CancelWaitTarget();
try
{
UO.WaitTargetObject(target);
accepted = UO.Cast(spellName);
if (Truth(accepted))
{
await Delay(cleanupDelayMs);
}
}
finally
{
UO.CancelWaitTarget();
}
return accepted;
}
int Asc(object? value, int fallback = 0)
{
string text = Convert.ToString(value) ?? "";
if (text.StartsWith("0x", StringComparison.OrdinalIgnoreCase))
return int.TryParse(text[2..], System.Globalization.NumberStyles.HexNumber, System.Globalization.CultureInfo.InvariantCulture, out int hex) ? hex : fallback;
return int.TryParse(text, out int number) ? number : fallback;
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}C# distingue les majuscules. Utilisez le nom UO exact. Comparez les indicateurs numériques à 0 ; utilisez bool seulement si la signature renvoie bool.
Paramètres: spellName (String)
Résultat: int / Integer.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.Cast. -
InjectionScript.Runtime.NumberConversions.TryStr2Int:NumberConversions.TryStr2Int((spellName ?? string.Empty).Trim(), out _). -
InjectionScript.Runtime.InjectionApiUO.SystemMessage:SystemMessage("UO.Cast: use one spell name, for example UO.Cast(\"Heal\")."). -
InjectionScript.Runtime.InjectionApiUO.CastCore:CastCore(spellName).
Code interne de l’implémentation ; ce n’est pas un script autonome.
public int Cast(string spellName)
{
if (NumberConversions.TryStr2Int((spellName ?? string.Empty).Trim(), out _))
{
SystemMessage("UO.Cast: use one spell name, for example UO.Cast(\"Heal\").");
return 0;
}
return CastCore(spellName) ? 1 : 0;
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.CastAbility(object? abilityId);Bascule la capacité actuellement sélectionnée de l'arme actuelle via UseAbility : appeler à nouveau une capacité déjà sélectionnée la désélectionne.
-
abilityId— Nom de la capacité ou chaîne numérique résolue par ResolveClassicUOAbilityId ; la valeur inconnue donne 0.
int 1 — le client a appelé la capacité primaire/secondaire actuelle ; 0 - aucun personnage, ID inconnu ou la capacité ne correspond pas à l'arme actuelle.
- 1 décrit l'acceptation d'une demande client, plutôt qu'un succès ou une radiation de ressources par le serveur. ID, qui n'est pas la capacité primaire/secondaire actuelle, renvoie 0 même si elle se trouve dans le répertoire.
- GameActions.UsePrimaryAbility/UseSecondaryAbility vérifiez le bit 0x80. Lorsque le bit est désactivé, désélectionnez l'autre option et envoyez la capacité sélectionnée ; lorsqu'il est déjà activé, envoyez ID 0 pour le désactiver. Ensuite, le bit est commuté. Le retour de 1 confirme l'appel à cette branche client, y compris l'arrêt.
Chaque exemple peut être enregistré dans un fichier séparé .csx et exécuté dans IDE. Les fonctions d'objet UO et d'attente fournissent l'hôte de la session de jeu en cours. Remplacez les noms, coordonnées et adresses de la démo serial par les vôtres.
Exécutez ce code dans un fichier .csx séparé. Les arguments sont visibles dans l’appel ; remplacez les noms, serials et adresses d’exemple par les vôtres.
Le résultat d’un seul appel est affiché dans le journal. Un nombre n’est pas converti en bool ; un tableau est affiché par son nombre d’éléments.
var result = UO.CastAbility(UO.GetAbilityID("Armor Ignore"));
UO.Print("CastAbility: " + Convert.ToString(result));Paramètres et déroulement de l’exécution :
- La disponibilité dans le catalogue est distincte de la correspondance des armes.
var id = UO.GetAbilityID("Armor Ignore");
if (Truth(id > 0))
{
var accepted = UO.CastAbility(id);
UO.Print(Convert.ToString(accepted));
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Paramètres et déroulement de l’exécution :
- Le nom se résout en ID et est comparé à l'arme actuelle.
return RunScenario();
object? RunScenario()
{
var accepted = UO.CastAbility("Armor Ignore");
UO.Print(Convert.ToString(accepted));
return null;
}Paramètres et déroulement de l’exécution :
- Zero est en dehors du répertoire et renvoie 0 sans activation.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
var accepted = UO.CastAbility(0);
UO.Print(Convert.ToString(accepted));
return null;
}
}C# distingue les majuscules. Utilisez le nom UO exact. Comparez les indicateurs numériques à 0 ; utilisez bool seulement si la signature renvoie bool.
Paramètres: abilityId (Integer/String)
Résultat: int / Integer.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.UseAbility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.UseAbility:bridge.UseAbility(abilityId).
Code interne de l’implémentation ; ce n’est pas un script autonome.
public int UseAbility(int abilityId) => bridge.UseAbility(abilityId);Paramètres: abilityId (Integer/String)
Résultat: int / Integer.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.UseAbility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.ResolveAbility:bridge.ResolveAbility(abilityName). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.UseAbility:bridge.UseAbility(abilityId).
Code interne de l’implémentation ; ce n’est pas un script autonome.
public int UseAbility(string abilityName)
{
int abilityId = bridge.ResolveAbility(abilityName);
return abilityId > 0 ? bridge.UseAbility(abilityId) : 0;
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.CastToObject(object? spellName, object? objID);Place une cible d'objet en attente et envoie un sort par nom ou numérique ID.
-
spellName- string avec le nom du sort, y compris un trait de soulignement au lieu d'un espace, ou un numérique ID pour bridge.Cast. -
objID— Numéro de série de l'objet ou nom pris en charge de l'objet self/backpack/lasttarget/saved ; les chaînes numériques et les chaînes 0x sont résolues par l'exécution.
int/boolean result 1 — le client a accepté la demande Cast ; 0 — demande rejetée. La réussite du sort n'est pas confirmée par le serveur.
- La forme chaîne passe par CastAtTarget ; la forme numérique met WaitTargetObject, puis bridge.Cast. Si Cast échoue, la cible en attente est annulée. Après acceptation, ticksSpell est mis à jour.
- Bridge rejette spellId non positif, aucune connexion et caractère mort. Le minuteur marque l'envoi, pas la fin du casting ; le résultat de l'impact sur l'objet dépend du serveur.
Chaque exemple peut être enregistré dans un fichier séparé .csx et exécuté dans IDE. Les fonctions d'objet UO et d'attente fournissent l'hôte de la session de jeu en cours. Remplacez les noms, coordonnées et adresses de la démo serial par les vôtres.
Exécutez ce code dans un fichier .csx séparé. Les arguments sont visibles dans l’appel ; remplacez les noms, serials et adresses d’exemple par les vôtres.
Le résultat d’un seul appel est affiché dans le journal. Un nombre n’est pas converti en bool ; un tableau est affiché par son nombre d’éléments.
object? result = UO.CastToObject("Heal", "self");
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Paramètres et déroulement de l’exécution :
- Heal fait de self la cible du prochain curseur du serveur.
var accepted = UO.CastToObject("Heal", "self");
UO.Print(Convert.ToString(accepted));Paramètres et déroulement de l’exécution :
- La forme numérique transmet ID 4 au client ; 1 signifie envoyer une demande.
return RunScenario();
object? RunScenario()
{
var accepted = UO.CastToObject(4, UO.Self());
UO.Print(Convert.ToString(accepted));
return null;
}Paramètres et déroulement de l’exécution :
- Une vérification d'existence locale permet d'éviter d'utiliser le lasttarget manquant.
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 target = UO.LastTarget();
if (Truth(UO.Exists(target)))
{
var accepted = UO.CastToObject("Greater Heal", target);
UO.Print(Convert.ToString(accepted));
}
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 les majuscules. Utilisez le nom UO exact. Comparez les indicateurs numériques à 0 ; utilisez bool seulement si la signature renvoie bool.
Paramètres: spellName (Any), objID (Any)
Résultat: dynamic / Any.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.CastAtTarget:CastAtTarget(arguments[0], arguments[1]). -
InjectionScript.Runtime.InjectionApiUO.WaitTargetObject:WaitTargetObject(Arg(1)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(1). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Cast:bridge.Cast(Arg(0)). -
InjectionScript.Runtime.InjectionApiUO.Timer:Timer(). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.CancelTarget:bridge.CancelTarget().
Code interne de l’implémentation ; ce n’est pas un script autonome.
case "casttoobject":
if (arguments[0].Kind == InjectionValueKind.String)
return CastAtTarget(arguments[0], arguments[1]) != 0 ? InjectionValue.True : InjectionValue.False;
WaitTargetObject(Arg(1));
int castAccepted = bridge.Cast(Arg(0));
if (castAccepted != 0)
{
ticksSpell = Timer();
return InjectionValue.True;
}
bridge.CancelTarget();
return InjectionValue.False;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.IsActiveSpellAbility(object? spellName);Vérifie si le serveur a signalé l'état actif de la capacité/du sort sélectionné. Utile avant de réactiver une capacité canalisée. Il n'allume rien, ne lance ni ne sélectionne de cible.
-
spellName- Le seul paramètre obligatoire : un nom anglais du catalogue de sorts ou l'intégralité du ID. Par exemple, « Confiance » et 402 représentent le même sort Bushido. Le cas n’est pas important ; les traits de soulignement dans le nom sont remplacés par des espaces. La droite numérique est également reconnue. Ne transmettez pas le caractère ID, le type d'objet ou le numéro de compétence.
int : 1 - le serveur a signalé l'état actif de ce ID ; 0 - il n'existe actuellement aucun état actif de ce type. Dans C# vérifiez le résultat numérique : if (UO.IsActiveSpellAbility(402) != 0) { ... }. Il s'agit d'un signe logique, pas du numéro, de l'heure ou du résultat du dernier lancer. Nom inconnu, ID en dehors de 1…65535 et aucun état résultant donne également 0.
- La liste met à jour le package serveur 0xBF/0x25 : l'activation ajoute ID, la désactivation le supprime. Fonctionne sans fenêtre graphique et sans bouton orthographique à l'écran. La fermeture d'une fenêtre enregistre l'état ; rompre la connexion l'efface. Répondre 0 ne prouve pas que le personnage est incapable de lancer le sort. Le serveur doit envoyer ce statut ; Ce n’est pas une vérification universelle pour tous les buffs. Pour les soins/rappels instantanés, un tel exemple ne confirme pas un lancer réussi. La durée du sort, le mana restant, la disponibilité et le succès ne sont pas déterminés par cette commande.
Chaque exemple peut être enregistré dans un fichier séparé .csx et exécuté dans IDE. Les fonctions d'objet UO et d'attente fournissent l'hôte de la session de jeu en cours. Remplacez les noms, coordonnées et adresses de la démo serial par les vôtres.
Exécutez ce code dans un fichier .csx séparé. Les arguments sont visibles dans l’appel ; remplacez les noms, serials et adresses d’exemple par les vôtres.
Le résultat d’un seul appel est affiché dans le journal. Un nombre n’est pas converti en bool ; un tableau est affiché par son nombre d’éléments.
object? result = UO.IsActiveSpellAbility(402);
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Paramètres et déroulement de l’exécution :
- 402 - ID Confiance. La variable active contient soit 1, soit 0 ; true équivaut ici à 1. Le message décrit l'état reçu, et non le résultat de la tentative de diffusion.
var active = UO.IsActiveSpellAbility(402);
if (Truth(Truth(active) == true))
{
UO.Print("Confidence is active");
}
else
{
UO.Print("No active Confidence state received");
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Paramètres et déroulement de l’exécution :
- "Confiance" - le même ID 402. Cast n'accepte que le nom. La demande est envoyée une fois s'il n'y a pas de statut actif ; cela ne garantit pas le succès sur le serveur. N'exécutez pas cet extrait dans une boucle rapide ; la réponse du serveur peut être retardée.
return RunScenario();
object? RunScenario()
{
if (Truth(UO.IsActiveSpellAbility("Confidence") == 0))
{
UO.Cast("Confidence");
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Paramètres et déroulement de l’exécution :
- épeler - nom ou ID ; attendu — true pour allumer, false pour éteindre ; timeoutMs — limite d'attente en millisecondes. Main attend jusqu'à 500 ms avec des vérifications toutes les 25 ms et ne lance rien. La fonction renvoie true s'il y a une correspondance, sinon false. Il s’agit là d’une attente limitée d’un État local, et non d’une preuve de la raison de son changement ; le temps réel peut augmenter si le script est en pause ou en charge.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
if (Truth(WaitAbilityState("Confidence", true, 500)))
{
UO.Print("Active state received");
}
else
{
UO.Print("No active state before timeout");
}
return null;
}
dynamic WaitAbilityState(dynamic spell, dynamic expected, dynamic timeoutMs)
{
var elapsed = 0;
while (Truth(elapsed < timeoutMs))
{
if (Truth((UO.IsActiveSpellAbility(spell) == 1) == expected))
{
return true;
}
UO.Wait(25);
elapsed = elapsed + 25;
}
return Truth((UO.IsActiveSpellAbility(spell) == 1) == expected);
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}C# distingue les majuscules. Utilisez le nom UO exact. Comparez les indicateurs numériques à 0 ; utilisez bool seulement si la signature renvoie bool.
Paramètres: spellName (Any)
Résultat: dynamic / Any.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.ConvertSpellName:ConvertSpellName(Text(0).Replace('_', ' ')). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Text:Text(0). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.IsActiveSpell:bridge.IsActiveSpell(spellId.Value).
Code interne de l’implémentation ; ce n’est pas un script autonome.
case "isactivespellability":
{
int? spellId = arguments[0].Kind == InjectionValueKind.String
? ConvertSpellName(Text(0).Replace('_', ' '))
: (int?)Arg(0);
return new InjectionValue(spellId.HasValue ? bridge.IsActiveSpell(spellId.Value) : 0);
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.TicksSpell();Lit la marque enregistrée TicksSpell.
Il n'y a pas de paramètres.
int — marque UO.Timer en dixièmes de seconde à partir du début de l'exécution. 0 - la marque n'a pas encore été posée ou l'événement s'est produit dans le premier dixième de seconde ; ce ne sont pas des millisecondes ou l’heure du calendrier.
- Renvoie le champ ticksSpell. Il est mis à jour par le Cast/CastAtTarget accepté avec succès ; il ne s'agit pas d'une observation automatique de toutes les activités manuelles/serveurs. La commande elle-même ne modifie pas la marque.
- UO.Timer() - la marque calcule l'âge en dixièmes de seconde. Les marques ne sont pas comparées entre les différentes exécutions.
Chaque exemple peut être enregistré dans un fichier séparé .csx et exécuté dans IDE. Les fonctions d'objet UO et d'attente fournissent l'hôte de la session de jeu en cours. Remplacez les noms, coordonnées et adresses de la démo serial par les vôtres.
Exécutez ce code dans un fichier .csx séparé. Les arguments sont visibles dans l’appel ; remplacez les noms, serials et adresses d’exemple par les vôtres.
Le résultat d’un seul appel est affiché dans le journal. Un nombre n’est pas converti en bool ; un tableau est affiché par son nombre d’éléments.
var result = UO.TicksSpell();
UO.Print("TicksSpell: " + Convert.ToString(result));Paramètres et déroulement de l’exécution :
- Lit la marque enregistrée TicksSpell.
var stamp = UO.TicksSpell();
UO.Print(stamp);Paramètres et déroulement de l’exécution :
- Renvoie le champ ticksSpell. Il est mis à jour par le Cast/CastAtTarget accepté avec succès ; il ne s'agit pas d'une observation automatique de toutes les activités manuelles/serveurs. La commande elle-même ne modifie pas la marque.
return RunScenario();
object? RunScenario()
{
var stamp = UO.TicksSpell();
var ageTenths = UO.Timer() - stamp;
UO.Print(ageTenths);
return null;
}Paramètres et déroulement de l’exécution :
- UO.Timer() - la marque calcule l'âge en dixièmes de seconde. Les marques ne sont pas comparées entre les différentes exécutions.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
var before = UO.TicksSpell();
UO.Wait(250);
var after = UO.TicksSpell();
UO.Print(before = after);
return null;
}
}C# distingue les majuscules. Utilisez le nom UO exact. Comparez les indicateurs numériques à 0 ; utilisez bool seulement si la signature renvoie bool.
Paramètres: Aucun paramètre.
Résultat: int / Integer.
Pendant un appel:
Code interne de l’implémentation ; ce n’est pas un script autonome.
public int TicksSpell() => ticksSpell;ClassicUO — Bad Newbie & C# Scripts IDE