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 Ссылка на комментарий
ZeeK 57 Опубликовано 1 Мая 2011 Поделиться Опубликовано 1 Мая 2011 Garry_Galler Expression : !m_error_code Function : raii_guard::~raii_guard File : D:\prog_repository\sources\trunk\xrServerEntities\script_storage.cpp Line : 748 Description : ....e.r. - Зов Припяти\gamedata\scripts\xr_logic.script:1306: attempt to index local 'obj' (a nil value) Может я неправильно в бинд_сталкере дописал? я поставил dialogs_mod_marsh.change_relationship() end перед последним end в actor_binder:update(delta) Не соответствует. N6260 Ссылка на комментарий
Garry_Galler 7 Опубликовано 1 Мая 2011 Поделиться Опубликовано 1 Мая 2011 ZeeK Забыл, что у тебя это на апдейте стоит - тогда стоит добавить проверку на текущую группировку,чтобы лишних действий не выполнялось. А лог твой мне ни о чем не говорит. function change_relationship() local actor = db.actor local outfit=db.actor:get_current_outfit() if outfit then if find_in_string(outfit:section(),"stalker_monolith_outfit") then if actor:character_community() ~= "monolith" then actor:set_character_community("monolith" ,0,0) end else if actor:character_community() ~= "actor" then actor:set_character_community("actor",0,0) end end end end TRAMP14 А может у него своя 'обертка' ? Поэтому я исправлять не стал. Ссылка на комментарий
speczadanie 0 Опубликовано 2 Мая 2011 Поделиться Опубликовано 2 Мая 2011 Подскажите, в каком файле находится логика Семёнова\Круглова с Янтаря. Ссылка на комментарий
Painter 3 472 Опубликовано 2 Мая 2011 Поделиться Опубликовано 2 Мая 2011 Доброго времени суток, подскажите пожалуйста, как вычислить расстояние от ГГ, до определённого смарта? Заранее спасибо. Портфолио Ссылка на комментарий
TRAMP14 1 Опубликовано 2 Мая 2011 Поделиться Опубликовано 2 Мая 2011 а есть ли чтото вроде db.actor:set_actor_position для неписей? Добавлено через 18 мин.: И ещё вот такой момент: Вот код for k, v in pairs(one_slot) do local kol = 0 db.actor:iterate_inventory(function (dummy, item)if item:section() == v then kol=kol+1 end end, nil) return kol if kol > kol_one then tramp.drop(v) end end И вот такая ошибка перед 'if' ожидается 'end' (необходимо закрыть 'for' в строке 110) Ссылка на комментарий
RvP 1 Опубликовано 2 Мая 2011 Поделиться Опубликовано 2 Мая 2011 TRAMP14, return же в цикле стоит.. Vita sine libertate, nihil Vita sine litteris - mors est Ссылка на комментарий
Disord 1 Опубликовано 2 Мая 2011 Поделиться Опубликовано 2 Мая 2011 Здравствуйте! Существует ли функция убирания предмета из слота в инвентарь? Ссылка на комментарий
Garry_Galler 7 Опубликовано 2 Мая 2011 Поделиться Опубликовано 2 Мая 2011 Disord Существует. Но не в оригинале, а в не выложенном в открытый доступ патче для ТЧ. (патч делается эксклюзивно для одного мода). TRAMP14 Цикл for закрой end-ом. Чекер тебе написал все что нужно сделать. И nil можешь убрать - он не нужен. А дабы не путаться вместо анонимной функции итерации пиши локальную. Ссылка на комментарий
Charsi 440 Опубликовано 3 Мая 2011 Поделиться Опубликовано 3 Мая 2011 Disord, предмет из слота скидывается так: function drop_item_to_inventory(number) local actor=db.actor local item = actor:item_in_slot(number) if item then actor:drop_item(item) local sobj=alife():create(item:section(),actor:position(),actor:level_vertex_id(),actor:game_vertex_id(),0) actor:transfer_item(item,actor) alife():release(sobj,true) end end Lua и LuaJIT плагины для Notepad++ SciTE-RU 3.5.5 плагины для MilkShape3D Ссылка на комментарий
TRAMP14 1 Опубликовано 3 Мая 2011 Поделиться Опубликовано 3 Мая 2011 (изменено) Цикл for закрой end-ом. Чекер тебе написал все что нужно сделать. И nil можешь убрать - он не нужен. В том то и дело что он закрыт (это и есть вся функция). Прошлую такую ошибку я исправил перегрузкой чекера (перепроверял им скрип пока он мне не показал что всё правильно. глупо конечно, но ошибка для меня и правда непонятная. А дабы не путаться вместо анонимной функции итерации пиши локальную Если честно не понял Создать одну в начале и подгружать? Было такое дело. Не вылета небыло, ничего, но и функция не заработала Изменено 3 Мая 2011 пользователем TRAMP14 Ссылка на комментарий
Disord 1 Опубликовано 3 Мая 2011 Поделиться Опубликовано 3 Мая 2011 Charsi, спасибо огромное! И ещё вопрос: есть ли каллбек на перемещение предмета в слот? Или на апдейт вешать придётся? Ссылка на комментарий
ZeeK 57 Опубликовано 3 Мая 2011 Поделиться Опубликовано 3 Мая 2011 Сделал логику, но мне нада что бы она хватала НПС, потом отпускала вновь в симуляцию, ждала пару часов и вновь становилась активной. Знаю как все сделать кроме-отпускала в симуляцию. Подскажите плз Не соответствует. N6260 Ссылка на комментарий
Garry_Galler 7 Опубликовано 3 Мая 2011 Поделиться Опубликовано 3 Мая 2011 (изменено) TRAMP14 Очень плохо что не понял. Локальная функция - это именованная функция внутри функции. Посмотри примеры в модах. for у тебя не закрыт. Ты не соблюл правила lua - так что вперед изучать теорию. И вообще зачем изобретать велосипед - возьми пример готовой функции из любого мода (поиск по iterate) которая итерирует инвентарь - сделай себе из нее то что нужно. Изменено 3 Мая 2011 пользователем Garry_Galler Ссылка на комментарий
TRAMP14 1 Опубликовано 3 Мая 2011 Поделиться Опубликовано 3 Мая 2011 (изменено) for у тебя не закрыт. Ты не соблюл правила lua - так что вперед изучать теорию. НУ как не закрыт? Вот вся функция без изменений: function oOne() for k, v in pairs(one_slot) do local kol = 0 db.actor:iterate_inventory(function (dummy, item)if item:section() == v then kol=kol+1 end end, nil) return kol if kol > kol_one then tramp.drop(v) end end end Всегу нужно 3 endа. Так? 1 для функции, 2 для for и 3 для if. p/s/ Спасибо за идею таких названий (вроде: oOne, tTwo)! Очень плохо что не понял. Локальная функция - это именованная функция внутри функции. Посмотри примеры в модах. Это вроде local function.....() ... end ? Изменено 3 Мая 2011 пользователем TRAMP14 Ссылка на комментарий
_Призрак_ 11 Опубликовано 3 Мая 2011 Поделиться Опубликовано 3 Мая 2011 Явная ошибка: function oOne() for k, v in pairs(one_slot) do local kol = 0 db.actor:iterate_inventory(function (dummy, item)if item:section() == v then kol=kol+1 end end, nil) if kol > kol_one then tramp.drop(v) end return kol end end После ретурн ничего не должно стоять Freedom Ссылка на комментарий
TRAMP14 1 Опубликовано 3 Мая 2011 Поделиться Опубликовано 3 Мая 2011 После ретурн ничего не должно стоять А если его убрать ничего не будет? Я собственно и ставить его не хотел, но..... Ссылка на комментарий
_Призрак_ 11 Опубликовано 4 Мая 2011 Поделиться Опубликовано 4 Мая 2011 return - показывает двигателю, что нужно возвратить что-то. В твоем случае возвращается переменная kol Freedom Ссылка на комментарий
Nazgool 250 Опубликовано 4 Мая 2011 Поделиться Опубликовано 4 Мая 2011 А если его убрать ничего не будет? Я собственно и ставить его не хотел, но..... Если не знаешь Lua - изучай. Если не хочешь - верь чекеру. Я его писал с использованием стандартной библиотеки Иерусалимски. Т.е. ошибки не придумывал. Конечно можно предположить что при написании кривые руки были у меня и у автора Lua, но только не у тебя. Так? Если не так и если чекер говорит что после return ... должен стоять end, то может быть так оно и есть? Ну а если возникнет вопрос "Почему?", то см. первую строку этого сообщения. Ссылка на комментарий
TRAMP14 1 Опубликовано 5 Мая 2011 Поделиться Опубликовано 5 Мая 2011 про лишний ретурн чекер ничего не говорил... Ссылка на комментарий
Nazgool 250 Опубликовано 5 Мая 2011 Поделиться Опубликовано 5 Мая 2011 (изменено) А кто сказал что rеturn лишний? Может лишнее то, что после него? Всё зависит от того, что именно ты хотел сделать. Но в любом случае метод тыка ("Не хотел ставить, но решил ...") в скриптовнии не проходит. Если уж тебе и захотелось его куда-то присобачить, то необходимо было хоть документацию почитать, чтобы точно знать куда и когда писать. Изменено 5 Мая 2011 пользователем Gun12 Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти