UnLoaded 313 Опубликовано 24 Июля 2015 Нужда: Поймать момент окончания проигрывания анимации После отыгрыша анимации перезарядки наступит состояние "idle", соответственно в состоянии "reload" взводишь флаг и проверяешь наступление "idle" при взведенном флаге - это и будет окончание перезарядки. У меня такой финт работает, хотя может это не то, что тебе нуно... Поделиться этим сообщением Ссылка на сообщение
UnLoaded 313 Опубликовано 24 Июля 2015 set_use_hud_animation_callback -- включает использование колбека на завершение анимации. Ну тогда это, видимо. Смотри описание и как подключать этот коллбэк к анимации... Поделиться этим сообщением Ссылка на сообщение
UnLoaded 313 Опубликовано 3 Августа 2015 (изменено) а потом в maingame_16 в статиках прописал heading="1" и поправил координаты иконок, текста и.т.д. Монитор у меня 16:9 Full HD. Надо бы еще и другие файлы править. Лучше всего вызывать в начале файла, чтобы изменения заработали уже в главном меню. Да, тогда меню имеет правильные пропорции, однако появляются черные полосы по бокам. Как я хочу быть извращенцем - это наверное так приятно и интересно... Не в обиду, но имея уже доступ к исходникам, люди почти десяток постов обсуждают то, как выпрямить на нужный(но не известный никому) угол очередной костыль к ПЫСовским криводелкам, вместо того, чтоб обсудить как эту криводелку исправить раз и на всегда на уровне движка... Изменено 3 Августа 2015 пользователем UnLoaded 1 1 Поделиться этим сообщением Ссылка на сообщение
UnLoaded 313 Опубликовано 31 Августа 2015 планируется ли на новую платформу перейти? Это как ремонт эл.проводки в автомобиле: лазишь с тестером, ищешь что-куда: штекерок разъединил - тыловая аккустика заглохла. О! Значит проводочки от штекерка к ней идут. А приходят к штекерку, по логике - от магнитолы. И совсем другое дело, когда имеется схема принципиальная на эту проводку - глянул, что-куда, прозвонил нужную цепь и исправил по-быстрому. Какой смысл в бинарных патчах, когда все уже давно и во всю исходники правят и компилят свежие версии двигла ? P.S. Анекдот, на тему глистов которые глянули, что там снаружи - солнце, небо и красота, но жить все одно в ней будут, в ..опе, то-же вспомнился... 1 1 2 Поделиться этим сообщением Ссылка на сообщение
UnLoaded 313 Опубликовано 31 Августа 2015 (изменено) @НаноБот Все то-же, я в свое время думал об СДК - на кой мне этот монстр, когда у меня есть uACDC ? Потом нормально настроил СДК и совместил с геймдатой, начал в нем работать... Сейчас uACDC использую эпизодически, так, для всяких мелочей. Насчет 5Гб - эмм... не серьезно это, в наше время-то, когда стоковый ПК комплектуют 500-ками... P.S. про анекдот - извиняюсь, никого обидеть не хотел... Изменено 31 Августа 2015 пользователем UnLoaded 1 Поделиться этим сообщением Ссылка на сообщение
UnLoaded 313 Опубликовано 3 Января 2017 (изменено) Попытался восстановить все, связанное с сытостью: чтоб она влияла на здоровье и выносливость ГГ и чтоб этот параметр у артефактов заработал. Вроде все получилось, но кроме одного - не могу восстановить св-во 'satiety' для game_object, чтоб можно было получить скриптово значение db.actor.satiety. В процессе ковыряния выяснил, что обработка самой сытости происходит в CActorCondition::UpdateSatiety()(xrGame\ActorCondition.cpp) и хранится в переменной m_fSatiety, а значение, которое выводится через db.actor.satiety читается из переменной с таким-же именем m_fSatiety класса CEntityCondition(xrGame\EntityCondition.cpp). Там этой переменной в конструкторе класса тупо присваивается значение m_fSatiety = 1.f; а затем это значение транслируется ф-цией IC float GetSatiety() const { return m_fSatiety; } этого-же класса. Т.е. в игре значение db.actor.satiety всегда равно 1.0. Подскажите как эти значения "поженить", не могу разобраться пока, как эти классы между собой взаимодействуют. Изменено 3 Января 2017 пользователем UnLoaded Поделиться этим сообщением Ссылка на сообщение
UnLoaded 313 Опубликовано 4 Января 2017 (изменено) С чего Вы взяли, что это значение всегда равно 1.0? Проблема решена, а дело было в том, что в CActorCondition(xrGame\ActorCondition.h) было объявление переменной float m_fSatiety;, которое перекрывало доступ к такой-же переменной класса CEntityCondition(xrGame\EntityCondition.h). Следовательно, всегда читалось не измененное значение этой переменной. Убрал m_fSatiety из CActorCondition - и все заработало. Теперь следующая проблема: пытаюсь добавить в движок новый инвентарный объект. Решил делать по подобию броников, и пошел от class_registrator.script поиском. Дошел до класса class CCustomOutfit: public CInventoryItemObject..., который видимо является базовым классом для всех остальных броников. Собственно создал все новые классы для объекта по образу и подобию. Собственно что-то получилось: предмет можно заспавнить в инвентарь\на местность, можно выбросить\подобрать. Но решил проверить по внимательнее, и обнаружил следующее: в class_registrator.script для объекта прописано cs_register(object_factory, "CNewObjectTest", "se_item.se_newobj", "E_NEW_OBJ", "new_obj_s") в se_item.script добавил по аналогии новый класс, и для проверки в function se_newobj:on_register() поставил выдачу сообщения. И такая-же выдача сообщения уже была добавлена в тот-же метод класса se_outfit. И получилось у меня, что при создании объекта(спавн в инвентарь ГГ) у меня сообщение приходит из класса se_outfit ! Подумал сразу, что где-то ошибся, когда копипастил из классов броников в новые классы, перепроверил все 2 раза - нет, все нормально, путаницы нигде нет. Собственно нужна подсказка, куда смотреть, что проверять ? Изменено 4 Января 2017 пользователем UnLoaded 1 Поделиться этим сообщением Ссылка на сообщение
UnLoaded 313 Опубликовано 4 Января 2017 Иначе такого быть не может) Верю... Может, кто нить, кто уже успешно добавлял новый объект в движок, накидает цепочку действий ? Я бы сверился, вдруг что увижу... Поделиться этим сообщением Ссылка на сообщение
UnLoaded 313 Опубликовано 5 Января 2017 (изменено) Сделал список моих действий по добавлению объекта в игру, может увидит кто ошибку: в class_registrator.script cs_register(object_factory, "CNewObjectTest", "se_item.se_newobj", ("E_NEWOBJ"), "new_obj_s") в se_item.script class "se_newobj" (cse_alife_item_custom_newobj) function se_newobj:__init(section) super(section) end ..... далее все как у других классов в bind_newobj.script function init(obj) local new_binder = newobj_binder(obj) obj:bind_object(new_binder) end class "newobj_binder" (object_binder) function newobj_binder:__init(obj) super(obj) ...... end ..... далее все как у других классов в конфиге предмета: [newobj_base] GroupControlSection = spawn_group discovery_dependency = class = E_NEWOBJ cform = skeleton full_icon_name = npc_icon_newobj slot = 11 script_binding = bind_newobj.init additional_inventory_weight = 0 additional_inventory_weight2 = 0 ;---------------------------- [newobj_test1]:newobj_base .... далее все как обычно Теперь движок: файл xrGame\object_factory_register.cpp # include "NewObjectTest.h" .... ADD(CNewObjectTest, CSE_ALifeItemNewObjectTest, CLSID_E_NEWOBJ, "new_obj"); .... ADD(CNewObjectTest, CSE_ALifeItemNewObjectTest, TEXT2CLSID("E_NEWOBJ"), "new_obj_s"); файл xrGame\clsid_game.h #define CLSID_E_NEWOBJ MK_CLSID('E','Q','_','N','E','W','O','B') файл xrGame\xrServer_Objects_ALife_Items.h SERVER_ENTITY_DECLARE_BEGIN( CSE_ALifeItemNewObjectTest, CSE_ALifeItem) u32 m_ef_equipment_type; CSE_ALifeItemNewObjectTest(LPCSTR caSection); virtual ~ CSE_ALifeItemNewObjectTest(); virtual u32 ef_equipment_type() const; virtual BOOL Net_Relevant(); SERVER_ENTITY_DECLARE_END add_to_type_list( CSE_ALifeItemNewObjectTest) #define script_type_list save_type_list( CSE_ALifeItemNewObjectTest) файл xrGame\xrServer_Objects_ALife_Items.cpp CSE_ALifeItemNewObjectTest::CSE_ALifeItemNewObjectTest(LPCSTR caSection) : CSE_ALifeItem(caSection) { m_ef_equipment_type = pSettings->r_u32(caSection, "ef_equipment_type"); } CSE_ALifeItemNewObjectTest::~CSE_ALifeItemNewObjectTest() { } .... далее все как у других классов файл xrGame\xrServer_Objects_ALife_Items_script2.cpp void CSE_ALifeItemNewObjectTest::script_register(lua_State *L) { module(L)[ luabind_class_item1( CSE_ALifeItemNewObjectTest, "cse_alife_item_custom_newobj", CSE_ALifeItem ) ]; } далее уже класс CNewObjectTest, но его весь приводить не буду, много там тексту - содран с класса броников, что не нужно убрано, оставлено пока основное. Для теста добавлял вывод сообщения в лог в конструкторы CSE_ALifeItemNewObjectTest и CNewObjectTest, и соответственно в такие-же классы броников. При создании объекта(спавн в инв. ГГ) - в логе сообщения из классов броников, а из нового класса нет. При этом объект можно выбросить и снова взять, вылетов вроде нет. Изменено 5 Января 2017 пользователем UnLoaded Поделиться этим сообщением Ссылка на сообщение
UnLoaded 313 Опубликовано 5 Января 2017 Кто нить может пояснить работу ф-ции CWeaponMagazined::UnloadMagazine ? Что в ней и как происходит... Поделиться этим сообщением Ссылка на сообщение
UnLoaded 313 Опубликовано 6 Января 2017 нет, там не в этом дело. Оно понятно, вот знать бы в чем ? Уж очень хочется новые предметы в игре... это аппроксимацию изменения здоровья в зависимости от сытости. Давай более простыми словами - что именно хочется ? и перевяжу сытость со многими другими параметрами. С какими ? В исходнике, она и так связана со здоровьем и выносливостью(или сила, как там обозвали). Ну можно еще с кровотечением связать - я не медик, но допускаю что может быть зависимость заживления ран от сытости\голода. Затем эти патроны суются в пачку, имеющуюся в инвентаре, а если там не хватает места - спавнится новая. Воо! А то я не мог догнать, что делает: CWeaponAmmo *l_pA = smart_cast<CWeaponAmmo*>(m_pCurrentInventory->GetAny(l_it->first)); Поделиться этим сообщением Ссылка на сообщение
UnLoaded 313 Опубликовано 6 Января 2017 Подскажите, плз, как имея ID объекта получить его инвентарь, как СInventory(или как правильнее будет). Поделиться этим сообщением Ссылка на сообщение
UnLoaded 313 Опубликовано 8 Января 2017 Бывает иногда такая ситуация, что при открытии инвентаря, оружие не прячется. И затем, при манипуляциях в открытом инвентаре, происходит "самовольная" перезарядка оружия, если оно было разряжено. Если я правильно понимаю, перезарядка происходит по нажатию левой кнопы мыша, что при активном оружии означает выстрел и вызывает перезарядку. Но тогда почему, при последующих, после перезарядки, нажатиях ЛКМ оружие не стреляет ? Или перезарядка происходит по иной причине ? Кто нить пытался разобраться с этим багом на уровне движка(исходников) ? Поделиться этим сообщением Ссылка на сообщение
UnLoaded 313 Опубликовано 9 Февраля 2017 и с какой версии X-Ray extensions эта ф-ция добавлена. Для этого какие-либо extensions не нужны... Поделиться этим сообщением Ссылка на сообщение
UnLoaded 313 Опубликовано 10 Февраля 2017 без необходимиости отлавливать момент открытия инвентаря. А что, это очень "энергозатратная" ф-ция ? Поделиться этим сообщением Ссылка на сообщение
UnLoaded 313 Опубликовано 11 Февраля 2017 без необходимости отлавливать момент открытия инвентаря. А какой смысл в этом ? К примеру у меня для окна инвентаря создается индикатор, отображающий на апдейте некое значение. Какой смысл мне этот индикатор аттачить к скрытому окну инвентаря, да еще и апдейтить его ? запустить из колбека на получение инфопоршня, это, конечно, затратно Если Вы это серьезно - затраты копеечные, какой смысл за них напрягаться... Поделиться этим сообщением Ссылка на сообщение