Repository navigation
KO UO Topic containers
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
홈 · C# · IDE · UO API · A–Z · 예 · 언어
내용을 읽고 대상 컨테이너를 열고 선택합니다. 닫혀 있거나 아직 로드되지 않은 컨테이너는 클라이언트에게 전체 항목 목록을 제공하지 않습니다.
| 주제 | 명령 및 설명 |
|---|---|
| Backpack | UO.Backpack |
| Bank | UO.ObjAtLayerEx · UO.OpenContainer |
| OpenContainer | UO.OpenContainer |
| LastContainer | UO.LastContainer |
| ContainerOf | UO.ContainerOf · UO.GetParent |
| IsContainer | UO.IsContainer |
| 중첩된 컨테이너 | UO.GetContent · UO.FindTypeEx · UO.FindTypesArrayEx |
| Receiving Container | UO.SetReceivingContainer · UO.UnsetReceivingContainer |
| Catch Bag | UO.SetCatchBag · UO.UnsetCatchBag |
| Container Transfers | UO.MoveItem · UO.MoveItems · UO.MassMove · UO.EmptyContainer |
UO.ContainerOf · UO.GetParent · UO.ContainerOff
UO.SetReceivingContainer · UO.UnsetReceivingContainer
UO.SetCatchBag · UO.UnsetCatchBag
각 명령 카드에는 직접 코드, 함수 및 클래스 등 여러 가지 독립적인 시나리오가 있습니다. 다음은 선택된 짧은 시나리오입니다. 제한사항과 전체 분석이 카드에 포함되어 있습니다.
UO.OpenContainer("lasttarget");UO.Print("Select a chest or corpse");
var sent = UO.EmptyContainer(350);
if (Truth(sent == 0))
{
UO.Print("Cancelled, empty, unavailable, or a transfer failed");
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.Backpack();현재 캐릭터가 장착한 배낭의 ID를 반환합니다.
매개변수가 없습니다.
int - serial/ID, graphic/type, 레이어, 항목 수 또는 bool가 아님. 0—현재 개체가 없습니다. 모든 32 비트 serial가 저장됩니다. != 0를 확인하세요. == true 또는 > 0가 아닙니다. 저장된 결과는 자체적으로 업데이트되지 않습니다. 현재 플레이어의 Backpack 레이어에서 삭제되지 않은 항목을 검색합니다. 플레이어 없음/파괴됨, 배낭이나 가방 제거 없음 - 0. 내용이 아닌 컨테이너를 반환합니다. 새 가방을 만들지 않습니다.
- 매개변수가 없습니다. 게임 스트림에서 Invoke를 통해 로컬 데이터를 읽습니다. 스크립트를 취소하면 해당 스레드에 대한 대기가 중단됩니다. 패키지를 보내지 않고, 컨테이너/대상을 열지 않으며, 아이템을 전송하지 않습니다.
- 괄호 없이 내장된 self/backpack는 스크립트 변수로 재정의되지 않는 한 다시 읽혀집니다. 문자열 이름은 수신 명령에 의해 처리됩니다. 운반 대상에서 "self"는 배낭을 의미하고, UO.Self()는 캐릭터의 serial를 반환합니다. ID 컨테이너의 경우 UO.Backpack()를 명시적으로 사용하세요.
- World.Clear는 플레이어를 제거합니다. 후속 판독 결과는 0입니다. 세계에 입장하거나 장착한 가방을 바꾸면 ID가 바뀔 수 있습니다. 개별 읽기는 원자적이지 않습니다. 0이 아닌 ID는 연결, 서버 확인 또는 콘텐츠 로딩을 증명하지 않습니다.
각 예제는 별도의 파일 .csx로 저장하고 IDE에서 실행할 수 있습니다. UO 개체와 대기 기능은 현재 게임 세션의 호스트를 제공합니다. 데모 serial 이름, 좌표, 주소를 자신의 것으로 바꾸세요.
이 코드를 별도의 .csx 파일로 실행하세요. 인수는 호출에 직접 표시됩니다. 예제의 이름, serial, 주소를 자신의 값으로 바꾸세요.
한 번의 호출 결과를 저널에 표시합니다. 숫자를 bool로 변환하지 않으며, 배열이면 요소 수를 표시합니다.
var result = UO.Backpack();
UO.Print("Backpack: " + Convert.ToString(result));매개변수와 실행 흐름:
- id는 한 번의 호출 결과를 저장합니다. 로그용 HEX 형식 serial. 이 예에서는 아무 것도 선택하거나 사용하지 않습니다.
var id = UO.Backpack();
UO.Print("ID: " + Hex(id));
string Hex(object? value) => Convert.ToInt64(value).ToString("X");매개변수와 실행 흐름:
- 이전/이후는 250 ms 간격으로 읽혀집니다. UO.Wait는 예시용으로만 추가되었습니다. 평등은 동일한 최종 ID을 의미합니다. 중간 변경사항이 누락될 수 있습니다.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var before = UO.Backpack();
await Delay(250);
var after = UO.Backpack();
if (Truth(before != after))
{
UO.Print("ID changed: " + Hex(after));
}
return null;
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
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;매개변수와 실행 흐름:
- 후보자 - 저장됨 ID LastTarget. IsOwnSerial(후보자)는 하나의 serial를 취하고 bool를 반환합니다. 현재 0이 아닌 자체 ID에 대해 true, 그렇지 않으면 false입니다. 함수 정의가 전체적으로 제공됩니다. 목표는 변하지 않습니다.
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 candidate = UO.LastTarget();
if (Truth(Truth(IsOwnSerial(candidate)) == true))
{
UO.Print("Own object selected");
}
else
{
UO.Print("Different object or no own object");
}
return null;
}
dynamic IsOwnSerial(dynamic candidate)
{
var current = UO.Backpack();
return Truth(current != 0) && Truth(current == candidate);
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}C#은 대소문자를 구분합니다. 정확한 UO 이름을 사용하세요. 숫자 플래그는 0과 비교하고 반환 형식이 bool일 때만 bool을 사용하세요.
매개변수: 매개변수가 없습니다.
결과: int / Integer.
호출 시:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Backpack:bridge.Backpack.
내부 구현 코드이며 독립 스크립트로 실행할 수 없습니다.
case "backpack": return new InjectionValue(bridge.Backpack);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
string UO.ContainerOf(object? name);항목의 직계 상위 항목을 읽습니다.
-
name— 특정 객체의 일련번호/ID: int, 10진수/16진수 문자열 또는 별칭 설정 self, backpack, lasttarget, lastobject 또는 이름 AddObject. 이것은 graphic/type가 아닙니다.
"0x40001234" 형식의 string - 컨테이너/캐릭터 소유자의 serial. 지상에 있는 아이템의 경우 "0x00000000" 또는 "0xFFFFFFFF"입니다. 알 수 없는 이름/개체 또는 모바일의 경우 - "0x00000000". 컨테이너의 graphic도 아니고, 아이템 자체의 ID도 아니고, 중첩된 가방의 루트 소유자도 아닙니다.
- 재귀 순회 및 서버 호출 없이 로컬 항목의 컨테이너 필드를 읽습니다. null 결과를 해석하기 전에 Exists를 확인하세요. Ground는 두 가지 유효한 표현을 사용합니다.
각 예제는 별도의 파일 .csx로 저장하고 IDE에서 실행할 수 있습니다. UO 개체와 대기 기능은 현재 게임 세션의 호스트를 제공합니다. 데모 serial 이름, 좌표, 주소를 자신의 것으로 바꾸세요.
이 코드를 별도의 .csx 파일로 실행하세요. 인수는 호출에 직접 표시됩니다. 예제의 이름, serial, 주소를 자신의 값으로 바꾸세요.
한 번의 호출 결과를 저널에 표시합니다. 숫자를 bool로 변환하지 않으며, 배열이면 요소 수를 표시합니다.
var result = UO.ContainerOf("backpack");
UO.Print("ContainerOf: " + Convert.ToString(result));매개변수와 실행 흐름:
- 항목은 발견된 스택의 serial입니다. type=0x0EED는 FindType로만 전송됩니다.
- parent는 배낭을 포함하는 캐릭터가 아니라 실제 배낭을 나타냅니다.
var item = UO.FindType(0x0EED, -1, "backpack");
if (Truth(item != ""))
{
var parent = UO.ContainerOf(item);
UO.Print(Convert.ToString(parent));
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;매개변수와 실행 흐름:
- 논쟁은 배낭 자체입니다.
- 장착된 배낭의 부모는 캐릭터의 serial가 됩니다.
return RunScenario();
object? RunScenario()
{
var bag = UO.GetSerial("backpack");
if (Truth(UO.Exists(bag)))
{
UO.Print(Convert.ToString(UO.ContainerOf(bag)));
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;매개변수와 실행 흐름:
- GetContent("ground")는 ID 컨테이너 밖의 아이템을 제공합니다.
- 토지에 대한 두 표현 모두 유효합니다. Exists가 없는 하나의 null 부모만으로는 객체의 위치를 추론하기에 충분하지 않습니다.
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.GetContent("ground");
if (Truth(ArrayLength(items) > 0))
{
var item = items[0];
if (Truth(UO.Exists(item)))
{
UO.Print(Convert.ToString(UO.ContainerOf(item)));
}
}
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#은 대소문자를 구분합니다. 정확한 UO 이름을 사용하세요. 숫자 플래그는 0과 비교하고 반환 형식이 bool일 때만 bool을 사용하세요.
매개변수: name (Any)
결과: string / String.
호출 시:
-
InjectionScript.Runtime.InjectionApiUO.ContainerOf. -
InjectionScript.Runtime.InjectionApiUO.TryGetObject:TryGetObject(name, out int id). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.ContainerOf:bridge.ContainerOf(id).
내부 구현 코드이며 독립 스크립트로 실행할 수 없습니다.
public string ContainerOf(InjectionValue name)
{
if (TryGetObject(name, out int id))
{
var containerId = bridge.ContainerOf(id);
if (containerId < 0)
return "0xFFFFFFFF";
return $"0x{containerId:X8}";
}
return "0x00000000";
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.ContainerOff();지정된 수신 런타임 컨테이너를 재설정합니다.
매개변수가 없습니다.
void - 반환 값이 없습니다.
- UnsetReceivingContainer를 호출하고 State.ReceivingContainer=0를 씁니다. 명시적인 할당이 없는 다음 Grab 작업에서는 배낭이 있는 경우 배낭을 사용합니다. 항목이 이동하지 않으며 컨테이너 창이 닫히지 않습니다.
각 예제는 별도의 파일 .csx로 저장하고 IDE에서 실행할 수 있습니다. UO 개체와 대기 기능은 현재 게임 세션의 호스트를 제공합니다. 데모 serial 이름, 좌표, 주소를 자신의 것으로 바꾸세요.
이 코드를 별도의 .csx 파일로 실행하세요. 인수는 호출에 직접 표시됩니다. 예제의 이름, serial, 주소를 자신의 값으로 바꾸세요.
명령은 독립된 문입니다. 앞의 메시지는 호출 시작을 나타내며 서버 동작의 완료를 확인하지 않습니다.
UO.Print("Calling UO.ContainerOff");
UO.ContainerOff();매개변수와 실행 흐름:
- 상태 ReceivingContainer는 0가 됩니다.
UO.ContainerOff();매개변수와 실행 흐름:
- 할당이 지워졌습니다. 해당 작업은 콘텐츠를 이동하지 않습니다.
return RunScenario();
object? RunScenario()
{
UO.SetReceivingContainer("backpack");
UO.ContainerOff();
return null;
}매개변수와 실행 흐름:
- null 상태에서는 반복적인 재설정이 가능합니다.
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.ContainerOff();
UO.ContainerOff();
return null;
}
}C#은 대소문자를 구분합니다. 정확한 UO 이름을 사용하세요. 숫자 플래그는 0과 비교하고 반환 형식이 bool일 때만 bool을 사용하세요.
매개변수: 매개변수가 없습니다.
결과: void / Unit.
호출 시:
-
InjectionScript.Runtime.InjectionApiUO.UnsetReceivingContainer. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.UnsetReceivingContainer:bridge.UnsetReceivingContainer().
내부 구현 코드이며 독립 스크립트로 실행할 수 없습니다.
public void UnsetReceivingContainer() => bridge.UnsetReceivingContainer();Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.GetContent(object? id);컨테이너나 지상에 적재된 물품의 내용물을 직접 읽어냅니다.
-
id— 특정 개체의 일련번호/ID: int, 10진수/16진수 문자열 또는 별칭 설정 self, backpack, lasttarget, lastobject 또는 이름 AddObject. 이것은 graphic/type이 아닙니다. my/backpack 라인은 배낭을 선택합니다. 명시적으로 0, "0" 또는 "ground"로만 대지를 선택합니다. 알 수 없는 별칭, 누락된 배낭, 음수 ID 또는 부적절한 값 유형으로 인해 빈 배열이 생성됩니다.
각 직계 하위 항목의 배열 - serial. ground/0의 경우 - 컨테이너 외부 품목; 일반 접지 표시 0 및 0xFFFFFFFF가 모두 고려됩니다. 항목이 없으면 빈 배열이 반환됩니다. 목록에는 type가 아닌 ID가 포함되어 있으며 레이어도 없습니다.
- 클라이언트가 이미 다운로드한 데이터를 읽습니다. 이 명령은 전체 서버에서 컨테이너를 열거나 항목을 이동하거나 개체를 다운로드하지 않습니다.
- 배열 - 0부터 시작하는 인덱스가 있는 배열입니다. var에 저장하고, ArrayLength를 확인한 후 접속하세요. 스냅샷을 찍은 후 요소가 세계에서 사라질 수 있습니다. 조치를 취하기 전에 Exists(serial)를 확인하세요.
- 중첩된 백의 재귀 순회, 거리 정렬, Ignore 또는 FindDistance/FindVertical 필터가 없습니다. 일반 FindType 스냅샷은 변경되지 않습니다.
- 열지 않은 상자는 비어 있는 것처럼 보일 수 있습니다. 수신된 데이터가 없다고 해서 서버가 비어 있다는 의미는 아닙니다. 먼저 열린 용기를 사용하고 내용물이 나올 때까지 기다립니다.
각 예제는 별도의 파일 .csx로 저장하고 IDE에서 실행할 수 있습니다. UO 개체와 대기 기능은 현재 게임 세션의 호스트를 제공합니다. 데모 serial 이름, 좌표, 주소를 자신의 것으로 바꾸세요.
이 코드를 별도의 .csx 파일로 실행하세요. 인수는 호출에 직접 표시됩니다. 예제의 이름, serial, 주소를 자신의 값으로 바꾸세요.
한 번의 호출 결과를 저널에 표시합니다. 숫자를 bool로 변환하지 않으며, 배열이면 요소 수를 표시합니다.
object? result = UO.GetContent("backpack");
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));매개변수와 실행 흐름:
- ID="backpack" - 현재 캐릭터의 배낭, 직접 중첩된 항목만 해당됩니다.
- 길이 - 레코드 수/ID. 이것은 스택의 양이 아닙니다. 빈 목록은 0을 제공합니다.
var items = UO.GetContent("backpack");
UO.Print(Convert.ToString(ArrayLength(items)));
int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;매개변수와 실행 흐름:
- ID="backpack" - 현재 캐릭터의 배낭, 직접 중첩된 항목만 해당됩니다.
- items[i] — 숫자 serial. 16진수는 출력에만 사용됩니다. 루프는 마지막 인덱스에 액세스하지 않습니다.
return RunScenario();
object? RunScenario()
{
var items = UO.GetContent("backpack");
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;매개변수와 실행 흐름:
- ID="backpack" - 현재 캐릭터의 배낭, 직접 중첩된 항목만 해당됩니다.
- 두 가지 다른 사항, 즉 스냅샷의 기록과 현재 개체의 존재 여부를 확인합니다. 명시적인 정렬이 없는 순서는 친밀함을 의미하지 않습니다.
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.GetContent("backpack");
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;
}매개변수와 실행 흐름:
- ID="ground"는 명시적으로 지면을 선택합니다. NPC/players는 이 목록에 포함되지 않습니다.
- 여기서 검색 반경은 FindDistance로 제한되지 않습니다. 필터 type 및 거리의 경우 GetWorldItems(type,color,distance)가 있습니다.
var groundItems = UO.GetContent("ground");
UO.Print(Convert.ToString(ArrayLength(groundItems)));
int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;C#은 대소문자를 구분합니다. 정확한 UO 이름을 사용하세요. 숫자 플래그는 0과 비교하고 반환 형식이 bool일 때만 bool을 사용하세요.
매개변수: id (Any)
결과: dynamic / Any.
호출 시:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Text:Text(0). -
InjectionScript.Runtime.NumberConversions.TryStr2Int:NumberConversions.TryStr2Int(text, out int literal). -
InjectionScript.Runtime.InjectionApiUO.GetObject:GetObject(text). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetEquipment:bridge.GetEquipment(container). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetContent:bridge.GetContent(container). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Backpack:bridge.Backpack.
내부 구현 코드이며 독립 스크립트로 실행할 수 없습니다.
case "getcontent":
case "getequipment":
{
InjectionValue selection = arguments[0];
bool ground = false, explicitZero;
int container;
if (selection.Kind == InjectionValueKind.String)
{
string text = Text(0).Trim();
ground = text.Equals("ground", StringComparison.OrdinalIgnoreCase);
explicitZero = NumberConversions.TryStr2Int(text, out int literal) && literal == 0;
container = ground ? 0 : text.Equals("my", StringComparison.OrdinalIgnoreCase)
? bridge.Backpack : GetObject(text);
}
else
{
if (selection.Kind != InjectionValueKind.Integer && selection.Kind != InjectionValueKind.Decimal)
return new InjectionValue(Array.Empty<InjectionValue>());
container = Arg(0);
explicitZero = selection.Kind == InjectionValueKind.Integer ? selection.Integer == 0 : selection.Decimal == 0d;
}
// Only an explicit ground/zero selector may query world items.
if (container < 0 || container == 0 && !ground && !explicitZero)
return new InjectionValue(Array.Empty<InjectionValue>());
bool equipment = name.Equals("GetEquipment", StringComparison.OrdinalIgnoreCase);
int[] items = equipment
? container == 0 ? Array.Empty<int>() : bridge.GetEquipment(container)
: bridge.GetContent(container);
return new InjectionValue(items.Select(serial => new InjectionValue(serial)).ToArray());
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.GetParent(object? objID);항목의 직계 상위 항목을 읽습니다.
-
objID— 특정 객체의 일련번호/ID: int, 10진수/16진수 문자열 또는 별칭 설정 self, backpack, lasttarget, lastobject 또는 이름 AddObject. 이것은 graphic/type가 아닙니다.
int - serial 컨테이너/캐릭터 소유자. 지상에 있는 아이템의 경우 클라이언트의 입력에 따라 0 또는 -1(비트 0xFFFFFFFF)입니다. 알 수 없는 물체 또는 모바일의 경우 - 0. 컨테이너의 graphic도 아니고, 아이템 자체의 ID도 아니고, 중첩된 가방의 루트 소유자도 아닙니다.
- 재귀 순회 및 서버 호출 없이 로컬 항목의 컨테이너 필드를 읽습니다. null 결과를 해석하기 전에 Exists를 확인하세요. Ground는 두 가지 유효한 표현을 사용합니다.
각 예제는 별도의 파일 .csx로 저장하고 IDE에서 실행할 수 있습니다. UO 개체와 대기 기능은 현재 게임 세션의 호스트를 제공합니다. 데모 serial 이름, 좌표, 주소를 자신의 것으로 바꾸세요.
이 코드를 별도의 .csx 파일로 실행하세요. 인수는 호출에 직접 표시됩니다. 예제의 이름, serial, 주소를 자신의 값으로 바꾸세요.
한 번의 호출 결과를 저널에 표시합니다. 숫자를 bool로 변환하지 않으며, 배열이면 요소 수를 표시합니다.
object? result = UO.GetParent("backpack");
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));매개변수와 실행 흐름:
- 항목은 발견된 스택의 serial입니다. type=0x0EED는 FindType로만 전송됩니다.
- parent는 배낭을 포함하는 캐릭터가 아니라 실제 배낭을 나타냅니다.
var item = UO.FindType(0x0EED, -1, "backpack");
if (Truth(item != ""))
{
var parent = UO.GetParent(item);
UO.Print(Convert.ToString(parent));
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;매개변수와 실행 흐름:
- 논쟁은 배낭 자체입니다.
- 장착된 배낭의 부모는 캐릭터의 serial가 됩니다.
return RunScenario();
object? RunScenario()
{
var bag = UO.GetSerial("backpack");
if (Truth(UO.Exists(bag)))
{
UO.Print(Convert.ToString(UO.GetParent(bag)));
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;매개변수와 실행 흐름:
- GetContent("ground")는 ID 컨테이너 밖의 아이템을 제공합니다.
- 토지에 대한 두 표현 모두 유효합니다. Exists가 없는 하나의 null 부모만으로는 객체의 위치를 추론하기에 충분하지 않습니다.
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.GetContent("ground");
if (Truth(ArrayLength(items) > 0))
{
var item = items[0];
if (Truth(UO.Exists(item)))
{
UO.Print(Convert.ToString(UO.GetParent(item)));
}
}
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#은 대소문자를 구분합니다. 정확한 UO 이름을 사용하세요. 숫자 플래그는 0과 비교하고 반환 형식이 bool일 때만 bool을 사용하세요.
매개변수: objID (Any)
결과: dynamic / Any.
호출 시:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.ContainerOf:bridge.ContainerOf(Arg(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
내부 구현 코드이며 독립 스크립트로 실행할 수 없습니다.
case "getparent": return new InjectionValue(bridge.ContainerOf(Arg(0)));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.Ground();검색 컨테이너 매개변수 또는 전송 대상에 대한 특수 토지 지정자를 반환합니다.
매개변수가 없습니다.
int, 항상 0. 이 0은 false, 검색 오류, ID 항목, graphic, 지도 번호 또는 좌표가 아닌 유효한 지상 지정자입니다. Ground()를 성공의 표시로 확인하지 마세요. 이 값을 전달한 검색 또는 전송 결과를 확인하세요.
- 매개변수가 없습니다. Ground() 호출 자체는 아무것도 검색하지 않고, 아무것도 이동하지 않으며, 대상을 열지 않으며, 패킷을 보내지 않으며, 이전 검색 결과를 변경하지 않습니다. 게임에 들어가기 전에는 0도 반환합니다.
- FindType, FindList, Count, FindTypeEx, FindTypesArrayEx, CountEx 또는 MoveItem 명령을 컨테이너/대상 위치로 보냅니다. 검색에서는 로드된 월드 개체를 볼 수 있지만 멀리 있는 셀은 로드하지 않습니다. 지상으로 전송하는 경우 X/Y/Z - 컨테이너 창 픽셀이 아닌 세계 좌표입니다.
- FindType(type, color)는 여전히 인벤토리에 표시됩니다. 두 번째 매개변수는 color입니다. 토지의 경우 FindType(type, color, UO.Ground())라고 적습니다. 기존 컴팩트 FindType/MoveItem에서 숫자 -1는 재고를 나타냅니다. 호환되는 FindTypeEx/FindTypesArrayEx/CountEx - 1도 접지로 허용됩니다. UO.Ground() 또는 명시적인 이름 ground을 사용하고, 확인하지 않고 다른 명령 간에 숫자 지정을 전송하지 마십시오.
- 위의 명령과 예제 간의 표기법 차이는 이 클라이언트를 설명합니다.
각 예제는 별도의 파일 .csx로 저장하고 IDE에서 실행할 수 있습니다. UO 개체와 대기 기능은 현재 게임 세션의 호스트를 제공합니다. 데모 serial 이름, 좌표, 주소를 자신의 것으로 바꾸세요.
이 코드를 별도의 .csx 파일로 실행하세요. 인수는 호출에 직접 표시됩니다. 예제의 이름, serial, 주소를 자신의 값으로 바꾸세요.
한 번의 호출 결과를 저널에 표시합니다. 숫자를 bool로 변환하지 않으며, 배열이면 요소 수를 표시합니다.
var result = UO.Ground();
UO.Print("Ground: " + Convert.ToString(result));매개변수와 실행 흐름:
- 목적지는 int 0를 수신하고, Print는 이 숫자를 출력합니다. 호출 자체는 아무것도 버리지 않습니다.
var destination = UO.Ground();
UO.Print(Convert.ToString(destination));매개변수와 실행 흐름:
- 0x0EED - 골드 그래픽; 두 번째 -1는 hue를 의미합니다. Ground()는 전 세계에서 검색을 설정하고, false는 컨테이너 재귀를 비활성화합니다. FindTypeEx는 결과가 없으면 serial 또는 0 중 하나를 반환합니다. != 0는 serial를 확인합니다. 현재 FindDistance/FindVertical 및 목록 Ignore이 사용됩니다.
return RunScenario();
object? RunScenario()
{
var id = UO.FindTypeEx(0x0EED, -1, UO.Ground(), false);
if (Truth(id != 0))
{
UO.Print(Hex(id));
}
else
{
UO.Print("0");
}
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;매개변수와 실행 흐름:
- FindGroundTypes(firstType, secondType, 반경, 높이)는 반경=5 및 높이=10로 금 0x0EED 및 흑진주 0x0F7A를 검색합니다. 변수 유형[1]을 선언하면 두 개의 셀이 생성됩니다. 색상[0] 및 컨테이너[0] - 각각 하나씩. 전체 스택은 하나의 결과로 계산됩니다. 유형/색상은 대체 가능하며 교차하는 컨테이너는 중복되지 않습니다 ID. 이 함수는 저장된 배열 serial를 반환합니다. 마지막으로 두 한계를 모두 복원합니다. 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 ids = FindGroundTypes(0x0EED, 0x0F7A, 5, 10);
foreach (var id in ids)
{
UO.Print(Hex(id));
}
return null;
}
dynamic FindGroundTypes(dynamic firstType, dynamic secondType, dynamic radius, dynamic height)
{
var oldDistance = UO.FindDistance();
var oldVertical = UO.FindVertical();
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] = UO.Ground();
try
{
UO.FindDistance(radius);
UO.FindVertical(height);
UO.FindTypesArrayEx(types, colors, containers, false);
return UO.GetFoundItems();
}
finally
{
UO.FindDistance(oldDistance);
UO.FindVertical(oldVertical);
}
}
string Hex(object? value) => Convert.ToInt64(value).ToString("X");
}매개변수와 실행 흐름:
- 0x40001001를 사용 가능한 항목의 serial로 바꾸세요. IsObjectExists 먼저 로드된 객체를 확인합니다. MoveItem(아이템, 금액, 목적지, X, Y, Z): 금액=0 - 전체 스택, Ground() - 토지, GetX/GetY/GetZ - 캐릭터의 월드 셀. 결과는 클라이언트가 전송 요청을 수락한 경우 1이고, 그렇지 않은 경우 0입니다. 이는 Ground()이 아닌 MoveItem의 결과이며, 서버의 전송 확인이 아닙니다.
var item = 0x40001001;
if (Truth(UO.IsObjectExists(item)))
{
var result = UO.MoveItem(item, 0, UO.Ground(), UO.GetX("self"), UO.GetY("self"), 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;C#은 대소문자를 구분합니다. 정확한 UO 이름을 사용하세요. 숫자 플래그는 0과 비교하고 반환 형식이 bool일 때만 bool을 사용하세요.
매개변수: 매개변수가 없습니다.
결과: int / Integer.
호출 시:
내부 구현 코드이며 독립 스크립트로 실행할 수 없습니다.
case "ground": return new InjectionValue(0);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.IsContainer(object? objID);로드된 항목의 그래픽 유형 타일데이터에서 컨테이너 플래그를 확인합니다.
-
objID— 특정 개체의 필수 serial/ID: int, 16진수 문자열 또는 별칭 self, backpack, lasttarget, lastobject, lastcontainer, laststatus, finditem, lastcorpse 또는 이름 AddObject. 이것은 graphic/type이 아닙니다. 지정되지 않은 이름은 0로 해석됩니다. 이 명령은 새 대상을 열지 않습니다.
int 1 - 알려진 항목의 graphic 데이터에 컨테이너 속성이 있습니다. int 0 - 해당 기호가 없으며 개체는 mobile이며 알 수 없거나 삭제되었습니다. 이는 용기에 담긴 물건의 개수도 아니고, 열린 검프의 표시도 아니며, 내용물에 대한 접근 확인도 아닙니다.
명령의 결과는 숫자 플래그입니다. 1는 충족된 조건을 의미하고, 0는 충족되지 않은 조건을 의미합니다. var result = command(...) 후에 (결과 != 0) 또는 (결과 == 0)인지 확인하세요. 한 번의 호출 결과를 저장합니다. 반복된 호출을 통해 해당 작업을 다시 수행하거나 이미 변경된 상태를 읽을 수 있습니다.
- 로컬 클라이언트 모델을 읽습니다. 서버에 대한 요청도 없고 기다리거나 이동할 필요도 없습니다.
- 결과는 읽는 순간을 가리킨다. UO.Wait 또는 다른 작업 후에 개체와 해당 플래그가 변경될 수 있습니다.
각 예제는 별도의 파일 .csx로 저장하고 IDE에서 실행할 수 있습니다. UO 개체와 대기 기능은 현재 게임 세션의 호스트를 제공합니다. 데모 serial 이름, 좌표, 주소를 자신의 것으로 바꾸세요.
이 코드를 별도의 .csx 파일로 실행하세요. 인수는 호출에 직접 표시됩니다. 예제의 이름, serial, 주소를 자신의 값으로 바꾸세요.
한 번의 호출 결과를 저널에 표시합니다. 숫자를 bool로 변환하지 않으며, 배열이면 요소 수를 표시합니다.
var result = UO.IsContainer(UO.GetSerial("lastobject"));
UO.Print("IsContainer: " + Convert.ToString(result));매개변수와 실행 흐름:
- 항목은 개체 type가 아니라 개체 lastobject의 serial입니다.
- 이 명령은 컨테이너 속성만 읽고 열지는 않습니다.
var item = UO.GetSerial("lastobject");
if (Truth(UO.IsContainer(item)))
{
UO.Print("Known container: " + item);
}
else
{
UO.Print("Not a known container");
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;매개변수와 실행 흐름:
- 가방은 사전에 선택해야 하며, 내용물을 고객에게 알려야 합니다.
- FindType는 type 골드, hue 및 serial 컨테이너를 받습니다. 빈 결과는 서버 컨테이너가 비어 있음을 증명하지 않습니다.
return RunScenario();
object? RunScenario()
{
var bag = UO.GetSerial("lasttarget");
if (Truth(UO.IsContainer(bag)))
{
var found = UO.FindType(0x0EED, -1, bag);
UO.Print("Known gold item: " + 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;매개변수와 실행 흐름:
- Exists과 IsContainer는 동일한 serial에 대한 다른 질문에 답합니다.
- 타일 데이터가 적합하지 않거나 아직 사용할 수 없는 경우 분류가 예상과 다를 수 있습니다. 가슴 권리를 확인하는 데 사용하지 마십시오.
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");
var exists = UO.Exists(bag);
var container = UO.IsContainer(bag);
UO.Print("Loaded: " + Convert.ToString(exists));
UO.Print("Container flag: " + Convert.ToString(container));
return null;
}
}C#은 대소문자를 구분합니다. 정확한 UO 이름을 사용하세요. 숫자 플래그는 0과 비교하고 반환 형식이 bool일 때만 bool을 사용하세요.
매개변수: objID (Any)
결과: int / Integer.
호출 시:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.IsContainer:bridge.IsContainer(Arg(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
내부 구현 코드이며 독립 스크립트로 실행할 수 없습니다.
case "iscontainer": return new InjectionValue(bridge.IsContainer(Arg(0)));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.LastContainer();마지막 컨테이너의 serial를 읽습니다.
매개변수가 없습니다.
int — 저장됨 serial; 0은 serial이 설치되지 않았음을 의미합니다. bool도 아니고 graphic/type도 아닙니다. 0이 아닌 ID는 세상에 더 이상 존재하지 않을 수 있습니다.
- 필드 소스: _world.LastContainer. 이 명령은 개체를 선택하거나 사용하거나 공격하지 않습니다.
- 현재 로컬 상태를 읽습니다. 패키지, 대상 또는 자동 업데이트가 없습니다. 개별 읽기에서는 다른 상태가 나타날 수 있습니다.
각 예제는 별도의 파일 .csx로 저장하고 IDE에서 실행할 수 있습니다. UO 개체와 대기 기능은 현재 게임 세션의 호스트를 제공합니다. 데모 serial 이름, 좌표, 주소를 자신의 것으로 바꾸세요.
이 코드를 별도의 .csx 파일로 실행하세요. 인수는 호출에 직접 표시됩니다. 예제의 이름, serial, 주소를 자신의 값으로 바꾸세요.
한 번의 호출 결과를 저널에 표시합니다. 숫자를 bool로 변환하지 않으며, 배열이면 요소 수를 표시합니다.
object? result = UO.LastContainer();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));매개변수와 실행 흐름:
- 마지막 컨테이너의 serial를 읽습니다.
var id = UO.LastContainer();
UO.Print(Hex(id));
string Hex(object? value) => Convert.ToInt64(value).ToString("X");매개변수와 실행 흐름:
- 필드 소스: _world.LastContainer. 이 명령은 개체를 선택하거나 사용하거나 공격하지 않습니다.
return RunScenario();
object? RunScenario()
{
var id = UO.LastContainer();
if (Truth(id != 0) && Truth(UO.Exists(id)))
{
UO.Print(UO.GetName(id));
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;매개변수와 실행 흐름:
- 현재 로컬 상태를 읽습니다. 패키지, 대상 또는 자동 업데이트가 없습니다. 개별 읽기에서는 다른 상태가 나타날 수 있습니다.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
var before = UO.LastContainer();
UO.Wait(500);
var after = UO.LastContainer();
UO.Print(before = after);
return null;
}
}C#은 대소문자를 구분합니다. 정확한 UO 이름을 사용하세요. 숫자 플래그는 0과 비교하고 반환 형식이 bool일 때만 bool을 사용하세요.
매개변수: 매개변수가 없습니다.
결과: dynamic / Any.
호출 시:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetLastContainer:bridge.GetLastContainer().
내부 구현 코드이며 독립 스크립트로 실행할 수 없습니다.
case "lastcontainer": return new InjectionValue(bridge.GetLastContainer());Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.OpenContainer(object? id);
void UO.OpenContainer(object? id, object? timeout);컨테이너 열기를 요청합니다.
-
id— 직렬/ID 개체: int, 숫자/16진수 문자열 또는 설정된 별칭(예: "lasttarget"). 이것은 graphic/type가 아닙니다. 조치를 취하기 전에 로드된 개체를 확인하십시오. -
timeout— 선택 사항 int, 밀리초; 기본값은 0입니다. 음수 값은 기대감을 추가하지 않습니다.
void - 값이 없습니다. 별도의 회선으로 전화하세요. 완료는 서버의 작업을 확인하지 않습니다.
- Bridge.OpenContainer는 UseObject(id)를 호출한 다음 시간 초과>0인 경우에만 UO.Wait(timeout)를 호출합니다. 일시 중지는 고정되어 있습니다. 컨테이너의 유무/내용물은 확인되지 않습니다.
- 시간 초과가 없으면 일시 중지가 없습니다. 일시 중지가 끝났다고 해서 콘텐츠가 열렸거나 완전히 로드되었다는 증거로 간주되어서는 안 됩니다.
각 예제는 별도의 파일 .csx로 저장하고 IDE에서 실행할 수 있습니다. UO 개체와 대기 기능은 현재 게임 세션의 호스트를 제공합니다. 데모 serial 이름, 좌표, 주소를 자신의 것으로 바꾸세요.
이 코드를 별도의 .csx 파일로 실행하세요. 인수는 호출에 직접 표시됩니다. 예제의 이름, serial, 주소를 자신의 값으로 바꾸세요.
명령은 독립된 문입니다. 앞의 메시지는 호출 시작을 나타내며 서버 동작의 완료를 확인하지 않습니다.
UO.Print("Calling UO.OpenContainer");
UO.OpenContainer("lasttarget");매개변수와 실행 흐름:
- 컨테이너 열기를 요청합니다.
UO.OpenContainer("lasttarget");매개변수와 실행 흐름:
- Bridge.OpenContainer는 UseObject(id)를 호출한 다음 시간 초과>0인 경우에만 UO.Wait(timeout)를 호출합니다. 일시 중지는 고정되어 있습니다. 컨테이너의 유무/내용물은 확인되지 않습니다.
return RunScenario();
object? RunScenario()
{
if (Truth(UO.Exists("lasttarget")))
{
UO.OpenContainer("lasttarget", 1000);
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;매개변수와 실행 흐름:
- 시간 초과가 없으면 일시 중지가 없습니다. 일시 중지가 끝났다고 해서 콘텐츠가 열렸거나 완전히 로드되었다는 증거로 간주되어서는 안 됩니다.
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
var id = UO.GetSerial("lasttarget");
if (Truth(UO.Exists(id)))
{
UO.OpenContainer(id, 1000);
UO.Print(UO.GetName(id));
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}C#은 대소문자를 구분합니다. 정확한 UO 이름을 사용하세요. 숫자 플래그는 0과 비교하고 반환 형식이 bool일 때만 bool을 사용하세요.
매개변수: id (Any)
결과: void / Unit.
호출 시:
-
InjectionScript.Runtime.InjectionApiUO.OpenContainer. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.OpenContainer:bridge.OpenContainer(GetObject(id), 0). -
InjectionScript.Runtime.InjectionApiUO.GetObject:GetObject(id).
내부 구현 코드이며 독립 스크립트로 실행할 수 없습니다.
public void OpenContainer(InjectionValue id) => bridge.OpenContainer(GetObject(id), 0);매개변수: id (Any), timeout (Any)
결과: void / Unit.
호출 시:
-
InjectionScript.Runtime.InjectionApiUO.OpenContainer. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.OpenContainer:bridge.OpenContainer(GetObject(id), NumberConversions.ToInt(timeout)). -
InjectionScript.Runtime.InjectionApiUO.GetObject:GetObject(id). -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(timeout).
내부 구현 코드이며 독립 스크립트로 실행할 수 없습니다.
public void OpenContainer(InjectionValue id, InjectionValue timeout) => bridge.OpenContainer(GetObject(id), NumberConversions.ToInt(timeout));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.SetCatchBag();
void UO.SetCatchBag(object? container);-
container— 컨테이너의 일련번호, 저장된 이름("backpack" 또는 "my")입니다. 0 할당이 취소됩니다. 인수가 없으면 lastobject가 사용됩니다. 재설정되지 않고 마지막으로 적용된 개체입니다. 이름이 긍정적인 serial로 확인되지 않으면 할당이 제거됩니다. 설치 자체에서는 마이그레이션할 개체의 서버 가용성과 적합성을 확인하지 않습니다.
void: 반환 값이 없습니다. UO.SetCatchBag(...)인 경우 var 결과 = UO.SetCatchBag(...)를 사용하거나 숫자 1를 확인으로 기대할 수 없습니다. 실제 이동은 별도의 명령(예: Grab)에 의해 수행됩니다.
- UO.SetCatchBag() 및 UO.SetReceivingContainer()는 인수 없이 서로 다른 형식 값을 갖습니다. 첫 번째는 lastobject를 취하고 두 번째는 컨테이너를 재설정합니다.
- 명시적 재설정: UO.UnsetCatchBag(), UO.UnsetReceivingContainer() 또는 UO.SetCatchBag(0). 초기화 후 Grab는 별도의 목적 없이 배낭을 사용합니다.
- serial를 설정한다고 해서 서버가 해당 항목을 해당 위치에 배치하는 것을 허용한다는 의미는 아닙니다. 실제 전송 중에 거리, 유무 및 가용성이 확인됩니다.
- 일반 클라이언트 호스트에서 이 상태 데이터는 GetPersistentState 관리자에서 가져오며 동일한 월드/프로필의 스크립트/채팅/매크로에 공통되며 하나의 스크립트에 속하지 않습니다. 다른 프로세스 또는 명백히 별도의 InjectionRuntimeState가 다른 상태를 갖습니다. 프로필을 로드/삭제하면 프로필을 대체할 수 있습니다. 저장된 serial는 여전히 로드된 세계와 비교하여 확인됩니다.
각 예제는 별도의 파일 .csx로 저장하고 IDE에서 실행할 수 있습니다. UO 개체와 대기 기능은 현재 게임 세션의 호스트를 제공합니다. 데모 serial 이름, 좌표, 주소를 자신의 것으로 바꾸세요.
이 코드를 별도의 .csx 파일로 실행하세요. 인수는 호출에 직접 표시됩니다. 예제의 이름, serial, 주소를 자신의 값으로 바꾸세요.
명령은 독립된 문입니다. 앞의 메시지는 호출 시작을 나타내며 서버 동작의 완료를 확인하지 않습니다.
UO.Print("Calling UO.SetCatchBag");
UO.SetCatchBag();매개변수와 실행 흐름:
- 단일 컨테이너 매개변수는 "backpack" 문자열을 수신합니다. 런타임에서는 배낭의 serial에서 이를 허용합니다.
- 호출은 Unit을 반환하기 때문에 var 결과 없이 별도의 줄에 작성됩니다. Print 메시지는 설정을 설명하며 항목 전송을 확인하지 않습니다.
var destination = "backpack";
UO.SetCatchBag(destination);
UO.Print("Receiving container: own backpack");매개변수와 실행 흐름:
- 이 오버로드에는 매개변수가 없습니다. 내부적으로 이름은 lastobject입니다.
- 빈 괄호는 재설정을 의미하지 않습니다. 간단히 두 번 클릭하여 적절한 컨테이너를 미리 선택하세요. 실제 휴대용 가방의 사용 가능 여부는 현재 게임 상태에 따라 다릅니다.
return RunScenario();
object? RunScenario()
{
UO.SetCatchBag();
UO.Print("Destination taken from lastobject");
return null;
}매개변수와 실행 흐름:
- 첫 번째 호출에서 컨테이너=bag에는 16진수 문자열 serial이 포함되어 있습니다. 0x40001234은 예시이므로 원하는 값으로 바꿔야 합니다.
- 두 번째 호출에서는 컨테이너=0가 할당을 취소합니다. 명시적인 컨테이너가 없는 다음 Grab은 배낭을 사용합니다.
- 재설정은 의도한 캐리 블록 뒤에 위치합니다. 설정 및 재설정은 결과를 반환하지 않으며 항목을 자체적으로 이동하지 않습니다.
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 = "0x40001234";
UO.SetCatchBag(bag);
UO.Print("Configured destination: " + bag);
UO.SetCatchBag(0);
UO.Print("Destination reset to the normal backpack fallback");
return null;
}
}C#은 대소문자를 구분합니다. 정확한 UO 이름을 사용하세요. 숫자 플래그는 0과 비교하고 반환 형식이 bool일 때만 bool을 사용하세요.
매개변수: 매개변수가 없습니다.
결과: void / Unit.
호출 시:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
InjectionScript.Runtime.InjectionApiUO.SetReceivingContainer:SetReceivingContainer(arguments.Length > 0 ? arguments[0].ToString() : "lastobject"). -
InjectionScript.Runtime.InjectionValue.ToString:arguments[0].ToString().
내부 구현 코드이며 독립 스크립트로 실행할 수 없습니다.
case "setcatchbag":
SetReceivingContainer(arguments.Length > 0 ? arguments[0].ToString() : "lastobject");
break;매개변수: container (Any)
결과: void / Unit.
호출 시:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
InjectionScript.Runtime.InjectionApiUO.SetReceivingContainer:SetReceivingContainer(arguments.Length > 0 ? arguments[0].ToString() : "lastobject"). -
InjectionScript.Runtime.InjectionValue.ToString:arguments[0].ToString().
내부 구현 코드이며 독립 스크립트로 실행할 수 없습니다.
case "setcatchbag":
SetReceivingContainer(arguments.Length > 0 ? arguments[0].ToString() : "lastobject");
break;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.SetReceivingContainer();
void UO.SetReceivingContainer(object? id);향후 Grab에 대한 수신 컨테이너를 지정합니다.
-
id- 선택사항 serial/별칭. "my"/"backpack" - 현재 배낭. 긍정 ID은 존재 확인 없이 유지됩니다. 0/negative/no 인수는 설정을 지웁니다.
void - 값이 없습니다. 별도의 회선으로 전화하세요. 완료는 서버의 작업을 확인하지 않습니다.
- 특수한 my/backpack를 제외하고 문자열은 GetObject로 확인됩니다. Bridge.SetReceivingContainer는 State.ReceivingContainer를 할당합니다. 이 호출로는 항목이 전송되지 않습니다.
- 클리어 후 Grab는 명시적인 목적 없이 배낭을 사용합니다. 긍정적인 ID 자체만으로는 컨테이너가 로드되었거나 서버에 액세스할 수 있음을 확인하지 않습니다.
- 일반 클라이언트 호스트에서 이 상태 데이터는 GetPersistentState 관리자에서 가져오며 동일한 월드/프로필의 스크립트/채팅/매크로에 공통되며 하나의 스크립트에 속하지 않습니다. 다른 프로세스 또는 명백히 별도의 InjectionRuntimeState가 다른 상태를 갖습니다. 프로필을 로드/삭제하면 프로필을 대체할 수 있습니다. 저장된 serial는 여전히 로드된 세계와 비교하여 확인됩니다.
각 예제는 별도의 파일 .csx로 저장하고 IDE에서 실행할 수 있습니다. UO 개체와 대기 기능은 현재 게임 세션의 호스트를 제공합니다. 데모 serial 이름, 좌표, 주소를 자신의 것으로 바꾸세요.
이 코드를 별도의 .csx 파일로 실행하세요. 인수는 호출에 직접 표시됩니다. 예제의 이름, serial, 주소를 자신의 값으로 바꾸세요.
명령은 독립된 문입니다. 앞의 메시지는 호출 시작을 나타내며 서버 동작의 완료를 확인하지 않습니다.
UO.Print("Calling UO.SetReceivingContainer");
UO.SetReceivingContainer();매개변수와 실행 흐름:
- 향후 Grab에 대한 수신 컨테이너를 지정합니다.
UO.SetReceivingContainer("backpack");매개변수와 실행 흐름:
- 특수한 my/backpack를 제외하고 문자열은 GetObject로 확인됩니다. Bridge.SetReceivingContainer는 State.ReceivingContainer를 할당합니다. 이 호출로는 항목이 전송되지 않습니다.
return RunScenario();
object? RunScenario()
{
UO.SetReceivingContainer();
return null;
}매개변수와 실행 흐름:
- 클리어 후 Grab는 명시적인 목적 없이 배낭을 사용합니다. 긍정적인 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("lastcontainer");
if (Truth(UO.IsContainer(bag)))
{
UO.SetReceivingContainer(bag);
}
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#은 대소문자를 구분합니다. 정확한 UO 이름을 사용하세요. 숫자 플래그는 0과 비교하고 반환 형식이 bool일 때만 bool을 사용하세요.
매개변수: 매개변수가 없습니다.
결과: void / Unit.
호출 시:
-
InjectionScript.Runtime.InjectionApiUO.SetReceivingContainer. -
InjectionScript.Runtime.InjectionApiUO.UnsetReceivingContainer:UnsetReceivingContainer().
내부 구현 코드이며 독립 스크립트로 실행할 수 없습니다.
public void SetReceivingContainer() => UnsetReceivingContainer();매개변수: id (Integer/String)
결과: void / Unit.
호출 시:
-
InjectionScript.Runtime.InjectionApiUO.SetReceivingContainer. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.UnsetReceivingContainer:bridge.UnsetReceivingContainer(). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SetReceivingContainer:bridge.SetReceivingContainer(id).
내부 구현 코드이며 독립 스크립트로 실행할 수 없습니다.
public void SetReceivingContainer(int id)
{
if (id <= 0)
bridge.UnsetReceivingContainer();
else
bridge.SetReceivingContainer(id);
}매개변수: id (Integer/String)
결과: void / Unit.
호출 시:
-
InjectionScript.Runtime.InjectionApiUO.SetReceivingContainer. -
InjectionScript.Runtime.InjectionApiUO.SetReceivingContainer:SetReceivingContainer(bridge.Backpack). -
InjectionScript.Runtime.InjectionApiUO.GetObject:GetObject(id). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Backpack:bridge.Backpack.
내부 구현 코드이며 독립 스크립트로 실행할 수 없습니다.
public void SetReceivingContainer(string id)
{
string name = (id ?? string.Empty).Trim();
if (name.Equals("my", StringComparison.OrdinalIgnoreCase)
|| name.Equals("backpack", StringComparison.OrdinalIgnoreCase))
{
SetReceivingContainer(bridge.Backpack);
return;
}
SetReceivingContainer(GetObject(id));
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.UnsetCatchBag();Grab에 대한 수신 컨테이너를 지웁니다.
매개변수가 없습니다.
void - 값이 없습니다. 별도의 회선으로 전화하세요. 완료는 서버의 작업을 확인하지 않습니다.
- ExecuteLegacyManualAlias가 UnsetReceivingContainer을 호출합니다. 브리지는 ReceivingContainer=0를 할당합니다. 후속 Grab는 배낭을 사용합니다. 이것은 가방 제거가 아닙니다.
- 지정된 로컬 데이터만 수정하거나 표시합니다. 이 명령에는 서버 확인이 없습니다.
- 일반 클라이언트 호스트에서 이 상태 데이터는 GetPersistentState 관리자에서 가져오며 동일한 월드/프로필의 스크립트/채팅/매크로에 공통되며 하나의 스크립트에 속하지 않습니다. 다른 프로세스 또는 명백히 별도의 InjectionRuntimeState가 다른 상태를 갖습니다. 프로필을 로드/삭제하면 프로필을 대체할 수 있습니다. 저장된 serial는 여전히 로드된 세계와 비교하여 확인됩니다.
각 예제는 별도의 파일 .csx로 저장하고 IDE에서 실행할 수 있습니다. UO 개체와 대기 기능은 현재 게임 세션의 호스트를 제공합니다. 데모 serial 이름, 좌표, 주소를 자신의 것으로 바꾸세요.
이 코드를 별도의 .csx 파일로 실행하세요. 인수는 호출에 직접 표시됩니다. 예제의 이름, serial, 주소를 자신의 값으로 바꾸세요.
명령은 독립된 문입니다. 앞의 메시지는 호출 시작을 나타내며 서버 동작의 완료를 확인하지 않습니다.
UO.Print("Calling UO.UnsetCatchBag");
UO.UnsetCatchBag();매개변수와 실행 흐름:
- Grab에 대한 수신 컨테이너를 지웁니다.
UO.UnsetCatchBag();매개변수와 실행 흐름:
- ExecuteLegacyManualAlias가 UnsetReceivingContainer을 호출합니다. 브리지는 ReceivingContainer=0를 할당합니다. 후속 Grab는 배낭을 사용합니다. 이것은 가방 제거가 아닙니다.
return RunScenario();
object? RunScenario()
{
UO.SetCatchBag("backpack");
UO.UnsetCatchBag();
return null;
}매개변수와 실행 흐름:
- 지정된 로컬 데이터만 수정하거나 표시합니다. 이 명령에는 서버 확인이 없습니다.
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.UnsetCatchBag();
UO.Print(UO.Backpack());
return null;
}
}C#은 대소문자를 구분합니다. 정확한 UO 이름을 사용하세요. 숫자 플래그는 0과 비교하고 반환 형식이 bool일 때만 bool을 사용하세요.
매개변수: 매개변수가 없습니다.
결과: void / Unit.
호출 시:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
InjectionScript.Runtime.InjectionApiUO.UnsetReceivingContainer:UnsetReceivingContainer().
내부 구현 코드이며 독립 스크립트로 실행할 수 없습니다.
case "unsetcatchbag": UnsetReceivingContainer(); break;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.UnsetReceivingContainer();저장된 수신 컨테이너를 지웁니다.
매개변수가 없습니다.
void - 값이 없습니다. 별도의 회선으로 전화하세요. 완료는 서버의 작업을 확인하지 않습니다.
- UnsetReceivingContainer는 ReceivingContainer=0을 할당합니다. 이어지는 Grab에서는 명시적인 목적 없이 배낭을 사용합니다. 항목이 전송되지 않습니다.
- 지정된 로컬 데이터만 수정하거나 표시합니다. 이 명령에는 서버 확인이 없습니다.
- 일반 클라이언트 호스트에서 이 상태 데이터는 GetPersistentState 관리자에서 가져오며 동일한 월드/프로필의 스크립트/채팅/매크로에 공통되며 하나의 스크립트에 속하지 않습니다. 다른 프로세스 또는 명백히 별도의 InjectionRuntimeState가 다른 상태를 갖습니다. 프로필을 로드/삭제하면 프로필을 대체할 수 있습니다. 저장된 serial는 여전히 로드된 세계와 비교하여 확인됩니다.
각 예제는 별도의 파일 .csx로 저장하고 IDE에서 실행할 수 있습니다. UO 개체와 대기 기능은 현재 게임 세션의 호스트를 제공합니다. 데모 serial 이름, 좌표, 주소를 자신의 것으로 바꾸세요.
이 코드를 별도의 .csx 파일로 실행하세요. 인수는 호출에 직접 표시됩니다. 예제의 이름, serial, 주소를 자신의 값으로 바꾸세요.
명령은 독립된 문입니다. 앞의 메시지는 호출 시작을 나타내며 서버 동작의 완료를 확인하지 않습니다.
UO.Print("Calling UO.UnsetReceivingContainer");
UO.UnsetReceivingContainer();매개변수와 실행 흐름:
- 저장된 수신 컨테이너를 지웁니다.
UO.UnsetReceivingContainer();매개변수와 실행 흐름:
- UnsetReceivingContainer는 ReceivingContainer=0을 할당합니다. 이어지는 Grab에서는 명시적인 목적 없이 배낭을 사용합니다. 항목이 전송되지 않습니다.
return RunScenario();
object? RunScenario()
{
UO.SetReceivingContainer("backpack");
UO.UnsetReceivingContainer();
return null;
}매개변수와 실행 흐름:
- 지정된 로컬 데이터만 수정하거나 표시합니다. 이 명령에는 서버 확인이 없습니다.
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.UnsetReceivingContainer();
UO.Print(UO.Backpack());
return null;
}
}C#은 대소문자를 구분합니다. 정확한 UO 이름을 사용하세요. 숫자 플래그는 0과 비교하고 반환 형식이 bool일 때만 bool을 사용하세요.
매개변수: 매개변수가 없습니다.
결과: void / Unit.
호출 시:
-
InjectionScript.Runtime.InjectionApiUO.UnsetReceivingContainer. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.UnsetReceivingContainer:bridge.UnsetReceivingContainer().
내부 구현 코드이며 독립 스크립트로 실행할 수 없습니다.
public void UnsetReceivingContainer() => bridge.UnsetReceivingContainer();ClassicUO — Bad Newbie & C# Scripts IDE