function spawn_bobm()
local pos = db.actor:position()
local dir = db.actor:direction()
pos = pos:add(dir:mul(3))
pos.y = pos.y + 2
local objbomb = alife():create("bomba", pos, db.actor:level_vertex_id(), db.actor:game_vertex_id())
table.insert(ids, objbomb.id) -- id объекта после создания
end
правда я на высоте спавнил только вертолет.
ну еще самого ГГ закидывал на деревья. Будет ли предмет висеть в воздухе - не уверен. Хотя - попробуй.
Разработки: "Тотализатор","Kill-zone", "Mega-bomba", Mega_gravi",
"Рандомные тайники(а также декодер, мины+диалоговый аддон"), "Выбрасываемый рюкзак", "Аналоговые часики на худ"
Вот возник вопрос, а возможно ли как-то сохранить позицию (точку) от ГГ что бы потом на ней спавнить что-то?
Объясню что я имею ввиду. Например в определённый момент берётся точка со смещение от ГГ и сохраняется в таблицу (или куда-то), а через время происходит спавн обьектов в этой точки хотя ГГ уже сменил позицию.
karavan
Даже если ты в таблицу сохранишь позицию, всё равно когда ты к ней будешь обращаться будет читаться настоящая позиция. Попробуй через нет пакет, правда нужно будет сохраняться и загружаться.
сохраняем также как айди в отдельную таблицу например (хотя можно и в одну все писать)
если в отдельную то так
tab_pos = {} -- объявляем пустую таблицу
получаем позицию от ГГ и далее пишем вектор в таблицу
table.insert(tab_pos,pos) -- правда со**50056ea8aab1bb10eeba** do
i = i + 1 -- считаем кол-во ключей таблицы
end
p:w_u16(i) -- записываем число
for k, v in pairs(morg) do -- итерируем указанную в скобках таблицу
p:w_u16(k) -- записываем ключ -- лишнее если индексы идут в математическом порядке
p:w_u16(v) -- записываем значение ключа - тоже число
end
end
[/code]
[code]function tab_load(r)
local i = r:r_u16() -- загружаем число ключей
for k = 1, i do -- заполняем таблицу заново
local id = r:r_u16() -- загружаем последовательно ключи - если же они не сохранялись то
строчка не нужна, а ниже вместо id пишем i
morg[id] = r:r_u16() -- загружаем значения
end
end[/code]
И каждую функцию ставим на вызов бинд сталкер - в функции save и load - везде в одно и тоже место.
то какой именно метод использовать для чтения r_u16() или r_u24() или r_u8() или r_stringZ() и т.д. зависит от типа данных которые нужно сохранять и загружать - число (больше или малое, целое или float ), строку или вектор и т.д.
соответственно для записи есть p:w_u16(), p:w_u24(k), p:w_stringZ() и т.д.
Основной перечень этих методов есть на сайте АМК в справочнике по функциям и классам.
добавлено спустя 5 минут
Futura
вот здесь она есть - правда какой там около половины - пятая-шестая часть наверно только - всего то пять глав - точнее четыре - остальных нет.
http://aap13.narod.ru/PiL/index.html#P1
отредактировал(а) erlik: 06-05-2010 13:30 GMT3 час. Разработки: "Тотализатор","Kill-zone", "Mega-bomba", Mega_gravi",
"Рандомные тайники(а также декодер, мины+диалоговый аддон"), "Выбрасываемый рюкзак", "Аналоговые часики на худ"
erlik
Спасибо.
Если векторную сохранять прямо так - table.insert(tab_pos, db.actor:position()), то разве не будет при парсере читаться именно настоящая? Даже если и будет, я и не подумал, что можно сохранять "по кусочкам", т.е. сначала pos.x и т.д.. Тогда уж точно при спавне если подставлять вот так - tab_pos[1], tab_pos[2] и tab_pos[3], работать будет.
А вот такой вопрос: что сохраняется при использовании obj:STATE_Write(net_packet())? В функции спавна аномалии, после этого метода идут различные сохранения позиции, сида, даже кастом даты. Вот стало интересно побольше узнать об этом.
отредактировал(а) Futura: 06-05-2010 13:36 GMT3 час.
Futura
если сохранять так то table.insert(tab_pos, db.actor:position()) то (если конечно вектор все таки будет так сохраняться - а можно и по частям) в каждый момент времени записи писаться будет реальная позиция нахождения ГГ (метод db.actor:position() возвращет вектор - и ведь не сам же метод будет писаться - а результат его вызова).
И будет всегда новая п**50016ea8aab1bb10eeba**time = masstime.OrderByDescending(t => t.Hour).ThenByDescending(t => t.Minute).ThenByDescending(t => t.Second);
//var time2 = masstime.OrderByDescending(t => t);
foreach (var t in time)
{
Console.WriteLine(" {0, -7}{1,-7}{2}", t.Hour, t.Minute, t.Second);
}[/code]
и получаю в выводе таблицы различные временные значения
добавлено спустя 7 минут
obj:STATE_Write(packet)
это метод записи(считывания) состояния объекта например в пустой нетпакет (его нужно создать предварительно через local packet = net_packet() либо как в твоем примере сразу вызвать метод его создания) - который затем можно прочитать и найти среди кучи данных что-нить нужное.
И потом можно сделать перезапись состояния объекта через obj:STATE_Read(packet,packet:w_tell()) ) - я правда пока ничего не перезаписывал. Только считывал.
в файле Amk.script есть много функций с этим делом. И по названию локальных переменных можно понять что именно считывается в нее.
В общем не совсем точно я все это описал - подробнее посмотри в амкашном справочнике по классу net_packet
вот так к примеру я считывал реальное имя серверного NPC
function read_net_packet(sobj)
--создаем пустой нет пакет
local packet = net_packet()
--загружаем состояние объекта
sobj:STATE_Write(packet)
packet:r_u32()
packet:r_stringZ()
packet:r_u32()
packet:r_stringZ()
packet:r_u32()
packet:r_u32()
packet:r_u32()
local s = packet:r_stringZ() -- последовательность расположения данных можно узнать в перловской версии ACDC в файле acdc.pl
packet = nil
return s
end
отредактировал(а) erlik: 06-05-2010 14:45 GMT3 час. Разработки: "Тотализатор","Kill-zone", "Mega-bomba", Mega_gravi",
"Рандомные тайники(а также декодер, мины+диалоговый аддон"), "Выбрасываемый рюкзак", "Аналоговые часики на худ"
Подскажите по**50016ea8aab1bb10eeba**()
end
end
end
[/code]
Нужно что бы сообщение выводилось 3 раза каждые 10 секунд реального времени. Что у меня не правельно? Потому что выводится сразу три сообщение одновременно. :-G
// на апдейт
function time_for_do()
if tim <= time_global() then
news_manager.send_tip(db.actor, "Таймер через 10 секунд", 0, nil, 5000)
tim = time_global() + 10000
end
end
Каждые секунд - без ручной активации - автоматом. Бесконечно.
добавлено спустя 59 секунд
тьфу ты блин - тебе ж тока три раза надо. Тогда сейчас подумаю.
добавлено спустя 3 минут
local tim= time_global() + 10000
local ch=0
// на апдейт
function time_for_do()
if (tim <= time_global() and ch<3) then
news_manager.send_tip(db.actor, "Таймер через 10 секунд", 0, nil, 5000)
tim = time_global() + 10000
ch=ch+1
end
end
но если не поставить еще одним условием поршень - то при новой загрузке игры - снова будет работать.
отредактировал(а) erlik: 06-05-2010 18:59 GMT3 час. Разработки: "Тотализатор","Kill-zone", "Mega-bomba", Mega_gravi",
"Рандомные тайники(а также декодер, мины+диалоговый аддон"), "Выбрасываемый рюкзак", "Аналоговые часики на худ"
erlik Спасибо.
А с for i=1, 3 do никак нельзя?
Я просто подумал что если в этот цикл поставить таймер то будет вначале выводится одно сообщение, через 10 сек второе и через 10 сек третье.
добавлено спустя 2 минут
Я вот забыл, таймеры всегда обязательно на апдейт ставить или он может работать и после активации через диалог например?
karavan
апдейт обязателен. Как включать апдейт - через диалог, скрипт или как то иначе - без разницы.
Важно чтобы значения которые возвращает метод постоянно обновлялись - иначе если они будут всегда одни и те же - никакого таймера не получится.
через цикл тут нельзя.
цикл есть цикл - ему плевать на таймер - для него только одно условие существует
for i=счетчик, лимит do
пока счетчик меньше лимита крутим действие.
Точнее в lua - пока счетчик не равен лимиту.
через другой оператор цикла можно
while условие do
но тут нет счетчика. Надо самому добавлять. Но получается то ж самое что с if ...then
Разработки: "Тотализатор","Kill-zone", "Mega-bomba", Mega_gravi",
"Рандомные тайники(а также декодер, мины+диалоговый аддон"), "Выбрасываемый рюкзак", "Аналоговые часики на худ"
Скажите создал НПС,до этого создавал тысячу раз и всё работало ,но сейчас почему то вылет...
FATAL ERROR
[error]Function : CSE_ALifeTraderAbstract::specific_character
[error]File : E:\stalker\patch_1_0004\xr_3da\xrGame\xrServer_Objects_ALife_Monsters.cpp
[error]Line : 333
[error]Description : no default specific character set for class
[error]Arguments : esc_unik_npc
Как его исправить?
1)
Извините за нудский вопрос...
Вот если вставить фаил zoneseffect.script из OGSE как его активировать чтобы он заработал?
отредактировал(а) FLIKER: 06-05-2010 19:53 GMT3 час.
Expression : start_node && path
Function : CXml::NavigateToNode
File : E:\stalker\patch_1_0004\xrXMLParser\xrXMLParser.cpp
Line : 97
Description : NavigateToNode failed in XML file
Arguments : gameplay\dialogs_ice.xml
Из-за чего эта проблема? поставил диалог НПС как стартовый, пытаюсь заговорить, вылет с таким логом. 3 раза переписывал диалог, эта **** все равно вылетает.
МАГАЗИНЧИК Гермеса в моем журнале - оружие на выбор!
FLIKER
Знание английского тебе в помощь!!!
Перевод, того, что нужно тебе:
А лог означает:
"Класс в профиле и класс в npc_profile.xml не сходятся!"
Такая же ошибка была у мода Alfa-2 на ЗП.
добавлено спустя 2 минут
Germess
Попробуй прописать не стартовый, а акторский диалог.
Переводится описание лога так: "Невозможно перейти к узлу в XML"
Что же это значит, я не знаю!
erlik
Угу, не заметил. А можно узнать ещё чего нибудь, например оружие? Я там дальше раз 10 считывал параметры, но там только разные большие числа вылезают.
А всё, нашёл в том же АМК.
1)Создал группировку. Добавил в неё Волка, а он на месте не стоит. Шарится по лагерю новичков.
2)и ещё при убийстве любого члена группировки игра вылетает.
Как это исправить?
Зарание спасибо.
S.T.A.L.K.E.R. Secret of the Zone: Gunslinger's Story. Prologue - разработка.
ВЕРЕС14
Ты темой ошибся...
1)Заходи на форум Лост альфа и там спрашивай...
2)Если что то команда АМК занимается проектом анреал зона..
(точно не помню)
Ребята подскажите как сделать спавн при переходе локации
1. Вы сейчас в интернете
2. Вы на сайте stalker-portal
3. Вы читаете
5. Вы не заметили, что отсутствует пункт 4
6. Вы это проверили
7. Вы улыбаетесь
8. Поставь себе в подпись и нас будет больше
Люди подскажите пожалуйста как удалить предмет (итемс или артефакт) так сказать с земли? Знаю есть такой метод alife():release , но что-то немогу понять что для него надо айди обьекта или достаточно имени (думаю вряд ли)?
Пробовал вот так заспавнить:
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_cristall_flower", pos, db.actor:level_vertex_id(), db.actor:game_vertex_id())
table.insert(ids, objbomb.id) -- id объекта после создания
end
И вот так удалить:
function delete_test()
for k,v in pairs(ids) do
local obj = level.object_by_id(v)
if obj then
alife():release(obj , true)
end
end
end
Спавнить спавнится, только удалить неполучается. :-G
ВЕРЕС14
Не флуди и не путай "Справочное бюро" и топик в разделе "Модификации", предназначенный для вопросов, относящихся к процессу создания модификаций. karavan
Различные методы/функции предназначены для конкретных типов объектов и применять их огульно ко всему, что под руку попадется - ошибка. alife():release - предназначен ТОЛЬКО для серверных объектов.
Т.о. твой кусок кодадля удаления должен быть типа:
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
Однако не всегда процесс удаления прост, порой приходится учитывать различные условия, снимать коллбэки и пр. ...
djslavikoz
Задавая вопрос и желая получить ответ, потрудись сформулировать вопрос так, чтобы не приходилось гадать о том, что же ты спрашиваешь.
как сделать спавн при переходе локации
При 'переходе' с локации на другую ничего не заспавнишь, т.к. 'переход' - это остановка игры и запуск ее на следующей локации. Перешел - спавни что угодно обычным способом.
Эта тема закрыта, публикация новых сообщений недоступна.
Продолжая пользоваться сайтом, вы соглашаетесь с использованием файлов cookie. Страницы сайта могут содержать информацию, запрещенную для просмотра посетителям младше 18 лет. Авторское право на серию игр «S.T.A.L.K.E.R» и используемые в ней материалы принадлежит GSC Game World.