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

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


Halford

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

Gaz24, перед script_version = 5, необходимо указать version = 118.

Поделиться этим сообщением


Ссылка на сообщение
что надо прописать, чтобы отстреливал мутантов, вообще всех мутантов??

 

1. В файле db.script "завести" таблицу всех онлайновых монстров.

2. Организовать обновление таблицы из биндера монстров.

3. Добавить в скрипт ph_car выбор цели, если в логике указан параметр target = monster. Выбор цели производить путём перебора объектов из таблицы по прописанным критериям. ( например атаковать того, кто ближе ).

если не сложно, можешь сделать??

Не сложно, могу, но делать не буду.

я со скриптами не дружу

Тут выбор простой:

1. Мечтаем о супер игре и продолжаем играть в то, что есть.

2. Начинаем дружить со скриптами и воплощаем мечту в жизнь.

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

Поделиться этим сообщением


Ссылка на сообщение

@_Val_@Struck, немного не так.

 

 

Если открыть файл xr_logic.script, то можно увидеть следующее:

 

elseif cond_name(c.name, "on_signal") then
if st.signals and st.signals[c.v1] then
switched = switch_to_section(npc, st, pick_section_from_condlist(actor, npc, c.condlist))
end
 
Т.е. сначала выполняется pick_section_from_condlist(actor, npc, c.condlist)
Если посмотреть функцию pick_section_from_condlist, то видно что сначала выполняется

if infop.params then
xr_effects[infop.func](actor, npc, infop.params)
else
т.е выполняется функция и только затем возвращается секция переключения
return cond.section
И только после этого выполняется само переключение на секцию в функции switch_to_section
Причём здесь явно указано:
 

-- Выполняет переключение на указанную секцию, если задана.
-- Если section == nil, остается работать старая секция.
function switch_to_section(npc, st, section)
if section == nil or section == "" then
return false
end

 

Т.е. переключения никуда не происходит, а продолжает работу активная секция.

 

Поэтому и

 on_signal = anim_end | nil %=npc_suicide%

и

 on_signal = anim_end | %=npc_suicide%

должны работать одинаково.

 

 

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

Поделиться этим сообщением


Ссылка на сообщение

@Карлан, в диалоге <action>dialogs.get_npc</action>

 

В dialogs.script

 

function get_npc(first_speaker, second_speaker)
local npc = first_speaker
if npc:id() == db.actor:id() then
npc = second_speaker
end
-- Здесь, с полученным НПС, делайте, что хотите.
end
 
 

Или второй вариант

В файле xr_motivator.script в методе update

 

if self.object:is_talking() then

-- Здесь, с полученным НПС, делайте, что хотите.

end

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

Поделиться этим сообщением


Ссылка на сообщение

@amik, по первому вопросу. Ошибок в логике нет. Правда непонятно, что за функция killactor.

Попробуйте заменить на actor_enemy.

 

По второму вопросу. Вот это 

 

check_distance = true
min_distance = 70

 

работать не будет, так как обработка этих параметров не предусмотрена в скрипте se_stalker.script

 

Можете посмотреть, как эти параметры обрабатываются в скрипте se_monster.script, ну и по аналогии попробуйте добавить обработку в скрипт se_stalker.script

  • Спасибо 1

Поделиться этим сообщением


Ссылка на сообщение

 

 

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

Совершенно верно. Я переписывал нет-пакеты и менял visual НПС в зависимости от найденного ими бронекостюма.

Никаких багов после смены визуала  выявлено не было . Сейвы не бились.

Поделиться этим сообщением


Ссылка на сообщение

 

 

Вылет, причина: внешний скрипт - nil

 

 

 

if (mobile_binder.initialized) = true then

 

Может всё-таки ?

 

if (mobile_binder.initialized) == true then

  • Согласен 1

Поделиться этим сообщением


Ссылка на сообщение
во внешнем скрипте сначала получить доступ к этому экземпляру класса

По русски - это выглядит так:

 

 В биндере пишите

 

local mobile = nil

function get_mobile_binder()
if mobile == nil then
mobile = mobile_binder()
end
return mobile
end
 
Во внешнем скрипте пишите
 
local mobile = mobile_binder.get_mobile_binder() -- mobile_binder - это имя файла, где находится класс                                                                                --mobile_binder
 
И только после получения доступа пишите
 
if (mobile.initialized) == true then 
Изменено пользователем makdm
  • Спасибо 1

Поделиться этим сообщением


Ссылка на сообщение

 

 

В таком случае надо начинать плясать от конкретного объекта.

Я вообще-то в своих скриптах  "пляшу" всегда от обратного.

Т.е. я не беру переменную из биндера, а наоборот биндер передаёт нужную мне переменную в мой скрипт.

А уже скрипт обрабатывает её и выполняет те или иные действия.

Поделиться этим сообщением


Ссылка на сообщение

@RafMadMan, откуда у вас в ТЧ взялся скрипт amk_anoms.script ?

Если Вы учитесь, то делайте на оригинальном ТЧ, и тогда таких вылетов у вас не будет.

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

Изменено пользователем makdm
  • Не нравится 1

Поделиться этим сообщением


Ссылка на сообщение

 

 

да скрипты я знаю на достаточном для  меня уровне

Ну если на достаточном, то тогда зачем задавать вопросы про причину вылета? Идёте по скриптам ( от строки вылета )  и находите причину. Всё элементарно.

 

 

спавнить я умею, но другими способами

Хотелось бы узнать количество других способов спавна, которые вы знаете в Сталкере. Поделитесь опытом.

  • Нравится 2

Поделиться этим сообщением


Ссылка на сообщение

@RafMadMan, я уже дал вам совет. Экспериментируйте на оригинальном ТЧ, тогда можно будет, в случае вылета, понять, где у вас ошибка.

В вашем случае объяснить причину вылета невозможно. Могу вам только сказать, что аргумент sobj, переданный  в функцию set_anomaly_status, равен nil.

А вот почему он равен nil, исходя из того, что вы предоставили, только экстрасенсы знают.

Поделиться этим сообщением


Ссылка на сообщение

@Хемуль36рус,  в секции [remark@varan2] пропиши:

 

on_info   = {+varan2_sound}  walker@varan4

on_info2 = {=dist_to_actor_ge(145)}  walker@varan4 %+varan2_sound%

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

Поделиться этим сообщением


Ссылка на сообщение

 

 

Логика у тебя вообще забавная

Это точно.

 

@Хемуль36рус, вот такую логику попробуй ( минимум исправлений ):

 

[logic]
active = walker@varan 
combat_ignore = combat_ignore
on_hit = hit
on_death = death
 
[hit]
 
on_info = {=hit_by_actor}%+lada_mertva%
 
 
[death]
on_info = %+varan_sdox%
 
[walker@varan]
path_walk = varan_walk
path_look = varan_look
combat_ignore_cond = {-lada_mertva}
meet = meet
on_info  = {=dist_to actor_le(4) -varan_sound} remark@varan
on_info2 = {+varan_sound -varan2_sound} walker@varan2
on_info3 = {+varan_sound +varan2_sound} walker@varan4
 
[remark@varan]
target = actor
snd = varan
meet = no_meet
combat_ignore_cond = always
danger = danger_condition@varan
on_signal = sound_end | walker@varan2  %+varan_sound%   
 
[walker@varan2]
path_walk = varan_walk
path_look = varan_look
combat_ignore_cond = {-lada_mertva}
meet = meet
on_info = {+kachan_af_okean_have} walker@varan3
 
[walker@varan3]
path_walk = varan_walk
path_look = varan_look
combat_ignore_cond = {-lada_mertva}
meet = meet
on_info  = {=dist_to actor_le(4)} remark@varan2
danger = danger_condition@varan
 
[remark@varan2]
target = actor
snd = varan2
meet = no_meet
combat_ignore_cond = always
danger = danger_condition@varan
on_signal = sound_end | walker@varan4  %+varan2_sound%   
 
[walker@varan4]
path_walk = varan_walk
path_look = varan_look
combat_ignore_cond = {-lada_mertva}
meet = meet
 
[meet]
meet_state = 10|guard@wait
meet_state_wpn = 10|backoff@threat_weap
victim = 10|actor
victim_wpn = 10|actor
use = true
use_wpn = false
syndata = backoff@threat_weap
 
[combat_ignore]
combat_ignore_cond = {-lada_mertva}
 
 
[danger_condition@varan]
ignore_distance = 0
ignore_distance_corpse = 0

Поделиться этим сообщением


Ссылка на сообщение

 

 

Почему-то не определяет функцию

Опечатка, пока набирал логику.

Вместо dist_to actor_le нужно написать dist_to_actor_le

  • Спасибо 1

Поделиться этим сообщением


Ссылка на сообщение

 

 

но проверю ещё разок.

Можешь не проверять. Будет работать на все 146%. Просто я знаю причину. Года так три или четыре назад, сам решал такую же проблему.

Поделиться этим сообщением


Ссылка на сообщение

 

 

у так расскажи для всех, что за причина.

Причина в том, что каждый раз при переходе в он-лайн в логике запускается active секция.

Ты первый раз подошёл к НПС. Условие on_actor_dist_le_nvis = 3 | {-varan_sound} remark@varan возвращает true.

Переключение на секцию remark и выдаётся поршень varan_sound.

Затем ты ушёл от НПС и НПС перешёл в офф-лайн.

Ты вернулся и при переходе НПС в он-лайн снова запускается active секция.

В этом случае условие on_actor_dist_le_nvis = 3 | {-varan_sound} remark@varan возвращает false ( поршень varan_sound уже был выдан ранее ).

Вот НПС и тупит у тебя в active секции и не переключается на другие.

Я добавил тебе в active секцию эти переключения.

 

Всё очень просто.  :)

  • Спасибо 1

Поделиться этим сообщением


Ссылка на сообщение
все равно простыня, у него пути одинаковые везде,

Согласен. Поэтому и написал, что исправил только минимум ( затык в логике ), а уж править саму структуру логики я не стал.

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

Поделиться этим сообщением


Ссылка на сообщение

 

 

Может я и не прав, те кто лучше знают - поправят

Абсолютно прав.

В данном случае НПС не в гулаге. Поэтому и произошёл такой "затык" в логике.

  • Согласен 1

Поделиться этим сообщением


Ссылка на сообщение
  • Недавно просматривали   0 пользователей

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