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/
*Shoker* 322 Опубликовано 25 Ноября 2011 Поделиться Опубликовано 25 Ноября 2011 Если я правильно помню, в ТЧ follower не работает нормально, при добегании до ГГ, игра вылетает. Лучше самому проверить. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/165/#findComment-647219
Лёха_тц 3 Опубликовано 25 Ноября 2011 Поделиться Опубликовано 25 Ноября 2011 Ребята выручайте нужна помощь возможно ли заспавнить модель к примеру укреплений из песка переведенную в огф формат ну и соответственно с текстурами если да то как ? Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/165/#findComment-647226
abramcumner 1 229 Опубликовано 25 Ноября 2011 Поделиться Опубликовано 25 Ноября 2011 Лёха_тц, тебе же 5 страниц назад отвечали: спавнишь как physic_object, в custom_data надо прописать fixed_bones, чтобы модель не двигали. Ну и в огф должна быть сделана кость. У тебя огф то есть? Ну и после спавна надо еще рестриктором будет накрыть, чтобы нпц сквозь твое укрепление не ходили. Ну и если что, прятаться за ним они тоже не будут. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/165/#findComment-647234
Полтергейст 38 Опубликовано 25 Ноября 2011 Поделиться Опубликовано 25 Ноября 2011 но проблема в том что когда костюм достигает нулевой кондиции эти сообщения появлются одно за другим эквивалент появления примерно доля сотой секунды Так это нужно прописывать не в update, а в функцию, вызываемую при попадании (hit_callback). Тогда никаих лишних переменных вводить не придётся. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/165/#findComment-647237
abramcumner 1 229 Опубликовано 25 Ноября 2011 Поделиться Опубликовано 25 Ноября 2011 Так это нужно прописывать не в update, а в функцию, вызываемую при попадании (hit_callback). Тогда никаих лишних переменных вводить не придётся. Для ГГ в оригиналах hit_callback не вызывается Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/165/#findComment-647238
Nazgool 250 Опубликовано 25 Ноября 2011 Поделиться Опубликовано 25 Ноября 2011 (изменено) serega-gamer Moжет что-то типа такого подойдёт? : Я тут добавил и сообщение при восстановления костюма(если нужно конечно) local hev_crash = "%c[255,160,160,160]Автоматическая система ввода медицинских препаратов\\n".."%c[default] %c[255,230,0,0]Общий сбой системы. Система отключается!" local hev_restore = "%c[255,160,160,160]Автоматическая система ввода медицинских препаратов\\n".."%c[default] %c[255,230,0,0]Работа системы восстановлена. Система включается!" local hev_min_cond_active = 0.01 local flag local function GetHevParam(hev) return hev:condition() < hev_min_cond_active and hev:section() == "nano_kostum" end local function ShowHevGameNews(msg, path) local snd_obj = xr_sound.get_safe_sound_object(path) snd_obj:play_no_feedback(db.actor, sound_object.s2d, 0, vector(), 1.0) db.actor:give_game_news(msg, "ui\\ui_iconsTotal", Frect():set(0,188,83,47), 0, 3000) end function CheckHevCond() local act_suit = db.actor:item_in_slot(6) if not flag then if act_suit and GetHevParam(act_suit) then ShowHevGameNews(hev_crash, 'HEV\\hev_crash') flag = true end elseif act_suit and not GetHevParam(act_suit) then ShowHevGameNews(hev_restore, 'HEV\\hev_restore') flag = nil end end CheckHevCond() на апдейт. Ну и задержку, если нужно Изменено 25 Ноября 2011 пользователем Gun12 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/165/#findComment-647250
strelok200 0 Опубликовано 26 Ноября 2011 Поделиться Опубликовано 26 Ноября 2011 А вообще схема follower в тч нормально работает? Не обязательно чтобы НПС шёл за ГГ, просто за лидером Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/165/#findComment-647386
serega-gamer 0 Опубликовано 26 Ноября 2011 Поделиться Опубликовано 26 Ноября 2011 (изменено) Gun12 Спасибо большое! Я как раз так и хотел что бы сообщение о ре-активации системы тоже приходило :ny_z_2: Теперь такая проблема скажите пожалуйста кто в курсе можно ли через db.actor кровотечение отследить?? А то я что то только пси здоровье, радиацию, мораль и выносливость нашёл! Изменено 26 Ноября 2011 пользователем serega-gamer Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/165/#findComment-647401
AndreySol 215 Опубликовано 26 Ноября 2011 Поделиться Опубликовано 26 Ноября 2011 В окне инвентаря, по нажатии добавленной мною кнопки, создается окно наследованное от CUIScriptWnd. На нем размещаю список (использую CUIListWnd), который заполняю (CUIListItemEx). Реализацию в общем содрал из скриптов главного меню. Все вроде работает. ----------------- class "CAddItemEx" (CUIListItemEx) function CAddItemEx:__init() super() self:SetWndRect(0,0,330,30) self.item_icon = CUIStatic() self:AttachChild(self.item_icon) self.item_icon:SetAutoDelete(true) self.item_icon:SetWndRect(0,0,30,30) self.item_icon:SetStretchTexture(true) self.item_icon:InitTexture("ля-ля-ля") self.item_name = CUIStatic() self:AttachChild(self.item_name) self.item_name:SetAutoDelete(true) self.item_name:SetWndRect(32,0,300,30) self.item_name:SetFont(GetFontLetterica16Russian()) self.item_name:SetTextColor(255,216,186,140) self.item_name:SetText("item_name") end function CAddItemEx:__finalize() end ---------------- class "CUIMyScriptWnd" (CUIScriptWnd) st_items_list = nil function CUIMyScriptWnd:__init(owner) super() -- self.owner = owner self:InitControls() self:InitCallBacks() self:FillItemsList() end function CUIMyScriptWnd:__finalize() end function CUIMyScriptWnd:InitControls() -- Положение и размеры окна self:Init(345,20,335,520)--345,2,335,520 -- файл-описатель элементов local xml = CScriptXmlInit() xml:ParseFile("ля-ля-ля.xml") xml:InitStatic("main_background", self) self:Register(xml:Init3tButton("btn_close", self),"btn_close") -- список предметов st_items_list = CUIListWnd() st_items_list:Init(11, 370, 305, 140) self:AttachChild(st_items_list) st_items_list:SetAutoDelete(true) st_items_list:EnableScrollBar(true) st_items_list:Show(true) self:Register(st_items_list, "items_list") end function CUIMyScriptWnd:FillItemsList() local add_item = nil local num_add = 7 for i = 1, num_add do add_item = CAddItemEx() add_item.item_icon:SetStretchTexture(true) add_item.item_icon:InitTexture("ля-ля-ля") -- иконка эл-та в списке local item_text = "" item_text = string.format("Item %d", i) add_item.item_name:SetText(item_text) -- надпись эл-та в списке if add_item and st_items_list then st_items_list:AddItem(add_item) end end end Но обнаружил проблему - после того, как хотя-бы раз было вызвано это мое окно со списком, при выходе в главное меню (там где загрузить\сохранить\выйти) на нем просматривается прозрачное окно списка со всеми добавленными строками. Т.е. похоже я чет напортачил с зачисткой при закрытии окна инвентаря. В скриптах главного меню, которые брал за образец, нигде нет даже упоминания DetachChild для строк списка и для самого окна списка. Подскажите, как побороть ? Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/165/#findComment-647514
_Призрак_ 11 Опубликовано 26 Ноября 2011 Поделиться Опубликовано 26 Ноября 2011 А как ты скрываешь свое меню после того как оно отработало свое? У тебя тут только инициализация Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/165/#findComment-647516
AndreySol 215 Опубликовано 26 Ноября 2011 Поделиться Опубликовано 26 Ноября 2011 стандартно скрываю ------------------ обработка нажатий клавы --------------------------------- function CUIMyScriptWnd:OnKeyboard(dik, keyboard_action) CUIScriptWnd.OnKeyboard(self,dik,keyboard_action) if keyboard_action == ui_events.WINDOW_KEY_PRESSED then -- на выход повесим Esc if dik == DIK_keys.DIK_ESCAPE then self:on_Close() end end return true end ----------------- function CUIMyScriptWnd:on_Close() self:GetHolder():start_stop_menu(self, true) end Добавлено через 66 мин.: В моем сообщении #3313 есть ф-ция заполнения списка элементами, состоящими из иконки и текста. Если к примеру элемент списка должен описывать патрон "ammo_9x18_fmj", как скриптово получить соответствующую ему иконку\текстуру (похоже из файла ui_icon_equipment.dds) и строку названия ? Если хочу вывести список всех имеющихся боеприпасов, понятно, что нужно перебрать все объекты в инвентаре актера (подходящие ф-ции видел в описании класса game_object) и проверить принадлежность к искомому типу. В описаниях боеприпасов в файле weapons.ltx есть вроде подходящий параметр - "class = AMMO", но как к нему добраться скриптово ? Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/165/#findComment-647521
RvP 1 Опубликовано 26 Ноября 2011 Поделиться Опубликовано 26 Ноября 2011 (изменено) AndreySol, Если к примеру элемент списка должен описывать патрон "ammo_9x18_fmj", как скриптово получить соответствующую ему иконку\текстуру (похоже из файла ui_icon_equipment.dds) и строку названия ? парсим из секции координаты иконки и ставим их(x, y, w, h) Название аналогично, получаем строку и далее game.translate_string или SetTextST Изменено 26 Ноября 2011 пользователем RvP Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/165/#findComment-647534
Zander_driver 10 348 Опубликовано 26 Ноября 2011 Поделиться Опубликовано 26 Ноября 2011 (изменено) serega-gamer Теперь такая проблема скажите пожалуйста кто в курсе можно ли через db.actor кровотечение отследить?? А то я что то только пси здоровье, радиацию, мораль и выносливость нашёл! db.actor:get_bleeding() возвращает float. причем не 0..1, у меня бывало и 2.4 Изменено 26 Ноября 2011 пользователем Zander_driver Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/165/#findComment-647543
Лёха_тц 3 Опубликовано 27 Ноября 2011 Поделиться Опубликовано 27 Ноября 2011 Вот кто подскажет из за чего вот этот вылет [591]=[sim_test_108] [592]=[sim_test_109] [593]=[sim_test_110] [594]=[sim_test_111] [595]=[sim_test_112] [596]=[sim_test_113] [597]=[sim_test_114] FATAL ERROR [error]Expression : no_assert [error]Function : CXML_IdToIndex<class CCharacterInfo>::GetById [error]File : e:\stalker\sources\trunk\xr_3da\xrgame\xml_str_id_loader.h [error]Line : 112 [error]Description : item not found, id [error]Arguments : bar_stalker_1 stack trace: а вот то что я ему прописывал <specific_character id="bar_stalker_1" team_default = "1"> <name>bar_stalker_1</name> <icon>ui_npc_u_stalker_neytral_hood_8</icon> <bio>bar_stalker1r_bio</bio> <class>bar_stalker_1</class> <community>dolg</community> <terrain_sect>stalker_terrain</terrain_sect> <rank>350</rank> <reputation>15</reputation> <money min="5000" max="5025" infinitive="0"/> <panic_treshold>0</panic_treshold> <snd_config>characters_voice\human_01\stalker\</snd_config> <crouch_type>-1</crouch_type> <visual>actors\neytral\stalker_neytral_hood_8</visual> <supplies> [spawn] \n wpn_pkm \n ammo_9x18_fmj = 5 \n vodkanew = 6 \n af_mincer_meat \n </supplies> #include "gameplay\character_criticals_3.xml" <start_dialog>hello_dialog</start_dialog> #include "gameplay\character_dialogs.xml" </specific_character> <character id="bar_Stalker_2"> <class>bar_Stalker_2</class> </character> [bar_stalker_1]:stalker $spawn = "respawn\agr2_respawn_factory" character_profile = bar_stalker_1 spec_rank = regular community = stalker custom_data = scripts\logic_stalker_1.ltx [99999999999999999999999999999999999999999999999] ; cse_abstract properties section_name = stalker name = bar_stalker_1 position = 227.99346923828,1.4395974874496,-36.13639831543 direction = 0,0,0 ; cse_alife_trader_abstract properties money = 5000 character_profile = bar_stalker_1 ; cse_alife_object properties game_vertex_id = 1174 distance = 14 level_vertex_id = 57986 object_flags = 0xffffffff custom_data = <<END [smart_terrains] none = true END ; cse_visual properties visual_name = actors\novice\green_stalker_5 ; cse_alife_creature_abstract properties g_team = 0 g_squad = 0 g_group = 0 health = 1 dynamic_out_restrictions = dynamic_in_restrictions = upd:health = 1 upd:timestamp = 0 upd:creature_flags = 0 upd:position = 227.99346923828,1.4395974874496,-36.13639831543 upd:o_model = 0 upd:o_torso = -0.000151783766341396,-0.0297925509512424,0 upd:g_team = 0 upd:g_squad = 0 upd:g_group = 0 ; cse_alife_monster_abstract properties upd:next_game_vertex_id = 65535 upd:prev_game_vertex_id = 65535 upd:distance_from_point = 0 upd:distance_to_point = 0 ; cse_alife_human_abstract properties predicate5 = 1,0,1,0,0 predicate4 = 2,0,2,1 ; cse_ph_skeleton properties upd:start_dialog = ; se_stalker properties чего уже тока не пробовал но не могу понять из за чего вылет. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/165/#findComment-647550
Капрал Хикс 561 Опубликовано 27 Ноября 2011 Поделиться Опубликовано 27 Ноября 2011 Лёха_тц, ну ты выдал (С) <character id="bar_Stalker_2"> <class>bar_Stalker_2</class> </character> Когда должно быть bar_Stalker_1 и желательно везде регистр не менять. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/165/#findComment-647638
AndreySol 215 Опубликовано 27 Ноября 2011 Поделиться Опубликовано 27 Ноября 2011 парсим из секции координаты иконки и ставим их(x, y, w, h) Название аналогично, получаем строку и далее game.translate_string или SetTextST где-ж эту секцию искать, в которой координаты иконки ? В каком файле ? Парсинг ltx и xml файлов - есть что-то встроенное в ЛУА\движок или надо самому ? Если самому - может есть готовые вещи, чтоб велосипед не изобретать ? Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/165/#findComment-647655
Artos 99 Опубликовано 27 Ноября 2011 Поделиться Опубликовано 27 Ноября 2011 (изменено) Лёха_тц, понимаю, что все можно свести к определению "скриптование", но(!) давайте не заваливать топик всякой всячиной ... Имеются топики серии "Ковыряемся в файлах", в которых (ИМХО) самое место уточнять и разбирать ошибки по правке конфигов и пр. AndreySol, имеется топик "Справочник по функциям и классам", который и предназначен для тех, кто не хочет тратить время на изобретение велосипедов. Да и в кодах самой игры немало примеров как читаются параметры из секций объектов ... Приглянись, например, к system_ini() иль ini_file(string). Ну а параметр "class" прочитать можно как: system_ini():r_string(section,"class") => строка или system_ini():r_clsid(section,"class") => число. Изменено 27 Ноября 2011 пользователем Artos Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/165/#findComment-647671
Amicron 0 Опубликовано 27 Ноября 2011 Поделиться Опубликовано 27 Ноября 2011 Здравствуйте, скажите пожалуйста, как можно написать на LUA интерфейс для плеера? Плеер должен вызываться по использованию предмета в инвентаре ГГ. Если есть какие-либо статьи как это сделать в ЗП 1.6.02 дайте пожалуйста ссылку. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/165/#findComment-647701
_Призрак_ 11 Опубликовано 27 Ноября 2011 Поделиться Опубликовано 27 Ноября 2011 Конечно можно. На вскидку могу посоветовать посмотреть как сделан ПДА в Sigerious'e и на его основе сделай плеер Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/165/#findComment-647707
Artos 99 Опубликовано 27 Ноября 2011 Поделиться Опубликовано 27 Ноября 2011 (изменено) Amicron, не стОит задавать "пустых" общих вопросов. "Как на Lua написать интерфейс?" - имеет великое множество вариантов и зависит только от фантазии "писателя". Чем тебе не "руководство" - то как написан интерфейс того же спальника из мода АМК? Ведь подмени "спальник" на "плеер" и получаешь ответ на свой вопрос. Ссылки на "где искать статьи" указаны в шапке топика. Так же в топике "Уроки по модостроению" совсем недавно выложен "Как самому создать спальный мешок". Прежде чем задавать вопросы - читаем форум и используем простейший поиск. При желании можно найти и готовый мод именно по плееру (чтобы не изобретать велосипеда). Изменено 27 Ноября 2011 пользователем Artos Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/165/#findComment-647711
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти