ВНИМАНИЕ! Наша конференция посвящена космической тематике и компьютерным играм. Политические вопросы и происходящие в мире события в данный момент на нашем сайте не обсуждаются!
|
» [ДИСКУС]: Скриптописание. Проблемы и их решение. | страница 54 |
|
|
|
Канал X3: Terran Conflict »
Модовый и скриптовый отсек X3: Terran Conflict: «[ДИСКУС]: Скриптописание. Проблемы и их решение.» |
|
|
za4ot 478 EGP
Рейтинг канала: 5(187) Репутация: 15 Сообщения: 3257 Откуда: Яма Изобилия Зарегистрирован: 08.08.2012 |
|
bi0nik, спасибо. На один вопрос ответ получен, осталось три. Жаль, что так мало людей посещает эту ветку - игра-то хорошая.
_________________ Пираты - наше всё! |
|
|
by.@ztek 315 EGP
Рейтинг канала: 5(218) Репутация: 50 Сообщения: 795 Откуда: Минск, Беларусь Зарегистрирован: 21.04.2010 |
|
za4ot : |
Вопрос 4-й:
Где-то тут проскакивала информация, что есть скрипт по защите земных секторов, т. е. если прыгнуть в земной какой-либо сектор без разрешения, то к тебе прыгает большое войско и разносит тебя вдребезги пополам. Меня интересует можно ли безболезненно отключить/удалить этот скрипт, чтоб в земных секторах остались просто полиция и патрули, как и в секторах других рас? И где этот скрипт вообще найти, чтобы код почитать?
|
За это и кое-что другое отвечает МД-скрипт 3.08 Sector Management.xml. Вообще, мониторится ранг ATF и происходит событие.
п.с. кое-что - это и создание в секторе несф.прыжка кааков/ксенов, там же брошенного Арана, и всякое прочее.
добавлено спустя 33 минуты:
Да, надо помнить, что в земной сюжетке скриптово удерживается репа ATF.
_________________ Совершенству нет предела...
Последний раз редактировалось: by.@ztek (16:29 09-07-2017), всего редактировалось 1 раз |
|
|
za4ot 478 EGP
Рейтинг канала: 5(187) Репутация: 15 Сообщения: 3257 Откуда: Яма Изобилия Зарегистрирован: 08.08.2012 |
|
by.@ztek : |
МД-скрипт 3.08 Sector Management.xml
|
Нужно будет посмотреть как удалить этот защитный флот нафиг, а то хочется поозоровать в земных секторах, а он не дает.
добавлено спустя 6 минут:
by.@ztek : |
Да, надо помнить, что в земной сюжетке скриптово удерживается репа ATF.
|
Я вот этого не знал и жил спокойно, а теперь знаю и какие из этого следствия понять не могу.
Моя цель, чтобы земные сектора, ну кроме сектора с торусом, были так же доступны для разбоя как и сектора других рас. Если же в земных секторах все держится на жестких скриптах, то даже не знаю получится ли у меня. Я всегда думал, что отличие земного сектора от сектора любой другой расы состоит именно в этом защитном скрипте, а восстановление станций после уничтожения и всякие патрули и трафик регулируются так же как и в других секторах. Как-то так.
_________________ Пираты - наше всё!
Последний раз редактировалось: za4ot (19:40 09-07-2017), всего редактировалось 1 раз |
|
|
XXXL 77 EGP
Рейтинг канала: 4(67) Репутация: 7 Сообщения: 271
Зарегистрирован: 12.12.2010 |
|
za4ot : |
...
Я вот этого не знал и жил спокойно, а теперь знаю и какие из этого следствия понять не могу.
Моя цель, чтобы земные сектора, ну кроме сектора с торусом, были так же доступны для разбоя как и сектора других рас. Если же в земных секторах все держится на жестких скриптах, то даже не знаю получится ли у меня. Я всегда думал, что отличие земного сектора от сектора любой другой расы состоит именно в этом защитном скрипте, а восстановление станций после уничтожения и всякие патрули и трафик регулируются так же как и в других секторах. Как-то так.
|
скрипт 3.08 Sector Management.xml(11.cat-?)
<find_sector name="this.Belt" x="11" y="3" race="terran" exact="0"/>
<set_value name="{sector@this.Belt} ATF Rank" exact="2"/>
Первая строка отвечает за выбор сектора. Вторая за минимальную репутация для нахождения в этом секторе без последствий. Цифру "2" заменить на "0". Аналогично поступить с другими секторами.
|
|
|
za4ot 478 EGP
Рейтинг канала: 5(187) Репутация: 15 Сообщения: 3257 Откуда: Яма Изобилия Зарегистрирован: 08.08.2012 |
|
XXXL, спасибо большое. Созрел еще вопрос. Когда корабль игрока обстреливают и начинает уничтожаться оборудование сопровождаемое голосом типа: Щит 25 МДж уничтожен, то какой скрипт отвечает за вывод этого сообщения? Чего-то я ищу ищу и никак найти не могу.
Хочу прицепить к этому сообщению катапультирование игрока на спасательной капсуле, потому как если уже начали уничтожать оборудование, то кораблю игрока явный капец и пора спасаться. )))
_________________ Пираты - наше всё!
Последний раз редактировалось: za4ot (11:05 11-07-2017), всего редактировалось 2 раз(а) |
|
|
by.@ztek 315 EGP
Рейтинг канала: 5(218) Репутация: 50 Сообщения: 795 Откуда: Минск, Беларусь Зарегистрирован: 21.04.2010 |
|
za4ot : |
Когда корабль игрока обстреливают и начинает уничтожаться оборудование сопровождаемое голосом типа: Щит 25 МДж уничтожен, то какой скрипт отвечает за вывод этого сообщения? Чего-то я ищу ищу и никак найти не могу.
|
Сдается мне, что это функции в обже NotifyEquipmentDestroyed и NotifyEquipmentDamaged:
Cкрытый текст (кликните здесь для просмотра)
; === NotifyEquipmentDestroyed ==================================
; function CLIENT.NotifyEquipmentDestroyed(arg1, arg2);
;
CLIENT.NotifyEquipmentDestroyed:
enter 2, 6
begin_critical
if SP[0]<>0 then jump L00017257
pushb 20d ; 14h
push 1
pushw 200d ; 0C8h
call86 X_AUDIO.WaitForEndOfSpeakPriority
pop
pushb 20d ; 14h
pushb 29d ; 1Dh
pushb 13d ; 0Dh
push SP[7] ; arg2
push SP[7] ; arg1
push 2
callasm SA_GetTypeTextID
pushb 17d ; 11h
create_array 4
push 2
pushw 200d ; 0C8h
call86 X_AUDIO.SpeakArrayWithPriority
pop
end_critical
L00017257: push 0
ret
;
; === NotifyEquipmentDamaged ====================================
; function CLIENT.NotifyEquipmentDamaged(arg1, arg2);
;
CLIENT.NotifyEquipmentDamaged:
enter 2, 6
begin_critical
if SP[0]<>0 then jump L00017290
pushb 20d ; 14h
push 1
pushw 200d ; 0C8h
call86 X_AUDIO.WaitForEndOfSpeakPriority
pop
pushb 20d ; 14h
pushb 30d ; 1Eh
pushb 13d ; 0Dh
push SP[7] ; arg2
push SP[7] ; arg1
push 2
callasm SA_GetTypeTextID
pushb 17d ; 11h
create_array 4
push 2
pushw 200d ; 0C8h
call86 X_AUDIO.SpeakArrayWithPriority
pop
end_critical
L00017290: push 0
ret
|
добавлено спустя 26 минут:
Причем в функции NotifyEquipmentDestroyed именно "pushb 29d ; 1Dh" - это фраза "уничтожено", а в функции NotifyEquipmentDamaged "pushb 30d ; 1Eh" - повреждено.
_________________ Совершенству нет предела...
Последний раз редактировалось: by.@ztek (13:11 11-07-2017), всего редактировалось 1 раз |
|
|
za4ot 478 EGP
Рейтинг канала: 5(187) Репутация: 15 Сообщения: 3257 Откуда: Яма Изобилия Зарегистрирован: 08.08.2012 |
|
by.@ztek : |
Причем в функции NotifyEquipmentDestroyed именно "pushb 29d ; 1Dh" - это фраза "уничтожено", а в функции NotifyEquipmentDamaged "pushb 30d ; 1Eh" - повреждено.
|
А как туда вписать фразу:
[THIS] -> call script 'Capsula.xml'
_________________ Пираты - наше всё! |
|
|
za4ot 478 EGP
Рейтинг канала: 5(187) Репутация: 15 Сообщения: 3257 Откуда: Яма Изобилия Зарегистрирован: 08.08.2012 |
|
В общем написал скрипт автокатапультирования. Сначала пытался ввести проверку на атаку плеершипа:
Враг = плеершип гет аттакер
если Враг не существует то на начало цикла
если существует, то проверяем корпус
В общем не взлетел и на эту проверку я забил попутно подумав, что можно и об станцию разбится ненароком и об биг шип при выходе из трансорбитального ускорителя - да мало ли вокруг сумасшедших пилотов .
Поставил в цикле задержку в 1000 мс и уровень корпуса 10% - корабль разобрали скрипт не успел сработать. Поставил задержку в 250 мс - успел сработать.
Как проверял:
1-й тест: Отдал свой Огненный коготь на растерзание хаакскому кластеру.
2-й тест: Прыгнул в середину ксенонского сектора и подставился под стаю истребителей.
Все работает, учитывая, что у меня стоит скрипт by.@ztek-а на применение неписями ракет, т. е. разбирали корабль довольно шустро. По ощущениям никаких дополнительных тормозов в игру скрипт не добавил (чего я опасался), все движется с той же скоростью, что и раньше. Заметил, что оборудование начинает вылетать чуть ли не с 60% хула - слишком высокое, как по мне, значение. Кстати, скрипт вызвывал так: @ =[PLAYERSHIP]->call script 'Capsula' не разбираюсь в тонкостях, но в справочнике от Chem-а вычитал, что с префиксо START может и скрипт не запуститься и игра подвиснуть. Правильно я сделал?
Под прямое попадание бигшипов на М3+ решил не подставляться. Что интересно, когда уже переместился в капсулу, все еще слышал голос бортового компьютера: НПМ-1 уничтожен, Сканер С-3 уничтожен..., а потом стало тихо - прощай корабль, прощай родимый дом.
Теперь снова переходим к нерешенным вопросам. Есть идея скрипта - игроку нужно обеспечить безопасное передвижение торговых кораблей, через транзитные ксенонские сектора, коих как известно существует три штуки. (типа сюжетка такая)
Для этого нужно отслеживать уничтожение грузовых кораблей в ксенонских секторах. Что планирую сделать:
1. Из скрипта сигнал_киллед вызывать свой скрипт и передавать в него аргумент киллер.
2. Проверять киллера на расу=ксенон и на сектор=одному из трех заданных секторов.
В общем интересует можно ли из аргумента Киллер выудить расу и сектор с помощью раса=киллер гет раса и сектор=киллер гет сектор?
Еще вопрос вспомнил, если я изменю какой-либо оригинальный скрипт и он будет у меня лежать в папке скриптов с расширением .xml, то какой скрипт будет использовать игра запакованный оригинальный или с расширением .xml? А то я на всякий случай оригинальные скрипты удаляю если использую их измененные версии.
Capsula+.zip |
Описание: |
Пока выложу тут для ознакомления. Свой скрипт и скрипт Rusa,который используется для создания спасательной капсулы. |
|
Имя файла: |
Capsula+.zip |
Размер файла: |
8.31 KB |
Скачано: |
304 раз(а) |
_________________ Пираты - наше всё!
Последний раз редактировалось: za4ot (23:42 11-07-2017), всего редактировалось 5 раз(а) |
|
|
by.@ztek 315 EGP
Рейтинг канала: 5(218) Репутация: 50 Сообщения: 795 Откуда: Минск, Беларусь Зарегистрирован: 21.04.2010 |
|
1. Может работать с SIGNAL_ATTACKED?
2. Да, расу и корабли можно получить из этих сигналов.
3. Приоритет на выполнение у распакованных скриптов.
_________________ Совершенству нет предела... |
|
|
za4ot 478 EGP
Рейтинг канала: 5(187) Репутация: 15 Сообщения: 3257 Откуда: Яма Изобилия Зарегистрирован: 08.08.2012 |
|
by.@ztek : |
Может работать с SIGNAL_ATTACKED?
|
Вроде все слова знакомые, а о чем речь понять не могу. Сбивает с толку вопросительный знак.
_________________ Пираты - наше всё! |
|
|
by.@ztek 315 EGP
Рейтинг канала: 5(218) Репутация: 50 Сообщения: 795 Откуда: Минск, Беларусь Зарегистрирован: 21.04.2010 |
|
za4ot : |
by.@ztek : |
Может работать с SIGNAL_ATTACKED?
|
Вроде все слова знакомые, а о чем речь понять не могу. Сбивает с толку вопросительный знак.
|
Я делал для ТОТТ:
Скрипт обработчик сигнала, например, init.signal.preload.xml с кодом
Код: |
global script map: set: key={SIGNAL_ATTACKED}, class={Station 2016}, race=null, script='TOTT.station.attacked.pl', prio=100
return null
|
В вызываемом скрипте TOTT.station.attacked.pl собственно и есть (нужно воспользоваться) встроенные входные аргументы attacker и target. Сигнал SIGNAL_ATTACKED асинхронный, т.е. работает "сам себе", с учетом стека. Вот во втором скрипте и делаем, что хотим.
добавлено спустя 5 минут:
Могу два этих скрипта скинуть на разборку, если что. Эта фича была написана для: когда игрок атакует станцию, на него ругаются "если вы не прекратите, мы высылаем флот защиты"...никто ничего не высылает. это было исправлено
_________________ Совершенству нет предела...
Последний раз редактировалось: by.@ztek (19:58 12-07-2017), всего редактировалось 1 раз |
|
|
za4ot 478 EGP
Рейтинг канала: 5(187) Репутация: 15 Сообщения: 3257 Откуда: Яма Изобилия Зарегистрирован: 08.08.2012 |
|
by.@ztek : |
Могу два этих скрипта скинуть на разборку, если что.
|
Скидывай. Надо же мне по чему-то учиться.
Я так понимаю, что ты в скрипте init.signal.preload.xml назначаешь свой обработчик TOTT.station.attacked.pl сигнала SIGNAL_ATTACKED для станций. Возникает вопрос будет ли стандартный обработчик выполнять свою работу параллельно с твоим или твой заменит стандартный? Мне нужно перехватить SIGNAL_KILLED для TS есть два пути либо назначить свой обработчик как у тебя, либо вызвать свой скрипт из !ship.signal.killed и в нем уже проверить TS был убит или нет. Как я понимаю убийца это аргумент: 1: killer , Value , 'killer' , а убитый это аргумент: 2: cmd , Object Command , 'cmd' ?
У меня сейчас в разработке несколько идей для скриптов:
1. Торговые маршруты (идея уже готова, но есть вопросы по реализации)
2. Охотники за головами (хватит игроку безнаказанно уничтожать чужую собственность, когда НПС начнут действовать по принципу глаз за глаз, то игроку придется не сладко - идея пока только обдумывается, но примерно механику уже представляю.)
3. Линия фронта. (постоянные боевые действия рас с ксенонами хааками и яками в отдаленных секторах (типа сдерживание агрессии) для которых игрок выступает в роли снабженца боеприпасами, кораблями, оружием и пр. - идея на стадии обдумывания)
Цель такая, чтобы после прохождения сюжета игроку было чем заняться, причем если игрок будет тупить, то его развитие будет идти не до бесконечности вверх, а может скатится к единственному оставшимуся у игрока плеершипу и ему придется начинать развитие заново. Пока идеи в разработке приветствуются мысли как и чем еще можно занять игрока. А то в одиночку у меня иногда творческий кризис случается. Пока из реализованных у меня только сюжетка "Гильдия археологов" - довольно длительная по времени, где нужно собрать 94 редких корабля.
При воплощении этих идей появляется куча разных вопросов по скриптам, возможно банальных, но мне неизвестных.
_________________ Пираты - наше всё! |
|
|
by.@ztek 315 EGP
Рейтинг канала: 5(218) Репутация: 50 Сообщения: 795 Откуда: Минск, Беларусь Зарегистрирован: 21.04.2010 |
|
za4ot : |
Возникает вопрос будет ли стандартный обработчик выполнять свою работу параллельно с твоим или твой заменит стандартный?
|
Будет.
2-3. Я немного в другом русле работал, для ТОТТ всё, но по окончанию всех сюжетов сделал глобальное наступление ксенонов (и хааков можно включить), и если игрок не участвует в обороне сектора - то "зараза" распространяется несмотря на принадлежность секторов.
п.с. лови. там и пару скрипту вложил на события...
signal.rar |
Описание: |
|
Имя файла: |
signal.rar |
Размер файла: |
31.05 KB |
Скачано: |
283 раз(а) |
_________________ Совершенству нет предела... |
|
|
za4ot 478 EGP
Рейтинг канала: 5(187) Репутация: 15 Сообщения: 3257 Откуда: Яма Изобилия Зарегистрирован: 08.08.2012 |
|
XXXL : |
скрипт 3.08 Sector Management.xml(11.cat-?)
<find_sector name="this.Belt" x="11" y="3" race="terran" exact="0"/>
<set_value name="{sector@this.Belt} ATF Rank" exact="2"/>
Первая строка отвечает за выбор сектора. Вторая за минимальную репутация для нахождения в этом секторе без последствий. Цифру "2" заменить на "0". Аналогично поступить с другими секторами.
|
Попробовал не сработало. Сработало когда поставил нули еще и в этих строках (чтобы не гадать поставил во всех, которые нашел, да и куски кода с ними выглядели идентично ):
<check_value value="{player.notoriety.atf.rank}" min=" 0"/>
<check_value value="{player.notoriety.atf.rank}" max=" 0"/>
С рейтингом у АОГ +3 и у Землян +3 (Доступ Марса) залетал спокойно в сектора Венера и Луна. Сбил пару корабликов у землян рейтиг опустился до -2, а у АОГ не изменился - остался такой же как и был. Кораблей АОГ не нашел, чтоб напасть может поэтому их рейтинг не изменился, а может сломалось что-то? (Земную сюжетку не начинал, репу до +3 на обычных миссиях поднял)
Появилась идея скрипта "Плата за содержание имущуства".
Каждый корабль и каждая станция требует затрат на содержание - топливо, воздух, еда, наемные рабочие или экипаж, тех. обслуживание, медицинские расходы, налоги с казино в котором постоянно теряется девочка и т. д. и т. п. Игрок ясен пень ни за что не платит. Идея скрипта проста:
Каждый час/день считается количество кораблей по типам, количество станций и умножается на стоимость содержания (для кораблей разных типов разная, для станций одинаковая, чтоб сильно не заморачиваться) и найденная сумма списывается со счета игрока. Если нужной суммы нет, то списывается все, а разница запоминается и списывается по мере поступления денег на счет. Каждый отчетный период игроку приходит сообщение типа финансовый отчет (сколько и за что было списано, есть ли долг). В принципе реализацию уже продумал осталось определится с временными промежутками (час как бы нормально, но на сете будет слишком часто отчет приходить, а день кажется долго, ибо за день можно успеть много собственности приобрести и перепродать, естесственно, не заплатив налогов ) и ценой содержания (у кого какие мысли сколько назначить для кораблей разных классов и станций?) Еще была мысль вместо/вместе расчета цены содержания имущества ввести подоходный налог - оцениваем общую стоимость всех активов игрока, через время оцениваем еще раз, если увеличилась, то от разницы берем 20% и списываем со счета игрока. Но я там в формулах запутался поэтому пока эту идею оставлю про запас.
_________________ Пираты - наше всё!
Последний раз редактировалось: za4ot (03:18 14-07-2017), всего редактировалось 7 раз(а) |
|
|
za4ot 478 EGP
Рейтинг канала: 5(187) Репутация: 15 Сообщения: 3257 Откуда: Яма Изобилия Зарегистрирован: 08.08.2012 |
|
Со стоимостью содержания кораблей определился будет 0,1% от цены корабля. для станций, наверное, будет 1% от цены. В общем создаем один массив со стоимостью обслуживания, второй с количеством собственности игрока, перемножаем элементы массивов по индексам 1-й на 1-й и т. д. и произведения складываем получаем искомую сумму. Можно каждый час высчитывать стоимость содержания, а списывать каждый день общую сумму за 24 часа с предоставлением отсчета. Прикинул только что количество разных кораблей и станций в игре - это ж сколько кода нужно будет написать? Тысяч несколько строк.
С налогами сложнее. Допустим у игрока с начала игры 1000 кр.
ТОЧКА ОТСЧЕТА = СЧЕТ ИГРОКА = 1000
Продаем две импульсные пушки с корабля получаем
Устанавливаем ТОЧКА ОТСЧЕТА = 1000
Проверяем СЧЕТ ИГРОКА = 9000
Вычисляем ДЕЛЬТА = СЧЕТ ИГРОКА - ТОЧКА ОТСЧЕТА = 9000 - 1000 = 8000
ЕСЛИ ДЕЛЬТА < 0 ТО
НАЛОГ = 0
ИНАЧЕ
Вычисляем НАЛОГ = 0,2*ДЕЛЬТА -> НАЛОГ = 0,2*8000 = 1600
Устанавливаем ТОЧКА ОТСЧЕТА = СЧЕТ ИГРОКА = 9000
Покупаем тут же улучшение скорости на все деньги
Проверяем ТОЧКА ОТСЧЕТА = 9000
Проверяем СЧЕТ ИГРОКА = 672 (остаток после закупки)
Вычисляем ДЕЛЬТА = СЧЕТ ИГРОКА - ТОЧКА ОТСЧЕТА = 672 - 9000 = -8328
ЕСЛИ ДЕЛЬТА < 0 ТО
Вычисляем НАЛОГ = 0 -> НАЛОГ = 0
ИНАЧЕ
НАЛОГ = 0,2*ДЕЛЬТА
Устанавливаем ТОЧКА ОТСЧЕТА = СЧЕТ ИГРОКА = 672
А нужно еще учесть переводы со станций, награды за миссии, секторных торговцев, приписанных к станциям торговцев. чувствую, что где-то есть засада. В общем над математикой еще покумекать нужно - все ли учтено и будет ли оно работать в игре, также как на бумаге.
_________________ Пираты - наше всё!
Последний раз редактировалось: za4ot (16:14 14-07-2017), всего редактировалось 2 раз(а) |
|
|
DIMOSUS.X 995 EGP
Рейтинг канала: 8(921) Репутация: 188 Сообщения: 3252 Откуда: Vilnius/Minsk Зарегистрирован: 06.08.2008 |
|
Подскажите — как принудительно запустить сюжетные линии, если текущий старт их не предполагает? В частности для Albion Prelude, для земного старта включить сюжетки от аргона.
_________________ Даже ежики ежиков могут с трудом,
Иначе бы ежики были кругом. |
|
|
za4ot 478 EGP
Рейтинг канала: 5(187) Репутация: 15 Сообщения: 3257 Откуда: Яма Изобилия Зарегистрирован: 08.08.2012 |
|
Остался на день без интернета и этого хватило, чтоб забыть о танках и вернуться в х3. Долго думал над идеей скрипта по обложению игрока подоходным налогом и понял, что совершенно невозможно посчитать точную прибыль игрока в кредитах. Не исключаю, что я чего-то недопонимаю и если кто-то сможет помочь с написанием алгоритма то буду рад помощи.
Чтоб посчитать точную прибыль нужно учесть:
Продажу товаров с корабля игрока и продажу кораблей, вознаграждения миссий (любые поступления на счет игрока), прибыдь от секторных и галоторговцев, прибыль от станций (переведенную на счет игрока, непереведенная прибыль должна учитываться при переводе) за исключением денег переданных станции игроком и возвращенных на счет игрока. Также следует учесть, что поступления прибыли от разных источников и списание денег на разные траты может происходить одновременно (даже если запускать скрипт каждые несколько секунд) и распознать и учесть эти транзакции нет никакой технической возможности.
Еще вопрос:
В случайном неизвестном секторе создаем небольшой флот расы враждебная раса/нейтральная раса с приказом атаковать конкретный корабль или станцию игрока. Вопрос как этот флот себя поведет? Полетит атаковать заданный объект? Как он будет себя вести при встрече с кораблями других рас, при встрече с другими кораблями игрока. Как корабли других рас/корабли игрока поведут себя при встрече с этим флотом? Если на флот нападут скажем хааки, то станет ли он защищаться и после того как уничтожит агрессоров продолжит ли он выполнение задания?
_________________ Пираты - наше всё!
Последний раз редактировалось: za4ot (18:15 19-01-2018), всего редактировалось 1 раз |
|
|
za4ot 478 EGP
Рейтинг канала: 5(187) Репутация: 15 Сообщения: 3257 Откуда: Яма Изобилия Зарегистрирован: 08.08.2012 |
|
Появилась пара вопросов:
1. Как скриптом создать корабль не в определенных координатах, а чтоб он вылетал из ближайших к игроку ворот? Ну как в миссиях, только без использования MD.
2. Есть ли кто-либо свободно владеющий MD и желающий написать одну миссию по доставке 95 кораблей? Хотелось бы переписать сюжетку Гильдия археологов на MD, но тямы не хватает.
_________________ Пираты - наше всё! |
|
|
DNA78 423 EGP
Рейтинг канала: 9(1060) Репутация: 71 Сообщения: 1224 Откуда: Кыргызстан Зарегистрирован: 12.11.2008 |
|
za4ot : |
1. Как скриптом создать корабль не в определенных координатах, а чтоб он вылетал из ближайших к игроку ворот? Ну как в миссиях, только без использования MD.
|
1 (кликните здесь для просмотра)
Код: |
$sector = [PLAYERSHIP]-> get sector
$x = [PLAYERSHIP]-> get x position
$y = [PLAYERSHIP]-> get y position
$z = [PLAYERSHIP]-> get z position
$x.temp = $x
$y.temp = $z
$sector.temp = $sector
$Vx = [FALSE]
$Vy = [FALSE]
if $x.temp < 0
$x.temp = 0 - $x.temp
$Vx = [TRUE]
end
if $y.temp < 0
$y.temp = 0 - $y.temp
$Vy = [TRUE]
end
if $y.temp > $x.temp
if $Vy
$gate = $sector-> get south warp gate
skip if $gate -> exists
gosub Vx:
else
$gate = $sector-> get north warp gate
skip if $gate -> exists
gosub Vx:
end
else
if $Vx
$gate = $sector-> get west warp gate
skip if $gate -> exists
gosub Vy:
else
$gate = $sector-> get east warp gate
skip if $gate -> exists
gosub Vy:
end
end
skip if $gate -> exists
return null
$sector.create = $gate -> get gate destination: return sector=1
$gate.create = $gate -> get gate destination: return sector=0
$x.create = $gate.create -> get x position
$y.create = $gate.create -> get y position
$z.create = $gate.create -> get z position
$ship = create ship: type={Xenon J} owner=[Xenon] addto=$sector.create x=$x.create y=$y.create z=$z.create
$ship -> add default items to ship
$ship -> set race logic control enabled to [FALSE]
$ret = $ship -> fly to sector $sector
do if $ret == [FLRET_NOCOMMANDS]
$ship -> set race logic control enabled to [TRUE]
return null
Vx:
if $Vx
$gate = $sector-> get west warp gate
else
$gate = $sector-> get east warp gate
end
endsub
Vy:
if $Vy
$gate = $sector-> get south warp gate
else
$gate = $sector-> get north warp gate
end
endsub
return null |
|
2 (кликните здесь для просмотра)
Код: |
$sector = [PLAYERSHIP]-> get sector
$x = [PLAYERSHIP]-> get x position
$y = [PLAYERSHIP]-> get y position
$z = [PLAYERSHIP]-> get z position
$x.temp = $x
$y.temp = $z
$sector.temp = $sector
$Vx = [FALSE]
$Vy = [FALSE]
if $x.temp < 0
$x.temp = 0 - $x.temp
$Vx = [TRUE]
end
if $y.temp < 0
$y.temp = 0 - $y.temp
$Vy = [TRUE]
end
if $y.temp > $x.temp
if $Vy
$gate = $sector-> get south warp gate
skip if $gate-> exists
gosub Vx:
else
$gate = $sector-> get north warp gate
skip if $gate-> exists
gosub Vx:
end
else
if $Vx
$gate = $sector-> get west warp gate
skip if $gate-> exists
gosub Vy:
else
$gate = $sector-> get east warp gate
skip if $gate-> exists
gosub Vy:
end
end
skip if $gate-> exists
return null
$ship = create ship: type={Xenon J} owner=[Xenon] addto=null x=null y=null z=null
$ship-> add default items to ship
$ship-> set race logic control enabled to [FALSE]
$ret = $ship-> use jump drive: target=$gate
do if $ret == [FLRET_WARPED]
$ship-> set race logic control enabled to [TRUE]
return null
Vx:
if $Vx
$gate = $sector-> get west warp gate
else
$gate = $sector-> get east warp gate
end
endsub
Vy:
if $Vy
$gate = $sector-> get south warp gate
else
$gate = $sector-> get north warp gate
end
endsub
return null |
|
второй вариант даже более предпочтителен, так как не нужно ждать появление корабля из ворот, он появляется сразу.
_________________ Очевидное-невероятное
Последний раз редактировалось: DNA78 (12:25 29-08-2018), всего редактировалось 1 раз |
|
|
za4ot 478 EGP
Рейтинг канала: 5(187) Репутация: 15 Сообщения: 3257 Откуда: Яма Изобилия Зарегистрирован: 08.08.2012 |
|
Спасибо за отзывчивость. Будет время попробую оба варианта. Хочу уже дописать скрипт охотников за головами, чтоб они вылетали из ближайших ворот и делали игроку бо-бо. Они конечно и своим ходом могут до игрока долететь от какой-нибудь пиратской станции, но вот сколько им лететь придется, учитывая, что игрок на месте не сидит, а постоянно перемещается.
_________________ Пираты - наше всё! |
|
|
|
|
|
Канал X3: Terran Conflict ->
Модовый и скриптовый отсек X3: Terran Conflict: «[ДИСКУС]: Скриптописание. Проблемы и их решение.» |
|
К списку каналов | Наверх страницы |
Цитата не в тему: Тему в отстойник, автора в топку. (Alone)
|
» [ДИСКУС]: Скриптописание. Проблемы и их решение. | страница 54 |
|