Урок 6. Врата В этом уроке я НЕ буду рисовать таблицу, т.к. я подробно...
X3 Terran Conflict / X3 Земной конфликт
 
X3 Terran conflict  
 

На сайте онлайн (человек): 84



 



Урок 6. Врата В этом уроке я НЕ буду рисовать таблицу, т.к. я подробно...

Terran Conflict (X3TC) / Форум / Скрипты и моды для X3 Terran Conflict / Учимся простейшим скриптам

Учимся простейшим скриптам
(http://x3tc.net/x3_forum/?tid=672)
Автор: Malstrime
(15.01.2010 21:04:37)

Урок 6. Врата


 
В этом уроке я НЕ буду рисовать таблицу, т.к. я подробно буду описывать что и как делается.
 


  1. Для начала вы должны определиться какой именно скрипт вам нужен:
     
    1. Создание врат на месте, рядом с вами и указание точки выхода (запуск и параметры - ручные) - не рассматривается, есть Хаб и "Прыжок в точку"
    2. Автосоздание врат в определенных точках при загрузке игры. - тогда перейдем к делу

  2. Мы должны определиться, что нам нужно:
    1. Секторы, которые будут соединены (в уроке я соединю Аргон Прайм и Королевский тупик):
      1. Определяем галактический индекс с помощью карты. Промежутки считать.
         
      2. По-горизонтали - X (0-21); По-вертикали - Y (0-16); Земные сектора не считаем.

    2. Координаты врат (в Метрах, т.е. 1000 - 1км)
    3. Доступность врат, время активности

  3. Приступим:

  4. Для начала сделаем автоматический одноразовый запуск, спасибо, MistR'у:
    1. Ищем: Общие команды -> <Возвр/IF> get global variable: name=<Перем/Текст>  - оба значения пускай будут off
    2. Далее: Общие команды -> <Возвp/IF><Выражение> - первое значение - имя переменной, второе значение, пускай имя of, а значение 0
    3. Снова: Общие команды -> <Возвp/IF><Выражение> - Теперь первое уже не переменная, а оператор условного перехода, выбираем "Ввод скрипта -> if"
    4. Продолжаем вводить данные: троеточие красное? жмите Enter! После выбираем в переменных переменную of, потом еще раз Enter, выбираем в действиях знак "==", жмем Enter, выбираем переменную off
    5. Новая строка, идем сюда: Общие команды -> Управление исполнением цикла -> go to label <Метка>, вводим имя метки - end
    6. Идем туда же, только  выбираем else
    7. Первая часть окончена, далее - основной скрипт.


  5. Запишем в переменные гал. индексы (X и Y). Чтобы каждый раз не писать числа и не запутаться. Находим в общих командах:
     Код:
    1. <Возвр/IF><Выражение>
     

    Выбираем переменная, вводим название (например, from.X (координата X первого сектора (Аргон Прайм), в котором стоят врата)) и значение (ввод скрипта -> <Число>), чтобы было вот так:
     Код:
    1. $from.X= 1 ...
     

    Повторяем три раза, введя имя второй раз from.Y (координата Y первого сектора (Аргон Прайм), в котором стоят врата), третий и четверты соответственно (to.X и to.Y (координаты Королевского тупика) они равны нулям), значения переменных - координаты Х и Y соответственно.

    В итоге всё должно выглядеть так:
     Код:
    1. ...
    2. 006 $from.X= 1
    3. 007 $from.Y= 2
    4. 008 $to.X= 0
    5. 009 $to.Y= 0
    6. ...
     


  6. Далее координаты:

    Получим случайное число в заданном диапазоне.
    "Общие команды -> <Возвр/Перем> = = random value from <Перем/Число> from <Перем/Число> -1"
    Пускай это будет переменная xyz
    Пускай первое <Перем/Число> будет равно -10000, а второе +10001. Таким образом мы получим случайное число в диапазоне 20000. Если его потом использовать и как X, и как Y, и как Z, то врата создадутся в воображаемой сфере с центром, совпадающим с центром сектора и радиусом в 10 км.
    Итог:
     Код:
    1. ...
    2. 010 $xyz= random value from -10000 to 10001
    3. ...
     


  7. Нам необходимо знать в каком секторе создать врата, здесь нам и пригодятся наши переменные. Для этого:

    оманды секторов и Галактики -> <Возвр/IF> get sector from universe index: x=<Перем/Число>, y=<Перем/Число>"

    Повторяем два раза. В первом случае <Возвр/IF> (далее переменная)= from.sector, x=from.X, y=from.Y Во втором случае переменная = to.sector, x=to.X, y=to.Y.

    Примечание, переменные задаются сразу же после выбора команды в "Ввод скрипта -> <Переменная>", а остальные переменные уже выбираются сверху, либо создаются новые таким же образом,как и при выборе команды.

    Вот, что должно получиться в шестом пункте:
     Код:
    1. ...
    2. 011 $from.sector= get sector from universe index: x=from.X, y=from.Y
    3. 012 $to.sector= get sector from universe index: x=to.X ,y=to.Y
    4. ...
     


  8. Создание врат.
    Вот мы и подготовились к конкретике, а точнее к созданию врат, нам потребуется две пары врат, для их создания:
    Общие команды для объектов -> Создание объектов -> <ВозврПерем> = create gate: type=<Перем/Число> addto= <Перем/Сектор> gateid=<Перем/Число> dstsecx=<Перем/Число> dstsecy=<Перем/Число> dstgateid=<Перем/Число> x=<Перем/Число> y=<Перем/Число> z=<Перем/Число>
    Повторяем команду два раза.

    Что?Значение 1Значение 2Почему?
    <ВозврПерем>gate1gate2Мы присваиваем переменным каждые из врат
    type=2122Это тип врат. Ниже найдете типы врат.
    addto=from.sectorto.sectorСектора, в которых создадутся врата.
    gateid=nullnullТипы данных врат. (Чем отличается от "type="?)
    dstsecx=to.Xfrom.XX-индекс сектора с парными данным вратами.
    dstsecy=to.Yfrom.YY-индекс сектора с парными данным вратами.
    dstgateid=nullnullТип вторых врат. (Зачем?)
    x=xyzxyzСмотри V пункт
    y=xyzxyzСмотри V пункт
    z=xyzxyzСмотри V пункт



    Типы врат. Тип - <Перем/Число>.
    Тип\НаправлениеNSWE
    Обычныеnull123
    Земные21222324
    Ускорители5678

    *4 - разрушенные врата.
    Хаб: 9-14 - включенные,
    15-20 - выключенные


    ВНИМАНИЕ! Если вам нужна пара взаимосвязанных врат не используйте "Обычные" врата! Земные работают.


  9. Завершаем скрипт:
    1. Общие команды -> set global variable: name=<Перем/Текст> value=<Значение> - имя off, значение 0
    2. Общие команды -> Вызовы скриптов -> return <значение> - значение null
    3. Общие команды -> Управление исполнением цикла -> end conditional
    4. Общие команды -> Управление исполнением цикла -> define label <Метка> - называем ее end
    5. Общие команды -> Вызовы скриптов -> return <значение> - значение null


  10. В конечном итоге должно получиться так:
     Код:
    1. [color=blue]001[/color] [color=green]$of=[/color] get global variable: name= [color=green]$of[/color]
    2. [color=blue]002[/color][color=green] $off == 1 ...[/color]
    3. [color=blue]003[/color] [color=green]if $off == $of ...[/color]
    4. [color=blue]004[/color]  goto label [color=green]end[/color]
    5. [color=blue]005[/color] else
    6. [color=blue]006[/color]  [color=green]$from.X= 1 ...[/color]
    7. [color=blue]007[/color]  [color=green]$from.Y= 3 ...[/color]
    8. [color=blue]008[/color]  [color=green]$to.X= 0 ...[/color]
    9. [color=blue]009[/color]  [color=green]$to.Y= 0 ...[/color]
    10. [color=blue]010[/color]  [color=green]$xyz=[/color] = random value from [color=green]-10000[/color] to [color=green]10001[/color] - 1
    11. [color=blue]011[/color]  [color=green]$from.sector= [/color]get sector from universe index: x= [color=green]$from.X[/color] , y= [color=green]$from.Y[/color]
    12. [color=blue]012[/color]  [color=green]to.sector= [/color]get sector from universe index: x= [color=green]$to.X[/color] , y=[color=green]&to.Y[/color]
    13. [color=blue]013[/color]  [color=green]$gate1=[/color] create gate: type= [color=green]21[/color] addto= [color=green]$from.sector[/color] gateid= [color=green]null[/color] dstsecx= [color=green]$to.X[/color] dstsecy= [color=green]$to.Y[/color] dstgateid= [color=green]null[/color] x= [color=green]$xyz[/color] y= [color=green]$xyz[/color] z= [color=green]$xyz[/color]
    14. [color=blue]014[/color]  [color=green]$gate2=[/color] create gate: type= [color=green]22[/color] addto= [color=green]$to.sector[/color] gateid= [color=green]null[/color] dstsecx= [color=green]$from.X[/color] dstsecy= [color=green]$from.Y[/color] dstgateid= [color=green]null[/color] x= [color=green]$xyz[/color] y= [color=green]$xyz[/color] z= [color=green]$xyz[/color]
    15. [color=blue]015[/color]  set global variable: name= [color=green]$of[/color] value= [color=green]1[/color]
    16. [color=blue]016[/color]   return [color=green]null[/color]
    17. [color=blue]017[/color]  end
    18. [color=blue]018[/color] [color=green]end[/color]:
    19. [color=blue]019[/color]    return [color=green]null[/color]
     



Насчет автозапуска... Ну у меня не получилось, а делается это добавление префикса setup. , либо !setup (в чем разница смотри выше), а так же изменение имени скрипта в самом скрипте. Вобщем пока довольствуемся ручным запуском, однако два запуска Вы уже совершить не сможете (да и зачем?)

Вроде все, всем спасибо.
Урок закончен.

дерево темы → Учимся простейшим скриптам Учимся простейшим скриптам »
Список игр