Skip to content

KO UO Topic character

Bad Newbie edited this page Oct 16, 2026 · 6 revisions

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

성격

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

캐릭터의 상태, 특성, 저항 및 장비. 특정 엔터티의 경우 명령 카드에 serial가 포함된 오버로드를 사용하세요.

섹션

주제 명령 및 설명
Identity UO.Self · UO.GetSerial · UO.GetName · UO.GetTitle · UO.GetSex · UO.GetRace
Stats UO.HP · UO.MaxHP · UO.Mana · UO.MaxMana · UO.Stamina · UO.MaxStamina · UO.Str · UO.Dex · UO.Int · UO.Weight · UO.MaxWeight · UO.Luck · UO.GetStatLockState · UO.SetStatLockState
Status UO.Alive · UO.Dead · UO.Hidden · UO.Poisoned · UO.Frozen · UO.Paralyzed · UO.Flying · UO.WarMode · UO.IsYellowHits
Resists UO.PhysicalResist · UO.GetPhysicalResist · UO.ResistPhysical · UO.GetResistPhysical · UO.FireResist · UO.GetFireResist · UO.ResistFire · UO.GetResistFire · UO.ColdResist · UO.GetColdResist · UO.ResistCold · UO.GetResistCold · UO.PoisonResist · UO.GetPoisonResist · UO.ResistPoison · UO.GetResistPoison · UO.EnergyResist · UO.GetEnergyResist · UO.ResistEnergy · UO.GetResistEnergy · UO.GetResist
캐릭터 레이어 UO.ObjAtLayer · UO.ObjAtLayerEx · UO.GetLayer · UO.GetEquipment
Equipment UO.GetEquipment · UO.EquipItems · UO.UnequipItems · UO.WearItem
Dress / Undress UO.SetDress · UO.Dress · UO.Undress · UO.DressSavedSet
Arm / Disarm UO.SetArm · UO.Arm · UO.Disarm
Mount / Dismount UO.Mount · UO.Dismount
Paperdoll UO.UseSelfPaperdollScroll · UO.UseOtherPaperdollScroll

모든 테마 명령

신원

UO.Self · UO.CharacterTitle · UO.CharName · UO.CharTitle · UO.GetRace · UO.GetSex · UO.Race · UO.Sex · UO.IsFemale · UO.GetTitle

통계

UO.Armor · UO.GetArmor · UO.HP · UO.GetHP · UO.Life · UO.GetLife · UO.MaxHP · UO.GetMaxHP · UO.MaxLife · UO.GetMaxLife · UO.Mana · UO.GetMana · UO.MaxMana · UO.GetMaxMana · UO.Stam · UO.GetStam · UO.Stamina · UO.GetStamina · UO.MaxStam · UO.GetMaxStam · UO.MaxStamina · UO.GetMaxStamina · UO.Str · UO.GetStr · UO.Strength · UO.GetStrength · UO.Dex · UO.GetDex · UO.Dexterity · UO.GetDexterity · UO.Int · UO.GetInt · UO.Intelligence · UO.GetIntelligence · UO.Weight · UO.GetWeight · UO.MaxWeight · UO.GetMaxWeight · UO.Luck · UO.GetLuck · UO.Gold · UO.GetGold · UO.GetStatLockState · UO.SetStatLockState · UO.SetStatState · UO.RequestStats · UO.GetStatus · UO.GetPlayerStatusText · UO.LastStatus · UO.LastStatusX · UO.LastStatusY · UO.GetARStatus · UO.SetARStatus · UO.SetARExtParams

상태

UO.Alive · UO.GetAlive · UO.IsAlive · UO.Dead · UO.GetDead · UO.IsDead · UO.Hidden · UO.GetHidden · UO.IsHidden · UO.Poison · UO.Poisoned · UO.GetPoisoned · UO.IsPoisoned · UO.Frozen · UO.GetFrozen · UO.IsFrozen · UO.Paralyzed · UO.GetParalisa · UO.GetParalysed · UO.GetParalyzed · UO.IsParalysed · UO.IsParalyzed · UO.Flying · UO.GetFlying · UO.IsFlying · UO.ToggleFly · UO.GetYellowBar · UO.IsYellowHits · UO.TicksDead

저항하다

UO.PhysicalResist · UO.GetPhysicalResist · UO.ResistPhysical · UO.GetResistPhysical · UO.FireResist · UO.GetFireResist · UO.ResistFire · UO.GetResistFire · UO.ColdResist · UO.GetColdResist · UO.ResistCold · UO.GetResistCold · UO.PoisonResist · UO.GetPoisonResist · UO.ResistPoison · UO.GetResistPoison · UO.EnergyResist · UO.GetEnergyResist · UO.ResistEnergy · UO.GetResistEnergy · UO.GetResist

장비

UO.GetEquipment · UO.ObjAtLayer · UO.ObjAtLayerEx · UO.Equip · UO.EquipT · UO.EquipItems · UO.Unequip · UO.UnequipItems · UO.WearItem · UO.EquipLastWeapon · UO.RemoveEarrings · UO.RemoveHat · UO.RemoveNeckless · UO.RemoveRing

Dress / Undress

UO.Dress · UO.Undress · UO.SetDress · UO.UnsetDress · UO.DressSavedSet · UO.EquipDressSet · UO.DressSpeed · UO.SetDressSpeed

Arm / Disarm

UO.Arm · UO.Disarm · UO.SetArm · UO.UnsetArm

Mount / Dismount

UO.Mount · UO.Dismount

종이인형

UO.UseSelfPaperdollScroll · UO.UseOtherPaperdollScroll

캐릭터 레이어

모든 레이어: 목적, 의미 및 예시. 장착한 아이템의 레이어 번호 serial와 graphic는 다른 값입니다.

주제에 대한 예

각 명령 카드에는 직접 코드, 함수 및 클래스 등 여러 가지 독립적인 시나리오가 있습니다. 다음은 선택된 짧은 시나리오입니다. 제한사항과 전체 분석이 카드에 포함되어 있습니다.

UO.HP

매개변수, 결과 및 모든 시나리오

var value = UO.HP();
UO.Print("HP: " + Convert.ToString(value));

UO.ObjAtLayer

매개변수, 결과 및 모든 시나리오

object? hand = UO.ObjAtLayer("Rhand");
if (hand is string serial)
{
    UO.Print("Right hand serial: " + serial);
}
else
{
    UO.Print("Right hand is empty or unavailable");
}

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

참조 구성

1 · 2 · 3 · 4 · 5

전체 명령 참조


UO.Alive

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

C# 시그니처

int UO.Alive();
int UO.Alive(object? value);

사망 흔적이 없는 물체의 존재 여부를 확인합니다.

매개변수

  • value — 표시된 형식의 선택적 개체: serial 숫자/16진수 문자열, self, lasttarget 또는 등록된 이름 AddObject. 이것은 type가 아닙니다. 논쟁 없이 self을 읽으세요. 일부 형식의 알 수 없는 텍스트로 인해 변환 오류가 발생합니다. 전화하기 전에 이름을 확인하세요.

반환값

숫자 플래그 int: 1(조건 충족), 0(조건 충족되지 않음). 이것은 숫자 플래그입니다: C#에서 결과를 확인하세요!= 0 또는 결과 == 0. int와 true/false 및 if(결과)를 직접 비교하는 것은 허용되지 않습니다. 1 - 양성 serial이 존재하며 죽은 것으로 표시되지 않습니다. 유명한 항목은 1도 제공합니다. 이는 mobile 필터가 아닙니다. 죽었거나 없어진 객체는 0을 제공합니다.

명령의 결과는 숫자 플래그입니다. 1는 충족된 조건을 의미하고, 0는 충족되지 않은 조건을 의미합니다. var result = command(...) 후에 (결과 != 0) 또는 (결과 == 0)인지 확인하세요. 한 번의 호출 결과를 저장합니다. 반복된 호출을 통해 해당 작업을 다시 수행하거나 이미 변경된 상태를 읽을 수 있습니다.

동작

  • 로컬 모델을 읽습니다. 대상을 열지 않고, 상태를 요청하지 않으며, 플래그를 변경하지 않으며, 패킷을 보내지 않습니다. 삭제된 개체는 해당 항목이 사전에서 삭제되기 전에도 누락된 것으로 간주됩니다.
  • 결과는 별도의 독서입니다. Exists와 다음 도전 사이에 세상이 바뀔 수도 있습니다. 여러 쿼리는 원자성 스냅샷을 형성하지 않습니다.

독립 실행 C# 스크립트

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

간단한 예제

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

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

var result = UO.Alive();
UO.Print("Alive: " + Convert.ToString(result));

1. 자신의 상태를 확인하세요 - 직접 스크립트

매개변수와 실행 흐름:

  • 빈 괄호는 self로 읽습니다. active는 결과를 한 번 저장합니다. true 및 false는 두 개의 분기를 정의합니다. Print 예시 메시지만 표시됩니다.
var active = UO.Alive();
if (Truth(Truth(active) == true))
{
    UO.Print("State is active");
}
else
{
    UO.Print("State is inactive or unavailable");
}

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

2. 선택한 개체 및 전체 기능 ReadState - 스크립트 기능

매개변수와 실행 흐름:

  • lasttarget – 이전에 선택한 개체. Exists는 존재 여부를 확인합니다. obj가 유일한 매개변수 ReadState입니다. 이 함수는 수정 없이 명령 결과를 반환합니다. 해당 정의는 복사된 코드에 포함되어 있습니다.
return  RunScenario();
 object? RunScenario()
{
    if (Truth(UO.Exists("lasttarget")))
    {
        var observed = ReadState("lasttarget");
        UO.Print("State 1/0: " + Convert.ToString(observed));
    }

    return null;
}

dynamic ReadState(dynamic obj)
{
    return UO.Alive(obj);
}

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

3. 0.5초 만에 변경 사항 확인 - 스크립트 클래스

매개변수와 실행 흐름:

  • 인수가 없는 두 번의 호출은 self, UO.Wait(500)를 읽고 500 밀리초를 설정합니다. 두 이미지가 비교됩니다. 중간 전환을 건너뛸 수 있습니다. 끝없는 기다림은 없습니다.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

    async public Task<object?> RunScenarioAsync()
    {
        var before = UO.Alive();
        await Delay(500);
        var after = UO.Alive();
        if (Truth(before != after))
        {
            UO.Print("State changed: " + Convert.ToString(before) + " -> " + Convert.ToString(after));
        }

        return null;
    }

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

명령 구현

C#은 대소문자를 구분합니다. 정확한 UO 이름을 사용하세요. 숫자 플래그는 0과 비교하고 반환 형식이 bool일 때만 bool을 사용하세요.

UO.Alive() — UO.Alive()

매개변수: 매개변수가 없습니다.

결과: int / Integer.

호출 시:

호출 시 저장된 처리기 delegate를 실행합니다. 등록 메서드는 API를 구성할 때 이 delegate를 만듭니다.

내부 구현 코드이며 독립 스크립트로 실행할 수 없습니다.

serial => serial > 0 && bridge.Exists(serial) != 0 && IsDeadState(serial) == 0 ? 1 : 0

내부 구현 코드이며 독립 스크립트로 실행할 수 없습니다.

() => getter(bridge.Self)

API 생성: 이 함수들은 API를 등록합니다. 명령을 호출할 때마다 다시 실행되지 않습니다.

UO.Alive(value) — UO.Alive(Any)

매개변수: value (Any)

결과: int / Integer.

호출 시:

호출 시 저장된 처리기 delegate를 실행합니다. 등록 메서드는 API를 구성할 때 이 delegate를 만듭니다.

내부 구현 코드이며 독립 스크립트로 실행할 수 없습니다.

serial => serial > 0 && bridge.Exists(serial) != 0 && IsDeadState(serial) == 0 ? 1 : 0

내부 구현 코드이며 독립 스크립트로 실행할 수 없습니다.

value => getter(GetObject(value))

API 생성: 이 함수들은 API를 등록합니다. 명령을 호출할 때마다 다시 실행되지 않습니다.


UO.Arm

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

C# 시그니처

void UO.Arm(object? name);

이전에 저장한 명명된 무기 및 방패 세트를 복원합니다.

매개변수

  • name — "travel" 또는 "battle"과 같은 세트의 문자열 이름입니다. 이름은 대소문자를 구분합니다. 의류와 무기 세트는 별도로 저장됩니다. 둘 다에 동일한 이름이 허용됩니다. 이것은 ID 사물이나 파일 이름이 아닙니다. SetDress만 이름이 없는 것을 허용합니다. 그런 다음 DressSavedSet/EquipDressSet에 대해 별도의 세트가 기록됩니다.

반환값

void - 값이 없습니다. 별도의 회선으로 전화하세요. 결과를 할당하거나 true와 비교하지 마세요. 저장하고 삭제하면 장비가 변경되는 것이 아니라 항목이 변경됩니다.

동작

  • 의류: 레이어드 3,4,5,6,7,8,10,12,13,14,17,18,19,20,22,23,24. 무기: 1 및 2만 해당. 머리카락, 수염, 배낭, 동물, 은행은 이 세트에 포함되지 않습니다.
  • 이미 로드된 특정 serial 항목은 자체 레이어에 기록됩니다. 동일한 이름을 다시 저장하면 항목이 대체됩니다. 빈 레이어도 의미가 있습니다. 복원되면 해당 점유 레이어가 자체 백팩으로 해제됩니다. 따라서 저장된 완전히 비어 있는 세트는 해당 레이어에서 항목을 제거합니다.
  • 세트는 런타임 상태로 저장됩니다. 호출 자체는 파일을 생성하지 않으며 세트가 다른 프로필이나 새 런타임으로 전송된다는 것을 보장하지 않습니다. 먼저 원하는 세트를 사용된 상태로 저장합니다. 클라이언트의 일반 상태를 로드/저장하는 것은 별도의 메커니즘입니다.
  • 현재와 ​​저장된 ID 사이의 정확한 일치는 다시 사용되거나 발생하지 않고 건너뜁니다. 누락된 항목은 유사한 type로 대체되지 않습니다. 한 작업이 실패해도 성공한 작업이 취소되지 않으며 다른 작업의 시도를 방해하지 않습니다. 자동 롤백은 없습니다. 연결과 로드된 내용이 필요합니다. 제거하면 실제 배낭이 사용됩니다.
  • UO.Set("equipfordress", 0)는 아이템 사용 요청을 선택합니다(초기 모드). 0이 아닌 값 - 픽업/장착. 두 모드 모두에서 원하는 웨어러블 레이어를 확인합니다. 이미 착용한 아이템은 반복 사용으로 전환할 수 없습니다. DressSpeed은 요청 수락 이후 유효하며, 철회는 DropDelay를 추가로 존중합니다.
  • Dress 및 Arm는 실패 시에도 void를 반환합니다. 요청이 수락되었다는 메시지는 서버의 확인을 의미하지 않습니다. 착용에 따라 계속 진행하려면 기대치가 제한된 실제 레이어를 확인하세요.
  • UO.SetDress · UO.Dress · UO.DressSavedSet · UO.SetArm · UO.Arm · UO.DressSpeed

독립 실행 C# 스크립트

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

간단한 예제

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

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

UO.Print("Calling UO.Arm");
UO.Arm("battle");

1. 직접 사용 - 직접 스크립트

매개변수와 실행 흐름:

  • 필수 세트는 동일한 런타임 상태에서 이전에 저장되어야 합니다. 각 복원 직전에 SetDress/SetArm를 호출하지 마세요. 이렇게 하면 현재 항목으로 대상을 덮어쓰게 됩니다.
UO.Arm("battle");

2. 이름 및 쿼리 모드 - 스크립트 기능

매개변수와 실행 흐름:

  • 0이 아닌 장비는 픽업/장비를 선택합니다. 350 — 밀리초 DressSpeed. 이러한 설정은 예제 이후 런타임에도 유지됩니다. 제거 및 착용은 서버에서 결정됩니다.
return  RunScenario();
 object? RunScenario()
{
    UO.Set("equipfordress", 1);
    UO.DressSpeed(350);
    UO.Arm("battle");
    return null;
}

3. 완전한 도우미 스크립트 - 스크립트 클래스

매개변수와 실행 흐름:

  • lasttarget — ID 이전에 저장된 세트에 포함되어야 하는 항목입니다. 컨트롤 레이어 3는 신발을 의미하고, 1는 오른손을 의미합니다. AwaitSlot는 100 ms 일시 중지를 통해 최대 20 검사를 수행하고 명령을 반복하지 않습니다. 이는 전체 세트가 아닌 선택한 항목만 확인합니다.
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 expected = Asc(UO.GetSerial("lasttarget"), 0);
        if (Truth(expected == 0))
        {
            return 0;
        }

        UO.Arm("battle");
        return AwaitSlot(1, expected);
        return null;
    }

    dynamic AwaitSlot(dynamic layer, dynamic expected)
    {
        for (int attempt = (int)(1); attempt <= 20; attempt += (int)(1))
        {
            if (Truth(UO.ObjAtLayerEx(layer, UO.Self()) == expected))
            {
                return 1;
            }

            UO.Wait(100);
        }

        return 0;
    }

    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;
}

명령 구현

C#은 대소문자를 구분합니다. 정확한 UO 이름을 사용하세요. 숫자 플래그는 0과 비교하고 반환 형식이 bool일 때만 bool을 사용하세요.

UO.Arm(name) — UO.Arm(String)

매개변수: name (String)

결과: void / Unit.

호출 시:

내부 구현 코드이며 독립 스크립트로 실행할 수 없습니다.

public void Arm(string name)

            => Equip(name, armSets, weaponLayers, "Weapon set requests processed.", "No weapons set with setarm.");

UO.Armor

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

C# 시그니처

int UO.Armor();

현재 캐릭터의 저항 필드(물리 방어구/저항)를 읽습니다.

매개변수

매개변수가 없습니다.

반환값

int는 클라이언트 모델의 서명된 상태 값, -32768..32767입니다. 음수 값이 유지됩니다. 0는 실제 저항, 데이터 부족 또는 플레이어 누락/파괴일 수 있습니다. GetResist는 알 수 없는 선택기에 대해 0도 제공합니다. bool, ID, 스킬 한계나 저항 한계가 아닙니다. 1는 성공이 아닌 1점을 의미합니다.

동작

  • 이 명령은 인수를 사용하지 않습니다. 위의 정확한 서명을 사용하세요.
  • 게임 스레드에서 읽으면 Player가 필요합니다.PhysicalResistance 현재 플레이어가 존재하고 파괴되지 않은 경우; 그렇지 않으면 0. 장비가 정렬되지 않고, 보너스가 다시 계산되지 않으며, 상태가 요청되지 않으며, 업데이트를 기다리지 않습니다. 현재 유령은 파괴된 플레이어와 동일하지 않습니다.
  • PhysicalResistance - 서버 갑옷/상태 필드: 클래식 서버는 갑옷 등급을 전송할 수 있으며, 저항이 있는 규칙은 물리적 저항을 전송할 수 있습니다. API는 서로 변환되지 않으며 피해 감소율을 계산하지 않습니다. Armor 및 물리적 별칭은 동일한 필드를 읽습니다.
  • CharacterStatus는 이름, 체력, 자신의 특성을 변경하기 전에 필요한 신체를 확인한 다음 각 저항 단어를 서명된 Int16으로 변환합니다. 잘린 필수 본문은 이전 데이터를 변경하지 않습니다. 선택적 꼬리 type 6는 동일한 규칙을 유지합니다. 저항 명령은 최대 한계를 읽지 않습니다.
  • 호출할 때마다 로컬 데이터를 새로 읽습니다. 변수는 스냅샷을 저장합니다. 개별 읽기는 다른 서버 업데이트를 받을 수 있습니다. 0이 아닌 결과는 연결을 테스트하지 않습니다. 0은 값일 수도 있고 데이터가 없을 수도 있습니다.
  • 이 함수들은 API를 등록합니다. 명령을 호출할 때마다 다시 실행되지 않습니다. C#은 대소문자를 구분합니다. 정확한 UO 이름을 사용하세요. 숫자 플래그는 0과 비교하고 반환 형식이 bool일 때만 bool을 사용하세요.

독립 실행 C# 스크립트

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

간단한 예제

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

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

var result = UO.Armor();
UO.Print("Armor: " + Convert.ToString(result));

1. 저장된 값 인쇄 - 직접 스크립트

매개변수와 실행 흐름:

  • 값은 한 번의 호출 결과를 저장합니다. Convert.ToString는 로그 번호의 형식을 지정합니다. 논쟁은 없습니다. 자신의 성격을 읽을 수 있습니다.
var value = UO.Armor();
UO.Print("PhysicalResistance: " + Convert.ToString(value));

2. 두 이미지 비교 - 스크립트 기능

매개변수와 실행 흐름:

  • 전후 사이에는 UO.Wait(500) 밀리초가 있습니다. 차이는 음수가 될 수 있습니다. 중간 업데이트가 누락될 수 있습니다. 일시 정지는 지연 API이 아닌 예를 나타냅니다.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    var before = UO.Armor();
    await Delay(500);
    var after = UO.Armor();
    var difference = after - before;
    UO.Print("Resistance change: " + Convert.ToString(difference));
    return null;
}

Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));

3. 최소 저항 테스트 기능 완료 - 스크립트 클래스

매개변수와 실행 흐름:

  • 최소=50는 클라이언트 제한이 아닌 요구 사항의 예입니다. ResistanceAtLeast는 누락된 플레이어를 거부하고 하나의 값을 읽고 bool를 반환합니다: true 또는 값 >= 최소인 경우 false. 저항 자체는 bool가 아닙니다. 함수는 아래에 완전히 선언되어 있습니다.
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        if (Truth(Truth(ResistanceAtLeast(50)) == true))
        {
            UO.Print("Local resistance requirement met");
        }
        else
        {
            UO.Print("Requirement not met or no player");
        }

        return null;
    }

    dynamic ResistanceAtLeast(dynamic minimum)
    {
        if (Truth(UO.Self() == 0))
        {
            return false;
        }

        var value = UO.Armor();
        return value >= minimum;
    }

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

명령 구현

C#은 대소문자를 구분합니다. 정확한 UO 이름을 사용하세요. 숫자 플래그는 0과 비교하고 반환 형식이 bool일 때만 bool을 사용하세요.

UO.Armor() — UO.Armor()

매개변수: 매개변수가 없습니다.

결과: int / Integer.

호출 시:

내부 구현 코드이며 독립 스크립트로 실행할 수 없습니다.

case "armor": return new InjectionValue(bridge.Armor);

UO.CharName

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

C# 시그니처

dynamic UO.CharName();

캐릭터의 이름을 읽습니다.

매개변수

매개변수가 없습니다.

반환값

string은 클라이언트에게 알려진 이름입니다. 빈 문자열은 비어 있거나 알 수 없는 값 또는 객체가 없음을 의미합니다. serial 또는 프로필 경로가 아닙니다. 게임 이름/제목은 언어 IDE로 번역되지 않습니다.

동작

  • 이미 수신된 로컬 데이터를 읽습니다. 요청은 공개 상태가 아니며 서버가 업데이트를 보내도록 강제하지 않습니다. 사망, 맵 전환 또는 객체 삭제 후 두 호출 사이에 값이 변경될 수 있습니다.
  • C#은 대소문자를 구분합니다. 정확한 UO 이름을 사용하세요. 숫자 플래그는 0과 비교하고 반환 형식이 bool일 때만 bool을 사용하세요.

독립 실행 C# 스크립트

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

간단한 예제

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

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

object? result = UO.CharName();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));

1. 로그인 후 텍스트 표시 - 직접 스크립트

매개변수와 실행 흐름:

  • 매개변수 없음: self를 읽습니다.
  • 빈 문자열은 명시적으로 처리됩니다. 이것은 "0" 텍스트가 아닙니다.
var text = UO.CharName();
if (Truth(text != ""))
{
    UO.Print(text);
}
else
{
    UO.Print("Text is unavailable");
}

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

2. 로그 메시지에 텍스트 추가 - 스크립트 기능

매개변수와 실행 흐름:

  • 당신의 캐릭터가 읽혀지고, 그 값은 라인으로 저장됩니다.
    • 연산자는 문자열을 결합합니다. 이 결과에는 Convert.ToString가 필요하지 않습니다.
return  RunScenario();
 object? RunScenario()
{
    var text = UO.CharName();
    UO.Print("Player имя: " + text);
    return null;
}

3. 두 스냅샷 비교 - 시나리오 클래스

매개변수와 실행 흐름:

  • 두 호출 모두 self를 참조합니다. UO.Wait는 일시 정지 1000ms를 설정합니다.
  • 그 차이는 데이터를 업데이트하거나 세상을 떠나는 것을 의미할 수 있습니다. 이 예에서는 이름이나 제목을 변경하지 않습니다.
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 previous = UO.CharName();
        await Delay(1000);
        var current = UO.CharName();
        if (Truth(previous != current))
        {
            UO.Print("Updated text: " + current);
        }

        return null;
    }

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

명령 구현

C#은 대소문자를 구분합니다. 정확한 UO 이름을 사용하세요. 숫자 플래그는 0과 비교하고 반환 형식이 bool일 때만 bool을 사용하세요.

UO.CharName() — UO.CharName()

매개변수: 매개변수가 없습니다.

결과: dynamic / Any.

호출 시:

내부 구현 코드이며 독립 스크립트로 실행할 수 없습니다.

case "getname":

                case "charname": return new InjectionValue(bridge.GetName(Arg(0, bridge.Self)));

UO.CharTitle

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

C# 시그니처

dynamic UO.CharTitle();

캐릭터의 제목을 읽습니다.

매개변수

매개변수가 없습니다.

반환값

string은 고객에게 알려진 제목입니다. 빈 문자열은 비어 있거나 알 수 없는 값 또는 객체가 없음을 의미합니다. serial 또는 프로필 경로가 아닙니다. 게임 이름/제목은 언어 IDE로 번역되지 않습니다.

동작

  • 이미 수신된 로컬 데이터를 읽습니다. 요청은 공개 상태가 아니며 서버가 업데이트를 보내도록 강제하지 않습니다. 사망, 맵 전환 또는 객체 삭제 후 두 호출 사이에 값이 변경될 수 있습니다.
  • C#은 대소문자를 구분합니다. 정확한 UO 이름을 사용하세요. 숫자 플래그는 0과 비교하고 반환 형식이 bool일 때만 bool을 사용하세요.

독립 실행 C# 스크립트

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

간단한 예제

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

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

object? result = UO.CharTitle();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));

1. 로그인 후 텍스트 표시 - 직접 스크립트

매개변수와 실행 흐름:

  • 매개변수 없음: self를 읽습니다.
  • 빈 문자열은 명시적으로 처리됩니다. 이것은 "0" 텍스트가 아닙니다.
var text = UO.CharTitle();
if (Truth(text != ""))
{
    UO.Print(text);
}
else
{
    UO.Print("Text is unavailable");
}

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

2. 로그 메시지에 텍스트 추가 - 스크립트 기능

매개변수와 실행 흐름:

  • 당신의 캐릭터가 읽혀지고, 그 값은 라인으로 저장됩니다.
    • 연산자는 문자열을 결합합니다. 이 결과에는 Convert.ToString가 필요하지 않습니다.
return  RunScenario();
 object? RunScenario()
{
    var text = UO.CharTitle();
    UO.Print("Player титул: " + text);
    return null;
}

3. 두 스냅샷 비교 - 시나리오 클래스

매개변수와 실행 흐름:

  • 두 호출 모두 self를 참조합니다. UO.Wait는 일시 정지 1000ms를 설정합니다.
  • 그 차이는 데이터를 업데이트하거나 세상을 떠나는 것을 의미할 수 있습니다. 이 예에서는 이름이나 제목을 변경하지 않습니다.
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 previous = UO.CharTitle();
        await Delay(1000);
        var current = UO.CharTitle();
        if (Truth(previous != current))
        {
            UO.Print("Updated text: " + current);
        }

        return null;
    }

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

명령 구현

C#은 대소문자를 구분합니다. 정확한 UO 이름을 사용하세요. 숫자 플래그는 0과 비교하고 반환 형식이 bool일 때만 bool을 사용하세요.

UO.CharTitle() — UO.CharTitle()

매개변수: 매개변수가 없습니다.

결과: dynamic / Any.

호출 시:

내부 구현 코드이며 독립 스크립트로 실행할 수 없습니다.

case "chartitle": return new InjectionValue(bridge.CharacterTitle);

UO.CharacterTitle

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

C# 시그니처

string UO.CharacterTitle();

캐릭터의 제목을 읽습니다.

매개변수

매개변수가 없습니다.

반환값

string은 고객에게 알려진 제목입니다. 빈 문자열은 비어 있거나 알 수 없는 값 또는 객체가 없음을 의미합니다. serial 또는 프로필 경로가 아닙니다. 게임 이름/제목은 언어 IDE로 번역되지 않습니다.

동작

  • 이미 수신된 로컬 데이터를 읽습니다. 요청은 공개 상태가 아니며 서버가 업데이트를 보내도록 강제하지 않습니다. 사망, 맵 전환 또는 객체 삭제 후 두 호출 사이에 값이 변경될 수 있습니다.
  • C#은 대소문자를 구분합니다. 정확한 UO 이름을 사용하세요. 숫자 플래그는 0과 비교하고 반환 형식이 bool일 때만 bool을 사용하세요.

독립 실행 C# 스크립트

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

간단한 예제

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

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

var result = UO.CharacterTitle();
UO.Print("CharacterTitle: " + Convert.ToString(result));

1. 로그인 후 텍스트 표시 - 직접 스크립트

매개변수와 실행 흐름:

  • 매개변수 없음: self를 읽습니다.
  • 빈 문자열은 명시적으로 처리됩니다. 이것은 "0" 텍스트가 아닙니다.
var text = UO.CharacterTitle();
if (Truth(text != ""))
{
    UO.Print(text);
}
else
{
    UO.Print("Text is unavailable");
}

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

2. 로그 메시지에 텍스트 추가 - 스크립트 기능

매개변수와 실행 흐름:

  • 당신의 캐릭터가 읽혀지고, 그 값은 라인으로 저장됩니다.
    • 연산자는 문자열을 결합합니다. 이 결과에는 Convert.ToString가 필요하지 않습니다.
return  RunScenario();
 object? RunScenario()
{
    var text = UO.CharacterTitle();
    UO.Print("Player титул: " + text);
    return null;
}

3. 두 스냅샷 비교 - 시나리오 클래스

매개변수와 실행 흐름:

  • 두 호출 모두 self를 참조합니다. UO.Wait는 일시 정지 1000ms를 설정합니다.
  • 그 차이는 데이터를 업데이트하거나 세상을 떠나는 것을 의미할 수 있습니다. 이 예에서는 이름이나 제목을 변경하지 않습니다.
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 previous = UO.CharacterTitle();
        await Delay(1000);
        var current = UO.CharacterTitle();
        if (Truth(previous != current))
        {
            UO.Print("Updated text: " + current);
        }

        return null;
    }

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

명령 구현

C#은 대소문자를 구분합니다. 정확한 UO 이름을 사용하세요. 숫자 플래그는 0과 비교하고 반환 형식이 bool일 때만 bool을 사용하세요.

UO.CharacterTitle() — UO.CharacterTitle()

매개변수: 매개변수가 없습니다.

결과: string / String.

호출 시:

호출 시 저장된 처리기 delegate를 실행합니다. 등록 메서드는 API를 구성할 때 이 delegate를 만듭니다.

내부 구현 코드이며 독립 스크립트로 실행할 수 없습니다.

() => bridge.CharacterTitle

API 생성: 이 함수들은 API를 등록합니다. 명령을 호출할 때마다 다시 실행되지 않습니다.


UO.ColdResist

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

C# 시그니처

int UO.ColdResist();

현재 캐릭터의 저항 필드: 콜드를 읽습니다.

매개변수

매개변수가 없습니다.

반환값

int는 클라이언트 모델의 서명된 상태 값, -32768..32767입니다. 음수 값이 유지됩니다. 0는 실제 저항, 데이터 부족 또는 플레이어 누락/파괴일 수 있습니다. GetResist는 알 수 없는 선택기에 대해 0도 제공합니다. bool, ID, 스킬 한계나 저항 한계가 아닙니다. 1는 성공이 아닌 1점을 의미합니다.

동작

  • 이 명령은 인수를 사용하지 않습니다. 위의 정확한 서명을 사용하세요.
  • 게임 스레드에서 읽으면 Player가 필요합니다.ColdResistance 현재 플레이어가 존재하고 파괴되지 않은 경우; 그렇지 않으면 0. 장비가 정렬되지 않고, 보너스가 다시 계산되지 않으며, 상태가 요청되지 않으며, 업데이트를 기다리지 않습니다. 현재 유령은 파괴된 플레이어와 동일하지 않습니다.
  • 요소 필드는 확장된 CharacterStatus (0x11), type >= 4로 제공됩니다. 명령 자체는 서버 시대를 확인하지 않습니다. 이러한 필드가 없는 압축/이전 상태는 이전 캐시를 그대로 유지합니다. 새 플레이어는 처음에는 0입니다. 독 저항은 Poisoned 플래그가 아닙니다. 또한 주문 저항 스킬도 아닙니다.
  • CharacterStatus는 이름, 체력, 자신의 특성을 변경하기 전에 필요한 신체를 확인한 다음 각 저항 단어를 서명된 Int16으로 변환합니다. 잘린 필수 본문은 이전 데이터를 변경하지 않습니다. 선택적 꼬리 type 6는 동일한 규칙을 유지합니다. 저항 명령은 최대 한계를 읽지 않습니다.
  • 호출할 때마다 로컬 데이터를 새로 읽습니다. 변수는 스냅샷을 저장합니다. 개별 읽기는 다른 서버 업데이트를 받을 수 있습니다. 0이 아닌 결과는 연결을 테스트하지 않습니다. 0은 값일 수도 있고 데이터가 없을 수도 있습니다.
  • 이 함수들은 API를 등록합니다. 명령을 호출할 때마다 다시 실행되지 않습니다. C#은 대소문자를 구분합니다. 정확한 UO 이름을 사용하세요. 숫자 플래그는 0과 비교하고 반환 형식이 bool일 때만 bool을 사용하세요.

독립 실행 C# 스크립트

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

간단한 예제

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

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

var result = UO.ColdResist();
UO.Print("ColdResist: " + Convert.ToString(result));

1. 저장된 값 인쇄 - 직접 스크립트

매개변수와 실행 흐름:

  • 값은 한 번의 호출 결과를 저장합니다. Convert.ToString는 로그 번호의 형식을 지정합니다. 논쟁은 없습니다. 자신의 성격을 읽을 수 있습니다.
var value = UO.ColdResist();
UO.Print("ColdResistance: " + Convert.ToString(value));

2. 두 이미지 비교 - 스크립트 기능

매개변수와 실행 흐름:

  • 전후 사이에는 UO.Wait(500) 밀리초가 있습니다. 차이는 음수가 될 수 있습니다. 중간 업데이트가 누락될 수 있습니다. 일시 정지는 지연 API이 아닌 예를 나타냅니다.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    var before = UO.ColdResist();
    await Delay(500);
    var after = UO.ColdResist();
    var difference = after - before;
    UO.Print("Resistance change: " + Convert.ToString(difference));
    return null;
}

Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));

3. 최소 저항 테스트 기능 완료 - 스크립트 클래스

매개변수와 실행 흐름:

  • 최소=50는 클라이언트 제한이 아닌 요구 사항의 예입니다. ResistanceAtLeast는 누락된 플레이어를 거부하고 하나의 값을 읽고 bool를 반환합니다: true 또는 값 >= 최소인 경우 false. 저항 자체는 bool가 아닙니다. 함수는 아래에 완전히 선언되어 있습니다.
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        if (Truth(Truth(ResistanceAtLeast(50)) == true))
        {
            UO.Print("Local resistance requirement met");
        }
        else
        {
            UO.Print("Requirement not met or no player");
        }

        return null;
    }

    dynamic ResistanceAtLeast(dynamic minimum)
    {
        if (Truth(UO.Self() == 0))
        {
            return false;
        }

        var value = UO.ColdResist();
        return value >= minimum;
    }

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

명령 구현

C#은 대소문자를 구분합니다. 정확한 UO 이름을 사용하세요. 숫자 플래그는 0과 비교하고 반환 형식이 bool일 때만 bool을 사용하세요.

UO.ColdResist() — UO.ColdResist()

매개변수: 매개변수가 없습니다.

결과: int / Integer.

호출 시:

내부 구현 코드이며 독립 스크립트로 실행할 수 없습니다.

case "coldresist": return new InjectionValue(bridge.ColdResistance);

UO.Dead

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

C# 시그니처

int UO.Dead();
int UO.Dead(object? id);

캐릭터 사망을 확인합니다.

매개변수

  • id — 표시된 형식의 선택적 개체: serial 숫자/16진수 문자열, self, lasttarget 또는 등록된 이름 AddObject. 이것은 type가 아닙니다. 논쟁 없이 self을 읽으세요. 일부 형식의 알 수 없는 텍스트로 인해 변환 오류가 발생합니다. 전화하기 전에 이름을 확인하세요.

반환값

숫자 플래그 int: 1(조건 충족), 0(조건 충족 안 됨). 이것은 숫자 플래그입니다: C#에서 결과를 확인하세요!= 0 또는 결과 == 0. int와 true/false 및 if(결과)를 직접 비교하는 것은 허용되지 않습니다. 1 - mobile에는 IsDead이 있고, 0에는 부호가 없거나 mobile가 없습니다. HP=0 그 자체가 죽음을 의미하는 것은 아닙니다.

명령의 결과는 숫자 플래그입니다. 1는 충족된 조건을 의미하고, 0는 충족되지 않은 조건을 의미합니다. var result = command(...) 후에 (결과 != 0) 또는 (결과 == 0)인지 확인하세요. 한 번의 호출 결과를 저장합니다. 반복된 호출을 통해 해당 작업을 다시 수행하거나 이미 변경된 상태를 읽을 수 있습니다.

동작

  • 로컬 모델을 읽습니다. 대상을 열지 않고, 상태를 요청하지 않으며, 플래그를 변경하지 않으며, 패킷을 보내지 않습니다. 삭제된 개체는 해당 항목이 사전에서 삭제되기 전에도 누락된 것으로 간주됩니다.
  • 결과는 별도의 독서입니다. Exists와 다음 도전 사이에 세상이 바뀔 수도 있습니다. 여러 쿼리는 원자성 스냅샷을 형성하지 않습니다.

독립 실행 C# 스크립트

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

간단한 예제

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

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

var result = UO.Dead();
UO.Print("Dead: " + Convert.ToString(result));

1. 자신의 상태를 확인하세요 - 직접 스크립트

매개변수와 실행 흐름:

  • 빈 괄호는 self로 읽습니다. active는 결과를 한 번 저장합니다. true 및 false는 두 개의 분기를 정의합니다. Print 예시 메시지만 표시됩니다.
var active = UO.Dead();
if (Truth(Truth(active) == true))
{
    UO.Print("State is active");
}
else
{
    UO.Print("State is inactive or unavailable");
}

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

2. 선택한 개체 및 전체 기능 ReadState - 스크립트 기능

매개변수와 실행 흐름:

  • lasttarget – 이전에 선택한 개체. Exists는 존재 여부를 확인합니다. obj가 유일한 매개변수 ReadState입니다. 이 함수는 수정 없이 명령 결과를 반환합니다. 해당 정의는 복사된 코드에 포함되어 있습니다.
return  RunScenario();
 object? RunScenario()
{
    if (Truth(UO.Exists("lasttarget")))
    {
        var observed = ReadState("lasttarget");
        UO.Print("State 1/0: " + Convert.ToString(observed));
    }

    return null;
}

dynamic ReadState(dynamic obj)
{
    return UO.Dead(obj);
}

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

3. 0.5초 만에 변경 사항 확인 - 스크립트 클래스

매개변수와 실행 흐름:

  • 인수가 없는 두 번의 호출은 self, UO.Wait(500)를 읽고 500 밀리초를 설정합니다. 두 이미지가 비교됩니다. 중간 전환을 건너뛸 수 있습니다. 끝없는 기다림은 없습니다.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

    async public Task<object?> RunScenarioAsync()
    {
        var before = UO.Dead();
        await Delay(500);
        var after = UO.Dead();
        if (Truth(before != after))
        {
            UO.Print("State changed: " + Convert.ToString(before) + " -> " + Convert.ToString(after));
        }

        return null;
    }

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

명령 구현

C#은 대소문자를 구분합니다. 정확한 UO 이름을 사용하세요. 숫자 플래그는 0과 비교하고 반환 형식이 bool일 때만 bool을 사용하세요.

UO.Dead() — UO.Dead()

매개변수: 매개변수가 없습니다.

결과: int / Integer.

호출 시:

내부 구현 코드이며 독립 스크립트로 실행할 수 없습니다.

public int Dead() => bridge.Dead();

UO.Dead(id) — UO.Dead(Any)

매개변수: id (Any)

결과: int / Integer.

호출 시:

내부 구현 코드이며 독립 스크립트로 실행할 수 없습니다.

public int Dead(InjectionValue id)

        {

            int serial = GetObject(id);

            if (serial == bridge.Self)

                return Dead();

            return serial > 0 ? bridge.IsDead(serial) : 0;

        }

UO.Dex

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

C# 시그니처

int UO.Dex();

캐릭터의 현재 민첩성(Dexterity, DEX)을 읽어옵니다.

매개변수

매개변수가 없습니다.

반환값

int — 클라이언트 모델의 현재 통계 포인트, 0..65535; 백분율, ID, 스킬, 잠금 모드 또는 bool가 아닙니다. 0는 누락/삭제된 문자 또는 접근할 수 없는 객체를 의미하기도 합니다. == true가 아닌 수치 요구 사항과 비교하십시오. 이는 스텟 한도나 수정 없이 보장된 기본 값이 아닙니다.

동작

  • 이 명령은 인수를 사용하지 않습니다. 위의 정확한 서명을 사용하세요.
  • Player를 읽습니다.Dexterity Player가 존재하고 파괴되지 않은 경우; 그렇지 않으면 0. 존재하는 죽은 캐릭터는 제거된 개체가 아닙니다. 스텟은 HP, 마나, 체력으로 계산되지 않습니다.
  • GetStr/GetInt/GetDex ObjID를 수락합니다. PlayerMobile 데이터는 self에서만 사용할 수 있습니다. 다른 serial - 0의 경우, 로드된 mobile의 경우에도 마찬가지입니다. 다른 사람의 특성은 대체되거나 추측되지 않습니다.
  • Invoke는 스크립트로 대기를 취소하는 기능을 통해 게임 스트림에서 읽기를 수행합니다. 상태를 쿼리하지 않으며, 대상을 열지 않으며, 패킷을 보내지 않으며, 특성을 변경하지 않으며 지연을 추가하지 않습니다.
  • 호출할 때마다 로컬 데이터를 새로 읽습니다. 변수는 스냅샷을 저장합니다. 개별 읽기는 다른 서버 업데이트를 받을 수 있습니다. 0이 아닌 결과는 연결을 테스트하지 않습니다. 0은 값일 수도 있고 데이터가 없을 수도 있습니다.
  • C#은 대소문자를 구분합니다. 정확한 UO 이름을 사용하세요. 숫자 플래그는 0과 비교하고 반환 형식이 bool일 때만 bool을 사용하세요. UO.Dex(), UO.Dexterity(), UO.GetDex(), UO.GetDexterity().

독립 실행 C# 스크립트

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

간단한 예제

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

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

var result = UO.Dex();
UO.Print("Dex: " + Convert.ToString(result));

1. 포인트 읽기 및 표시 - 직접 스크립트

매개변수와 실행 흐름:

  • value는 숫자 결과를 저장합니다. 변환합니다.ToString 잡지용으로 포맷합니다. 논쟁이나 캐릭터 행동이 없습니다.
var value = UO.Dex();
UO.Print("Dexterity: " + Convert.ToString(value));

2. 두 이미지 비교 - 스크립트 기능

매개변수와 실행 흐름:

  • 별도의 1000 ms 전후; UO.Wait 예시에 추가되었습니다. Change=after-before는 양수, 0 또는 음수일 수 있습니다. 그 자체로는 모든 중간 업데이트와 월드 종료를 구분하지 않습니다.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    var before = UO.Dex();
    await Delay(1000);
    var after = UO.Dex();
    var change = after - before;
    UO.Print("Change: " + Convert.ToString(change));
    return null;
}

Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));

3. 완전한 요구사항 검증 기능 - 스크립트 클래스

매개변수와 실행 흐름:

  • 최소=80는 클라이언트 제한이 아닌 요구 사항의 예입니다. AttributeAtLeast(최소)는 누락된 문자를 거부하고 특성을 한 번 읽고 bool를 반환합니다: 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()
    {
        if (Truth(Truth(AttributeAtLeast(80)) == true))
        {
            UO.Print("Requirement met");
        }
        else
        {
            UO.Print("Requirement not met or no player");
        }

        return null;
    }

    dynamic AttributeAtLeast(dynamic minimum)
    {
        if (Truth(UO.Self() == 0))
        {
            return false;
        }

        var value = UO.Dex();
        return value >= minimum;
    }

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

명령 구현

C#은 대소문자를 구분합니다. 정확한 UO 이름을 사용하세요. 숫자 플래그는 0과 비교하고 반환 형식이 bool일 때만 bool을 사용하세요.

UO.Dex() — UO.Dex()

매개변수: 매개변수가 없습니다.

결과: int / Integer.

호출 시:

내부 구현 코드이며 독립 스크립트로 실행할 수 없습니다.

case "dex": return new InjectionValue(bridge.Dexterity);

UO.Dexterity

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

C# 시그니처

int UO.Dexterity();

캐릭터의 현재 민첩성(Dexterity, DEX)을 읽어옵니다.

매개변수

매개변수가 없습니다.

반환값

int — 클라이언트 모델의 현재 통계 포인트, 0..65535; 백분율, ID, 스킬, 잠금 모드 또는 bool가 아닙니다. 0는 누락/삭제된 문자 또는 접근할 수 없는 객체를 의미하기도 합니다. == true가 아닌 수치 요구 사항과 비교하십시오. 이는 스텟 한도나 수정 없이 보장된 기본 값이 아닙니다.

동작

  • 이 명령은 인수를 사용하지 않습니다. 위의 정확한 서명을 사용하세요.
  • Player를 읽습니다.Dexterity Player가 존재하고 파괴되지 않은 경우; 그렇지 않으면 0. 존재하는 죽은 캐릭터는 제거된 개체가 아닙니다. 스텟은 HP, 마나, 체력으로 계산되지 않습니다.
  • GetStr/GetInt/GetDex ObjID를 수락합니다. PlayerMobile 데이터는 self에서만 사용할 수 있습니다. 다른 serial - 0의 경우, 로드된 mobile의 경우에도 마찬가지입니다. 다른 사람의 특성은 대체되거나 추측되지 않습니다.
  • Invoke는 스크립트로 대기를 취소하는 기능을 통해 게임 스트림에서 읽기를 수행합니다. 상태를 쿼리하지 않으며, 대상을 열지 않으며, 패킷을 보내지 않으며, 특성을 변경하지 않으며 지연을 추가하지 않습니다.
  • 호출할 때마다 로컬 데이터를 새로 읽습니다. 변수는 스냅샷을 저장합니다. 개별 읽기는 다른 서버 업데이트를 받을 수 있습니다. 0이 아닌 결과는 연결을 테스트하지 않습니다. 0은 값일 수도 있고 데이터가 없을 수도 있습니다.
  • C#은 대소문자를 구분합니다. 정확한 UO 이름을 사용하세요. 숫자 플래그는 0과 비교하고 반환 형식이 bool일 때만 bool을 사용하세요. UO.Dex(), UO.Dexterity(), UO.GetDex(), UO.GetDexterity().

독립 실행 C# 스크립트

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

간단한 예제

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

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

var result = UO.Dexterity();
UO.Print("Dexterity: " + Convert.ToString(result));

1. 포인트 읽기 및 표시 - 직접 스크립트

매개변수와 실행 흐름:

  • value는 숫자 결과를 저장합니다. 변환합니다.ToString 잡지용으로 포맷합니다. 논쟁이나 캐릭터 행동이 없습니다.
var value = UO.Dexterity();
UO.Print("Dexterity: " + Convert.ToString(value));

2. 두 이미지 비교 - 스크립트 기능

매개변수와 실행 흐름:

  • 별도의 1000 ms 전후; UO.Wait 예시에 추가되었습니다. Change=after-before는 양수, 0 또는 음수일 수 있습니다. 그 자체로는 모든 중간 업데이트와 월드 종료를 구분하지 않습니다.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    var before = UO.Dexterity();
    await Delay(1000);
    var after = UO.Dexterity();
    var change = after - before;
    UO.Print("Change: " + Convert.ToString(change));
    return null;
}

Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));

3. 완전한 요구사항 검증 기능 - 스크립트 클래스

매개변수와 실행 흐름:

  • 최소=80는 클라이언트 제한이 아닌 요구 사항의 예입니다. AttributeAtLeast(최소)는 누락된 문자를 거부하고 특성을 한 번 읽고 bool를 반환합니다: 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()
    {
        if (Truth(Truth(AttributeAtLeast(80)) == true))
        {
            UO.Print("Requirement met");
        }
        else
        {
            UO.Print("Requirement not met or no player");
        }

        return null;
    }

    dynamic AttributeAtLeast(dynamic minimum)
    {
        if (Truth(UO.Self() == 0))
        {
            return false;
        }

        var value = UO.Dexterity();
        return value >= minimum;
    }

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

명령 구현

C#은 대소문자를 구분합니다. 정확한 UO 이름을 사용하세요. 숫자 플래그는 0과 비교하고 반환 형식이 bool일 때만 bool을 사용하세요.

UO.Dexterity() — UO.Dexterity()

매개변수: 매개변수가 없습니다.

결과: int / Integer.

호출 시:

호출 시 저장된 처리기 delegate를 실행합니다. 등록 메서드는 API를 구성할 때 이 delegate를 만듭니다.

내부 구현 코드이며 독립 스크립트로 실행할 수 없습니다.

() => bridge.Dexterity

API 생성: 이 함수들은 API를 등록합니다. 명령을 호출할 때마다 다시 실행되지 않습니다.


UO.Disarm

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

C# 시그니처

int UO.Disarm();

손에서 무기와 방패를 제거합니다: 레이어 1 및 2. 의류에 영향을 미치지 않습니다.

매개변수

매개변수가 없습니다.

반환값

숫자 플래그 int: 1 (조건 충족) - 로컬 작업 허용, 0 (조건 충족 안 됨) - 거부. 이는 서버 확인도 아니고 ID도 아니고, 수량도 아닙니다. 나중에 서버가 실패할 수 있습니다. 답변 후 실제 장비를 확인하세요.

명령의 결과는 숫자 플래그입니다. 1는 충족된 조건을 의미하고, 0는 충족되지 않은 조건을 의미합니다. var result = command(...) 후에 (결과 != 0) 또는 (결과 == 0)인지 확인하세요. 한 번의 호출 결과를 저장합니다. 반복된 호출을 통해 해당 작업을 다시 수행하거나 이미 변경된 상태를 읽을 수 있습니다.

동작

  • 로드된 항목과 자유로운 손 드래그가 필요합니다. 제거할 때는 실제 배낭 self가 필요하며 예비 배낭 GrabBag은 사용되지 않습니다. 알 수 없거나 파손되었거나 부적합한 품목은 거부됩니다. 다른 사람의 항목은 UnequipItems를 통해 제거할 수 없습니다. 세트는 원자성 트랜잭션이 아닙니다.
  • EquipItems/UnequipItems는 승인된 작업 이후 다음 요소 이전에 DressSpeed를 적용합니다. Disarm/Undress - 각 점유 레이어 다음. 출금은 캐리가 허용되는 경우 DropDelay를 추가로 존중합니다. 다른 런타임의 동일한 설정은 변경되지 않습니다. 가속은 서버 제한을 ​​무시하지 않습니다.
  • 잘못된 호출 형식, 알 수 없는 레이어 이름 또는 숫자로 변환할 수 없는 값으로 인해 0 대신 스크립트 오류가 발생할 수 있습니다. 장비 스냅샷에는 이미 로드된 데이터만 포함됩니다. 어시스턴트에서는 ChangeAndConfirm 레이어=1가 오른손입니다. 또 다른 점은 실제 레이어를 전달하는 것입니다.
  • 배열의 경우 1는 나열된 모든 작업이 허용됨을 의미합니다. 거부하는 경우 0가 반환됩니다. 나머지 요소는 계속 처리되며 롤백은 없습니다. 빈 배열은 아무런 작업 없이 1를 생성합니다. Disarm/Undress 필요한 레이어가 이미 비어 있는 경우에도 1를 제공합니다. 부분적인 실패는 0를 제공합니다.
  • UO.EquipItems · UO.UnequipItems · UO.DressSpeed · UO.DropDelay · UO.ObjAtLayerEx

독립 실행 C# 스크립트

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

간단한 예제

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

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

var result = UO.Disarm();
UO.Print("Disarm: " + Convert.ToString(result));

1. Disarm - 하나의 선택된 항목 또는 레이어 - 직접 스크립트

매개변수와 실행 흐름:

  • 먼저, 게임에서 적절한 항목을 선택하세요: lasttarget - ID. Equip/WearItem 예에서 1 레이어에는 보조 무기가 필요합니다. Unequip(1)는 오른손을 제거합니다. Disarm/Undress 자체 고정 레이어를 사용하여 작동합니다. 거절 후에는 자동 재생이 되지 않습니다.
return UO.Disarm();

2. Disarm - 두 개의 항목을 저장하고 ID - 스크립트 기능

매개변수와 실행 흐름:

  • 장착 방법에 있어서 0x0F5E는 검의 예시이고, 0x1B76는 방패의 예시입니다. FindType는 배낭에 로드된 항목 중에서 해당 항목을 찾고, ASC는 반환된 16진수-ID를 변환합니다. 제거하려면 현재 레이어를 읽어야 합니다. 필요한 항목을 사용할 수 없으면 스크립트가 종료됩니다. 배열은 두 개의 ID를 저장합니다. 각 항목은 완전히 전송됩니다.
return  RunScenario();
 object? RunScenario()
{
    var first = UO.ObjAtLayerEx(1, UO.Self());
    var second = UO.ObjAtLayerEx(2, UO.Self());
    if (Truth(first == 0) || Truth(second == 0))
    {
        return 0;
    }

    UO.AddObject("saved_first", first);
    UO.AddObject("saved_second", second);
    return UO.Disarm();
    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. Disarm - 대기가 제한된 전체 기능 - 스크립트 클래스

매개변수와 실행 흐름:

  • ChangeAndConfirm는 명령을 한 번 실행합니다. 그런 다음 100ms의 일시 중지를 통해 최대 20회까지 실제 상태를 확인합니다. 1 - 검사 결과 예상 상태가 확인되었습니다. 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()
    {
        return ChangeAndConfirm();
        return null;
    }

    dynamic ChangeAndConfirm()
    {
        if (!(Truth(UO.Disarm())))
        {
            return 0;
        }

        dynamic[] layers = new dynamic[checked((int)(1) + 1)];
        layers[0] = 1;
        layers[1] = 2;
        for (int attempt = (int)(1); attempt <= 20; attempt += (int)(1))
        {
            dynamic empty = true;
            for (int i = (int)(0); i <= ArrayLength(layers) - 1; i += (int)(1))
            {
                if (Truth(UO.ObjAtLayerEx(layers[i], UO.Self()) != 0))
                {
                    empty = false;
                }
            }

            if (Truth(empty))
            {
                return 1;
            }

            UO.Wait(100);
        }

        return 0;
    }

    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을 사용하세요.

UO.Disarm() — UO.Disarm()

매개변수: 매개변수가 없습니다.

결과: int / Integer.

호출 시:

내부 구현 코드이며 독립 스크립트로 실행할 수 없습니다.

public int Disarm()

            => Unequip(weaponLayers, "Weapons disarmed.");

UO.Dismount

C# 시그니처

int UO.Dismount();

동작 및 반환값

Mount와 Dismount는 수동 더블 클릭이나 전투 모드 공격 처리를 거치지 않고 개체 사용 요청을 전송합니다. int는 Mount 레이어의 현재 아이템 serial이며 성공 여부가 아닙니다. 서버 응답은 비동기이므로 Mount가 아직 0, Dismount가 제거 전 serial을 반환할 수 있습니다. 응답 후 ObjAtLayer("Mount")를 확인하세요.

매개변수

매개변수 없음.

각 코드 블록은 완전한 독립 .csx입니다. 예시 serial, type과 좌표를 바꾸세요. 인수 순서와 C# 명명된 인수는 시그니처를 따릅니다.

채팅 명령

#dismount

완전한 C# 예제

각 코드 블록은 완전한 독립 .csx입니다. 예시 serial, type과 좌표를 바꾸세요. 인수 순서와 C# 명명된 인수는 시그니처를 따릅니다.

1

int mountLayerSerial = UO.Dismount();
UO.Print(UO.Int2Hex(mountLayerSerial));

2

var before = UO.ObjAtLayer("Mount");
int currentSerial = UO.Dismount();
UO.Print($"{before} -> {UO.Int2Hex(currentSerial)}");

3

UO.Dismount();
await WaitAsync(250);
UO.Print(Convert.ToString(UO.ObjAtLayer("Mount")));

4

new CommandSample().Execute(UO);

sealed class CommandSample
{
    public void Execute(global::ClassicUO.CSharp.CSharpGameApi api)
    {
        int mountLayerSerial = api.Dismount();
        api.Print(api.Int2Hex(mountLayerSerial));
    }
}

내부 호출

CSharpGameApi.Dismount
  -> CSharpScriptGlobals
  -> InjectionScript.Runtime.InjectionApiUO.Dismount
ClassicUOInjectionApiBridge -> NativeMountController.Request
  -> OutgoingPackets.Send_UseObjectRequest (0x06)
  -> MountedLayerSerialUnsafe -> Player.FindItemByLayer(Layer.Mount)

출처

ClassicUO · ServUO BaseMount


UO.Dress

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

C# 시그니처

void UO.Dress(object? name);

이전에 저장한 이름의 의류 세트를 복원합니다.

매개변수

  • name — "travel" 또는 "battle"과 같은 세트의 문자열 이름입니다. 이름은 대소문자를 구분합니다. 의류와 무기 세트는 별도로 저장됩니다. 둘 다에 동일한 이름이 허용됩니다. 이것은 ID 사물이나 파일 이름이 아닙니다. SetDress만 이름이 없는 것을 허용합니다. 그런 다음 DressSavedSet/EquipDressSet에 대해 별도의 세트가 기록됩니다.

반환값

void - 값이 없습니다. 별도의 회선으로 전화하세요. 결과를 할당하거나 true와 비교하지 마세요. 저장하고 삭제하면 장비가 변경되는 것이 아니라 항목이 변경됩니다.

동작

  • 의류: 레이어드 3,4,5,6,7,8,10,12,13,14,17,18,19,20,22,23,24. 무기: 1 및 2만 해당. 머리카락, 수염, 배낭, 동물, 은행은 이 세트에 포함되지 않습니다.
  • 이미 로드된 특정 serial 항목은 자체 레이어에 기록됩니다. 동일한 이름을 다시 저장하면 항목이 대체됩니다. 빈 레이어도 의미가 있습니다. 복원되면 해당 점유 레이어가 자체 백팩으로 해제됩니다. 따라서 저장된 완전히 비어 있는 세트는 해당 레이어에서 항목을 제거합니다.
  • 세트는 런타임 상태로 저장됩니다. 호출 자체는 파일을 생성하지 않으며 세트가 다른 프로필이나 새 런타임으로 전송된다는 것을 보장하지 않습니다. 먼저 원하는 세트를 사용된 상태로 저장합니다. 클라이언트의 일반 상태를 로드/저장하는 것은 별도의 메커니즘입니다.
  • 현재와 ​​저장된 ID 사이의 정확한 일치는 다시 사용되거나 발생하지 않고 건너뜁니다. 누락된 항목은 유사한 type로 대체되지 않습니다. 한 작업이 실패해도 성공한 작업이 취소되지 않으며 다른 작업의 시도를 방해하지 않습니다. 자동 롤백은 없습니다. 연결과 로드된 내용이 필요합니다. 제거하면 실제 배낭이 사용됩니다.
  • UO.Set("equipfordress", 0)는 아이템 사용 요청을 선택합니다(초기 모드). 0이 아닌 값 - 픽업/장착. 두 모드 모두에서 원하는 웨어러블 레이어를 확인합니다. 이미 착용한 아이템은 반복 사용으로 전환할 수 없습니다. DressSpeed은 요청 수락 이후 유효하며, 철회는 DropDelay를 추가로 존중합니다.
  • Dress 및 Arm는 실패 시에도 void를 반환합니다. 요청이 수락되었다는 메시지는 서버의 확인을 의미하지 않습니다. 착용에 따라 계속 진행하려면 기대치가 제한된 실제 레이어를 확인하세요.
  • UO.SetDress · UO.Dress · UO.DressSavedSet · UO.SetArm · UO.Arm · UO.DressSpeed

독립 실행 C# 스크립트

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

간단한 예제

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

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

UO.Print("Calling UO.Dress");
UO.Dress("travel");

1. 직접 사용 - 직접 스크립트

매개변수와 실행 흐름:

  • 필수 세트는 동일한 런타임 상태에서 이전에 저장되어야 합니다. 각 복원 직전에 SetDress/SetArm를 호출하지 마세요. 이렇게 하면 현재 항목으로 대상을 덮어쓰게 됩니다.
UO.Dress("travel");

2. 이름 및 쿼리 모드 - 스크립트 기능

매개변수와 실행 흐름:

  • 0이 아닌 장비는 픽업/장비를 선택합니다. 350 — 밀리초 DressSpeed. 이러한 설정은 예제 이후 런타임에도 유지됩니다. 제거 및 착용은 서버에서 결정됩니다.
return  RunScenario();
 object? RunScenario()
{
    UO.Set("equipfordress", 1);
    UO.DressSpeed(350);
    UO.Dress("travel");
    return null;
}

3. 완전한 도우미 스크립트 - 스크립트 클래스

매개변수와 실행 흐름:

  • lasttarget — ID 이전에 저장된 세트에 포함되어야 하는 항목입니다. 컨트롤 레이어 3는 신발을 의미하고, 1는 오른손을 의미합니다. AwaitSlot는 100 ms 일시 중지를 통해 최대 20 검사를 수행하고 명령을 반복하지 않습니다. 이는 전체 세트가 아닌 선택한 항목만 확인합니다.
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 expected = Asc(UO.GetSerial("lasttarget"), 0);
        if (Truth(expected == 0))
        {
            return 0;
        }

        UO.Dress("travel");
        return AwaitSlot(3, expected);
        return null;
    }

    dynamic AwaitSlot(dynamic layer, dynamic expected)
    {
        for (int attempt = (int)(1); attempt <= 20; attempt += (int)(1))
        {
            if (Truth(UO.ObjAtLayerEx(layer, UO.Self()) == expected))
            {
                return 1;
            }

            UO.Wait(100);
        }

        return 0;
    }

    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;
}

명령 구현

C#은 대소문자를 구분합니다. 정확한 UO 이름을 사용하세요. 숫자 플래그는 0과 비교하고 반환 형식이 bool일 때만 bool을 사용하세요.

UO.Dress(name) — UO.Dress(String)

매개변수: name (String)

결과: void / Unit.

호출 시:

내부 구현 코드이며 독립 스크립트로 실행할 수 없습니다.

public void Dress(string name)

            => Equip(name, dressSets, dressLayers, "Clothing set requests processed.", "No clothing set with setdress.");

UO.DressSavedSet

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

C# 시그니처

dynamic UO.DressSavedSet();

이름 없이 UO.SetDress()를 호출하여 저장한 옷 세트를 복원합니다.

매개변수

매개변수가 없습니다.

반환값

실제로 숫자 플래그 int: 1 (조건 충족) - 필요한 모든 요청이 로컬에서 승인되었거나 필요한 레이어가 이미 일치했습니다. 0 (조건이 충족되지 않음) - 전화 걸기, 연결 없음 또는 하나 이상의 요청이 거부되었습니다. 등록 object? 이것을 허용합니다 int. 이는 ID, 착용 아이템 개수, 서버 확인이 아닙니다.

명령의 결과는 숫자 플래그입니다. 1는 충족된 조건을 의미하고, 0는 충족되지 않은 조건을 의미합니다. var result = command(...) 후에 (결과 != 0) 또는 (결과 == 0)인지 확인하세요. 한 번의 호출 결과를 저장합니다. 반복된 호출을 통해 해당 작업을 다시 수행하거나 이미 변경된 상태를 읽을 수 있습니다.

동작

  • 의류: 레이어드 3,4,5,6,7,8,10,12,13,14,17,18,19,20,22,23,24. 무기: 1 및 2만 해당. 머리카락, 수염, 배낭, 동물, 은행은 이 세트에 포함되지 않습니다.
  • 이미 로드된 특정 serial 항목은 자체 레이어에 기록됩니다. 동일한 이름을 다시 저장하면 항목이 대체됩니다. 빈 레이어도 의미가 있습니다. 복원되면 해당 점유 레이어가 자체 백팩으로 해제됩니다. 따라서 저장된 완전히 비어 있는 세트는 해당 레이어에서 항목을 제거합니다.
  • 세트는 런타임 상태로 저장됩니다. 호출 자체는 파일을 생성하지 않으며 세트가 다른 프로필이나 새 런타임으로 전송된다는 것을 보장하지 않습니다. 먼저 원하는 세트를 사용된 상태로 저장합니다. 클라이언트의 일반 상태를 로드/저장하는 것은 별도의 메커니즘입니다.
  • 현재와 ​​저장된 ID 사이의 정확한 일치는 다시 사용되거나 발생하지 않고 건너뜁니다. 누락된 항목은 유사한 type로 대체되지 않습니다. 한 작업이 실패해도 성공한 작업이 취소되지 않으며 다른 작업의 시도를 방해하지 않습니다. 자동 롤백은 없습니다. 연결과 로드된 내용이 필요합니다. 제거하면 실제 배낭이 사용됩니다.
  • UO.Set("equipfordress", 0)는 아이템 사용 요청을 선택합니다(초기 모드). 0이 아닌 값 - 픽업/장착. 두 모드 모두에서 원하는 웨어러블 레이어를 확인합니다. 이미 착용한 아이템은 반복 사용으로 전환할 수 없습니다. DressSpeed은 요청 수락 이후 유효하며, 철회는 DropDelay를 추가로 존중합니다.
  • Dress 및 Arm는 실패 시에도 null를 반환합니다. 요청이 수락되었다는 메시지는 서버의 확인을 의미하지 않습니다. 착용에 따라 계속 진행하려면 기대치가 제한된 실제 레이어를 확인하세요.
  • UO.SetDress · UO.Dress · UO.DressSavedSet · UO.SetArm · UO.Arm · UO.DressSpeed

독립 실행 C# 스크립트

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

간단한 예제

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

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

object? result = UO.DressSavedSet();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));

1. 직접 사용 - 직접 스크립트

매개변수와 실행 흐름:

  • 필수 세트는 동일한 런타임 상태에서 이전에 저장되어야 합니다. 각 복원 직전에 SetDress/SetArm를 호출하지 마세요. 이렇게 하면 현재 항목으로 대상을 덮어쓰게 됩니다.
return UO.DressSavedSet();

2. 이름 및 쿼리 모드 - 스크립트 기능

매개변수와 실행 흐름:

  • 0이 아닌 장비는 픽업/장비를 선택합니다. 350 — 밀리초 DressSpeed. 이러한 설정은 예제 이후 런타임에도 유지됩니다. 제거 및 착용은 서버에서 결정됩니다.
return  RunScenario();
 object? RunScenario()
{
    UO.Set("equipfordress", 1);
    UO.DressSpeed(350);
    return UO.DressSavedSet();
    return null;
}

3. 완전한 도우미 스크립트 - 스크립트 클래스

매개변수와 실행 흐름:

  • lasttarget — ID 이전에 저장된 세트에 포함되어야 하는 항목입니다. 컨트롤 레이어 3는 신발을 의미하고, 1는 오른손을 의미합니다. AwaitSlot는 100 ms 일시 중지를 통해 최대 20 검사를 수행하고 명령을 반복하지 않습니다. 이는 전체 세트가 아닌 선택한 항목만 확인합니다.
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 expected = Asc(UO.GetSerial("lasttarget"), 0);
        if (Truth(expected == 0))
        {
            return 0;
        }

        if (!(Truth(UO.DressSavedSet())))
        {
            return 0;
        }

        return AwaitSlot(3, expected);
        return null;
    }

    dynamic AwaitSlot(dynamic layer, dynamic expected)
    {
        for (int attempt = (int)(1); attempt <= 20; attempt += (int)(1))
        {
            if (Truth(UO.ObjAtLayerEx(layer, UO.Self()) == expected))
            {
                return 1;
            }

            UO.Wait(100);
        }

        return 0;
    }

    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;
}

명령 구현

C#은 대소문자를 구분합니다. 정확한 UO 이름을 사용하세요. 숫자 플래그는 0과 비교하고 반환 형식이 bool일 때만 bool을 사용하세요.

UO.DressSavedSet() — UO.DressSavedSet()

매개변수: 매개변수가 없습니다.

결과: dynamic / Any.

호출 시:

내부 구현 코드이며 독립 스크립트로 실행할 수 없습니다.

case "dresssavedset":

                case "equipdressset": return new InjectionValue(Equip("__stealth_saved_set__", dressSets, dressLayers, "Clothing set requests processed.", "No clothing set with setdress."));

UO.DressSpeed

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

C# 시그니처

dynamic UO.DressSpeed();
dynamic UO.DressSpeed(object? value);

현재 런타임에서 옷 입기/벗기 작업 사이의 일시 중지를 읽거나 설정합니다. 서버 규칙에 대해 일련의 작업을 너무 빨리 보내는 것을 방지하는 데 도움이 됩니다.

매개변수

  • value - 선택적인 밀리초입니다. 논쟁 없이 - 읽기; 인수를 사용하면 값이 10..10000로 제한됩니다. 지연이 아직 설정되지 않은 경우 런타임의 초기 값은 0일 수 있습니다. 이 명령을 사용하여 0를 쓸 수 없습니다.

반환값

인수 없음: int, 현재 밀리초. 인수 포함: null, 반환 값 없음; 그런 다음 UO.DressSpeed()를 별도로 읽으십시오. 이것은 bool가 아닙니다.

동작

  • EquipItems/UnequipItems는 승인된 작업 이후 다음 요소 이전에 DressSpeed를 적용합니다. Disarm/Undress - 각 점유 레이어 다음. 출금은 캐리가 허용되는 경우 DropDelay를 추가로 존중합니다. 다른 런타임의 동일한 설정은 변경되지 않습니다. 가속은 서버 제한을 ​​무시하지 않습니다.
  • UO.EquipItems · UO.UnequipItems · UO.DressSpeed · UO.DropDelay · UO.ObjAtLayerEx

독립 실행 C# 스크립트

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

간단한 예제

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

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

object? result = UO.DressSpeed();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));

1. DressSpeed - 1 - 직접 스크립트

매개변수와 실행 흐름:

  • 현재 일시 정지를 읽고 다음 세트의 최소값을 선택하십시오. 0는 아직 설정되지 않은 지연을 의미합니다.
var delay = UO.DressSpeed();
if (Truth(delay < 350))
{
    UO.DressSpeed(350);
}
return UO.DressSpeed();

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

2. DressSpeed — 2 — 스크립트 기능

매개변수와 실행 흐름:

  • 350 ms 로 설정하고 저장된 값을 별도로 확인합니다. setter의 결과를 변수에 할당할 수 없습니다. setter는 단위를 반환합니다.
return  RunScenario();
 object? RunScenario()
{
    UO.DressSpeed(350);
    return UO.DressSpeed();
    return null;
}

3. DressSpeed - 3 - 시나리오 수업

매개변수와 실행 흐름:

  • ConfigureDressDelay는 스크립트 설정을 수락합니다. 15000는 10000ms로 제한됩니다. 도우미는 실제 저장된 밀리초를 반환합니다.
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()
    {
        return ConfigureDressDelay(15000);
        return null;
    }

    dynamic ConfigureDressDelay(dynamic requested)
    {
        UO.DressSpeed(requested);
        return UO.DressSpeed();
    }
}

명령 구현

C#은 대소문자를 구분합니다. 정확한 UO 이름을 사용하세요. 숫자 플래그는 0과 비교하고 반환 형식이 bool일 때만 bool을 사용하세요.

UO.DressSpeed() — UO.DressSpeed()

매개변수: 매개변수가 없습니다.

결과: dynamic / Any.

호출 시:

내부 구현 코드이며 독립 스크립트로 실행할 수 없습니다.

case "dressspeed":

                    if (arguments.Length > 0) { SetDressSpeed(Arg(0)); return InjectionValue.Unit; }

                    return new InjectionValue(state.DressSpeed);

UO.DressSpeed(value) — UO.DressSpeed(Any)

매개변수: value (Any)

결과: dynamic / Any.

호출 시:

내부 구현 코드이며 독립 스크립트로 실행할 수 없습니다.

case "dressspeed":

                    if (arguments.Length > 0) { SetDressSpeed(Arg(0)); return InjectionValue.Unit; }

                    return new InjectionValue(state.DressSpeed);

UO.EnergyResist

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

C# 시그니처

int UO.EnergyResist();

현재 캐릭터의 저항장인 에너지를 읽습니다.

매개변수

매개변수가 없습니다.

반환값

int는 클라이언트 모델의 서명된 상태 값, -32768..32767입니다. 음수 값이 유지됩니다. 0는 실제 저항, 데이터 부족 또는 플레이어 누락/파괴일 수 있습니다. GetResist는 알 수 없는 선택기에 대해 0도 제공합니다. bool, ID, 스킬 한계나 저항 한계가 아닙니다. 1는 성공이 아닌 1점을 의미합니다.

동작

  • 이 명령은 인수를 사용하지 않습니다. 위의 정확한 서명을 사용하세요.
  • 게임 스레드에서 읽으면 Player가 필요합니다.EnergyResistance 현재 플레이어가 존재하고 파괴되지 않은 경우; 그렇지 않으면 0. 장비가 정렬되지 않고, 보너스가 다시 계산되지 않으며, 상태가 요청되지 않으며, 업데이트를 기다리지 않습니다. 현재 유령은 파괴된 플레이어와 동일하지 않습니다.
  • 요소 필드는 확장된 CharacterStatus (0x11), type >= 4로 제공됩니다. 명령 자체는 서버 시대를 확인하지 않습니다. 이러한 필드가 없는 압축/이전 상태는 이전 캐시를 그대로 유지합니다. 새 플레이어는 처음에는 0입니다. 독 저항은 Poisoned 플래그가 아닙니다. 또한 주문 저항 스킬도 아닙니다.
  • CharacterStatus는 이름, 체력, 자신의 특성을 변경하기 전에 필요한 신체를 확인한 다음 각 저항 단어를 서명된 Int16으로 변환합니다. 잘린 필수 본문은 이전 데이터를 변경하지 않습니다. 선택적 꼬리 type 6는 동일한 규칙을 유지합니다. 저항 명령은 최대 한계를 읽지 않습니다.
  • 호출할 때마다 로컬 데이터를 새로 읽습니다. 변수는 스냅샷을 저장합니다. 개별 읽기는 다른 서버 업데이트를 받을 수 있습니다. 0이 아닌 결과는 연결을 테스트하지 않습니다. 0은 값일 수도 있고 데이터가 없을 수도 있습니다.
  • 이 함수들은 API를 등록합니다. 명령을 호출할 때마다 다시 실행되지 않습니다. C#은 대소문자를 구분합니다. 정확한 UO 이름을 사용하세요. 숫자 플래그는 0과 비교하고 반환 형식이 bool일 때만 bool을 사용하세요.

독립 실행 C# 스크립트

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

간단한 예제

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

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

var result = UO.EnergyResist();
UO.Print("EnergyResist: " + Convert.ToString(result));

1. 저장된 값 인쇄 - 직접 스크립트

매개변수와 실행 흐름:

  • 값은 한 번의 호출 결과를 저장합니다. Convert.ToString는 로그 번호의 형식을 지정합니다. 논쟁은 없습니다. 자신의 성격을 읽을 수 있습니다.
var value = UO.EnergyResist();
UO.Print("EnergyResistance: " + Convert.ToString(value));

2. 두 이미지 비교 - 스크립트 기능

매개변수와 실행 흐름:

  • 전후 사이에는 UO.Wait(500) 밀리초가 있습니다. 차이는 음수가 될 수 있습니다. 중간 업데이트가 누락될 수 있습니다. 일시 정지는 지연 API이 아닌 예를 나타냅니다.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    var before = UO.EnergyResist();
    await Delay(500);
    var after = UO.EnergyResist();
    var difference = after - before;
    UO.Print("Resistance change: " + Convert.ToString(difference));
    return null;
}

Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));

3. 최소 저항 테스트 기능 완료 - 스크립트 클래스

매개변수와 실행 흐름:

  • 최소=50는 클라이언트 제한이 아닌 요구 사항의 예입니다. ResistanceAtLeast는 누락된 플레이어를 거부하고 하나의 값을 읽고 bool를 반환합니다: true 또는 값 >= 최소인 경우 false. 저항 자체는 bool가 아닙니다. 함수는 아래에 완전히 선언되어 있습니다.
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        if (Truth(Truth(ResistanceAtLeast(50)) == true))
        {
            UO.Print("Local resistance requirement met");
        }
        else
        {
            UO.Print("Requirement not met or no player");
        }

        return null;
    }

    dynamic ResistanceAtLeast(dynamic minimum)
    {
        if (Truth(UO.Self() == 0))
        {
            return false;
        }

        var value = UO.EnergyResist();
        return value >= minimum;
    }

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

명령 구현

C#은 대소문자를 구분합니다. 정확한 UO 이름을 사용하세요. 숫자 플래그는 0과 비교하고 반환 형식이 bool일 때만 bool을 사용하세요.

UO.EnergyResist() — UO.EnergyResist()

매개변수: 매개변수가 없습니다.

결과: int / Integer.

호출 시:

내부 구현 코드이며 독립 스크립트로 실행할 수 없습니다.

case "energyresist": return new InjectionValue(bridge.EnergyResistance);

UO.Equip

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

C# 시그니처

int UO.Equip(object? layer, object? id);

선택한 아이템을 캐릭터의 지정된 레이어에 장착합니다.

매개변수

  • layer - 레이어 번호(예: 1 - 오른쪽, 2 - 왼쪽) Equip 및 Unequip도 "Rhand"와 같은 레이어 이름을 허용합니다. WearItem는 숫자 레이어를 사용합니다. 레이어는 아이템의 웨어러블 레이어와 일치해야 합니다. graphic도 아니고 ID도 아닙니다.
  • id - 로드된 특정 항목의 ID: 정수, 16진수 문자열, "lasttarget" 또는 이름 AddObject. 이것은 type가 아닙니다. 0x0F5E가 먼저 graphic의 검을 찾고 ID로 가져오는 예입니다.

반환값

숫자 플래그 int: 1 (조건 충족) - 로컬 작업 허용, 0 (조건 충족 안 됨) - 거부. 이는 서버 확인도 아니고 ID도 아니고, 수량도 아닙니다. 나중에 서버가 실패할 수 있습니다. 답변 후 실제 장비를 확인하세요.

명령의 결과는 숫자 플래그입니다. 1는 충족된 조건을 의미하고, 0는 충족되지 않은 조건을 의미합니다. var result = command(...) 후에 (결과 != 0) 또는 (결과 == 0)인지 확인하세요. 한 번의 호출 결과를 저장합니다. 반복된 호출을 통해 해당 작업을 다시 수행하거나 이미 변경된 상태를 읽을 수 있습니다.

동작

  • 로드된 항목과 자유로운 손 드래그가 필요합니다. 제거할 때는 실제 배낭 self가 필요하며 예비 배낭 GrabBag은 사용되지 않습니다. 알 수 없거나 파손되었거나 부적합한 품목은 거부됩니다. 다른 사람의 항목은 UnequipItems를 통해 제거할 수 없습니다. 세트는 원자성 트랜잭션이 아닙니다.
  • EquipItems/UnequipItems는 승인된 작업 이후 다음 요소 이전에 DressSpeed를 적용합니다. Disarm/Undress - 각 점유 레이어 다음. 출금은 캐리가 허용되는 경우 DropDelay를 추가로 존중합니다. 다른 런타임의 동일한 설정은 변경되지 않습니다. 가속은 서버 제한을 ​​무시하지 않습니다.
  • 잘못된 호출 형식, 알 수 없는 레이어 이름 또는 숫자로 변환할 수 없는 값으로 인해 0 대신 스크립트 오류가 발생할 수 있습니다. 장비 스냅샷에는 이미 로드된 데이터만 포함됩니다. 어시스턴트에서는 ChangeAndConfirm 레이어=1가 오른손입니다. 또 다른 점은 실제 레이어를 전달하는 것입니다.
  • UO.EquipItems · UO.UnequipItems · UO.DressSpeed · UO.DropDelay · UO.ObjAtLayerEx

독립 실행 C# 스크립트

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

간단한 예제

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

int item = UO.LastTarget();
if (item != 0)
    UO.Print("Accepted flag: " + UO.Equip(1, item));

1. Equip - 하나의 선택된 항목 또는 레이어 - 직접 스크립트

매개변수와 실행 흐름:

  • 먼저, 게임에서 적절한 항목을 선택하세요: lasttarget - ID. Equip/WearItem 예에서 1 레이어에는 보조 무기가 필요합니다. Unequip(1)는 오른손을 제거합니다. Disarm/Undress 자체 고정 레이어를 사용하여 작동합니다. 거절 후에는 자동 재생이 되지 않습니다.
var item = Asc(UO.GetSerial("lasttarget"), 0);
if (Truth(item == 0))
{
    return 0;
}
return UO.Equip(1, item);

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;

2. Equip - 두 개의 항목을 저장하고 ID - 스크립트 기능

매개변수와 실행 흐름:

  • 장착 방법에 있어서 0x0F5E는 검의 예시이고, 0x1B76는 방패의 예시입니다. FindType는 배낭에 로드된 항목 중에서 해당 항목을 찾고, ASC는 반환된 16진수-ID를 변환합니다. 제거하려면 현재 레이어를 읽어야 합니다. 필요한 항목을 사용할 수 없으면 스크립트가 종료됩니다. 배열은 두 개의 ID를 저장합니다. 각 항목은 완전히 전송됩니다.
return  RunScenario();
 object? RunScenario()
{
    var first = Asc(UO.FindType(0x0F5E, -1, "backpack"), 0);
    var second = Asc(UO.FindType(0x1B76, -1, "backpack"), 0);
    if (Truth(first == 0) || Truth(second == 0))
    {
        return 0;
    }

    UO.AddObject("saved_first", first);
    UO.AddObject("saved_second", second);
    var firstOk = UO.Equip(1, first);
    var secondOk = UO.Equip(2, second);
    return firstOk != 0 && secondOk != 0;
    return null;
}

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;

3. Equip - 대기가 제한된 전체 기능 - 스크립트 클래스

매개변수와 실행 흐름:

  • ChangeAndConfirm는 명령을 한 번 실행합니다. 그런 다음 100ms의 일시 중지를 통해 최대 20회까지 실제 상태를 확인합니다. 1 - 검사 결과 예상 상태가 확인되었습니다. 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 item = Asc(UO.GetSerial("lasttarget"), 0);
        if (Truth(item == 0))
        {
            return 0;
        }

        return ChangeAndConfirm(1, item);
        return null;
    }

    dynamic ChangeAndConfirm(dynamic layer, dynamic item)
    {
        if (Truth(item == 0))
        {
            return 0;
        }

        if (!(Truth(UO.Equip(layer, item))))
        {
            return 0;
        }

        for (int attempt = (int)(1); attempt <= 20; attempt += (int)(1))
        {
            if (Truth(UO.ObjAtLayerEx(layer, UO.Self()) == item))
            {
                return 1;
            }

            UO.Wait(100);
        }

        return 0;
    }

    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;
}

명령 구현

C#은 대소문자를 구분합니다. 정확한 UO 이름을 사용하세요. 숫자 플래그는 0과 비교하고 반환 형식이 bool일 때만 bool을 사용하세요.

UO.Equip(layer, id) — UO.Equip(Any,Any)

매개변수: layer (Any/String), id (Any/Integer/String)

결과: int / Any.

호출 시:

내부 구현 코드이며 독립 스크립트로 실행할 수 없습니다.

case "equip":

                    return new InjectionValue(arguments[0].Kind == InjectionValueKind.String ? Equip(Text(0), Arg(1)) : bridge.Equip(Arg(0), Arg(1)));

UO.Equip(layer, id) — UO.Equip(String,Integer)

매개변수: layer (Any/String), id (Any/Integer/String)

결과: int / Integer.

호출 시:

내부 구현 코드이며 독립 스크립트로 실행할 수 없습니다.

public int Equip(string layer, int id) => bridge.Equip(ConvertLayer(layer), id);

UO.Equip(layer, id) — UO.Equip(String,String)

매개변수: layer (Any/String), id (Any/Integer/String)

결과: int / Integer.

호출 시:

내부 구현 코드이며 독립 스크립트로 실행할 수 없습니다.

public int Equip(string layer, string id) => Equip(layer, GetObject(id));

UO.EquipDressSet

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

C# 시그니처

dynamic UO.EquipDressSet();

대체 이름 DressSavedSet: 이름이 지정되지 않은 동일한 옷 세트를 복원합니다.

매개변수

매개변수가 없습니다.

반환값

실제로 숫자 플래그 int: 1 (조건 충족) - 필요한 모든 요청이 로컬에서 승인되었거나 필요한 레이어가 이미 일치했습니다. 0 (조건이 충족되지 않음) - 전화 걸기, 연결 없음 또는 하나 이상의 요청이 거부되었습니다. 등록 object? 이것을 허용합니다 int. 이는 ID, 착용 아이템 개수, 서버 확인이 아닙니다.

명령의 결과는 숫자 플래그입니다. 1는 충족된 조건을 의미하고, 0는 충족되지 않은 조건을 의미합니다. var result = command(...) 후에 (결과 != 0) 또는 (결과 == 0)인지 확인하세요. 한 번의 호출 결과를 저장합니다. 반복된 호출을 통해 해당 작업을 다시 수행하거나 이미 변경된 상태를 읽을 수 있습니다.

동작

  • 의류: 레이어드 3,4,5,6,7,8,10,12,13,14,17,18,19,20,22,23,24. 무기: 1 및 2만 해당. 머리카락, 수염, 배낭, 동물, 은행은 이 세트에 포함되지 않습니다.
  • 이미 로드된 특정 serial 항목은 자체 레이어에 기록됩니다. 동일한 이름을 다시 저장하면 항목이 대체됩니다. 빈 레이어도 의미가 있습니다. 복원되면 해당 점유 레이어가 자체 백팩으로 해제됩니다. 따라서 저장된 완전히 비어 있는 세트는 해당 레이어에서 항목을 제거합니다.
  • 세트는 런타임 상태로 저장됩니다. 호출 자체는 파일을 생성하지 않으며 세트가 다른 프로필이나 새 런타임으로 전송된다는 것을 보장하지 않습니다. 먼저 원하는 세트를 사용된 상태로 저장합니다. 클라이언트의 일반 상태를 로드/저장하는 것은 별도의 메커니즘입니다.
  • 현재와 ​​저장된 ID 사이의 정확한 일치는 다시 사용되거나 발생하지 않고 건너뜁니다. 누락된 항목은 유사한 type로 대체되지 않습니다. 한 작업이 실패해도 성공한 작업이 취소되지 않으며 다른 작업의 시도를 방해하지 않습니다. 자동 롤백은 없습니다. 연결과 로드된 내용이 필요합니다. 제거하면 실제 배낭이 사용됩니다.
  • UO.Set("equipfordress", 0)는 아이템 사용 요청을 선택합니다(초기 모드). 0이 아닌 값 - 픽업/장착. 두 모드 모두에서 원하는 웨어러블 레이어를 확인합니다. 이미 착용한 아이템은 반복 사용으로 전환할 수 없습니다. DressSpeed은 요청 수락 이후 유효하며, 철회는 DropDelay를 추가로 존중합니다.
  • Dress 및 Arm는 실패 시에도 null를 반환합니다. 요청이 수락되었다는 메시지는 서버의 확인을 의미하지 않습니다. 착용에 따라 계속 진행하려면 기대치가 제한된 실제 레이어를 확인하세요.
  • UO.SetDress · UO.Dress · UO.DressSavedSet · UO.SetArm · UO.Arm · UO.DressSpeed

독립 실행 C# 스크립트

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

간단한 예제

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

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

object? result = UO.EquipDressSet();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));

1. 직접 사용 - 직접 스크립트

매개변수와 실행 흐름:

  • 필수 세트는 동일한 런타임 상태에서 이전에 저장되어야 합니다. 각 복원 직전에 SetDress/SetArm를 호출하지 마세요. 이렇게 하면 현재 항목으로 대상을 덮어쓰게 됩니다.
return UO.EquipDressSet();

2. 이름 및 쿼리 모드 - 스크립트 기능

매개변수와 실행 흐름:

  • 0이 아닌 장비는 픽업/장비를 선택합니다. 350 — 밀리초 DressSpeed. 이러한 설정은 예제 이후 런타임에도 유지됩니다. 제거 및 착용은 서버에서 결정됩니다.
return  RunScenario();
 object? RunScenario()
{
    UO.Set("equipfordress", 1);
    UO.DressSpeed(350);
    return UO.EquipDressSet();
    return null;
}

3. 완전한 도우미 스크립트 - 스크립트 클래스

매개변수와 실행 흐름:

  • lasttarget — ID 이전에 저장된 세트에 포함되어야 하는 항목입니다. 컨트롤 레이어 3는 신발을 의미하고, 1는 오른손을 의미합니다. AwaitSlot는 100 ms 일시 중지를 통해 최대 20 검사를 수행하고 명령을 반복하지 않습니다. 이는 전체 세트가 아닌 선택한 항목만 확인합니다.
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 expected = Asc(UO.GetSerial("lasttarget"), 0);
        if (Truth(expected == 0))
        {
            return 0;
        }

        if (!(Truth(UO.EquipDressSet())))
        {
            return 0;
        }

        return AwaitSlot(3, expected);
        return null;
    }

    dynamic AwaitSlot(dynamic layer, dynamic expected)
    {
        for (int attempt = (int)(1); attempt <= 20; attempt += (int)(1))
        {
            if (Truth(UO.ObjAtLayerEx(layer, UO.Self()) == expected))
            {
                return 1;
            }

            UO.Wait(100);
        }

        return 0;
    }

    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;
}

명령 구현

C#은 대소문자를 구분합니다. 정확한 UO 이름을 사용하세요. 숫자 플래그는 0과 비교하고 반환 형식이 bool일 때만 bool을 사용하세요.

UO.EquipDressSet() — UO.EquipDressSet()

매개변수: 매개변수가 없습니다.

결과: dynamic / Any.

호출 시:

내부 구현 코드이며 독립 스크립트로 실행할 수 없습니다.

case "dresssavedset":

                case "equipdressset": return new InjectionValue(Equip("__stealth_saved_set__", dressSets, dressLayers, "Clothing set requests processed.", "No clothing set with setdress."));

UO.EquipItems

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

C# 시그니처

dynamic UO.EquipItems(object? items);

하나의 아이템 또는 여러 아이템을 장착하세요. 각 아이템의 레이어는 웨어러블 데이터에 따라 결정되므로 백팩에도 착용할 수 있습니다.

매개변수

  • items - 필수 ID 또는 항목 배열 ID. 배열 요소는 숫자 또는 숫자형 16진수 문자열입니다. 단일 인수에는 "lasttarget"/name AddObject도 허용됩니다. 배열의 경우 인덱스 0 및 1에 있는 두 요소에 대해 변수 선언 항목[1]을 사용합니다. 레이어 번호나 type가 아닌 사물이 전송됩니다.

반환값

숫자 플래그 int: 1 (조건 충족) - 로컬 작업 허용, 0 (조건 충족 안 됨) - 거부. 이는 서버 확인도 아니고 ID도 아니고, 수량도 아닙니다. 나중에 서버가 실패할 수 있습니다. 답변 후 실제 장비를 확인하세요.

명령의 결과는 숫자 플래그입니다. 1는 충족된 조건을 의미하고, 0는 충족되지 않은 조건을 의미합니다. var result = command(...) 후에 (결과 != 0) 또는 (결과 == 0)인지 확인하세요. 한 번의 호출 결과를 저장합니다. 반복된 호출을 통해 해당 작업을 다시 수행하거나 이미 변경된 상태를 읽을 수 있습니다.

동작

  • 로드된 항목과 자유로운 손 드래그가 필요합니다. 제거할 때는 실제 배낭 self가 필요하며 예비 배낭 GrabBag은 사용되지 않습니다. 알 수 없거나 파손되었거나 부적합한 품목은 거부됩니다. 다른 사람의 항목은 UnequipItems를 통해 제거할 수 없습니다. 세트는 원자성 트랜잭션이 아닙니다.
  • EquipItems/UnequipItems는 승인된 작업 이후 다음 요소 이전에 DressSpeed를 적용합니다. Disarm/Undress - 각 점유 레이어 다음. 출금은 캐리가 허용되는 경우 DropDelay를 추가로 존중합니다. 다른 런타임의 동일한 설정은 변경되지 않습니다. 가속은 서버 제한을 ​​무시하지 않습니다.
  • 잘못된 호출 형식, 알 수 없는 레이어 이름 또는 숫자로 변환할 수 없는 값으로 인해 0 대신 스크립트 오류가 발생할 수 있습니다. 장비 스냅샷에는 이미 로드된 데이터만 포함됩니다. 어시스턴트에서는 ChangeAndConfirm 레이어=1가 오른손입니다. 또 다른 점은 실제 레이어를 전달하는 것입니다.
  • 배열의 경우 1는 나열된 모든 작업이 허용됨을 의미합니다. 거부하는 경우 0가 반환됩니다. 나머지 요소는 계속 처리되며 롤백은 없습니다. 빈 배열은 아무런 작업 없이 1를 생성합니다. Disarm/Undress 필요한 레이어가 이미 비어 있는 경우에도 1를 제공합니다. 부분적인 실패는 0를 제공합니다.
  • UO.EquipItems · UO.UnequipItems · UO.DressSpeed · UO.DropDelay · UO.ObjAtLayerEx

독립 실행 C# 스크립트

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

간단한 예제

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

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

object? result = UO.EquipItems(UO.LastTarget());
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));

1. EquipItems - 하나의 선택된 항목 또는 레이어 - 직접 스크립트

매개변수와 실행 흐름:

  • 먼저, 게임에서 적절한 항목을 선택하세요: lasttarget - ID. Equip/WearItem 예에서 1 레이어에는 보조 무기가 필요합니다. Unequip(1)는 오른손을 제거합니다. Disarm/Undress 자체 고정 레이어를 사용하여 작동합니다. 거절 후에는 자동 재생이 되지 않습니다.
var item = Asc(UO.GetSerial("lasttarget"), 0);
if (Truth(item == 0))
{
    return 0;
}
return UO.EquipItems(item);

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;

2. EquipItems - 두 개의 항목 및 저장됨 ID - 스크립트 기능

매개변수와 실행 흐름:

  • 장착 방법에 있어서 0x0F5E는 검의 예시이고, 0x1B76는 방패의 예시입니다. FindType는 배낭에 로드된 항목 중에서 해당 항목을 찾고, ASC는 반환된 16진수-ID를 변환합니다. 제거하려면 현재 레이어를 읽어야 합니다. 필요한 항목을 사용할 수 없으면 스크립트가 종료됩니다. 배열은 두 개의 ID를 저장합니다. 각 항목은 완전히 전송됩니다.
return  RunScenario();
 object? RunScenario()
{
    var first = Asc(UO.FindType(0x0F5E, -1, "backpack"), 0);
    var second = Asc(UO.FindType(0x1B76, -1, "backpack"), 0);
    if (Truth(first == 0) || Truth(second == 0))
    {
        return 0;
    }

    UO.AddObject("saved_first", first);
    UO.AddObject("saved_second", second);
    dynamic[] items = new dynamic[checked((int)(1) + 1)];
    items[0] = first;
    items[1] = second;
    return UO.EquipItems(items);
    return null;
}

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;

3. EquipItems - 대기가 제한된 전체 기능 - 스크립트 클래스

매개변수와 실행 흐름:

  • ChangeAndConfirm는 명령을 한 번 실행합니다. 그런 다음 100ms의 일시 중지를 통해 최대 20회까지 실제 상태를 확인합니다. 1 - 검사 결과 예상 상태가 확인되었습니다. 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 item = Asc(UO.GetSerial("lasttarget"), 0);
        if (Truth(item == 0))
        {
            return 0;
        }

        return ChangeAndConfirm(1, item);
        return null;
    }

    dynamic ChangeAndConfirm(dynamic layer, dynamic item)
    {
        if (Truth(item == 0))
        {
            return 0;
        }

        if (!(Truth(UO.EquipItems(item))))
        {
            return 0;
        }

        for (int attempt = (int)(1); attempt <= 20; attempt += (int)(1))
        {
            if (Truth(UO.ObjAtLayerEx(layer, UO.Self()) == item))
            {
                return 1;
            }

            UO.Wait(100);
        }

        return 0;
    }

    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;
}

명령 구현

C#은 대소문자를 구분합니다. 정확한 UO 이름을 사용하세요. 숫자 플래그는 0과 비교하고 반환 형식이 bool일 때만 bool을 사용하세요.

UO.EquipItems(items) — UO.EquipItems(Any)

매개변수: items (Any)

결과: dynamic / Any.

호출 시:

내부 구현 코드이며 독립 스크립트로 실행할 수 없습니다.

case "equipitems":

                    return new InjectionValue(ChangeEquipmentItems(ArrayArg(0), true));

UO.EquipLastWeapon

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

C# 시그니처

void UO.EquipLastWeapon();

마지막으로 저장된 오른손, 왼손 아이템의 재장착을 요청합니다.

매개변수

매개변수가 없습니다.

반환값

void - 반환 값이 없습니다.

동작

  • Bridge는 _lastRightHand 및 _lastLeftHand를 저장합니다. 0이 아닌 오른쪽 serial는 Equip(OneHanded), 0이 아닌 왼쪽은 Equip(TwoHanded)로 전송됩니다. 빈 항목은 건너뜁니다. 이는 서버에 의한 원자 확인 복구가 아닌 두 가지 가능한 요청입니다.

독립 실행 C# 스크립트

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

간단한 예제

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

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

UO.Print("Calling UO.EquipLastWeapon");
UO.EquipLastWeapon();

1. 무기 복원 - 직접 스크립트

매개변수와 실행 흐름:

  • 저장된 브릿지 serial 손만 사용됩니다.
UO.EquipLastWeapon();

2. 연결이 있는 경우 - 스크립트 기능

매개변수와 실행 흐름:

  • 요청이 전송되기 전에 연결 테스트가 수행됩니다.
return  RunScenario();
 object? RunScenario()
{
    if (Truth(UO.Connected()))
    {
        UO.EquipLastWeapon();
    }

    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  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()
    {
        RestoreWeapons();
        return null;
    }

    void RestoreWeapons()
    {
        UO.EquipLastWeapon();
    }
}

명령 구현

C#은 대소문자를 구분합니다. 정확한 UO 이름을 사용하세요. 숫자 플래그는 0과 비교하고 반환 형식이 bool일 때만 bool을 사용하세요.

UO.EquipLastWeapon() — UO.EquipLastWeapon()

매개변수: 매개변수가 없습니다.

결과: void / Unit.

호출 시:

내부 구현 코드이며 독립 스크립트로 실행할 수 없습니다.

case "equiplastweapon": bridge.EquipLastWeapon(); return InjectionValue.Unit;

UO.EquipT

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

C# 시그니처

void UO.EquipT(object? layer, object? @type);

매개변수

  • layer — 장비 레이어. "Rhand" 줄은 오른손(1)이고, "Lhand"는 왼손(2)입니다. 숫자도 허용됩니다. 인식된 모든 이름은 레이어 테이블에 나열됩니다. 문자열 "1"은 숫자 1를 대체하지 않습니다. 알 수 없는 문자열 이름으로 인해 오류가 발생합니다. 사물 자체의 실제 레이어를 선택합니다. 명령은 유효한 슬롯을 변경하지 않습니다.
  • type - 하나의 graphic 항목(예: 0x0F51) - 단검. 그것은 특정 사물의 serial도 아니고 신체 mobile의 graphic도 아닙니다. 숫자 또는 숫자 16진수 문자열입니다. 색상이 지정되지 않았습니다. hue가 검색됩니다. 검색에는 배낭에 로드된 하위 컨테이너가 반복적으로 포함됩니다. -1/0xFFFF 여기서 와일드카드 검색은 무기 선택에 거의 쓸모가 없으므로 레이어와 일치하지 않는 첫 번째 항목이 선택됩니다.

반환값

void: 이 C# 형식은 값을 반환하지 않습니다. 호출을 변수에 할당하지 말고 if에서 사용하지 마세요. 두 개의 정수 인수를 사용하여 요청 수락을 테스트하려면 UO.Equipt을 사용하세요. 두 경우 모두 ObjAtLayer, GetType를 통해 서버가 응답한 후 실제 장비를 확인합니다.

동작

  • 두 인수가 모두 필요합니다. 먼저 FindType가 배낭에서 항목을 찾은 다음 Equip가 적합성을 확인합니다. 검색은 전체 결과 FindItem/FindCount/GetFoundItems를 업데이트합니다. 일치하는 항목이 여러 개인 경우 검색에 적합한 첫 번째 항목이 선택됩니다. 품질이나 hue, 이름은 별도로 선택하실 수 없습니다.
  • 클라이언트는 웨어러블 플래그, 아이템의 실제 레이어(1..29) 및 리프팅 능력을 확인합니다. 항목을 로드해야 합니다. 서버는 착용 허용 여부를 추가로 결정합니다. 수락된 로컬 요청이 성공을 증명하지는 않습니다.
  • 항목이 누락된 경우 void 양식에 항목을 찾을 수 없습니다.라는 메시지가 표시됩니다. 숫자 형식은 0을 반환합니다. 색상/serial별로 특정 항목을 선택해야 하는 경우 FindType와 Equip를 구분하여 사용하세요. UO.Equip는 찾은 항목의 ID를 가져옵니다.
  • 응답을 기다리는 동안 동시에 다른 항목 전송을 시작하지 마십시오. 동작을 끝없이 반복하기보다는 레이어의 변화를 확인해보세요.

독립 실행 C# 스크립트

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

간단한 예제

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

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

UO.Print("Calling UO.EquipT");
UO.EquipT("Rhand", 0x0F51);

1. 문자열 레이어 이름으로 단검 장착 - 직접 스크립트

매개변수와 실행 흐름:

  • Rhand 라인은 오른쪽 레이어를 선택합니다. 단검은 짐을 실은 배낭에 넣어 접근할 수 있어야 합니다. 모든 색상; 인수의 수는 항상 2입니다.
if (Truth(UO.Connected()))
{
    UO.EquipT("Rhand", 0x0F51);
}

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

2. 번호 양식 오류 처리 - 스크립트 기능

매개변수와 실행 흐름:

  • 1 - 레이어, 0x0F51 - type. 문자열 C# 형식 EquipT는 void를 반환합니다. 요청의 수락 여부는 결과로 확인할 수 없습니다. 300 ms - 예를 들어 잠시 기다리세요. 이후에 아무것도 없다고 해서 확실한 서버 오류가 입증되지는 않습니다.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    UO.EquipT("Rhand", 0x0F51);
    await Delay(300);
    var worn = UO.ObjAtLayer(1);
    if (Truth(worn != 0) && Truth(UO.GetType(worn) == 0x0F51))
    {
        UO.AddObject("equipped_dagger", worn);
    }

    return null;
}

Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

3. 전체 기능: 원하는 type를 착용하고 기다립니다 - 시나리오 수업

매개변수와 실행 흐름:

  • timeoutMs=2000는 최대 대기 시간을 밀리초 단위로 지정합니다. 50ms마다 확인하면 재장비가 전송되지 않습니다. 이 사용자 정의 기능의 true는 클라이언트가 이미 레이어에서 원하는 type를 보고 있음을 의미합니다. 이는 반환된 Equipt 요청 수락보다 더 강력한 확인입니다.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

    async public Task<object?> RunScenarioAsync()
    {
        if (Truth(UO.Connected()) && !(Truth(await EnsureDagger(2000))))
        {
            UO.Print("Dagger was not confirmed within the timeout");
        }

        return null;
    }

    async Task<dynamic> EnsureDagger(dynamic timeoutMs)
    {
        var worn = UO.ObjAtLayer(1);
        if (Truth(worn != 0) && Truth(UO.GetType(worn) == 0x0F51))
        {
            return true;
        }

        UO.EquipT("Rhand", 0x0F51);
        var started = Now();
        while (Truth(Now() - started < timeoutMs))
        {
            await Delay(50);
            worn = UO.ObjAtLayer(1);
            if (Truth(worn != 0) && Truth(UO.GetType(worn) == 0x0F51))
            {
                return true;
            }
        }

        return false;
    }

    Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
    bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
    private int Now() => global::ClassicUO.CSharp.CSharpScriptContext.Current.Now();
}

명령 구현

C#은 대소문자를 구분합니다. 정확한 UO 이름을 사용하세요. 숫자 플래그는 0과 비교하고 반환 형식이 bool일 때만 bool을 사용하세요.

UO.EquipT(layer, type) — UO.EquipT(Any,Any)

매개변수: layer (Any), type (Any)

결과: void / Unit.

호출 시:

내부 구현 코드이며 독립 스크립트로 실행할 수 없습니다.

public void EquipT(InjectionValue layer, InjectionValue type)

        {

            var obj = bridge.FindType(ResolveType(type), -1, bridge.Backpack, -1, true);

            if (obj == 0)

            {

                SystemMessage("No item found.");

                return;

            }



            if (layer.Kind == InjectionValueKind.String)

                Equip(layer.String, obj);

            else

                bridge.Equip(NumberConversions.ToInt(layer), obj);

        }

UO.Equipt

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

C# 시그니처

int UO.Equipt(object? layer, object? @type);

매개변수

  • layer / 레이어 - 장비 레이어의 정수입니다. 오른손 - 1, 왼쪽 - 2. 실제 아이템 슬롯을 선택하세요.
  • type / type - 아이템의 전체 graphic(예: 단검의 경우 0x0F51). 이것은 serial가 아닙니다. 배낭과 중첩된 컨테이너에 적재된 내용물에서 hue를 검색합니다.

반환값

이 C# 양식은 int를 반환합니다. 클라이언트가 복장 요청을 수락한 경우 1, 그렇지 않은 경우 0를 반환합니다. 두 개의 정수(레이어 번호 및 graphic)를 전달합니다. 문자열 값은 다른 런타임 계약을 선택하므로 이 형식에는 적합하지 않습니다. 호출은 서버 확인을 기다리지 않습니다. 문자열 레이어 이름의 경우 UO.EquipT를 사용하면 void가 반환됩니다.

동작

  • 두 인수가 모두 필요합니다. 먼저 FindType가 배낭에서 항목을 찾은 다음 Equip가 적합성을 확인합니다. 검색은 전체 결과 FindItem/FindCount/GetFoundItems를 업데이트합니다. 일치하는 항목이 여러 개인 경우 검색에 적합한 첫 번째 항목이 선택됩니다. 품질이나 hue, 이름은 별도로 선택하실 수 없습니다.
  • 클라이언트는 웨어러블 플래그, 아이템의 실제 레이어(1..29) 및 리프팅 능력을 확인합니다. 항목을 로드해야 합니다. 서버는 착용 허용 여부를 추가로 결정합니다. 수락된 로컬 요청이 성공을 증명하지는 않습니다.
  • 항목이 누락된 경우 null 양식에 항목을 찾을 수 없습니다.라는 메시지가 표시됩니다. 숫자 형식은 0을 반환합니다. 색상/serial별로 특정 항목을 선택해야 하는 경우 FindType와 Equip를 구분하여 사용하세요. UO.Equip는 찾은 항목의 ID를 가져옵니다.
  • 응답을 기다리는 동안 동시에 다른 항목 전송을 시작하지 마십시오. 동작을 끝없이 반복하기보다는 레이어의 변화를 확인해보세요.

독립 실행 C# 스크립트

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

간단한 예제

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

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

var result = UO.Equipt(1, 0x0F51);
UO.Print("Equipt: " + Convert.ToString(result));

1. graphic로 단검 장비 요청 - 직접 스크립트

매개변수와 실행 흐름:

  • 두 인수는 모두 정수입니다(단검의 레이어 1 및 graphic). 1 값은 서버가 아닌 클라이언트가 요청을 수락했음을 확인합니다.
int accepted = UO.Equipt(1, 0x0F51);
UO.Print(accepted != 0 ? "Equip request accepted locally" : "Equip request not accepted");

2. 요청 후 슬롯 확인 - 스크립트 기능

매개변수와 실행 흐름:

  • 기다리는 것은 확인을 대체하지 않습니다. 레이어의 실제 내용을 읽습니다. 스크립트는 전송을 끝없이 반복하지 않습니다.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    int accepted = UO.Equipt(1, 0x0F51);
    if (accepted == 0)
        return false;
    await WaitAsync(300);
    int worn = UO.ObjAtLayer(1);
    return worn != 0 && UO.GetType(worn) == 0x0F51;
    return null;
}

3. 필수아이템이 없을 때만 착용 - 시나리오 수업

매개변수와 실행 흐름:

  • 먼저 현재 장비를 확인합니다. 한 번의 요청 이후에는 확인 시도가 20번으로 제한됩니다.
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()
    {
        return await EnsureDagger();
        return null;
    }

    async Task<bool> EnsureDagger()
    {
        int current = UO.ObjAtLayer(1);
        if (current != 0 && UO.GetType(current) == 0x0F51)
            return true;
        if (UO.Equipt(1, 0x0F51) == 0)
            return false;
        for (int attempt = 0; attempt < 20; attempt++)
        {
            await WaitAsync(100);
            current = UO.ObjAtLayer(1);
            if (current != 0 && UO.GetType(current) == 0x0F51)
                return true;
        }

        return false;
    }
}

명령 구현

C#은 대소문자를 구분합니다. 정확한 UO 이름을 사용하세요. 숫자 플래그는 0과 비교하고 반환 형식이 bool일 때만 bool을 사용하세요.

UO.Equipt(layer, type) — UO.Equipt(Integer,Integer)

매개변수: layer (Integer), type (Integer)

결과: int / Integer.

호출 시:

내부 구현 코드이며 독립 스크립트로 실행할 수 없습니다.

public int Equipt(int layer, int type)

        {

            int item = bridge.FindType(type, -1, bridge.Backpack, -1, true);

            return item == 0 ? 0 : bridge.Equip(layer, item);

        }

UO.FireResist

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

C# 시그니처

int UO.FireResist();

현재 캐릭터의 저항 필드인 불을 읽습니다.

매개변수

매개변수가 없습니다.

반환값

int는 클라이언트 모델의 서명된 상태 값, -32768..32767입니다. 음수 값이 유지됩니다. 0는 실제 저항, 데이터 부족 또는 플레이어 누락/파괴일 수 있습니다. GetResist는 알 수 없는 선택기에 대해 0도 제공합니다. bool, ID, 스킬 한계나 저항 한계가 아닙니다. 1는 성공이 아닌 1점을 의미합니다.

동작

  • 이 명령은 인수를 사용하지 않습니다. 위의 정확한 서명을 사용하세요.
  • 게임 스레드에서 읽으면 Player가 필요합니다.FireResistance 현재 플레이어가 존재하고 파괴되지 않은 경우; 그렇지 않으면 0. 장비가 정렬되지 않고, 보너스가 다시 계산되지 않으며, 상태가 요청되지 않으며, 업데이트를 기다리지 않습니다. 현재 유령은 파괴된 플레이어와 동일하지 않습니다.
  • 요소 필드는 확장된 CharacterStatus (0x11), type >= 4로 제공됩니다. 명령 자체는 서버 시대를 확인하지 않습니다. 이러한 필드가 없는 압축/이전 상태는 이전 캐시를 그대로 유지합니다. 새 플레이어는 처음에는 0입니다. 독 저항은 Poisoned 플래그가 아닙니다. 또한 주문 저항 스킬도 아닙니다.
  • CharacterStatus는 이름, 체력, 자신의 특성을 변경하기 전에 필요한 신체를 확인한 다음 각 저항 단어를 서명된 Int16으로 변환합니다. 잘린 필수 본문은 이전 데이터를 변경하지 않습니다. 선택적 꼬리 type 6는 동일한 규칙을 유지합니다. 저항 명령은 최대 한계를 읽지 않습니다.
  • 호출할 때마다 로컬 데이터를 새로 읽습니다. 변수는 스냅샷을 저장합니다. 개별 읽기는 다른 서버 업데이트를 받을 수 있습니다. 0이 아닌 결과는 연결을 테스트하지 않습니다. 0은 값일 수도 있고 데이터가 없을 수도 있습니다.
  • 이 함수들은 API를 등록합니다. 명령을 호출할 때마다 다시 실행되지 않습니다. C#은 대소문자를 구분합니다. 정확한 UO 이름을 사용하세요. 숫자 플래그는 0과 비교하고 반환 형식이 bool일 때만 bool을 사용하세요.

독립 실행 C# 스크립트

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

간단한 예제

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

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

var result = UO.FireResist();
UO.Print("FireResist: " + Convert.ToString(result));

1. 저장된 값 인쇄 - 직접 스크립트

매개변수와 실행 흐름:

  • 값은 한 번의 호출 결과를 저장합니다. Convert.ToString는 로그 번호의 형식을 지정합니다. 논쟁은 없습니다. 자신의 성격을 읽을 수 있습니다.
var value = UO.FireResist();
UO.Print("FireResistance: " + Convert.ToString(value));

2. 두 이미지 비교 - 스크립트 기능

매개변수와 실행 흐름:

  • 전후 사이에는 UO.Wait(500) 밀리초가 있습니다. 차이는 음수가 될 수 있습니다. 중간 업데이트가 누락될 수 있습니다. 일시 정지는 지연 API이 아닌 예를 나타냅니다.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    var before = UO.FireResist();
    await Delay(500);
    var after = UO.FireResist();
    var difference = after - before;
    UO.Print("Resistance change: " + Convert.ToString(difference));
    return null;
}

Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));

3. 최소 저항 테스트 기능 완료 - 스크립트 클래스

매개변수와 실행 흐름:

  • 최소=50는 클라이언트 제한이 아닌 요구 사항의 예입니다. ResistanceAtLeast는 누락된 플레이어를 거부하고 하나의 값을 읽고 bool를 반환합니다: true 또는 값 >= 최소인 경우 false. 저항 자체는 bool가 아닙니다. 함수는 아래에 완전히 선언되어 있습니다.
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        if (Truth(Truth(ResistanceAtLeast(50)) == true))
        {
            UO.Print("Local resistance requirement met");
        }
        else
        {
            UO.Print("Requirement not met or no player");
        }

        return null;
    }

    dynamic ResistanceAtLeast(dynamic minimum)
    {
        if (Truth(UO.Self() == 0))
        {
            return false;
        }

        var value = UO.FireResist();
        return value >= minimum;
    }

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

명령 구현

C#은 대소문자를 구분합니다. 정확한 UO 이름을 사용하세요. 숫자 플래그는 0과 비교하고 반환 형식이 bool일 때만 bool을 사용하세요.

UO.FireResist() — UO.FireResist()

매개변수: 매개변수가 없습니다.

결과: int / Integer.

호출 시:

내부 구현 코드이며 독립 스크립트로 실행할 수 없습니다.

case "fireresist": return new InjectionValue(bridge.FireResistance);

UO.Flying

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

C# 시그니처

int UO.Flying();
int UO.Flying(object? id);

캐릭터가 현재 날고 있는지 확인합니다. 이는 일반적으로 Gargoyle에 필요합니다. 예를 들어 경로를 시작하기 전이나 비행 활성화를 요청하기 전입니다. "내 캐릭터가 지금 날고 있나요?"라는 질문에 답합니다. 논쟁없이. 이 명령은 상태만 읽습니다. 비행, 착륙 또는 캐릭터 이동을 활성화하지 않습니다.

매개변수

  • id - 선택 사항 serial 문자: 숫자, 16진수 문자열, self, lasttarget 또는 UO.AddObject을 통해 저장된 이름. 인수가 없으면 귀하의 캐릭터가 사용됩니다. 이것은 특정 mobile의 ID이며, graphic/type도 아니고 Z의 좌표도 아닙니다. 알 수 없는 이름, 누락/제거된 mobile 또는 항목에 0이 표시됩니다.

반환값

숫자 플래그 int: 1(조건 충족), 0(조건 충족되지 않음). 이것은 숫자 플래그입니다: C#에서 결과를 확인하세요!= 0 또는 결과 == 0. int와 true/false 및 if(결과)를 직접 비교하는 것은 허용되지 않습니다. 1 - mobile에는 IsFlying이 있고, 0에는 플래그가 없거나 mobile가 없습니다. 고도 Z 자체가 비행을 의미하는 것은 아닙니다.

명령의 결과는 숫자 플래그입니다. 1는 충족된 조건을 의미하고, 0는 충족되지 않은 조건을 의미합니다. var result = command(...) 후에 (결과 != 0) 또는 (결과 == 0)인지 확인하세요. 한 번의 호출 결과를 저장합니다. 반복된 호출을 통해 해당 작업을 다시 수행하거나 이미 변경된 상태를 읽을 수 있습니다.

동작

  • 주요 게임 응용 프로그램은 가고일의 비행입니다. 그러나 getter는 경합을 확인하지 않습니다. 이 클라이언트에서는 프로토콜 버전 7.0.0.0 이상을 사용하여 mobile에서 0x04 비트를 읽습니다. 이전 프로토콜에서는 0를 반환합니다. 지붕 위에 서기, 높은 Z, 날개 애니메이션 또는 가고일 경주 자체는 비행이 가능하다는 증거가 아닙니다.
  • 상태 변경을 위한 별도의 UO.ToggleFly()가 있습니다. "켜기" 명령이 아닌 스위치 요청을 보냅니다. 이미 비행 중이라면 착륙을 요청하는 전화가 반복됩니다. 서버가 실패할 수 있습니다. 메시지가 표시된 후 제한적으로 기다리면서 Flying을 다시 읽으세요. false도 캐릭터/데이터가 없어도 가능하므로 액션 플레이 전 Connected를 확인하세요.
  • 로컬 모델을 읽습니다. 대상을 열지 않고, 상태를 요청하지 않으며, 플래그를 변경하지 않으며, 패킷을 보내지 않습니다. 삭제된 개체는 해당 항목이 사전에서 삭제되기 전에도 누락된 것으로 간주됩니다.
  • 결과는 별도의 독서입니다. Exists와 다음 도전 사이에 세상이 바뀔 수도 있습니다. 여러 쿼리는 원자성 스냅샷을 형성하지 않습니다.

독립 실행 C# 스크립트

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

간단한 예제

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

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

var result = UO.Flying();
UO.Print("Flying: " + Convert.ToString(result));

1. 다음 스크립트 단계 전 모드 확인 - 직접 스크립트

매개변수와 실행 흐름:

  • 빈 괄호는 self을 나타냅니다. true는 1와 같고, false는 0와 같습니다. UO.Flying() { ... }가 허용되는 경우. 이 예에서는 아무것도 전환하지 않습니다.
var active = UO.Flying();
if (Truth(Truth(active) == true))
{
    UO.Print("Flying mode active");
}
else
{
    UO.Print("Ground mode or character data unavailable");
}

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

2. 이전에 선택한 캐릭터 확인 - 스크립트 기능

매개변수와 실행 흐름:

  • ReadState(obj)는 serial/alias를 취하고 상태를 반환합니다. 전체 정의는 아래와 같습니다. 객체가 없으면 읽기 전에 처리됩니다. 다른 사람의 캐릭터도 클라이언트가 이미 받은 데이터와 비교하여 확인됩니다.
return  RunScenario();
 object? RunScenario()
{
    var target = Asc(UO.GetSerial("lasttarget"), 0);
    if (Truth(target != 0) && Truth(UO.Exists(target)))
    {
        if (Truth(ReadState(target)))
        {
            UO.AddObject("flying_mobile", target);
        }
    }

    return null;
}

dynamic ReadState(dynamic obj)
{
    if (!(Truth(UO.Exists(obj))))
    {
        return false;
    }

    return UO.Flying(obj);
}

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

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

3. 한 번 비행을 요청하고 결과를 기다리세요 - 시나리오 수업

매개변수와 실행 흐름:

  • 비행 지원 서버의 가고일에 대한 예입니다. EnsureFlight(timeoutMs)는 비행이 관찰되면 1/true를 반환하고, 그렇지 않으면 0/false를 반환합니다. 2000 — 대기 제한(밀리초); 50 ms마다 확인합니다. 이미 비행 중이라면 ToggleFly가 호출되지 않습니다. 최대 1개의 요청이 전송되면 응답 상태가 확인됩니다. 스크립트 일시 중지/스케줄러 지연으로 인해 실시간이 늘어날 수 있습니다.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

    async public Task<object?> RunScenarioAsync()
    {
        if (Truth(await EnsureFlight(2000)))
        {
            UO.Print("Flight confirmed; ready for the next stage");
        }
        else
        {
            UO.Print("Flight not confirmed; route was not started");
        }

        return null;
    }

    async Task<dynamic> EnsureFlight(dynamic timeoutMs)
    {
        if (!(Truth(UO.Connected())) || Truth(UO.Dead()))
        {
            return false;
        }

        if (Truth(UO.Flying()))
        {
            return true;
        }

        UO.ToggleFly();
        var waited = 0;
        while (Truth(waited < timeoutMs))
        {
            if (!(Truth(UO.Connected())))
            {
                return false;
            }

            if (Truth(UO.Flying()))
            {
                return true;
            }

            await Delay(50);
            waited += 50;
        }

        return UO.Flying();
    }

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

명령 구현

C#은 대소문자를 구분합니다. 정확한 UO 이름을 사용하세요. 숫자 플래그는 0과 비교하고 반환 형식이 bool일 때만 bool을 사용하세요.

UO.Flying() — UO.Flying()

매개변수: 매개변수가 없습니다.

결과: int / Integer.

호출 시:

내부 구현 코드이며 독립 스크립트로 실행할 수 없습니다.

public int Flying() => bridge.Flying(bridge.Self);

UO.Flying(id) — UO.Flying(Any)

매개변수: id (Any)

결과: int / Integer.

호출 시:

내부 구현 코드이며 독립 스크립트로 실행할 수 없습니다.

public int Flying(InjectionValue id) => bridge.Flying(GetObject(id));

UO.Frozen

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

C# 시그니처

int UO.Frozen();
int UO.Frozen(object? value);

클라이언트에 알려진 캐릭터의 마비 플래그를 확인합니다.

매개변수

  • value - 선택 사항 serial/ID mobile: 숫자, 16진수 문자열, self, lasttarget 또는 기타 표준 개체 이름 또는 AddObject 이름. 이것은 graphic/type이 아닙니다. 인수가 없으면 self가 사용됩니다. 알 수 없는 이름은 0에서 해결됩니다. 타겟이 열리지 않습니다.

반환값

숫자 플래그 int: 1 (조건 충족) - 로드됨 mobile에는 플래그 IsParalyzed이 있습니다. 0 (조건이 충족되지 않음) - 플래그 없음, mobile 알 수 없음, 삭제되었거나 개체가 항목입니다. 이는 마비 시간이 아니며 0 결과로 이동 능력을 보장하지 않습니다.

동작

  • 마비 플래그를 확인하려면 Paralyzed를 사용하세요. Is/Get, GetParalisa, Frozen 및 GetLocked 옵션은 동일한 플래그를 읽습니다.
  • 이 명령은 로컬 데이터만 읽습니다. 마비를 적용하거나 제거하지 않으며, 마비가 끝날 때까지 기다리지 않으며, 서버에 업데이트 요청을 보내지 않습니다.
  • 이 명령의 결과는 int 유형입니다. if (value != 0) 또는 if (value == 0)를 사용하세요. true/false 및 C#의 if (값)과의 직접 비교는 허용되지 않습니다. 값은 수량이나 ID이 아닌 플래그의 의미를 유지합니다.

독립 실행 C# 스크립트

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

간단한 예제

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

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

var result = UO.Frozen();
UO.Print("Frozen: " + Convert.ToString(result));

1. true - 직접 스크립트를 통해 자신을 테스트해 보세요.

매개변수와 실행 흐름:

  • 빈 괄호는 self를 선택합니다. 상태는 플래그의 하나의 스냅샷을 저장합니다. true은 수치상수 1입니다.
  • false 결과는 벽, 체력 부족 또는 기타 정지 이유를 배제하지 않습니다.
var state = UO.Frozen();
if (Truth(Truth(state) == true))
{
    UO.Print("Paralysis flag is set");
}
else
{
    UO.Print("Paralysis flag is absent or unavailable");
}

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

2. 선택됨 확인 mobile - 스크립트 기능

매개변수와 실행 흐름:

  • target은 마지막 타겟의 16진수 문자열 serial을 저장합니다. IsNpc는 플레이어를 포함하여 로드된 mobile인지 확인합니다.
  • 인수가 포함된 명령은 대상을 읽습니다. 그녀는 새로운 캐릭터를 선택하거나 변경하지 않습니다 lasttarget.
return  RunScenario();
 object? RunScenario()
{
    var target = UO.GetSerial("lasttarget");
    if (Truth(UO.IsNPC(target)))
    {
        var state = UO.Frozen(target);
        UO.Print("Selected mobile paralysis 1/0: " + Convert.ToString(state));
    }
    else
    {
        UO.Print("No loaded mobile selected");
    }

    return null;
}

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

3. 마비가 제거될 때까지 제한된 대기 - 시나리오 수업

매개변수와 실행 흐름:

  • 100ms 동안 10 이상 일시 중지되지 않습니다. 인수 없이 호출할 때마다 self를 다시 읽습니다.
  • 루프 후에는 self 존재 여부를 별도로 확인합니다. 이는 약 1초 동안의 관찰과 명령 실행을 합한 것이며 마비가 완전히 제거된다는 보장은 없습니다.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

    async public Task<object?> RunScenarioAsync()
    {
        var attempts = 0;
        while (Truth(Truth(UO.Frozen()) == true) && Truth(attempts < 10))
        {
            await Delay(100);
            attempts = attempts + 1;
        }

        if (Truth(UO.IsNPC("self")))
        {
            if (Truth(Truth(UO.Frozen()) == false))
            {
                UO.Print("Paralysis flag is clear");
            }
            else
            {
                UO.Print("Still paralyzed");
            }
        }
        else
        {
            UO.Print("Self is unavailable");
        }

        return null;
    }

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

명령 구현

C#은 대소문자를 구분합니다. 정확한 UO 이름을 사용하세요. 숫자 플래그는 0과 비교하고 반환 형식이 bool일 때만 bool을 사용하세요.

UO.Frozen() — UO.Frozen()

매개변수: 매개변수가 없습니다.

결과: int / Integer.

호출 시:

호출 시 저장된 처리기 delegate를 실행합니다. 등록 메서드는 API를 구성할 때 이 delegate를 만듭니다.

내부 구현 코드이며 독립 스크립트로 실행할 수 없습니다.

serial => bridge.GetLocked(serial)

내부 구현 코드이며 독립 스크립트로 실행할 수 없습니다.

() => getter(bridge.Self)

API 생성: 이 함수들은 API를 등록합니다. 명령을 호출할 때마다 다시 실행되지 않습니다.

UO.Frozen(value) — UO.Frozen(Any)

매개변수: value (Any)

결과: int / Integer.

호출 시:

호출 시 저장된 처리기 delegate를 실행합니다. 등록 메서드는 API를 구성할 때 이 delegate를 만듭니다.

내부 구현 코드이며 독립 스크립트로 실행할 수 없습니다.

serial => bridge.GetLocked(serial)

내부 구현 코드이며 독립 스크립트로 실행할 수 없습니다.

value => getter(GetObject(value))

API 생성: 이 함수들은 API를 등록합니다. 명령을 호출할 때마다 다시 실행되지 않습니다.


UO.GetARStatus

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

C# 시그니처

dynamic UO.GetARStatus();

현재 관리자 세션 또는 글로벌 클라이언트의 자동 재연결을 위한 플래그를 읽습니다.

매개변수

매개변수가 없습니다.

반환값

int 1 — 자동 재연결이 활성화됩니다. 0 — 비활성화되었습니다.

동작

  • SessionControl.AutoReconnect이 우선순위입니다. SessionControl가 누락된 경우에는 Settings.GlobalSettings.Reconnect가 사용됩니다. 이는 설정이며 현재 연결 상태나 시도 횟수가 아닙니다.

독립 실행 C# 스크립트

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

간단한 예제

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

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

object? result = UO.GetARStatus();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));

1. 읽기 설정 - 직접 스크립트

매개변수와 실행 흐름:

  • 읽기가 연결되지 않습니다.
var enabled = UO.GetARStatus();
UO.Print(Convert.ToString(enabled));

2. 연결에 매핑 - 스크립트 기능

매개변수와 실행 흐름:

  • AR 설정과 실제 연결은 두 개의 별도 값입니다.
return  RunScenario();
 object? RunScenario()
{
    var enabled = UO.GetARStatus();
    var online = UO.Connected();
    UO.Print(Convert.ToString(enabled) + " " + Convert.ToString(online));
    return null;
}

3. AR 꺼진 경우 수동 연결 - 시나리오 수업

매개변수와 실행 흐름:

  • Connect 자동 재연결이 비활성화된 경우 수동으로 허용됩니다.
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        if (Truth(UO.GetARStatus() == 0) && !(Truth(UO.Connected())))
        {
            UO.Connect();
        }

        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을 사용하세요.

UO.GetARStatus() — UO.GetARStatus()

매개변수: 매개변수가 없습니다.

결과: dynamic / Any.

호출 시:

내부 구현 코드이며 독립 스크립트로 실행할 수 없습니다.

case "getarstatus": return new InjectionValue(bridge.GetAutoReconnect());

UO.GetAlive

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

C# 시그니처

int UO.GetAlive();
int UO.GetAlive(object? value);

사망 흔적이 없는 물체의 존재 여부를 확인합니다.

매개변수

  • value — 표시된 형식의 선택적 개체: serial 숫자/16진수 문자열, self, lasttarget 또는 등록된 이름 AddObject. 이것은 type가 아닙니다. 논쟁 없이 self을 읽으세요. 일부 형식의 알 수 없는 텍스트로 인해 변환 오류가 발생합니다. 전화하기 전에 이름을 확인하세요.

반환값

숫자 플래그 int: 1(조건 충족), 0(조건 충족되지 않음). 이것은 숫자 플래그입니다: C#에서 결과를 확인하세요!= 0 또는 결과 == 0. int와 true/false 및 if(결과)를 직접 비교하는 것은 허용되지 않습니다. 1 - 양성 serial이 존재하며 죽은 것으로 표시되지 않습니다. 유명한 항목은 1도 제공합니다. 이는 mobile 필터가 아닙니다. 죽었거나 없어진 객체는 0을 제공합니다.

명령의 결과는 숫자 플래그입니다. 1는 충족된 조건을 의미하고, 0는 충족되지 않은 조건을 의미합니다. var result = command(...) 후에 (결과 != 0) 또는 (결과 == 0)인지 확인하세요. 한 번의 호출 결과를 저장합니다. 반복된 호출을 통해 해당 작업을 다시 수행하거나 이미 변경된 상태를 읽을 수 있습니다.

동작

  • 로컬 모델을 읽습니다. 대상을 열지 않고, 상태를 요청하지 않으며, 플래그를 변경하지 않으며, 패킷을 보내지 않습니다. 삭제된 개체는 해당 항목이 사전에서 삭제되기 전에도 누락된 것으로 간주됩니다.
  • 결과는 별도의 독서입니다. Exists와 다음 도전 사이에 세상이 바뀔 수도 있습니다. 여러 쿼리는 원자성 스냅샷을 형성하지 않습니다.

독립 실행 C# 스크립트

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

간단한 예제

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

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

var result = UO.GetAlive();
UO.Print("GetAlive: " + Convert.ToString(result));

1. 자신의 상태를 확인하세요 - 직접 스크립트

매개변수와 실행 흐름:

  • 빈 괄호는 self로 읽습니다. active는 결과를 한 번 저장합니다. true 및 false는 두 개의 분기를 정의합니다. Print 예시 메시지만 표시됩니다.
var active = UO.GetAlive();
if (Truth(Truth(active) == true))
{
    UO.Print("State is active");
}
else
{
    UO.Print("State is inactive or unavailable");
}

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

2. 선택한 개체 및 전체 기능 ReadState - 스크립트 기능

매개변수와 실행 흐름:

  • lasttarget – 이전에 선택한 개체. Exists는 존재 여부를 확인합니다. obj가 유일한 매개변수 ReadState입니다. 이 함수는 수정 없이 명령 결과를 반환합니다. 해당 정의는 복사된 코드에 포함되어 있습니다.
return  RunScenario();
 object? RunScenario()
{
    if (Truth(UO.Exists("lasttarget")))
    {
        var observed = ReadState("lasttarget");
        UO.Print("State 1/0: " + Convert.ToString(observed));
    }

    return null;
}

dynamic ReadState(dynamic obj)
{
    return UO.GetAlive(obj);
}

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

3. 0.5초 만에 변경 사항 확인 - 스크립트 클래스

매개변수와 실행 흐름:

  • 인수가 없는 두 번의 호출은 self, UO.Wait(500)를 읽고 500 밀리초를 설정합니다. 두 이미지가 비교됩니다. 중간 전환을 건너뛸 수 있습니다. 끝없는 기다림은 없습니다.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

    async public Task<object?> RunScenarioAsync()
    {
        var before = UO.GetAlive();
        await Delay(500);
        var after = UO.GetAlive();
        if (Truth(before != after))
        {
            UO.Print("State changed: " + Convert.ToString(before) + " -> " + Convert.ToString(after));
        }

        return null;
    }

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

명령 구현

C#은 대소문자를 구분합니다. 정확한 UO 이름을 사용하세요. 숫자 플래그는 0과 비교하고 반환 형식이 bool일 때만 bool을 사용하세요.

UO.GetAlive() — UO.GetAlive()

매개변수: 매개변수가 없습니다.

결과: int / Integer.

호출 시:

호출 시 저장된 처리기 delegate를 실행합니다. 등록 메서드는 API를 구성할 때 이 delegate를 만듭니다.

내부 구현 코드이며 독립 스크립트로 실행할 수 없습니다.

serial => serial > 0 && bridge.Exists(serial) != 0 && IsDeadState(serial) == 0 ? 1 : 0

내부 구현 코드이며 독립 스크립트로 실행할 수 없습니다.

() => getter(bridge.Self)

API 생성: 이 함수들은 API를 등록합니다. 명령을 호출할 때마다 다시 실행되지 않습니다.

UO.GetAlive(value) — UO.GetAlive(Any)

매개변수: value (Any)

결과: int / Integer.

호출 시:

호출 시 저장된 처리기 delegate를 실행합니다. 등록 메서드는 API를 구성할 때 이 delegate를 만듭니다.

내부 구현 코드이며 독립 스크립트로 실행할 수 없습니다.

serial => serial > 0 && bridge.Exists(serial) != 0 && IsDeadState(serial) == 0 ? 1 : 0

내부 구현 코드이며 독립 스크립트로 실행할 수 없습니다.

value => getter(GetObject(value))

API 생성: 이 함수들은 API를 등록합니다. 명령을 호출할 때마다 다시 실행되지 않습니다.


UO.GetArmor

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

C# 시그니처

int UO.GetArmor();

현재 캐릭터의 저항 필드(물리 방어구/저항)를 읽습니다.

매개변수

매개변수가 없습니다.

반환값

int는 클라이언트 모델의 서명된 상태 값, -32768..32767입니다. 음수 값이 유지됩니다. 0는 실제 저항, 데이터 부족 또는 플레이어 누락/파괴일 수 있습니다. GetResist는 알 수 없는 선택기에 대해 0도 제공합니다. bool, ID, 스킬 한계나 저항 한계가 아닙니다. 1는 성공이 아닌 1점을 의미합니다.

동작

  • 이 명령은 인수를 사용하지 않습니다. 위의 정확한 서명을 사용하세요.
  • 게임 스레드에서 읽으면 Player가 필요합니다.PhysicalResistance 현재 플레이어가 존재하고 파괴되지 않은 경우; 그렇지 않으면 0. 장비가 정렬되지 않고, 보너스가 다시 계산되지 않으며, 상태가 요청되지 않으며, 업데이트를 기다리지 않습니다. 현재 유령은 파괴된 플레이어와 동일하지 않습니다.
  • PhysicalResistance - 서버 갑옷/상태 필드: 클래식 서버는 갑옷 등급을 전송할 수 있으며, 저항이 있는 규칙은 물리적 저항을 전송할 수 있습니다. API는 서로 변환되지 않으며 피해 감소율을 계산하지 않습니다. Armor 및 물리적 별칭은 동일한 필드를 읽습니다.
  • CharacterStatus는 이름, 체력, 자신의 특성을 변경하기 전에 필요한 신체를 확인한 다음 각 저항 단어를 서명된 Int16으로 변환합니다. 잘린 필수 본문은 이전 데이터를 변경하지 않습니다. 선택적 꼬리 type 6는 동일한 규칙을 유지합니다. 저항 명령은 최대 한계를 읽지 않습니다.
  • 호출할 때마다 로컬 데이터를 새로 읽습니다. 변수는 스냅샷을 저장합니다. 개별 읽기는 다른 서버 업데이트를 받을 수 있습니다. 0이 아닌 결과는 연결을 테스트하지 않습니다. 0은 값일 수도 있고 데이터가 없을 수도 있습니다.
  • 이 함수들은 API를 등록합니다. 명령을 호출할 때마다 다시 실행되지 않습니다. C#은 대소문자를 구분합니다. 정확한 UO 이름을 사용하세요. 숫자 플래그는 0과 비교하고 반환 형식이 bool일 때만 bool을 사용하세요.

독립 실행 C# 스크립트

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

간단한 예제

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

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

var result = UO.GetArmor();
UO.Print("GetArmor: " + Convert.ToString(result));

1. 저장된 값 인쇄 - 직접 스크립트

매개변수와 실행 흐름:

  • 값은 한 번의 호출 결과를 저장합니다. Convert.ToString는 로그 번호의 형식을 지정합니다. 논쟁은 없습니다. 자신의 성격을 읽을 수 있습니다.
var value = UO.GetArmor();
UO.Print("PhysicalResistance: " + Convert.ToString(value));

2. 두 이미지 비교 - 스크립트 기능

매개변수와 실행 흐름:

  • 전후 사이에는 UO.Wait(500) 밀리초가 있습니다. 차이는 음수가 될 수 있습니다. 중간 업데이트가 누락될 수 있습니다. 일시 정지는 지연 API이 아닌 예를 나타냅니다.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    var before = UO.GetArmor();
    await Delay(500);
    var after = UO.GetArmor();
    var difference = after - before;
    UO.Print("Resistance change: " + Convert.ToString(difference));
    return null;
}

Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));

3. 최소 저항 테스트 기능 완료 - 스크립트 클래스

매개변수와 실행 흐름:

  • 최소=50는 클라이언트 제한이 아닌 요구 사항의 예입니다. ResistanceAtLeast는 누락된 플레이어를 거부하고 하나의 값을 읽고 bool를 반환합니다: true 또는 값 >= 최소인 경우 false. 저항 자체는 bool가 아닙니다. 함수는 아래에 완전히 선언되어 있습니다.
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        if (Truth(Truth(ResistanceAtLeast(50)) == true))
        {
            UO.Print("Local resistance requirement met");
        }
        else
        {
            UO.Print("Requirement not met or no player");
        }

        return null;
    }

    dynamic ResistanceAtLeast(dynamic minimum)
    {
        if (Truth(UO.Self() == 0))
        {
            return false;
        }

        var value = UO.GetArmor();
        return value >= minimum;
    }

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

명령 구현

C#은 대소문자를 구분합니다. 정확한 UO 이름을 사용하세요. 숫자 플래그는 0과 비교하고 반환 형식이 bool일 때만 bool을 사용하세요.

UO.GetArmor() — UO.GetArmor()

매개변수: 매개변수가 없습니다.

결과: int / Integer.

호출 시:

호출 시 저장된 처리기 delegate를 실행합니다. 등록 메서드는 API를 구성할 때 이 delegate를 만듭니다.

내부 구현 코드이며 독립 스크립트로 실행할 수 없습니다.

() => bridge.Armor

API 생성: 이 함수들은 API를 등록합니다. 명령을 호출할 때마다 다시 실행되지 않습니다.


UO.GetColdResist

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

C# 시그니처

int UO.GetColdResist();

현재 캐릭터의 저항 필드: 콜드를 읽습니다.

매개변수

매개변수가 없습니다.

반환값

int는 클라이언트 모델의 서명된 상태 값, -32768..32767입니다. 음수 값이 유지됩니다. 0는 실제 저항, 데이터 부족 또는 플레이어 누락/파괴일 수 있습니다. GetResist는 알 수 없는 선택기에 대해 0도 제공합니다. bool, ID, 스킬 한계나 저항 한계가 아닙니다. 1는 성공이 아닌 1점을 의미합니다.

동작

  • 이 명령은 인수를 사용하지 않습니다. 위의 정확한 서명을 사용하세요.
  • 게임 스레드에서 읽으면 Player가 필요합니다.ColdResistance 현재 플레이어가 존재하고 파괴되지 않은 경우; 그렇지 않으면 0. 장비가 정렬되지 않고, 보너스가 다시 계산되지 않으며, 상태가 요청되지 않으며, 업데이트를 기다리지 않습니다. 현재 유령은 파괴된 플레이어와 동일하지 않습니다.
  • 요소 필드는 확장된 CharacterStatus (0x11), type >= 4로 제공됩니다. 명령 자체는 서버 시대를 확인하지 않습니다. 이러한 필드가 없는 압축/이전 상태는 이전 캐시를 그대로 유지합니다. 새 플레이어는 처음에는 0입니다. 독 저항은 Poisoned 플래그가 아닙니다. 또한 주문 저항 스킬도 아닙니다.
  • CharacterStatus는 이름, 체력, 자신의 특성을 변경하기 전에 필요한 신체를 확인한 다음 각 저항 단어를 서명된 Int16으로 변환합니다. 잘린 필수 본문은 이전 데이터를 변경하지 않습니다. 선택적 꼬리 type 6는 동일한 규칙을 유지합니다. 저항 명령은 최대 한계를 읽지 않습니다.
  • 호출할 때마다 로컬 데이터를 새로 읽습니다. 변수는 스냅샷을 저장합니다. 개별 읽기는 다른 서버 업데이트를 받을 수 있습니다. 0이 아닌 결과는 연결을 테스트하지 않습니다. 0은 값일 수도 있고 데이터가 없을 수도 있습니다.
  • 이 함수들은 API를 등록합니다. 명령을 호출할 때마다 다시 실행되지 않습니다. C#은 대소문자를 구분합니다. 정확한 UO 이름을 사용하세요. 숫자 플래그는 0과 비교하고 반환 형식이 bool일 때만 bool을 사용하세요.

독립 실행 C# 스크립트

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

간단한 예제

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

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

var result = UO.GetColdResist();
UO.Print("GetColdResist: " + Convert.ToString(result));

1. 저장된 값 인쇄 - 직접 스크립트

매개변수와 실행 흐름:

  • 값은 한 번의 호출 결과를 저장합니다. Convert.ToString는 로그 번호의 형식을 지정합니다. 논쟁은 없습니다. 자신의 성격을 읽을 수 있습니다.
var value = UO.GetColdResist();
UO.Print("ColdResistance: " + Convert.ToString(value));

2. 두 이미지 비교 - 스크립트 기능

매개변수와 실행 흐름:

  • 전후 사이에는 UO.Wait(500) 밀리초가 있습니다. 차이는 음수가 될 수 있습니다. 중간 업데이트가 누락될 수 있습니다. 일시 정지는 지연 API이 아닌 예를 나타냅니다.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    var before = UO.GetColdResist();
    await Delay(500);
    var after = UO.GetColdResist();
    var difference = after - before;
    UO.Print("Resistance change: " + Convert.ToString(difference));
    return null;
}

Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));

3. 최소 저항 테스트 기능 완료 - 스크립트 클래스

매개변수와 실행 흐름:

  • 최소=50는 클라이언트 제한이 아닌 요구 사항의 예입니다. ResistanceAtLeast는 누락된 플레이어를 거부하고 하나의 값을 읽고 bool를 반환합니다: true 또는 값 >= 최소인 경우 false. 저항 자체는 bool가 아닙니다. 함수는 아래에 완전히 선언되어 있습니다.
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        if (Truth(Truth(ResistanceAtLeast(50)) == true))
        {
            UO.Print("Local resistance requirement met");
        }
        else
        {
            UO.Print("Requirement not met or no player");
        }

        return null;
    }

    dynamic ResistanceAtLeast(dynamic minimum)
    {
        if (Truth(UO.Self() == 0))
        {
            return false;
        }

        var value = UO.GetColdResist();
        return value >= minimum;
    }

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

명령 구현

C#은 대소문자를 구분합니다. 정확한 UO 이름을 사용하세요. 숫자 플래그는 0과 비교하고 반환 형식이 bool일 때만 bool을 사용하세요.

UO.GetColdResist() — UO.GetColdResist()

매개변수: 매개변수가 없습니다.

결과: int / Integer.

호출 시:

호출 시 저장된 처리기 delegate를 실행합니다. 등록 메서드는 API를 구성할 때 이 delegate를 만듭니다.

내부 구현 코드이며 독립 스크립트로 실행할 수 없습니다.

() => bridge.ColdResistance

API 생성: 이 함수들은 API를 등록합니다. 명령을 호출할 때마다 다시 실행되지 않습니다.


UO.GetDead

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

C# 시그니처

int UO.GetDead();
int UO.GetDead(object? value);

캐릭터 사망을 확인합니다.

매개변수

  • value — 표시된 형식의 선택적 개체: serial 숫자/16진수 문자열, self, lasttarget 또는 등록된 이름 AddObject. 이것은 type가 아닙니다. 논쟁 없이 self을 읽으세요. 일부 형식의 알 수 없는 텍스트로 인해 변환 오류가 발생합니다. 전화하기 전에 이름을 확인하세요.

반환값

숫자 플래그 int: 1(조건 충족), 0(조건 충족 안 됨). 이것은 숫자 플래그입니다: C#에서 결과를 확인하세요!= 0 또는 결과 == 0. int와 true/false 및 if(결과)를 직접 비교하는 것은 허용되지 않습니다. 1 - mobile에는 IsDead이 있고, 0에는 부호가 없거나 mobile가 없습니다. HP=0 그 자체가 죽음을 의미하는 것은 아닙니다.

명령의 결과는 숫자 플래그입니다. 1는 충족된 조건을 의미하고, 0는 충족되지 않은 조건을 의미합니다. var result = command(...) 후에 (결과 != 0) 또는 (결과 == 0)인지 확인하세요. 한 번의 호출 결과를 저장합니다. 반복된 호출을 통해 해당 작업을 다시 수행하거나 이미 변경된 상태를 읽을 수 있습니다.

동작

  • 로컬 모델을 읽습니다. 대상을 열지 않고, 상태를 요청하지 않으며, 플래그를 변경하지 않으며, 패킷을 보내지 않습니다. 삭제된 개체는 해당 항목이 사전에서 삭제되기 전에도 누락된 것으로 간주됩니다.
  • 결과는 별도의 독서입니다. Exists와 다음 도전 사이에 세상이 바뀔 수도 있습니다. 여러 쿼리는 원자성 스냅샷을 형성하지 않습니다.

독립 실행 C# 스크립트

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

간단한 예제

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

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

var result = UO.GetDead();
UO.Print("GetDead: " + Convert.ToString(result));

1. 자신의 상태를 확인하세요 - 직접 스크립트

매개변수와 실행 흐름:

  • 빈 괄호는 self로 읽습니다. active는 결과를 한 번 저장합니다. true 및 false는 두 개의 분기를 정의합니다. Print 예시 메시지만 표시됩니다.
var active = UO.GetDead();
if (Truth(Truth(active) == true))
{
    UO.Print("State is active");
}
else
{
    UO.Print("State is inactive or unavailable");
}

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

2. 선택한 개체 및 전체 기능 ReadState - 스크립트 기능

매개변수와 실행 흐름:

  • lasttarget – 이전에 선택한 개체. Exists는 존재 여부를 확인합니다. obj가 유일한 매개변수 ReadState입니다. 이 함수는 수정 없이 명령 결과를 반환합니다. 해당 정의는 복사된 코드에 포함되어 있습니다.
return  RunScenario();
 object? RunScenario()
{
    if (Truth(UO.Exists("lasttarget")))
    {
        var observed = ReadState("lasttarget");
        UO.Print("State 1/0: " + Convert.ToString(observed));
    }

    return null;
}

dynamic ReadState(dynamic obj)
{
    return UO.GetDead(obj);
}

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

3. 0.5초 만에 변경 사항 확인 - 스크립트 클래스

매개변수와 실행 흐름:

  • 인수가 없는 두 번의 호출은 self, UO.Wait(500)를 읽고 500 밀리초를 설정합니다. 두 이미지가 비교됩니다. 중간 전환을 건너뛸 수 있습니다. 끝없는 기다림은 없습니다.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

    async public Task<object?> RunScenarioAsync()
    {
        var before = UO.GetDead();
        await Delay(500);
        var after = UO.GetDead();
        if (Truth(before != after))
        {
            UO.Print("State changed: " + Convert.ToString(before) + " -> " + Convert.ToString(after));
        }

        return null;
    }

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

명령 구현

C#은 대소문자를 구분합니다. 정확한 UO 이름을 사용하세요. 숫자 플래그는 0과 비교하고 반환 형식이 bool일 때만 bool을 사용하세요.

UO.GetDead() — UO.GetDead()

매개변수: 매개변수가 없습니다.

결과: int / Integer.

호출 시:

호출 시 저장된 처리기 delegate를 실행합니다. 등록 메서드는 API를 구성할 때 이 delegate를 만듭니다.

내부 구현 코드이며 독립 스크립트로 실행할 수 없습니다.

IsDeadState

내부 구현 코드이며 독립 스크립트로 실행할 수 없습니다.

() => getter(bridge.Self)

API 생성: 이 함수들은 API를 등록합니다. 명령을 호출할 때마다 다시 실행되지 않습니다.

UO.GetDead(value) — UO.GetDead(Any)

매개변수: value (Any)

결과: int / Integer.

호출 시:

호출 시 저장된 처리기 delegate를 실행합니다. 등록 메서드는 API를 구성할 때 이 delegate를 만듭니다.

내부 구현 코드이며 독립 스크립트로 실행할 수 없습니다.

IsDeadState

내부 구현 코드이며 독립 스크립트로 실행할 수 없습니다.

value => getter(GetObject(value))

API 생성: 이 함수들은 API를 등록합니다. 명령을 호출할 때마다 다시 실행되지 않습니다.


UO.GetDex

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

C# 시그니처

int UO.GetDex();
int UO.GetDex(object? objID);

캐릭터의 현재 민첩성(Dexterity, DEX)을 읽어옵니다.

매개변수

  • objID — 하나의 인수(serial 문자 번호, 10진수/0x 16진수 문자열, "self", "lasttarget" 또는 이름 AddObject)가 포함된 표시된 형식의 ObjID입니다. graphic/type 이외의 개체를 선택합니다. 인수가 없으면 현재 문자를 읽습니다.

반환값

int — 클라이언트 모델의 현재 통계 포인트, 0..65535; 백분율, ID, 스킬, 잠금 모드 또는 bool가 아닙니다. 0는 누락/삭제된 문자 또는 접근할 수 없는 객체를 의미하기도 합니다. == true가 아닌 수치 요구 사항과 비교하십시오. 이는 스텟 한도나 수정 없이 보장된 기본 값이 아닙니다.

동작

  • self의 경우 (), 명시적 개체의 경우 (ObjID)가 지원됩니다. 다른 선택적 인수는 없습니다.
  • Player를 읽습니다.Dexterity Player가 존재하고 파괴되지 않은 경우; 그렇지 않으면 0. 존재하는 죽은 캐릭터는 제거된 개체가 아닙니다. 스텟은 HP, 마나, 체력으로 계산되지 않습니다.
  • GetStr/GetInt/GetDex ObjID를 수락합니다. PlayerMobile 데이터는 self에서만 사용할 수 있습니다. 다른 serial - 0의 경우, 로드된 mobile의 경우에도 마찬가지입니다. 다른 사람의 특성은 대체되거나 추측되지 않습니다.
  • Invoke는 스크립트로 대기를 취소하는 기능을 통해 게임 스트림에서 읽기를 수행합니다. 상태를 쿼리하지 않으며, 대상을 열지 않으며, 패킷을 보내지 않으며, 특성을 변경하지 않으며 지연을 추가하지 않습니다.
  • 호출할 때마다 로컬 데이터를 새로 읽습니다. 변수는 스냅샷을 저장합니다. 개별 읽기는 다른 서버 업데이트를 받을 수 있습니다. 0이 아닌 결과는 연결을 테스트하지 않습니다. 0은 값일 수도 있고 데이터가 없을 수도 있습니다.
  • C#은 대소문자를 구분합니다. 정확한 UO 이름을 사용하세요. 숫자 플래그는 0과 비교하고 반환 형식이 bool일 때만 bool을 사용하세요. UO.Dex(), UO.Dexterity(), UO.GetDex(), UO.GetDexterity().
  • ExecuteClientApiCompatibility.Arg는 먼저 개체 이름을 확인한 다음 숫자를 변환합니다. 알 수 없는 숫자가 아닌 문자열로 인해 대상이 아닌 변환 오류가 발생합니다. double은 int로 줄어들고, Array/void는 0로 줄어듭니다. 문자를 선택하려면 이러한 변환이 아닌 올바른 serial를 사용하세요.

독립 실행 C# 스크립트

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

간단한 예제

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

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

var result = UO.GetDex();
UO.Print("GetDex: " + Convert.ToString(result));

1. 포인트 읽기 및 표시 - 직접 스크립트

매개변수와 실행 흐름:

  • value는 숫자 결과를 저장합니다. 변환합니다.ToString 잡지용으로 포맷합니다. 논쟁이나 캐릭터 행동이 없습니다.
var value = UO.GetDex();
UO.Print("Dexterity: " + Convert.ToString(value));

2. 두 이미지 비교 - 스크립트 기능

매개변수와 실행 흐름:

  • 별도의 1000 ms 전후; UO.Wait 예시에 추가되었습니다. Change=after-before는 양수, 0 또는 음수일 수 있습니다. 그 자체로는 모든 중간 업데이트와 월드 종료를 구분하지 않습니다.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    var before = UO.GetDex();
    await Delay(1000);
    var after = UO.GetDex();
    var change = after - before;
    UO.Print("Change: " + Convert.ToString(change));
    return null;
}

Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));

3. 완전한 요구사항 검증 기능 - 스크립트 클래스

매개변수와 실행 흐름:

  • 최소=80는 클라이언트 제한이 아닌 요구 사항의 예입니다. AttributeAtLeast(최소)는 누락된 문자를 거부하고 특성을 한 번 읽고 bool를 반환합니다: 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()
    {
        if (Truth(Truth(AttributeAtLeast(80)) == true))
        {
            UO.Print("Requirement met");
        }
        else
        {
            UO.Print("Requirement not met or no player");
        }

        return null;
    }

    dynamic AttributeAtLeast(dynamic minimum)
    {
        if (Truth(UO.Self() == 0))
        {
            return false;
        }

        var value = UO.GetDex();
        return value >= minimum;
    }

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

4. serial 및 개체 이름으로 문자 선택 - 직접 스크립트

매개변수와 실행 흐름:

  • id는 type가 아니라 UO.Self()의 결과입니다. AddObject는 두 번째 인수가 지정되었기 때문에 ID를 범위 없이 statSubject로 저장합니다. 두 호출 모두 동일한 문자를 선택하지만 판독값은 원자적이지 않습니다.
var id = UO.Self();
if (Truth(id != 0))
{
    UO.AddObject("statSubject", id);
    var direct = UO.GetDex(id);
    var byName = UO.GetDex("statSubject");
    UO.Print("Direct: " + Convert.ToString(direct) + "; alias: " + Convert.ToString(byName));
}

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

명령 구현

C#은 대소문자를 구분합니다. 정확한 UO 이름을 사용하세요. 숫자 플래그는 0과 비교하고 반환 형식이 bool일 때만 bool을 사용하세요.

UO.GetDex() — UO.GetDex()

매개변수: 매개변수가 없습니다.

결과: int / Integer.

호출 시:

호출 시 저장된 처리기 delegate를 실행합니다. 등록 메서드는 API를 구성할 때 이 delegate를 만듭니다.

내부 구현 코드이며 독립 스크립트로 실행할 수 없습니다.

() => bridge.Dexterity

API 생성: 이 함수들은 API를 등록합니다. 명령을 호출할 때마다 다시 실행되지 않습니다.

UO.GetDex(objID) — UO.GetDex(Any)

매개변수: objID (Any)

결과: int / Integer.

호출 시:

내부 구현 코드이며 독립 스크립트로 실행할 수 없습니다.

case "getdex": return new InjectionValue(arguments.Length > 0 ? bridge.GetDexterity(Arg(0)) : bridge.Dexterity);

UO.GetDexterity

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

C# 시그니처

int UO.GetDexterity();

캐릭터의 현재 민첩성(Dexterity, DEX)을 읽어옵니다.

매개변수

매개변수가 없습니다.

반환값

int — 클라이언트 모델의 현재 통계 포인트, 0..65535; 백분율, ID, 스킬, 잠금 모드 또는 bool가 아닙니다. 0는 누락/삭제된 문자 또는 접근할 수 없는 객체를 의미하기도 합니다. == true가 아닌 수치 요구 사항과 비교하십시오. 이는 스텟 한도나 수정 없이 보장된 기본 값이 아닙니다.

동작

  • 이 명령은 인수를 사용하지 않습니다. 위의 정확한 서명을 사용하세요.
  • Player를 읽습니다.Dexterity Player가 존재하고 파괴되지 않은 경우; 그렇지 않으면 0. 존재하는 죽은 캐릭터는 제거된 개체가 아닙니다. 스텟은 HP, 마나, 체력으로 계산되지 않습니다.
  • GetStr/GetInt/GetDex ObjID를 수락합니다. PlayerMobile 데이터는 self에서만 사용할 수 있습니다. 다른 serial - 0의 경우, 로드된 mobile의 경우에도 마찬가지입니다. 다른 사람의 특성은 대체되거나 추측되지 않습니다.
  • Invoke는 스크립트로 대기를 취소하는 기능을 통해 게임 스트림에서 읽기를 수행합니다. 상태를 쿼리하지 않으며, 대상을 열지 않으며, 패킷을 보내지 않으며, 특성을 변경하지 않으며 지연을 추가하지 않습니다.
  • 호출할 때마다 로컬 데이터를 새로 읽습니다. 변수는 스냅샷을 저장합니다. 개별 읽기는 다른 서버 업데이트를 받을 수 있습니다. 0이 아닌 결과는 연결을 테스트하지 않습니다. 0은 값일 수도 있고 데이터가 없을 수도 있습니다.
  • C#은 대소문자를 구분합니다. 정확한 UO 이름을 사용하세요. 숫자 플래그는 0과 비교하고 반환 형식이 bool일 때만 bool을 사용하세요. UO.Dex(), UO.Dexterity(), UO.GetDex(), UO.GetDexterity().

독립 실행 C# 스크립트

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

간단한 예제

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

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

var result = UO.GetDexterity();
UO.Print("GetDexterity: " + Convert.ToString(result));

1. 포인트 읽기 및 표시 - 직접 스크립트

매개변수와 실행 흐름:

  • value는 숫자 결과를 저장합니다. 변환합니다.ToString 잡지용으로 포맷합니다. 논쟁이나 캐릭터 행동이 없습니다.
var value = UO.GetDexterity();
UO.Print("Dexterity: " + Convert.ToString(value));

2. 두 이미지 비교 - 스크립트 기능

매개변수와 실행 흐름:

  • 별도의 1000 ms 전후; UO.Wait 예시에 추가되었습니다. Change=after-before는 양수, 0 또는 음수일 수 있습니다. 그 자체로는 모든 중간 업데이트와 월드 종료를 구분하지 않습니다.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    var before = UO.GetDexterity();
    await Delay(1000);
    var after = UO.GetDexterity();
    var change = after - before;
    UO.Print("Change: " + Convert.ToString(change));
    return null;
}

Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));

3. 완전한 요구사항 검증 기능 - 스크립트 클래스

매개변수와 실행 흐름:

  • 최소=80는 클라이언트 제한이 아닌 요구 사항의 예입니다. AttributeAtLeast(최소)는 누락된 문자를 거부하고 특성을 한 번 읽고 bool를 반환합니다: 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()
    {
        if (Truth(Truth(AttributeAtLeast(80)) == true))
        {
            UO.Print("Requirement met");
        }
        else
        {
            UO.Print("Requirement not met or no player");
        }

        return null;
    }

    dynamic AttributeAtLeast(dynamic minimum)
    {
        if (Truth(UO.Self() == 0))
        {
            return false;
        }

        var value = UO.GetDexterity();
        return value >= minimum;
    }

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

명령 구현

C#은 대소문자를 구분합니다. 정확한 UO 이름을 사용하세요. 숫자 플래그는 0과 비교하고 반환 형식이 bool일 때만 bool을 사용하세요.

UO.GetDexterity() — UO.GetDexterity()

매개변수: 매개변수가 없습니다.

결과: int / Integer.

호출 시:

호출 시 저장된 처리기 delegate를 실행합니다. 등록 메서드는 API를 구성할 때 이 delegate를 만듭니다.

내부 구현 코드이며 독립 스크립트로 실행할 수 없습니다.

() => bridge.Dexterity

API 생성: 이 함수들은 API를 등록합니다. 명령을 호출할 때마다 다시 실행되지 않습니다.


UO.GetEnergyResist

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

C# 시그니처

int UO.GetEnergyResist();

현재 캐릭터의 저항장인 에너지를 읽습니다.

매개변수

매개변수가 없습니다.

반환값

int는 클라이언트 모델의 서명된 상태 값, -32768..32767입니다. 음수 값이 유지됩니다. 0는 실제 저항, 데이터 부족 또는 플레이어 누락/파괴일 수 있습니다. GetResist는 알 수 없는 선택기에 대해 0도 제공합니다. bool, ID, 스킬 한계나 저항 한계가 아닙니다. 1는 성공이 아닌 1점을 의미합니다.

동작

  • 이 명령은 인수를 사용하지 않습니다. 위의 정확한 서명을 사용하세요.
  • 게임 스레드에서 읽으면 Player가 필요합니다.EnergyResistance 현재 플레이어가 존재하고 파괴되지 않은 경우; 그렇지 않으면 0. 장비가 정렬되지 않고, 보너스가 다시 계산되지 않으며, 상태가 요청되지 않으며, 업데이트를 기다리지 않습니다. 현재 유령은 파괴된 플레이어와 동일하지 않습니다.
  • 요소 필드는 확장된 CharacterStatus (0x11), type >= 4로 제공됩니다. 명령 자체는 서버 시대를 확인하지 않습니다. 이러한 필드가 없는 압축/이전 상태는 이전 캐시를 그대로 유지합니다. 새 플레이어는 처음에는 0입니다. 독 저항은 Poisoned 플래그가 아닙니다. 또한 주문 저항 스킬도 아닙니다.
  • CharacterStatus는 이름, 체력, 자신의 특성을 변경하기 전에 필요한 신체를 확인한 다음 각 저항 단어를 서명된 Int16으로 변환합니다. 잘린 필수 본문은 이전 데이터를 변경하지 않습니다. 선택적 꼬리 type 6는 동일한 규칙을 유지합니다. 저항 명령은 최대 한계를 읽지 않습니다.
  • 호출할 때마다 로컬 데이터를 새로 읽습니다. 변수는 스냅샷을 저장합니다. 개별 읽기는 다른 서버 업데이트를 받을 수 있습니다. 0이 아닌 결과는 연결을 테스트하지 않습니다. 0은 값일 수도 있고 데이터가 없을 수도 있습니다.
  • 이 함수들은 API를 등록합니다. 명령을 호출할 때마다 다시 실행되지 않습니다. C#은 대소문자를 구분합니다. 정확한 UO 이름을 사용하세요. 숫자 플래그는 0과 비교하고 반환 형식이 bool일 때만 bool을 사용하세요.

독립 실행 C# 스크립트

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

간단한 예제

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

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

var result = UO.GetEnergyResist();
UO.Print("GetEnergyResist: " + Convert.ToString(result));

1. 저장된 값 인쇄 - 직접 스크립트

매개변수와 실행 흐름:

  • 값은 한 번의 호출 결과를 저장합니다. Convert.ToString는 로그 번호의 형식을 지정합니다. 논쟁은 없습니다. 자신의 성격을 읽을 수 있습니다.
var value = UO.GetEnergyResist();
UO.Print("EnergyResistance: " + Convert.ToString(value));

2. 두 이미지 비교 - 스크립트 기능

매개변수와 실행 흐름:

  • 전후 사이에는 UO.Wait(500) 밀리초가 있습니다. 차이는 음수가 될 수 있습니다. 중간 업데이트가 누락될 수 있습니다. 일시 정지는 지연 API이 아닌 예를 나타냅니다.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    var before = UO.GetEnergyResist();
    await Delay(500);
    var after = UO.GetEnergyResist();
    var difference = after - before;
    UO.Print("Resistance change: " + Convert.ToString(difference));
    return null;
}

Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));

3. 최소 저항 테스트 기능 완료 - 스크립트 클래스

매개변수와 실행 흐름:

  • 최소=50는 클라이언트 제한이 아닌 요구 사항의 예입니다. ResistanceAtLeast는 누락된 플레이어를 거부하고 하나의 값을 읽고 bool를 반환합니다: true 또는 값 >= 최소인 경우 false. 저항 자체는 bool가 아닙니다. 함수는 아래에 완전히 선언되어 있습니다.
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        if (Truth(Truth(ResistanceAtLeast(50)) == true))
        {
            UO.Print("Local resistance requirement met");
        }
        else
        {
            UO.Print("Requirement not met or no player");
        }

        return null;
    }

    dynamic ResistanceAtLeast(dynamic minimum)
    {
        if (Truth(UO.Self() == 0))
        {
            return false;
        }

        var value = UO.GetEnergyResist();
        return value >= minimum;
    }

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

명령 구현

C#은 대소문자를 구분합니다. 정확한 UO 이름을 사용하세요. 숫자 플래그는 0과 비교하고 반환 형식이 bool일 때만 bool을 사용하세요.

UO.GetEnergyResist() — UO.GetEnergyResist()

매개변수: 매개변수가 없습니다.

결과: int / Integer.

호출 시:

호출 시 저장된 처리기 delegate를 실행합니다. 등록 메서드는 API를 구성할 때 이 delegate를 만듭니다.

내부 구현 코드이며 독립 스크립트로 실행할 수 없습니다.

() => bridge.EnergyResistance

API 생성: 이 함수들은 API를 등록합니다. 명령을 호출할 때마다 다시 실행되지 않습니다.

Clone this wiki locally