IPB

Помощь по разделу

Сайт S.T.A.L.K.E.R. Inside / [ЗП] Параметры командной строки / Распаковщик ресурсов

>

Скрипты

 
 Орион
сообщение 13.07.2009, 11:34
Сообщение #141


Навий черны у ношьти
***************

Группа: Забанен
Сообщений: 2210
Регистрация: 11.03.2009
Из: Лиманск
Пользователь №: 10251




FAQ

Lua в X-Ray

Список всех функций, переменных, классов и т.п. что используются в Сталкере находится по адресу:
Код
gamedata/scripts/lua_help.script

Для получения файла надо распаковать игру. Можно скачать, в принципе (IMG:style_emoticons/default/smile.gif) Тут =>>Ссылко<<=
Уроки

Пример создания непися скриптами ЛУА. Автор: меченый(стрелок)
Скриптинг на инсайде



Сообщение отредактировал RayTwitty - 09.06.2018, 20:23
Перейти в начало страницы
 
 
 
Ответов
 Ким
сообщение 23.02.2012, 10:55
Сообщение #142


В Пальто
**********************

Группа: Участник
Сообщений: 6972
Регистрация: 18.07.2008
Из: Канберра
Пользователь №: 8458



Вообще в xr_effects указано три типа функций - anim_obj_forward, anim_obj_backforward и anim_obj_forward (reset, точного названия не помню). Соотвественно все три можно вызывать из логики.

"Тут вроде понял, возник сразу вопрос, логика двери??? У меня простая анимация, вернее в максе вшил 3 одна просто открытие open, вторая закрытие close, и третья полный цикл: открытие, задержка в открытом состоянии 3 секунды и закрытие idle. Вшил также две контрольные точки, закрытая дверь и открытая дверь.
Теперь можно по подробнее по логике двери? что это? анимация вшитая или писать логику для неё надо?"
я них.. ничего не понял (IMG:style_emoticons/default/biggrin.gif)
Да, в спавне укажу путь к кастомдате двери, по этому пути создай лтх файл логики (с соответствующим названием), туда напиши логику, что я тебе написал) Ну, знаешь ли, без логики анимация как бы не работает (IMG:style_emoticons/default/biggrin.gif) А вот то, что ты написал в первом посте - это привязка к кнопке, естественно кнопка не может открыться, это же кнопка, а не дверь)


Policai, там ничего сложного, поверь) Просто большинство скриптов написано.. эм.. как бы сказать.. некомпетентными людьми)

Вот смотри, логика для двери, используется у нас в "Обливион Лосте" (в бета тесте отсутствует):
[logic]
active = ph_door@locked

[ph_door@locked]
locked = true
on_info = {+quest_gr_art_1_start} ph_door@close - игрок получает первое задание и дверь открывается, ну прям как в ТЧ (IMG:style_emoticons/default/laugh.gif)
tip_open = tip_door_locked
snd_open_start = trader_door_locked
not_for_npc = true


[ph_door@close]
locked = false
closed = true
tip_open = tip_door_open
on_use = ph_door@open
not_for_npc = true

[ph_door@open]
locked = false
closed = false
on_use = ph_door@close
tip_close = tip_door_close
not_for_npc = true
Перейти в начало страницы
 
 
 Policai
сообщение 23.02.2012, 11:10
Сообщение #143


Почти Игрок
**

Группа: Участник
Сообщений: 24
Регистрация: 23.02.2012
Пользователь №: 14673



Цитата
первом посте - это привязка к кнопке, естественно кнопка не может открыться, это же кнопка, а не дверь)


Я сделал по анологии, именно так сделан вход в лабу х-8. на двери прописано что это анимация а на пульте то что у меня в посте, я и сделал также....

(IMG:style_emoticons/default/biggrin.gif) наверно по разному общаемся... да и трудно обьяснить тупому мне.... я работаю не с аллспавном а в сдк.

Я сделал так: ставлю физик\ доор, присваиваю визуал моей двери, прописываю там анимацию полную idle, (Мне надо чтоб дверь открылась и закрылась сама )в кустом дате указываю путь к файлу лтх с названием как у этой двери. В этом лтх прописываю:

[collide]
ignore_static

[animated_object]


ставлю пульт сбоку и прописываю в кустом дата путь к лтх с названием как и у пульта, в лтх прописываю:


[logic]
active = ph_button@no_card

[ph_button@no_card]
anim = idle
tooltip = tip_no_access_card
on_info = {=actor_has_item(zat_a23_labx8_key)} ph_button@has_card

[ph_button@has_card]
anim = idle
tooltip = tip_need_access_card
on_press = ph_button@unlocked
on_info = {!actor_has_item(zat_a23_labx8_key)} ph_button@no_card

[ph_button@unlocked]
anim = idle
tooltip = st_lx8_button_press_true
on_game_timer = 20 | {-lx8_door_open} %+lx8_door_open =anim_obj_forward(lim_door_laba_hide)%
on_game_timer2 = 10 | {-lx8_green_on} %+lx8_green_on =turn_off(lx8_light_switch_1_red_id) =turn_on(lx8_light_switch_1_green_id)%
on_info = {=actor_in_zone(lim_sr_actor_in_lab) -lim_actor_in_lab} %+lim_actor_in_lab =create_squad(lx8_polter_squad:lim_smart_terrain)%


Именно так сделано в ЗП вход в лабу х-8. Жирным выделено то что я поменял на своё, всё остальное так как было в оригинале. Карточку заспавнил рядышком и проверяю в игре.
Подхожу к пульту, появляется надпись нужна карта доступа, отхожу , беру карту, подхожу с картой, появляется надпись Открыть, нажимаю ввод появляется надпись Доступ разрешён потом 3-4 секунды и вылет с жалобой на строку 1317.
Я понимаю что эта анимация просто не прописана поэтому вылет. Я также понимаю что скорее всего логика на ту родную анимацию уже есть в файлах игры где то, вопрос где?

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



Сообщение отредактировал Policai - 23.02.2012, 11:40
Перейти в начало страницы
 
 
 Ким
сообщение 23.02.2012, 12:51
Сообщение #144


В Пальто
**********************

Группа: Участник
Сообщений: 6972
Регистрация: 18.07.2008
Из: Канберра
Пользователь №: 8458



Policai, погоди, но зачем создавать анимку, если такая уже есть? Возьми аналог (те же двери лифта) и установи их на дверь (в тч - это проход со свалки к бару).
Перейти в начало страницы
 
 
 Policai
сообщение 23.02.2012, 13:08
Сообщение #145


Почти Игрок
**

Группа: Участник
Сообщений: 24
Регистрация: 23.02.2012
Пользователь №: 14673



Тут ситуация такая что таких анимок нету..... Моя дверь это стена отьезжающая вбок.... или круглая бункерная дверь, плюс сама анимация с другими костями и цикличная. Те анимации которые уже есть подходящие для меня, я использую, с ними нет проблем, проблемы только с новыми анимациями.

Сообщение отредактировал Policai - 23.02.2012, 13:13
Перейти в начало страницы
 
 
 Ким
сообщение 23.02.2012, 13:12
Сообщение #146


В Пальто
**********************

Группа: Участник
Сообщений: 6972
Регистрация: 18.07.2008
Из: Канберра
Пользователь №: 8458



Policai, тогда их надо прописывать в скриптах, но там будет куча возни. Вообще анимка отъезжающей двери быть таки должна)
Перейти в начало страницы
 
 
 Policai
сообщение 23.02.2012, 13:27
Сообщение #147


Почти Игрок
**

Группа: Участник
Сообщений: 24
Регистрация: 23.02.2012
Пользователь №: 14673



В ЗП нету отьезжающих дверей...... повырезали всё, есть лифтовые двери но там нет анимации как таковой, там 2 положения, открытые и закрытые, типо актор не видит сам процесс открывания, думаю это сделать проще.... а мне надо именно чтоб был этот сам процесс открытия двери... в этом весь смак... с ТЧ и ЧН в ЗП не работают скрипты, с мостом в рыжем лесу такая же проблема....
Перейти в начало страницы
 
 
 Dart_Sergius
сообщение 23.02.2012, 21:22
Сообщение #148





Группа: Участник
Сообщений: 1
Регистрация: 23.02.2012
Пользователь №: 14681



Цитата(Ким @ 23.02.2012, 13:12) *
Policai, тогда их надо прописывать в скриптах, но там будет куча возни.

Кстати интересный вопрос где их прописывать. Тоже интересовала эта проблема, решения пока не нашёл.
Перейти в начало страницы
 
 
 Ким
сообщение 24.02.2012, 08:08
Сообщение #149


В Пальто
**********************

Группа: Участник
Сообщений: 6972
Регистрация: 18.07.2008
Из: Канберра
Пользователь №: 8458



Dart_Sergius, скорее всего в ph_door, там смещение каждого объекта надо будет указать и т.д. Либо с нуля написать скрипт логики.
Перейти в начало страницы
 
 
 Policai
сообщение 26.02.2012, 17:08
Сообщение #150


Почти Игрок
**

Группа: Участник
Сообщений: 24
Регистрация: 23.02.2012
Пользователь №: 14673



Ким
Всё разобрался..... сделал, всё гораздо проще чем кажется.....
Единственный минус что на любую анимацию я использую логику двери...... какие могут быть последствия?
А так работает всё как надо, и не нужно писать скрипт логики с нуля.

Сейчас у меня практически на одинаковой логике работает анимация стены сдвигающейся в сторону, управление с пульта, и подьёмный мост с рыжего леса, управление с рубильника, и самодельная дверь, тоже с пульта...

Сообщение отредактировал Policai - 26.02.2012, 17:10
Перейти в начало страницы
 
 
 Ким
сообщение 26.02.2012, 17:29
Сообщение #151


В Пальто
**********************

Группа: Участник
Сообщений: 6972
Регистрация: 18.07.2008
Из: Канберра
Пользователь №: 8458



Policai, ну ка напиши в чем проблема была, а то кому-нибудь понадобится)
Последствия? Да вроде не должны быть, единственное в игре не красиво будет.
Перейти в начало страницы
 
 
 Tron
сообщение 28.02.2012, 16:12
Сообщение #152


Игровой Эксперт
***************

Группа: Участник
Сообщений: 2386
Регистрация: 19.01.2009
Из: Москва
Пользователь №: 9722



скажу сразу,что в lua,я почти профан(синтаксиса не знаю) и сейчас его прикручиваю к движку
Возможен ли precache?-т.е инклуд скрипта,но его выполнение будет происходить только после вызова именно этого скрипта.. Читал про "require",но у автора почти такая же байда как и у меня


если я первый скрипт вызваю как(С++)
Код
RunLuaScript("..\\EngineMedia\\Scripts\\startup.lua");



то я бы второй хотел бы вызвать так:
Код
RunLuaScript("keyboard-esc.lua");

А не как сейчас:
Код
RunLuaScript("..\\EngineMedia\\Scripts\\keyboard-esc.lua");


Вводить собственный precache всех ресурсов не хотелось бы-нужны именно скрипты

Сообщение отредактировал Tron - 28.02.2012, 16:14
Перейти в начало страницы
 
 
 [=sinedsc=]
сообщение 09.05.2012, 10:18
Сообщение #153


Опытный Геймер
*******

Группа: Участник
Сообщений: 158
Регистрация: 30.10.2009
Из: Краснодар
Пользователь №: 12814



Параметр в кастом дате смарт террейна
Код
stay = min[, max]                  ;время, на которое сталкер останется, умолчание=навсегда

как задаются параметры
min и мах?
пытался задавать так
Код
stay = 9, 11

пишет что инвалидный параметр.
Подскажите как задать этот параметр
Перейти в начало страницы
 
 
 Tron
сообщение 02.06.2014, 02:12
Сообщение #154


Игровой Эксперт
***************

Группа: Участник
Сообщений: 2386
Регистрация: 19.01.2009
Из: Москва
Пользователь №: 9722



Забыл отписать-разобрался в своей проблеме.
Линковал статически луабинд,ко многим длл.кам из проекта,и передавал туда lua_state.
Вообще странно было,что статические функции работали

Сообщение отредактировал Tron - 02.06.2014, 02:12
Перейти в начало страницы
 
 
 Alwen
сообщение 11.06.2014, 17:41
Сообщение #155


Почти Игроман
*********

Группа: Участник
Сообщений: 686
Регистрация: 17.09.2007
Из: Жуковский
Пользователь №: 6825



Вопрос по работе диалогов. В чем может быть ошибка?
dialogs_escape.script
function money_check_1()
return db.actor:money() >= 10
end

function fuel_to_actor_1(oSpeaker1, oSpeaker2)
dialogs.give_items("explosive_mobiltank", 1)
dialogs.relocate_money(oNPC, 10, "out")
end


function money_check_2()
return db.actor:money() >= 20
end


function fuel_to_actor_2(oSpeaker1, oSpeaker2)
dialogs.give_items("explosive_mobiltank", 2)
dialogs.relocate_money(oNPC, 20, "out")
end


function money_check_4()
return db.actor:money() >= 40
end


function fuel_to_actor_4(oSpeaker1, oSpeaker2)
dialogs.give_items("explosive_mobiltank", 4)
dialogs.relocate_money(oNPC, 40, "out")
end


function no_money_for_fuel()
return db.actor:money() >= 0
end


dialogs_escape
<dialog id="esc_need_fuel">
<phrase_list>
<phrase id="0">
<text>Нужен бензин.</text>
<next>2</next>
</phrase>
<phrase id="2">
<text>Хорошо. Сколько канистр?</text>
<next>3</next>
<next>4</next>
<next>5</next>
<next>6</next>
</phrase>

<phrase id="3">
<text>Одной хватит.</text>
<next>31</next>
<next>7</next>
</phrase>
<phrase id="31">
<precondition>dialog_escape.money_check_1</precondition>
<action>dialog_escape.fuel_to_actor_1</action>
<text>Ни гвоздя, ни жезла тебе, Меченый.</text>
</phrase>

<phrase id="4">
<text>Две.</text>
<next>41</next>
<next>7</next>
</phrase>

<phrase id="41">
<precondition>dialog_escape.money_check_2</precondition>
<action>dialog_escape.fuel_to_actor_2</action>
<text>Ни гвоздя, ни жезла тебе, Меченый.</text>
</phrase>

<phrase id="5">
<text>Сразу четыре.</text>
<next>51</next>
<next>7</next>

</phrase>

<phrase id="51">
<precondition>dialog_escape.money_check_4</precondition>
<action>dialog_escape.fuel_to_actor_4</action>
<text>Ни гвоздя, ни жезла тебе, Меченый.</text>
</phrase>


<phrase id="6">
<text>Я передумал...</text>
<action>dialogs.break_dialog</action>
</phrase>

<phrase id="7">
<precondition>dialog_escape.no_money_for_fuel</precondition>
<text>Походу, пока тебе с твоими деньгами только пешеходом быть.</text>
</phrase>

</phrase_list>

</dialog>

При кликах на пункты с выбором(3, 4, 5) иногда выкидывает фразу из диалога "не хватает денег", как будто врет функция money_check_X. При повторном клике все идет как надо и это сообщение выскакивает когда положено.

За основу взял диалог с покупкой авто у Бармена из LA, и там не понятно назначение функции в конце:
Цитата
function not_has_car_money()
return not has_car_money()
end
-- has_car_money - денег >= цене самого дешевого автомобиля
, которая является предусловием для пункта диалога "у тебя нет денег" в dialogs.xml

Что эта функция выполняет, если и так по умолчанию при недостатке денег диалог на "нет денег" и ссылается?

Сообщение отредактировал Alwen - 11.06.2014, 17:45
Перейти в начало страницы
 
 
 K.D.
сообщение 11.06.2014, 18:11
Сообщение #156


Почти Мастер
***********

Группа: Участник
Сообщений: 1090
Регистрация: 01.03.2011
Из: Москва
Пользователь №: 14352



Цитата(Alwen @ 11.06.2014, 18:41) *
function no_money_for_fuel()
return db.actor:money() >= 0
end

Уверен? (IMG:style_emoticons/default/biggrin.gif)
Перейти в начало страницы
 
 
 Alwen
сообщение 11.06.2014, 18:46
Сообщение #157


Почти Игроман
*********

Группа: Участник
Сообщений: 686
Регистрация: 17.09.2007
Из: Жуковский
Пользователь №: 6825



Цитата(K.D. @ 11.06.2014, 19:11) *
Цитата(Alwen @ 11.06.2014, 18:41) *
function no_money_for_fuel()
return db.actor:money() >= 0
end

Уверен? (IMG:style_emoticons/default/biggrin.gif)

Нет. Но если делать как у торговли авто ЛА, с предусловием актор_мани() <= мин_цена_айтема, то при выборе самого дорого товара и недостатке денег на него стабильно получаю вылет No available phrase to say, dialog[esc_need_fuel]
Перейти в начало страницы
 
 
 K.D.
сообщение 11.06.2014, 19:09
Сообщение #158


Почти Мастер
***********

Группа: Участник
Сообщений: 1090
Регистрация: 01.03.2011
Из: Москва
Пользователь №: 14352



Цитата(Alwen @ 11.06.2014, 19:46) *
Нет. Но если делать как у торговли авто ЛА

Причем тут ЛА? Очевидно же, что функция возвращает true всегда, когда у актора есть деньги. Т.о. прекондишн твоей фразы про нехватку денег всегда пропускает эту фразу. Делай конкретно в этом месте < 10.
Upd: лучше сделать так, наверное. Сделай для каждой фразы свою фразу отказа и там отдельную функцию no_money с разными количествами проверямых денег.

Сообщение отредактировал K.D. - 11.06.2014, 19:15
Перейти в начало страницы
 
 
 Alwen
сообщение 11.06.2014, 20:01
Сообщение #159


Почти Игроман
*********

Группа: Участник
Сообщений: 686
Регистрация: 17.09.2007
Из: Жуковский
Пользователь №: 6825



Второй вариант сделал, но мучает этот вылет "No available phrase to say, dialog[esc_need_fuel]", если нажимать вариант на 40 при 30 денег в инентаре.

dialog_escape.script

function money_check_1()
return db.actor:money() >= 10
end

function fuel_to_actor_1(oSpeaker1, oSpeaker2)
dialogs.give_items("explosive_mobiltank", 1)
dialogs.relocate_money(oNPC, 10, "out")
end


function money_check_2()
return db.actor:money() >= 20
end


function fuel_to_actor_2(oSpeaker1, oSpeaker2)
dialogs.give_items("explosive_mobiltank", 2)
dialogs.relocate_money(oNPC, 20, "out")
end


function money_check_4()
return db.actor:money() >= 40
end


function fuel_to_actor_4(oSpeaker1, oSpeaker2)
dialogs.give_items("explosive_mobiltank", 4)
dialogs.relocate_money(oNPC, 40, "out")
end

--function no_money_check()
-- return db.actor:money() < 0
--end


function no_money_for_fuel()
return not money_check_1
end

function no_money_for_fuel_two()
return not money_check_2
end

function no_money_for_fuel_four()
return not money_check_4
end



dialogs_escape.xml
<dialog id="esc_need_fuel">
<phrase_list>
<phrase id="0">
<text>Нужен бензин.</text>
<next>2</next>
</phrase>
<phrase id="2">
<text>Хорошо. Сколько канистр?</text>
<next>3</next>
<next>4</next>
<next>5</next>
<next>6</next>
</phrase>

<phrase id="3">
<text>Одной хватит.</text>
<next>31</next>
<next>7</next>
</phrase>
<phrase id="31">
<precondition>dialog_escape.money_check_1</precondition>
<action>dialog_escape.fuel_to_actor_1</action>
<text>Ни гвоздя, ни жезла тебе, Меченый.</text>
</phrase>

<phrase id="4">
<text>Две.</text>
<next>41</next>
<next>72</next>
</phrase>

<phrase id="41">
<precondition>dialog_escape.money_check_2</precondition>
<action>dialog_escape.fuel_to_actor_2</action>
<text>Ни гвоздя, ни жезла тебе, Меченый.</text>
</phrase>

<phrase id="5">
<text>Сразу четыре.</text>
<next>51</next>
<next>71</next>

</phrase>

<phrase id="51">
<precondition>dialog_escape.money_check_4</precondition>
<action>dialog_escape.fuel_to_actor_4</action>
<text>Ни гвоздя, ни жезла тебе, Меченый.</text>
</phrase>


<phrase id="6">
<text>Я передумал...</text>
<action>dialogs.break_dialog</action>
</phrase>

<phrase id="7">
<precondition>dialog_escape.no_money_for_fuel</precondition>

<text>Походу, пока тебе с твоими деньгами только пешеходом быть.</text>
</phrase>

<phrase id="71">
<precondition>dialog_escape.no_money_for_fuel_four</precondition>

<text>Тебе на столько не хватит.</text>
</phrase>

<phrase id="72">
<precondition>dialog_escape.no_money_for_fuel_two</precondition>

<text>Тебе на столько не хватит.</text>
</phrase>

</phrase_list>

</dialog>


Сообщение отредактировал Alwen - 11.06.2014, 20:07
Перейти в начало страницы
 
 
 hi_flyer
сообщение 11.06.2014, 20:07
Сообщение #160


Мастер Игры
************

Группа: Друзья GM
Сообщений: 1269
Регистрация: 05.03.2012
Пользователь №: 14709



Alwen,

Перенеси весь текст (<text></text>) в любой файл из config\text\rus.
Перейти в начало страницы
 
 
 abramcumner
сообщение 11.06.2014, 20:52
Сообщение #161


Босс
********************

Группа: Участник
Сообщений: 4348
Регистрация: 27.04.2011
Из: Россия
Пользователь №: 14366



Цитата(Alwen @ 11.06.2014, 21:01) *
Код
function no_money_for_fuel()
      return not money_check_1
end

А в ЛА-то скобочки были:
Код
function not_has_car_money()
return not has_car_money()
end


Может проще добавить эти канистры в продажу по десяточке? (IMG:style_emoticons/default/smile.gif)

Сообщение отредактировал abramcumner - 11.06.2014, 20:53
Перейти в начало страницы
 
 
 
 

 
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 

Текстовая версия Сейчас: 25.10.2020, 14:09