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

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

Есть два вопроса:

1) Как сделать чтобы дружественные неписи не стреляли во врага пленника

2) Что сделать надо, чтобы можно было разговаривать с врагом

Создаю глобальный мод с новыми локациямЭ

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

Возникла такая задача:

Дано:

id непися, онлайн-объект прилагается.

В схемы лезть нельзя.

Нужно:

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

 

Пробовал так:

state_mgr.set_state( npc, "threat_fire", nil, nil, {look_position = target_pos}, nil, nil, {yaw_delta=10} )

 

Если ставить на апдейт - дергается. Пытается уйти (видимо, из схемы) и снова посмотреть - приказ из апдейта.

Если запихнуть в fastcall - стоит и смотрит. По горизонтали - более-менее. По вертикали - куда попало, либо горизонтально, либо вообще носом в землю, а нужно наверх.

Мои работы:

Ночные прицелы + смена ножевого слота

AI вертолетов + ПЗРК

Soul Cube

 

Работаю только с ТЧ. С ковырянием ЧН/ЗП не связываюсь ни в какой форме. Совсем.

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

Callisto, вы меня простите, но мне, как автору этой штуки, немного интересно - а что это за ключи такие - [-l] [-soc1]? Это какая-то модифицированная версия? -soc1 - вообще не помню, чтобы был такой ключ, а -l, кстати, нужен только при распаковке level.spawn. Если же вы хотите распаковать спавн в папку, для этого есть ключ -o. К слову, если ключ стоит в квадратных скобочках - он не работает. В общем, синтаксис вызова для распаковки выглядит примерно так:

acdc.pl -d all.spawn -o my_dir.

По делу: во-первых, советую скачать последнюю версию. Во-вторых, сообщите, какая секция у этого kat_m_rat_e_0000 и какой класс вы сопоставили этой секции в таблице section_to_class. Если ответить на эти вопросы сложно, заливайте свой спавн.

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

Kirag,

Заставить НПС смотреть туда и только туда, куда надо, плевать, под какой он схемой. Особенно по вертикали.

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

// куда смотрит
    void set_sight(enum SightManager::ESightType <sight_type>, const vector*, DWORD dwLookOverDelay);
    void set_sight(enum SightManager::ESightType <sight_type>, const vector&, bool <torso_look???>);
    void set_sight(enum SightManager::ESightType <sight_type>, const vector*);
    void set_sight(enum SightManager::ESightType <sight_type>, bool <torso_look>, bool <path>);
// на кого смотрит
    void set_sight(game_object* <object_to_look>);
    void set_sight(game_object* <object_to_look>, bool <torso_look>);
    void set_sight(game_object* <object_to_look>, bool <torso_look>, bool <fire_object>);
    void set_sight(game_object* <object_to_look>, bool <torso_look>, bool <fire_object>, bool <no_pitch>);

Думаю, одна из них сработает так, как тебе надо. Однако с логикой всё равно может конфликтовать.

 

Плагины Total Commander для работы с игровыми архивами:

Архиваторный плагин (для работы с одиночным архивом): link1 link2

Системный плагин (для распаковки установленной игры): link1 link2

 

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

Ребяты, выручайте :(

Уже есть опыт в создании гулагов, сегодня перешёл на новую локацию - старые болота из SMP (не ЧН). Вот, сделал гулаг для 8 военных, прописал работы в новом файле, зарегистрировал его в табличке в скрипте xr_gulag, логика и пути - тоже сделал. Проблема в том, что все НПС расходятся куда попало, вместо того, чтобы занять рабочее место.

local t = {}

function load_job(sj, gname, type, squad, groups)
--/ ЗАПАДНЫЙ БЛОКПОСТ - 8 ЧЕЛОВЕК
    if type == "zap_soldier" then
        t = { section = "logic@zap_soldier_zoneguard1",
            idle = 0,
            prior = 10, state = {0, 1},
            in_rest = "", out_rest = ""
        }
        table.insert(sj, t)

        t = { section = "logic@zap_soldier_zoneguard2",
            idle = 0,
            prior = 9, state = {0, 1},
            in_rest = "", out_rest = ""
        }
        table.insert(sj, t)

        t = { section = "logic@zap_soldier_zoneguard3",
            idle = 0,
            prior = 8, state = {0, 1},
            in_rest = "", out_rest = ""
        }
        table.insert(sj, t)

        t = { section = "logic@zap_soldier_zoneguard4",
            idle = 0,
            prior = 7, state = {0, 1},
            in_rest = "", out_rest = ""
        }
        table.insert(sj, t)

        t = { section = "logic@zap_soldier_zoneguard5",
            idle = 0,
            prior = 6, state = {0, 1},
            in_rest = "", out_rest = ""
        }
        table.insert(sj, t)

        t = { section = "logic@zap_soldier_zoneguard6",
            idle = 0,
            prior = 5, state = {0, 1},
            in_rest = "", out_rest = ""
        }
        table.insert(sj, t)

        t = { section = "logic@zap_soldier_zoneguard7",
            idle = 0,
            prior = 4, state = {0, 1},
            in_rest = "", out_rest = ""
        }
        table.insert(sj, t)

        t = { section = "logic@zap_soldier_zoneguard8",
            idle = 0,
            prior = 3, state = {0, 1},
            in_rest = "", out_rest = ""
        }
        table.insert(sj, t)
    end    
end

function load_states(gname, type)
    if type == "zap_soldier" then
        return function(gulag)
            local actor = db.actor
            if actor ~= nil then
                if level.get_time_hours() >= 6 and level.get_time_hours() <= 22 then
                    return 0  --/ день
                else
                    return 1  --/ ночь
                end
            else    
                return gulag.state
            end        
        end
    end
    return nil
end

--------------------------------------------------------------------------
-- Dynamic ltx
--------------------------------------------------------------------------
function load_ltx(gname, type)
    return nil
end

function checkStalker(npc_community, gulag_type, npc_rank, se_obj)
    if gulag_type == "zap_soldier" then
        return npc_community == "military"
    end    
    return false
end

function checkMonster(npc_community, gulag_type)
    return false
end

 

--' в работах поле object хранит id объекта

level_gulags = {gulag_general, gulag_escape, gulag_garbage, gulag_agroprom, gulag_agroprom_underground, gulag_dark_valley, gulag_labx18, gulag_bar,
                                gulag_military, gulag_radar, gulag_radar_u, gulag_yantar, gulag_pripyat, gulag_kishka, gulag_sarcofag,
                                gulag_deadcity, gulag_garbage_old, gulag_predbannik, gulag_swamp_old}

 

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

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

Не помогло! Враг не хочет со мной разговаривать

 

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

Disord, Что делать?

Создаю глобальный мод с новыми локациямЭ

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

Кто-нибудь пробовал убрать сохранение работ и объектов в смарте, чтобы они каждый раз заново регистрировались при загрузке из сохранения? Реально ли это вообще сделать?

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

Добрый вечер. Такой вопрос:

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

Игра зов припяти.

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


Команда ReWrite Team. От сталкера отошли. Пересели за другую платформу.

 

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

strelok200

 

1. Использование функции 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

 

 

 

вот вроде и все

 

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

 

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

 

 

[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

 

 

 

2. Смотри логику Кузнецова и солдат под мостом

 

 

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

День добрый.

Такая проблема:

Поставил на новый уровень Camp скопированный с затона (zat_b100). Поправил имена смарт террайна кампа и смарт каверов по типу затоновских и конфиг смарта. Но сталкер заспавненый на локации его игнорирует, а сквады спавница отказываются.

Как решить проблему? Где я накосячил?

И ещё, новую локацию гдето в скриптах надо регить? Или только в конфигах?

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

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

Команда ReWrite Team. От сталкера отошли. Пересели за другую платформу.

 

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

Здравствуйте. Скажите пожалуйста как переместить вещь в слот? Что-то я никак не могу припомнить (может потому что незнаю как?).....

Поможет ли db.actor:item_in_slot(1) = "обьект"? Или как то по другому это делается?

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

TRAMP14,

db.actor:move_to_ruck(db.actor:item_in_slot(1))        --Перемещаем объект в рюкзак
db.actor:move_to_belt(db.actor:item_in_slot(1))        --Перемещаем объект на пояс
db.actor:move_to_slot(db.actor:object("test"))        --Перемещаем объект в слот
db.actor:move_to_slot_and_activate(db.actor:object("test"))        --Перемещаем объект в слот и активируем
db.actor:can_move_to_ruck(db.actor:item_in_slot(1))        --Перемещаем объект в рюкзак
db.actor:can_move_to_belt(db.actor:item_in_slot(1))        --Перемещаем объект на пояс
db.actor:can_move_to_slot(db.actor:object("test"))        --Перемещаем объект в слот

http://www.amk-team.ru/forum/index.php?sho...st&p=596057

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

Таких как вы представили нет. Нашёл в xr_sos лучше -

self.object:set_item                  (object.activate, self.object:best_weapon ())

Вот только как пользоватся? Второе это оружие, а вот первое это что?

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

TRAMP14, помоему это функция для НПС, не?

====================================

Поставь вот эти dll'ки

http://www.amk-team.ru/forum/index.php?sho...st&p=598450

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

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

dragunof

 

if db.actor:active_slot() == 5 then
    --значит, 5-й слот активен
end

P.S. Не прокатит с 0 (ножевым) слотом - db.actor:active_slot() выдает 0 и при активном ноже, и при убранном оружии (в ТЧ, по крайней мере)

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

Мои работы:

Ночные прицелы + смена ножевого слота

AI вертолетов + ПЗРК

Soul Cube

 

Работаю только с ТЧ. С ковырянием ЧН/ЗП не связываюсь ни в какой форме. Совсем.

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

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

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

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

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

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

Войти

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

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

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