Rozben 8 Опубликовано 24 Июня 2016 (изменено) Решил сделать нечто вроде "Общей сети", внешне все уже достаточно красиво, но вот есть косяк - после перезагрузки сообщения начинают приходить с первого в списке (После того как рандомизатор выдал мне три раза подряд одно и то же сообщение, хотя их было не два, не пять и не двадцать - больше, я решил выводить их подряд, чтобы исключить повторы.) В первоисточнике, а точнее в его обсуждении, говорилось, что эту проблему можно решить сохраняя значение переменной, отвечающей за номер сообщения в 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 Буду благодарен, если найдется помощь. Изменено 24 Июня 2016 пользователем Rozben Поделиться этим сообщением Ссылка на сообщение
Rozben 8 Опубликовано 25 Июня 2016 @naxac, Что ж, сработало, но частично:Игра вылетала на загрузке с логом Expression : !m_error_codeFunction : raii_guard::~raii_guardFile : D:\prog_repository\sources\trunk\xrServerEntities\script_storage.cppLine : 748Description : ....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 8 Опубликовано 29 Октября 2016 (изменено) @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 Изменено 29 Октября 2016 пользователем Rozben 1 Поделиться этим сообщением Ссылка на сообщение
Rozben 8 Опубликовано 17 Февраля 2017 @MegaStalker, Сделай с нуля. Муторно малехо, но реально. Если будет желание - я могу расписать подробнее. Поделиться этим сообщением Ссылка на сообщение
Rozben 8 Опубликовано 26 Августа 2017 Вопрос к знатокам скриптования. Вопрос может и глупый, но я человек, который в скриптах "шарит" на весьма скудном уровне. Есть такой скрипт, который позволяет переключать сетки с обычной на подсвеченную. Так вот то ли я уже того, и адаптировал его криво, то ли тот, кто его написал не предусмотрел тот факт, что при установке апгрейда на регулируемый прицел при уменьшении зума сетка удалится. Проблему нашел и решил. Но есть два способа, скажем так, "красивый" и "некрасивый". Собственно, вот "красивый": ... 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 8 Опубликовано 27 Июля 2018 (изменено) @WizziGun, задания меняют текст и цель справа налево, т.е. условия, текст и цель для начальной фазы задания должны быть справа, а условия для конечной - слева.Ммм, опоздал малехо, почему-то последней страницей показывало ту, где ответа не было. Изменено 27 Июля 2018 пользователем Rozben Ошибочка вышла. 1 Поделиться этим сообщением Ссылка на сообщение
Rozben 8 Опубликовано 15 Августа 2018 @fixx, можно. Такое можно было увидеть в NLC 7, например. Через тот же самый Повелитель Зоны можно менять скорость течения времени, потому можно покопаться в этом направлении. 1 Поделиться этим сообщением Ссылка на сообщение
Rozben 8 Опубликовано 15 Августа 2018 (изменено) @fixx, скрипты Повелителя стоит глянуть, найти и по аналогии прикрутить, допустим, к байндеру с проверкой текущей локации, на основе чего будет выбираться скорость течения времени. Ну или на локацях поставить рестрикторы с такой же логикой, если есть возможность и желание заменять all.spawn. Но со скоростью течения времени лучше быть аккуратнее, сильные отклонения от стандартной вроде бы могут негативно повлиять на игру. Изменено 15 Августа 2018 пользователем Rozben Исправил дубль обращения(ника) 1 1 Поделиться этим сообщением Ссылка на сообщение
Rozben 8 Опубликовано 15 Августа 2018 @fixx, рестрикторы могут срабатывать и без входа гг в него, в оригинале такие часто используются, один из таких, например, делает сейв при старте игры. Ну а спавн через скрипт - дело на любителя. До того, как я обзавелся СДК, я тоже этим увлекался - спавнил вещи, неписей, рестрикторы, аномалии, пока в один прекрасный момент многие скрипты игры случайно переставали работать при старте новой игры. Тут смотря на что скрипт вешать, конечно, но я решил, что пора делать это надежным и правильным, так сказать, способом. 2 Поделиться этим сообщением Ссылка на сообщение