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 Ссылка на комментарий
FonSwong 33 Опубликовано 21 Марта 2016 Поделиться Опубликовано 21 Марта 2016 (изменено) @dsh, ноу, вообще платформа ЗП, там изменённый двиг. в огсе вижу: actor_hit_callback(obj, amount, local_direction, who, bone_index) Что означает amount? Где можно, кроме СДК, увидеть какой индекс кости что именно обозначает?Как узнать мощность хита, который был сделан ГГ(чтобы не высчитывать все коэфициенты, а точнее общее кол-во отнимаемого ХП)? Изменено 21 Марта 2016 пользователем FonSwong Ссылка на комментарий
dsh 3 824 Опубликовано 21 Марта 2016 Поделиться Опубликовано 21 Марта 2016 вообще платформа ЗП Про ЗП ничего не могу сказать. Что означает amount? Величина полученного хита. dsh mod: https://github.com/dsh2dsh/op2ogse Ссылка на комментарий
losiara 13 Опубликовано 21 Марта 2016 Поделиться Опубликовано 21 Марта 2016 Добрый день! Кто нибудь знает как реализована возможность может поршнями или скриптом на заставе долга на свалке, когда просят помочь отстрелять мутантов идущих со стороны темной долины, а потом говорят 1 из 3-х фраз или "отлично...", либо "молодец, но особой прытью не отличился...", либо совсем "плохо поэтому нужно платить за проход...". В каких файлах сие глянуть можно? Вопрос не в том как ветки диалогов построить это трудностей не представляет, а в том, как реализована сама возможность? Жизнь следует измерять поступками, а не временем... Ссылка на комментарий
naxac 2 447 Опубликовано 21 Марта 2016 Поделиться Опубликовано 21 Марта 2016 @losiara, из логики при смерти мутанта вызывается функция в xr_effects, которая считает убитых кабанов, записывая количество в пстор. А в диалоге в прекондишенах проверяется это количество. 1 Аддон для ОП-2.09.2: Яндекс/Google/GitHub Ссылка на комментарий
FonSwong 33 Опубликовано 24 Марта 2016 Поделиться Опубликовано 24 Марта 2016 Повесил на худ своё окно, оно скрывается через неск. секунд Если, пока окно не скрылось, загрузить сохранение- то происходит вылет stack trace: [error][ 87] : Параметр задан неверно. Платформа ЗП Ссылка на комментарий
Anonim 680 Опубликовано 24 Марта 2016 Поделиться Опубликовано 24 Марта 2016 Где-то видел урок по созданию переписки между сталкерами через интервалы времени, короче, помогите Ссылка на комментарий
Zander_driver 10 342 Опубликовано 25 Марта 2016 Поделиться Опубликовано 25 Марта 2016 Про ЗП ничего не могу сказать. Если мне память не изменяет, в ЗП хит-колбек актора и так есть. Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine. Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист. AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD. Ссылка на комментарий
dsh 3 824 Опубликовано 25 Марта 2016 Поделиться Опубликовано 25 Марта 2016 @Zander_driver, речь шла не про хит колбек, а про колбек, который вызывается перед ним и из которого можно поменять свойства хита. dsh mod: https://github.com/dsh2dsh/op2ogse Ссылка на комментарий
HellRatz 2 895 Опубликовано 25 Марта 2016 Поделиться Опубликовано 25 Марта 2016 А есть вариант заспавнить предмет учитывая его направление (dir)? То есть с определенным наклоном, поворотом.. Не нашел ничего такого, только для НПС. А в стандартных функциях спавна предмета только XYZ, lv, gv. ЗЫ: как узнать максимальные значения LV и GV на локации? Не нашел информации. Раньше вроде скриптовая функция попадалась на глаза, а сейчас не найду. 1 GTA 3 MAP X-Ray | NFS U:2 MAP X-Ray | RTCW MAP X-Ray | L2D | Раритетные моды на моем облаке — на память о былом. Ссылка на комментарий
naxac 2 447 Опубликовано 25 Марта 2016 Поделиться Опубликовано 25 Марта 2016 А есть вариант заспавнить предмет учитывая его направление (dir)? То есть с определенным наклоном, поворотом.. В m_netpk есть такая возможность - почитай про работу с абстрактной частью нет-пакета. 1 1 Аддон для ОП-2.09.2: Яндекс/Google/GitHub Ссылка на комментарий
hi_flyer 75 Опубликовано 25 Марта 2016 Поделиться Опубликовано 25 Марта 2016 ЗЫ: как узнать максимальные значения LV и GV на локации? Не нашел информации. Тоже интересует данный вопрос. Ссылка на комментарий
dsh 3 824 Опубликовано 25 Марта 2016 Поделиться Опубликовано 25 Марта 2016 @HellRatz, @hi_flyer, вот, взято откуда-то отсюда: -- http://www.amk-team.ru/forum/index.php?showtopic=6458&p=937442 --[=[ local lname = level.name() local lvtab = GetLevelVertexes( lname ) local lvx = math.max( unpack( lvtab ) ) local lv = math_random( 1, lvx ) local gvtab = GetGameVertexes( lname ) local gv_min = math.min( unpack( gvtab ) ) local gv_max = math.max( unpack( gvtab ) ) --]=] function GetLevelVertexes( level ) local lvtab ={} local i = 0 while game_graph():valid_vertex_id( i ) do local lv = game_graph():vertex( i ):level_vertex_id() local ln = alife():level_name( game_graph():vertex( i ):level_id() ) if not lvtab[ ln ] then lvtab[ ln ] = {} end table.insert( lvtab[ ln ], lv ) i = i + 1 end return lvtab[ level ] end function GetGameVertexes( level ) local gvtab ={} local i = 0 while game_graph():valid_vertex_id( i ) do local ln = alife():level_name( game_graph():vertex( i ):level_id() ) if not gvtab[ ln ] then gvtab[ ln ] = {} end table.insert( gvtab[ ln ], i ) i = i + 1 end return gvtab[ level ] end 2 1 dsh mod: https://github.com/dsh2dsh/op2ogse Ссылка на комментарий
нерон 0 Опубликовано 30 Марта 2016 Поделиться Опубликовано 30 Марта 2016 Всем привет. Возникла задача прописать скрипт в котором после получения инфопоршня или после того как гг подобрал определенный предмет выполняется другой скрипт. Но как это прописать я не знаю. вот нашел функцию function actor_binder:on_item_take (obj) (что гг взял) и function actor_binder:on_item_drop (obj) (что гг выкинул) - и пропишы после этих строк функцию или ссылку на функцию. но реализовать ее не получается. Может кто поможет? Заранее спасибо. Ссылка на комментарий
=VENOM= 50 Опубликовано 30 Марта 2016 Поделиться Опубликовано 30 Марта 2016 Проверка инфопоршна в простейшем случае, ("infoportion" - это имя инфопоршна): if has_alife_info("infoportion") then --твой скрипт end Что касается подобранного ГГ предмета. Если идти тем путём, как написано у тебя, то в файле bind_stalker.script найди функцию: function actor_binder:on_item_take (obj) level_tasks.proceed(self.object) --game_stats.update_take_item (obj, self.object) end Так она выглядит в оригинальной ТЧ, у меня, по крайней мере. И замени её на что-то вроде: function actor_binder:on_item_take (obj) level_tasks.proceed(self.object) --game_stats.update_take_item (obj, self.object) if myscripts then myscripts.take_item(obj) end end Этим ты добавишь ссылку на свою функцию-обработчик взятия предмета. Можно, конечно, и прямо здесь вписать обработчик, но лучше хранить свои скрипты отдельно - потом проще будет найти, где чьи лапы и хвосты. Для этого нужно будет создать файл myscripts.script в папке с остальными скриптами, а уже в этом файле написать обработчик, примерно так: function take_item(item) if item:section() == "section_name" then --твой скрипт end end Здесь функция будет срабатывать на взятие ГГ предмета с определённым названием (section_name). 1 1 Ссылка на комментарий
нерон 0 Опубликовано 31 Марта 2016 Поделиться Опубликовано 31 Марта 2016 Если я правильно понял, то мне необходимо создать новый сккриптовый файл и вписать туда function имя функции () if has_alife_info("vzial") then имя скрипта. имя функции end так? Ссылка на комментарий
FonSwong 33 Опубликовано 31 Марта 2016 Поделиться Опубликовано 31 Марта 2016 (изменено) ТЧ Не пойму в чём проблема, вешаю на худ статик, а оно виснет и затем вылетает: info = CUIStatic() info :InitTexture([[ui\medikal_statics\info]]) info : SetStretchTexture(true) info : SetWndPos(774, 50) info : SetWndSize(200, 300) get_hud() : AddDialogToRender(info) Если эти строчки: info : SetWndPos(774, 50) info : SetWndSize(200, 300) Заменить на эту строчку: info :Init(774,50,200,300) То всё нормально, но мне нужно именно тот вариант, который у меня вылетает, в чём проблема?В ЗП работает по 1 варианту спокойно. Изменено 31 Марта 2016 пользователем FonSwong Ссылка на комментарий
Zander_driver 10 342 Опубликовано 31 Марта 2016 Поделиться Опубликовано 31 Марта 2016 но мне нужно именно тот вариант, А чем они по смыслу отличаются? И эмм... возможно я ошибаюсь и плохо искал/не видел и т.д., но я в ТЧ не встречал примеров успешного использования статика без метода Init(x,y, w,h) где-то около его создания. И вообще-то думал что он обязателен. Еще может быть проблема в другом месте. ссылка на созданный статик сохраняется где-нибудь? Если этого не делать то не удивительно что вылетает. имя скрипта. имя функции Да, так, только чтоб эту функци вызвать, надо будет еще скобки добавить. () - вот такие. И может быть, что-то между них поместить, если хотите в свою функцию что-то передать. А может быть ничего не нужно передавать и тогда ничего не нужно между скобок оставлять. Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine. Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист. AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD. Ссылка на комментарий
=VENOM= 50 Опубликовано 31 Марта 2016 Поделиться Опубликовано 31 Марта 2016 так? Если проверку на взятие предмета в инвентарь ГГ тебе нужно проверять только после получения инфопоршна "vzial", так. Ссылка на комментарий
FonSwong 33 Опубликовано 31 Марта 2016 Поделиться Опубликовано 31 Марта 2016 (изменено) Zander_driver, ссылка сохраняется, думал в тч можно как и в зп без init задавать сразу отдельно координаты и отдельно ширину с высотой, видимо в этом трабла Хмм.. странно. Именно SetWndSize крашит игру или статик просто исчезает при попытке изменения размера, хоть даже Init(x,y, w,h) использовать. Почему? Непонятно Однако методами info : SetWidth(20) info : SetHeight(30) изменяет нормально Изменено 31 Марта 2016 пользователем FonSwong Ссылка на комментарий
dukekan 5 Опубликовано 31 Марта 2016 Поделиться Опубликовано 31 Марта 2016 (изменено) А если так: (Упс, не заметил, что ТЧ, да не вижу, как удалить) self.back = CUIStatic() self.back:SetWndRect(Frect():set(200,150,500,550)) self.back:InitTexture("ui\\computer\\text_window_note") self.back:SetWndPos(vector2():set(200,150)) self.back:SetWndSize(vector2():set(500,550)) self.back:SetStretchTexture(true) self:AttachChild(self.back) Изменено 31 Марта 2016 пользователем dukekan Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти