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

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

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

   Страница 4 из 10
На страницу: Пред.  1, 2, 3, 4, 5, 6, 7, 8, 9, 10  След. | Все страницы
Поиск в этой теме:
Канал X3: Reunion » Модовый и скриптовый отсек X3: Reunion: «Скрипт-школа (Задачи для начинающих скриптописателей)»
Нужна ли школа скриптописателей
Да. чем нас больше, тем игра веселее
95%
 95%  [ 65 ]
Нет, развелось вас.
4%
 4%  [ 3 ]
Всего проголосовало : 68
WhiteWolf
 55 EGP


Рейтинг канала: 2(13)
Репутация: 0
Сообщения: 53

Зарегистрирован: 24.10.2007
Вот попробовал написал скрипт возвращающий ближайший объект астероид или дербис находящийся от корабля установленного аргументом "ship" не далее чем установлено аргументом "distanse"

Код:
 
goto label main
realdist :
$dist = get distance between $ship and $obj
$Size = $obj -> get size of object
$dist = $dist - $Size / 2
skip if $dist >= 0
$dist = 0
endsub
main :
$sector = $ship -> get sector
$Rezult = null
$obj = find asteroid: sector= $sector resourcetype= null min.yield= null flags= [Find.Nearest] refobj= $ship maxdist= null maxnum= 1 refpos= null
if not $obj
gosub realdist
if $dist <= $distanse
$Rezult = $obj
end
end
$obj = find debris: sector= $sector resource= null min yield= null flags= [Find.Nearest] refobj= $ship num= 1 max distance= null refpos= null
if not $obj
$tempdist = $dist
gosub realdist
skip if $tempdist >= $dist
$Rezult = $obj
end
return $Rezult


Хотя каюсь, необходимо еще вставить проверку размера самого корабля, а то корабли-то тоже разные. Для этого заменим подпрограмму "realdist"
Код:

realdist :
$dist = get distance between $ship and $obj
$Size = $obj -> get size of object
$dist = $dist - $Size / 2
skip if $dist >= 0
$dist = 0
endsub

на
Код:

realdist :
$dist = get distance between $ship and $obj
$Size = $obj -> get size of object
$SizeShip = $ship -> get size of object
$dist = $dist - $Size / 2
$dist = $dist - $SizeShip / 2
skip if $dist >= 0
$dist = 0
endsub


PS. Сам нашел ошибку нужно написать
Код:

skip if $tempdist >= $dist AND $dist >= $distanse
$Rezult = $obj

вместо
Код:

skip if $tempdist >= $dist
$Rezult = $obj


Последний раз редактировалось: WhiteWolf (17:10 27-11-2007), всего редактировалось 3 раз(а)
    Добавлено: 16:50 27-11-2007   
AlexYar
 1851 EGP


Рейтинг канала: 13(2096)
Репутация: 324
Сообщения: 31640

Зарегистрирован: 26.10.2003
Andrei [<>Ace] :
Код:
014 $tstCvTerObl=$tstCvTerObl+tstCvTerAster


С каждым циклом переменная увеличивается до бесконечности - что дальше?


Не только увеличивается, но и имеет некорректное значение, начинающееся на null Улыбка Т.е. будет что-то вроде null150, null324 и т.д. С null-ём складывать нельзя, а переменная $tstCvTerObl нигде не проинициализирована (строкой $tstCvTerObl=0), т.е. первоначально имеет значение NULL.

Else :
да кстати в чем косяк?


Попробуй набрать такую строку в скриптредакторе - узнаешь Улыбка
    Добавлено: 18:36 27-11-2007   
Andrei [<>Ace]
 303 EGP


Рейтинг канала: 6(416)
Репутация: 108
Сообщения: 766
Откуда: Беларусь, Салiгорск
Зарегистрирован: 29.03.2006
Else :
Часть скрипта

Улыбка Тогда надо пояснить, что "представленная мною часть скрипта отвечает за: " и расписать за что отвечает.
KAlex :
Скоро мои скрипты выложат по заданию...
Ждем результатов

Я не могу в сети находиться постоянно Улыбка .

Мне нужно время. Только только-что собрался смотреть и скрипт достаточно распространенный.

Последний раз редактировалось: Andrei [<>Ace] (19:07 27-11-2007), всего редактировалось 1 раз
    Добавлено: 19:07 27-11-2007   
KAlex
 





Andrei [<>Ace] :
Я не могу в сети находиться постоянно.
Мне нужно время. Только только-что собрался смотреть и скрипт достаточно распространенный.

Только не надо говорить что я его где-нить скачал))
Могу на все строки комментарии написать Подмигиваю

добавлено спустя 10 минут:

Кстати - в виде доказательства могу скинуть еще пару скриптов:
1) Немного измененный скрипт "Восстановитель корпуса" - добавил озвучку и заменил удаление щитов на "просто не сработало - но батарейки истратились"... Так-же увеличил затраты батареек...
2) Полностью переписанный скрипт к "Взломщику щитов" - ну тут ооочень много всего изменил:
- НПС не агрятся на то, что ты у них воруешь
- расстояние до 3км
- авто-выбор воруемого товара
- озвучка сворованного товара (Пример: "Автоматическая пушка - перевод произведен")
- можно вызывать из "Пиратские", а можно с помощью горячей клавиши (при использовании "Команды" у корабля включается авто-пилот, при гор.кл. нет - но скорость корабля сравнивается со скоростью цели )
- ну и т.п. (не вспомню сейчас наверное - смотреть надо скрипты)
PS Хоть сейчас могу скинуть на мыло
    Добавлено: 19:31 27-11-2007   
TechCat
 100 EGP


Репутация: 25
Сообщения: 328

Зарегистрирован: 20.02.2006
WhiteWolf :
$Size = $obj -> get size of object


А разве не надо ещё делить на 222?
    Добавлено: 19:34 27-11-2007   
WhiteWolf
 55 EGP


Рейтинг канала: 2(13)
Репутация: 0
Сообщения: 53

Зарегистрирован: 24.10.2007
WD :
WhiteWolf :
$Size = $obj -> get size of object


А разве не надо ещё делить на 222?


Как не странно, но вот лог выданный в файл сразу после "get size of object" естественно без деления на 222
Код:
ID object -  ASXC-08
Size object - 2033

Выходит деления на 222 справедливо для Х2, а в Х3 "get size of object" возвращает размер объекта в метрах Улыбка
    Добавлено: 20:35 27-11-2007   
Andrei [<>Ace]
 303 EGP


Рейтинг канала: 6(416)
Репутация: 108
Сообщения: 766
Откуда: Беларусь, Салiгорск
Зарегистрирован: 29.03.2006
KAlex :
Только не надо говорить что я его где-нить скачал))
Могу на все строки комментарии написать

Скрипт достаточно распространенный - значит не из десяти строк состоит Гы-гы , а уже чего-то стоит. И мессаги в нем есть. А коментарии мне бы значительно облегчили задачу Улыбка .

Не буду томить долго. Вот что накопал:
1. Скрипт сработает только один раз - ни одна глобальная переменная не обнуляется. Хотябы $Infected='kalex.variable.infected', с некоторыми другими тоже вопроссы, так как они не дефоултятся нигде, будут ли они работать повторно.
2. !init - не лучший способ запустить скрипт который работает с объектами. "Обратите внимание на то, что загрузка скриптов init происходит до инициализации галактики (то есть до создания кораблей и станций). Поэтому нужно быть осторожным используя данный тип имен для скриптов работающих с объектами в галактике" -(DragonP).

3.
Код:
Script KAlex.termite.attack
...
005   $Sector=get sector from universe index: x=4, y=7
006   $Asteroid= find asteroid: sector=$Sector resourcetype=$null min.yield=$null flags=null refobj=null maxdist=null maxnum=1 refpos=null
007   skip if$Asteroid
008    return null
...


005 - Странный выбор. Сектор в котором нет ни одного астероида (карта по умолчанию). В скрипте астероид нигде до этого не создан.
006 - Поиск первого попавшегося астероида.
007 - если астероид найден, пропустить строку. (астероидов нет)
008 - закончить выполнение скрипта.

4.
Код:
Script KAlex.TA.wait.ship
001   $Object='kalex.variable.object'
002   
003   $Aster=get global variable: name=$Object
004   while[TRUE]
005 @  =wait 1000 ms
006    skip if$Aster -> exists
007     return null
008    $Distance=get distance between $Aster and [PLAYERSHIP]
009    skip if$Distance > 5000
010 @   START$null -> call script 'KAlex.termite.add' :
011   end
012   
013   return null


008 - работает если объекты в одном секторе.
009 - skip сработало, но только благодаря знаку ">" в if$Distance > 5000.
Будет правильным заключить эти строки в условие IF $Aster is in same sector as [PLAYERSHIP]
010 - запускается глобальный скрипт если $Distance <= 5000, но запускающий скрипт завершиться только после уничтожения астероида 006 (выходит убить астероид обязательно) , и каждые 1000мс 005 при $Distance <= 5000 будет запускать глобальный скрипт 010. Зачем постоянно запускать сразу же завершающийся, кроме первого раза, скрипт.
Тоже с script 'KAlex.TA.make.damage'.
5. Когда закончиться Script KAlex.TA.wait.ship, если не сбивать астероид?

TermiteAttack.rar
 Описание:
Тест-скрипт на задание от KAlex.
 Имя файла:  TermiteAttack.rar
 Размер файла:  7.72 KB
 Скачано:  355 раз(а)


Последний раз редактировалось: Andrei [<>Ace] (22:30 27-11-2007), всего редактировалось 3 раз(а)
    Добавлено: 20:39 27-11-2007   
KAlex
 





1. На это и расчитано - видел, но поправлять не стал
2. Знаю - учтено (обьекты не использую)...
3. Сектор: Свободный удел - 3 астеройда у меня (не в курсе как на чистых иксах - у меня игра пропатчена до 2.0.02 + X3 Bonus Pack v3.1.06)
А приведенный код работает верно - раз у тебя нет астеройдов, то скрипт завершает работу
PS Сектор был выбран из расчета того что для отладки скрипта нужно было БЫСТРО загружать сохраненку - а у меня это самый "быстрый" сектор
4. Данный скрипт "ожидает появления корабля около астеройда" на расстоянии менее 5км (строка 9). А если астеройд "убить", то в строки 6 и 7 завершение скрипта - чтобы движек не грузить...
В скрипте 'KAlex.termite.add' есть проверка - так что он не будет полностью выполняться более 1-го раза
(То же относится и к скрипту 'KAlex.termite.damage': скрипт 'kalex.termite.attack' цикл в строке 22)
5. Зачем ему заканчиваться... он ждет врага...
PS Просто возможно не совсем верно сделано с вызовами скриптов (первая практика), но как уж умеем Подмигиваю

- (Скрипт запустится всего один раз из-за того что непроисходит удаление используемых глобальных переменных) Вот насчет переменных - верно подмечено... Как их убить? Может переменные просто обнулить надо? Улыбка
- (Нельзя использовать обьекты в скриптах начинающихся с init) В 'init.kalex.ta' обьекты не используются, обьекты используются только через 30-45 секунд (скрипт 'init.kalex.ta' строка 15) - этого времени вполне хватит на то, чтобы все обьекты были созданы - так что проблемы не вижу...
Но программисты говорят, что все-равно нельзя... Расстройство
- (Скрипт 'kalex.ta.wait.ship' выгрузится только если уничтожить астеройд) Все верно - так и надо... Вайт скрипт на то и "ожидающий" что он ждет появления Цели, пока есть колонния термитов, а она есть пока есть астеройд... Нет астеройда - нет и термитника Улыбка

'KAlex.termite.add' запускается только тогда, когда твой корабль в зоне поражения... А если нет, то он незапускается...
PS Просто по причине отсутствия времени так было написано - если бы было время, то было-бы попродуманей... А в общем - все работает как надо...
PPS В общем то скрипт 'kalex.ta.wait.ship' правильней было-бы включить в скрипт 'kalex.termite.attack' (но, как говорится, - время-деньги)
    Добавлено: 21:18 27-11-2007   
Andrei [<>Ace]
 303 EGP


Рейтинг канала: 6(416)
Репутация: 108
Сообщения: 766
Откуда: Беларусь, Салiгорск
Зарегистрирован: 29.03.2006
KAlex :
1. На это и расчитано - видел, но поправлять не стал

Но после работы скрипта в памяти остаются твои переменные.
KAlex :
Может их просто обнулить надо?

Верно мыслишь.
KAlex :
2. Знаю - учтено (обьекты не использую)

А астероид или корабль игрока - это объекты.

Последний раз редактировалось: Andrei [<>Ace] (00:10 28-11-2007), всего редактировалось 4 раз(а)
    Добавлено: 21:19 27-11-2007   
Proteus
 88 EGP


Рейтинг канала: 5(113)
Репутация: 35
Сообщения: 443
Откуда: Латвия
Зарегистрирован: 17.03.2007
Рискну выложить своё творение, у меня не выполнены пункты 3 и 7 и добавлено кое что от себя. как всегда нет даже намёка на эстетику но работает.

001 $gvarname='aatest4'
002 load text: id=1070
003 $tekst= read text: page=1070 id=100
004 $tekst1= read text: page=1070 id=101
005 while1
006 $Dist= = random value from 1000 to 2500 - 1
007 @ =wait 8000 ms
008 $Sektor=[PLAYERSHIP] -> get sector
009 $Aster= find asteroid: sector=$Sektor resourcetype=null min.yield=null flags=[Find.Nearest] refobj=[PLAYERSHIP] maxdist=$Dist maxnum=1 refpos=null
010 skip if$Aster != null
011 continue
012 send incoming message $tekst to player: display it=[TRUE]
013 while1
014 $Sektor=[PLAYERSHIP] -> get sector
015 $Okr=[PLAYERSHIP] -> get environment
016 $Station= find station: sector=$Sektor class or type=Док оборудования race=null flags=[Find.Nearest] refobj=[PLAYERSHIP] maxdist=null maxnum=1 refpos=null
017 $Damage= = random value from 0 to 10 - 1
018 skip if$Okr != $Station
019 break
020 $Hull=[PLAYERSHIP] -> get hull
021 $Hull=$Hull - $Damage
022 [PLAYERSHIP] -> set hull to $Hull
023 skip if$Hull > 0
024 [PLAYERSHIP] -> destruct: show no explosion=[FALSE]
025 @ =wait 1000 ms
026 end
027 send incoming message $tekst1 to player: display it=[TRUE]
028 end
029 return null
_________________
На пыльных тропинках далёких планет останутся наши мозги.

Последний раз редактировалось: Proteus (23:03 27-11-2007), всего редактировалось 1 раз
    Добавлено: 23:02 27-11-2007   
AlexYar
 1851 EGP


Рейтинг канала: 13(2096)
Репутация: 324
Сообщения: 31640

Зарегистрирован: 26.10.2003
Добавлю немного:

1. В скриптах, начинающихся на !init, init, !setup или setup - применять wait-команды запрещено!

2. Применять init-скрипты для работы с объектами, либо для запуска скриптов, работающих с объектами - так же запрещено.
Инит-скрипты предназначены только для работы со "статикой". Это назначение клавиш, определение сигналов, регистрация устройств, назначение глобальных переменных и подобное.

3. Чтобы юниты перевести в метры в х3 нужно делить не на 222, а на 500.

4. Написание скриптов во внешнем скриптредакторе абсолютно не гарантирует их работоспособность в игре. Причина проста - редактор еще не закончен и находится на стадии разработки, т.е. в нём еше много ошибок. Пока он годится только для тестирования его самого. Помощь в тестировании и обнаружение багов приветствуется, но в рамках данной темы (обучения) использовать его крайне не рекомендуется. Здесь вам и ваших собственных багов хватит за глаза и за уши Улыбка
Если выкладываете здесь скрипты, то только те, что набраны в скриптредакторе игры (встроенном), так как вряд-ли кто-то будет разбираться, почему с ними игра вылетает, либо что-то неправильно работает. Скорее всего сразу последует delete file Улыбка

5. На всякий случай - использовать в скриптах знаки < и > запрещено. В лучшем случае это вызовет вылет игры при загрузке Улыбка
    Добавлено: 23:03 27-11-2007   
Andrei [<>Ace]
 303 EGP


Рейтинг канала: 6(416)
Репутация: 108
Сообщения: 766
Откуда: Беларусь, Салiгорск
Зарегистрирован: 29.03.2006
Proteus :
Рискну выложить своё творение

Че сразу рискну. Никакого риска. Скрипт, говоришь, работает.
Proteus :
намёка на эстетику
Улыбка Нормально.
Proteus :
у меня не выполнены пункты 3 и 7

Да. Один термит перебрался на корабль, а если его еще и коратнет...

Ну это пока оставим, посмотрим что есть.
001 - что-то не доделал.
002-004 - хорошо.
006 - сам random - хорошо, а числа ... уже не очень. Поста три или больше прошу обратить внимание, что дистанцию команды берут от центра корабля до центра астероида, а нам бы от поверхности корабля до поверхности астероида.
WhiteWolf :
$Size = $obj -> get size of object

хорошее предложение.

дальше:
007-011 - уже приелось Улыбка - должно быть правильно, но константа [PLAYERSHIP] хороша к месту (поясню ниже).
014-016 - не проходили, каждый выкручивается как может Улыбка .
018-019 - логично поменять местами с 017
020-026 - проходили.
027 - хорошо.

[PLAYERSHIP] - почему не хорошо.
В данном примере тот единственный термит будет багать за игроком, на какой бы корабль игрок не перебрался. Получился враг внутри Улыбка . Нам бы привезаться к кораблю, на котором игрок подлетал к астероиду.

Proteus :
Код:
014 $Sektor=[PLAYERSHIP] -> get sector
015 $Okr=[PLAYERSHIP] -> get environment
016 $Station= find station: sector=$Sektor class or type=Док оборудования race=null flags=[Find.Nearest] refobj=[PLAYERSHIP] maxdist=null maxnum=1 refpos=null
...
018 skip if$Okr != $Station
019 break

А если так:
Код:
015 $Okr=[PLAYERSHIP] -> get environment
016 skip if not $Okr -> is of class 'Док Оборудования'
017   break


Делай выводы, предлагай дальше.

WhiteWolf :
Вот попробовал написал скрипт

А можешь все сам отредактировать и выложить с номерами строк, а то уже в глазах рябит. Я сам пытался все сложить но какой-то беспорядок получается.

Но одно точно. Чтобы в начале скрипта не пришлось клеить goto label main, Пусть gosub realdist отправляет в самый конец скрипта, за return $Rezult.


2ALL
Тут была мысль, что Народ ждет когда я или AlexYar готовый скрипт покажут. Это вам надо?
Или всеже сами сделаете?

Последний раз редактировалось: Andrei [<>Ace] (01:28 28-11-2007), всего редактировалось 1 раз
    Добавлено: 01:10 28-11-2007   
AlexYar
 1851 EGP


Рейтинг канала: 13(2096)
Репутация: 324
Сообщения: 31640

Зарегистрирован: 26.10.2003
Andrei [<>Ace] :
016 $Station= find station: sector=$Sektor class or type=Док оборудования race=null flags=[Find.Nearest] refobj=[PLAYERSHIP] maxdist=null maxnum=1 refpos=null


Сдаётся мне эта строка не найдёт ничего, если игрок пристыкован к станции Улыбка Так как самого игрока в окружении сектора не будет, соот-но refobj будет некорректен.

Поэтому в таких случаях лучше делать так, как написал Айс.

Andrei [<>Ace] :
015 $Okr=[PLAYERSHIP] -> get environment
016 skip if not $Okr -> is of class 'Док Оборудования'
017 break


К тому же, команды FIND - одни из самых тормозных в игре (в коде игры это многократно вложенные друг в друга циклы). Поэтому при любом удобном случае их нужно избегать, заменяя альтернативным кодом.
    Добавлено: 03:47 28-11-2007   
WhiteWolf
 55 EGP


Рейтинг канала: 2(13)
Репутация: 0
Сообщения: 53

Зарегистрирован: 24.10.2007
AlexYar :
3. Чтобы юниты перевести в метры в х3 нужно делить не на 222, а на 500.


Тогда можно уточнить какие команды в Х3 возвращают размеры в юнитах? А то если возвращаемое значение командой "get size of object" разделить на 500, то вообще такая белиберда получается. По моему эта команда возвращает растояние от центра объекта до наиболее удаленной точки поверхности объекта (Радиус описанной окружности, хотя по идее должна возвращать диаметр)и при этом в метрах.

Andrei [<>Ace] :
Но одно точно. Чтобы в начале скрипта не пришлось клеить goto label main, Пусть gosub realdist отправляет в самый конец скрипта, за return $Rezult.


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

Тогда вот так:
Код:
Script ship.check.up.presence.of.asteroid.object.at.the.established.limit
Version: 0
for Script Engine Version: 32

Description
Arguments
1: ship , Перем/Корабль , 'inspect ship'
2: distance , Перем/Число , 'Distance to asteroids'
Source Text

001   $sector=$ship -> get sector
002   $obj= find asteroid: sector=$sector resourcetype=null min.yield=null flags=[Find.Nearest] refobj=$ship maxdist=null maxnum=1 refpos=null
003   if$obj != null
004 @  $dist=$ship -> call script 'get.distance.between.objects' :  First object=$obj  Second object=$ship
005    skip if$dist > $distance
006     $Rezult=$obj
007   end
008   $obj= find debris: sector=$sector resource=null min yield=null flags=[Find.Nearest] refobj=$ship num=1 max distance=null refpos=null
009   if$obj != null
010    $tempdist=$dist
011 @  $dist=$ship -> call script 'get.distance.between.objects' :  First object=$obj  Second object=$ship
012    skip if$tempdist <= $dist OR $dist >= $distance
013     $Rezult=$obj
014   end
015   return $Rezult


И в довесок примитив вычисляющий реальное растояние между объектами

Код:
Script get.distance.between.objects
Version: 0
for Script Engine Version: 32

Description
Arguments
1: Obj1 , РеферОбъект , 'First object'
2: Obj2 , РеферОбъект , 'Second object'
Source Text

001   $dist=get distance between $Obj1 and $Obj2
002   $Size=$Obj1 -> get size of object
003   $dist=$dist - $Size
004   $Size=$Obj2 -> get size of object
005   $dist=$dist - $Size
006   skip if$dist >= 0
007    $dist=0
008   return $dist
[/quote]

Последний раз редактировалось: WhiteWolf (15:11 28-11-2007), всего редактировалось 2 раз(а)
    Добавлено: 04:19 28-11-2007   
AlexYar
 1851 EGP


Рейтинг канала: 13(2096)
Репутация: 324
Сообщения: 31640

Зарегистрирован: 26.10.2003
WhiteWolf :
Тогда можно уточнить какие команды в Х3 возвращают размеры в юнитах?


Напиши список "спорных" команд, я в коде посмотрю и скажу точно, в чём они возвращают Улыбка


WhiteWolf :
1: Obj1 , РеферОбъект , 'First object'


Ой, как плохо. Только сейчас заметил! Перед запуском скриптредактора переводите игру в английский язык (lang.dat/44)! Чтобы в скрипте не было ни одной буквы на кириллице. Иначе в случае чего баги с вылетами игры будет искать ооочень долго.

Последний раз редактировалось: AlexYar (15:48 28-11-2007), всего редактировалось 1 раз
    Добавлено: 15:38 28-11-2007   
WhiteWolf
 55 EGP


Рейтинг канала: 2(13)
Репутация: 0
Сообщения: 53

Зарегистрирован: 24.10.2007
AlexYar :
Напиши список "спорных" команд, я в коде посмотрю и скажу точно, в чём они возвращают Улыбка

Ну хотелось халявы Улыбка А так я и сам посмотрю по сгенерированным логам во время исполнения скрипта.
Ну и раз уж мы в школе, то прошу досточтимых учителей ткнуть носом в скрипт оптимального поиска всех кораблей (получить массив) определенной рассы в галактике вне зависимости от окружения искомых кораблей. А то впал в ступор. Крутил и так и эдак, не выходит каменный цветок Расстроен

Цитата:
Ой, как плохо. Только сейчас заметил! Перед запуском скриптредактора переводите игру в английский язык (lang.dat/44)! Чтобы в скрипте не было ни одной буквы на кириллице. Иначе в случае чего баги с вылетами игры будет искать ооочень долго.

Вот с этой фишкой я знаком, просто создавал скрипт на работе в свободное время, там же его и тестировал, а вот выкладывать пришлось уже дома, а там сын играет и не дружит с английским (хотя и я не дружу, болше немецкий)

Последний раз редактировалось: WhiteWolf (17:53 28-11-2007), всего редактировалось 1 раз
    Добавлено: 17:35 28-11-2007   
Andrei [<>Ace]
 303 EGP


Рейтинг канала: 6(416)
Репутация: 108
Сообщения: 766
Откуда: Беларусь, Салiгорск
Зарегистрирован: 29.03.2006
WhiteWolf :
переменные должны быть объявлены до начала основного кода

Ну объявить ты их не успел. Объявление, по моему разумению, - это застолбить ячейки памяти под представленные переменные. А goto label в начале скрипта тебе это сделать не позволит.

WhiteWolf :
Да и мне так удобней в разросшихся скриптах отыскивать их для редактирования

Для упрощения поиска закоментируй строку над блоком переменных и под ним. Ориентир будет лучше, чем постоянно посылать алгоритм к блоку переменных для выпонения над ними операций.

WhiteWolf :
Тогда вот так:

Код правильный. То что ты заявил он выполняет.

2ALL
Общая информация!
Для движка Х3 все объекты представляют собой сферы (шар Улыбка ). Вот из-за того, что все неписи "видят" шары, а не реальные объекты - они и ведут себя не адекватно.
Команда get size of object получает радиус сферы - размер объекта. Растояния между объектами - это расстояние между их центрами.
У некоторых объектов есть точки входа внутрь сферы (посадка на станцию) - к таким точкам и ведут автопилоты неписей свои корабли для посадки, входа во врата.
Есть точки входа внутрь и у сферы дебриса. Завести непись в нутрь дебриса может команда аывтопилота:
@ <RetVar/IF><RefObj> move to ware object <Value> for collecting: timeout=<Var/Number> ms
Остальные команды автопилота облетают дебрис по сфере.

Поэтому WhiteWolf, размером дебриса можно пренебречь, так как корабль может находиться вцентре дебриса.

AlexYar :
3. Чтобы юниты перевести в метры в х3 нужно делить не на 222, а на 500.

Ну не знаю, проверь, get size of object выдает радиус сферы в игровых метрах. Да и сами эгософтовцы в своих скриптах ничего ни на что не делят, берут как есть. Может ты какие другие метры знаешь, нам бы те что Х3 на радаре выдает.

AlexYar :
Ой, как плохо. Только сейчас заметил! Перед запуском скриптредактора переводите игру в английский язык (lang.dat/44)! Чтобы в скрипте не было ни одной буквы на кириллице. Иначе в случае чего баги с вылетами игры будет искать ооочень долго.

Не так все и плохо. У меня же все работает Улыбка . А кому нужны все английские буквы, после написания скрипта откройте его в игре с (lang.dat/44).

WhiteWolf :
(получить массив) определенной рассы в галактике вне зависимости от окружения искомых кораблей.

Не понял - вне зависимости от окружения искомых кораблей.
Код:
<RetVar> =  get ship array: of race <Var/Race> class/type=<Value>

· Команда возвращает массив кораблей существующих на момент запроса во вселенной Х3 принадлежащих расе race <Var/Race> и относящихся к классу или типу class/type=<Value>.


Последний раз редактировалось: Andrei [<>Ace] (18:34 28-11-2007), всего редактировалось 3 раз(а)
    Добавлено: 18:15 28-11-2007   
AlexYar
 1851 EGP


Рейтинг канала: 13(2096)
Репутация: 324
Сообщения: 31640

Зарегистрирован: 26.10.2003
Andrei [<>Ace] :
get size of object выдает радиус сферы в игровых метрах.


Я не про команду говорю, а про то, что системный масштаб в х2 и х3 разный Улыбка

В х2: метр = юнит / 222
В х3: метр = юнит / 500

Andrei [<>Ace] :
Не так все и плохо. У меня же все работает


А ты пересохрани скрипт в другой кодировке с кириллицей внутри, а потом попробуй игру загрузить Подмигиваю

Ошибка со сменой кодировки - довольно частый баг при изменении имён скриптов (например - добавления знака ! в начало имени с последующим сохранением скрипта в неверной кодировке).

А вот в скриптах, написанных на нерусском языке (без кириллицы) таких багов не бывает в принципе Улыбка
    Добавлено: 18:35 28-11-2007   
Andrei [<>Ace]
 303 EGP


Рейтинг канала: 6(416)
Репутация: 108
Сообщения: 766
Откуда: Беларусь, Салiгорск
Зарегистрирован: 29.03.2006
AlexYar :
А ты пересохрани скрипт в другой кодировке с кириллицей внутри, а потом попробуй игру загрузить

Не с кирилицей внутри, а с переведенными типами переменнах, объектов.

Andrei [<>Ace] :
Поэтому WhiteWolf, размером дебриса можно пренебречь, так как корабль может находиться вцентре дебриса.

Не. Полностью пренебригать нельзя Улыбка .

WhiteWolf :
006 skip if$dist >= 0
007 $dist=0

из этого кода получиться, расценивать корабль который внутри дебриса, как на поверхности, что удовлетворяет условию Улыбка .

Последний раз редактировалось: Andrei [<>Ace] (18:46 28-11-2007), всего редактировалось 1 раз
    Добавлено: 18:45 28-11-2007   
WhiteWolf
 55 EGP


Рейтинг канала: 2(13)
Репутация: 0
Сообщения: 53

Зарегистрирован: 24.10.2007
Andrei [<>Ace] :
Ну объявить ты их не успел. Объявление, по моему разумению, - это застолбить ячейки памяти под представленные переменные. А goto label в начале скрипта тебе это сделать не позволит.

В данном скрипте мне небыло необходимости столбить место под переменные и естественно они должны быть до goto label, а goto label позволяет оставить энное количество строк текста для подпрограмм
Andrei [<>Ace] :
Команда get size of object получает радиус сферы - размер объекта. расстояния между объектами - это расстояния между их центрами.

Вот из-за этого могут возникать коллизии, когда при определении расстояния между объектами командой get size of object сферы объектов могут и пересечься Улыбка
Поэтому вот этим кодом
Код:
006 skip if$dist >= 0
007 $dist=0

Решаются коллизии когда сферы объектов могут пересекаться (например М5 залетел в выемку в астероиде)

Последний раз редактировалось: WhiteWolf (19:17 28-11-2007), всего редактировалось 1 раз
    Добавлено: 19:00 28-11-2007   
Канал X3: Reunion -> Модовый и скриптовый отсек X3: Reunion: «Скрипт-школа (Задачи для начинающих скриптописателей)»
На страницу: Пред.  1, 2, 3, 4, 5, 6, 7, 8, 9, 10  След. | Все страницы
  
Показать: 
Предыдущая тема | Следующая тема |
К списку каналов | Наверх страницы
Цитата не в тему: Отстаньте от меня, не буду я с ним заниматься, пусть жена его полоскает и за ногу трясет!!! (возмутился Vitalii)

  » Скрипт-школа (Задачи для начинающих скриптописателей) | страница 4
Каналы: Новости | 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