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

[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, чтобы генератор псевдослучайных чисел нормально заработал, надо где-нибудь на загрузке вызвать 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

@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 и около четверти сообщений игра уже отослала - будем увеличивать количество. Но по сути - все работает, благодарю.

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

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

local tmp = {}

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

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

for a=1, #news do

if tmp[a] == nil then

t[#t+1] = a

end

end

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

@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

Space.Marine, не, я играю честно  :rolleyes:

Jurok, посмотрю... Спасибо.

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

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

[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

 

 

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

 

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

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

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

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

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

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

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

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

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

@BoBaH_671, а почему их нужно удерживать логикой? Просто не достаточно указать нужный смарт как цель в распавнере?

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

 

 

это полтеры на 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(твой_сквад : имя_смарта)%

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

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

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

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

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

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

 

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

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

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

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

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

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

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

Войти

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

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

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