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

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

Ulman, что ж вы курите-то такое. story_id хранится в signed __int32, туда такое число просто не поместится. Я не берусь предсказать, во что переведет такое значение acdc.

OZ1, попробуй поставить любой story_id, желательно в промежутке 10000-65535.

Изменено пользователем KD87
Ссылка на комментарий
Ulman, ищи в файле watcher_act.script, место, где NPC добрался до трупа, и начинает непосредственно его обыскивать (включение анимации search). Вот сюда как раз и желательно засунуть проигрывание разового звука, исходящего от NPC. Интересная мысль, надо бы у себя тоже сделать :).
Ссылка на комментарий

По излому: имя задай - примерно такое fracture_001

distance = 5 - поставь ему дистанцию хотя бы 1

 

object_flags = 0xffffffbf - САМОЕ ГЛАВНОЕ попробуй свой флаг сменить на этот

custom_data = <<END - пропиши логику

 

[smart_terrains]

none = true

 

END

 

 

 

будет жить, никуда не денется -)) и с сейва не грузись, на всякий случай говорю чудиков много на свете -)) начни новую игру.

 

 

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

По излому, извиняюсь, добавление и самое интересное -))

А ты уверен что машина на излома ругается? Может ты ещё что-то добавил?

Ссылка на комментарий
KD87, с тем соглаен, но у меня переход на новую локацию с таким значением story_id = 999996. Раньше был такой же вылет, а вот когда поставил именно такое значение, то всё получилось.
Ссылка на комментарий

Просьба ответить тому кто знает, советов не надо уже всё по 100 раз прочитано.

У меня предмет item_222 например, как выдать инфопоршень ГГ если он поднимает этот предмет?

На этом форуме тоже читал там самое главное не написали куда засунуть ихние формулы -)), а значит не знают толком и про xr_..... расказывать не надо -)) туда ни кто не лазит.

И второй вопрос предмет заспавнен скриптом как ему эту логику прописать? Спасибо.

Прошу прощения версия игры 1006 ТЧ

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

Ulman, это называется "использовать недокументированные возможности". В один прекрасный день аукнется. Известно же уже тысячу лет, что может быть 65535 объектов - ну так в чем проблема выбрать сид в промежутке от 0 до 65535?

дядяСаша, в bind_stalker.script в колбек on_item_take() засунуть что-то вроде такого:

    if not has_alife_info("bla_bla") and
        db.actor:object("item_222") then
        db.actor:give_info_portion("bla_bla") 
    end

Ну и инфопоршень зарегистрировать в infoportions.xml

Изменено пользователем KD87
Ссылка на комментарий
дядяСаша, плохо читал, дядя. Мысли вырази свои хотя бы толком, для начала. Это всё очень легко, первый вопрос решается добавлением одной функции в bind_stalker (KD уже отпостил, сделай как он сказал), второй решается тем, что можно взять скрипт от АМК-тим - у них есть функция которая присваивает заспауненному скриптом объекту логику. Удачи :). Изменено пользователем iDreD
Ссылка на комментарий

KD87

1) Это я понимаю можно, ещё проще в адейт поставить проверку на наличие в инвентаре. а если у меня 10 квестовых предметов? их все туда загонять.

 

Я про логику спрашивал. типа use = on_use там "пальцы гнули" на две станицы. Кстати заметь и в статьях которые рекламируют вначале сайта там тоже это не написано

вот я их и попросил не две страницы, а просто логику конкретно куда и как. для ТЧ

 

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

use = on_use...

Во-первых, пишется наоборот:

on_use = use

Во-вторых, этот параметр юзается только в секции логики [sr_idle].

В-третьих, если все сильно возносят себя в твоих глазах - разбирайся сам, что мешает? ;)

ЗЫ: Я вставлял туда 15+ скриптовых условий. Лагов и глюков замечено не было.

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

iDreD

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

а во вторых все стандартные квесты, флешки, документы куда прописываются в колбеки или к амк примазываются? Как ещё проще выразить мысль= ГГ поднимет предмет и получает инфопоршень.

Мы же на сайте ЛОГИКИ вот с use я и хотел разобраться , просил чтобы тот кто знает написал.

Ссылка на комментарий
дядяСаша, on_use - это как бы колбек на использование. Про него - речи не было. Была речь про поднятие. Поднятие != использование :). Это раз. В апдейт писать подобные проверки не проще - будет страдать быстродействие, так как апдейт вызывается постоянно (с периодом вплоть до 40 мс), колбек on_item_take() - только при поднятии предмета. Это два. Ну и, наконец, прежде, чем спрашивать, неплохо бы разобраться с предметом вопроса. Например - посмотреть, как делают разработчики в таких случаях. Ответ порвет шаблон - с помощью on_item_take() :). Только саму проверку они пишут не в самом bind_stalker, а выносят в сторонние скрипты для удобства, как раз потому, что проверок много.
Ссылка на комментарий

