Elite Games - Свобода среди звезд!
.
ВНИМАНИЕ!
Наша конференция посвящена космической тематике и компьютерным играм.
Политические вопросы и происходящие в мире события в данный момент на нашем сайте не обсуждаются!

  » Учебник по скриптам | страница 2
Конференция предназначена для общения пилотов. Для удобства она разделена на каналы, каждый из которых посвящен определенной игре. Пожалуйста, открывайте темы только в соответствующих каналах и после того, как убедитесь, что данный вопрос не обсуждался ранее.

Поиск | Правила конференции | Фотоальбом | Регистрация | Список пилотов | Профиль | Войти и проверить личные сообщения | Вход

   Страница 2 из 3
На страницу: Пред.  1, 2, 3  След. | Все страницы
Поиск в этой теме:
Канал X2: The Threat: «Учебник по скриптам»
Пишете ли Вы скрипты к X2?
Уже пишу
26%
 26%  [ 31 ]
Еще нет, но буду
19%
 19%  [ 23 ]
Хотел бы, но не хватает знаний
44%
 44%  [ 52 ]
Лучше скачаю готовые
6%
 6%  [ 7 ]
Скрипты вообще не нужны
2%
 2%  [ 3 ]
Всего проголосовало : 116
Grey Wolf
 500 EGP


Рейтинг канала: 2(17)
Репутация: 115
Сообщения: 1677
Откуда: Ростов-на-Дону
Зарегистрирован: 31.03.2003
Получить реальный размер объекта в метрах можно, если результат функции get size of object разделить на тот же самый коэффициент 222.
_________________
Быстро выпитая рюмка не считается налитой
    Добавлено: 21:30 25-09-2004   
akm
 470 EGP


Рейтинг канала: 1(4)
Репутация: 173
Сообщения: 1638
Откуда: Паразит Прайм
Зарегистрирован: 23.10.2002
Вроде уже знаю скриптовый движек как свои пять пальцев, но по сей день не перестаю удивляться Совсем запутался...
Как вы думаете, если где-то в скрипте употребляется [THIS], то он выдает объект, на котором исполняется этот скрипт? А ничего подобного!
При вызове какого-либо скрипта командами call script и другими, [THIS] - это параметр, переданный этому скрипту из вызвавшего! И вовсе не обязательно объект, на котором этот скрипт запустится. Пример:

@ = <RefObj> call script <Script Name>: <Parameter>

Так вот, если не используется префикс START, то независимо от значения <RefObj>, скрипт будет запущен в текущем стеке текущего объекта. Но при этом, внутри этого вызванного скрипта [THIS] всегда будет возвращать корректно именно указанный в call script <RefObj>, а вовсе не объект, где скрипт запущен. А на <RefObj> на самом деле ничего не запустится. Также, если к примеру <RefObj> - корабль и он уничтожен, то скрипт, из которого был вызов, может повиснуть.


<RetVar/IF><RefObj> find ship: class or type= <Value> race= <Var/Race> flags= <Var/Number> refobj= <Value> maxnum= <Var/Number> with homebase= <Value>

Возвращает массив кораблей, находящихся на/в <RefObj> имеющих расу "race", у которых база приписки "homebase", отсортированных и выбранных в соответсвии с параметрами "flags" и объектом "refobj". Максимальное количество кораблей в возвращаемом массиве определяется параметром "maxnum".
Имейте ввиду, что в качестве "race" допустимо лишь указание конкретных рас и null (что означает любая раса). Для поиска врагов/нейтральных/друзей используйте соответствующие флаги и указывайте в качестве "refobj" объект по отношению к которому и будут определяться враг/друг.
А вот <RefObj> обязан быть либо сектором, либо станцией, либо кэрриером. В противном случае команда вернет null.

И еще, абсолютно все команды поиска кораблей в секторе, никогда не возвращают корабли, пристыкованные к чему-либо, даже если эти корабли находятся в этом секторе!
    Добавлено: 21:43 04-10-2004   
serg-314159
 97 EGP


Репутация: 6
Сообщения: 50

Зарегистрирован: 08.06.2004
AKM :

[THIS] - это параметр, переданный этому скрипту из вызвавшего!

если устроит, такая аналогия: [THIS] - аналог this С++ (self в Object Pascal,Delphi). Запуск скрипта в стеке объекта - по той же аналогии соответствует созданию потока и вызову метода.

$ship -> call script $myscript: null // SCE
ship->myscript(null); //c++
ship^.myscript(nul); // Obj Pascal - если что не пинайте, его учил давно, детали мог подзабыть
во всех трех случаях внутри myscript this соответствует ship
Видимо, поэтому у меня и проблем с этим не было Улыбка
_________________
mail-to: serg-314159@mail.ru
    Добавлено: 19:26 07-10-2004   
akm
 470 EGP


Рейтинг канала: 1(4)
Репутация: 173
Сообщения: 1638
Откуда: Паразит Прайм
Зарегистрирован: 23.10.2002
Да. Все верно. Да и у меня никогда проблем не было Улыбка Просто если запускаем $ship -> call script 'myscript' на отличном от текущего корабле, то надо не забывать внуртри всех циклов 'myscript' ставить проверку:
skip if [THIS]-> exists
return null
Иначе 'myscript' повиснет, когда $ship убьют. Кстати такие баги наиболее опасны, т.к. проявляются крайне редко лишь при определенном стечении обстоятельств Подмигиваю
Поэтому и пишу советы и описание команд с рассчетом на новичков, доступным языком (надеюсь) Улыбка
    Добавлено: 19:46 07-10-2004   
serg-314159
 97 EGP


Репутация: 6
Сообщения: 50

Зарегистрирован: 08.06.2004
Цитата:

Поэтому и пишу советы и описание команд с рассчетом на новичков, доступным языком (надеюсь)

Для новичков может и понятно (не знаю Улыбка), а вот для тех, кто имеет некоторую практику (я, например Улыбка) - несколько путанно.
Может, имеет смысл излагать и так, и так?
_________________
mail-to: serg-314159@mail.ru
    Добавлено: 11:24 08-10-2004   
Шамон
 





Здравствуйте ! Я извиняюсь , но кто знает где можно скачать учебник по скриптам ? я искал ,но не нашел ((
    Добавлено: 11:54 15-10-2004   
CooL_SnipeR
 615 EGP


Рейтинг канала: 1(2)
Репутация: 214
Сообщения: 4050 Заблокирован
Откуда: Ясный-Москва
Зарегистрирован: 19.03.2004
Шамон :
Здравствуйте ! Я извиняюсь , но кто знает где можно скачать учебник по скриптам ? я искал ,но не нашел ((

http://www.elite-games.ru/_egm_scripts/url.php?action=gotourl&url=/downloads/x2/x2rus.zip
Там есть описание скриптописания
_________________
Никогда не бывает так плохо, после чего не может быть еще хуже...
    Добавлено: 12:03 15-10-2004   
akm
 470 EGP


Рейтинг канала: 1(4)
Репутация: 173
Сообщения: 1638
Откуда: Паразит Прайм
Зарегистрирован: 23.10.2002
@ <RetVar/IF> <RefObj> move to position x=<Var/Number1> y=<Var/Number2> z=<Var/Number3> with precision <Var/Number4> m

Двигаться объекту <RefObj> в точку с указанными координатами до тех пор, пока удаленность <RefObj> от этой точки не станет менее "точности" <Var/Number4>. Эту удаленность(точность) требуется указывать именно в игровых юнитах, а не метрах, не смотря на наличие m после этого параметра. Т.е. желаемую удаленность требуется сначала умножить на 222, а потом подставлять в данную команду.

А вот в аналогичных командах:
@ <RetVar/IF> <RefObj> follow object <Var/Ship> with precision <Var/Number> m
и
@ <RetVar/IF> <RefObj> follow <Var/Ship> with precision <Var/Number> m: timeout=<Var/Number> ms
под точностью (precision) подразумеваются именно метры. Вот такие вот чудеса Совсем запутался...
    Добавлено: 22:23 17-10-2004   
Grey Wolf
 500 EGP


Рейтинг канала: 2(17)
Репутация: 115
Сообщения: 1677
Откуда: Ростов-на-Дону
Зарегистрирован: 31.03.2003
Не используйте конструкцию
массив1=массив2
В тестовых скриптиках эта команда вроде работает. А в реальном скрипте, особенно если эта команда внутри цикла, получаешь какую-то пургу. Надо использовать в этом случае команду
массив1=clone array массив2 ...
_________________
Быстро выпитая рюмка не считается налитой
    Добавлено: 11:44 20-10-2004   
AnrDaemon
 864 EGP


Модератор
Репутация: 37
Сообщения: 12322

Зарегистрирован: 17.10.2004
akm :
From: Моды - новые модели кораблей
создаешь произвольный "7abcd.xml" и "44abcd.xml", где abcd - 4 цифры. В эти файлы пишешь русские и английские имена и описания кораблей (абсолютно в те же самые page и t id) и создаешь скрипт "!init.произволное.имя", состоящий всего из одной строчки:
load text: id=abcd (команда и з раздела General Commands)
Вот и вся работа Подмигиваю

Вопрос: в качестве id обязательно использовать цифры, или допустимы буквы?
_________________
Люблю свободный полёт... :)
    Добавлено: 14:36 20-10-2004   
akm
 470 EGP


Рейтинг канала: 1(4)
Репутация: 173
Сообщения: 1638
Откуда: Паразит Прайм
Зарегистрирован: 23.10.2002
Строго цифры, причем строго четыре.

Цитата:
Не используйте конструкцию
массив1=массив2

Имя массива есть указатель на массив! Т.е. я очень часто пользуюсь конструкцией массив1=массив2 и никогда никаких проблем не было. Но надо помнить, что реально содержимое массива 2 не копируется, и если массив 2 изменить каким-либо образом, эти изменения мгновенно отразятся на массиве 1. Но если, например, сделать массив2 = find ship..., то переменная массив2 станет указателем уже на другой массив, что был получен командой find, а массив1 при этом будет продолжать ссылаться на предыдущее содержимое массива 2.
Кстати такой подход чертовски удобен при передаче массива другому скрипту в виде параметра либо через глобальную переменную, т.к. фактически передается только указатель и содержимым одного и того же массива можно манипулировать одновременно из нескольких скриптов. Например, для организации совместной работы нескольких кораблей - это то что доктор прописал Подмигиваю (см. массив $SentShips в моем скрипте 'akm.ship.cmd.autoload.carrier' пакета автозагрузки носителя)
    Добавлено: 17:27 20-10-2004   
Пассажир
 

Пассажир




2 АКМ:
Ну вот я тебе приведу конкретный пример, а ты объясни, почему так получалось.
Кусок моего скрипта по созданию карты, конкретно создание торговых станций.
Исходные данные - массив груп секторов каждой расы.
1. создается массив1, в который включаются общие для каждой торговой станции ресурсы: апгрейд мотора, каргоотсека и т.д.
2. цикл по выбору расы и соотв конкретной группы секторов этой расы.
в пределах этого цикла конструкция:
массив2=массив1
добавить в массив2 полицейскую лицензию расы
3. цикл по выбору конкретного сектора в группе
в пределах этого цикла:
массив3=массив2
добавить с некоторым случайным выбором в массив 3 прочие ресурсы - кристаллы, сателиты и т.д.
4. вызов скрипта, создающего станцию с аргументами массив3, сектор, раса и т.д.
5. закончить все циклы

Так вот, первая станция создается, как положено. Затем ресурсы начинают "накапливаться", наконец в массив3 попадают практически ВСЕ ресурсы, которые потенциально могут туда попасть. Кроме этого, при переходе на другую расу, прежние полицейские лицензии не исчезают а тоже остаются в массиве3.
Когда я после вызова скрипта добавил строчку "resize массив3 to 0", наоборот, все лицензии и апгрейды мотора исчезли. Но ведь в массиве 2 они должны были остаться!!! и оттуда при выборе нового сектора перейти в массив3! А хрен там.
А вот стоило мне заменить "=" на функцию clonе array, все проблемы исчезли.

Вот вечер борьбы с этими массивами и породил мой предыдущий пост Улыбка
    Добавлено: 19:24 20-10-2004   
Grey Wolf
 500 EGP


Рейтинг канала: 2(17)
Репутация: 115
Сообщения: 1677
Откуда: Ростов-на-Дону
Зарегистрирован: 31.03.2003
Ну ясен пень, это я пассажир Улыбка
Откуда этот хренов анлогин постоянно? Пишу сообщение залогиненный, а отправляется уже от пассажира Подозрение.
_________________
Быстро выпитая рюмка не считается налитой
    Добавлено: 19:28 20-10-2004   
akm
 470 EGP


Рейтинг канала: 1(4)
Репутация: 173
Сообщения: 1638
Откуда: Паразит Прайм
Зарегистрирован: 23.10.2002
Ну так все правильно, так идолжно все работать, как ты описал Подмигиваю Ведь переменная-массив есть всего лишь указатель на массив и операция присвоения массив2=массив1 копирует лишь адрес массива 1 в переменную массив2. В итоге, все операции в различных частях твоего цикла на самом деле производились с одним и тем же массивом, вот ресурсы и накапливались Улыбка Решение проблемы в твоем примере верное - использовать команду clonе array (либо copy array, либо append value to array).
Только не надо утверждать, что конструкция массив1=массив2 не работает Подмигиваю

ЗЫ. А команда "resize массив3 to 0" произвела resize всех трех массивов в 0 Улыбка
    Добавлено: 19:51 20-10-2004   
Grey Wolf
 500 EGP


Рейтинг канала: 2(17)
Репутация: 115
Сообщения: 1677
Откуда: Ростов-на-Дону
Зарегистрирован: 31.03.2003
2 АКМ: операция "=" с переменными работает-то совсем не так, как с массивами. Вот собсно об этом и спич Улыбка

Вот еще сведения для учебника:
Чтобы при старте новой игры на новой карте, оказаться в заданном секторе карты и на заданном корабле с определенным барахлем в трюме и нужным кол-вом денег на счете, нужно создать скрипт с именем
galaxy.имя_файла_карты.initplayership
в котором такие строчки:
1. выбрать сектор с нужными координатами
2. plship-> создать в этом секторе корабль, принадлежащий пилоту
3. набить его нужным барахлом и.т.д.
4. return plship
Имя файла карты в имени скрипта ессно указывается без расширения .xml
_________________
Быстро выпитая рюмка не считается налитой
    Добавлено: 20:19 20-10-2004   
AnrDaemon
 864 EGP


Модератор
Репутация: 37
Сообщения: 12322

Зарегистрирован: 17.10.2004
akm :
Строго цифры, причем строго четыре.

Отлично! У меня тут идейка родилась сделать установочный скрипт для модов от разных пилотов. И не только для модов, конечно.
Как родится что-то дельное - скажу.
_________________
Люблю свободный полёт... :)
    Добавлено: 20:37 20-10-2004   
Finist
 1817 EGP


Модератор
Рейтинг канала: 5(131)
Репутация: 391
Сообщения: 12170
Откуда: Рязань РОССИЯ
Зарегистрирован: 25.12.2003
Обновил хелп-архив по скриптам. Добавил то, что выложено в этой теме. Взять можно здесь

P.S. Модераторам: может перенесёте в соответсвующий раздел?
_________________
Про модераторов сказать можно много разного, вот только написать нельзя...
    Добавлено: 15:07 24-10-2004   
akm
 470 EGP


Рейтинг канала: 1(4)
Репутация: 173
Сообщения: 1638
Откуда: Паразит Прайм
Зарегистрирован: 23.10.2002
Finist, извини, но проявил бы хоть немного усердия и отфильтровал материал из данной темы? Зачем народу читать три (!) различных описания ряда команд, тем более что 2 из них ошибочные!?
Подсказка: корректные описания - те, что последние.

И еще маленький совет: в цивилизованном мире принято указывать авторов любого материала. А в твоем архиве нет упоминания даже о Mad Kuzia.
    Добавлено: 20:10 27-10-2004   
Finist
 1817 EGP


Модератор
Рейтинг канала: 5(131)
Репутация: 391
Сообщения: 12170
Откуда: Рязань РОССИЯ
Зарегистрирован: 25.12.2003
2 akm
Сделаю в скором времени. Нет проблем. Всё будет в одном файле, с расцветкой как в этой теме.
_________________
Про модераторов сказать можно много разного, вот только написать нельзя...
    Добавлено: 07:19 28-10-2004   
Grey Wolf
 500 EGP


Рейтинг канала: 2(17)
Репутация: 115
Сообщения: 1677
Откуда: Ростов-на-Дону
Зарегистрирован: 31.03.2003
2 Finist:
В хелпе Димакса-Пегасыча тож есть раздел по скриптам. Я туда кое-что в свое время писал, в твоем хелпе этого нет. Если уж делать еще один хелп, имеет смысл в нем свести воедино всю информацию, что счас по разным источникам раскидана.
    Добавлено: 11:53 28-10-2004   
Канал X2: The Threat: «Учебник по скриптам»
На страницу: Пред.  1, 2, 3  След. | Все страницы
  
Показать: 
Предыдущая тема | Следующая тема |
К списку каналов | Наверх страницы
Цитата не в тему: О да, принцесса чувствует себя хорошо: просила еще аргонского виски и травки...

  » Учебник по скриптам | страница 2
Каналы: Новости | Elite | Elite: Dangerous | Freelancer | Star Citizen | X-Tension/X-BTF | X2: The Threat | X3: Reunion | X3: Terran Conflict | X Rebirth | X4: Foundations | EVE Online | Orbiter | Kerbal Space Program | Evochron | VoidExpanse | Космические Миры | Онлайновые игры | Другие игры | Цифровая дистрибуция | play.elite-games.ru | ЗВ 2: Гражданская война | Творчество | Железо | Игра Мечты | Сайт
   Дизайн Elite Games V5 beta.18