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

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


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

Решил сделать нечто вроде "Общей сети", внешне все уже достаточно красиво, но вот есть косяк - после перезагрузки сообщения начинают приходить с первого в списке (После того как рандомизатор выдал мне три раза подряд одно и то же сообщение, хотя их было не два, не пять и не двадцать - больше, я решил выводить их подряд, чтобы исключить повторы.)

post-39354-0-58720400-1466786928_thumb.png



В первоисточнике, а точнее в его обсуждении, говорилось, что эту проблему можно решить сохраняя значение переменной, отвечающей за номер сообщения в pstor, однако все мои попытки провернуть это с найденными в файлах xr_s.script и xr_logic.script скриптами ничего не вышло. Я думаю, что забрел не в ту степь, потому и выкладывать свои попытки не буду.

Вот сам скрипт этого дела:

 

-- Динамические сообщения
local news ={
"%c[255,249,223,206]Вова Тихий:%c[default] \\nВидел кровососа у заправки в Темной Долине. Осторожнее там.",
"%c[255,249,223,206]Погиб сталкер:%c[default] Семецкий. Радар, контролер.",
"%c[255,249,223,206]Нахрап:%c[default] \\nИщу напарника для рейда. Обращаться в Баре к Нахрапу",
"%c[255,249,223,206]Источник неизвестен%c[default] \\nСлыхал кто о Стрелке? Одни говорят пропал он без вести, другие - что ушел из Зоны...",
"%c[255,249,223,206]Погиб сталкер:%c[default] Серега Танкист. Тихая долина, химера",
"%c[255,249,223,206]Погиб сталкер:%c[default] Шеф. Лиманск, паяльник.",
"%c[255,249,223,206]Антон Карась%c[default] \\nВоенных заметил в Темной Лощине, что-то они там мутят.",
"%c[255,249,223,206]Челнок%c[default] \\nГоворят, в Тихую Долину тропку безопасную нашли. Однако знайте - в Тихой долине мутантов полно. Это только на первый взгляд она тихая.",
"%c[255,249,223,206]Глеб Короткий%c[default] \\nНашел странный труп, одет в черный комбинезон, на лице серый противогаз. Из вещей только пистолет и патроны, да и те странные какие-то.",
"%c[255,249,223,206]Погиб сталкер:%c[default] Семецкий. Припять, Жарка.",
"%c[255,249,223,206]Источник неизвестен%c[default] \\nДолго я думал по поводу Долга и Свободы. И понял кое-что: бессмысленно они грызутся. Потому никому не советую становиться черно-красным или зелено-синим...",
"%c[255,249,223,206]Васек Кентавр%c[default] \\nПродаю ствол! АКСУ, почти новый. Машинка - блеск! Цена вопроса - десять тысяч деревянных. Еще пару дней пробуду на Свалке в ангаре.",
"%c[255,249,223,206]Погиб сталкер:%c[default] Ванек Сахар. Теинай Долина, псевдогигант.",
"%c[255,249,223,206]Герман%c[default] \\nСталкеры! Если вам нужен заработок, подходите в Бункер ученых, что неподалеку от Янова. Предлагаем контракт. Зарплату выдаем наличными, медикаментами и приборами. Спешите, количество контрактников ограничено!",
"%c[255,249,223,206]Погиб сталкер:%c[default] Семецкий. Темная Лощина, пулевое ранение.",
"%c[255,249,223,206]Источник неизвестен%c[default] \\nЗнаете про местность под названием Отстойник? Я лично не знал, теперь спешу поделиться с вами, как нарыл информацию. Отстойник этот располагается севернее Темной Долины, попасть туда, говорят, можно только с Радара. Все остальные пути закрыты аномалиями и радиацией, не пройти. Кто-то даже говорит, что где-то там и находится Клондайк, но я в это не верю и вам не советую.",
"%c[255,249,223,206]Гена Шутник%c[default] \\nПришел к Сидоровичу артефакт продать, остался должен...",
"%c[255,249,223,206]Погиб сталкер:%c[default] Корма. Окрестности Юпитера, кабан.",
"%c[255,249,223,206]Арсений Чахлый%c[default] \\nПродаю СВД за пятдесят штук. Если кто хочет поторговать - ищите меня в Припяти, около Прачечной. Зовут меня Карл.",
"%c[255,249,223,206]Погиб сталкер:%c[default] Ваня Кекс. Агропром, пулевое ранение.",
"%c[255,249,223,206]Погиб сталкер:%c[default] Никита Подорожник. Кордон, Трамплин.",
"%c[255,249,223,206]Погиб сталкер:%c[default] Афанасий. Рыжий лес, пседогигант.",
"%c[255,249,223,206]Погиб сталкер:%c[default] Сашко Бублик. Свалка, слепые псы.",
"%c[255,249,223,206]Погиб сталкер:%c[default] Семецкий. Агропром, Холодец.",
"%c[255,249,223,206]Погиб сталкер:%c[default] Пушистый. Кордон, псевдоплоть.",
"%c[255,249,223,206]Погиб сталкер:%c[default] Андрюха Мутный. Янтарь, снорк.",
"%c[255,249,223,206]Погиб сталкер:%c[default] Никифор. Затон, полтергейст.",
"%c[255,249,223,206]Погиб сталкер:%c[default] Грига Админ. Болота, кровосос.",
"%c[255,249,223,206]Погиб сталкер:%c[default] Борт. Припять, Электра.",
"%c[255,249,223,206]Погиб сталкер:%c[default] Лоб. Затон, пулевое ранение.",
"%c[255,249,223,206]Погиб сталкер:%c[default] Броня. Армейские склады, химера.",
"%c[255,249,223,206]Погиб сталкер:%c[default] Влад Грузин. Дикая территория, Карусель.",
"%c[255,249,223,206]Цербер%c[default] \\nПродаю ОЦ-14. Цена - 20 тысяч. Обращаться к Церберу на Болотах."
}

local news_icons ={
"ui_iconsNpc_green_stalker_11",
"ui_iconsTotal_mil_freedom_rg6_task",
"ui_iconsTotal_grouping",
"ui_iconsTotal_grouping",
"ui_iconsTotal_mil_freedom_rg6_task",
"ui_iconsTotal_mil_freedom_rg6_task",
"ui_iconsTotal_grouping",
"ui_iconsTotal_grouping",
"ui_iconsTotal_grouping",
"ui_iconsTotal_mil_freedom_rg6_task",
"ui_iconsTotal_grouping",
"ui_iconsTotal_found_money",
"ui_iconsTotal_mil_freedom_rg6_task",
"ui_iconsTotal_grouping",
"ui_iconsTotal_mil_freedom_rg6_task",
"ui_iconsTotal_grouping",
"ui_iconsTotal_grouping",
"ui_iconsTotal_mil_freedom_rg6_task",
"ui_iconsTotal_found_money",
"ui_iconsTotal_mil_freedom_rg6_task",
"ui_iconsTotal_mil_freedom_rg6_task",
"ui_iconsTotal_mil_freedom_rg6_task",
"ui_iconsTotal_mil_freedom_rg6_task",
"ui_iconsTotal_mil_freedom_rg6_task",
"ui_iconsTotal_mil_freedom_rg6_task",
"ui_iconsTotal_mil_freedom_rg6_task",
"ui_iconsTotal_mil_freedom_rg6_task",
"ui_iconsTotal_mil_freedom_rg6_task",
"ui_iconsTotal_mil_freedom_rg6_task",
"ui_iconsTotal_mil_freedom_rg6_task",
"ui_iconsTotal_mil_freedom_rg6_task",
"ui_iconsTotal_mil_freedom_rg6_task",
"ui_iconsTotal_found_money"
}


time_news = 60

function time_update_spam()
local time = time_global()
if time_news < time then
time_news = time + 480000
dyn_mess.update_spam()
end
end

local i = 1
local actor = db.actor
local news_caption = "Общий канал"

function update_spam()
actor:give_game_news(news_caption, news[i], news_icons[i], 0, 10000)
xr_sound.set_sound_play(actor:id(), "pda_alarm")
i = i + 1
if i > #news then
i = 1
end
end 

 



Буду благодарен, если найдется помощь. :)

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

ROZBEN.gif

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

@Rozben, чтобы генератор псевдослучайных чисел нормально заработал, надо где-нибудь на загрузке вызвать math.randomseed(device():time_global())

Либо os.time()..

А чтобы не повторялось, можно сделать что-то вроде этого:

function update_spam()
  local t = {}
  for a=1, #news do
    if tmp[i] == nil then
      t[#t+1] = a
    end
  end
  if #t == 0 then
    t = news
    tmp = {}
  end
  local i = t[math.random(#t)]
  tmp[i] = true
  
  actor:give_game_news(news_caption, news[i], news_icons[i], 0, 10000)
  xr_sound.set_sound_play(actor:id(), "pda_alarm")
end
Изменено пользователем naxac
  • Спасибо 1

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

naxac.gif

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

@naxac

Что ж, сработало, но частично:
Игра вылетала на загрузке с логом

 

Expression : !m_error_code
Function : raii_guard::~raii_guard
File : D:\prog_repository\sources\trunk\xrServerEntities\script_storage.cpp
Line : 748
Description : ....e.r. - Çîâ Ïðèïÿòè\gamedata\scripts\dyn_mess.script:92: attempt to index global 'tmp' (a nil value)
function update_spam()

 

Пока методом научного тыка не добавил local tmp = {} сюда:

...
local t = {}
for a=1, #news do
...

Ну и сообщения все же повторяются, но не так часто:

 


Но это уже скорее от того, что сообщений всего 33 и около четверти сообщений игра уже отослала - будем увеличивать количество. Но по сути - все работает, благодарю.

ROZBEN.gif

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

Игра вылетала на загрузке

Пардон, писал в спешке. Выше функции надо добавить:

local tmp = {}

Это таблица для хранения индексов уже отправленных сообщений.

И в самой функции исправить:

for a=1, #news do

if tmp[a] == nil then

t[#t+1] = a

end

end

Изменено пользователем naxac
  • Спасибо 1

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

naxac.gif

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

@Rozben

Не нужно хранить сообщения и исконки в разных местах.
Во первых сложно сопоставлять какому сообщению соответствует какая иконка.
Во-вторых можешь добавишь новое сообщение и забыть добавить иконку (или наоборот)
 
Храни данные в одной таблице :
local news ={
    {"%c[255,249,223,206]Вова Тихий:%c[default] \\nВидел кровососа у заправки в Темной Долине. Осторожнее там.", "ui_iconsNpc_green_stalker_11"},
    и т.д.

Вот с таким вариантом сообщения не станут повторяться, пока не будут показаны все из таблицы news :

 


local start_rnd, end_rnd = 1, #news

function update_spam()
	local idx = math.random(start_rnd, end_rnd)
	local res = news[idx]
	news[start_rnd], news[idx] = news[idx], news[start_rnd]
	start_rnd = start_rnd==end_rnd and 1 or start_rnd + 1
	
	actor:give_game_news(news_caption, res[1], res[2], 0, 10000)
	xr_sound.set_sound_play(actor:id(), "pda_alarm")
end

 

 

Изменено пользователем Nazgool
  • Спасибо 1
Ссылка на комментарий

А что будет если поставить af_rank = 1, ну или af_rank = 2?


 
В секции соответствующего артефакта находим af_rank и меняем его значение на 0. Однако следует иметь ввиду, что после данной манипуляции он станет видимым изначально (находясь в аномалии), а не только при выбросе из инвентаря.

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

af_rank = 0 ; изначально видны без детекторов.

af_rank = 1 ; засвечиваются детектором "Отклик" и более совершенными моделями.

af_rank = 2 ; засвечиваются детектором "Медведь" и более совершенными моделями.

af_rank = 3 ; засвечиваются детектором "Велес" и его модификацией "Сварог".

  • Согласен 1
  • Полезно 1
Ссылка на комментарий

Jurok, когда-то обращался по поводу такой ситуации: ближе к концу путепровода отряд Дегтярёва атакует снорк, сидящий на трубах под потолком, но никто на него не реагирует (часто из-за этого кто-нибудь из отряда гибнет).

Подскажи, как исправить логику отряда в том месте?

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

 

 

но никто на него не реагирует

С AI Additions прекрасно реагируют. А вообще, в путепроводе, лично у меня команда бессмертная, так на всякий случай )

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

DarkSatellite, единственное, что могу посоветовать - это подкрутить combat_ignore_cond в configs\scripts\underpass\pas_b400_tunnel.ltx

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

Полтеры не подчиняются логике - улетают в рандомном направлении.

[smart_terrain];esc_polter_smart
squad_id = 6
max_population = 3
def_restr = esc_polter_smart_def_restr

[exclusive]
esc_polter_1 = escape\exclusives\esc_polters_logic.ltx
esc_polter_2 = escape\exclusives\esc_polters_logic.ltx
esc_polter_3 = escape\exclusives\esc_polters_logic.ltx

 

 

[logic@polters]
prior = 200
monster_job = true 

[mob_home@polters]
aggressive = true

[logic@esc_polter_1]:logic@polters
active = mob_home@esc_polter_1
suitable = {=is_monster_polter} true

[mob_home@esc_polter_1]:mob_home@polters
path_home = polter_home_walk_1
home_min_radius = 5
home_max_radius = 10

[logic@esc_polter_2]:logic@polters
active = mob_home@esc_polter_2
suitable = {=is_monster_polter} true

[mob_home@esc_polter_2]:mob_home@polters
path_home = polter_home_walk_2
home_min_radius = 5
home_max_radius = 10

[logic@esc_polter_3]:logic@polters
active = mob_home@esc_polter_3
suitable = {=is_monster_polter} true

[mob_home@esc_polter_3]:mob_home@polters
path_home = polter_home_walk_3
home_min_radius = 5
home_max_radius = 10

 

 

Я им и рестриктор в смарте указал. Не помогает. Из-за чего могут не поддаваться логике?

 

Ранее был известен под ником BoBaH_671.

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

Кто в курсе как в ЧН и ЗП можно правильно настроить пробиваемость преград? Есть ли у кого точные цифры пробития преград?

Вот допустим в ТЧ

k_pierce = коэффициент бронебойности.
; 1.1 - не пробивается забор и жесть.
; 1.12 - пробивается забор и застревает в первой стенке халупы.
; 1.15 - пробивается забор и застревает в первой стенке халупы.
; 1.2 - пробивается забор и застревает в первой стенке халупы.
; 1.25 - ствол толстого дерева не пробивается. пробивается забор и первая стенка, застревает во второй стенке халупы.
; 1.35 - ствол толстого дерева не пробивается.
; 1.4 - ствол толстого дерева не пробивается.
; 1.45 - ствол толстого дерева пробивается
; 1.5 - ствол толстого дерева пробивается
; бетон не пробивается никогда

А какие циферки ставить в ЗП?

Т.к если такие цифры поставить в ЗП, то даже ПМ будет пробивать бетонный забор.

Хотя в ТЧ бетонный забор не пробивается вообще, а вот в ЗП прошивается насквозь, за бетонным забором уже не спрячешься. 

Просто охота настроить по реалистичней как-то. Но не могу поймать цифру, чтоб была такая же реалистичность по пробитию как в ТЧ. 

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

@alex5773, по-моему, если даже были бы точные данные - объекты все равно нужно тестить на пробиваемость на тестовой карте.

Следовательно, не проще создать тестовую карту с объектами, и смотреть на ней уже, как-что-из чего пробивается.

Discord-сервер modfaq.ru: https://discord.gg/9j42BXwB

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

@warwer, у меня в скваде прописан target_smart, я немного не догоняю, что нужно сделать-то? Подробнее, пожалуйста. И это полтеры на 1 раз, так сказать, респавн мне не нужен.

Ранее был известен под ником BoBaH_671.

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

 

 

это полтеры на 1 раз, так сказать, респавн мне не нужен

 

тебе нужен стандартный квад монстров на один распавн. Создаёшь свою секцию в папке misc  squad_descr_....

Теперь нужно создать вызов распавна данной секции. Это делается в логике. Либо логике нпс, либо в логике уровня.

Если нужно очистить смарт от ненужных нпс: %=clear_smart_terrain(имя_смарта)%

Чтобы заспавнить: %=create_squad(твой_сквад : имя_смарта)%

 

Пример для логики нпс:

[remark@rac1]
anim = wait_rac
no_move = true
on_timer = 5000| walker@xodok %=create_squad(твой_сквад : имя_смарта)%

или on_info = {+инфо}  %=create_squad(твой_сквад : имя_смарта)%

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

 

 

%=create_squad(твой_сквад : имя_смарта)%

Так я и делаю. Через рестриктор. Вопрос заключается в том, почему они улетают за пределы установленных для них границ?

Ранее был известен под ником BoBaH_671.

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

Каких границ?

Полтергейстам пишешь логику mob_home

На точку path_home ставишь OUT рестриктор.

В логике прописываешь out_restr = имя_рестриктора

 

И никуда он за радиус рестриктора не улетит.

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

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

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

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

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

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

Войти

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

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

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