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

Внимание. На форуме проводятся технические работы с боковым меню.

_Val_ _Val_

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


Svoboда

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

@Norman Eisenherz, код из солянки:





В amk.get_weapon_data читается нетпакет активной пушки ГГ, чтобы узнать, установлен ли на ней прицел, а в rx_utils.get_addon_status читается значение scope_status из конфига пушки, чтобы проверить, есть ли на ней несъёмный прицел.


    local accuracy = math_ceil(db.actor:accuracy()*1000)

    if accuracy == 1 then

        if not scopeUsed then

            local item = db.actor:active_item()

            if item then

                --get_console():execute("load ~#I#: db.actor:active_item():section()="..tostring(item:section()))

                if item:section() == "wpn_binoc" then

                    scopeUsed = true

                elseif IAmAWeapon[item:clsid()] then

                    local t = amk.get_weapon_data(alife():object(item:id()))

                    scopeUsed = (bit_and(t.addon_flags, 1) == 1 or rx_utils.get_addon_status(item, "sc") == 1)

                    --amk.dump_table(t)

                end

            end

        end

    else

        scopeUsed = false

    end

 

  • Полезно 1

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

naxac.gif

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


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

@Norman Eisenherz, в db.storage не только живые онлайновые объекты, а вообще все объекты, имеющие логику: ящики, рестрикторы, вертолёты, двери и прочие физ. объекты. Так что надо проверять ещё и по классу (isStalker, isMonster).

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

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

naxac.gif

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


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

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

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

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

  • Согласен 1

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

naxac.gif

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


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

как узнать на карте произвольный 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

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


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

@Баба ЯГА, 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

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


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

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

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

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

naxac.gif

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


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

@Баба ЯГА, почему же не выйдет. Перебирай все вертексы локации и проверяй расстояние. Если меньше 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

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


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

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

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

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

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


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

@Капрал Хикс, при заклинивании выводится статик "weapon_jammed" - на апдейте лови момент его появления (if get_hud():GetCustomStatic("weapon_jammed") then...).

можешь звуками поделиться, тоже давно хотел это сделать?)

  • Полезно 4

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

naxac.gif

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


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

@Капрал Хикс, это,вернее всего, происходит из-за превышения размера пакета сохранения клиентских данных у актера: информация о заданиях там сохраняется: см. task_manager.script

Решение: для сохранения этих данных подключить , допустим, хранилище от Artos'а.

Либо оптимизировать сохранение: выкинуть лишнее, для строк использовать хэши, булевы значения побитово записывать в u8, и прочие изощрения... Но хранилище, по-моему, лучший вариант.

 

Сейчас ещё глянул - там количество записей при сохранении ограничено u8 - т.е. 255, так что если заданий в конфиге больше - будут глюки. Решение: нужно заменить в сохранении/загрузке количества записей с r(w)_u8 на r(w)_u16 - тогда лимит будет 65535.

Изменено пользователем naxac
  • Нравится 1
  • Полезно 1

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

naxac.gif

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


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

@Капрал Хикс, смотря сколько у тебя тасков. Я проверял на ОП-2, там 165 квестов, на сохранение по старой схеме (но там уже строки сохранялись хэшами) данные занимали около 2kb, активных заданий при этом было всего 2, Пакет актёра - максимум 8kb, так туда обычно ещё много чего сохраняют: таймеры там всякие, переменные разные и т.д. Вот тут я переделал немного сохранение: ссылка. Места стало занимать почти в два раза меньше. А по сравнению с чистым ТЧ - разница, наверное, раза в четыре, потому что там всё строками сохранялось.

 

@DMT, у тебя функция ASSERT не рабочая. Если бы она работала - в логе было бы написано, что в папке scripts нет подключаемого модуля (файла), и было бы написано, какого именно.

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

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

naxac.gif

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


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

@DMT, я ж тебе объясняю: сделай рабочей функцию ASSERT, и станет понятно, какой модуль отсутствует в скриптах.

Вот тут:

local module = _G[ module_name ]

Определяется переменная этого самого модуля. module_name - название скрипта. Выведи его в лог, и станет понятно, чего не хватает.

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

naxac.gif

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


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

@DMT, потому что эта функция в огсе предназначена для проверки: если первый аргумент - это false или nil, то выводится сообщение об ошибке, заданное остальными аргументами.

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

naxac.gif

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


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

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