Скриптование - Страница 499 - Скрипты / конфиги / движок - AMK Team
Перейти к контенту

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

Тема для обсуждения скриптов всего и всех в серии игр STALKER.


Задавая вопрос (!):
1. Внимательно изучите суть вопроса. Вопрос должен соответствовать выбранной Вами темы. Это поможет сохранить порядок и читабельность темы, а также облегчит поиск и понимание сего;
2. Изучите то, что уже есть в теме (пролистайте "руками", воспользуйтесь поиском на форуме);
3. Изучите информацию которая может вам помочь:

 
 

Stalkerin. Там есть много хороших статей касательно данной темы.
Уроки по модостроению. Есть рабочие примеры готовых скриптов различного назначения.

 

Справочное руководство по языку Lua 5.1
https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/ru
Справочник по функциям и классам. Собрано много информации по функциям и классам, не всем, но по основные сведения предоставлены.

4. Дабы не превращать обсуждение в "кашу" разной информативной направленности, задавайте несколько вопросов по порядку (в разных постах) после того, как получите ответ на предыдущий вопрос;
5. "Спасибо" и тому подобное - будьте так любезны в ПМ. Если не любите писать в ПМ, в конце вопроса напишите фразу: "Заранее спасибо!" - или что-то в этом духе;
6. ПОЖАЛУЙСТА! Указывайте, для какой игры Вам необходима информация (ТЧ, ЧН, ЗП), если стоит мод - укажите название мода;
7. Если Вы что-то сделали и результат не такой, какой Вами задумывался, то, пожалуйста, приводите коды которые Вы изменяли/писали целиком! Это поможет другим правильно ответить на Ваш вопрос, а также оградит Вас от лишней писанины.
8. Оформляйте сообщение. Пользуйтесь тегами для того, чтобы отделить код от текста. Пишите грамотно - ПОЛЬЗУЙТЕСЬ ЗНАКАМИ ПРЕПИНАНИЯ.
9. И помните: «Правильно заданный вопрос – половина ответа».

 

Какие вопросы следует задавать, а какие нет...

 

Задавайте вопросы, которые касаются непосредственно скриптов и их работы, т.е. Вы что-то делаете, а у Вас что-то не получается, при этом у Вас на руках должен быть хотя бы какой-то код, свидетельствующий о Вашей причастности к вопросу.

 

Вопросы которые будут удалятся, следовательно их задавать не нужно:
-- Где находится та или иная функция?
Для ответа используем поиск по словам среди файлов оригинальной игры или мода, если объект поиска относится к нему, при помощью программы, которая Вам наиболее симпатизирует;
-- Как сделать что-то/то-то?
С подобными вопросами, либо в "ковырялки", где Вам вероятнее всего так же не ответят, либо выдвигаем мысли, подкреплённые теорией, практикой (идеальный вариант) и здравым рассудком;
-- Вопросы со смыслом: "сделайте", "совместите" и подобными глаголами повелительного наклонения.
-- К тому же удалению будут подвергаться вопросы, в которых масштабно не используются теги, для отделения кода и цитат от основного текста, а также не вписан в спойлер код размером превышающие семь строк.
Ответ на возможно возникший вопрос: В какую тему можно обратиться по поводу логики и спавна объектов?
В тему "ковырялок" соответствующей версии игры, для которой Вы задаёте вопрос.

И последнее: очень рекомендовано к прочтению Правила форума
 


  • Спасибо 1
  • Полезно 2
Ссылка на комментарий
https://www.amk-team.ru/forum/topic/6185-skriptovanie/
17 часов назад, Баба ЯГА сказал:

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

Всё там есть.

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

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

  • Полезно 1

Свои работы и совместные проекты: ИнструментOGSM CSFinal StrokeHARDWARMOD

Полезное: модули АртосаXML парсер

В 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/Тема на AP-PRO

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/Тема на AP-PRO

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/Тема на AP-PRO

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/Тема на AP-PRO

naxac.gif

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

for i = 1, count do

хорошо, а COUNT - сколько ставить? Если больше 300000 - вылет

upd: попробуй сам перебрать вертексы и сам всё увидишь, не работает такой перебор, он всё не перебирает.

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

@Баба ЯГА, вот так только что попробовал, всё работает:

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

function ggg()
	local pos = db.actor:position()
	local vpos
	local n = 0
	for i = 1, 595499 do	-- для Кордона
		vpos = level.vertex_position(i)
		if vpos and vpos:distance_to_sqr(pos) < 9 then
			n = n + 1
			log(i)
		end
	end
	log("found %s vertexes", n)
end

 

вот что получил:

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

385291
386206
386207
386208
386209
386210
387120
387121
387122
387123
387124
387125
387126
388033
388034
388035
388036
388037
388038
388039
388945
388946
388947
388948
388949
388950
388951
389852
389853
389854
389855
389856
389857
389858
389859
390747
390748
390749
390750
390751
390752
390753
391639
391640
391641
391642
391643
391644
391645
392549
392550
392551
392552
found 53 vertexes

 

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

Аддон для ОП-2.09.2: Яндекс/Google/GitHub/Тема на AP-PRO

naxac.gif

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

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

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

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

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

Войти

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

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

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