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

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


Svoboда

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

Я тоже не понимаю почему всех стоячих неписей делают на remark

поставте волкера с одной точкой (точка локк по желанию) или вобще чампера.

Строгое предупреждение от модератора n6260
Пишем грамотно.

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


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

В лагере новичков Волк и Фанат кроме того что эксклюзивные занимают работу предназначенную только для них

А остальные просто эксклюзивные т.к у них в алл спавне прописанно выделенное

 

[137]

; cse_abstract properties

section_name = stalker

name = esc_lager1

position = -209.067367553711,-19.7512016296387,-132.083114624023

direction = 0.062321275472641,0.00316426996141672,0.0140644172206521

 

; cse_alife_trader_abstract properties

money = 5000

character_profile = esc_stalker_novice

 

; cse_alife_object properties

game_vertex_id = 61

distance = 9.80000019073486

level_vertex_id = 43968

object_flags = 0xffffffbf

custom_data = <<END

[smart_terrains]

esc_lager = true

[spawn]

conserva

END

 

; cse_visual properties

visual_name = actors\novice\green_stalker_2

 

; cse_alife_creature_abstract properties

g_team = 0

g_squad = 1

g_group = 5

health = 1

dynamic_out_restrictions =

dynamic_in_restrictions =

 

upd:health = 1

upd:timestamp = 0x617a6b75

upd:creature_flags = 0x6b

upd:position = -209.067367553711,-19.7512016296387,-132.083114624023

upd:o_model = 0

upd:o_torso = 0.00316426996141672,0.062321275472641,0

upd:g_team = 0

upd:g_squad = 1

upd:g_group = 5

 

; cse_alife_monster_abstract properties

 

upd:next_game_vertex_id = 65535

upd:prev_game_vertex_id = 65535

upd:distance_from_point = 0

upd:distance_to_point = 0

 

; cse_alife_human_abstract properties

predicate5 = 2,2,0,1,1

predicate4 = 0,2,0,2

 

; cse_ph_skeleton properties

 

upd:start_dialog =

 

; se_stalker properties

 

 

 

ЗЫ Я удалял выделенное в алл спавне и неписи прекрасно занимают работы только гулаг уже не является для них эксклюзивным

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

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


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

Помоему только через нет пакет вобщем изменить секцию смарт террайн на нужную

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


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

Якут

я не занимаюсь зп но по анологии с тч

 

active = kamp@koster_marsh_baza01

combat_ignore = 10 незнаю что это наверно дистанция игнорирования боя

[kamp@koster_marsh_baza01]

center_point = kamp_center_marsh01

meet = meet_guide а разве в зп не такой формат meet = meet@..имя

combat_ignore_cond = always а вот тут у тебя игнор боя в любом случае

 

points = p0

p0:name = wp00|a=sit_ass это зачем схема камп сама усадит непися

p0:position = -157.044052124023,0.613676309585571,-310.872619628906

p0:game_vertex_id = 1070

p0:level_vertex_id = 65989

 

пример из тч

 

[esc2_bandit_les_kamp_1]

points = p0

p0:name = name00

p0:position = 312.993621826172,3.61605930328369,117.678817749023

p0:game_vertex_id = 143

p0:level_vertex_id = 571664

 

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


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

Если нпс в гулаге то все просто

t = { section = "logic@esc_lager_kamp1",для любой работы

 

логика

 

[logic@esc_lager_kamp1]

active = kamp1@esc_lager

 

[kamp1@esc_lager]

center_point = camp_center

path_walk = camp_center_task

soundgroup = esc_lager

meet = meet@lager

 

если нет то по анологично

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


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

Добавлю про check_fighting

 

Использование функции check_fighting

сама функция находится в файле \gamedata\scripts\xr_conditions.script

 

вот она

-- проверка (по story_id) того, что нашим врагом есть хотя бы кото-то один из списка

function check_fighting(actor, npc, p)

local enemy = db.storage[npc:id()].enemy

local sid

if enemy and enemy:alive() then

sid = enemy:story_id()

for i, v in pairs(p) do

--printf("_bp: %s.check_fighting(%d)", npc:name(), v)

if type(v) == 'number' and sid == v then

--printf("TRUE")

return true

end

end

end

--printf("_bp: check_fighting() = false")

return false

end

 

Вызывается из логики НПС

секция [combat_ignore]

 

пример логика бандитов АТП (игнорируюе Шустрого)

файл gamedata\config\misc\gulag_escape.ltx

 

;-------------------------------------------------------------------------------------------------

;-- ESCAPE FACTORY BANDITS

;-------------------------------------------------------------------------------------------------

[logic@esc_fabrika_bandit_walker1]

active = walker1@esc_fabrika_bandit

combat_ignore = combat_ignore

 

[walker1@esc_fabrika_bandit]

path_walk = day_walk1

path_look = day_look1

def_state_moving = raid

def_state_moving_fire = raid_fire

def_state_campering = threat

def_state_campering_fire = threat_fire

combat_ignore_cond = {=check_fighting(004)} игнорируют НПС с story_id = 4

 

004 это story_id Шустрого вот его секция в алл спавне

 

cse_abstract properties

section_name = stalker

name = esc_shustryi

position = 118.689079284668,-7.4942798614502,7.65357303619385

direction = 0,0,0

 

; cse_alife_trader_abstract properties

money = 5000

character_profile = esc_shustryi

 

; cse_alife_object properties

game_vertex_id = 118

distance = 8.39999961853027

level_vertex_id = 422012

object_flags = 0xffffffbf

custom_data = <<END

[smart_terrains]

esc_lager = true

END

story_id = 4

; cse_visual properties

visual_name = actors\novice\green_stalker_1

 

; cse_alife_creature_abstract properties

g_team = 0

g_squad = 0

g_group = 0

health = 2

dynamic_out_restrictions =

dynamic_in_restrictions =

 

upd:health = 2

upd:timestamp = 0x69206669

upd:creature_flags = 0x6e

upd:position = 118.689079284668,-7.4942798614502,7.65357303619385

upd:o_model = 0

upd:o_torso = 0,0,0

upd:g_team = 0

upd:g_squad = 0

upd:g_group = 0

 

; cse_alife_monster_abstract properties

 

upd:next_game_vertex_id = 65535

upd:prev_game_vertex_id = 65535

upd:distance_from_point = 0

upd:distance_to_point = 0

 

; cse_alife_human_abstract properties

predicate5 = 1,1,0,0,2

predicate4 = 1,1,0,0

 

; cse_ph_skeleton properties

 

upd:start_dialog =

 

; se_stalker properties

 

Игнорируемых НПС может быть несколько пример

часть логики стукача на арм складах

 

[5281]

; cse_abstract properties

section_name = stalker

name = mil_freedom_member0001

position = -178.503997802734,-16.9659557342529,352.31005859375

direction = 0,0,0

 

; cse_alife_trader_abstract properties

money = 5000

character_profile = mil_Svoboda_stukach

 

; cse_alife_object properties

game_vertex_id = 1828

distance = 24.5

level_vertex_id = 144846

object_flags = 0xfffff7ff

custom_data = <<END

[logic]

active = walker0

on_death = death

combat_ignore = combat_ignore

 

[walker0]

path_walk = mil_freedom_courier_wait_path

path_look = mil_freedom_courier_wait_look

on_actor_dist_le = 12 | %=killactor%

on_info = {+mil_actor_in_khutor_zone} walker1

 

[walker1]

path_walk = mil_freedom_stukach_walk4

path_look = mil_freedom_stukach_look4

on_actor_dist_le_nvis = 12 | %=killactor%

on_signal = arrive | remark1

combat_ignore_cond = {=check_fighting(712:713:714:719)} false

 

[remark1]

no_rotate = true

no_move = true

anim = wait_rac

snd = mil_pavlik_to_ara

on_signal = sound_end | %+mil_courier_call% remark2

on_actor_dist_le_nvis = 12 | %=killactor%

target = mil_courier_look_point, 0

combat_ignore_cond = {=check_fighting(712:713:714:719)} false

[remark2]

anim = guard

on_info = {+mil_ara_end} kamp1

on_actor_dist_le_nvis = 12 | %=killactor%

target = mil_courier_look_point, 0

combat_ignore_cond = {=check_fighting(712:713:714:719)} false

 

[kamp1]

center_point = mil_freedom_khutor_center

meet_enable = true

meet_dialog = mil_dolg_relax_dialog

danger = danger

path_walk = mil_freedom_khutor_center_task

radius = 3

on_actor_dist_le_nvis = 12 | %=killactor%

combat_ignore_cond = {=check_fighting(712:713:714:719)} false

 

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

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


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

Для АМК. Спавн с выдачей SID_а:

function spawn_mervin22()
    local obj=alife():create("esc_mervin22",vector():set(9.693,56.273,48.022),5205,2417)
    local params=amk.read_stalker_params(obj)
    params.custom="[logic]ncfg = scriptsnewesc_mervin22.ltx"
    params.sid=30139
    amk.write_stalker_params(params,obj)
end

Для контроля назначнных SID_ов надо зарегистрировать Вашего НПС в файле: game_story_ids.ltx (gamedataconfig) по аналогии с остальными. Номер sid надо брать, чтобы он не дублировался с существующими, лучше назначить с "запасом", напрмер, как в примере, иначе будут вылеты с указанием на "дублирование сида".

 

Удаление НПС по SID_у:

function del_mervin22()
    local sim = alife()
    local se_obj = sim:story_object(30139)
    if se_obj then
        sim:release(se_obj, true)
    end
end

Автор не я взято с СП

Изменено пользователем Министр

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


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

gruber

Спасибо мне тоже интересно что все это значит .

Давайте попробуем разобраться.

 

on_actor_dist_le = 3 | mob_camp2 %=monster_berserk% -- интересует эффект в знаках процента

насколько я понимаю при дистанции = 3 вкючается схема mob_camp2 с эфектом %=monster_berserk%

файл хр_эфект.скрипт вот функция

function monster_berserk(actor, npc)

npc:berserk()

end

что это значит ? может berserk некий параметр поведения?

 

on_info = nil %=disable_combat_handler%

сдесь более менее понятно

 

-- Вызов этой функции отключит обработчик [combat] боя для персонажа.

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

-- уже выполнены, и повторно выполнять их во время боя нельзя (а условия секции [combat] проверяются на каждом

-- апдейте, когда персонаж в бою, если, конечно, не отключены вызовом этой функции).

function disable_combat_handler(actor, npc)

if db.storage[npc:id()].combat then

db.storage[npc:id()].combat.enabled = false

end

 

if db.storage[npc:id()].mob_combat then

db.storage[npc:id()].mob_combat.enabled = false

end

end

 

-- Вызов этой функции отключит обработчик [combat_ignore] перехвата боя для персонажа.

function disable_combat_ignore_handler(actor, npc)

if db.storage[npc:id()].combat_ignore then

db.storage[npc:id()].combat_ignore.enabled = false

end

end

 

 

on_info2 = {=hitted_by(412)} nil %=hit_npc(412:bip01_head:400:2700)%

 

Функция

function hit_npc(actor, npc, p) тоже более менее понятно (если кто более досконально разберет буду только рад)

local h = hit()

local rev = p[5] and p[5] == 'true'

h.draftsman = npc

h.type = hit.wound

if type(p[1]) == 'number' then

local hitter = level_object_by_sid(p[1])

if not hitter then return end

if rev then

h.draftsman = hitter

h.direction = hitter:position():sub(npc:position())

else

h.direction = npc:position():sub(hitter:position())

end

else

if rev then

h.draftsman = nil

h.direction = npc:position():sub(patrol(p[1]):point(0))

else

h.direction = patrol(p[1]):point(0):sub(npc:position())

end

end

h:bone(p[2])

h.power = p[3]

h.impulse = p[4]

--printf("HIT EFFECT: (%s, %s,%d,%d) health(%s)", npc:name(), p[2], h.power, h.impulse, npc.health)

npc:hit(h)

end

 

--[[

Дать обьекту, заданному story_id, хит.

параметры: actor, npc, p[sid,bone,power,impulse,hit_src=npc:position()]

1. sid - story_id обьекта, по которому наносится хит.

2. bone - строка. Имя кости, по которой наносится удар.

3. power - сила удара

4. impulse - импульс

5. hit_src - если число, то рассматривается как story_id обьекта, со стороны

которого наносится хит (он же является и инициатором хита), иначе это

точка (waypoint), из которой по объекту наносится хит.

Если не задано, то берется позиция обьекта, из которого была вызвана

данная функция.--]]

 

[sr_idle]

on_actor_inside = sr_timer@1 %=play_snd(characters_voice\scenario\radar\rad_hat_1)% -можно ли прописывать путь к файлу звука непосредственно из логики не прописывая его в соунд теме скрипт и в скрипт саунд

функция

так же хотеось увидеть полный разбор от знаюших.

-- играть звук в голове актёра

function play_snd(actor, npc, p)

if p[1] then

local snd_obj = xr_sound.get_safe_sound_object(p[1])

--snd_obj:play(actor, p[2] or 0, sound_object.s2d)

snd_obj:play_no_feedback(actor, sound_object.s2d, p[2] or 0, vector(), 1.0)

end

end

 

-- играть звук от указанного объекта

function play_snd_from_obj(actor, npc, p)

if p[1] and p[2] then

local snd_obj = xr_sound.get_safe_sound_object(p[2])

local obj = level_object_by_sid(p[1])

if obj ~= nil then

printf("can't find object with story id %s", tostring(p[1]))

 

-- snd_obj:play_at_pos(obj, obj:position(), sound_object.s3d)

snd_obj:play_no_feedback(obj, sound_object.s3d, 0, obj:position(), 1.0)

en

end

end

 

-- играть звук от указанного объекта

function play_snd_now(actor, npc, p)

xr_sound.set_sound_play(npc, p[1])

end

 

 

это все что я хоть немного понимаю

может более знаюшие помогут разобраться полностью.

 

 

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


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

А почему не попробовать прописать обьекту логику типа монолита ?

 

[logic]

active = ph_idle

 

[ph_idle]

tips = tip_monolith

on_use = nil %+sar2_monolith_miracle =sar_monolith_miracle% (функция из хр эфект открываюшая окно с вариантом жеания в зависимости от того что натворил гг в зоне)

 

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

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


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

Я действитеьно не знаю как это реализовать

по секции [ph_idle]

есть тоько это

 

3.10. Набор дополнительных настроек логики у разных объектов.

Для всех физических объектов есть секция ph_idle, поддерживающая кондлист в которую можно при необходимости переводить объекты.

 

Может кто то знает больше :blush:

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


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

Ну чтож вопрос : Как поговорить с физическим обьектом.?(допустим балон в бункере сидора).

Заюзать его (обьект) можно используя практически не описанную секцию [ph_idle] пример загадать желание

[logic]

active = ph_idle

 

[ph_idle]

tips = tip_monolith

on_use = nil %+sar2_monolith_miracle =sar_monolith_miracle%

насколько я понимаю при юзе обьекта срабатывает функция из хр ефект

 

данная секция дает возможность вывод на экран описания любого обьекта

или запуск любой функции при юзе обьекта

3991130665abt.jpg

 

 

так вот нужен пример функции при срабатывании которой

открываеться окно диалога

с простейшими фразами .

 

 

Хотя есть и другие фишки (можно огнемет газом из балонна заправить)

 

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


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

Disord

 

[logic]

active = ph_idle

 

[ph_idle]

tips = spi_spoki

on_use = %+budu_v_bunkere_spat%

и сдесь имя функции из xr_effects

 

tips = spi_spoki зарегестрированн в string_table_ui.xml ?

 

<?xml version="1.0" encoding="windows-1251" ?>

<string_table>

<string id="cant_walk">

<text>Вы слишком истощены, чтобы двигаться</text>

</string>

<string id="cant_walk_weight">

<text>Вы слишком перегружены, чтобы двигаться</text>

</string>

<string id="dar_poltergeist_hold_the_door">

<text>Кто-то удерживает дверь.</text>

</string>

<string id="Global Map">

<text>Глобальная карта</text>

</string>

<string id="gun_jammed">

<text>Оружие заклинило. Нужно перезарядить.</text>

</string>

<string id="inventory_box_use">

<text>Обыскать ящик ($$ACTION_USE$$)</text>

</string>

<string id="Local Map">

<text>Локальная карта</text>

</string>

<string id="st_game_saved">

<text>игра сохранена</text>

</string>

<string id="tip_car_locked">

<text>Заблокировано</text>

</string>

<string id="tip_car_use">

<text>Открыть дверь ($$ACTION_USE$$)</text>

</string>

<string id="tip_door_close">

<text>Нажмите ($$ACTION_USE$$), чтобы закрыть дверь</text>

</string>

<string id="tip_door_coded">

<text>Дверь закодирована</text>

</string>

<string id="tip_door_decode">

<text>Нажмите ($$ACTION_USE$$), чтобы декодировать дверь</text>

</string>

<string id="tip_door_decoding">

<text>Идет процесс декодирования</text>

</string>

<string id="tip_door_locked">

<text>Дверь заперта</text>

</string>

<string id="tip_door_open">

<text>Нажмите ($$ACTION_USE$$), чтобы открыть дверь</text>

</string>

<string id="tip_gate_close">

<text>Нажмите ($$ACTION_USE$$) для того, чтобы закрыть ворота</text>

</string>

<string id="tip_gate_locked">

<text>Ворота заблокированы</text>

</string>

<string id="tip_gate_open">

<text>Нажмите ($$ACTION_USE$$) для того, чтобы открыть ворота</text>

</string>

<string id="tip_monolith">

<text>ЗАГАДАТЬ ЖЕЛАНИЕ ($$ACTION_USE$$)</text>

</string>

</string_table>

 

 

Грубо говоря при юзе обьекта срабатывает функция .

 

 

Ну и для примера вот

 

[8388]

; cse_abstract properties

section_name = physic_object

name = sar_monolith

position = 24.0560283660889,58.6652679443359,42.6767501831055

direction = 0,0.00899999216198921,0

 

; cse_alife_object properties

game_vertex_id = 2402

distance = 0

level_vertex_id = 9864

object_flags = 0xffffff3a

custom_data = <<END

[collide]

ignore_static

 

[logic]

cfg = scripts\sar_monolith.ltx

END

 

; cse_visual properties

visual_name = physics\anomaly\artefact_monolit

 

; cse_ph_skeleton properties

 

; cse_alife_object_physic properties

physic_type = 0x3

mass = 10

fixed_bones = link

 

 

логика

 

[logic]

active = ph_idle

 

[ph_idle]

tips = tip_monolith

on_use = nil %+sar2_monolith_miracle =sar_monolith_miracle%

 

функция в xr_effects

 

function sar_monolith_miracle(actor, npc)

--' Убил лидеров группировок

if has_alife_info("mil_lukash_dead") and

has_alife_info("bar_voronin_dead")

then

game.start_tutorial("mov_desire_3")

return

end

 

--' Много денег

if db.actor:money() >= 50000 then

game.start_tutorial("mov_desire_2")

return

end

 

--' Хорошая репутация

if db.actor:character_reputation() >= 1000 then

game.start_tutorial("mov_desire_1")

return

end

 

--' плохая репутация

if db.actor:character_reputation() <= -1000 then

game.start_tutorial("mov_desire_4")

return

end

 

game.start_tutorial("mov_desire_5")

end

 

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

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


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

Что значит

 

[use]

on_info = %+budu_v_

bunkere_spat%

 

 

Для on_info = нужна функция условие on_info = {=имя_функции} если возврашает труе то только потом эфект %+budu_v_

bunkere_spat%

 

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


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

on_actor_inside = %=cit_gulag_1_restavn% sr_idle@out

 

 

Должна сработать функция с именем %=cit_gulag_1_restavn%

прописаная в xr_effects.script.

 

Она есть?

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


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

Disord

Eсли тебе надо чтоб гг при юзе обьекта доустим диван, матрас, ящик (у меня балон ) засыпал

то рестрикторы и поршни не нужны все проше

 

[logic]

active = ph_idle

 

[ph_idle]

tips = spi_spoki

on_use = %=budu_v_bunkere_spat%

 

добавляеш в string_table_ui.xml

строку типа

<string id="spi_spoki">

<text>ПОСПАТЬ ($$ACTION_USE$$)</text>

</string>

 

В xr_effects

 

function budu_v_bunkere_spat()

sleep_manager.sleep_three_hours() Старт функции сна из файла sleep_manager.script

end

 

 

При подходе к обьекту выскочит Поспать нажмите F

Жмем F и ГГ засыпает .

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


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

Хантер

 

Eсть много вариантов толкованния вылета данного типа

Вот лично мое мнение

 

Он происходит

1. при попытке отправить обьект в твоем случае object [esc_lager3]

за пределы ограничивающего рестриктора в загрузке работ гулага esc_lager

--' Лагерь новичков на Escape
    if type == "esc_lager" then
        -- охранники
        t = { section = "logic@esc_lager_zoneguard1",
            idle = 0,
            prior = 9, state = {0, 1},
            in_rest = "", out_rest = "esc_lager_guard_kill_zone",}

Мне кажется что ты попытался отправить обитателя лагеря за его пределы или я ошибаюсь?

если да, то просто удали у всех работ гулага esc_lager - esc_lager_guard_kill_zone, должно быть так, для всех работ :

--' Лагерь новичков на Escape
    if type == "esc_lager" then
        -- охранники
        t = { section = "logic@esc_lager_zoneguard1",
            idle = 0,
            prior = 9, state = {0, 1},
            [b] in_rest = "", out_rest = "",}

Изменено пользователем Куфзук

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


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

Хантер

 

gulag_escape.script

 

--' Лагерь новичков на Escape

if type == "esc_lager" then

-- охранники

t = { section = "logic@esc_lager_zoneguard1",

idle = 0,

prior = 9, state = {0, 1},

in_rest = "", out_rest = "esc_lager_guard_kill_zone",

}

table.insert(sj, t)

t = { section = "logic@esc_lager_zoneguard2",

idle = 0,

prior = 9, state = {0, 1},

in_rest = "", out_rest = "esc_lager_guard_kill_zone",

}

table.insert(sj, t)

t = { section = "logic@esc_lager_walker3",

idle = 0,

prior = 8, state = {0, 1},

in_rest = "", out_rest = "esc_lager_guard_kill_zone"

}

table.insert(sj, t)

t = { section = "logic@esc_lager_walker4",

idle = 0,

prior = 8, state = {0, 1},

in_rest = "", out_rest = "esc_lager_guard_kill_zone"

}

table.insert(sj, t)

-- у костра днём

t = { section = "logic@esc_lager_kamp1",

idle = 0,

prior = 6, state = {0},

in_rest = "", out_rest = "esc_lager_guard_kill_zone"

}

table.insert(sj, t)

t = { section = "logic@esc_lager_kamp1",

idle = 0,

prior = 6, state = {0},

in_rest = "", out_rest = "esc_lager_guard_kill_zone"

}

table.insert(sj, t)

t = { section = "logic@esc_lager_kamp1",

idle = 0,

prior = 6, state = {0},

in_rest = "", out_rest = "esc_lager_guard_kill_zone"

}

table.insert(sj, t)

-- Волк, собственной персоной.

t = { section = "logic@esc_lager_volk",

idle = 0,

prior = 16, state = {0,1},

in_rest = "", out_rest = "esc_lager_guard_kill_zone",

predicate = function(obj_info)

return obj_info.profile_name == "esc_wolf"

end

}

table.insert(sj, t)

-- Шустрый

t = { section = "logic@esc_lager_shustryi",

idle = 0,

prior = 16, state = {0,1},

online = true,

in_rest = "", out_rest = "",

predicate = function(obj_info)

return obj_info.profile_name == "esc_shustryi"

end

}

table.insert(sj, t)

t = { section = "logic@esc_lager_kamp1",

idle = 0,

prior = 16, state = {2},

online = true,

in_rest = "", out_rest = "",

predicate = function(obj_info)

return obj_info.profile_name == "esc_shustryi"

end

}

table.insert(sj, t)

 

-- Фанат

t = { section = "logic@esc_lager_fanat",

idle = 0,

prior = 16, state = {0,1},

in_rest = "", out_rest = "esc_lager_guard_kill_zone",

predicate = function(obj_info)

return obj_info.profile_name == "esc_fanat"

end

}

table.insert(sj, t)

 

-- спящие ночью

t = { section = "logic@esc_lager_sleeper1",

idle = 0,

prior = 3, state = {1},

in_rest = "", out_rest = "esc_lager_guard_kill_zone"

}

table.insert(sj, t)

t = { section = "logic@esc_lager_sleeper2",

idle = 0,

prior = 3, state = {1},

in_rest = "", out_rest = "esc_lager_guard_kill_zone"

}

table.insert(sj, t)

t = { section = "logic@esc_lager_kamp1",

idle = 0,

prior = 3, state = {1},

in_rest = "", out_rest = "esc_lager_guard_kill_zone"

}

table.insert(sj, t)

-- спящие ночью и днёи

t = { section = "logic@esc_lager_sleeper5",

idle = 0,

prior = 5, state = {0,1},

in_rest = "", out_rest = "esc_lager_guard_kill_zone"

}

table.insert(sj, t)

t = { section = "logic@esc_lager_kamp1",

idle = 0,

prior = 0, state = {0,1},

in_rest = "", out_rest = "esc_lager_guard_kill_zone"

}

table.insert(sj, t)

t = { section = "logic@esc_lager_sleeper7",

idle = 0,

prior = 0, state = {0,1},

in_rest = "", out_rest = "esc_lager_guard_kill_zone"

}

table.insert(sj, t)

 

t = { section = "logic@esc_lager_defend1",

idle = 0,

prior = 15, state = {2},

in_rest = "", out_rest = "esc_lager_guard_kill_zone"

}

table.insert(sj, t)

t = { section = "logic@esc_lager_defend2",

idle = 0,

prior = 14, state = {2},

in_rest = "", out_rest = "esc_lager_guard_kill_zone"

}

table.insert(sj, t)

t = { section = "logic@esc_lager_defend3",

idle = 0,

prior = 13, state = {2},

in_rest = "", out_rest = "esc_lager_guard_kill_zone"

}

table.insert(sj, t)

t = { section = "logic@esc_lager_defend4",

idle = 0,

prior = 12, state = {2},

in_rest = "", out_rest = "esc_lager_guard_kill_zone"

}

table.insert(sj, t)

t = { section = "logic@esc_lager_defend5",

idle = 0,

prior = 11, state = {2},

in_rest = "", out_rest = "esc_lager_guard_kill_zone"

}

table.insert(sj, t)

t = { section = "logic@esc_lager_defend6",

idle = 0,

prior = 10, state = {2},

in_rest = "", out_rest = "esc_lager_guard_kill_zone"

}

table.insert(sj, t)

t = { section = "logic@esc_lager_defend7",

idle = 0,

prior = 9, state = {2},

in_rest = "", out_rest = "esc_lager_guard_kill_zone"

}

table.insert(sj, t)

t = { section = "logic@esc_lager_defend8",

idle = 0,

prior = 8, state = {2},

in_rest = "", out_rest = "esc_lager_guard_kill_zone"

}

table.insert(sj, t)

t = { section = "logic@esc_lager_defend9",

idle = 0,

prior = 16, state = {2},

in_rest = "", out_rest = "esc_lager_guard_kill_zone",

predicate = function(obj_info)

return obj_info.name == "esc_novice_attacker1"

end

}

table.insert(sj, t)

t = { section = "logic@esc_lager_defend10",

idle = 0,

prior = 16, state = {2},

in_rest = "", out_rest = "esc_lager_guard_kill_zone",

predicate = function(obj_info)

return obj_info.name == "esc_vagon_wounded"

end

}

table.insert(sj, t)

t = { section = "logic@esc_lager_defend11",

idle = 0,

prior = 5, state = {2},

in_rest = "", out_rest = "esc_lager_guard_kill_zone"

}

table.insert(sj, t)

t = { section = "logic@esc_lager_defend12",

idle = 0,

prior = 20, state = {2},

in_rest = "", out_rest = "esc_lager_guard_kill_zone",

predicate = function(obj_info)

return obj_info.profile_name == "esc_fanat"

end

}

table.insert(sj, t)

t = { section = "logic@esc_lager_defend13",

idle = 0,

prior = 20, state = {2},

in_rest = "", out_rest = "esc_lager_guard_kill_zone",

predicate = function(obj_info)

return obj_info.profile_name == "esc_wolf" and not (has_alife_info("agroprom_military_case_have") and has_alife_info("esc_fanat_spawn"))

end

}

table.insert(sj, t)

end

 

 

Добавлено через 36 мин.:

2 конфликт с схемой обхода аномалий (аномалия в принципе тот же рестриктор)

если точка пути обьекта попадет в аномалию (зону рестриктора) вылет .

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


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

В консоли нечего не поучится

Засунь зто в \S.T.A.L.K.E.R. - Shadow of Chernobyl\gamedata\config\creatures\actor.ltx (замени то что там на это)

 

[actor_terrain]

255,255,000,255

 

[actor]:common_ph_friction_params_on_npc_death

GroupControlSection = spawn_group

$spawn = "actor"

$ed_icon = ed\ed_actor

$player = on

$prefetch = 16

cform = skeleton

class = O_ACTOR

money = 40;

rank = 3;

script_binding = bind_stalker.actor_init

visual = actors\hero\stalker_novice.ogf

destroyed_vis_name = physics\Dead_Body\skelet_crash

 

terrain = actor_terrain

 

max_item_mass = 200.0

jump_speed = 6.

crouch_coef = 0.45

climb_coef = 0.7

run_coef = 2.1

sprint_koef = 2.6

run_back_coef = 1.8

walk_back_coef = 0.8

air_control_param = 0.1

walk_accel = 17

 

;радиус в котром над предметами выводятся их названия

pickup_info_radius = 5 ;3

 

ef_creature_type = 17 ; option for evaluation functions

 

; attach params

attachable_items = device_torch,attachable_item,hand_radio

 

ph_box0_center = 0.0, 0.9, 0.0

ph_box0_size = 0.35, 0.9, 0.35

ph_box1_center = 0.0, 0.75, 0.0

ph_box1_size = 0.35, 0.75, 0.35

ph_box2_center = 0.0, 0.6, 0.0

ph_box2_size = 0.35, 0.6, 0.35

stalker_restrictor_radius = .05;0.55;0.75;0.9

stalker_small_restrictor_radius = .05;

medium_monster_restrictor_radius = 0.1

ph_crash_speed_min = 14

ph_crash_speed_max = 30

ph_collision_damage_factor = 1.0

ph_mass = 80

 

weapon_bone0 = bip01_r_finger1

weapon_bone1 = bip01_l_finger1

weapon_bone2 = bip01_r_finger11

 

damage = actor_damage

 

hit_probability_gd_novice = 0.20

hit_probability_gd_stalker = 0.30

hit_probability_gd_veteran = 0.40

hit_probability_gd_master = 0.50

hit_sounds = actor_hit_snds

;actor condition

 

immunities_sect = actor_immunities_gd_master

condition_sect = actor_condition

 

heavy_breath_snd = actor\breath_1 ;звук тяжелого дыхания при усталости

heavy_blood_snd = affects\heartbeat; heart\8

 

material = creatures\actor

camera_height_factor = 0.85

 

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-----(AMK SNIPER ADDON v1.0)-----

;дисперсия стрельбы с учетом ходьбы и бега

disp_base = 0.51 ;угол (в градусах) разлета пуль, когда актер стоит на месте

disp_aim = 0.04 ;0.51

disp_vel_factor = 1.0 ;на сколько увеличится дисперсия при скрости в 10 м/с (не обязательно при беге)

disp_accel_factor = 2.0 ;еще на сколько увеличится, если актер бежит (+ скорость)

disp_crouch_factor = -0.3 ;уменьшение если актер сидит

disp_crouch_no_acc_factor = -0.6 ;уменьшение если актер сидит + no acceleration

;disp_jump_factor = 2.0

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-----

 

missile_throw_offset = 0.3, 0.5, 0.5

 

body_remove_time = 30000 ;время уничтожения трупа (с учетом TimeFactor)

 

sleep_time_factor = 1000 ;400 ;во сколько раз время идет быстрее, когда актер спит

max_sleep_hours = 12

;species of monster

species = actor

 

 

;---STEP MANAGER------------------------------------------------------

LegsCount = 2

step_params = stalker_step_manager

foot_bones = stalker_foot_bones

 

memory_update_time = 100

 

; visibility parameters

DynamicObjectsCount = 32

min_view_distance = 1.0 ; коэффициент, который множится на eye_range, в зависимости от угла

max_view_distance = 1.0 ; коэффициент, который множится на eye_range, в зависимости от угла

visibility_threshold = 1.0 ; значение, при достижении суммой которого объект считается видимым

always_visible_distance = 1.0

time_quant = 0.005

decrease_value = 0.1 ; значение, на которое уменьшается вес, если объект попал в фрустум, но отсёкся по каким-то причинам

velocity_factor = 0.5

luminocity_factor = 0.5;0 ; фактор освещения (только для Актёра)

transparency_threshold = 0.4 ; 0.25

still_visible_time = 5000 ; время, которое объект всё ещё считается видимым, даже если он уже не во фрустуме

 

[actor_immunities_gd_novice]

burn_immunity = 0.0 ;коэффициенты иммунитета

strike_immunity = 0.0

shock_immunity = 0.0

wound_immunity = 0.0

radiation_immunity = 0.0

telepatic_immunity = 0.0

chemical_burn_immunity = 0.0

explosion_immunity = 0.0

fire_wound_immunity = 0.0

 

 

[actor_immunities_gd_stalker]

burn_immunity = 0.65 ;коэффициенты иммунитета

strike_immunity = 0.65

shock_immunity = 0.65

wound_immunity = 0.65

radiation_immunity = 0.65

telepatic_immunity = 0.65

chemical_burn_immunity = 0.65

explosion_immunity = 0.3

fire_wound_immunity = 0.65

 

[actor_immunities_gd_veteran]

burn_immunity = 0.8 ;коэффициенты иммунитета

strike_immunity = 0.8

shock_immunity = 0.8

wound_immunity = 0.8

radiation_immunity = 0.8

telepatic_immunity = 0.8

chemical_burn_immunity = 0.8

explosion_immunity = 0.6

fire_wound_immunity = 0.8

 

[actor_immunities_gd_master]

burn_immunity = 1.0 ;коэффициенты иммунитета

strike_immunity = 1.0

shock_immunity = 1.0

wound_immunity = 1.0

radiation_immunity = 1.0

telepatic_immunity = 1.0

chemical_burn_immunity = 1.0

explosion_immunity = 1.0

fire_wound_immunity = 1.0

 

[actor_condition]

satiety_v = 0.000001 ;скорость уменьшения сытости со временем

radiation_v = 0.001 ;скорость уменьшения радиации

satiety_power_v = 0.000055 ;увеличение силы при уменьшении сытости

satiety_health_v = 0.0001 ;увеличение здоровья при уменьшении сытости

satiety_critical = 0.0 ;критическое значения сытости (в процентах от 0..1) когда здоровье начианает уменьшаться

radiation_health_v = 0.0001 ;уменьшение здоровья при воздействии радиации

morale_v = 0.0001 ;скорость восстановления морали

psy_health_v = 0.001 ;скорость восстановления psy-здоровья

alcohol_v = -0.0005

health_hit_part = 1.0 ;процент хита, уходящий на отнимание здоровья

power_hit_part = 0.1 ;процент хита, уходящий на отнимание силы

max_power_leak_speed = 0.0 ;накопление усталости (макс граница, до которой восстанавливается сила) в секунду игрового времени

max_walk_weight = 90

 

bleeding_v = 0.00001 ;потеря крови при номинальной ране в секунду

wound_incarnation_v = 0.3 ;скорость заживления раны

min_wound_size = 0.00001 ;минимальный размер раны, после которого она считается зажившей

 

;--when actor in sleep

satiety_v_sleep = 0.00001

radiation_v_sleep = 0.0003

satiety_power_v_sleep = 0.0001

satiety_health_v_sleep = 0.00001

radiation_health_v_sleep = 0.001

morale_v_sleep = 0.0

psy_health_v_sleep = 0.0

 

alcohol_v_sleep = -0.0005

 

bleeding_v_sleep = 0.0

wound_incarnation_v_sleep = 0.0

max_power_leak_speed_sleep = -0.00001;

;health_restore_v = 0.0001

 

;;;;;;;;

;actor_condition only

 

jump_power = 0.01 ;0.005 ;умешьшение силы с прыжком без учета веса ноши

jump_weight_power = 0.05 ;0.045 ;умешьшение силы с прыжком с учетом веса ноши, для максимального допустимого веса

overweight_jump_k = 5;10 ;10 ;коэффициент влияние перегрузки прыжок с весом (умножается на jump_weight_power)

 

stand_power = -0.01

walk_power = 0.00002 ;умешьшение силы за секнду во время ходьбы без учета веса ноши

walk_weight_power = 0.0001; ;умешьшение силы за секнду во время ходьбы с учетом веса ноши, для максимального допустимого веса

overweight_walk_k = 5;9 ;10 ;коэффициент влияние перегрузки ноши (умножается на walk_weight_power)

accel_k = 3;5 ;коэффициент на бег (умножается walk_power, walk_weight_power)

sprint_k = 75;150;185;180;200; ;коэффициент на "sprint" бег (умножается walk_power, walk_weight_power)

 

; хромота

limping_health_begin = 0.1 ;порог здоровья меньше которого актер начинает хромать

limping_health_end = 0.2 ;порог здоровья больше которого актер перестает хромать

limping_power_begin = 0.1 ;порог силы меньше которого актер начинает хромать

limping_power_end = 0.2 ;порог силы больше которого актер перестает хромать

use_limping_state = on

 

cant_walk_power_begin = 0.01 ;порог силы меньше которого актер не может двигаться

cant_walk_power_end = 0.10 ;порог силы больше которого актер сможет двигаться

 

cant_sprint_power_begin = 0.20 ;порог силы меньше которого актер не может бежать в спринте

cant_sprint_power_end = 0.30 ;порог силы больше которого актер сможет бежать в спринте

 

can_sleep_callback = dream.can_sleep_callback

sleep_video_name_callback = dream.sleep_video_name_callback

 

[actor_damage]

;bone_name = <hit_scale>,<fwd_damage_anim_index>,<wound_scale>

;<hit_scale> - коэфф. изменения хита (уменьшения здоровья)

;<wound_scale> - коэфф. изменения величины открытой раны

;-1 - нет анимаций, четный номер - спереди, нечетный номер - сзади, УКАЗЫВАЕТСЯ ТОЛЬКО ПЕРЕДНИЙ!!! ЗАДНИЙ НА АВТОМАТЕ

default = 1.0, -1, 1.0

 

bip01_pelvis = 1.0, 10, 1.5

bip01_spine = 1.0, 10, 1.5

bip01_spine1 = 1.0, 0, 1.5

bip01_spine2 = 1.0, 0, 1.5

bip01_neck = 1.0, 0, 1.5

bip01_head = 0.2, 0, 1.5

eyelid_1 = 0.0, 0, 0.0

eye_left = 0.0, 0, 0.0

eye_right = 0.0, 0, 0.0

jaw_1 = 0.0, 0, 0.0

 

bip01_l_clavicle = 1.0, 4, 1.5

bip01_l_upperarm = 1.0, 4, 1.5

bip01_l_forearm = 1.0, 4, 1.5

bip01_l_hand = 1.0, 4, 0.5

bip01_l_finger0 = 0.0, 4, 0.0

bip01_l_finger01 = 0.0, 4, 0.0

bip01_l_finger02 = 0.0, 4, 0.0

bip01_l_finger1 = 0.0, 4, 0.0

bip01_l_finger11 = 0.0, 4, 0.0

bip01_l_finger12 = 0.0, 4, 0.0

bip01_l_finger2 = 0.0, 4, 0.0

bip01_l_finger21 = 0.0, 4, 0.0

bip01_l_finger22 = 0.0, 4, 0.0

 

bip01_r_clavicle = 1.0, 2, 1.5

bip01_r_upperarm = 1.0, 2, 1.5

bip01_r_forearm = 1.0, 2, 1.5

bip01_r_hand = 1.0, 2, 0.0

bip01_r_finger0 = 0.0, 2, 0.0

bip01_r_finger01 = 0.0, 2, 0.0

bip01_r_finger02 = 0.0, 2, 0.0

bip01_r_finger1 = 0.0, 2, 0.0

bip01_r_finger11 = 0.0, 2, 0.0

bip01_r_finger12 = 0.0, 2, 0.0

bip01_r_finger2 = 0.0, 2, 0.0

bip01_r_finger21 = 0.0, 2, 0.0

bip01_r_finger22 = 0.0, 2, 0.0

 

bip01_l_thigh = 1.0, 8, 1.5

bip01_l_calf = 1.0, 8, 1.5

bip01_l_foot = 1.0, 8, 1.5

bip01_l_toe0 = 1.0, 8, 1.5

bip01_r_thigh = 1.0, 6, 1.5

bip01_r_calf = 1.0, 6, 1.5

bip01_r_foot = 1.0, 6, 1.5

bip01_r_toe0 = 1.0, 6, 1.5

 

[actor_animation]

;углы дворота ног актера во время стрейфов (в градусах)

fwd_l_strafe_yaw = 45

back_l_strafe_yaw = 45

fwd_r_strafe_yaw = 45

back_r_strafe_yaw = 45

l_strafe_yaw = 0

r_strafe_yaw = 0

 

 

[actor_hit_snds]

burn =actor\pain1,actor\pain2,actor\pain3; ,actor\hurt4

shock =actor\pain1,actor\pain2,actor\pain3; ,actor\hurt4

strike =actor\pain1,actor\pain2,actor\pain3; ,actor\hurt4

wound =actor\pain1,actor\pain2,actor\pain3; ,actor\hurt4

radiation =monsters\biting\def_0; actor\hurt1,actor\hurt2,actor\hurt3,actor\hurt4

telepatic =actor\pain1,actor\pain2,actor\pain3; ,actor\hurt4

fire_wound =actor\bullet_hit_1,actor\bullet_hit_2,actor\bullet_hit_3,actor\bullet_hit_4

; actor\pain_1,actor\pain_3,actor\pain_4,actor\pain_5,actor\pain_6,actor\pain_7,actor\pain_8

chemical_burn =actor\pain1,actor\pain2,actor\pain3; ,actor\hurt4

explosion =affects\tinnitus3a

wound_2 =actor\hurt1,actor\hurt2,actor\hurt3,actor\hurt4

physic_strike =actor\pain1,actor\pain2,actor\pain3; ,actor\hurt4

 

 

 

ЗЫ . Для ТЧ

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

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


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

Некоторое время назад было предложение верней возмушение

почему меченый безнаказанно хватает все с столов в баре ?

ну и вот в свете новых знаний а именно ковыряния схемы ph_idle

практически не документированной

всего одна строчка в описании

Для всех физических объектов есть секция ph_idle, поддерживающая кондлист в которую можно при необходимости переводить объекты.

В общем научился вызывать любю функцию при юзе обьекта для этого достаточно прописать обьекту

следующее (секция болон в алл спавне ).

 

;

cse_abstract properties

section_name = physic_object

name = trader_physic_object0007

position = -250.935073852539,-24.7987232208252,-135.995330810547

direction = 0,4.36330795288086,0

 

; cse_alife_object properties

game_vertex_id = 0

distance = 0

level_vertex_id = 594270

object_flags = 0xfffffffa

custom_data = <<END

[collide]

ignore_static

 

[logic]

cfg = scripts\esc_balon.ltx

END

; cse_visual properties

visual_name = physics\balon\balon_01

 

; cse_ph_skeleton properties

skeleton_name =

 

; cse_alife_object_physic properties

physic_type = 0x3

mass = 10

 

логика

 

[logic]

active = ph_idle

 

[ph_idle]

tips = tip_bolon используем добавляем свой тип в snring_table_ui.xml типа так

<string id="tip_bolon">

<text>ПОГОВОРИ СО МНОЙ ($$ACTION_USE$$)</text> показываемый текст

</string>

on_use = %=функция_запускаемая_при_юзе% нажатии f или enter у меня

 

Думаю с этим все понятно вернемся к нашим баранам

так вот хлеб водка консервы являются итемами (короче их можно брать выкидывать пользовать из инвенторИ).

 

а нужно чтоб при попытке взять сьесть (была отдача ха ха) соответственно добавил новый тип в

snring_table_ui.xml ну и

изменил секцию консервы(в баре на столе перед новичком) так (выделенное)

[4593]

; cse_abstract properties

section_name = physic_object

name = bar_conserva

position = 129.616775512695,-3.60408997535706,28.8814792633057

direction = 0,0,0

 

; cse_alife_object properties

game_vertex_id = 1168

distance = 0

level_vertex_id = 76465

object_flags = 0xfffffffa

custom_data = <<END

[logic]

cfg = scripts\bar_bread.ltx

END

; cse_visual properties

visual_name = food\conserv1

 

; cse_alife_item properties

condition = 1

 

upd:num_items = 0

 

 

логика

scripts\bar_bread.ltx

[logic]

active = ph_idle

 

[ph_idle]

tips = tip_bar_bread

on_use = %=act_punch%

 

функция act_punch получаем удар в рожу теряем 80% денег (при попытке взять сьесть чужую консерву)

а именно лежащую на столе перед новичком

function act_punch(npc)

if db.actor:position():distance_to_sqr(npc:position()) > 4 then

return

end

 

local active_slot = db.actor:active_slot()

if active_slot ~= 1 and

active_slot ~= 2

then

return

end

 

local active_item = db.actor:active_item()

if active_item then

db.actor:drop_item(active_item)

end

 

set_inactivate_input_time(30)

local snd_obj = xr_sound.get_safe_sound_object([[affects\hit_fist]])

snd_obj:play_no_feedback(db.actor, sound_object.s2d, 0, vector(), 1.0)

level.add_cam_effector("camera_effects\\fusker.anm", 999, false, "")

test_script.out_money_and_dream()

end

 

ну и test_script

 

function out_money_and_dream()

local money = db.actor:money()

local money_out = money * (math.random(5,8)/10)

 

db.actor:give_money(-money_out)

end

 

 

 

Спасибо Allender АМК-2

Спасибо Stalk 15

 

-------

Видео

 

http://video.yandex.ru/users/krepishev-al/view/1/

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

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


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

=VENOM=

 

Подошел в смысле на конкретную точку где гг кабы должен быть ?

Или туда где гг находтся в данный момент ? ( на другой локе к примеру).

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


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

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