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 Ссылка на комментарий
UnLoaded 313 Опубликовано 6 Января 2016 Поделиться Опубликовано 6 Января 2016 как стравить двух НПС, а то они не атакуют друг друга Чудес не бывает - если у них группировки(community) враждебные друг-другу, то они будут атаковать друг-друга. Ищи ошибку, или в профилях одинаковую группировку им прописал, или в логике есть запрет на атаку. 1 Ссылка на комментарий
macron 1 890 Опубликовано 6 Января 2016 Поделиться Опубликовано 6 Января 2016 А не существует ли "универсального" скрипта для удаления пустых пачек патронов из инвентаря? Не сильно надо, но вдруг уже выкладывали... http://images.gameru.net/image/direct/feeb3c7175.jpg Ссылка на комментарий
UnLoaded 313 Опубликовано 6 Января 2016 Поделиться Опубликовано 6 Января 2016 для удаления пустых пачек патронов из инвентаря? Это похоже в каком-то моде накрутили, что пачки имеют 0 патронов ? В оригинале такого вроде не замечал... А насчет скрипта - так есть ведь древний как ... не важно что, скрипт перепаковки не полных пачек. Он как раз должен такие пустышки прибирать. К примеру этот. Ссылка на комментарий
macron 1 890 Опубликовано 6 Января 2016 Поделиться Опубликовано 6 Января 2016 Это похоже в каком-то моде накрутили, что пачки имеют 0 патронов ? В оригинале такого вроде не замечал... Кстати, да. Dunin_ammo как раз здесь используется, чтобы на пояс полные пачки вешались. Раз в оригинале такого нет, то, стало быть, мелкий побочный эффект от него. Вопрос снимается. Ссылка на комментарий
RayTwitty 516 Опубликовано 6 Января 2016 Поделиться Опубликовано 6 Января 2016 Раз в оригинале такого нет, то, стало быть, мелкий побочный эффект от него.Ни в оригинале, ни с этим скриптом такого бага я не видел. Смотрите спавн и какое там количество патронов прописано. 1 Ссылка на комментарий
vampirnik77 121 Опубликовано 8 Января 2016 Поделиться Опубликовано 8 Января 2016 (изменено) Давно мне голову забивает одна мысль. Можно ли как-то менять свойства у артефактов? А точнее значение этих самых свойств? Изменено 8 Января 2016 пользователем vampirnik77 Официальная страница проекта Neof-One Crew Ссылка на комментарий
dsh 3 824 Опубликовано 8 Января 2016 Поделиться Опубликовано 8 Января 2016 @vampirnik77, используя x-ray extensions - можно. Вот тут https://github.com/KD87/xray-extensions/blob/master/help/%D0%9F%D0%BE%D0%BB%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5%20%D1%81%D0%B2%D0%BE%D0%B9%D1%81%D1%82%D0%B2%20%D0%B0%D1%80%D1%82%D0%B5%D1%84%D0%B0%D0%BA%D1%82%D0%B0.script нужные смещения описаны. dsh mod: https://github.com/dsh2dsh/op2ogse Ссылка на комментарий
vampirnik77 121 Опубликовано 8 Января 2016 Поделиться Опубликовано 8 Января 2016 (изменено) @dsh, Спасибо. Я бы рад. Но все эти прелести для ТЧ. Это я забыл указать платформу, извините. Платформа ЗП. P.s Хочется рандомных свойств. А секции плодить не хочется. Изменено 8 Января 2016 пользователем vampirnik77 Официальная страница проекта Neof-One Crew Ссылка на комментарий
Dennis_Chikin 3 661 Опубликовано 9 Января 2016 Поделиться Опубликовано 9 Января 2016 (изменено) Забавный эффект: class "my_cls" function my_cls:__init() end function my_func( st, a ) st.actions = { [a] = true } end my_func( t, my_cls() ) - таблица разрушена, при том, что local a = my_cls(); my_func( t, a ) - работает. Самое забавное, что происходит только в начале игры, и проявляется вылетом 0023:100046A6 xrSound.dll, CSound_manager_interface::CSound_manager_interface() Изменено 9 Января 2016 пользователем Dennis_Chikin Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
Dennis_Chikin 3 661 Опубликовано 11 Января 2016 Поделиться Опубликовано 11 Января 2016 Что-то я не понял... Так все-таки, в ТЧ можно удалять из апдейта объекта этот объект ? В какой-то момент фокус устойчиво срабатывает. Но именно в какой-то. Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
abramcumner 1 174 Опубликовано 12 Января 2016 Поделиться Опубликовано 12 Января 2016 Забавный эффект: my_func( t, my_cls() ) - таблица разрушена, при том, что local a = my_cls(); my_func( t, a ) - работает. Вроде обычный эффект - выход переменной из области видимости.Вот так тоже не должно работать: do local a = my_cls(); my_func( t, a ) end Что-то я не понял... Так все-таки, в ТЧ можно удалять из апдейта объекта этот объект ? В какой-то момент фокус устойчиво срабатывает. Но именно в какой-то. Можно конечно. При удалении удаляется только серверный объект, клиентский, из апдейта которого ты удаляешь, вполне себе еще жив. Он удалится только к следующему апдейту.Не срабатывать может из-за того, например, что перед удалением сохранили ссылку на серверный и пытаются с ней работать после удаления. Ссылка на комментарий
DXatom 0 Опубликовано 12 Января 2016 Поделиться Опубликовано 12 Января 2016 Чудес не бывает - если у них группировки(community) враждебные друг-другу, то они будут атаковать друг-друга. Ищи ошибку, или в профилях одинаковую группировку им прописал, или в логике есть запрет на атаку. Да, дело было в community. "freedom" атакует "dolg", но атаковать группировку "bandit" не хочет. Ссылка на комментарий
dsh 3 824 Опубликовано 12 Января 2016 Поделиться Опубликовано 12 Января 2016 "freedom" атакует "dolg", но атаковать группировку "bandit" не хочет Во, как раз еще помню свое удивление, когда с этим столкнулся. В game_relations.ltx поправь отношения бандитов и свободы, а то они там нейтральны друг к другу. Если тебе именно это нужно. 1 dsh mod: https://github.com/dsh2dsh/op2ogse Ссылка на комментарий
DXatom 0 Опубликовано 12 Января 2016 Поделиться Опубликовано 12 Января 2016 Во, как раз еще помню свое удивление, когда с этим столкнулся. В game_relations.ltx поправь отношения бандитов и свободы, а то они там нейтральны друг к другу. Если тебе именно это нужно. Спасибо! То что нужно. Ссылка на комментарий
Dennis_Chikin 3 661 Опубликовано 14 Января 2016 Поделиться Опубликовано 14 Января 2016 (изменено) Вроде обычный эффект - выход переменной из области видимости.Где там из области видимости ? Обработка внутри выражения должна идти справа налево. А вот 2 разных выражения - здесь - по порядку. клиентский, из апдейта которого ты удаляешь, вполне себе еще жив. Однако вывода в лог после alife():release() уже нет. То есть, объект таки помре. Изменено 14 Января 2016 пользователем Dennis_Chikin Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
abramcumner 1 174 Опубликовано 14 Января 2016 Поделиться Опубликовано 14 Января 2016 Где там из области видимости ? Обработка внутри выражения должна идти справа налево. А вот 2 разных выражения - здесь - по порядку. my_func( t, my_cls() ) - таблица разрушена, при том, чтоЭто строчка равносильна такому: do local temp = my_cls() my_func(t, temp) end После вызова my_func временный объект удалится и в таблице будет ссылка на удаленный объект local a = my_cls(); my_func( t, a )Здесь а будет жить до следующего end. И какое-то время его даже можно будет получить из таблицы. Однако вывода в лог после alife():release() уже нет. То есть, объект таки помре.Если вывода нет - значит завис биндер. А биндер может зависнуть в том числе из-за неправильного вызова alife():release() И там и там хорошо бы тестовые примеры для чистого ТЧ. Ссылка на комментарий
Desertir 202 Опубликовано 14 Января 2016 Поделиться Опубликовано 14 Января 2016 После вызова my_func временный объект удалится и в таблице будет ссылка на удаленный объектДумаю, сборщик мусора не отупел до того, чтобы удалять объект, который используется как ключ в таблице.Тов. @Dennis_Chikin чего то недоговаривает, код рабочий: class "key_obj" function key_obj:__init(name) self.name = name end local function log(text) get_console():execute("~~~" .. string.gsub(text, " ", "_")) end function set_act(t, a) t.actions = { [a] = true } end function test() local mtable = {} set_act(mtable, key_obj("key")) for obj, _ in pairs(mtable.actions) do log(obj.name) end endДобавив в start_game_callback вывел Сервер: Старт... ! Unknown command: ~~~key Так о каком начале игры идет речь, о каком объекте и таблице? Может его движок кто-то удалить успевает. А может еще какие танцы с бубном есть в коде, а мы тут на область видимости пальцами тыкаем. ТЧ 1.0004. SAP и Trans mod github Ссылка на комментарий
_Dunay_ 0 Опубликовано 14 Января 2016 Поделиться Опубликовано 14 Января 2016 (изменено) Друзья, я новичок в скриптописании. Подскажите, кому не сложно, как скриптом сделать проверку на то, что актору был нанесен хит и тип хита woundscale? На форуме очень много информации, все пересмотреть не удается, а поиск ничего толкового не выдает, либо я не умею пользоваться им)) Изменено 14 Января 2016 пользователем _Dunay_ Ссылка на комментарий
Dennis_Chikin 3 661 Опубликовано 16 Января 2016 Поделиться Опубликовано 16 Января 2016 Думаю, сборщик мусора не отупел до того, чтобы удалять объект, который используется как ключ в таблице. Тов. Dennis_Chikin чего то недоговаривает, код рабочий: Похоже, что да, таки рабочий. Проблема откуда-то еще. НИ - имелось в виду именно НИ: то есть, с сэйва - работает. А вот "новая игра" - вылеты идут примерно в 3-х случаях из 10. Касательно alife():release(), то вот: function se_respawn:execute() local sim = alife() local game_time,idle_spawn,idle_time,num,prob,respawn_time,shift_time,timer -- проверим, условия автоудаления if self.tab_auto_dell then self.auto_dell = xr_logic.pick_section_from_condlist(db.actor_proxy,self,self.tab_auto_dell) ~= nil end -- если условия выполнены и есть флаг спавна - очистим таблицы и удалим респавнер if self.auto_dell and self.first_spawned then self.spawned_obj = {} respawners[self:name()] = nil sim:release(self,true) return end Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
Winsor 178 Опубликовано 21 Января 2016 Поделиться Опубликовано 21 Января 2016 (изменено) Уважаемые знающие, вопрос о class_registrator.script и иже с ними. Хочу добавить свой серверный класс для работы с лампами, ТЧ 1.0006 НС АЕМ. Вот код из регистратора: 1) cs_register (object_factory, "hanging_lamp", "aem_lights.se_lamp", "AEM_LAMP", "aem_lamp") 2) cs_register (object_factory, "hanging_lamp", "se_objects.se_hanging_lamp", "O_HLAMP", "lights_hanging_lamp") 2-й пункт - это то что я хочу добавить. Проблема в том что se_objects.se_hanging_lamp биндится только в случае если 1-й пункт заккоментирован. т.е. я не могу клиентский класс (hanging_lamp) связать с разными типами (AEM_LAMP и O_HLAMP) и секциями (aem_lamp и lights_hanging_lamp) и серверными классами? когда я делаю alife:create() - я ведь создаю "по секции" а не по клиентскому классу. Подскажите, пожалуйста, где ошибка в моих рассуждениях? Изменено 21 Января 2016 пользователем Winsor Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти