TRAMP14 1 Опубликовано 22 Марта 2011 Поделиться Опубликовано 22 Марта 2011 Вот попробовал поэксперементировать с ражиацией, вот такое нашлёпал: function rada() local actor = db.actor if actor.radiation >= 0.3 then if actor:object("antirad") then actor:eat("antirad") end end end Но не пашет, антирад не используется. Я правильно радиацию проверяю? Вроде всё как описанно но не работает Ссылка на комментарий
Garry_Galler 7 Опубликовано 22 Марта 2011 Поделиться Опубликовано 22 Марта 2011 TRAMP14 Мне почему то кажется, что ГГ скорее скушает антирад, если ты напишешь вот так: local obj = actor:object("antirad") if obj then actor:eat(obj) :-) Ссылка на комментарий
TRAMP14 1 Опубликовано 22 Марта 2011 Поделиться Опубликовано 22 Марта 2011 Так с радиацией всё норм? local obj = actor:object("antirad") if obj then actor:eat(obj) Я както задумывался но мне показалось что будет вылет. Ссылка на комментарий
Clayman 104 Опубликовано 24 Марта 2011 Поделиться Опубликовано 24 Марта 2011 В логике есть схема проверки на присутствие конкретного нпс в спейс-рестрикторе: on_npc_in_zone = npc_story_id | restrictor_name | scheme А как сделать чтобы условие срабатывало на любого нпс, а не на конкретного? Ссылка на комментарий
TRAMP14 1 Опубликовано 24 Марта 2011 Поделиться Опубликовано 24 Марта 2011 А можно как либо получить визуал непися? Ссылка на комментарий
Министр 3 Опубликовано 24 Марта 2011 Поделиться Опубликовано 24 Марта 2011 TRAMP14, через нет-пакет. Ссылка на комментарий
TRAMP14 1 Опубликовано 24 Марта 2011 Поделиться Опубликовано 24 Марта 2011 Почемуто этого ответа я и боялся. А можно пример? Ссылка на комментарий
parsek123 0 Опубликовано 24 Марта 2011 Поделиться Опубликовано 24 Марта 2011 Всем привет, размышлял тут на досуге о создании проводников, чтоб водили по локации без перехода на другую, и пришла в голову такая схема - игрок говорит с проводником, тот соглашается его отвести, отводит, !и вот самое главное! остаётся в том райёне куда отвёл, либо идет к ближайшей точке отдыха\сбора нпс и дожидается гг там пока гг снова не понадобятся его услуги. Со скриптом маломальски допетрил, но вот как написать проводнику такую логику? Да и ещё надо учитывать то, что во время выброса или нападения врагов проводник должен вести себя как обычный нпс - прятаться\отстреливаться. Может кто помочь с написанием логики? Полезные статьи для новичков по 3dsMax, Maya, Photoshop и не только... Интересные статьи по работе в Maya Ссылка на комментарий
Garry_Galler 7 Опубликовано 25 Марта 2011 Поделиться Опубликовано 25 Марта 2011 (изменено) TRAMP14 Вариант с использованием файла amk.script function Get_Visual_by_Wolf() local se_obj = alife():story_object(6) -- получаем серверный объект по его sid - в данном случае это Волк if se_obj then local t = amk.read_stalker_params(se_obj) if t ~= nil then local vis = t.visual vis = amk.str_explode("\\",vis) vis = vis[3] get_console():execute("Визуал_Волка="..vis) else get_console():execute("Ошибка_чтения_визуала_Волка!") end else get_console():execute("Волка_в_игре_НЕТ!") end end Автономный вариант function GetStalkerParams(sobj) local packet = net_packet() packet:w_begin(0) packet:r_seek(2) sobj:STATE_Write(packet) local tData ={} -- Свойства cse_trader tData.money = packet:r_s32() tData.profile = packet:r_stringZ() tData.infammo = packet:r_s32() tData.class = packet:r_stringZ() tData.communityid = packet:r_s32() tData.rank = packet:r_s32() tData.reputation = packet:r_s32() tData.charname = packet:r_stringZ() -- Свойства cse_alife_object tData.gvid = packet:r_u16() tData.obf32u1 = packet:r_float() tData.obs32u2 = packet:r_s32() tData.lvid = packet:r_s32() tData.oflags = packet:r_s32() tData.custom = packet:r_stringZ() tData.sid = packet:r_s32() tData.obs32u3 = packet:r_s32() -- Свойства cse_visual tData.visual = packet:r_stringZ() return tData end --// Распечатка всех данных полученной таблицы function PrintPacket() local tData = GetStalkerParams(alife():story_object(6)) for k, v in pairs(tData) do get_console():execute("load ~ "..string.format("[%s]=%s", k, v)) end end Обращение к полю visual аналогично: local tData = GetStalkerParams(alife():story_object(6)) local vis = tData.visual --// только строка в данном случае будет такого вида actors\neytral\stalker_neytral_balon_1 выпарсить из нее именно название можно как при помощи функции amk.str_explode(), так и при помощи функции StringSplit() ,которую я выкладывал в справочнике. Изменено 25 Марта 2011 пользователем Garry_Galler Ссылка на комментарий
TRAMP14 1 Опубликовано 25 Марта 2011 Поделиться Опубликовано 25 Марта 2011 (изменено) tData.money = packet:r_s32() tData.profile = packet:r_stringZ() tData.infammo = packet:r_s32() tData.class = packet:r_stringZ() tData.communityid = packet:r_s32() tData.rank = packet:r_s32() tData.reputation = packet:r_s32() tData.charname = packet:r_stringZ() -- Свойства cse_alife_object tData.gvid = packet:r_u16() tData.obf32u1 = packet:r_float() tData.obs32u2 = packet:r_s32() tData.lvid = packet:r_s32() tData.oflags = packet:r_s32() tData.custom = packet:r_stringZ() tData.sid = packet:r_s32() tData.obs32u3 = packet:r_s32() Получается таким же способом можно проверить деньги, вертексы, профили, логику и тп? p/s/ Нет пакет полезная штука однако p/s/s/ Нашёл в оригинальных скриптах такую строку wait(цифра) . Это как в других языках delay или как таймер? Или она вообщене работает? p/s/s/s/ Спасибо! Изменено 25 Марта 2011 пользователем TRAMP14 Ссылка на комментарий
Garry_Galler 7 Опубликовано 25 Марта 2011 Поделиться Опубликовано 25 Марта 2011 (изменено) TRAMP14 Получается таким же способом можно проверить деньги, вертексы, профили, логику и тп? Именно так. ----------------------------------------------------------------- wait(time) - это глобальная функция (находится в _g.script) задержки выполнения программы на указанное время (аналог Sleep() в других языках)). Для этого скрипт должен быть запущен как coroutine(подпрограмма) - что это такое читай в документации по lua. Работает ли в сталкере - трудно сказать, я пробовал ее использовать(давно это было), результатов уже не помню, но по всей видимости ничего полезного не получил :-). Изменено 25 Марта 2011 пользователем Garry_Galler Ссылка на комментарий
Malandrinus 615 Опубликовано 25 Марта 2011 Поделиться Опубликовано 25 Марта 2011 TRAMP14, А можно как либо получить визуал непися? В ЗП есть функции get_visual_name и set_visual_name. Ну если не ЗП, то через нетпакет, как здесь уже объясняли. Плагины Total Commander для работы с игровыми архивами: Архиваторный плагин (для работы с одиночным архивом): link1 link2 Системный плагин (для распаковки установленной игры): link1 link2 Ссылка на комментарий
TRAMP14 1 Опубликовано 26 Марта 2011 Поделиться Опубликовано 26 Марта 2011 (изменено) Хочу сделать чтобы в зависимости от группировки был набор предметов (при опеделённых условиях естественно). Вот кусок. local tbl = {bandit = "medkit", stalker = "antirad", killer = "vodka"} for k, v in pairs(tbl) do if common == k then alife():create(v, pos, lv, gv, id) end end Скажите пожалуйста я правильно разобрался с таблицами? Или надо по другому? p/s/ common - группировака непися, сокращённо Изменено 26 Марта 2011 пользователем TRAMP14 Ссылка на комментарий
Nazgool 250 Опубликовано 26 Марта 2011 Поделиться Опубликовано 26 Марта 2011 TRAMP14 В принципе всё верно, и хотя в таблице мало полей, я бы всё-таки после функции спавна поставил break : if common == k then alife():create(v, pos, lv, gv, id) break end Ведь если при первом же обороте будет найдено поле, то зачем "крутить" таблицу до конца? Как вариант можно сделать и без pairs. local tbl = {bandit = "medkit", stalker = "antirad", killer = "vodka"} local item = tbl[common] if item then alife():create(item, pos, lv, gv, id) end Ссылка на комментарий
panzyuza 41 Опубликовано 28 Марта 2011 Поделиться Опубликовано 28 Марта 2011 А как сделать скриптовый респавн?Просто через all.spawn не умею,там ведь еще и смарты надо писать.А я пробовал сматры на новых локах,но вылетает.Поэтому заспавнил через скрипт,прописал логику,но они спавняться один раз.Как можно прописать фунцию респавна? AVS_LOCATION_MOD Ссылка на комментарий
TRAMP14 1 Опубликовано 28 Марта 2011 Поделиться Опубликовано 28 Марта 2011 Заспавнить непися через скрипт (можно и через спавн) записать ид в табличку, проверять пока он не помрёт и после смерти удалить труп и заспавнить его по новой. И так по кругу Ссылка на комментарий
panzyuza 41 Опубликовано 28 Марта 2011 Поделиться Опубликовано 28 Марта 2011 (изменено) А поподробней можно.Я не скриптер.Но работаю один .Осваиваю.Что,куда,точно,подскажите,как?Просто заселил новые локации,мне нужно много неписей и мутантов респавнить. Изменено 28 Марта 2011 пользователем panzyuza AVS_LOCATION_MOD Ссылка на комментарий
Kopcap 0 Опубликовано 28 Марта 2011 Поделиться Опубликовано 28 Марта 2011 panzyuza, Если тебе нужно респаунить НПС, то почитай эту тему, может помочь - http://www.amk-team.ru/forum/index.php?showtopic=5734 Модератор(ы) - могу ли я здесь указать ссылку на пост в другой теме, вроде ему(посту) самое место тут - ошибся малость темой. Ссылка на комментарий
Министр 3 Опубликовано 28 Марта 2011 Поделиться Опубликовано 28 Марта 2011 (изменено) Не пишем глупости, товарищи. Kopcap, указывай. Изменено 28 Марта 2011 пользователем Министр Ссылка на комментарий
Полтергейст 37 Опубликовано 30 Марта 2011 Поделиться Опубликовано 30 Марта 2011 (изменено) У меня такой вопросик - как сделать, чтобы предметы не прописывались в smart_terrain? Не знаю, как так получается, но в какой-то смарт пытается прописаться какой-нибудь предмет, например, пачка патронов (вызывает register_npc()). Этот глюк, похоже, был и раньше, только smart_terrain.script до редактирования пропускал этот баг (не было отложенного заполнения npc_info -> не вызывались методы, которые есть только у живности), но его ловил amk_offline_alife при вызове npc:alive() (писал, что нет такого метода). Тогда я не обращал на это внимание и просто поставил проверку на наличие функции alive и закрыл на это глаза, оказалось, что зря. Как с этим можно бороться? Фильтрация в suitable(), enabled() и register_npc() не помогает. проверять пока он не помрёт и после смерти удалить труп и заспавнить его по новой. И так по кругу Тогда это нужно делать через se_stalker.script. Отследить по имени секции и при вызове on_death() удалить объект и создать заново. Естественно, удалять только через планировщик отложенного удаления (как в теме про вылеты без логов, только поправить ошибки). Спавнить скорее всего тоже таким же способом, иначе он заспавнится ещё до удаления. Изменено 30 Марта 2011 пользователем Полтергейст Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти