Перейти к содержанию

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

 
 
9 часов назад, Pastalker56 сказал:

ui_mm_opt

ui_mm_opt_16.xml должен читать

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


Ссылка на сообщение
Поделиться на другие сайты
 

StrawFlux Эта функция выдаёт отношения между группировками.

Плюс можно получить отношение самой группировки конкретно к игроку:

local goodwill = relation_registry.community_goodwill ("dolg", db.actor:id ())

Но это только два слагаемых, из которых складывается отношение конкретного нпс к актеру. Получить же полное значение (как было в случае с клиентским объектом), я так понял, не возможно. Но спасибо и на этом.

  • Жму руку 1

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


Ссылка на сообщение
Поделиться на другие сайты
 
2 часа назад, av661194 сказал:

Получить же полное значение (как было в случае с клиентским объектом), я так понял, не возможно

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

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


Ссылка на сообщение
Поделиться на другие сайты
 

del


Дополнено 9 минуты спустя

av661194 Если говорить о прям оригинальном ТЧ без движковых изменений, то не знаю, может и есть способ. Но в оригинальном движке есть методы, позволяющие узнать и изменить отношение НПС к игроку или другому НПС вне зависимости, НПС в офлайне или в онлайне. Эти методы просто не экспортированы, чтобы их можно было использовать из скриптов. Если вы не против внесения изменений в движок, то это очень легко сделать. Я ради интереса попробовал и сделал на основе движка огср, вроде в сети были исходники и оригинального движка, по идее и на нём должно работать. Там буквально внести изменения в один файл и собрать движок.

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

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


Ссылка на сообщение
Поделиться на другие сайты
 

CiberZold Я тоже думал про нет-пакет. Только (в отличие от  character_name, money и т.д.) напрямую эти данные там не записываются. Если распечатать нет-пакет, то в конце будет куча значений типа u8, u16 - как показали эксперименты,  там это всё и лежит. Вот только в расшифровке этого салата возникают очень большие (а, может, и непреодолимые) трудности.

Gnomi123 Да, хотелось реализовать на оригинальном движке. Но, видимо, не судьба - придётся вносить правки в xrGame. У меня есть установленная 2013 студия, оригинальные движки на ней собираются без проблем. Буду признателен, если подскажете, как экспортировать в скрипты эти методы.

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


Ссылка на сообщение
Поделиться на другие сайты
 
27 минут назад, av661194 сказал:

CiberZold Я тоже думал про нет-пакет. Только (в отличие от  character_name, money и т.д.) напрямую эти данные там не записываются. Если распечатать нет-пакет, то в конце будет куча значений типа u8, u16 - как показали эксперименты,  там это всё и лежит. Вот только в расшифровке этого салата возникают очень большие (а, может, и непреодолимые) трудности.

Проще функцию вывести в движке.

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


Ссылка на сообщение
Поделиться на другие сайты
 

народ, такой вопрос

Спойлер

[smart_terrain]
type = general_lager
capacity = 4
communities = stalker
cond = {=is_day}
stay = medium
groups = 1

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

в логиках респавнов встречал вот такую строку: conditions = {+yan_find_scientist_done} 100, 0. Я так понял числа 100, 0 это вероятность срабатывания респавна. Применим ли данный параметр к гулагам?

 

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

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


Ссылка на сообщение
Поделиться на другие сайты
 

av661194 
Так, нужен файл level_script.cpp
Нужно найти:

void g_change_community_goodwill(LPCSTR _community, int _entity_id, int val)
{
	 CHARACTER_COMMUNITY	c;
	 c.set					(_community);
	RELATION_REGISTRY().ChangeCommunityGoodwill(c.index(), u16(_entity_id), val);
}

После этой функции вставить так:

void g_change_community_goodwill(LPCSTR _community, int _entity_id, int val)
{
	 CHARACTER_COMMUNITY	c;
	 c.set					(_community);
	RELATION_REGISTRY().ChangeCommunityGoodwill(c.index(), u16(_entity_id), val);
}

int g_get_personal_goodwill(int _who_id, int _to_whom_id) { return RELATION_REGISTRY().GetGoodwill(u16(_who_id), u16(_to_whom_id)); }
void g_set_personal_goodwill(int _who_id, int _to_whom_id, int _amount) { RELATION_REGISTRY().SetGoodwill(u16(_who_id), u16(_to_whom_id), _amount); }
void g_change_personal_goodwill(int _who_id, int _to_whom_id, int _amount)
{
	CHARACTER_GOODWILL gw = RELATION_REGISTRY().GetGoodwill(u16(_who_id), u16(_to_whom_id));
	RELATION_REGISTRY().SetGoodwill(u16(_who_id), u16(_to_whom_id), gw + _amount);
}

Это сами функции. get возвращает числовое значение личного отношения, set позволяет установить числовое значение личного отношения, change изменить на _amount.
Потом нужно экспортировать эти функции для использования в скриптах.
Находим:
 

module(L,"relation_registry")
	[
		def("community_goodwill",				&g_community_goodwill),
		def("set_community_goodwill",			&g_set_community_goodwill),
		def("change_community_goodwill",		&g_change_community_goodwill)
	];

Добавляем наши функции:
 

module(L,"relation_registry")
	[
		def("community_goodwill",				&g_community_goodwill),
		def("set_community_goodwill",			&g_set_community_goodwill),
		def("change_community_goodwill",		&g_change_community_goodwill),
		def("get_personal_goodwill", &g_get_personal_goodwill),
		def("set_personal_goodwill", &g_set_personal_goodwill),
		def("change_personal_goodwill", &g_change_personal_goodwill)
	];

Собираем движок.
Теперь можно вызывать эти функции через

relation_registry.get_personal_goodwill (who, to_who)
relation_registry.set_personal_goodwill (who, to_who, number)
relation_registry.change_personal_goodwill (who, to_who, number)
Должно работать.

Изменено пользователем Gnomi123
  • Жму руку 1
  • Спасибо 1

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


Ссылка на сообщение
Поделиться на другие сайты
 

@Gnomi123, мне было лень разжёвыввать такую очевидную херню. 😁

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


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

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

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу