FR UO Topic search Part 2 - LIHACHTETAN/ClassicUO-Bad-Newbie-CSharp-Scripts-IDE GitHub Wiki
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
Accueil · C# · IDE · UO API · A–Z · Exemples · Langues
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.FindMan();
dynamic UO.FindMan(object? notoriety);
dynamic UO.FindMan(object? notoriety, object? distance);
dynamic UO.FindMan(object? notoriety, object? distance, object? nearest);
dynamic UO.FindMan(object? notoriety, object? distance, object? nearest, object? maxZ);
dynamic UO.FindMan(object? notoriety, object? distance, object? nearest, object? maxZ, object? body);
dynamic UO.FindMan(object? notoriety, object? distance, object? nearest, object? maxZ, object? body, object? color);
dynamic UO.FindMan(object? notoriety, object? distance, object? nearest, object? maxZ, object? body, object? color, object? includeSelf);Trouve un serial par notoriété, distance, hauteur, corps et hue. Utilisé pour présélectionner une cible sans attaque automatique.
-
notoriety— Statut de la relation avec le personnage reçu du serveur : 0 — inconnu, 1 — Innocent, 2 — Allié, 3 — Gris, 4 — Criminel, 5 — Ennemi, 6 — Meurtrier, 7 - Invulnérable. Le nombre signifie un statut ; "5|6" ou un tableau de nombres - l'un des éléments ci-dessus. Ce n'est pas la couleur des vêtements ou de la classe. Un nombre négatif (généralement -1), 0xFFFF, "any", une chaîne vide ou un tableau vide désactive séparément ce filtre. Une chaîne invalide sans nombres valides ne trouve personne. L'ordre des statuts ne définit pas la priorité. Le filtre 5 sélectionne l'ennemi plutôt que de sélectionner automatiquement n'importe quel NPC/monstre ; les valeurs réelles dépendent du serveur. -
distance— Rayon horizontal en cellules incluses : 5 permet la distance 0..5. La distance est max(abs(dx),abs(dy)), donc la diagonale adjacente est également 1. Par défaut ou si le nombre est négatif, c'est UO.FindDistance() qui est utilisé plutôt qu'une recherche illimitée. 0 laisse la même cellule X/Y. Pas la longueur du parcours ; les obstacles et les sols ne sont pas vérifiés par ce paramètre. -
nearest- true/1 par défaut - le plus proche, à égale distance le plus petit serial ; false/0 - le premier sur la liste du client, pas le plus éloigné. -
maxZ— Abs maximum (Z de la cible - Z du propre personnage), inclus, en unités Z du monde. Il ne s'agit pas du nombre d'étages ou de cellules X/Y. maxZ=4 avec le joueur Z 10 autorise la cible Z 6..14 ; 0 nécessite exactement la même hauteur. Par défaut/pour un nombre négatif, UO.FindVertical() est pris. Dans les escaliers, un Z égal peut éliminer la cible souhaitée. Même une petite différence de Z ne prouve pas l’accessibilité du sol. -
body- Graphique du corps du personnage/NPC, pas ID d'un personnage spécifique et non type de l'armure portée. Un nombre, une chaîne hexadécimale, la chaîne "0x0190|0x0191" ou un tableau de nombres. 0x0190 (400) - mâle humain ; 0x0191 (401) - femme humaine. Le masque unit les deux corps. La liste n'inclut pas automatiquement d'autres races, fantômes ou transformations ; tableau des types de corps graphiques standard. Un nombre négatif (-1 par défaut), 0xFFFF, "any", une chaîne vide ou un tableau vide seul - n'importe quel corps. Un texte inconnu sans numéro valide produit un résultat vide. -
color— Teinte de mobile lui-même : int ou chaîne numérique/hexadécimale. Nombre négatif (-1 par défaut) et 0xFFFF - n'importe quel hue ; 0 est exactement hue 0, et non n'importe quelle valeur. Pas la couleur de la bande de notoriété ni la teinte des vêtements. Ce paramètre ne vérifie pas la couleur de l'article porté. -
includeSelf- true/1 autorise self sous réserve d'autres filtres ; false/0 exclut par défaut. Ignore s'applique également à self.
int serial, ou 0 sans résultat. Vérifiez l'identifiant != 0; ce n'est pas bool ni une quantité. Ne change pas FindItem/FindCount/GetFoundItems et ne lance pas d'attaque.
- Recherche locale : uniquement les mobiles déjà téléchargés. Ignore est pris en compte ; self est exclu, à l'exception du includeSelf=true explicite dans les commandes qui le prennent en charge. Les conteneurs et les objets ne sont pas mobiles.
- Les conditions s'appliquent ensemble (AND). Les alternatives valides au sein de body/notoriété sont combinées via OR. La recherche ne change pas FindItem, FindCount et GetFoundItems.
- Dans body/notoriété, le masque avec les numéros valides utilise ceux-ci : "any|5" le limite toujours à 5. Les éléments vides/invalides à côté des nombres valides sont ignorés. Sans restriction, passez -1 séparément. Ne portez pas cette règle à classMask : le nom de classe inconnu rejette la liste entière.
- Les équipes n'ouvrent pas de zone du monde, ne courent pas vers le but et ne vérifient pas la praticabilité du parcours. Entre la sélection et le traitement par le serveur, l'état du monde peut changer.
- La transmission de true et 1 est équivalente pour les drapeaux, false et 0 également. D'autres nombres non nuls sont également convertis en true, mais 8/9 ne sont pas des modes séparés ; utilisez clair true/false.
- Ordre exact : notoriété, distance, plus proche, maxZ, body, couleur, includeSelf. Différent de AttackNearest et GetMobiles.
- Il n'y a pas de paramètres classMask, aliveOnly ou visibleOnly. Si nécessaire, vérifiez séparément le ID trouvé ; pour sélectionner parmi tous les vivants/visibles, utilisez GetMobiles afin que le mort le plus proche n'obscurcisse pas les autres.
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.FindMan(2, 12);
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Paramètres et déroulement de l’exécution :
- 2 - Allié, 12 - rayon. Le reste : le plus proche=true, maxZ=FindVertical(), tout body/hue, self exclu. L'équipe sauve seulement la cible, n'attaque pas.
var ally = UO.FindMan(2, 12);
if (Truth(ally == 0))
{
return null;
}
UO.AddObject("ally_nearby", ally);
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Paramètres et déroulement de l’exécution :
- Le contrôle IsDead a été effectué séparément. body précise les organismes ; bodyHue=-1 ne les limite pas à hue. Cette équipe ne classe pas par vêtements.
return RunScenario();
object? RunScenario()
{
var status = 5;
var radius = 8;
dynamic nearest = true;
var height = 4;
var bodies = "0x0190|0x0191";
var bodyHue = -1;
dynamic includeMe = false;
var enemy = UO.FindMan(status, radius, nearest, height, bodies, bodyHue, includeMe);
if (Truth(enemy != 0))
{
if (Truth(UO.IsDead(enemy) == 0))
{
UO.Attack(enemy);
}
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Paramètres et déroulement de l’exécution :
- Le premier -1 désactive la notoriété, le second -1 désactive body. false en troisième position désactive le tri ; le dernier false exclut self. La teinte des vêtements n'est pas vérifiée.
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 chosenHue = 0x0455;
var mobile = UO.FindMan(-1, 10, false, 8, -1, chosenHue, false);
if (Truth(mobile == 0))
{
return null;
}
UO.AddObject("body_hue_match", mobile);
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}C# distingue les majuscules. Utilisez le nom UO exact. Comparez les indicateurs numériques à 0 ; utilisez bool seulement si la signature renvoie bool.
Paramètres: Aucun paramètre.
Résultat: void / Unit.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetMobiles:bridge.GetMobiles(). -
InjectionScript.Runtime.State.RuntimeDictionary.Set:state.Objects.Set(arguments.Length > 0 ? Text(0) : "findman", mobile). -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Text:Text(0).
Code interne de l’implémentation ; ce n’est pas un script autonome.
case "findman":
{
int mobile = bridge.GetMobiles().FirstOrDefault();
if (mobile != 0) state.Objects.Set(arguments.Length > 0 ? Text(0) : "findman", mobile);
break;
}Paramètres: notoriety (Any)
Résultat: dynamic / Any.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCompactSearchApi [FindMan]. -
InjectionScript.Runtime.InjectionApiUO.CompactFindMan:CompactFindMan(values).
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.
values => new InjectionValue(CompactFindMan(values))Paramètres: notoriety (Any), distance (Any)
Résultat: dynamic / Any.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCompactSearchApi [FindMan]. -
InjectionScript.Runtime.InjectionApiUO.CompactFindMan:CompactFindMan(values).
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.
values => new InjectionValue(CompactFindMan(values))Paramètres: notoriety (Any), distance (Any), nearest (Any)
Résultat: dynamic / Any.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCompactSearchApi [FindMan]. -
InjectionScript.Runtime.InjectionApiUO.CompactFindMan:CompactFindMan(values).
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.
values => new InjectionValue(CompactFindMan(values))Paramètres: notoriety (Any), distance (Any), nearest (Any), maxZ (Any)
Résultat: dynamic / Any.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCompactSearchApi [FindMan]. -
InjectionScript.Runtime.InjectionApiUO.CompactFindMan:CompactFindMan(values).
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.
values => new InjectionValue(CompactFindMan(values))Paramètres: notoriety (Any), distance (Any), nearest (Any), maxZ (Any), body (Any)
Résultat: dynamic / Any.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCompactSearchApi [FindMan]. -
InjectionScript.Runtime.InjectionApiUO.CompactFindMan:CompactFindMan(values).
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.
values => new InjectionValue(CompactFindMan(values))Paramètres: notoriety (Any), distance (Any), nearest (Any), maxZ (Any), body (Any), color (Any)
Résultat: dynamic / Any.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCompactSearchApi [FindMan]. -
InjectionScript.Runtime.InjectionApiUO.CompactFindMan:CompactFindMan(values).
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.
values => new InjectionValue(CompactFindMan(values))
UO.FindMan(notoriety, distance, nearest, maxZ, body, color, includeSelf) — UO.FindMan(Any,Any,Any,Any,Any,Any,Any)
Paramètres: notoriety (Any), distance (Any), nearest (Any), maxZ (Any), body (Any), color (Any), includeSelf (Any)
Résultat: dynamic / Any.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCompactSearchApi [FindMan]. -
InjectionScript.Runtime.InjectionApiUO.CompactFindMan:CompactFindMan(values).
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.
values => new InjectionValue(CompactFindMan(values))Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.FindMobile();
int UO.FindMobile(object? stateFilter);
int UO.FindMobile(object? stateFilter, object? rangeFilter);
int UO.FindMobile(object? stateFilter, object? rangeFilter, object? verticalFilter);
int UO.FindMobile(object? stateFilter, object? rangeFilter, object? verticalFilter, object? directionOrKind);
int UO.FindMobile(object? stateFilter, object? rangeFilter, object? verticalFilter, object? directionFilter, object? kindFilter);Recherche le personnage/créature chargé le plus proche à l'aide de filtres de chaîne communs. Le joueur lui-même est exclu.
-
stateFilter- Généralement tous / vivants / morts ; facultatif. Tous les arguments de l'implémentation sont des chaînes de filtre, il est donc acceptable de combiner plusieurs mots en un seul argument. -
rangeFilter- Généralement tout / proche (0..4) / moyen (5..9) / loin (de 10 au rayon total). Le rayon numérique n'est pas accepté à cette position ; la limite globale change via UO.FindDistance(value). -
verticalFilter- tout / dessus / dessous. ci-dessus : candidat.Z > self.Z, ci-dessous : candidat.Z < self.Z. Il ne s’agit pas d’un plancher ou d’une tolérance numérique Z. -
directionOrKind— La quatrième position du formulaire avec quatre arguments : tous, nord/sud/est/ouest ou humain/npc/mob. Peut être une chaîne composée. -
directionFilter— La quatrième position du formulaire avec cinq arguments : tout ou la comparaison X/Y nord/sud/est/ouest. Il s'agit de l'emplacement par rapport à self, pas de la direction de vue. -
kindFilter- Cinquième position : tous/humains/npc/mob. L'humain comprend les corps masculins et féminins : 0x0190 - humain masculin, 0x0191 - humaine féminine, ainsi que les corps standard d'elfe/gargouille et de fantôme. Liste complète : humain. npc - IsNpc et humain ; mob - IsNpc et PAS humain. Les mots monstre et femelle ne sont pas acceptés.
int : serial d'un mobile, ou 0 s'il n'y a pas de correspondances. Ce n'est pas une quantité, ni un tableau, ni type ni bool. Check found != 0 signifie la présence du résultat ; comparaison trouvée == true n'est pas valide dans C# : int n'est pas comparable à bool.
- S'applique aux arguments UO.FindMobile : 0 à 5. Les arguments de queue manquants sont tous. Chaque argument peut contenir un ou plusieurs mots séparés par un espace, une tabulation, une virgule, un point-virgule, | ou +. Toutes les conditions sont combinées via AND ; symbole | ne signifie pas ici OR.
- La recherche porte uniquement sur les mobiles téléchargés, exclut self et limite la distance au maximum (1, UO.FindDistance()). La distance est mesurée selon la règle max(abs(dx), abs(dy)); un carré diagonal compte pour un. Pour les objets en mouvement, la distance peut prendre en compte la file d'attente des pas, et les comparaisons X/Y/Z lisent les coordonnées actuelles.
- Le plus proche est sélectionné parmi ceux qui conviennent ; à égale distance - plus petit serial. Renvoie int serial ou 0 plutôt que true/false, nombre ou tableau.
- UO.FindMobile ne modifie pas FindItem/FindCount/GetFoundItems, ne s'applique pas Ignore et UO.FindVertical et ne vérifie pas la visibilité, la praticabilité ou la ligne de vue. Il ne déplace pas, ne cible pas et ne charge pas les objets distants.
- Les rayons numériques/Z/directions, les mots monstre, nord-est, nord-ouest, sud-est, sud-ouest ne sont pas des filtres. Un mot inconnu provoque une erreur lors de la vérification d'un candidat ; s'il n'y a pas de candidats, cette section ne pourra pas être exécutée. Pour une zone diagonale, combinez nord-est, etc. ; pour la vérification numérique, utilisez les propriétés des objets trouvés ou UO.GetMobiles().
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.FindMobile("all", "all", "above");
UO.Print("FindMobile: " + Convert.ToString(result));Paramètres et déroulement de l’exécution :
- Passé tout, tout, ci-dessus : La hauteur de l'objet est strictement supérieure au Z du personnage. Z égal ne convient pas.
- 0 est traité avant la lecture des propriétés. Print affiche ID, le nom et les hauteurs ; aucune action de jeu n'est déclenchée.
var found = UO.FindMobile("all", "all", "above");
if (Truth(found == 0))
{
UO.Print("No matching mobile");
return null;
}
UO.Print("ID: " + Convert.ToString(found) + " | Name: " + UO.GetName(found));
UO.Print("Z: " + Convert.ToString(UO.GetZ(found)) + " | Self Z: " + Convert.ToString(UO.GetZ("self")));
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 :
- 18 - limite externe ; vivants, proches, tous, tous, la foule fixe des conditions de coopération. près reste la plage jusqu'à 4, moyenne - 5..9, loin - de 10.
- Renvoie enfin le rayon précédent lors d'une achèvement normale ou d'une erreur gérée. Le script n'étend pas le chargement du monde.
return RunScenario();
object? RunScenario()
{
var previous = UO.FindDistance();
try
{
UO.FindDistance(18);
var found = UO.FindMobile("alive", "near", "all", "all", "mob");
if (Truth(found != 0))
{
UO.Print("Match: " + Convert.ToString(found));
UO.Print("Distance: " + Convert.ToString(UO.GetDistance(found)));
}
else
{
UO.Print("No match in the loaded area");
}
}
finally
{
UO.FindDistance(previous);
}
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 :
- La chaîne « nord-est » est transmise à l'assistant. Il s'agit de plusieurs conditions d'une même demande, et non d'une recherche séquentielle d'objectifs différents.
- FindAndDescribe est déclaré dans son intégralité. Il renvoie ID/0 sans changer la cible ou le personnage.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
var id = FindAndDescribe("north east");
UO.Print("Returned ID: " + Convert.ToString(id));
return null;
}
dynamic FindAndDescribe(dynamic filters)
{
var id = UO.FindMobile(filters);
if (Truth(id == 0))
{
UO.Print("Nothing matched: " + filters);
return 0;
}
UO.Print(UO.GetName(id) + " | " + Convert.ToString(id));
return id;
}
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 :
- Alive/all/all/all/mob - cinq positions prises en charge. La distance 2 est vérifiée une fois le résultat le plus proche obtenu.
- Un tel script ne vérifie pas le chemin vers la créature et ne commence pas à bouger.
var found = UO.FindMobile("alive", "all", "all", "all", "mob");
if (Truth(found == 0))
{
UO.Print("No loaded creature");
return null;
}
if (Truth(UO.GetDistance(found) <= 2))
{
UO.Print("Creature within two tiles: " + Convert.ToString(found));
}
else
{
UO.Print("Nearest creature is farther away");
}
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.FindMobile. -
InjectionScript.Runtime.InjectionApiUO.FindMobile:FindMobile(new InjectionValue("all"), new InjectionValue("all"), new InjectionValue("all"), new InjectionValue("all")).
Code interne de l’implémentation ; ce n’est pas un script autonome.
public int FindMobile() => FindMobile(new InjectionValue("all"), new InjectionValue("all"),
new InjectionValue("all"), new InjectionValue("all"));Paramètres: stateFilter (Any)
Résultat: int / Integer.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.FindMobile. -
InjectionScript.Runtime.InjectionApiUO.FindMobile:FindMobile(stateFilter, new InjectionValue("all"), new InjectionValue("all"), new InjectionValue("all")).
Code interne de l’implémentation ; ce n’est pas un script autonome.
public int FindMobile(InjectionValue stateFilter) => FindMobile(stateFilter, new InjectionValue("all"),
new InjectionValue("all"), new InjectionValue("all"));Paramètres: stateFilter (Any), rangeFilter (Any)
Résultat: int / Integer.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.FindMobile. -
InjectionScript.Runtime.InjectionApiUO.FindMobile:FindMobile(stateFilter, rangeFilter, new InjectionValue("all"), new InjectionValue("all")).
Code interne de l’implémentation ; ce n’est pas un script autonome.
public int FindMobile(InjectionValue stateFilter, InjectionValue rangeFilter) => FindMobile(stateFilter,
rangeFilter, new InjectionValue("all"), new InjectionValue("all"));Paramètres: stateFilter (Any), rangeFilter (Any), verticalFilter (Any)
Résultat: int / Integer.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.FindMobile. -
InjectionScript.Runtime.InjectionApiUO.FindMobile:FindMobile(stateFilter, rangeFilter, verticalFilter, new InjectionValue("all")).
Code interne de l’implémentation ; ce n’est pas un script autonome.
public int FindMobile(InjectionValue stateFilter, InjectionValue rangeFilter, InjectionValue verticalFilter) =>
FindMobile(stateFilter, rangeFilter, verticalFilter, new InjectionValue("all"));
UO.FindMobile(stateFilter, rangeFilter, verticalFilter, directionOrKind) — UO.FindMobile(Any,Any,Any,Any)
Paramètres: stateFilter (Any), rangeFilter (Any), verticalFilter (Any), directionOrKind (Any)
Résultat: int / Integer.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.Register [FindMobile]. -
InjectionScript.Runtime.InjectionApiUO.FindMobile:FindMobile(values[0], values[1], values[2], values[3]).
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.
values => new InjectionValue(
FindMobile(values[0], values[1], values[2], values[3]))
UO.FindMobile(stateFilter, rangeFilter, verticalFilter, directionFilter, kindFilter) — UO.FindMobile(Any,Any,Any,Any,Any)
Paramètres: stateFilter (Any), rangeFilter (Any), verticalFilter (Any), directionFilter (Any), kindFilter (Any)
Résultat: int / Integer.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.Register [FindMobile]. -
InjectionScript.Runtime.InjectionApiUO.FindMobile:FindMobile(values[0], values[1], values[2], values[3], values[4]).
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.
values => new InjectionValue(
FindMobile(values[0], values[1], values[2], values[3], values[4]))Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.FindNotoriety(object? @type, object? notoriety);
dynamic UO.FindNotoriety(object? @type, object? notoriety, object? distance);
dynamic UO.FindNotoriety(object? @type, object? notoriety, object? distance, object? nearest);
dynamic UO.FindNotoriety(object? @type, object? notoriety, object? distance, object? nearest, object? maxZ);
dynamic UO.FindNotoriety(object? @type, object? notoriety, object? distance, object? nearest, object? maxZ, object? color);
dynamic UO.FindNotoriety(object? @type, object? notoriety, object? distance, object? nearest, object? maxZ, object? color, object? container);Recherche un autre mobile un par un body/type et une notoriété autorisée. Convient lorsque vous avez besoin d’un certain type de personnage avec la bonne attitude ; les formes avancées vous permettent de contraindre le rayon, la hauteur et hue. Il ne s'agit que d'une sélection d'objet, pas d'une attaque.
-
type— Un corps numérique graphic ou une chaîne hexadécimale ; pas serial, pas type de l'article porté et non du tableau. 0x0190 (400) - humain de sexe masculin, 0x0191 (401) - humaine de sexe féminin ; Ce sont différents filtres de précision. Les deux body nécessitent des appels séparés ou GetMobiles avec masque. -1 ou 0xFFFF - n'importe quel corps. -
notoriety— Statut de la relation avec le personnage reçu du serveur : 0 — inconnu, 1 — Innocent, 2 — Allié, 3 — Gris, 4 — Criminel, 5 — Ennemi, 6 — Meurtrier, 7 - Invulnérable. Le nombre signifie un statut ; "5|6" ou un tableau de nombres - l'un des éléments ci-dessus. Ce n'est pas la couleur des vêtements ou de la classe. Un nombre négatif (généralement -1), 0xFFFF, "any", une chaîne vide ou un tableau vide désactive séparément ce filtre. Une chaîne invalide sans nombres valides ne trouve personne. L'ordre des statuts ne définit pas la priorité. Le filtre 5 sélectionne l'ennemi plutôt que de sélectionner automatiquement n'importe quel NPC/monstre ; les valeurs réelles dépendent du serveur. Plusieurs valeurs sont combinées sous forme de OR : le nombre 5, la chaîne "5|6", ou un tableau plat de nombres/chaînes numériques. Vous pouvez mélanger des tableaux plats et des arguments individuels. L'ordre des valeurs ne fixe pas de priorité. Les jetons non numériques sont exclus ; un masque complètement erroné ne trouve rien. Les tableaux imbriqués ne sont pas des nombres et sont ignorés en tant qu'éléments non valides ; les masques multidimensionnels ne sont pas pris en charge. Caractéristique de la forme numérique à deux arguments : seul un code négatif désactive le filtre, le numérique 0xFFFF est considéré comme un code littéral et ne trouve généralement personne. -
distance— Rayon horizontal en cellules incluses : 5 permet la distance 0..5. La distance est max(abs(dx),abs(dy)), donc la diagonale adjacente est également 1. Par défaut ou si le nombre est négatif, c'est UO.FindDistance() qui est utilisé plutôt qu'une recherche illimitée. 0 laisse la même cellule X/Y. Pas la longueur du parcours ; les obstacles et les sols ne sont pas vérifiés par ce paramètre. -
nearest- false/0 par défaut : première correspondance dans l'ordre d'énumération mondiale, aucune garantie de ID le plus proche ou le plus petit. true/1 : le plus proche, s'il est égal, plus petit serial. -
maxZ— Abs maximum (Z de la cible - Z du propre personnage), inclus, en unités Z du monde. Il ne s'agit pas du nombre d'étages ou de cellules X/Y. maxZ=4 avec le joueur Z 10 autorise la cible Z 6..14 ; 0 nécessite exactement la même hauteur. Par défaut/pour un nombre négatif, UO.FindVertical() est pris. Dans les escaliers, un Z égal peut éliminer la cible souhaitée. Même une petite différence de Z ne prouve pas l’accessibilité du sol. -
color— Teinte de mobile lui-même : int ou chaîne numérique/hexadécimale. Nombre négatif (-1 par défaut) et 0xFFFF - n'importe quel hue ; 0 est exactement hue 0, et non n'importe quelle valeur. Pas la couleur de la bande de notoriété ni la teinte des vêtements. Ce paramètre ne vérifie pas la couleur de l'article porté. -
container- Absent par défaut : monde. Lorsqu'ils sont spécifiés, ground/"ground"/UO.Ground(), les nombres 0/1 et -1/"my" sont acceptables comme désignations de monde compatibles dans cette commande particulière. Un conteneur serial explicite ou "backpack" renvoie 0 : il n'y a aucun mobile à l'intérieur du conteneur. N'ajoute pas de recherche d'objets.
int - serial du mobile sélectionné ou 0 s'il n'y en a pas. Il s'agit de ID, et non de graphic/type, le nombre d'objets trouvés ou true/false : utilisez if (found != 0) { ... }, not found == true. Un ID trouvé peut être transmis à UO.AddObject, UO.Attack ou UO.Follow, mais chaque action de jeu est appelée séparément.
- La recherche ne lit que les mobiles déjà téléchargés par le client ; les enregistrements détruits et Ignore sont exclus. L'appel lui-même n'ouvre pas la cible, n'attaque pas, ne va pas vers la cible et ne demande pas d'objets distants au serveur.
- La distance est géométrique max(abs(dx),abs(dy)), et non la longueur de l'itinéraire. La proximité ne garantit pas l'absence de mur ni l'accessibilité d'un autre étage. La condition peut changer au retour.
- La vie, la furtivité et la ligne de vue ne sont pas automatiquement vérifiées. S'ils sont importants, utilisez GetMobiles avec aliveOnly/visibleOnly ou vos propres chèques. Avoir un serveur avec le statut Ennemi ne rend aucun NPC éligible.
- Des arguments 2 à 7. Pour transmettre maxZ, vous devez spécifier la distance précédente et la plus proche. Pour une notoriété multiple dans cette commande, utilisez un seul masque "5|6" ou un tableau plat dans le deuxième argument ; le troisième argument est la distance, pas le deuxième statut.
- Une différence de forme importante : deux arguments de notoriété NUMÉRIQUE appellent bridge.FindNotoriety, rejetant les anciens FindItem/FindCount/GetFoundItems et enregistrant toutes les correspondances. Deux arguments STRING/ARARY, ainsi que tous les formulaires avec des arguments 3..7, renvoient uniquement ID, en conservant les mêmes champs Find*. Ne lisez pas FindCount comme le résultat d'une requête étendue.
- Toutes les formes excluent self et Ignore, utilisez la limite Z ; filtres live/visibles et aucune ligne de vue. Aucune correspondance ne renvoie 0. L'illisible type/distance/maxZ/color provoque une erreur de conversion.
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.FindNotoriety(0x0190, 5);
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Paramètres et déroulement de l’exécution :
- 0x0190 (400) est un corps humain masculin, 0x0191 (401) est un corps humain féminin. 5 - Ennemi. Chaque appel reçoit UN body ; la chaîne 0x0190|0x0191 n'est pas prise en charge à cette position. Les FindDistance/FindVertical actuels sont utilisés.
- Après le deuxième appel, FindItem/FindCount/GetFoundItems font référence aux corps féminins uniquement ; la première quantité est stockée dans menCount. L'homme/la femme renvoyé est le premier serial ou 0, pas le numéro. NPC avec de tels organismes peuvent également être inclus dans le résultat ; les fantômes et autres races ne sont pas inclus dans ces deux body.
var man = UO.FindNotoriety(0x0190, 5);
var menCount = UO.FindCount();
var woman = UO.FindNotoriety(0x0191, 5);
var womenCount = UO.FindCount();
UO.Print("Male humans: " + Convert.ToString(menCount));
UO.Print("Female humans: " + Convert.ToString(womenCount));
UO.Print("Total humans: " + Convert.ToString(menCount + womenCount));Paramètres et déroulement de l’exécution :
- -1 dans le premier paramètre — n'importe quel corps ; -1 dans le sixième - n'importe quel hue. ground - paix. FindCount n'a pas été mis à jour depuis ce formulaire ; utilisation trouvée.
return RunScenario();
object? RunScenario()
{
var found = UO.FindNotoriety(-1, "5|6", 12, true, 4, -1, "ground");
if (Truth(found != 0))
{
UO.AddObject("near_enemy", found);
}
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 :
- Le tableau contient deux codes. Les arguments de queue manquants signifient le rayon actuel/Z, le plus proche=false et tout hue. Ce n'est pas l'entrée UO.FindNotoriety(type,5,6) : là 6 serait le rayon.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
dynamic[] allowed = new dynamic[checked((int)(1) + 1)];
allowed[0] = 5;
allowed[1] = 6;
var found = UO.FindNotoriety(0x0191, allowed);
if (Truth(found != 0))
{
UO.AddObject("allowed_mobile", found);
UO.Print("Selected ID: " + Convert.ToString(found));
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}C# distingue les majuscules. Utilisez le nom UO exact. Comparez les indicateurs numériques à 0 ; utilisez bool seulement si la signature renvoie bool.
Paramètres: type (Any), notoriety (Any)
Résultat: dynamic / Any.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCompactSearchApi [FindNotoriety]. -
InjectionScript.Runtime.InjectionApiUO.CompactFindNotoriety:CompactFindNotoriety(values).
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.
values => new InjectionValue(CompactFindNotoriety(values))Paramètres: type (Any), notoriety (Any), distance (Any)
Résultat: dynamic / Any.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCompactSearchApi [FindNotoriety]. -
InjectionScript.Runtime.InjectionApiUO.CompactFindNotoriety:CompactFindNotoriety(values).
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.
values => new InjectionValue(CompactFindNotoriety(values))Paramètres: type (Any), notoriety (Any), distance (Any), nearest (Any)
Résultat: dynamic / Any.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCompactSearchApi [FindNotoriety]. -
InjectionScript.Runtime.InjectionApiUO.CompactFindNotoriety:CompactFindNotoriety(values).
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.
values => new InjectionValue(CompactFindNotoriety(values))Paramètres: type (Any), notoriety (Any), distance (Any), nearest (Any), maxZ (Any)
Résultat: dynamic / Any.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCompactSearchApi [FindNotoriety]. -
InjectionScript.Runtime.InjectionApiUO.CompactFindNotoriety:CompactFindNotoriety(values).
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.
values => new InjectionValue(CompactFindNotoriety(values))
UO.FindNotoriety(type, notoriety, distance, nearest, maxZ, color) — UO.FindNotoriety(Any,Any,Any,Any,Any,Any)
Paramètres: type (Any), notoriety (Any), distance (Any), nearest (Any), maxZ (Any), color (Any)
Résultat: dynamic / Any.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCompactSearchApi [FindNotoriety]. -
InjectionScript.Runtime.InjectionApiUO.CompactFindNotoriety:CompactFindNotoriety(values).
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.
values => new InjectionValue(CompactFindNotoriety(values))
UO.FindNotoriety(type, notoriety, distance, nearest, maxZ, color, container) — UO.FindNotoriety(Any,Any,Any,Any,Any,Any,Any)
Paramètres: type (Any), notoriety (Any), distance (Any), nearest (Any), maxZ (Any), color (Any), container (Any)
Résultat: dynamic / Any.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCompactSearchApi [FindNotoriety]. -
InjectionScript.Runtime.InjectionApiUO.CompactFindNotoriety:CompactFindNotoriety(values).
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.
values => new InjectionValue(CompactFindNotoriety(values))Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.FindQuantity();Lit la quantité actuelle dans le premier résultat de recherche.
Il n'y a pas de paramètres.
int - Montant actuel de l'élément avec serial FindItem, 1 pour un personnage existant, 0 pour un objet manquant/supprimé. Les autres piles trouvées ne sont pas cumulables. Contrairement à FindFullQuantity, la quantité est lue à partir de l'objet actuel lorsqu'il est appelé.
- Les données appartiennent à la dernière recherche normale de ce script. FindType avec les arguments 1–5, FindTypeEx, Count/CountEx/CountGround remplacent les résultats. Les commandes avancées de caractères filtrés ne sont pas nécessaires pour modifier cet instantané.
- Une nouvelle recherche sans correspondance efface FindItem, FindCount et FindFullQuantity et efface GetFoundItems. La lecture d’un résultat ne déclenche pas à elle seule une nouvelle recherche.
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.
UO.FindType(0x0EED, -1, "backpack");
object? result = UO.FindQuantity();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Paramètres et déroulement de l’exécution :
- type=0x0EED – or ; color=-1 — n'importe quel hue ; backpack - uniquement le contenu direct du sac à dos sous cette forme FindType.
- int - Montant actuel de l'élément avec serial FindItem, 1 pour un personnage existant, 0 pour un objet manquant/supprimé. Les autres piles trouvées ne sont pas cumulables. Contrairement à FindFullQuantity, la quantité est lue à partir de l'objet actuel lorsqu'il est appelé.
var found = UO.FindType(0x0EED, -1, "backpack");
var value = UO.FindQuantity();
UO.Print(Convert.ToString(value));Paramètres et déroulement de l’exécution :
- Les quatre lectures appartiennent à une recherche jusqu'à ce qu'une autre recherche soit appelée entre les deux.
- Par exemple, deux piles de 50 : Items=2, First stack=50, All units=100 ; Le premier ID contient l'unique ID d'une pile.
return RunScenario();
object? RunScenario()
{
var found = UO.FindType(0x0EED, -1, "backpack");
UO.Print("Items: " + Convert.ToString(UO.FindCount()));
UO.Print("First stack: " + Convert.ToString(UO.FindQuantity()));
UO.Print("All units: " + Convert.ToString(UO.FindFullQuantity()));
UO.Print("First ID: 0x" + Hex(UO.FindItem()));
return null;
}
string Hex(object? value) => Convert.ToInt64(value).ToString("X");Paramètres et déroulement de l’exécution :
- Le premier type est de l'or, le second 0x0F7A est un type distinct de réactif. La nouvelle équipe change le plan global.
- enregistré reste le numéro de la première recherche. La deuxième lecture s'applique au réactif même s'il n'y a pas de correspondance.
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 found = UO.FindType(0x0EED, -1, "backpack");
var saved = UO.FindQuantity();
found = UO.FindType(0x0F7A, -1, "backpack");
UO.Print("Saved: " + Convert.ToString(saved));
UO.Print("Current: " + Convert.ToString(UO.FindQuantity()));
return null;
}
}C# distingue les majuscules. Utilisez le nom UO exact. Comparez les indicateurs numériques à 0 ; utilisez bool seulement si la signature renvoie bool.
Paramètres: Aucun paramètre.
Résultat: dynamic / Any.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.FindQuantity:bridge.FindQuantity().
Code interne de l’implémentation ; ce n’est pas un script autonome.
case "findquantity": return new InjectionValue(bridge.FindQuantity());Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
string UO.FindType(object? @type);
string UO.FindType(object? @type, object? color);
string UO.FindType(object? @type, object? color, object? container);
string UO.FindType(object? @type, object? color, object? container, object? range);
string UO.FindType(object? @type, object? color, object? container, object? distance, object? recursive);
string UO.FindType(object? @type, object? color, object? container, object? distance, object? notoriety, object? nearest);
string UO.FindType(object? @type, object? color, object? container, object? distance, object? notoriety, object? nearest, object? maxZ);
string UO.FindType(object? @type, object? color, object? container, object? distance, object? notoriety, object? nearest, object? maxZ, object? mobileOnly);
string UO.FindType(object? @type, object? color, object? container, object? distance, object? notoriety, object? nearest, object? maxZ, object? mobileOnly, object? itemOnly);
string UO.FindType(object? @type, object? color, object? container, object? distance, object? notoriety, object? nearest, object? maxZ, object? mobileOnly, object? itemOnly, object? includeIgnored);
string UO.FindType(object? @type, object? color, object? container, object? distance, object? notoriety, object? nearest, object? maxZ, object? mobileOnly, object? itemOnly, object? includeIgnored, object? includeSelf);
string UO.FindType(object? @type, object? color, object? container, object? distance, object? notoriety, object? nearest, object? maxZ, object? mobileOnly, object? itemOnly, object? includeIgnored, object? includeSelf, object? aliveOnly);
string UO.FindType(object? @type, object? color, object? container, object? distance, object? notoriety, object? nearest, object? maxZ, object? mobileOnly, object? itemOnly, object? includeIgnored, object? includeSelf, object? aliveOnly, object? visibleOnly);
string UO.FindType(object? @type, object? color, object? container, object? distance, object? notoriety, object? nearest, object? maxZ, object? mobileOnly, object? itemOnly, object? includeIgnored, object? includeSelf, object? aliveOnly, object? visibleOnly, object? nameMask);Recherche parmi les éléments et personnages déjà téléchargés par le client. Vous pouvez effectuer une recherche par type, couleur, conteneur, distance et filtres supplémentaires. Le résultat est la chaîne hexadécimale serial de l'objet sélectionné ; une chaîne vide signifie aucune correspondance. La commande elle-même n'ouvre pas les conteneurs, ne ramasse pas d'objet et n'attaque pas la cible trouvée.
-
type- Un élément graphic ou un caractère body : entier ou chaîne numérique. 0x0EED - or ; 0x0190 (400) - mâle humain ; 0x0191 (401) - femme humaine. Un type 0x0190 n'inclut pas 0x0191. Pour répertorier les caractères des deux sexes, utilisez GetMobiles avec body="0x0190|0x0191" ; le masque n'est pas passé à cet unique argument FindType. Une valeur négative ou 0xFFFF efface le filtre de type. -
color- Teinte/couleur : entier ou chaîne numérique. -1 ou 0xFFFF signifie n'importe quelle couleur ; 0 - spécifiquement hue 0. Caractéristique de la forme à deux arguments : les lignes "ground", "backpack", "my" en deuxième position sélectionnent la zone de recherche au lieu de la couleur. "my" permet de contourner les sous-conteneurs chargés. -
container- Zone de recherche : "ground" - le monde, "backpack" - le niveau supérieur de votre sac à dos, "my" - un sac à dos avec des sous-conteneurs chargés sous une forme courte ; Vous pouvez également transmettre serial du conteneur ou le nom enregistré de l'objet. Les conteneurs ne s'ouvrent pas automatiquement. Les formes étendues 7–14 des arguments parcourent le contenu direct du conteneur donné et n'ont pas d'indicateur récursif. -
range— Le quatrième argument de la forme à quatre arguments : distance en cellules. Une valeur négative utilise le paramètre général FindDistance ; 0 ne laisse que les correspondances sur la même cellule. Pour un article dans un conteneur, la position du conteneur dans le monde est prise en compte. -
distance— Distance dans les cellules à la position 4 sous la forme de cinq arguments. -1 utilise FindDistance ; le nombre 0 et supérieur fixe une limite explicite. Il s'agit du rayon de recherche et non de la longueur de l'itinéraire. -
recursive- UNIQUEMENT le cinquième argument sous la forme de cinq arguments : 1/true - recherche également dans les sous-conteneurs chargés, 0/false - uniquement le niveau supérieur. Ce n'est pas de la notoriété. Le passage à la forme à six arguments change la signification de la position 5. -
notoriety— Position de 5 dans les formes d'argument 6–14. Réputation du personnage : 0 inconnu, 1 innocent, 2 allié, 3 attaquable, 4 criminel, 5 ennemi, 6 meurtrier, 7 invulnérable. Vous pouvez passer un nombre, la chaîne "3|6" ou un tableau de valeurs. -1, 0xFFFF ou "any" désactive le filtre. Lorsque le filtre est actif, les éléments sont exclus : ils n'ont pas de notoriété. -
nearest- Position 6 : 1/true - sélectionnez le caractère approprié le plus proche, et sous la forme étendue 7–14 - le candidat le plus proche de tout type autorisé ; si la distance est égale, serial est utilisé. 0/false préserve l'ordre de recherche. Dans la forme à six arguments, l'ordre normal de recherche d'éléments est utilisé lors de la recherche d'éléments. -
maxZ- Position 7 : différence de hauteur Z absolue maximale avec son propre caractère. 0 - même hauteur ; -1 prend FindVertical. Pour les articles à l’intérieur d’un conteneur, la hauteur du conteneur est vérifiée. Ce n'est pas un numéro d'étage. -
mobileOnly— Position 8 : 1/true — ne laisse que les personnages et les monstres ; 0/false - autorise également les éléments. S'il n'y a pas d'argument, false. -
itemOnly— Position 9 : 1/true — ne laisser que les objets ; 0/false - autorise également les caractères. S'il manque, false. Les mobileOnly=true et itemOnly=true simultanés donnent un résultat vide. -
includeIgnored— Position 10 : 1/true — autoriser les objets de IgnoreList ; 0/false - excluez-les. La valeur par défaut est false. La commande IgnoreList elle-même ne change pas. -
includeSelf— Position 11 : 1/true — autorisez votre propre personnage parmi les candidats mobile ; 0/false - exclure. La valeur par défaut est false. N'affecte pas les articles. -
aliveOnly- Position 12 : 1/true - exclure les caractères morts ; 0/false - autorise les deux états. La valeur par défaut est false. Ce filtre ne vérifie pas la santé des éléments. -
visibleOnly- Position 13 : 1/true - nécessite un contrôle positif IsVisible ; 0/false - ne l'utilisez pas. La valeur par défaut est false. La commande ne fonctionne toujours qu'avec les objets connus du client. -
nameMask— Position 14 : partie texte du nom, insensible à la casse. La chaîne "orc|troll" autorise l'une ou l'autre des deux correspondances ; les délimiteurs peuvent également être des virgules et des points-virgules. Une chaîne vide, "any" ou "-1" supprime le filtre. Il s'agit d'une recherche de sous-chaîne, pas d'une expression régulière ou d'un masque avec *. Si l'argument est manquant, le filtre est désactivé.
string : Par exemple, "0x40001234". Si rien n'est trouvé - "". Vérifiez le résultat en le comparant avec une chaîne vide. Ne le confondez pas avec le nombre d'objets trouvés ou le nombre d'étapes pour y accéder.
- Il existe des formulaires avec des arguments 1–14, mais il ne s'agit pas d'une longue signature avec des paramètres arbitrairement omis. Sélectionnez la ligne de syntaxe exacte ; les arguments sont transmis de manière positionnelle.
- Les formulaires 1–5 utilisent la recherche normale et mettent à jour la liste FindItem/FindCount/ des résultats. Pour les formulaires 6–14, utilisez directement la chaîne renvoyée : le filtrage des caractères se fait de manière distincte et ne promet pas de mettre à jour ces valeurs partagées.
- Pour les formes courtes, par défaut la recherche se fait dans le monde, n'importe quelle couleur, distance FindDistance, sans récursion. La chaîne « my » est un raccourci spécial pour un sac à dos avec des sous-conteneurs.
- La forme à six arguments recherche d’abord un caractère correspondant ; En l’absence de filtre de notoriété et de personnage adapté, la recherche d’objets est possible. Les formulaires 7–14 combinent les candidats résolus et appliquent des filtres supplémentaires.
- Le changement du nombre d'arguments de cinq à six est particulièrement important : le récursif est remplacé par la notoriété, et le plus proche devient le sixième argument. La valeur 1 à la position 5 signifie alors un parcours innocent et non récursif.
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.FindType(0x0EED, -1, "backpack");
UO.Print("FindType: " + Convert.ToString(result));1. Trouvez de l'or au niveau supérieur du sac à dos et traitez le manque de résultat - script direct
Paramètres et déroulement de l’exécution :
- 1 : type=0x0EED - à la recherche d'or.
- 2 : color=-1 — n'importe quel hue.
- 3 : containers="backpack" - uniquement le contenu direct de votre sac à dos.
- gold reçoit la chaîne serial. La vérification gold="" sépare l'élément manquant de l'élément trouvé. Info(or) affiche des informations ; l'or ne bouge pas.
var gold = UO.FindType(0x0EED, -1, "backpack");
if (Truth(gold == ""))
{
UO.Print("Gold was not found in the loaded backpack");
}
else
{
UO.Print("Gold serial: " + gold);
UO.Info(gold);
}
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 :
- 1 : wantedType contient graphic 0x0EED.
- 2 : -1 supprime le filtre de couleur.
- 3 : "backpack" sélectionne le conteneur racine.
- 4 : -1 utilise le FindDistance actuel.
- 5 : recursive=1 permet la traversée des sous-conteneurs ; il s'agit d'une forme à cinq arguments. Le contenu d'un sac fermé que le serveur n'a pas encore envoyé n'est pas chargé de cette façon.
- AddObject enregistre le serial trouvé sous le nom found_gold uniquement après avoir vérifié le résultat.
return RunScenario();
object? RunScenario()
{
var wantedType = 0x0EED;
var recursive = 1;
var found = UO.FindType(wantedType, -1, "backpack", -1, recursive);
if (Truth(found != ""))
{
UO.AddObject("found_gold", found);
UO.Print("Saved object: " + found);
}
else
{
UO.Print("No matching item in loaded containers");
}
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 :
- 1 : body=-1 autorise n'importe quel body.
- 2 : color=-1 autorise n'importe quelle couleur.
- 3 : "ground" signifie les objets du monde chargés.
- 4 : radius=10 limite la distance à dix cellules.
- 5 : réputation="3|6" - attaquable ou meurtrier. C'est de la notoriété, pas récursif.
- 6 : le plus proche=1 vous demande de choisir le plus proche. Le filtre de réputation exclut les éléments. L'exemple affiche uniquement des informations et n'attaque pas la cible.
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 body = -1;
var radius = 10;
var reputation = "3|6";
var nearest = 1;
var found = UO.FindType(body, -1, "ground", radius, reputation, nearest);
if (Truth(found != ""))
{
UO.Print("Matching mobile: " + found);
UO.Info(found);
}
else
{
UO.Print("No matching mobile within the radius");
}
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 :
- 1 body=-1 et 2 hue=-1 ne limitent pas le type et la couleur.
- 3 scope="ground" - recherche dans le monde ; 4 radius=5 - pas plus de cinq cellules.
- 5 réputation=-1 autorise toute notoriété ; 6 le plus proche=1 sélectionne le plus proche.
- 7 maxZ=16 permet des différences de hauteur absolues jusqu'à 16 unités.
- 8 mobileOnly=1 exclut les éléments ; 9 itemOnly=0 n'interdit pas les mobs.
- 10 includeIgnored=0 conserve l'effet de IgnoreList.
- 11 includeSelf=0 exclut votre personnage.
- 12 aliveOnly=1 et 13 visibleOnly=1 laissent les candidats visibles en vie.
- 14 names="orc|troll" nécessite la sous-chaîne orc ou troll dans un nom déjà connu du client. Tous les filtres doivent être exécutés simultanément.
var body = -1;
var hue = -1;
var scope = "ground";
var radius = 5;
var reputation = -1;
var nearest = 1;
var maxZ = 16;
var mobileOnly = 1;
var itemOnly = 0;
var includeIgnored = 0;
var includeSelf = 0;
var aliveOnly = 1;
var visibleOnly = 1;
var names = "orc|troll";
var found = UO.FindType(body, hue, scope, radius, reputation, nearest, maxZ, mobileOnly, itemOnly, includeIgnored, includeSelf, aliveOnly, visibleOnly, names);
if (Truth(found == ""))
{
UO.Print("No loaded mobile satisfies every filter");
}
else
{
UO.Print("Selected serial: " + found);
}
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 :
- 1 wantedType=0x0EED est de l'or.
- 2 "my" est une chaîne spéciale de forme à deux arguments : sélectionne un sac à dos, inclut la récursivité et n'importe quelle couleur. Ici, le deuxième argument n'est pas hue.
- Pour le niveau supérieur, au lieu de "my", passez "backpack" ; pour le monde - "ground". Le numéro en deuxième position, au contraire, sera un filtre de couleur.
return RunScenario();
object? RunScenario()
{
var wantedType = 0x0EED;
var found = UO.FindType(wantedType, "my");
if (Truth(found != ""))
{
UO.Print("Found in backpack or a loaded subcontainer: " + found);
}
else
{
UO.Print("Nothing found");
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;C# distingue les majuscules. Utilisez le nom UO exact. Comparez les indicateurs numériques à 0 ; utilisez bool seulement si la signature renvoie bool.
Paramètres: type (Any)
Résultat: string / String.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.FindType. -
InjectionScript.Runtime.InjectionApiUO.FindType:FindType(ResolveType(type)). -
InjectionScript.Runtime.InjectionApiUO.ResolveType:ResolveType(type).
Code interne de l’implémentation ; ce n’est pas un script autonome.
public string FindType(InjectionValue type)
=> FindType(ResolveType(type));Paramètres: type (Any), color (Any)
Résultat: string / String.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.FindType. -
InjectionScript.Runtime.InjectionApiUO.FindType:FindType(ResolveType(type), -1, ConvertContainer(color), -1, color.String.Equals("my", StringComparison.OrdinalIgnoreCase)). -
InjectionScript.Runtime.InjectionApiUO.ResolveType:ResolveType(type). -
InjectionScript.Runtime.InjectionApiUO.ConvertContainer:ConvertContainer(color). -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(color).
Code interne de l’implémentation ; ce n’est pas un script autonome.
public string FindType(InjectionValue type, InjectionValue color)
{
if (color.Kind == InjectionValueKind.String
&& (color.String.Equals("ground", StringComparison.OrdinalIgnoreCase)
|| color.String.Equals("backpack", StringComparison.OrdinalIgnoreCase)
|| color.String.Equals("my", StringComparison.OrdinalIgnoreCase)))
{
return FindType(ResolveType(type), -1, ConvertContainer(color), -1, color.String.Equals("my", StringComparison.OrdinalIgnoreCase));
}
return FindType(ResolveType(type), NumberConversions.ToInt(color), -1, -1, false);
}Paramètres: type (Any), color (Any), container (Any)
Résultat: string / String.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.FindType. -
InjectionScript.Runtime.InjectionApiUO.FindType:FindType(type, color, container, new InjectionValue(-1)).
Code interne de l’implémentation ; ce n’est pas un script autonome.
public string FindType(InjectionValue type, InjectionValue color, InjectionValue container)
=> FindType(type, color, container, new InjectionValue(-1));Paramètres: type (Any), color (Any), container (Any), range (Any)
Résultat: string / String.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.FindType. -
InjectionScript.Runtime.InjectionApiUO.FindType:FindType(ResolveType(type), NumberConversions.ToInt(color), ConvertContainer(container), NumberConversions.ToInt(range), true). -
InjectionScript.Runtime.InjectionApiUO.ResolveType:ResolveType(type). -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(color). -
InjectionScript.Runtime.InjectionApiUO.ConvertContainer:ConvertContainer(container).
Code interne de l’implémentation ; ce n’est pas un script autonome.
public string FindType(InjectionValue type, InjectionValue color, InjectionValue container, InjectionValue range)
{
if (container.Kind == InjectionValueKind.String && container.String.Equals("my", StringComparison.OrdinalIgnoreCase))
return FindType(ResolveType(type), NumberConversions.ToInt(color), ConvertContainer(container), NumberConversions.ToInt(range), true);
else
return FindType(ResolveType(type), NumberConversions.ToInt(color), ConvertContainer(container), NumberConversions.ToInt(range), false);
}Paramètres: type (Any), color (Any), container (Any), distance (Any), recursive (Any)
Résultat: string / String.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.Register [FindType]. -
InjectionScript.Runtime.InjectionApiUO.FindType:FindType(values[0], values[1], values[2], values[3], values[4]).
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.
values =>
new InjectionValue(FindType(values[0], values[1], values[2], values[3], values[4]))
UO.FindType(type, color, container, distance, notoriety, nearest) — UO.FindType(Any,Any,Any,Any,Any,Any)
Paramètres: type (Any), color (Any), container (Any), distance (Any), notoriety (Any), nearest (Any)
Résultat: string / String.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.Register [FindType]. -
InjectionScript.Runtime.InjectionApiUO.CompactFindType:CompactFindType(values[0], values[1], values[2], values[3], values[4], values[5]).
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.
values =>
CompactFindType(values[0], values[1], values[2], values[3], values[4], values[5])
UO.FindType(type, color, container, distance, notoriety, nearest, maxZ) — UO.FindType(Any,Any,Any,Any,Any,Any,Any)
Paramètres: type (Any), color (Any), container (Any), distance (Any), notoriety (Any), nearest (Any), maxZ (Any)
Résultat: string / String.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.Register [FindType]. -
InjectionScript.Runtime.InjectionApiUO.CompactFindTypeExtended:CompactFindTypeExtended(values).
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.
values => CompactFindTypeExtended(values)
UO.FindType(type, color, container, distance, notoriety, nearest, maxZ, mobileOnly) — UO.FindType(Any,Any,Any,Any,Any,Any,Any,Any)
Paramètres: type (Any), color (Any), container (Any), distance (Any), notoriety (Any), nearest (Any), maxZ (Any), mobileOnly (Any)
Résultat: string / String.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.Register [FindType]. -
InjectionScript.Runtime.InjectionApiUO.CompactFindTypeExtended:CompactFindTypeExtended(values).
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.
values => CompactFindTypeExtended(values)
UO.FindType(type, color, container, distance, notoriety, nearest, maxZ, mobileOnly, itemOnly) — UO.FindType(Any,Any,Any,Any,Any,Any,Any,Any,Any)
Paramètres: type (Any), color (Any), container (Any), distance (Any), notoriety (Any), nearest (Any), maxZ (Any), mobileOnly (Any), itemOnly (Any)
Résultat: string / String.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.Register [FindType]. -
InjectionScript.Runtime.InjectionApiUO.CompactFindTypeExtended:CompactFindTypeExtended(values).
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.
values => CompactFindTypeExtended(values)
UO.FindType(type, color, container, distance, notoriety, nearest, maxZ, mobileOnly, itemOnly, includeIgnored) — UO.FindType(Any,Any,Any,Any,Any,Any,Any,Any,Any,Any)
Paramètres: type (Any), color (Any), container (Any), distance (Any), notoriety (Any), nearest (Any), maxZ (Any), mobileOnly (Any), itemOnly (Any), includeIgnored (Any)
Résultat: string / String.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.Register [FindType]. -
InjectionScript.Runtime.InjectionApiUO.CompactFindTypeExtended:CompactFindTypeExtended(values).
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.
values => CompactFindTypeExtended(values)
UO.FindType(type, color, container, distance, notoriety, nearest, maxZ, mobileOnly, itemOnly, includeIgnored, includeSelf) — UO.FindType(Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any)
Paramètres: type (Any), color (Any), container (Any), distance (Any), notoriety (Any), nearest (Any), maxZ (Any), mobileOnly (Any), itemOnly (Any), includeIgnored (Any), includeSelf (Any)
Résultat: string / String.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.Register [FindType]. -
InjectionScript.Runtime.InjectionApiUO.CompactFindTypeExtended:CompactFindTypeExtended(values).
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.
values => CompactFindTypeExtended(values)
UO.FindType(type, color, container, distance, notoriety, nearest, maxZ, mobileOnly, itemOnly, includeIgnored, includeSelf, aliveOnly) — UO.FindType(Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any)
Paramètres: type (Any), color (Any), container (Any), distance (Any), notoriety (Any), nearest (Any), maxZ (Any), mobileOnly (Any), itemOnly (Any), includeIgnored (Any), includeSelf (Any), aliveOnly (Any)
Résultat: string / String.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.Register [FindType]. -
InjectionScript.Runtime.InjectionApiUO.CompactFindTypeExtended:CompactFindTypeExtended(values).
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.
values => CompactFindTypeExtended(values)
UO.FindType(type, color, container, distance, notoriety, nearest, maxZ, mobileOnly, itemOnly, includeIgnored, includeSelf, aliveOnly, visibleOnly) — UO.FindType(Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any)
Paramètres: type (Any), color (Any), container (Any), distance (Any), notoriety (Any), nearest (Any), maxZ (Any), mobileOnly (Any), itemOnly (Any), includeIgnored (Any), includeSelf (Any), aliveOnly (Any), visibleOnly (Any)
Résultat: string / String.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.Register [FindType]. -
InjectionScript.Runtime.InjectionApiUO.CompactFindTypeExtended:CompactFindTypeExtended(values).
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.
values => CompactFindTypeExtended(values)
UO.FindType(type, color, container, distance, notoriety, nearest, maxZ, mobileOnly, itemOnly, includeIgnored, includeSelf, aliveOnly, visibleOnly, nameMask) — UO.FindType(Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any)
Paramètres: type (Any), color (Any), container (Any), distance (Any), notoriety (Any), nearest (Any), maxZ (Any), mobileOnly (Any), itemOnly (Any), includeIgnored (Any), includeSelf (Any), aliveOnly (Any), visibleOnly (Any), nameMask (Any)
Résultat: string / String.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.Register [FindType]. -
InjectionScript.Runtime.InjectionApiUO.CompactFindTypeExtended:CompactFindTypeExtended(values).
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.
values => CompactFindTypeExtended(values)Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.FindTypeEx(object? objType, object? color, object? container, object? inSub);Recherche un graphique et une couleur dans un conteneur ou au sol et renvoie celui trouvé ID.
-
objType- Élément graphique/body, pas serial. 0..65534 - graphiques spécifiques ; -1 ou 0xFFFF - n'importe lequel. Les autres int négatifs dans ce client suppriment également le filtre. -
color— La teinte, pas le nombre d'éléments. 0 - objet non peint ; -1 ou 0xFFFF - n'importe quel hue. Les autres négatifs int suppriment également le filtre de couleur. -
container- Masse : UO.Ground(), 0, -1, 0xFFFFFFFF ou chaîne ground. Sac à dos : ficelle backpack ou son serial. Le nombre décimal/hexadécimal serial et le nom AddObject sont acceptés. my sélectionne l'intégralité de l'inventaire de son personnage, y compris l'équipement et les sacs attachés. Un nom inconnu provoque une erreur de script. Vérifiez le serial résultant : le 0 explicite sélectionne le sol. Les noms ground/backpack sont plus clairs que les désignations numériques, qui diffèrent selon les familles de commandes. -
inSub- Obligatoire true/false (1/0). false - contenu direct d'un conteneur spécifique ; true – sacs imbriqués également chargés. Pour la terre, la récursivité ne change rien. my sélectionne déjà tout l'inventaire du personnage.
int : serial première correspondance dans l'ordre de parcours local ; 0 s'il n'y a pas de correspondance. Pas graphic, count, array ou bool. Vérifiez le résultat != 0, pas le résultat == true ou le résultat == 1. Une pile est considérée comme un objet ; Mobile - un objet et une unité. L'ordre n'implique pas la proximité et n'est pas garanti entre les recherches.
- Les quatre arguments positionnels sont nécessaires. Il n'y a pas d'arguments facultatifs.
- Earth utilise les FindDistance et FindVertical de ce script, exclut self et inclut l'élément et le mobile appropriés. La recherche dans un conteneur spécifique n’applique pas ces limites de distance/hauteur. Dans les deux cas, les Ignore et les objets détruits sont exclus.
- Avant le contournement, FindItem, FindCount, FindFullQuantity et GetFoundItems sont effacés. Ils se rapportent alors à cette recherche ; une recherche vide laisse des zéros et un tableau vide. FindFullQuantity résume le maximum (1, Montant) des éléments et par 1 pour Mobile. FindQuantity lit la quantité actuelle FindItem. Enregistrez GetFoundItems si, après une autre recherche, la liste précédente est toujours nécessaire.
- Le pont traverse les éléments chargés une fois, puis le mobile si le terrain est sélectionné. Le type, la couleur et au moins un conteneur doivent correspondre. Un objet est compté une fois, même s'il remplit plusieurs conditions. Il n’y a pas de traversée complète et répétée du monde pour chaque combinaison.
- Seules les données reçues par le client sont lues. Les conteneurs ne s'ouvrent pas, les cellules de la carte ne se chargent pas, il n'y a pas de transfert. Un résultat vide ne prouve pas que le coffre sur le serveur est vide. Si un lien actif est nécessaire, cochez Connected : la recherche elle-même lit l'état local.
- La première correspondance locale est stockée ici ; un nom inconnu ne fait pas basculer la recherche vers le sac à dos. Ground accepte également 0 ; votre FindDistance par défaut 18, maximum 255. Ce sont les caractéristiques de ce client.
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.FindTypeEx(0x0EED, -1, "backpack", false);
UO.Print("FindTypeEx: " + Convert.ToString(result));Paramètres et déroulement de l’exécution :
- 0x0EED - or, -1 - n'importe quel hue ; backpack/false exclut les sacs imbriqués. Les trois lignes génèrent le premier ID en hexadécimal sans 0x, le nombre d'objets et la somme des uns. Deux piles de 20 et 50 : objets 2, unités 70.
var item = UO.FindTypeEx(0x0EED, -1, "backpack", false);
UO.Print(Hex(item));
UO.Print(Convert.ToString(UO.FindCount()));
UO.Print(Convert.ToString(UO.FindFullQuantity()));
string Hex(object? value) => Convert.ToInt64(value).ToString("X");Paramètres et déroulement de l’exécution :
- radius=5 et height=10 fonctionnent à l'intérieur de FindGoldNearSelf. Restaure enfin les deux limites même en cas de retour ou d'erreur. La fonction renvoie serial or ou 0 ; Vérifications principales != 0 avant la sortie.
return RunScenario();
object? RunScenario()
{
var item = FindGoldNearSelf(5, 10);
if (Truth(item != 0))
{
UO.Print(Hex(item));
}
else
{
UO.Print("Empty");
}
return null;
}
dynamic FindGoldNearSelf(dynamic radius, dynamic height)
{
var oldDistance = UO.FindDistance();
var oldVertical = UO.FindVertical();
try
{
UO.FindDistance(radius);
UO.FindVertical(height);
return UO.FindTypeEx(0x0EED, -1, UO.Ground(), false);
}
finally
{
UO.FindDistance(oldDistance);
UO.FindVertical(oldVertical);
}
}
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 :
- GetSerial autorise backpack ; la vérification de zéro empêche la sélection aléatoire du sol. AddObject enregistre ID sous search_bag. true comprend des sacs imbriqués. GetFoundItems stocke un tableau séparé ; IsObjectExists revérifie tous les ID.
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 bag = UO.GetSerial("backpack");
if (Truth(bag != "0x00000000"))
{
UO.AddObject("search_bag", bag);
UO.FindTypeEx(0x0EED, -1, "search_bag", true);
var items = UO.GetFoundItems();
foreach (var item in items)
{
if (Truth(UO.IsObjectExists(item)))
{
UO.Print(Hex(item));
}
}
}
return null;
}
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;
}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: objType (Any), color (Any), container (Any), inSub (Any)
Résultat: int / Integer.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.FindType:bridge.FindType(ResolveType(arguments[0]), Arg(1), StealthContainer(2), -1, Arg(3) != 0). -
InjectionScript.Runtime.InjectionApiUO.ResolveType:ResolveType(arguments[0]). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(1). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::StealthContainer:StealthContainer(2).
Code interne de l’implémentation ; ce n’est pas un script autonome.
case "findtypeex": return new InjectionValue(bridge.FindType(ResolveType(arguments[0]), Arg(1), StealthContainer(2), -1, Arg(3) != 0));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.FindTypesArrayEx(object? objTypes, object? colors, object? containers, object? inSub);En un seul parcours, il recherche différents graphiques, couleurs et conteneurs et renvoie celui trouvé ID. La liste complète est lue via GetFoundItems.
-
objTypes- Élément graphique/body, pas serial. 0..65534 - graphiques spécifiques ; -1 ou 0xFFFF - n'importe lequel. Les autres int négatifs dans ce client suppriment également le filtre. -
colors— La teinte, pas le nombre d'éléments. 0 - objet non peint ; -1 ou 0xFFFF - n'importe quel hue. Les autres négatifs int suppriment également le filtre de couleur. -
containers- Masse : UO.Ground(), 0, -1, 0xFFFFFFFF ou chaîne ground. Sac à dos : ficelle backpack ou son serial. Le nombre décimal/hexadécimal serial et le nom AddObject sont acceptés. my sélectionne l'intégralité de l'inventaire de son personnage, y compris l'équipement et les sacs attachés. Un nom inconnu provoque une erreur de script. Vérifiez le serial résultant : le 0 explicite sélectionne le sol. Les noms ground/backpack sont plus clairs que les désignations numériques, qui diffèrent selon les familles de commandes. -
inSub- Obligatoire true/false (1/0). false - contenu direct d'un conteneur spécifique ; true – sacs imbriqués également chargés. Pour la terre, la récursivité ne change rien. my sélectionne déjà tout l'inventaire du personnage.
int : serial première correspondance dans l'ordre de parcours local ; 0 s'il n'y a pas de correspondance. Pas graphic, count, array ou bool. Vérifiez le résultat != 0, pas le résultat == true ou le résultat == 1. Une pile est considérée comme un objet ; Mobile - un objet et une unité. L'ordre n'implique pas la proximité et n'est pas garanti entre les recherches.
- Le tableau est transmis ; une seule valeur est également traitée comme un tableau d'un élément. déclarer les valeurs des variables[1] crée les indices 0 et 1 : remplissez chacun. Les types et les couleurs sont des options indépendantes et non des paires par index. Un masque « n’importe » dans n’importe quelle position ou un tableau vide de types/couleurs supprime ce filtre. Un tableau vide de conteneurs sélectionne l'inventaire du personnage. Les répétitions et les intersections de conteneurs ne dupliquent pas ID.
- Les quatre arguments positionnels sont nécessaires. Il n'y a pas d'arguments facultatifs.
- Earth utilise les FindDistance et FindVertical de ce script, exclut self et inclut l'élément et le mobile appropriés. La recherche dans un conteneur spécifique n’applique pas ces limites de distance/hauteur. Dans les deux cas, les Ignore et les objets détruits sont exclus.
- Avant le contournement, FindItem, FindCount, FindFullQuantity et GetFoundItems sont effacés. Ils se rapportent alors à cette recherche ; une recherche vide laisse des zéros et un tableau vide. FindFullQuantity résume le maximum (1, Montant) des éléments et par 1 pour Mobile. FindQuantity lit la quantité actuelle FindItem. Enregistrez GetFoundItems si, après une autre recherche, la liste précédente est toujours nécessaire.
- Le pont traverse les éléments chargés une fois, puis le mobile si le terrain est sélectionné. Le type, la couleur et au moins un conteneur doivent correspondre. Un objet est compté une fois, même s'il remplit plusieurs conditions. Il n’y a pas de traversée complète et répétée du monde pour chaque combinaison.
- Seules les données reçues par le client sont lues. Les conteneurs ne s'ouvrent pas, les cellules de la carte ne se chargent pas, il n'y a pas de transfert. Un résultat vide ne prouve pas que le coffre sur le serveur est vide. Si un lien actif est nécessaire, cochez Connected : la recherche elle-même lit l'état local.
- La première correspondance locale est stockée ici ; un nom inconnu ne fait pas basculer la recherche vers le sac à dos. Ground accepte également 0 ; votre FindDistance par défaut 18, maximum 255. Ce sont les caractéristiques de ce client.
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.FindTypesArrayEx(new[] { 0x0EED }, new[] { -1 }, new[] { "backpack" }, false);
UO.Print("FindTypesArrayEx: " + Convert.ToString(result));Paramètres et déroulement de l’exécution :
- les types contiennent de l'or 0x0EED et de la perle noire 0x0F7A ; une couleur = -1 - n'importe quel hue, un Ground - terre. false ne change rien sur terre. Les limites de recherche actuelles s'appliquent. ID, le nombre d'objets et la somme des unités sont affichés.
dynamic[] types = new dynamic[checked((int)(1) + 1)];
types[0] = 0x0EED;
types[1] = 0x0F7A;
dynamic[] colors = new dynamic[checked((int)(0) + 1)];
colors[0] = -1;
dynamic[] containers = new dynamic[checked((int)(0) + 1)];
containers[0] = UO.Ground();
var first = UO.FindTypesArrayEx(types, colors, containers, false);
UO.Print(Hex(first));
UO.Print(Convert.ToString(UO.FindCount()));
UO.Print(Convert.ToString(UO.FindFullQuantity()));
string Hex(object? value) => Convert.ToInt64(value).ToString("X");Paramètres et déroulement de l’exécution :
- types - uniquement de l'or; couleurs - n'importe quel hue. Conteneurs - backpack et terrains ; true comprend des sacs imbriqués. Les objets/piles et les unités des deux zones sont sortis, chaque objet étant compté une fois.
return RunScenario();
object? RunScenario()
{
dynamic[] types = new dynamic[checked((int)(0) + 1)];
types[0] = 0x0EED;
dynamic[] colors = new dynamic[checked((int)(0) + 1)];
colors[0] = -1;
dynamic[] containers = new dynamic[checked((int)(1) + 1)];
containers[0] = "backpack";
containers[1] = UO.Ground();
UO.FindTypesArrayEx(types, colors, containers, true);
UO.Print(Convert.ToString(UO.FindCount()));
UO.Print(Convert.ToString(UO.FindFullQuantity()));
return null;
}Paramètres et déroulement de l’exécution :
- SearchTypesIn(container,firstType,secondType) renvoie un Array, alors que la commande intégrée renvoie un seul int ID. La fonction complète ci-dessus remplit les tableaux, recherche de manière récursive et copie immédiatement GetFoundItems. Main vérifie chaque ID stocké et le sort.
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 = SearchTypesIn("backpack", 0x0EED, 0x0F7A);
foreach (var item in items)
{
if (Truth(UO.IsObjectExists(item)))
{
UO.Print(Hex(item));
}
}
return null;
}
dynamic SearchTypesIn(dynamic container, dynamic firstType, dynamic secondType)
{
dynamic[] types = new dynamic[checked((int)(1) + 1)];
types[0] = firstType;
types[1] = secondType;
dynamic[] colors = new dynamic[checked((int)(0) + 1)];
colors[0] = -1;
dynamic[] containers = new dynamic[checked((int)(0) + 1)];
containers[0] = container;
UO.FindTypesArrayEx(types, colors, containers, true);
return UO.GetFoundItems();
}
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;
}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: objTypes (Any), colors (Any), containers (Any), inSub (Any)
Résultat: int / Integer.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.FindTypes:bridge.FindTypes(arguments[0].Kind == InjectionValueKind.Array ? arguments[0].Array.Select(ResolveType).ToArray() : new[] { ResolveType(arguments[0]) }, ArrayArg(1), searchContainers.Select(ConvertClientSearchContainer).ToArray(), Arg(3) != 0). -
InjectionScript.Runtime.InjectionApiUO.ResolveType:ResolveType(arguments[0]). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::ArrayArg:ArrayArg(1). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(3).
Code interne de l’implémentation ; ce n’est pas un script autonome.
case "findtypesarrayex":
InjectionValue[] searchContainers = arguments[2].Kind == InjectionValueKind.Array
? arguments[2].Array : new[] { arguments[2] };
return new InjectionValue(bridge.FindTypes(arguments[0].Kind == InjectionValueKind.Array
? arguments[0].Array.Select(ResolveType).ToArray() : new[] { ResolveType(arguments[0]) }, ArrayArg(1),
searchContainers.Select(ConvertClientSearchContainer).ToArray(), Arg(3) != 0));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.FindVertical();
void UO.FindVertical(object? value);Lit ou modifie la différence de hauteur autorisée dans la recherche par défaut.
-
value- Facultatif int. Sans argument - lecture ; valeur — réglage. La valeur est limitée à la plage 0..120 ; le négatif devient 0 plutôt que no-limit. Dans le nouveau runtime : 2 ; l'état restauré peut contenir une valeur différente. Le nombre fractionnaire est tronqué à zéro ; les chaînes numériques double/0x sont également acceptables. Utilisez int pour éviter la conversion implicite.
Sans arguments : int - limite actuelle (différence en unités mondiales Z), introuvable ID, nombre d'objets ou bool. 0 signifie limite zéro, pas échec. Avec valeur : void - aucune valeur ; ce n'est pas true/false ou l'ancien paramètre. Une fois installé, lisez FindVertical() pour connaître la valeur stockée.
- Hauteur : abs(object.Z - player.Z), dans les deux sens, y compris la bordure. Pour 0 seul le même Z convient. Il ne s'agit pas du numéro d'étage ni du nombre de cellules horizontales.
- Le paramètre est stocké dans le runtime du script actuel ; ses procédures utilisent une valeur unique. Les environnements d'exécution indépendants ont des paramètres distincts. La lecture et l'écriture ne déclenchent pas de recherche, n'effacent pas FindItem/FindCount/GetFoundItems, n'envoient pas de paquet, ne déplacent pas de caractère ou ne chargent pas d'objets distants.
- FindTypeEx et FindTypesArrayEx utilisent ces limites lors de recherches au sol, mais pas à l'intérieur du conteneur. Les filtres restants sont type, hue, Ignore et la présence d'un objet chargé. FindAtCoord ignore les deux limites. Dans les commandes étendues, la distance explicite/maxZ peut remplacer les paramètres ; -1 dans de tels paramètres signifie prendre le réglage, par opposition à définir le réglage lui-même sur -1. FindList filtre également Z lors de la recherche de conteneurs ; l'exception de conteneur spécifiée ne s'applique pas à celui-ci.
- Avant de rechercher temporairement, enregistrez la valeur et restaurez-la dans Enfin. L'installation n'est pas automatiquement annulée. Fonctionne enfin avec une achèvement normale et une erreur de script détectée ; L'arrêt d'urgence ne peut pas être utilisé comme mécanisme de nettoyage.
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.FindVertical();
UO.Print("FindVertical: " + Convert.ToString(result));Paramètres et déroulement de l’exécution :
- précédent enregistre le réglage actuel. value:=10 définit la limite normale ; 1000 montre la limite à 120. Print lit le résultat comme un appel séparé sans argument. Restaure enfin le précédent.
var previous = UO.FindVertical();
try
{
UO.FindVertical(10);
UO.Print(Convert.ToString(UO.FindVertical()));
UO.FindVertical(1000);
UO.Print(Convert.ToString(UO.FindVertical()));
}
finally
{
UO.FindVertical(previous);
}Paramètres et déroulement de l’exécution :
- précédent enregistre le paramètre du code d'appel. 10 modifie uniquement FindVertical ; la deuxième limite reste la même. 0x0EED - graphiques dorés, -1 - n'importe quel hue, Container=-1 - monde, false - sans récursion de conteneur. identifiant - un serial ; != 0 vérifie la disponibilité. FindCount compte les objets/piles entiers. Restaure enfin le paramètre, pas la liste des résultats.
return RunScenario();
object? RunScenario()
{
var previous = UO.FindVertical();
try
{
UO.FindVertical(10);
var id = UO.FindTypeEx(0x0EED, -1, -1, false);
if (Truth(id != 0))
{
UO.Print(Hex(id) + ":" + Convert.ToString(UO.FindCount()));
}
else
{
UO.Print("0");
}
}
finally
{
UO.FindVertical(previous);
}
return null;
}
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 :
- CountGroundInRange(graphic, radius, height) stocke les deux limites, définit radius=5 et height=10, recherche graphic=0x0EED et renvoie FindCount(). Une pile est considérée comme un objet. La fonction complète est donnée après Main. Restaure enfin les deux limites même en sortant via return ; le résultat de la recherche reste disponible.
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 count = CountGroundInRange(0x0EED, 5, 10);
UO.Print(Convert.ToString(count));
return null;
}
dynamic CountGroundInRange(dynamic graphic, dynamic radius, dynamic height)
{
var oldDistance = UO.FindDistance();
var oldVertical = UO.FindVertical();
try
{
UO.FindDistance(radius);
UO.FindVertical(height);
UO.FindTypeEx(graphic, -1, -1, false);
return UO.FindCount();
}
finally
{
UO.FindDistance(oldDistance);
UO.FindVertical(oldVertical);
}
}
}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.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SetFindVertical:bridge.SetFindVertical(Arg(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetFindVertical:bridge.GetFindVertical().
Code interne de l’implémentation ; ce n’est pas un script autonome.
case "findvertical":
if (arguments.Length > 0) { bridge.SetFindVertical(Arg(0)); return InjectionValue.Unit; }
return new InjectionValue(bridge.GetFindVertical());Paramètres: value (Any)
Résultat: void / Unit.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SetFindVertical:bridge.SetFindVertical(Arg(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetFindVertical:bridge.GetFindVertical().
Code interne de l’implémentation ; ce n’est pas un script autonome.
case "findvertical":
if (arguments.Length > 0) { bridge.SetFindVertical(Arg(0)); return InjectionValue.Unit; }
return new InjectionValue(bridge.GetFindVertical());Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.GetFindedList(object? userList);Crée une copie de la liste ID de la dernière recherche normale.
-
userList— Argument de compatibilité requis. Dans l'implémentation actuelle, elle n'est ni renseignée ni modifiée : la liste est renvoyée comme résultat de la commande. Vous pouvez réussir 0. Pour un formulaire sans arguments, utilisez GetFoundItems.
Array est un tableau distinct serial/ID dans le dernier ordre de recherche. Un tableau vide s'il n'y avait aucune correspondance. Ne contient pas graphic, hue ou Montant. La modification du tableau renvoyé ne modifie pas la liste de recherche enregistrée.
- 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.
- Les données appartiennent à la dernière recherche normale de ce script. FindType avec les arguments 1–5, FindTypeEx, Count/CountEx/CountGround remplacent les résultats. Les commandes avancées de caractères filtrés ne sont pas nécessaires pour modifier cet instantané.
- Une nouvelle recherche sans correspondance efface FindItem, FindCount et FindFullQuantity et efface GetFoundItems. La lecture d’un résultat ne déclenche pas à elle seule une nouvelle recherche.
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.
UO.FindType(0x0EED, -1, "backpack");
object? result = UO.GetFindedList(0);
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Paramètres et déroulement de l’exécution :
- Le FindType habituel pour l'or dans le sac à dos est préfabriqué. UserList=0 n'est pas un paramètre de sortie.
- Longueur - nombre d'enregistrements/ID. Ce n'est pas le montant du montant en piles. La liste vide donne 0.
var found = UO.FindType(0x0EED, -1, "backpack");
var items = UO.GetFindedList(0);
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 :
- Le FindType habituel pour l'or dans le sac à dos est préfabriqué. UserList=0 n'est pas un paramètre de sortie.
- 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 found = UO.FindType(0x0EED, -1, "backpack");
var items = UO.GetFindedList(0);
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 :
- Le FindType habituel pour l'or dans le sac à dos est préfabriqué. UserList=0 n'est pas un paramètre de sortie.
- 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 found = UO.FindType(0x0EED, -1, "backpack");
var items = UO.GetFindedList(0);
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: userList (Any)
Résultat: dynamic / Any.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetFoundItems:bridge.GetFoundItems().
Code interne de l’implémentation ; ce n’est pas un script autonome.
case "getfindedlist":
return new InjectionValue(bridge.GetFoundItems().Select(serial => new InjectionValue(serial)).ToArray());Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.GetFoundItems();Crée une copie de la liste ID de la dernière recherche normale.
Il n'y a pas de paramètres.
Array est un tableau distinct serial/ID dans le dernier ordre de recherche. Un tableau vide s'il n'y avait aucune correspondance. Ne contient pas graphic, hue ou Montant. La modification du tableau renvoyé ne modifie pas la liste de recherche enregistrée.
- 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.
- Les données appartiennent à la dernière recherche normale de ce script. FindType avec les arguments 1–5, FindTypeEx, Count/CountEx/CountGround remplacent les résultats. Les commandes avancées de caractères filtrés ne sont pas nécessaires pour modifier cet instantané.
- Une nouvelle recherche sans correspondance efface FindItem, FindCount et FindFullQuantity et efface GetFoundItems. La lecture d’un résultat ne déclenche pas à elle seule une nouvelle recherche.
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.
UO.FindType(0x0EED, -1, "backpack");
object? result = UO.GetFoundItems();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Paramètres et déroulement de l’exécution :
- Le FindType habituel pour l'or dans le sac à dos est préfabriqué. Il n'y a pas de paramètres.
- Longueur - nombre d'enregistrements/ID. Ce n'est pas le montant du montant en piles. La liste vide donne 0.
var found = UO.FindType(0x0EED, -1, "backpack");
var items = UO.GetFoundItems();
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 :
- Le FindType habituel pour l'or dans le sac à dos est préfabriqué. Il n'y a pas de paramètres.
- 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 found = UO.FindType(0x0EED, -1, "backpack");
var items = UO.GetFoundItems();
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 :
- Le FindType habituel pour l'or dans le sac à dos est préfabriqué. Il n'y a pas de paramètres.
- 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 found = UO.FindType(0x0EED, -1, "backpack");
var items = UO.GetFoundItems();
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: Aucun paramètre.
Résultat: dynamic / Any.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetFoundItems:bridge.GetFoundItems().
Code interne de l’implémentation ; ce n’est pas un script autonome.
case "getfounditems":
return new InjectionValue(bridge.GetFoundItems().Select(serial => new InjectionValue(serial)).ToArray());Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.GetIgnoreList();Affiche le ID spécifique ajouté au filtre serial via Ignore. Aide à vérifier quels éléments ont déjà été traités et sont exclus de la recherche. Les règles nommées type/hue de AddIgnoreList ne sont pas incluses dans ce tableau.
Il n'y a pas de paramètres.
Tableau - serial de la liste Ignore par ordre croissant de numérique ID. Tableau vide lorsque la liste est vide. ID n'existe peut-être plus dans le monde ; Il s'agit de règles de recherche et non d'une liste d'éléments visibles.
- 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.
- Dans le client, l'ensemble appartient à l'état général des scripts de profil. Le tableau est une copie : IgnoreOff(serial) efface une exception, IgnoreReset efface tous les serial. Ils ne désactivent pas les règles sélectionnées type/hue ; ils nécessitent SelectIgnoreList, DeleteIgnoreList ou ClearIgnoreList. GetContent/GetEquipment et GetWorldItems sans arguments n'appliquent pas eux-mêmes ce filtre.
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.GetIgnoreList();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Paramètres et déroulement de l’exécution :
- Il n'y a aucun paramètre ; un instantané des exceptions serial évidentes est lu. Un tableau vide ne signifie pas que les règles nommées type/hue sont manquantes.
- Longueur - nombre d'enregistrements/ID. Ce n'est pas le montant du montant en piles. La liste vide donne 0.
var items = UO.GetIgnoreList();
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 :
- Il n'y a aucun paramètre ; un instantané des exceptions serial évidentes est lu. Un tableau vide ne signifie pas que les règles nommées type/hue sont manquantes.
- 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.GetIgnoreList();
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 :
- Il n'y a aucun paramètre ; un instantané des exceptions serial évidentes est lu. Un tableau vide ne signifie pas que les règles nommées type/hue sont manquantes.
- 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.GetIgnoreList();
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: Aucun paramètre.
Résultat: dynamic / Any.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetIgnoreList:bridge.GetIgnoreList().
Code interne de l’implémentation ; ce n’est pas un script autonome.
case "getignorelist":
return new InjectionValue(bridge.GetIgnoreList().Select(value => new InjectionValue(value)).ToArray());Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.GetWorldItems();
dynamic UO.GetWorldItems(object? @type);
dynamic UO.GetWorldItems(object? @type, object? color);
dynamic UO.GetWorldItems(object? @type, object? color, object? distance);
dynamic UO.GetWorldItems(object? @type, object? color, object? distance, object? container);
dynamic UO.GetWorldItems(object? @type, object? color, object? distance, object? container, object? nearest);
dynamic UO.GetWorldItems(object? @type, object? color, object? distance, object? container, object? nearest, object? maxZ);Renvoie un tableau ID d'éléments du monde ou du conteneur sélectionné.
-
type- Premier argument de la forme filtrée : graphic/type, -1 ou 0xFFFF - any. Ce n'est pas serial. Sans tous les arguments, un formulaire distinct sans filtrage est utilisé. -
color- Teinte ; par défaut - 1, n'importe quelle couleur. 0xFFFF accepte également n'importe quel hue. -
distance— Rayon dans les cellules le long de X/Y. Valeur négative ou absence utiliser FindDistance ; 0 signifie la même cellule. Pour un conteneur, c'est la distance jusqu'au conteneur qui est vérifiée, et non son X/Y interne. -
container- Par défaut à la terre. ground, numérique 0/1 et leurs chaînes sont rectifiées. backpack, my et numérique -1 sont le contenu direct du sac à dos. Série/chaîne hexadécimale/alias du conteneur - son contenu direct ; self sélectionne les éléments dont le parent est un personnage. Un nom inconnu et un sac à dos manquant donnent un tableau vide, pas un terrain. -
nearest— Par défaut false. true trie par distance, puis par numérique serial. Pour un conteneur, la distance pour tous les résultats est la même. -
maxZ— Différence de hauteur admissible par rapport à self. Valeur négative ou absence utiliser FindVertical ; 0 nécessite la même hauteur. Dans un conteneur, la hauteur du conteneur lui-même est prise en compte.
Tableau - Éléments serial/ID, pas type, coordonnées ou montant. Un tableau vide sans correspondance. GetWorldItems() renvoie tous les éléments chargés en dehors des conteneurs sans Ignore/range/height ; GetWorldItems(type,...) utilise les filtres répertoriés et Ignore. NPC/joueurs ne sont inclus sous aucune forme.
- 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.
- La photo FindItem/FindCount/GetFoundItems ne change pas. L'équipe n'ouvre pas le conteneur et ne fouille pas les sacs fermés.
- Pour désactiver les restrictions, -1 ne suffit pas : il s'agit de la sélection du paramètre actuel, pas du rayon infini. Spécifiez la distance non négative/maxZ souhaitée ou utilisez le formulaire sans arguments pour tous les éléments de terrain chargés.
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.GetWorldItems();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));Paramètres et déroulement de l’exécution :
- Aucun paramètre : formulaire spécial sans filtres.
- Le résultat ne concerne pas tous les éléments de la carte ou du serveur. Ignore ne s'applique pas ici.
var items = UO.GetWorldItems();
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 :
- type=0x0EED — or, couleur=-1 — n'importe lequel ; distance=5, conteneur=ground, le plus proche=true, maxZ=3.
- La première entrée est l'élément non ignorable correspondant le plus proche ; la distance ne vérifie pas les murs et n’assure pas l’accessibilité.
return RunScenario();
object? RunScenario()
{
var items = UO.GetWorldItems(0x0EED, -1, 5, "ground", true, 3);
if (Truth(ArrayLength(items) > 0))
{
var item = items[0];
if (Truth(UO.Exists(item)))
{
UO.Print("Nearest ID: 0x" + Hex(item));
}
}
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 :
- N'importe quel type/couleur ; my sélectionne un sac à dos. La distance 20 et la différence Z 255 se réfèrent au conteneur. false préserve l'ordre d'origine.
- Les articles simples sont comptés, pas les unités empilées ni le contenu des sacs imbriqués. Sans sac à dos, un tableau vide est renvoyé.
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.GetWorldItems(-1, -1, 20, "my", false, 255);
UO.Print(Convert.ToString(ArrayLength(items)));
return null;
}
int ArrayLength(object? value) => value is System.Array array ? array.Length : 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: dynamic / Any.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetWorldItems:bridge.GetWorldItems().
Code interne de l’implémentation ; ce n’est pas un script autonome.
case "getworlditems":
return new InjectionValue(bridge.GetWorldItems().Select(serial => new InjectionValue(serial)).ToArray());Paramètres: type (Any)
Résultat: dynamic / Any.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCompactSearchApi [GetWorldItems]. -
InjectionScript.Runtime.InjectionApiUO.CompactGetWorldItems:CompactGetWorldItems(values).
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.
values => CompactGetWorldItems(values)Paramètres: type (Any), color (Any)
Résultat: dynamic / Any.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCompactSearchApi [GetWorldItems]. -
InjectionScript.Runtime.InjectionApiUO.CompactGetWorldItems:CompactGetWorldItems(values).
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.
values => CompactGetWorldItems(values)Paramètres: type (Any), color (Any), distance (Any)
Résultat: dynamic / Any.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCompactSearchApi [GetWorldItems]. -
InjectionScript.Runtime.InjectionApiUO.CompactGetWorldItems:CompactGetWorldItems(values).
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.
values => CompactGetWorldItems(values)Paramètres: type (Any), color (Any), distance (Any), container (Any)
Résultat: dynamic / Any.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCompactSearchApi [GetWorldItems]. -
InjectionScript.Runtime.InjectionApiUO.CompactGetWorldItems:CompactGetWorldItems(values).
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.
values => CompactGetWorldItems(values)Paramètres: type (Any), color (Any), distance (Any), container (Any), nearest (Any)
Résultat: dynamic / Any.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCompactSearchApi [GetWorldItems]. -
InjectionScript.Runtime.InjectionApiUO.CompactGetWorldItems:CompactGetWorldItems(values).
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.
values => CompactGetWorldItems(values)
UO.GetWorldItems(type, color, distance, container, nearest, maxZ) — UO.GetWorldItems(Any,Any,Any,Any,Any,Any)
Paramètres: type (Any), color (Any), distance (Any), container (Any), nearest (Any), maxZ (Any)
Résultat: dynamic / Any.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCompactSearchApi [GetWorldItems]. -
InjectionScript.Runtime.InjectionApiUO.CompactGetWorldItems:CompactGetWorldItems(values).
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.
values => CompactGetWorldItems(values)Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.Ignore(object? objID);
void UO.Ignore(object? id, object? stateValue);Ajoute ou supprime serial de la liste des ignorés de recherche normale.
-
id— Objet série/ID : int, chaîne numérique/hexadécimale ou alias établi, par exemple "lasttarget". Ce n'est pas graphic/type. Vérifiez l’objet chargé avant d’agir. -
objID— Objet série/ID : int, chaîne numérique/hexadécimale ou alias établi, par exemple "lasttarget". Ce n'est pas graphic/type. Vérifiez l’objet chargé avant d’agir. -
stateValue— Mode facultatif. Le nombre 0 s'éteint, les nombres non nuls s'allument. Les lignes "off", "false" (insensible à la casse) et exactement "0" sont désactivées ; toute autre ligne inclut. Sans argument de mode - ajoutez.
void - aucune valeur. Appelez sur une ligne séparée ; l'achèvement ne confirme pas l'action du serveur.
- Ignore(id) appelle bridge.Ignore(serial), ce qui ajoute serial à State.IgnoredSerials. Ignore(id,stateValue) sélectionne Ignore ou Unignore. Toute chaîne non vide ne peut pas être considérée comme vraie : les mots d'échappement répertoriés sont traités séparément.
- Il s'agit d'un filtre de recherche qui ne masque ni ne supprime un objet. Les filtres nommés de types AddIgnoreList sont stockés séparément.
- Dans un hôte client standard, ces données d'état sont extraites du gestionnaire GetPersistentState et sont communes aux scripts/chat/macros du même monde/profil, et n'appartiennent pas à un seul script. Un autre processus ou un InjectionRuntimeState apparemment séparé a un état différent. Charger/effacer un profil peut le remplacer ; Les serial enregistrés sont toujours comparés au monde chargé.
Chaque exemple peut être enregistré dans un fichier séparé .csx et exécuté dans IDE. Les fonctions d'objet UO et d'attente fournissent l'hôte de la session de jeu en cours. Remplacez les noms, coordonnées et adresses de la démo serial par les vôtres.
Exécutez ce code dans un fichier .csx séparé. Les arguments sont visibles dans l’appel ; remplacez les noms, serials et adresses d’exemple par les vôtres.
La commande forme une instruction séparée. Le message précédent indique le début de l’appel et ne confirme aucune action du serveur.
UO.Print("Calling UO.Ignore");
UO.Ignore("lasttarget");Paramètres et déroulement de l’exécution :
- Ajoute ou supprime serial de la liste des ignorés de recherche normale.
UO.Ignore("lasttarget");Paramètres et déroulement de l’exécution :
- Ignore(id) appelle bridge.Ignore(serial), ce qui ajoute serial à State.IgnoredSerials. Ignore(id,stateValue) sélectionne Ignore ou Unignore. Toute chaîne non vide ne peut pas être considérée comme vraie : les mots d'échappement répertoriés sont traités séparément.
return RunScenario();
object? RunScenario()
{
UO.Ignore("lasttarget", "off");
return null;
}Paramètres et déroulement de l’exécution :
- Il s'agit d'un filtre de recherche qui ne masque ni ne supprime un objet. Les filtres nommés de types AddIgnoreList sont stockés séparément.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
var id = UO.GetSerial("lasttarget");
if (Truth(UO.Exists(id)))
{
UO.Ignore(id, 1);
UO.Print(UO.GetIgnoreList());
UO.Ignore(id, 0);
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}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/Integer/String)
Résultat: void / Unit.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Ignore:bridge.Ignore(Arg(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
Code interne de l’implémentation ; ce n’est pas un script autonome.
case "ignore": bridge.Ignore(Arg(0)); return InjectionValue.Unit;Paramètres: objID (Any/Integer/String)
Résultat: void / Unit.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.Ignore. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Ignore:bridge.Ignore(id).
Code interne de l’implémentation ; ce n’est pas un script autonome.
public void Ignore(int id) => bridge.Ignore(id);Paramètres: objID (Any/Integer/String)
Résultat: void / Unit.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.Ignore. -
InjectionScript.Runtime.InjectionApiUO.Ignore:Ignore(GetObject(id)). -
InjectionScript.Runtime.InjectionApiUO.GetObject:GetObject(id).
Code interne de l’implémentation ; ce n’est pas un script autonome.
public void Ignore(string id) => Ignore(GetObject(id));Paramètres: id (Any), stateValue (Any)
Résultat: void / Unit.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.Ignore. -
InjectionScript.Runtime.InjectionApiUO.GetObject:GetObject(id). -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(stateValue). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Ignore:bridge.Ignore(serial). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Unignore:bridge.Unignore(serial).
Code interne de l’implémentation ; ce n’est pas un script autonome.
public void Ignore(InjectionValue id, InjectionValue stateValue)
{
int serial = GetObject(id);
bool enabled = stateValue.Kind != InjectionValueKind.String
? NumberConversions.ToInt(stateValue) != 0
: !stateValue.String.Equals("off", StringComparison.OrdinalIgnoreCase)
&& !stateValue.String.Equals("false", StringComparison.OrdinalIgnoreCase)
&& stateValue.String != "0";
if (enabled)
bridge.Ignore(serial);
else
bridge.Unignore(serial);
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.IgnoreOff(object? objID);Supprime un serial de la liste des ignorés normaux.
-
objID— Objet série/ID : int, chaîne numérique/hexadécimale ou alias établi, par exemple "lasttarget". Ce n'est pas graphic/type. Vérifiez l’objet chargé avant d’agir.
void - aucune valeur. Appelez sur une ligne séparée ; l'achèvement ne confirme pas l'action du serveur.
- Bridge.Unignore supprime ID de State.IgnoredSerials. Les autres filtres serial et nommés AddIgnoreList ne sont pas effacés ; les objets ne sont pas supprimés du monde.
- Changement local du filtre de recherche ; les paquets ne sont pas envoyés.
- Dans un hôte client standard, ces données d'état sont extraites du gestionnaire GetPersistentState et sont communes aux scripts/chat/macros du même monde/profil, et n'appartiennent pas à un seul script. Un autre processus ou un InjectionRuntimeState apparemment séparé a un état différent. Charger/effacer un profil peut le remplacer ; Les serial enregistrés sont toujours comparés au monde chargé.
Chaque exemple peut être enregistré dans un fichier séparé .csx et exécuté dans IDE. Les fonctions d'objet UO et d'attente fournissent l'hôte de la session de jeu en cours. Remplacez les noms, coordonnées et adresses de la démo serial par les vôtres.
Exécutez ce code dans un fichier .csx séparé. Les arguments sont visibles dans l’appel ; remplacez les noms, serials et adresses d’exemple par les vôtres.
La commande forme une instruction séparée. Le message précédent indique le début de l’appel et ne confirme aucune action du serveur.
UO.Print("Calling UO.IgnoreOff");
UO.IgnoreOff(UO.GetSerial("lasttarget"));Paramètres et déroulement de l’exécution :
- Supprime un serial de la liste des ignorés normaux.
var id = UO.GetSerial("lasttarget");
if (Truth(UO.Exists(id)))
{
UO.IgnoreOff(id);
}
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 :
- Bridge.Unignore supprime ID de State.IgnoredSerials. Les autres filtres serial et nommés AddIgnoreList ne sont pas effacés ; les objets ne sont pas supprimés du monde.
return RunScenario();
object? RunScenario()
{
var id = UO.GetSerial("self");
if (Truth(UO.Exists(id)))
{
UO.IgnoreOff(id);
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Paramètres et déroulement de l’exécution :
- Changement local du filtre de recherche ; les paquets ne sont pas envoyés.
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()
{
ApplyToLoaded(UO.GetSerial("lasttarget"));
return null;
}
void ApplyToLoaded(dynamic id)
{
if (Truth(UO.Exists(id)))
{
UO.IgnoreOff(id);
}
}
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: void / Unit.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Unignore:bridge.Unignore(Arg(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
Code interne de l’implémentation ; ce n’est pas un script autonome.
case "ignoreoff": bridge.Unignore(Arg(0)); return InjectionValue.Unit;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.IgnoreReset();Efface la liste normale des serial ignorés.
Il n'y a pas de paramètres.
void - aucune valeur. Appelez sur une ligne séparée ; l'achèvement ne confirme pas l'action du serveur.
- Bridge.IgnoreReset appelle State.IgnoredSerials.Clear. Supprime tous les serial de ce filtre, y compris ceux ajoutés par une autre recherche dans la session de pont globale.
- N'efface pas le nom AddIgnoreList, ne supprime pas les objets ou ne réinitialise pas les résultats de FindType.
- Dans un hôte client standard, ces données d'état sont extraites du gestionnaire GetPersistentState et sont communes aux scripts/chat/macros du même monde/profil, et n'appartiennent pas à un seul script. Un autre processus ou un InjectionRuntimeState apparemment séparé a un état différent. Charger/effacer un profil peut le remplacer ; Les serial enregistrés sont toujours comparés au monde chargé.
Chaque exemple peut être enregistré dans un fichier séparé .csx et exécuté dans IDE. Les fonctions d'objet UO et d'attente fournissent l'hôte de la session de jeu en cours. Remplacez les noms, coordonnées et adresses de la démo serial par les vôtres.
Exécutez ce code dans un fichier .csx séparé. Les arguments sont visibles dans l’appel ; remplacez les noms, serials et adresses d’exemple par les vôtres.
La commande forme une instruction séparée. Le message précédent indique le début de l’appel et ne confirme aucune action du serveur.
UO.Print("Calling UO.IgnoreReset");
UO.IgnoreReset();Paramètres et déroulement de l’exécution :
- Efface la liste normale des serial ignorés.
UO.IgnoreReset();Paramètres et déroulement de l’exécution :
- Bridge.IgnoreReset appelle State.IgnoredSerials.Clear. Supprime tous les serial de ce filtre, y compris ceux ajoutés par une autre recherche dans la session de pont globale.
return RunScenario();
object? RunScenario()
{
UO.Print(UO.GetIgnoreList());
UO.IgnoreReset();
return null;
}Paramètres et déroulement de l’exécution :
- N'efface pas le nom AddIgnoreList, ne supprime pas les objets ou ne réinitialise pas les résultats de FindType.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
UO.Ignore("lasttarget");
UO.IgnoreReset();
UO.Print(UO.GetIgnoreList());
return null;
}
}C# distingue les majuscules. Utilisez le nom UO exact. Comparez les indicateurs numériques à 0 ; utilisez bool seulement si la signature renvoie bool.
Paramètres: Aucun paramètre.
Résultat: void / Unit.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.IgnoreReset. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.IgnoreReset:bridge.IgnoreReset().
Code interne de l’implémentation ; ce n’est pas un script autonome.
public void IgnoreReset() => bridge.IgnoreReset();string UO.InfoFindList();Le contexte décide de l’affichage : les commandes du chat graphique ouvrent un tableau avec champs, valeurs, Ctrl+C et défilement. Un script C# reçoit du texte sans fenêtre ni cible, même si le jeu est affiché. Seules les données connues du client sont accessibles.
Sans argument, Info et InfoTile activent une cible dans le chat graphique. Dans un script, Info() lit la dernière cible objet ou le joueur ; InfoTile() le terrain sous le joueur. serial, type et coordonnées précisent la sélection. Le troisième argument de InfoTile(x,y,map) est la carte.
Aucun paramètre.
Configurez le préfixe dans C# Scripts IDE ; # est un exemple. Séparez les paramètres par des espaces, utilisez des guillemets pour un texte unique. id désigne serial, type désigne graphic. xy x y [z] choisit le premier objet chargé à cet endroit ; type seul choisit le premier résultat. Dans InfoTile(x,y,map), le troisième argument est la carte, pas Z.
#infofindlist
Chaque bloc est un .csx complet. Remplacez les serials, types et coordonnées de démonstration. L’ordre et les arguments C# nommés suivent la signature.
UO.Print(UO.InfoFindList());string ReadDefinitions() => UO.InfoFindList();
UO.Print(ReadDefinitions());string report = UO.InfoFindList();
foreach (string line in report.Split('\n'))
UO.Print(line);new CommandSample().Execute(UO);
sealed class CommandSample
{
public void Execute(global::ClassicUO.CSharp.CSharpGameApi api)
{
api.Print(api.InfoFindList());
}
}CSharpGameApi.InfoFindList
-> CSharpScriptGlobals
-> InjectionScript.Runtime.InjectionApiUO.InfoFindList
ClassicUOInjectionApiBridge -> YokoInfoReport -> YokoInfoGump
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.MFGI();Imprime la liste actuelle des résultats de recherche.
Il n'y a pas de paramètres.
void - aucune valeur. Appelez sur une ligne séparée ; l'achèvement ne confirme pas l'action du serveur.
- ExecuteLegacyManualAlias lit GetFoundItems, formate chaque serial en 0xXXXXXXXXX et concatène les lignes avec un "|" délimiteur. Aucune nouvelle recherche n'est effectuée ; une liste vide donne une chaîne vide.
- Modifie ou affiche uniquement les données locales spécifiées. Cette commande n'a pas de confirmation du serveur.
Chaque exemple peut être enregistré dans un fichier séparé .csx et exécuté dans IDE. Les fonctions d'objet UO et d'attente fournissent l'hôte de la session de jeu en cours. Remplacez les noms, coordonnées et adresses de la démo serial par les vôtres.
Exécutez ce code dans un fichier .csx séparé. Les arguments sont visibles dans l’appel ; remplacez les noms, serials et adresses d’exemple par les vôtres.
La commande forme une instruction séparée. Le message précédent indique le début de l’appel et ne confirme aucune action du serveur.
UO.Print("Calling UO.MFGI");
UO.MFGI();Paramètres et déroulement de l’exécution :
- Imprime la liste actuelle des résultats de recherche.
UO.MFGI();Paramètres et déroulement de l’exécution :
- ExecuteLegacyManualAlias lit GetFoundItems, formate chaque serial en 0xXXXXXXXXX et concatène les lignes avec un "|" délimiteur. Aucune nouvelle recherche n'est effectuée ; une liste vide donne une chaîne vide.
return RunScenario();
object? RunScenario()
{
UO.FindType("0x0E21");
UO.MFGI();
return null;
}Paramètres et déroulement de l’exécution :
- Modifie ou affiche uniquement les données locales spécifiées. Cette commande n'a pas de confirmation du serveur.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
UO.MFGI();
UO.Print(UO.GetArrayLength(UO.GetFoundItems()));
return null;
}
}C# distingue les majuscules. Utilisez le nom UO exact. Comparez les indicateurs numériques à 0 ; utilisez bool seulement si la signature renvoie bool.
Paramètres: Aucun paramètre.
Résultat: void / Unit.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
InjectionScript.Runtime.InjectionApiUO.SystemMessage:SystemMessage(string.Join(" | ", bridge.GetFoundItems().Select(id => $"0x{id:X8}"))). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetFoundItems:bridge.GetFoundItems().
Code interne de l’implémentation ; ce n’est pas un script autonome.
case "mfgi":
SystemMessage(string.Join(" | ", bridge.GetFoundItems().Select(id => $"0x{id:X8}")));
break;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.SelectIgnoreList(object? list);Active/désactive le filtre de recherche nommé actif. Il est utile de modifier l'ensemble des exceptions entre l'exploration, le tri et le ciblage sans supprimer les règles enregistrées. Cette commande n'effectue pas la recherche elle-même.
-
list— Nom arbitraire non vide, par exemple "loot_skip". Le nom n'est pas sensible à la casse. Ce n'est pas le nom de l'élément, ni le conteneur serial, ni le nom de FindList. La chaîne vide "" est également acceptable ici : désactivez les règles nommées.
void - aucune valeur. Utiliser sur une ligne séparée sans var result = et sans vérifier =true. La commande modifie le filtre local ; ne renvoie pas le nombre d'éléments et n'envoie rien au serveur.
- Un nom inexistant sélectionne un filtre vide. Le regretté AddIgnoreList portant ce nom commencera à agir dans les prochaines recherches. Normal Ignore(serial) continue de fonctionner quel que soit le choix.
- La liste nommée contient les règles graphic/type + hue, et la liste régulière Ignore contient la serial spécifique. Ce sont des filtres différents : ils sont combinés lorsque la recherche les prend en charge. Les objets restent visibles et accessibles pour diriger UseObject/MoveItem ; ce n'est pas Hide ou interdiction d'actions.
- Le nom de la liste n'est pas sensible à la casse ; les espaces de bord sont supprimés. Une liste nommée est active, initialement par défaut. AddIgnoreList ne le sélectionne pas automatiquement. SelectIgnoreList("") désactive uniquement le filtre nommé.
- Les règles s'appliquent aux nouvelles recherches, y compris aux éléments téléchargés APRÈS leur ajout. Le tableau déjà reçu et le résultat précédent FindCount ne sont recalculés qu'après une nouvelle recherche. Ne sélectionnez pas une liste avec la règle -1,-1 sauf si vous souhaitez tout exclure.
- Le filtre prend en compte FindType/FindTypeEx/FindTypesArrayEx, FindList, FindAtCoord, FindNotoriety, Count/CountEx et les sélections étendues GetMobiles, GetWorldItems, UseType, WaitTarget, Attack/AttackNearest/FindMan. includeIgnored=true, le cas échéant, contourne à la fois serial et type/hue. L'énumération complète GetContent/GetEquipment, GetWorldItems() sans arguments, et l'énumération verbale FindMobile(humain, proche,...) n'utilisent pas ces règles.
- GetIgnoreList renvoie uniquement serial explicitement ajouté ; les lignes de la liste nommée ne sont pas incluses dans ce tableau. IgnoreReset efface l'intégralité du filtre serial, IgnoreOff(serial) supprime une exception serial ; les règles nommées sont conservées. ClearIgnoreList() sans arguments efface les deux vues.
- L'état appartient à l'état général des scripts du profil client ; le changement affecte les autres scripts ayant cet état. Les paramètres sont inclus dans l'instantané enregistré. Après avoir modifié les règles, un autre script peut déjà effectuer une recherche avec l'instantané précédemment pris - la prochaine recherche verra la mise à jour.
- Dans un hôte client standard, ces données d'état sont extraites du gestionnaire GetPersistentState et sont communes aux scripts/chat/macros du même monde/profil, et n'appartiennent pas à un seul script. Un autre processus ou un InjectionRuntimeState apparemment séparé a un état différent. Charger/effacer un profil peut le remplacer ; Les serial enregistrés sont toujours comparés au monde chargé.
Chaque exemple peut être enregistré dans un fichier séparé .csx et exécuté dans IDE. Les fonctions d'objet UO et d'attente fournissent l'hôte de la session de jeu en cours. Remplacez les noms, coordonnées et adresses de la démo serial par les vôtres.
Exécutez ce code dans un fichier .csx séparé. Les arguments sont visibles dans l’appel ; remplacez les noms, serials et adresses d’exemple par les vôtres.
La commande forme une instruction séparée. Le message précédent indique le début de l’appel et ne confirme aucune action du serveur.
UO.Print("Calling UO.SelectIgnoreList");
UO.SelectIgnoreList("SORT");Paramètres et déroulement de l’exécution :
- SORT et sort forment une seule liste. La recherche sélectionne le premier objet sac à dos autorisé ; enregistrer le nom ne le transfère pas.
UO.AddIgnoreList("sort", 0x0EED);
UO.SelectIgnoreList("SORT");
var item = UO.FindType(-1, -1, "backpack");
if (Truth(item != ""))
{
UO.AddObject("sort_candidate", item);
}
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 :
- Une ligne vide désactive uniquement le filtre nommé. Pour le restaurer ultérieurement, transmettez à nouveau le nom défini.
return RunScenario();
object? RunScenario()
{
UO.SelectIgnoreList("");
var gold = UO.FindType(0x0EED, -1, "backpack");
if (Truth(gold != ""))
{
UO.AddObject("gold_candidate", gold);
}
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 :
- Avant d'ajouter la règle ultérieurement, elle est vide. Une fois ajoutée, aucune pile d’or ne passe la recherche suivante, même si elle vient d’apparaître.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
UO.SelectIgnoreList("later");
UO.AddIgnoreList("later", 0x0EED);
var item = UO.FindType(0x0EED, -1, "ground");
if (Truth(item == ""))
{
UO.Print("Gold is excluded by the selected rule");
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}C# distingue les majuscules. Utilisez le nom UO exact. Comparez les indicateurs numériques à 0 ; utilisez bool seulement si la signature renvoie bool.
Paramètres: list (Any)
Résultat: void / Unit.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Text:Text(0).
Code interne de l’implémentation ; ce n’est pas un script autonome.
case "selectignorelist": state.SelectedIgnoreList = Text(0).Trim(); break;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.SetBadLocation(object? x, object? y);Ajoute X/Y à la liste des cellules interdites pour les itinéraires suivants MoveXY, NewMoveXY, MoveXYZ, PMove et requêtes GetPathArray/GetPathArray3D.
-
x— Monde X de la cellule exclue. -
y— Monde Y de la cellule exclue.
void - aucune valeur de retour. Appelez sur une ligne séparée ; ce n'est pas true/false ou le nombre d'étapes.
- La clé se compose de X/Y, pas de carte et Z. Les coordonnées doivent être des nombres entiers compris entre 0..65535 ; sortir de portée provoque une erreur de script.
- Les interdictions s'appliquent au moteur d'exécution du script appelant. La nouvelle route ou demande en reçoit un instantané. Un itinéraire déjà en cours d'exécution enregistre son instantané, y compris le recalcul interne. Après avoir modifié la liste, démarrez un nouvel itinéraire.
- Il ne s'agit pas d'un changement de carte : les mouvements manuels normaux et les autres itinéraires d'exécution ne reçoivent pas cette interdiction. Vous pouvez quitter la case d'origine, même si elle est marquée comme interdite.
- Dans un hôte client standard, ces données d'état sont extraites du gestionnaire GetPersistentState et sont communes aux scripts/chat/macros du même monde/profil, et n'appartiennent pas à un seul script. Un autre processus ou un InjectionRuntimeState apparemment séparé a un état différent. Charger/effacer un profil peut le remplacer ; Les serial enregistrés sont toujours comparés au monde chargé.
Chaque exemple peut être enregistré dans un fichier séparé .csx et exécuté dans IDE. Les fonctions d'objet UO et d'attente fournissent l'hôte de la session de jeu en cours. Remplacez les noms, coordonnées et adresses de la démo serial par les vôtres.
Exécutez ce code dans un fichier .csx séparé. Les arguments sont visibles dans l’appel ; remplacez les noms, serials et adresses d’exemple par les vôtres.
La commande forme une instruction séparée. Le message précédent indique le début de l’appel et ne confirme aucune action du serveur.
UO.Print("Calling UO.SetBadLocation");
UO.SetBadLocation(UO.GetX() + 1, UO.GetY());Paramètres et déroulement de l’exécution :
- X/Y - cellule à l'est du personnage.
- Si un parcours est possible, un autre chemin complet est renvoyé ; le personnage ne bouge pas.
UO.SetBadLocation(UO.GetX() + 1, UO.GetY());
var path = UO.GetPathArray(UO.GetX() + 3, UO.GetY(), true, 0);
UO.Print(Convert.ToString(ArrayLength(path)));
int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;Paramètres et déroulement de l’exécution :
- Chaque appel ajoute une paire X/Y.
- La répétition d’une paire ne crée pas une seconde interdiction distincte ; Z n'est pas un paramètre.
return RunScenario();
object? RunScenario()
{
UO.SetBadLocation(1445, 1690);
UO.SetBadLocation(1445, 1691);
return null;
}Paramètres et déroulement de l’exécution :
- Remplacez les coordonnées par une cellule vraiment infranchissable. La commande configure les données d'itinéraire locales et ne crée pas d'objet dans le monde.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
int x = UO.GetX() + 1;
int y = UO.GetY();
UO.SetBadLocation(x, y);
UO.Print($"Marked known blocked location: {x},{y}");
return null;
}
}C# distingue les majuscules. Utilisez le nom UO exact. Comparez les indicateurs numériques à 0 ; utilisez bool seulement si la signature renvoie bool.
Paramètres: x (Any), y (Any)
Résultat: void / Unit.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
Code interne de l’implémentation ; ce n’est pas un script autonome.
case "setbadlocation":
{
int x = Arg(0), y = Arg(1);
if (x < 0 || x > ushort.MaxValue || y < 0 || y > ushort.MaxValue)
throw new NativeSubrutineException("UO.SetBadLocation requires world X/Y in 0..65535.");
state.BadLocations.Add(x + "," + y);
return InjectionValue.Unit;
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.SetBadObject(object? objType, object? color, object? radius);Exclut des itinéraires et interroge les chemins des cellules autour des objets du monde chargés sélectionnés par graphic et hue.
-
objType- Graphique/type de l'article, 0..65535. 0xFFFF ou -1 autorise n'importe quel type. Il ne s'agit pas d'un cas spécifique serial. -
color— Teinte de l'élément, 0..65535. 0xFFFF ou -1 autorise n'importe quelle couleur ; 0 signifie exactement hue 0. -
radius— Rayon dans les cellules, 0..255 inclus. 0 exclut une cellule d'élément. R exclut le carré max(abs(dx),abs(dy)) <= R qui l'entoure, y compris les cellules diagonales.
void - aucune valeur de retour. Appelez sur une ligne séparée ; ce n'est pas true/false ou le nombre d'étapes.
- Des paramètres sont requis. Une plage inappropriée provoque une erreur de script plutôt qu’une troncature silencieuse des numéros.
- Les règles sont accumulées dans le runtime actuel. Les règles de correspondance sont combinées : le plus grand rayon est appliqué à un élément. ClearBadObjectList supprime toutes ces règles.
- Les éléments dynamiques chargés avec Container=0 sont pris en compte, y compris les portes accessibles au client. Les éléments à l'intérieur des conteneurs, NPC et les statistiques de carte ne sont pas sélectionnés par ce filtre. Pour les caractères, utilisez avoidMobiles, pour les cellules individuelles, utilisez SetBadLocation.
- Lorsque vous démarrez MoveXY/NewMoveXY/MoveXYZ/PMove ou GetPathArray/GetPathArray3D, un instantané des règles et des positions des éléments est créé. D'autres modifications apportées au monde et à la liste ne modifient pas cet instantané ; un nouveau lancement reçoit de nouvelles données.
- Le filtre n'envoie rien au serveur, ne force pas le conteneur fermé à charger le contenu et ne modifie pas le mouvement manuel. Les règles X/Y n'ont pas de limite Z distincte.
- Dans un hôte client standard, ces données d'état sont extraites du gestionnaire GetPersistentState et sont communes aux scripts/chat/macros du même monde/profil, et n'appartiennent pas à un seul script. Un autre processus ou un InjectionRuntimeState apparemment séparé a un état différent. Charger/effacer un profil peut le remplacer ; Les serial enregistrés sont toujours comparés au monde chargé.
Chaque exemple peut être enregistré dans un fichier séparé .csx et exécuté dans IDE. Les fonctions d'objet UO et d'attente fournissent l'hôte de la session de jeu en cours. Remplacez les noms, coordonnées et adresses de la démo serial par les vôtres.
Exécutez ce code dans un fichier .csx séparé. Les arguments sont visibles dans l’appel ; remplacez les noms, serials et adresses d’exemple par les vôtres.
La commande forme une instruction séparée. Le message précédent indique le début de l’appel et ne confirme aucune action du serveur.
UO.Print("Calling UO.SetBadObject");
UO.SetBadObject(0x398C, 0xFFFF, 1);Paramètres et déroulement de l’exécution :
- ObjType=0x398C - exemple graphic : remplacez par le type d'obstacle sur votre serveur. Color=0xFFFF sélectionne n'importe quelle couleur ; Radius=1 élimine un carré 3×3 autour de chaque élément correspondant.
- NewMoveXY va cinq cellules vers l'est, avec X/Y exact, à pied, sans rappel et avec timeout=5000 ms. ok=1 signifie atteindre l'objectif ; 0 ne confirme pas le contournement.
UO.SetBadObject(0x398C, 0xFFFF, 1);
var ok = UO.NewMoveXY(UO.GetX() + 5, UO.GetY(), true, 0, false, 0, 5000);
UO.Print(Convert.ToString(ok));Paramètres et déroulement de l’exécution :
- Color=0x0044 sélectionne uniquement ce hue et Radius=0 exclut uniquement la cellule occupée par l'élément. ClearBadObjectList supprime les règles de type et de couleur précédentes.
- GetPathArray renvoie les entrées [x,y,z], y compris l'origine. Un tableau vide signifie qu'il n'y a pas de chemin complet compte tenu des contraintes actuelles. Le personnage reste en place.
return RunScenario();
object? RunScenario()
{
UO.ClearBadObjectList();
UO.SetBadObject(0x398C, 0x0044, 0);
var path = UO.GetPathArray(UO.GetX() + 4, UO.GetY(), true, 0);
UO.Print("Path records: " + Convert.ToString(ArrayLength(path)));
return null;
}
int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;Paramètres et déroulement de l’exécution :
- ObjType=-1 et Color=-1 sont tous deux des caractères génériques. Radius=0 exclut les cellules de tous les objets du monde chargés, mais pas NPC ni le contenu des sacs.
- Le nettoyage s’applique aux demandes futures. Le chemin déjà reçu est enregistré ; il s'agit d'un tableau de coordonnées, pas d'un itinéraire actif.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
UO.SetBadObject(-1, -1, 0);
var path = UO.GetPathArray(UO.GetX() + 2, UO.GetY(), true, 0);
UO.ClearBadObjectList();
UO.Print(Convert.ToString(ArrayLength(path)));
return null;
}
int ArrayLength(object? value) => value is System.Array array ? array.Length : 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: objType (Any), color (Any), radius (Any)
Résultat: void / Unit.
Pendant un appel:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.ResolveType:ResolveType(arguments[0]). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(1).
Code interne de l’implémentation ; ce n’est pas un script autonome.
case "setbadobject":
{
int type = ResolveType(arguments[0]), hue = Arg(1), radius = Arg(2);
if (type < -1 || type > ushort.MaxValue || hue < -1 || hue > ushort.MaxValue || radius < 0 || radius > byte.MaxValue)
throw new NativeSubrutineException("UO.SetBadObject requires type/color 0..65535 (or -1) and radius 0..255.");
state.BadObjects.Add(type + "," + hue + "," + radius);
return InjectionValue.Unit;
}