ВНИМАНИЕ! Наша конференция посвящена космической тематике и компьютерным играм. Политические вопросы и происходящие в мире события в данный момент на нашем сайте не обсуждаются!
|
» Новые скриптовые команды. Справочник от 16.01.2009. | страница 1 |
|
|
|
Канал X3: Terran Conflict »
Модовый и скриптовый отсек X3: Terran Conflict: «Новые скриптовые команды. Справочник от 16.01.2009.» |
|
|
Chem
780 EGP
          Рейтинг канала: 6(498) Репутация: 248 Сообщения: 4751 Откуда: Киев Зарегистрирован: 08.01.2007
 |
|
Собственно тема перекочевала из канала Reuniona.
Собственно обновил пост .
Справочник по скриптовым командам игры X3:Terran Conflict (version 0.1.11, build date 16.01.2009)
Список команд соответствует версии игры 1.4 (engine version 42)!
Сортировка команд в справочнике соответствует отображению в ScE (встроенный редактор).
Изначальная инфа взята из проекта "Скрипты - это легко..." авторства DragonP, а так же Справочник по скриптовым командам игры X3:Reunion
Commands.0.1.11.zip |
Описание: |
Справочник по скриптовым командам игры X3:Terran Conflict, в формате .chm. version 0.1.11, build date 16.01.2009 |
|
Имя файла: |
Commands.0.1.11.zip |
Размер файла: |
428.38 KB |
Скачано: |
3115 раз(а) |
_________________ Умножим энтропию на 0 :-)
Последний раз редактировалось: Chem (18:38 16-01-2009), всего редактировалось 7 раз(а) Последний раз редактировалось: Арманкессилон (11:15 13-01-2009), всего редактировалось 1 раз |
|
|
Andrei [<>Ace]
303 EGP
   Рейтинг канала: 4(94) Репутация: 108 Сообщения: 766 Откуда: Беларусь, Салiгорск Зарегистрирован: 29.03.2006
 |
|
Раздел Общие команды (General Commands)
Код: |
1337 <RetVar/IF> read text: page id=<Var/Number>, from <Var/Number> to <Var/Number> to array, include empty=<Var/Number> |
Возвращает в переменную <RetVar> массив строк языкового файла со страницы page id=<Var/Number> с from <Var/Number> по to <Var/Number>, include empty=<Var/Number>может принимать значения TRUE/FALSE (1/0) - определяет записывать несуществующие строки (будет записан ReadText?-?) в массив или нет.
Также при include empty=<Var/Number> = FALSE (0) проверяет существование каких либо строк в диапазоне from <Var/Number> to <Var/Number> на странице page id=<Var/Number>.
Код: |
1338 <RetVar/IF> read text: page id=<Var/Number>, id=<Var/Number> exists |
Проверяет существует ли строка языкового файла на странице page id=<Var/Number> с id=<Var/Number> возвращает значения 1 - существует 0-нет.
Код: |
1414 <RetVar/IF><RefObj> get all local variable keys, starting with=<Var/String>
1436 <RetVar/IF> get all global variable keys, starting with=<Var/String> |
Возвращает в переменную <RetVar> массив имен переменных или проверяет существовение переменных, локальных для объекта <RefObj> или глобальных соответственно, имя которх начинается со строки starting with=<Var/String>.
Код: |
1450 <RetVar/IF><RefObj> get local variables: regular expression=<Var/String>
1451 <RetVar/IF> get global variables: regular expression=<Var/String> |
Возвращает в переменную <RetVar> массив имен переменных или проверяет существовение переменных, локальных для объекта <RefObj> или глобальных соответственно, имя которых содержат строку regular expression=<Var/String>.
Код: |
1457 <RetVar>= get maximum, <Var/Number>, <Var/Number>, <Var/Number>, <Var/Number>, <Var/Number> |
Возвращает в переменную <RetVar> максимальное числовое значение из приведенных чисел или числовых переменных. <Var/Number>
Дополнительно в разделе Общие команды (General Commands) создан подраздел команды/сигналы куда снесли все скриптовые команды работы с шаблонами игровых команд/сигналов.
По командам раздела все. Подразделы позже
|
|
|
Chem
780 EGP
          Рейтинг канала: 6(498) Репутация: 248 Сообщения: 4751 Откуда: Киев Зарегистрирован: 08.01.2007
 |
