FonSwong 33 Опубликовано 2 Марта 2016 Поделиться Опубликовано 2 Марта 2016 (изменено) У меня есть вот такое диалоговое окно https://yadi.sk/d/y_NZn-eUpq7wr Основное окно у меня на классе CUIScriptWnd. В его инитконтроле цепляются ещё 4 окна на классе CUIWindow. В основном окне я успешно использую CUIScriptWnd.Update(self) для обновления часов. А в дочернем от основного окне(окно чата) пришлось повесить обновление этого чата на калбек апдейта игры. Вопрос вот в чём: Есть ли для CUIWindow похожий простой апдейт, как для CUIScriptWnd? Если нет, то как мне мои дочерние окна на CUIWindow переделать на класс CUIScriptWnd, чтобы не использовать каллбек на апдейт, а использовать CUIScriptWnd.Update(self)? Что-то не выходит. Запутался%( Изменено 2 Марта 2016 пользователем FonSwong Ссылка на комментарий
Charsi 440 Опубликовано 2 Марта 2016 Поделиться Опубликовано 2 Марта 2016 Обновление окна вызывается только когда оно открыто и поэтому для продолжения воспроизведения плееру нужен апдейт игры. 1 Lua и LuaJIT плагины для Notepad++ SciTE-RU 3.5.5 плагины для MilkShape3D Ссылка на комментарий
naxac 2 447 Опубликовано 2 Марта 2016 Поделиться Опубликовано 2 Марта 2016 как мне мои дочерние окна на CUIWindow переделать на класс CUIScriptWnd, чтобы не использовать каллбек на апдейт, а использовать CUIScriptWnd.Update(self)?Вызывай обновление в дочерних классах из апдейта базового.Например, делаешь в дочернем фунцию UpdateWnd, а потом из базового апдейта вызываешь: "self.переменная_дочернего_окна:UpdateWnd()" 1 Аддон для ОП-2.09.2: Яндекс/Google/GitHub Ссылка на комментарий
hi_flyer 75 Опубликовано 2 Марта 2016 Поделиться Опубликовано 2 Марта 2016 Подскажите, как можно убить монстра в оффлайне помимо метода kill_entity? Ссылка на комментарий
Logger 1 Опубликовано 3 Марта 2016 Поделиться Опубликовано 3 Марта 2016 (изменено) Подскажите, как можно убить монстра в оффлайне помимо метода kill_entity? gobj = level.object_by_id(id) if npc then gobj:kill(gobj) end Доброго времени суток , у кого можно проконсультироваться по поводу скриптовой составляющей LA 1.3003 : в частности [ где посмотреть функции получения текущего состояния жажды а так же функции управления жаждой ] 2 вопрос , где прописано значение восстановления жажды при использовании воды и т.п (порылся в конфиге и не нашел новых переменных (возможно плохо искал но всё же)) заранее спасибо Вопрос по поводу m_netpk пытаюсь изменить направление предмета при спавне function set_dir(sobj,dir) local pk = get_netpk(sobj,0) --/ m_netpk.net_cse_abstract(sobj) local data = pk:get() --/ читаем данные из нет-пакета data.direction = dir --/ изменение параметра в 'cse_abstract' pk:set(data) endвылета нет но и обьект не повернулся , подскажите если кто то имел опыт работы с m_netpkили если можно ссылку где можно посмотреть скрипты с примерами Изменено 3 Марта 2016 пользователем Logger Ссылка на комментарий
naxac 2 447 Опубликовано 3 Марта 2016 Поделиться Опубликовано 3 Марта 2016 (изменено) @Logger, параметры в конфигах в ЛА не влияют на изменение жажды/сытости. Всё сделано через одно место чисто на таймерах, и при съедании/выпивании чего-либо параметры восстанавливаются полностью. Здесь я это исправил: ссылка - сравни с оригиналом, разберешься. Про специальный нет-пакет 'abstract': Библиотека может работать с абстрактной частью пакета, которая доступна ТОЛЬКО в момент выхода объекта в онлайн или сохранении. Поэтому напрямую (методами set и get) прочитать и записать такие данные нельзя. Для чтения и/или изменения используется специальный пакет 'net_abstract'. Хотя принцип работы отличается от работы остальных классов, но все же очень похож. Исключение составляет то, как изменять данные в пакете. Рассмотрим сразу на примере: а) создаем объект в игре: local obj = alife():create("exo_outfit", pos, lv, gv) б) получаем служебный пакет, которым будем менять свойства: local pk = m_netpk.get(obj,0) -- или m_netpk.net_cse_abstract(obj) в) вариант-1: используем функцию: pk:setCallback( function(data) data.direction = vector():set(1,1,1) end ) вариант-2: задаем желаемые изменения таблицей: pk:setCallback( {direction = vector():set(1,1,1)} ) Здесь мы создали объект и захотели изменить его абстрактную часть. Мы указали пакету коллбек, который будет передан основному коллбэку, будучи вызванам как только станет доступна абстрактная часть объекта. В колбек передается таблица с параметрами пакета, мы можем смело их менять, в примере мы наклонили объект по всем осям на 1 радиану. При спавне нового игрового объекта: изменения вступят в силу, как только мы выйдем из текущей скриптовой работы и управление вернется движку - он создаст объект и начнет записывать в него параметры. Для уже существующих объектов в игре: требуется после задания изменений свойст объекта, перевести объект в оффлайн и обратно в онлайн, что модулем делается автоматически. Изменения вступят в силу в момент выхода объекта в онлайн. Как получить возможность менять абстрактную часть пакетов? 1) этот тип объектов должен иметь класс, который представляет такой тип объектов в игре (можно назвать биндером, а можно никак не называть) (то есть то, что будет вызвано, когда объект появится в игре) Завязка из class_registrator.script: cs_register (object_factory, "CStalkerOutfit", "se_item.se_outfit", "E_STLK", "equ_stalker_s") 2) обязательно добавить (если таковой отсутствует) метод биндера 'STATE_Write' (см. скрипты типа: 'se_XXX.script') Для примера с костюмом: function se_outfit:STATE_Write(packet) cse_alife_item_custom_outfit.STATE_Write(self, packet) end 3) В метод STATE_Write (см. выше) добавить строку: function se_outfit:STATE_Write(packet) if self.cb_netpk then self.cb_netpk(self, packet) end -- коллбэк для изменения свойств пакета cse_alife_item_custom_outfit.STATE_Write(self, packet) end Выполнение этих действий ОБЯЗАТЕЛЬНО. Зачем это нужно? Ну, например, можно поменять дирекшн или позишн, так как это read_only свойства объектов. А позишн при спавне смещается так, чтобы объект находился на ИИ сетке. То есть, можем спавнить всякие там лампочки, физические объкты так, чтоб они оказывались повернутыми в пространстве. Так же можно менять те свойства, которые, обычно, только для чтения. Например story_id, или position Изменено 3 Марта 2016 пользователем naxac Аддон для ОП-2.09.2: Яндекс/Google/GitHub Ссылка на комментарий
losiara 13 Опубликовано 3 Марта 2016 Поделиться Опубликовано 3 Марта 2016 (изменено) Добрый вечер! Подскажите, секция [spawner] может работать у сталкеров под гулагом??? Необходимо что бы они появлялись по условию и уходили в оффлайн также по получении инфопорции. НПС скриптовые, all.spawn не трогаю специально!!! Гулаг создал, все работает, выполняется, кроме вышеозначенной секции, как и куда ее вставить либо каким другим способом можно увести неписей в оффлайн??? И еще, в каких файлах прописаны эффекты визуальные и звуковые появления(спавна) монолитовцев на ЧАЭС-2, типа из телепорта выходят!!! Вобщем как этого добиться, или хотя бы какие файлы просмотреть я в принципе и сам разобрался бы... Изменено 3 Марта 2016 пользователем losiara Жизнь следует измерять поступками, а не временем... Ссылка на комментарий
naxac 2 447 Опубликовано 4 Марта 2016 Поделиться Опубликовано 4 Марта 2016 как и куда ее вставить.. ??? Запиши через net_packet в кастом-дату нпс при его спавне. в каких файлах прописаны эффекты визуальные и звуковые появления(спавна) монолитовцев на ЧАЭС-2Это реализовано рестрикторами со схемой sr_particle, её описание есть в вики на stalkerin.gameru.net 1 Аддон для ОП-2.09.2: Яндекс/Google/GitHub Ссылка на комментарий
Sla-Sla 43 Опубликовано 4 Марта 2016 Поделиться Опубликовано 4 Марта 2016 (изменено) Вопрос по GUI интерфейсам. Добавляю в список на GUI предметы из таблицы, которые находятся у гг, все работает. При выборе и нажатии на определенную кнопку они удаляются из инвентаря, но когда пытаюсь вывести не секции, а inv_name предметов, удаление перестает работать. Вот код, прошу опытных скриптеров посмотреть в чем косяк. function repair_kit:InitControls()self:SetWndRect (Frect():set(0,0,800,600))local xml, ctrl = CScriptXmlInit(), CUIWindow()xml:ParseFile ("ui_repair_kit.xml")self.repair_kit = xml:InitStatic("repair_kit",self)self.list = xml:InitList("repair_kit:list",self)self.list:ShowSelectedItem(true)self:Register(self.list, "list_window")self.list:RemoveAll()for i = 1, #parts_table doif db.actor:object(parts_table) thenself:AddItemToList(parts_table)endendfunction repair_kit:OnButton_second_slot_clicked()if self.list:GetSize()==0 thenreturnendlocal index = self.list:GetSelectedItem()if index == -1 thenreturnendlocal object = self.list:GetItem(index).text:GetText()del_item(object)self.button_second_slot:Enable(false)end function repair_kit:AddItemToList(item_name) local _itm = spawn_item() _itm.text:SetText (game.translate_string(system_ini():r_string(item_name, "inv_name"))) self.list:AddItem (_itm) end Изменено 4 Марта 2016 пользователем Sla-Sla Ссылка на комментарий
UnLoaded 313 Опубликовано 4 Марта 2016 Поделиться Опубликовано 4 Марта 2016 либо каким другим способом можно увести неписей в оффлайн??? Ну так в раздаче работ для того гулага, под которым работают эти неписи пропиши смену состояния с уходом в офф-лайн, вот пример из скрипта для Темной долины: t = { section = "logic@" .. way_name, idle = 0, prior = prior, state = {0}, squad = squad, group = groups[1], position_threshold = 20, in_rest = "", out_rest = "", online = false <--- это. Те кто будет на этой работе, будут сидеть в офф-лайне, до перехода на другую работу. } table.insert(sj, t) 1 Ссылка на комментарий
FonSwong 33 Опубликовано 4 Марта 2016 Поделиться Опубликовано 4 Марта 2016 (изменено) Создаваемый класс гуи виртуальный чтоли, не пойму? В одном и том же скрипте класс находится, и обычная функция, если в классе создаётся/изменяется глобальная переменная, то её не видит обычная функция, и наоборот манипуляции с переменными в скрипте не видны внутри классп гуи. И ещё вопром: в чём прок локальных функций "local function bla()"? Что даёт то, что мы обзываем её локальной? Вот ещё вопрос: как указать путь к папке, не прописанной в fsgame.ltx? И как указать путь к звук. файлу не от папки sounds, а от любой другой? Вот код наполнения, но тут во первых я указываю путь в файле fsgame.ltx $music_for_player$ по пути от папки sounds "/music_for_player. А во вторых указываю туда, по тому что не знаю как указать путь к звуку не от sounds -- Заполнение листа с треками(считывает папку "gamedata\sounds\music_for_player") function music_player:FillList() self.mp3_list:Clear() local list_music_player = {} local f = getFS() local flist = f:file_list_open_ex('$music_for_player$',bit_or(FS.FS_ListFiles,FS.FS_ClampExt),"*.ogg") local f_cnt = flist:Size() for it=0, f_cnt-1 do local file = flist:GetAt(it) local file_name = file:NameShort() table.insert(list_music_player,{sound = [[music_for_player\]]..file_name, title = 'Трек №'..(it+1), autor = file_name}) end if debug_on then print_table(list_music_player) end for k,v in pairs(list_music_player) do self:AddItemToList(v.title,v.sound,v.autor) end Не сочтите за наглость, просто не знаю где на это всё самому найти ответы, ещё один вопрос Как поймать открытие/закрытие системных уи элементов(вроде пда, инвенторя и т.д.)? Платформа ЗП В ТЧ нормально получалось, а вот в ЗП что-то не получается. Вроде так же ловлю info_id (инфопоршень), но ловится только 1 раз открытие ПДА и закрытие его же, и больше не срабатывает, инвентарь и другое даже и 1 раза не ловится. Если это важно- ковыряюсь на моде Call of Chernobyl Изменено 4 Марта 2016 пользователем FonSwong Ссылка на комментарий
abramcumner 1 160 Опубликовано 4 Марта 2016 Поделиться Опубликовано 4 Марта 2016 (изменено) Вроде так же ловлю info_id (инфопоршень), но ловится только 1 раз открытие ПДА и закрытие его же, и больше не срабатывает, инвентарь и другое даже и 1 раза не ловится.Не ловится в следующие разы, потому что у ГГ эта инфопорция уже есть. После того как поймал инфопорцию, забирай ее у ГГ. В ТЧ работало, потому что инфопорции в xml прописывались, и там прописано удаление инфопорции. Изменено 4 Марта 2016 пользователем abramcumner Ссылка на комментарий
ZeeK 57 Опубликовано 5 Марта 2016 Поделиться Опубликовано 5 Марта 2016 (изменено) Вечер добрый. Еще раз прошу помощи с sr_robbery для ЧН: никак не могу создать таблицу, чтобы объекты проще было вносить, пытался разными способами, но почему то и не вылетает и не срабатывает, если в таблице более одного объекта. Начал уже тупо копировать-вставить по одному объекту в основную функцию в стиле local function transfer_object_item(item) if item:section() ~= "wpn_beretta" and item:section() ~= "wpn_colt1911" anditem:section() ~= "wpn_desert_eagle" anditem:section() ~= "wpn_fort" anditem:section() ~= "wpn_hpsa" anditem:section() ~= "wpn_pb" anditem:section() ~= "wpn_pm" anditem:section() ~= "wpn_walther" anditem:section() ~= "novice_outfit" anditem:section() ~= "bandit_outfit" anditem:section() ~= "specops_outfit" anditem:section() ~= "military_outfit" anditem:section() ~= "stalker_outfit" anditem:section() ~= "scientific_outfit" anditem:section() ~= "exo_outfit" anditem:section() ~= "svoboda_light_outfit" anditem:section() ~= "svoboda_heavy_outfit" anditem:section() ~= "svoboda_exo_outfit" anditem:section() ~= "cs_light_outfit" anditem:section() ~= "cs_heavy_outfit" anditem:section() ~= "dolg_outfit" anditem:section() ~= "dolg_heavy_outfit" anditem:section() ~= "wpn_g36" thendb.actor:transfer_item(item, inv_box_1)endendinv_box_1 = level_object_by_sid (718)db.actor:inventory_for_each(transfer_object_item) Но так получится огромная функция, да и работы прибавится. Вот также ссылка на Ядиск с файлом - https://yadi.sk/d/3VlWC2cGpwFud - м.б. кому то будет интересно изучить текущее состояние. Изменено 5 Марта 2016 пользователем ZeeK Не соответствует. N6260 Ссылка на комментарий
losiara 13 Опубликовано 6 Марта 2016 Поделиться Опубликовано 6 Марта 2016 Добрый день господа!!! Опять с оффлайном немного заморочился. Создал секции в all.spawn (в тестовом режиме пока, потом через скрипт реализую) НПС и space_restrictor со следующей логикой: ; cse_abstract properties section_name = space_restrictorname = aes2_osoznanie_restrictorposition = 353.836,0.230,270.474direction = 0,0,0; cse_alife_object propertiesgame_vertex_id = 2583distance = 0level_vertex_id = 114493object_flags = 0xffffff3ecustom_data = <[logic]active = sr_idle1[sr_idle1]on_actor_inside = sr_particle[sr_particle]name = anomaly2\teleport_out_00path = aes2_osoznanie_walk_particlemode = 2looped = falseon_timer = 900 | sr_idle2 %+aes2_osoznanie_teleport%[sr_idle2]on_timer = 3000 | {-aes2_osoznanie_teleport} sr_idle1 %+aes2_osoznanie_teleport%END; cse_shape propertiesshapes = shape0shape0:type = sphereshape0:offset = 0,0,0shape0:radius = 10; cse_alife_space_restrictor propertiesrestrictor_type = 0 И НПС: ; cse_abstract propertiessection_name = stalkername = aes2_osoznanieposition = 353.836,0.230,270.474direction = 0,0,0; cse_alife_trader_abstract propertiesmoney = 5000character_profile = osoznanie_8; cse_alife_object propertiesgame_vertex_id = 2583distance = 2.79999995231628level_vertex_id = 114493object_flags = 0xffffffffcustom_data = <[logic]active = walker1on_hit = hit@osoznanie[walker1]path_walk = aes2_osoznanie_walkpath_look = aes2_osoznanie_look[spawner]cond = {+aes2_osoznanie_teleport}[smart_terrains]none = true[hit@osoznanie]on_info = %-aes2_osoznanie_teleport%END; cse_visual propertiesvisual_name = actors\osoznanie\oso_zp_nauchniy; cse_alife_creature_abstract propertiesg_team = 2g_squad = 2g_group = 2health = 1dynamic_out_restrictions =dynamic_in_restrictions =upd:health = 1upd:timestamp = 0upd:creature_flags = 0upd:position = 353.836,0.230,270.474upd:o_model = 0upd:o_torso = -3.09779977798462,-4.40388163269745e-007,0upd:g_team = 2upd:g_squad = 2upd:g_group = 2; cse_alife_monster_abstract properties;base_out_restrictors = aes2_space_restrictor_roof0004upd:next_game_vertex_id = 65535upd:prev_game_vertex_id = 65535upd:distance_from_point = 0upd:distance_to_point = 0; cse_alife_human_abstract propertiespredicate5 = 2,2,0,2,2predicate4 = 2,0,2,0; cse_ph_skeleton propertiesupd:start_dialog =; se_stalker properties По задумке сталкер появляется по типу монолита из оригинала игры как бы из телепорта, затем получает хит, уходит в оффлайн и опять появляется и так пока не надоест... В принципе работает такая схема, но повторный спавн (переход в онлайн) НПС происходит не в прописанной точке path = aes2_osoznanie_walk_particle как это было при первом спавне, а в точке из которой он ушел в оффлайн, что не совпадает с визуальными эффектами, телепорт условно в одном месте, а сталкер появляется в другом почему так??? Где можно поправить сей недостаток, если можно вообще конечно??? И еще, поле скрипта logic: on_actor_inside мне не нравится, не тот случай, работает ли вместе со space_restrictor "on_actor_dist_le =..." или как нибудь по другому, но суть в том, что бы они спавнились на определенном расстоянии от ГГ, что бы игрок мог это видеть, а не при заходе на локацию по безусловному условию. Жизнь следует измерять поступками, а не временем... Ссылка на комментарий
ZeeK 57 Опубликовано 6 Марта 2016 Поделиться Опубликовано 6 Марта 2016 повторный спавн (переход в онлайн) НПС происходит не в прописанной точке path = aes2_osoznanie_walk_particle как это было при первом спавне, а в точке из которой он ушел в оффлайн Что мешает создать для каждого телепорта по индивидуальному НПС и подменять их по очереди? что бы они спавнились на определенном расстоянии от ГГ, что бы игрок мог это видеть, а не при заходе на локацию по безусловному условию Раз ты собираешься делать потом спавн из скрипта, то сделай, что при заходе в рестриктор дается инфопоршень, а в скрипте при получении поршня спавнится НПС в координатах достаточных, чтобы ГГ мог увидеть этот спавн перед собой" Не соответствует. N6260 Ссылка на комментарий
losiara 13 Опубликовано 6 Марта 2016 Поделиться Опубликовано 6 Марта 2016 Я проверил, условие "on_actor_dist_le" работает как в случае с НПС, так и с рестриктором одинаково, т. е. при приближении ГГ на дистанцию равную N или меньше происходит выполнение функций и т. д. Что мешает создать для каждого телепорта по индивидуальному НПС и подменять их по очереди? Ничего не мешает в принципе, я просто хотел отработать с 1 НПС, а не несколькими... Мне стало интересно почему НПС не приходит в онлайн в первоначальной точке спавна, если схема зациклена на определенном пути "path = aes2_osoznanie_walk_particle", а именно туда, откуда был взят в оффлайн. Это такая особенность игры (движка) или надо доработать схему (логику)??? Если первое, тогда ваш совет будет единственно верным со спавном нескольких НПС, если второе, тогда где недочет в логике??? Жизнь следует измерять поступками, а не временем... Ссылка на комментарий
ZeeK 57 Опубликовано 6 Марта 2016 Поделиться Опубликовано 6 Марта 2016 Могу только предполагать: поскольку пути path_walk имеют контрольные точки, по которым следует нпс, например [bloodsucker_02_way_1] points = p0,p1p0:name = wp00p0:position = 98.0355453491211,0.780927002429962,216.506912231445p0:game_vertex_id = 54232p0:level_vertex_id = -1p0:links = p1(1)p1:name = wp01p1:position = 93.8923492431641,1.38035702705383,225.457122802734p1:game_vertex_id = 90p1:level_vertex_id = 191120 То нпс пока не вернется на первую точку т.к. она уже пройдена и он уже стоит на второй и должен закончить ее. По крайней мере сколько я в ЧН\ЗП не убегал\возвращался к нпс они никогда свою работу не начинали с начала, все время с той точки, где они ушли оффлайн. Не соответствует. N6260 Ссылка на комментарий
FonSwong 33 Опубликовано 6 Марта 2016 Поделиться Опубликовано 6 Марта 2016 @ZeeK, А если так?: ignore = {"wpn_beretta","wpn_colt1911","wpn_desert_eagle","wpn_fort","wpn_hpsa"} if not string.find(item:section(),ignore) then db.actor:transfer_item(item, inv_box_1) end Ссылка на комментарий
ZeeK 57 Опубликовано 6 Марта 2016 Поделиться Опубликовано 6 Марта 2016 (изменено) А если так?: Нет, загружается, но во время диалога вылет, причем такой, который в поиске гугл по сталкеру и не попадается "bad argument #2 to 'find' (string expected, got table)" Изменено 6 Марта 2016 пользователем ZeeK Не соответствует. N6260 Ссылка на комментарий
Wlad777 24 Опубликовано 6 Марта 2016 Поделиться Опубликовано 6 Марта 2016 Камрады, подскажите пожалуйста способ отследить продажу, например, любой бутылки водки любому произвольному неписю. --------------------------------- www.amk-zone.de Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти