Artos 99 Опубликовано 8 Ноября 2011 Поделиться Опубликовано 8 Ноября 2011 (изменено) AndreySol pstor - можно трактовать как Personal Storage, т.е. некое 'хранилище' конкретного объекта в игре. В нем можно хранить что угодно, как и в других таблицах, но(!) запоминаться будут только строковые, числовые или булевы значения (при иных -> fatal error). При создании сэйва, для каждого объекта (если забинден) вызывается алгоритм сохранения его pstor'а (см. в xr_logic.script), и все значения запоминаются в создаваемом сэйве. При запуске сэйва - из него биндером объекта вновь вызывается алгоритм считывания в pstor конкретного объекта сохраненых ранее значений. Т.о. то, что сохранено в pstor'е - хранится на всем протяжении игры (естественно, если объект в игре). Размер сохраняемого pstor НЕ дожен превышать ~8000 байт. Настоятельно рекомендую почитать статьи на вики-сайтах, дабы не задавать вопросов, которые давным давно расписаны ... Тут все же не топик по персональному репетиторству, захотелось заняться моддингом - самостоятельное чтение статей и разбор практических скриптов в исходных играх и модах лучшее подспорье! Изменено 9 Ноября 2011 пользователем Artos "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
Dreamtale 2 Опубликовано 9 Ноября 2011 Поделиться Опубликовано 9 Ноября 2011 (изменено) Опять наскриптовался по самое небалуйся... В общем, задача: сделать лагерь охранников ученых у бункера на Янтаре. [4725] ; cse_abstract properties section_name = smart_terrain name = scientist_guard position = 48.12174987793,-11.88060092926,-271.53497314453 direction = 0,0,0 game_vertex_id = 1480 level_vertex_id = 63987 distance = 0 object_flags = 0xffffff3e custom_data = <<END [smart_terrain] type = scientist_guard capacity = 5 communities = ecolog groups = 2 END ; cse_shape properties shapes = shape0 shape0:type = sphere shape0:offset = 0,0,0 shape0:radius = 6.5 ; cse_alife_space_restrictor properties restrictor_type = 3 ; se_smart_terrain properties ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; [4726] ; cse_abstract properties section_name = respawn name = scientist_guard_respawn position = 50.741165161133,-11.879903793335,-272.93768310547 direction = 0,0,0 game_vertex_id = 1480 level_vertex_id = 65146 distance = 0 object_flags = 0xffffff3e custom_data = <<END [respawn] respawn_section = scientist_guard_1, scientist_guard_2, scientist_guard_3, scientist_guard_4, scientist_guard_5 max_spawn = 999 min_count = 5 max_count = 5 idle_spawn = medium END ; cse_shape properties shapes = shape0 shape0:type = sphere shape0:offset = 0,0,0 shape0:radius = 5 ; cse_alife_space_restrictor properties restrictor_type = 0 ; se_respawn properties function load_states(gname, type) if type == "scientist_guard" then return function(gulag) return 0 end end end function load_ltx(gname, type) return nil end function checkStalker(npc_community, gulag_type, npc_rank, se_obj) if gulag_type == "scientist_guard" then return npc_community == "ecolog" end end local t = {} function load_job(sj, gname, type, squad, groups) if type == "scientist_guard" then t = { section = "logic@scientist_guard_walk_1", idle = 0, prior = 20, state = {0}, -- online = true, in_rest = "", out_rest = "", position_threshold = 600 } table.insert(sj, t) t = { section = "logic@scientist_guard_walk_2", idle = 0, prior = 20, state = {0}, -- online = true, in_rest = "", out_rest = "", position_threshold = 600 } table.insert(sj, t) t = { section = "logic@scientist_guard_patrol_l", idle = 0, prior = 15, state = {0}, -- online = true, in_rest = "", out_rest = "", position_threshold = 600 } table.insert(sj, t) t = { section = "logic@scientist_guard_camp_1", idle = 0, prior = 15, state = {0}, -- online = true, in_rest = "", out_rest = "", position_threshold = 600 } table.insert(sj, t) t = { section = "logic@scientist_guard_camp_2", idle = 0, prior = 5, state = {0}, -- online = true, in_rest = "", out_rest = "", position_threshold = 600 } table.insert(sj, t) end end function checkMonster(npc_community, gulag_type) return false end [logic@scientist_guard_walk_1] active = walker@scientist_guard_walk_1 [walker@scientist_guard_walk_1] path_walk = walk_1_walk path_look = walk_1_look danger = danger_condition@scientist_guard [logic@scientist_guard_walk_2] active = walker@scientist_guard_walk_2 [walker@scientist_guard_walk_2] path_walk = walk_2_walk path_look = walk_2_look danger = danger_condition@scientist_guard [logic@scientist_guard_patrol_l] active = walker@scientist_guard_patrol_l [walker@scientist_guard_patrol_l] path_walk = patrol_l_walk path_look = patrol_l_look danger = danger_condition@scientist_guard [logic@scientist_guard_camp_1] active = kamp@scientist_guard_camp_1 [kamp@scientist_guard_camp_1] center_point = camp_1_centr danger = danger_condition@scientist_guard [logic@scientist_guard_camp_2] active = kamp@scientist_guard_camp_2 [kamp@scientist_guard_camp_2] center_point = camp_2_centr danger = danger_condition@scientist_guard [danger_condition@scientist_guard] ignore_distance = 0 ignore_distance_corpse = 0 Дело в том, что неписи не спавнятся вообще (точнее, одно время спавнился один вместо пяти, но потом и он почему-то перестал, и под гулаг он не попадал, хотя по всем понятием должен был). Первая проблема - это сам респавн (в конце концов, если они вообще будут, то под гулаг их вписать проще, чем если и вписывать некого). В принципе, разумею, что копать стоит в сторону se_respawn, но там вроде в максимальном количестве прибавил экологов, да и, допустим, снорки спавнятся отлично (а вот нпс - не хотят)... Изменено 10 Ноября 2011 пользователем Artos Ссылка на комментарий
Artos 99 Опубликовано 10 Ноября 2011 Поделиться Опубликовано 10 Ноября 2011 (изменено) Dreamtale 1. Если постишь коды - старайся из отформатировать так, чтобы другим читать было удобно. Излишки/недостатки пробелов и пр. только убивают желание вникать в код ... Для скриптов - искользуй тэги кодов, дабы не сбивалось исходное форматирование. 2. Совершенно неразумно ставить max_spawn = 999 при 100% выборе одной из секций для спавна. Если секция не будет заспавнена в данное времы срабатывания респавнера, то пытаться тысячу раз заспавнить - глупое расходование ресурсов в игре ... При твоем задании для секций спавна (probe = 100% для каждой) достаточно установить max_spawn = 5 (т.е. max_count). Да и это излишне, т.к. min_count = 5 - задает респавнеру однозначную задачу заспавнить в обязательном порядке 5 объектов и дальнейшие манипуляции с max_spawn по сути бессмысленны, т.к. если не выполнен 'срочный' доспавн, то и далее недоспавнится, а если выполнен - то кол-во уже достигло заданного. 3. Судя по твоей фразе, что ранее один спавнился, а теперь и этого не происходит - можно предположить, что твой гулаг НЕ работает (не раздает работы), а других работ в Зоне для твоих ученых маловато (для одного как-то нашлась работенка). Выводи в лог информацию о том: - работает ли твой гулаг (т.е. создаются ли работы); - запрашивают ли твои ученые работу у этого гулага; - не удаляет ли респавнер твоих заспавненных неписей по причине нехватки рабочих мест. Что-то более определенное по кускам твоих кодов предположить затруднительно ... Изменено 10 Ноября 2011 пользователем Artos "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
Dreamtale 2 Опубликовано 10 Ноября 2011 Поделиться Опубликовано 10 Ноября 2011 Artos, Выводи в лог информацию... Отлично, но как? Ссылка на комментарий
Artos 99 Опубликовано 10 Ноября 2011 Поделиться Опубликовано 10 Ноября 2011 (изменено) Dreamtale А вот как выводить в лог нужную тебе информацию потрудись сам посмотреть и в кодах почти любого мода и в этом топике. Тут даже давал коды универсального вывода в лог-файл практически любой информации (т.е. даже nil'ов) ... Программист/модмейкер, пишуший код 'вслепую' - гений или ламер, ИМХО. P.S. См. тут. Остается только вставить в свои коды (или в _g.script) и в нужном месте кодов вставлять строки типа: printf ( "Это вывод в лог информации: %s", my_info ) Изменено 10 Ноября 2011 пользователем Artos "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
Dreamtale 2 Опубликовано 10 Ноября 2011 Поделиться Опубликовано 10 Ноября 2011 Ок, вот такое: ! Cannot find saved game :>respawn: [scientist_guard_respawn] spawn execute ! Cannot find saved game :>spawning [scientist_guard_respawn], cant spawn. max count reached!!! Странно, вроде бы в MaxCount поставил экологов всех рангов по сотне, а все равно... Если вы в своем собственном коде не можете найти таких ключевых точек, по которым можно локализовать возникающие проблемы, то - ответ дан выше. своем собственном Собственном - конечно... Ссылка на комментарий
Artos 99 Опубликовано 10 Ноября 2011 Поделиться Опубликовано 10 Ноября 2011 (изменено) Dreamtale 1. Моддинг - это в первую очередь работа СВОЕЮ головой, а уже потом идеи/концепты/сценарии/ , чтение мануалов и туторов, кодинг и пр. Если своя голова не задействована и все основано на 'копипасте' и гуглах - лучше не отнимать у себя же время и не морочить головы другим. 2. Разъяснять как заменить одну функцию другой - не собираюсь (это азы даже не программирования). То, что вставить коды указанные по ссылке можно куда потребно - указал выше. Даже указал конкретное место (_g.script), куда же еще понятнее растолковывать? 3. О том куда вставлять свои выводы в лог: а) В котрый раз даю понять, что не имея ТВОИХ скриптов варианта, только два говорить о неких исходных из игры и быть готовым к очередному "А у меня номера строк другие ...!" или же б) заниматься общей теорией ... по виртуальным скриптам. б) Включаем голову и думаем: - "работает ли твой гулаг (т.е. создаются ли работы);" Где создаются работы твоего гулага? Да в тобою же написанной в некоем скрипте function load_job -> if type == "scientist_guard" then. Остается в конец условия добавить вывод или просто сообщения, что функция была вызвана и завершила свою работу или даже более информативно, т.е. кол-во работ иль пр. или распечатать эту табличку работ. - "запрашивают ли твои ученые работу у этого гулага;" Тоже несложно самому догадаться, что в написанной тобою же function checkStalker идет проверка для тобою созданого гулага при запросе работ. Перед return всего лишь вставить вывод в лог о том, что проверка сталкера для данного гулага была проведена. - "не удаляет ли респавнер твоих заспавненных неписей по причине нехватки рабочих мест" Это уже скрипт респавнера, который у кахдого может быть "своим", т.е. модифицированным, но в этом скрипте легко увидеть корневую функцию function spawn, в которой и спавнится объект. Вставив в начало инфо-строку о спавнящемся объекте - можно получить общую информацию о респавне, в том числе и о "спавнятся ли мои неписи?". Если вставить перед строкою удаления объектов - то получить инфу о всех "неподходящих объектах" ... Далее - включай свою думалку и не жди, что тебе разжевывать будут как получить имя/секцию объекта для вывода в лог иль подобное ... Приводя в постах свои строки из лога - не думай, что они понятны другим в отрыве от контекста ... Изменено 10 Ноября 2011 пользователем Artos "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
Dreamtale 2 Опубликовано 10 Ноября 2011 Поделиться Опубликовано 10 Ноября 2011 (изменено) Artos, Спасибо, теперь понял. Вот видишь, как все просто - достаточно пары предложений, чтобы найти общий язык. Так же куда проще и, главное, быстрее, чем писать полотна обличительных душеспасительных постов, правда? А что мне лог выдал - выше в моем посте. Добавлено: Лог: ! Cannot find saved game :>respawn: [scientist_guard_respawn] spawn execute ! Cannot find saved game :>spawning [scientist_guard_respawn], cant spawn. max count reached!!! Вытекает отсюда: for i=1,self.max_spawn do if self.max_count ~= -1 and table.getn(self.spawned_obj) >= self.max_count then printf("SPAWNING [%s], CANT SPAWN. MAX COUNT REACHED!!!", tostring(self:name())) return end Короче, стандартный крипт АМК. Изменено 10 Ноября 2011 пользователем Artos Ссылка на комментарий
Artos 99 Опубликовано 10 Ноября 2011 Поделиться Опубликовано 10 Ноября 2011 (изменено) Dreamtale: Так же куда проще и, главное, быстрее, чем писать полотна обличительных душеспасительных постов, правда? НЕТ, не правда. а) не будь я куратором топика - давно бы тебя в игнор поставил ... б) не будь и у других "страждующих невеж" (как себя же сами позиционируют) аналогичных потуг заполучить побыстрому персональное репетиторство - не писал бы "портянок". Большинство мною написанное - НЕ только к тебе адресовано, но и ... в назидание ... Ну а по логу: Наконец прозвучали слова о версии мода/скрипта Лог говорит, что кол-во заспавненных объектов данным респавнером уже достигло максимума (вероятно в выше сделанном 'срочном' спавне по минималу, о чем и говорил). Ну а где они - ищи ... Ставь метки при их спавне иль ищи в Зоне по именам ... Вполне возможно, что заспавнившись убежали на работу на другие локации иль в оффлайне отсиживаются. Респавн в кодах АМК довольно строгий, не "своих" в Зону гулять не пущает. Изменено 10 Ноября 2011 пользователем Artos "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
_Призрак_ 11 Опубликовано 10 Ноября 2011 Поделиться Опубликовано 10 Ноября 2011 Прошу помощи. Пытаюсь запустить партикл. Партикл 100% должен работать бесконечно. Запускаю таким образом: local particle = particles_object("mel_test\\test_no_time") particle:play_at_pos(db.actor:position()) Однако партикл исчезает через несколько секунд. Где я ошибся? Freedom Ссылка на комментарий
Zona 0 Опубликовано 10 Ноября 2011 Поделиться Опубликовано 10 Ноября 2011 Народ,подскажите пожалуйста,где найти статьюшку - как заспавнить НПС через all.spawn... :ny_rolleyes: Ссылка на комментарий
Nazgool 250 Опубликовано 10 Ноября 2011 Поделиться Опубликовано 10 Ноября 2011 Zona Например вот... Ссылка на комментарий
S.T.A.L.K.E.R-DOLG 1 Опубликовано 12 Ноября 2011 Поделиться Опубликовано 12 Ноября 2011 (изменено) как открыть этот all.spawn Читаем топик: "Universal ACDC и другие perl-скрипты Более подробно см. в статье "All.spawn" на вики-сайте из шапки топика --/ Artos Изменено 12 Ноября 2011 пользователем Artos Пункт 3. Ссылка на комментарий
ColR_iT 171 Опубликовано 12 Ноября 2011 Поделиться Опубликовано 12 Ноября 2011 Строгое предупреждение от модератора ColR_iT Вечер добрый, Дамы и Господа! Я смотрю меня тут ждали... Ну что же, дядяСаша... Опишу еще раз то, что тебе все хором сказали: Если ты чего-то не понимаешь - это не значит, что это бред! Можно было бы и задуматься над тем, что для других статьи на Wiki, почему-то не кажутся "рисовкой", как ты сумел выразиться, а для тебя это оказалось пустой писаниной. Ответ на этот вопрос прост - ты пытаешься прыгнуть выше своей головы! Многие собственноручно заползали на эту высоту и никому не показалось, что статьи от создателей игры, как то вяло реализуют их идеи. То что там написано это всего лишь инструмент для реализации твоих идей, если конечно ты сумеешь воспользоваться данным инструментом... По поводу твоего варианта массовки: если ты считаешь эти "танцы с бубном" "примитивным" вариантом, то ты в принципе не умеешь задаваться целью ставить вопрос, а следовательно и задачу, - правильно! Вот исходя из этого делай выводы, если, опять же таки, ты их правильно сделаешь... Правда делать это тебе придется наедине... надеюсь дней пяти будет достаточно. Ссылка на комментарий
Лёха_тц 3 Опубликовано 12 Ноября 2011 Поделиться Опубликовано 12 Ноября 2011 Ребята выручайте подскажите пожалуйста как спавнить статические объекты типа вышек вагонов итд. В заранее спасибо. Ссылка на комментарий
ColR_iT 171 Опубликовано 12 Ноября 2011 Поделиться Опубликовано 12 Ноября 2011 Лёха_тц, в принципе так же как и остальные, вот только наличие 20 и более таких массивных объектов на одной локации, может привести к заметным лагам. При всём этом, есть большие минусы, один из которых - пользование этих объектов НПС, они не будут на них заходить (в случае с вышкой), поскольку на них отсутствует АИ сетка. Также, обязательным условием спавна, является наличие в модели хотя бы одной кости (подозреваю, что ты используешь сталкер_контент для СДК). Ссылка на комментарий
Лёха_тц 3 Опубликовано 12 Ноября 2011 Поделиться Опубликовано 12 Ноября 2011 (изменено) ColR_iT а мне много не нужно да и при этом их использование мне тоже не особо нужно. Но проблема в том что я не знаю как должна выглядеть функция спавна не подскажешь как она должна выглядеть не например для спавны той же самой вышки. Спустя некоторое время... а через ал спавн нельзя ? Изменено 12 Ноября 2011 пользователем ColR_iT Ссылка на комментарий
ColR_iT 171 Опубликовано 12 Ноября 2011 Поделиться Опубликовано 12 Ноября 2011 (изменено) Лёха_тц, собственно у ПЫС это функция create, вот ее описание: create(string <имя секции объекта>, vector* position, int level_vertex_id, int game_vertex_id, int parent_id) подробнее о скриптовом спавне можешь прочитать здесь: http://www.stalkerin.gameru.net/wiki/index...вн_через_скрипт Чтобы заспавнить вышку, тебе нужно убедится, что у твоей модели существует кость, ну и по аналогии, хотя бы с тем же ПДА, сделать для данной модели секцию, благодаря которой ты сможешь заспавнить ее. Можно и через all.spawn. Берешь секцию любого физического объекта и меняешь путь модели на свой. Изменено 12 Ноября 2011 пользователем ColR_iT Ссылка на комментарий
Лёха_тц 3 Опубликовано 12 Ноября 2011 Поделиться Опубликовано 12 Ноября 2011 Просто вещи лучше спавнить через скрипт но только те которые идут для квестов остальные не очень удобно ну по крайней мере это мое мнение. Ссылка на комментарий
Artos 99 Опубликовано 12 Ноября 2011 Поделиться Опубликовано 12 Ноября 2011 (изменено) Немного дополню ответ по спавну: Помимо собственно спавна скриптом объекта, для некоторых моделей/типов объектов требуется дополнительно нет-пакетами подправить дефолтные параметры заспавненного объекта. Напримет для вертолетов это анимация и звуки, для визуальных аномалий - анимация и т.п. Для физ.объектов - 'fixed_bones' важен. Если же спавнить через all.spawn, то все нужные параметры прописываются сразу в секцию спавна объекта, главное правильно определить класс своего объекта и особенности модели для него (т.е. значения требуемых параметров). Ну а какой способ удобнее (скриптовой иль через all.spawn) - это и субъективно и от требуемой задачи зависит, по всем своим возможностям они (способы спавна) практически равнозначны. Изменено 12 Ноября 2011 пользователем Artos "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти