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/
Zander_driver 10 348 Опубликовано 20 Августа 2020 Поделиться Опубликовано 20 Августа 2020 Только что, Muzafir сказал: написал название локации неправильно. Никаких вылетов. Дык он "написанное" сравнивает с тем, что возвращает level.name(). В "написанном" что угодно может быть, вылета от этого не будет. Ты все же проверь так как я тебе написал. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/528/#findComment-1345735
_g.script 3 656 Опубликовано 20 Августа 2020 Поделиться Опубликовано 20 Августа 2020 1 минуту назад, Muzafir сказал: Выходит это условие не проверяется Проверяется, но здесь вылета не получишь. Запроси выдачу ложного поршня после проверки локи и поймёшь. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/528/#findComment-1345736
Muzafir 19 Опубликовано 20 Августа 2020 Поделиться Опубликовано 20 Августа 2020 2 минуты назад, Zander_driver сказал: Дык он "написанное" сравнивает с тем, что возвращает level.name(). В "написанном" что угодно может быть, вылета от этого не будет. Ты все же проверь так как я тебе написал. ок, сейчас догнал Если поставить выше деф-менеджера вылет такой: Expression : fatal error Function : CScriptEngine::lua_error File : E:\stalker\sources\trunk\xr_3da\xrGame\script_engine.cpp Line : 73 Description : <no expression> Arguments : LUA error: ...a.l.k.e.r. soc\gamedata\scripts\death_manager.script:135: bad argument #1 to 'pairs' (table expected, got nil) Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/528/#findComment-1345737
Zander_driver 10 348 Опубликовано 20 Августа 2020 Поделиться Опубликовано 20 Августа 2020 Вот теперь интересно, а что у него в 135 строке. И нынешний код в net_spawn покажи) Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/528/#findComment-1345739
Muzafir 19 Опубликовано 20 Августа 2020 Поделиться Опубликовано 20 Августа 2020 (изменено) Нынешний код: function actor_binder:net_spawn(data) printf("actor net spawn") level.show_indicators() self.bCheckStart = true self.weapon_hide = false -- спрятано или нет оружие при разговоре. weapon_hide = false -- устанавливаем глобальный дефолтовый флаг. if object_binder.net_spawn(self,data) == false then return false end db.add_actor(self.object) if self.st.disable_input_time == nil then level.enable_input() end self.weather_manager:reset() -- game_stats.initialize () if(actor_stats.add_to_ranking~=nil)then actor_stats.add_to_ranking(self.object:id()) end if (level.name() == "simeiz") and not has_alife_info("keep_base_defend_started") then self.object:give_info_portion("keep_base_defend_started") end --' Загружаем настройки дропа death_manager.init_drop_settings() return true end death_manager - стандартный. Я только в конце одной строки дописал новую группировку. На количество строк это не повлияло 135 строка - это for k,v in pairs(spawn_items) do --' Доспавниваем необходимое количество итемов: --' Необходимо составить список объектов которые могут быть заспавнены для персонажа local spawn_items = item_by_community[self.npc:character_community()] for k,v in pairs(spawn_items) do --' По каждому объекту необходимо получить зависимости if check_item_dependence(self.npc, k) == true then --' По каждому объекту необходимо получить количество local number = math.ceil(math.random(count_by_level[k].min, count_by_level[k].max)) --' Необходимо заспавнить нужное количество. create_items(self.npc, k, number, v) end end end Изменено 20 Августа 2020 пользователем Muzafir для наглядности Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/528/#findComment-1345740
_g.script 3 656 Опубликовано 20 Августа 2020 Поделиться Опубликовано 20 Августа 2020 7 минут назад, Zander_driver сказал: а что у него в 135 строке Подозреваю, что у него в конфигах что-то не так по итемам на этой локации Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/528/#findComment-1345744
Zander_driver 10 348 Опубликовано 20 Августа 2020 Поделиться Опубликовано 20 Августа 2020 Только что, Muzafir сказал: дописал новую группировку. Только что, Muzafir сказал: local spawn_items = item_by_community[self.npc:character_community()] А в настройки дропа эту группировку занес? Или заноси, или перед for добавляй проверку if spawn_items and type(spawn_items) == 'table' then Он же пытается получить настройки дропа для группировки... а потом их перебрать. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/528/#findComment-1345746
Muzafir 19 Опубликовано 20 Августа 2020 Поделиться Опубликовано 20 Августа 2020 Вносил, точно помню. Сейчас перепроверю, может накосячил там где-то На всякий, настройки дропа - это death_items_by_communities.ltx? Проверил, как ты сказал - и название локации и инфопорция точно правильны Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/528/#findComment-1345748
Zander_driver 10 348 Опубликовано 20 Августа 2020 Поделиться Опубликовано 20 Августа 2020 Только что, Zander_driver сказал: if spawn_items and type(spawn_items) == 'table' then Проверку добавь тогда. 1 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/528/#findComment-1345752
Muzafir 19 Опубликовано 20 Августа 2020 Поделиться Опубликовано 20 Августа 2020 В death_items_by_communities.ltx косяка нет. Я просто скопировал секцию и переименовал. Добавлю твою проверку. Еще раз спасибо. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/528/#findComment-1345755
Norman Eisenherz 354 Опубликовано 21 Августа 2020 Поделиться Опубликовано 21 Августа 2020 Здрасьте. Проблема при определении ячейки карты для спавна предмета. Читаю текущие координаты и позицию ячейки вот таким скриптом: Spoiler function sms(text) news_manager.send_tip(db.actor, text) end function coords(cell) local act = db.actor local pos = act:position() pos.x = math.modf(pos.x) pos.y = math.modf(pos.y) pos.z = math.modf(pos.z) sms("xyz = " .. pos.x .. ", " .. pos.y .. ", " .. pos.z) if cell then local lvid = act:level_vertex_id() local gvid = act:game_vertex_id() sms("lvid, gvid = " .. lvid .. ", " .. gvid) end end ТЧ, Кордон, крыша вагона над Кузнецовым: lvid = 359827, gvid = 97. Объект с такими параметрами ячейки спавнится в указанном месте. ЧН, Кордон, крыша элеватора: lvid = 310050, gvid = 571. Объект с такими параметрами ячейки обнаруживается на сервере, но остается невидимым. Если задать lvid = 25 и gvid = 472, как в секции [all.spawn] для Кордона, объект отспавнится правильно. Что изменилось в расчете позиций ячеек в ЧН и как получить действующие значения lvid и gvid? Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/528/#findComment-1345771
DibokDibokin 1 Опубликовано 21 Августа 2020 Поделиться Опубликовано 21 Августа 2020 (изменено) Здравствуйте. Я опять насчёт меток на ящиках. Способ по визуалу работает, но частично. В Кордоне например, метки не ставятся, в лог пишет "alife():object(id) ! invalid id specified". Но в Баре всё работает, в лог выводится: box object [physic_destroyable_object:1063] detected. visual=dynamics\box\box_metall_01 С способом по логике drop_box получше. Отображаются везде, но есть две мини-проблемы: 1) Если нажать ЛКМ или подвигаться, то метки пропадают. 2) После уничтожения ящика, метка всё еще остается. Исчезают после перезагрузки сейва. Изменено 21 Августа 2020 пользователем DibokDibokin Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/528/#findComment-1345909
Капрал Хикс 561 Опубликовано 22 Августа 2020 Поделиться Опубликовано 22 Августа 2020 Что-то не едут у меня лыжи... Есть у меня скрипт на проверку статика заклинивания оружия: function jamupdate() local snd = sound_object([[actor\wpn_jammed\stalker_1]]) if get_hud():GetCustomStatic("weapon_jammed_static") and not snd:playing() then snd:play_at_pos(db.actor, vector():set(0,0,0), 0, sound_object.s2d) end end Который должен воспроизводить звук ГГ при заклинивании ствола... Куда его вешать на апдейт, чтобы статик отлавливался, в биндер актора? P.S. функция в _g.script: function on_actor_weapon_jammed() if has_alife_info("esc_trader_newbie") then game.start_tutorial("part_9_weapon") end if not has_alife_info("encyclopedy_tutorial_weapon") then db.actor:give_info_portion("encyclopedy_tutorial_weapon") end end Вообще рабочая в оригинале, там вроде туториал выводиться должен? Пробовал повесить туда функцию проигрывания звука - не работает. 1 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/528/#findComment-1345992
Zander_driver 10 348 Опубликовано 22 Августа 2020 Поделиться Опубликовано 22 Августа 2020 @Капрал Хикс, а на каком движке эти движенья делаются? Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/528/#findComment-1345993
Капрал Хикс 561 Опубликовано 22 Августа 2020 Поделиться Опубликовано 22 Августа 2020 @Zander_driver, ТЧ с X-ray extentions portable 232. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/528/#findComment-1345994
Zander_driver 10 348 Опубликовано 22 Августа 2020 Поделиться Опубликовано 22 Августа 2020 Только что, Капрал Хикс сказал: X-ray extentions На нем, если надобно отловить заклинивание ствола, делается это примерно так: -- вешать на апдейт local act_item = db.actor:active_item() if act_item then local wpn_state = act_item:get_wpn_int(nil, 652) if wpn_state == 7 then -- тут воспроизводить звуки. Состояние 7 - это заклинившее оружие. end end 1 3 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/528/#findComment-1345997
Капрал Хикс 561 Опубликовано 22 Августа 2020 Поделиться Опубликовано 22 Августа 2020 @Zander_driver, отлично всё работает, благодарствую, сейчас буду модифицировать под звуки в костюме с противогазом. А вот вопрос посложнее - как сию фишку с руганью реализовать для ЧН? OGSM CE 1.8, если что. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/528/#findComment-1345999
aromatizer 4 572 Опубликовано 22 Августа 2020 Поделиться Опубликовано 22 Августа 2020 (изменено) 19 минут назад, Капрал Хикс сказал: буду модифицировать под звуки в костюме с противогазом Как сделаешь, выложи пожалуйста: давненько сам подумывал о такой полезной фиче. Кстати, что думаешь на счет озвучки необходимости перезарядки оружия, когда закончились патроны в магазине? Изменено 22 Августа 2020 пользователем aromatizer 1 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/528/#findComment-1346001
Lieutenant Novikov 16 Опубликовано 22 Августа 2020 Поделиться Опубликовано 22 Августа 2020 Здравствуйте. Столкнулся с такой проблемой: в COC (мод на ЗП) решил отредактировать рупоры, чтобы было как в ТЧ (выключались на ночь, а при нападении противника на базу играли сигналы тревоги), и вообщем-то прописал логику и т.д. Но натолкнулся на такую проблему: необходимо в логике прописать info_portion, ну чтобы менялись звуковые дорожки, но для этого его нужно выдать, насколько я понял через функцию. И вот какую функцию необходимо использовать, чтобы при нападении на отряд/базу выдавался info_portion? Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/528/#findComment-1346051
Norman Eisenherz 354 Опубликовано 24 Августа 2020 Поделиться Опубликовано 24 Августа 2020 Здрасьте. Можно ли прочитать параметры из секции конфига в том порядке, в котором они указаны, или результат перебора for i = 0, ini:line_count(section) -1 всегда выдается в случайном порядке? Задача в том, чтобы вывести полную специализацию механика в заданном порядке (оружие общее, оружие частное, броня): https://drive.google.com/file/d/15OmIOK-H2J2ryp60PAOSUT77FR9fxBmd/view?usp=sharing Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/528/#findComment-1346263
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти