*Shoker* 322 Опубликовано 18 Марта 2012 Поделиться Опубликовано 18 Марта 2012 В продолжение этого поста: http://www.amk-team.ru/forum/index.php?s=&...st&p=683822 Решил получить через getFS() путь к папке с логами игры. Но в лучших традициях сталкера, функция getFS():get_path(string) не работает и вылетает. Существует ли рабочий способ получить путь к папке с логами? Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О Мастер аномалий на свою заднюю точку. Ссылка на комментарий
Artos 99 Опубликовано 18 Марта 2012 Поделиться Опубликовано 18 Марта 2012 (изменено) *Shoker*, ну тебе же уже дважды давался по сути прототип доступа к файлу по пути: local fname = getFS():update_path("$game_saves$", filename..".msf") - это для твоих сэйвов, если их переместить из искуственно создаваемой тобою папки в "штатную". Очевидно, что для логов должно быть нечто типа: local fname = getFS():update_path("$logs$", "xray_"..username..".log") - где остается подставить для username имя пользователя-игрока (обычно "$user$", но это уже не из Lua). И, если получаешь ошибку при применении заведомо рабочей функции/метода - то приводи контекст кода, а не только констаттируй что "у меня это не работает". Часто неправильное место и/или условия/аргументы являются причиной ошибки. Изменено 18 Марта 2012 пользователем Artos "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
Боягуз 3 Опубликовано 20 Марта 2012 Поделиться Опубликовано 20 Марта 2012 Как создать скрипт общего спавна?В моде Lost World такой есть(lwc_game_spawn.ltx),через него очень просто предметы и НПС спавнить без каких либо манипуляций с другими файлами,но как такое в оригинале реализовать можно. Tetris 9in1, 2 кб ОЗУ, 1kHz(одноядерный),2х цветовой широкоформатный дисплей. Ссылка на комментарий
Умный_колобок 0 Опубликовано 21 Марта 2012 Поделиться Опубликовано 21 Марта 2012 Всем привет. Как в ЗП сделать, чтобы во время диалога после фразы "давай выпьем" актёр пил водку, даже если в инвентаре её нету? Ссылка на комментарий
ColR_iT 171 Опубликовано 21 Марта 2012 Поделиться Опубликовано 21 Марта 2012 (изменено) Боягуз, а что мешает сделать аналогично? Впиши весь спавн в одину функцию, а затем в начале игры вызови её. Умный_колобок После фразы, вызываешь функцию, которая будет спавнить бутылку водки актору и он тут же её будет выпивать. Спавн делаешь функцией: alife():create ("vodka", db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id()) "Употребить" водку можно функцией: db.actor:eat("vodka") Условия составляешь сам, как тебе нужно. Изменено 21 Марта 2012 пользователем ColR_iT Ссылка на комментарий
Artos 99 Опубликовано 21 Марта 2012 Поделиться Опубликовано 21 Марта 2012 Не все так просто ... Чтобы выпить - бутылка должна быть у актора, а только что заспавненная бутылка - еще не доступна для этого (eat применим к гейм-объектам, а не к серверным). Т.о. нужно или использовать таймер или ставить коллбэк на спавн бутыли и, когда она появится в онлайне - выпивать ... "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
Полтергейст 37 Опубликовано 22 Марта 2012 Поделиться Опубликовано 22 Марта 2012 (изменено) Вчера пробовал сделать "двухслойные" аномалии и столкнулся с одной непонятной проблемой: только что заспавненная аномалия не реагирует ни на кого (ни на игрока, ни на болты). Как делал: 1. Сначала создал в конфигах вот такую секцию [zone_restriction]:zone_mosquito_bald class = Z_MBALD min_start_power = 1 max_start_power = 1 hit_impulse_scale = 0.001 effective_radius = 6.0 hit_type = telepatic visible_by_detector = off artefacts = spawn_blowout_artefacts = off min_artefact_count = 0 max_artefact_count = 0 BirthProbability = 0.0 2. В se_zones прописал спавн объекта с этой секцией при переходе аномалий в онлайн (поле m_restrictor_id сохраняется/загружается в STATE_Read, STATE_Write): function se_zone_anom:on_spawn() cse_anomalous_zone.on_spawn(self) if self.m_restrictor_id == 65535 or self.m_restrictor_id == nil then local sim = alife() if sim then local restrictor = sim:create("zone_restriction", self.position, self.m_level_vertex_id, self.m_game_vertex_id) self.m_restrictor_id = restrictor.id end end end В результате объект спавнится, но не ведёт себя как аномалия. Партиклы отыгрываются, но на болты и на игрока она не реагирует. В связи с этим у меня 2 вопроса: 1) Каков радиус аномалии (то есть самого рестриктора) по умолчанию, если я спавню его таким способом? 2) В чём тут ошибка? Изменено 22 Марта 2012 пользователем ColR_iT Ссылка на комментарий
Artos 99 Опубликовано 22 Марта 2012 Поделиться Опубликовано 22 Марта 2012 (изменено) Полтергейст 1. Какое-то странное понятие у тебя о "двухслойности". Делая простым копированием новую секцию на базе имеющейся - ни о какой "двуслойности" создаваемого не стОит говорить. Если же под "двухслойностью" ты понимаешь спавн в ту же точку, что и исходная аномалия, некоего рестриктора ... то у тебя будет целый "наполеон", т.к. при каждой загрузке в ту же точку у тебя будет спавниться новый "слой" ... 2. Дефолтно при спавне для рестрикторов (и дочерних объектов на базе этого класса) нет ни какого радиуса, т.к. таблица параметров 'shapes' пуста, т.е. зона не имеет ни формы ни иных линейных измерений, зависимых от формы. Твоя ошибка в том, что взялся "конструировать" не имея представления ни из чего собрался делать, ни что же должно получиться. Вначале почитай материалы на эту тему. Изменено 22 Марта 2012 пользователем Artos "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
*Shoker* 322 Опубликовано 22 Марта 2012 Поделиться Опубликовано 22 Марта 2012 (изменено) Вопрос, а restrictor_type = 0 это по идее обозначает что рестриктор не является ограничителем? (Not a restrictor в СДК) Почемуто в ЧН если просто заспавненный через alife() непись цепляет телом такой рестриктор, игра зависает. Если у рестриктора например тип 2 (в ACDC) то всё нормально, но он мешал работать моей скриптовой схеме (НПС из сквадов застревали у границ рестриктора). Как ещё можно убрать у непися все ограничения, не изменяя тип рестриктора, что нужно сделать в скриптовой схеме? Использовать remove_all_restrictions() ? У меня remove_all_restrictions в схеме есть но вызывается лишь при первом вызове экшена (action_) "бежать в укрытие" в функции initialize() Может его нужно поставить на апдейт? И насколько вообще опасно убирать у НПС все ограничения, они ему автоматически пропишутся снова, когда моя схема остановится, и НПС вернётся под гулаговую работу? Изменено 22 Марта 2012 пользователем *Shoker* Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О Мастер аномалий на свою заднюю точку. Ссылка на комментарий
Полтергейст 37 Опубликовано 22 Марта 2012 Поделиться Опубликовано 22 Марта 2012 Artos у тебя будет целый "наполеон", т.к. при каждой загрузке в ту же точку у тебя будет спавниться новый "слой" ... Не будет. Я же написал - self.m_restrictor_id сохраняется и загружается, то есть после сохранения/загрузки или перехода в оффлайн повтороного спавна не будет. Двухслойным назвал из-за того, что планировалось сделать, чтобы аномалия была внутри этого рестриктора. таблица параметров 'shapes' пуста, т.е. зона не имеет ни формы ни иных линейных измерений, зависимых от формы. То есть мне нужно разобрать net_packet'ы и заполнить эту таблицу? В таком случае, можно ли просто скопировать их с аномалии? Ссылка на комментарий
Artos 99 Опубликовано 22 Марта 2012 Поделиться Опубликовано 22 Марта 2012 (изменено) Полтергейст, все же перепрочти мои последние слова из предыдущего топика ... Если ты знаешь иной способ доступа к параметрам 'shapes', как не нет-пакеты, то используй его. Но если ты собирешься копировать в "разобранный" нет-пакет, то вспомни, что "скопировать" сможешь, тоже только из такого же "разобранного" нет-пакета аномалии. И странно, что задаешься этим вопросом именно сейчас, а не когда собрался "планировалось сделать, чтобы аномалия была внутри этого рестриктора". Естественно, если одно внутри другого, то и отталкиваться от чего то требуется и задавать нужные границы/форму тоже, а не полагаться, что дефолтый спавн все это за тебя сделает. Ну и, что-то мне подсказывает, что твои сохранения и считывания self.m_restrictor_id - словеса, ничем не подкрепленые, т.к. если и сохраняешь что-то, то опять же в нет-пакете, о котором только сейчас заговорил ... И, учитывая, что доспавниваешь собственно вторую аномалию, а не рестриктор - то у тебя вообще бесконечная цепочка спавна в одну и ту же точку должна получаться, как бы ты ни сохранял. Или ты считаешь, что твоя вторая аномалия в точке не будет также выходить в он-лайн и не будет провоцировать себе же в пару свой "второй-третий слой"? ... и так далее ... ;-) Изменено 22 Марта 2012 пользователем Artos "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
Боягуз 3 Опубликовано 22 Марта 2012 Поделиться Опубликовано 22 Марта 2012 ColR_iT, Правду говорят,на путь истинный наставить нужно!Ещё вопрос по етому поводу:до какой функции можно прикрутить етот скрипт,чтоб спавн происходил сразу же после начала НИ?Прописать в диалог Сидоровичу ето не то.Думал к заданию "Убить Стрелка" приделать,но я незнаю как к без диалоговым заданиям активацию функции делать. Tetris 9in1, 2 кб ОЗУ, 1kHz(одноядерный),2х цветовой широкоформатный дисплей. Ссылка на комментарий
ColR_iT 171 Опубликовано 22 Марта 2012 Поделиться Опубликовано 22 Марта 2012 (изменено) Боягуз, задание "Убить Стрелка" выдаётся через инфопорцию storyline_actor_start, которую актор получает в начале игры. Допиши к выдачи задания и вызов функции при помощи тегов <action></action>. P.S. Вопрос уже уходит от смысла темы, думаю будет уместным переместится в "ковырялку". [spoiler=To Whisper]Твой вопрос был перемещён в "ковырялку", где ему место. Изменено 22 Марта 2012 пользователем ColR_iT Ссылка на комментарий
Viнt@rь 50 Опубликовано 22 Марта 2012 Поделиться Опубликовано 22 Марта 2012 *Shoker*, у нас тоже был баг изза restrictor_type = 0, но повисал, судя по всему, апдейт актора, так как все остальное работает исправно, советую тебе попробывать restrictor_type = 3 - самый обычный(стандартный), пыс только его и используют(почти), а у нас, после исправления всех типов на 3 с 0, перестал повисать апдей актора. GUI для конвертера от бардака(всего и вся в форматы сдк) Полезный утиль-"Utilits pack(mod)" Ссылка на комментарий
olaf1 0 Опубликовано 23 Марта 2012 Поделиться Опубликовано 23 Марта 2012 (изменено) Как я могу спросить, если NPC мертв в сценарии? какой из них подходит? local npc local npc_dead = db.storage[npc:id()].death или npc = level_object_by_sid(p[1]) return not npc or not npc:alive() или иного сценария? может ли кто-нибудь сказать мне об этом спасибо Изменено 24 Марта 2012 пользователем ColR_iT Ссылка на комментарий
Artos 99 Опубликовано 23 Марта 2012 Поделиться Опубликовано 23 Марта 2012 (изменено) olaf1 Для проверки npc_dead (мертв ли НПС) достаточно: if npc then return npc:alive() == false --/> npc_dead (true) end Использовать level_object_by_sid (p[1]) неразумно. Если требуется получить об'ект по его story_id (p[1]), то незачем заморачиваться на излишествах готовой фунции и сделать проще: local npc = alife():story_object(p[1]) --/< server_object by story_id if npc and npc.alive then return npc:alive() == false --/> npc_dead (true) else return nil --/ NPC not exist (нет в игре) end Изменено 23 Марта 2012 пользователем Artos "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
olaf1 0 Опубликовано 24 Марта 2012 Поделиться Опубликовано 24 Марта 2012 (изменено) Как я могу продолжать использовать, потому что, когда я делаю это с помощью скрипта и хочет использовать его в качестве условного if? Я даже не могу в результате чего я if npc then return npc:alive() == false end if npc:alive() == false then ...... кто-то может помочь мне, потому что? спасибо Изменено 24 Марта 2012 пользователем Artos Ссылка на комментарий
Artos 99 Опубликовано 24 Марта 2012 Поделиться Опубликовано 24 Марта 2012 (изменено) olaf1, сколько вам лет? Вы задаете такие банальные вопросы, что только тот, кто ничего не читал по Lua не может на них отвечать. Ведь очевидно же что если требуется однократная поверка внутри скрипта, то это может быть так: if npc and npc:alive() == false then ... Вновь советую почитать мануалы по Lua и поупражняться самостоятельно писать постенькие скрипты. Изменено 24 Марта 2012 пользователем Artos "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
*Shoker* 322 Опубликовано 24 Марта 2012 Поделиться Опубликовано 24 Марта 2012 (изменено) Как то тут писал о том, что у меня местами из за бродячих сталкеров игра (ЧН) зависала. Я нашёл одну причину - это оказались виноваты рестрикторы с типом 0 (возможно ещё от чего то зависит), попадание одиночного НПС в который вызывало зависание. Но потом я столкнулся с таким же висяком на другой локации (Свалке), в месте, где ни одного рестриктора небыло. Оказалось что там проблема была в двери, которая загораживала единственный выход из куска АИ сетки. И видимо когда НПС пытался пройти через этот участок, игра не находила доступного пути и висла. При удалении двери зависания пропали. Собственно уже просто интересно, могут ли быть другие решения для этого случая, кроме как удаление двери? Хотя бы научить непися эту дверь "открывать" хотя по хорошему вообще должна быть закрыта всегда. Или в крайнем случае ходить по кругу внутри огороженного участка АИ сетки. Да тупо в дверь носом упираться. Почему вообще именно эта дверь, которая является обычным физ. объектом, как то влияет на расчёт пути сталкера. Обычно если сталкер встречается с дверью, и она не открывается, он просто прёт напролом, а тут виснет. Значит есть всё же в движке расчёт препятствий получается... Изменено 24 Марта 2012 пользователем *Shoker* Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О Мастер аномалий на свою заднюю точку. Ссылка на комментарий
Полтергейст 37 Опубликовано 24 Марта 2012 Поделиться Опубликовано 24 Марта 2012 и, что-то мне подсказывает, что твои сохранения и считывания self.m_restrictor_id - словеса, ничем не подкрепленые, т.к. если и сохраняешь что-то, то опять же в нет-пакете, о котором только сейчас заговорил .. Сохранение/загрузка реализованы вот таким кодом: function se_zone_anom:STATE_Write(packet) cse_anomalous_zone.STATE_Write(self, packet) packet:w_u16(self.m_restrictor_id) end function se_zone_anom:STATE_Read( packet, size ) cse_anomalous_zone.STATE_Read( self, packet, size ) self.m_restrictor_id = packet:r_u16() end у тебя вообще бесконечная цепочка спавна в одну и ту же точку должна получаться, как бы ты ни сохранял. Или ты считаешь, что твоя вторая аномалия в точке не будет также выходить в он-лайн и не будет провоцировать себе же в пару свой "второй-третий слой"? Так у второй аномалии не скриптовый класс, поэтому класс se_zone_anom её вообще не касается. Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти