 |
Этот материал нуждается в переводе или допереводе.. Вы можете помочь перевести его. Не забывайте предварительно добавлять строку {{Edit|--~~~~}} в материалы над которыми работаете, чтобы не создавать конфликта правок. Пожалуйста, снимите шаблон этого сообщения, когда материал будет вычитан.
|
Skyrim поддерживает версии 3.0 и 3.1 откомпилированных скриптовых файлов.
The format appears to be stored in big-endian regardless of platform (Windows, PS3, and 360 observed as big-endian).
Заголовок
| Имя
|
Тип / Размер
|
Что означает
|
| magic
|
uint32
|
0xFA57C0DE (FASTCODE?)
|
| majorVersion
|
uint8
|
3
|
| minorVersion
|
uint8
|
1
|
| gameId
|
uint16
|
1 = Skyrim?
|
| unknown3
|
uint64
|
Возможно, время компиляции.
|
| sourceFileИмя
|
String
|
Имя файла с исходным кодом (имеет расширение .psc).
|
| unknown5
|
String
|
Имя директории компилятора? Возможно имя пользователя, компилировавшего скрипт?
|
| unknown6
|
String
|
Имя компьютера, на котором был откомпилирован скрипт.
|
| СтрокаTable
|
String Table
|
Таблица строк
|
| debugЧто означает
|
Debug Info
|
Отладочная информация
|
| userFlags
|
User Flags
|
Пользовательские флаги
|
| objects
|
Objects
|
Объекты
|
Основное
Строка (String)
| Имя
|
Тип / Размер
|
Что означает
|
| length
|
uint16
|
Длина строки.
|
| data
|
char[length]
|
Данные. Не может принимать нулевое значение.
|
Секции
Таблица строк (String Table)
| Имя
|
Тип / Размер
|
Что означает
|
| count
|
uint16
|
Количество строк в таблице
|
| Strings
|
String[count]
|
Строки
|
Отладочная информация (Debug Info)
| Имя
|
Тип / Размер
|
Что означает
|
| hasDebugInfo
|
uint8
|
Если равно нулю, то отладочная информация отсутствует. Последующие записи должны быть пропущены.
|
| modificationTime
|
uint64
|
time_t
|
| functionCount
|
uint16
|
Количество функций
|
| functions
|
Debug Function[functionCount]
|
Функции
|
Debug Function
| Имя
|
Тип / Размер
|
Что означает
|
| objectNameIndex
|
uint16
|
Номер строки в строковой таблице.
|
| stateNameIndex
|
uint16
|
Номер строки в строковой таблице.
|
| functionNameIndex
|
uint16
|
Номер строки в строковой таблице.
|
| functionType
|
uint8
|
Тип функции. Допустимые значения: 0-3
|
| instructionCount
|
uint16
|
|
| lineNumbers
|
uint16[instructionCount]
|
Maps instructions to their original lines in the source.
|
Пользовательские флаги (User Flags)
Пользовательский флаг (User Flag)
| Имя
|
Тип / Размер
|
Что означает
|
| NameIndex
|
uint16
|
Номер строки в строковой таблице.
|
| flagIndex
|
uint8
|
Bit index
|
Объекты (Objects)
Объект (Object)
| Имя
|
Тип / Размер
|
Что означает
|
| NameIndex
|
uint16
|
Номер строки в строковой таблице.
|
| size
|
uint32
|
Размер
|
| data
|
uint8[size-4]
|
(Размер, включая себя в большинстве случаев, иначе size-4), содержимое - смотри Object Data
|
Данные объекта (Object Data)
| Имя
|
Тип / Размер
|
Что означает
|
| parentClassName
|
uint16
|
Номер строки в строковой таблице.
|
| docString
|
uint16
|
Номер строки в строковой таблице.
|
| userFlags
|
uint32
|
Пользовательские флаги
|
| autoStateName
|
uint16
|
Номер строки в строковой таблице.
|
| numVariables
|
uint16
|
Количество переменных
|
| Variables
|
Variable[numVariables]
|
Переменные
|
| numProperties
|
uint16
|
Количество свойств
|
| properties
|
Properties[numProperties]
|
Свойства
|
| numStates
|
uint16
|
Количество положений
|
| states
|
State[numStates]
|
Положения
|
Переменная (Variable)
| Имя
|
Тип / Размер
|
Что означает
|
| Имя
|
uint16
|
Номер строки в строковой таблице.
|
| typeИмя
|
uint16
|
Номер строки в строковой таблице.
|
| userFlags
|
uint32
|
|
| data
|
VariableData
|
Default value
|
Данные переменной (Variable Data)
| Имя
|
Тип / Размер
|
Что означает
|
| type
|
uint8
|
0 = null, 1 = идентификатор, 2 = строчный, 3 = целочисленный, 4 = с плавающей запятой, 5 = логический
|
| data
|
uint16
|
Индекс строки в строковой таблице, существует только, если тип переменной строчный (type == 2)
|
| data
|
int32
|
Существует только, если тип переменной целочисленный (type == 3)
|
| data
|
float
|
Существует только, если тип переменной с плавающей запятой (type == 4)
|
| data
|
uint8
|
уществует только, если тип переменной с логический (type == 5)
|
Свойства (Properties)
| Имя
|
Тип / Размер
|
Что означает
|
| name
|
uint16
|
Номер строки в строковой таблице.
|
| type
|
uint16
|
Номер строки в строковой таблице.
|
| docString
|
uint16
|
Номер строки в строковой таблице.
|
| userFlags
|
uint32
|
|
| flags
|
uint8
|
Битовое поле: 1 = чтение, 2 = запись, 4 = autovar
|
| autoVarName
|
uint16
|
Номер строки в строковой таблице, существует, если (flags & 4) != 0
|
| readHandler
|
Function
|
Существует, если (flags & 5) == 1
|
| writeHandler
|
Function
|
Существует, если (flags & 6) == 2
|
Положение (State)
| Имя
|
Тип / Размер
|
Что означает
|
| Имя
|
uint16
|
Номер строки в строковой таблице или пустая строка для стандартного положения
|
| numFunctions
|
uint16
|
Количество функций
|
| functions
|
Function[numFunctions]
|
Функции
|
Функция (Function)
| Имя
|
Тип / Размер
|
Что означает
|
| functionName
|
uint16
|
Номер строки в строковой таблице.
|
| returnType
|
uint16
|
Номер строки в строковой таблице.
|
| docString
|
uint16
|
Номер строки в строковой таблице.
|
| userFlags
|
uint32
|
Пользовательские флаги
|
| flags
|
uint8
|
Флаги
|
| numParams
|
uint16
|
Количество аргументов функции
|
| params
|
VariableType[numParams]
|
Аргументы функции
|
| numLocals
|
uint16
|
Количество локальных переменных функции
|
| locals
|
VariableType[numLocals]
|
Локальные переменные
|
| numInstructions
|
uint16
|
Количество инструкций
|
| instructions
|
Instruction[numInstructions]
|
Инструкции
|
Тип переменной (Variable Type)
| Имя
|
Тип / Размер
|
Что означает
|
| Name
|
uint16
|
Номер строки в строковой таблице.
|
| type
|
uint16
|
Номер строки в строковой таблице.
|
Инструкция (Instruction)
| Имя
|
Тип / Размер
|
Что означает
|
| op
|
uint8
|
Смотри опкоды
|
| arguments
|
VariableData[changes depending on opcode]
|
Длинна зависит от конкретного опкода, а также от переменной-аргумента.
|
Операционные коды (Opcodes)
Код операции, операционный код, опкод — часть машинного языка, называемой инструкцией, определяющей операцию, которая должна быть выполнена.
| Код
|
Имя
|
Аргументы
|
Описание
|
| 00
|
nop
|
none
|
Бездействие.
|
| 01
|
iadd
|
SII
|
Сумма двух целых чисел.
|
| 02
|
fadd
|
SFF
|
Сумма двух чисел с плавающей запятой.
|
| 03
|
isub
|
SII
|
Разница двух целых чисел.
|
| 04
|
fsub
|
SFF
|
Разница двух чисел с плавающей запятой.
|
| 05
|
imul
|
SII
|
Произведение двух целых чисел.
|
| 06
|
fmul
|
SFF
|
Произведение двух чисел с плавающей запятой.
|
| 07
|
idiv
|
SII
|
Частное двух целых чисел.
|
| 08
|
fdiv
|
SFF
|
Частное двух чисел с плавающей запятой.
|
| 09
|
imod
|
SII
|
Остаток от деления двух целых чисел.
|
| 0A
|
not
|
SA
|
Логическая инверсия. Возможно преобразование типов.
|
| 0B
|
ineg
|
SI
|
Отрицание целого числа.
|
| 0C
|
fneg
|
SF
|
Отрицание числа с плавающей запятой.
|
| 0D
|
assign
|
SA
|
Присваивание.
|
| 0E
|
cast
|
SA
|
Преобразование типов.
|
| 0F
|
cmp_eq
|
SAA
|
Возвращает истину, если a = b
|
| 10
|
cmp_lt
|
SAA
|
Возвращает истину, если a < b
|
| 11
|
cmp_le
|
SAA
|
Возвращает истину, если a <= b
|
| 12
|
cmp_gt
|
SAA
|
Возвращает истину, если a > b
|
| 13
|
cmp_ge
|
SAA
|
Возвращает истину, если a >= b
|
| 14
|
jmp
|
L
|
relative unconditional branch
|
| 15
|
jmpt
|
AL
|
relative conditional branch if a bool is true
|
| 16
|
jmpf
|
AL
|
relative conditional branch if a bool is false
|
| 17
|
callmethod
|
NSS*
|
|
| 18
|
callparent
|
NS*
|
|
| 19
|
callstatic
|
NNS*
|
|
| 1A
|
return
|
A
|
|
| 1B
|
strcat
|
SQQ
|
concatenate two Строкаs
|
| 1C
|
propget
|
NSS
|
retrieve an instance Свойства
|
| 1D
|
propset
|
NSA
|
set an instance Свойства
|
| 1E
|
array_create
|
Su
|
create an array of the specified size
|
| 1F
|
array_length
|
SS
|
Получить длинну массива.
|
| 20
|
array_getelement
|
SSI
|
Присвоить значение элементу массива.
|
| 21
|
array_setelement
|
SIA
|
Получить значение элемента массива.
|
Each character in the "arguments" Строка specifies an argument type. They're all read as Переменная Data. * characters are used for Переменная-length arguments. Первый аргумент - целое число, указывающее на количество последующих аргументов.
Инструмент для получения информации о откомпилированых скриптах вы можете получить тут: [1].