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

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

 
 

Policai а там как раз неровная поверхность. Можно сделать по типу wallmarks, но динамично?

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


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

Можно сделать по типу wallmarks, но динамично?

Чисто теоретически, можно заспавнить в этом месте объект типа взрывчатки у которого волмарк взрыва не черное пятно explosion_marks, а капли крови и "взорвать". В месте "взрыва" останется ВРЕМЕННЫЙ волмарк нужной текстуры.


4 часа назад, Рыж сказал:

Как сделать, чтоб аномалия электра отключилась

Скриптом вызывать движковый метод, применительно к объекту-аномалии:

object:disable_anomaly() 

 это полностью отключит аномалию.

Изменено пользователем denis2000
  • Лайк 1

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

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


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

Чисто теоретически, можно заспавнить в этом месте объект типа взрывчатки у которого волмарк взрыва не черное пятно explosion_marks, а капли крови и "взорвать". В месте "взрыва" останется ВРЕМЕННЫЙ волмарк нужной текстуры.

А можно подробнее? Что и где мне делать?

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


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

AziatkaVictor Я же говорю - теоретически, сам не проверял. Пробуйте создать секцию объекта explosive_wallmark на базе класса S_EXPLO, там убрать все сопутствующие взрыву эффекты (партиклы, звуки, поражающий эффект и тд. и тп.) главное параметр wallmark_section = explosion_blood_marks - задающий секцию описывающую метку на месте взрыва.

[explosion_blood_marks]
wallmarks   = wm\wm_blood_1
dist        = 0.5
size        = 0.6
max_count   = 20


Затем заспавните этот объект и подорвите его:

local s_obj = alife():create( "explosive_wallmark", ...position, ...level_vertex_id(), ...game_vertex_id() )

level.add_call(
	function ()
		if s_obj.online then 
			return true 
		end 
	end,
	
	function ()
		level.object_by_id( s_obj.id ):explode(0)
	end
				)

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

  • Лайк 1
  • Спасибо 1

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

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


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

Столкнулся с забавной штуковиной... Никогда раньше не декомпилил и не собирал level.spawn с помощью ACDC, но все когда-то бывает впервые.?

Декомпилил нормально, добавил недостающих секций и level.spawn разобрался без ошибок.
Но вот собираться, не желает. Выдает ошибку:

FATAL ERROR!
Function: main::check_story_ids
Line: 1875
Description: object esc_kpp_graph_point has same story id as esc_baza_graph_point ()

Гугл перевел: объект esc_kpp_graph_point имеет тот же идентификатор истории, что и esc_baza_graph_point.

Вот эти две секции:

Спойлер

 


[717]

; cse_abstract properties
section_name = graph_point
name = esc_baza_graph_point
position = -9.03432846069336, 0.565077006816864, 270.846282958984
direction = 0.00336900004185736, 0.00976600032299757, -3.30000002577435e-005
id = 65535
version = 128
script_version = 12
spawn_id = 0

; cse_alife_graph_point properties
location3 = 2

[719]

; cse_abstract properties
section_name = graph_point
name = esc_kpp_graph_point
position = -155.893432617188, -29.7726764678955, -369.627166748047
direction = -0.0301619991660118, 0.000522000016644597, 0.042068000882864
id = 65535
version = 128
script_version = 12
spawn_id = 15273

; cse_alife_graph_point properties
location3 = 4

 

 

 

И я не понимаю, что в них одинакового? Где этот "одинаковый story id"?

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

EaRLNb6.gif
AMD FX-8370 (8 X 4.35GHz); RAM 16Gb; MSI GTX 1070 (8Gb).
Windows -10 PRO (х64)

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


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

WolfHeart у обоих секций одинаковый ID.
Измени на любой свободный ID.

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

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


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

WolfHeart  Баг распаковки Дим скорее всего, если не ошибаюсь мой Кордон? В нём нет графпоинтов с одинаковым айди., сказал бы что нужно, я бы скинул нужные файлы..))


DCM

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


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

Никогда раньше не декомпилил и не собирал level.spawn с помощью ACDC, но все когда-то бывает впервые

Просто интересно. А зачем нужно распаковывать level.spawn ?

Можно просто распаковать all.spawn, добавить нужные секции, собрать. 

В чем фишка?


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

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


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

у обоих секций одинаковый ID.

id = 65535, одинаков у всех секций. Это не то.

15 минут назад, Policai сказал:

сказал бы что нужно, я бы скинул нужные файлы..))

Да Юр именно твой Кордон.

Да самому как-то интересней. ?
Но скорее всего придется к тебе обратится.

6 минут назад, makdm сказал:

В чем фишка?

А вот и не скажу. Попробуй сам догадаться. ?

Это-же вроде твоя работа:

Спойлер



[sr_idle@control]
on_info = {=actor_has_super_rank(actor_condition:max_walk_weight:inventory:max_weight:actor:jump_speed:80:70:6)} sr_sv@sv 
on_info2 = {=actor_has_rank(ui_cheat_main:ui_cheat_cop:add_cheat_spawn)} %=actor_is_tired(0.9)% 
[sr_sv@sv]
END


 

 


EaRLNb6.gif
AMD FX-8370 (8 X 4.35GHz); RAM 16Gb; MSI GTX 1070 (8Gb).
Windows -10 PRO (х64)

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


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

id = 65535, одинаков у всех секций. Это не то.

 

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

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

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


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

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

id = 65535, на сколько я понимаю, это не story id, а максимальное их кол-во.

Повторюсь, они во всех секциях и всех level.spawn, всех уровней одинаков.

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

EaRLNb6.gif
AMD FX-8370 (8 X 4.35GHz); RAM 16Gb; MSI GTX 1070 (8Gb).
Windows -10 PRO (х64)

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


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

А вот и не скажу. Попробуй сам догадаться

 

42 минуты назад, WolfHeart сказал:

Это-же вроде твоя работа

Понятно. Античит решил отключить.

Правда для этого необязательно лезть в all.spawn, а тем более в level.spawn

Всё гораздо проще.....

Успехов!

 

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

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

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


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

Античит решил отключить.

Ну почему сразу отключить? Это не сама цель. Интересно понять как он работает. ?


EaRLNb6.gif
AMD FX-8370 (8 X 4.35GHz); RAM 16Gb; MSI GTX 1070 (8Gb).
Windows -10 PRO (х64)

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


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

Интересно понять как он работает

Скрипты.... И только скрипты!


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

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


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

Правда для этого необязательно лезть в all.spawn, а тем более в level.spawn

Всё гораздо проще.....

В all.spawn, я ничего не нашел, только в level.spawn каждого уровня.

10 минут назад, makdm сказал:

Скрипты.... И только скрипты!

А вот с этим горазда сложнее. Я с ними как-то не подружился. Да и поиск ничего не дал такого, что как-то указывало на нужное и понятное мне.


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

Тезка, ты хоть на ушко на свисти, в каком скрипте искать, может и разберусь что к чему.?

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

EaRLNb6.gif
AMD FX-8370 (8 X 4.35GHz); RAM 16Gb; MSI GTX 1070 (8Gb).
Windows -10 PRO (х64)

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


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

что как-то указывало на нужное и понятное мне.

Здесь все просто.

Скрипт вычисляет менялось ли какое-то значение из установленных по дефолту разрабами Сталкера параметров игры.

Если менялось - игрок читерит.

Сразу вылет на рабочий стол.

Вот и вся наука....

 


Дополнено 7 минуты спустя
18 минут назад, WolfHeart сказал:

ты хоть на ушко на свисти, в каком скрипте искать, может и разберусь что к чему

Начни со скриптов в файле xr_conditions.script

Функции actor_has_super_rank  и actor_has_rank

Изменено пользователем makdm
  • Лайк 1
  • Спасибо 1

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

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


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

Скрипт вычисляет менялось ли какое-то значение из установленных по дефолту разрабами Сталкера параметров игры.

Это понятно, вот только не все параметры он контролирует. Некоторые можно менять и вылета нет. Значит он контролирует какие-то определенные параметры, а не все. Из этого следует, что эти параметры, как-то должны в нем прописываться. Так вот поиск ничего не дал такого что-бы указывало на нужные мне параметры.

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


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

Начни со скрипта в файле xr_effects,script

Функция actor_has_super_rank

А вот за наводку спасибо!

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

EaRLNb6.gif
AMD FX-8370 (8 X 4.35GHz); RAM 16Gb; MSI GTX 1070 (8Gb).
Windows -10 PRO (х64)

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


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

А вот за наводку спасибо!

Я там файл поправил. Не промахнись!!!!

  • Лайк 1

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

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


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

Функции actor_has_super_rank  и actor_has_rank

Е нет в xr_effects.script.

Она есть только в xr_conditions.script и в xr_motivator.script


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

Я там файл поправил. Не промахнись!!!!

Ага, увидел уже.


EaRLNb6.gif
AMD FX-8370 (8 X 4.35GHz); RAM 16Gb; MSI GTX 1070 (8Gb).
Windows -10 PRO (х64)

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


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

makdm понапридумывают античиты, а нам потом ковыряйся) Благодарствую, давно искал)

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


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

Добрый вечер.  Присоединил к Зову Припяти Кордон от Чистого Неба.  Убедился, что НПС не "открывают двери" (на базе сталкеров). Уткнулись в неё лбом.

Спойлер

 

-- Вызывается на апдейте НПС
-- пробегается по всем дверям и пытается открыть те, которые находятся рядом с НПС
-- возвращает список дверей, которую открыл данный НПС
function try_to_open_door(npc)
    if true then return {} end
    local opened_doors = {}
    local npc_position = npc:position()
    for id,position in pairs(db.level_doors) do
        if npc_position:distance_to_sqr(position) <= 9 then
            if db.storage[id].ph_door ~= nil then
                local action = db.storage[id].ph_door.door_action                    
                if action.st.not_for_npc == false and action.st.closed == true then
                    --printf("OPEN DOOR")
                    action:use_callback()
                    opened_doors[id] = true
                end
            end            
        end
    end
    return opened_doors    
end

function try_to_close_door(npc, doors)
    if true then return {} end
    local npc_position = npc:position()
    local closed_doors = {}
    for id, v in pairs(doors) do
        if npc_position:distance_to_sqr(db.level_doors[id]) > 9 then
            if db.storage[id].ph_door ~= nil then
                local action = db.storage[id].ph_door.door_action                    
                if action.st.not_for_npc == false and action.st.closed ~= true then
                    --printf("CLOSE DOOR")
                    action:use_callback()
                    closed_doors[id] = true
                end
            end            
        end
    end
    return closed_doors
end

 

В учебнике Хована по этому вопросу сказано.  Закоментировать строки  if true then return {} end.  Так и сделал.  Двери заработали.   Затем возник вопрос.  А почему, собственно, в обоих функциях проверка на true.  Не сделали ли разработчики Зова Припяти ошибку?   Для теста поправил код на такой.  Чисто чтобы посмотреть, что будет.

 

Спойлер

 

-- Вызывается на апдейте НПС
-- пробегается по всем дверям и пытается открыть те, которые находятся рядом с НПС
-- возвращает список дверей, которую открыл данный НПС
function try_to_open_door(npc)
    if not true then return {} end
    local opened_doors = {}
    local npc_position = npc:position()
    for id,position in pairs(db.level_doors) do
        if npc_position:distance_to_sqr(position) <= 9 then
            if db.storage[id].ph_door ~= nil then
                local action = db.storage[id].ph_door.door_action
                if action.st.not_for_npc == false and action.st.closed == true then
                    --printf("OPEN DOOR")
                    action:use_callback()
                    opened_doors[id] = true
                end
            end            
        end
    end
    return opened_doors    
end

function try_to_close_door(npc, doors)
    if true then return {} end
    local npc_position = npc:position()
    local closed_doors = {}
    for id, v in pairs(doors) do
        if npc_position:distance_to_sqr(db.level_doors[id]) > 9 then
            if db.storage[id].ph_door ~= nil then
                local action = db.storage[id].ph_door.door_action
                if action.st.not_for_npc == false and action.st.closed ~= true then
                    --printf("CLOSE DOOR")
                    action:use_callback()
                    closed_doors[id] = true
                end
            end            
        end
    end
    return closed_doors
end

 

Все заработало без всякого закоментирования.  Вопрос знатокам скриптования, не допустили ли создатели Зова Припяти ошибку, которая осталась незамеченной?
 

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


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

Вопрос знатокам скриптования, не допустили ли создатели Зова Припяти ошибку, которая осталась незамеченной?

Здесь все правильно. Ошибки нет.

Просто изначально функция try_to_open_door(npc) планировалась для НПС, которые не входят в сквады.  Но после того как в ЗП все НПС были переведены в сквады, то необходимость в этой функции отпала. Поэтому и её закомментировали таким хитрым способом:

if true then return {} end

Т.е. функция вообще ничего не вычисляла,  а сразу возвращала пустую таблицу.

В ЗП открытие дверей при приближении  НПС к дверям реализовано в движке.

 

  • Лайк 1
  • Жму руку 1

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

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


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

З.Ы. В моде Припять Точка Отсчета я использовал эти функции., прописав их в биндер монстров. Для того чтобы кровососы, бюреры и контролеры могли открывать двери в помещениях. В логике этих монстров просто добавлен дополнительный параметр can_open_door = true


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

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


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

Здесь все правильно. Ошибки нет.

Просто изначально функция try_to_open_door(npc) планировалась для НПС, которые не входят в сквады.  Но после того как в ЗП все НПС были переведены в сквады, то необходимость в этой функции отпала. Поэтому и её закомментировали таким хитрым способом:

if true then return {} end

Т.е. функция вообще ничего не вычисляла,  а сразу возвращала пустую таблицу.

В ЗП открытие дверей при приближении  НПС к дверям реализовано в движке.

 

В СГМ 2.2 неписи (бандиты) на базе сталкеров были сквадовые.  И так же долбили двери лбом.  Движку на этих неписей было плевать.  Правда, дверь была прописана как физ.объект.  Причина была в этом?  Что дверь как объект?

Спойлер

 

[272]

; cse_abstract properties
section_name = physic_object
name = esc_stalker_base_door_1
position = -4.29534292221069, 0.646252989768982, 267.440795898438
direction = 0, 0, 0
version = 124
script_version = 8

; cse_alife_object properties
game_vertex_id = 2070
level_vertex_id = 25
object_flags = 0xffffff3a
custom_data = <<END
[collide]
ignore_static
[logic]
cfg = scripts\escape\esc_stalker_base_door_1.ltx
END

; cse_visual properties
visual_name = dynamics\door\door_old_wood_120x240_01

; cse_ph_skeleton properties

; cse_alife_object_physic properties
physic_type = 0x3
mass = 10
fixed_bones = link

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

 

 

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


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

Всем привет. Хочу поставить метку, подобную той, которой помечают места в ЗП. Но хочу сделать это через логику, нашел секцию, но как я понял, она либо работает только на ТЧ, либо я что-то делаю не так... Сама секция:

[sr_mapspot@start]
hint = esc_dead_hint
location = crcl_big

 

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


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

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

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

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

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

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

Войти

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

Войти

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