Skip to content

KO UO Topic items Part 2

Codex edited this page Oct 11, 2026 · 2 revisions

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

아이템 — 2

홈 · C# · IDE · UO API · A–Z · 예 · 언어

참조 구성

1 · 2

전체 명령 참조


UO.UseItemOnMobile

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

C# 시그니처

void UO.UseItemOnMobile(object? arg0, object? arg1);

캐릭터의 타겟을 준비하고 아이템을 사용합니다.

매개변수

  • ItemSerial — 직렬/ID 개체: int, 숫자/16진수 문자열 또는 설정된 별칭(예: "lasttarget"). 이것은 graphic/type가 아닙니다. 조치를 취하기 전에 로드된 개체를 확인하십시오.
  • TargetSerial — 직렬/ID 개체: int, 숫자/16진수 문자열 또는 설정된 별칭(예: "lasttarget"). 이것은 graphic/type가 아닙니다. 조치를 취하기 전에 로드된 개체를 확인하십시오.

반환값

void - 값이 없습니다. 별도의 회선으로 전화하세요. 완료는 서버의 작업을 확인하지 않습니다.

동작

  • ExecuteClientApiCompatibility 먼저 브리지WaitTargetObject(TargetSerial)를 호출한 다음 브리지UseObject(ItemSerial)를 호출합니다. 인수는 교환되지 않습니다. 이러한 직접 브리지 호출은 TicksTarget/TicksUse 런타임을 업데이트하지 않습니다.
  • 대상/항목 유형을 확인하지 않으며 커서를 기다리지 않습니다. 사용하기 전에 대상을 준비하면 빠르게 도착하는 대상이 누락되는 것을 방지할 수 있지만 서버는 여전히 해당 작업이 유효한지 여부를 판단합니다.

독립 실행 C# 스크립트

각 예제는 별도의 파일 .csx로 저장하고 IDE에서 실행할 수 있습니다. UO 개체와 대기 기능은 현재 게임 세션의 호스트를 제공합니다. 데모 serial 이름, 좌표, 주소를 자신의 것으로 바꾸세요.

간단한 예제

이 코드를 별도의 .csx 파일로 실행하세요. 인수는 호출에 직접 표시됩니다. 예제의 이름, serial, 주소를 자신의 값으로 바꾸세요.

명령은 독립된 문입니다. 앞의 메시지는 호출 시작을 나타내며 서버 동작의 완료를 확인하지 않습니다.

UO.Print("Calling UO.UseItemOnMobile");
UO.UseItemOnMobile("0x40001234", "self");

1. 직접 통화 - 직접 스크립트

매개변수와 실행 흐름:

  • 캐릭터의 타겟을 준비하고 아이템을 사용합니다.
UO.UseItemOnMobile("0x40001234", "self");

2. 명시적 옵션 - 스크립트 기능

매개변수와 실행 흐름:

  • ExecuteClientApiCompatibility 먼저 브리지WaitTargetObject(TargetSerial)를 호출한 다음 브리지UseObject(ItemSerial)를 호출합니다. 인수는 교환되지 않습니다. 이러한 직접 브리지 호출은 TicksTarget/TicksUse 런타임을 업데이트하지 않습니다.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    var item = UO.GetSerial("lastobject");
    var mobile = UO.GetSerial("lasttarget");
    if (Truth(UO.Exists(item)) && Truth(UO.Exists(mobile)))
    {
        UO.UseItemOnMobile(item, 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;

3. 전체 도우미 기능 - 스크립트 클래스

매개변수와 실행 흐름:

  • 대상/항목 유형을 확인하지 않으며 커서를 기다리지 않습니다. 사용하기 전에 대상을 준비하면 빠르게 도착하는 대상이 누락되는 것을 방지할 수 있지만 서버는 여전히 해당 작업이 유효한지 여부를 판단합니다.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

    async public Task<object?> RunScenarioAsync()
    {
        var item = UO.GetSerial("lastobject");
        if (Truth(UO.Exists(item)))
        {
            UO.UseItemOnMobile(item, "self");
            UO.Print(UO.Waiting());
        }

        return null;
    }

    bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}

UO.UseObject

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

C# 시그니처

void UO.UseObject(object? arg0);

serial로 객체의 사용을 요청합니다. 브리지 통화 GameActions.DoubleClick; type 항목이 검색되지 않습니다.

매개변수

  • id — 직렬/ID 개체: int, 숫자/16진수 문자열 또는 설정된 별칭(예: "lasttarget"). 이것은 graphic/type가 아닙니다. 조치를 취하기 전에 로드된 개체를 확인하십시오.
  • ObjID — 직렬/ID 개체: int, 숫자/16진수 문자열 또는 설정된 별칭(예: "lasttarget"). 이것은 graphic/type가 아닙니다. 조치를 취하기 전에 로드된 개체를 확인하십시오.
  • serialOrName — 직렬/ID 개체: int, 숫자/16진수 문자열 또는 설정된 별칭(예: "lasttarget"). 이것은 graphic/type가 아닙니다. 조치를 취하기 전에 로드된 개체를 확인하십시오.

반환값

void - 값이 없습니다. 별도의 회선으로 전화하세요. 완료는 서버의 작업을 확인하지 않습니다.

동작

  • GetObject는 별칭을 허용합니다. 알 수 없는 이름은 -1를 제공합니다. 호출 후 런타임은 TicksUse를 UO.Timer 값으로 업데이트합니다. 서버의 확인이 아닌 요청의 순간입니다.
  • Bridge는 게임 스트림에 대한 요청을 보냅니다. 서버 규칙이 적용됩니다. 확인을 기다리는 내장은 없습니다.

독립 실행 C# 스크립트

각 예제는 별도의 파일 .csx로 저장하고 IDE에서 실행할 수 있습니다. UO 개체와 대기 기능은 현재 게임 세션의 호스트를 제공합니다. 데모 serial 이름, 좌표, 주소를 자신의 것으로 바꾸세요.

간단한 예제

이 코드를 별도의 .csx 파일로 실행하세요. 인수는 호출에 직접 표시됩니다. 예제의 이름, serial, 주소를 자신의 값으로 바꾸세요.

명령은 독립된 문입니다. 앞의 메시지는 호출 시작을 나타내며 서버 동작의 완료를 확인하지 않습니다.

UO.Print("Calling UO.UseObject");
UO.UseObject(UO.GetSerial("lasttarget"));

1. 직접 통화 - 직접 스크립트

매개변수와 실행 흐름:

  • serial로 객체의 사용을 요청합니다. 브리지 통화 GameActions.DoubleClick; type 항목이 검색되지 않습니다.
var id = UO.GetSerial("lasttarget");
if (Truth(UO.Exists(id)))
{
    UO.UseObject(id);
}

bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

2. 명시적 옵션 - 스크립트 기능

매개변수와 실행 흐름:

  • GetObject는 별칭을 허용합니다. 알 수 없는 이름은 -1를 제공합니다. 호출 후 런타임은 TicksUse를 UO.Timer 값으로 업데이트합니다. 서버의 확인이 아닌 요청의 순간입니다.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    var id = UO.GetSerial("self");
    if (Truth(UO.Exists(id)))
    {
        UO.UseObject(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;

3. 전체 도우미 기능 - 스크립트 클래스

매개변수와 실행 흐름:

  • Bridge는 게임 스트림에 대한 요청을 보냅니다. 서버 규칙이 적용됩니다. 확인을 기다리는 내장은 없습니다.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

    async public Task<object?> RunScenarioAsync()
    {
        ApplyToLoaded(UO.GetSerial("lasttarget"));
        return null;
    }

    void ApplyToLoaded(dynamic id)
    {
        if (Truth(UO.Exists(id)))
        {
            UO.UseObject(id);
        }
    }

    bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}

UO.UseType

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

C# 시그니처

int UO.UseType(object? arg0);
int UO.UseType(object? arg0, object? arg1);
int UO.UseType(object? arg0, object? arg1, object? arg2);
int UO.UseType(object? arg0, object? arg1, object? arg2, object? arg3);
int UO.UseType(object? arg0, object? arg1, object? arg2, object? arg3, object? arg4);
int UO.UseType(object? arg0, object? arg1, object? arg2, object? arg3, object? arg4, object? arg5);

원하는 graphic/type 중 하나의 항목을 찾아 적용합니다. 예를 들어, 배낭에서 물약을 마시거나, 근처에 있는 배낭을 열거나, 선택한 상자의 아이템을 사용합니다. 이 명령은 캐릭터를 검색하거나 이동하지 않습니다. 항목에 범위가 필요한 경우 대상을 별도로 준비해야 합니다.

매개변수

  • type — 항목의 그래픽: 숫자 또는 16진수 문자열; 예를 들어, 0x0F0C는 치유 물약의 일종이고, 0x0E75는 배낭입니다. serial 또는 body 문자가 아닙니다. 음수 또는 0xFFFF는 모든 type을 허용합니다. 의미 있는 행동을 위해서는 정확한 graphic가 더 좋습니다.
  • ObjType — 항목의 그래픽: 숫자 또는 16진수 문자열; 예를 들어, 0x0F0C는 치유 물약의 일종이고, 0x0E75는 배낭입니다. serial 또는 body 문자가 아닙니다. 음수 또는 0xFFFF는 모든 type을 허용합니다. 의미 있는 행동을 위해서는 정확한 graphic가 더 좋습니다.
  • color — 항목의 색상, 기본값 - 1 (모든 것). 음수 또는 0xFFFF는 필터를 제거합니다. 0는 도색되지 않은 항목을 선택합니다. 악명도 아니고 텍스트의 색상도 아닙니다.
  • Color — 항목의 색상, 기본값 - 1 (모든 것). 음수 또는 0xFFFF는 필터를 제거합니다. 0는 도색되지 않은 항목을 선택합니다. 악명도 아니고 텍스트의 색상도 아닙니다.
  • container — 기본값 -1: 배낭과 적재된 하위 컨테이너. "my"도 같은 의미입니다. "backpack" 또는 컨테이너의 명시적인 serial는 재귀 순회 루트를 지정합니다. ground/"ground"/UO.Ground(), 숫자 0/1는 세계의 객체만을 나타냅니다. Self은 backpack의 동의어가 아닙니다. 명시적인 배낭을 사용하십시오. 알 수 없거나 null 개체 별칭은 배낭으로 해결될 수 있습니다. 먼저 Exists를 사용하여 전송된 컨테이너를 확인하세요.
  • distance — 경로 길이가 아닌 최대 기하학적 X/Y 범위입니다. 기본 또는 음수 인수는 FindDistance입니다. 0는 동일한 셀을 의미합니다. 컨테이너에 담긴 품목의 경우 클라이언트는 소유자와의 거리를 고려합니다.
  • nearest — 기본값 true: 가장 가까운 것을 선택하고 동일할 경우 더 작은 것 serial를 선택합니다. false: 정렬 없이 순회에서 처음 발견되었습니다. 항목 수나 실행 모드가 아닙니다.
  • maxZ — 캐릭터와의 세계 높이 Z의 최대 절대 차이입니다. 기본 또는 음수 인수는 FindVertical입니다. 0에는 동일한 Z이 필요합니다. 가방에 들어 있는 아이템의 경우, 바닥에 있는 외부 용기의 높이 또는 소유자 캐릭터가 사용됩니다. 내부 검프 좌표는 월드 좌표로 간주되지 않습니다. 이는 보행 가능성이나 시선 확인이 아닌 높이 필터입니다.

반환값

int - UseObject가 호출되는 항목의 serial 0 일치하는 항목이 없는 경우. ReturnKind object에 등록해도 되나요? 실제로 숫자를 반환합니다. 이는 true/false 또는 서버의 사용 확인이 아닙니다. Used == true 대신 사용됨 != 0를 확인하세요. 효과가 성공하려면 상태, 내용, 로그에 대한 별도의 확인이 필요합니다.

동작

  • 1에서 6 인수. 범위를 설정하려면 색상과 컨테이너도 지정하세요. maxZ를 지정하려면 6개 위치를 모두 완료하세요. 배열 type, 마스크 | 이 명령에서는 추가 목표를 허용하지 않습니다.
  • int/string를 사용하는 일반 양식과 확장 양식은 CompactUseType를 사용합니다: 항목만, Ignore, 거리 및 높이; 컨테이너는 이미 로드된 콘텐츠를 반복적으로 탐색합니다. 로딩 컨테이너는 자동으로 열리지 않습니다. FindItem/FindCount/GetFoundItems는 이 분기에서 업데이트되지 않습니다.
  • 공유 소유자 및 컨테이너의 높이는 각 스택에 대한 순회 반복을 피하기 위해 호출당 한 번 계산됩니다. 원형 또는 지나치게 깊은 컨테이너 체인(루트가 없는 128 링크)은 높이 일치로 사용되지 않습니다.
  • 2개의 object?의 공통 호환 등록을 유지했습니다. 통화를 브리지로 라우팅합니다.UseType 배낭 위에서 FindType를 사용하여 찾기*를 업데이트하고 첫 번째 결과를 선택합니다. 예측 가능한 압축 형식을 위해서는 부적절한 값 유형의 암시적 변환보다는 int/string를 사용하세요.
  • UseObject는 시전 동작을 보내지만 명령은 대상, 치유, 음주, 창 열기, 서버 장애를 기다리지 않습니다. 검색 범위는 서버에서 허용하는 사용 범위를 확장하지 않습니다.
  • 일치하는 항목이 없으면 압축 형식은 메시지를 인쇄하고 0를 반환합니다. 문자/연결이 없는 경우 결과는 행위 권한으로 간주되어서는 안 됩니다. 정확한 ID을 위해서는 UO.UseObject를 사용하세요.

독립 실행 C# 스크립트

각 예제는 별도의 파일 .csx로 저장하고 IDE에서 실행할 수 있습니다. UO 개체와 대기 기능은 현재 게임 세션의 호스트를 제공합니다. 데모 serial 이름, 좌표, 주소를 자신의 것으로 바꾸세요.

간단한 예제

이 코드를 별도의 .csx 파일로 실행하세요. 인수는 호출에 직접 표시됩니다. 예제의 이름, serial, 주소를 자신의 값으로 바꾸세요.

한 번의 호출 결과를 저널에 표시합니다. 숫자를 bool로 변환하지 않으며, 배열이면 요소 수를 표시합니다.

var result = UO.UseType(0x0F0C);
UO.Print("UseType: " + Convert.ToString(result));

1. 배낭에서 치유 물약 적용 - 직접 스크립트

매개변수와 실행 흐름:

  • 0x0F0C는 표준 유형의 치유 물약의 예입니다. 서버는 캐릭터 상태, 지연 시간 또는 자체 규칙으로 인해 해당 작업을 거부할 수 있습니다. 색상과 범위는 별도로 지정하지 않으며 기본값이 적용됩니다.
if (!(Truth(UO.Connected())) || Truth(UO.Dead()))
{
    return null;
}
var used = UO.UseType(0x0F0C);
if (Truth(used == 0))
{
    UO.Print("No matching healing potion in the loaded backpack");
}
else
{
    UO.Print("Potion use requested; check health and the game message");
}

bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

2. 두 셀 내 지상에서 가장 가까운 배낭 열기 - 스크립트 기능

매개변수와 실행 흐름:

  • 0x0E75 — 배낭의 type, -1 — 모든 hue, ground — 세계의 물체. 2 - 셀 X/Y, true - 가장 가까운, 4 - 차이 Z. 반품 가방 — ID. 콘텐츠에 대한 액세스는 서버에 의해 결정됩니다. 팀은 배낭을 줍지 않습니다.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    var bag = UO.UseType(0x0E75, -1, "ground", 2, true, 4);
    if (Truth(bag != 0))
    {
        UO.AddObject("nearby_bag", bag);
    }
    else
    {
        UO.Print("No suitable ground backpack within the selected bounds");
    }

    return null;
}

bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

3. 미리 선택된 컨테이너의 아이템 사용 - 시나리오 클래스

매개변수와 실행 흐름:

  • itemType — graphic 사물, 소스 — 별도의 serial 컨테이너. 도우미는 UseType와 동일하게 serial/0를 반환합니다. 발견된 아이템이라도 서버에 의해 다른 사람이나 원격 컨테이너에서 사용되는 것이 금지될 수 있습니다.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

    async public Task<object?> RunScenarioAsync()
    {
        var source = Asc(UO.GetSerial("lasttarget"), 0);
        if (Truth(source == 0) || !(Truth(UO.Exists(source))))
        {
            return null;
        }

        UO.AddObject("supply", source);
        var used = UseFromNamedSupply(0x0F0C);
        if (Truth(used == 0))
        {
            UO.Print("Supply item was not found with these filters");
        }

        return null;
    }

    dynamic UseFromNamedSupply(dynamic itemType)
    {
        var source = Asc(UO.GetSerial("supply"), 0);
        if (Truth(source == 0) || !(Truth(UO.Exists(source))))
        {
            return 0;
        }

        return UO.UseType(itemType, 0, source, 2, false, 16);
    }

    int Asc(object? value, int fallback = 0)
    {
        string text = Convert.ToString(value) ?? "";
        if (text.StartsWith("0x", StringComparison.OrdinalIgnoreCase))
            return int.TryParse(text[2..], System.Globalization.NumberStyles.HexNumber, System.Globalization.CultureInfo.InvariantCulture, out int hex) ? hex : fallback;
        return int.TryParse(text, out int number) ? number : fallback;
    }

    bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}

