Спавн обьектов через db.script — различия между версиями
Материал из S.T.A.L.K.E.R. Inside Wiki
(→Авторы) |
|||
| (не показаны 10 промежуточные версии 7 участников) | |||
| Строка 4: | Строка 4: | ||
Сегодня я расскажу вам как заспавнить, например, AK-74 в самом начале игры, без использования диалогов! | Сегодня я расскажу вам как заспавнить, например, AK-74 в самом начале игры, без использования диалогов! | ||
Но, прежде чем учиться запускать функции без использования диалогов - сначала научитесь их вызывать общепринятым методом. | Но, прежде чем учиться запускать функции без использования диалогов - сначала научитесь их вызывать общепринятым методом. | ||
| − | * [[http://www.stalkerin.gameru.net/wiki/index.php | + | * [[http://www.stalkerin.gameru.net/wiki/index.php?title=Спавн_через_скрипт Спавн через скрипт]] |
===Практика=== | ===Практика=== | ||
Для начала нам надо распаковать '''db.script''' и там находим функцию: | Для начала нам надо распаковать '''db.script''' и там находим функцию: | ||
| − | < | + | <lua> |
function add_actor( obj ) | function add_actor( obj ) | ||
actor = obj | actor = obj | ||
| Строка 15: | Строка 15: | ||
add_obj( obj ) | add_obj( obj ) | ||
end | end | ||
| − | </ | + | </lua> |
Изменим эту функцию. У нас должно получиться так: | Изменим эту функцию. У нас должно получиться так: | ||
| − | < | + | <lua> |
function add_actor( obj ) | function add_actor( obj ) | ||
actor = obj | actor = obj | ||
| Строка 24: | Строка 24: | ||
new_spawn.give_ak74() | new_spawn.give_ak74() | ||
end | end | ||
| − | </ | + | </lua> |
'''new_spawn.script''' - это название скрипта, в котором будет находиться наша функция спавна калаша. | '''new_spawn.script''' - это название скрипта, в котором будет находиться наша функция спавна калаша. | ||
Создаем скрипт '''new_spawn.script''' и пишем там функцию: | Создаем скрипт '''new_spawn.script''' и пишем там функцию: | ||
| − | < | + | <lua> |
function give_ak74() | function give_ak74() | ||
alife():create("wpn_ak74", db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id()) | alife():create("wpn_ak74", db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id()) | ||
end | end | ||
| − | </ | + | </lua> |
Все! Теперь после того, как мы появимся у нас в инвентаре будет AK-74 и без использования диалогов! | Все! Теперь после того, как мы появимся у нас в инвентаре будет AK-74 и без использования диалогов! | ||
Таким способом можно заспавнить не только калаш, но и другое оружие и патроны. | Таким способом можно заспавнить не только калаш, но и другое оружие и патроны. | ||
| + | |||
| + | Если вы хотите, чтобы предмет заспавнился у вас только один раз, при начале новой игры то функцию в файле new_spawn.script нужно переделать таким образом: | ||
| + | <lua> | ||
| + | function give_ak74() | ||
| + | if db.actor:dont_has_info("start_game_spawn") then | ||
| + | alife():create("wpn_ak74", db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id()) | ||
| + | db.actor:give_info_portion("start_game_spawn") | ||
| + | end | ||
| + | end | ||
| + | </lua> | ||
| + | |||
| + | Далее нам необходимо зарегистрировать новый инфопоршень, делается это так: | ||
| + | В папке gamedata/config(s)/gameplay/ открываем блокнотом один из файлов, имя которых начинается с '''info_*.xml''', где * это название уровня. | ||
| + | Откроем например файл '''info_l01escape.xml''' и в конец перед тегом '''</game_information_portions>''' добавляем: | ||
| + | '''<info_portion id="start_game_spawn"></info_portion>''' | ||
| + | |||
===Авторы=== | ===Авторы=== | ||
* Шатров Дмитрий (Fim@n) | * Шатров Дмитрий (Fim@n) | ||
| − | + | * Павелин Максим (PriZraK_2018) | |
[[Категория:Скрипты]] | [[Категория:Скрипты]] | ||
Текущая версия на 17:30, 28 июня 2015
Спавн обьектов через db.script
Теория
Сегодня я расскажу вам как заспавнить, например, AK-74 в самом начале игры, без использования диалогов! Но, прежде чем учиться запускать функции без использования диалогов - сначала научитесь их вызывать общепринятым методом.
Практика
Для начала нам надо распаковать db.script и там находим функцию:
function add_actor( obj ) actor = obj actor_proxy:net_spawn( obj ) add_obj( obj ) end
Изменим эту функцию. У нас должно получиться так:
function add_actor( obj ) actor = obj actor_proxy:net_spawn( obj ) add_obj( obj ) new_spawn.give_ak74() end
new_spawn.script - это название скрипта, в котором будет находиться наша функция спавна калаша.
Создаем скрипт new_spawn.script и пишем там функцию:
function give_ak74() alife():create("wpn_ak74", db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id()) end
Все! Теперь после того, как мы появимся у нас в инвентаре будет AK-74 и без использования диалогов! Таким способом можно заспавнить не только калаш, но и другое оружие и патроны.
Если вы хотите, чтобы предмет заспавнился у вас только один раз, при начале новой игры то функцию в файле new_spawn.script нужно переделать таким образом:
function give_ak74() if db.actor:dont_has_info("start_game_spawn") then alife():create("wpn_ak74", db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id()) db.actor:give_info_portion("start_game_spawn") end end
Далее нам необходимо зарегистрировать новый инфопоршень, делается это так: В папке gamedata/config(s)/gameplay/ открываем блокнотом один из файлов, имя которых начинается с info_*.xml, где * это название уровня. Откроем например файл info_l01escape.xml и в конец перед тегом </game_information_portions> добавляем: <info_portion id="start_game_spawn"></info_portion>
Авторы
- Шатров Дмитрий (Fim@n)
- Павелин Максим (PriZraK_2018)