AndreySol 215 Опубликовано 10 Сентября 2012 Поделиться Опубликовано 10 Сентября 2012 А в чем смысл такого способа записи в нет-пакет с помощью UPDATE_Write ? Просто, сколько читаю разделы форума, ни разу не попадался такой вариант заполнения нет-пакета данными. Объясните плиз. Ссылка на комментарий
KD87 718 Опубликовано 10 Сентября 2012 Поделиться Опубликовано 10 Сентября 2012 (изменено) AndreySol, в ЗП позиция записи при создании пакета не обязательно автоматически установится в ноль. Поэтому приходится устанавливать ее вручную. Или тебя смущает применение метода update_write? Изменено 10 Сентября 2012 пользователем KD87 Ссылка на комментарий
Artos 99 Опубликовано 10 Сентября 2012 Поделиться Опубликовано 10 Сентября 2012 (изменено) AndreySol, хм, и где ты увидел нечто такое, чего не встречал ранее? Ни разу не видел, что перед записью параметров объекта нет-пакету прописывается "писать от начала"? Прям почти как в басне: "Слона то я и не приметил" В самой оригинальной игре и в 90% модов вообще нет записи/чтения UPDATE_Write/Read - поэтому тебя бы спросить на кой тебе он сдался и чего ты к нему прилип? ;-) KD87, (уточно и дополню) не только в ЗП, но и в ЧН нет-пакеты далеко не всегда объявляются с началом от 0-го ... Да еще и в ТЧ вскорости предстоит нам такое же наблюдать, так что пора привыкать как "правильно", а не как легче. Изменено 10 Сентября 2012 пользователем Artos "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
AndreySol 215 Опубликовано 10 Сентября 2012 Поделиться Опубликовано 10 Сентября 2012 в ЗП позиция записи при создании пакета не обязательно автоматически установится в ноль. Поэтому приходится устанавливать ее вручную. Или тебя смущает применение метода update_write? Ах вон оно что ! Такой финт - просто способ подстраховаться на случай неверной установки позиции самим движком. А я уж подумал что он имеет какой-то сакральный смысл, который я никак понять не могу из пояснений Artos'а. Заготовка, предложенная Artos'ом - не полностью рабочая. При переключении на подствол, таблица не заполняется и все поля nil. Оказалось, из-за того что, num_items равно 1. Получилось, что это и есть флаг вкл\выкл подствола. Поменял считывание параметров местами - все заработало как надо. 1 Ссылка на комментарий
Artos 99 Опубликовано 10 Сентября 2012 Поделиться Опубликовано 10 Сентября 2012 (изменено) AndreySol, твоя слепота и глухота удивляют ... Для кого было написано это: 1. При получении чистого нет-пакета ( pk = net_packet() ) важно(!) точно знать где установлена позиция записи ( pk:w_tell() ), т.к. последующая запись параметров объекта (в данном случае оружия) будет записываться именно с этим смещением. Если для чистого ТЧ это значеник как правило равно 0, то для ЧН/ЗП они нередко совершенно иные. Да и ... для ТЧ ничто не гарантирует, что будет записываться именно с нулевой позиции.Т.о. нормальный программер/модмейкер сам установит позицию чтения (например pk:begin(0) ) и будет считывать именно от установленной позиции (в примере это будет +2 => pk:r_seek(2) ), а не полагаться на удачу ... или ты отсюда только pk:begin(0) удосужился скопипастить, не утруждая чтением сути? И неужели не доходит даже русским языком прописанное в комменте заготовки: --/ читать пакет нужно более продвинутым способом! ? и, пытаясь в очередной раз "поменять считывание параметров" ты получаешь видимость результата, а не сам результат. На этом заканчиваем! Учитывая, что пока кураторские опции недоступны - буду просто минусовать подобные посты (может это заставит вначале читать и думать), а почищу позже ... Изменено 10 Сентября 2012 пользователем Artos "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
Magnus1 0 Опубликовано 10 Сентября 2012 Поделиться Опубликовано 10 Сентября 2012 Нашел в оригинальном ТЧ вот ткаую функцию, когда на блокпосте Долга в баре у главного спрашиваешь о местных достопримечательностях: function locate_bar_bar(actor,npc) local sim = alife() if sim == nil then return end local obj = sim:story_object(570) if obj then level.map_add_object_spot(obj.id, "crlc_small", "bar_bar_locator") end end Скажите, ка использовать ее в своих целях? Я понимаю что через <action></action>, но я не понимаю какие условия нужно предоставить, что бы отметка появилась на нужной мне области? Ссылка на комментарий
Artos 99 Опубликовано 10 Сентября 2012 Поделиться Опубликовано 10 Сентября 2012 (изменено) Magnus1, Во-первых, никто не знает о "твоих целях", поэтому про как использовать можно писать трактаты. Во-вторых, при чем тут тэги <action>? function locate_bar_bar(actor,npc) - обычная в общем то функция и использовать ее можно откуда угодно, хоть из диалогов, хоть напрямую из скриптов. Условие же тоже обычное: раз функция ждет аргументы - то ты и обязан их дать. По коду видно, что первый аргумент ('actor') - не используется, а вот вторым ('npc') ты должен давать клиентский объект непися. Замечу, что функция работатет ТОЛЬКО для НПС, имеющего стори-ид 570, и если захотелось для своих целей использовать нечто иное - потребуется сдублировать функцию, проставив в нее свой story_id, или же видоизменить ее и задавать нужный аргументом на входе. Изменено 10 Сентября 2012 пользователем Artos "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
KD87 718 Опубликовано 10 Сентября 2012 Поделиться Опубликовано 10 Сентября 2012 AndreySol, да никакой это не флаг подствола. Когда num_items не нулевой, перед куском пакета cse_alife_item_weapon есть еще апдейт-параметры cse_alife_inventory_item. Верно тебе Artos говорит - читаешь не правильно и не хочешь разбираться. Смотри код acdc, там все это есть. Или пользуйся готовыми модулями разбора нет-пакета. Ссылка на комментарий
Magnus1 0 Опубликовано 10 Сентября 2012 Поделиться Опубликовано 10 Сентября 2012 Artos, вообще я имел ввиду, как мне можно с помощью этой функции(ну или подобной этой) вывести такую же отметку на карту. Именно вот на определенный участок. Что мне нужно сделать помимо вызова такого скрипта? Artos, вообще я имел ввиду, как мне можно с помощью этой функции(ну или подобной этой) вывести такую же отметку на карту. Именно вот на определенный участок. Что мне нужно сделать помимо вызова такой функции? Ссылка на комментарий
Artos 99 Опубликовано 10 Сентября 2012 Поделиться Опубликовано 10 Сентября 2012 (изменено) Magnus1, вообще эта функция ставит метку НЕ на карту/участок, а на НПС с заданным сидом (story_id). Как уже выше пояснил, именно эту функцию ты не можешь использовать для других (отличных от 570) сидов и требуется написать свой аналог. Например такой: function locate_my_npc(story_id,npc) local sim = alife() if sim and type(story_id) == 'number' then local obj = sim:story_object(story_id) if obj then level.map_add_object_spot(obj.id, "crlc_small", "my_NPC_locator") end endend - где 1-м аргументом идет требуемый сид, а за ним объект проверяемого НПС. И более ничего не требуется, кроме вызова этой функции с заданными аргументами из требуемого места. Изменено 10 Сентября 2012 пользователем Artos "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
AndreySol 215 Опубликовано 10 Сентября 2012 Поделиться Опубликовано 10 Сентября 2012 да никакой это не флаг подствола. Когда num_items не нулевой, перед куском пакета cse_alife_item_weapon есть еще апдейт-параметры cse_alife_inventory_item. Получается, что при переключении на подствол, меняется структура нет-пакета ? Ссылка на комментарий
KD87 718 Опубликовано 10 Сентября 2012 Поделиться Опубликовано 10 Сентября 2012 AndreySol, структура пакета меняется в данном случае в зависимости от upd:num_items. Какие действия в игре меняют этот параметр объекта - сказать не могу. Ссылка на комментарий
Artos 99 Опубликовано 10 Сентября 2012 Поделиться Опубликовано 10 Сентября 2012 (изменено) Вынужден признать, что опять наступил на грабли, в которые почти год назад наступали в топике по Lua. Разработчики игры (GSC) именно для оружия с подствольниками учудили оружейный параметр вставить в самое начало, а не пристыковать к "оружейной секции". Т.о. именно его нужно считывать первым, а уже за ним остальное. Это единственное исключение из правил, когда секция параметров разорвана. Правленый пример выглядит так: local np = net_packet() --/ получаем 'чистый' нет-пакетnp:w_begin(0) --/ писАть будем в самое начало (+2 байта)se_obj:UPDATE_Write(np)np:r_seek(2) --/ ставим чтение на 3-й байт, пропуская первые дваtable_param = {} --/ писать параметры будем сюда--/ для 'с подствольниками' считываем их первый параметрif clsid_sobj == clsid.wpn_ak74_s or clsid_sobj == clsid.wpn_groza_s then table_param["upd_grenade_mode"] = np:r_u8()endlocal num_items = np:r_u8() --/ первый параметр секции 'cse_alife_inventory_item'if num_items == 0 then --/ если 0 - то далее следуют 'оружейные' параметры --/ читаем общие для всего оружия параметры table_param["upd_condition"] = np:r_u8() table_param["upd_weapon_flags"] = np:r_u8() table_param["upd_ammo_elapsed"] = np:r_u16() table_param["upd_addon_flags"] = np:r_u8() table_param["upd_ammo_type"] = np:r_u8() table_param["upd_weapon_state"] = np:r_u8() table_param["upd_weapon_zoom"] = np:r_u8() table_param["upd_current_fire_mode"] = np:r_u8()else --/ читать пакет нужно более продвинутым способом!end AndreySol, структура пакета НЕ меняется, а меняется ее наполнение, т.е. кол-во байт и их значения зависят и от считанного num_items, увеличиваясь в кол-ве при неравенстве этого параметра нулю. KD87, в игре update-параметры оружия и в частности upd:num_items меняются в динамических ситуациях, когда оружие перемещается 'само-по-себе' (не имея владельца или независимо от него, в моменты хитов/смерти) или при смене аддонов/стрельбе/перезарядке/... и укладывается в пару текущих апдейтов игры. Т.о. наполнение пакета зависит от времени/ситуации... Изменено 10 Сентября 2012 пользователем Artos 1 "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
AndreySol 215 Опубликовано 10 Сентября 2012 Поделиться Опубликовано 10 Сентября 2012 Свет в конце туннеля начинает усиливаться :ny_ph34r_1: Еще несколько вопросов по нет-пекетам и не только: - к примеру в скрипте se_item.script можно для класса se_weapon_magazined добавить метод: function se_weapon_magazined:STATE_Write(packet) cse_alife_item_weapon_magazined.STATE_Write(self, packet) ................ end Если переработать выше"домучаный" нами код на чтение STATE-части пакета, то из имеющегося нет-пакета packet можно будет с его помощью прочитать параметры ? Экспериментировал с установкой параметров объектам через нет-пакет с переключением он-офф-он лайн, использовал модуль Artos'а. Выяснил, что обект, выложенный в какой-нить ящик переключить в офф-лайн не возможно. А если сам ящик переключить он-офф-он лайн ? Его содержимое, имеющее "разрешение" на переход в офф-он то-же переключится ? Еще обнаружил, что чем ближе предмет, который пытаемся переключить он-офф-он лайн, к актору(ГГ) тем хуже это получается - иногда параметры которые пытаюсь менять для теста не изменяются, или предмет не отрабатывает переключение с первого раза. Это особенность движка или же нужно смотреть в сторону object_flags ? Извиняюсь если уже достал, но как говорится "пока масть пошла..." Ссылка на комментарий
KD87 718 Опубликовано 10 Сентября 2012 Поделиться Опубликовано 10 Сентября 2012 (изменено) AndreySol, можно, почему же нельзя. C секцией M_SPAWN можно работать с помощью STATE_Read/STATE_Write, с M_UPDATE - UPDATE_Read/UPDATE_Write. Барахло в ящике может переходить в оффлайн только с ящиком. А ящики в сталкере (в модах, точнее) не переключаются в оффлайн (из-за acdc). В свое время bardak боролся с тормозами при переводе в онлайн ящиков с барахлом путем модифицирования object_flags этих ящиков при перепаковке спавна. С тех пор во всех версиях acdc это модифицирование и осталось. Изменено 10 Сентября 2012 пользователем KD87 Ссылка на комментарий
Artos 99 Опубликовано 10 Сентября 2012 Поделиться Опубликовано 10 Сентября 2012 (изменено) Отвечу иначе чем KD87: И добавить НЕЛЬЗЯ, т.к. метод se_weapon_magazined:STATE_Write(packet) изначально существует (унаследован) конструктором класса, а значит можно только ЗАМЕНИТЬ на свой. И читать с помощью вытащенного наружу метода можно, но ... осторожно. ;-) Вот тут то как раз "экскременты" чреваты и вылетами и битыми сэйвами. По сути придется не просто читать, а читать так, чтобы не запортить исходный пакет с данными ... восстанавливая позиции чтения/записи в исходные. Да и, еще немало удивлялок ждет "читателя", обнаружив что время (не)читать тоже нужно как-то определять. ;-) И, AndreySol, не нужно "нас/нами" о своих потугах писать. И не Николай II, вроде как ты, и нам не ведомо, что и как ты там "пытаемся переключить". да еще с какого-то "первого" раза. Переключения он-офф-лайн синхронизированы с апдейтами игры и конечно же периоды для каждого предмета зависят от расстояния до актора. О каком-то "с первого раза" мне вообще неясно ... да и не стОит пояснять, т.к. у меня уже "масть пропала", а чревато еще на пару-тройку страниц растолковываний. Так что я - "пас"... домучивай далее по крайней мере без меня. Изменено 10 Сентября 2012 пользователем Artos "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
serega-gamer 0 Опубликовано 10 Сентября 2012 Поделиться Опубликовано 10 Сентября 2012 Всем привет! Подскажите, пожалуйста, можно ли как то отследить открытие инвентаря мёртвого npc главным героем? ЗП Реклама любых модов бесплатно на моём сайте писать в личку Ссылка на комментарий
Artos 99 Опубликовано 10 Сентября 2012 Поделиться Опубликовано 10 Сентября 2012 serega-gamer, вопрос для топиков по ковырянию, куда и следует его адресовать. Отследить можно: - при обыске тела срабатывает коллбэк 'use_callback' и соответственно работает схема "use" (xr_use.script); - при открытии окна при обыске тела выдается инфопоршень "ui_car_body", а при его закрытии - "ui_car_body_hide". "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
serega-gamer 0 Опубликовано 10 Сентября 2012 Поделиться Опубликовано 10 Сентября 2012 Artos В ЗП эти поршни не работают, их даже нет в xrGame.dll и так же нету скрипта xr_use . Извеняюсь что не туда написал. Реклама любых модов бесплатно на моём сайте писать в личку Ссылка на комментарий
Struck 61 Опубликовано 11 Сентября 2012 Поделиться Опубликовано 11 Сентября 2012 Artos, (по первому) а как тогда в симбионе работают подобного рода проверки?(н-р isGrenade) Просто как ты говоришь - я так и делал, Но работает не так как мне надо. Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти