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 Ссылка на комментарий
_Sk8_AsTeR_ 122 Опубликовано 18 Сентября 2019 Поделиться Опубликовано 18 Сентября 2019 (изменено) Господа, время доброго! У меня вот какой интересный вопросец. У меня реализован скрипт, читающий нетпакеты всех НПС, после чего имена всех мне интересующих записываются в таблицу: Скрытый текст for i = 1, 65535 do local sobj = alife():object(i) if (sobj) and IsNpcStalker(sobj) then --отсеиваем все объекты кроме интересующих:нейтралы, свобода, долг local pk = get_netpk(sobj) --рабоатем с нетпакетом объекта if pk and pk:isOk() then local data = pk:get() --тягаем нетпакет local charname = data.character_name --получаем имя объекта table.insert(tab,charname) --пишем имя в таблицу tab end end end end Далее с разными целями я использую рандомные имена существующих НПС из таблицы следующим образом: Скрытый текст function name_npc() return tab[math.random(#tab)] end И вот какой у меня вопрос: каким образом в таблицу одновременно с именем_кличкой НПС записывать его Id? А после каким образом можно через функцию "name_npc()" прочитать только одну из двух переменных? Таким образом я хочу реализовать фишку, что когда приходило бы сообщение в сталкерскую сеть от нпс: amk.send_tip("тело сообщения", testt.name_npc(), время, 15, "common_channel") , то у этого НПС отнималось определенное кол-во денег, за СМС. Изменено 18 Сентября 2019 пользователем _Sk8_AsTeR_ Ссылка на комментарий
Kirgudu 1 255 Опубликовано 19 Сентября 2019 Поделиться Опубликовано 19 Сентября 2019 @_Sk8_AsTeR_, Скрытый текст table.insert(tab, {id = sobj.id, name = data.character_name}) -- пишем id и имя в таблицу tab function get_npc() return tab[math.random(#tab)] end local npc = testt.get_npc() amk.send_tip("тело сообщения", npc.name, время, 15, "common_channel") -- аналогично добавляем отъём денег по npc.id 1 2 Инструмент Ссылка на комментарий
Space.Marine 466 Опубликовано 19 Сентября 2019 Поделиться Опубликовано 19 Сентября 2019 17 часов назад, _Sk8_AsTeR_ сказал: то у этого НПС отнималось определенное кол-во денег, за СМС. и тут ОПСОСы !!! 2 1 Ссылка на комментарий
Баба ЯГА 7 Опубликовано 22 Сентября 2019 Поделиться Опубликовано 22 Сентября 2019 Как через скрипт закрыть открытый инвентарь, знает кто? Мы, вчера, соседям сказали, что материализация - состоялась, чтобы ваш авторитет не уронить. Вот, мол, было изваяние, а теперь - стала Марья Ивановна. Многие верят ... © Ссылка на комментарий
naxac 2 477 Опубликовано 23 Сентября 2019 Поделиться Опубликовано 23 Сентября 2019 @Баба ЯГА, для ТЧ: level.start_stop_menu( level.main_input_receiver(), true ) Аддон для ОП-2.09.2: Яндекс/Google/GitHub Ссылка на комментарий
Баба ЯГА 7 Опубликовано 23 Сентября 2019 Поделиться Опубликовано 23 Сентября 2019 (изменено) @naxac, спасибо, работает. Ещё работает вот так: function inv_close_1() level.hide_indicators() level.show_indicators() end @naxac, можешь подробно описать что именно делает этот код, который ты дал? level.start_stop_menu( level.main_input_receiver(), true ) Хотелось бы понимать, а не просто копировать... Изменено 23 Сентября 2019 пользователем Баба ЯГА Мы, вчера, соседям сказали, что материализация - состоялась, чтобы ваш авторитет не уронить. Вот, мол, было изваяние, а теперь - стала Марья Ивановна. Многие верят ... © Ссылка на комментарий
AndreySol 215 Опубликовано 23 Сентября 2019 Поделиться Опубликовано 23 Сентября 2019 1 час назад, Баба ЯГА сказал: Хотелось бы понимать, а не просто копировать... А почитать соседнюю тему "Справочник по ф-циям и классам", на первой странице раздел "Создание и управление худом и пользовательским интерфейсом"? Ссылка на комментарий
_Sk8_AsTeR_ 122 Опубликовано 23 Сентября 2019 Поделиться Опубликовано 23 Сентября 2019 Дня доброго! Подскажите, каким образом можно получить кол-во денег у НПС в конкретный момент, зная его ID? Например группировку можно получить с помощью obj:community(), а как кол-во денег получить? Есть мыслишки? Ссылка на комментарий
Overfirst 637 Опубликовано 23 Сентября 2019 Поделиться Опубликовано 23 Сентября 2019 obj:money() Ранее был известен под ником BoBaH_671. Ссылка на комментарий
_Sk8_AsTeR_ 122 Опубликовано 23 Сентября 2019 Поделиться Опубликовано 23 Сентября 2019 (изменено) @Overfirst, Не срабатывает, заранее пробовал attempt to call method 'money' (a nil value) Изменено 23 Сентября 2019 пользователем _Sk8_AsTeR_ Ссылка на комментарий
Overfirst 637 Опубликовано 23 Сентября 2019 Поделиться Опубликовано 23 Сентября 2019 Ты каким объектом манипулируешь? Клиентским или серверным? Метод рабочий. Ранее был известен под ником BoBaH_671. Ссылка на комментарий
_Sk8_AsTeR_ 122 Опубликовано 23 Сентября 2019 Поделиться Опубликовано 23 Сентября 2019 @Overfirst, вот таким образом мы получаем ID объектов и пишем все в таблицу, работа с нет-пакетами: Скрытый текст function table_update_pda() tab = {"пусто"} local iid tab_newbIes = {"new"} for i = 1, 65535 do local sobj = alife():object(i) if (sobj) and IsNpcStalker(sobj) then local pk = get_netpk(sobj) if pk and pk:isOk() then local data = pk:get() local charname = data.character_name table.insert(tab, {id = sobj.id, name = data.character_name}) end end end end А далее пытаемся работать с полученными ID. У меня получилось вывести на экран игровым сообщением ID случайного непися. Теперь задача - вывести на экран кол-во денег у танного ID непися: Скрытый текст function name_npc() local npc = ogo() --рандомируем значение из таблицы tab local iid = npc.id -- присваем id непися. Работает! Проверял - выводил на экран через amk.send_tip. local obj = alife():object(iid) local mon = obj:money() -- с "money()" не работает. Работает с ":community()". Выводится на экран группировка данного ID непися. Но деньги - никак amk.send_tip(mon, "деньги", 4, 15, "common_channel") return npc.name end function ogo() return tab[math.random(#tab)] end Скрытый текст attempt to call method 'money' (a nil value) Ссылка на строку: local mon = obj:money() Ссылка на комментарий
AndreySol 215 Опубликовано 23 Сентября 2019 Поделиться Опубликовано 23 Сентября 2019 @_Sk8_AsTeR_ local sobj = alife():object(i) - так ты получаешь серверный объект, а метод money() имеется только у клиентских. Вариантов у тебя два: или получать клиентский объект по ID(к примеру так - local obj = level.object_by_id(ID)) и для него вызывать obj:money(), или пытаться вытащить кол-во денег из нет-пакета(если оно там хранится). 1 Ссылка на комментарий
naxac 2 477 Опубликовано 24 Сентября 2019 Поделиться Опубликовано 24 Сентября 2019 @_Sk8_AsTeR_, можно и деньги в таблицу записать. Например, table.insert(tab, {id = sobj.id, name = data.character_name, money = data.money}) Ну, а дальше так же, как с именем. 1 Аддон для ОП-2.09.2: Яндекс/Google/GitHub Ссылка на комментарий
Kirgudu 1 255 Опубликовано 24 Сентября 2019 Поделиться Опубликовано 24 Сентября 2019 Можно, но если выборка из таблицы будет значительно отнесена по времени от её заполнения, реальное кол-во денег будет уже другим. Тогда либо клиентский объект, либо снова считывать нет-пакет. Инструмент Ссылка на комментарий
_Sk8_AsTeR_ 122 Опубликовано 24 Сентября 2019 Поделиться Опубликовано 24 Сентября 2019 @Kirgudu, @naxac, господа уважаемые, а сразу вопрос сходу - каким бы образом можно было бы отнять деньги у нпс(записать это в нетпакет?)? То есть по большому счету моя основная задача не вывести деньги на экран (вывод денег на экран это метод проверки, что все работает), а отнять у данного ID нпс кол-во денег. Ссылка на комментарий
Kirgudu 1 255 Опубликовано 24 Сентября 2019 Поделиться Опубликовано 24 Сентября 2019 @_Sk8_AsTeR_, примерно так: local sum = 10 -- здесь кол-во денег, котрое хотим отнять local pk = get_netpk(sobj) if pk and pk:isOk() then local data = pk:get() if data.money and data.money > sum then data.money = data.money - sum else data.money = 0 -- отнимаем сколько есть, если не хватает end pk:set(data) end 1 Инструмент Ссылка на комментарий
AndreySol 215 Опубликовано 24 Сентября 2019 Поделиться Опубликовано 24 Сентября 2019 3 часа назад, Kirgudu сказал: pk:set(data) Все так просто? А если непись в он-лайне? Ссылка на комментарий
naxac 2 477 Опубликовано 25 Сентября 2019 Поделиться Опубликовано 25 Сентября 2019 @AndreySol, тогда ещё проще. npc:give_money( -math.min(npc:money(), sum) ) 1 1 2 Аддон для ОП-2.09.2: Яндекс/Google/GitHub Ссылка на комментарий
Баба ЯГА 7 Опубликовано 25 Сентября 2019 Поделиться Опубликовано 25 Сентября 2019 (изменено) В 23.09.2019 в 13:23, AndreySol сказал: А почитать соседнюю тему "Справочник по ф-циям и классам", на первой странице раздел "Создание и управление худом и пользовательским интерфейсом"? Читал, там нет подробного объяснения. P.S. Подскажите, может кто знает: Как отправить скриптово НПС из точки А в точку Б, допустим, даже на пару метров от того места где он находится, это вообще возможно?.. Изменено 25 Сентября 2019 пользователем Баба ЯГА Мы, вчера, соседям сказали, что материализация - состоялась, чтобы ваш авторитет не уронить. Вот, мол, было изваяние, а теперь - стала Марья Ивановна. Многие верят ... © Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти