strelok200 0 Опубликовано 22 Февраля 2012 Поделиться Опубликовано 22 Февраля 2012 ColR_iT, А зачем нужны game vertex и level vertex в лук поинтах? [start_6look] points = p0 p0:name = wp00 p0:flags = 0x1 p0:position = -1.03979444503784,8.50889873504639,-135.781280517578 p0:game_vertex_id = 3646 p0:level_vertex_id = 356302 А из-за этого не могут быть проблемы с сейвами? Так все нормально нет вылетов, но сейвы бьются постоянно Создаю глобальный мод с новыми локациямЭ Ссылка на комментарий
Daniar299 0 Опубликовано 22 Февраля 2012 Поделиться Опубликовано 22 Февраля 2012 Здрасте, у меня вопрос как заспанить Монстра через скрипт? Кол-во не имеет значение, но если можно то лучше через алл. Плиз с примером на кордоне! Ссылка на комментарий
Boofer 0 Опубликовано 22 Февраля 2012 Поделиться Опубликовано 22 Февраля 2012 (изменено) Из за чего может быть такая проблема? Заспавнил мутанта и задал ему логику направится в определённую точку. Но вместо того чтобы двигаться к точке, мутант тупо стоит на месте с анимацией бега. Добавлено через 8 мин.: Вот что я действительно упустил, забыл сказать важную вещь - мутант спавнится на новой локации. Секция спавна собаки(моего мутанта) из all.spawn. ; cse_abstract properties section_name = dog_normal name = dog_normal_1 position = 179.759155273438,20.1181125640869,79.2889633178711 direction = 5.63856360713544e-007,-1.32480001449585,-1.41571035783272e-007 ; cse_alife_object properties game_vertex_id = 0 distance = 40.5999984741211 level_vertex_id = 383716 object_flags = 0xffffffbf custom_data = <<END [logic] active = mob_walker@dog_walk_1 [mob_walker@dog_walk_1] path_walk = dog_walk_1 on_timer = 10 | mob_walker@dog_walk_2 [mob_walker@dog_walk_2] path_walk = dog_walk_2 END ; cse_visual properties visual_name = monsters\dog\dog_red ; cse_alife_creature_abstract properties g_team = 0 g_squad = 0 g_group = 0 health = 1 dynamic_out_restrictions = dynamic_in_restrictions = upd:health = 1 upd:timestamp = 0 upd:creature_flags = 0 upd:position = 179.759155273438,20.1181125640869,79.2889633178711 upd:o_model = 0 upd:o_torso = -1.32480001449585,5.63856360713544e-007,0 upd:g_team = 0 upd:g_squad = 0 upd:g_group = 0 ; cse_alife_monster_abstract properties upd:next_game_vertex_id = 65535 upd:prev_game_vertex_id = 65535 upd:distance_from_point = 0 upd:distance_to_point = 0 ; cse_ph_skeleton properties ; cse_alife_monster_base properties ; se_monster properties Точки я думаю писать уже не нужно? Не думаю что они чем-то помогут, но вот если что: [dog_walk_1] points = p0 p0:name = name00 p0:position = 218.416305541992,21.7092933654785,91.9415588378906 p0:game_vertex_id = 0 p0:level_vertex_id = 421092 [dog_walk_2] points = p0 p0:name = name00 p0:position = 88.924103,-10.092127,118.739883 p0:game_vertex_id = 1 p0:level_vertex_id = 301145 Изменено 22 Февраля 2012 пользователем ColR_iT Ссылка на комментарий
ColR_iT 171 Опубликовано 22 Февраля 2012 Поделиться Опубликовано 22 Февраля 2012 (изменено) strelok200, за тем же зачем и в остальных точках: точках пути, спавна и т.д. и тому подобное. Биться сейвы из-за этого точно не будут. Что это такое можно найти минут за пять воспользовавшись поиском. Daniar299, функция спавн монстра ничем не отличается от спавна того же НПС или же какого-нибудь предмета. Примеры тебе предоставили разработчики в оригинальных файлах. Вооружаешься поиском по словам (выбрать есть из чего) и вперёд на фронт в геймдату. Изменено 22 Февраля 2012 пользователем ColR_iT Ссылка на комментарий
kratos888 0 Опубликовано 22 Февраля 2012 Поделиться Опубликовано 22 Февраля 2012 (изменено) Нужна помощь! Пытаюсь заспавнить непися на вышке, что на Кордоне у блокпоста военных. Спавн делаю через all.spawn. Прописал ему даже свой гулаг - днём дежурит, ночью спит (или что-то в этом роде). Так вот, прописал, спавнится - но не работает именно его логика. Как только появляется - тут же слезает с вышки и гуляет по блокпосту. Такую же проблему увидел и у командира военных на блокпосте - вместо того, чтобы стоять и наблюдать за происходящим, он тоже гуляет по тому же маршруту. В скрипте gulag_escape смотрел приоритеты - своему неписю поставил аж под 500 ед. (на всякий случай, чтоб не сбивали другие террэйны). И всё равно его что-то сбивает - вместо того, чтобы стоять на вышке, он тупо ходит по территории за блокпостом. Кто может, подскажите пожалуйста, в чём беда? Вот. На скрине проиллюстрированы предположительные точки, куда непись смотрит и откуда он смотрит (только днём). А ночью пока не нужно - если разберусь с днём, разберуюсь и с ночью. По гулагам - слишком много нужно писать, всё не поместится. Но уверяю - что бы я ни делал, даже простую ремарковскую логику прописывал ему - всё равно куда-то убегает. Вот точка, откуда непись смотрит (прописал в all.spawn): [big_soldier_smart_walk1] points = p0 p0:name = name00 p0:flags = 0x400 p0:position = -163.7255859375, -25.435829162598, -350.27590942383 p0:game_vertex_id = 31 p0:level_vertex_id = 85729 А вот точки, куда он смотрит: [big_soldier_smart_look1] points = p0,p1,p2 p0:name = name00|a=guard p0:flags = 0x400 p0:position = -183.30322265625, -30.729475021362, -318.25082397461 p0:game_vertex_id = 36 p0:level_vertex_id = 67308 p0:links = p1(1) p1:name = name01|t=15000|a=guard p1:flags = 0x400 p1:position = -159.03273010254, -30.059520721436, -302.86755371094 p1:game_vertex_id = 34 p1:level_vertex_id = 90503 p1:links = p2(1) p2:name = name02|t=10000|a=guard p2:flags = 0x400 p2:position = -119.28175354004, -30.398241043091, -324.59219360352 p2:game_vertex_id = 100 p2:level_vertex_id = 134793 А это точки, где непись спит: [big_soldier_sleeper_sleep] points = p0, p1 p0:name = wp00 p0:position = -166.57637023926, -24.899848937988, -356.91793823242 p0:game_vertex_id = 31 p0:level_vertex_id = 83083 p0:links = p1(1) p1:name = wp01 p1:position = -166.56726074219, -25.43902015686, -352.73843383789 p1:game_vertex_id = 83092 p1:level_vertex_id = 31 p1:links = p0(1) Из gulag_escape.script: if type == "big_soldier_smart" then t = { section = "logic@big_soldier_smart", idle = 0, prior = 100, state = {0}, in_rest = "", out_rest = "", position_threshold = 100, predicate = function(obj_info) return obj_info.profile_name == "big_soldier_profile" end } table.insert(sj, t) t = { section = "logic@big_soldier_sleeper", idle = 0, prior = 100, state = {1}, position_threshold = 100, online = true, in_rest = "", out_rest = "", predicate = function(obj_info) return obj_info.profile_name == "big_soldier_profile" end } table.insert(sj, t) if type == "big_soldier_smart" then return function(gulag) if level.get_time_hours() >= 6 and level.get_time_hours() <= 20 then return 0 -- день else return 1 -- ночь end end end if gulag_type == "big_soldier_smart" then return se_obj:profile_name() == "big_soldier_profile" end [logic@big_soldier_smart] active = walker@big_soldier_walker [walker@big_soldier_walker] path_walk = walk1 path_look = look1 on_info = {+big_soldier_warning1 -big_soldier_warning1_given} remark@big_soldier_warning [remark@big_soldier_warning] anim = threat snd = big_soldier_1 tips = big_soldier_1_radio tips_sender = soldier_elite1 target = actor on_signal = sound_end | walker@big_soldier_walker %+big_soldier_warning1_given% [logic@big_soldier_sleeper] active = sleeper@big_soldier_sleeper [sleeper@big_soldier_sleeper] path_main = sleep wakeable = true Это всё, что я сделал. Изменено 22 Февраля 2012 пользователем ColR_iT Ссылка на комментарий
*Shoker* 322 Опубликовано 22 Февраля 2012 Поделиться Опубликовано 22 Февраля 2012 Artos Спасибо за разъяснение ___ Последний вопрос - раз рестрикторы есть и у оффлайн объектов, то можно ли их удалить через серверный без использования нет-пакетов? Или нужно например отлавливать их выход в онлайн? Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О Мастер аномалий на свою заднюю точку. Ссылка на комментарий
Artos 99 Опубликовано 22 Февраля 2012 Поделиться Опубликовано 22 Февраля 2012 (изменено) *Shoker*, ну зачем задавать вопрос, на который можно самому ответить чуток подумав? Для доступа к информации по рестрикторам объекта имеются методы ... Эти методы имеются только для клиентского объекта ... Делаем вывод, что или для изменения такой информации требуется иметь объект в онлайне или работать нештатными методами, т.е. через нет-пакеты. Мне непонятно, ну почему тебе не посмотреть как работа с информацией по рестрикторам сделана в том же Simbion'е или OGSE? В этих модах проблемы со спавном и удалением аномалий решены. Оставался вопрос с некорректной порой записью нет-пакетов по причине некорректных на то время кодов для чтения/записи скелета объекта, что приводило изредка к "рельсам" - так теперь и это решено. Чем тебе вот этот код не подходит? --/#+# чистка рестрикторов function Clear_Restriction(idNPC,soNPC,oNPC) local sim = alife() if not soNPC then soNPC = idNPC and sim:object(idNPC) end if soNPC and IsNPC(soNPC) then --/ для онлайновых объектов if oNPC and level.object_by_id(soNPC.id) then if oNPC.alive and not oNPC:alive() then --/ мертв? oNPC:remove_all_restrictions() --/ чистим все elseif db.iSSVer <= 8 then --/#!# for SHOC|CS: по списку имен рестрикторов local sInRestrictions = oNPC:in_restrictions() --/ читаем список рестрикторов 'in' (входить) if sInRestrictions ~= "" then local tToRemove = {} for sRest in sInRestrictions:gmatch('%s*[^,]+%s*') do --/ разделяем имена по запятым local oRestr = sim:object(sRest) --/#!# only for SHOC|CS if oRestr and Is_ZoneAnom(oRestr) then table.insert(tToRemove,sRest) end end if next(tToRemove) then local sToRemove = table.concat(tToRemove,',') --/ строка 'удаляемых' у объекта рестрикторов oNPC:remove_restrictions("",sToRemove) end end end end --/ для всех (т.е. и оффлайновых) объектов local pk = get_netpk(soNPC,1) --/ запрос нет-пакета ('state') if pk:isOk() then --/ получен доступ к нет-пакету объекта? local data = pk:get() --/ читаем данные из нет-пакета if next(data.dynamic_in_restrictions) then --/ таблица рестрикторов не пуста? local tRestrLeft,idRestr = {},nil --/ массив НЕ удаляемых рестрикторов for idx,idRestr in ipairs(data.dynamic_in_restrictions) do local soRestr = idRestr and sim:object(idRestr) if soRestr then if Is_ZoneAnom(soRestr) then --/ проверка: аномалия? tRestrRemoved[idRestr] = true if tAnomsRemove[idRestr] then tAnomsRemove[idRestr] = false --/#?# end sim:remove_in_restriction(soNPC, idRestr) else --/ не удаляемый рестриктор table.insert(tRestrLeft, idRestr) end end end -- if #data.dynamic_in_restrictions ~= #tRestrLeft then data.dynamic_in_restrictions = tRestrLeft pk:set(data) --/< запись в нет-пакет end end end end end Изменено 22 Февраля 2012 пользователем Artos "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
Daniar299 0 Опубликовано 22 Февраля 2012 Поделиться Опубликовано 22 Февраля 2012 (изменено) Daniar299, функция спавн монстра ничем не отличается от спавна того же НПС или же какого-нибудь предмета. Примеры тебе предоставили разработчики в оригинальных файлах. Вооружаешься поиском по словам (выбрать есть из чего) и вперёд на фронт в геймдату.Да я согласен функции тежи! Но например та же логика, story_id, spawn_sections, character_profile, откуда брать их? точнее что туда писать для монстра без логики, чтоб просто бегал! Изменено 22 Февраля 2012 пользователем ColR_iT Ссылка на комментарий
_Призрак_ 11 Опубликовано 22 Февраля 2012 Поделиться Опубликовано 22 Февраля 2012 Озадачился я сегодня такой проблемой. Есть текст произвольной длинны. Нужно узнать сколько строк он займет при выводе на статик. У статика задан параметр компекс_мод=1 У меня было несколько идей: 1. Посчитать какой размер текста и сколько в нем символов \n. Но проблема в том что из-за переменоса слов на другую строку этот метод дает погрешность в несколько строк при большом объеме текста. 2. Фактически переписать метод SetText. Идея такая - резать строку по словам и смотреть помещается ли это слово на эту строку. заодно посчитать символы \n. Но при больших текстах такая система будет работать очень долго, а там как у меня и так много чего в этот момент обрабатывается это не есть хорошо. Заранее спасибо Freedom Ссылка на комментарий
ColR_iT 171 Опубликовано 22 Февраля 2012 Поделиться Опубликовано 22 Февраля 2012 Daniar299, если прочитать твои два поста, то становится очень не понятно чего тебе нужно. Ты просишь спавн через скрипт и тут же говоришь, что лучше через "алл". Определись с выбором то. Ещё раз повторюсь: функция спавна монстра ничем не отличается от функции спавна НПС, что там, что там тебе нужно прописать секцию и координаты. Если тебе нужно заспавнить моба через all.spawn, то распаковавши его, скопируй похожую, измени номер секции спавна, поправь имя и координаты, и будет тебе счастье. Туторов тьма-тьмущая. Открой хотя бы тот же Stalkerin и изучай. Ссылка на комментарий
Malandrinus 615 Опубликовано 22 Февраля 2012 Поделиться Опубликовано 22 Февраля 2012 _Призрак_, если надо быстро, то забудь про это. Но в самом то деле, зачем выводить быстро и при этом динамически переносить строки? На худ что ли многострочный текст дампить? Думаю, что при выводе на худ лучше как-то решить вопрос компромиссно - самому распределить строки и отформатировать текст. Если же вывод подразумевается в диалоговое окно, то соображения скорости по большому счету не важны. В этом случае однако нет другого решения, кроме как считать символы и слова и формировать текст с переносами. Дополнительная сложность будет в том, что ширина символов почти всех ходовых шрифтов движка - неодинаковая. Придется делать допущения о среднем размере символа и вводить некий запас, чтобы строка ненароком не вылезла за ширину окна. Ну или сформировать таблицу размеров символов и при суммировании брать размеры из этой таблицы по коду. Еще раз, для диалога самое чудовищное решение в плане скорости скорее всего никаких проблем не вызовет. На худ так естественно выводить нельзя. Плагины Total Commander для работы с игровыми архивами: Архиваторный плагин (для работы с одиночным архивом): link1 link2 Системный плагин (для распаковки установленной игры): link1 link2 Ссылка на комментарий
strelok200 0 Опубликовано 22 Февраля 2012 Поделиться Опубликовано 22 Февраля 2012 Получается вертексы надо использовать те же, что и при спавне? Добавлено через 29 мин.: Посмотрел на Инсайде, там об этом только вкратце Создаю глобальный мод с новыми локациямЭ Ссылка на комментарий
Boofer 0 Опубликовано 23 Февраля 2012 Поделиться Опубликовано 23 Февраля 2012 А на мой вопрос так и не ответили... Неужели никто не знает решения? Не поверю... Если это поможет, то у меня были следующие подозрения: У сталкеров есть секции такого типа: [stalker_terrain] 255,000,255,255 008,001,255,255 ;Разрешено ходить по опасным местам на баре 012,001,255,255 ;Разрешено ходить по опасным местам на Милитари У собак же она одна, но может быть она не подходит для моей новой локации или что-то типа этого? Ссылка на комментарий
Artos 99 Опубликовано 23 Февраля 2012 Поделиться Опубликовано 23 Февраля 2012 Boofer, не стОит всех оптом подозревать в незнании ... Большей частью, и не хочется многим заниматься очередными погадалками, тем более в таком частном вопросе, который многим по-барабану. Кому-то лень, у кого-то более важные дела, чтобы тратить на мелочовку время ... Параметр смарт-терейна в твоем случае не имеет никакого значения. ... мутант тупо стоит на месте с анимацией бега - признак того, что потеряно управление над объектом. Т.е. монстр был взят под скриптовое управление и алайф тут уже не рулит. Ну а почему у тебя схема прекратила управлять монстром - гадай сам. Тут без собственно кодов схемы, параметров локации, путей, и прочего и тем более без строк лога из схемы - только пустыми предполагалками можно заниматься. "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
Boofer 0 Опубликовано 23 Февраля 2012 Поделиться Опубликовано 23 Февраля 2012 Artos, ну тогда меня может смущать только сама логика мутанта. Рабочая ли вообще схема mob_walker? Ссылка на комментарий
Artos 99 Опубликовано 23 Февраля 2012 Поделиться Опубликовано 23 Февраля 2012 (изменено) Boofer, давайте все же задумываться прежде чем писать вопрос в топик! Если бы схема не была рабочей - то в кодах оригинальной игры мы бы не встречали сплошь и рядом упоминания этой схемы и конфигов логики этой схемы. Ну возьми ты ту же "учебную" плоть с Кордона (esc_suicidal_flesh), которая гибнет в аномалии. Ей и схема прописана и она в соответствии с этой схемой бежит туда, куда ей заказано и "героически" гибнет, не суча на месте ногами ... ;-) Смотри в чем разница ... если не считать собственно кординат на локации, хотя и в них вполне может быть загвоздка. Поставь очень желательный параметр path_look, который ты напрочь у себя проигнорировал. Добавь в коды схемы тестовые выводы в лог и смотри ... будет ли твоя непись под управлением схемы или зависнет между "небом и землей", т.е. и схема ее "потеряет" и под управление алайфа она не вернется. Не гадать и смущаться нужно, а делать что-то и смотреть. Делать желательно осмысленно, а не абы чО писать в схему/логику. Добавлено через 19 мин.: P.S. И что тебе мешает определить виновата ли логика/схема или нет? Чтобы не заниматься перекомпиляцией алл.спавна - прописываем путь к конфигу логики, где и можно экспериментировать ... Пробуем с "пустой" логикой, пробуем с иной схемой, пробуем с иными параметрами своей схемы ... Ведь все это и не так сложно и ответ и порцию знаний/опыта на будущее. Изменено 23 Февраля 2012 пользователем Artos "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
botik 0 Опубликовано 23 Февраля 2012 Поделиться Опубликовано 23 Февраля 2012 привет,народ столкнулся с такой проблемой,пропала фраза у всех сталкеров "До встречи!" уже все перерыл немогу понять куда делась,подскажите плиз как исправить это чтобы фраза была Во-первых, ошибся темой. Во-вторых, откуда кто знает, что ты там наворотил? В-третьих, тебе уже было замечание по грамотности, если не хочешь последствий - пиши грамотно. Cyclone Ссылка на комментарий
Boofer 0 Опубликовано 24 Февраля 2012 Поделиться Опубликовано 24 Февраля 2012 (изменено) Artos, выяснил что виновата именно логика. Когда мутант находится под действием логики, то зависает в истерическом бегу на месте, но стоит ему заметить врага, он выходит из под действия логики и нападает на врага (передвигается). Но стоит врагу пропасть, он снова продолжает выполнять незаконченную логику и зависает... Менял и координаты точек и координаты спавна самого мутанта. Даже прописывал новую локацию в скрипте xr_gulag. Безрезультатно. Уже даже не представляю что ещё можно сделать... Пробовал без логики. Всё нормально. Изменено 24 Февраля 2012 пользователем Boofer Ссылка на комментарий
Artos 99 Опубликовано 24 Февраля 2012 Поделиться Опубликовано 24 Февраля 2012 Boofer, ну и ... констатация факта того, что тобою написана ошибочная логика и не более. Теперь, если еще не отпало желание, смотри свою логику и приводи ее к рабочему варианту. Та же "учебная" плоть тебе в качестве примера, как сделана рабочая логика для схемы. strelok200, в твоем вопросе "голый" сэйв бесполезен. Без всех твоих модмфицированных кодов и пр. изменений от оригинальной игры, версию которой ты также не упоминаешь - бессмыслено даже о чем-то говорить. Битые сэйвы могут возникать по самым разным причинам, коих неперечислишь даже. Ну а раз ковыряешь алл.спавн и получаешь битье - смотри свои ошибки при правках ищи что и где не так делаешь. Используй вывод в лог при загрузке игры технологических сообщений, смотри какой объект виноват и т.д. Если выложишь где-нибуль весь свой мод с парой битых сэйвов - попробую на выходных глянуть ... "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
Tris 9 Опубликовано 25 Февраля 2012 Поделиться Опубликовано 25 Февраля 2012 Здравствуйте! Пожалуйста, помогите разобраться с вылетом: function object_eat(obj) local sect = obj:section() if db.actor:has_info("wpn_porshein") then db.actor:disable_info_portion("wpn_porshein") iTimer = nil db.actor:restore_weapon() end if sect == "medkit" or sect == "medkit_army" or sect == "medkit_scientic" then db.actor:hide_weapon() random_time() end end function random_time() local random_table_function = math.random(1,5) if random_table_function == 1 then function_start_1() end if random_table_function == 2 then function_start_2() end if random_table_function == 3 then function_start_3() end if random_table_function == 4 then function_start_4() end if random_table_function == 5 then function_start_5() end function function_start_1() iTimer = time_global() + 5*1000 db.actor:give_info_portion("wpn_porshein") end function function_start_2() iTimer = time_global() + 7*1000 db.actor:give_info_portion("wpn_porshein") end function function_start_3() iTimer = time_global() + 9*1000 db.actor:give_info_portion("wpn_porshein") end function function_start_4() iTimer = time_global() + 11*1000 db.actor:give_info_portion("wpn_porshein") end function function_start_5() iTimer = time_global() + 13*1000 db.actor:give_info_portion("wpn_porshein") end end function Timer_N_minutes() if iTimer and iTimer < time_global() then iTimer = nil db.actor:disable_info_portion("wpn_porshein") db.actor:restore_weapon() end end FATAL ERROR [error]Expression : !m_error_code [error]Function : raii_guard::~raii_guard [error]File : D:\prog_repository\sources\trunk\xrServerEntities\script_storage.cpp [error]Line : 748 [error]Description : d:\stalker cop\gamedata\scripts\builds_activ.script:34: attempt to call global 'function_start_5' (a nil value) stack trace: • Dead Forgetting Zone • Мои работы. Обновление: 24.08.2012 Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти