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

Спавн и логика

Создание объектов на локации и логика поведения этих объектов

Если у вас появились вопросы по созданию динамических объектов в игре (НПС, монстры, аномалии, и т.п.) и настройке их "поведения". Задавайте их в этой теме - умные головы,
модосторители и просто разбирающиеся в программировании люди вам ответят.


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

Сборник модостроения ЗП v10.10.11 (автор: XOBAH): *.CHM, *.HTML
[cut noguest=Если у вас не открывается файл CHM]Если у вас не открывается файл:
1. Запустите [Пуск]=>[Выполнить] (либо хот-кей [WIN]+[R])
2. Введите команду (без кавычек) "regsvr32 %windir%\system32\hhctrl.ocx"
3. Если вылезло окно об успешном завершении вы все сделали правильно и можете перезагружать компьютер (а может и не надо)
Также: файлы МОГУТ не открываться если в пути к файлу есть: символы кириллицы, "_", "#"
Также: есть не стандартные программы-просмоторщики CHM файлов. Например: FBReader[/cut]

[cut=Где найти лог игры после вылета]Что такое LOG ошибки, и как мне его найти?
Это система отладки происходивших вылетов, которая подается игрой в форме текста, хотя не всегда.
Для того чтоб найти LOG необходимо зайти вот сюда:

В Win хр лог находится:

C:\Documents and Settings\All Users\Документы\S.T.A.L.K.E.R. - Зов Припяти\logs

Затем открываете первый файл в формате TXT, и в нем отбираете с низу 25 строчек. После кидаете эти 25 строчек в сообщение на форум.

В Win7 лог находится C:\Users\Public\Documents\S.T.A.L.K.E.R. - Зов Припяти\logs

Путь к папке с логом можно найти открыв файл fsgame.ltx который находится в корневой директории ЗП, за это отвечает строка:
...
$app_data_root$ = true | false| $fs_root$| users\
(тут мы указываем что папка пользователя, будет хранится рядом с Fsgame.ltx)
...
$logs$ = true| false| $app_data_root$| logs\
(а тут мы указываем что в папке пользователя, в подпапке Logs будут храниться наши логи)
...
[/cut][cut=Получение более подробной информации о вылете (ХОВАН)]
Открываем файл _g.script и ищем такую функцию: function abort(fmt, ...)
Там есть заккомментированная строчка "--error_log(reason)", ее и надо расскомментировать, должно получиться вот так:
Code
function abort(fmt, ...)
                    local reason = string.format(fmt, ...)
                    error_log(reason)
end

Вот для примера два одинаковых вылета, первый с функцией по умолчанию, второй - с поправленной функцией

Первый:
Code
Expression    : !m_error_code
Function      : raii_guard::~raii_guard
File          : D:\prog_repository\sources\trunk\xrServerEntities\script_storage.cpp
Line          : 748
Description   : ....a.l.k.e.r. - Зов Припяти\gamedata\scripts\_g.script:478: bad argument #2 to 'format' (string expected, got nil)

Второй:
Code
Expression    : 0
Function      : ErrorLog
File          : D:\prog_repository\sources\trunk\xrServerEntities\script_engine_script.cpp
Line          : 49
Description   : 'Attempt to read a non-existant string field 'path_walk' in section 'walker@mechanic'

[/cut]


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


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


"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
xardaslichДата: Вт, 11.10.2011, 12:53 | Сообщение # 2
Отмычка
Пользователи
Сообщений: 41
Награды: 1
Репутация: [ 49 ]

S.T.A.L.K.E.R. Call of Pripyat 1.6.02(лиц) + Sigerous Mod 1.7+ fix 31.08
Всем доброго дня!

Вижу форум "Основного раздела" обновился(появились подразделы разделённые "по тематике" smile ). Теперь навигация и поиск по форуму облегчится! Авторам-модераторам - Уважение и Респект!!!

А теперь, собственно мой вопрос к форуму -
Пока не знаю как, но хочу реализовать следующее:

На локацию "ЗАТОН" добавить спавн "мутофауны"(бюреры, контролёры, псевдогиганты). А сам спавн привязать к "Выбросам", точки спавна- к разрушеной автозаправке(там уже реализован спавн собак, псевдособак, кабанов и плотей);
ВНЗ"Круг" (после выполнения "Уничтожение логова кровососов") уже спавнится отряд наёмников. Просто добавить ещё и мутантов.
Например бюреров 2-3ед., либо контролёров 1-2ед., либо псевдогигант 1ед. Видовой спавн- раздельный(либо-либо).
 
XOBAHДата: Вт, 11.10.2011, 13:42 | Сообщение # 3
Техник Вольных
Вольные сталкеры
Сообщений: 912
Награды: 21
Репутация: [ 991 ]

xardaslich, На смарте делаешь условие по спавну:
[cut noguest=Логика смарта][smart_terrain]
squad_id = 999
max_population = 1 ;максимум 1 сквад
respawn_params = respawn@surge

[respawn@surge]
spawn_squads = surge_kontroler_squad, surge_giant_squad ;названия сквадов (они не существуют, добавлять лично)
spawn_num = {-spawn_surge} 0, {+spawn_surge} 1 ;без инфы не спавнить, с инфой заспавнить 1 сквад
[/cut] Лезем в surge_manager.script и ищем там строчку xr_effects.scenario_autosave(nil,nil,{"st_save_uni_surge_start"})
после нее вставляем строку give_info(spawn_surge)
Далее ищем функцию CSurgeManager:end_surge(manual) и в нее вставляем: disable_info(spawn_surge)

Если будет ругаться на инфопоршень spawn_surge - зарегистрируй его
А так, должно работать


 
xardaslichДата: Вт, 11.10.2011, 14:55 | Сообщение # 4
Отмычка
Пользователи
Сообщений: 41
Награды: 1
Репутация: [ 49 ]

XOBAH, спасибо! Пока всё понятно smile

Только я пока ещё не усвоил- как на локации (на ЗАТОНЕ в частности) определить какой смарт за какую точку спавна отвечает? Меня конкретно интересуют смарты "Разрушенная автозаправка" и ВНЗ"КРУГ" (спавниться отряд наёмников после "Уничтожение логова кровососов").

p.s. С SDK не работал sad , поэтому и спрашиваю про "определение" смартов.
 
XOBAHДата: Вт, 11.10.2011, 15:28 | Сообщение # 5
Техник Вольных
Вольные сталкеры
Сообщений: 912
Награды: 21
Репутация: [ 991 ]

xardaslich, Определять - если только добавлять отметки на смарты, а Автозаправка это zat_sim_25, а ВНЗ - zat_b38

 
McPainДата: Вт, 11.10.2011, 23:01 | Сообщение # 6
Разведчик «Свободы»
Свобода
Сообщений: 4176
Награды: 18
Репутация: [ 937 ]

А как в ЧН ВООБЩЕ убрать респавн на всех локациях?

ЗЫ поясните плиз какие файлы за какие аномалии отвечают в ЗП\configs\scripts\[zaton|jupiter|pripyat]\anomaly\?


Потеряли? Пинайте в личку


"Фикс" погоды AtmosFear 3
 
denis2000Дата: Ср, 12.10.2011, 14:52 | Сообщение # 7
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

McPain, В файле sim_faction.script закоментировать строки:
[cut]
Code
if(db.actor) and self.board.simulation_started and current_expansion_level.respawn_hours[tostring(level.get_time_hours())] == true and
      (last_spawn_time == nil or
      current_game_time:diffSec(last_spawn_time) >= current_expansion_level.respawn_idle_time)
    then
     local squad_population = #self.squads
     local squad_population_max = self.squad_population_max
     local is_spawned = false
     --printf("TRY TO SPAWN %s, curr %s max %s", self.player_name, squad_population, squad_population_max)
     if squad_population < squad_population_max then
      for i=squad_population,squad_population_max do
       --' Ищем место для спауна.
       local spawn_smart = self.board:get_spawn_smart(self)
       if spawn_smart ~= nil then
        --printf("spawn_smart %s", spawn_smart:name())
        --' Спауним
        local squad = self.board:create_squad(self.player_name, sim_squad_generic.sim_squad_generic, spawn_smart)
        self.board:enter_smart(squad, spawn_smart.id)
        squad:update()

        --' Пересчитываем Team, Squad, Group
        for k,v in pairs(squad.squad_npc) do
         local obj = alife():object(k)
         self.board:setup_squad_and_group(obj)
        end
        squad:refresh()
        is_spawned = true
       else
        --printf("spawn_smart NIL")
        break
       end
      end
     end
     if is_spawned == false then
      self.brain:calculate_expansion_targets()
     end
     self.last_spawn_time = current_game_time
    end
[/cut]

McPain, В имя файла аномальной зоны например zat_b100_anomal_zone.ltx вместо anomal_zone.ltx ставишь name, получается zat_b100_name. Полученную строку ищешь в файле st_land_names.xml и получаешь имя на русском.


"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
tema796Дата: Ср, 12.10.2011, 17:31 | Сообщение # 8
Гражданский
Пользователи
Сообщений: 20
Награды: 0
Репутация: [ -20 ]

а как активировать скрипт через логику нпс

Добавлено (12.10.2011, 17:31)
---------------------------------------------
еще вопрос как сделать чтобы нпс шли за квестовым нпс

 
denis2000Дата: Ср, 12.10.2011, 18:10 | Сообщение # 9
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

Quote (tema796)
как активировать скрипт через логику нпс

В логике НПС:
Code
on_info = {Условие выполнения} % =<Имя функции из скрипта xr_effects.script>(Параметры передаваемые функции)%


"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
tema796Дата: Пт, 14.10.2011, 17:55 | Сообщение # 10
Гражданский
Пользователи
Сообщений: 20
Награды: 0
Репутация: [ -20 ]

у меня вопрос heli_set_enemy(story_id) будет работать в зп

Раскоментируешь в xr_effects.script будет. denis2000
 
McPainДата: Пт, 14.10.2011, 18:47 | Сообщение # 11
Разведчик «Свободы»
Свобода
Сообщений: 4176
Награды: 18
Репутация: [ 937 ]

Quote (denis2000)
В файле sim_faction.script закоментировать строки:

а после данных действий у меня пропадет спавн только сталкеров и мутантов?

А кого еще надо? denis2000
не, никого...


Потеряли? Пинайте в личку


"Фикс" погоды AtmosFear 3


Сообщение отредактировал McPain - Сб, 15.10.2011, 18:42
 
xardaslichДата: Сб, 15.10.2011, 10:55 | Сообщение # 12
Отмычка
Пользователи
Сообщений: 41
Награды: 1
Репутация: [ 49 ]

S.T.A.L.K.E.R. Call of Pripyat 1.6.02(лиц) + Sigerous Mod 1.7+ fix 31.08
Всем доброго дня!

Поясните пожайлуста какую логику использует в моде Николая Болотова НПС для подбора "трофейного" оружия?

Просто я привнёс из сторонних модов оружие и адаптировал для SGM1.7; Оружие без проблем прописывается в инв. НПС. Решил проверить как они подбирают оружие с земли(просто подкидывал его по пути их следования)- проходят мимо, не подбирают sad (подкинутое оружие лучше того, что у непися). Может просто НПС в моде осуществляют подбор оного оружия только с трупов?

Если так, то поясните как прописать в логику НПС подбор любого(прописаного в игре) оружия которое им повстречается по пути их следования?

p.s. Проверку осуществлял в начале игры с первыми 2-мя сталкерами(с "Размаздяем" и сталкером, что проводит до "СКАДОВСКа").

Читаем сборник из шапки! Скрипты>52: Надо в скрипте xr_corpse_detection.script добавить предметы в таблицу. XOBAH
 
McPainДата: Сб, 15.10.2011, 18:41 | Сообщение # 13
Разведчик «Свободы»
Свобода
Сообщений: 4176
Награды: 18
Репутация: [ 937 ]

Как сделать респавн артов(ЧН) не по Выбросу а по часам? Например хочу чтобы арты спавнились ежедневно в 2 часа ночи(оффлайн, т.к. ГГ в это время спит до 4-х утра)

Потеряли? Пинайте в личку


"Фикс" погоды AtmosFear 3
 
PecheneginДата: Сб, 15.10.2011, 20:02 | Сообщение # 14
Отмычка
Пользователи
Сообщений: 25
Награды: 0
Репутация: [ 0 ]

Уважаемый denis2000 подскажите имеется ли такая возможность, путем скрипта или каких-нибудь добавлений в файлы, заспаунить появление ГГ не в положеном месте при начале игры у закрытых ворот (ЗП+SGM 1.7), а на выбранной точке координат, требуемой локации по желанию? Ну например где-нибудь на затоне на острове, или на заводе Юпитер? Заранее благодарен.

Pechenegin
 
XOBAHДата: Сб, 15.10.2011, 22:06 | Сообщение # 15
Техник Вольных
Вольные сталкеры
Сообщений: 912
Награды: 21
Репутация: [ 991 ]

Pechenegin, За положение ГГ при старте игры отвечает секция с именем actor (section_name) в all.spawn
Но в SGM, ГГ переноситься на его положение посредством строчки db.actor:set_actor_position(vector():set(-323.560,19.464,626.825)) в файле sgm_info.script
С помощью этой строки можно указать только расположение на текущей карте, переместить на другую локу нельзя.


 
  • Страница 1 из 97
  • 1
  • 2
  • 3
  • 96
  • 97
  • »
Поиск: