Skip to content

API UO Flying ko

Codex edited this page Sep 22, 2026 · 1 revision

UO.Flying

ClassicUO / Basic IDE

Home · API A–Z · Каталоги

캐릭터가 지금 비행 중인지 확인합니다. 주로 Gargoyle의 경로 시작이나 이륙 요청 전에 사용합니다. 인수가 없으면 “내 캐릭터가 지금 비행 중인가?”를 읽습니다. 상태만 읽으며 이륙, 착륙 또는 이동을 실행하지 않습니다.

정확한 구문

UO.Flying() -> Integer
UO.Flying(id:Any) -> Integer

매개변수

  • id — 선택적인 mobile serial: 숫자, 16진수 문자열, self, lasttarget 또는 UO.AddObject 이름. 생략하면 자신의 캐릭터입니다. 객체 ID이며 graphic/type이나 Z가 아닙니다. 알 수 없는 이름, 없거나 파괴된 mobile, 아이템은 0입니다.

반환값

Integer Boolean: 1 = TRUE, 0 = FALSE입니다. 숫자 또는 따옴표 없는 논리 상수와 비교할 수 있습니다. mobile에 IsFlying이 있으면 1, 없거나 mobile이 없으면 0입니다. 높이 Z만으로 비행을 판단하지 않습니다.

논리 결과입니다: 1 = TRUE, 0 = FALSE. VAR result = command(...)로 저장한 뒤 IF result = TRUE THEN 또는 IF result = 1 THEN을 사용합니다. 부정 결과는 IF result = FALSE THEN 또는 IF result = 0 THEN입니다. TRUE/FALSE에 따옴표를 쓰지 않습니다. 한 번 호출하고 결과를 저장하세요. 다시 호출하면 동작을 반복하거나 바뀐 상태를 읽을 수 있습니다.

동작

  • 주 용도는 Gargoyle 비행이지만 getter는 종족을 검사하지 않습니다. 프로토콜 7.0.0.0 이상에서 mobile 비트 0x04를 읽고, 이전 버전은 0입니다. 지붕, 높은 Z, 날개 애니메이션 또는 종족만으로 비행을 판단할 수 없습니다.
  • 별도 동작 UO.ToggleFly()는 상태 전환 요청이며 비행 활성화를 보장하지 않습니다. 이미 비행 중이면 착륙을 요청합니다. 서버가 거절할 수 있으므로 제한된 시간 동안 Flying을 다시 확인하세요. 데이터가 없어도 FALSE일 수 있으므로 동작 전에 Connected를 확인합니다.
  • 로컬 모델을 읽습니다. target이나 status 요청, 플래그 변경, 패킷 전송은 없습니다. 파괴된 객체는 사전 항목이 제거되기 전에도 없는 것으로 처리합니다.
  • 각 결과는 독립적인 읽기입니다. Exists와 다음 호출 사이에 세계가 바뀔 수 있으므로 여러 조회가 원자적 스냅샷을 이루지는 않습니다.

내부 함수: 호출부터 결과까지

실제 C# 내부 단계입니다. ReadState는 예제에 완전하게 정의된 보조 함수이며 숨겨진 내장 명령이 아닙니다.

1. RegisterCharacterGetterAliases

runtime 생성 시 RegisterCharacterGetterAliases가 이름과 호출 형식을 등록합니다. 인수가 없으면 bridge.Self, 있으면 지정한 serial을 사용합니다. 기존 등록은 유지됩니다.

mobile에 IsFlying이 있으면 1, 없거나 mobile이 없으면 0입니다. 높이 Z만으로 비행을 판단하지 않습니다.

프로젝트 소스: external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs; 함수 RegisterCharacterGetterAliases.

2. TryGetObject

TryGetObject가 숫자, 16진수 문자열 및 저장된 이름을 해석합니다. AddObject 이름은 호출할 때마다 다시 해석하며 graphic/type 검색이나 대화형 선택을 수행하지 않습니다.

선택적인 mobile serial: 숫자, 16진수 문자열, self, lasttarget 또는 UO.AddObject 이름. 생략하면 자신의 캐릭터입니다. 객체 ID이며 graphic/type이나 Z가 아닙니다. 알 수 없는 이름, 없거나 파괴된 mobile, 아이템은 0입니다.

프로젝트 소스: external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs; 함수 TryGetObject.

3. Invoke

Invoke는 게임 스레드에서 읽습니다. 작업 스레드는 관리자의 처리를 기다리며 스크립트 취소가 대기를 중단합니다. 추가 지연이나 네트워크 요청은 없습니다.

각 결과는 독립적인 읽기입니다. Exists와 다음 호출 사이에 세계가 바뀔 수 있으므로 여러 조회가 원자적 스냅샷을 이루지는 않습니다.

프로젝트 소스: src/ClassicUO.Client/Game/Managers/ClassicUOInjectionApiBridge.cs; 함수 Invoke.

4. Flying

캐릭터가 지금 비행 중인지 확인합니다. 주로 Gargoyle의 경로 시작이나 이륙 요청 전에 사용합니다. 인수가 없으면 “내 캐릭터가 지금 비행 중인가?”를 읽습니다. 상태만 읽으며 이륙, 착륙 또는 이동을 실행하지 않습니다.

주 용도는 Gargoyle 비행이지만 getter는 종족을 검사하지 않습니다. 프로토콜 7.0.0.0 이상에서 mobile 비트 0x04를 읽고, 이전 버전은 0입니다. 지붕, 높은 Z, 날개 애니메이션 또는 종족만으로 비행을 판단할 수 없습니다.

프로젝트 소스: src/ClassicUO.Client/Game/Managers/ClassicUOInjectionApiBridge.cs; 함수 Flying.

로컬 모델을 읽습니다. target이나 status 요청, 플래그 변경, 패킷 전송은 없습니다. 파괴된 객체는 사전 항목이 제거되기 전에도 없는 것으로 처리합니다.

예제

다음 스크립트 단계 전에 모드 확인

#  괄호는 self입니다. TRUE = 1, FALSE = 0이며 IF UO.Flying() THEN   있습니다. 상태를 바꾸지 않습니다.
SUB Main()
    # Read once; no toggle request is sent.
    VAR active = UO.Flying()
    IF active = TRUE THEN
        UO.Print("Flying mode active")
    ELSE
        UO.Print("Ground mode or character data unavailable")
    END IF
END SUB

매개변수 및 실행 설명:

  • 빈 괄호는 self입니다. TRUE = 1, FALSE = 0이며 IF UO.Flying() THEN을 쓸 수 있습니다. 상태를 바꾸지 않습니다.

이전에 선택한 캐릭터 확인

# ReadState(obj)는 serial/별명을 받아 상태를 반환하며 완전한 함수에서 먼저 존재를 확인합니다. 다른 캐릭터도 이미 받은 데이터로 읽습니다.
SUB Main()
    # Previously selected mobile; no target cursor is opened.
    VAR target = ASC(UO.GetSerial("lasttarget"), 0)
    IF target <> 0 AndAlso UO.Exists(target) THEN
        IF ReadState(target) THEN
            UO.AddObject("flying_mobile", target)
        END IF
    END IF
END SUB

FUNCTION ReadState(obj)
    IF NOT UO.Exists(obj) THEN
        RETURN FALSE
    END IF
    RETURN UO.Flying(obj)
END FUNCTION

매개변수 및 실행 설명:

  • ReadState(obj)는 serial/별명을 받아 상태를 반환하며 완전한 함수에서 먼저 존재를 확인합니다. 다른 캐릭터도 이미 받은 데이터로 읽습니다.

한 번 비행을 요청하고 상태 기다리기

# 비행 지원 서버의 자기 Gargoyle용입니다. EnsureFlight(timeoutMs)는 비행 확인  1/TRUE, 아니면 0/FALSE입니다. 한도 2000 ms, 확인 간격 50 ms. 이미 비행 중이면 요청하지 않으며  외에도 최대  번만 요청합니다. 스크립트 일시정지나 실행 지연으로 실제 시간은 길어질  있습니다.
SUB Main()
    # timeoutMs = 2000; poll interval = 50 ms; at most one toggle request.
    IF EnsureFlight(2000) THEN
        UO.Print("Flight confirmed; ready for the next stage")
    ELSE
        UO.Print("Flight not confirmed; route was not started")
    END IF
END SUB

FUNCTION EnsureFlight(timeoutMs)
    IF NOT UO.Connected() OrElse UO.Dead() THEN
        RETURN FALSE
    END IF
    IF UO.Flying() THEN
        RETURN TRUE
    END IF
    UO.ToggleFly()
    VAR waited = 0
    WHILE waited < timeoutMs
        IF NOT UO.Connected() THEN
            RETURN FALSE
        END IF
        IF UO.Flying() THEN
            RETURN TRUE
        END IF
        WAIT(50)
        waited += 50
    WEND
    RETURN UO.Flying()
END FUNCTION

매개변수 및 실행 설명:

  • 비행 지원 서버의 자기 Gargoyle용입니다. EnsureFlight(timeoutMs)는 비행 확인 시 1/TRUE, 아니면 0/FALSE입니다. 한도 2000 ms, 확인 간격 50 ms. 이미 비행 중이면 요청하지 않으며 그 외에도 최대 한 번만 요청합니다. 스크립트 일시정지나 실행 지연으로 실제 시간은 길어질 수 있습니다.

Clone this wiki locally