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

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

Виталкер,

level.spawn в игре не работает. Используется в СДК.

А дерется машина из-за того, что погружена немного в землю или в другое препятствие. Когда ты ее касаешься для машины активируется просчет физики и она выпрыгивает из земли, попутно убивая ГГ. При стрельбе просчет физики активируется издалека :) Надо просто чуток скорректировать координаты спавна машины

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

Я не шибко ковырял ТЧ, но... вот небольшой пример:

 

[remark]
wounded = wounded

[wounded]
hp_state = 35|wounded_heavy@help_heavy
hp_state_see = 35|wounded_heavy@esc_tolik_help
hp_victim = 35|nil
hp_cover = 35|false
hp_fight = 35|false
help_dialog = tutorial_wounded_give_medkit

P.S. Если не понятно, попробуй изучить логику Толика.

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

Виталкер

Выше abramcumner уже дал основную информацию для ответа.

Немного дополню упущенное.

Вычислить (без SDK) достаточно точно требуемые координаты для спавна объектов довольно сложно, тем более еще и параметр(ы) 'направление/direction' важны.

Чтобы заспавненная машина стояла как 'вкопанная', в секции спавна объекта (в all.spawn) можно применить 'стопор' типа: '[collide] ignore_static' и/или 'привязку кости' - 'fixed_bones = root'. Конкретные примеры см. в исходных кодах игры, их немало

Однако так машина будет всегда 'вкопаной' и покататься на ней не удасться.

 

Если требуется спавн машины для 'покататься', то самым разумным решеним (которое давно используется в модах и в том же АМК) - заспавнить машину чуть выше требуемой точки и дать ей скриптом после старта игры небольшой импульс (хитом и/или apply_force). Так она опустится на землю и встанет на колеса и не будет 'драться'. Но и 'вкопанной' она не будет - при касаниях может и укатиться ... :-)

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

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

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

Виталкер

В моде АМК в 'bind_physic_object.script' имется функционал для отслеживания 'жизни' БТРов.

Ипользуя уже имеющееся (или заново) следует в 'generic_physics_binder:net_spawn(data)' определить, что объект именно машина, и дать 'пинок', например так:

  if self.object:clsid() == clsid.car_s then
    --/ Опускаем технику на землю (on_the_ground):
    local ph_shell = self.object:get_physics_shell() --/ получаем управление над физикой
    if ph_shell then
      ph_shell:apply_force(0,-1,0) --/ прикладываем небольшую силу (вниз)
    end
    local h = hit()
    h.draftsman = self.object
    h.direction = vector():set(0,-1,0) --/ направление 'вниз'
    h.power     = 0.001
    h.impulse   = 1
    h.type      = hit.strike
    self.object:hit(h) --/ наносим небольшой импульс
  end

 

Для 'нпсов' подобное не применимо, точнее ... по аналогии в соотв. биндере можно также дать хит, но физической оболочки (ph_shell) в отличии от тех же машин у гуманоидов и монстров нет. Т.е. придется обходиться только хитом. Но и это не требуется - неписи сами начитают двигаться (как только окажутся в онлайне) и сами 'опускаются' на землю. :-)

 

Примечание: Для того чтобы машины были забиндены (обрабатывались биндером) требуется у них наличие логики ... или 'ручками' добавить класс машин в биндер (по аналогии с прожекторами).

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

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

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

Artos, немного можно уменьшить код. Будет достаточно такой функции:

if self.object:clsid()==clsid.car_s then
        local h = hit()
        h.draftsman = db.actor
        h.type = hit.strike
        h.direction = vector():set(0,0,0)
        h.power = 0.0001
        h.impulse = 0.0001
        self.object:hit(h)
    end

 

Давно пользуюсь, проблем не было :)

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

Почему же понятно...И изучать логику толика довольно непонятное дело, так как там остались куски нетронутой логики со времён билдов, и я сделал в своём логике всё как у лиса, а один фиг не работает, но щас пойду попробую, сделать как ты сказал :)

 

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

Jurok, Написал всё равно не работает....:(

Изменено пользователем Виталкер
ВИТ@/\|{ЕР
Ссылка на комментарий
Виталкер, возможно ты и прописал логику как у Лиса, но ты не прописал параметры как у Лиса, а именно здоровье. В секции спавна твоего НПС пропиши ему здоровье ниже порогового значения в логике, например, как у Лиса:
health = 0.280000001192093

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

Shadows

Как правило даю несколько избыточные варианты. Модмейкер сам может решить что применять, а что нет. Выбросить всегда легче, чем добавить (особенно когда нет кода). :-)

И, ИМХО, лучше иметь более полную шпаргалку под рукою, чем ее усеченный вариант. Понадобилось - известно откуда скопипастить. :-)

 

Но могу чуток покритиковать твой вариант. :grin2:

Применение 'толчка' для физических предметов и более действенно и менее ресурсоемко (ну да это копейки) и строк поменьше.

Нанесение хита - все же задействует и саму схему хита с ее колбэками и пр. Если в логике объекта имеется 'обидчивость' (on_hit), то нередко она апприори приписывается актору (хотя и ущерб равен/близок к нулю). Что, кстати, и сделано у тебя намерено (h.draftsman = db.actor <???).

Так что то, что не имеешь проблем - это пока не будешь использовать логику. Ведь не только машинки для покататься спавнятся, но и 'враждебные' БТРы ...

Т.о. если сокращать код, то я бы сокрашал не толчок, а хит.

Но для машин - вполне применимы и полностью приведенные коды.

Тем более начальные пинки даются только при старте игры и оптимизация тут ... призрачна.

 

Примечание: Хитовать то почти все научились, а вот пинать - к сожалению не многие. :crazy:

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

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

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

А я хотел при спавне присваивать каждому объекту ID и рестрикторе вызывать инфопоршень и удалять каждого нпс отдельно функцией по его иду. Но этот вариант мне кажется более совершенный и меньше будет грузить игру.

А дальше в момент телепортации просто делай перебор по iD\ или по db.storage и ищи через string.finde() те секции персонажей, у которых есть в названии _portal_npc и удаляй их :(

Только я недавно этим занялся и пока работаю только с мануалом а такую функцию конечно пока не напишу. Может кто приведет примерчик этой функции с перебором массива и удалением по имени. Буду очень признателен и добавлю себе в мануал.

Ссылка на комментарий
for i=1,65535 do
    local obj = alife():object(i)
    if obj then
        if string.find(obj:name(),"_portal_npc") then
            alife():release(se_obj, true)
        end
    end
end

Изменено пользователем _Призрак_

Freedom

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

Stalkersof,

Кстати, а ты проверил - в твоих неисследованных областях аи-сетка то есть? :) А то НПЦ там не задержатся и убегут туда где аи-сетка есть

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

Если непись не на АИ сетке сразу, то будет вылет, и никуда он не убежит - не успеет. Так что если там АИ сетки нету придется лезть в СДК и делать ее там, потом Make AI-map и xr-компиляторы (кроме детальных объектов, вроде не надо).

 

Не с целью вставить пять копеек, а с целью довести информацию...

Во время моих эксперементов с логикой над Волком, я спавнил его в начале игры в домике, что стоит у него за спиной в чистом варианте игры, АИ сетки там нет, можете проверить, и знаете - вылета не было, он в "ливитирующем" состоянии передвигался, насколько я понял, к ближайшей точки АИ сетки (под ливитацией я имею ввиду скольжение модели без анимации движения, просто стоя). ColR_iT

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

ТЧ 1.0004. SAP и Trans mod

github

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

Всем здрасте, у меня возникла проблема при спауне НПС, Нет я его прописал нормально через all.spawn, но я хочю чтоб он сидел и например ел колбасу! :D но какую логику ему надо прописывать?

 

Вот здесь собрана достаточно подробная информация о логиге НПС и не только, почитай. >>Clik Me<< ColR_iT

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

Как спаунить костры?(=

Можно написать логико в аллспавне, а можно в кастом дате... Есть разница?

 

Ты наверно имел ввиду в all.spawn и отдельном файле!? Если да, то конечно есть! Если логика в all.spawn, то чтобы ее подправить, нужно будет перекомпелировать его (all.spawn), а в отдельном файле, у тебя и логика на виду и подправить всегда можно, только не затрагивая путей, их в отдельный файл не перенести. ColR_iT

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

Да конечно не проверял есть там сетка или нет. Я даже и незнаю как посмотреть. Буду методом тыка смотреть. Если где нпс будут себя вести неподобающе. То можно придумать на тех этапах забег на время и наспавнить там предметов разных чтоб дорогу загородить или можно спрятатать телепорт пусть ищут. И еще хотел его заставить пройтись по балке крана и упасть в телепорт. Предметы проверил предметы спавнятца там без вылетов.

 

_Призрак_ спасибо.

 

Чтобы просмотреть присутствие АИ сетки есть программка, называется GraphViewre, вот она: >>Click Me<< ColR_iT

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

Люди, у меня такой вопрос, за что отвечают такие строки в скриптах?

for k, v in pairs(pstor) do

for n, c in pairs(l) do

for inum, infop in pairs(cond.infop_set) do

for inum, infop in pairs(cond.infop_check) do

Если можно, по детальнее, заранее спасибо.

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

Desertir

С нпс вылета точно не будет, он просто пойдёт к ближаишей точке с АИ.

Stalkersof

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

 

Ulman

Это "перебор", запускает цикл по кол-ву элементов в таблице. И на каждом цикле присваивает inum и infop какие то значения из таблицы.

Например:

tbl = {

1 = "ops",

2 = "ba",

3 = "gi",

}

 

for k, v in pairs(tbl) do

<будет вызывать этот код 3 раза, по кол-ву элементов в таблице>

<и при каждом вызове k будет равен 1,2,3,а V соответственно ops, ba, gi (по очереди, сперва k=1, v="ops" потом k=2, v="ba")>

end

 

http://www.lua.ru/doc/5.1.html

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

Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О

Мастер аномалий на свою заднюю точку.

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

Artos,

Что, кстати, и сделано у тебя намерено (h.draftsman = db.actor <???).

Так что то, что не имеешь проблем - это пока не будешь использовать логику. Ведь не только машинки для покататься спавнятся, но и 'враждебные' БТРы ...

У меня в моде логика кстати используется (ну те же ключи). Плюс еще много-много чего.

На счет БТРов... Я привел код для чистой игры, если нужно чтобы каким-то тачкам хит не наносился, можно фильтровать по секции: self.object:section()~="секция". Ну понятно, это в условие пихаем.

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

Shadows

Перепрочти мой ответ и пойми суть:

1. Нет никакой причины давать хит заспавненной машине от имени актора, делая его 'обидчиком'.

'h.draftsman = self.object' - и логичнее и в последующем при любых раскладах не будет иметь последствий.

2. Тут разговаривают не только о твоем моде иль о чистой игре. Даже более - мы на АМК форуме и немало тех, кто именно его использует в качестве отправной точки. Т.о. есть ли смысл упираться в заведомо в 'твой локальный' случай?

3. Уже дал пояснение, что задавшись целью сократить строки кода - оптимальнее оставить 'пинок', а не хитовать. Это и для чистой игры оптимальнее.

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

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

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

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

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

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

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

Войти

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

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

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