Перейти к контенту
Halford

[SoC] Ковыряемся в файлах

Рекомендуемые сообщения

Кто разбирается в патрульных путях, расскажите пожалуйста. Вот есть непись, есть у него путь из четырех точек. Бежит он значит от точки 0 к точке 1. И тут бац, на пол-пути разворачивается и бежит обратно к точке 0. Добежал, разворачивается и снова бежит к точке 1. И тут бац... Ну в общем вы поняли. И так до бесконечности. В округе ни одной аномалии нет. Лезу в move_mgr.script и вставляют отладочный вывод в extrapolate_callback(). Вижу, что он разворачивается и бежит обратно сразу после срабатывания этого коллбека. Бежит к точке 1, срабатывает на полпути коллбек, в нем self.object:get_current_point_index() возвращает 0. Ладно, непонятно. Но не в первый раз. Добавляю в этот коллбек вот такие две строчки

 self.object:set_start_point(self.current_point_index)
 self.object:set_patrol_path(self.path_walk, patrol.next,    patrol.continue, true)

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

Ссылка на комментарий

Это, скорее всего, его кто-нибудь для чего-нибудь прервал.

И самое поганое, что механизма отследить - КТО - нет.

 

А коллбэк - да, честно возвращает "текущую", поскольку до следующей еще не добежали.

Костыль - в общем, зависит от того, что там где ЕЩЕ понапихано.

Ссылка на комментарий
как минимум пробовать

Спасибо попробую!

 

Может кто подскажет, как бороться с очень маленькой дистанцией между ботами(при движении по одному  пути).  Уж очень не красиво смотрится, когда толпа нпс(ов) бежит,  дыша друг дружке в затылок))).

Изменено пользователем Х_и_м_и_к
Ссылка на комментарий
@Dennis_Chikin, в процессе отладки у меня сложилось стойкое впечатление, что это движок его туда-сюда пинал, почему-то. Вот нутром чую, никто его скриптово не отвлекал. И даже если бы кто-то и мешал и отвлекал, почему две добавленных строчки его тут же в чувство привели? Ответа я наверное не найду.
  • Полезно 1
Ссылка на комментарий

Не так давно я писал про странный вылет, причем только при переходах с одной-единственной локации:

 

0023:7699C54F KERNELBASE.dll
0023:73EC8E89 MSVCR80.dll, EH_prolog()
0023:03B76DA8 xrGame.dll
0023:03D979DD xrGame.dll

[error][     183]    : Невозможно создать файл, так как он уже существует.

 

Так вот, дело было в дубликатах строчки name = бла-бла-бла в файле alife_имя_локации.ltx  в спавне. Как только дубли убрал - вылет пропал. Может, пригодится кому...

  • Полезно 2

Сталкер - наше всё!

Ссылка на комментарий
как минимум пробовать:

Вот что я делал

При входе в этот рестрик, должна сработать функция(xr_effects.hana_ano)

 

[251]

 

; cse_abstract properties

section_name = space_restrictor

name = anomaliii

s_rp = 0

position = 22.482372283936,-2.4042422771453,70.77449798584

direction = 0, 0, 0

version = 118

script_version = 6

 

; cse_alife_object properties

game_vertex_id = 598

level_vertex_id = 129370

object_flags = 0xffffff3e

custom_data = <[logic]

active = sr_idle

 

[sr_idle]

on_actor_inside = {+top_bor} nil %=xr_effects.hana_ano%

END

 

; cse_shape properties

shapes = shape0

shape0:type = sphere

shape0:offset = 0,0,0

shape0:radius = 2

 

; cse_alife_space_restrictor properties

restrictor_type = 0

 

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Срабатывает, только один раз(выдает инф.поршен)!  Т.е после загрузки сохранения(для проверки работа-способности), уже больше не работает!

 

function hana_ano()

if db.actor:object("tv_1") and db.actor:object("tv_2") and db.actor:object("tv_3") then

db.actor:give_info_portion("anom_tyty")

end

end

 

Может здесь чего-то не хватает?

 

 

 

 

Изменено пользователем Х_и_м_и_к
Ссылка на комментарий

@Х_и_м_и_к,

active = sr_idle

[sr_idle]
on_actor_inside = {+top_bor} nil %=xr_effects.hana_ano%
вот этот вот "nil" завершает работу данной логики. Окончательно и бесповоротно.

Соответственно, раз зайдя в рестриктор, ты сам же запрещаешь повторное его срабатывание.

Изменено пользователем Kirgudu
  • Спасибо 1
Ссылка на комментарий
ты сам же запрещаешь повторное его срабатывание.

Да нет же, я имел в виду что если сделать сохранку до входа в рестрик, и потом повторно(после загрузки сохранения проверить) то больше не срабатывает! хотя должно... Суть проблемы, нужен  инф.поршен, который выдается после появления в рюкзаке 3 предметов.

Изменено пользователем Х_и_м_и_к
Ссылка на комментарий

Привет! Можно  небольшой вопросик по  NLS 7: как сделать так, чтобы все неписи покупали у меня стволы? Пробовал ковырять (в гугле нашел) папку миск далее файл трейд дженерик, нефига не выходит. Утомился подкидывать к ногам стволы и ждать подберут или нет. Вот долг на свалке, около блокпоста берет с удовольствием дрободаны, а те же сталкеры НЕТ. Где настройки на эту правку?

 

Прошу помощи плиз!

Изменено пользователем oleg-ba
  • Не нравится 1
Ссылка на комментарий

Ребята, может мне кто нибудь доходчиво объяснить,. как выдать поршен при наличии у гг нескольких  предметов. Дело в том что проверочные функции, в основном как я понял работают с <precondition> в диалогах! А мне нужна выдача поршня, из тела функции проверки  предметов в рюкзаке. Такое вообще возможно?!

 

 

с function hana_ano()
if db.actor:object("tv_1") and db.actor:object("tv_2") and db.actor:object("tv_3") then
db.actor:give_info_portion("anom_tyty")
end
end

 

Изменено пользователем Х_и_м_и_к
Ссылка на комментарий

@Х_и_м_и_к,

 

local t_wpn = {"ПРЕДМЕТ1", "ПРЕДМЕТ1", "ПРЕДМЕТ1"}
function search_ALL_weapons_complete()
local gg = db.actor
      if gg then
         for i=1,#t_wpn do
            if not gg:object(t_wpn[i]) then
               return false
            end
         end
         gg:give_info_portion("ПОРШЕНЬ")
         return true
      end
return false
end

 

 

Изменено пользователем Marafon6540
  • Спасибо 1
Ссылка на комментарий

Marafon6540, пока ответ писал, ты уже ответил.

Полностью согласен, функция 100% рабочая, сам пользовал.

 

Вот моя (то же самое, в моде УЗИ отлично работает)

local azot_parts = {"box_condensers", "materials_textolite", "materials_wire", "box_transistors", "kanifol"}


function radioparts_have(task, objective)
local gg = db.actor
if gg then
for i=1,#azot_parts do
if not gg:object(azot_parts) then
return false
end
end
return true
end
return false
end

 

Изменено пользователем AndrewMor
  • Спасибо 1

Сталкер - наше всё!

Ссылка на комментарий

 

 

Только вы бы тег кода использовали, оно чутка нагляднее:

local azot_parts = {"box_condensers", "materials_textolite", "materials_wire", "box_transistors", "kanifol"}
function radioparts_have(task, objective)
 local gg = db.actor
 if gg then
  for i=1,#azot_parts do
   if not gg:object(azot_parts[i]) then
    return false
   end
  end
 return true
 end
 return false
end 

 

 

  • Спасибо 1
Ссылка на комментарий

Kondr48 объяснить что нужно и для чего.  Допустим гг собирает тяжелый хлам в виде каких то предметов, когда он соберет нужные, то сработает рестрик1  для включения следующей функции. Чтобы рестрик1 сработал нужно выдать нужный ему поршен. Нужна рабочая функция для тч.

 

 

local azot_parts = {"box_condensers", "materials_textolite", "materials_wire", "box_transistors", "kanifol"}

 

local t_wpn = {"ПРЕДМЕТ1", "ПРЕДМЕТ1", "ПРЕДМЕТ1"}
Спасибо что откликнулись! Сейчас буду пробовать  :)
Ссылка на комментарий

А рестриктор в этой схеме он зачем? Это в определенной зоне прям нужно делать? Просто можно всё то же самое, по-моему было бы дергать из колбека на взятие предмета, как только ГГ получает предмет, скрипт проверяет, есть ли в инвентаре все, что надо. А в рестрикторе, я полагаю, это висит на апдейте?

Изменено пользователем Kondr48
  • Спасибо 1
  • Согласен 1
Ссылка на комментарий

 

 

рестриктор в этой схеме он зачем?
Нужно по сюжету, именно так и никак иначе.  :)  Да в определенной зоне...
Ссылка на комментарий

Kondr48, согласен, так нагляднее. Забыл про этот тег.

 

Х_и_м_и_к, если в опр. зоне - то да. Прописывай функцию в xr_effects и вызывай ее из рестра. Я свою функцию вызывал из таска, но это ж не принципиально.

Изменено пользователем AndrewMor

Сталкер - наше всё!

Ссылка на комментарий
Прописывай функцию в xr_effects и вызывай ее из рестра.

Я так и сделал.

 Kirgudu - Да вы правы, пришлось убрать этот самый "nil" , но заработала правильно только с этой функцией. Остался последний вопрос, не повлияет ли на фпс логика рестрика без "nil" ? 

 А вот собственно то что получилось: -

 

рестрик

[logic]

active = sr_idle

 

[sr_idle]

 

on_actor_inside = {+top_vov} %=xr_effects.hana_ano%

функция (немного изменил)

 

local obj = {"seif", "tv_1", "tv_2"}

function hana_ano()

local gg = db.actor

if gg then

for i=1,#obj do

if not gg:object(obj) then

return false

end

end

gg:give_info_portion("anom_tyty")

return true

end

return false

end

 

 

 Спасибо всем кто помогал!

Изменено пользователем Х_и_м_и_к
Ссылка на комментарий

Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий

Комментарии могут оставлять только зарегистрированные пользователи

Создать аккаунт

Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!

Зарегистрировать новый аккаунт

Войти

Есть аккаунт? Войти.

Войти
  • Недавно просматривали   0 пользователей

    Ни один зарегистрированный пользователь не просматривает эту страницу.

AMK-Team.ru

×
×
  • Создать...