Перейти к содержанию

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

 
 
Цитата

Igor_Misery Ошибочка, не aim, а iam. И af_iam тоже контейнер, а не артефакт. У них нету absorbation и не быть не должно.

Должно, эти контейнеры работают как артефакты, только у контейнеров с "артефактами" указывается класс SCRPTART, поэтому секция "absorbation" должна быть.
 

Спойлер

[af_aac]:af_base
$spawn                            = "artefacts\af_aac"
class                             = II_ANTIR
visual                            = dynamics\equipments\item_aac
inv_name                        = st_af_aac_name
inv_name_short                    = st_af_aac_name
description                        = st_af_aac_descr

inv_grid_width                    = 1
inv_grid_height                    = 1
inv_grid_x                        = 0
inv_grid_y                        = 30

cost                            = 10000
inv_weight                        = 1.0

belt                            = false
jump_height                        = 0.0
af_rank                            = 0

eat_health                      = 0
eat_satiety                     = 0
eat_power                       = 0
eat_radiation                   = 0
wounds_heal_perc                = 0
eat_portions_num                = 1

hit_absorbation_sect            = af_aac_absorbation <============== Название секции.
artefact_activation_seq            = af_activation_bold

;particles                        = artefact\af_thermal_idle
det_show_particles                = artefact\af_thermal_show
det_hide_particles                = artefact\af_thermal_hide
particles_bone                    = joint2
lights_enabled                  = false
trail_light_color                 = 0.9,0.4,0.2
trail_light_range                 = 2.0

attach_angle_offset                = 1.922,1.551,-0.740   
attach_position_offset          = 0.15,0.002,0.25
attach_bone_name                = bip01_r_hand
auto_attach                        = false

;скорости увеличения (уменьшения)
health_restore_speed            = 0
radiation_restore_speed            = 0
satiety_restore_speed            = 0
power_restore_speed                = 0
bleeding_restore_speed            = 0

[af_aac_absorbation] <======================= Сама секция.
burn_immunity                     = 0
strike_immunity                 = 0
shock_immunity                     = 0
wound_immunity                     = 0
radiation_immunity                 = 0
telepatic_immunity                 = 0
chemical_burn_immunity             = 0
explosion_immunity                 = 0
fire_wound_immunity              = 0

 

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


Ссылка на сообщение
Поделиться на другие сайты
 

Такс, ну я кое-что поменял теперь нету вылета. Но есть другая проблема. Я ничего не могу класть в контейнер, нету кнопки действия, хоть у меня есть скрипт, отвечающий за это.

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


Ссылка на сообщение
Поделиться на другие сайты
 

Как округлять число в send_tip? Нужно показать всего лишь десятичную дробь с разрядом до тысячных. Миллионных и десятитысячных мне не нужно.
Вызываю функцию:
local lc = actor:object("device_torch"):condition() * 100
news_manager.send_tip(db.actor, batt_cond..tostring(lc).."%.", nil, "noise_icon", 4085, nil)
При получении сообщения появляется очень длинная десятичная дробь.

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


Ссылка на сообщение
Поделиться на другие сайты
 

Winzor 

-- Объявление функции (дополняет библиотеку math) ОКРУГЛЯЕТ ЧИСЛО ДО УКАЗАННОЙ ТОЧНОСТИ
math.round = function(num, idp)
  local mult = 10^(idp or 0)
  return math.floor(num * mult + 0.5) / mult
end
--Использование функции 
math.round(3.27893, 2) -- должно вернуть 3.28

 

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

Путь во мгле. Связь времен.
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)

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


Ссылка на сообщение
Поделиться на другие сайты
 

denis2000 Получается вот это, и если вызывать число с помощью tostring(..) то будет тоже самое:
 

Спойлер

1995918891_ss__10-09-20_19-55-38_(escape).jpg.b5154502334e4d21e4ad65e0e76f0de5.jpg
Вызов:
local lc = actor:object("device_torch"):condition() * 100
news_manager.send_tip_no_sound(db.actor, batt_cond..math.round(lc, 2).."%.", nil, "noise_icon", 4085, nil)

Нужно как-то убрать числа находящиеся после второго ноля.

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


Ссылка на сообщение
Поделиться на другие сайты
 

Один из извращённых способов, но рабочий:

local number = 2.62243242351
local new_string = string.sub(tostring(number), 1, 4) -- отрубаем от строки первые 4 символа

В строке new_string будет 2.62.

  • Жму руку 1

c01570bf2e07524.png

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


Ссылка на сообщение
Поделиться на другие сайты
 

Winzor Так вам же не округление нужно, а форматирование строки! Пробуйте так:

news_manager.send_tip(db.actor, batt_cond..string.format("%.2f", lc).."%.", nil, "noise_icon", 4085, nil)

 

  • Лайк 1
  • Мастер! 1

Путь во мгле. Связь времен.
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)

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


Ссылка на сообщение
Поделиться на другие сайты
 

Всем привет. Извините если не туда пишу. При загрузке сохранялки в конце загрузки происходит вылет. Подскажите как решить проблемму.

 

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


Ссылка на сообщение
Поделиться на другие сайты
 
17 минут назад, kirasir8 сказал:

Всем привет. Извините если не туда пишу. При загрузке сохранялки в конце загрузки происходит вылет. Подскажите как решить проблемму.

 

Очень много причин для возникновения этой проблемы. В какой мод играете? Лог вылета? Все сейвы ломаются или только определённый?

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


Ссылка на сообщение
Поделиться на другие сайты
 

Мод Аномали. Ошибки не выдает. Игра грузится до определенного момента и затем без обьяснений вылетает. Рабочий стол пуст сведений почему так происходит нет.

 

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


Ссылка на сообщение
Поделиться на другие сайты
 

kirasir8 С такими проблемами обращаются к разработчику мода!


Путь во мгле. Связь времен.
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)

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


Ссылка на сообщение
Поделиться на другие сайты
 

Существует ли возможность правильно реализовать боевые смарт-каверы? Обычно происходит вылет при появлении НПС поблизости от них

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


Ссылка на сообщение
Поделиться на другие сайты
 
1 час назад, Gerbys сказал:

Существует ли возможность правильно реализовать боевые смарт-каверы?

Сначала нужно понять, что боевые смарт-каверы в ЗП, впрочем как и в ЧН, используются разрабами для "картинки" баталий. НПС якобы ведут бой. На самом деле они всего лишь отыгрывают анимацию, при полном отключении ИИ ведения боя.

По-русски - НПС просто, например, ложится, достает пушку и стреляет... в никуда.  "Картинка" ведения боя НПС вроде как 

приемлемая, только толку от этой стрельбы НПС никакого. Зато красиво!

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

И ещё,  НПС, использующие движковый бой, ВСЕГДА валят НПС, которые используют боевые смарт каверы.

  • Лайк 1
  • Мастер! 3

Терпение... И все получится.

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


Ссылка на сообщение
Поделиться на другие сайты
 

makdm, эти каверы больше предназначены для красивых кат-сцен (как в госпитале/на ЧАЭС в приквеле), нежели реальных боевых действий. Хотя я и сам до определенного момента не знал, что НПС в них, оказывается, не могут адекватно наносить урон, несмотря на присутствие в СДК галочки "can fire" при их установке.

Но! Разве в ЗП боевые смарт-каверы вообще работают? Насколько я помню, игра либо вообще крашит, если они есть на локации, либо просто ничего не происходит, поэтому их надо восстанавливать. Возможно, конечно, я неправильно их как-то ставил. Поправьте меня, если я не прав. 

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

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


Ссылка на сообщение
Поделиться на другие сайты
 

На декомпилированной Припяти обнаружил целую кучу этих самых боевых смарт каверов. Попробовал на своей локации поставить по аналогии, такие же настройки выставил в смарт кавере - игра крашится при приближении НПС к каверу


Дополнено 0 минут спустя
20 минут назад, makdm сказал:

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

Метод крутой! Но реализовывать наверное долго...


Дополнено 1 минуту спустя

Хотя бы просто сделать попробовать стандартные работающие "для картинки"

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


Ссылка на сообщение
Поделиться на другие сайты
 
10 минут назад, Stgs сказал:

Разве в ЗП боевые смарт-каверы вообще работают?

По умолчанию при ведении НПС боевых действий не работают. Принудительно - работают на Ура!

8 минут назад, Gerbys сказал:

Но реализовывать наверное долго...

Файл xr_smartcoverscript

В методе check_target() после строки elseif self.st.target_enemy ~= nil then пишем

Спойлер

self.target_condlist = xr_logic.parse_condlist( object, self.st.active_section, "target_enemy", self.st.target_enemy )
        self.target_object = xr_logic.pick_section_from_condlist( db.actor, object ,self.target_condlist )
        if self.target_object == "best_enemy" then
            self.target_enemy_id = object:best_enemy() and object:best_enemy():id()
        else
            self.target_enemy_id = get_story_object( self.target_object ) and get_story_object( self.target_object ):id()
        end

В методе execute() после строки self:check_target_selector() пишем

Спойлер

if self.st.target_enemy ~= nil then
        self.target_object = xr_logic.pick_section_from_condlist( db.actor, self.object ,self.target_condlist )
        if self.target_object == "best_enemy" then
            self.target_enemy_id = self.object:best_enemy() and self.object:best_enemy():id()
        else
            self.target_enemy_id = get_story_object( self.target_object ) and get_story_object( self.target_object ):id()
        end
        if self.target_enemy_id ~= nil then
            local target = level.object_by_id( self.target_enemy_id )
            if target and target:alive() then
                self.object:set_smart_cover_target( target )
                self.fire_pos = target:position()
            end
        end
    end

В логике НПС  пишем

Спойлер

[smartcover@stalker_1]
cover_name = val_a10_smartcover_4
use_in_combat = true
cover_state = fire_target
target_enemy = best_enemy
meet = no_meet

Где val_a10_smartcover_4 - это имя боевого смарт кавера.

 

  • Лайк 1
  • Мастер! 2
  • Жму руку 1
  • Аплодисменты 1
  • Спасибо 1

Терпение... И все получится.

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


Ссылка на сообщение
Поделиться на другие сайты
 
3 минуты назад, makdm сказал:

В логике НПС  пишем

  Логика (Скрыть контент)

[smartcover@stalker_1]
cover_name = val_a10_smartcover_4
use_in_combat = true
cover_state = fire_target
target_enemy = best_enemy
meet = no_meet

Где val_a10_smartcover_4 - это имя боевого смарт кавера.

 

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

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


Ссылка на сообщение
Поделиться на другие сайты
 

makdm А есть дополнение к посту, что нужно ещё поправить в движке для улучшенной работы?
Или этого достаточно?

  • Лайк 1

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


Ссылка на сообщение
Поделиться на другие сайты
 

Немного другой вопрос ещё есть. Сделал новую локацию, поставил первый смарт-террейн (не кавер) - при разных попытках заспавнить в нём сквад такой вылет:

Спойлер

User Message:
----------------------------------------
Expression    : !m_error_code
Function      : raii_guard::~raii_guard
File          : ..\xrServerEntities\script_storage.cpp
Line          : 748
Description   : ...all of pripyat\gamedata\scripts\smart_terrain.script:1139: attempt to perform arithmetic on field 'arrive_dist' (a nil value)

Раньше подобного не наблюдалось на другой локации

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


Ссылка на сообщение
Поделиться на другие сайты
 
13 минут назад, Winzor сказал:

Или этого достаточно?

Алгоритм примерно такой:

1. Вычисляем есть ли рядом с нпс боевой смарт кавер

2. Вычисляем находится ли враг в секторе стрельбы из смарт кавера

3. Если все истина, то занимаем смарт кавер и ведем бой

4. Если враг убит и нет других врагов в секторе стрельбы, то покидаем смарт кавер

5. Если враг ушел из сектора стрельбы - покидаем смарт кавер или выбираем другой

6. Враг приблизился на расстояние ( ??? ) - покидаем смарт кавер или выбираем другой

Это приблизительный алгоритм. В процессе тестирования могут возникнуть и другие нюансы 

Изменено пользователем makdm
  • Мастер! 5

Терпение... И все получится.

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


Ссылка на сообщение
Поделиться на другие сайты
 
52 минуты назад, Gerbys сказал:

при разных попытках заспавнить в нём сквад такой вылет

Настройки смарта приводите.


Дополнено 2 минуты спустя
54 минуты назад, Gerbys сказал:

smart_terrain.script:1139: attempt to perform arithmetic on field 'arrive_dist' (a nil value)

Говорит о том, что параметр смарта arrive_dist оказался nil вместо числа.


Путь во мгле. Связь времен.
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)

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


Ссылка на сообщение
Поделиться на другие сайты
 
31 минуту назад, denis2000 сказал:

Настройки смарта приводите.

 

Снимок экрана (164).png

В game_graphs прописан, .ltx файл создан

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

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


Ссылка на сообщение
Поделиться на другие сайты
 

Как называется файл с анимацией камеры ГГ, которая используется в момент атаки бюрера?
В момент атаки выносливость ГГ становится маленькая и возможно выпадает оружие из рук.

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


Ссылка на сообщение
Поделиться на другие сайты
 
4 часа назад, Winzor сказал:

Как называется файл с анимацией камеры ГГ, которая используется в момент атаки бюрера?

Это не анимация - это эффектор действующий в том числе и на камеру ГГ m_burer_attack_effector.


Дополнено 0 минут спустя

Gerbys Содержимое tt_base_1.ltx засекречено?


Путь во мгле. Связь времен.
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)

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


Ссылка на сообщение
Поделиться на другие сайты
 

люди, как создать lua функцию, которая будет "работать в фоне"?

 

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


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

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

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Последние посетители   1 пользователь онлайн