Svoboда 3 Опубликовано 23 Апреля 2009 Поделиться Опубликовано 23 Апреля 2009 Тема для обсуждения скриптов всего и всех в серии игр STALKER. Задавая вопрос (!): 1. Внимательно изучите суть вопроса. Вопрос должен соответствовать выбранной Вами темы. Это поможет сохранить порядок и читабельность темы, а также облегчит поиск и понимание сего; 2. Изучите то, что уже есть в теме (пролистайте "руками", воспользуйтесь поиском на форуме); 3. Изучите информацию которая может вам помочь: Stalkerin. Там есть много хороших статей касательно данной темы.Уроки по модостроению. Есть рабочие примеры готовых скриптов различного назначения. Справочное руководство по языку Lua 5.1https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/ruСправочник по функциям и классам. Собрано много информации по функциям и классам, не всем, но по основные сведения предоставлены. Логика со вступлением и четырьмя частями: ВступлениеЧасть перваяЧасть втораяЧасть третьяЧасть четвертая. Smart_terrain (в простонароде - гулаг)Интересный способ настроики логики для гулаговСкриптовая часть игровой логики 4. Дабы не превращать обсуждение в "кашу" разной информативной направленности, задавайте несколько вопросов по порядку (в разных постах) после того, как получите ответ на предыдущий вопрос; 5. "Спасибо" и тому подобное - будьте так любезны в ПМ. Если не любите писать в ПМ, в конце вопроса напишите фразу: "Заранее спасибо!" - или что-то в этом духе; 6. ПОЖАЛУЙСТА! Указывайте, для какой игры Вам необходима информация (ТЧ, ЧН, ЗП), если стоит мод - укажите название мода; 7. Если Вы что-то сделали и результат не такой, какой Вами задумывался, то, пожалуйста, приводите коды которые Вы изменяли/писали целиком! Это поможет другим правильно ответить на Ваш вопрос, а также оградит Вас от лишней писанины. 8. Оформляйте сообщение. Пользуйтесь тегами для того, чтобы отделить код от текста. Пишите грамотно - ПОЛЬЗУЙТЕСЬ ЗНАКАМИ ПРЕПИНАНИЯ. 9. И помните: «Правильно заданный вопрос – половина ответа». Какие вопросы следует задавать, а какие нет... Задавайте вопросы, которые касаются непосредственно скриптов и их работы, т.е. Вы что-то делаете, а у Вас что-то не получается, при этом у Вас на руках должен быть хотя бы какой-то код, свидетельствующий о Вашей причастности к вопросу. Вопросы которые будут удалятся, следовательно их задавать не нужно:-- Где находится та или иная функция? Для ответа используем поиск по словам среди файлов оригинальной игры или мода, если объект поиска относится к нему, при помощью программы, которая Вам наиболее симпатизирует;-- Как сделать что-то/то-то? С подобными вопросами, либо в "ковырялки", где Вам вероятнее всего так же не ответят, либо выдвигаем мысли, подкреплённые теорией, практикой (идеальный вариант) и здравым рассудком;-- Вопросы со смыслом: "сделайте", "совместите" и подобными глаголами повелительного наклонения.-- К тому же удалению будут подвергаться вопросы, в которых масштабно не используются теги, для отделения кода и цитат от основного текста, а также не вписан в спойлер код размером превышающие семь строк.Ответ на возможно возникший вопрос: В какую тему можно обратиться по поводу логики и спавна объектов? В тему "ковырялок" соответствующей версии игры, для которой Вы задаёте вопрос. И последнее: очень рекомендовано к прочтению Правила форума 1 2 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/
Struck 61 Опубликовано 18 Сентября 2012 Поделиться Опубликовано 18 Сентября 2012 (изменено) Хотя пожалуй мой вопрос не снимается . Мне нужно отследить факт того что объект мы подняли с земли. Делаю вот так: local sobj = alife():object(obj:id()) if sobj and sobj.parent_id and sobj.parent_id == 65535 then sendtip("подобрали") end Типс вообще не вылетает, какой тогда parent у объекта лежащего на земле?(parent_id всегда возвращает "0", parent() - "userdata") Изменено 18 Сентября 2012 пользователем Struck Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/234/#findComment-729839
Artos 99 Опубликовано 18 Сентября 2012 Поделиться Опубликовано 18 Сентября 2012 (изменено) Struck, убедительная просьба прекратить "ковыряние в детской песочнице аля СП". Потрудись задавая вопрос, не своими домыслами оперировать, а предоставлять информацию по вопросу/проблеме, иначе посты будут удаляться (дабы не разводить флуд и погадалки) и приниматься иные меры, если словестные не доходят. Struck: Как получить факт того, что объект был поднят с земли?Так и хочется посоветовать в игре, перед взятием предмета, пригласить парочку понятых-сталкеров, дабы те перед Сидоровичем удостоверили, что действительно с земли был поднят. Ну а Сидорович может выдать справку заверенную у начальника блок-поста, что мол действительно с земли взято ... По сути: Во-первых, для скриптов нет в игре такого понятия "земля", да и для игрока - предмет может и на травке валяться, и на диване, на столе, в тумбочке, ... Поэтому давай оперировать понятием "безхозный", т.е. не имеющий владельца. Во-вторых, у нормальных модмейкеров бесхозные предметы имеют (как правило) именно parent_id == 65535, а не '0', и метод parent() возвращает 'nil'. Поэтому потрудить привести коды, из которых будет видно, что же ты такое у себя вытворяешь, или занимайся погадалками на СП. В-третьих, не путай понятия для серверного объекта и клиентского. В переходные моменты вполне допустимы ситуации, когда parent_id ~= 65535 для серверного, но клиентский уже не имеет владельца, и наоборот. Ну и последнее, к сожалению не всегда предмет "валяющийся на земле", т.е. вроде как бесхозный, не имеет владельца. Для некоторых ситуаций предмет сам себе владелец (parent_id == item_id), или имеет parent_id последнего владельца. А порой даже имеет в качестве parent() того, кто только еще "собрался брать" предмет... Изменено 18 Сентября 2012 пользователем Artos "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/234/#findComment-729852
Struck 61 Опубликовано 18 Сентября 2012 Поделиться Опубликовано 18 Сентября 2012 Artos, Поэтому потрудить привести коды, из которых будет видно, что же ты такое у себя вытворяешь Я привел тот код, который я вставляю напрямую в коллбек на обретение предмета, сторонних махинаций я(пока) не делаю. Выдает он мне то, что я написал. Что еще нужно для прояснения ситуации? давай оперировать понятием "безхозный", т.е. не имеющий владельца. Согласен. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/234/#findComment-729860
Artos 99 Опубликовано 18 Сентября 2012 Поделиться Опубликовано 18 Сентября 2012 Struck, вот это, не указанное тобою в вопросе: "код,который я вставляю напрямую в коллбек на обретение предмета" и является необходимым пояснением, которое и проясняет причину ерунды твоих результатов. Неужели до тебя самого не доходит, что в коллбэке на взятие актором предмета (callback.on_item_take) - предмет УЖЕ принадлежит актору (взят, а не валяется "на земле"). Глупо проверять безхозность тогда, когда хозяин уже в наличии. "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/234/#findComment-729861
Struck 61 Опубликовано 18 Сентября 2012 Поделиться Опубликовано 18 Сентября 2012 Artos, и как же быть? Я просто пока не представляю как свзяать 'бесхозный' предмет и инвентарь нпс/актора. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/234/#findComment-729868
Artos 99 Опубликовано 18 Сентября 2012 Поделиться Опубликовано 18 Сентября 2012 (изменено) Struck, тебе уже более трех раз говорилось о том "как задавать вопросы", чтобы на них можно было бы дать ответ. Ты постоянно говоришь о каких-то своих шажках, постоянно меняя и их и смысл от них ... и еще ни разу о конечной цели, которую хочешь достичь при помощи неких своих домыслов. То о некоем "факте", теперь уже о "свзяать" ... последняя твоя похотелкав вообще нечитабельна по смыслу. Хочешь проверить бесхозен ли предмет? Ну так что мешает это сделать, ведь это же простейщее действие. Но глупо это делать там/тогда, где это не имеет никакого смысла, т.е. когда у предмета заведомо есть владелец. Способов проверки и тем более реализации, великое множество, но все зависит от исходных данных и от цели, для чего все это делается. Не знаешь как, начни с самого простого: итерацией по всем объектам (их ID) в Зоне, и определяй бесхозный предмет иль нет. Захотелось "взять" предмет - ну так в модах предостаточно и примеров, да и в каждой ситуации для НПС или вктора реализации различаются. На "едино и простенько" не надейся. ;-) Изменено 18 Сентября 2012 пользователем Artos "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/234/#findComment-729870
Zander_driver 10 348 Опубликовано 18 Сентября 2012 Поделиться Опубликовано 18 Сентября 2012 (изменено) Столкнулся с необычной проблемой. Смутно помню, что обсуждение дебагового модуля RvP было не здесь. Но лезть в ту тему с тем что у меня приключилось - как то неуместно... Ситуация: Использую данный дебаг-модуль в разработке своего мода. Все нормально работало до какого то времени, нужная информация исправно отправлялась в лог. Наверно я слишком широко стал использовать эти возможности... короче, количество различных скриптов, которые что-то пишут в лог, росло, периодически стали происходить вылеты при синхронизации. В дебаг-логе сохранялось вот это: [22:39:01] 001B:006DBD38 xrLUA_GSC.dll, lua_yield() [22:39:01] 001B:006DBEF6 xrLUA_GSC.dll, lua_yield() [22:39:01] 001B:006D2367 xrLUA_GSC.dll, lua_gc() [22:39:01] 001B:0046ACAC XR_3DA.exe, CRenderDevice::End() В базовом пысовском, иногда то же самое, иногда он пуст оставался. Строки выше - были самыми разными, абсолютно мирными и не предвещающими какой то беды. Сначала вылеты были редко, теперь - очень часто. Заметил, что часто игра падает от запуска скриптовых функций которые разом вываливают в лог большие объемы данных. Еще заметил, что на более слабых машинах вылет происходит чаще. И, вопрос к тем кто это использует. Сталкивался ли кто-нибудь, какие меры можно предпринять? Кроме очевидного "Не использовать лог-файл как вьючную лошадь" - иногда все таки необходимо его использовать именно так... Еще я совсем не уверен, что правильно истолковал причины вылета, и очень хотел бы чтобы кто-то поделился полезной информацией по данному поводу Игра - ТЧ 1,0004, не амк... Изменено 18 Сентября 2012 пользователем Zander_driver Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine. Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист. AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/234/#findComment-729873
Struck 61 Опубликовано 18 Сентября 2012 Поделиться Опубликовано 18 Сентября 2012 (изменено) Artos, нужно получить факт обретения 'бесхозного' предмета, а связать...я имел ввиду отслежку как раз таки поднятия предмета.(да, я не прав, оперирую разными понятиями - а цель неизменна) Захотелось "взять" предмет Можно поподробнее? Допустим я начинаю вот так: for i=1,65535 do local obj = alife():object(i) if obj and obj.online and obj.parent_id and obj.parent_id == 65535 then --/ сюда что? end end Изменено 18 Сентября 2012 пользователем Struck Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/234/#findComment-729880
Malandrinus 615 Опубликовано 18 Сентября 2012 Поделиться Опубликовано 18 Сентября 2012 Struck, Мне нужно отследить факт того что объект мы подняли с земли. Не думаю, что есть простое решение. К моменту колбека на передачу потеряна уже вся информация о предыдущем владельце, причём и на серверной и на клиентской стороне. Напрашиваются всякие мерзкие варианты со слежением за владельцем для всех объектов. Для этого надо с начала загрузки сейва следить за всеми событиями передачи, тогда можно сказать точно, у кого был объект. В общем-то это реализуемо, видел подобное в пределах инвентаря, когда надо было определять, где был объект: в слоте, рюкзаке, на поясе. Однако, при такой реализации будут и проблемы, к примеру с ящиками, для которых нет колбека на получение предмета. Придётся также следить за потерей предметов. Но как тогда быть со спавном прямо в ящики? В общем морока ещё та. Zander_driver, Использую данный дебаг-модуль в разработке своего мода. ... периодически стали происходить вылеты при синхронизации. Напрашивается вывод о проблемах с памятью: фрагментация или просто исчерпание. Могу предложить просто чистить лог при старте нового сейва командой get_console():execute("clear_log") При этом всё, что ушло в альтернативный лог, там останется. Да и вообще, обычно не так уж интересно, что происходило до загрузки текущего сейва. Плагины Total Commander для работы с игровыми архивами: Архиваторный плагин (для работы с одиночным архивом): link1 link2 Системный плагин (для распаковки установленной игры): link1 link2 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/234/#findComment-729888
Artos 99 Опубликовано 18 Сентября 2012 Поделиться Опубликовано 18 Сентября 2012 (изменено) Как же тяжко тащить из болота бегемота Struck, 'факт' - в нашем контексте - это событие, а про него можно только узнать, а не взять иль получить. К твоему сведению, практически невозможно "взять" НЕбесхозный предмет, т.к. даже при передаче от одного к другому иль взятии из ящика - предмет на период в пару апдейтов становится бесхозным и т.о. актор иль НПС всегда обретают именно бесхозные предметы. В итоге, тот же коллбэк callback.on_item_take собственно и дает информаци ю о свершившемся "факте" получения предмета, а уж был он до этого бесхозным иль нет - извини, но движек игры и штатные скрипты об этом не ведают, т.к. подобное не запоминается. Справедливости ради, нужно заметить, что порой возникают ситуации взятия небезхозных предметов, на что в логе движек ругается на подобное строками типа: sv !ownership (entity already has parent) new_parent [0][actor:single_player] id_parent [0][actor:single_player] id_entity [18953][myitem:myitem18953] [3664] - но это уже из области багов движка. Ну и наконец, ты все время путаешь конечную цель с целью промежуточного шага, который засел тебе в голову. Какова конечная цель твоих попыток "получить факт" взятия бесхозного предмета? Это же не самоцель! Коллбэки на взятие предметов есть готовые, о бесхозности уже дано пояснение, чего же тебе требуется? Определять перед взятием бесхозность предмета? Ну так получив нужный идентификатор и проверяй именно перед взятием. Если делаешь что-то типа схемы подбора предметов неписями - так и пиши для чего все эти извышления (т.е. цель) и смотри как в модах все эти взятия реализованы. Zander_driver, собственно некорректно называть модулем динамическую библиотеку ... те, кто не в курсе запутаются. Судя по названию в строке лога "xrLUA_GSC.dll" - ты говоришь о модифицированной библиотеке на базе правок проекта "xrLuaFix by RvP". Наверное мне более всех знакома именно эта тема, т.к. и развиваю ее и использую "на всю катушку" ;-) Из моей практики использования модифицированных библиотек с выводом в штатный иль сторонний лог-файл именно под ТЧ нет никаких проблем даже если в лог(и) выводить абсолютно все что выносится из скриптов. Никаких вылетов, переполнений памяти и прочего, только конечно же игра начинает страшно лагать. Из той же практики, замечено, что ошибки как в скриптах, так и в движке бывают разные и результат от них очень разный. Предполагаю, что тобою вносятся правки (как в скрипты, так и в движек), которые и провоцируют вылеты. Строка с упоминанием CRenderDevice наводит на размышления по рендерным правкакмам иль заменам соотв.библиотек. Наверное в твоем случае самое лучшее - откатываться на те коды/библиотеки при которых не было вылетов и постепенно искать причину... Но это врядли из-за вывода в доп.лог. Так же советую в логе отследить - а вообще сколько доступно памяти и не зашкаливают ли загруженные ресурсы твоего мода за предел доступного? Изменено 18 Сентября 2012 пользователем Artos "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/234/#findComment-729893
Struck 61 Опубликовано 18 Сентября 2012 Поделиться Опубликовано 18 Сентября 2012 (изменено) Artos, у меня есть определенные предметы, ГГ бегает их и собирает, и как только он подбирает этот бесхозный(!) предмет происходит событие(единожды(!)(т.е. если мы выкинули этот предмет и подобрали опять(одругими словами - предмет побывал в инвентаре актора/нпс), то событие уже НЕпроисходит)), мне нужно запомнить id() в табличку(разумеется ее сохранив в псторе допустим) и вроде все просто, но ругается он у меня на строку с table.insert, когда я добавляю id предмета в свою табличку. Получаю id пердмета опять таки в коллбеке на обретение. Добавляю разумеется как то так: local id = obj:id() table.insert(tbl,id) Изменено 18 Сентября 2012 пользователем Struck Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/234/#findComment-729897
Malandrinus 615 Опубликовано 18 Сентября 2012 Поделиться Опубликовано 18 Сентября 2012 Artos, при передаче от одного к другому иль взятии из ящика - предмет на период в пару апдейтов становится бесхозным и т.о. актор иль НПС всегда обретают именно бесхозные предметы. Это не так. Процесс смены владельца является мгновенным, если рассматривать его по отдельности для клиентской или серверной стороны. Т.е. к примеру после выполнения функции transfer_item на серверной стороне владелец уже сменился. Другое дело, что в течении упомянутых нескольких апдейтов имеется рассинхронизация с владельцем на клиентской стороне. Тем не менее, бесхозным предмет не становится ни на сервере, ни на клиентской стороне. К моменту получения колбека на передачу этой рассинхронизации уже нет. Плагины Total Commander для работы с игровыми архивами: Архиваторный плагин (для работы с одиночным архивом): link1 link2 Системный плагин (для распаковки установленной игры): link1 link2 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/234/#findComment-729898
Artos 99 Опубликовано 18 Сентября 2012 Поделиться Опубликовано 18 Сентября 2012 (изменено) malandrinus, согласен не совсем удачно выразился, Подразумевал конечно то, что нельзя в некоторых ситуациях (взятие/передача/...) однозначно говорить о владельце предмета или его отсутствии только по одному из свойств parent_id или parent() -> parent():id(), которые рассинхронизированы. В итоге или предмет безхозен перед взятием или его "владелец" пока еще неясен, т.е. зависит от типа объекта (серверный или клиентский). Struck, во-первых, если подобранный ранее предмет выбросить, то при его взятии (хоть в десятый раз) каждый раз будет событие "взят предмет", а не как ты описываешь. Если же ты описываешь "что хотешь получить" - тогда становится понятнее для чего тебе 'безхозность' была нужна... И, конечно же твои предыдущие попытки были бессмысленными, предмет каждый раз становился безхозным при выкидывании (или если в ящик - то принадлежал ящику).. Т.о. ты уже на верном пути, т.е. пытаешься запоминать "факт" былого взятия предмета. Однако, вновь по твоим "как то так" процитированным кускам кода невозможно указать тебе, почему у тебя вновь не получается. Делай правильно и все получится. Замечу, что не стОит просто сыпать в свою табличку каждый раз идентификаторы предметов, как раз при повторном взятии в табличке будут дубли. Да и пользоваться такой табличкой несподручно... Может tbl[id] = true - будет удобнее? ;-) И почему бы тебе в конце концов не воспользоваться советом и не посмотреть как это УЖЕ сделано?! и уже тогда изобретать велосипед и наступать на грабли, по которым уже кто-то до тебя прошелся. В том же Симбионе актор собирает КПК и их иды запоминаются - вот и взгляни. Заодно там и чистка таблицы и прочее. Запоминать же в pstor - ой как не советую... Ну и если не прав, поправь, в том, что твоя цель: вести в Зоне учет подобранных определенных предметов актором (иль неписями), причем исключить дублирование одних и тех же (не учитывать взятые дважды и более раз). Изменено 18 Сентября 2012 пользователем Artos "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/234/#findComment-729903
Zander_driver 10 348 Опубликовано 19 Сентября 2012 Поделиться Опубликовано 19 Сентября 2012 Предполагаю, что тобою вносятся правки (как в скрипты, так и в движек), которые и провоцируют вылеты. Строка с упоминанием CRenderDevice наводит на размышления по рендерным правкакмам иль заменам соотв.библиотек.Наверное в твоем случае самое лучшее - откатываться на те коды/библиотеки при которых не было вылетов и постепенно искать причину... Но это врядли из-за вывода в доп.лог. Так же советую в логе отследить - а вообще сколько доступно памяти и не зашкаливают ли загруженные ресурсы твоего мода за предел доступного? В том то и дело что правками движка я (пока) не занимался вообще. А по скриптам... дело в том что одни и те же "новые" скрипты, на одной машине прекрасно работают не вызывая никаких сбоев, на другом же компе - 100% происходит вылет. Заполнение памяти - до предела еще далеко. Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine. Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист. AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/234/#findComment-729918
Artos 99 Опубликовано 19 Сентября 2012 Поделиться Опубликовано 19 Сентября 2012 (изменено) Zander_driver, к сожалению пока информации слишком мало и скорее на кофейной гуще гадаем. Если уж пишешь про "модуль RvP", то на компе где "100% происходит вылет", без этого модуля (библиотеки) ошибка все равно проявляется? Если нет - то ищи причину в модуле, т.е. и/или меняй его на более 'правильный' вариант. Если ошибка останется - копай железо/софт и т.п. на проблемном компе и это уже тема для иного топика. Изменено 19 Сентября 2012 пользователем Artos "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/234/#findComment-729935
Struck 61 Опубликовано 19 Сентября 2012 Поделиться Опубликовано 19 Сентября 2012 (изменено) Artos, да, именно это мне и нужно было(не изложив конечной цели запутал и вас, и себя), спасибо за помощь и наводку, все сделал и работает как надо. Только осталось одно но(!), как сделать еще запоминание того, что предмет побывал и у непися в инвентаре? Т.к. когда я беру из рюкзака непися предмет у меня тоже происходит мое событие. Зарегестрировать оn_item_take в xr_motivator.script и вызывать там? Или только более геморройный вариант годится?(Типа перебирать инвентарь юзаемого трупа, если в нем есть мои предметы то заносить их в таблицу "побывавших в рюкзаке"). Типа как-то так: function use(npc) for i=0,npc:object_count()-1 do local obj = npc:object(i) local id = obj:id() if npc:object(obj:section()) then if founded_items[id] == nil then if isMyItems(obj) then founded_items[id] = true end else if not isMyItems(obj) then founded_items[id] = nil end end end end end Изменено 19 Сентября 2012 пользователем Struck Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/234/#findComment-729961
Shredder 49 Опубликовано 19 Сентября 2012 Поделиться Опубликовано 19 Сентября 2012 direction - для серверного объекта можно прочитать только из его нет-пакета ('abstract'-параметры) или имея расширенный движек... На всякий случай сообщаю, что в ЗП у серверного объекта есть свойство angle, которое как-раз и является тем самым direction. Это свойство к тому же доступно и на запись. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/234/#findComment-729992
Struck 61 Опубликовано 19 Сентября 2012 Поделиться Опубликовано 19 Сентября 2012 (изменено) Предыдущий вопрос неактуален, все сделал! Как можно проверить какая фраза была выбрана в скриптовом диалоге(без использования инфопоршней/функций)? Обрисую что хочу в конечном итоге: Мне выпадает три фразы для ответа: Фраза 1 Фраза 2 Фраза 3 После этого у меня выпадает три talk_message в зависимости от выбранной фразы, и появляются опять таки три фразы для ответа, т.о. от каждого talk_message по три фразы для ответа. Поехали дальше, эти три фразы для ответа на фразу с talk_message имеют одинаковое название, т.о. я нехочу городить девять фраз, а хочу лишь три, и в зависимости от выбранного варианта из фразы с talk_message подставлять разные условия в эти три фразы. Постараюсь сейчас обрисовать свой диалог: Фраза 1 => Сообщение с talk_message(1) => Фраза 4 Фраза 5 Фраза 6 Фраза 2 => Сообщение с talk_message(2) => Фраза 4 Фраза 5 Фраза 6 Фраза 3 => Сообщение с talk_message(3) => Фраза 4 Фраза 5 Фраза 6 У 4,5 и 6 фраз название одинаковое, но действия разнятся в зависимости от выбранного сообщения с talk_message. Изменено 19 Сентября 2012 пользователем Struck Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/234/#findComment-730019
Artos 99 Опубликовано 19 Сентября 2012 Поделиться Опубликовано 19 Сентября 2012 Struck, Каждая строка-фраза при клике по ней вызывает соответствующую ветку диалога, передавая на вход аргументы: oSpeaker1, oSpeaker2, sDlgId, [idParent,] idPhase. 3-ий аргумент - текстовый идентификатор (название) выбранной фразы, последний - собственно числовой идентификатор фразы. Возьми мод "Arena_Extension_Mod" (by kstn, IG-2007) и поизучай как там сделаны ветвления диалогов. Тебе придется очень тяжко, т.к. тема скриптовых диалонов очень не проста для понимания и реализации. Также могу посоветовать посмотреть, например, как реализован скриптовой диалог обмена артефактов в dialogs_add.script (SIMBION-mod). В нем достаточно комментариев для самостоятельного разбора... "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/234/#findComment-730121
Struck 61 Опубликовано 24 Сентября 2012 Поделиться Опубликовано 24 Сентября 2012 Такой вопрос, вывожу статик в инвентарь, который по мере игры обновляется, все вроде хорошо, бегаем - собираем итемы, он обновляется, но(!) после save/load статик старый остается, причем сбрасывается параметр cnt на 0(изначально у меня local cnt = 0), а поверх него появляется новый(накладывается) и отсчет идет уже в наложенном статике, ввиду чего получается невозможно прочесть написанное. local wnd = nillocal ca, cr, cg, cb = 255, 231, 153, 22function show(cnt)if wnd == nil then return endwnd:SetText("Кол-во: "..cnt)endfunction init()if wnd then return endlocal inventory_wnd = level.main_input_receiver()wnd = CUIStatic()wnd:SetAutoDelete(true)wnd:SetWndRect(190, 730, 108, 33)wnd:SetText("Кол-во: ")wnd:SetFont(GetFontGraffiti22Russian())wnd:SetTextColor(ca,cr,cg,cb)inventory_wnd:AttachChild(wnd)end Вызываю следующим образом, при переборе инвентаря методом iterate_inventory пишу show(cnt), в info_callback'e вызываю функцию init(). P.S. Смотрел m_backpack.script в SIMBION'e, но...мало что понял, хотя там вроде бы есть что мне нужно. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/234/#findComment-731389
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти