UnLoaded 313 Опубликовано 16 Сентября 2016 Поделиться Опубликовано 16 Сентября 2016 (изменено) мне скриптом и надо. Можешь показать код? Примерный шаблон(с использованием модуля нет-пакетов от Artos), дорабатывать - в зависимости от конкретных похотелок: local get_ini = system_ini() local ammo_total = 0 function CheckAllAmmo() local actor = db.actor if actor ~= nil then actor:iterate_inventory(check_inv_items, actor) -- ф-ция-итератор, о ней прочтешь в "Справочнике по ф-циям и классам" -- end return ammo_total -- тута получишь искомую цифру -- end function check_inv_items(actor, item) local section = item:section() if section then if get_ini:section_exist(section) and get_ini:line_exist(section, "class") then local item_class = get_ini:r_string_wq(section, "class") ----- тут сам разберись - выстрелы для подстволов у тебя будут как патроны или нет ??????????????? ----------------- if (item_class == "AMMO") or (item_class == "A_VOG25") or (item_class == "A_M209") then local num_in_box = get_ammo_count(item:id()) -- тута из нет-пакета получим реальное кол-во в реальной пачке -- if num_in_box then ammo_total = ammo_total + num_in_box end end end end end function get_ammo_count(obj_id) local se_obj = alife():object(obj_id) if se_obj then local packet = net_packet() cse_alife_item_ammo.STATE_Write(se_obj, packet) packet:r_seek(packet:w_tell() - 2) return packet:r_u16() -- кол-во боеприпаса в конкретной пачке -- end return 0 end Чуть не забыл - не забудь разрулить тему с наличием в инвентаре гаусс-боеприпасов. Изменено 16 Сентября 2016 пользователем UnLoaded 1 Ссылка на комментарий
naxac 2 445 Опубликовано 17 Сентября 2016 Поделиться Опубликовано 17 Сентября 2016 (изменено) @Sla-Sla, ЗП? Тогда так: function get_ammo_size(obj) local pk = net_packet() pk:w_begin(0) obj:STATE_Write(pk) pk:r_seek(pk:w_tell()-2) return pk:r_u16() -- ammo_left end function ammo_count(section) local n = 0 local sobj db.actor:iterate_inventory( function (actor, item) if item:section() == section then sobj = alife():object( item:id() ) if sobj then n = n + get_ammo_size(sobj) end end end, db.actor) return n end Использовать: ammo_cnt = ammo_count("ammo_12x70_buck")Это если надо конкретные патроны посчитать. А если все подряд, то вместо проверки по секции поставить проверку по классу. Типа if item:clsid() == clsid.ammo or item:clsid() == clsid.ammo_s then Изменено 17 Сентября 2016 пользователем naxac 1 Аддон для ОП-2.09.2: Яндекс/Google/GitHub Ссылка на комментарий
aka_sektor 1 476 Опубликовано 18 Сентября 2016 Поделиться Опубликовано 18 Сентября 2016 Вопрос к скриптовикам: Что означет db.actor в коде функции? Например, в функции вывода сообщений. Discord-сервер modfaq.ru: https://discord.gg/9j42BXwB Ссылка на комментарий
Serge! 127 Опубликовано 18 Сентября 2016 Поделиться Опубликовано 18 Сентября 2016 Что означет db.actor в коде функции? Ссылку на глобальную переменную "actor", находящуюся а файле db.script. 1 Ссылка на комментарий
aka_sektor 1 476 Опубликовано 18 Сентября 2016 Поделиться Опубликовано 18 Сентября 2016 @Serge!, в db.script: actor = nil Выходит вместо db.actor можно писать просто nil ? Discord-сервер modfaq.ru: https://discord.gg/9j42BXwB Ссылка на комментарий
Serge! 127 Опубликовано 18 Сентября 2016 Поделиться Опубликовано 18 Сентября 2016 (изменено) Выходит вместо db.actor можно писать просто nil Можно, если играть надоело. nil, в том контексте который Вы привели, это только активация этой глобальной переменной при её объявлении. Далее же ей присваивается ссылка на созданный объект ГГ. Хотите его убрать из игры - присвойте этой ссылке значение nil, т.е. удалите её. Всё в Ваших руках. Изменено 18 Сентября 2016 пользователем Serge! 1 1 Ссылка на комментарий
Serge! 127 Опубликовано 19 Сентября 2016 Поделиться Опубликовано 19 Сентября 2016 (изменено) А если все подряд, то вместо проверки по секции поставить проверку по классу. Мои потуги на этом пути (делал когда-то для себя скрипт по разрядке всех стволов в инвентаре) подсказывают - так не получится. Первый вопрос был: "У меня вопрос, возможно ли получить значение общего количества патронов в инвентаре?". Вы все ответили на его часть - как подсчитать патроны требуемые к стволам, которые есть у ГГ (приведённые вами скрипты Atros именно эту проблему и решают) причём, если они на момент проверки, не были разряжены штатными методами . Но, в инвентаре могуть быть и патроны к стволам, которох у ГГ в данный момент нет + нужные, но в пачках. А потому ОБЩЕГО количества (ему именно такого хочется) он, по вашему совету, не получит. Увы, но это так. Хотя, вполне это допускаю, что и вопрос был сформирован не очень корректно. Я могу и ошибаться. @naxac, проверка по классу - это ближе к хорошему результату (пусть любители учёта миллисекунд подсчитают потери), но... не при этом вопросе. В данном случае придётся проверять именно по секциям или решать задачу по частям. Изменено 19 Сентября 2016 пользователем Serge! Ссылка на комментарий
Корнет2002 2 Опубликовано 19 Сентября 2016 Поделиться Опубликовано 19 Сентября 2016 Как создать тайник с запиской на следующий тайник (как в Коллекционере)? Как создать тайник я знаю, а как добавить инфопоршень с использованием функций спавна и удаления предметов - не знаю. Подскажите как? Ссылка на комментарий
UnLoaded 313 Опубликовано 19 Сентября 2016 Поделиться Опубликовано 19 Сентября 2016 (изменено) Вы все ответили на его часть - как подсчитать патроны требуемые к стволам, которые есть у ГГ Внимательнее посмотри в примеры скриптов... откуда такой вывод? В моем примере происходит перебор всего хлама в инвентаре ГГ, то что является по классу патронами - обрабатывается на предмет получения реального кол-ва в пачке, и суммируется. Где ты увидел привязку к стволам в инвентаре ГГ? Как создать тайник с запиской на следующий тайник (как в Коллекционере)? Не играл в "Коллекционер", но к примеру можно вместе с лутом ложить в тайник саму записку. При использовании этой записки выводить информацию игроку с наводкой на следующий тайник. Изменено 19 Сентября 2016 пользователем UnLoaded Ссылка на комментарий
Serge! 127 Опубликовано 20 Сентября 2016 Поделиться Опубликовано 20 Сентября 2016 (изменено) Внимательнее посмотри в примеры скриптов... откуда такой вывод? В моем примере происходит перебор всего хлама в инвентаре ГГ, то что является по классу патронами - обрабатывается на предмет получения реального кол-ва в пачке, и суммируется. Где ты увидел привязку к стволам в инвентаре ГГ? Соглашусь, я был не очень внимателен, т.к. просто не предполагал такого подхода к такой мелкой проблеме. Мой вывод: "А потому ОБЩЕГО количества (ему именно такого хочется) он, по вашему совету, не получит.", остаётся верен и при таком раскладе. Т.к. сейчас у меня просто элементарно нет времени, да и форум уходит на профилактику, но я позже обязательно объясню в чём Вы не правы. Возможно в "курилке" или других, располагающий для лёгкого трёпа местах, поскольку к "скриптованию" эти вопросы отношение вряд ли имеют. Изменено 20 Сентября 2016 пользователем Serge! Ссылка на комментарий
HellRatz 2 864 Опубликовано 20 Сентября 2016 Поделиться Опубликовано 20 Сентября 2016 (изменено) Привет всем. Такой вопрос. Как можно запретить полностью использовать (обыскивать) труп по опр. секции? Делал проверку на секцию, которую нельзя обыскать, и использовал self.object:set_nonscript_usable(false), но в таком случае все равно висит статик "Обыскать труп", хотя окно обыска и не открывается. Хотелось бы знать, как можно перекрыть сей статик пустышкой, ну или вообще нормальным методом запретить обыск, а не криво, как у меня. Изменено 20 Сентября 2016 пользователем HellRatz GTA 3 MAP X-Ray | NFS U:2 MAP X-Ray | RTCW MAP X-Ray | L2D | Раритетные моды на моем облаке — на память о былом. Ссылка на комментарий
Charsi 440 Опубликовано 20 Сентября 2016 Поделиться Опубликовано 20 Сентября 2016 @HellRatz, в мотиваторе на обновлении подсказки такую же проверку сделай с переопределением текста подсказки. И на net_spawn тоже всё это добавить нужно, чтобы после перезагрузки уровня применялось. 1 Lua и LuaJIT плагины для Notepad++ SciTE-RU 3.5.5 плагины для MilkShape3D Ссылка на комментарий
Winsor 177 Опубликовано 21 Сентября 2016 Поделиться Опубликовано 21 Сентября 2016 Привет всем. Такой вопрос. Как можно запретить полностью использовать (обыскивать) труп по опр. секции? Делал проверку на секцию, которую нельзя обыскать, и использовал self.object:set_nonscript_usable(false), но в таком случае все равно висит статик "Обыскать труп", хотя окно обыска и не открывается. Хотелось бы знать, как можно перекрыть сей статик пустышкой, ну или вообще нормальным методом запретить обыск, а не криво, как у меня. по другому не меняется. а текст с помощью set_tip_text_default() set_tip_text() я делал по другому, правда, не для трупа - в биндере, без мотиватора. в net_spawn делал проверку, и если физический объект надо было юзать - вешал на него калбек и тип_текст. если нет - не вешал Ссылка на комментарий
Dennis_Chikin 3 658 Опубликовано 24 Сентября 2016 Поделиться Опубликовано 24 Сентября 2016 Выходит вместо db.actor можно писать просто nil ? bind_stalker.script: function actor_binder:net_spawn(data) ... db.add_actor(self.object) db.script: function add_actor( obj ) actor = obj Но, как уже писал, это плохая идея, производить несколько операций с переменной, которая используется 100500 миллионов раз в секунду, вместо одной. Да еще везде и всюду набирать руками это самое db.actor с риском где-то забыть или попутать буковки местами. Так что: bind_stalker.script: function actor_binder:__init( npc ) super( npc ) _G.actor = self.object -- теперь отовсюду будет работать просто actor, без всякого self.object и db. function actor_binder:net_destroy() ... _G.actor = nil object_binder.net_destroy( self ) end 1 Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
UnLoaded 313 Опубликовано 28 Сентября 2016 Поделиться Опубликовано 28 Сентября 2016 Несколько вопросов: 1) xr_motivator.script(а в нем класс motivator_binder) рулит сталкерами. А кто рулит монстрами? 2) какие рабочие кэллбэки есть для сталкеров? В нет_спавн вижу: hit - это понятно death - это то же понятно use_object - это надеюсь то же понятно(этот кэллбэк удерживает непися при разговоре ГГ с ним?) sound - закомментирован, по обработчику вроде понятно, что связан с тем, что слышат неписи. extrapolate_callback - а вот этот о чем? Устанавливается не как вышеперечисленные, а через set_patrol_extrapolate_callback... Это все что есть для сталкеров, или еще что-то имеется? 3) в death_callback есть вызов death_manager.drop_manager(self.object):create_release_item() - это запускает всю цепочку подчистки\доспавна лута, и с этим все понятно. Но и в update есть точно такой-же вызов. Если я правильно понял, в update это нужно для контроля сталкеров, которые уже мертвяки после очередной загрузки игры? И еще, напомните - какая схема управляет подбором оружия сталкерами, и в каком скрипте прописана? Ссылка на комментарий
Bak 754 Опубликовано 28 Сентября 2016 Поделиться Опубликовано 28 Сентября 2016 @UnLoaded, 1. bind_monster.script 2. ещё есть on_item_take,on_item_drop,script_animation (окончание анимации) 4. Схема называется gather_items, сама она находится в движке, в ЗП управляется через xr_gather_items.script Ссылка на комментарий
UnLoaded 313 Опубликовано 29 Сентября 2016 Поделиться Опубликовано 29 Сентября 2016 4. Схема называется gather_items, сама она находится в движке, в ЗП управляется через xr_gather_items.script Я для ТЧ хотел бы знать. Там как? Ссылка на комментарий
Карлан 1 049 Опубликовано 29 Сентября 2016 Поделиться Опубликовано 29 Сентября 2016 @UnLoaded, возможно ты про can_select_item_rules, это в движке on_after_take если верно помню, можешь посмотреть, обычная строка конфига, работает только на подбор оружия (а точнее CWeapon, если опять же не ошибаюсь), другого поднятия итемов там нет. По дез менеджеру, ну, как тебе сказать, да, для трупов, но и не только (проверь сам, удивишься, только прежде чем следующий вопрос задавать - подумай) . Ссылка на комментарий
UnLoaded 313 Опубликовано 29 Сентября 2016 Поделиться Опубликовано 29 Сентября 2016 возможно ты про can_select_item_rules, это в движке on_after_take если верно помню Получается, подбор оружия неписями в ТЧ - это движковое? Я думал, что какая-то схема логики... Такой момент: сценка с Юриком при входе на Свалку, с последующей помощью Бесу. У меня Юрик топает от места сценки к месту, где стоит Бес. Если возле Беса кинуть ствол, к примеру МР-5, то Юрик его подбирает. Но, в дальнейшей перестрелке с бандюками, его не использует. Не сложно было выяснить причину - ствол-то он подбирает, а патронов к нему у него нет. Для теста, сделал спавн ему нужных патронов, после их спавна Юрик сразу переключается на МР-5 и в последующей перестрелке исправно его использует. Тут я подумал - на кой ПЫСы сделали подбор стволов, если их непись не будет использовать? Логично было сделать, при подборе ствола, сразу спавн подходящих боеприпасов. Думал, что этим схема рулит какая-то, потому и хотел ее найти, чтоб попробовать доделать спавн патронов. Но раз это движковое - то видно пока не судьба... Р.S. Попытался сделать спавн патронов через добавление в motivator_binder кэллбэка on_item_take, вроде спавн получился, но сразу же наткнулся на грабли - вылеты при интенсивной боевке. Ссылка на комментарий
Карлан 1 049 Опубликовано 29 Сентября 2016 Поделиться Опубликовано 29 Сентября 2016 @UnLoaded, я это в движке зарубил, а для оригинальной работы просто в коллбеке на перезарядку скармливаю неписю те патроны, что у него в стволе. Но вообще в оригинальном виде у непися должен быть бесконечный боезапас, так как, в противном случае, в силу кривизны неписей они весь свой боезапас моментально расстреливают и пускаются в бега. А так да, движковое, из универсального в скриптах там помоему два комбата (точнее три, но один не используется), да хели хантер, ну еще раненый, но это уже гибрид, и вроде все, но может чего еще есть, разумеется тут я не завожу речь о стейтах и вообще передвижении, там конечно с головой всяких прекондишнов. Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти