_Sk8_AsTeR_ 117 Опубликовано 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 204 Опубликовано 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 464 Опубликовано 19 Сентября 2019 Поделиться Опубликовано 19 Сентября 2019 17 часов назад, _Sk8_AsTeR_ сказал: то у этого НПС отнималось определенное кол-во денег, за СМС. и тут ОПСОСы !!! 2 1 Ссылка на комментарий
Баба ЯГА 7 Опубликовано 22 Сентября 2019 Поделиться Опубликовано 22 Сентября 2019 Как через скрипт закрыть открытый инвентарь, знает кто? Мы, вчера, соседям сказали, что материализация - состоялась, чтобы ваш авторитет не уронить. Вот, мол, было изваяние, а теперь - стала Марья Ивановна. Многие верят ... © Ссылка на комментарий
naxac 2 445 Опубликовано 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_ 117 Опубликовано 23 Сентября 2019 Поделиться Опубликовано 23 Сентября 2019 Дня доброго! Подскажите, каким образом можно получить кол-во денег у НПС в конкретный момент, зная его ID? Например группировку можно получить с помощью obj:community(), а как кол-во денег получить? Есть мыслишки? Ссылка на комментарий
Overfirst 630 Опубликовано 23 Сентября 2019 Поделиться Опубликовано 23 Сентября 2019 obj:money() Ранее был известен под ником BoBaH_671. Ссылка на комментарий
_Sk8_AsTeR_ 117 Опубликовано 23 Сентября 2019 Поделиться Опубликовано 23 Сентября 2019 (изменено) @Overfirst, Не срабатывает, заранее пробовал attempt to call method 'money' (a nil value) Изменено 23 Сентября 2019 пользователем _Sk8_AsTeR_ Ссылка на комментарий
Overfirst 630 Опубликовано 23 Сентября 2019 Поделиться Опубликовано 23 Сентября 2019 Ты каким объектом манипулируешь? Клиентским или серверным? Метод рабочий. Ранее был известен под ником BoBaH_671. Ссылка на комментарий
_Sk8_AsTeR_ 117 Опубликовано 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 445 Опубликовано 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 204 Опубликовано 24 Сентября 2019 Поделиться Опубликовано 24 Сентября 2019 Можно, но если выборка из таблицы будет значительно отнесена по времени от её заполнения, реальное кол-во денег будет уже другим. Тогда либо клиентский объект, либо снова считывать нет-пакет. Инструмент Ссылка на комментарий
_Sk8_AsTeR_ 117 Опубликовано 24 Сентября 2019 Поделиться Опубликовано 24 Сентября 2019 @Kirgudu, @naxac, господа уважаемые, а сразу вопрос сходу - каким бы образом можно было бы отнять деньги у нпс(записать это в нетпакет?)? То есть по большому счету моя основная задача не вывести деньги на экран (вывод денег на экран это метод проверки, что все работает), а отнять у данного ID нпс кол-во денег. Ссылка на комментарий
Kirgudu 1 204 Опубликовано 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 445 Опубликовано 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 пользователем Баба ЯГА Мы, вчера, соседям сказали, что материализация - состоялась, чтобы ваш авторитет не уронить. Вот, мол, было изваяние, а теперь - стала Марья Ивановна. Многие верят ... © Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти