Repository navigation
FR UO Topic character Part 2
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
Accueil · C# · IDE · UO API · A–Z · Exemples · Langues
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.GetEquipment(object? id);Lit la liste des équipements sur les couches d'objets non nulles.
-
id— Série/ID d'un objet spécifique : int, chaîne décimale/hexadécimale ou alias défini self, backpack, lasttarget, lastobject ou nom AddObject. Ce n'est pas graphic/type. Les lignes my/backpack sélectionnent le sac à dos. Seuls les terrains sélectionnés explicites 0, "0" ou "ground". Un alias inconnu, un sac à dos manquant, un ID négatif ou un type de valeur inapproprié génèrent un tableau vide.
Tableau - serial de chaque élément dont le conteneur est ID et la couche n'est pas égale à Invalid. Pour ground/0, un tableau vide est renvoyé. Sans entrées, un tableau vide est renvoyé. La liste contient ID, pas type et aucun calque.
- Les données déjà téléchargées par le client sont lues. La commande n'ouvre pas le conteneur, ne déplace pas les éléments et ne télécharge pas les objets depuis l'ensemble du serveur.
- Array - tableau avec des indices commençant à 0. Enregistrez-le dans var, vérifiez ArrayLength avant d'y accéder. Des éléments peuvent disparaître du monde après avoir pris un instantané : vérifiez Exists(serial) avant d'agir.
- Il n'y a pas de parcours récursif de sacs imbriqués, de tri à distance, de filtre Ignore ou FindDistance/FindVertical. L'instantané FindType habituel reste inchangé.
- GetEquipment(self) inclut le sac à dos et d'autres couches non nulles connues ; Le simple fait d’avoir une couche ne signifie pas qu’une arme ou une armure soit portée. GetContent(self) peut inclure de l'équipement car son parent est un personnage.
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.GetEquipment("self");
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Paramètres et déroulement de l’exécution :
- ID="self" - le personnage actuel, ses éléments directs avec une couche non nulle sont sélectionnés.
- Longueur - nombre d'enregistrements/ID. Ce n'est pas le montant du montant en piles. La liste vide donne 0.
var items = UO.GetEquipment("self");
UO.Print(Convert.ToString(ArrayLength(items)));
int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;Paramètres et déroulement de l’exécution :
- ID="self" - le personnage actuel, ses éléments directs avec une couche non nulle sont sélectionnés.
- items[i] — numérique serial. Hex est utilisé uniquement pour la sortie. La boucle n'accède pas au dernier index.
return RunScenario();
object? RunScenario()
{
var items = UO.GetEquipment("self");
var i = 0;
while (Truth(i < ArrayLength(items)))
{
UO.Print("0x" + Hex(items[i]));
i = i + 1;
}
return null;
}
int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;
string Hex(object? value) => Convert.ToInt64(value).ToString("X");
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Paramètres et déroulement de l’exécution :
- ID="self" - le personnage actuel, ses éléments directs avec une couche non nulle sont sélectionnés.
- Deux choses différentes sont vérifiées : l'enregistrement dans l'instantané et l'existence actuelle de l'objet. Ordre sans tri explicite ne signifie pas proximité.
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 items = UO.GetEquipment("self");
if (Truth(ArrayLength(items) > 0))
{
var first = items[0];
if (Truth(UO.Exists(first)))
{
UO.Print(UO.GetName(first));
}
}
else
{
UO.Print("Empty list");
}
return null;
}
int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}C# distingue les majuscules. Utilisez le nom UO exact. Comparez les indicateurs numériques à 0 ; utilisez bool seulement si la signature renvoie bool.
Paramètres: id (Any)
Résultat: dynamic / Any.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Text:Text(0). -
InjectionScript.Runtime.NumberConversions.TryStr2Int:NumberConversions.TryStr2Int(text, out int literal). -
InjectionScript.Runtime.InjectionApiUO.GetObject:GetObject(text). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetEquipment:bridge.GetEquipment(container). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetContent:bridge.GetContent(container). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Backpack:bridge.Backpack.
Code interne de l’implémentation ; ce n’est pas un script autonome.
case "getcontent":
case "getequipment":
{
InjectionValue selection = arguments[0];
bool ground = false, explicitZero;
int container;
if (selection.Kind == InjectionValueKind.String)
{
string text = Text(0).Trim();
ground = text.Equals("ground", StringComparison.OrdinalIgnoreCase);
explicitZero = NumberConversions.TryStr2Int(text, out int literal) && literal == 0;
container = ground ? 0 : text.Equals("my", StringComparison.OrdinalIgnoreCase)
? bridge.Backpack : GetObject(text);
}
else
{
if (selection.Kind != InjectionValueKind.Integer && selection.Kind != InjectionValueKind.Decimal)
return new InjectionValue(Array.Empty<InjectionValue>());
container = Arg(0);
explicitZero = selection.Kind == InjectionValueKind.Integer ? selection.Integer == 0 : selection.Decimal == 0d;
}
// Only an explicit ground/zero selector may query world items.
if (container < 0 || container == 0 && !ground && !explicitZero)
return new InjectionValue(Array.Empty<InjectionValue>());
bool equipment = name.Equals("GetEquipment", StringComparison.OrdinalIgnoreCase);
int[] items = equipment
? container == 0 ? Array.Empty<int>() : bridge.GetEquipment(container)
: bridge.GetContent(container);
return new InjectionValue(items.Select(serial => new InjectionValue(serial)).ToArray());
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.GetFireResist();Lit le champ de résistance du personnage actuel : le feu.
Il n'y a pas de paramètres.
int est la valeur d'état signée, -32768..32767 dans le modèle client. La valeur négative est conservée. 0 peut être une réelle résistance, un manque de données ou un joueur manquant/détruit ; GetResist donne également 0 pour un sélecteur inconnu. Ce n'est pas bool, ID, une limite de compétence ou de résistance. 1 signifie un point, pas un succès.
- La commande ne prend aucun argument. Utilisez les signatures exactes ci-dessus.
- La lecture sur le fil de jeu prend Player.FireResistance si le joueur actuel existe et n'a pas été détruit ; sinon 0. L'équipement n'est pas trié, les bonus ne sont pas recalculés, le statut n'est pas demandé et il n'y a pas d'attente de mises à jour. Un fantôme présent n'est pas égal à un joueur détruit.
- Les champs élémentaires sont disponibles en CharacterStatus étendu (0x11), type >= 4. La commande elle-même ne vérifie pas l'époque du serveur. Le statut Compact/ancien sans ces champs quitte le cache précédent ; Le nouveau joueur est initialement 0. La résistance au poison n'est pas un drapeau Poisoned ; Ce n'est pas non plus une compétence de Résistance aux Sorts.
- CharacterStatus vérifie le corps requis avant de changer le nom, la santé et les propres caractéristiques, puis traduit chaque mot de résistance en un Int16 signé. Un corps obligatoire tronqué ne modifie pas les données précédentes. Le type de queue facultatif 6 conserve les mêmes règles ; les commandes de résistance n'en lisent pas les limites maximales.
- Chaque appel lit à nouveau les données locales. La variable stocke l'instantané ; les lectures individuelles peuvent recevoir différentes mises à jour du serveur. Un résultat non nul ne teste pas la connexion. Zéro peut être une valeur ou aucune donnée.
- Ces fonctions enregistrent l’API. Elles ne sont pas exécutées à nouveau pour chaque appel de commande. C# distingue les majuscules. Utilisez le nom UO exact. Comparez les indicateurs numériques à 0 ; utilisez bool seulement si la signature renvoie bool.
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.GetFireResist();
UO.Print("GetFireResist: " + Convert.ToString(result));Paramètres et déroulement de l’exécution :
- value stocke le résultat d’un appel. Convert.ToString formate le numéro du journal. Il n'y a pas d'arguments : vous pouvez lire votre propre personnage.
var value = UO.GetFireResist();
UO.Print("FireResistance: " + Convert.ToString(value));Paramètres et déroulement de l’exécution :
- Entre avant et après, il y a UO.Wait(500) millisecondes ; la différence peut être négative. Les mises à jour intermédiaires peuvent être manquées. La pause fait référence à l'exemple, pas au délai API.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var before = UO.GetFireResist();
await Delay(500);
var after = UO.GetFireResist();
var difference = after - before;
UO.Print("Resistance change: " + Convert.ToString(difference));
return null;
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));Paramètres et déroulement de l’exécution :
- minimum=50 est un exemple d'exigence, pas de limite client. ResistanceAtLeast rejette le Player manquant, lit une valeur et renvoie bool : true ou false si valeur >= minimum. The resistance itself is not bool. La fonction est entièrement déclarée ci-dessous.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
if (Truth(Truth(ResistanceAtLeast(50)) == true))
{
UO.Print("Local resistance requirement met");
}
else
{
UO.Print("Requirement not met or no player");
}
return null;
}
dynamic ResistanceAtLeast(dynamic minimum)
{
if (Truth(UO.Self() == 0))
{
return false;
}
var value = UO.GetFireResist();
return value >= minimum;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}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:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCharacterGetterAliases [GetFireResist]. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.FireResistance:bridge.FireResistance.
L’appel exécute le delegate du gestionnaire enregistré. La méthode d’enregistrement crée ce delegate lors de la construction de l’API.
Code interne de l’implémentation ; ce n’est pas un script autonome.
() => bridge.FireResistanceCréation de l’API: Ces fonctions enregistrent l’API. Elles ne sont pas exécutées à nouveau pour chaque appel de commande.
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.GetFlying();
int UO.GetFlying(object? value);Vérifie si le personnage vole actuellement. Ceci est généralement nécessaire pour Gargoyle : par exemple, avant de démarrer un itinéraire ou avant de demander l'autorisation d'un vol. Répond à la question « Mon personnage vole-t-il maintenant ? » sans argument. La commande lit uniquement l'état : elle ne permet pas de voler, d'atterrir ou de déplacer le personnage.
-
value- Caractère serial facultatif : nombre, chaîne hexadécimale, self, lasttarget ou nom stocké via UO.AddObject. Sans argument, votre personnage est utilisé. Il s'agit de ID du mobile spécifique, pas de graphic/type et non de la coordonnée de Z. Un nom inconnu, un mobile manquant/supprimé ou un élément donne 0.
Flag numérique int : 1 (condition remplie), 0 (condition non remplie). Il s'agit d'un indicateur numérique : dans C#, vérifiez le résultat != 0 ou le résultat == 0. La comparaison directe de int avec true/false et if (résultat) n'est pas autorisée. 1 - mobile a IsFlying, 0 n'a pas d'indicateur ou mobile est manquant. L'altitude Z en elle-même ne signifie pas un vol.
Le résultat de la commande est un indicateur numérique : 1 signifie une condition remplie, 0 signifie une condition non remplie. Après var result = command(...) vérifiez si (result != 0) ou if (result == 0). Enregistrez le résultat d'un appel : un appel répété peut effectuer à nouveau l'action ou lire l'état qui a déjà changé.
- La principale application du jeu est le vol de Gargoyle. Cependant, le getter ne vérifie pas la course : dans ce client, il lit le bit 0x04 du mobile avec la version de protocole 7.0.0.0 et plus récente. Sur l'ancien protocole, il renvoie 0. Se tenir sur un toit, un Z élevé, des animations d'ailes ou la course de gargouilles elle-même ne sont pas des preuves de vol activées.
- Il existe un UO.ToggleFly() distinct pour changer d'état : il envoie une demande de commutation plutôt qu'une commande "allumer". Si vous êtes déjà en vol, un appel répété demande l'atterrissage. Le serveur peut échouer ; après y avoir été invité, relisez Flying avec une attente limitée. false est également possible sans personnage/données disponibles, alors vérifiez Connected avant de jouer l'action.
- Lit le modèle local : n'ouvre pas la cible, ne demande pas de statut, ne modifie pas l'indicateur et n'envoie pas le paquet. Un objet détruit est considéré comme manquant avant même que l'entrée ne soit supprimée du dictionnaire.
- Le résultat est une lecture séparée. Le monde peut changer entre Exists et le prochain défi ; plusieurs requêtes ne forment pas un instantané atomique.
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.GetFlying();
UO.Print("GetFlying: " + Convert.ToString(result));Paramètres et déroulement de l’exécution :
- Les parenthèses vides indiquent self. true est égal à 1, false est égal à 0 ; si UO.Flying() { ... } est acceptable. Cet exemple ne change rien.
var active = UO.GetFlying();
if (Truth(Truth(active) == true))
{
UO.Print("Flying mode active");
}
else
{
UO.Print("Ground mode or character data unavailable");
}
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 :
- ReadState(obj) prend serial/alias et renvoie l'état. La définition complète est ci-dessous ; l'absence d'objet est traitée avant la lecture. Le caractère de quelqu'un d'autre est également vérifié par rapport aux données déjà reçues par le client.
return RunScenario();
object? RunScenario()
{
var target = Asc(UO.GetSerial("lasttarget"), 0);
if (Truth(target != 0) && Truth(UO.Exists(target)))
{
if (Truth(ReadState(target)))
{
UO.AddObject("flying_mobile", target);
}
}
return null;
}
dynamic ReadState(dynamic obj)
{
if (!(Truth(UO.Exists(obj))))
{
return false;
}
return UO.GetFlying(obj);
}
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;
}
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 :
- L'exemple concerne votre Gargouille sur un serveur prenant en charge le vol. EnsureFlight(timeoutMs) renvoie 1/true si un vol est observé, sinon 0/false. 2000 — limite d'attente en millisecondes ; vérifie toutes les 50 ms. Si vous êtes déjà en vol, ToggleFly n'est pas appelé. Au maximum une demande est envoyée, puis l'état de la réponse est vérifié. Le délai de pause/planification du script peut augmenter le temps réel.
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()
{
if (Truth(await EnsureFlight(2000)))
{
UO.Print("Flight confirmed; ready for the next stage");
}
else
{
UO.Print("Flight not confirmed; route was not started");
}
return null;
}
async Task<dynamic> EnsureFlight(dynamic timeoutMs)
{
if (!(Truth(UO.Connected())) || Truth(UO.Dead()))
{
return false;
}
if (Truth(UO.GetFlying()))
{
return true;
}
UO.ToggleFly();
var waited = 0;
while (Truth(waited < timeoutMs))
{
if (!(Truth(UO.Connected())))
{
return false;
}
if (Truth(UO.GetFlying()))
{
return true;
}
await Delay(50);
waited += 50;
}
return UO.GetFlying();
}
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: Aucun paramètre.
Résultat: int / Integer.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCharacterGetterAliases [GetFlying]. -
InjectionScript.Runtime.InjectionApiUO.RegisterCharacterGetterAliases. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Flying:bridge.Flying(serial). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Self:bridge.Self.
L’appel exécute le delegate du gestionnaire enregistré. La méthode d’enregistrement crée ce delegate lors de la construction de l’API.
Code interne de l’implémentation ; ce n’est pas un script autonome.
serial => bridge.Flying(serial)Code interne de l’implémentation ; ce n’est pas un script autonome.
() => getter(bridge.Self)Création de l’API: Ces fonctions enregistrent l’API. Elles ne sont pas exécutées à nouveau pour chaque appel de commande.
Paramètres: value (Any)
Résultat: int / Integer.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCharacterGetterAliases [GetFlying]. -
InjectionScript.Runtime.InjectionApiUO.RegisterCharacterGetterAliases. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Flying:bridge.Flying(serial). -
InjectionScript.Runtime.InjectionApiUO.GetObject:GetObject(value).
L’appel exécute le delegate du gestionnaire enregistré. La méthode d’enregistrement crée ce delegate lors de la construction de l’API.
Code interne de l’implémentation ; ce n’est pas un script autonome.
serial => bridge.Flying(serial)Code interne de l’implémentation ; ce n’est pas un script autonome.
value => getter(GetObject(value))Création de l’API: Ces fonctions enregistrent l’API. Elles ne sont pas exécutées à nouveau pour chaque appel de commande.
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.GetFrozen();
int UO.GetFrozen(object? value);Vérifie l'indicateur de paralysie du personnage connu du client.
-
value- Facultatif serial/ID mobile : nombre, chaîne hexadécimale, self, lasttarget ou autre nom d'objet standard ou nom AddObject. Ce n'est pas graphic/type. Sans argument, self est utilisé. Le nom inconnu est résolu dans 0 ; la cible ne s'ouvre pas.
Indicateur numérique int : 1 (condition remplie) - mobile chargé a l'indicateur IsParalyzed ; 0 (condition non remplie) - aucun indicateur, mobile inconnu, supprimé ou l'objet est un élément. Ce n'est pas une période de paralysie et ne garantit pas la capacité de se déplacer avec un résultat de 0.
- Utilisez Paralyzed pour vérifier le drapeau de paralysie. Les options Is/Get, GetParalisa, Frozen et GetLocked lisent le même indicateur.
- La commande lit uniquement les données locales. Il n'applique ni ne supprime la paralysie, n'attend pas sa fin et n'envoie pas de demande de mise à jour au serveur.
- Le résultat de cette commande est de type int : utilisez if (value != 0) ou if (value == 0). Les comparaisons directes avec true/false et if (valeur) dans C# ne sont pas autorisées. La valeur préserve la signification du drapeau, pas la quantité ou ID.
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.GetFrozen();
UO.Print("GetFrozen: " + Convert.ToString(result));Paramètres et déroulement de l’exécution :
- Les parenthèses vides sélectionnent self. state stocke un instantané du drapeau ; true est la constante numérique 1.
- Un résultat de false n'exclut pas un mur, un manque d'endurance ou toute autre raison d'arrêt.
var state = UO.GetFrozen();
if (Truth(Truth(state) == true))
{
UO.Print("Paralysis flag is set");
}
else
{
UO.Print("Paralysis flag is absent or unavailable");
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Paramètres et déroulement de l’exécution :
- target stocke la chaîne hexadécimale serial de la dernière cible. IsNpc vérifie qu'il s'agit du mobile chargé, y compris les joueurs.
- La commande avec l'argument lit target. Elle ne choisit pas de nouveau personnage et ne change pas lasttarget.
return RunScenario();
object? RunScenario()
{
var target = UO.GetSerial("lasttarget");
if (Truth(UO.IsNPC(target)))
{
var state = UO.GetFrozen(target);
UO.Print("Selected mobile paralysis 1/0: " + Convert.ToString(state));
}
else
{
UO.Print("No loaded mobile selected");
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Paramètres et déroulement de l’exécution :
- Pas plus de 10 pauses pendant 100 ms. Chaque appel sans argument lit à nouveau self.
- Après le cycle, la présence de self est vérifiée séparément. Il s'agit d'une observation pendant environ une seconde plus l'exécution des commandes, et non d'une suppression garantie de la paralysie.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
async public Task<object?> RunScenarioAsync()
{
var attempts = 0;
while (Truth(Truth(UO.GetFrozen()) == true) && Truth(attempts < 10))
{
await Delay(100);
attempts = attempts + 1;
}
if (Truth(UO.IsNPC("self")))
{
if (Truth(Truth(UO.GetFrozen()) == false))
{
UO.Print("Paralysis flag is clear");
}
else
{
UO.Print("Still paralyzed");
}
}
else
{
UO.Print("Self is unavailable");
}
return null;
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}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:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCharacterGetterAliases [GetFrozen]. -
InjectionScript.Runtime.InjectionApiUO.RegisterCharacterGetterAliases. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetLocked:bridge.GetLocked(serial). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Self:bridge.Self.
L’appel exécute le delegate du gestionnaire enregistré. La méthode d’enregistrement crée ce delegate lors de la construction de l’API.
Code interne de l’implémentation ; ce n’est pas un script autonome.
serial => bridge.GetLocked(serial)Code interne de l’implémentation ; ce n’est pas un script autonome.
() => getter(bridge.Self)Création de l’API: Ces fonctions enregistrent l’API. Elles ne sont pas exécutées à nouveau pour chaque appel de commande.
Paramètres: value (Any)
Résultat: int / Integer.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCharacterGetterAliases [GetFrozen]. -
InjectionScript.Runtime.InjectionApiUO.RegisterCharacterGetterAliases. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetLocked:bridge.GetLocked(serial). -
InjectionScript.Runtime.InjectionApiUO.GetObject:GetObject(value).
L’appel exécute le delegate du gestionnaire enregistré. La méthode d’enregistrement crée ce delegate lors de la construction de l’API.
Code interne de l’implémentation ; ce n’est pas un script autonome.
serial => bridge.GetLocked(serial)Code interne de l’implémentation ; ce n’est pas un script autonome.
value => getter(GetObject(value))Création de l’API: Ces fonctions enregistrent l’API. Elles ne sont pas exécutées à nouveau pour chaque appel de commande.
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.GetGold();Lit la quantité d'or à partir du statut actuel du personnage.
Il n'y a pas de paramètres.
int/double est la somme non négative 0..4294967295. Jusqu'à 2147483647 inclus, int est renvoyé, au-dessus de double (Double), représentant exactement tout entier non signé de 32 bits. 0 signifie également qu'il n'y a actuellement aucun joueur non supprimé ni aucun montant reçu. Ce n'est pas bool, ID, le nombre de piles ou le contournement du sac à dos/banque.
- Il n'y a pas de paramètres. Lit le cache Player.Gold à partir de CharacterStatus (0x11). Le serveur détermine quel or est inclus dans son compteur ; l'équipe ne fouille pas les sacs et ne demande pas les soldes bancaires. Joueur non/détruit - 0 ; un cadeau fantôme peut maintenir un montant de statut.
- ReadGoldValue lit bridge.Gold une fois. L'ancien pont C# conserve la signature Int32 et transmet les bits UInt32. une conversion non vérifiée restaure la somme non signée ; un petit montant se transforme en int, un grand montant en double. Le bit le plus significatif ne rend plus le solde négatif. La conversion est locale, il n'y a pas de packages.
- Chaque appel lit à nouveau les données locales. La variable stocke l'instantané ; les lectures individuelles peuvent recevoir différentes mises à jour du serveur. Un résultat non nul ne teste pas la connexion. Zéro peut être une valeur ou aucune donnée.
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.GetGold();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Paramètres et déroulement de l’exécution :
- montant stocke un résultat ; Convert.ToString le formate pour le magazine. L’or n’est ni recherché, ni transporté, ni dépensé.
var amount = UO.GetGold();
UO.Print("Status gold: " + Convert.ToString(amount));Paramètres et déroulement de l’exécution :
- price=3000000000.0 est un exemple de prix, pas la limite. CanAfford(price) rejette un prix négatif ou aucun joueur, lit le montant une fois et renvoie bool : true ou false si montant >= prix. The amount itself is not bool. La fonction est entièrement définie ci-dessous.
return RunScenario();
object? RunScenario()
{
var price = 3000000000.0;
if (Truth(Truth(CanAfford(price)) == true))
{
UO.Print("Local balance is sufficient");
}
else
{
UO.Print("Local check failed");
}
return null;
}
dynamic CanAfford(dynamic price)
{
if (Truth(price < 0) || Truth(UO.Self() == 0))
{
return false;
}
var amount = UO.GetGold();
return amount >= price;
}
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 :
- before/after separates UO.Wait(500) milliseconds. différence=après-avant peut être négatif lorsque le solde diminue ; This is not a fixed unsigned counter overflow. Les mises à jour intermédiaires et les changements de personnages peuvent être manqués.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
async public Task<object?> RunScenarioAsync()
{
var before = UO.GetGold();
await Delay(500);
var after = UO.GetGold();
var difference = after - before;
UO.Print("Balance change: " + Convert.ToString(difference));
return null;
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
}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: dynamic / Any.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.ReadGoldValue. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Gold:bridge.Gold.
Code interne de l’implémentation ; ce n’est pas un script autonome.
private InjectionValue ReadGoldValue()
{
// The existing bridge carries all 32 unsigned status-counter bits in
// an Int32. Keep small results Integer; Double exactly represents
// every UInt32 and avoids returning a negative large gold amount.
uint amount = unchecked((uint)bridge.Gold);
return amount <= int.MaxValue ? new InjectionValue((int)amount)
: new InjectionValue((double)amount);
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.GetHP();
int UO.GetHP(object? id);Lit l’état de santé actuel à partir du modèle local.
-
id— Objet facultatif sous les formes affichées : serial par numéro/chaîne hexadécimale, self, lasttarget ou nom enregistré AddObject. Ce n'est pas type. Sans argument, lisez self. Un texte inconnu dans certains formulaires provoque une erreur de conversion ; vérifiez le nom avant d'appeler.
int est la valeur du champ Hits, pas le pourcentage et non bool. 0 peut être une valeur réelle ou une indication de données manquantes. Le maximum zéro ne peut pas être utilisé comme diviseur. Pour le mobile de quelqu'un d'autre, les significations peuvent être inconnues. HP/HitsMax peut contenir une échelle relative du serveur au lieu de points exacts. HP=0 ne prouve pas la mort ; il y a Dead/IsDead pour ça.
- La commande n'ouvre pas le statut et ne demande pas de mise à jour du serveur. Le client lit uniquement les données déjà chargées. Ne change pas les caractéristiques et n'envoie pas de paquets.
- Le résultat est une lecture séparée. Le monde peut changer entre Exists et le prochain défi ; plusieurs requêtes ne forment pas un instantané atomique.
- Lors de la lecture d'un objet, World.Get rejette le ou IsDestroyed manquant et aboutit à 0. HP/HitsMax sont lus à partir de l'Entité, y compris les éléments avec ces champs ; Mana/Stamina - uniquement pour mobile. Sans argument, lisez self. La variante du même nom sans paramètres n'a pas forcément de variante avec ID : voir signatures.
- La lecture sans arguments renvoie également 0 pour un joueur manquant ou détruit. Cela s'applique aux directs Mana/Stamina et à leurs maxima, pas seulement aux formulaires via World.Get. Un personnage mort présent peut conserver des valeurs.
int hp = UO.GetHP();
UO.Print($"HP = {hp}");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.GetHP();
UO.Print("GetHP: " + Convert.ToString(result));Paramètres et déroulement de l’exécution :
- L'appel sans arguments se lit self. value stocke un nombre, Convert.ToString le convertit uniquement pour le message.
var value = UO.GetHP();
UO.Print("GetHP: " + Convert.ToString(value));Paramètres et déroulement de l’exécution :
- Le seuil ou le calcul appliqué pour ce champ est affiché. Les nombres dans la condition sont des exemples de paramètres et non des limites du serveur. Avant de diviser par le maximum, sa positivité est vérifiée.
return RunScenario();
object? RunScenario()
{
var value = UO.GetHP();
var maximum = UO.GetMaxHP();
if (Truth(maximum > 0) && Truth(value * 100 / maximum < 50))
{
UO.Print("Health below half of the known maximum");
}
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 :
- lasttarget — objet précédemment sélectionné ; Exists vérifie la disponibilité. obj est le seul paramètre de ReadValue. La fonction renvoie le numéro de commande inchangé et est donné dans son intégralité.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
if (Truth(UO.Exists("lasttarget")))
{
var value = ReadValue("lasttarget");
UO.Print("Selected value: " + Convert.ToString(value));
}
return null;
}
dynamic ReadValue(dynamic obj)
{
return UO.GetHP(obj);
}
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: Aucun paramètre.
Résultat: int / Integer.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.GetHP. -
InjectionScript.Runtime.InjectionApiUO.GetHP:GetHP("self").
Code interne de l’implémentation ; ce n’est pas un script autonome.
public int GetHP() => GetHP("self");Paramètres: id (Any/Integer/String)
Résultat: int / Any.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetHP:bridge.GetHP(Arg(0, bridge.Self)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0, bridge.Self). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Self:bridge.Self.
Code interne de l’implémentation ; ce n’est pas un script autonome.
case "gethp": return new InjectionValue(bridge.GetHP(Arg(0, bridge.Self)));Paramètres: id (Any/Integer/String)
Résultat: int / Integer.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.GetHP. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetHP:bridge.GetHP(id).
Code interne de l’implémentation ; ce n’est pas un script autonome.
public int GetHP(int id) => bridge.GetHP(id);Paramètres: id (Any/Integer/String)
Résultat: int / Integer.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.GetHP. -
InjectionScript.Runtime.InjectionApiUO.GetHP:GetHP(GetObject(id)). -
InjectionScript.Runtime.InjectionApiUO.GetObject:GetObject(id).
Code interne de l’implémentation ; ce n’est pas un script autonome.
public int GetHP(string id) => GetHP(GetObject(id));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.GetHidden();
int UO.GetHidden(object? value);Teste la furtivité du personnage.
-
value— Objet facultatif sous les formes affichées : serial par numéro/chaîne hexadécimale, self, lasttarget ou nom enregistré AddObject. Ce n'est pas type. Sans argument, lisez self. Un texte inconnu dans certains formulaires provoque une erreur de conversion ; vérifiez le nom avant d'appeler.
Flag numérique int : 1 (condition remplie), 0 (condition non remplie). Il s'agit d'un indicateur numérique : dans C#, vérifiez le résultat != 0 ou le résultat == 0. La comparaison directe de int avec true/false et if (résultat) n'est pas autorisée. 1 - mobile a IsHidden, 0 n'a pas d'indicateur ou mobile est manquant. Il s'agit d'un drapeau de serveur, pas d'une visibilité derrière un mur.
Le résultat de la commande est un indicateur numérique : 1 signifie une condition remplie, 0 signifie une condition non remplie. Après var result = command(...) vérifiez si (result != 0) ou if (result == 0). Enregistrez le résultat d'un appel : un appel répété peut effectuer à nouveau l'action ou lire l'état qui a déjà changé.
- Lit le modèle local : n'ouvre pas la cible, ne demande pas de statut, ne modifie pas l'indicateur et n'envoie pas le paquet. Un objet détruit est considéré comme manquant avant même que l'entrée ne soit supprimée du dictionnaire.
- Le résultat est une lecture séparée. Le monde peut changer entre Exists et le prochain défi ; plusieurs requêtes ne forment pas un instantané atomique.
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.GetHidden();
UO.Print("GetHidden: " + Convert.ToString(result));Paramètres et déroulement de l’exécution :
- Les parenthèses vides indiquent self. active enregistre le résultat une fois ; true et false définissent deux branches. Print affiche uniquement un exemple de message.
var active = UO.GetHidden();
if (Truth(Truth(active) == true))
{
UO.Print("State is active");
}
else
{
UO.Print("State is inactive or unavailable");
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Paramètres et déroulement de l’exécution :
- lasttarget – objet précédemment sélectionné. Exists vérifie sa présence. obj est le seul paramètre ReadState ; la fonction renvoie le résultat de la commande sans modification. Sa définition est incluse dans le code copié.
return RunScenario();
object? RunScenario()
{
if (Truth(UO.Exists("lasttarget")))
{
var observed = ReadState("lasttarget");
UO.Print("State 1/0: " + Convert.ToString(observed));
}
return null;
}
dynamic ReadState(dynamic obj)
{
return UO.GetHidden(obj);
}
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 :
- Deux appels sans arguments lisent self, UO.Wait(500) définit 500 millisecondes. Deux images sont comparées ; les transitions intermédiaires peuvent être ignorées. Il n’y a pas d’attente interminable.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
async public Task<object?> RunScenarioAsync()
{
var before = UO.GetHidden();
await Delay(500);
var after = UO.GetHidden();
if (Truth(before != after))
{
UO.Print("State changed: " + Convert.ToString(before) + " -> " + Convert.ToString(after));
}
return null;
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}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:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCharacterGetterAliases [GetHidden]. -
InjectionScript.Runtime.InjectionApiUO.RegisterCharacterGetterAliases. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Hidden:bridge.Hidden(serial). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Self:bridge.Self.
L’appel exécute le delegate du gestionnaire enregistré. La méthode d’enregistrement crée ce delegate lors de la construction de l’API.
Code interne de l’implémentation ; ce n’est pas un script autonome.
serial => bridge.Hidden(serial)Code interne de l’implémentation ; ce n’est pas un script autonome.
() => getter(bridge.Self)Création de l’API: Ces fonctions enregistrent l’API. Elles ne sont pas exécutées à nouveau pour chaque appel de commande.
Paramètres: value (Any)
Résultat: int / Integer.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCharacterGetterAliases [GetHidden]. -
InjectionScript.Runtime.InjectionApiUO.RegisterCharacterGetterAliases. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Hidden:bridge.Hidden(serial). -
InjectionScript.Runtime.InjectionApiUO.GetObject:GetObject(value).
L’appel exécute le delegate du gestionnaire enregistré. La méthode d’enregistrement crée ce delegate lors de la construction de l’API.
Code interne de l’implémentation ; ce n’est pas un script autonome.
serial => bridge.Hidden(serial)Code interne de l’implémentation ; ce n’est pas un script autonome.
value => getter(GetObject(value))Création de l’API: Ces fonctions enregistrent l’API. Elles ne sont pas exécutées à nouveau pour chaque appel de commande.
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.GetInt();
int UO.GetInt(object? objID);Lit l'intelligence actuelle (Intelligence, INT) du personnage.
-
objID— ObjID sous la forme affichée uniquement, avec un argument : serial numéro de caractère, chaîne hexadécimale/0x, "self", "lasttarget" ou nom AddObject. Sélectionne un objet autre que graphic/type. Sans argument, le caractère actuel est lu.
int — points de statistiques actuels, 0..65535 dans le modèle client ; pas de pourcentage, ID, compétence, mode de verrouillage ou bool. 0 signifie également un caractère manquant/supprimé ou un objet inaccessible. Comparez avec l'exigence numérique, pas == true. Il ne s’agit pas d’un plafond statistique ou d’une valeur de base garantie sans modificateurs.
- Sont pris en charge () pour self et (ObjID) pour un objet explicite. Il n'y a pas d'autres arguments facultatifs.
- Lit Player.Intelligence si le joueur existe et n'a pas été détruit ; sinon 0. Un personnage mort présent n'est pas un objet supprimé. La statistique n'est pas calculée à partir de HP, de mana ou d'endurance.
- GetStr/GetInt/GetDex acceptent ObjID. Les données PlayerMobile ne sont disponibles que pour self ; pour un autre serial - 0, même pour un mobile chargé. Les caractéristiques de quelqu'un d'autre ne sont ni substituées ni devinées.
- Invoke lit sur le flux du jeu avec la possibilité d'annuler l'attente par script. N'interroge pas l'état, n'ouvre pas la cible, n'envoie pas de paquet, ne modifie pas les caractéristiques et n'ajoute pas de délai.
- Chaque appel lit à nouveau les données locales. La variable stocke l'instantané ; les lectures individuelles peuvent recevoir différentes mises à jour du serveur. Un résultat non nul ne teste pas la connexion. Zéro peut être une valeur ou aucune donnée.
- C# distingue les majuscules. Utilisez le nom UO exact. Comparez les indicateurs numériques à 0 ; utilisez bool seulement si la signature renvoie bool.
UO.Int(),UO.Intelligence(),UO.GetInt(),UO.GetIntelligence(). - ExecuteClientApiCompatibility.Arg résout d'abord le nom de l'objet, puis convertit le numéro. Une chaîne non numérique inconnue provoque une erreur de conversion, pas une cible. double est réduit à int, Array/void est réduit à 0. Pour sélectionner un caractère, utilisez le bon serial, pas de telles transformations.
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.GetInt();
UO.Print("GetInt: " + Convert.ToString(result));Paramètres et déroulement de l’exécution :
- value stocke le résultat numérique ; Convert.ToString le formate simplement pour le magazine. Il n'y a pas d'arguments ni d'actions de personnages.
var value = UO.GetInt();
UO.Print("Intelligence: " + Convert.ToString(value));Paramètres et déroulement de l’exécution :
- avant et après 1000 ms séparés ; UO.Wait ajouté à l'exemple. change=after-before peut être positif, nul ou négatif. En soi, il ne fait pas la distinction entre toutes les mises à jour intermédiaires et la sortie du monde.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var before = UO.GetInt();
await Delay(1000);
var after = UO.GetInt();
var change = after - before;
UO.Print("Change: " + Convert.ToString(change));
return null;
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));Paramètres et déroulement de l’exécution :
- minimum=80 est un exemple d'exigence, pas de limite client. AttributeAtLeast(minimum) rejette le caractère manquant, lit une fois la caractéristique et renvoie bool : true ou false si >= minimum. La signification logique est donnée par la comparaison et non par la caractéristique elle-même.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
if (Truth(Truth(AttributeAtLeast(80)) == true))
{
UO.Print("Requirement met");
}
else
{
UO.Print("Requirement not met or no player");
}
return null;
}
dynamic AttributeAtLeast(dynamic minimum)
{
if (Truth(UO.Self() == 0))
{
return false;
}
var value = UO.GetInt();
return value >= minimum;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}Paramètres et déroulement de l’exécution :
- id est le résultat de UO.Self(), pas le type. AddObject stocke ID sous la forme statSubject sans portée car le deuxième argument est spécifié. Les deux appels sélectionnent le même caractère, mais les lectures ne sont pas atomiques.
var id = UO.Self();
if (Truth(id != 0))
{
UO.AddObject("statSubject", id);
var direct = UO.GetInt(id);
var byName = UO.GetInt("statSubject");
UO.Print("Direct: " + Convert.ToString(direct) + "; alias: " + Convert.ToString(byName));
}
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: Aucun paramètre.
Résultat: int / Integer.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCharacterGetterAliases [GetInt]. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Intelligence:bridge.Intelligence.
L’appel exécute le delegate du gestionnaire enregistré. La méthode d’enregistrement crée ce delegate lors de la construction de l’API.
Code interne de l’implémentation ; ce n’est pas un script autonome.
() => bridge.IntelligenceCréation de l’API: Ces fonctions enregistrent l’API. Elles ne sont pas exécutées à nouveau pour chaque appel de commande.
Paramètres: objID (Any)
Résultat: int / Integer.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetIntelligence:bridge.GetIntelligence(Arg(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Intelligence:bridge.Intelligence.
Code interne de l’implémentation ; ce n’est pas un script autonome.
case "getint": return new InjectionValue(arguments.Length > 0 ? bridge.GetIntelligence(Arg(0)) : bridge.Intelligence);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.GetIntelligence();Lit l'intelligence actuelle (Intelligence, INT) du personnage.
Il n'y a pas de paramètres.
int — points de statistiques actuels, 0..65535 dans le modèle client ; pas de pourcentage, ID, compétence, mode de verrouillage ou bool. 0 signifie également un caractère manquant/supprimé ou un objet inaccessible. Comparez avec l'exigence numérique, pas == true. Il ne s’agit pas d’un plafond statistique ou d’une valeur de base garantie sans modificateurs.
- La commande ne prend aucun argument. Utilisez les signatures exactes ci-dessus.
- Lit Player.Intelligence si le joueur existe et n'a pas été détruit ; sinon 0. Un personnage mort présent n'est pas un objet supprimé. La statistique n'est pas calculée à partir de HP, de mana ou d'endurance.
- GetStr/GetInt/GetDex acceptent ObjID. Les données PlayerMobile ne sont disponibles que pour self ; pour un autre serial - 0, même pour un mobile chargé. Les caractéristiques de quelqu'un d'autre ne sont ni substituées ni devinées.
- Invoke lit sur le flux du jeu avec la possibilité d'annuler l'attente par script. N'interroge pas l'état, n'ouvre pas la cible, n'envoie pas de paquet, ne modifie pas les caractéristiques et n'ajoute pas de délai.
- Chaque appel lit à nouveau les données locales. La variable stocke l'instantané ; les lectures individuelles peuvent recevoir différentes mises à jour du serveur. Un résultat non nul ne teste pas la connexion. Zéro peut être une valeur ou aucune donnée.
- C# distingue les majuscules. Utilisez le nom UO exact. Comparez les indicateurs numériques à 0 ; utilisez bool seulement si la signature renvoie bool.
UO.Int(),UO.Intelligence(),UO.GetInt(),UO.GetIntelligence().
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.GetIntelligence();
UO.Print("GetIntelligence: " + Convert.ToString(result));Paramètres et déroulement de l’exécution :
- value stocke le résultat numérique ; Convert.ToString le formate simplement pour le magazine. Il n'y a pas d'arguments ni d'actions de personnages.
var value = UO.GetIntelligence();
UO.Print("Intelligence: " + Convert.ToString(value));Paramètres et déroulement de l’exécution :
- avant et après 1000 ms séparés ; UO.Wait ajouté à l'exemple. change=after-before peut être positif, nul ou négatif. En soi, il ne fait pas la distinction entre toutes les mises à jour intermédiaires et la sortie du monde.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var before = UO.GetIntelligence();
await Delay(1000);
var after = UO.GetIntelligence();
var change = after - before;
UO.Print("Change: " + Convert.ToString(change));
return null;
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));Paramètres et déroulement de l’exécution :
- minimum=80 est un exemple d'exigence, pas de limite client. AttributeAtLeast(minimum) rejette le caractère manquant, lit une fois la caractéristique et renvoie bool : true ou false si >= minimum. La signification logique est donnée par la comparaison et non par la caractéristique elle-même.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
if (Truth(Truth(AttributeAtLeast(80)) == true))
{
UO.Print("Requirement met");
}
else
{
UO.Print("Requirement not met or no player");
}
return null;
}
dynamic AttributeAtLeast(dynamic minimum)
{
if (Truth(UO.Self() == 0))
{
return false;
}
var value = UO.GetIntelligence();
return value >= minimum;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}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:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCharacterGetterAliases [GetIntelligence]. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Intelligence:bridge.Intelligence.
L’appel exécute le delegate du gestionnaire enregistré. La méthode d’enregistrement crée ce delegate lors de la construction de l’API.
Code interne de l’implémentation ; ce n’est pas un script autonome.
() => bridge.IntelligenceCréation de l’API: Ces fonctions enregistrent l’API. Elles ne sont pas exécutées à nouveau pour chaque appel de commande.
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.GetLife();Lit l’état de santé actuel à partir du modèle local.
Il n'y a pas de paramètres.
int est la valeur du champ Hits, pas le pourcentage et non bool. 0 peut être une valeur réelle ou une indication de données manquantes. Le maximum zéro ne peut pas être utilisé comme diviseur. Pour le mobile de quelqu'un d'autre, les significations peuvent être inconnues. HP/HitsMax peut contenir une échelle relative du serveur au lieu de points exacts. HP=0 ne prouve pas la mort ; il y a Dead/IsDead pour ça.
- La commande n'ouvre pas le statut et ne demande pas de mise à jour du serveur. Le client lit uniquement les données déjà chargées. Ne change pas les caractéristiques et n'envoie pas de paquets.
- Le résultat est une lecture séparée. Le monde peut changer entre Exists et le prochain défi ; plusieurs requêtes ne forment pas un instantané atomique.
- Lors de la lecture d'un objet, World.Get rejette le ou IsDestroyed manquant et aboutit à 0. HP/HitsMax sont lus à partir de l'Entité, y compris les éléments avec ces champs ; Mana/Stamina - uniquement pour mobile. Sans argument, lisez self. La variante du même nom sans paramètres n'a pas forcément de variante avec ID : voir signatures.
- La lecture sans arguments renvoie également 0 pour un joueur manquant ou détruit. Cela s'applique aux directs Mana/Stamina et à leurs maxima, pas seulement aux formulaires via World.Get. Un personnage mort présent peut conserver des valeurs.
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.GetLife();
UO.Print("GetLife: " + Convert.ToString(result));Paramètres et déroulement de l’exécution :
- L'appel sans arguments se lit self. value stocke un nombre, Convert.ToString le convertit uniquement pour le message.
var value = UO.GetLife();
UO.Print("GetLife: " + Convert.ToString(value));Paramètres et déroulement de l’exécution :
- Le seuil ou le calcul appliqué pour ce champ est affiché. Les nombres dans la condition sont des exemples de paramètres et non des limites du serveur. Avant de diviser par le maximum, sa positivité est vérifiée.
return RunScenario();
object? RunScenario()
{
var value = UO.GetLife();
var maximum = UO.GetMaxHP();
if (Truth(maximum > 0) && Truth(value * 100 / maximum < 50))
{
UO.Print("Health below half of the known maximum");
}
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 :
- Ce nom n'a pas de forme avec ID. ReadValue sans paramètres lit self ; les deux appels sont séparés par UO.Wait(1000). La comparaison de deux instantanés peut manquer des modifications intermédiaires.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
async public Task<object?> RunScenarioAsync()
{
var before = ReadValue();
await Delay(1000);
var after = ReadValue();
UO.Print("Before: " + Convert.ToString(before) + "; after: " + Convert.ToString(after));
return null;
}
dynamic ReadValue()
{
return UO.GetLife();
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
}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:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCharacterGetterAliases [GetLife]. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetHP:bridge.GetHP(bridge.Self). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Self:bridge.Self.
L’appel exécute le delegate du gestionnaire enregistré. La méthode d’enregistrement crée ce delegate lors de la construction de l’API.
Code interne de l’implémentation ; ce n’est pas un script autonome.
() => bridge.GetHP(bridge.Self)Création de l’API: Ces fonctions enregistrent l’API. Elles ne sont pas exécutées à nouveau pour chaque appel de commande.
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.GetLuck();Lit le compteur de statut de votre personnage : points de chance.
Il n'y a pas de paramètres.
int — points de chance, 0..65535 dans le modèle client. 0 peut être une valeur réelle, aucune donnée ou un joueur manquant/détruit. Il s'agit de quantité, pas de bool, ID ou de type : 1 signifie une unité, pas de succès. La commande ne parcourt pas les objets et ne renvoie pas de tableau.
- La commande ne prend aucun argument. Utilisez les signatures exactes ci-dessus.
- La lecture sur le fil de jeu prend Player.Luck si le joueur actuel existe et n'a pas été détruit ; sinon 0. L'équipement n'est pas trié, les bonus ne sont pas recalculés, le statut n'est pas demandé et il n'y a pas d'attente de mises à jour. Un fantôme présent n'est pas égal à un joueur détruit.
- Luck lit les points de chance du serveur stockés sous UInt16 à partir du type de statut >= 4. Il ne s'agit pas d'un pourcentage, d'un nombre aléatoire ou d'une garantie de la qualité du butin. Lors de la lecture, le client ne calcule pas le taux de drop et n'ajoute pas de bonus d'équipement.
- CharacterStatus vérifie le corps requis avant la mise à jour. Weight est disponible dans son propre statut étendu, slots - de type 3, Luck - de type 4, serveur WeightMax - de type 5. Un package compact/ancien sans compteur optionnel quitte son cache précédent. Le nouveau Player repart de zéro ; l'appel ne prouve pas la réception d'un nouveau statut.
- Ces fonctions enregistrent l’API. Elles ne sont pas exécutées à nouveau pour chaque appel de commande. C# distingue les majuscules. Utilisez le nom UO exact. Comparez les indicateurs numériques à 0 ; utilisez bool seulement si la signature renvoie bool.
- Chaque appel lit à nouveau les données locales. La variable stocke l'instantané ; les lectures individuelles peuvent recevoir différentes mises à jour du serveur. Un résultat non nul ne teste pas la connexion. Zéro peut être une valeur ou aucune donnée.
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.GetLuck();
UO.Print("GetLuck: " + Convert.ToString(result));Paramètres et déroulement de l’exécution :
- value stocke un appel sans argument à son propre caractère ; Convert.ToString formate le numéro du journal sans changer sa signification.
var value = UO.GetLuck();
UO.Print("Luck: " + Convert.ToString(value));Paramètres et déroulement de l’exécution :
- UO.Wait(500) sépare l'avant et l'après de 500 millisecondes. la différence peut être positive, nulle ou négative ; Les mises à jour intermédiaires et les changements de personnages peuvent être ignorés. La pause en est un exemple.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var before = UO.GetLuck();
await Delay(500);
var after = UO.GetLuck();
var difference = after - before;
UO.Print("Counter change: " + Convert.ToString(difference));
return null;
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));Paramètres et déroulement de l’exécution :
- LuckAtLeast(minimum) reçoit une exigence numérique ; 1000 est un exemple, pas une limite ou un pourcentage. Rejette l'absence d'un Joueur, lit la chance une fois et renvoie bool : true ou false par valeur >= minimum. La chance elle-même n'est pas bool. Les points mis en cache sont comparés et les chutes de butin ne sont pas prévues.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
if (Truth(Truth(LuckAtLeast(1000)) == true))
{
UO.Print("Local check passed");
}
else
{
UO.Print("Local check failed or data unavailable");
}
return null;
}
dynamic LuckAtLeast(dynamic minimum)
{
if (Truth(UO.Self() == 0))
{
return false;
}
var value = UO.GetLuck();
return value >= minimum;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}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:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCharacterGetterAliases [GetLuck]. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Luck:bridge.Luck.
L’appel exécute le delegate du gestionnaire enregistré. La méthode d’enregistrement crée ce delegate lors de la construction de l’API.
Code interne de l’implémentation ; ce n’est pas un script autonome.
() => bridge.LuckCréation de l’API: Ces fonctions enregistrent l’API. Elles ne sont pas exécutées à nouveau pour chaque appel de commande.
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.GetMana();
dynamic UO.GetMana(object? objID);Lit le mana actuel du modèle local.
-
objID— Objet facultatif sous les formes affichées : serial par numéro/chaîne hexadécimale, self, lasttarget ou nom enregistré AddObject. Ce n'est pas type. Sans argument, lisez self. Un texte inconnu dans certains formulaires provoque une erreur de conversion ; vérifiez le nom avant d'appeler.
int est la valeur du champ Mana, pas un pourcentage ou bool. 0 peut être une valeur réelle ou une indication de données manquantes. Le maximum zéro ne peut pas être utilisé comme diviseur. Pour le mobile de quelqu'un d'autre, les significations peuvent être inconnues. HP/HitsMax peut contenir une échelle relative du serveur au lieu de points exacts. HP=0 ne prouve pas la mort ; il y a Dead/IsDead pour ça.
- La commande n'ouvre pas le statut et ne demande pas de mise à jour du serveur. Le client lit uniquement les données déjà chargées. Ne change pas les caractéristiques et n'envoie pas de paquets.
- Le résultat est une lecture séparée. Le monde peut changer entre Exists et le prochain défi ; plusieurs requêtes ne forment pas un instantané atomique.
- Lors de la lecture d'un objet, World.Get rejette le ou IsDestroyed manquant et aboutit à 0. HP/HitsMax sont lus à partir de l'Entité, y compris les éléments avec ces champs ; Mana/Stamina - uniquement pour mobile. Sans argument, lisez self. La variante du même nom sans paramètres n'a pas forcément de variante avec ID : voir signatures.
- La lecture sans arguments renvoie également 0 pour un joueur manquant ou détruit. Cela s'applique aux directs Mana/Stamina et à leurs maxima, pas seulement aux formulaires via World.Get. Un personnage mort présent peut conserver des valeurs.
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.GetMana();
UO.Print("GetMana: " + Convert.ToString(result));Paramètres et déroulement de l’exécution :
- L'appel sans arguments se lit self. value stocke un nombre, Convert.ToString le convertit uniquement pour le message.
var value = UO.GetMana();
UO.Print("GetMana: " + Convert.ToString(value));Paramètres et déroulement de l’exécution :
- Le seuil ou le calcul appliqué pour ce champ est affiché. Les nombres dans la condition sont des exemples de paramètres et non des limites du serveur. Avant de diviser par le maximum, sa positivité est vérifiée.
return RunScenario();
object? RunScenario()
{
var value = UO.GetMana();
if (Truth(value >= 10))
{
UO.Print("At least ten mana points are known");
}
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 :
- lasttarget — objet précédemment sélectionné ; Exists vérifie la disponibilité. obj est le seul paramètre de ReadValue. La fonction renvoie le numéro de commande inchangé et est donné dans son intégralité.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
if (Truth(UO.Exists("lasttarget")))
{
var value = ReadValue("lasttarget");
UO.Print("Selected value: " + Convert.ToString(value));
}
return null;
}
dynamic ReadValue(dynamic obj)
{
return UO.GetMana(obj);
}
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: Aucun paramètre.
Résultat: int / Integer.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCharacterGetterAliases [GetMana]. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Mana:bridge.Mana.
L’appel exécute le delegate du gestionnaire enregistré. La méthode d’enregistrement crée ce delegate lors de la construction de l’API.
Code interne de l’implémentation ; ce n’est pas un script autonome.
() => bridge.ManaCréation de l’API: Ces fonctions enregistrent l’API. Elles ne sont pas exécutées à nouveau pour chaque appel de commande.
Paramètres: objID (Any)
Résultat: dynamic / Any.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetMana:bridge.GetMana(Arg(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Mana:bridge.Mana.
Code interne de l’implémentation ; ce n’est pas un script autonome.
case "getmana": return new InjectionValue(arguments.Length > 0 ? bridge.GetMana(Arg(0)) : bridge.Mana);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.GetMaxHP();
int UO.GetMaxHP(object? id);Lit la santé maximale du modèle local.
-
id— Objet facultatif sous les formes affichées : serial par numéro/chaîne hexadécimale, self, lasttarget ou nom enregistré AddObject. Ce n'est pas type. Sans argument, lisez self. Un texte inconnu dans certains formulaires provoque une erreur de conversion ; vérifiez le nom avant d'appeler.
int est la valeur du champ HitsMax, pas un pourcentage ou bool. 0 peut être une valeur réelle ou une indication de données manquantes. Le maximum zéro ne peut pas être utilisé comme diviseur. Pour le mobile de quelqu'un d'autre, les significations peuvent être inconnues. HP/HitsMax peut contenir une échelle relative du serveur au lieu de points exacts. HP=0 ne prouve pas la mort ; il y a Dead/IsDead pour ça.
- La commande n'ouvre pas le statut et ne demande pas de mise à jour du serveur. Le client lit uniquement les données déjà chargées. Ne change pas les caractéristiques et n'envoie pas de paquets.
- Le résultat est une lecture séparée. Le monde peut changer entre Exists et le prochain défi ; plusieurs requêtes ne forment pas un instantané atomique.
- Lors de la lecture d'un objet, World.Get rejette le ou IsDestroyed manquant et aboutit à 0. HP/HitsMax sont lus à partir de l'Entité, y compris les éléments avec ces champs ; Mana/Stamina - uniquement pour mobile. Sans argument, lisez self. La variante du même nom sans paramètres n'a pas forcément de variante avec ID : voir signatures.
- La lecture sans arguments renvoie également 0 pour un joueur manquant ou détruit. Cela s'applique aux directs Mana/Stamina et à leurs maxima, pas seulement aux formulaires via World.Get. Un personnage mort présent peut conserver des valeurs.
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.GetMaxHP();
UO.Print("GetMaxHP: " + Convert.ToString(result));Paramètres et déroulement de l’exécution :
- L'appel sans arguments se lit self. value stocke un nombre, Convert.ToString le convertit uniquement pour le message.
var value = UO.GetMaxHP();
UO.Print("GetMaxHP: " + Convert.ToString(value));Paramètres et déroulement de l’exécution :
- Le seuil ou le calcul appliqué pour ce champ est affiché. Les nombres dans la condition sont des exemples de paramètres et non des limites du serveur. Avant de diviser par le maximum, sa positivité est vérifiée.
return RunScenario();
object? RunScenario()
{
var value = UO.GetMaxHP();
if (Truth(value > 0))
{
UO.Print("Known HP percent: " + Convert.ToString(UO.GetHP() * 100 / value));
}
else
{
UO.Print("HP maximum unavailable");
}
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 :
- lasttarget — objet précédemment sélectionné ; Exists vérifie la disponibilité. obj est le seul paramètre de ReadValue. La fonction renvoie le numéro de commande inchangé et est donné dans son intégralité.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
if (Truth(UO.Exists("lasttarget")))
{
var value = ReadValue("lasttarget");
UO.Print("Selected value: " + Convert.ToString(value));
}
return null;
}
dynamic ReadValue(dynamic obj)
{
return UO.GetMaxHP(obj);
}
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: Aucun paramètre.
Résultat: int / Integer.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.GetMaxHP. -
InjectionScript.Runtime.InjectionApiUO.GetMaxHP:GetMaxHP("self").
Code interne de l’implémentation ; ce n’est pas un script autonome.
public int GetMaxHP() => GetMaxHP("self");Paramètres: id (Any/Integer/String)
Résultat: int / Any.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetMaxHP:bridge.GetMaxHP(Arg(0, bridge.Self)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0, bridge.Self). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Self:bridge.Self.
Code interne de l’implémentation ; ce n’est pas un script autonome.
case "getmaxhp": return new InjectionValue(bridge.GetMaxHP(Arg(0, bridge.Self)));Paramètres: id (Any/Integer/String)
Résultat: int / Integer.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.GetMaxHP. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetMaxHP:bridge.GetMaxHP(id).
Code interne de l’implémentation ; ce n’est pas un script autonome.
public int GetMaxHP(int id) => bridge.GetMaxHP(id);Paramètres: id (Any/Integer/String)
Résultat: int / Integer.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.GetMaxHP. -
InjectionScript.Runtime.InjectionApiUO.GetMaxHP:GetMaxHP(GetObject(id)). -
InjectionScript.Runtime.InjectionApiUO.GetObject:GetObject(id).
Code interne de l’implémentation ; ce n’est pas un script autonome.
public int GetMaxHP(string id) => GetMaxHP(GetObject(id));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.GetMaxLife();Lit la santé maximale du modèle local.
Il n'y a pas de paramètres.
int est la valeur du champ HitsMax, pas un pourcentage ou bool. 0 peut être une valeur réelle ou une indication de données manquantes. Le maximum zéro ne peut pas être utilisé comme diviseur. Pour le mobile de quelqu'un d'autre, les significations peuvent être inconnues. HP/HitsMax peut contenir une échelle relative du serveur au lieu de points exacts. HP=0 ne prouve pas la mort ; il y a Dead/IsDead pour ça.
- La commande n'ouvre pas le statut et ne demande pas de mise à jour du serveur. Le client lit uniquement les données déjà chargées. Ne change pas les caractéristiques et n'envoie pas de paquets.
- Le résultat est une lecture séparée. Le monde peut changer entre Exists et le prochain défi ; plusieurs requêtes ne forment pas un instantané atomique.
- Lors de la lecture d'un objet, World.Get rejette le ou IsDestroyed manquant et aboutit à 0. HP/HitsMax sont lus à partir de l'Entité, y compris les éléments avec ces champs ; Mana/Stamina - uniquement pour mobile. Sans argument, lisez self. La variante du même nom sans paramètres n'a pas forcément de variante avec ID : voir signatures.
- La lecture sans arguments renvoie également 0 pour un joueur manquant ou détruit. Cela s'applique aux directs Mana/Stamina et à leurs maxima, pas seulement aux formulaires via World.Get. Un personnage mort présent peut conserver des valeurs.
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.GetMaxLife();
UO.Print("GetMaxLife: " + Convert.ToString(result));Paramètres et déroulement de l’exécution :
- L'appel sans arguments se lit self. value stocke un nombre, Convert.ToString le convertit uniquement pour le message.
var value = UO.GetMaxLife();
UO.Print("GetMaxLife: " + Convert.ToString(value));Paramètres et déroulement de l’exécution :
- Le seuil ou le calcul appliqué pour ce champ est affiché. Les nombres dans la condition sont des exemples de paramètres et non des limites du serveur. Avant de diviser par le maximum, sa positivité est vérifiée.
return RunScenario();
object? RunScenario()
{
var value = UO.GetMaxLife();
if (Truth(value > 0))
{
UO.Print("Known HP percent: " + Convert.ToString(UO.GetHP() * 100 / value));
}
else
{
UO.Print("HP maximum unavailable");
}
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 :
- Ce nom n'a pas de forme avec ID. ReadValue sans paramètres lit self ; les deux appels sont séparés par UO.Wait(1000). La comparaison de deux instantanés peut manquer des modifications intermédiaires.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
async public Task<object?> RunScenarioAsync()
{
var before = ReadValue();
await Delay(1000);
var after = ReadValue();
UO.Print("Before: " + Convert.ToString(before) + "; after: " + Convert.ToString(after));
return null;
}
dynamic ReadValue()
{
return UO.GetMaxLife();
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
}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:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCharacterGetterAliases [GetMaxLife]. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetMaxHP:bridge.GetMaxHP(bridge.Self). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Self:bridge.Self.
L’appel exécute le delegate du gestionnaire enregistré. La méthode d’enregistrement crée ce delegate lors de la construction de l’API.
Code interne de l’implémentation ; ce n’est pas un script autonome.
() => bridge.GetMaxHP(bridge.Self)Création de l’API: Ces fonctions enregistrent l’API. Elles ne sont pas exécutées à nouveau pour chaque appel de commande.
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.GetMaxMana();
dynamic UO.GetMaxMana(object? objID);Lit le mana maximum du modèle local.
-
objID— Objet facultatif sous les formes affichées : serial par numéro/chaîne hexadécimale, self, lasttarget ou nom enregistré AddObject. Ce n'est pas type. Sans argument, lisez self. Un texte inconnu dans certains formulaires provoque une erreur de conversion ; vérifiez le nom avant d'appeler.
int est la valeur du champ ManaMax, pas un pourcentage ou bool. 0 peut être une valeur réelle ou une indication de données manquantes. Le maximum zéro ne peut pas être utilisé comme diviseur. Pour le mobile de quelqu'un d'autre, les significations peuvent être inconnues. HP/HitsMax peut contenir une échelle relative du serveur au lieu de points exacts. HP=0 ne prouve pas la mort ; il y a Dead/IsDead pour ça.
- La commande n'ouvre pas le statut et ne demande pas de mise à jour du serveur. Le client lit uniquement les données déjà chargées. Ne change pas les caractéristiques et n'envoie pas de paquets.
- Le résultat est une lecture séparée. Le monde peut changer entre Exists et le prochain défi ; plusieurs requêtes ne forment pas un instantané atomique.
- Lors de la lecture d'un objet, World.Get rejette le ou IsDestroyed manquant et aboutit à 0. HP/HitsMax sont lus à partir de l'Entité, y compris les éléments avec ces champs ; Mana/Stamina - uniquement pour mobile. Sans argument, lisez self. La variante du même nom sans paramètres n'a pas forcément de variante avec ID : voir signatures.
- La lecture sans arguments renvoie également 0 pour un joueur manquant ou détruit. Cela s'applique aux directs Mana/Stamina et à leurs maxima, pas seulement aux formulaires via World.Get. Un personnage mort présent peut conserver des valeurs.
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.GetMaxMana();
UO.Print("GetMaxMana: " + Convert.ToString(result));Paramètres et déroulement de l’exécution :
- L'appel sans arguments se lit self. value stocke un nombre, Convert.ToString le convertit uniquement pour le message.
var value = UO.GetMaxMana();
UO.Print("GetMaxMana: " + Convert.ToString(value));Paramètres et déroulement de l’exécution :
- Le seuil ou le calcul appliqué pour ce champ est affiché. Les nombres dans la condition sont des exemples de paramètres et non des limites du serveur. Avant de diviser par le maximum, sa positivité est vérifiée.
return RunScenario();
object? RunScenario()
{
var value = UO.GetMaxMana();
if (Truth(value > 0))
{
UO.Print("Mana percent: " + Convert.ToString(UO.Mana() * 100 / value));
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Paramètres et déroulement de l’exécution :
- lasttarget — objet précédemment sélectionné ; Exists vérifie la disponibilité. obj est le seul paramètre de ReadValue. La fonction renvoie le numéro de commande inchangé et est donné dans son intégralité.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
if (Truth(UO.Exists("lasttarget")))
{
var value = ReadValue("lasttarget");
UO.Print("Selected value: " + Convert.ToString(value));
}
return null;
}
dynamic ReadValue(dynamic obj)
{
return UO.GetMaxMana(obj);
}
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: Aucun paramètre.
Résultat: int / Integer.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCharacterGetterAliases [GetMaxMana]. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.MaxMana:bridge.MaxMana.
L’appel exécute le delegate du gestionnaire enregistré. La méthode d’enregistrement crée ce delegate lors de la construction de l’API.
Code interne de l’implémentation ; ce n’est pas un script autonome.
() => bridge.MaxManaCréation de l’API: Ces fonctions enregistrent l’API. Elles ne sont pas exécutées à nouveau pour chaque appel de commande.
Paramètres: objID (Any)
Résultat: dynamic / Any.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetMaxMana:bridge.GetMaxMana(Arg(0, bridge.Self)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0, bridge.Self). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Self:bridge.Self.
Code interne de l’implémentation ; ce n’est pas un script autonome.
case "getmaxmana": return new InjectionValue(bridge.GetMaxMana(Arg(0, bridge.Self)));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.GetMaxStam();
dynamic UO.GetMaxStam(object? objID);Lit l'endurance maximale du modèle local.
-
objID— Objet facultatif sous les formes affichées : serial par numéro/chaîne hexadécimale, self, lasttarget ou nom enregistré AddObject. Ce n'est pas type. Sans argument, lisez self. Un texte inconnu dans certains formulaires provoque une erreur de conversion ; vérifiez le nom avant d'appeler.
int est la valeur du champ StaminaMax, pas un pourcentage ou bool. 0 peut être une valeur réelle ou une indication de données manquantes. Le maximum zéro ne peut pas être utilisé comme diviseur. Pour le mobile de quelqu'un d'autre, les significations peuvent être inconnues. HP/HitsMax peut contenir une échelle relative du serveur au lieu de points exacts. HP=0 ne prouve pas la mort ; il y a Dead/IsDead pour ça.
- La commande n'ouvre pas le statut et ne demande pas de mise à jour du serveur. Le client lit uniquement les données déjà chargées. Ne change pas les caractéristiques et n'envoie pas de paquets.
- Le résultat est une lecture séparée. Le monde peut changer entre Exists et le prochain défi ; plusieurs requêtes ne forment pas un instantané atomique.
- Lors de la lecture d'un objet, World.Get rejette le ou IsDestroyed manquant et aboutit à 0. HP/HitsMax sont lus à partir de l'Entité, y compris les éléments avec ces champs ; Mana/Stamina - uniquement pour mobile. Sans argument, lisez self. La variante du même nom sans paramètres n'a pas forcément de variante avec ID : voir signatures.
- La lecture sans arguments renvoie également 0 pour un joueur manquant ou détruit. Cela s'applique aux directs Mana/Stamina et à leurs maxima, pas seulement aux formulaires via World.Get. Un personnage mort présent peut conserver des valeurs.
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.GetMaxStam();
UO.Print("GetMaxStam: " + Convert.ToString(result));Paramètres et déroulement de l’exécution :
- L'appel sans arguments se lit self. value stocke un nombre, Convert.ToString le convertit uniquement pour le message.
var value = UO.GetMaxStam();
UO.Print("GetMaxStam: " + Convert.ToString(value));Paramètres et déroulement de l’exécution :
- Le seuil ou le calcul appliqué pour ce champ est affiché. Les nombres dans la condition sont des exemples de paramètres et non des limites du serveur. Avant de diviser par le maximum, sa positivité est vérifiée.
return RunScenario();
object? RunScenario()
{
var value = UO.GetMaxStam();
if (Truth(value > 0))
{
UO.Print("Stamina percent: " + Convert.ToString(UO.Stamina() * 100 / value));
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Paramètres et déroulement de l’exécution :
- lasttarget — objet précédemment sélectionné ; Exists vérifie la disponibilité. obj est le seul paramètre de ReadValue. La fonction renvoie le numéro de commande inchangé et est donné dans son intégralité.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
if (Truth(UO.Exists("lasttarget")))
{
var value = ReadValue("lasttarget");
UO.Print("Selected value: " + Convert.ToString(value));
}
return null;
}
dynamic ReadValue(dynamic obj)
{
return UO.GetMaxStam(obj);
}
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: Aucun paramètre.
Résultat: int / Integer.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCharacterGetterAliases [GetMaxStam]. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.MaxStamina:bridge.MaxStamina.
L’appel exécute le delegate du gestionnaire enregistré. La méthode d’enregistrement crée ce delegate lors de la construction de l’API.
Code interne de l’implémentation ; ce n’est pas un script autonome.
() => bridge.MaxStaminaCréation de l’API: Ces fonctions enregistrent l’API. Elles ne sont pas exécutées à nouveau pour chaque appel de commande.
Paramètres: objID (Any)
Résultat: dynamic / Any.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetMaxStamina:bridge.GetMaxStamina(Arg(0, bridge.Self)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0, bridge.Self). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Self:bridge.Self.
Code interne de l’implémentation ; ce n’est pas un script autonome.
case "getmaxstam": return new InjectionValue(bridge.GetMaxStamina(Arg(0, bridge.Self)));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.GetMaxStamina();Lit l'endurance maximale du modèle local.
Il n'y a pas de paramètres.
int est la valeur du champ StaminaMax, pas un pourcentage ou bool. 0 peut être une valeur réelle ou une indication de données manquantes. Le maximum zéro ne peut pas être utilisé comme diviseur. Pour le mobile de quelqu'un d'autre, les significations peuvent être inconnues. HP/HitsMax peut contenir une échelle relative du serveur au lieu de points exacts. HP=0 ne prouve pas la mort ; il y a Dead/IsDead pour ça.
- La commande n'ouvre pas le statut et ne demande pas de mise à jour du serveur. Le client lit uniquement les données déjà chargées. Ne change pas les caractéristiques et n'envoie pas de paquets.
- Le résultat est une lecture séparée. Le monde peut changer entre Exists et le prochain défi ; plusieurs requêtes ne forment pas un instantané atomique.
- Lors de la lecture d'un objet, World.Get rejette le ou IsDestroyed manquant et aboutit à 0. HP/HitsMax sont lus à partir de l'Entité, y compris les éléments avec ces champs ; Mana/Stamina - uniquement pour mobile. Sans argument, lisez self. La variante du même nom sans paramètres n'a pas forcément de variante avec ID : voir signatures.
- La lecture sans arguments renvoie également 0 pour un joueur manquant ou détruit. Cela s'applique aux directs Mana/Stamina et à leurs maxima, pas seulement aux formulaires via World.Get. Un personnage mort présent peut conserver des valeurs.
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.GetMaxStamina();
UO.Print("GetMaxStamina: " + Convert.ToString(result));Paramètres et déroulement de l’exécution :
- L'appel sans arguments se lit self. value stocke un nombre, Convert.ToString le convertit uniquement pour le message.
var value = UO.GetMaxStamina();
UO.Print("GetMaxStamina: " + Convert.ToString(value));Paramètres et déroulement de l’exécution :
- Le seuil ou le calcul appliqué pour ce champ est affiché. Les nombres dans la condition sont des exemples de paramètres et non des limites du serveur. Avant de diviser par le maximum, sa positivité est vérifiée.
return RunScenario();
object? RunScenario()
{
var value = UO.GetMaxStamina();
if (Truth(value > 0))
{
UO.Print("Stamina percent: " + Convert.ToString(UO.Stamina() * 100 / value));
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Paramètres et déroulement de l’exécution :
- Ce nom n'a pas de forme avec ID. ReadValue sans paramètres lit self ; les deux appels sont séparés par UO.Wait(1000). La comparaison de deux instantanés peut manquer des modifications intermédiaires.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
async public Task<object?> RunScenarioAsync()
{
var before = ReadValue();
await Delay(1000);
var after = ReadValue();
UO.Print("Before: " + Convert.ToString(before) + "; after: " + Convert.ToString(after));
return null;
}
dynamic ReadValue()
{
return UO.GetMaxStamina();
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
}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:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCharacterGetterAliases [GetMaxStamina]. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.MaxStamina:bridge.MaxStamina.
L’appel exécute le delegate du gestionnaire enregistré. La méthode d’enregistrement crée ce delegate lors de la construction de l’API.
Code interne de l’implémentation ; ce n’est pas un script autonome.
() => bridge.MaxStaminaCréation de l’API: Ces fonctions enregistrent l’API. Elles ne sont pas exécutées à nouveau pour chaque appel de commande.
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.GetMaxWeight();Lit le compteur de statut de votre personnage : poids maximum en pierres.
Il n'y a pas de paramètres.
int — poids maximum en pierres, 0..65535 dans le modèle client. 0 peut être une valeur réelle, aucune donnée ou un joueur manquant/détruit. Il s'agit de quantité, pas de bool, ID ou de type : 1 signifie une unité, pas de succès. La commande ne parcourt pas les objets et ne renvoie pas de tableau.
- La commande ne prend aucun argument. Utilisez les signatures exactes ci-dessus.
- La lecture sur le fil de jeu prend Player.WeightMax si le joueur actuel existe et n'a pas été détruit ; sinon 0. L'équipement n'est pas trié, les bonus ne sont pas recalculés, le statut n'est pas demandé et il n'y a pas d'attente de mises à jour. Un fantôme présent n'est pas égal à un joueur détruit.
- MaxWeight lit le cache WeightMax. Le statut natif type >= 5 fixe la limite du serveur à UInt16, même si elle est égale à 0. L'ancien statut étendu le calcule une fois à réception : protocole UO >= 5.0.0a - 7 * floor(Strength / 2) + 40; le plus ancien est Strength * 4 + 25. Le résultat est enregistré sous UInt16 ; les valeurs extrêmes sont enveloppées modulo 65536. Strength=101 donne respectivement 390 ou 429. Lors de la modification de Strength séparément, le getter lui-même ne recalcule pas la limite.
- CharacterStatus vérifie le corps requis avant la mise à jour. Weight est disponible dans son propre statut étendu, slots - de type 3, Luck - de type 4, serveur WeightMax - de type 5. Un package compact/ancien sans compteur optionnel quitte son cache précédent. Le nouveau Player repart de zéro ; l'appel ne prouve pas la réception d'un nouveau statut.
- Ces fonctions enregistrent l’API. Elles ne sont pas exécutées à nouveau pour chaque appel de commande. C# distingue les majuscules. Utilisez le nom UO exact. Comparez les indicateurs numériques à 0 ; utilisez bool seulement si la signature renvoie bool.
- Chaque appel lit à nouveau les données locales. La variable stocke l'instantané ; les lectures individuelles peuvent recevoir différentes mises à jour du serveur. Un résultat non nul ne teste pas la connexion. Zéro peut être une valeur ou aucune donnée.
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.GetMaxWeight();
UO.Print("GetMaxWeight: " + Convert.ToString(result));Paramètres et déroulement de l’exécution :
- value stocke un appel sans argument à son propre caractère ; Convert.ToString formate le numéro du journal sans changer sa signification.
var value = UO.GetMaxWeight();
UO.Print("WeightMax: " + Convert.ToString(value));Paramètres et déroulement de l’exécution :
- UO.Wait(500) sépare l'avant et l'après de 500 millisecondes. la différence peut être positive, nulle ou négative ; Les mises à jour intermédiaires et les changements de personnages peuvent être ignorés. La pause en est un exemple.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var before = UO.GetMaxWeight();
await Delay(500);
var after = UO.GetMaxWeight();
var difference = after - before;
UO.Print("Counter change: " + Convert.ToString(difference));
return null;
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));Paramètres et déroulement de l’exécution :
- CanCarry(extra) obtient un poids supplémentaire en pierres ; 10 est un exemple, pas le nombre de piles. Rejette les extras négatifs, aucun joueur ou maximum <= 0, lit le poids et la limite actuels, puis renvoie bool : true ou false par extra <= maximum - courant. La soustraction évite le débordement de courant + supplémentaire. En cas de surcharge, le résultat est false même pour extra=0. Il s'agit d'une évaluation locale, pas d'une résolution de serveur ; les lectures ne sont pas atomiques et le poids nul peut être inconnu.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
if (Truth(Truth(CanCarry(10)) == true))
{
UO.Print("Local check passed");
}
else
{
UO.Print("Local check failed or data unavailable");
}
return null;
}
dynamic CanCarry(dynamic extra)
{
if (Truth(extra < 0) || Truth(UO.Self() == 0))
{
return false;
}
var current = UO.Weight();
var maximum = UO.GetMaxWeight();
if (Truth(maximum <= 0))
{
return false;
}
return extra <= maximum - current;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}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:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCharacterGetterAliases [GetMaxWeight]. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.MaxWeight:bridge.MaxWeight.
L’appel exécute le delegate du gestionnaire enregistré. La méthode d’enregistrement crée ce delegate lors de la construction de l’API.
Code interne de l’implémentation ; ce n’est pas un script autonome.
() => bridge.MaxWeightCréation de l’API: Ces fonctions enregistrent l’API. Elles ne sont pas exécutées à nouveau pour chaque appel de commande.
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.GetParalisa();
int UO.GetParalisa(object? value);Vérifie l'indicateur de paralysie du personnage connu du client.
-
value- Facultatif serial/ID mobile : nombre, chaîne hexadécimale, self, lasttarget ou autre nom d'objet standard ou nom AddObject. Ce n'est pas graphic/type. Sans argument, self est utilisé. Le nom inconnu est résolu dans 0 ; la cible ne s'ouvre pas.
Indicateur numérique int : 1 (condition remplie) - mobile chargé a l'indicateur IsParalyzed ; 0 (condition non remplie) - aucun indicateur, mobile inconnu, supprimé ou l'objet est un élément. Ce n'est pas une période de paralysie et ne garantit pas la capacité de se déplacer avec un résultat de 0.
- Utilisez Paralyzed pour vérifier le drapeau de paralysie. Les options Is/Get, GetParalisa, Frozen et GetLocked lisent le même indicateur.
- La commande lit uniquement les données locales. Il n'applique ni ne supprime la paralysie, n'attend pas sa fin et n'envoie pas de demande de mise à jour au serveur.
- Le résultat de cette commande est de type int : utilisez if (value != 0) ou if (value == 0). Les comparaisons directes avec true/false et if (valeur) dans C# ne sont pas autorisées. La valeur préserve la signification du drapeau, pas la quantité ou ID.
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.GetParalisa();
UO.Print("GetParalisa: " + Convert.ToString(result));Paramètres et déroulement de l’exécution :
- Les parenthèses vides sélectionnent self. state stocke un instantané du drapeau ; true est la constante numérique 1.
- Un résultat de false n'exclut pas un mur, un manque d'endurance ou toute autre raison d'arrêt.
var state = UO.GetParalisa();
if (Truth(Truth(state) == true))
{
UO.Print("Paralysis flag is set");
}
else
{
UO.Print("Paralysis flag is absent or unavailable");
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Paramètres et déroulement de l’exécution :
- target stocke la chaîne hexadécimale serial de la dernière cible. IsNpc vérifie qu'il s'agit du mobile chargé, y compris les joueurs.
- La commande avec l'argument lit target. Elle ne choisit pas de nouveau personnage et ne change pas lasttarget.
return RunScenario();
object? RunScenario()
{
var target = UO.GetSerial("lasttarget");
if (Truth(UO.IsNPC(target)))
{
var state = UO.GetParalisa(target);
UO.Print("Selected mobile paralysis 1/0: " + Convert.ToString(state));
}
else
{
UO.Print("No loaded mobile selected");
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Paramètres et déroulement de l’exécution :
- Pas plus de 10 pauses pendant 100 ms. Chaque appel sans argument lit à nouveau self.
- Après le cycle, la présence de self est vérifiée séparément. Il s'agit d'une observation pendant environ une seconde plus l'exécution des commandes, et non d'une suppression garantie de la paralysie.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
async public Task<object?> RunScenarioAsync()
{
var attempts = 0;
while (Truth(Truth(UO.GetParalisa()) == true) && Truth(attempts < 10))
{
await Delay(100);
attempts = attempts + 1;
}
if (Truth(UO.IsNPC("self")))
{
if (Truth(Truth(UO.GetParalisa()) == false))
{
UO.Print("Paralysis flag is clear");
}
else
{
UO.Print("Still paralyzed");
}
}
else
{
UO.Print("Self is unavailable");
}
return null;
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}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:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCharacterGetterAliases [GetParalisa]. -
InjectionScript.Runtime.InjectionApiUO.RegisterCharacterGetterAliases. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetLocked:bridge.GetLocked(serial). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Self:bridge.Self.
L’appel exécute le delegate du gestionnaire enregistré. La méthode d’enregistrement crée ce delegate lors de la construction de l’API.
Code interne de l’implémentation ; ce n’est pas un script autonome.
serial => bridge.GetLocked(serial)Code interne de l’implémentation ; ce n’est pas un script autonome.
() => getter(bridge.Self)Création de l’API: Ces fonctions enregistrent l’API. Elles ne sont pas exécutées à nouveau pour chaque appel de commande.
Paramètres: value (Any)
Résultat: int / Integer.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCharacterGetterAliases [GetParalisa]. -
InjectionScript.Runtime.InjectionApiUO.RegisterCharacterGetterAliases. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetLocked:bridge.GetLocked(serial). -
InjectionScript.Runtime.InjectionApiUO.GetObject:GetObject(value).
L’appel exécute le delegate du gestionnaire enregistré. La méthode d’enregistrement crée ce delegate lors de la construction de l’API.
Code interne de l’implémentation ; ce n’est pas un script autonome.
serial => bridge.GetLocked(serial)Code interne de l’implémentation ; ce n’est pas un script autonome.
value => getter(GetObject(value))Création de l’API: Ces fonctions enregistrent l’API. Elles ne sont pas exécutées à nouveau pour chaque appel de commande.
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.GetParalysed();
int UO.GetParalysed(object? value);Vérifie l'indicateur de paralysie du personnage connu du client.
-
value- Facultatif serial/ID mobile : nombre, chaîne hexadécimale, self, lasttarget ou autre nom d'objet standard ou nom AddObject. Ce n'est pas graphic/type. Sans argument, self est utilisé. Le nom inconnu est résolu dans 0 ; la cible ne s'ouvre pas.
Indicateur numérique int : 1 (condition remplie) - mobile chargé a l'indicateur IsParalyzed ; 0 (condition non remplie) - aucun indicateur, mobile inconnu, supprimé ou l'objet est un élément. Ce n'est pas une période de paralysie et ne garantit pas la capacité de se déplacer avec un résultat de 0.
- Utilisez Paralyzed pour vérifier le drapeau de paralysie. Les options Is/Get, GetParalisa, Frozen et GetLocked lisent le même indicateur.
- La commande lit uniquement les données locales. Il n'applique ni ne supprime la paralysie, n'attend pas sa fin et n'envoie pas de demande de mise à jour au serveur.
- Le résultat de cette commande est de type int : utilisez if (value != 0) ou if (value == 0). Les comparaisons directes avec true/false et if (valeur) dans C# ne sont pas autorisées. La valeur préserve la signification du drapeau, pas la quantité ou ID.
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.GetParalysed();
UO.Print("GetParalysed: " + Convert.ToString(result));Paramètres et déroulement de l’exécution :
- Les parenthèses vides sélectionnent self. state stocke un instantané du drapeau ; true est la constante numérique 1.
- Un résultat de false n'exclut pas un mur, un manque d'endurance ou toute autre raison d'arrêt.
var state = UO.GetParalysed();
if (Truth(Truth(state) == true))
{
UO.Print("Paralysis flag is set");
}
else
{
UO.Print("Paralysis flag is absent or unavailable");
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Paramètres et déroulement de l’exécution :
- target stocke la chaîne hexadécimale serial de la dernière cible. IsNpc vérifie qu'il s'agit du mobile chargé, y compris les joueurs.
- La commande avec l'argument lit target. Elle ne choisit pas de nouveau personnage et ne change pas lasttarget.
return RunScenario();
object? RunScenario()
{
var target = UO.GetSerial("lasttarget");
if (Truth(UO.IsNPC(target)))
{
var state = UO.GetParalysed(target);
UO.Print("Selected mobile paralysis 1/0: " + Convert.ToString(state));
}
else
{
UO.Print("No loaded mobile selected");
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Paramètres et déroulement de l’exécution :
- Pas plus de 10 pauses pendant 100 ms. Chaque appel sans argument lit à nouveau self.
- Après le cycle, la présence de self est vérifiée séparément. Il s'agit d'une observation pendant environ une seconde plus l'exécution des commandes, et non d'une suppression garantie de la paralysie.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
async public Task<object?> RunScenarioAsync()
{
var attempts = 0;
while (Truth(Truth(UO.GetParalysed()) == true) && Truth(attempts < 10))
{
await Delay(100);
attempts = attempts + 1;
}
if (Truth(UO.IsNPC("self")))
{
if (Truth(Truth(UO.GetParalysed()) == false))
{
UO.Print("Paralysis flag is clear");
}
else
{
UO.Print("Still paralyzed");
}
}
else
{
UO.Print("Self is unavailable");
}
return null;
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}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:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCharacterGetterAliases [GetParalysed]. -
InjectionScript.Runtime.InjectionApiUO.RegisterCharacterGetterAliases. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetLocked:bridge.GetLocked(serial). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Self:bridge.Self.
L’appel exécute le delegate du gestionnaire enregistré. La méthode d’enregistrement crée ce delegate lors de la construction de l’API.
Code interne de l’implémentation ; ce n’est pas un script autonome.
serial => bridge.GetLocked(serial)Code interne de l’implémentation ; ce n’est pas un script autonome.
() => getter(bridge.Self)Création de l’API: Ces fonctions enregistrent l’API. Elles ne sont pas exécutées à nouveau pour chaque appel de commande.
Paramètres: value (Any)
Résultat: int / Integer.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCharacterGetterAliases [GetParalysed]. -
InjectionScript.Runtime.InjectionApiUO.RegisterCharacterGetterAliases. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetLocked:bridge.GetLocked(serial). -
InjectionScript.Runtime.InjectionApiUO.GetObject:GetObject(value).
L’appel exécute le delegate du gestionnaire enregistré. La méthode d’enregistrement crée ce delegate lors de la construction de l’API.
Code interne de l’implémentation ; ce n’est pas un script autonome.
serial => bridge.GetLocked(serial)Code interne de l’implémentation ; ce n’est pas un script autonome.
value => getter(GetObject(value))Création de l’API: Ces fonctions enregistrent l’API. Elles ne sont pas exécutées à nouveau pour chaque appel de commande.
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.GetParalyzed();
int UO.GetParalyzed(object? value);Vérifie l'indicateur de paralysie du personnage connu du client.
-
value- Facultatif serial/ID mobile : nombre, chaîne hexadécimale, self, lasttarget ou autre nom d'objet standard ou nom AddObject. Ce n'est pas graphic/type. Sans argument, self est utilisé. Le nom inconnu est résolu dans 0 ; la cible ne s'ouvre pas.
Indicateur numérique int : 1 (condition remplie) - mobile chargé a l'indicateur IsParalyzed ; 0 (condition non remplie) - aucun indicateur, mobile inconnu, supprimé ou l'objet est un élément. Ce n'est pas une période de paralysie et ne garantit pas la capacité de se déplacer avec un résultat de 0.
- Utilisez Paralyzed pour vérifier le drapeau de paralysie. Les options Is/Get, GetParalisa, Frozen et GetLocked lisent le même indicateur.
- La commande lit uniquement les données locales. Il n'applique ni ne supprime la paralysie, n'attend pas sa fin et n'envoie pas de demande de mise à jour au serveur.
- Le résultat de cette commande est de type int : utilisez if (value != 0) ou if (value == 0). Les comparaisons directes avec true/false et if (valeur) dans C# ne sont pas autorisées. La valeur préserve la signification du drapeau, pas la quantité ou ID.
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.GetParalyzed();
UO.Print("GetParalyzed: " + Convert.ToString(result));Paramètres et déroulement de l’exécution :
- Les parenthèses vides sélectionnent self. state stocke un instantané du drapeau ; true est la constante numérique 1.
- Un résultat de false n'exclut pas un mur, un manque d'endurance ou toute autre raison d'arrêt.
var state = UO.GetParalyzed();
if (Truth(Truth(state) == true))
{
UO.Print("Paralysis flag is set");
}
else
{
UO.Print("Paralysis flag is absent or unavailable");
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Paramètres et déroulement de l’exécution :
- target stocke la chaîne hexadécimale serial de la dernière cible. IsNpc vérifie qu'il s'agit du mobile chargé, y compris les joueurs.
- La commande avec l'argument lit target. Elle ne choisit pas de nouveau personnage et ne change pas lasttarget.
return RunScenario();
object? RunScenario()
{
var target = UO.GetSerial("lasttarget");
if (Truth(UO.IsNPC(target)))
{
var state = UO.GetParalyzed(target);
UO.Print("Selected mobile paralysis 1/0: " + Convert.ToString(state));
}
else
{
UO.Print("No loaded mobile selected");
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Paramètres et déroulement de l’exécution :
- Pas plus de 10 pauses pendant 100 ms. Chaque appel sans argument lit à nouveau self.
- Après le cycle, la présence de self est vérifiée séparément. Il s'agit d'une observation pendant environ une seconde plus l'exécution des commandes, et non d'une suppression garantie de la paralysie.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
async public Task<object?> RunScenarioAsync()
{
var attempts = 0;
while (Truth(Truth(UO.GetParalyzed()) == true) && Truth(attempts < 10))
{
await Delay(100);
attempts = attempts + 1;
}
if (Truth(UO.IsNPC("self")))
{
if (Truth(Truth(UO.GetParalyzed()) == false))
{
UO.Print("Paralysis flag is clear");
}
else
{
UO.Print("Still paralyzed");
}
}
else
{
UO.Print("Self is unavailable");
}
return null;
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}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:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCharacterGetterAliases [GetParalyzed]. -
InjectionScript.Runtime.InjectionApiUO.RegisterCharacterGetterAliases. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetLocked:bridge.GetLocked(serial). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Self:bridge.Self.
L’appel exécute le delegate du gestionnaire enregistré. La méthode d’enregistrement crée ce delegate lors de la construction de l’API.
Code interne de l’implémentation ; ce n’est pas un script autonome.
serial => bridge.GetLocked(serial)Code interne de l’implémentation ; ce n’est pas un script autonome.
() => getter(bridge.Self)Création de l’API: Ces fonctions enregistrent l’API. Elles ne sont pas exécutées à nouveau pour chaque appel de commande.
Paramètres: value (Any)
Résultat: int / Integer.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCharacterGetterAliases [GetParalyzed]. -
InjectionScript.Runtime.InjectionApiUO.RegisterCharacterGetterAliases. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetLocked:bridge.GetLocked(serial). -
InjectionScript.Runtime.InjectionApiUO.GetObject:GetObject(value).
L’appel exécute le delegate du gestionnaire enregistré. La méthode d’enregistrement crée ce delegate lors de la construction de l’API.
Code interne de l’implémentation ; ce n’est pas un script autonome.
serial => bridge.GetLocked(serial)Code interne de l’implémentation ; ce n’est pas un script autonome.
value => getter(GetObject(value))Création de l’API: Ces fonctions enregistrent l’API. Elles ne sont pas exécutées à nouveau pour chaque appel de commande.
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.GetPhysicalResist();Lit le champ de résistance du personnage actuel : armure physique/résistance.
Il n'y a pas de paramètres.
int est la valeur d'état signée, -32768..32767 dans le modèle client. La valeur négative est conservée. 0 peut être une réelle résistance, un manque de données ou un joueur manquant/détruit ; GetResist donne également 0 pour un sélecteur inconnu. Ce n'est pas bool, ID, une limite de compétence ou de résistance. 1 signifie un point, pas un succès.
- La commande ne prend aucun argument. Utilisez les signatures exactes ci-dessus.
- La lecture sur le fil de jeu prend Player.PhysicalResistance si le joueur actuel existe et n'a pas été détruit ; sinon 0. L'équipement n'est pas trié, les bonus ne sont pas recalculés, le statut n'est pas demandé et il n'y a pas d'attente de mises à jour. Un fantôme présent n'est pas égal à un joueur détruit.
- PhysicalResistance - champ armure/statut du serveur : le serveur classique peut transmettre l'indice d'armure, et les règles avec résistances peuvent transmettre une résistance physique. API ne convertit pas de l'un à l'autre et ne calcule pas le pourcentage de réduction des dégâts. Armor et les alias physiques lisent le même champ.
- CharacterStatus vérifie le corps requis avant de changer le nom, la santé et les propres caractéristiques, puis traduit chaque mot de résistance en un Int16 signé. Un corps obligatoire tronqué ne modifie pas les données précédentes. Le type de queue facultatif 6 conserve les mêmes règles ; les commandes de résistance n'en lisent pas les limites maximales.
- Chaque appel lit à nouveau les données locales. La variable stocke l'instantané ; les lectures individuelles peuvent recevoir différentes mises à jour du serveur. Un résultat non nul ne teste pas la connexion. Zéro peut être une valeur ou aucune donnée.
- Ces fonctions enregistrent l’API. Elles ne sont pas exécutées à nouveau pour chaque appel de commande. C# distingue les majuscules. Utilisez le nom UO exact. Comparez les indicateurs numériques à 0 ; utilisez bool seulement si la signature renvoie bool.
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.GetPhysicalResist();
UO.Print("GetPhysicalResist: " + Convert.ToString(result));Paramètres et déroulement de l’exécution :
- value stocke le résultat d’un appel. Convert.ToString formate le numéro du journal. Il n'y a pas d'arguments : vous pouvez lire votre propre personnage.
var value = UO.GetPhysicalResist();
UO.Print("PhysicalResistance: " + Convert.ToString(value));Paramètres et déroulement de l’exécution :
- Entre avant et après, il y a UO.Wait(500) millisecondes ; la différence peut être négative. Les mises à jour intermédiaires peuvent être manquées. La pause fait référence à l'exemple, pas au délai API.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var before = UO.GetPhysicalResist();
await Delay(500);
var after = UO.GetPhysicalResist();
var difference = after - before;
UO.Print("Resistance change: " + Convert.ToString(difference));
return null;
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));Paramètres et déroulement de l’exécution :
- minimum=50 est un exemple d'exigence, pas de limite client. ResistanceAtLeast rejette le Player manquant, lit une valeur et renvoie bool : true ou false si valeur >= minimum. The resistance itself is not bool. La fonction est entièrement déclarée ci-dessous.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
if (Truth(Truth(ResistanceAtLeast(50)) == true))
{
UO.Print("Local resistance requirement met");
}
else
{
UO.Print("Requirement not met or no player");
}
return null;
}
dynamic ResistanceAtLeast(dynamic minimum)
{
if (Truth(UO.Self() == 0))
{
return false;
}
var value = UO.GetPhysicalResist();
return value >= minimum;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}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:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCharacterGetterAliases [GetPhysicalResist]. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Armor:bridge.Armor.
L’appel exécute le delegate du gestionnaire enregistré. La méthode d’enregistrement crée ce delegate lors de la construction de l’API.
Code interne de l’implémentation ; ce n’est pas un script autonome.
() => bridge.ArmorCréation de l’API: Ces fonctions enregistrent l’API. Elles ne sont pas exécutées à nouveau pour chaque appel de commande.
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.GetPlayerStatusText(object? objID);Génère un court texte du nom et de la santé de l'objet.
-
objID— Série/ID d'un objet spécifique : int, chaîne décimale/hexadécimale ou alias défini self, backpack, lasttarget, lastobject ou nom AddObject. Ce n'est pas graphic/type.
string au format « nom HP/MaxHP ». Par exemple "Corbeau 75/100". Pour un objet inconnu, généralement "0/0" avec un espace en tête. Il s'agit de texte, pas de structure, de bool ou d'un aperçu de statut ouvert.
- GetName/GetHP/GetMaxHP sont lus sans demander de mise à jour. N'analysez pas le texte par espace pour obtenir ID ou HP : le nom peut contenir des espaces, utilisez des commandes getter distinctes pour les nombres.
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.GetPlayerStatusText("self");
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Paramètres et déroulement de l’exécution :
- ObjID=self - caractère actuel.
- Print affiche le texte terminé dans le journal.
UO.Print(UO.GetPlayerStatusText("self"));Paramètres et déroulement de l’exécution :
- ObjID=serial de la dernière cible.
- Exists empêche la sortie d'un objet inconnu comme 0/0.
return RunScenario();
object? RunScenario()
{
var target = UO.GetSerial("lasttarget");
if (Truth(UO.Exists(target)))
{
UO.Print(UO.GetPlayerStatusText(target));
}
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 :
- 500 - millisecondes entre les lectures.
- Le texte du nom/HP est comparé, pas toutes les caractéristiques du personnage.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
async public Task<object?> RunScenarioAsync()
{
var before = UO.GetPlayerStatusText("self");
await Delay(500);
var after = UO.GetPlayerStatusText("self");
if (Truth(before != after))
{
UO.Print(after);
}
return null;
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}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: objID (Any)
Résultat: dynamic / Any.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetName:bridge.GetName(Arg(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetHP:bridge.GetHP(Arg(0)). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetMaxHP:bridge.GetMaxHP(Arg(0)).
Code interne de l’implémentation ; ce n’est pas un script autonome.
case "getplayerstatustext": return new InjectionValue(bridge.GetName(Arg(0)) + " " + bridge.GetHP(Arg(0)) + "/" + bridge.GetMaxHP(Arg(0)));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.GetPoisonResist();Lit le champ de résistance du personnage actuel : poison.
Il n'y a pas de paramètres.
int est la valeur d'état signée, -32768..32767 dans le modèle client. La valeur négative est conservée. 0 peut être une réelle résistance, un manque de données ou un joueur manquant/détruit ; GetResist donne également 0 pour un sélecteur inconnu. Ce n'est pas bool, ID, une limite de compétence ou de résistance. 1 signifie un point, pas un succès.
- La commande ne prend aucun argument. Utilisez les signatures exactes ci-dessus.
- La lecture sur le fil de jeu prend Player.PoisonResistance si le joueur actuel existe et n'a pas été détruit ; sinon 0. L'équipement n'est pas trié, les bonus ne sont pas recalculés, le statut n'est pas demandé et il n'y a pas d'attente de mises à jour. Un fantôme présent n'est pas égal à un joueur détruit.
- Les champs élémentaires sont disponibles en CharacterStatus étendu (0x11), type >= 4. La commande elle-même ne vérifie pas l'époque du serveur. Le statut Compact/ancien sans ces champs quitte le cache précédent ; Le nouveau joueur est initialement 0. La résistance au poison n'est pas un drapeau Poisoned ; Ce n'est pas non plus une compétence de Résistance aux Sorts.
- CharacterStatus vérifie le corps requis avant de changer le nom, la santé et les propres caractéristiques, puis traduit chaque mot de résistance en un Int16 signé. Un corps obligatoire tronqué ne modifie pas les données précédentes. Le type de queue facultatif 6 conserve les mêmes règles ; les commandes de résistance n'en lisent pas les limites maximales.
- Chaque appel lit à nouveau les données locales. La variable stocke l'instantané ; les lectures individuelles peuvent recevoir différentes mises à jour du serveur. Un résultat non nul ne teste pas la connexion. Zéro peut être une valeur ou aucune donnée.
- Ces fonctions enregistrent l’API. Elles ne sont pas exécutées à nouveau pour chaque appel de commande. C# distingue les majuscules. Utilisez le nom UO exact. Comparez les indicateurs numériques à 0 ; utilisez bool seulement si la signature renvoie bool.
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.GetPoisonResist();
UO.Print("GetPoisonResist: " + Convert.ToString(result));Paramètres et déroulement de l’exécution :
- value stocke le résultat d’un appel. Convert.ToString formate le numéro du journal. Il n'y a pas d'arguments : vous pouvez lire votre propre personnage.
var value = UO.GetPoisonResist();
UO.Print("PoisonResistance: " + Convert.ToString(value));Paramètres et déroulement de l’exécution :
- Entre avant et après, il y a UO.Wait(500) millisecondes ; la différence peut être négative. Les mises à jour intermédiaires peuvent être manquées. La pause fait référence à l'exemple, pas au délai API.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var before = UO.GetPoisonResist();
await Delay(500);
var after = UO.GetPoisonResist();
var difference = after - before;
UO.Print("Resistance change: " + Convert.ToString(difference));
return null;
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));Paramètres et déroulement de l’exécution :
- minimum=50 est un exemple d'exigence, pas de limite client. ResistanceAtLeast rejette le Player manquant, lit une valeur et renvoie bool : true ou false si valeur >= minimum. The resistance itself is not bool. La fonction est entièrement déclarée ci-dessous.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
if (Truth(Truth(ResistanceAtLeast(50)) == true))
{
UO.Print("Local resistance requirement met");
}
else
{
UO.Print("Requirement not met or no player");
}
return null;
}
dynamic ResistanceAtLeast(dynamic minimum)
{
if (Truth(UO.Self() == 0))
{
return false;
}
var value = UO.GetPoisonResist();
return value >= minimum;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}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:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCharacterGetterAliases [GetPoisonResist]. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.PoisonResistance:bridge.PoisonResistance.
L’appel exécute le delegate du gestionnaire enregistré. La méthode d’enregistrement crée ce delegate lors de la construction de l’API.
Code interne de l’implémentation ; ce n’est pas un script autonome.
() => bridge.PoisonResistanceCréation de l’API: Ces fonctions enregistrent l’API. Elles ne sont pas exécutées à nouveau pour chaque appel de commande.
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.GetPoisoned();
int UO.GetPoisoned(object? value);Vérifie l'empoisonnement du personnage.
-
value— Objet facultatif sous les formes affichées : serial par numéro/chaîne hexadécimale, self, lasttarget ou nom enregistré AddObject. Ce n'est pas type. Sans argument, lisez self. Un texte inconnu dans certains formulaires provoque une erreur de conversion ; vérifiez le nom avant d'appeler.
Flag numérique int : 1 (condition remplie), 0 (condition non remplie). Il s'agit d'un indicateur numérique : dans C#, vérifiez le résultat != 0 ou le résultat == 0. La comparaison directe de int avec true/false et if (résultat) n'est pas autorisée. 1 - mobile a IsPoisoned, 0 n'a pas d'indicateur ou mobile est manquant. Le degré de poison et le temps restant ne sont pas restitués.
Le résultat de la commande est un indicateur numérique : 1 signifie une condition remplie, 0 signifie une condition non remplie. Après var result = command(...) vérifiez si (result != 0) ou if (result == 0). Enregistrez le résultat d'un appel : un appel répété peut effectuer à nouveau l'action ou lire l'état qui a déjà changé.
- Lit le modèle local : n'ouvre pas la cible, ne demande pas de statut, ne modifie pas l'indicateur et n'envoie pas le paquet. Un objet détruit est considéré comme manquant avant même que l'entrée ne soit supprimée du dictionnaire.
- Le résultat est une lecture séparée. Le monde peut changer entre Exists et le prochain défi ; plusieurs requêtes ne forment pas un instantané atomique.
- Pour Poisoned/Flying la version du protocole est prise en compte : jusqu'à 7.0.0.0 le bit 0x04 signifie poison ; commençant par 7.0.0.0 cela signifie fuite et le poison est stocké séparément. Le vol n'est pas calculé à partir de Z.
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.GetPoisoned();
UO.Print("GetPoisoned: " + Convert.ToString(result));Paramètres et déroulement de l’exécution :
- Les parenthèses vides indiquent self. active enregistre le résultat une fois ; true et false définissent deux branches. Print affiche uniquement un exemple de message.
var active = UO.GetPoisoned();
if (Truth(Truth(active) == true))
{
UO.Print("State is active");
}
else
{
UO.Print("State is inactive or unavailable");
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Paramètres et déroulement de l’exécution :
- lasttarget – objet précédemment sélectionné. Exists vérifie sa présence. obj est le seul paramètre ReadState ; la fonction renvoie le résultat de la commande sans modification. Sa définition est incluse dans le code copié.
return RunScenario();
object? RunScenario()
{
if (Truth(UO.Exists("lasttarget")))
{
var observed = ReadState("lasttarget");
UO.Print("State 1/0: " + Convert.ToString(observed));
}
return null;
}
dynamic ReadState(dynamic obj)
{
return UO.GetPoisoned(obj);
}
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 :
- Deux appels sans arguments lisent self, UO.Wait(500) définit 500 millisecondes. Deux images sont comparées ; les transitions intermédiaires peuvent être ignorées. Il n’y a pas d’attente interminable.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
async public Task<object?> RunScenarioAsync()
{
var before = UO.GetPoisoned();
await Delay(500);
var after = UO.GetPoisoned();
if (Truth(before != after))
{
UO.Print("State changed: " + Convert.ToString(before) + " -> " + Convert.ToString(after));
}
return null;
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}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:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCharacterGetterAliases [GetPoisoned]. -
InjectionScript.Runtime.InjectionApiUO.RegisterCharacterGetterAliases. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Poisoned:bridge.Poisoned(serial). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Self:bridge.Self.
L’appel exécute le delegate du gestionnaire enregistré. La méthode d’enregistrement crée ce delegate lors de la construction de l’API.
Code interne de l’implémentation ; ce n’est pas un script autonome.
serial => bridge.Poisoned(serial)Code interne de l’implémentation ; ce n’est pas un script autonome.
() => getter(bridge.Self)Création de l’API: Ces fonctions enregistrent l’API. Elles ne sont pas exécutées à nouveau pour chaque appel de commande.
Paramètres: value (Any)
Résultat: int / Integer.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCharacterGetterAliases [GetPoisoned]. -
InjectionScript.Runtime.InjectionApiUO.RegisterCharacterGetterAliases. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Poisoned:bridge.Poisoned(serial). -
InjectionScript.Runtime.InjectionApiUO.GetObject:GetObject(value).
L’appel exécute le delegate du gestionnaire enregistré. La méthode d’enregistrement crée ce delegate lors de la construction de l’API.
Code interne de l’implémentation ; ce n’est pas un script autonome.
serial => bridge.Poisoned(serial)Code interne de l’implémentation ; ce n’est pas un script autonome.
value => getter(GetObject(value))Création de l’API: Ces fonctions enregistrent l’API. Elles ne sont pas exécutées à nouveau pour chaque appel de commande.
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.GetRace();Lit la race du personnage à partir du modèle client.
Il n'y a pas de paramètres.
int — 1=humain, 2=elfe, 3=gargouille selon le modèle client. 0 signifie qu'aucun caractère n'est chargé. Ce n'est pas body/graphic et non serial.
- Les données locales déjà reçues sont lues. La requête n'ouvre pas le statut et n'oblige pas le serveur à envoyer une mise à jour. Après un décès, une transition de map ou une suppression d'objet, les valeurs peuvent changer entre deux appels.
- C# distingue les majuscules. Utilisez le nom UO exact. Comparez les indicateurs numériques à 0 ; utilisez bool seulement si la signature renvoie bool.
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.GetRace();
UO.Print("GetRace: " + Convert.ToString(result));Paramètres et déroulement de l’exécution :
- L'appel sans arguments fait référence à self. La race du personnage est stockée en valeur.
- Convert.ToString convertit le nombre à sortir et ne change pas la signification du résultat.
var value = UO.GetRace();
UO.Print("GetRace: " + Convert.ToString(value));Paramètres et déroulement de l’exécution :
- La valeur est lue une fois sans aucun argument. La race du personnage est utilisée dans le calcul ou la condition affichée.
- Les seuils numériques sont des exemples de conditions de script et non de nouvelles limites client. Le champ stocke les unités de serveur et les restrictions décrites ci-dessus.
return RunScenario();
object? RunScenario()
{
var value = UO.GetRace();
if (Truth(value == 3))
{
UO.Print("Player race is gargoyle");
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Paramètres et déroulement de l’exécution :
- Les deux appels sans argument lisent leur valeur actuelle. UO.Wait(1000) donne une pause en millisecondes entre les prises de vue.
- Changement par rapport : race de personnage. Un exemple ne change rien au monde et n’attend pas indéfiniment. Les événements au cours de cette seconde peuvent être manqués.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
async public Task<object?> RunScenarioAsync()
{
var before = UO.GetRace();
await Delay(1000);
var after = UO.GetRace();
if (Truth(before != after))
{
UO.Print("Before: " + Convert.ToString(before) + "; after: " + Convert.ToString(after));
}
return null;
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}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:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCharacterGetterAliases [GetRace]. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Race:bridge.Race.
L’appel exécute le delegate du gestionnaire enregistré. La méthode d’enregistrement crée ce delegate lors de la construction de l’API.
Code interne de l’implémentation ; ce n’est pas un script autonome.
() => bridge.RaceCréation de l’API: Ces fonctions enregistrent l’API. Elles ne sont pas exécutées à nouveau pour chaque appel de commande.
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.GetResist(object? resistance);Lit l'une des résistances de votre personnage à l'aide d'un sélecteur numérique ou de chaîne.
-
resistance— une résistance est requise. Nombres : 0=physique, 1=feu, 2=froid, 3=poison, 4=énergie. Lignes : physique/physique/armure, feu, froid, poison, énergie. La casse et les espaces de fin sont ignorés. Il n'y a pas de serial, type, hue, de vue ou de deuxième argument.
int est la valeur d'état signée, -32768..32767 dans le modèle client. La valeur négative est conservée. 0 peut être une réelle résistance, un manque de données ou un joueur manquant/détruit ; GetResist donne également 0 pour un sélecteur inconnu. Ce n'est pas bool, ID, une limite de compétence ou de résistance. 1 signifie un point, pas un succès.
- GetResistance distingue d'abord le type de valeur : les chaînes "1" et "0" sont des noms inconnus, donnent 0 et ne sont pas des sélecteurs numériques. Une non-chaîne double rejette la fraction à zéro : 1.9 -> feu, -0.9 -> physique. true=1 sélectionne le feu, false=0 sélectionne le physique ; Array/null est également converti en 0. Utilisez un entier explicite ou un nom valide. Les noms AddObject ne sont pas autorisés.
- GetResistance sélectionne exactement un champ de pont. Les nombres/noms inconnus donnent int 0 sans lire le champ. La commande ne supprime pas cinq valeurs de manière atomique et ne modifie pas la résistance.
- PhysicalResistance - champ armure/statut du serveur : le serveur classique peut transmettre l'indice d'armure, et les règles avec résistances peuvent transmettre une résistance physique. API ne convertit pas de l'un à l'autre et ne calcule pas le pourcentage de réduction des dégâts. Armor et les alias physiques lisent le même champ.
- Les champs élémentaires sont disponibles en CharacterStatus étendu (0x11), type >= 4. La commande elle-même ne vérifie pas l'époque du serveur. Le statut Compact/ancien sans ces champs quitte le cache précédent ; Le nouveau joueur est initialement 0. La résistance au poison n'est pas un drapeau Poisoned ; Ce n'est pas non plus une compétence de Résistance aux Sorts.
- CharacterStatus vérifie le corps requis avant de changer le nom, la santé et les propres caractéristiques, puis traduit chaque mot de résistance en un Int16 signé. Un corps obligatoire tronqué ne modifie pas les données précédentes. Le type de queue facultatif 6 conserve les mêmes règles ; les commandes de résistance n'en lisent pas les limites maximales.
- Invoke lit sur le flux du jeu avec la possibilité d'annuler l'attente par script. N'interroge pas l'état, n'ouvre pas la cible, n'envoie pas de paquet, ne modifie pas les caractéristiques et n'ajoute pas de délai.
- Chaque appel lit à nouveau les données locales. La variable stocke l'instantané ; les lectures individuelles peuvent recevoir différentes mises à jour du serveur. Un résultat non nul ne teste pas la connexion. Zéro peut être une valeur ou aucune donnée.
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.GetResist("fire");
UO.Print("GetResist: " + Convert.ToString(result));Paramètres et déroulement de l’exécution :
- résistance=" FiRe " sélectionne le feu après avoir supprimé les espaces de fin et n'est pas sensible à la casse. la valeur reste un nombre signé ; la vue n'apparaît pas.
var value = UO.GetResist(" FiRe ");
UO.Print("Fire resistance: " + Convert.ToString(value));Paramètres et déroulement de l’exécution :
- 2 sélectionne le froid ; "poison" - poison. Ce sont des sélecteurs, pas serial. La comparaison de deux instantanés renvoie bool ; Poison Resistance ne dit pas si un personnage est empoisonné.
return RunScenario();
object? RunScenario()
{
var cold = UO.GetResist(2);
var poison = UO.GetResist("poison");
if (Truth(cold < poison))
{
UO.Print("Cold resistance is lower");
}
else
{
UO.Print("Cold resistance is equal or higher");
}
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 :
- minimum=50 est un exemple d'exigence, pas de limite client. ResistanceAtLeast rejette le Player manquant, lit une valeur et renvoie bool : true ou false si valeur >= minimum. The resistance itself is not bool. La fonction est entièrement déclarée ci-dessous.
- le sélecteur est passé de la fonction à GetResist sans modification ; l'exemple utilise "feu". La fonction vérifie la présence du Player, mais ne valide pas le sélecteur arbitraire et ne confirme pas la fraîcheur du statut. Utilisez le sélecteur dans la liste ci-dessus.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
if (Truth(Truth(ResistanceAtLeast("fire", 50)) == true))
{
UO.Print("Local fire resistance requirement met");
}
else
{
UO.Print("Requirement not met or no player");
}
return null;
}
dynamic ResistanceAtLeast(dynamic selector, dynamic minimum)
{
if (Truth(UO.Self() == 0))
{
return false;
}
var value = UO.GetResist(selector);
return value >= minimum;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}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: resistance (Any)
Résultat: int / Integer.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.GetResistance. -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(resistance). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Armor:bridge.Armor. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.FireResistance:bridge.FireResistance. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.ColdResistance:bridge.ColdResistance. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.PoisonResistance:bridge.PoisonResistance. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.EnergyResistance:bridge.EnergyResistance.
Code interne de l’implémentation ; ce n’est pas un script autonome.
private int GetResistance(InjectionValue resistance)
{
if (resistance.Kind != InjectionValueKind.String)
{
switch (NumberConversions.ToInt(resistance))
{
case 0: return bridge.Armor;
case 1: return bridge.FireResistance;
case 2: return bridge.ColdResistance;
case 3: return bridge.PoisonResistance;
case 4: return bridge.EnergyResistance;
default: return 0;
}
}
switch ((resistance.String ?? string.Empty).Trim().ToLowerInvariant())
{
case "physical":
case "phys":
case "armor": return bridge.Armor;
case "fire": return bridge.FireResistance;
case "cold": return bridge.ColdResistance;
case "poison": return bridge.PoisonResistance;
case "energy": return bridge.EnergyResistance;
default: return 0;
}
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.GetResistCold();Lit le champ de résistance du personnage actuel : froid.
Il n'y a pas de paramètres.
int est la valeur d'état signée, -32768..32767 dans le modèle client. La valeur négative est conservée. 0 peut être une réelle résistance, un manque de données ou un joueur manquant/détruit ; GetResist donne également 0 pour un sélecteur inconnu. Ce n'est pas bool, ID, une limite de compétence ou de résistance. 1 signifie un point, pas un succès.
- La commande ne prend aucun argument. Utilisez les signatures exactes ci-dessus.
- La lecture sur le fil de jeu prend Player.ColdResistance si le joueur actuel existe et n'a pas été détruit ; sinon 0. L'équipement n'est pas trié, les bonus ne sont pas recalculés, le statut n'est pas demandé et il n'y a pas d'attente de mises à jour. Un fantôme présent n'est pas égal à un joueur détruit.
- Les champs élémentaires sont disponibles en CharacterStatus étendu (0x11), type >= 4. La commande elle-même ne vérifie pas l'époque du serveur. Le statut Compact/ancien sans ces champs quitte le cache précédent ; Le nouveau joueur est initialement 0. La résistance au poison n'est pas un drapeau Poisoned ; Ce n'est pas non plus une compétence de Résistance aux Sorts.
- CharacterStatus vérifie le corps requis avant de changer le nom, la santé et les propres caractéristiques, puis traduit chaque mot de résistance en un Int16 signé. Un corps obligatoire tronqué ne modifie pas les données précédentes. Le type de queue facultatif 6 conserve les mêmes règles ; les commandes de résistance n'en lisent pas les limites maximales.
- Chaque appel lit à nouveau les données locales. La variable stocke l'instantané ; les lectures individuelles peuvent recevoir différentes mises à jour du serveur. Un résultat non nul ne teste pas la connexion. Zéro peut être une valeur ou aucune donnée.
- Ces fonctions enregistrent l’API. Elles ne sont pas exécutées à nouveau pour chaque appel de commande. C# distingue les majuscules. Utilisez le nom UO exact. Comparez les indicateurs numériques à 0 ; utilisez bool seulement si la signature renvoie bool.
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.GetResistCold();
UO.Print("GetResistCold: " + Convert.ToString(result));Paramètres et déroulement de l’exécution :
- value stocke le résultat d’un appel. Convert.ToString formate le numéro du journal. Il n'y a pas d'arguments : vous pouvez lire votre propre personnage.
var value = UO.GetResistCold();
UO.Print("ColdResistance: " + Convert.ToString(value));Paramètres et déroulement de l’exécution :
- Entre avant et après, il y a UO.Wait(500) millisecondes ; la différence peut être négative. Les mises à jour intermédiaires peuvent être manquées. La pause fait référence à l'exemple, pas au délai API.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var before = UO.GetResistCold();
await Delay(500);
var after = UO.GetResistCold();
var difference = after - before;
UO.Print("Resistance change: " + Convert.ToString(difference));
return null;
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));Paramètres et déroulement de l’exécution :
- minimum=50 est un exemple d'exigence, pas de limite client. ResistanceAtLeast rejette le Player manquant, lit une valeur et renvoie bool : true ou false si valeur >= minimum. The resistance itself is not bool. La fonction est entièrement déclarée ci-dessous.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
if (Truth(Truth(ResistanceAtLeast(50)) == true))
{
UO.Print("Local resistance requirement met");
}
else
{
UO.Print("Requirement not met or no player");
}
return null;
}
dynamic ResistanceAtLeast(dynamic minimum)
{
if (Truth(UO.Self() == 0))
{
return false;
}
var value = UO.GetResistCold();
return value >= minimum;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}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:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCharacterGetterAliases [GetResistCold]. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.ColdResistance:bridge.ColdResistance.
L’appel exécute le delegate du gestionnaire enregistré. La méthode d’enregistrement crée ce delegate lors de la construction de l’API.
Code interne de l’implémentation ; ce n’est pas un script autonome.
() => bridge.ColdResistanceCréation de l’API: Ces fonctions enregistrent l’API. Elles ne sont pas exécutées à nouveau pour chaque appel de commande.
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.GetResistEnergy();Lit le champ de résistance du personnage actuel : énergie.
Il n'y a pas de paramètres.
int est la valeur d'état signée, -32768..32767 dans le modèle client. La valeur négative est conservée. 0 peut être une réelle résistance, un manque de données ou un joueur manquant/détruit ; GetResist donne également 0 pour un sélecteur inconnu. Ce n'est pas bool, ID, une limite de compétence ou de résistance. 1 signifie un point, pas un succès.
- La commande ne prend aucun argument. Utilisez les signatures exactes ci-dessus.
- La lecture sur le fil de jeu prend Player.EnergyResistance si le joueur actuel existe et n'a pas été détruit ; sinon 0. L'équipement n'est pas trié, les bonus ne sont pas recalculés, le statut n'est pas demandé et il n'y a pas d'attente de mises à jour. Un fantôme présent n'est pas égal à un joueur détruit.
- Les champs élémentaires sont disponibles en CharacterStatus étendu (0x11), type >= 4. La commande elle-même ne vérifie pas l'époque du serveur. Le statut Compact/ancien sans ces champs quitte le cache précédent ; Le nouveau joueur est initialement 0. La résistance au poison n'est pas un drapeau Poisoned ; Ce n'est pas non plus une compétence de Résistance aux Sorts.
- CharacterStatus vérifie le corps requis avant de changer le nom, la santé et les propres caractéristiques, puis traduit chaque mot de résistance en un Int16 signé. Un corps obligatoire tronqué ne modifie pas les données précédentes. Le type de queue facultatif 6 conserve les mêmes règles ; les commandes de résistance n'en lisent pas les limites maximales.
- Chaque appel lit à nouveau les données locales. La variable stocke l'instantané ; les lectures individuelles peuvent recevoir différentes mises à jour du serveur. Un résultat non nul ne teste pas la connexion. Zéro peut être une valeur ou aucune donnée.
- Ces fonctions enregistrent l’API. Elles ne sont pas exécutées à nouveau pour chaque appel de commande. C# distingue les majuscules. Utilisez le nom UO exact. Comparez les indicateurs numériques à 0 ; utilisez bool seulement si la signature renvoie bool.
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.GetResistEnergy();
UO.Print("GetResistEnergy: " + Convert.ToString(result));Paramètres et déroulement de l’exécution :
- value stocke le résultat d’un appel. Convert.ToString formate le numéro du journal. Il n'y a pas d'arguments : vous pouvez lire votre propre personnage.
var value = UO.GetResistEnergy();
UO.Print("EnergyResistance: " + Convert.ToString(value));Paramètres et déroulement de l’exécution :
- Entre avant et après, il y a UO.Wait(500) millisecondes ; la différence peut être négative. Les mises à jour intermédiaires peuvent être manquées. La pause fait référence à l'exemple, pas au délai API.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var before = UO.GetResistEnergy();
await Delay(500);
var after = UO.GetResistEnergy();
var difference = after - before;
UO.Print("Resistance change: " + Convert.ToString(difference));
return null;
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));Paramètres et déroulement de l’exécution :
- minimum=50 est un exemple d'exigence, pas de limite client. ResistanceAtLeast rejette le Player manquant, lit une valeur et renvoie bool : true ou false si valeur >= minimum. The resistance itself is not bool. La fonction est entièrement déclarée ci-dessous.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
if (Truth(Truth(ResistanceAtLeast(50)) == true))
{
UO.Print("Local resistance requirement met");
}
else
{
UO.Print("Requirement not met or no player");
}
return null;
}
dynamic ResistanceAtLeast(dynamic minimum)
{
if (Truth(UO.Self() == 0))
{
return false;
}
var value = UO.GetResistEnergy();
return value >= minimum;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}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:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCharacterGetterAliases [GetResistEnergy]. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.EnergyResistance:bridge.EnergyResistance.
L’appel exécute le delegate du gestionnaire enregistré. La méthode d’enregistrement crée ce delegate lors de la construction de l’API.
Code interne de l’implémentation ; ce n’est pas un script autonome.
() => bridge.EnergyResistanceCréation de l’API: Ces fonctions enregistrent l’API. Elles ne sont pas exécutées à nouveau pour chaque appel de commande.
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.GetResistFire();Lit le champ de résistance du personnage actuel : le feu.
Il n'y a pas de paramètres.
int est la valeur d'état signée, -32768..32767 dans le modèle client. La valeur négative est conservée. 0 peut être une réelle résistance, un manque de données ou un joueur manquant/détruit ; GetResist donne également 0 pour un sélecteur inconnu. Ce n'est pas bool, ID, une limite de compétence ou de résistance. 1 signifie un point, pas un succès.
- La commande ne prend aucun argument. Utilisez les signatures exactes ci-dessus.
- La lecture sur le fil de jeu prend Player.FireResistance si le joueur actuel existe et n'a pas été détruit ; sinon 0. L'équipement n'est pas trié, les bonus ne sont pas recalculés, le statut n'est pas demandé et il n'y a pas d'attente de mises à jour. Un fantôme présent n'est pas égal à un joueur détruit.
- Les champs élémentaires sont disponibles en CharacterStatus étendu (0x11), type >= 4. La commande elle-même ne vérifie pas l'époque du serveur. Le statut Compact/ancien sans ces champs quitte le cache précédent ; Le nouveau joueur est initialement 0. La résistance au poison n'est pas un drapeau Poisoned ; Ce n'est pas non plus une compétence de Résistance aux Sorts.
- CharacterStatus vérifie le corps requis avant de changer le nom, la santé et les propres caractéristiques, puis traduit chaque mot de résistance en un Int16 signé. Un corps obligatoire tronqué ne modifie pas les données précédentes. Le type de queue facultatif 6 conserve les mêmes règles ; les commandes de résistance n'en lisent pas les limites maximales.
- Chaque appel lit à nouveau les données locales. La variable stocke l'instantané ; les lectures individuelles peuvent recevoir différentes mises à jour du serveur. Un résultat non nul ne teste pas la connexion. Zéro peut être une valeur ou aucune donnée.
- Ces fonctions enregistrent l’API. Elles ne sont pas exécutées à nouveau pour chaque appel de commande. C# distingue les majuscules. Utilisez le nom UO exact. Comparez les indicateurs numériques à 0 ; utilisez bool seulement si la signature renvoie bool.
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.GetResistFire();
UO.Print("GetResistFire: " + Convert.ToString(result));Paramètres et déroulement de l’exécution :
- value stocke le résultat d’un appel. Convert.ToString formate le numéro du journal. Il n'y a pas d'arguments : vous pouvez lire votre propre personnage.
var value = UO.GetResistFire();
UO.Print("FireResistance: " + Convert.ToString(value));Paramètres et déroulement de l’exécution :
- Entre avant et après, il y a UO.Wait(500) millisecondes ; la différence peut être négative. Les mises à jour intermédiaires peuvent être manquées. La pause fait référence à l'exemple, pas au délai API.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var before = UO.GetResistFire();
await Delay(500);
var after = UO.GetResistFire();
var difference = after - before;
UO.Print("Resistance change: " + Convert.ToString(difference));
return null;
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));Paramètres et déroulement de l’exécution :
- minimum=50 est un exemple d'exigence, pas de limite client. ResistanceAtLeast rejette le Player manquant, lit une valeur et renvoie bool : true ou false si valeur >= minimum. The resistance itself is not bool. La fonction est entièrement déclarée ci-dessous.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
if (Truth(Truth(ResistanceAtLeast(50)) == true))
{
UO.Print("Local resistance requirement met");
}
else
{
UO.Print("Requirement not met or no player");
}
return null;
}
dynamic ResistanceAtLeast(dynamic minimum)
{
if (Truth(UO.Self() == 0))
{
return false;
}
var value = UO.GetResistFire();
return value >= minimum;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}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:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCharacterGetterAliases [GetResistFire]. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.FireResistance:bridge.FireResistance.
L’appel exécute le delegate du gestionnaire enregistré. La méthode d’enregistrement crée ce delegate lors de la construction de l’API.
Code interne de l’implémentation ; ce n’est pas un script autonome.
() => bridge.FireResistanceCréation de l’API: Ces fonctions enregistrent l’API. Elles ne sont pas exécutées à nouveau pour chaque appel de commande.
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.GetResistPhysical();Lit le champ de résistance du personnage actuel : armure physique/résistance.
Il n'y a pas de paramètres.
int est la valeur d'état signée, -32768..32767 dans le modèle client. La valeur négative est conservée. 0 peut être une réelle résistance, un manque de données ou un joueur manquant/détruit ; GetResist donne également 0 pour un sélecteur inconnu. Ce n'est pas bool, ID, une limite de compétence ou de résistance. 1 signifie un point, pas un succès.
- La commande ne prend aucun argument. Utilisez les signatures exactes ci-dessus.
- La lecture sur le fil de jeu prend Player.PhysicalResistance si le joueur actuel existe et n'a pas été détruit ; sinon 0. L'équipement n'est pas trié, les bonus ne sont pas recalculés, le statut n'est pas demandé et il n'y a pas d'attente de mises à jour. Un fantôme présent n'est pas égal à un joueur détruit.
- PhysicalResistance - champ armure/statut du serveur : le serveur classique peut transmettre l'indice d'armure, et les règles avec résistances peuvent transmettre une résistance physique. API ne convertit pas de l'un à l'autre et ne calcule pas le pourcentage de réduction des dégâts. Armor et les alias physiques lisent le même champ.
- CharacterStatus vérifie le corps requis avant de changer le nom, la santé et les propres caractéristiques, puis traduit chaque mot de résistance en un Int16 signé. Un corps obligatoire tronqué ne modifie pas les données précédentes. Le type de queue facultatif 6 conserve les mêmes règles ; les commandes de résistance n'en lisent pas les limites maximales.
- Chaque appel lit à nouveau les données locales. La variable stocke l'instantané ; les lectures individuelles peuvent recevoir différentes mises à jour du serveur. Un résultat non nul ne teste pas la connexion. Zéro peut être une valeur ou aucune donnée.
- Ces fonctions enregistrent l’API. Elles ne sont pas exécutées à nouveau pour chaque appel de commande. C# distingue les majuscules. Utilisez le nom UO exact. Comparez les indicateurs numériques à 0 ; utilisez bool seulement si la signature renvoie bool.
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.GetResistPhysical();
UO.Print("GetResistPhysical: " + Convert.ToString(result));Paramètres et déroulement de l’exécution :
- value stocke le résultat d’un appel. Convert.ToString formate le numéro du journal. Il n'y a pas d'arguments : vous pouvez lire votre propre personnage.
var value = UO.GetResistPhysical();
UO.Print("PhysicalResistance: " + Convert.ToString(value));Paramètres et déroulement de l’exécution :
- Entre avant et après, il y a UO.Wait(500) millisecondes ; la différence peut être négative. Les mises à jour intermédiaires peuvent être manquées. La pause fait référence à l'exemple, pas au délai API.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var before = UO.GetResistPhysical();
await Delay(500);
var after = UO.GetResistPhysical();
var difference = after - before;
UO.Print("Resistance change: " + Convert.ToString(difference));
return null;
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));Paramètres et déroulement de l’exécution :
- minimum=50 est un exemple d'exigence, pas de limite client. ResistanceAtLeast rejette le Player manquant, lit une valeur et renvoie bool : true ou false si valeur >= minimum. The resistance itself is not bool. La fonction est entièrement déclarée ci-dessous.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
if (Truth(Truth(ResistanceAtLeast(50)) == true))
{
UO.Print("Local resistance requirement met");
}
else
{
UO.Print("Requirement not met or no player");
}
return null;
}
dynamic ResistanceAtLeast(dynamic minimum)
{
if (Truth(UO.Self() == 0))
{
return false;
}
var value = UO.GetResistPhysical();
return value >= minimum;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}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:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCharacterGetterAliases [GetResistPhysical]. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Armor:bridge.Armor.
L’appel exécute le delegate du gestionnaire enregistré. La méthode d’enregistrement crée ce delegate lors de la construction de l’API.
Code interne de l’implémentation ; ce n’est pas un script autonome.
() => bridge.ArmorCréation de l’API: Ces fonctions enregistrent l’API. Elles ne sont pas exécutées à nouveau pour chaque appel de commande.
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.GetResistPoison();Lit le champ de résistance du personnage actuel : poison.
Il n'y a pas de paramètres.
int est la valeur d'état signée, -32768..32767 dans le modèle client. La valeur négative est conservée. 0 peut être une réelle résistance, un manque de données ou un joueur manquant/détruit ; GetResist donne également 0 pour un sélecteur inconnu. Ce n'est pas bool, ID, une limite de compétence ou de résistance. 1 signifie un point, pas un succès.
- La commande ne prend aucun argument. Utilisez les signatures exactes ci-dessus.
- La lecture sur le fil de jeu prend Player.PoisonResistance si le joueur actuel existe et n'a pas été détruit ; sinon 0. L'équipement n'est pas trié, les bonus ne sont pas recalculés, le statut n'est pas demandé et il n'y a pas d'attente de mises à jour. Un fantôme présent n'est pas égal à un joueur détruit.
- Les champs élémentaires sont disponibles en CharacterStatus étendu (0x11), type >= 4. La commande elle-même ne vérifie pas l'époque du serveur. Le statut Compact/ancien sans ces champs quitte le cache précédent ; Le nouveau joueur est initialement 0. La résistance au poison n'est pas un drapeau Poisoned ; Ce n'est pas non plus une compétence de Résistance aux Sorts.
- CharacterStatus vérifie le corps requis avant de changer le nom, la santé et les propres caractéristiques, puis traduit chaque mot de résistance en un Int16 signé. Un corps obligatoire tronqué ne modifie pas les données précédentes. Le type de queue facultatif 6 conserve les mêmes règles ; les commandes de résistance n'en lisent pas les limites maximales.
- Chaque appel lit à nouveau les données locales. La variable stocke l'instantané ; les lectures individuelles peuvent recevoir différentes mises à jour du serveur. Un résultat non nul ne teste pas la connexion. Zéro peut être une valeur ou aucune donnée.
- Ces fonctions enregistrent l’API. Elles ne sont pas exécutées à nouveau pour chaque appel de commande. C# distingue les majuscules. Utilisez le nom UO exact. Comparez les indicateurs numériques à 0 ; utilisez bool seulement si la signature renvoie bool.
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.GetResistPoison();
UO.Print("GetResistPoison: " + Convert.ToString(result));Paramètres et déroulement de l’exécution :
- value stocke le résultat d’un appel. Convert.ToString formate le numéro du journal. Il n'y a pas d'arguments : vous pouvez lire votre propre personnage.
var value = UO.GetResistPoison();
UO.Print("PoisonResistance: " + Convert.ToString(value));Paramètres et déroulement de l’exécution :
- Entre avant et après, il y a UO.Wait(500) millisecondes ; la différence peut être négative. Les mises à jour intermédiaires peuvent être manquées. La pause fait référence à l'exemple, pas au délai API.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var before = UO.GetResistPoison();
await Delay(500);
var after = UO.GetResistPoison();
var difference = after - before;
UO.Print("Resistance change: " + Convert.ToString(difference));
return null;
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));Paramètres et déroulement de l’exécution :
- minimum=50 est un exemple d'exigence, pas de limite client. ResistanceAtLeast rejette le Player manquant, lit une valeur et renvoie bool : true ou false si valeur >= minimum. The resistance itself is not bool. La fonction est entièrement déclarée ci-dessous.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
if (Truth(Truth(ResistanceAtLeast(50)) == true))
{
UO.Print("Local resistance requirement met");
}
else
{
UO.Print("Requirement not met or no player");
}
return null;
}
dynamic ResistanceAtLeast(dynamic minimum)
{
if (Truth(UO.Self() == 0))
{
return false;
}
var value = UO.GetResistPoison();
return value >= minimum;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}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:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCharacterGetterAliases [GetResistPoison]. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.PoisonResistance:bridge.PoisonResistance.
L’appel exécute le delegate du gestionnaire enregistré. La méthode d’enregistrement crée ce delegate lors de la construction de l’API.
Code interne de l’implémentation ; ce n’est pas un script autonome.
() => bridge.PoisonResistanceCréation de l’API: Ces fonctions enregistrent l’API. Elles ne sont pas exécutées à nouveau pour chaque appel de commande.
ClassicUO — Bad Newbie & C# Scripts IDE