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

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

Всем привет :) . Все еще не нашел решение следующей проблемы:

"при спавне предмета на каком-нибудь этаже здания на столе(или другом объекте) он оказывается на земле. Координаты взяты из all.spawn. Спавн произвожу скриптом.

 

P.S. Объекты "physic_destroyable_object" и "physic_object" спавнятся тютелька в тютельку."

 

Как мне подсказал Сталкер Лом:

 

 

предмет начинает использовать позицию низ\верхлежащей АИ-ноды. В СДК это выключается галками use_ai_location иvisible_for_ai, а вот как в аллспавне это делается - что то не припомню...

Хотя можно попробовать убрать строки начинающиеся со слова upd: , они, обычно, в конце блока спавна объекта располагаются.

 

Однако повторюсь, я пытаюсь спавнить через скрипт. Как быть не знаю... В lua_help нашел такой метод: 

    function use_ai_locations(boolean);

Однако он не применим к классу game_object, то бишь к заспавненной вещице.

 

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

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

Просто не спавнить в "дырявых" местах. Не лечится, кроме как правкой рельефа.

Ну или только соответствующий класс использовать.

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

 

 

"дырявых" местах

Случайно не те места, где работает баг "лифт"?

 

А по поводу не спавнить - не могу понять: сколько же уже модов было сделано на сталкер(причем людьми с разным опытом в модмейкерстве), так ведь спавнили скриптом все время и везде - никуда не проваливалось... Бред какой-то. Конечно на крайняк могу попробовать АИ-сетку пересобрать, но подставлять Node для каждой точки спавна - как-то примитивно. 

 

P.S. Спавню через скрипт, ибо мой спавн динамический, с постоянным обновлением и спавном по обстоятельствам.

 

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

По факту, в итоге выход нашли в том, что спавнится ящик/мешок, а предметы - уже туда.

 

И, да, надо посмотреть, как именно проваливается. Если, классический пример - предметы на крыше элеватора на Кордоне - одно. Если это типа артов, уходящих под текстуры - другое.

 

Кроме того вижу терминологическую путаницу: game_object - это который создался в онлайне. Серверный - это тот, который возвертает alife()

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

"game_object - это который создался в онлайне" - А это как?))

local obj = alife():create(item, pos_vector[1], pos_vector[2], pos_vector[3])

obj - будет серверный объект, так ведь? Еще знаю можно клиентский получить так:

obj = level.object_by_id(k)

А вот можешь подробнее пояснить свою фразу "game_object - это который создался в онлайне" , а то я что-то не догоняю)

 

P.S. И где сейчас можно найти актуальную версию m_netpk?

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

 

P.S. И где сейчас можно найти актуальную версию m_netpk?

 

 

 

У меня от 9 октября, вроде последнее.

 

obj = level.object_by_id(k)

Хрен ты угадал, в момент спавна нельзя его так получить. obj в твоем случае серверный - да, и править его тока нет пакетами, есть еще одна функция, с которой можно работать, глянь в справочнике.

 

Если ты говоришь что дофига таких модов, то че тебе мешает их использовать в своих целях? У меня скриптом проваливаются тоже(книги всякие спавнил), в результате забил, спавнил через acdc. Тебе религия что-ли не позволяет ей пользоваться, или че, я не понимаю вас... Спавн скриптом хорош, но не в этих случаях.

Изменено пользователем Карлан
  • Не нравится 1
Ссылка на комментарий

@Старлей, на ЗП перешёл? 
use_ai_locations() есть только там, и используется при спавне оружия в тайники. Пробил бы поиском по скриптам ЗП - нашёл бы пример использования. :)

 

local sobj = alife():create(item, pos_vector[1], pos_vector[2], pos_vector[3])

sobj:use_ai_locations(false) 

 

Должно работать. Функция применяется к серверному объекту, желательно сразу после спавна. (как на примере выше)

 

 

m_netpk от 19 Сентября 2013, новее хз где брать. 

Изменено пользователем *Shoker*
  • Нравится 3

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

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

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

Artos в октябре выкладывал этот комплект: m_netpk

Потом почему-то удалил (не исключено, что из-за ошибок, но об этом ничего не известно). Тем не менее, это самая свежая версия, которая есть в наличии.

  • Нравится 1
Ссылка на комментарий

 *Shoker*

Да ЗП, точнее мультиплеер ЗП)

 

local sobj = alife():create(item, pos_vector[1], pos_vector[2], pos_vector[3])

sobj:use_ai_locations(false) 