UO.UseWorldObject

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

C# 시그니처

void UO.UseWorldObject(object? arg0);

serialOrName부터 GetObject까지 활성화하고 UseObject를 호출합니다. 문자열 이름은 이름 graphic/type이 아닌 개체 별칭입니다.

매개변수

  • id — 직렬/ID 개체: int, 숫자/16진수 문자열 또는 설정된 별칭(예: "lasttarget"). 이것은 graphic/type가 아닙니다. 조치를 취하기 전에 로드된 개체를 확인하십시오.
  • ObjID — 직렬/ID 개체: int, 숫자/16진수 문자열 또는 설정된 별칭(예: "lasttarget"). 이것은 graphic/type가 아닙니다. 조치를 취하기 전에 로드된 개체를 확인하십시오.
  • serialOrName — 직렬/ID 개체: int, 숫자/16진수 문자열 또는 설정된 별칭(예: "lasttarget"). 이것은 graphic/type가 아닙니다. 조치를 취하기 전에 로드된 개체를 확인하십시오.

반환값

void - 값이 없습니다. 별도의 회선으로 전화하세요. 완료는 서버의 작업을 확인하지 않습니다.

동작

  • UserObject에 직접 메타데이터에 등록되었습니다. 이는 서버 전체 검색이 아닌 serial의 일반적인 사용입니다.
  • Bridge는 게임 스트림에 대한 요청을 보냅니다. 서버 규칙이 적용됩니다. 확인을 기다리는 내장은 없습니다.

