Перейти к контенту

Рекомендуемые сообщения

Господа, время доброго!

У меня вот какой интересный вопросец. У меня реализован скрипт, читающий нетпакеты всех НПС, после чего имена всех мне интересующих записываются в таблицу:

Скрытый текст

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")

, то у этого НПС отнималось определенное кол-во денег, за СМС.

 

Изменено пользователем _Sk8_AsTeR_
Ссылка на комментарий

@_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
Ссылка на комментарий

Как через скрипт закрыть открытый инвентарь, знает кто?

Мы, вчера, соседям сказали, что материализация - состоялась, чтобы ваш авторитет не уронить. Вот, мол, было изваяние, а теперь - стала Марья Ивановна. Многие верят ... ©

Ссылка на комментарий

@naxac,  спасибо, работает. Ещё работает вот так:

function inv_close_1()
  level.hide_indicators()
  level.show_indicators()
end

@naxac, можешь подробно описать что именно делает этот код, который ты дал?

level.start_stop_menu( level.main_input_receiver(), true )

Хотелось бы понимать, а не просто копировать...

Изменено пользователем Баба ЯГА

Мы, вчера, соседям сказали, что материализация - состоялась, чтобы ваш авторитет не уронить. Вот, мол, было изваяние, а теперь - стала Марья Ивановна. Многие верят ... ©

Ссылка на комментарий
1 час назад, Баба ЯГА сказал:

Хотелось бы понимать, а не просто копировать...

А почитать соседнюю тему "Справочник по ф-циям и классам", на первой странице раздел "Создание и управление худом и пользовательским интерфейсом"?

Ссылка на комментарий

Дня доброго! Подскажите, каким образом можно получить кол-во денег у НПС в конкретный момент, зная его ID?

Например группировку можно получить с помощью obj:community(), а как кол-во денег получить? Есть мыслишки?

 

Ссылка на комментарий

@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()

 

 

Ссылка на комментарий

@_Sk8_AsTeR_

local sobj = alife():object(i) - так ты получаешь серверный объект, а метод money() имеется только у клиентских. Вариантов у тебя два: или получать клиентский объект по ID(к примеру так - local obj = level.object_by_id(ID)) и для него вызывать obj:money(), или пытаться вытащить кол-во денег из нет-пакета(если оно там хранится).

  • Согласен 1
Ссылка на комментарий

@_Sk8_AsTeR_, можно и деньги в таблицу записать. Например,

table.insert(tab, {id = sobj.id, name = data.character_name, money = data.money})

Ну, а дальше так же, как с именем.

  • Согласен 1

Аддон для ОП-2.09.2: Яндекс/Google/GitHub

naxac.gif

Ссылка на комментарий

Можно, но если выборка из таблицы будет значительно отнесена по времени от её заполнения, реальное кол-во денег будет уже другим. Тогда либо клиентский объект, либо снова считывать нет-пакет.

Ссылка на комментарий

@Kirgudu@naxac, господа уважаемые, а сразу вопрос сходу - каким бы образом можно было бы отнять деньги у нпс(записать это в нетпакет?)?

То есть по большому счету моя основная задача не вывести деньги на экран (вывод денег на экран это метод проверки, что все работает), а отнять у данного ID нпс кол-во денег. 

Ссылка на комментарий

@_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
Ссылка на комментарий
В 23.09.2019 в 13:23, AndreySol сказал:

А почитать соседнюю тему "Справочник по ф-циям и классам", на первой странице раздел "Создание и управление худом и пользовательским интерфейсом"?

Читал, там нет подробного объяснения.

 

P.S. Подскажите, может кто знает:

Как отправить скриптово НПС из точки А в точку Б, допустим, даже на пару метров от того места где он находится, это вообще возможно?..

Изменено пользователем Баба ЯГА

Мы, вчера, соседям сказали, что материализация - состоялась, чтобы ваш авторитет не уронить. Вот, мол, было изваяние, а теперь - стала Марья Ивановна. Многие верят ... ©

Ссылка на комментарий

Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий

Комментарии могут оставлять только зарегистрированные пользователи

Создать аккаунт

Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!

Зарегистрировать новый аккаунт

Войти

Есть аккаунт? Войти.

Войти
  • Недавно просматривали   1 пользователь

×
×
  • Создать...