Скриптование - Страница 391 - Скрипты / конфиги / движок - AMK Team
Перейти к контенту

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

Тема для обсуждения скриптов всего и всех в серии игр STALKER.


Задавая вопрос (!):
1. Внимательно изучите суть вопроса. Вопрос должен соответствовать выбранной Вами темы. Это поможет сохранить порядок и читабельность темы, а также облегчит поиск и понимание сего;
2. Изучите то, что уже есть в теме (пролистайте "руками", воспользуйтесь поиском на форуме);
3. Изучите информацию которая может вам помочь:

 
 

Stalkerin. Там есть много хороших статей касательно данной темы.
Уроки по модостроению. Есть рабочие примеры готовых скриптов различного назначения.

 

Справочное руководство по языку Lua 5.1
https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/ru
Справочник по функциям и классам. Собрано много информации по функциям и классам, не всем, но по основные сведения предоставлены.

4. Дабы не превращать обсуждение в "кашу" разной информативной направленности, задавайте несколько вопросов по порядку (в разных постах) после того, как получите ответ на предыдущий вопрос;
5. "Спасибо" и тому подобное - будьте так любезны в ПМ. Если не любите писать в ПМ, в конце вопроса напишите фразу: "Заранее спасибо!" - или что-то в этом духе;
6. ПОЖАЛУЙСТА! Указывайте, для какой игры Вам необходима информация (ТЧ, ЧН, ЗП), если стоит мод - укажите название мода;
7. Если Вы что-то сделали и результат не такой, какой Вами задумывался, то, пожалуйста, приводите коды которые Вы изменяли/писали целиком! Это поможет другим правильно ответить на Ваш вопрос, а также оградит Вас от лишней писанины.
8. Оформляйте сообщение. Пользуйтесь тегами для того, чтобы отделить код от текста. Пишите грамотно - ПОЛЬЗУЙТЕСЬ ЗНАКАМИ ПРЕПИНАНИЯ.
9. И помните: «Правильно заданный вопрос – половина ответа».

 

Какие вопросы следует задавать, а какие нет...

 

Задавайте вопросы, которые касаются непосредственно скриптов и их работы, т.е. Вы что-то делаете, а у Вас что-то не получается, при этом у Вас на руках должен быть хотя бы какой-то код, свидетельствующий о Вашей причастности к вопросу.

 

Вопросы которые будут удалятся, следовательно их задавать не нужно:
-- Где находится та или иная функция?
Для ответа используем поиск по словам среди файлов оригинальной игры или мода, если объект поиска относится к нему, при помощью программы, которая Вам наиболее симпатизирует;
-- Как сделать что-то/то-то?
С подобными вопросами, либо в "ковырялки", где Вам вероятнее всего так же не ответят, либо выдвигаем мысли, подкреплённые теорией, практикой (идеальный вариант) и здравым рассудком;
-- Вопросы со смыслом: "сделайте", "совместите" и подобными глаголами повелительного наклонения.
-- К тому же удалению будут подвергаться вопросы, в которых масштабно не используются теги, для отделения кода и цитат от основного текста, а также не вписан в спойлер код размером превышающие семь строк.
Ответ на возможно возникший вопрос: В какую тему можно обратиться по поводу логики и спавна объектов?
В тему "ковырялок" соответствующей версии игры, для которой Вы задаёте вопрос.

И последнее: очень рекомендовано к прочтению Правила форума
 


  • Спасибо 1
  • Полезно 2
Ссылка на комментарий
https://www.amk-team.ru/forum/topic/6185-skriptovanie/

Выполнил функцию( Тч 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, поиск по исходникам сказал что нету, мб в другом виде если только.

 

@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 пользователей

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