Artos . Я хочу что бы при переходе с локеции в локацию происходил спавн . ЧТо для етого нужно сделать. Как приписать спавн к речи я понял. А вот на локацию незнаю
1. Вы сейчас в интернете
2. Вы на сайте stalker-portal
3. Вы читаете
5. Вы не заметили, что отсутствует пункт 4
6. Вы это проверили
7. Вы улыбаетесь
8. Поставь себе в подпись и нас будет больше
karavan
Не люблю и не занимаюсь ответами на обобщенные вопросы.
Метод удаления объекта из игры один: release()
Однако под 'удалением объекта' можно очень многое подразумевать.
Отправил объект в оффлайн - подобно удалению.
Перенес из одной позицию в другую, недоступную/невидимую игроку - тоже 'как удалил'.
'Съел' ту же аптечку/консерву - за тебя сам движек удалит объект из игры.
...
Насчет 'подрыва':
Подрываться должно в пределах всей локации, т.к.
"local boom_obj = level.object_by_id(v)" - дает объект (бомбу) в пределах локации.
Ну а то, что ты говоришь:"... только в пределах определенного радиуса ..." - вероятно относится к подрывам неписей.
Ну так сам подумай и вспомни о таком параметре он-лайна, как "switch_distance" - все неписи (как правило), что за пределами этого радиуса относительно ГГ 'уходят' в офф-лайн и не обрабатываются онлайновыми методами. Вот и не 'чувствуют' они и/или бомба, что 'кто-то рядом' ...
djslavikoz
Повторяю, задавай вопрос так, чтобы его можно было бы однозначно трактовать!
Уже ответил, что спавн НЕВОЗМОЖЕН в процессе перехода! Игра в это время 'уже сохранила' прежнее состояние и готовит новое, на новой локации.
Если же ты спрашиваешь о спавне объектов в момент старта игры на локации сразу после перехода - то иное дело. Да и собственно в чем загвоздка? Определил, что стартовавшая локация - 'новая' - спавни ...
P.S. Есть такая удобная функция utils.level_changing(), к которой есть и комментарий. Взгляни, может это то, что тебе потребно ... Это собственно момент, когда начинается процесс сохранения игры, а ГГ вроде как уже 'на другой' локации. Вот только спавнить чего-либо в это время я оч. не советовал бы.
Дублирование своих постов/вопросов по разным топикам - нарушение правил портала!
djslavikoz
вот пример - активация функций происходит только при загрузке указанной локации - "кордон".
function activate()
if (level.name() == "l01_escape" and
not has_alife_info("activate")) then --проверка на поршень - для чего читай ниже
далее указываешь имя нужной функции которую нужно вызвать
--this.uny_spawn_1()
--script_spawn.uny_spawn_2()
--script_spawn.uny_spawn_3()
--this.flag_on()
--xr_effects.npc_suicide()
test_zones.spawn_restrictor()
test_zones.spawn_obj_1()
--this.activate_anom()
--this.spawn_trup()
--this.all_secrets()
--this.name_secret()
выдача поршня необходима чтобы активация сработала только один раз - если же предполагается бесконечный вызов функции тогда поршень не нужен.
db.actor:give_info_portion("activate")
end
end
саму функцию activate() на апдейт в bind_stalker
Artos
Не спорю. Но что под рукой оказалось - то и дал. Прочее сложнее объяснять.
да и от вызова десятка другого функций из биндера - вряд ли много вреда.
отредактировал(а) erlik: 08-05-2010 18:16 GMT3 час. Разработки: "Тотализатор","Kill-zone", "Mega-bomba", Mega_gravi",
"Рандомные тайники(а также декодер, мины+диалоговый аддон"), "Выбрасываемый рюкзак", "Аналоговые часики на худ"
erlik
Обвешивать биндер различными подобными (да и иными) мелочевками - ИМХО дурной тон. Именно из-за этого 'солянки' через какое-то время начинают лагать.
Достаточно где-то запоминать текущую локацию (имя иль индекс) и при старте игры сравнивать запомненное значение со 'стартовавшим'. При их несоответствии - факт 'перехода/смены локации'!
Подобное реализовано в том же АМК моде, например.
Вред хотя бы в том, что новичек начинает пичкать биндер всем что придет ему в голову, даже не задумываясь об уместности применять/вызывать именно в этом месте. А "научившись" делать это 'без вылетов' - передает такой "опыт" дальше ...
Обрабатывать однократное событие в месте, которое предназначено для постоянного апдейта - как уже выразился, дурной тон (ИМХО).
Может и не приносят 'вреда' многочисленные мелкие вызовы сторонних функций, но(!) функция функции рознь и даже одна, к примеру, if i=0,65535 do local obj = alife():object(i) ... end - может такие лаги внести в игру, что мало вреда не покажется.
Не всегда 'первое попавшее под руку' стОит тиражировать ...
TYOPA
Довольно просто (в первом приближении): пишешь функцию, которая сканирует объекты в игре и определив, что это мутант иль аномалия, находящиеся на x18 или x16 - удаляет объект.
(только не нужно задавать далее прописные вопросы типа:"Как сканировать?" и т.п. - читай топик, изучай скрипты в игре).
Germess : подкиньте пожалуйста функцию,
чтобы при наличие оружия ( определеннго ) в слоте, выдавалось сообщение на экран
В просьбе недостаточно данных.
- оружием могут обладать ГГ и неписи. Ты о ком?
- оружейных слотов НЕодин. Ты о каком?
- под '**50016ea8aab1bb10eeba**tem_in_slot(2)
if item then --/ в 'автоматном' слоте есть предмет
if isWeapon(item) then --/ предмет является оружием
if item:section() == sWeaponName then --/ секция/имя совпадает с заданной
news_manager.send_tip( db.actor, "У ГГ есть оружие", 0, nil, 10000 )
end
end
end
end
[/code]
#karavan : Artos Спасибо. :-) А какие еще методы существуют для удаления обьектов? Я только встречал alife():release
Коварный метод. Я на него попался один раз. Вроде удалил объект, но после перезагрузки объект снова появился. Не хочу пока выяснять как, хоть уже вроде понял (изолировал и без этого). Так что нужно 100 раз подумать и 101 раз проверить. Не всё так правильно работает как хочется. Artos
Ту часть иронии, которую Вы вложили в вышеизложенный ответ, вряд ли поймут. Тем не менее я поддерживаю Вас в стремлении "наставить на путь истинный" грешных обывателей :-)
отредактировал(а) Gun12: 08-05-2010 20:33 GMT3 час. Не стань номинантом премии Дарвина.
Gun12
Именно поэтому на предыдущей странице в ответе karavan'у дал приписку:
Однако не всегда процесс удаления прост, порой приходится учитывать различные условия, снимать коллбэки и пр. ...
Удаляя серверный объект, нужно отдавать себе отчет в том, что его удаление НЕ влечет за собою автоматическое и мгновенное удаление клиентского объекта. Различные побочные эффекты (звуки, партиклы и т.п.) также пытаются 'отрабатываться' на удаленном объекте.
Удаление аномалии вообще оч.непростой вопрос и некорректное удаление может приводить и к фатальным ошибкам в игре и к битым сэйвам. release() - работает правильно, но правильно ли его применять?
"Семь раз отмерь - один отрежь!" - вот правильное правило для удаления объекта.
P.S. R сожалению понимаю, что заморачиваться над вроде как простой операцией удаления, да еще тогда, когда она работает почти всегда на 100% без каких либо заморочек, многие новички не хотят. Но(!) когда именно это 'почти' коснется их конкретно и будет не давать покоя, тогда ... придется многое из уже наработанного переписывать.
Жаль, что такое понимание как правило приходит 'после', а не 'до'. Учиться на чужих ошибках, если эти 'чужие' еще и читать/понимать нужно - не все хотят ...
FLIKER
Ты уже неоднократно задаешь этот вопрос, но так и не можешь сформулировать его так, чтобы на него можно было бы и захотелось(!) ответить.
Что значит активировать дин. иль другие аномалии? Чтобы заработал скрипт, который отвечает за их (ре)спавн?
Уже давал тебе ответ, скрипт называется так, как в соответствующем моде его назвал автор мода.
Например, amk_anoms.script - в АМК моде.
#Artos : FLIKER
...но так и не можешь сформулировать его так, чтобы на него можно было бы и захотелось(!) ответить.
Вот краеугольный камень всех новичков.
Можно задать "простой" (по мнению ГУРУ) вопрос, но так, что на него ХОЧЕТСЯ (читать, - "ИНТЕРЕСНО") ответить.
А можно задать заслуживающий интереса всех вопрос так, что на него получишь только "по морде".
Так что читайте литературу. И учитесь у классиков "захватывать умы" слушателей.
Подскажите пожалуйста есть ли возможность заспавнить обьект на месте удаленного?
Что я имею ввиду. Вот скажем есть такой код:
local ids = {}
function spawn_test()
local pos = db.actor:position()
local dir = db.actor:direction()
pos = pos:add(dir:mul(5))
local objbomb = alife():create("af_fireball1", pos, db.actor:level_vertex_id(), db.actor:game_vertex_id())
table.insert(ids, objbomb.id)
end
--Затем удаляем обьект
function delete_test()
for k,v in pairs(ids) do
local obj = alife():object(v)
if obj then
alife():release(obj , true)
end
end
end
А вот после этого спавнить второй обьект на месте первого.
Вот мне интерестно стало возможно ли произвести так сказать подмену одного обьекта другим?
Сохраняется ли координата первого обьекта в таблицу или это вовсе и ненужно т.к. сохраняется его айди и этого достаточно.
Я только пока не пойму как это будет выглядить ввиде функции...
Способ программирования 'методом тыка' порочен. Можно конечно сэкономить какое-то время пытаясь 'знакомые' куски применять там-сям, но в конечном итоге создать чего-то стОящего вряд ли удастся, а времени угробишь немеряно.
Вначале советую разобрат**50056ea8aab1bb10eeba**
karavan , ну сам подумай. Как может сохраниться координата, если ты как минимум не писал её в таблицу, а как максимум не записывал через пакет.
Ты сохраняещь в локальной(!) таблице (без сохранения) некий ID, который при методе release на данный момент сработает, а при следующем апдейте (я не считаю сохранения и загрузки) выдаст NIL.
(Хотя не уверен уводится ли объект в оффлайн, тогда при соответсвующих методах будет доступен, либо удаляется совсем на следующем апдейте???Знающие люди, поясните пожалуйста.
Artos И всетаки я непойму как потом извлекать из таблицы данные по координатам обьекта. И как их прописать в функции.
И еще мне непонятно в твоем примере имеется ввиду координата обьекта недвижемого, а если необходимо подменить обьект, который двигается (тот же артефакт), то таблица сохранит его текущую координату для того что бы заспавнить обьект-2 практически мгновенно.
Вот скажем такой пример: Был на земле артефакт, а я хочу его заменить на бомбу но с вижуалом арта. Артефакт прыгает и меняет координату, а бомба нет. Как это сделать?
karavan
Старайся избегать в вопросах многовариантности, если нет на то особых причин требований. Все же обработка/описание для 'нескольких' вариантов отлична от 'единственного'.
Даже простое твое "Был на земле артефакт" - можно трактовать как угодно. Мне следует сканировать всю иг
У меня по ходу разбора пример**50126ea8aab1bb10eeba**de]pos = pos:add(dir:mul(5))[/code]
Есть ли какой-то метод позволяющий спавнить от земли на высоте например 3-х метров?
И еще давно хотел спросить: есть метод vector_rotate_y, который как я понимаю спавнит в пределах заданого радиуса от вектора "y" - высоты, а как правельно задать вектор по оси "x" и "z"?
Вот пример где я использовал vector_rotate_y:
function actor_spawn_af_0()
local radius = 10 -- радиус спавна от ГГ
local ang = math.random(360)
local dir = vector_rotate_y(db.actor:direction(),ang)
local obj = alife():create(af[math.random(27)],db.actor:position():add( dir:mul(radius)),db.actor:level_vertex_id(),db.actor:game_vertex_id())
end
karavan
Опять не очень внятный вопрос (тем более на ночь глядя) ...
Как я понял, тебе нужно не столь заспавнить над поверхностью, сколь 'подвесить' над ней?
Спавнить 'над' можно разными способами (все одно 'упадет вниз'), точнее он один, вариации только в применяемых уже готовых способов. Суть их одна, берется позиция объекта и изменяя координату по 'y' вычисляется новая позиция, куда и спавнится. В случае спавна предметов задавать им направления бессмысленно.
В твоем варианте мне так и непонятно твое желание спавнить бомбу в некоей позиции отличной от прежней (или взятой), варьируя координаты относительно направления камеры. Ну да не суть ...
Ну а подвесить объект, тут только влезать в нет-пакеты и варьировать параметром 'флаг объекта'.
Прим:Вектора по осям НЕ задаются, т.к. оси (координаты по осям) являются параметрами вектора. Поэтому корректнее: "Как задать координаты вектора по осям x, z?"
"Правильно заданный вопрос имеет в себе 50% ответа"
karavan
Я бы сдел**50016ea8aab1bb10eeba**pos, db.actor:level_vertex_id(), db.actor:game_vertex_id() )
end[/code]т.о. у тебя будут спавниться артефакты вокруг ГГ (с заданным радиусом) и все на высоте 5м.
Заметь, твои условия полностью выполнены: спавнятся в радиусе и не на земле.
Однако, как уже писал выше, толку, что ты их спавнишь на высоте?! Все одно, они 'попадают' вниз, если их не 'подвесить'.
А чтобы 'подвесить, нужно после спавна считать нет-пакет объекта и изменить там:
Table_Net_Packet.object_flags = bit_not(193)'
после чего записать обновленный пакет.
Artos Мда, фразировка вопроса действительно непонятная.Но эта функция мне вполне подходит:
function I_have_weapon(sWeaponName)
local item = db.actor and db.actor:item_in_slot(2)
if item then --/ в 'автоматном' слоте есть предмет
if isWeapon(item) then --/ предмет является оружием
if item:section() == sWeaponName then --/ секция/имя совпадает с заданной
news_manager.send_tip( db.actor, "У ГГ есть оружие", 0, nil, 10000 )
end
end
end
end
Большое спасибо, постораюсь в последствии более точно формулировать свой вопрос.&P
МАГАЗИНЧИК Гермеса в моем журнале - оружие на выбор!
Всем Привет!
Вобщем такой вопрос. Для ТЧ есть 10 новых лок, хотел на Госпиталь и Лиманск потсавить их родную фоновую музыку из ЧН. Нашел файл где прописаны темы, в каждой теме определенное количество треков, 2-3 штуки (хотя на локациях почему то играет только 1 трек). Но дело в том, что там не указывается сам звуковой файл. Наример
[l11_pripyat_musics]
music\amb07 = 6, 22, 0.2, 20, 40
music\amb17 = 22, 6, 0.2, 20, 40
В папке же есть два файла amb07_l.ogg и amb07_r.ogg
Подскажите где надо прописать новую музыку, чтобы я смог потом сделать что то вроде того..
[k03_limansk_musics]
music\limansk = 6, 22, 0.2, 20, 40
Если даже и есть тот файл limansk_l.ogg и limansk_r.ogg , то игра вылетает при практически уже полной загрузки. Если прописать до этого существующий, любой amb, то все норамльно.
Эта тема закрыта, публикация новых сообщений недоступна.
Продолжая пользоваться сайтом, вы соглашаетесь с использованием файлов cookie. Страницы сайта могут содержать информацию, запрещенную для просмотра посетителям младше 18 лет. Авторское право на серию игр «S.T.A.L.K.E.R» и используемые в ней материалы принадлежит GSC Game World.