API UO AddUserStatic - LIHACHTETAN/ClassicUO-BadNewbie-BasicIDE GitHub Wiki

UO.AddUserStatic

ClassicUO / Basic IDE

Оглавление · Алфавитный указатель · World & Geometry

Reads the currently loaded ClassicUO map/tile/art asset data using the active client asset loaders.

Синтаксис

UO.AddUserStatic(StaticItem:Any, WorldNum:Any) -> Any
UO.AddUserStatic(graphic:Any, x:Any, y:Any, z:Any, hue:Any, map:Any) -> Integer

Регистр имени не важен. Any — динамическое значение Basic; Unit — отсутствие возвращаемого значения. Integer — знаковое 32-битное число, Decimal — число с плавающей точкой. Правила типов, serial, индексов и ожиданий.

Параметры

Имя Назначение
StaticItem Позиционный аргумент этой перегрузки. Подробности использования указаны в описании/фактической ветви runtime ниже.
WorldNum Map/facet identifier. Tile/static APIs are limited to the currently loaded ClassicUO map unless stated otherwise.
graphic Graphic/body/tile ID. Use a decimal or 0x-prefixed hexadecimal value; wildcard -1/0xFFFF is valid only for overloads whose behavior documents wildcard matching.
x Координата; для команд движения/тайлов — игровая карта, для mouse/window — пиксели экрана.
y Координата; для команд движения/тайлов — игровая карта, для mouse/window — пиксели экрана.
z Координата; для команд движения/тайлов — игровая карта, для mouse/window — пиксели экрана.
hue Hue/color value. Use decimal or 0x-prefixed hexadecimal; -1 means any/default hue only where the command explicitly supports it.
map Facet/map index. Standard values are 0=Felucca, 1=Trammel, 2=Ilshenar, 3=Malas, 4=Tokuno, 5=Ter Mur where supported by the shard/client data.

Параметры обязательны внутри каждой показанной сигнатуры. Опустить аргумент можно только при наличии более короткой перегрузки; пропуск позиции посередине не подразумевается.

Примеры

Каждый блок — самостоятельный скрипт из мануала проекта. Параметры демонстрационного объекта/контейнера и условия действия необходимо сопоставить с вашей игровой ситуацией.

Пример 1

SUB Main()
    VAR result = UO.AddUserStatic(self, 0)
END SUB

Пример 2

SUB Main()
    VAR result = UO.AddUserStatic(0, 0, 0, 0, 0, 0)
END SUB

Пример 3

SUB Main()
    VAR result = UO.AddUserStatic(1, 2)
    UO.Print(CStr(result))
END SUB

Пример 4

SUB Main()
    VAR arg1 = 0x0EED # graphic
    VAR arg2 = UO.GetX() # x
    VAR arg3 = UO.GetY() # y
    VAR arg4 = UO.GetZ() # z
    VAR arg5 = -1 # hue
    VAR arg6 = 6 # map
    VAR result = UO.AddUserStatic(arg1, arg2, arg3, arg4, arg5, arg6)
    UO.Print(CStr(result))
END SUB

Пример 5

SUB Main()
    VAR arg1 = 1 # StaticItem
    VAR arg2 = 2 # WorldNum
    VAR result = UO.AddUserStatic(arg1, arg2)
    UO.Print(CStr(result))
END SUB

Пример 6

SUB ReadResult()
    VAR arg1 = 1 # StaticItem
    VAR arg2 = 2 # WorldNum
    VAR result = UO.AddUserStatic(arg1, arg2)
    UO.Print(CStr(result))
END SUB

SUB Main()
    ReadResult()
END SUB
Реализация и проверка контракта
  • InjectionScript.Runtime.InjectionApiUO+<>c__DisplayClass38_0.<RegisterStealthCompatibility>b__0
  • InjectionScript.Runtime.InjectionApiUO.<Register>b__37_14

Соответствующая ветвь совместимого обработчика в InjectionApiUO.cs. Arg(i)/Text(i) читают позицию с нуля; bridge обращается к клиенту. Прямые типизированные перегрузки перечислены выше и могут иметь отдельный маршрут.

{
                    int map = Arg(1, bridge.WorldNumber);
                    if (arguments[0].Kind != InjectionValueKind.Array)
                    {
                        int graphic = 0;
                        if (arguments[0].Kind == InjectionValueKind.String &&
                            !NumberConversions.TryStr2Int(arguments[0].String, out graphic))
                        {
                            int legacyId = state.NextUserStaticId++;
                            state.UserStatics[legacyId] = Text(0) + "|" + Text(1);
                            return new InjectionValue(legacyId);
                        }
                        graphic = arguments[0].Kind == InjectionValueKind.String
                            ? graphic
 : NumberConversions.ToInt(arguments[0]);
                        return new InjectionValue(AddUserStatic(graphic, bridge.GetX(bridge.Self), bridge.GetY(bridge.Self),
                            bridge.GetZ(bridge.Self), 0, map));
                    }
                    if (arguments[0].Array.Length < 4)
                        throw new NativeSubrutineException("AddUserStatic expects [graphic,x,y,z,color] and world number, or graphic,x,y,z,color,world.");
                    InjectionValue[] item = arguments[0].Array;
                    return new InjectionValue(AddUserStatic(
                        NumberConversions.ToInt(item[0]), NumberConversions.ToInt(item[1]), NumberConversions.ToInt(item[2]),
                        NumberConversions.ToInt(item[3]), item.Length > 4 ? NumberConversions.ToInt(item[4]) : 0, map));
                }

Источник реестра и отчёт сверки. Примеры проверяются загрузчиком/парсером включённого runtime. Действия на игровом сервере этой проверкой не исполняются.

⚠️ **GitHub.com Fallback** ⚠️