*Shoker* 322 Опубликовано 20 Ноября 2011 Поделиться Опубликовано 20 Ноября 2011 (изменено) Кто нибудь знает как получить точно кол-во патронов как в стволе так и в гранатомёте одновременно? Соль в чём, есть ствол с гранатомётом. Патроны заряжены и туда и туда. При использовании нет-пакетов\стандартных функций возвращаются тока патроны из текущего режима (тоесть если режим стрельбы - то вернётся размер магазина, если режим гранатометания, вернёт кол-во гранат в стволе) Я думаю, может можно как то через нет пакет\скриптовые функции переключить ствол в нужный режим, узнать кол-во патронов, переключить в другой режим и там тоже узнать. Но вот вопрос, если я изменю например в нет пакете параметр updgrenade_mode (отвечает за то, включён ли режим гранатомёта), в игре ствол автоматически изменится на новый режим? Или нужно переводить его в online\offline. Может можно это как то обойти? Игра ЗП. UPD: В принципе уже так срочно не надо, нашёл как обойти проблему, но если у кого то есть какие то мыслишки, буду рад. *** Насколько вредно частое чтение нет-пакета? В идеале - на каждый апдейт читается нет пакет 1 объекта. Изменено 20 Ноября 2011 пользователем *Shoker* Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О Мастер аномалий на свою заднюю точку. Ссылка на комментарий
smeh 1 Опубликовано 20 Ноября 2011 Поделиться Опубликовано 20 Ноября 2011 Хорошо. Вопрос по теме- заспавненый мной непись исчез после того как я ушел на другую локу, в чем причина? Как прописывал непися я выкладывал на предыдущей странице. подскажите, что делать? Саму торговлю содрал с бармена в отдельную папку shop_esc_chemodan.ltx, а в паке trader_chemodan прописал вот так : [trader] buy_condition = trader_generic_buy sell_condition = {+esc_kill_bandits_quest_done} trader_after_fabric_sell, trader_start_sell buy_supplies = {+esc_kill_bandits_quest_done} supplies_after_fabric, supplies_start #include "shop_esc_chemodan_npc\chemodan_buy.ltx" #include "shop_esc_chemodan_npc\chemodan_supl.ltx" #include "shop_esc_chemodan_npc\chemodan_trade.ltx" Ссылка на комментарий
Artos 99 Опубликовано 20 Ноября 2011 Поделиться Опубликовано 20 Ноября 2011 *Shoker*: Насколько вредно частое чтение нет-пакета? Ни насколько, даже на износ твоего жесткого диска это не влияет, а для ОЗУ подобные чтива тем более по барабану. ;-) Вредно использовать кривые алгоритмы, которые оперируют подобными "идеальными" перечтениями на каждом апдейте ... Не следует, также, ожидать наличия "одновременных" методов получения 'всего и вся'. Да и неплохо бы тебе все же различать клиентские объекты с серверными и особенности для каждого класса. Нет-пакеты читают/меняют параметры серверных объектов и ожидать "автоматически изменится" для клиентского объекта - заблуждение. Не зря же, например, при переодевании костюма тому же НПС - его переводят в оффлан и обратно. Конечно некоторый "автоматизм" заложен и между клиентским и серверным объектами происходят процессы "net_Export/net_Import", но ... их алгоритм во многом нам и неизвестен и неподвластен. smeh Чтобы твой НПС не уходил в "неизвестность" - почитай про гулаги, работы и т.п. Чтобы твой НПС начал торговать - почитай про схему торговли и, посмотрев как сделано у торговцев в оригинале иль модах, делай по аналогии. "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
Ааз 489 Опубликовано 21 Ноября 2011 Поделиться Опубликовано 21 Ноября 2011 Artos, к сожалению не получается, ствол так и спавнится убитым в хлам, upd:condition ставили и 1 и 255, все равно, в чем еще может быть причина? Ссылка на комментарий
Artos 99 Опубликовано 21 Ноября 2011 Поделиться Опубликовано 21 Ноября 2011 (изменено) Ааз, приведи тут полную секцию твоего АК, которую добавляешь в all.spawn. Посмотрим так сказать в 'реалии'. Ну а еще в чем может быть причина - это только погадалки. Например, если в моде имеются скрипты, которые работают с нет-пакетами и некорректно их изменяют. Или, вместо cse_alife_item_weapon_magazined используется cse_alife_item_weapon_magazined_w_gl (или наоборот), что приводит к путанице 'upd.grenade_mode' и 'upd.condition'. Изменено 21 Ноября 2011 пользователем Artos "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
Ааз 489 Опубликовано 21 Ноября 2011 Поделиться Опубликовано 21 Ноября 2011 Artos, хорошо, сегодня не смогу, это не на моем компе, а завтра выложу, изменяем all.spawn OGSE 0692. Ссылка на комментарий
Artos 99 Опубликовано 21 Ноября 2011 Поделиться Опубликовано 21 Ноября 2011 (изменено) Ааз, заодно уточни: 1. Начинаете игру и когда ГГ оказывается у ствола - после подбора видно по характеристикам, что ствол "убитый". Или еще какие-то манипуляции с оружием есть в моде? 2. Если такой же ствол скриптом заспавнить в игру - с ним те же проблемы или нет, т.е. этот полностью исправный? P.S. Чтобы не терять время, как будет возможность кинь в ЛС секцию из all.spawn'a (как прописываете), секцию конфига этого ствола (если конечно таковая в конфигах есть) и собственно модель с тектурами, которую прописываете. Учитывая, что похоже многие модификации АК74 делают на классе LR300, похоже именно из-за 'подмены' класса вместо 'upd.condition' считывается иной байт (upd.weapon_flags), т.к. для класса 'WP_AK74' впереди считывается 'upd.grenade_mode' и только потом 'upd.condition' . Изменено 22 Ноября 2011 пользователем Artos "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
Dimonich 0 Опубликовано 22 Ноября 2011 Поделиться Опубликовано 22 Ноября 2011 Люди,вот такой вопрос:подключаю локацию из чн в зп через прогу от амк.Воспользовавшись прогами от kalinin11 для массовой замены вертексов можно ли сохранить спавн? Не забывай пробелы. Cyclone Ссылка на комментарий
*Shoker* 322 Опубликовано 22 Ноября 2011 Поделиться Опубликовано 22 Ноября 2011 (изменено) В принципе да. Тебе по сути надо просто у всех предметов изменить только game_vertex, level_vertex вроде можешь не трогать. Тоесть ты подключаешь локацию, далее настраиваешь ACDC, разбираешь свой спавн с новой локацией, потом обычным ACDC разбираешь спавн от той игры, откуда переносил локацию, копируешь всё что нужны в отдельный файл. А дальше меняешь game_vertex-ы, и изменённые данные из файла переносишь в свой all.spawn... По идее должно работать. А вообще может сейчас есть и более удобные методы. Изменено 22 Ноября 2011 пользователем *Shoker* Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О Мастер аномалий на свою заднюю точку. Ссылка на комментарий
_Призрак_ 11 Опубликовано 22 Ноября 2011 Поделиться Опубликовано 22 Ноября 2011 Как правильно удалить предмет из тайника? Нужно ли проводить какие нибудь манипуляции перед alife():release? Freedom Ссылка на комментарий
KD87 718 Опубликовано 22 Ноября 2011 Поделиться Опубликовано 22 Ноября 2011 *Shoker*, universal acdc имеет функцию parse как раз для замены вертексов в спавне Ссылка на комментарий
Dennis_Chikin 3 658 Опубликовано 22 Ноября 2011 Поделиться Опубликовано 22 Ноября 2011 Как правильно удалить предмет из тайника? Нужно ли проводить какие нибудь манипуляции перед alife():release? Если в это время из него ни кто ничего не вытаскивает - в любой момент можно. А вот с удалением неписей из онлайна, включая трупы, пронаблюдал забавный эффект: "- Critical: SMapLocation binded to non-existent object id=xxxxx", причем id - внезапно, патроны, и только они, заспавненные через профиль. Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
Artos 99 Опубликовано 22 Ноября 2011 Поделиться Опубликовано 22 Ноября 2011 (изменено) Dennis_Chikin, уже не первый раз читаю упоминания о проблемах с патронами ... Ребыта-а-а, разбирайтесь со сторонним скриптом, манипулирующем у вас патронами помимо штатных иль движка. А "твой забавный эффект" происходит от того, что, например, при убийстве НПС и его удалении, нередко бывает что, покойник стрелял из автомата и этот автомат (принадлежащий ему) продолжает неккоторое время еще стрелять ... Вот и эффект "посмертный и забавный", приводящий к ругани в логах и вылетам ... _Призрак_, правило довольно просто для всех объектов: можешь удалять любой объект, который не задействован другими скриптами или объектами. Под 'задействован' подразумеваются наличие коиентского объекта у удаляемого серверного и трансфер этого объекта, вхождение в 'разрешенные/запрещенные' рестрикторы, отыгрышь партиклов ... Изменено 22 Ноября 2011 пользователем Artos "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
AndreySol 215 Опубликовано 22 Ноября 2011 Поделиться Опубликовано 22 Ноября 2011 В окне инвентаря, в списке имеющихся предметов - выбрали мышей к примеру патроны. После этого можно как-то скриптово получить этот выбранный объект ? В описании game_object нашел: int object_count() -- количество объектов в инвентаре game_object* object(string) -- возвращает объект из инвентаря по секции game_object* object(number) -- возвращает объект из инвентаря по индексу По индексу роде можно получить, но как тогда узнать индекс выбранного предмета ? Ссылка на комментарий
Artos 99 Опубликовано 22 Ноября 2011 Поделиться Опубликовано 22 Ноября 2011 AndreySol, никак. Сие (выбор и пр.) все происходит внутри движка и внешним скриптам не за что зацепиться. Индексы, возвращаемые game_object* object(number) - никак не завязаны на выборе предмета в окне. "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
_Призрак_ 11 Опубликовано 22 Ноября 2011 Поделиться Опубликовано 22 Ноября 2011 Есть переменная, которая ссылается на функцию. Как узнать имя функции на которую ссылается это переменная? Freedom Ссылка на комментарий
Artos 99 Опубликовано 22 Ноября 2011 Поделиться Опубликовано 22 Ноября 2011 (изменено) Ответ на уже не раз встречающиеся вопросы по поводу "порчи" новых стволов при спавне через all.spawn: Нередко модмейкеры пробуют подменить имеющиеся в all.sapwn'е стволы своими моделями или заспавнить новые и ... допускают ошибки. Например, в игре имеется "АК74 Стрелка", который 'положен' в подземельях Агропрома. При попытке заменить его на свой ствол - почему-то исправность оружия становиться "в хлам", патронов "сотни" и т.п. непонятки. Почему такое присходит? 1. Секция этого автомата [wpn_ak74_m1]. Класс, на котором сделаны автоматы АК74 в оригинальной игре - 'WP_AK74', что соответстует серверному классу 'cse_alife_item_weapon_magazined_w_gl'. Это соответствие секции и класса прописано в хеш-таблице обычных версий ACDC и при старте игры из скомпилированного all.spawn'а в игру спавнится объект "оружие с подствольным гранатометом". 2. Посмотрев наработки по 'новым' моделям, можно заметить, что многие "автоматы АК" сделаны на классе 'WP_LR300' или даже 'WP_SHOTG', а им соответствуют серверные классы 'cse_alife_item_weapon_magazined' и 'cse_alife_item_weapon_shotgun'. Естественно в игре на базе этих классов будут созданы объекты БЕЗ подствольников ... 3. Итак, если модмейкер, оставив прежнее наименование секции, не исправил в ACDC используемый класс для модифицированного оружия (универсальный ACDC сканирует и определяет это сам!), то в спавн запаковываются данные для "автомата Стрелка" с подствольником(!). По сути, all.spawn схожь по формату с набором нет-пакетов и в него записывается последовательность байтов. Опуская незначимое, имеем запись в спавн следующих параметров (типовой случай): upd:grenade_mode = 0 (u8) <-- параметр только для оружия со встроенными подствольниками! upd:condition = 1 (u8) upd:weapon_flags = 0 (u8) upd:ammo_elapsed = 0 (u16) upd:addon_flags = 0 (u8) upd:ammo_type = 0 (u8) upd:weapon_state = 0 (u8) upd:weapon_zoom = 0 (u8) upd:current_fire_mode = 0 (u8) При старте игры, движек, прочитав НАСТОЯЩИЙ класс оружия из конфиг-файла, спавнит этот объект и прописывает ему значения параметров, взятые им из алл.спавна. Если вместо класса оружия с подствольником, в конфиге будет стоять иной класс, то движек игры, не имея контроля окончания секции пакета для данного оружия прочитает это (для WP_LR300): upd:condition = 0 (u8) upd:weapon_flags = 1 (u8) upd:ammo_elapsed = 0 (u16) upd:addon_flags = 0 (u8) upd:ammo_type = 0 (u8) upd:weapon_state = 0 (u8) upd:weapon_zoom = 0 (u8) upd:current_fire_mode = 0 (u8) ... Несложно заметить, что первым будет читаться '0' => 'upd:condition' - состояние (исправность) ствола, хотя при компиляции спавна это было значение 'upd:grenade_mode' и т.д. Т.е. ВСЕ(!) параметры будут читаться со сдвигом вперед. Учитывая, что все значения числа и почти все нули - фатальной ошибки не произойдет, но произойдет подмена одних значений другими. Последний же байт будет невостребован. Для класса 'WP_SHOTG' будет все то же самое, т.е. сдвиг чтения вперед, но в заключении байт 'upd:current_fire_mode' будет присвоен для 'upd:ammo_ids'. Рекомендации по недопущению подобных ошибок: 1. Используйте версию универсального ACDC, способного сканировать именно ваши конфиги и автоматически распознающего классы для секций ваших объектов. Тогда в скомпилированный спавн пропишутся именно ваши байты ... 2. При использовании 'обычных' версий ACDC, контролируйте соответствие классов секций ваших объектов как в самом ACDC, так и в конфиг-файлах. Т.е. для секции [wpn_ak74_m1] требуется исправить класс: 'cse_alife_item_weapon_magazined' ( без '_w_gl' !). 3. При изменении класса объекта - не забывайте вносить необходимую поправку как в ACDC, так и соответственно в сам all.spawn. Изменено 23 Ноября 2011 пользователем Artos "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
Nazgool 250 Опубликовано 22 Ноября 2011 Поделиться Опубликовано 22 Ноября 2011 (изменено) _Призрак_ Из Lua никак не узнаешь. Дело в том, что функции в Lua (как и table, thread и userdata ) являются так называемыми "first class" объектами, и они не имеют фиксированного имени. Одни функции могут быть значениями множества переменных, в то время как другие могут храниться только в полях таблицы. Ну например для какой-то функции у тебя существует 3 имени. И есть, тоже например, функция, которая должна определить имя. Какое имя из двух оставшихся она должна возвратить??? Подходящее имя для функции попадает в стек только при её вызове. И вот тут уже можно определить и её имя, и имена всех функций вызвавших данную, т.к. они тоже уже находятся на стеке. Для этого используется функция debug.getinfo . Например : function f1(stack_level) f2(stack_level) end function f2(stack_level) f3(stack_level) end function f3(stack_level) local t = debug.getinfo(stack_level) print(t.name) end f1(0) --> getinfo f1(1) --> f3 f1(2) --> f2 f1(3) --> f1 Изменено 23 Ноября 2011 пользователем Gun12 Ссылка на комментарий
RvP 1 Опубликовано 23 Ноября 2011 Поделиться Опубликовано 23 Ноября 2011 (изменено) Gun12, ну почему никак? В частных случаях можно my_var = my_func for k,v in pairs(_G) do if v == my_var then print(k) end end получим имя, но нужно иметь ввиду отдельно еще ситуации когда функция не глобальная, или хуже того метод класса Gun12, Не стОит заниматься селекционным выведением в инкубаторных условиях... я ж поэтому и написал, что в частных случаях Изменено 23 Ноября 2011 пользователем RvP Vita sine libertate, nihil Vita sine litteris - mors est Ссылка на комментарий
Nazgool 250 Опубликовано 23 Ноября 2011 Поделиться Опубликовано 23 Ноября 2011 RvP Не стОит заниматься селекционным выведением в инкубаторных условиях. Твой вариант найдет оба имени. Какое из них будет "настоящим"? Да никакое. Это синонимы. Как минимум нужно соблюдать следующие условия : 1. В глобальном пространстве имен должно быть только одно имя для функции. Иначе найдутся и остальные. 2. Из первого следует что синонимы должны быть локальны. А это значит что использовать поиск нужно только в области видимости этой локальной переменной. 3. Добавь сюда итерацию по всей _G, в отличии от простого и быстрого доступа по ключу, и ... "Жизнь" подобного варианта нужно будет поддерживать искусственно. Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти