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

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


Halford

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

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

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

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


Ссылка на сообщение

@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

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


Ссылка на сообщение

@Hadzirim Hajad
Насколько я понимаю, не совпадают текущая версия all.spawn с версией all.spawn, при которой делалось сохранение

 

---

 

Был у меня один товарищ Журналист, коего я спавнил скриптом на Янов. Его логика висела на remark'е и no_move = true. Решил переделать, ибо не комильфо.

Выбрал ему место, поставил стульчик и анимпоинт в СДК.

Далее вписал его в смарт Янова - jup_a6.

[exclusive]
...
jup_jurnalist = jupiter\jup_a6_jurnalist.ltx
...

Потом переписал ему логику на боле-менее сносную (но похоже, что нет)

[logic@jup_jurnalist]
suitable = {=check_npc_name(jup_jurnalist)} true
active = animpoint@base
prior = 100

[animpoint@base]
cover_name = jup_a6_animp_jurnalist
avail_animations = animpoint_sit_normal
out_restr = jup_a6_sr_noweap
invulnerable = true 
meet = default_meet
combat_ignore_cond = true 
combat_ignore_keep_when_attacked = true
gather_items_enabled = false
help_wounded_enabled = false
corpse_detection_enabled = false

Вписал в simulation.ltx

;;;;;;;;;;;;;;;;;;;;;; FINAL JUPITER ;;;;;;;;;;;;;;;;;;;;;;;;;

[start_position_jupiter]
...
jup_a6_jurnalist_squad = jup_a6
...

Записал его и в simulation_objects_props.ltx

[jup_a6_jurnalist_squad]:default_squad
sim_avail = false

В итоге данный товарищ предпочитает созданному лично для него анимпоинту (jup_a6_animp_jurnalist) другие - у кровати jup_a6_animp_16 и у ящиков jup_a6_animp_17, когда первый занят. Пока что логика (по крайней мере НПС) для меня - темный лес, но полагаю, что она его под необходимый контроль не берет. Не подскажет кто, в чем может быть проблема?


P.S.: Дырявая моя голова, сквад есть, если что:
 

[jup_a6_jurnalist_squad]:online_offline_group
faction = stalker
npc = jup_jurnalist
target_smart = jup_a6
spawn_point = jup_a6_spawn_point
story_id = jup_a6_jurnalist_squad
Изменено пользователем Rozben
  • Полезно 1

ROZBEN.gif

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


Ссылка на сообщение

@MegaStalker

Сделай с нуля. Муторно малехо, но реально.

Если будет желание - я могу расписать подробнее.

ROZBEN.gif

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


Ссылка на сообщение

Вопрос к знатокам скриптования. Вопрос может и глупый, но я человек, который в скриптах "шарит" на весьма скудном уровне.
Есть такой скрипт, который позволяет переключать сетки с обычной на подсвеченную. Так вот то ли я уже того, и адаптировал его криво, то ли тот, кто его написал не предусмотрел тот факт, что при установке апгрейда на регулируемый прицел при уменьшении зума сетка удалится. Проблему нашел и решил. Но есть два способа, скажем так, "красивый" и "некрасивый".
Собственно, вот "красивый":

...
local flag_remove = true
...
if fov_now >= 15 and fov_now <= 50 then -- проверяем текущий FOV при прицеливании на входение в приблизительные границы FOV для любых кратностей регулируемого прицела
	flag_remove = false -- запрещаем удаление в границах FOV [15;50]
else
	flag_remove = true -- разрешаем удаление, так как текущий FOV не в границах [15;50], т.е. вне прицеливания
end
if flag_remove then -- проверяем, можно ли удалять сетку
-- Здесь удаляем
end
...

А вот "некрасивый":

...
if fov_now >= 15 and fov_now <= 50 then -- проверяем текущий FOV при прицеливании на входение в приблизительные границы FOV для любых кратностей регулируемого прицела, если да - не удалем
else -- в противном случае - удаляем
-- Здесь удаляем
end
...

Оба работают. Второй вариант короче, но меня несколько смущает то, что при соблюдении условия скрипт ничего не делает. Хоть подобное я видел в скриптах от GSC (и у разработчиков иногда были некорректные решения), все же спрошу. Как все-таки будет лучше с точки зрения правильности написания скрипта?

  • Полезно 1

ROZBEN.gif

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


Ссылка на сообщение

@WizziGun, задания меняют текст и цель справа налево, т.е. условия, текст и цель для начальной фазы задания должны быть справа, а условия для конечной - слева.

Ммм, опоздал малехо, почему-то последней страницей показывало ту, где ответа не было.

 

Изменено пользователем Rozben
Ошибочка вышла.
  • Нравится 1

ROZBEN.gif

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


Ссылка на сообщение

@fixx, можно. Такое можно было увидеть в NLC 7, например.

Через тот же самый Повелитель Зоны можно менять скорость течения времени, потому можно покопаться в этом направлении.

  • Нравится 1

ROZBEN.gif

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


Ссылка на сообщение

@fixx, скрипты Повелителя стоит глянуть, найти и по аналогии прикрутить, допустим, к байндеру с проверкой текущей локации, на основе чего будет выбираться скорость течения времени. Ну или на локацях поставить рестрикторы с такой же логикой, если есть возможность и желание заменять all.spawn.

Но со скоростью течения времени лучше быть аккуратнее, сильные отклонения от стандартной вроде бы могут негативно повлиять на игру.

Изменено пользователем Rozben
Исправил дубль обращения(ника)
  • Спасибо 1
  • Согласен 1

ROZBEN.gif

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


Ссылка на сообщение

@fixx, рестрикторы могут срабатывать и без входа гг в него, в оригинале такие часто используются, один из таких, например, делает сейв при старте игры.

Ну а спавн через скрипт - дело на любителя. До того, как я обзавелся СДК, я тоже этим увлекался - спавнил вещи, неписей, рестрикторы, аномалии, пока в один прекрасный момент многие скрипты игры случайно переставали работать при старте новой игры. Тут смотря на что скрипт вешать, конечно, но я решил, что пора делать это надежным и правильным, так сказать, способом.

  • Согласен 2

ROZBEN.gif

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


Ссылка на сообщение
  • Недавно просматривали   0 пользователей

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