Struck 61 Опубликовано 10 Июня 2015 Поделиться Опубликовано 10 Июня 2015 @abramcumner, ты серьезно? Ссылка на комментарий
*Shoker* 322 Опубликовано 10 Июня 2015 Поделиться Опубликовано 10 Июня 2015 (изменено) @Dennis_Chikin, Ну всё правильно. save\load сохраняет в сейв только данные клиентских объектов которые в онлайне. Соответственно если клиентский объект ушёл в оффлайн => он удалился (?), и сохранять у него нечего. Ему на замену приходит серверный объект у которого свой метод сохранения. Я не знаю что там насчёт ТЧ, но в ЗП в этих случаях (кажется) помогала функция серверного объекта keep_saved_data_anyway() - должна возвращать true (в ЗП есть примеры). Тогда там (по моему) данные даже при смене локации сохранялись, но опять же очень давно это всё проверял. Изменено 10 Июня 2015 пользователем *Shoker* Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О Мастер аномалий на свою заднюю точку. Ссылка на комментарий
abramcumner 1 145 Опубликовано 10 Июня 2015 Поделиться Опубликовано 10 Июня 2015 (изменено) @Struck, абсолютно. Был вопрос: где можно прочитать про отличия UPDATE_Read/Write от STATE_Read/Write нетпакета?Ответ: acdc.plформально правильный, там действительно можно увидеть отличия между функциями. Правда отличие вида: функции с разными названиями пишут/читают разные данные, думаю, было очевидно вопрошающему и без этого. Так что анекдот как раз очень в тему Ответ *Shoker*`а на мой взгляд гораздо уместнее. Изменено 10 Июня 2015 пользователем abramcumner 1 1 Ссылка на комментарий
Dennis_Chikin 3 658 Опубликовано 10 Июня 2015 Поделиться Опубликовано 10 Июня 2015 "keep_saved_data_anyway()" - а толку ? Именно что удаляют, и сохранять ни кто ничего даже и не собирался. Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
*Shoker* 322 Опубликовано 10 Июня 2015 Поделиться Опубликовано 10 Июня 2015 Ну вот в ЗП я сохранял данные и столкнулся с похожей проблемой, keep_saved_data_anyway() мне помог, но как - уже не помню . В ЗП с этим есть очень неприятный баг к слову. На оружие можно установить разные типы прицелов (ночной, с увеличением и прочее) Так вот - тип прицела сохраняется ТОЛЬКО в клиентском объекте оружия (в save\load). Но в серверном объекте про это забыли. Поэтому пока оружие в инвентаре ГГ или рядом с ним - при сохранениях и переходе с локации на локацию всё хорошо. Но стоит бросить оружие, уйти далеко и вернуться - на оружии прицел сбросится на стандартный. 1 Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О Мастер аномалий на свою заднюю точку. Ссылка на комментарий
Struck 61 Опубликовано 10 Июня 2015 Поделиться Опубликовано 10 Июня 2015 Правда отличие вида: функции с разными названиями пишут/читают разные данные, думаю, было очевидно вопрошающему и без этого. В этом и суть ответа, если не вникать как оно все там . Ссылка на комментарий
Winsor 177 Опубликовано 10 Июня 2015 Поделиться Опубликовано 10 Июня 2015 Спасибо всем за информативные ответы. Вникать пытаюсь, так как не понимаю до конца как все работает... К сожалению - после прочтения Ваших постов вогнал себя в непонимание еще больше. Задача - сохранять свои данные (например, пару строка-число) в некоем буфере. Пытаюсь использовать для данной задачи net_packet self.storage - заспавленный на уровне объект, стою возле него, т.е. он в онлайне... local s_storage=alife():object(self.storage:id()) local packet=net_packet() далее заполняю packet стандартными заголовками (vertex,custom_data,visual и т.д.) packet:w_tell() = 108 байт пишу далее свои данные (несколько таких пар) packet:w_stringZ(section) packet:w_u8(tp) packet:w_tell() = 140 байт packet_size=packet:w_tell() packet:r_seek(0) log(packet:r_tell().." "..packet:w_tell()) - в логе 0 140 s_storage:STATE_Read(packet,packet_size) log(packet:r_tell().." "..packet:w_tell()) - в логе 108 140 т.е. мои данные не записались в пакет объекта... почему? где ошибка в моих рассуждениях? Благодарю за любую информацию. Ссылка на комментарий
Kirgudu 1 204 Опубликовано 11 Июня 2015 Поделиться Опубликовано 11 Июня 2015 (изменено) self.storage - заспавленный на уровне объект, стою возле него, т.е. он в онлайне... Изменение пакета возможно только для серверных объектов, находящихся в оффлайне. Иначе серверный объект постоянно обновляется данными клиентского - отсюда и несоответствие реальной и ожидаемой длин считанных из пакета в объект данных. Кстати, какой класс у твоего объекта? Если специальный, только для хранения твоих данных, имеет смысл добавить в его биндер методы, препятствующие переходу объекта в онлайн. Примерно так: function se_custom_storage:can_switch_online() return false -- никогда не выходить в онлайн end function se_custom_storage:can_switch_offline() return true -- всегда переходить в оффлайн end Если же один из стандартных, перед записью данных объект следует принудительно перевести в оффлайн: function switch_offline(sobj_id) local sim = alife() if sim and sim:object(sobj_id) then sim:set_switch_online(sobj_id, false) sim:set_switch_offline(sobj_id, true) end end затем, после записи данных, перевести аналогичным образом обратно в онлайн. А вообще, для хранения своих данных лучше воспользоваться полностью отлаженными решениями, которые можно найти здесь, на форуме. Навскидку можно предложить альтернативные реализации от @Malandrinus (используется, если не ошибаюсь, в OGSE) и @Artos (делаем поиск по «se_stor»). Изменено 11 Июня 2015 пользователем Kirgudu 1 1 2 Инструмент Ссылка на комментарий
Winsor 177 Опубликовано 12 Июня 2015 Поделиться Опубликовано 12 Июня 2015 Подскажите пожалуйста, каким образом можно "дождаться" перехода объекта в офлайн после вызова alife():set_switch_online(sobj.id, false) alife():set_switch_offline(sobj.id, true) не передавая управление из своей функции? while sobj.online do sleep() ?????? end Ссылка на комментарий
Shkiper2012 35 Опубликовано 16 Июня 2015 Поделиться Опубликовано 16 Июня 2015 (изменено) Доброго времени суток. Вопрос: можно ли установить "состояние"(condition) предмету на классе "антирада"? Если - да, то как это корректно сделать. local sim = alife()local pos = db.actor:position()local lvid = db.actor:level_vertex_id()local gvid = db.actor:game_vertex_id()local pid = db.actor:id()local obj = sim:create("Мой предмет section", pos, lvid, gvid, pid)if obj then obj:set_condition(0.5)end Либо так:local se_obj = (alife():object(obj:id())if se_obj then se_obj:set_condition(0.5)endИтог: вылет со строкой: attempt to call method 'condition' (a nil value) Мне это нужно для того, чтобы: несколько таких предметов не группировались в инвентаре ГГ, для отслеживание их состояния, а так же возможность их использования. Если подобное уже описывалось на форуме - ткните куда копать. Поиск не выдал ничего конкретного(либо я плохо искал.). Заранее признателен. Изменено 16 Июня 2015 пользователем Shkiper2012 Адаптация мода "AtmosFear" для мода "Боевая Подготовка" v.2.0.2. Адаптация мода "Магазинное питание" для мода "Боевая Подготовка" v.2.0.2. Ссылка на комментарий
UnLoaded 313 Опубликовано 16 Июня 2015 Поделиться Опубликовано 16 Июня 2015 @Shkiper2012 Ф-ция set_condition() - это метод класса game_object, т.е. клиентских объектов в игре. А ты пытаешься применять ее к серверным объектам, alife():create и alife():object возвращают серверные объекты. Получи клиентский объект, допустим так: level.object_by_id(se_obj.id) и уже ему устанавливай состояние. 1 Ссылка на комментарий
Struck 61 Опубликовано 16 Июня 2015 Поделиться Опубликовано 16 Июня 2015 @UnLoaded, лучше через коллбек на выход в онлайн. @Shkiper2012, используй ХЕ или 7, там есть удобные функции для установки группируемости объектов (тоже клиентских как не трудно догадаться), это к вопросу о нормальном методе. С состоянием тут лучше не плясать. 1 Ссылка на комментарий
RayTwitty 492 Опубликовано 16 Июня 2015 Поделиться Опубликовано 16 Июня 2015 Мне это нужно для того, чтобы: несколько таких предметов не группировались в инвентаре ГГ Двиг не группирует предметы с различием состояния менее 0.01, т.е. если изменишь его на 0.0099 то ничего не выйдет. Просто для справки. 1 1 Ссылка на комментарий
Struck 61 Опубликовано 17 Июня 2015 Поделиться Опубликовано 17 Июня 2015 Двиг не группирует предметы с различием состояния менее 0.01 Группирует. Более - не группирует. Просто для справедливости. @Shkiper2012, в рамках стандартного движка самый простой и нормальный вариант это создать нужное количество секций, прям от парента создаешь полностью только секцию меняешь и все. Вроде: [section_1]:parent [section_2]:parent Он их группировать разумеется не будет. Но пока не поздно еще раз советую глянуть в сторону 7 движка и сделать на флагах, куда меньше мозги будешь парить, две однострочных функции решат эту канитель . 1 Ссылка на комментарий
RayTwitty 492 Опубликовано 17 Июня 2015 Поделиться Опубликовано 17 Июня 2015 Группирует. Более - не группирует. Просто для справедливости.Да, перепутал)) Не группирует, если различие больше 0.01. Ссылка на комментарий
Shkiper2012 35 Опубликовано 18 Июня 2015 Поделиться Опубликовано 18 Июня 2015 (изменено) Признателен всем ответившим. Для себя нашел такой выход, как создание "нового" класса на базе "object_binder" для нужного предмета. И уже в нем задаю нужные параметры. Хотя ХЕ и 7, тоже интересуюсь, но пока только хожу около них, как кот у горячей каши, а "съесть" не могу. =) Ещё такой вопрос: как отловить момент перезарядки, разрядки и момент смены типов патронов у оружия? Есть ли флаг или что-то подобное для этого? Я сейчас "ловлю" последний патрон в стволе, но может быть есть более изящный способ? Для версии ТЧ 1.0006, нужно для манипуляций с оружием. Изменено 11 Июля 2015 пользователем Dennis_Chikin Адаптация мода "AtmosFear" для мода "Боевая Подготовка" v.2.0.2. Адаптация мода "Магазинное питание" для мода "Боевая Подготовка" v.2.0.2. Ссылка на комментарий
RayTwitty 492 Опубликовано 20 Июня 2015 Поделиться Опубликовано 20 Июня 2015 Ещё такой вопрос: как отловить момент перезарядки, разрядки и момент смены типов патронов у оружия? Есть ли флаг или что-то подобное для этого? Я сейчас "ловлю" последний патрон в стволе, но может быть есть более изящный способ?Если используешь ХЕ, там есть метод получения текущего стейта худа оружия: uint<state> get_hud_item_state() - возвращает номер текущего стейта. пример: local weapon_states = { idle = 0, fire = 1, fire2 = 2, reload = 3, showing = 4, hiding = 5, hidden = 6, misfire = 7, mag_empty = 8, switch = 9 } local state = db.actor:active_item():get_hud_item_state() if state == weapon_states.reload then ... end 1 1 Ссылка на комментарий
HellRatz 2 814 Опубликовано 22 Июня 2015 Поделиться Опубликовано 22 Июня 2015 (изменено) Надеюсь, в ту тему пишу, вроде не совсем "Ковыряемся в файлах".В общем когда-то применил к скрипту кодировку, а может что-другое наворотил, и теперь не могу вернуть его [скрипт] обратно в норм. состояние. Суть в том, что при определенной кодировке, сообщения на русском языке в игре отображаются крякозябрами, а при другой (UTF-8 или что-то такое, не помню) игра вообще вылетает при отрабатывании этого скрипта. Ну, вопрос думаю понятен: в какой кодировке должен быть скрипт, чтобы в игре норм отображался русский язык?https://ru.wikipedia.org/wiki/Windows-1251dc Изменено 11 Июля 2015 пользователем Dennis_Chikin GTA 3 MAP X-Ray | NFS U:2 MAP X-Ray | RTCW MAP X-Ray | L2D | Раритетные моды на моем облаке — на память о былом. Ссылка на комментарий
_Val_ 2 225 Опубликовано 22 Июня 2015 Поделиться Опубликовано 22 Июня 2015 @HellRatz, как-то вот так.. 2 Ссылка на комментарий
Winsor 177 Опубликовано 23 Июня 2015 Поделиться Опубликовано 23 Июня 2015 Добрый день , уважаемые. каким образом можно из объекта получить доступ к биндеру этого объекта? function my_binder:__init(obj) super(obj) self.my_field = {tbl} end new_binder = my_binder(obj) obj:bind_object(new_binder) необходимо получить доступ к полю my_field биндера. Благодарю! Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти