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

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

Совмещение модификаций на ЧН.

 

Я хотел адаптировать Mercenaries mod(он же - actor_need_help.script) под Faction commander. У меня это почти получилось - совместить скрипты друг под друга. В итоге Faction commander работает нормально, а Mercenaries не идёт.

 

При активации скрипта выкидывает с этим логом:

FATAL ERROR

[error]Expression : fatal error
[error]Function : CScriptEngine::lua_error
[error]File : E:\priquel\sources\engine\xrServerEntities\script_engine.cpp
[error]Line : 180
[error]Description :
[error]Arguments : LUA error: ...- my faction\gamedata\scripts\actor_need_help.script:589: attempt to index field 'board' (a nil value)

 
До этого я мог исправить ошибки, которые выдавались в логе. Это как исправить - я не знаю.
 
 
Ссылка на комментарий

@vampirnik77, как-то так:

local ptr = patrol('название_точки_пути')
alife():create("секция_аномалии", ptr:point(0), ptr:level_vertex_id(0), ptr:game_vertex_id(0))
  • Спасибо 1
  • Полезно 1

Аддон для ОП-2.09.2: Яндекс/Google/GitHub

naxac.gif

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

@StalkerCOP, пробовал такое, но работает токмо с артефактами. Всем остальным предметам добавляет лишь описания воздействий, хотя самого воздействия от них нет. (Вероятно, зависит также от класса предмета.)

@Dennis_Chikin, того и боялся. Не осмелюсь никак полезть в движок игры. Да и возможности такой нет.

Прошу прощения, @Dennis_Chikin. Изначально предполагалось, что воздействие артефактов было реализовано скриптами. Теперь данный миф развеяли, за что благодарствую.

Спасибо за ответы, друзья-сталкеры.  :good:

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

Подскажите нубу в скриптах - апдейт рестрикторов идет реже чем актора? Я к тому, что можно ли например некоторые скрипты, не требующие частого апдейта (например новости о смерти сталкеров) повесить на апдейт рестриктора для экономии ресурсов, дабы не загружать многострадальный апдейт актора? Например в ЗП есть рестрикторы постоянно работающие на каждом уровне (к примеру спавнер ворон: sr_crow_spawner), можно было бы его загрузить.

Изменено пользователем Старый уставший сталкер
Ссылка на комментарий
@Старый уставший сталкер, рестрикторы обновляютя через некоторый интервал из апдейта актера. Сделай так же и для своих новостей.
  • Нравится 1

Аддон для ОП-2.09.2: Яндекс/Google/GitHub

naxac.gif

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

можно было бы его загрузить.

Все апдейты объектов вызываются из внутреннего общего апдейта. Переложив на ворон, ты по сути ничего не изменил.
  • Нравится 1
Ссылка на комментарий

Такая трабла. Удаляю предмет из инвентаря, после этого вызываю итерацию, итерация захватывает удаленный предмет, как решить? Буду благодарен.

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

 

 

итерация захватывает удаленный предмет, как решить?

для ЗП я использовал метод drop_item_and_teleport. Из инвентаря он при этом точно удаляется движком. Есть ли такое в ТЧ не знаю.

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

@Serge!, А мне и нужно было для ЗП. Кстати не помогло.

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

Удаляю предмет из инвентаря, после этого вызываю итерацию, итерация захватывает удаленный предмет, как решить? Буду благодарен.

Сделать паузу перед итерацией либо добавить флажок "removed" удаленному объекту (способ должен сработать, но не гарантирую).

...
sobj.removed = true
alife():release(sobj.id)
npc:iterate_inventory(function(_,item) local sobj = alife():object(item:id()) if sobj and not sobj.removed then ... end end)
Изменено пользователем RayTwitty
Ссылка на комментарий

 

 

я использовал метод drop_item_and_teleport

забыт уточнить. Предмет всё равно надо удалить, т.к. иначе потом метод level.object_by_id может его найти. Главное то, что он в инвентаре болтаться не будет и не надо ждать отработки уборщика.


 

 

Кстати не помогло.

дайте кусочек кода (хотя сюда, хоть в личку) мне просто интересно посмотреть.

Ссылка на комментарий
Удаляю предмет из инвентаря, после этого вызываю итерацию, итерация захватывает удаленный предмет, как решить?

А разве не для этого случая были ПЫСами экспортированы

void mark_item_dropped(game_object*)

ну и до кучи

bool marked_dropped(game_object*) ? Кстати, недавно где-то рядом обсуждалось...

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

 

 

Удаляю предмет из инвентаря, после этого вызываю итерацию, итерация захватывает удаленный предмет, как решить?

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

 

Плагины Total Commander для работы с игровыми архивами:

Архиваторный плагин (для работы с одиночным архивом): link1 link2

Системный плагин (для распаковки установленной игры): link1 link2

 

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

Удаляю предмет из инвентаря, после этого вызываю итерацию, итерация захватывает удаленный предмет, как решить?

Самое простое - проверяй наличие серверного объекта при итерации (... if alife():object(item:id())~=nil then...).

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

Аддон для ОП-2.09.2: Яндекс/Google/GitHub

naxac.gif

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

@DXatom

Для начала почитать раздел "Уроки по модостроению" + тут - узнаешь много полезного.

Конкретно по вопросу (в общих чертах): делать этот самый документ на классе чего-то съедобного :) \используемого, затем ловить в обработчике кэллбэка(в классе биндера актера) использование этого объекта, по факту выдавать задание.

  • Полезно 1
Ссылка на комментарий
@DXatom, можно либо создать объект задания CGameTask, загрузить в него описание задания и собственно выдать во время использования предмета (читать), но зачем запариваться, когда можно повесить выдачу задания на поршен (вроде бы, тег task надо прописать внутрь тега поршена). Изменено пользователем RayTwitty
  • Полезно 1
Ссылка на комментарий
 

@DXatom

Для начала почитать раздел "Уроки по модостроению" + тут - узнаешь много полезного.

Конкретно по вопросу (в общих чертах): делать этот самый документ на классе чего-то съедобного  :) \используемого, затем ловить в обработчике кэллбэка(в классе биндера актера) использование этого объекта, по факту выдавать задание.

Сделал так:

function actor_binder:reinit()


...
self.object:set_callback(callback.use_object, self.use_inventory_item, self)

function actor_binder:net_destroy()
...
self.object:set_callback(callback.use_object, nil)

function actor_binder:use_inventory_item(obj)
if obj ~= nil
then
task_documents.on_use(obj)
end
end

 

 

local object_info_portion = {
task_document="esc_talk_koval_quest_started"
}

function on_use(obj)
for key, val in pairs(object_info_portion) do
if obj:section() == key
then
db.actor:give_info_portion(val)
end
end
end

 

 

[task_document]:identity_immunities
GroupControlSection = spawn_group
discovery_dependency =
$spawn = "food and drugs\task_document"
$prefetch = 32
class = II_ANTIR
cform = skeleton
visual = equipments\item_document_2.ogf
description = "no desc"

inv_name = "Unnamed"
inv_name_short = "Unnamed"
inv_weight = 0.10

inv_grid_width = 2
inv_grid_height = 1
inv_grid_x = 6
inv_grid_y = 18
cost = 0

eat_health = 0
eat_satiety = 0
eat_power = 0
eat_radiation = 0
wounds_heal_perc = 0
eat_portions_num = 1
animation_slot = 4
hud = wpn_vodka_hud

 

 

Работает.

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

Скажите, пожалуйста, как стравить двух НПС, а то они не атакуют друг друга.

 

[logic]


active = walker@walker4
on_death = death@koval

[walker@walker4]
path_walk = esc_koval_strela_walk
path_look = esc_koval_strela_look
meet = no_meet

[death@koval]
on_info = %+esc_koval_dead%

 

 

[logic]
active = walker@walker1

[walker@walker1]
path_walk = esc_bandit1_walk
path_look = esc_bandit1_look
meet = default_meet

 

 

стоят прямо лицом к лицу на мосту (Кордон). Спасибо.

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

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

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

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

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

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

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

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

Войти

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

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

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