Что нужно сохранить в таблицу, что бы заспавнить обьект из этой таблицы? И как это делается? Да и возможно ли такое вообще?
Например ситуация такая: Сохранили данные о НПС в таблицу и нужно заспавнить НПС из таблицы один в один похожими (близнеца) но в другом месте, т.е. одинаковая модель, имя, инвентарь и пр., а предыдущего товарища удалили.
karavan
Что не получается? в новую таблицу записать айди того, кого удалил? Или что? Stalk15
а прич**5001c54314580bda8be6**er", 7000)
stope = true --флаг-триггер
end
else
stope = false --восстановления флага
end
end
end [/code]
отредактировал(а) erlik: 02-07-2010 19:41 GMT3 час. Разработки: "Тотализатор","Kill-zone", "Mega-bomba", Mega_gravi",
"Рандомные тайники(а также декодер, мины+диалоговый аддон"), "Выбрасываемый рюкзак", "Аналоговые часики на худ"
Я декомпилировал карту в СДК, открыл ее, но почему то спавнить в нее не получается ничего, уже много раз пробую - нифига, получается спавнить только в две карты которые уже были, атп и еще что то.
karavan
Проитерируй таблицу и выведи ее значения - хоть в консоль, хоть в лог, хоть на экран.
news_manager.send_tip(db.actor, "Ключ: "..tostring(k).."Значение: "..tostring(v), 0, "trader", 5000)
Разработки: "Тотализатор","Kill-zone", "Mega-bomba", Mega_gravi",
"Рандомные тайники(а также декодер, мины+диалоговый аддон"), "Выбрасываемый рюкзак", "Аналоговые часики на худ"
erlik
Спасибо ...Можно поинтересоваться, дабы потом не задавать подобных вопросов,почему в этом случае определение Волка нужно было вынести за тело функции, ну в смысле в чем разница?В том, что за телом - то уже глобальная переменная или что?
Ну и почему нужно было менять местами условия? ...вроде же как ..эээ...ну какбы правильно было, но не работало.
А на счет flobals - это я как-то на форуме так написал, и не заметил даже, а в самом скрипте flobals не было ...
erlik Еще раз спасибо. Проитерировал, наверное. Выводится: Ключ 1 Значение 125
--------------------------
У меня не получается заспавнить НПС из таблицы.
Вот как я пытаюсь сделать удаление-спавн НПС по Айди. Что-то я явно не догоняю, а вот что и сам понять не могу. Суть скрипта: Создать удаление НПС на одно
#erlik :
...Итерация такой таблицы возможна только через pairs
Так, для справки, ите**5001c54314580bda8be6**t,key)
if k == nil then break end
print(k,v)
key = k
end [/code]
Stalk15
Тебе же Artos уже говорил почиталь про зоны видимости переменных.
Если проблема найти, то вот цитата :
Lua - язык с лексическим разграничением областей видимости. Область видимости переменной начинается первым выражением после ее объявления и действует до конца блока, в котором это объявление встречается. Рассмотрим следующий пример:
[code]x = 10 -- глобальная переменная
do -- начало блока
local x = x -- объявление локальной переменной 'x', она будет равна 10
print(x) --> 10
x = x+1
do -- начало вложенного блока
local x = x+1 -- другая локальная 'x'
print(x) --> 12
end
print(x) --> 11
end
print(x) --> 10 (глобальная переменная)[/code]
Отметим, что в объявлении local x = x, локальная переменная x объявляется еще не в области своей видимости, поэтому x присваивается именно внешняя переменная.
(При инициализации локальной переменной справа от знака равенства вводимая переменная еще не доступна и используется значение переменной, внешней по отношению к текущему блоку. Именно поэтому корректен пример (он демонстрирует часто используемую идиому языка).
В соответствии с правилами лексического разграничения областей видимости, локальные переменные доступны в функциях, определенных внутри их области видимости. Локальная переменная, используемая в таких функциях, называется внешней локальной переменной.
Обработка каждого объявления local ведет к созданию новой локальной переменной. Рассмотрим следующий пример:
[code]a = {}
local x = 20
for i=1,10 do
local y = 0
a = function () y=y+1
return x+y
end
end[/code]
Цикл создает 10 экземпляров функции, в которых используются различные переменные y и один и тот же x.
Разбирайся.
Если что непонятно, то вопросы принимаются только при условии твоего усердия в прикладывании сил для освоения этой темы.
Понять степень вникания просто. Это отразится в твоём вопросе :-)
отредактировал(а) Gun12: 02-07-2010 21:19 GMT3 час. Не стань номинантом премии Дарвина.
Gun12
Но ведь pairs и так возвращает next() - какой смысл от ее прямого использования в плане итерации?
да можно изо**5001c54314580bda8be6**r
end
local t={1,5,3,4,5,67,89}
function ip()
for k, v in myipairs(t) do
print(k,v)
end
end[/code]
Stalk15
Определение Волка я вынес во внешнюю локальную переменную потому, что не имело смысла снова и снова (при каждом апдейте) определять юзердату волка. karavan
по моему подход все таки неверный - ты пытаешься удалив объект (NPC ) заспавнить его точную копию - причем не по секции, а по юзердате (а спавнят обычно по конфиг секции, профилю, номеру секции в allspawn ... хотя может еще как то...)
Разработки: "Тотализатор","Kill-zone", "Mega-bomba", Mega_gravi",
"Рандомные тайники(а также декодер, мины+диалоговый аддон"), "Выбрасываемый рюкзак", "Аналоговые часики на худ"
Stalk15
Звук сообщения пикает,но сообщение не выводится на экран.
Кстати люди кто знает.
Как сделать такую квестовую функцию:
Если Гг убил какого-то мужика(к примеру бандита(моего уникальног)),то выдаётся срабатывает действие (к примеру выдаётся инфопоршень)
:-)
Stalk15, ДатчикХабара
(в качестве информации/уточнения)
Это вариант выдачи инфопоршня в любом случае при факте смерти НПС, а не по условию "убил ГГ".
SkyLoader
Нет у тебя никакого 'цикла' ...
Твоя ошибка в том, что ты одномоментное событие во времени пытаешься отследить и обработать после того, как оно уже произошло.
Подобное требует:
- а) зафиксировать факт наступления события (смерти) и включить таймет тайм-аута;
- б) по окончанию тайм-аута - проводить проверки и нужные действия.
Т.о. делать две функции. Вешать первую на коллбэк смерти и вторую на апдейт.
erlik А какой тогда верный?
Как реализовать такую... задумку?
Причина в том что в новом паке локаций совершенно невозможно заставить НПС переходить с локации на локацию (ну это не считая локация ТЧ) вот и начал я размышлять над таким странным способом псевдо-перехода НПС-Компаньонов с локации на локацию.
Artos Посмотри пожалуйста, что можно сделать (мой пост #1282785).
файл xr_motivator.script
function motivator_binder:death_callback(victim, who)
if who:id() == db.actor:id() then
xr_statistic.addKillCount(self.object) if victim:character_name()=="Имя NPC" then
выдадим инфопоршень
end
end
тот код у меня работает - у тебя время показа сообщения скорей всего маленькое.
отредактировал(а) erlik: 02-07-2010 23:29 GMT3 час. Разработки: "Тотализатор","Kill-zone", "Mega-bomba", Mega_gravi",
"Рандомные тайники(а также декодер, мины+диалоговый аддон"), "Выбрасываемый рюкзак", "Аналоговые часики на худ"
Суть скрипта: Создать удаление НПС на одном уровне и спавн его на другом уровне
При 'простом' переспавне ты НЕ получишь 'его' же, т.е. секция то непися будет та же, НО(!) ты потеряешь почти все 'индивидуальные' характаристики. Т.е. и Id и имя неписи и пр. характеристики будут другими.
Т.о. тебе 'тот' же НПС нужен или 'такой' же?
C 'компаньонами' это точно не прокатит, т.к. очистится схема от удаленного НПС!
ИМХО, ты НЕ на верном пути.
То, что на 'новые' локации компаньоны не переходят - это ясно, т.к. схема компаньонов не 'знает' ничего о них. Нужно дорабатывать/адаптировать схему.
Ну или ... иметь гимор с нет-пакетами, сохранив где-то все параметры удаляемого НПС и прописывая их вновь созданному.
Ну а то, что у тебя не работает имеющийся вариант:
Ты пытаешься спавнить объект такой же секции по Id удаленного и ... проверяя 'есть ли объект по данному Id', естественно НЕ получишь его (объект), т.к. сам же уже его удалил.
В данном случае и в логике ошибка и в сути, т.к. ты НЕ получищь желаемого результата.
Artos Мне нужен тот же самый НПС и хотелось бы его Имя и пр. сохранить.
C 'компаньонами' это точно не прокатит, т.к. очистится схема от удаленного НПС!
Об этом я не подумал. Хотя ведь если удалить НПС-компаньона, а потом заспаснить "его же" то не составит труда взять его в компаньоны снова.
Вобщем если такой способ не реализуем, то так и скажи и не буду я морочить голову не себе не людям.
З.Ы.: Хотя возникает еще сложность запуска спавна НПС на уровне где ГГ, т.е. условие такое:
Если уровень ГГ отличается от уровня НПС-компаньона, то удалить НПС-компаньона с уровня где нету ГГ и заспавнить НПС-компаньона (уже не компаньона) на уровне где ГГ.
karavan
Ты полез уже в такие области сложности, что это уже требует достаточно хорошего понимания работы как типичных скриптов/схем так и новых (в данном случае схемы компаньонов).
Из-за недостатка знаний по имеющимся задачам, ты пытаешься выкрутиться доступными тебе средствами, упустив то, что тем самым упростив одно, ты осложняешь другое. Да и теряешь в этом что-то неизбежно.
Помимо того, что тебе придется нанимать повторно НПС (для игрока это уже и странно и будет раздражать), ты потеряешь и то, что те же предметы отданные НПС на 'хранение', будут тоже потеряны.
Вариант перекидывания параметров удаляемого НПС для вновь заспавненного (через нет-пакеты) достаточно трудоемок (тем более для тебя). Да и не уверен что все 'чисто' пройдет. Тут придется многое перепроверять ...
Нужно однозначно дорабатывать/адаптировать схему под свои новые локации. Сделав это один раз, ты и сохранишь все что присуще схеме и не будешь иметь проблем/заморочек в каждом конкретном случае.
Artos Спасибо за разъяснения.
Я и сам понимаю, что такой способ не верный. Просто искал способ обойти не возможность нормального перехода НПС. Честно говоря сложилось впечатление что на картах вообше отсутствует движение в оффлайне и именно поэтому НПС-компаньон не может перейти с локации на локацию.
Если например НПС отстал от ГГ и ушол в оффлайн, то НПС ищит путь в офлайне как добраться до ГГ и это видно на глобальной карте. На новых локациях точка (маркер) с НПС тупо замирает и не двигается, специально ждал игровых 6 часов и это в пределах локации. Что тогда ждать от перехода с локи на локу?
А как настраивать компаньон-мод я знаю и создавать АИ переходы тоже умею, и даже проверял наличие переходов в разобраном Гейм.Графе.
karavan
'Движения в оффлайне' никогда и не было на локациях. То, что имитируется схемами типа оффлайн-алайф, это имитация, а не собственно движение.
Ты что-то смешал два разных понятия, переход НПС между локациями и следование за ГГ.
Если НПС теряет ГГ, находясь уже на локации с ним, как ты говоришь, и замирает - следует дорабатывать схему компаньоны.
Если замирает после перехода, оказавшись в оффлайне, то следует подбирать точки спавна неписей при переходе на новые локации поближе к точке спавна ГГ и время не затягивать, дабы при переходе непись не попадала в оффлайн. Ну или тоже доработать схему, чтобы и в оффлайне 'дергала компаньона'.
По любому (ИМХО), доработка схемы компаньонов и/или точек спавна при переходах будет и проще и правильнее, чем каждый раз переспавн НПС, да еще с неизвестными пока последствиями ...
1)такая ситуация возникла: прописываю NPC в supplies квестовый предмет, а после смерти мне нужно штобы предмет остался в рюкзаке. Но у меня предмета нету:-( Подскажите как прописать предмет, и штоб после смерти не исчезал:-G
2)Подскажите, как ГГ выдать поршень с помощью функции?, а то шотта забыл
sevitov_yura
При смерти НПС включается алгоритм спавна лута в 'death_manager.script'.
Уже имеющиеся предметы у НПС проверяются по секциям [keep_items] (оставлять) и [drop_items] (удалять) из '\gamedata\config\misc\death_generic.ltx'.
Занеси свой квестовый предмет в первую секцию - удаляться не будет. Инфопоршень для выдается методом: game_object:give_info_portion(info_id)
, где 'game_оbject' - клиентский объект (для ГГ = db.actor) и 'info_id' - строка-имя инфопоршеня.
Функция для ГГ при этом обычно выглядит типа: function Give_MyInfoportion()
if not has_alife_info("My_Infoportion") then
db.actor:give_info_portion("My_Infoportion")
end
endСоответственно убрать инфопоршень: game_object:disable_info_portion(info_id)
Прим: Ответ можно было найти во многочисленных ФАК'ах и собственно в кодах игры.
Ребята, помогите! вырезал из ARSENAL-MOD оружие "p90", когда выкидываю за пределами лагеря новичков оружие, то всё нормально, лежит на земле, **5001c54314580bda8be6** : E:\stalker\patch_1_0004\xr_3da\xrGame\ui\Restrictions.cpp
[error]Line : 34
[error]Description : cannot find rank for
[error]Arguments : wpn_p90[/code]
отредактировал(а) sevitov_yura: 03-07-2010 13:56 GMT3 час.
sevitov_yura
Твой лог ошибки многим-многим известен. :-)
Ошибка при добавлении оружия в игру - НЕ прописывание его в "\gamedata\config\mp\mp_ranks.ltx". Byurrer
Заспавнить предмет можно по разному ...
Из твоего вопроса не ясно, то ли ты не знаешь секцию ак74 с уже надетым прицелом, то ли ты спавнишь ак74 без прицела и хочешь на него нацепить прицел.
В 1-м случае - см. конфиги автомата и ищи с параметром 'scope_status = 2'.
Во 2-ом посложнее. Не ясно какой прицел ты собрался 'надевать', да и вообще, есть ли нужный прицел.
Уточняй вопрос. Прим: Постарайтесь, плз, поменьше гадать/предполагать, засоряя топик. Не знаете/не уверены - лучше или в ПМ киньте свои предположения (если невтерпеж), но не разводите флуд, путая и себя и других.
Artos короче смотри, я хочу заспавнить ак74 с прицелом надетым сразу при спавне но снимаемым, ну он один в оригинальной версии или нет? Сам скрипт спавна автомата без апгрейдов я знаю а вот с надетыми но снимаемыми апгрейдами нет ...
добавлено спустя 1 минуту
Artos
Постараюсь
добавлено спустя 4 минут
Все то что нужно для спавна в готовом т е надетом виде уже есть но нет самой функции ... Но ведь в файле конфиге там тока либо одетый но не снимаемый (а мне нужен снимаемый но одетый)!
отредактировал(а) Byurrer: 03-07-2010 14:04 GMT3 час. project S.I.P
Эта тема закрыта, публикация новых сообщений недоступна.
Продолжая пользоваться сайтом, вы соглашаетесь с использованием файлов cookie. Страницы сайта могут содержать информацию, запрещенную для просмотра посетителям младше 18 лет. Авторское право на серию игр «S.T.A.L.K.E.R» и используемые в ней материалы принадлежит GSC Game World.