독립 실행 C# 스크립트

각 예제는 별도의 파일 .csx로 저장하고 IDE에서 실행할 수 있습니다. UO 개체와 대기 기능은 현재 게임 세션의 호스트를 제공합니다. 데모 serial 이름, 좌표, 주소를 자신의 것으로 바꾸세요.

간단한 예제

이 코드를 별도의 .csx 파일로 실행하세요. 인수는 호출에 직접 표시됩니다. 예제의 이름, serial, 주소를 자신의 값으로 바꾸세요.

명령은 독립된 문입니다. 앞의 메시지는 호출 시작을 나타내며 서버 동작의 완료를 확인하지 않습니다.

UO.Print("Calling UO.UseWorldObject");
UO.UseWorldObject(UO.GetSerial("lasttarget"));

1. 직접 통화 - 직접 스크립트

매개변수와 실행 흐름:

  • serialOrName부터 GetObject까지 활성화하고 UseObject를 호출합니다. 문자열 이름은 이름 graphic/type이 아닌 개체 별칭입니다.
var id = UO.GetSerial("lasttarget");
if (Truth(UO.Exists(id)))
{
    UO.UseWorldObject(id);
}

bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

2. 명시적 옵션 - 스크립트 기능

매개변수와 실행 흐름:

  • UserObject에 직접 메타데이터에 등록되었습니다. 이는 서버 전체 검색이 아닌 serial의 일반적인 사용입니다.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    var id = UO.GetSerial("self");
    if (Truth(UO.Exists(id)))
    {
        UO.UseWorldObject(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;

3. 전체 도우미 기능 - 스크립트 클래스

매개변수와 실행 흐름:

  • Bridge는 게임 스트림에 대한 요청을 보냅니다. 서버 규칙이 적용됩니다. 확인을 기다리는 내장은 없습니다.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

    async public Task<object?> RunScenarioAsync()
    {
        ApplyToLoaded(UO.GetSerial("lasttarget"));
        return null;
    }

    void ApplyToLoaded(dynamic id)
    {
        if (Truth(UO.Exists(id)))
        {
            UO.UseWorldObject(id);
        }
    }

    bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}

UO.UserObject

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

C# 시그니처

void UO.UserObject(object? arg0);

serialOrName부터 GetObject까지 활성화하고 UseObject를 호출합니다. 문자열 이름은 이름 graphic/type이 아닌 개체 별칭입니다.

매개변수

  • id — 직렬/ID 개체: int, 숫자/16진수 문자열 또는 설정된 별칭(예: "lasttarget"). 이것은 graphic/type가 아닙니다. 조치를 취하기 전에 로드된 개체를 확인하십시오.
  • ObjID — 직렬/ID 개체: int, 숫자/16진수 문자열 또는 설정된 별칭(예: "lasttarget"). 이것은 graphic/type가 아닙니다. 조치를 취하기 전에 로드된 개체를 확인하십시오.
  • serialOrName — 직렬/ID 개체: int, 숫자/16진수 문자열 또는 설정된 별칭(예: "lasttarget"). 이것은 graphic/type가 아닙니다. 조치를 취하기 전에 로드된 개체를 확인하십시오.

반환값

void - 값이 없습니다. 별도의 회선으로 전화하세요. 완료는 서버의 작업을 확인하지 않습니다.

동작

  • UO.UseWorldObject와 사용 경로가 동일합니다. 이 명령은 사용자 정의 개체를 생성하거나 AddObject 이름을 추가하지 않습니다.
  • Bridge는 게임 스트림에 대한 요청을 보냅니다. 서버 규칙이 적용됩니다. 확인을 기다리는 내장은 없습니다.

독립 실행 C# 스크립트

각 예제는 별도의 파일 .csx로 저장하고 IDE에서 실행할 수 있습니다. UO 개체와 대기 기능은 현재 게임 세션의 호스트를 제공합니다. 데모 serial 이름, 좌표, 주소를 자신의 것으로 바꾸세요.

간단한 예제

이 코드를 별도의 .csx 파일로 실행하세요. 인수는 호출에 직접 표시됩니다. 예제의 이름, serial, 주소를 자신의 값으로 바꾸세요.

명령은 독립된 문입니다. 앞의 메시지는 호출 시작을 나타내며 서버 동작의 완료를 확인하지 않습니다.

UO.Print("Calling UO.UserObject");
UO.UserObject(UO.GetSerial("lasttarget"));

1. 직접 통화 - 직접 스크립트

매개변수와 실행 흐름:

  • serialOrName부터 GetObject까지 활성화하고 UseObject를 호출합니다. 문자열 이름은 이름 graphic/type이 아닌 개체 별칭입니다.
var id = UO.GetSerial("lasttarget");
if (Truth(UO.Exists(id)))
{
    UO.UserObject(id);
}

bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

2. 명시적 옵션 - 스크립트 기능

매개변수와 실행 흐름:

  • UO.UseWorldObject와 사용 경로가 동일합니다. 이 명령은 사용자 정의 개체를 생성하거나 AddObject 이름을 추가하지 않습니다.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    var id = UO.GetSerial("self");
    if (Truth(UO.Exists(id)))
    {
        UO.UserObject(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;

3. 전체 도우미 기능 - 스크립트 클래스

매개변수와 실행 흐름:

  • Bridge는 게임 스트림에 대한 요청을 보냅니다. 서버 규칙이 적용됩니다. 확인을 기다리는 내장은 없습니다.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

    async public Task<object?> RunScenarioAsync()
    {
        ApplyToLoaded(UO.GetSerial("lasttarget"));
        return null;
    }

    void ApplyToLoaded(dynamic id)
    {
        if (Truth(UO.Exists(id)))
        {
            UO.UserObject(id);
        }
    }

    bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}

Clone this wiki locally