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

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

11 часов назад, Баба ЯГА сказал:

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

В нужный момент выдать инфо, а дальше прописать нужное действие в логике НПС (переход в секцию логики по выдаче инфо).

Сталкер - наше всё!

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

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

Всё там есть.

level.start_stop_menu(wnd, true|false) - показывает|скрывает переданное в первом аргументе окно

level.main_input_receiver() - возвращает открытое в настоящий момент окно (диалог, инвентарь и т. д.)

  • Полезно 1
Ссылка на комментарий
В 26.09.2019 в 09:41, AndreySol сказал:

Уточни, что ты под этим понимаешь?

 

В 26.09.2019 в 07:32, AndrewMor сказал:

В нужный момент выдать инфо, а дальше прописать нужное действие в логике НПС (переход в секцию логики по выдаче инфо).

Не, я не это имел ввиду, нужно именно скриптово, без логики, поршней и дополнительных костылей, что-то типа если то иначе, ну, например, стоит НПС на координатах (1,1,1) а ему нужно "приказать" пойти/переместиться на координаты (3,1,1), или - проверять по lvid и перемещать его по lvid, что-то типа этого. Я потому и спрашиваю, что не знаю как это сделать... Что-то похожее есть в скрипте который отвечает за перемещение нпс в укрытия при выбросе, но я там ничего не понял... И там без логики и поршней всё, а именно скриптово, но как это сделать?

 

 

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

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

@Баба ЯГА, это делается с помощью метода клиентского обьекта set_dest_level_vertex_id( lvid ). Непись пойдет на этот lvid, если в процессе его какой-нибудь скрипт не пошлет куда-нибудь в другое место.

 

  • Полезно 2
Ссылка на комментарий
8 минут назад, dsh сказал:

@Баба ЯГА, это делается с помощью метода клиентского обьекта set_dest_level_vertex_id( lvid ). Непись пойдет на этот lvid, если в процессе его какой-нибудь скрипт не пошлет куда-нибудь в другое место.

 

А можешь на малюсеньком примере показать чтобы до меня как-то больше дошло... :blush: Ну, типа там, берём ID любого непися онлайн и...

for i=1,65000 do

  local o = alife():level_obj_by_id(i)

  if o then

    o:set_dest_level_vertex_id( 45612 )

  end

end

 

как-то так?

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

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

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

Ребята, кто мне помогал, огромное спасибо! Теперь все НПС платно отправляют СМСки в чат, ибо нефиг халявничать! 

Возник следующий вопрос: тратить НПС деньги научились, а где бы им подзаработать? Реализована ли в НС какая-нибудь схема, где НПС в оффлайне продают ненужный лут?

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

Продолжаю пытаться отправить НПС по нужным координатам, на данный момент добился вот такого:

npc:set_desired_position()
npc:set_desired_direction()
npc:clear_animations()
npc:set_detail_path_type(move.line)
npc:set_body_state(move.standing)
npc:set_movement_type(move.run)
npc:set_path_type(game_object.level_path)
npc:set_mental_state(anim.free)
npc:set_sight(look.danger, nil, 0)
npc:remove_all_restrictions()
gg_lvid = db.actor:level_vertex_id()
npc:set_dest_level_vertex_id( gg_lvid )

но, например, нпс сидит у костра, когда я выполняю код, то он жопе так и едет к нужному lvid...

Ну да ладно, дело вот в чём ещё, когда нпс достигает КРАЯ нужного level_vertex_id то он считает что всё хорошо, но, мне нужно чтобы нпс при достижении нужного level_vertex_id не останавливался на краю. а заходил В ЦЕНТР этой клетки, т.к. клетка, например может быть размером 3х3 метра, как это сделать? Подскажите ребята. :russian_ru: 

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

Ссылка на комментарий
57 минут назад, _Sk8_AsTeR_ сказал:

Теперь все НПС платно отправляют СМСки в чат, ибо нефиг халявничать! 

Ты это о чем вообще? О ботах, которыми рулит ИИ движка?

1 час назад, _Sk8_AsTeR_ сказал:

Реализована ли в НС какая-нибудь схема, где НПС в оффлайне продают ненужный лут?

Ты бы спросил сначала: "А есть ли схема, где НПС в оффлайне этот лут добывают?".

2 минуты назад, Баба ЯГА сказал:

но, например, нпс сидит у костра

А ты подумал о том, что НПС не просто "сидит у костра", а что он находится под логикой некой работы в неком гулаге. И ты думаешь, что это нормальная идея - выдернуть скриптово его с работы из гулага?

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

@AndreySol, да, думаю это нормальная идея, и если ты заметил, я спрашивал - КАК ОТПРАВИТЬ НПС в ЦЕНТ КЛЕТКИ level_vertex_id - знаешь как это правильно сделать - то подскажи. Я задал конкретный вопрос - зачем ты мне вопросы задаёшь что я думаю??? Я сюда пришёл за помощью, я понятия не имею что такое гулаги и работа - ты знаешь как отправить НПС в ЦЕНТР клетки level_vertex_id ?

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

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

Добрый вечер. Подскажет ли кто-нибудь, как скриптово принудительно остановить перезарядку оружия у ГГ?

Здесь могла быть ваша реклама.

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

@AndreySol, а разве они оффлайн не подбирают?

Они умеют в оффлайне драться, например, и вроде там же арты подбирают те же. amk_offline_alife.script

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

--есть бесхозное оружие
	amk.oau_reason="cn offline_alife chp13 "..tostring(victim and victim:name())
						on_weapons_found(victim, vdata)
						break	--прерываем цикл - событие отработано
					elseif #vdata.artefacts>0 then
					--есть арты
	amk.oau_reason="cn offline_alife chp14 "..tostring(victim and victim:name())
						on_artifacts_found(victim, vdata)
						break	--прерываем цикл - событие отработано
					elseif #vdata.inv_boxes>0 then
					--есть контейнеры. Надо обыскать.
	amk.oau_reason="cn offline_alife chp18 "..tostring(victim and victim:name())
						on_inv_boxes_found(victim, vdata)
						break	--прерываем цикл - событие отработано
					elseif items[victim.id] and #items[victim.id] > 0 then
					--попробуем продать всякого
	amk.oau_reason="cn offline_alife chp15 "..tostring(victim and victim:name())
						-- amk.mylog("Offline: lets trade")
	amk.oau_reason="cn offline_alife chp17 "..tostring(victim and victim:name())
						process_trade(victim)
						-- amk.mylog("Offline: trade done")
						break

 

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

function on_artifacts_found(victim, vdata)
	if (victim == nil or vdata == nil) then return end
	local obj, v_obj
	local object
	local v_id = victim.id
	local b_stalker = false
	-- Если сталкер - дадим опыт.
	if victim and IAmAStalker[victim:clsid()] and victim.community then
		local m_comm  = victim:community()
		if (m_comm == "stalker" or m_comm == "dolg" or m_comm == "freedom") then
			b_stalker = true
		end
	end
	for i=1, #vdata.artefacts do
		v_obj = vdata.artefacts[i]
		if (v_obj) then
			object = alife():object(v_obj.id)
			if (object and object:name() == v_obj.name) then
				obj = pick_item(victim, object)
				if (obj) then
					if (b_stalker == true) then
						victim:set_rank(victim:rank() + rate_art_found)
					end
				end
			end
		end
	end
	process_trade(victim)
end

 

 

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

Ребята, как узнать на карте произвольный level_vertex_id, ну например, level_vertex_id(30078) - а мне возвращает если он существует то true и его координаты, а если его не существует то возвращает просто false, как такое реализовать?

 

upd: или как узнать по координатам ID вертекса и валидный он или нет? Например, я запрашиваю произвольные координаты на локации на которой находится ГГ, а мне возвращает по этим координатам level_vertex_id и то есть ли он там на самом деле, грубо говоря - если клетка АI сетки по этим координатам?

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

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

как узнать на карте произвольный level_vertex_id

@Баба ЯГА, например так

local v = math.random(1, vertex_count)

