Есть хороший метод - game.start_tutorial("название"), где "название" - имя тега из game_tutorials.xml и вытекающих из него файлов.
В game_tutorials.xml нашел только туториалы какие-то, и там путь только к звуку есть, а к видео не нашел...Я нашел, что видео воспроизводится из ui_movies.xml.game.start_tutorial() подойдет, чтоб вызвать видео из ui_movies.xml..Или какая функция будет вызывать видео?
Gun12 Не согласен (хотя могу ошибаться, анализировал 'навскидку"):
1. Я ввел доп.проверки, выполняющие роль 'защиты от дурака'.
'if arg ~= nil then' --/защита от 'отсутствия' аргумента на входе вызываемой функции
2. Проверка же 'if arg.n ~= 0 then' - ИМХО, необязательна, т.к. цикл 'for i=1, arg.n do' НЕ будет обрабатываться, если arg.n == 0.
[del]Т.о. твое предложение открывает **5001c54314580bda8be6**n bHas, (bHas and 1) or 0 --/>
else
oNPC:iterate_inventory(
function (dummy, oItem)
if oItem:section() == sSection then
iCnt = iCnt + 1
if iNum ~= 0 and iCnt >= iNum then --/ при iNum == 0 => подсчет всего кол-ва
return true, iCnt --/> NPC имеет N предметов
end
end
end
,nil)
end
end
return (iCnt > 0 and iCnt >= iNum), iCnt --/> имеет ли NPC N предметов, и сколько
end
[/code]
Особенность в том, что позволяет подсчитывать и получать значение общего кол-ва проверяемого предмета у НПС, а не 'не меньше ли?'.
Этот запрос возможен при вызове функции с iNum = 0, а проверка 'имеет ли 0 предметов' не имеет смысла (если не считать инверсию тоже полезным вариантом использования ф-ции).
#Artos :
'if arg ~= nil then' --/защита от 'отсутствия' аргумента на входе вызываемой функции
Так я и говорю, что такая запись "не поймёт" есть на входе аргументы или нет, т.к. проверяется arg - а это таблица, которая всегда существует, и мало того - в ней есть запись.
Gun12
Точно! Я ошибался. Зациклился с '(fmt,...)', с которой в свое время долго провозился, распарсивая выводы влоги ...
Ну тогда ... собственно первая строка/проверка опциональна, может и отсутствовать. Хотя чуть экономит тайминги.
Artos
насчет (fmt,...).
Пытаюсь слепить скрипт, и прикручиваю т**5001c54314580bda8be6**or
end
for i = 1, arg.n do
..............[/code]
Т.е. при вызове Has_N_Item(oNPC, a,b,c) таблица arg разбирается как и раньше.
При вызове Has_N_Item(a,b,c) естественно oNPC присваивается значение а, но чтобы это значение не "отрезало", если это не 'userdata', то "спасаем" его перекинув в таблицу argtable.insert (arg, 1, oNPC)
-------------------------------------
P.S.
local Result = Has_N_Item(nil, ...) --/ наиболее частый вариант по применению
Дело в том, что данный вариант кода позволяет НЕ! указывать NIL в начале, а вызывать как ранее.
отредактировал(а) Gun12: 24-06-2010 13:32 GMT3 час. Не стань номинантом премии Дарвина.
Gun12
Тоже над этим размышлял, но ...
Чаще требуется простая проверка на наличие предмета у ГГ или списка/таблицы. У других неписей такие проверки довольно редки.
Писать:
а) local Result = Has_N_Item(oNPC, ...)
б) local Result = Has_N_Item(db.actor, ...)
и) local Result = Has_N_Item(nil, ...)--/ наиболее частый вариант по применению
менее удобно, чем
а) local Result = Has_N_Item(...,oNPC)
б) local Result = Has_N_Item(...,db.actor)
и) local Result = Has_N_Item(...)--/ наиболее частый вариант по применению
Забывчивость к аргументам, к сожалению, нередка ... P.S.
данный вариант кода позволяет НЕ! указывать NIL в начале
это я увидел. Но ... (сложно сразу написать все мысли/аргументы) ... пока анализирую ...
- однотипность порядка аргументов немаловажный фактор, позволяющий избегать ошибок
Согласиcь, основным обязательным(!) аргументом является таблица/список/секция, и ставить вперед опциональные аргументы - как минимум, требует помнить специфику функции.
- на наиболее часто употребимых вариантах излишние проверки на тип аргументов - лишние тайминги.
*.skls файл зачем нужен? Я хочу востановить некоторые вырезанные анимки ну и вот получил такой файл а что дальше то делать, скажите плиз?
Я нифига не понял как пользоваться этой функцией, объясните пожалуйста, мне нужно чтобы она проверяла у ГГ например ак74.
--/ Проверка на наличие у непися/актора предмета
--/ Примеры вызова:
--/ Result = Has_N_Item("section")
--/ Result = Has_N_Item("section", 3, [oNPC])
--/ oNPC - game_object (опционален), при отсутствии - проверка по актору
function Has_N_Item(sSection,iNum, oNPC)
if not oNPC then oNPC = db.actor end
if not iNum then iNum = 1 end
local iCnt = 0
if oNPC and sSection then
oNPC:iterate_inventory(
function (dummy, oItem)
if oItem:section() == sSection then
iCnt = iCnt + 1
if iCnt >= iNum then
return true --/> NPC имеет N предметов
end
end
end
,nil)
end
return iCnt >= iNum --/> имеет ли NPC N предметов
end
отредактировал(а) Mehanik Yar: 24-06-2010 14:25 GMT3 час.
Mehanik Yar
Даже в школе вначале учатся читать/писать и считать, а уже потом изучают математику/алгебру ...
Какой смысл задавать обычному первокласcнику вопросы по алгебре, если он еще не все мат.действия знает, не говоря о таблице умножения? Есть ли смысл отвечать на его вопрос? Тем более это уже делалось только что?
Вначале задайся вопросами типа: "Что такое функция и аргументы и как этим пользоваться".
На последних страничках топика по этим вопросом немало написано.
Напоминаю недовольным, этот топик "Вопросы и Ответы" по теме модмейкерства. Т.е. о том как самому сделать 'то или это'. И не нужно это путать с: "Мне тут захотелось - сделайте мне!", т.е. кто-то должен все разжевать до состояния пюре и в ротик вложить "вопрошающему" ...
Не знаю как остальные - но я таких нахлебников, не утруждающих себя чтением и мышлением - игнорирую!
Я вот хотел заспавнить предмет НПС в инвентарь(Сид и ид НПС не известен), так вот подскажите, что там нужно сделать?Преребирать айди и получать ид НПС:local obj_id = obj.id или как?
Artos
Аргумент oNPC(как и его отсутствие) используется в не менее обязательном порядке.
(oNPC:iterate_inventory)
Так что от перемены мест слагаемых...
Лишние проверки, тайминги...
Я всё понимаю. Но это расплата за универсальность.
(А настолько ли они велики?)
Так что для себя хочу определиться в следующем:
Если писать код для удобства будуших мододелов - то делать универсально, чтобы избавить их от запоминания различных вариантов вызова.
Если писать для себя, то конечно нужно разделять вызовы, и стараться сокращать тайминги.
Второй вариант, конечно, более приемлем.
Тем более известно, что затраты на оптимизацию кода несоизмеримо велики по сравнению с реально полученной оптимизацией.
Есть в диалогах такая вещь как
Ну так вот функция проверки не для выдачи инфопоршня а для того чтобы условие выполнялось.
ладно не надо сам потыкаю, всеже методом тыка я электронике как то научился.
Gun12
Я для себя позиционирую подобные 'универсальные' коды для двух основных применений:
- (основной) Как универсальный вариант при черновом программировании и для отладки. Имея уже готовую отработанную многофункциональную функцию, можно с'экономить время на необходимости вникать в тонкости оптимизации и избегать описок/ошибок, что нередко при написании любого кода.
- (побочное) как универсальный учебник и исполнитель 'пожелалок', позволяющий дать рабочий вариант для различных вариаций (для молодых мододелов).
Примечание: Применение его в более серьезных случаях/модах считаю спорным. Для модов, которые требуют немало процессорных ресурсов, подобные конструкции все же часто далеки от оптималности и не так уж востребованы. Оптимальнее иметь десяток 'заточенных' функций, чем универсальную.
Т.к. у меня в настоящее время 'интерес' с учетом 'примечания' (делаю и Симбионы), то мне близок вариант универсальности с акцентом на оптимальность. :-)
Все же проще, чтобы уже и черновые коды были ... пооптимальнее.
(Ничего нет постояннее - чем временное)
Но это конечно уже субъективизм. Mehanik Yar
Кол-ва 'тыков' в электронике - имеют конечное значение, результат же чаще всего виден (сгорело/отвалилось/исказилось/...).
Кол-во вариаций в программировании, особенно при недостатке знаний/навыков - бесконечны, а результаты чаще всего не видны или не ясны.
Если не будешь учить/познавать - 'тыкаться' можно 'до старости' ...
Иносказательно:
Вот так: :obstenu: иногда с электроникой можно совладать,
а в программировании только так: :rtfm: (ковыряние конфигов - это не программирование скриптов!)
1.обязательно знать язык луа, чтобы шарить в скриптах?
2.где можно достать библиотеку тегов и как все-таки разобраться со скриптами новичку (очень хочу научиться сам в этом бреду.не собираюсь становиться глупым нахлебником.диалоги пишу обалденно)
терь есть проблема, просьба тож помочь. установил скрипт на спавн (скопировал, как мне посоветовали)
прописал его в диалоге... таких функций сделал две (для разных npc) и обе функции не работают (вернее спавн не происходит, но и вылетов нема.)
musnuk
1. Можно ли читать/писать - не зная языка?
Конечно нужно знать LUA, чтобы самому что-то делать/переделывать.
Если конечно все пожелалки заканчиваются на банальном копипасте и правке пары символов под себя - то ... это не 'шарить в скриптах'.
2. Тэги - это не к LUA. Это ты на xtml'ках зациклился.
Мануалы, синтаксис и пр. - в сети и на этом портале куча материала/ссылок.
3. И как ты представляешь себе ответ на твой вопрос по каким-то функциям, прописанных тобою куда-то и как-то?
Если не фантазировать, то можно только сказать:
"Допустил где-то какую-то ошибку или чего-то где-то недоделал.".
Тебе такой ответ нужен? Тогда потрудись задать вопрос так, чтобы на него можно было ответить.
musnuk
1) Да, что бы шарить в скриптах Сталкера и луа... нужно знать луа.
2) а) Тегов в Сталкере много, и не только для диалогов, но и для UI и др. Что мешает написать её самому, изучив их все по примеру из оригинала. Хотя польза от этого... сомнительная, я считаю.
б) Читать официальную справку на русском языке, а так же различные русскоязычные сайты. А ещё есть справочник от Gun12, который в незаконечном виде уже толще (и полезнее!) оригинальной справки.
Artos, да, именно названий.
отредактировал(а) Darien Fx: 24-06-2010 16:22 GMT3 час.
Darien Fx Поправка: 'Тэгов' в Сталкере как раз не очень много (хотя все относительно), много их 'названий'. Это (разные имена однотипных тэгов) считай те же переменные, которые после парсинга (разбора текста) используются скриптами/движком.
'название' тэга - как правило, значение переменной, которой оперирует скрипт/движок.
Но не путать с 'типами' тегов! Это уже собственно типы данных/переменных (строки/таблицы/...)
function npc_spaun()
alife():create("musnuk",vector():set(-220.73,-18.87,-151.811),34237,66)
end
function spaw_n_n() -
local a = vector() -- db.actor:position()
a.x = -220.21
a.y = -19.93
a.z = -158.98
alife():create("wpn_ak47",a,33447,47,65535)
end
в диалоге я их прописал, как spaun _npc.npc_spaun
и соответственно spaun _npc.spaw_n_n
musnuk
На первый взгляд - рабочие функции.
А вот вызываются ли из диалога или нет и что же происходит - это как раз то, что я называю: "Посмотреть результат выполнения написанного".
Сам я 'смотрю' в логах, написав нужный мне вывод в лог. Ты же, не имея пока(?) такой возможности, можешь использовать вывод через новостной модуль.
Добавив подобное:function npc_spaun()
news_manager.send_tip(db.actor, "Спавним musnuk", 0, "default", 8000)
local soObj = alife():create("musnuk",vector():set(-220.73,-18.87,-151.811),34237,66)
if soObj then --/ если объект заспавнен
news_manager.send_tip(db.actor, "musnuk - заспавнен!", 0, "default", 8000)
else --/ ошибка спавна
news_manager.send_tip(db.actor, "musnuk - НЕ заспавнен", 0, "default", 8000)
end
endТы получишь визуальные результаты работы кодов:
1. Если при диалоге ничего не проиcходит - значит не правильно прописал в диалоге.
2. Кроме первого сообщения нет второго - ошибка в спавне. Проверяй параметры.
3. Второе сообщение на экране подскажет что же произошло.
Если нет спавна - см.секцию и пр.условия.
условие появления диалога. нужно вот зачем, у НПСа диалог должен появиться в том случае если в данный момент есть у него нужные предметы, но если сделать это инфопоршнем то тогда возможен ведь такой случай, что подобрал скажем ПМ и выдался инфопоршень, но потом его можно выкинуть а инфопоршень ведь не исчезнет вроде как или исчезнет? Если не исчезнет то тогда подходим к НПСу у него появляется тот диалог что должен быть только если есть тот предмет так как дальше задействовывается функция передчи предмета от ГГ к НПСу а так как нет предмета то если в функции это не предусмотрено то игра вылетит.
musnuk alife():create("wpn_ak47",a,33447,47,65535) - последнее число указывает на id бота (или актора), которому будет спавниться вещь. Раз ты указываешь точку на земле, то выделенное оранжевым не нужно.
Эта тема закрыта, публикация новых сообщений недоступна.
Продолжая пользоваться сайтом, вы соглашаетесь с использованием файлов cookie. Страницы сайта могут содержать информацию, запрещенную для просмотра посетителям младше 18 лет. Авторское право на серию игр «S.T.A.L.K.E.R» и используемые в ней материалы принадлежит GSC Game World.