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 358 Опубликовано 6 Февраля 2021 Поделиться Опубликовано 6 Февраля 2021 (изменено) Только что, Stalkersof сказал(а): Скрипт просто текстовый файл "Просто текстовых файлов" не бывает. У любого текстового файла, есть кодировка. Это следует уже из самого определения, что такое "текстовый файл" с точки зрения Windows. Только что, Stalkersof сказал(а): А какая нужна? ANSI по идее. Изменено 6 Февраля 2021 пользователем Zander_driver 1 4 Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine / Мимокрокодил. Я понял что моя старая подпись что-то нарушает. Удалил все ссылки. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/545/#findComment-1368628
Stalkersof 232 Опубликовано 6 Февраля 2021 Поделиться Опубликовано 6 Февраля 2021 4 минуты назад, Zander_driver сказал(а): "Просто текстовых файлов" не бывает. У любого текстового файла, есть кодировка. Это следует уже из самого определения, что такое "текстовый файл" с точки зрения Windows. Понятно. Посмотрел скрипт в Кодировка UTF-8. А какая нужна? Freeplay Graphic Mod(FGM) Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/545/#findComment-1368630
Colder 12 Опубликовано 6 Февраля 2021 Поделиться Опубликовано 6 Февраля 2021 Скрытый текст local spawns_devices = { "part_lighter", "part_banka", "part_nitki", "part_kley", "part_cutler", "part_core", "part_ver", "part_grease", "part_fankt", "part_gunoil", "part_ramrod", "part_kitss", "part_kitrr", "part_jar", "part_weapons_light", "part_weapons_heavy", "part_outfit_heavy", "part_outfit_light", "part_electro" } function actor_on_random_devices_new() local text_new = "" for i = 2, 4 do--// ОТ 2 DO 4 local item = spawns_devices[math.random(table.getn(spawns_devices))] alife():create(item, db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id()) local a_name = game.translate_string(system_ini():r_string(item,"inv_name_short")) text_new = text_new.."\\n"..a_name end send_tip_devices("\\n%c[d_cyan]"..game.translate_string("st_dis_text_9").."\\n".."%c[ui_white]"..text_new) end Может кто помочь получить количество получаемых деталей? Т.е если после разбора обьекта получаешь 2 ОДИНАКОВЫХ предмета, то в сообщении это не указываеться. ВОТ СКРИН https://yadi.sk/i/G3C88dOd1juczw Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/545/#findComment-1368645
Zander_driver 10 358 Опубликовано 6 Февраля 2021 Поделиться Опубликовано 6 Февраля 2021 (изменено) Только что, Colder сказал(а): Т.е если после разбора обьекта получаешь 2 ОДИНАКОВЫХ предмета, то в сообщении это не указываеться. В выше-приведенном коде. Если выпадут одинаковые предметы, то они и написаны будут два (три) раза в сообщении. Разве этого не достаточно?) Только что, Colder сказал(а): получить количество получаемых деталей? Можно просто в табличку по ключу - секции итема, заносить количество предметов. А после спавна всех, подсчитывать сколько всего набралось. local t = {} ... if t[item] ~= nil then t[item] = t[item] + 1 else t[item] = 1 end ... for sec, count in pairs(t) do text_new = text_new .. "\\n" .. game.translate_string(ltx:r_string(sec, "inv_name")) if count > 1 then text_new = text_new .. string.format(" x %i", count) end end Как-то так. Какой фрагмент куда вставить, я думаю и так понятно. Изменено 6 Февраля 2021 пользователем Zander_driver 1 Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine / Мимокрокодил. Я понял что моя старая подпись что-то нарушает. Удалил все ссылки. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/545/#findComment-1368646
Colder 12 Опубликовано 6 Февраля 2021 Поделиться Опубликовано 6 Февраля 2021 Не работает! Может как то чере actor:iterate_inventory попробывать получить. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/545/#findComment-1368651
Zander_driver 10 358 Опубликовано 6 Февраля 2021 Поделиться Опубликовано 6 Февраля 2021 24 минуты назад, Colder сказал(а): Не работает! Ложь 25 минут назад, Colder сказал(а): actor:iterate_inventory Тогда придется сначала спавнить, потом ждать, когда все заспавненное выйдет в онлайн, потом пересчитывать, и заодно не-перепутать с теми итемами, которые уже были в наличии у актора до спавна. Зачем эти сложности, если можно просто пересчитать, сколько чего заспавнили, при самом спавне? Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine / Мимокрокодил. Я понял что моя старая подпись что-то нарушает. Удалил все ссылки. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/545/#findComment-1368661
Colder 12 Опубликовано 6 Февраля 2021 Поделиться Опубликовано 6 Февраля 2021 Через него мне кажется проще. А через то что выше бред получаеться! https://yadi.sk/i/6dD8gTNSDlMpSg Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/545/#findComment-1368662
Zander_driver 10 358 Опубликовано 6 Февраля 2021 Поделиться Опубликовано 6 Февраля 2021 Только что, Colder сказал(а): бред получаеться! Ну как скомпоновал сообщение, то и получил. Ты это написал, не я. Подумай, как надо сделать. Только что, Colder сказал(а): Через него мне кажется проще. Проще? Ок, приведи свою реализацию, как вызвать свою функцию через несколько апдейтов. И, как отличить те предметы которые недавно заспавнены, от тех что в рюкзаке уже были. И, точно ли для этого надо iterate_inventory дергать?) А затем и посмотрим, что проще. 1 1 Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine / Мимокрокодил. Я понял что моя старая подпись что-то нарушает. Удалил все ссылки. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/545/#findComment-1368663
Colder 12 Опубликовано 7 Февраля 2021 Поделиться Опубликовано 7 Февраля 2021 Скрытый текст local part = { ["part_lighter"] = 2, ["part_banka"] = 2, ["part_nitki"] = 2, ["part_kley"] = 2, ["part_cutler"] = 2, ["part_core"] = 2, ["part_ver"] = 2, ["part_grease"] = 2, ["part_fankt"] = 2, ["part_gunoil"] = 2, ["part_ramrod"] = 2, ["part_kitss"] = 2, ["part_kitrr"] = 2, ["part_jar"] = 2, ["part_weapons_light"] = 2, ["part_weapons_heavy"] = 2, ["part_outfit_heavy"] = 2, ["part_outfit_light"] = 2, ["part_electro"] = 2 } function actor_on_random_devices_new() local t = {} local text_new = "" for item, count in pairs(part) do alife():create(db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id()) if t[item] ~= nil then t[item] = t[item] + 1 else t[item] = 1 end text_new = text_new.."\\n"..game.translate_string(system_ini():r_string(item, "inv_name")) if count > 1 then text_new = text_new..string.format(" x %i", count) end end send_tip_devices("\\n%c[d_cyan]"..game.translate_string("st_dis_text_9").."\\n".."%c[ui_white]"..text_new) end Сделал по твойму но они спавняться все по 2шт. А мне нужно рандомное количество общих деталей например: что бы гг получил 2 или 4 детали. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/545/#findComment-1368853
Zander_driver 10 358 Опубликовано 7 Февраля 2021 Поделиться Опубликовано 7 Февраля 2021 14 минут назад, Colder сказал(а): ["part_lighter"] = 2, 14 минут назад, Colder сказал(а): но они спавняться все по 2шт. Ну и кто же это написал? Не я точно. У тебя вообще в коде какая-то каша, все перемешано без смысла. И крайний раз запускал ты его не в таком 17 минут назад, Colder сказал(а): alife():create(db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id()) виде. Потому что тут даже секции итема нет, чего спавнить. Такой вызов, приведет к движковому вылету с руганью на недостаток аргументов и/или не соответствующие типы аргументов. 18 минут назад, Colder сказал(а): мне нужно рандомное количество Используй math.random Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine / Мимокрокодил. Я понял что моя старая подпись что-то нарушает. Удалил все ссылки. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/545/#findComment-1368884
Colder 12 Опубликовано 7 Февраля 2021 Поделиться Опубликовано 7 Февраля 2021 С тел написал для примера. Но они спавняться в определённом количестве а мне нужно рандомно. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/545/#findComment-1368887
Это популярное сообщение. Zander_driver 10 358 Опубликовано 7 Февраля 2021 Это популярное сообщение. Поделиться Опубликовано 7 Февраля 2021 (изменено) local parts = { 'секция_деталей', 'еще_секция_деталей', ... } function spawn_parts(nums) -- nums - сколько всего запчастей спавнить. local t = {} local i = 0 while i < nums do local item = parts[math.random(#parts)] if t[item] then t[item] = t[item] + 1 else t[item] = 1 end alife():create(item, db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id()) i = i + 1 end local text = 'Получено предметов:' for sec, count in pairs(t) do text = text .. "\\n" .. game.translate_string(system_ini():r_string(sec, "inv_name")) if count > 1 then text = text .. string.format(" x %i", count) end end send_tip_devices(text) end @Colder держи. готовый, рабочий вариант. А вообще, грустно. Что хорошая тема в стол заказов превратилась. Тебе подсказок ранее выданных, почему не хватило? Может я что не так говорю... Изменено 7 Февраля 2021 пользователем Zander_driver 1 5 2 Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine / Мимокрокодил. Я понял что моя старая подпись что-то нарушает. Удалил все ссылки. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/545/#findComment-1368894
Colder 12 Опубликовано 7 Февраля 2021 Поделиться Опубликовано 7 Февраля 2021 Нет ты профи! Это просто я велосипед! Все работает норм! Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/545/#findComment-1368931
ARTLantist 16 Опубликовано 8 Февраля 2021 Поделиться Опубликовано 8 Февраля 2021 Можно ли как-то изменить параметры параметры артефакта через скрипт? Если да, то как? И как отследить, что артефакт надет на пояс? Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/545/#findComment-1369069
Zander_driver 10 358 Опубликовано 8 Февраля 2021 Поделиться Опубликовано 8 Февраля 2021 Только что, ARTLantist сказал(а): изменить параметры параметры артефакта через скрипт? На оригинальном движке - никак. Там параметры артефакта читаются из конфига. Можно конечно наплодить кучу секций с разными свойствами, и скриптом менять одни на другие, но, это такое себе костыльное рукоблудие) На том, что в подписи моей, в принципе можно. Движок модифицирован, и такое позволяет. На некоторых других модифицированных движках наверное тоже можно такие возможности найти. Только что, ARTLantist сказал(а): отследить, что артефакт надет на пояс В оригинале был некий замудреный костыльно-скриптовый алгоритм для этого, и сейчас его не вспомню уже. В модифицированных, опять же, движках, такая возможность есть наверное практически везде. Но, как ей пользоваться, зависит от конкретного движка. В OGSR к примеру, есть метод db.actor:iterate_belt Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine / Мимокрокодил. Я понял что моя старая подпись что-то нарушает. Удалил все ссылки. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/545/#findComment-1369072
Colder 12 Опубликовано 9 Февраля 2021 Поделиться Опубликовано 9 Февраля 2021 Подскажите функцию на проверку итемов у актора типо: local бла = { ”бла” = true, ”бла” = true, ”бла” = true } ... Нескольких Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/545/#findComment-1369096
Kirgudu 1 370 Опубликовано 9 Февраля 2021 Поделиться Опубликовано 9 Февраля 2021 45 минут назад, Colder сказал(а): Подскажите функцию for k,v in pairs(бла) do if v == true then db.actor:give_game_news('бла-бла', 'бла-бла-бла', "ui_iconsTotal_PDA", 0, 3000) end end P.S.: задавай свои вопросы в человекопонятной форме. 1 2 Свои работы и совместные проекты: Инструмент, OGSM CS, Final Stroke, HARDWARMOD Полезное: модули Артоса, XML парсер Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/545/#findComment-1369106
WinCap 324 Опубликовано 9 Февраля 2021 Поделиться Опубликовано 9 Февраля 2021 3 часа назад, Colder сказал(а): Подскажите функцию на проверку итемов у актора Как-то так: Скрытый текст local need_item = { 'medkit', 'medkit_army', 'medkit_scientic' } function actor_has_one_item() for k,v in pairs(need_item) do if db.actor:object(v) ~= nil then return true end end return false end function actor_has_all_item() for k,v in pairs(need_item) do if db.actor:object(v) == nil then return false end end return true end P.S. Стол заказов это конечно очень хорошо... Но хотя бы иногда, перед тем как задать вопрос, заглядывайте в "xr_conditions.script" и "xr_effects.script". 4 S.T.A.L.K.E.R. CoP Objects >200 шт (upd 21.05.26) - Скачать (Яндекс-диск) Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/545/#findComment-1369118
Colder 12 Опубликовано 9 Февраля 2021 Поделиться Опубликовано 9 Февраля 2021 Спасибо но уже сделал Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/545/#findComment-1369119
h0N0r 416 Опубликовано 9 Февраля 2021 Поделиться Опубликовано 9 Февраля 2021 Может и мне подскажете, вот есть рабочий способ на удаление объекта: local obj = alife():object("esc_af_medusa12345") -- после спавна, провалилась под террейн if obj ~= nil then alife():release(obj, true) end и как мне применить (любопытства ради) на этот объект нек.эффекты типа: local ph = obj:get_physics_shell() -- пробовал, вылет по nil (подозреваю, что пытаюсь применить методы клиент.объектов к серверным) if (ph) then ph:apply_force(0,10000,0) -- пнуть по у вверх end или уж совсем дикие методы: function drop_item_and_teleport(game_object*, vector); function transfer_item(game_object*, game_object*); В обоих случаях, методы вызываются от кого-то, как пример: актор, владеющий таким-то предметом, но когда итем бесхозный, то его парент 65535, т.е. владелец земля, и от неё как-то сделать вызовы. https://sites.google.com/view/xray-sdk-0-4-smg Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/545/#findComment-1369127
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти