*Shoker* 322 Опубликовано 14 Ноября 2013 Возможно ты просто не правильно вызывал её: void give_game_news( -- выдать на экран сообщение string, -- само сообщение. Может содержать некоторые форматирующие элементы string, --текстура, из которой берется аватара "отправителя" Frect, --координаты и размеры вырезаемого из текстуры изображения int, --начало показа сообщения с текущего момента (в миллисекундах) int --длительность показа сообщения (в миллисекундах) ) В любом случае работает и ладно, а правильный вызов give_game_news можешь в том же news_manager глянуть. Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О Мастер аномалий на свою заднюю точку. Поделиться этим сообщением Ссылка на сообщение
*Shoker* 322 Опубликовано 28 Ноября 2013 (изменено) В наличии есть матрица углов поворота объекта и его позиция. Могу из неё также получить углы Эйлера.Никто случаем не может показать готовую функцию (можно даже не на Lua, лишь бы понятная была) с помощью которой зная эти данные можно получить направляющий вектор?(в смысле вектор, который при сложении с позицией показывает на точку в метре от объекта, на которую он смотрит - грубо говоря то что возвращает direction() у объекта или device().cam_dir у камеры) Необходимо получить дирекцию кости, но я могу только углы Эйлера\матрицу поворота из неё вытащить. А как через них получить направляющий вектор (он кстати вроде по другому называется) я честно говоря не знаю. UPD: Вроде выкрутился вот такой шнягой: local ph_shell = self.object:get_physics_shell() local ph_element = ph_shell:get_element_by_bone_name("link") function extract_direction(ph_element) local m = ph_element:global_transform() local p,b,h = extract_euler_xzy(m) return vector():setHP(h, p) end extract_euler_xzy - http://pastebin.com/6ijsymZ4 Изменено 28 Ноября 2013 пользователем *Shoker* Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О Мастер аномалий на свою заднюю точку. Поделиться этим сообщением Ссылка на сообщение
*Shoker* 322 Опубликовано 1 Февраля 2014 (изменено) @Сталкер Лом, к выше сказанному добавлю что называть свою переменную level вообще не очень хорошо, т.к сделав такое: local level = level.name() Ты в рамках твоей функции ниже уже лишаешься доступа к функциям из namespace level, т.к при попытке допустим такого: local level = level.name() if level.rain_factor() > 0 then ... У тебя будет вылет, ибо в level у тебя теперь строка хранится. Изменено 1 Февраля 2014 пользователем ColR_iT Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О Мастер аномалий на свою заднюю точку. Поделиться этим сообщением Ссылка на сообщение
*Shoker* 322 Опубликовано 20 Марта 2014 (изменено) @kmsk, Потому что сразу после создания ствола нельзя получить его клиентский объект - его ещё не существует. Переносить аддоны и состояние можно через нет-пакеты, я завтра попробую откопать то что нужно. Если бы ещё нужный скрипт ещё был бы под рукой, но некоторые здесь поспособствовали, и теперь его придётся искать у себя или брать первый попавшийся. Изменено 20 Марта 2014 пользователем *Shoker* Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О Мастер аномалий на свою заднюю точку. Поделиться этим сообщением Ссылка на сообщение
*Shoker* 322 Опубликовано 21 Апреля 2014 (изменено) @mumie,на какую игру делаешь? Если ТЧ или ЗП, то http://www.amk-team.ru/forum/index.php?showtopic=10538&page=1 Скачай документацию и посмотри раздел "Получение информации о точке/объекте, куда смотрит актор" А через это http://www.amk-team.ru/forum/index.php?showtopic=10538&p=831341 будет проще всего нужные из них поставить. На ЧН могуть быть проблемы с не-лицензионными версиями игры, т.к они обычно используют свой xrGame.dll Изменено 21 Апреля 2014 пользователем *Shoker* Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О Мастер аномалий на свою заднюю точку. Поделиться этим сообщением Ссылка на сообщение
*Shoker* 322 Опубликовано 15 Мая 2014 (изменено) @Старлей, на ЗП перешёл? use_ai_locations() есть только там, и используется при спавне оружия в тайники. Пробил бы поиском по скриптам ЗП - нашёл бы пример использования. local sobj = alife():create(item, pos_vector[1], pos_vector[2], pos_vector[3]) sobj:use_ai_locations(false) Должно работать. Функция применяется к серверному объекту, желательно сразу после спавна. (как на примере выше) m_netpk от 19 Сентября 2013, новее хз где брать. Изменено 15 Мая 2014 пользователем *Shoker* 3 Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О Мастер аномалий на свою заднюю точку. Поделиться этим сообщением Ссылка на сообщение
*Shoker* 322 Опубликовано 18 Июня 2014 (изменено) @AndreySol, ловил такой баг в ЧН с монстрами. Там если спавнить предметы им в инвентарь напрямую - такой же косяк был. Решил следующим образом - сперва спавню предмет в монстре (тот же ящик в твоём случае) а потом повторно через функцию transfer_item перемещаю предмет из монстра в него-же. Тогда игра корректно запоминает кому принадлежит вещь.Вот пример: local sobj = sm.spawn_in_inv(section, obj:id()) --> Просто спавн в нужный ящик с таким-то id level.client_spawn_manager():add( sobj.id, -1, spawn_callback, obj) --> Колбек на выход sobj (заспавненного предмета) в онлайн, obj в данном примере - клиентский объект ящика ... --\\ Колбек на появление заспавненого предмета в онлайне function spawn_callback(obj, id, item) obj:transfer_item(item, obj) end Единственное условие - при спавне предмета ящик должен находится в онлайне, либо быть в онлайне в будущем до того как игрок успеет сделать save\load или сменить уровень. Изменено 18 Июня 2014 пользователем *Shoker* Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О Мастер аномалий на свою заднюю точку. Поделиться этим сообщением Ссылка на сообщение
*Shoker* 322 Опубликовано 10 Июня 2015 (изменено) Вообще с пакетами там интересная ситуация в движке. Практически у всех игровых объектов есть две версии - клиентская и серверная (онлайн\оффлайн). Серверные это объекты, которые находятся на другом уровне, либо далеко от игрока (упрощённо), а клиентские это те, которые активны в данный момент. Серверный объект существует всегда, а клиентский лишь на уровне с игроком. Далее к делу: STATE_Write используются (если я ничего не путаю) лишь во время перехода объекта в оффлайн (тут правда на 100% не уверен) и в момент сохранения игры. + иногда при создании объекта. Его суть собственно - записать в сохранение те данные серверного объекта, которые точно нужно хранить. STATE_Read аналогично - при загрузке сохранения считывает данные из него в серверный объект. В остальных случаях они обычно не используются. UPDATE_-пакеты же обновляются (в зависимости от объекта) раз-два в секунду (+\-). Они служит для синхронизации (в реальном времени) некоторых данных клиентского объекта и серверного. (В том числе для мультиплеера, передавая данные между игроками) Например для физических объектов это их текущая линейная скорость, для оружия это текущее состояние, патроны и прочее. Эти данные не всегда сохраняются в сейве (для серверного объекта), но всегда передаются между игроками в мультиплеере. То-есть они обрабатывают те данные, которые нужно обновлять как можно чаще и передавать между игроками. Отсюда и название - update. Кстати по функциям net_Export\net_Import - это как раз те функции, которые собирают\считывают UPDATE_ - пакет. Они экспортированы в Lua и через них можно там в реальном времени этот UPDATE_- пакет править или считывать. Ещё стоит учесть что у клиентских объектов также есть своя функция save\load. При сохранении игры идёт запись данных всех серверных объектов, а потом запись данных всех клиентских (которые существовали на момент сохранения) Соответственно при загрузке игры этот клиентский объект сперва считывает данные из своего серверного объекта, а потом считывает\перезаписывает их сохранёнными данными клиентского объекта. (они имеют приоритет) ------------------------------------------------------- Собственно основная соль в том что в UPDATE-пакетах можно получить доступ к данным, которых нет в STATE-пакетах. Но нужно учитывать что эти данные обновляются с различной небольшой задержкой. Изменено 10 Июня 2015 пользователем *Shoker* 1 2 2 Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О Мастер аномалий на свою заднюю точку. Поделиться этим сообщением Ссылка на сообщение
*Shoker* 322 Опубликовано 10 Июня 2015 (изменено) @Dennis_Chikin, Ну всё правильно. save\load сохраняет в сейв только данные клиентских объектов которые в онлайне. Соответственно если клиентский объект ушёл в оффлайн => он удалился (?), и сохранять у него нечего. Ему на замену приходит серверный объект у которого свой метод сохранения. Я не знаю что там насчёт ТЧ, но в ЗП в этих случаях (кажется) помогала функция серверного объекта keep_saved_data_anyway() - должна возвращать true (в ЗП есть примеры). Тогда там (по моему) данные даже при смене локации сохранялись, но опять же очень давно это всё проверял. Изменено 10 Июня 2015 пользователем *Shoker* Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О Мастер аномалий на свою заднюю точку. Поделиться этим сообщением Ссылка на сообщение
*Shoker* 322 Опубликовано 10 Июня 2015 Ну вот в ЗП я сохранял данные и столкнулся с похожей проблемой, keep_saved_data_anyway() мне помог, но как - уже не помню . В ЗП с этим есть очень неприятный баг к слову. На оружие можно установить разные типы прицелов (ночной, с увеличением и прочее) Так вот - тип прицела сохраняется ТОЛЬКО в клиентском объекте оружия (в save\load). Но в серверном объекте про это забыли. Поэтому пока оружие в инвентаре ГГ или рядом с ним - при сохранениях и переходе с локации на локацию всё хорошо. Но стоит бросить оружие, уйти далеко и вернуться - на оружии прицел сбросится на стандартный. 1 Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О Мастер аномалий на свою заднюю точку. Поделиться этим сообщением Ссылка на сообщение