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

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

Приветствую!

У меня такой вопросец, как сменить текстуру в статике, не создавая новый статик, помню что строение было вроде такого:

имя_статика:SetTexture

Заранее спасибо. :)

  • Нравится 1
  • Не нравится 1

https://www.youtube.com/embed/U0no-6tCxhU

Канал на "Трубе"

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

здравствуйте 

какой скрипт отвечает за поведение сталкера, после того как в него попадет пуля?

Чистил обработчик в xr_motivator келбек hit, но сталкеры все равно стреляют в ответ. 

И еще смотрел настройку логики через кастом дату, за реакцию на это отвечает секция hit и описание не совсем ясно помогите растолковать

Схема показывает, что происходит при нанесении повреждения NPC.


on_hit = hit
[hit]
on_info = {+info -info =func !func ~number} %+info -info =func% - эффекты, которые вызываются в случае, если NPC нанесён хит.
on_hit НЕ СРАБАТЫВАЕТ на звук выстрела, только на попадание по сталкеру! Это сделано, потому что выстрел в воздух в общем случае не должен восприниматься как агрессия (игрок отстреливает, скажем, собак, а на него срывается охрана).
Пример использования секции:
[logic]
...
on_hit = on_hit@agr_factory_hold_fake

[on_hit@agr_factory_hold_fake]
on_info = {=hit_by_actor} %+agr_krot_skirmish_start%

 

как понимать эту схему:

on_info = {+info -info =func !func ~number} %+info -info =func% - эффекты, которые вызываются в случае, если NPC нанесён хит.

И не ясно что присваивать в on_hit

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

wanes101, колбек на хит - это событие, которое выполнится, когда нпс уже получит хит, а сам хит обрабатывает движок.

Секция hit работает ровно также, только из логики.

on_info = {+info -info =func !func ~number} %+info -info =func% - эффекты, которые вызываются в случае, если NPC нанесён хит.

Это означает, что можно установит параметр, при помощи которого можно произвести какое-то действие (забрать\выдать инфопорцию, либо вызвать функцию), т.е. эффекты, они заключены в знаки процента, при этом можно задать дополнительные условия заключённые в фигурные скобки. Обо всём этом можно почитать на Wiki (ссылка у тебя есть).

В on_info по сути ничего не присваивается. Файлы ltx по своей структуре идентичны ini файлам, таким образом on_info это поле, а значение этому полю будет то, что ты пропишешь. В последствии вся логика будет распарсена скриптами, основные скрипты находятся в xr_logic.script.

P.S.Всё же ты немного промазал с темой, тебе прямая дорого в"ковырялку".

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

Доброго дня (ночи?). Возник такой вопрос — можно ли в Сталке точно определить какой вид камеры включен (скриптово). Т.е. вид от 1-го лица, от 3-го с фиксированой камерой или от 3-го со свободной камерой. Была попытка определить по разнице позиции актора и камеры.

        local cam_position = device().cam_pos
	local pos = db.actor: position()
	local third1 = cam_position:distance_to(pos)
	local thr1 = cam_position.y - pos.y

Единственне более-менее связаные параметры это координаты Y. Но эта связка работает ( third1 - thr1 = 0, вид от 1-го лица), если ГГ стоит. Но при ходьбе и беге камера (в голове) качается и расстояние между позицией ГГ (ногами) и позицией камеры (головы) меняется. Можно ли что-то сделать?

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

Когда умрёшь, увидишь кнопки

"О'кей" и "Главное меню"
Под ними "Новая" и "Выход"

И неактивная "Назад"

 

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


local cam_position = device().cam_pos  --> Позиция камеры 
local pos          = db.actor:bone_position("bip01_head") --> Позиция головы игрока
local distance     = cam_position:distance_to(pos) --> Расстояние от камеры до головы ГГ

Не совсем понял как ты хочешь по разнице Y-ов определять что включён вид от 3-го лица с фиксированной или свободной камерой.

Как вариант настройки камеры от разного лица хранятся в файле system.ltx, actor_cam_look_ или как то так, найдёшь там вообщем. 