Вылет. О не применимости метода к объекту. (attempt to call method "use_ai_locations" (a nil value)

 

Я решил прикольнуться и сделал так:

	local item = alife():create(k, pos_vector[1], pos_vector[2], pos_vector[3])
	se_item = alife():object(item.id)
	se_item:use_ai_locations(not se_item:used_ai_locations())

И... работает!!! Один вопрос: а в чем вся соль?(вроде же оба серверных объекта)

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

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

Изменено пользователем Карлан
  • Не нравится 1
Ссылка на комментарий

Ребята, добрый вечер! 

У меня такой вопрос:

Как в ТЧ составить скрипт автозагрузки. Т.е., чтобы, например, при получении инфопоршня загружалось определённое сохранение. 

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

Пишу мод с неповторимым сюжетом.

Нужны "модельеры"

Заинтересованным писать в ЛС

J.A.A..gif

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

@J.A.A., добавляй функцию в xr_effects.script:

function load_savedgame(actor, npc, p)  --Выставляем p-аргумент (он является названием сейва)
    local savedgame = p[1]      --Устанавливаем локальную переменную для p[1]
    if savedgame ~= nil then    --Проверка на наличие сейва
        get_console():execute("load "..savedgame)  --Запускаем сейв через консольную команду
    end
end 

Потом в рестрикторе делай проверку на инфу и запускай функцию:

on_info = {+some_info -load_spec_save} %=load_savedgame(название_сейва) +load_spec_save% 

 

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

c57d8f0c86.png

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

Нужно по скрипту создать фейковый ящик.

Ящик и его содержимое должны сохраниться после перехода.

Куда копать, что почитать?

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

Ппц, у меня экзамены на носу, а я в S.T.A.L.K.E.R. завис. :D

Значит, такое дело:

как можно по-другому использовать функцию?

function terminator()

local npc1 = level_object_by_sid(9904

if has_alife_info("поршень1") and not has_alife_info("поршень2") then 
npc1.health = 1
end
end

 

 

 

Что мне нужно конкретно: 

Желательно, чтобы "local npc1" вычислялась не через "sid", а через другие функции, например, через имя профиля или название в "character_desc_xxx". В общем, не хочу зависеть от ID, а то прописываю ID'ы группе из 10 человек и потом путаюсь.

Пишу мод с неповторимым сюжетом.

Нужны "модельеры"

Заинтересованным писать в ЛС

J.A.A..gif

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

Для поиска нужного как раз и существует получение объекта через SID и через имя.

 

Все остальное - только перебором. Слово, которым называется такой код, здесь запрещено, к сожалению.

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

Зарегистрировал по туторы юз предмета:

function actor_binder:use_obj(obj)


if obj:section()=="repair_kit_weapon" then
alife():create("repair_kit_weapon",db.actor:position(),db.actor:level_vertex_id(),db.actor:game_vertex_id(),db.actor:id())
ineeded_condition = obj:condition()
hm_repair.action_repair(ineeded_condition)
end
end

 

создал скрипт:

function action_repair(rcond)

local repair_kit = db.actor:object("repair_kit_weapon")


if repair_kit and (db.actor:active_slot()==1 or db.actor:active_slot()==2) and db.actor:item_in_slot(db.actor:active_slot()) then
repair_kit:set_condition(rcond)
local item = db.actor:item_in_slot(db.actor:active_slot())
local need_for_repair = (1-item:condition())*(1/25)

if item then
if repair_kit:condition()>=need_for_repair then
item:set_condition(1)
repair_kit:set_condition(repair_kit:condition()-need_for_repair)

snd_obj = xr_sound.get_safe_sound_object([[hardcore_mod\repair\repair_weapon]])
snd_obj:play_no_feedback(db.actor, sound_object.s2d, 0, vector(), 1.0)
end
end
end
end

 

Вылет. Пишет что не знает что condition() обращается к nil! Это что не успевает дойти до игры что у меня ремкомплект реснулся или как? И как решить?

  • Не нравится 1
Ссылка на комментарий

"Пишет что не знает что condition() обращается к nil" - какая хоть из строк-то ? (Ну лень все внимательно просматривать. ;))

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

Да сама проверка кондишна. Вот я переделал скрипт немного вроде

function action_repair(newcondition)


local repair_kit = alife():create("repair_kit_weapon",db.actor:position(),db.actor:level_vertex_id(),db.actor:game_vertex_id()) --,db.actor:id())
--local repair_kit = db.actor:object("repair_kit_weapon")
--repair_kit:set_condition(newcondition)

if (db.actor:active_slot()==1 or db.actor:active_slot()==2) and db.actor:item_in_slot(db.actor:active_slot()) then
local item = db.actor:item_in_slot(db.actor:active_slot())
local need_for_repair = (1-item:condition())*(1/2)

if item then
if repair_kit:condition()>=need_for_repair then
item:set_condition(1)
repair_kit:set_condition(repair_kit:condition()-need_for_repair)

snd_obj = xr_sound.get_safe_sound_object([[hardcore_mod\repair\repair_weapon]])
snd_obj:play_no_feedback(db.actor, sound_object.s2d, 0, vector(), 1.0)
end
end
end
db.actor:transfer_item(repair_kit,db.actor)
end

 

по разному пробовал, в итоге трансфер не работает, походу не знает что такое repair_kit...не успевает обработать? Как быть!

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

Вот в этом варианте и не должен.

:condition() есть только у клиентского.

здесь - это - не он, во вторых, клиентский даже еще в онлайн перейти не успел.

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

Тогда как? Так тоже не канает:

alife():create("repair_kit_weapon",db.actor:position(),db.actor:level_vertex_id(),db.actor:game_vertex_id())

local repair_kit = db.actor:object("repair_kit_weapon")

 

Видимо из за того что


клиентский даже еще в онлайн перейти не успел.


Как быть то?) 
Ссылка на комментарий

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

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

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

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

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

Войти

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

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

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