Количество вертексов фиксированное, т ч. можно составить табличку [имя уровня] = кол-во вертексов.

Позиция вертекса: level.vertex_position(level_vertex)

Обратной функции в ТЧ точно нет, про ЧН/ЗП не в курсе. Есть в X-Ray Extensions:

level.vertex_id_by_pos = function ( position )
	db.actor:set_vector_global_arg_1( position )
	return level.vertex_id()
	end

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

naxac.gif

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

@naxac, жаль что нельзя по координатам узнать ID вертекса :( 

14 минут назад, naxac сказал:

Количество вертексов фиксированное, т ч. можно составить табличку [имя уровня] = кол-во вертексов.

Позиция вертекса: level.vertex_position(level_vertex)

Я об этом думал, но, вот тут проблема,, например на Кордоне = 539254 вертекса, а при переборе показывает только 5421 из них 4702 - валидных... Если перебирать свыше 300000 - вылет. Ничего понять не могу... Я так понимаю, что клетка AI сетки - это и есть вертекс, значит на Кордоне должно быть 539254 вертекса по количеству AI клеток.

17 минут назад, naxac сказал:

Есть в X-Ray Extensions:

Я не знаю что это такое... :( 

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

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

@Баба ЯГА, level_vertex не может быть невалидным по определению. Невалидным для AI может быть game_vertex, если он расположен вне аи-сетки.

Цитата

Я не знаю что это такое...

https://www.amk-team.ru/forum/topic/10538-x-ray-extensions/

Изменено пользователем naxac

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

naxac.gif

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

@naxac, хорошо, как тогда перебрать все вертексы на Кордоне например?

Вот так у меня показывает 4477 вертекса

function GetLevelsVertexes(lname)
  local t = {}
  local i = 0
  local graph = game_graph()
  local sim = alife()
  while graph:valid_vertex_id(i) do
    local v = graph:vertex(i)
    local ln = sim:level_name(v:level_id())
    if ln == lname then
      t[#t+1] = v:level_vertex_id()
    end
    i = i+1
  end
  return t, i
end

local t,i =  GetLevelsVertexes(level.name())

а вот так показывает 5704 вертекса на Кордоне, а реально там 500000 клеток (а значит и вертексов)

local colco_ver = 0
local all_colvo = 0
clear_log()
while all_colvo < 350000 do
  if game_graph():vertex(all_colvo):level_id() == alife():level_id() then
    colco_ver = colco_ver + 1
    --gc:execute( "load ~:> vertex_id ="..i..", " )
  end
  all_colvo = all_colvo + 1
end

 

upd: вот тут хотел поставить 600000 (предварительно количество посмотрел в LE) чтобы с запасом, но, как я и говорил если ставить больше чем 300000 - то вылет.

while all_colvo < 350000 do

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

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

@Баба ЯГА, так оно и не покажет реальное количество нод, это же только вертексы точек графа. Реальное количество нужно смотреть в level.gct локации (или в level.ai, не помню, склероз, чтоб его...), с помощью, например, Graph Viewer, скриптами его не получить.

Изменено пользователем naxac

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

naxac.gif

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

@naxac, так а что тогда возвращает db.actor:level_vertex_id() ? Что-то я запутался совсем... 

Я смотрел реальное количество клеток АИ так: открыл Кордон в LE и выделил все клетки и там внизу показывает количество выделенных клеток.

Труба, короче. Я хотел определить какие вертексы есть вокруг ГГ в радиусе, скажем 3 метра, а потом вывести АИ сетку эту (кусочек) - на экран. Но выходит - ничего не выйдет.... :( 

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

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

@Баба ЯГА, почему же не выйдет. Перебирай все вертексы локации и проверяй расстояние. Если меньше 3х, то выводи на экран.

for i = 1, count do

  if level.vertex_position(i):distance_to(db.actor:position()) <= 3 then

-- тут выводишь клетку

...

 

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

naxac.gif

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

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

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

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

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

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

Войти

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

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

    • Ни один зарегистрированный пользователь не просматривает эту страницу.
×
×
  • Создать...