Войти на сайт Регистрация Лента форума Пользователи Правила сайта Поиск по форуму
Модератор форума: denis2000, FantomICW  
Модостроение. Редактирование и создание скриптов
denis2000Дата: Пн, 10.10.2011, 21:17 | Сообщение # 1
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

Редактирование и создание скриптов

Редактирование и создание скриптов на языке LUA

Если у вас появились вопросы по применению скриптов в игре. Задавайте их в этой теме - умные головы,
модосторители и просто разбирающиеся в программировании люди вам ответят.


Много интересного материала здесь (wiki), Lua_help.script, Help из SDK 0.7

Сборник модостроения ЗП v10.10.11 (автор: XOBAH): *.CHM, *.HTML
[ Если у вас не открывается файл CHM(Этот текст скрыт от гостей) ]


[ Где найти лог игры после вылета ]
[ Получение более подробной информации о вылете (ХОВАН) ]



Перед тем, как задать вопрос в этой теме, прочтите все предыдущие страницы,
статьи в wiki по ссылке из шапки и соседнюю тему "Курс молодого бойца",
возможно Ваш вопрос уже рассматривался.


Если произошел вылет - выкладываем лог! Вопрос ставим четко, не забываем указывать версию игры, установленные моды их версии, установленные фиксы модов и подробно ваши правки.
Помните чем подробнее вопрос, тем точнее ответ.


"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
denis2000Дата: Вт, 02.06.2015, 08:29 | Сообщение # 646
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

Цитата sergej5500 ()
Можно ли этот параметр перенести в секцию сквада?

ЗАЧЕМ!? Просто НПС получает по умолчанию хит даже если этой строки в его логике нет или даже самой логики нет: local can_hit_anomaly = true


"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
sergej5500Дата: Вт, 02.06.2015, 09:45 | Сообщение # 647
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
Награды: 29
Репутация: [ 1355 ]

Цитата denis2000 ()
ЗАЧЕМ!?


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

Для этого надо поправить функцию.
 
denis2000Дата: Вт, 02.06.2015, 12:27 | Сообщение # 648
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

sergej5500, Теперь понятно. Значит пробуйте так:
Код
local can_hit_anomaly = true  
local st_npc = db.storage[ npc:id() ]  
local hit_anomaly = nil
local squad = get_object_squad(npc)

if squad ~= nil then
  hit_anomaly = utils.cfg_get_string(sim_board.squad_ltx, squad:section_name(), "hit_anomaly", npc, false, "", nil)
end

if hit_anomaly == nil then
  hit_anomaly = utils.cfg_get_string( st_npc.ini, st_npc.active_section, "hit_anomaly", npc, false, "", nil)  
end

if hit_anomaly ~= nil then  
  local condlist = xr_logic.parse_condlist( npc, st_npc.active_section, "hit_anomaly", hit_anomaly )  
  can_hit_anomaly = xr_logic.pick_section_from_condlist( db.actor, npc, condlist ) == "true"  
end


"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
sergej5500Дата: Сб, 06.06.2015, 13:03 | Сообщение # 649
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
Награды: 29
Репутация: [ 1355 ]

Добрый день.

В аддоне Припять - Точка Отсчета (приквел к Время Альянса) есть функция рандомного спавна аномалий. Возникла идея сделать рандомный спавн артефактов. После выброса спавнит арты. Штук 30-50.

Чтобы артефакты не размножались бесконтрольно, решил адаптировать функцию из Время Альянса (уборка оружия). Произвести чистку локации от артефактов при старте выброса.
[ Функция ]


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

Можно ли исправить функцию, чтобы она не трогала артефакты в аномальных зонах.
 
makdmДата: Сб, 06.06.2015, 13:59 | Сообщение # 650
Рожденный в СССР
Разработчики
Сообщений: 1294
Награды: 29
Репутация: [ 1909 ]

sergej5500, вот так попробуй написать функцию

Код
function add_cleaner_artefact ( actor, obj )
  for i = 1,65534 do
   local object = alife():object( i )
   if object then
    if object:clsid() == clsid.artefact and object.parent_id == 65535 then
     local can_delete = bind_anomaly_zone.artefact_ways_by_id[ object.id ] == nil
     if can_delete then
      alife():release( alife():object( object.id ), true )
     end
    end
   end
  end
end


Терпение......
И все получится!
 
sergej5500Дата: Вс, 14.06.2015, 10:29 | Сообщение # 651
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
Награды: 29
Репутация: [ 1355 ]

Всем добрый день.

Попробовал сделать в оригинальном Зове Припяти закладываемые рюкзаки, как в СГМ. Хочу использовать минимум функций из СГМ.

[ Пробный рюкзак ]


[ Логика ]


[ Тестовая функция спавна ]


Рюкзак спавнится. В него можно закладывать вещи. Логика рюкзака работает. При удалении от игрока он исчезает.

Возникло несколько идей.

1. Сделать на локации десяток рюкзаков с рандомным спавном. Можно применить функцию спавна аномалий из Припять - Точка Отсчета. Раз у рюкзака есть логика, то пусть они заполняют себя сами. Возникли вопросы.

Как сделать функцию рандомного спавна предметов в рюкзак. Например, 5 предметов из списка. Функция должна быть общей для всех рюкзаков. Вызываться их логики рюкзака. И спавнить предметы именно в этот рюкзак.

Как проверить, пустой ли рюкзак? Допустим, игрок его обчистил. Дальше рюкзак не нужен. Функция проверки должна вызываться из логики рюкзака.

2. Возникла мысль использовать рюкзаки для спавна аномалий. Заложили мы рюкзак, отошли на 10 метров. Рюкзак исчез. На его месте заспавнилась Электра. Функция спавна аномалии должна вызываться из логики рюкзака. И спавнить аномалию в точке нахождения рюкзака.
 
makdmДата: Вс, 14.06.2015, 11:21 | Сообщение # 652
Рожденный в СССР
Разработчики
Сообщений: 1294
Награды: 29
Репутация: [ 1909 ]

sergej5500, по первому пункту ответ здесь:

[ Функции и логика рюкзака(Этот текст скрыт от гостей) ]


По второму пункту ответ здесь

[ Функции и логика(Этот текст скрыт от гостей) ]


Терпение......
И все получится!


Сообщение отредактировал makdm - Вс, 14.06.2015, 11:38
 
sergej5500Дата: Чт, 18.06.2015, 16:47 | Сообщение # 653
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
Награды: 29
Репутация: [ 1355 ]

Добрый день.

Попробовал сделать в чистом ЗП бустер для телепортации игрока. Как в СГМ 2.2.

[ bind_stalker ]


[ _g ]


[ gps_navigator.script ]


[ ui_esc_gps_navigator ]


При таком варианте кода ничего не происходит. Бустер исчезает и все.

Если написать код так.

[ ui_esc_gps_navigator ]


Игра начинает вылетать с логами типа

[ Логи ]


В каком месте допущена ошибка?


Сообщение отредактировал sergej5500 - Чт, 18.06.2015, 16:55
 
denis2000Дата: Чт, 18.06.2015, 21:45 | Сообщение # 654
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

sergej5500, Первый XML естественно верный. А вот по скрипту вопрос: Класс объявляете ui_esc_gps_navigator, а методы написаны для esc_gps_navigator.

"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
sergej5500Дата: Вт, 23.06.2015, 21:07 | Сообщение # 655
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
Награды: 29
Репутация: [ 1355 ]

Добрый вечер.

В аддоне Время Альянса нашел функцию рандомного спавна предметов в инвентарные ящики на локации.

[ Функция ]


Как усовершенствовать эту функцию? Нужно, чтобы спавн происходил только в пустой ящик. То есть, если в ящике что-то есть, то спавн в него проходить не должен.
 
makdmДата: Ср, 24.06.2015, 00:51 | Сообщение # 656
Рожденный в СССР
Разработчики
Сообщений: 1294
Награды: 29
Репутация: [ 1909 ]

sergej5500, нужно добавить проверку:

Код
function spawn_treasure_items(items_table, count, inv_box_story_id)   
local inv_box = alife():object(get_story_object_id(inv_box_story_id))   
local obj_inv_box = get_story_object( inv_box_story_id )
if obj_inv_box and obj_inv_box:is_inv_box_empty()  then
     for i = 1,count do    
alife():create(items_table[math.random(#items_table)],inv_box.position,inv_box.m_level_vertex_id,inv_box.m_game_vertex_id,inv_box.id)
end
end
end


Терпение......
И все получится!


Сообщение отредактировал makdm - Ср, 24.06.2015, 00:53
 
avn1975Дата: Пн, 20.07.2015, 20:53 | Сообщение # 657
Гражданский
Пользователи
Сообщений: 15
Награды: 0
Репутация: [ 0 ]

как сделать выброс через реститор

Сообщение отредактировал avn1975 - Сб, 25.07.2015, 23:18
 
sergej5500Дата: Пн, 27.07.2015, 22:46 | Сообщение # 658
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
Награды: 29
Репутация: [ 1355 ]

avn1975,

Для запуска выброса есть функция

function start_surge(actor, npc, p)
surge_manager.start_surge(p)
end

Вызвать её можно так:

on_info = {Условие} %=start_surge%
 
avn1975Дата: Пт, 31.07.2015, 16:19 | Сообщение # 659
Гражданский
Пользователи
Сообщений: 15
Награды: 0
Репутация: [ 0 ]

как зделать при старте нпс побежали пример скрипта https://yadi.sk/d/UglbUgs2iCWrZ
 
sergej5500Дата: Сб, 22.08.2015, 00:08 | Сообщение # 660
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
Награды: 29
Репутация: [ 1355 ]

Добрый вечер.

Функция для спавна аномалий по координатам.

[ Код ]


Для отдельных аномалий работает отлично. Попробовал заспавнить пачку аномалий. Штук 100. Кодом типа.

[ Код ]


Аномалии должны были заспавниться в квадрате 200 на 200 метров. Центр квадрата - Лесопилка на Затоне. Получил следующее. Аномалии заспавнились.

Точка съема координат - верхнее здание Лесопилки. Тут с аномалиями все в норме.


Спустившись вниз, увидел это. Все аномалии заспавнились на одной высоте. И оказались в воздухе.



Можно ли поправить функцию так, чтобы она спавнила аномалии на AI-сетке? Корректировала высоту?
 
Поиск: