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

Скриптование


Svoboда

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

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

 

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

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

Поделиться этим сообщением


Ссылка на сообщение

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

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

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

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

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

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

Есть в X-Ray Extensions:

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

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

Поделиться этим сообщением


Ссылка на сообщение

@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

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

Поделиться этим сообщением


Ссылка на сообщение

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

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

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

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

Поделиться этим сообщением


Ссылка на сообщение
7 минут назад, naxac сказал:

for i = 1, count do

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

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

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

Поделиться этим сообщением


Ссылка на сообщение

@naxac, точно, проверил, всё работает! Ты меня просто спас :159:

Ничего не пойму, а чего у меня вылетало тогда? Я же вроде всё тоже-самое делал... :russian_ru:

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

с помощью, например, Graph Viewer

где его взять? Чтобы каждую локацию не декомпилировать для LE?

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

Поделиться этим сообщением


Ссылка на сообщение

@naxac, спасибо! :drinks:

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

Поделиться этим сообщением


Ссылка на сообщение

@abramcumner, начинаю вникать потихоньку...

@Kirgudu, обязательно посмотрю.

 

Ребята, как поставить метку на карту по заданным координатам? Не на объект, а просто в нужную точку на карте?

upd:  есть идея поставить пустой рестриктор и на него поставить метку, но возникает вопрос - можно ли ставить пустой рестриктор и будет ли это большая нагрузка на ресурсы если таких рестрикторов и меток будет скажем - 500 штук?

upd2: где-то видел не могу найти - как заспавнить пустой рестриктор через скрипт?

Нашёл, вот так можно?

local sobj = alife():create( "space_restrictor", pos, lv, gv )

upd3: и ещё. можно ли поставить метку на level_vertex?

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

Поделиться этим сообщением


Ссылка на сообщение

@Kirgudu, понял, спасибо. Возник вопрос: 

как узнать gv вертекса. если я знаю ID и позицию (координаты)?

local lvid = 30087
local vpos = level.vertex_position( lvid )
local sobj = alife():create( "space_restrictor", vpos, lvid, gv ) -- КАК УЗНАТЬ gv ???

 

Как узнать gv ?? :russian_ru:

9 минут назад, Kirgudu сказал:

сам же спрашивал и уже получал ответ здесь.

я помню что спрашивал уже это, искал тут, но не нашёл, пришлось спросить ещё раз... :blush:

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

Поделиться этим сообщением


Ссылка на сообщение

 @Kirgudu, ты не понял, это всё мне уже @naxac выше подсказал, это всё готово уже - нахожнение веретексов вокруг ГГ, в итоге я знаю веретексы вокруг ГГ и их координаты, но не знаю как получить game_vertex - для level вертекс, ну я не знаю как ещё объяснить. Вот я ж выше писал:

local sobj = alife():create( "space_restrictor", ЭТО ЕСТЬ, ЭТО ЕСТЬ, ЭТО КАК УЗНАТЬ??? )

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

Поделиться этим сообщением


Ссылка на сообщение

@Kirgudu, попробую объяснить ещё раз что мне нужно, курил я твой код никуда его не смог прикрутить...

Итак:

1) перебираю вокруг ГГ все вертексы в радиусе 20 метров

2) заношу их в таблицу вида = id вертекса, координаты вертекса

3) спавню пустые рестрикторы по координатам найденных вертексов и на них ставлю метки. НО. чтобы заспавнить рестриктор, мне нужен ГЕЙМ ВЕРТЕКС, вот ты перебираешь гейм вертексы. а как мне определить к какому ЛЕВЕЛ вертексу подходит ГЕЙМ вертекс которые ты перебираешь? Ещё не понял? Ну нашёл я в радиусе 20 метров по твоему скрипту 4 гейм вертекса и что мне с ними делать? У меня таблица, в ней, для примера:

t = { 30087 = { -120.00,-18.00,-200.00 } }

вот из твоего скрипта нашло 4 гейм вертекса = 47, 22,17,44 - и как мне узнать какой именно ГЕЙМ ВЕРТЕКС нужен для спавна -> 30087 = { -120.00,-18.00,-200.00 }?  

t = { 30087 = { -120.00,-18.00,-200.00 } }

вот мне нужно заспавнить рестриктор:
local sobj = alife():create( "space_restrictor", 30087, -120.00,-18.00,-200.00 ,  а сюда какой из твоих геймвертексов ставить??? их четыре - какой сюда? )

@Kirgudu ???

5 часов назад, Kirgudu сказал:

for i = gvid_min, gvid_max do -- gvid_min, gvid_max - минимальный и максимальный game-вертексы для данной локации

И откуда мне знать какой минимальный гейм вертекс на локации вертекс а какой максимальный.

Изменено пользователем W.A.S.P.
красный цвет

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

Поделиться этим сообщением


Ссылка на сообщение

Как отловить и вывести в лог момент, когда ГГ взял в руки ящик? Есть ли такие колбэки?

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

Поделиться этим сообщением


Ссылка на сообщение

@Zander_driver 

17 часов назад, Zander_driver сказал(а):

... В оригинале - разве что callback.use_object подойдет. Правда, он на использование предмета, в т.ч. физ.объектов и нпс, трупов. Подойдет ли под ваши задачи - не знаю.

 

Думаю - подойдёт. Но как реализовать? Ума не приложу...

 

Что именно требуется: ГГ берёт в руки по   SHIFT + F   ящик - и в лог выводится сообщение, что ГГ взял в руки ящик, или ГГ берёт в руки труп по   SHIFT + F   - и в лог тоже выводится сообщение, так же когда ГГ выпускает предмет из рук (именно ящик, бочка, труп) - тоже выводится сообщение - что ГГ поставил объект на землю.

 

 

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

Поделиться этим сообщением


Ссылка на сообщение
28 минут назад, AndreySol сказал(а):

use_object - кэллбэк на использование предмета, как то выпивание, съедание, применение аптечки или антирада. Каким боком это связано с перетаскиванием физобъектов, где, как я понимаю, имеет место аттач объекта к ГГ?

 

Есть предложения по решению вопроса?

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

Поделиться этим сообщением


Ссылка на сообщение

И всё же я надеюсь на помощь зала. Вопрос пока не решён. Ведь каким-то образом реализовано это дело, когда труп перетаскиваешь в комбезе? Значит можно как-то отловить когда ГГ берёт в руки какой-то физ объект?

 

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

Поделиться этим сообщением


Ссылка на сообщение

@AndreySol  в соли реализовано. Когда в комбезе то ГГ роняет труп и не может тащить, если снять комбез - то нормально тягает трупы. Значит где-то в скриптах есть коллбэк на взятие ГГ в руки физобъекта. а т.к. труп - это физобъект - то значит можно отловить и то когда ГГ берёт в руки бочку или ящик - но как и где? Вот об этом и спрашиваю.

  • Полезно 1

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

Поделиться этим сообщением


Ссылка на сообщение

По физ-объектам - понял, спасибо, нет смысла, надо движок ковырять.

 

Есть ещё вопрос, получил через пакет данные по level_changer, там есть:

 

dest_position = userdata

dest_direction = userdata

 

Я пробовал так:  vector(t.dest_direction).x - но оно выдаёт всё по нулям...

пробовал так: t.dest_directiondirection().x - так вообще ошибку выдаёт...

как вместо userdata получить данные?..

 

shapes = table

t.shapes[1]: offset = userdata
t.shapes[1]: shtype = number
t.shapes[1]: v2 = userdata
t.shapes[1]: v3 = userdata
t.shapes[1]: v1 = userdata

 

Так-же там есть shapes - таблица, я её распарсил - но в ней тоже userdata...

 

Как получить данные в этих случаях из userdata?

 

1) хочу посмотреть как там всё устроено на переходах

2) нужно изменить точку перехода и сделать радиус метра два - не больше, пробовал так:

 

t.level_vertex_id = 397480
t.game_vertex_id = 1811
t.shapes = { { ["shtype"] = 0, ["center"] = vector():set( 0, 0, 0 ), ["radius"] = 2 } }

 

но ничего не вышло...

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

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

Поделиться этим сообщением


Ссылка на сообщение

Возможно ли получить в игре скриптово реальное время компьютера (не игровое время), как в Lua с помощью os.date()  ?

Если да, то можно пример для получения yy:MM:dd hh:mm:ss?  

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

Поделиться этим сообщением


Ссылка на сообщение

@WinCap Я знаю как в Lua получать дату и время... Будь добр, прочитай ещё раз мой предыдущий вопрос, внимательно. Потом - сам проверь В ИГРЕ - то что ты рекомендуешь - и ты сам себе ответишь на свой вопрос: "... а чем os.date() не устраивает..." Если бы оно работало В ИГРЕ - я бы не спрашивал :facepalm:

Вопрос - актуален: 

 

Возможно ли получить в игре скриптово реальное время компьютера (не игровое время) -> как в Lua с помощью os.date()?  Если да, то можно пример для получения yy:MM:dd hh:mm:ss?

Для "быстрых" и невнимательных: os.date() в игре STALKER - не работает.

 

! Unknown command:  ..\gamedata\scripts\test.lua:101:_attempt_to_index_global_'os'_(a_nil_value)

 

Изменено пользователем Баба ЯГА
  • Не согласен 1

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

Поделиться этим сообщением


Ссылка на сообщение

@I am Dead ну, может, в OGSE - уже и допилили движок и там есть такое, не спорю, у меня - нет (играю в Диетическую Солянку), кстати, в оригинале - тоже нет os. Вот по-этому и спрашиваю - может кто поможет (если, конечно, кто знает).

 

 

 @NikitosKnyaz 

12 часов назад, NikitosKnyaz сказал(а):

можно ли в ОП 2-1 через скрипт выдать и показать на карте все тайники существующие в зоне?!

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

Можно, вот так, например:


function find_all_tainik()
  local s_obj,cnt = nil, 0
	for i = 1, 65534 do
    s_obj = alife():object(i)
    if (s_obj) and (s_obj:section_name():find("inventory" , 1, true) or s_obj:section_name():find("_box" , 1, true))  then
		  cnt = cnt + 1
      get_console():execute( "load ::: ".."section: "..s_obj:section_name().." | name: "..s_obj:name().." | id: "..s_obj.id)
      if level.map_has_object_spot( s_obj.id, "treasure" ) == 0 then -- нет метки
        level.map_add_object_spot_ser( s_obj.id, "treasure", "Тайник"..s_obj:name() ) -- поставим свою
      end
    end
  end
  get_console():execute( "load ::: ".."Количество найденных тайников = "..cnt)
end

find_all_tainik()

 

 

 

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

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

Поделиться этим сообщением


Ссылка на сообщение
  • Недавно просматривали   0 пользователей

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