Там есть такой параметр как максимальное удаление\приближение камеры к игроку (на +\-) 

Настрой эти параметры так чтобы от 3-го лица с фиксированной камерой приближение было одно (например от 2 до 5 метров или ровно 5-5 чтобы камера всегда в одном месте висела), а со свободной другое (от 5\6 и больше).

Что то вроде этого. Тогда уже через distance определяй как далеко от игрока находится камера и соответственно для какого вида это расстояние приемлимо. 

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

Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О

Мастер аномалий на свою заднюю точку.

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

Другой вопрос — нажали клавишу, надо проверить, висит на ней в user.ltx нужное мне действие или нет?

Когда умрёшь, увидишь кнопки

"О'кей" и "Главное меню"
Под ними "Новая" и "Выход"

И неактивная "Назад"

 

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

Здравствуйте.

Есть ли проверки на то, существует ли парт-тексутра(определённая область в текстуре, которая записывается в .xml - "научного" названия не знаю, называю так)?

Нужно мне это для такой ситуации: если есть текстура с определённым именем (она будет в размерах больше), то загрузить её. Если нет, то загрузить текстуру другую (меньшего размера). Текстуры подгружаю в GUI.

Работы на Artstationhttps://www.artstation.com/artist/stalker_lom

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

@Сталкер Лом, глянь скрипты ui_save_dialog\ui_load_dialog.script
Это скрипты сохранения\загрузки и там показан пример проверки наличия текстуры в папке с сейвами.
Делай по аналогии для своего скрипта проверку что такой файл существует. 

Само собой это при условии что ты знаешь название текстуры. 

 

По парт-текстуру первый раз слышу или не понял что это такое.

  • Нравится 1

Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О

Мастер аномалий на свою заднюю точку.

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

Здравствуйте.

Есть функция kоторая возвращает название комбинезона kak string.
Проблема в том что я этот string хочу проверить по таблице.

group_1 = {soldier_outfit_grey = true, soldier_outfit_brown = true, ... etc.}

local get_visual = get_visual.main(obj)
if group_1[get_visual] then
-//kod//--
end

Проблема в том что, так построений if даже не стартует, как будто не распознает аргумент.
Но, если я построю if таким образом.

group_1 = {soldier_outfit_grey = true, soldier_outfit_brown = true, ... etc.}

local get_visual = get_visual.main(obj)
if get_visual == "soldier_outfit_grey" then
-//kod//--
end

To сравнение удается, то есть, это не nil и название комбинезона фактически находится в get_visual.

Какие-то советы, что делаю не так?

Я читал lua tutorial и там сказано что это правильный способ чтобы сравнивать string со значениями в таблице но у меня как то не выходит.

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

Я бы тебе посоветовал использовать разные названия для переменных и для скриптов (get_visual)

А вот я без особых надежд взял и изменил название на

 local get_oname = get_visual.main(obj)

и сразу же заработало...

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

Reisen, попробуй так сделать:

На будущие постараюсь помнить что есть еще такой способ.

 

Спасибо за помощь, надо мне было сразу же сюда писать, а не голову ламать часами.

Изменено пользователем Reisen
  • Нравится 1
Ссылка на комментарий

Интересно, на сколько я неправильно понимаю, что здесь что-то не так (amk-мод, amk.script):

function fill_item_packet(ret,stpk,updpk)

stpk:w_float(ret.condition)

updpk:w_u8(ret.updnum_items)

updpk:w_float(ret.updpos.x)

updpk:w_float(ret.updpos.y)

updpk:w_float(ret.updpos.z)

readvu8uN(updpk,ret.updcse_alife_item__unk1_q8v4)

readvu8uN(updpk,ret.updcse_alife_item__unk2_q8v3)

readvu8uN(updpk,ret.updcse_alife_item__unk3_q8v3)

return ret

end

Но ведь ни у кого ж ни разу не вылетало ?

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

Я не смотрел скрипт АМК, поэтому не знаю что делает функция readvu8uN но в остальном тут не должно быть ошибок. Но вообще для работы с нэт-пакетами лучше использовать скрипт m_netpk (или как то так, ещё может m_net_utils.script называться) из Simbion Mod-а (потому что на форуме будет проблематично его найти)

Там очень удобная библиотека функций для работы с нэт-пакетами. Ну или найди последние посты xStream-а в которых как раз обсуждались нэт-пакеты.  

 

Собстно вбей в поиск по этой теме m_netpk и найдёшь тут один из вариантов (если ещё нету более новых)

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

Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О

Мастер аномалий на свою заднюю точку.

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

Удобная, но неторопливая. Кстати, на яндексе отдача файлов в очередной раз сдохла.

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

@Dennis_Chikin, как говорится, спешка нужна при ловле блох. При работе с нет-пакетами торопливость  противопоказана. ;-)

 

Обновил и сам модуль и ссылку: m_netpk от 03.09.2013

 

Ну а по твоему вопросу: не было вылетов потому, что а) данный код не был востребован и б) искажение данных нет-пакета не всегда приводит к вылетам. Вспомни т.н. "рельсы", когда модели убитых монстров растягивались на пол локации.

Отсутствие фатальной ошибки (вылета) нередко годами скрывает наличие ошибки, а в amk.script немало таких огрех и др. рудиментов...

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

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

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

"Вспомни т.н. "рельсы", когда модели убитых монстров растягивались на пол локации."

 

Кстати, а что это вообще было ?

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

Ну так кратко уже упомянул: "б) искажение данных нет-пакета"

Если не сильно углубляться в дебри, то "рельсы" возникают из-за:

1.В АМК-моде имеются динамические рестрикторы (например аномалии), которые  спавнятся в процессе игры и удаляются из игры.

2. Объекты в игре зависимы от рестрикторов и имеются т.н. "out_restrictions" и "in_restrictions", которые прописываются движком в нет-пакеты объектов.

3.(!) Чтобы при удалении рестриктора(ов) не возникало вылетов из-за "хвостов" в нет-пакетах, в АМК-моде имеются зачистки рестрикторов в нет-пакетах (см. on_register иль net_destroy), для чего считываются нет-пакеты и => crvu32u16u2={}.

4. При смерти монстров/сталкеров их объект получает физическую оболочку (phisic_shell) и в нет-пакете меняется структура(расширяется). В параметре 'skeleton_flags' изменяются значения битов, появляются дополнительные параметры/значения скелета/костей (bones).

Именно это и приводит к искажению пакетов, т.к. упрощенное (неверное!) чтение и запись искажает значения... Порою это приводит к вылетам иль "битым сэйвам", порой остается незаметным, а порою измененные величины векторов превращают трупы во что угодно, в том числе и "рельсы", вытягивая в том иль ином направлении.

Примечание: Чтобы изменить требуемый параметр приходится считывать весь(!) нет-пакет объекта и его (пере)записывать, заменяя требуемое значение, а в АМК-моде (amk.script) это делается даже одновременно с двумя типами пакетов ("state" и "update"), и любой сбой при чтении приводит к непредсказуемости. 

 

Подобные косяки могут быть и с предметами, т.к. алгоритм чтения/записи параметров секции cse_alife_object_physic, как и cse_ph_skeleton, кастрирован (упрощен).

Немало и других некорректных частей в алгоритмах нет-пакетов в amk.script.

Изменено пользователем Artos
  • Нравится 2

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

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

Доброго времени всем суток.

Возможно в ЗП проверить принадлежит ли данный смарт определенной группировке, так как ЧН?

ПИС функция ЧН не работает, что надо поменять?

 

 

function smart_captured_by_faction(actor , obj, p)
        local smart_name = p[1]
        local faction_name = p[2]

        if smart_name == nil or faction_name == nil then
         abort("Wrong parameters")
        end

        local smrt = sim_board.get_sim_board().smarts_by_names[smart_name]
        if smrt == nil then
         abort("Smart name [%s] doesn't exist.", smart_name)
        end

        if smrt.player_name == faction_name then
         return true
        end
        return false
end 

 

 

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

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

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

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

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

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

Войти

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

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

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