Svoboда 3 Опубликовано 23 Апреля 2009 Поделиться Опубликовано 23 Апреля 2009 Тема для обсуждения скриптов всего и всех в серии игр STALKER. Задавая вопрос (!): 1. Внимательно изучите суть вопроса. Вопрос должен соответствовать выбранной Вами темы. Это поможет сохранить порядок и читабельность темы, а также облегчит поиск и понимание сего; 2. Изучите то, что уже есть в теме (пролистайте "руками", воспользуйтесь поиском на форуме); 3. Изучите информацию которая может вам помочь: Stalkerin. Там есть много хороших статей касательно данной темы.Уроки по модостроению. Есть рабочие примеры готовых скриптов различного назначения. Справочное руководство по языку Lua 5.1https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/ruСправочник по функциям и классам. Собрано много информации по функциям и классам, не всем, но по основные сведения предоставлены. Логика со вступлением и четырьмя частями: ВступлениеЧасть перваяЧасть втораяЧасть третьяЧасть четвертая. Smart_terrain (в простонароде - гулаг)Интересный способ настроики логики для гулаговСкриптовая часть игровой логики 4. Дабы не превращать обсуждение в "кашу" разной информативной направленности, задавайте несколько вопросов по порядку (в разных постах) после того, как получите ответ на предыдущий вопрос; 5. "Спасибо" и тому подобное - будьте так любезны в ПМ. Если не любите писать в ПМ, в конце вопроса напишите фразу: "Заранее спасибо!" - или что-то в этом духе; 6. ПОЖАЛУЙСТА! Указывайте, для какой игры Вам необходима информация (ТЧ, ЧН, ЗП), если стоит мод - укажите название мода; 7. Если Вы что-то сделали и результат не такой, какой Вами задумывался, то, пожалуйста, приводите коды которые Вы изменяли/писали целиком! Это поможет другим правильно ответить на Ваш вопрос, а также оградит Вас от лишней писанины. 8. Оформляйте сообщение. Пользуйтесь тегами для того, чтобы отделить код от текста. Пишите грамотно - ПОЛЬЗУЙТЕСЬ ЗНАКАМИ ПРЕПИНАНИЯ. 9. И помните: «Правильно заданный вопрос – половина ответа». Какие вопросы следует задавать, а какие нет... Задавайте вопросы, которые касаются непосредственно скриптов и их работы, т.е. Вы что-то делаете, а у Вас что-то не получается, при этом у Вас на руках должен быть хотя бы какой-то код, свидетельствующий о Вашей причастности к вопросу. Вопросы которые будут удалятся, следовательно их задавать не нужно:-- Где находится та или иная функция? Для ответа используем поиск по словам среди файлов оригинальной игры или мода, если объект поиска относится к нему, при помощью программы, которая Вам наиболее симпатизирует;-- Как сделать что-то/то-то? С подобными вопросами, либо в "ковырялки", где Вам вероятнее всего так же не ответят, либо выдвигаем мысли, подкреплённые теорией, практикой (идеальный вариант) и здравым рассудком;-- Вопросы со смыслом: "сделайте", "совместите" и подобными глаголами повелительного наклонения.-- К тому же удалению будут подвергаться вопросы, в которых масштабно не используются теги, для отделения кода и цитат от основного текста, а также не вписан в спойлер код размером превышающие семь строк.Ответ на возможно возникший вопрос: В какую тему можно обратиться по поводу логики и спавна объектов? В тему "ковырялок" соответствующей версии игры, для которой Вы задаёте вопрос. И последнее: очень рекомендовано к прочтению Правила форума 1 2 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/
Stiingray 4 Опубликовано 15 Апреля 2013 Поделиться Опубликовано 15 Апреля 2013 Подскажите, что не правильно сделано: local con = get_console() local ren = con:get_string("renderer")if ren = renderer_r2 then news_manager.send_tip(db.actor, "%c[0,0,255,25]рендер р2", nil, nil, 20000)end Какая ошибка - в логе не указывается. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/253/#findComment-769914
Charsi 441 Опубликовано 15 Апреля 2013 Поделиться Опубликовано 15 Апреля 2013 Stiingray, неправильно написано условие. if ren == "renderer_r2" then В логе должно быть как минимум то, что файл скрипта невалидный. Используй для проверки синтаксиса script Syntax Checker. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/253/#findComment-769920
OFF_ender 33 Опубликовано 17 Апреля 2013 Поделиться Опубликовано 17 Апреля 2013 Gun12, только сейчас добрался до твоего 2-го экономного варианта конвертации таблиц в строку (первый работает без проблем). Сначала не мог понять, почему пропускаются проверки элементов извлеченных таблиц, вроде бы внешний вид такой же, как и до преобразования в строку... Оказалось, на выходе toTable получаем стринги (как я понял). Наверное, где-то не хватает tonumber или ещё чего. Подскажи, плиз. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/253/#findComment-770385
Nazgool 250 Опубликовано 17 Апреля 2013 Поделиться Опубликовано 17 Апреля 2013 Да, действительно я забыл про tonumber. Найди в функции toTable : for m in v:gmatch('%S+') do t2[k[n]] = to10(m) n = n+1end и замени на : for m in v:gmatch('%S+') do local x = to10(m) t2[k[n]] = tonumber(x) n = n+1end Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/253/#findComment-770401
OFF_ender 33 Опубликовано 17 Апреля 2013 Поделиться Опубликовано 17 Апреля 2013 (изменено) Gun12, я уже пробовал вставлять tonumber, но на выходе большие числа были не те, что записывались в строку. Если я всё правильно вставил, то последнее твоё решение не помогло. Может дело во втором аргументе в tonumber(x, y) ? Изменено 17 Апреля 2013 пользователем OFF_ender Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/253/#findComment-770418
Nazgool 250 Опубликовано 17 Апреля 2013 Поделиться Опубликовано 17 Апреля 2013 (изменено) Не нужен там никакой второй аргумент. У меня всё работает. Можешь показать свою таблицу? Или дай несколько чисел, которые не правильно переводятся. Да, ещё найди и замени вот ещё что (там лишнее поле создаётся) : for i = 0, 9 do t100['0'..i] = char(240+i)end Изменено 17 Апреля 2013 пользователем Gun12 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/253/#findComment-770419
OFF_ender 33 Опубликовано 17 Апреля 2013 Поделиться Опубликовано 17 Апреля 2013 Gun12, попробовал поставить девятку. Результат не изменился. К примеру загоняю в строку: table1 = { [1]={id=5000,s=1,art=100} }. На выходе имеем: { [1]={id=800,s=1,art=160} } Может конечно это у меня что-то не так сростается... но 1-й вариант ведь работает... В любом случае спасибо за помощь! Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/253/#findComment-770425
Nazgool 250 Опубликовано 17 Апреля 2013 Поделиться Опубликовано 17 Апреля 2013 (изменено) Твоя таблица у меня работает нормально. Так что может ты не так что-то исправил, либо опять причуды lua а-ля сталкер. Отправил тебе ЛС. Смотри там. -------- Ага, таки ты всё-таки наисправлял... Пожалуйста. Изменено 17 Апреля 2013 пользователем Gun12 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/253/#findComment-770428
Stiingray 4 Опубликовано 19 Апреля 2013 Поделиться Опубликовано 19 Апреля 2013 (изменено) Stiingray, неправильно написано условие.if ren == "renderer_r2" then В логе должно быть как минимум то, что файл скрипта невалидный. Используй для проверки синтаксиса script Syntax Checker. Спасибо, исправил. Теперь появилась другая проблема, когда назначаю данную проверку на нажатие клавиши в меню, то сообщение почему-то не выводится: if level.present() and (db.actor ~= nil) and db.actor:alive() then if dik == DIK_keys.DIK_NUMPAD1 then local con = get_console() local ren = con:get_string("renderer") if ren == renderer_r2 then news_manager.send_tip(db.actor, "%c[0,0,255,25] р2", nil, nil, 20000) end end end Но, без проверки условия значение ren выводится: if level.present() and (db.actor ~= nil) and db.actor:alive() then if dik == DIK_keys.DIK_NUMPAD2 then local con = get_console() local ren = con:get_string("renderer") news_manager.send_tip(db.actor, "%c[25,240,25,25] рендер "..ren.."", nil, nil, 20000) end end ЗЫ Проверял Script syntax checker'ом Изменено 19 Апреля 2013 пользователем Stiingray 1 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/253/#findComment-770780
ColR_iT 171 Опубликовано 19 Апреля 2013 Поделиться Опубликовано 19 Апреля 2013 Stiingray, и что же ты исправил, если ошибка, на которую тебе указали так и осталась? Данной условие: if ren == renderer_r2 thenникогда не выполниться, т.к. ты пытаешь сравнить строку в переменной ren со значением nil, которое присвоено переменной renderer_r2. Поэтому сообщение и не выводится. Теперь о менее приятном: Во-первых, цитировать посты полностью не нужно, достаточно просто указать ник. Во-вторых, используй теги для того чтобы выделить код, в шапке темы об этом моменте ясно написано. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/253/#findComment-770793
Сталкер Лом 356 Опубликовано 21 Апреля 2013 Поделиться Опубликовано 21 Апреля 2013 Здравствуйте. Решил вернуть имена и описания для каждого тайника (как это было в ТЧ): в trasure_mananger.script заменил в функции CTreasureManager:give_treasure(treasure_id, spawn) локальную local text = "Тайник\\n%c[255,155,238,23]" на local text = "%c[255,238,155,23]"..game.translate_string(self.name).."\\n".."%c[default]"..game.translate_string(self.description). После функцию function CTreasureManager:__init() function CTreasureManager:__init() self.name = utils.cfg_get_string(ini, section, "name", nil, true, "") self.description = utils.cfg_get_string(ini, section, "description", nil, true, "") self.items_spawned = false self.check_time = nil self.secrets = {} self.secret_restrs = {} self.items_from_secrets = {}end Добавил файл-описания st_trasure.xml из ТЧ и сделал чтоб его читала игра, но при начале новой игры получаю вылет: FATAL ERROR[error]Expression : !m_error_code[error]Function : raii_guard::~raii_guard[error]File : D:\prog_repository\sources\trunk\xrServerEntities\script_storage.cpp[error]Line : 748[error]Description : ...l.k.e.r. - Зов Припяти\gamedata\scripts\utils.script:170: attempt to concatenate local 'section' (a nil value)stack trace:001B:69737365 nvd3dum.dll Как я понял, нужно для каждого тайника в st_trasure.xml нужно создать секцию описания name и description? Или не в ту сторону копать начал и описания от таких манипуляций я не получу? Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/253/#findComment-771197
Shredder 49 Опубликовано 21 Апреля 2013 Поделиться Опубликовано 21 Апреля 2013 На сколько я понял, ты ничего не понял. self.name = utils.cfg_get_string(ini, section, "name", nil, true, "") self.description = utils.cfg_get_string(ini, section, "description", nil, true, "") Вылет происходит из-за того, что ты передаёшь в функцию cfg_get_string первые два аргумента, которые не определены, другими словами их значения nil, о чём, собственно, в логе и сказано. Поэтому, если со скриптами не дружишь, то методом тыка можно долго добиваться результата. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/253/#findComment-771282
АuReN 0 Опубликовано 21 Апреля 2013 Поделиться Опубликовано 21 Апреля 2013 (изменено) Работает ли в Сталкере библиотека ввода-вывода io? Не уверен, но кажется только в ЗП. ColR_iT Изменено 21 Апреля 2013 пользователем ColR_iT Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/253/#findComment-771287
Unnamed Black Wolf 5 Опубликовано 21 Апреля 2013 Поделиться Опубликовано 21 Апреля 2013 ЗП, ЧН.. ТЧ, только в правленой версии... Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/253/#findComment-771327
Reisen 3 Опубликовано 22 Апреля 2013 Поделиться Опубликовано 22 Апреля 2013 (изменено) Пробую положить npc в анимацию после попадания. B xr_motivator.script после function motivator_binder:hit_callback(obj, amount, local_direction, who, bone_index)callstack() поместил свой код.. if (bone_index == 15 or bone_index == 19) then --// попаданиe в кости головы. local math = math local rnd = math.random(1,10) local say = "" if rnd <= 7 then --// 70% will result in heavy injury (Health reduced with script to 0.10%). obj.health =- 0.9 say = "Heavy Injury" --//state_mgr.set_state(obj, "wounded_heavy_3") obj:play_cycle("idle_to_wounded_1") elseif rnd == 8 or rnd == 9 then --// 20% chance it will result in temporary stun (Play sitting/sleeping animation). say = "Temporary Stun" --//state_mgr.set_state(obj, "sit_ass") obj:play_cycle("idle_to_wounded_0") elseif rnd == 10 then --// 10% chance it will just bounce off. say = "Ricochet" end news_manager.send_tip(db.actor, say, nil, nil, 2000) end Пробовал со state_mgr.set_state(obj, "sit_ass"), анимация начинает играть но быстро прерываетсям, наверное покрывается со state с более высоким приоритетом.Тоже самое с obj:play_cycle("idle_to_wounded_0"), начинает играть и быстро прекращается. Но если убрать все вражеские отношения (Чтобы враги не отвлекались) и стрельнут по npc то анимация будет проигриватся корректно и раз положены в анимацию npc в ней и останется.Eсть ли какой то способ чтобы npc остался в этой анимации и не прерывал ее. Изменено 22 Апреля 2013 пользователем Reisen Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/253/#findComment-771525
Unnamed Black Wolf 5 Опубликовано 22 Апреля 2013 Поделиться Опубликовано 22 Апреля 2013 Raisen если мне помнится, там надо захватить его под скрипт.. Чтоб стейт отработал корректно... Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/253/#findComment-771528
Reisen 3 Опубликовано 22 Апреля 2013 Поделиться Опубликовано 22 Апреля 2013 Не особо понимаю что значит "захватить его под скрипт", какие то примеры этого захвата под скрипт? И если можна так объяснить как для очень нового, я со скриптами от нескольких дней только знакомлюсь. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/253/#findComment-771531
Shredder 49 Опубликовано 23 Апреля 2013 Поделиться Опубликовано 23 Апреля 2013 Тебе нужно добавить схему поведения. Или, возможно, допилить схему xr_wounded, чтобы она заработала так, как тебе нужно. Примеров таких схем в самой игре предостаточно, но если ты со скриптами несколько дней, то сложновато будет. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/253/#findComment-771542
Shadowman 939 Опубликовано 23 Апреля 2013 Поделиться Опубликовано 23 Апреля 2013 Речь была про функцию io... ЗП, ЧН.. ТЧ, только в правленой версии... 6 патч от Macron-а? Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/253/#findComment-771669
Callisto 2 Опубликовано 25 Апреля 2013 Поделиться Опубликовано 25 Апреля 2013 Доброго времени суток. Что-то никак не могу найти, "то ли лыжи не едут, то ли..." В общем, можно ли проверить существование файла и папки? Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/253/#findComment-772121
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти