Artos 99 Опубликовано 13 Апреля 2012 Поделиться Опубликовано 13 Апреля 2012 (изменено) panzyuza Не стОит данный код распространять на все "случаи жизни" и тем более не задумываясь а почему именно так сделано. Да и каждый раз все же условия меняются. Например, твоя попытка использовать (self.timer_atacks or 0) < time вполне бы сгодилась, но тогда нет смысла задавать self.timer_atacks при инициализации класса. А вот подавление "дребезга" при входе-выходе из зоны стОит может быть усложнить, чтобы эффект все же сразу включался. И собственно это не таймер, строго говоря, а по сути включаемый расширенный апдейтер с заданным периодом. В общем пиши код по мере потребностей в конкретном контексте, а не копипасть не задумавшись даже сам у себя. ;-) Изменено 13 Апреля 2012 пользователем Artos "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
AndreySol 215 Опубликовано 14 Апреля 2012 Поделиться Опубликовано 14 Апреля 2012 Если детектор удалить\выбросить из инвентаря актора(ГГ), а затем получить его(подобрать или взять из нычки\купить\получить в награду за квест) - он автоматом "запрыгнет" в свой родной слот. Вопрос - можно-ли как-то задисэйблить слот, т.е. сделать так, что-бы он не принимал детектор при появлении его в инвентаре актора ? Ссылка на комментарий
7.9 174 Опубликовано 14 Апреля 2012 Поделиться Опубликовано 14 Апреля 2012 AndreySol, конечно можно - используй детектор-заглушку... всё легко Ссылка на комментарий
AndreySol 215 Опубликовано 14 Апреля 2012 Поделиться Опубликовано 14 Апреля 2012 (изменено) 7.9 Об этом я конечно подумал, но хотел все-же уточнить насчет других, более "прямых" (на мой взгляд) вариантов. Во-первых, не нужно цитировать предыдущие посты, достаточно вписать ник-нейм. Во-вторых, что значит "прямых", да ещё и на твой взгляд, вариантов? ColR_iT Добавлено через 182 мин.: ColR_iT Ну к примеру какая-то функция движка, позволяющая блокировать слот, или предмет от попадания в прописанный ему слот ? Изменено 14 Апреля 2012 пользователем ColR_iT Ссылка на комментарий
panzyuza 41 Опубликовано 14 Апреля 2012 Поделиться Опубликовано 14 Апреля 2012 Artos, в твоем случае эффект не удалялься.И даже если актор не внутри зоны, все равно каждые 18 секунд появлялись фантомы и звуки.Просто в схеме установлен радиус действия 10.Тогда нет смысла проверять актора внутри зоны.Даже если шейп рестриктора выставить 50,все равно по схеме он равен 10.Поэтому я немного подретушировал код и все теперь работает,как надо.Это из поста 4142. AVS_LOCATION_MOD Ссылка на комментарий
Artos 99 Опубликовано 14 Апреля 2012 Поделиться Опубликовано 14 Апреля 2012 (изменено) panzyuza Ну раз исправил и получил желаемое - это ж хорошо! Не имеет смысла говорить о кодах, которые только у тебя ... Для других это бесполезная информация. А в моем примере была ошибка (писал "на коленке" и не проверял), строка: if self.actor_inside = self.object:inside(db.actor:position()) then --/ актор в зоне? должна быть такой: if self.object:inside(db.actor:position()) then --/ актор в зоне? Если же у тебя рестриктор не отрабатывает вхождение в зону - то конечно же бессмысленно применять проверки на вхождение. Однако, постоянно проверять позицию актора на каждом апдейте достаточно расточительно, т.к. у тебя вероятно схема активна постоянно если твой рестриктор на локации ... СтОит подумать о вводе доп.таймера периода, зависимого от дистанции до рестриктора. Т.е. если актор далеко - проверять дистанцию пореже ... Или же манипулировать секциями логики рестриктора, активируя нужную в нужное время, а не по дефолту. Для одиночной правки подобная заморочка может и не нужна, но если в моде немало подобного - эконимия ресурсов никогда не вредна. Изменено 14 Апреля 2012 пользователем Artos "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
panzyuza 41 Опубликовано 14 Апреля 2012 Поделиться Опубликовано 14 Апреля 2012 (изменено) Artos, хотя для новичков, вроде меня, подобные бесполезные коды могут научить правильно писать скрипты.И по вопросу.Можно конечно переключать логику рестриктора примерно так Изменено 14 Апреля 2012 пользователем panzyuza AVS_LOCATION_MOD Ссылка на комментарий
Artos 99 Опубликовано 14 Апреля 2012 Поделиться Опубликовано 14 Апреля 2012 panzyuza, под "бесполезностью" в данном контесте подразумеваю именно то, что многие (в основном новички) говоря о каких-то кодах и даже порою выкладывая кусочки из них не задумываются, что без связки всех относящихся к вопосу кодов - часто именно бессмысленно гадать или давать какие-либо ответы/советы. "Правильность" - понятие относительно и то, что "правильно" в какой-то ситуации/случае, запросто может быть ошибочным в другой, дажеесли это "другое" очень схоже с первым. (но это уже пошел оффтопик ... заканчиваем) "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
Tris 9 Опубликовано 15 Апреля 2012 Поделиться Опубликовано 15 Апреля 2012 (изменено) Добрый вечер! Подскажите пожалуйста как исправить данную ошибку? FATAL ERROR [error]Expression : assertion failed [error]Function : CUIXmlInit::InitText [error]File : D:\prog_repository\sources\trunk\xrGame\ui\UIXmlInit.cpp [error]Line : 315 [error]Description : pTmpFont stack trace: class "selection_of_groups_ui" (CUIScriptWnd) function selection_of_groups_ui:__init() super() self:InitControls() self:InitCallBacks() end function selection_of_groups_ui:__finalize() end function selection_of_groups_ui:InitControls() self:SetWndRect(Frect():set(50,50,1024,768)) local xml = CScriptXmlInit() xml:ParseFile("selection_of_groups_ui.xml") self:Register(xml:Init3tButton("caption", self),"caption") self:Register(xml:Init3tButton("btn_1", self),"btn_1") self:Register(xml:Init3tButton("btn_2", self),"btn_2") self:Register(xml:Init3tButton("btn_3", self),"btn_3") self:Register(xml:Init3tButton("btn_4", self),"btn_4") end function selection_of_groups_ui:InitCallBacks() self:AddCallback("btn_1", ui_events.BUTTON_CLICKED, self.function_ui_1, self) self:AddCallback("btn_2", ui_events.BUTTON_CLICKED, self.function_ui_2, self) self:AddCallback("btn_3", ui_events.BUTTON_CLICKED, self.function_ui_3, self) self:AddCallback("btn_4", ui_events.BUTTON_CLICKED, self.function_ui_4, self) end function selection_of_groups_ui:function_ui_1() if db.actor:character_community() ~= "(stalker)" then db.actor:set_character_community("stalker", 0, 0) end end function selection_of_groups_ui:function_ui_2() if db.actor:character_community() ~= "(bandit)" then db.actor:set_character_community("bandit", 0, 0) end end function selection_of_groups_ui:function_ui_3() if db.actor:character_community() ~= "(dolg)" then db.actor:set_character_community("dolg", 0, 0) end end function selection_of_groups_ui:function_ui_4() if db.actor:character_community() ~= "(freedom)" then db.actor:set_character_community("freedom", 0, 0) end end Без указания версии игры и используемого шаблона selection_of_groups_ui.xml гадай самостоятельно или на пару с кашнировским. --/Artos [x] Изменено 15 Апреля 2012 пользователем Artos • Dead Forgetting Zone • Мои работы. Обновление: 24.08.2012 Ссылка на комментарий
temakonkin 0 Опубликовано 15 Апреля 2012 Поделиться Опубликовано 15 Апреля 2012 (изменено) такая вот проблема возникла...когда попытался вывести окно после использования предмета. Делал на моде Lost World Trops of Doom 2.4 в bind_stalker создаю два колбека self.object:set_callback(callback.host, nil) и self.object:set_callback(callback.host, self.use_mps_big, self) потом пишу функцию function actor_binder:on_item_drop (obj) level_tasks.proceed(self.object) terrorizm.li(obj) lwc_inventory.ItemDrop(obj) end -----МОЯ_ФУНКЦИЯ----- function actor_binder:use_mps_big(obj) main_map_use.main_map_use_2(obj) end в main_map_use вот это function main_map_use_2(obj) if obj ~= nil then if obj:section() == "map_big" then local hud = map_big_ui(get_hud()) level.start_stop_menu(hud, true) end end end class "map_big_ui" (CUIScriptWnd) function map_big_ui:__init(owner) super() self.owner = owner self:InitControls() self:InitCallBacks() end function map_big_ui:InitControls() self:Init(50,50,550,450) local xml = CScriptXmlInit() xml:ParseFile("ui_map_self.xml") xml:InitStatic("background", self) self:Register(xml:Init3tButton("caption", self),"caption") self:Register(xml:Init3tButton("btn_quit", self),"btn_quit") end functionmap_big_ui:InitCallBacks() self:AddCallback("btn_quit", ui_events.BUTTON_CLICKED, self.on_quit, self) end functionmap_big_ui:OnKeyboard(dik, keyboard_action) CUIScriptWnd.OnKeyboard(self,dik,keyboard_action) if keyboard_action == ui_events.WINDOW_KEY_PRESSED then end return true end function map_big_ui:check_game() -- проверка запущена ли игра local check = false if level.present() and (db.actor ~= nil) and db.actor:alive() then check = true end return check end function map_big_ui:on_quit() self:GetHolder():start_stop_menu(self, true) alife():create("sleep_bag", db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id()) end после запуска игры, начинаю новую игру и на "клиент синхронизация" получаю безлоговый вылет....пробовал вешать функцию на другой колбек-всё работает, а вот именно на моём нет. подскажите что я сделал не так.... заранее благодарен! Используй тэг спойлера для портянок кодов. --/Artos Изменено 15 Апреля 2012 пользователем temakonkin Сталкер в душе - сталкер по жизни! Ссылка на комментарий
Artos 99 Опубликовано 15 Апреля 2012 Поделиться Опубликовано 15 Апреля 2012 (изменено) temakonkin, а с чего ты взял, что движек игры поймет придуманный тобою callback.host ? Все коллбэки, который понимает движек игры упомянуты в lua_help.script в классе коллбэка (class callback). Для использования (юзания) предметов предусмотрен коллбэк callback.use_object. Как подключить и использовать такой коллбэк (use_object) - смотри хоть в кодах ЗП, хоть в модах, хоть в статьях на вики-сайтах. и ... создаешь ты не два коллбэка и функцию, а добавляешь в класс биндера актора один коллбэк и две записи о нем, в которых ты его от(под)ключаешь. Изменено 15 Апреля 2012 пользователем Artos "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
temakonkin 0 Опубликовано 15 Апреля 2012 Поделиться Опубликовано 15 Апреля 2012 (изменено) Artos благодарю за быстрый ответ!!! я только учусь, так что спасибо на счёт того что имена колбеков зарезервированы(так я понимаю?) я не знал! Если не знаешь - читай статьи и ФАКи! --/Artos полетел дальше эксперементировать... [x] Изменено 16 Апреля 2012 пользователем Artos Сталкер в душе - сталкер по жизни! Ссылка на комментарий
Tris 9 Опубликовано 16 Апреля 2012 Поделиться Опубликовано 16 Апреля 2012 (изменено) selection_of_groups_ui.XML <?xml version="1.0" encoding="windows-1251" ?> <main> <background x="0" y="0" width="400" height="340" stretch="1"> <texture x="0" y="0" width="350" height="460">ui\ui_actor_sleep_screen</texture> </background> <caption x="175" y="30" width="50" height="35"> <text>Выберете группировку:</text> </caption> <btn_1 x="72" y="80" width="256" height="35"> <texture_e>ui\ui_btn_mm_e</texture_e> <texture_t>ui\ui_btn_mm_t</texture_t> <texture_h>ui\ui_btn_mm_h</texture_h> <text>"Нейтралы"</text> </btn_1> <btn_2 x="72" y="130" width="256" height="35"> <texture_e>ui\ui_btn_mm_e</texture_e> <texture_t>ui\ui_btn_mm_t</texture_t> <texture_h>ui\ui_btn_mm_h</texture_h> <text>"Бандиты"</text> </btn_2> <btn_3 x="72" y="180" width="256" height="35"> <texture_e>ui\ui_btn_mm_e</texture_e> <texture_t>ui\ui_btn_mm_t</texture_t> <texture_h>ui\ui_btn_mm_h</texture_h> <text>"Долг"</text> </btn_3> <btn_4 x="72" y="230" width="256" height="35"> <texture_e>ui\ui_btn_mm_e</texture_e> <texture_t>ui\ui_btn_mm_t</texture_t> <texture_h>ui\ui_btn_mm_h</texture_h> <text>"Свобода"</text> </btn_4> </main> selection_of_groups_ui_mod.sctipt class "selection_of_groups_ui" (CUIScriptWnd) function selection_of_groups_ui:__init() super() self:InitControls() self:InitCallBacks() end function selection_of_groups_ui:__finalize() end function selection_of_groups_ui:InitControls() self:SetWndRect(Frect():set(50,50,1024,768)) local xml = CScriptXmlInit() xml:ParseFile("selection_of_groups_ui.xml") xml:InitStatic("background", self) -- рамка сзади self:Register(xml:Init3tButton("caption", self),"caption") self:Register(xml:Init3tButton("btn_1", self),"btn_1") self:Register(xml:Init3tButton("btn_2", self),"btn_2") self:Register(xml:Init3tButton("btn_3", self),"btn_3") self:Register(xml:Init3tButton("btn_4", self),"btn_4") end function selection_of_groups_ui:InitCallBacks() self:AddCallback("btn_1", ui_events.BUTTON_CLICKED, self.function_ui_1, self) self:AddCallback("btn_2", ui_events.BUTTON_CLICKED, self.function_ui_2, self) self:AddCallback("btn_3", ui_events.BUTTON_CLICKED, self.function_ui_3, self) self:AddCallback("btn_4", ui_events.BUTTON_CLICKED, self.function_ui_4, self) end function selection_of_groups_ui:function_ui_1() if db.actor:character_community() ~= "(stalker)" then db.actor:set_character_community("stalker", 0, 0) end end function selection_of_groups_ui:function_ui_2() if db.actor:character_community() ~= "(bandit)" then db.actor:set_character_community("bandit", 0, 0) end end function selection_of_groups_ui:function_ui_3() if db.actor:character_community() ~= "(dolg)" then db.actor:set_character_community("dolg", 0, 0) end end function selection_of_groups_ui:function_ui_4() if db.actor:character_community() ~= "(freedom)" then db.actor:set_character_community("freedom", 0, 0) end end FATAL ERROR [error]Expression : assertion failed [error]Function : CUIXmlInit::InitText [error]File : D:\prog_repository\sources\trunk\xrGame\ui\UIXmlInit.cpp [error]Line : 315 [error]Description : pTmpFont stack trace: Версия игры ЗП 1.6.00. Изменено 16 Апреля 2012 пользователем ColR_iT Пишем покомпактнее, пожалуйста. • Dead Forgetting Zone • Мои работы. Обновление: 24.08.2012 Ссылка на комментарий
AndreySol 215 Опубликовано 16 Апреля 2012 Поделиться Опубликовано 16 Апреля 2012 (изменено) Вопрос о фиксации объектов после спауна: скриптово создаю объект, ящик с динамитом, с размещением его на земле (локация Кордон) прям перед входом к Сидоровичу (для тестирования). После создания пытаюсь его фиксировать (пример кода взял здесь-же, на форуме): if object then local pshell = object:get_physics_shell() if pshell then local element = pshell:get_element_by_order(0) if element then element:fix() local text = "попытка фиксации" news_manager.send_tip(db.actor, text, nil, nil, 30000) end end end сообщение появляется, значит ф-ция element:fix() вроде как отрабатывает. Но если после создания предмета сохраниться, а затем загрузиться - предмет исчезает, точнее становится невидимым. Если подойти затем к нему и посмотреть на него (зная точно место, где он должен быть), он "проявляется", т.е. визуально появляется на месте спауна. Что надо исправить, чтоб предмет спаунился нормально ? Изменено 16 Апреля 2012 пользователем AndreySol Ссылка на комментарий
Lagos 688 Опубликовано 16 Апреля 2012 Поделиться Опубликовано 16 Апреля 2012 (изменено) Здравия желаю. Подскажите пожалуйста как при входе в рестриктор поменять погоду? Пытался сделать функцией level.set_weather("indoor"), но в логе пишет: !Invalid weather name "indoor". Пытался поменять вот так: Логика: [logic] active = sr_idle@in [sr_idle@in] on_actor_in_zone = agr_sr_weather_indoor | sr_idle@out %=change_weather()% [sr_idle@out] on_actor_not_in_zone = agr_sr_weather_indoor | sr_idle@in Функция: function change_weather() level.set_weather("indoor") end Но следует выше описанный лог. Подскажите, как можно всё-таки изменить погоду при входе в скрипт? Заранее спасибо. P.S.: платформа - ЗП. Изменено 16 Апреля 2012 пользователем zoidberg123456789 Официальный сайт . Ссылка на комментарий
*Shoker* 322 Опубликовано 16 Апреля 2012 Поделиться Опубликовано 16 Апреля 2012 (изменено) zoidberg123456789, ну тут по логу же всё ясно. Погоды с названием indoor нету. В ЗП название погоды соотв. названию .ltx файла с ней. Тоесть в конфигах открой папку с погодой (только учти, их там две. Одна старая от ТЧ и не используется (для СДК видимо)) "gamedata\configs\environment\weathers\" И глянь правильное название погоды. ___ Глянул сам, в ЗП вроде есть такая погода (indoor.ltx), но лог ругается именно на её отсутствие. Лучше перепроверь у себя файлы. Я смотрел по файлам из ЗП СДК. Изменено 16 Апреля 2012 пользователем *Shoker* Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О Мастер аномалий на свою заднюю точку. Ссылка на комментарий
Artos 99 Опубликовано 16 Апреля 2012 Поделиться Опубликовано 16 Апреля 2012 (изменено) zoidberg123456789, а зачем изобретать велосипед? Не проще ли взглянуть на уже готовое(!) из исходной игры и почитав комменты от разрабов сделать по аналогии или даже просто использовать готовый рабочий код? Смотрим в xr_effects.script: --'----------------------------------------------------------------------------------- --' Функции для работы с погодными эффектами --'----------------------------------------------------------------------------------- -- Принудительная установка погодных условий -- =set_weather(<секция погоды>:true) - установка погоды сразу, false - через некоторое время -- Будет использоваться на старте игры Зов Припяти и в сцене jup_b15 - утро после пьянки с Зулусом function set_weather(actor, npc, p) if(p[1]) then if(p[2]=="true") then level.set_weather(p[1],true) else level.set_weather(p[1],false) end end end В данном случае выставляются все необходимые аргументы для вызова функции смены погоды (чего ты у себя не делаешь!). Если у тебя погода не меняется - проверяй свой 'погодный' файл конфига. И ... подбирайте все же соответствующий вопросу топик, место такому вопросу в топике по ковыряниям именно CoP. Добавлено через 6 мин.: AndreySol, вероятно следует покопаться с параметром object_flags заспавненного объекта ... раз используешь на базе инвентарного ящика. Добавлено через 4 мин.: Tris, твой простенький код и конфиг к нему полностью рабочие, а вот ошибка вероятно возникает из-за неправильного вызова окна (вызова твоего оконного класса) о чем мы можем только гадать. Изменено 16 Апреля 2012 пользователем Artos "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
Tris 9 Опубликовано 16 Апреля 2012 Поделиться Опубликовано 16 Апреля 2012 (изменено) Artos Вызывал так: function actor_binder:net_spawn(data) selection_of_groups_ui_mod.get_hud_mod() selection_of_groups_ui_mod: function get_hud_mod() if db.actor:alive() then groups_ui = this.selection_of_groups_ui() groups_ui:ShowDialog(true) end end Изменено 16 Апреля 2012 пользователем Artos • Dead Forgetting Zone • Мои работы. Обновление: 24.08.2012 Ссылка на комментарий
Artos 99 Опубликовано 16 Апреля 2012 Поделиться Опубликовано 16 Апреля 2012 (изменено) Tris, мда-а-а ... вам бы матчасть почитать и не бездумно чего то писать в скрипты, а хотя бы понимать то, чято пишется. ну и что означает(?) ваше: function actor_binder:net_spawn(data) selection_of_groups_ui_mod.get_hud_mod() На кой ... впустую создавать объект класса? И нафига это вообще при спавне актора? Ну а this.selection_of_groups_ui() - говорит о том, что вы не понимаете пока разницы между классом и метатаблицей скрипта/функции. Делайте хотя бы так, как в оригинальных кодах игры ... и посмотрите как вызываются методы из классов и что такое 'this' и когда применяется. Изменено 16 Апреля 2012 пользователем Artos "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
AndreySol 215 Опубликовано 16 Апреля 2012 Поделиться Опубликовано 16 Апреля 2012 Artos object_flags - нашел это только в Вашем модуле нет-пакетов. Подскажите как этот параметр влияет на объект. И как его правильно использовать. Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти