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

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

Выполнил функцию( Тч 1.0004)

 

function pri_scene_rel()
relation_registry.set_community_relation("stalker","actor_freedom",-5000)
end

 

 

Группировки все рабочие, но ловлю вылет:

 

error]Expression : fatal error
[error]Function : CScriptEngine::lua_error
[error]File : E:\stalker\patch_1_0004\xr_3da\xrGame\script_engine.cpp
[error]Line : 73
[error]Description :
[error]Arguments : LUA error: ...adow of chernobyl\gamedata\scripts\xr_effects.script:152: attempt to call field 'set_community_relation' (a nil value)

 

 

В инете искал, и не нашел примеров использования .set_community_relation в ТЧ. Быть может ее там просто нет? Есть ли ей альтернатива, или я просто накосячил в аргументах функции?

Не соответствует правилам.

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

 

CRAZY_STALKER666, я такую функцию нашёл только в ЗП. (Искал в ТЧ, ОГСЕ (там добавляли функции для смены отношений, просто не помню какие) и в ЗП. Вывод очевиден  :) 

 

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

Del.

 

Что-то я припудрился, извиняюсь, сравниваю со своими телегами и забыл, что отношения перерабатывал, у меня такая телега стоит:

function set_factions_community_relation(faction, faction_to, new_community)
    assert(is_string(faction), [[bad argument #1 to set_factions_community_relation (string excepted, got %s)]], type(faction))
    assert(is_string(faction_to), [[bad argument #2 to set_factions_community_relation (string excepted, got %s)]], type(faction_to))
    assert((is_number(new_community) or is_string(new_community)), [[bad argument #3 to set_factions_community_relation (string or number excepted, got %s)]], type(new_community))
    if tonumber(new_community) then
        relation_registry.set_community_relation(faction, faction_to, new_community)
    else
        assert(const_factions_relation[new_community], [[const_factions_relation doesn't exist [%s] field]], new_community)
        relation_registry.set_community_relation(faction, faction_to, const_factions_relation[new_community])
    end
end
Изменено пользователем Карлан
Ссылка на комментарий

 

 

Использование set_community_relation в этой функции верное.

 

Возможно мы не поняли друг друга.

Есть ли в ТЧ вообще эта функция? 

Не соответствует правилам.

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

@CRAZY_STALKER666, нет, в оригинальном ТЧ такой функции разумеется нет, тебе, возможно, подойдет использование relation_registry.set_community_goodwill, но она устанавливает коэффициент к конкретному объекту, но не меняет отношения между группировками. В твоем случае, я думаю, подойдет, так как, если не ошибаюсь, то ты хочешь поссорить актора, который состоит в Свободе, со сталкерами (как группировкой). Такое возможно.

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

 

 

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

 

Неправильно ^_^

Нужно поссорить 2 группировки, ГГ к ним отношения не имеет.(На названия группировок смысла нет смотреть, их не я делал и использую по своему).

В таком случае, если данной функции нет, можно ли её реализовать без ковыряний движка?

Не соответствует правилам.

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

@CRAZY_STALKER666, функцию такую сделать определенно нельзя, тут остается только костылить, можно сделать группировку-двойник, можно на выходе в онлайн вылавливать мужиков из нужной группировки и каждого персонально ссорить с другой группировкой, это наверное меньшее из зол. Но это так, с первого взгляда, возможно что-то и лучше можно сделать.

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

@Карлан, ок тогда поступим так.

У каждого моего НПЦ из сценки( какой не скажу, секрет типо <_< ) есть уникальный id. И получить его можно вплоть до:


 

local id_kl7 = my_sid.pri_killed_3

local se_obj_1 = alife():object(id_kl7)

На выходе имеем alife():object. Но это я использую для удаления вышеуказанных.

Значит, можно написать функцию, которой я передам 2 аргумента(2 нпц) и она поссорит? Просто как правильно и аккуратно это сделать, не помню.

 

З.Ы Через секнду озарение пришло.

М.б так прокатит?)

 

function set_enemies(obj, obj_2)

-- тут надо получить НПЦ вышеуказанным способом
if npc1 and npc1:alive() then -- тут проверить нет ли у нас NIL и не мертвы ли они.
npc:set_relation(game_object.enemy, npc1) -- ссорим однго относительно другого
npc1:set_relation(game_object.enemy, npc) -- наоборот
end
end
end
Изменено пользователем CRAZY_STALKER666

Не соответствует правилам.

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

@CRAZY_STALKER666, нет, я говорю о том, что бы не объекты друг с другом ссорить, а группировку с объектом, то есть устанавливаем ENEMIES константу в оба варианта, и чтобы мужик относился плохо к группировке, и группировка к мужику.

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

@Карлан, смотри, новые подробности.

 

1.Группировка, которую добавлял не я, не доделана, при смерти НПЦ из нее вылет, ссылающийся на death_manager, значит неизвестно где там еще накосячили. А делал то DEXXX...

 

2. Твой способ может и прокатит, но раз у меня есть конкретные обьекты, не проще оперировать ими а не группировками?

 

3. Попробовал применить к своему способу set_relation() - вылет:

 

[error]Expression : fatal error
[error]Function : CScriptEngine::lua_error
[error]File : E:\stalker\patch_1_0004\xr_3da\xrGame\script_engine.cpp
[error]Line : 73
[error]Description :
[error]Arguments : LUA error: ...adow of chernobyl\gamedata\scripts\xr_effects.script:259: attempt to call method 'set_relation' (a nil value)

 

 

Применим ли set_relation для обьекта типа alife():object?

Не соответствует правилам.

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

@CRAZY_STALKER666, глянь в оригинале функцию xr_effects.set_enemies() - там очень близко к твоему случаю. Ссорит одного НПС со списком других, сделать аналог под свои нужды не сложно.

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

@Kirgudu, от туда и подглядывал. Разница лишь в получении обьекта.

У ПЫС:

 

npc1 = level_object_by_sid(v)

И у меня;

 

 

local se_obj_1 = alife():object(id_kl7)

 

Думаю, отсюда и вылет - не тот тип обьекта передаю( а уж где серверный а где клиентский  - не знаю, честно :wacko: )

Но уверен - путаница именно в этом.

Не соответствует правилам.

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

@CRAZY_STALKER666, тебе нужен клиентский. Для получения используй, например, функцию level.object_by_id(id). Ну или уже упомянутую level_object_by_sid(sid).

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

P.S.S Пока кумекаю над функцией - увидел это

 

function monster_berserk(actor, npc)
npc:berserk()
end

 

 

Кхм... Еще одна пустышка-подарок ПЫС, или что-то рабочее?

Не соответствует правилам.

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

увидел это

void berserk(); -- вопреки некоторым предположениям - это не наследие "Oblivion Lost", поскольку функция новая, а в 1935 её не было. Однако её назначение не вполне понятно.

В теме "Справочник...", кстати, можно найти много интересного. Изменено пользователем Kirgudu
Ссылка на комментарий
В теме "Справочник...", кстати, можно найти много интересного.

Читал её. Очень много для себя узнал. 

 

Идем дальше. Получил я НПЦ по ид, как сказали выше. Поссорил. Итог - ржунимагу.

 

1.Первый стал агриться на меня, ГГ

2.Второй убил своего, которого должен был.

3.Третий и второй вместе в итоге подощли к первой жертве, один сорвался и убежал, а второй встал вплотную не к своей жертве, и начал вертеть прицелом в области головы жертвы. При этом я вообще ничего не понял - но одно ясно: xray решил просто меня потролить))))

 

З.Ы Конечно же я накосячил, своего добился, только появились новые огрешки, но их мы уже решим другими, более простыми способами)

 

И всеже - void berserk() - просто пустая функция? Её тупо зарегестрировали в классе?

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

Не соответствует правилам.

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

Ума не приложу почему так происходит...

	print('print_table(point_tbl):')
	print_table(point_tbl) --при проверке показывает 6 вложений
	if not ignore_tbl[back_level] then ignore_tbl[back_level] = {} end
	ignore_tbl[back_level] = point_tbl
	print_table(ignore_tbl)--при проверке показывает 6 вложений
	
	table.remove(point_tbl) -- удаляю 2 последних вложения в таблице point_tbl
	table.remove(point_tbl)
	print_table(ignore_tbl) -- показывет что в таблице ignore_tbl ТОЖЕ отнялось 2 последних вложения

Почему удаляется и в другой таблице вложения?? ничего не понимаю

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

@CRAZY_STALKER666, это не пустышка, но она и не работает. Я ее у себя худо-бедно починил, но она все равно работает не так, как задумывали разрабы, чтобы сделать нормально там надо небольшой таймер написать, мне просто было лень, так что не заморачивайся.

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

 

 

Я ее у себя худо-бедно починил, но она все равно работает не так, как задумывали разрабы,

 

Ок. Ок.

Открой секрет, пожалуйста - а как и что задумывали разрабы?

Не соответствует правилам.

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

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

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

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

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

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

Войти

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

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

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