KD87

А нужно ли здесь

    if not has_alife_info("bla_bla") and
        db.actor:object("item_222") then
        db.actor:give_info_portion("bla_bla")
    end

 

делать проверку db.actor:object("item_222") ?

Я же так понимаю, что при этом в неявном виде перебирается инвентарь? Если проверка такая одна, и хлама мало, так и черт бы с ним, а если их много, а в инвентаре хлама вагон? Или я ошибаюсь насчет перебора?

В любом случае, подобранный объект передается в on_item_take(obj), и можно написать просто

    if not has_alife_info("bla_bla") and obj:section() == "item_222" then
        db.actor:give_info_portion("bla_bla")
    end

 

Это к тому же исключит такую ситуацию:

Допустим, объект с секцией "item_222" уже есть в инвентаре, а инфопоршень не выдан/убран (в соответствии с замыслом), и его надо выдать при подборе еще одного "item_222".

В твоем варианте будет ложное срабатывание на подбор вообще любого объекта - db.actor:object("item_222") вернет true при описанных условиях. У меня проверяется именно только что подобранный объект, а не есть ли в инвентаре такой же...

 

Мои работы:

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

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

Soul Cube

 

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

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

Kirag,

Я же так понимаю, что при этом в неявном виде перебирается инвентарь? Если проверка такая одна, и хлама мало, так и черт бы с ним, а если их много, а в инвентаре хлама вагон? Или я ошибаюсь насчет перебора?

не ошибаешься, там стоит цикл перебора. Это конечно движковый перебор, а не скриптовый, и не всех объектов на уровне, а только инвентаря, так что не столь уж и смертельно, но в самом деле лишнее. Тем более ты приводил и другие соображения и они также совершенно верны.

 

Но ты сейчас интересную тему поднял. Есть некоторые функции, которые вроде и движковые, но достаточно тормозные. Достаточно небезобидный вызов - это к примеру вот это alife():object(id).

Когда я ещё не лазил внутрь, то думал, что там сделано по уму - заведён массив указателей на 65536 позиций и объект берётся по индексу. А оказалось нет, тупой перебор. Опять же, это перебор движковый в линейном массиве, происходит относительно быстро. Но именно что относительно, поэтому крайне желательно избегать этого вызова и следовать стратегии "хранить объект и не искать его заново". Вызов level.object_by_id(id) в общем примерно такой же, просто перебирает клиентские объекты, а их естественно меньше. Но тоже желательно избегать.

 

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

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

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

 

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

прошу объяснить тех кто знает -)), без советчиков читать, туфту, в статьях это как раз выдержка из статьи:

 

Схема показывает, что произойдет, если игрок юзнет NPC, ( ранит= hit, убъёт = death, meet = разговор), а это что будет делать, по русски кто-нибудь может написать.

 

on_use = use

[use] on_info = %+info -info =func%

Файл: \gamedata\scripts\xr_use.script

 

Второй вопрос: как выдать инфопоршень когда ГГ берёт предмет в инвентарь. Только просьба без советов уже достатали.

Просто образец кода. Большое спасибо тому кто меня понял , заранее.

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

Люди, а как лечить данный вылет:

Expression : ai().level_graph().valid_vertex_id(vertex->data().level_vertex_id())

Function : CPatrolPathManager::select_point

File : E:\stalker\patch_1_0004\xr_3da\xrGame\patrol_path_manager.cpp

Line : 164

Description : patrol path[quest_man], point on path [name00],object [ds_man]

 

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

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

Ulman,Возможно одна из точек пути недоступна по каким то причинам,аномалия, нет АИ сетки.

Хотя сетка наврятли ,было такое что прописывал пути в месте где отсутствовала сетка,так нпс (была логика сна)просто ложился в ближайшем к прописанной точке месту где сетка была.

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

KD87

С НПС - не знаю, а db.actor:accuracy() используется, например, при определении, целится ли актор в принципе:

if db.actor:accuracy() < 0.0001 then
--целится
end

Если важно, оптикой целится или через открытый прицел, такой метод уже не прокатит, тут лучше зацепиться за угол зрения, только надо правильно взять угол value - чтобы fov при прицеливании через открытый прицел был больше, а при прицеливании через оптику - меньше:

if device().fov < value then
--целится с оптикой
else

Мои работы:

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

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

Soul Cube

 

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

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

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

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

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

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

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

Войти

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

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

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