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

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

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

   Страница 59 из 61
На страницу: Пред.  1, 2, 3 ... 58, 59, 60, 61  След.    Перейти:   Все страницы
Поиск в этой теме:
Канал X3: Terran Conflict » Модовый и скриптовый отсек X3: Terran Conflict: «[ДИСКУС]: Скриптописание. Проблемы и их решение.»
za4ot
 475 EGP


Рейтинг канала: 5(187)
Репутация: 15
Сообщения: 3232
Откуда: Яма Изобилия
Зарегистрирован: 08.08.2012
Не совсем тот код, что был в начале, но думаю суть будет ясна.
Так работает: добавляю в массив саму переменную $center.position. И, следовательно, при изменении переменной в архив добавляются новые значения дополнительно к старым.
Код:

053   $count=-1
054   while$count < 4
055   |inc $count=
056   |$X0=( $X1 + $X2 ) / 2
057   |$Y0=( $Y1 + $Y2 ) / 2
058   |$Z0=( $Z1 + $Z2 ) / 2
059   |$center.position[0] = $X0
060   |$center.position[1] = $Y0
061   |$center.position[2] = $Z0
062   |$distance=get distance: position array1=$position.1  array2=$center.position

------------------------------
063   |$XYZ=clone array $center.position : index 0 ... 2
064   |append $XYZ to array $coords
------------------------------

065   |$X2=$center.position[0]
066   |$Y2=$center.position[1]
067   |$Z2=$center.position[2]
068 @ |=wait 100 ms
069   |skip if$distance >= 13000
070   ||goto label get.coords
071   end

Так не работает: добавляю в массив указатель на переменную $center.position, а не саму переменную. И, следовательно, при изменении переменной данные в массиве тоже меняются.
Код:

053   $count=-1
054   while$count < 4
055   |inc $count=
056   |$X0=( $X1 + $X2 ) / 2
057   |$Y0=( $Y1 + $Y2 ) / 2
058   |$Z0=( $Z1 + $Z2 ) / 2
059   |$center.position[0] = $X0
060   |$center.position[1] = $Y0
061   |$center.position[2] = $Z0
062   |$distance=get distance: position array1=$position.1  array2=$center.position

------------------------------
063   
064   |append $center.position to array $coords
------------------------------

065   |$X2=$center.position[0]
066   |$Y2=$center.position[1]
067   |$Z2=$center.position[2]
068 @ |=wait 100 ms
069   |skip if$distance >= 13000
070   ||goto label get.coords
071   end

В коде append, но в варианте с insert тоже не работало, либо работало не так как нужно. Я два вечера голову ломал, пока не понял разницу между переменной и указателем на нее.
_________________
Пираты - наше всё!

Последний раз редактировалось: za4ot (17:55 16-03-2021), всего редактировалось 5 раз(а)
    Добавлено: 17:46 16-03-2021   
DNA78
 419 EGP


Рейтинг канала: 9(1060)
Репутация: 70
Сообщения: 1165
Откуда: Кыргызстан
Зарегистрирован: 12.11.2008
za4ot :
добавляю в массив указатель на переменную $center.position, а не саму переменную.

Не пойму, по ходу бред какой-то Совсем запутался... , это как - указатель на переменную Ух ты!..
Вообще-то переменная является указателем на массив Подмигиваю
И если сделать вот так
$Array = array alloc: size=0
$NewArray = $Array
то в данном случай $NewArray не будет новым массивом, это будет указателем на созданный ранее массив $Array и все изменения с $NewArray будут на самом деле происходить с $Array. Чтобы получить новый массив но точную копию уже существующего нужно сделать
$NewArray = clone array $Array : index 0 ... null
_________________________________________
Просто сначала ты говоришь об одном, а потом совсем о другом, если честно я так и не понял причём здесь твоя проблема с insert $Value into array $Array at index 0
С данной командой у меня никогда не было проблем.
_________________
Очевидное-невероятное
    Добавлено: 18:54 16-03-2021   
za4ot
 475 EGP


Рейтинг канала: 5(187)
Репутация: 15
Сообщения: 3232
Откуда: Яма Изобилия
Зарегистрирован: 08.08.2012
DNA78 :
это как - указатель на переменную Вообще-то переменная является указателем на массив

Я в терминологии никогда силен не был. Мне как-то пытались объяснить, что я неправильно использую термин флаги, но мы так друг друга и не поняли.

Массив $coords содержит два элемента. Скажем 28000, 0, 0 и 0, 0, -28000 - цифры пишу по памяти но не суть.
Код:

053   $count=-1
054   while$count < 4
055   |inc $count=
056   |$X0=( $X1 + $X2 ) / 2
057   |$Y0=( $Y1 + $Y2 ) / 2
058   |$Z0=( $Z1 + $Z2 ) / 2
059   |$center.position[0] = $X0
060   |$center.position[1] = $Y0
061   |$center.position[2] = $Z0
062   |$distance=get distance: position array1=$position.1  array2=$center.position

------------------------------
063   
064   |insert $center.position into array $coords at index 1
------------------------------

065   |$X2=$center.position[0]
066   |$Y2=$center.position[1]
067   |$Z2=$center.position[2]
068 @ |=wait 100 ms
069   |skip if$distance >= 13000
070   ||goto label get.coords
071   end

После первого витка (находим середину между точками (28000, 0, 0) и (0, 0, -28000) цикла массив $coords содержит 3 элемента (28000, 0, 0); (14000, 0, -14000); (0, 0, -28000). После второго витка (находим середину между точками (28000, 0, 0) и (14000, 0, -14000) цикла массив $coords опять содержит 3 элемента но уже такие (28000, 0, 0); (21000, 0, -7000); (0, 0, -28000). То есть на втором витке элемент массива с индексом 1 был заменен новым значением, а размер массива не увеличился. То же самое происходило на 3 и 4 витках цикла. Как-то так. И только после того как я изменил код вот так
Код:

------------------------------
063   |$XYZ=clone array $center.position : index 0 ... 2
064   |insert $XYZ into array $coords at index 1
------------------------------

все заработало как нужно.

В итоге, получается, что если в цикле переменную (в нашем случае содержащую массив) записать в массив, изменить ее и снова записать в массив, то что-то идет не так.
_________________
Пираты - наше всё!

Последний раз редактировалось: za4ot (19:51 16-03-2021), всего редактировалось 5 раз(а)
    Добавлено: 19:28 16-03-2021   
Thug
 67 EGP


Рейтинг канала: 3(26)
Репутация: 4
Сообщения: 111
Откуда: Новороссийск
Зарегистрирован: 11.11.2013
Подскажите (если можно примером) как именно локальной переменной, передать указатель на станцию в вызываемый скрипт.
Приходится держать её постоянно в прицеле, а я хочу просто указать на неё в первом скрипте.
Вот отрывок из скрипта:
* Станция $station взята в прицел.
001 $station=get player tracking aim
* Локальные переменные для переноса данных.
002 [THIS] ->set local variable: name='STATION' value=$station
003 $station ->set local variable: name='TIME_HACKER' value=$time
004 $station ->set local variable: name='COST_HACKER' value=$cost

* Локальные переменные для приёма данных.
002 $station=[THIS] -> get local variable: name='STATION'
003 $time=$station -> get local variable: name='TIME_HACKER'
004 $cost=$station -> get local variable: name='COST_HACKER'

Переменные денег $cost и времени $time переносятся нормально (привязал к станции в прицеле), а саму станцию $station не получается.
Собственно я перенёс Глобальной переменной, но всё же интересно, как это сделать Локальной пер. ?
_________________
На фоне космоса - человечество, всего лишь пыль!

Последний раз редактировалось: Thug (19:05 18-03-2021), всего редактировалось 2 раз(а)
    Добавлено: 18:31 18-03-2021   
za4ot
 475 EGP


Рейтинг канала: 5(187)
Репутация: 15
Сообщения: 3232
Откуда: Яма Изобилия
Зарегистрирован: 08.08.2012
Thug :
Подскажите

Что должен делать скрипт? Алгоритм примерный.
_________________
Пираты - наше всё!
    Добавлено: 20:46 18-03-2021   
DNA78
 419 EGP


Рейтинг канала: 9(1060)
Репутация: 70
Сообщения: 1165
Откуда: Кыргызстан
Зарегистрирован: 12.11.2008
Thug :
Подскажите (если можно примером) как именно локальной переменной, передать указатель на станцию в вызываемый скрипт.
А что, мы пишем скрипты, а как передавать аргументы из скрипта в скрипт незнаем?
Элементарно:
 из скрипта   (кликните здесь для просмотра)
= null-> call script 'скрипт приёмник' : arg1=$station arg2=$time arg3=$cost

 скрипт приёмник   (кликните здесь для просмотра)

Аргументы используемые скриптом:
ИмяТипОписание
stationVar/StationStation of tracking
timeVar/NumberTime
costVar/NumberCost


добавлено спустя 43 минуты:
Thug :
002 [THIS] ->set local variable: name='STATION' value=$station
Thug :
002 $station=[THIS] -> get local variable: name='STATION'

А [THIS] в данных случаях это что?
_________________
Очевидное-невероятное

Последний раз редактировалось: DNA78 (08:20 19-03-2021), всего редактировалось 2 раз(а)
    Добавлено: 07:54 19-03-2021   
Thug
 67 EGP


Рейтинг канала: 3(26)
Репутация: 4
Сообщения: 111
Откуда: Новороссийск
Зарегистрирован: 11.11.2013
Цитата:
...Что должен делать скрипт? Алгоритм примерный...
...А что, мы пишем скрипты, а как передавать аргументы незнаем?
...А [THIS] в данных случаях это что?
Друзья, отбросим всё и простой пример: Мы находимся в секторе, перед нами станция...
В первом скрипте обозначены параметры: Сектор($sector); Станция($station);
Во втором скрипте есть только Сектор-$sector ($sector=[PLAYERSHIP] -> get sector).
Надо передать значение: Станция($station) с помощью локальной переменной.
1Скрипт - [THIS] ->set local variable: name='STATION' value=$station
2Скрипт - $station=[THIS] -> get local variable: name='STATION'
Скрипты связаны инструкцией: send incoming question $msg to player: callback= на два варианта ответа.
С этой инструкцией я не знаю как переносить указатель на объект, поэтому и использую локальную переменную...
Я пробовал вместо [THIS] указать $sector или $station.
Но в том то и дело, что не работает... Легко перенёс глобальной переменной, но загадка то на разгадана??? Расстроен
_________________
На фоне космоса - человечество, всего лишь пыль!
    Добавлено: 16:31 19-03-2021   
za4ot
 475 EGP


Рейтинг канала: 5(187)
Репутация: 15
Сообщения: 3232
Откуда: Яма Изобилия
Зарегистрирован: 08.08.2012
Всё одно не понятно. Забудь про скрипты. Просто скажи с чего куда и что ты хочешь сделать. Как это должно в игре выглядеть?
_________________
Пираты - наше всё!
    Добавлено: 17:38 19-03-2021   
DNA78
 419 EGP


Рейтинг канала: 9(1060)
Репутация: 70
Сообщения: 1165
Откуда: Кыргызстан
Зарегистрирован: 12.11.2008
Thug :
Легко перенёс глобальной переменной, но загадка то на разгадана???

Да что тут загадочного я не пойму. Я ещё раз спрашиваю, что такое в эти двух твоих скриптах [THIS]?
Thug :
Я пробовал вместо [THIS] указать $sector или $station.

На сектор ты не сможешь повесить локальную переменную, а если вешаешь её на станцию, то со станции её и нужно снимать, а не с [THIS] Гы-гы
Сделай вот так и все будет работать:
скрипт (1)
Код:
$Ship = get player ship
$Station = get player tracking aim
$Ship -> set local variable: name='STATION_AIM' value=$Station
return null


скрипт (2)
Код:
$Ship = get player ship
$Station = $Ship -> get local variable: name='STATION_AIM'
return null


Ну и естественно если сменишь корабль то и переменная твоя останется на другом корабле.
Всё просто до безобразия. Учите матчасть сударь.
_________________
Очевидное-невероятное

Последний раз редактировалось: DNA78 (17:58 19-03-2021), всего редактировалось 2 раз(а)
    Добавлено: 17:54 19-03-2021   
Thug
 67 EGP


Рейтинг канала: 3(26)
Репутация: 4
Сообщения: 111
Откуда: Новороссийск
Зарегистрирован: 11.11.2013
DNA78 :
Сделай вот так и все будет работать:

Я почти так и делал...
1 Скрипт:
001 $station=get player tracking aim
002 $sector=$station -> get sector
003 $sector ->set local variable: name='STATION' value=$station
2 Скрипт:
001 $Sector=[PLAYERSHIP] -> get sector
002 $station=$Sector -> get local variable: name='STATION'
Ошибку я допустил сам:
Внимательно пересмотрел скрипт и нашёл причину... Просто скрипт большой (150 строк) и сразу не заметил...
В первом скрипте, поставил $sector=$station -> get sector, ниже локальной переменной со значением $station - разумеется она не сработала.
И вынес всем мозг на сайте Ой, не могу!.. Ну простите... Гы-гы
_________________
На фоне космоса - человечество, всего лишь пыль!
    Добавлено: 18:03 19-03-2021   
DNA78
 419 EGP


Рейтинг канала: 9(1060)
Репутация: 70
Сообщения: 1165
Откуда: Кыргызстан
Зарегистрирован: 12.11.2008
Thug :
1 Скрипт:
001 $station=get player tracking aim
002 $sector=$station -> get sector
003 $sector ->set local variable: name='STATION' value=$station
2 Скрипт:
001 $Sector=[PLAYERSHIP] -> get sector
002 $station=$Sector -> get local variable: name='STATION'

Ты нас здесь за дураков держишь или как Разозлен Я тебе в предыдущем посте написал, что на сектор ты не сможешь повесить локальную переменную, так ты мне в следующем посте пишешь, что это у тебя работает на секторе, что за бред вообще Совсем запутался...
_________________
Очевидное-невероятное
    Добавлено: 18:15 19-03-2021   
Thug
 67 EGP


Рейтинг канала: 3(26)
Репутация: 4
Сообщения: 111
Откуда: Новороссийск
Зарегистрирован: 11.11.2013
Игра Х3ТС-АР3.1 Специально удалил из скриптов всё лишнее и проверил ещё раз - увы, но работает...
1.Скрипт: 'A.....A.Thug.Hacker'
001 $station=get player tracking aim
002 $sector=$station -> get sector
003 $sector ->set local variable: name='ST' value=$station
004 *$msg=sprintf: pageid=7523 textid=400, $Pl.Name, $name, $sector, $cost.str, $time.str
005 send incoming question $msg to player: callback='A.....A.Thug.Hacker2'
006 return null
2.Скрипт: 'A.....A.Thug.Hacker2'
001 $sector=[PLAYERSHIP] -> get sector
002 $station=$sector -> get local variable: name='ST'
003 $Text=sprintf: fmt='Station: %s', $station, null, null, null, null
004 send incoming message $Text to player: display it=[TRUE]
005 return null
Проверь... Это же легко 5 минут займёт..

123.rar
 Описание:
 Имя файла:  123.rar
 Размер файла:  42.05 KB
 Скачано:  245 раз(а)

_________________
На фоне космоса - человечество, всего лишь пыль!

Последний раз редактировалось: Thug (18:56 19-03-2021), всего редактировалось 2 раз(а)
    Добавлено: 18:45 19-03-2021   
DNA78
 419 EGP


Рейтинг канала: 9(1060)
Репутация: 70
Сообщения: 1165
Откуда: Кыргызстан
Зарегистрирован: 12.11.2008
Thug :
Игра Х3ТС-АР3.1 Специально удалил из скриптов всё лишнее и проверил ещё раз - увы, но работает...

А у меня на X3TC увы не работает.
Thug по ходу троль какой-то Хы...
_________________
Очевидное-невероятное
    Добавлено: 19:01 19-03-2021   
Thug
 67 EGP


Рейтинг канала: 3(26)
Репутация: 4
Сообщения: 111
Откуда: Новороссийск
Зарегистрирован: 11.11.2013
Точно! Проверил на Х3ТС3.4 - не видит станцию. Значит разные редакторы в разных версиях игры. Ну тогда спасибо за первый пост! Супер!
Сейчас перепишу скрипт, пусть будет универсальный... С Thug(-ом) там всё сложнее, чем с локальной переменной Хы...
Спасибо всем за помощь! Подмигиваю

добавлено спустя 25 минут:
Раз такая фишка с разными редакторами в игре, то:
$station=[PLAYERSHIP]-> get local variable: name='STATION'
или
$Ship = get player ship
$Station = $Ship -> get local variable: name='STATION'

Есть ли разница? Как лучше?
_________________
На фоне космоса - человечество, всего лишь пыль!

Последний раз редактировалось: Thug (19:43 19-03-2021), всего редактировалось 1 раз
    Добавлено: 19:43 19-03-2021   
DNA78
 419 EGP


Рейтинг канала: 9(1060)
Репутация: 70
Сообщения: 1165
Откуда: Кыргызстан
Зарегистрирован: 12.11.2008
Пробуй, но скорее всего нет никакой разницы.
_________________
Очевидное-невероятное
    Добавлено: 19:58 19-03-2021   
Thug
 67 EGP


Рейтинг канала: 3(26)
Репутация: 4
Сообщения: 111
Откуда: Новороссийск
Зарегистрирован: 11.11.2013
Подскажите как найти скриптом корабль, у которого перед названием корабля добавлен символ? Например: есть корабль !Тукан Прототип и скрипт должен найти этот корабль в секторе.
Нечто подобное применено, когда по обозначенному кораблю, оборудуют другие корабли.
_________________
На фоне космоса - человечество, всего лишь пыль!

Последний раз редактировалось: Thug (22:33 24-03-2021), всего редактировалось 1 раз
    Добавлено: 21:59 24-03-2021   
za4ot
 475 EGP


Рейтинг канала: 5(187)
Репутация: 15
Сообщения: 3232
Откуда: Яма Изобилия
Зарегистрирован: 08.08.2012
Thug :
Подскажите как найти скриптом корабль, у которого перед названием корабля добавлен символ?

1. Ищешь все корабли в секторе и записываешь в массив.
2. В цикле перебираешь корабли по одному.
3. Делаешь $name->get name $ship
4. С помощью этой команды проверяешь есть ли символ в имени корабля:
<RetVar> get substring of <Var/String> offset=<Var/Number> length=<Var/Number>

· Команда возвращает в переменную <RetVar> подстроку из строки <Var/String>, которя начинается с позиции <Var/Number> и имеет длину <Var/Number>. Следует учитывать, что элементы строки нумеруются с 0.

· Если в качества длины строки указать значение null - то будет скопирована подстрока от заданной позиции offset=<Var/Number> до конца исходной строки.
_________________
Пираты - наше всё!
    Добавлено: 00:17 25-03-2021   
Thug
 67 EGP


Рейтинг канала: 3(26)
Репутация: 4
Сообщения: 111
Откуда: Новороссийск
Зарегистрирован: 11.11.2013
Интересно, как в ТС можно бес проблемно поставить скрипт. Обычный setup - новая игра не видит, пока не активировать скрипт-редактор, а с восклицательным знаком !setup - видит и скрипт работает сразу, но появляется (modified). Есть ли выход? Или разработчики "замок" повесили?
Точно не помню, но кажется в Х3Реунион достаточно было перезагрузить первое сохранение новой игры и добавленные скрипты начинали работать...
_________________
На фоне космоса - человечество, всего лишь пыль!
    Добавлено: 18:12 31-03-2021   
za4ot
 475 EGP


Рейтинг канала: 5(187)
Репутация: 15
Сообщения: 3232
Откуда: Яма Изобилия
Зарегистрирован: 08.08.2012
Thug :
но появляется (modified). Есть ли выход?

Есть. Добавить в скрипт цифровую подпись у разработчиков. Емнип в бонуспак вошли сторонние скрипты подписанные разработчиками. Только практического смысла не вижу. Мне вот (modified) вообще играть не мешает.
_________________
Пираты - наше всё!
    Добавлено: 18:25 31-03-2021   
za4ot
 475 EGP


Рейтинг канала: 5(187)
Репутация: 15
Сообщения: 3232
Откуда: Яма Изобилия
Зарегистрирован: 08.08.2012
Thug :
Не хочешь взглянуть, могу в личку скинуть.

Хочу. Скидывай.
_________________
Пираты - наше всё!
    Добавлено: 20:41 31-03-2021   
Канал X3: Terran Conflict -> Модовый и скриптовый отсек X3: Terran Conflict: «[ДИСКУС]: Скриптописание. Проблемы и их решение.»
На страницу: Пред.  1, 2, 3 ... 58, 59, 60, 61  След.    Перейти:   Все страницы
  
Показать: 
Предыдущая тема | Следующая тема |
К списку каналов | Наверх страницы
Цитата не в тему: Это какую же тему нужно в КСО открывать, что бы она с тематикой канала соотвествовала? (недоумевает Cherep)

  » [ДИСКУС]: Скриптописание. Проблемы и их решение. | страница 59
Каналы: Новости | 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