|
Воот, а я как раз скелет справочника делаю
_________________ Умножим энтропию на 0 :-) |
|
|
Andrei [<>Ace]
303 EGP
   Рейтинг канала: 4(94) Репутация: 108 Сообщения: 766 Откуда: Беларусь, Салiгорск Зарегистрирован: 29.03.2006
 |
|
Раздел Общие команды (General Commands)
подраздел Вызовы скриптов
Код: |
1425 <RetVar/IF><RefObj> call named script: script=<Var/String>, <Value>, <Value>, <Value>, <Value>, <Value> |
Похожа на команду
Код: |
@<RetVar/IF/START> <RefObj> call script <Script Name>: <Parameter> |
Отличие в следующем:
1. Нет необходимости выбирать скрипт из списка скриптов, достаточно правильно вписать в script=<Var/String> имя запускаемого скрипта.
Запускаемый скрипт может содержать 5-аргументов.
2. не создает прерывания @ при запуске вложенного скрипта!
3. нет префикса START
Код: |
1426 <RefObj> start named script: task=<Var/Number> scriptname=<Var/String> prio=<Var/Number>, <Value>, <Value>, <Value>, <Value>, <Value> |
Аналогично
Код: |
<RefObj> start task <Var/Number> with script <Script Name> and prio <Var/Number>: arg1=<Value> arg2=<Value> arg3=<Value> arg4=<Value> arg5=<Value> |
Отличие в следующем:
1. Нет необходимости выбирать скрипт из списка скриптов, достаточно правильно вписать в script=<Var/String> имя запускаемого скрипта.
Код: |
1462 <RetVar>=<RefObj> get next available task: starting=<Var/Number> |
Возвращает в переменную <RetVar> следующий свободный (не занятый скриптом) стек объекта <RefObj> начиная со стека starting=<Var/Number> в сторону возрастания.
По умолчанию предлагает использовать стеки 30 и выше.
Также в подраздел переехали все скриптовые команды связанные с запуском скриптов и стеками.
Все.
|
|
|
Chem
780 EGP
          Рейтинг канала: 6(498) Репутация: 248 Сообщения: 4751 Откуда: Киев Зарегистрирован: 08.01.2007
 |
|
Даа, новые команды - и источник большого удобства в написании скриптов, но и еще больший источник глюков.
Сюда обязательно надо добавить было проверку наличия скрипта в принципе, что-то типа
<RetVar/IF> is script <Script Name> version <Var/String> exists.
_________________ Умножим энтропию на 0 :-) |
|
|
Andrei [<>Ace]
303 EGP
   Рейтинг канала: 4(94) Репутация: 108 Сообщения: 766 Откуда: Беларусь, Салiгорск Зарегистрирован: 29.03.2006
 |
|
Раздел Общие команды (General Commands)
подраздел Массивы
Код: |
1375 <RetVar>= sort array <Value> |
Возвращает в переменную <RetVar> упорядоченный по возрастанию массив array <Value>
Код: |
1417 <RetVar>= sort array: data=<Value> sort values=<Value> |
Непонятное что-то
Код: |
1406 <RetVar/IF> find <Value> in array: <Value> |
Проверяет наличие find <Value> в массиве array: <Value> и только.
Код: |
1415 <RetVar>= create new array, arguments=<Value>, <Value>, <Value>, <Value>, <Value> |
Создает новый массив из аргументов
Код: |
1443 <RetVar/IF> reverse array <Value> |
Возвращает в переменную <RetVar> перевернутый массив array <Value>.
К чему IF непонятно - значение всегда TRUE
Код: |
1501 <RetVar/IF> arrays <Value> and <Value> are equal |
Проверяет идентичность массивов
подраздел Строки
Код: |
1474 <RetVar>= convert number <Var/Number> to string |
Преобразует число в строку вида 000,000,000,000
Код: |
1477 <RetVar>= format time: <Var/Number> |
Похоже замена
Код: |
<RetVar> = format seconds=<Var/Number> to Zura time string
engine v. 32 |
· Команда преобразовывает количество секунд, заданное в параметре <Var/Number> к внутреннему формату Zura. Результат возвращается в переменную <RetVar>.
Код: |
1478 <RetVar/IF> match regular expession : <Var/String> to string <Var/String> |
Проверяет наличие строки expession : <Var/String> в строке to string <Var/String>
Возможно expession(в редакторе)=expression(в словаре)
Chem : |
Даа, новые команды - и источник большого удобства в написании скриптов
|
Здесь столько новых команд - теряюсь просто.
А как справочник перелопатить придется вообще ужос
Арманкессилон : |
Может в data=<Value> подставляется сам массив, а в sort values=<Value> способ сортировки (по возрастанию, по убыванию)?
|
Нет. пробовал.
Последний раз редактировалось: Andrei [<>Ace] (14:35 13-01-2009), всего редактировалось 3 раз(а) |
|
|
Арманкессилон
1740 EGP
             Рейтинг канала: 10(1323) Репутация: 346 Сообщения: 13122 Откуда: Ставрополь Зарегистрирован: 16.08.2007
 |
|
Andrei [<>Ace] : |
Не понятное что-то
|
Может в data=<Value> подставляется сам массив, а в sort values=<Value> способ сортировки (по возрастанию, по убыванию)?
_________________ Все астероиды не пересчитать! |
|
|
AlexV
555 EGP
       Рейтинг канала: 5(223) Репутация: 182 Сообщения: 1157 Откуда: нискажу Зарегистрирован: 10.01.2006
 |
|
Арманкессилон : |
способ сортировки (по возрастанию, по убыванию)?
|
не-е-е... там всё гораздо запущеннее
вырезка из !fight.board.launchmarines
Код: |
040 $aSkill = array alloc: size=$count.marines
041 while $count.marines
042 |dec $count.marines =
043 |$marine = $a.marines[$count.marines]
044 |$skill = $marine -> get marine mechanical skill
045 |$aSkill[$count.marines] = $skill
046 end
047 $aMarines = sort array: data=$a.marines sort values=$aSkill
048 $aMarines = reverse array $aMarines
|
добавлено спустя 2 минуты:
$a.marines - аргумент скрипта, тоже массив
добавлено спустя 2 минуты:
т.е. получается, что сортирует массив дата в соответствии с результатом сортировки values
конкретно в примере сортирует десантников по их механическому уровню
_________________ а хуже всего приходится программистам из Microsoft. Им в случае чего и обругать-то некого
Последний раз редактировалось: AlexV (13:54 13-01-2009), всего редактировалось 3 раз(а) |
|
|
Арманкессилон
1740 EGP
             Рейтинг канала: 10(1323) Репутация: 346 Сообщения: 13122 Откуда: Ставрополь Зарегистрирован: 16.08.2007
 |
|
AlexV : |
т.е. получается, что сортирует массив дата в соответствии с результатом сортировки values
|
Не понял, а откуда он знает соответствие? Что у нас там за данные в $a.marines? Эта команда применима что-ли только к определенным структурам данных? Блин, приду с работы, специально буду смотреть по этой команде.
добавлено спустя 2 минуты:
Я к тому, что будет, если у меня в массиве 1 будут данные:
Петя
Коля
Женя
Степа
А я их попрошу отсортировать по массиву
3
2
1
4
?
_________________ Все астероиды не пересчитать!
Последний раз редактировалось: Арманкессилон (14:32 13-01-2009), всего редактировалось 1 раз |
|
|
Andrei [<>Ace]
303 EGP
   Рейтинг канала: 4(94) Репутация: 108 Сообщения: 766 Откуда: Беларусь, Салiгорск Зарегистрирован: 29.03.2006
 |
|
Andrei [<>Ace] : |
Непонятное что-то
|
Арманкессилон : |
Не понял, а откуда он знает соответствие?
|
Все понял!
Код: |
1417 <RetVar>= sort array: data=<Value> sort values=<Value> |
Возвращает в переменную <RetVar> отсортированный массив data=<Value> согласно сортировки по возрастанию массива values=<Value>. Во
_Пример data=<Value> 1 2 3 4 5 или 1 2 3 4 5
______ values=<Value> 2 5 3 4 1 или 2 5 3 3 1
____________<RetVar> 5 1 3 4 2 или 5 1 4 3 2
Условие - одинаковый размер массива, иначе бред получается.
Последний раз редактировалось: Andrei [<>Ace] (15:10 13-01-2009), всего редактировалось 3 раз(а) |
|
|
AlexV
555 EGP
       Рейтинг канала: 5(223) Репутация: 182 Сообщения: 1157 Откуда: нискажу Зарегистрирован: 10.01.2006
 |
|
в массиве data - у тебя объекты любого типа
массив values ты формируешь из одного атрибута этих объектов
т.е. в результате имеешь 2 массива как табличку из 2х колонок
Петя 3
Коля 2
Женя 1
Степа 4
результат получаешь а-ля в ёкселе при сортировке по 2-ой колонке
Женя 1
Коля 2
Петя 3
Степа 4
т.е. команда сортирует типизированные значения, при этом параллельно перекладывая элементы главного массива
_________________ а хуже всего приходится программистам из Microsoft. Им в случае чего и обругать-то некого |
|
|
l0m
340 EGP
    Рейтинг канала: 6(346) Репутация: 87 Сообщения: 1062
Зарегистрирован: 18.03.2006
 |
|
Арманкессилон : |
Не понял, а откуда он знает соответствие? Что у нас там за данные в $a.marines?
|
думаю, там объекты - маринки, со своими свойствами, в т.ч. механикой. Вот по механике и будет сортировать, но сортировать будет не $aSkill, а соответствующие данные из $a.marines
Петя 3 4 5 1
Коля 2 3 5 2
Женя 1 5 2 4
Степа 4 3 3 4
будут отсортированы как
Женя 1 5 2 4
Коля 2 3 5 2
Петя 3 4 5 1
Степа 4 3 3 4
если первая характеристика маринки искомая механика, или как
Женя 1 5 2 4
Степа 4 3 3 4
Петя 3 4 5 1
Коля 2 3 5 2
если третья.
Аналог сортировки двумерного массива, до которого у егософта руки так и не дошли, хотя задатки в виде $array[][] имеются.
|
|
|
Арманкессилон
1740 EGP
             Рейтинг канала: 10(1323) Репутация: 346 Сообщения: 13122 Откуда: Ставрополь Зарегистрирован: 16.08.2007
 |
|
l0m : |
думаю, там объекты - маринки, со своими свойствами, в т.ч. механикой. Вот по механике и будет сортировать, но сортировать будет не $aSkill, а соответствующие данные из $a.marines
|
Да не, наверное, на самом деле просто элементам массива data=<Value> присваиваются индексы сортировки из массива values=<Value>, а потом делает сортировку по этим индексам и возвращает значения в массив <RetVar>
_________________ Все астероиды не пересчитать! |
|
|
AlexV
555 EGP
       Рейтинг канала: 5(223) Репутация: 182 Сообщения: 1157 Откуда: нискажу Зарегистрирован: 10.01.2006
 |
|
Арманкессилон : |
Да не, наверное, на самом деле просто элементам массива dat
|
скорее всего именно так, особо любопытные могут в obj-е подсмотреть
_________________ а хуже всего приходится программистам из Microsoft. Им в случае чего и обругать-то некого |
|
|
Chem
780 EGP
          Рейтинг канала: 6(498) Репутация: 248 Сообщения: 4751 Откуда: Киев Зарегистрирован: 08.01.2007
 |
|
Andrei [<>Ace] : |
Проверяет наличие строки expession : <Var/String> в строке to string <Var/String>
Возможно expession(в редакторе)=expression(в словаре)
|
Это проверка на соответствие строки регулярному выражению.
Возможно два варианта - либо просто истина или ложь, второй вариант - то что совпало и третий вариант - возвращает массив, где в 0 - полное совпадение, элементы от единицы - группы отдельных совпадений - было бы круто
Код:
1474 <RetVar>= convert number <Var/Number> to string
Преобразует число в строку вида 000,000,000,000
При этом скорее всего использует разделитель {35,4257}.
_________________ Умножим энтропию на 0 :-) |
|
|
Andrei [<>Ace]
303 EGP
   Рейтинг канала: 4(94) Репутация: 108 Сообщения: 766 Откуда: Беларусь, Салiгорск Зарегистрирован: 29.03.2006
 |
|
Раздел Торговые команды (Trade Commands)
торговые команды поиска станций (кликните здесь для просмотра)
606 <RetVar/IF> find station: product <Var/Ware> with best price: max.price=<Var/Number>, amount=<Var/Number>, max.jumps=<Var/Number>, startsector=<Var/Sector>, trader=<Var/Ship/Station>, exclude array=<Value>
1002 <RetVar/IF><RefObj> find station: product <Var/Ware> with best price: max.price=<Var/Number>, amount=<Var/Number>, max.jumps=<Var/Number>, startsector=<Var/Sector>, trader=<Var/Ship/Station>, exclude array=<Value>
607 <RetVar/IF> find station: product <Var/Ware> with min. jumps: max.price=<Var/Number>, amount=<Var/Number>, max.jumps=<Var/Number>, startsector=<Var/Sector>, trader=<Var/Ship/Station>, exclude array=<Value>
1003 <RetVar/IF><RefObj> find station: product <Var/Ware> with min. jumps: max.price=<Var/Number>, amount=<Var/Number>, max.jumps=<Var/Number>, startsector=<Var/Sector>, trader=<Var/Ship/Station>, exclude array=<Value>
608 <RetVar/IF> find station: resource <Var/Ware> with best price: min.price=<Var/Number>, amount=<Var/Number>, max.jumps=<Var/Number>, startsector=<Var/Sector>, trader=<Var/Ship/Station>, exclude array=<Value>
1004 <RetVar/IF><RefObj> find station: resource <Var/Ware> with best price: min.price=<Var/Number>, amount=<Var/Number>, max.jumps=<Var/Number>, startsector=<Var/Sector>, trader=<Var/Ship/Station>, exclude array=<Value>
609 <RetVar/IF> find station: resource <Var/Ware> with min. jumps: min.price=<Var/Number>, amount=<Var/Number>, max.jumps=<Var/Number>, startsector=<Var/Sector>, trader=<Var/Ship/Station>, exclude array=<Value>
1005 <RetVar/IF><RefObj> find station: resource <Var/Ware> with min. jumps: min.price=<Var/Number>, amount=<Var/Number>, max.jumps=<Var/Number>, startsector=<Var/Sector>, trader=<Var/Ship/Station>, exclude array=<Value>
663 <RetVar/IF> find station sells: resource <Var/Ware> with best price: max.price=<Var/Number>, amount=<Var/Number>, max.jumps=<Var/Number>, startsector=<Var/Sector>, trader=<Var/Ship/Station>, exclude array=<Value>
1006 <RetVar/IF><RefObj> find station sells: resource <Var/Ware> with best price: max.price=<Var/Number>, amount=<Var/Number>, max.jumps=<Var/Number>, startsector=<Var/Sector>, trader=<Var/Ship/Station>, exclude array=<Value>
664 <RetVar/IF> find station sells: resource <Var/Ware> with min. jumps: max.price=<Var/Number>, amount=<Var/Number>, max.jumps=<Var/Number>, startsector=<Var/Sector>, trader=<Var/Ship/Station>, exclude array=<Value>
1007 <RetVar/IF><RefObj> find station sells: resource <Var/Ware> with min. jumps: max.price=<Var/Number>, amount=<Var/Number>, max.jumps=<Var/Number>, startsector=<Var/Sector>, trader=<Var/Ship/Station>, exclude array=<Value>
1169 <RetVar/IF> find station: product <Var/Ware> with best price depend on jumps: max.price=<Var/Number>, amount=<Var/Number>, max.jumps=<Var/Number>, startsector=<Var/Sector>, trader=<Var/Ship/Station>, exclude array=<Value>
1170 <RetVar/IF> find station: resource <Var/Ware> with best price depend on jumps: min.price=<Var/Number>, amount=<Var/Number>, max.jumps=<Var/Number>, startsector=<Var/Sector>, trader=<Var/Ship/Station>, exclude array=<Value>
1171 <RetVar/IF> find station sells: resource <Var/Ware> with best price depend on jumps: max.price=<Var/Number>, amount=<Var/Number>, max.jumps=<Var/Number>, startsector=<Var/Sector>, trader=<Var/Ship/Station>, exclude array=<Value>
1176 <RetVar/IF> find station: product <Var/Ware> with best price random: max.price=<Var/Number>, amount=<Var/Number>, max.jumps=<Var/Number>, startsector=<Var/Sector>, trader=<Var/Ship/Station>, exclude array=<Value>
1177 <RetVar/IF> find station: resource <Var/Ware> with best price random: min.price=<Var/Number>, amount=<Var/Number>, max.jumps=<Var/Number>, startsector=<Var/Sector>, trader=<Var/Ship/Station>, exclude array=<Value>
1178 <RetVar/IF> find station sells: resource <Var/Ware> with best price random: max.price=<Var/Number>, amount=<Var/Number>, max.jumps=<Var/Number>, startsector=<Var/Sector>, trader=<Var/Ship/Station>, exclude array=<Value>
|
Каждую описывать не буду.
Различие следующие:
1. Новый аргумент exclude array=<Value> - сюда подставляется массив секторов или станций которые должны быть исключены из поиска, если ничего исключать не нужно пойдет null.
2. Команды начинающиеся с <RetVar/IF> find от <RetVar/IF><RefObj> find отличаются тем, что первые ищут станции начиная от startsector=<Var/Sector>, поэтому он должен быть непременно задан, иначе поиск начнется от сектора с координатами 0,0. Вторые - при неуказанном startsector=<Var/Sector> начнут поиск от сектора в котором находится <RefObj>.
3. with best price depend on jumps: - ищут best учитывая затраты на прыжок.
4. with best price random: - ищут случайный best среди best-тов.
5. Далее как и было.
Последний раз редактировалось: Andrei [<>Ace] (11:48 15-01-2009), всего редактировалось 1 раз |
|
|
l0m
340 EGP
    Рейтинг канала: 6(346) Репутация: 87 Сообщения: 1062
Зарегистрирован: 18.03.2006
 |
|
Andrei [<>Ace] : |
вторые - среди известных <RefObj>
|
не думаю. Есть станции, известные игроку и все другие. Логично предположить, что все станции, известные игроку, известны всем объектам игрока. Неписям же известны вообще все станции. Таким образом в известности для объекта смысла нет.
Мне кажется, хотя и требует проверки, что условия поиска, в т.ч прыжки, проверяются относительно этого самого <RefObj>.
К слову. Проверено, что задание количества в торговых командах никак не влияет на результаты поиска. Если в поиске на покупку задать цену и количество, то возможен возврат станции с нормальной ценой, но с меньшим количеством, а при продаже - с меньшим свободным местом. Приходится перепроверять после команды
|
|
|
Andrei [<>Ace]
303 EGP
   Рейтинг канала: 4(94) Репутация: 108 Сообщения: 766 Откуда: Беларусь, Салiгорск Зарегистрирован: 29.03.2006
 |
|
l0m : |
Неписям же известны вообще все станции.
|
Как не странно нет . Неписи тоже знают не все. Проверено на неписях.
Разные неписи в одном секторе с одинаковыми прочими аргументами выдают разные станции.
l0m : |
прыжки, проверяются относительно этого самого <RefObj>.
|
а startsector зачем.
Andrei [<>Ace] : |
2. Команды начинающиеся с <RetVar/IF> find от <RetVar/IF><RefObj> find отличаются тем, что первые ищут станции среди известных (отмеченных на карте), вторые - среди известных <RefObj>.
|
Вообще стоит еще поразбираться. Если подставить trader=null тогда все станции определяются, но всеравно разные.
Последний раз редактировалось: Andrei [<>Ace] (16:14 14-01-2009), всего редактировалось 3 раз(а) |
|
|
l0m
340 EGP
    Рейтинг канала: 6(346) Репутация: 87 Сообщения: 1062
Зарегистрирован: 18.03.2006
 |
|
Andrei [<>Ace] : |
Разные неписи в одном секторе с одинаковыми прочими аргументами выдают разные станции
|
это не удвительно. Все определяется той помойкой, в которой расположен массив станций на момент обращения.
Andrei [<>Ace] : |
а startsector зачем.
|
За тем, что если есть объект, незачем доставать его сектор. Т.е еще одна степень свободы
Andrei [<>Ace] : |
Вообще стоит еще поразбираться.
|
согласен
Последний раз редактировалось: l0m (16:35 14-01-2009), всего редактировалось 1 раз |
|
|
|
|
|
Канал X3: Terran Conflict ->
Модовый и скриптовый отсек X3: Terran Conflict: «Новые скриптовые команды. Справочник от 16.01.2009.» |
|
К списку каналов | Наверх страницы |
Цитата не в тему: Предлагаю ввести медаль "За наглость". Вручать за требования о вручении прочих наград. (Talon)
|
» Новые скриптовые команды. Справочник от 16.01.2009. | страница 1 |
|