Карлан 1 050 Опубликовано 17 Ноября 2015 @Wlad777, вариант 1: добавляешь класс для костров, пишешь им биндер, пишешь методы включения/отключения/проверки и сохранение горения до кучи ~ полчаса займет; вариант 2: составляешь массив всех костров в игре, на апдейте их крутишь и проверяешь что горит что нет, там партикл и лампа, ресетишь и делаешь псевдо-метод проверки активности костра ~ не знаю сколько займет, не делал, но массив не маленький будет. Поделиться этим сообщением Ссылка на сообщение
Карлан 1 050 Опубликовано 17 Ноября 2015 @Wlad777, ты прикалываешь или что? смотри particle_object, там есть метод playing(), дальше рассказывать? только там не партиклы как делать я выше написал, и какие объекты в костре я тоже сказал, тебе надо манипулировать тремя объектами, партиклом аномалией и лампой, все, больше ничего не требуется Поделиться этим сообщением Ссылка на сообщение
Карлан 1 050 Опубликовано 28 Ноября 2015 @RayTwitty, конкретнее ситуацию можешь обрисовать? Чтобы всегда и везде у меня такого нет, работает как и должно. В коде есть места где используется рудиментарная установка агрессии одного на другого через хит (как раз нулевой), возможно она имеет место быть, но телепатов таки нет. Есть еще глюк самой схемы, но это дебри логики, которые пока не вижу смысла расписывать. Ну а так иди пальни в новичка в деревне, выведи в лог, там все это достаточно наглядно, ну и сразу отсюда идет пойдет вывод что надо подправить в экшнах. Поделиться этим сообщением Ссылка на сообщение
Карлан 1 050 Опубликовано 28 Ноября 2015 @RayTwitty, ну так дурное дело не хитрое . Причем тут пострелять в труп я не понял, также как и причем тут движок. Весь вопрос объясняется на уровне скриптов. Поделиться этим сообщением Ссылка на сообщение
Карлан 1 050 Опубликовано 28 Ноября 2015 А труп это разве не НПС и для него колбек вызываться не может? Может, и вызывается, и отличий нет. Я не понял зачем ты различаешь вызов хит коллбека на труп и на живого, когда это суть одно и тоже, ну и до кучи причем тут движок я тоже не понял. А вектор куда копать я дал, так как телепатов нет. Поделиться этим сообщением Ссылка на сообщение
Карлан 1 050 Опубликовано 14 Июля 2016 (изменено) Хм, коли начинаем говорить о GUI, давайте расскажу про CUITrackBar() в ТЧ. Класс изначально вообще очень беден, и в нем в качестве дополнительных методов есть только управление активностью кнопки (то есть сделать можно только ползунок со спамом в лог о значении и ничего более), что же делать, подумал я, когда для реализации моей задумки мне нужно было сделать именно трек-бар. А делать надо было только одно, идти в движок и разбираться. В движке все не столь трагично было, изначально существует несколько ошибок, которые не дают нормально работать базовым функциям, то есть они очень нужны, они необходимы для нормальной работы трек-бара, но они используются только в стороннем классе, что меня совершенно не устраивало, пришлось исправлять эти недочеты. Так же совершенно не было методов получения значений трек-бара, их пришлось писать самому, но там функции примитивные, на установке значения я еще перемещаю ползунок в соответственное значение, и в результате безоговорочный успех! Выдержка из хелпера (для демонстрации результатов моей работы): C++ class CUITrackBar : CUIWindow { --// расширения для класса CUITrackBar позволяют создавать и управлять трек-баром (последнее было невозможно) function IsChanged(); --// значение изменилось? function SetStep(number); --// устанавливает шаг трекинга function GetStep(); --// получает шаг трекинга function GetValue(); --// текущее значение function SetValue(number); --// установить значение (также меняется позиция ползунка в зависимости от значения) function GetBackupValue(); --// получить предыдущее значение function SetBackupValue(number); --// установить предыдущее значение function GetBtn(); --// получить кнопку в виде объекта CUI3Button function GetFrame(); --// получить первый фрейм в виде объекта CUIFrameLineWnd function GetFrameD(); --// получить второй фрейм в виде объекта CUIFrameLineWnd };Видео-демонстрация конечного результата, чтобы всем было понятно о чем я говорю (поясняю: на видео этот ползунок и есть трек-бар): По окончанию работ я вспомнил про GUI сна в ЗП, и решил обратиться к классу трек-бара в коде ЗП и с радостью обнаружил, что мои функции получились технологичнее. Да, если кто помнит, я тот, кто потащил функционал в ТЧ, но до конкретных редких классов как этот у меня руки не дошли, разбираюсь с ними только когда мне это нужно. @Kondr48, да, можно, если неизвестно сколько кнопок будет, то делай через цикл while. Кнопка button_1 в твоем случае это поле, а поле можно получить по ключу, а ключом может выступать любой lua тип. Твоя задача весьма проста, и абсолютно точно реализуема. Изменено 14 Июля 2016 пользователем Карлан 1 1 Поделиться этим сообщением Ссылка на сообщение
Карлан 1 050 Опубликовано 17 Июля 2016 (изменено) @Kondr48, немного не ясно что ты хочешь от кода. Ты собираешься красить кнопку, но красишь текст, текстуру красят другим методом (метки например), а SetHighlightColor красит, очевидно, текст, в случае с кнопкой - на кнопке. По второму вопросу я вообще не понял о чем ты спрашиваешь. Статик можно повернуть методом SetHeading. @SkyLoader, метод называется SetColor (также SetColorAll), а не SetHighlightColor. Например: void CUITradeWnd::ColorizeItem(CUICellItem* itm, bool { if(! itm->SetColorAll(color_argb(255,255,100,100)); } Изменено 17 Июля 2016 пользователем Карлан 1 Поделиться этим сообщением Ссылка на сообщение
Карлан 1 050 Опубликовано 17 Июля 2016 @Kondr48, это же очевидно: SetHighlightColor и SetTextColor идентичны, только аргументы принимают по разному, первый жрет GetARGB (в данном контексте совершенно не ясно зачем), а второй напрямую. SetColor как раз красит сам статик. SetColorAll предполагалось, что должен красить и детей тоже, но не красит, так что методы тоже идентичны . Оговорюсь, что я веду речь о CUIStatic. Второй вопрос: кнопку достаточно скрыть, примерно так: self.btn_yes:Hide(), если хочется непременно удалить, то ее надо отцепить от парента (DetachChild), только в этом случае советую еще поглядывать за сборщиком мусора, так как может все достаточно печально закончиться, особенно если имеешь дело с каким-нибудь динамическим статик-боксом. P.S. Предупрежу, что мои советы не всегда могут быть применимы для стандартных исходников, так как некоторые части у меня достаточно сильно переписаны. 1 Поделиться этим сообщением Ссылка на сообщение
Карлан 1 050 Опубликовано 21 Июля 2016 @Kondr48, вопрос совершенно некорректный. Никто по этим обрывкам не сможет понять что ты делаешь, можно только гадать. Моя кофейная гуща говорит о том, что твоя таблица к моменту вызова типса уже вне зоны видимости, если вообще не уничтожена. Объяви ее в самом начале модуля вот так: local mechanic_info = {} Если вызов типса в этом же модуле, и вот так: mechanic_info = {} Если в ином, но в таком случае вызывать ее нужно module.mechanic_info, почему? Недавно я как-раз рассказывал про видимость переменных, рекомендую прочесть, там же я давал ссылки на главы по окружению из официального мануала. 1 Поделиться этим сообщением Ссылка на сообщение
Карлан 1 050 Опубликовано 23 Июля 2016 @CRAZY_STALKER666, от него требуется только секцию взять. Я его в две строки переписал, тут по моему даже выкладывал. Секция 'never' ничего не значит, если ее не будет, он на нее просто не перейдет, вот и все, функция вернет nil и проверка не пройдет. Проверь если есть желание. 1 Поделиться этим сообщением Ссылка на сообщение
Карлан 1 050 Опубликовано 24 Июля 2016 @Kondr48, есть функция: ui.reinit_show_ui() В репозитории xp-dev, если ты на нем, то она перегружает карбоди и инвентарь, если не на нем, то посмотри как сделано. Обновление окон в оригинале достаточно странно сделано, сравнивается фрейм, который меняется в куче мест совершенно непонятно зачем, это все можно сделать на флагах и в таком случае все гораздо проще будет экспортировать в скрипты, да и в целом с этим работать. А сейчас роль флага выполняют фреймы, я до сих пор не понял почему они так сделали. 1 Поделиться этим сообщением Ссылка на сообщение
Карлан 1 050 Опубликовано 29 Июля 2016 @BoBaH_671, очевидно оперировать серверными объектами, так как дистанция работы клиентских методов равна радиусу онлайна, и немного не понятно зачем их применять за этими рамками. На xp-dev есть метод teleport_object, но у меня не было повода проверить как он работает, судя по коду работает корректно (говорю основываясь на подобных методах, которые пишу сам). @Kondr48, предложенный тобою метод является усложнением простого, к тому же он в любом случае не позволит передавать объекты межлокационно. Поделиться этим сообщением Ссылка на сообщение
Карлан 1 050 Опубликовано 6 Августа 2016 Как заспавнить тайник скриптом? Причем чтобы все данные о нём в этом же скрипте и указать (визуал и наполнение) Вопрос некорректный. Данные разнообразны, в частности даже визуал и наполнение, первое это серверная часть, второе это клиентская часть. Можно сделать несколько секций с нужными тебе визуалами, либо сделать метод и ассоциировать его с чем либо. По второму жди пока тайник выйдет в онлайн и забрасывай все что тебе нужно. Рекомендую посмотреть мою реализацию "съемных" рюкзаков, пока там именно так и сделано. Есть планы написать в движке универсального обладателя инвентаря, которого можно носить с собой, при таком подходе будет гораздо удобнее трансферить (в целом вся работа будет проходить лучше) и кода будет меньше. На выходе должен будет получится такой физический инвентарный ящик. Поделиться этим сообщением Ссылка на сообщение
Карлан 1 050 Опубликовано 8 Августа 2016 @nikita_nz1986, ты создаешь объект particles_object, соответственно тебе доступны все методы класса, и там есть два метода для остановки: stop и stop_deffered. 1 Поделиться этим сообщением Ссылка на сообщение
Карлан 1 050 Опубликовано 9 Августа 2016 На мой взгляд проще добавить функцию в движок, где можно установить и кастом дату (ее наверное лучше вообще отдельной функцией сделать, у меня, например, по всякому сделано), и топливо, и прочие специфичные параметры вроде стейтов дверей (тут могу ошибиться, в транспорте совершенно не разбираюсь). Самое банальное - сделать еще один create, где опционально можно указать story id и custom data. Далее, если нужно, древовидно раскрутить все функции и вписывать туда специфичные параметры, далее их ассоциативно экспортировать в скрипты, в принципе это один из немногих хороших вариантов. Если говорить о пакетах, то, если верно помню, там можно через смещение чтения/записи сразу прочесть/записать нужный параметр и не писать все это полотно, по крайней мере я так когда-то давно визуал читал. Ну а оперировать этим через [spawner] это, конечно, ужасно. 1 Поделиться этим сообщением Ссылка на сообщение
Карлан 1 050 Опубликовано 15 Августа 2016 @CRAZY_STALKER666, предположу, что партикл рисуется по позиции объекта, а ты негодуешь из-за того, что он "не там" от первого лица, то есть от позиции камеры. Попробуй рисовать партикл от позиции камеры. Поделиться этим сообщением Ссылка на сообщение
Карлан 1 050 Опубликовано 18 Августа 2016 @Kober(BRUC), в оригинале без костылей это невозможно. Для скриптов существует свой относительный путь, называется $game_scripts$ и явно прописан в fsgame.ltx. Чтобы скрипты можно было вызывать откуда угодно нужно переделывать функцию вызова скриптов в движке, файл script_engine.cpp. Я ее немного переделывал там чтобы хотя бы самых больших мух от котлет отделить, а вот alpet, насколько я знаю, переделывал ее примерно так как тебе и надо, у него, опять же насколько я знаю, скрипты можно вызывать из папки scripts и всех ее подпапок. Я в плюсах слабо рублю, но мне кажется это такая плюсовая плюшка (то есть не составляет большого труда, для тех кто в них шарит), сделать цикл не только по $game_scripts$, но и по всем вложенным папкам. На луа, костылем, это, разумеется, можно сделать через dofile. Но поскольку это костыль, то и путь надо будет каждый раз писать для update_path для каждой новой подпапки, не совсем удобно, ну и разумеется уже pcall. 1 Поделиться этим сообщением Ссылка на сообщение
Карлан 1 050 Опубликовано 18 Августа 2016 upd: Взгляни на ResourceManager_Scripting.cpp, // load shaders и далее, там как раз вот идеология того, что тебе нужно, думаю можно разобраться, цикл то маленький, а я тут напугал, даже я примерно въехал что к чему . Карлан, а если файл не используется другими скриптами. Просто лежит файл по директории scripts/add. И из этого файла вызывается функция, из диалога например, то все равно работать не будет? Ну нет конечно, если ты его заранее через луа явно не подключишь, и то скорее всего не взлетит, потому что модули с диалоговыми функциями это нечто большее, чем скрипты 1 Поделиться этим сообщением Ссылка на сообщение
Карлан 1 050 Опубликовано 18 Августа 2016 (изменено) Del. Что-то я припудрился, извиняюсь, сравниваю со своими телегами и забыл, что отношения перерабатывал, у меня такая телега стоит: function set_factions_community_relation(faction, faction_to, new_community) assert(is_string(faction), [[bad argument #1 to set_factions_community_relation (string excepted, got %s)]], type(faction)) assert(is_string(faction_to), [[bad argument #2 to set_factions_community_relation (string excepted, got %s)]], type(faction_to)) assert((is_number(new_community) or is_string(new_community)), [[bad argument #3 to set_factions_community_relation (string or number excepted, got %s)]], type(new_community)) if tonumber(new_community) then relation_registry.set_community_relation(faction, faction_to, new_community) else assert(const_factions_relation[new_community], [[const_factions_relation doesn't exist [%s] field]], new_community) relation_registry.set_community_relation(faction, faction_to, const_factions_relation[new_community]) end end Изменено 18 Августа 2016 пользователем Карлан Поделиться этим сообщением Ссылка на сообщение
Карлан 1 050 Опубликовано 18 Августа 2016 @CRAZY_STALKER666, нет, в оригинальном ТЧ такой функции разумеется нет, тебе, возможно, подойдет использование relation_registry.set_community_goodwill, но она устанавливает коэффициент к конкретному объекту, но не меняет отношения между группировками. В твоем случае, я думаю, подойдет, так как, если не ошибаюсь, то ты хочешь поссорить актора, который состоит в Свободе, со сталкерами (как группировкой). Такое возможно. Поделиться этим сообщением Ссылка на сообщение