Stalk15
Добавил в свою функцию универсального спавна новую возможность (спавн в инвентарь NPC по его профильному имени) - загляни в журнал. Функция пока не никак неоптимизировалась, но вполне рабочая.
Проверил как на онлайн, так и на оффлайн объектах - Волку и Толику точно спавнится, ну а к Скряге и Серому я не ходил - но по крайней мере тестовое сообщение что все заспавнилось было. Так что проверяй дальше сам. Кстати не жди увидеть заспавненые вещи у них в рюкзаке - они как правило не отображаются - разве что ствол, если он лучше чем у них, NPC сразу возьмут в руки.
И кстати после смерти NPC их инвентарь чистится и все удаляется, кроме квестовых предметов - так что думай что им стоит спавнить, а что не стоит.
Разработки: "Тотализатор","Kill-zone", "Mega-bomba", Mega_gravi",
"Рандомные тайники(а также декодер, мины+диалоговый аддон"), "Выбрасываемый рюкзак", "Аналоговые часики на худ"
есть важный вопрос. собираюсь начать учить луа. как можно начать его учить или просто занямиась скриптами знание придет незаметно? (все же повторюсь: хочу учиться сам, знаю что трудно, но тут никак не обойтись)
erlik
Спасибо, а то у меня по сиду не работало, а по профильному имени пашет.
И кстати после смерти NPC их инвентарь чистится и все удаляется, кроме квестовых предметов - так что думай что им стоит спавнить, а что не стоит.
Я как раз спавню квестовый предмет.
добавлено спустя 15 минут
erlik
Еще раз спасибо за "профильно-именную" функцию, теперь можно спавнить в инвентарь не определяя Id.
А вот та функция, что последняя доработанная:Она только для спавна по профильному имени или так же можно, как раньше - в инвентарь актора и по координатам использовать?
отредактировал(а) Stalk15: 24-06-2010 21:12 GMT3 час. Новые фишки для сталкера(см. журнал)
#musnuk : начать его учить или просто занямиась скриптами знание придет незаметно?
Изучать весь язык может и не прийдётся, достаточно понять основные принципы. Хотя...
Открой любой скрипт, возьми любую функцию и начинай читать каждую строчку, слово, символ.
Останавливайся там, где не понимаешь о чём идёт речь, и ищи ответ на этот вопрос.
И так далее до последнего END.
Сначала будет нелегко. Потом начнёшь замечать знакомые\изученные конструкции.
В общем - дерзай.
Artos
function Has_ManyItems(...)
В аргументах ни разу не встречал многоточие ...Можно поинтересоваться, для чего нужно\служит многоточие?
----------------------------------------------------------------------------------------
А-а, понятно ..
отредактировал(а) Stalk15: 24-06-2010 22:14 GMT3 час. Новые фишки для сталкера(см. журнал)
Stalk15
при вызове функции ей могут передаваться аргументы, которые внутри функции могут/должны быть задействованы.
Например привычный уже вызов спавн-функции:
local soObj = alife():create("section", vector():set(x,e,z), lvid, gvid, id)
изнутри ее можно представить так:function create(section, vector, lvid, gvid, id)
--/ тело функции
endили так:function create(...)
local arg = {...} --/ исправлено!
section = arg[1]
vector = arg[2]
lvid = arg[3]
gvid = arg[4]
id = arg[5]
--/ тело функции
endТ.е. все аргументы, передаваемые на вход функции, собственно называют массивом аргументов и этот массив имеет зарезервированное имя: arg . Собственно этот массив всегда есть. При отсутствии аргументов его объем равен 0.
Т.о. если точно известно, что переданно функции - то все это можно 'обозвать' локальными для функции переменными 'на входе' (вариант 1).
А можно и просто принять весь массив и 'вынимать' из него нужные аргументы (перебирая или прямой адресацией) уже внутри (вариант 2). Читай мануалы по языкам - там порой попадается и полезное и даже увлекательное! :-)
#Artos : musnuk
Когда кто-то/что-то зарождается - это уже НЕ оффтопик! :-beer)
Терпения и настойчивости в пути! :-cool)
за это, отдельное спасибо... уж этого мне понадобится много. начну с википедии, потом "библия", ну и конечно помощь друзей с сп в поиске ошибок, недочетов и просто для упрощения жизни. ну и конечно труд, скрипты, тест0, скрипты,исправления, скрипты!
У меня есть вопрос. Зачем нужно это: alife():create(1)
или это: alife():create(2)?
Вот кусок скрипта где это находится:
local obj = get_story_object("exit_to_pripyat_from_st2")
if not obj then
alife():create(2)
obj = get_story_object("exit_to_pripyat_from_st2")
end
Ma$ter походу это переходы через локатию я точно незнаю.
Свабоду не астановить! Эх гробы подаражают!!!
Вливайся в "Свободу" лучший из кланов, заявки принимаем ежедневно и еженочно!!!!
Говари что думаеш и думай что говариш.
Начни с установки SciTE.
Всё что будешь читать - тут же проверяй в деле.
Поверь, понимание прийдёт быстрее.
У тебя в занятиях написано "шахматы". Значит усидчивость и логическое мышление есть. А это хорошее подспо**5001c54314580bda8be6**pe(k) == 'string' then
sItem = v
else
return false
end
if not Has_N_Item(sItem, iNum, oNPC) then
return false
end
bHas = true
[/code]
(эх, пора комп выключать уходить отдыхать ...)
Да уж, треть жизни пропадает.:-):-(
отредактировал(а) Gun12: 24-06-2010 23:23 GMT3 час. Не стань номинантом премии Дарвина.
Ma$ter
В данном контексте: 'alife():create(2)' - под '2' имеется ввиду секция спавна [2]. Это то, что можно видеть в распакованных из 'all.spawn' файлах типа 'alife_lXXX.ltx'.
Иначе: При старте новой игры все объекты создаются в игре из all.spawn'а.
Упомянутая тобою строка позволяет 'точечно' заспавнить объект конкретной секции (если конечно его уже нет в игре!), со всеми параметрами, указанными в секции.
Т.е. объект будет точно таким и там же как при старте новой игры.
Открывай 'all.spawn' и смотри, что за объект под [1] иль [2] иль .... [222] Gun12
Не спорю, такой вариант с таблицей вполне ...
Я собственно этот кусок, взяв из предыдущего, еще 'осилком' не правил. :-)
Gun12
Или я перегрелся или ... заработался (Warning!)
Все же я был изначально правЕе в сомнениях (см. [url=http://stalker-portal.ru/forums.php?m=post**5012c54314580bda8be6**rintf(fmt,...)
log(string.format(fmt,unpack(arg)))
end[/code]или[code]function random_choice(...)
local r = math.random(1, arg.n)
return arg[r]
end[/code]
Но(!), уже в релизном '_g.script' видим:
[code]function printf(fmt,...)
log(string.format(fmt,...))
end[/code]и[code]function random_choice(...)
local arg = {...}
local r = math.random(1, table.getn(arg))
return arg[r]
end[/code]
Т.о. НЕТ зарезервированной переменной 'arg' (это проверял и еще раз перепроверил) и массив входных данных одномерен, т.е. 'arg.n == nil' и применение этого варианта приводит к фатальным ошибкам.
Пока рабочим вариантом функции для списков/массивов для Сталкера получается:
[code]function Has_ManyItems(...)
local arg = {...}
local iCnt = arg and #arg --/ кол-во элементов в массиве входных аргументов
if iCnt and iCnt ~= 0 then
--/ и т.д.
[/code]
function dergi (trader, actor)
dialogs.relocate_item_section(trader, "wpn_ak74u", "out")
dialogs.relocate_money(trader, 1500, "in")
end
или
function dergi (first_speaker, second_speaker)
dialogs.relocate_item_section(second_speaker, "wpn_ak74u", "out")
dialogs.relocate_money(second_speaker, 1500, "in")
end
в первой ГГ отдает Ак74у но у него он не исчезает, т.е. может сколько угодно раз отдавать.
во второй он отдает ак74 но тогда он будет у НПС и тот может поменять оружие, но мне надо чтобы у НПСа ак не было, т.е. нужно чтобы предмет просто исчез и все.
Mehanik Yar
1. 'мне надо'/"нужно чтобы" - это из разряда "Дайте/сделайте мне ...".
Тут все же "Вопросы и Ответы", а не стол заказов ... Где вопрос то?
2. Ты пробовал хотя бы перевести название тобою применяемой функции?
"Перемещение предмета". Естественно пре**5003c54314580bda8be6**u_from_Actor()
local oItem = db.actor:object("wpn_ak74u") --/ определяем предмет у ГГ
if oItem then --/ у ГГ есть предмет
db.actor:drop_item(oItem) --/ выбрасываем предмет (опционально)
alife():release(alife():object(oItem:id()), true) --/ удаляем из игры
end
end[/code]
Stalk15
В твоем случае "правильная" - может работать, но "сюда_пишем_что_удалять_будем" - вот это и смешит(!). Это просто 'рыба', по удалению некоего объекта из игры.
Чтобы эта 'правильная' заработала, т.е. могла быть применена на практике и тем более к конкретному вопросу, тебе еще 'что-то' придется понаписать ... Забыл свои вчерашние мытарства с ID?
Вот смотрите:Чтоб спавнить сталкеров в all.spawn'е, указываю секцию:
[12478]
; cse_abstract properties
section_name = stalker
Я спавню монолитовца, пишу:
[12478]
; cse_abstract properties
section_name = monolith
Но при запаковки жалуется на monolith ...Что не так? ...Или нужно тоже написать stalker, а по профилю уже определится его группировка?
Artos
Не поверил :-G, и проверил Ваше утверждение насчёт arg.
СтОит признать что Вы абсолютно правы.
Знаю что вырезаны библиотеки, но честно сказать я и подумать не мог, что у разрабов поднимется рука даже на такую мелочь.
Резюме : ИМХО использовать Lua Сталкера для изучения и практики, чревато последствиями неправильной интерпритации многих стандартных конструкций, прекрасно работающих (даже больше - удобно работающих с помощью вырезанных в Сталке библиотек) в классическом Lua.
нет... учить ин яз. невозможно, если незнать как читаются буквы и не использавать его на практике...
прошу помочь, братья-порталовцы, в чтении скриптов.
вот такой скрипт в котором вроде что-то понятно
вернее три скрипта.
class "CZoneNoWeapon"
function CZoneNoWeapon:__init( zone, binder, ini )
// Если уже есть актер и он в зоне, то убираем оружие
if binder.actor_inside then
db.actor:hide_weapon()
end
end
function CZoneNoWeapon:on_enter( actor )
actor:hide_weapon()
end
function CZoneNoWeapon:on_leave( actor )
actor:restore_weapon()
end
скрипт на убор оружия, в таких зонах. сначала я вижу класс (class "CZoneNoWeapon"), как я понял это не столь важно, но все же для чего-то он ведь нужен.
затем идет обычный айди функции(CZoneNoWeapon:on_enter), где CZoneNoWeapon- класс, а on_enter-какое-то условие. затем показывается предмет\персонаж накоторый\который используется в функции. перейдем к рассмотрению поотдельности.
первый скрипт непонятен совсем, его оставим,перейдем сразу ко второму.
CZoneNoWeapon:on_enter( actor )- CZoneNoWeapon незнаю, а вот on_enter- значит вошел на территорию. в скобках actor- которое используется в этой функции.
actor:hide_weapon()- переводится, как ГГ:убирает оружие, но что значат эти скобки(зеленым выделены)уже не впервый раз вижу такие.
второй скрипт такой же, только на противное. т.е. при выходе из зоны убора, оружие автоматом достается.
правильно ли я разобрался?на то что я не понял просьба ответить.
подскажите, как сделать, чтобы ноутбук можно было юзнуть: т.е. подходиш к ноуту нажимаеш F, и выполняется срипт(появляется окошко, выдаётся инфопоршень и т.д.).???
отредактировал(а) sevitov_yura: 25-06-2010 11:19 GMT3 час.
musnuk
Если кто-то возьмётся отвечать на твои последние вопросы, то врятли ты что-то поймёшь, ведь классы - это далеко не азы (а без них никуда). Начни с прочтения различных введений, erlik недавно давал ссылки. И обязательно скачай Scite с Lua, ибо начинать скриптовать со Сталкера гораздо сложнее.
Эта тема закрыта, публикация новых сообщений недоступна.
Продолжая пользоваться сайтом, вы соглашаетесь с использованием файлов cookie. Страницы сайта могут содержать информацию, запрещенную для просмотра посетителям младше 18 лет. Авторское право на серию игр «S.T.A.L.K.E.R» и используемые в ней материалы принадлежит GSC Game World.