Перейти к контенту

X-Ray extensions


Malandrinus

Рекомендуемые сообщения

 

 

Нужда: Поймать момент окончания проигрывания анимации

После отыгрыша анимации перезарядки наступит состояние "idle", соответственно в состоянии "reload" взводишь флаг и проверяешь наступление "idle" при взведенном флаге - это и будет окончание перезарядки. У меня такой финт работает, хотя может это не то, что тебе нуно...

Поделиться этим сообщением


Ссылка на сообщение

 

 

set_use_hud_animation_callback -- включает использование колбека на завершение анимации.

Ну тогда это, видимо. Смотри описание и как подключать этот коллбэк к анимации...

Поделиться этим сообщением


Ссылка на сообщение
(изменено)

а потом в maingame_16 в статиках прописал heading="1" и поправил координаты иконок, текста и.т.д. Монитор у меня 16:9 Full HD. Надо бы еще и другие файлы править.

 

Лучше всего вызывать в начале файла, чтобы изменения заработали уже в главном меню.

 

Да, тогда меню имеет правильные пропорции, однако появляются черные полосы по бокам.

 

Как я хочу быть извращенцем - это наверное так приятно и интересно...

 

Не в обиду, но имея уже доступ к исходникам, люди почти десяток постов обсуждают то, как выпрямить на нужный(но не известный никому) угол очередной костыль к ПЫСовским криводелкам, вместо того, чтоб обсудить как эту криводелку исправить раз и на всегда на уровне движка...

Изменено пользователем UnLoaded
  • Не нравится 1
  • Согласен 1

Поделиться этим сообщением


Ссылка на сообщение

 

 

планируется ли на новую платформу перейти?

Это как ремонт эл.проводки в автомобиле: лазишь с тестером, ищешь что-куда: штекерок разъединил - тыловая аккустика заглохла. О! Значит проводочки от штекерка к ней идут. А приходят к штекерку, по логике - от магнитолы.

И совсем другое дело, когда имеется схема принципиальная на эту проводку - глянул, что-куда, прозвонил нужную цепь и исправил по-быстрому.

Какой смысл в бинарных патчах, когда все уже давно и во всю исходники правят и компилят свежие версии двигла ?

 

P.S. Анекдот, на тему глистов которые глянули, что там снаружи - солнце, небо и красота, но жить все одно в ней будут, в ..опе, то-же вспомнился...

  • Нравится 1
  • Не нравится 1
  • Согласен 2

Поделиться этим сообщением


Ссылка на сообщение
(изменено)

@НаноБот

Все то-же, я в свое время думал об СДК - на кой мне этот монстр, когда у меня есть uACDC ? Потом нормально настроил СДК и совместил с геймдатой, начал в нем работать... Сейчас uACDC использую эпизодически, так, для всяких мелочей.

Насчет 5Гб - эмм... не серьезно это, в наше время-то, когда стоковый ПК комплектуют 500-ками...

 

P.S. про анекдот - извиняюсь, никого обидеть не хотел...

Изменено пользователем UnLoaded
  • Согласен 1

Поделиться этим сообщением


Ссылка на сообщение
(изменено)
Попытался восстановить все, связанное с сытостью: чтоб она влияла на здоровье и выносливость ГГ и чтоб этот параметр у артефактов заработал. Вроде все получилось, но кроме одного - не могу восстановить св-во '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. Подскажите как эти значения "поженить", не могу разобраться пока, как эти классы между собой взаимодействуют.

Изменено пользователем UnLoaded

Поделиться этим сообщением


Ссылка на сообщение
(изменено)
С чего Вы взяли, что это значение всегда равно 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 раза - нет, все нормально, путаницы нигде нет. Собственно нужна подсказка, куда смотреть, что проверять ?
Изменено пользователем UnLoaded
  • Нравится 1

Поделиться этим сообщением


Ссылка на сообщение

 

 

Иначе такого быть не может)

Верю...

Может, кто нить, кто уже успешно добавлял новый объект в движок, накидает цепочку действий ? Я бы сверился, вдруг что увижу...

Поделиться этим сообщением


Ссылка на сообщение
(изменено)
Сделал список моих действий по добавлению объекта в игру, может увидит кто ошибку:

в 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, и соответственно в такие-же классы броников. При создании объекта(спавн в инв. ГГ) - в логе сообщения из классов броников, а из нового класса нет. При этом объект можно выбросить и снова взять, вылетов вроде нет.

 

Изменено пользователем UnLoaded

Поделиться этим сообщением


Ссылка на сообщение

Кто нить может пояснить работу ф-ции CWeaponMagazined::UnloadMagazine ? Что в ней и как происходит...

Поделиться этим сообщением


Ссылка на сообщение

 

 

нет, там не в этом дело.

Оно понятно, вот знать бы в чем ? Уж очень хочется новые предметы в игре...

 

 

это аппроксимацию изменения здоровья в зависимости от сытости.

Давай более простыми словами - что именно хочется ?

 

 

и перевяжу сытость со многими другими параметрами.

С какими ? В исходнике, она и так связана со здоровьем и выносливостью(или сила, как там обозвали). Ну можно еще с кровотечением связать - я не медик, но допускаю что может быть зависимость заживления ран от сытости\голода.


 

 

Затем эти патроны суются в пачку, имеющуюся в инвентаре, а если там не хватает места - спавнится новая.

Воо! А то я не мог догнать, что делает:

CWeaponAmmo *l_pA = smart_cast<CWeaponAmmo*>(m_pCurrentInventory->GetAny(l_it->first));

Поделиться этим сообщением


Ссылка на сообщение

Подскажите, плз, как имея ID объекта получить его инвентарь, как СInventory(или как правильнее будет).

Поделиться этим сообщением


Ссылка на сообщение

Бывает иногда такая ситуация, что при открытии инвентаря, оружие не прячется. И затем, при манипуляциях в открытом инвентаре, происходит "самовольная" перезарядка оружия, если оно было разряжено. Если я правильно понимаю, перезарядка происходит по нажатию левой кнопы мыша, что при активном оружии означает выстрел и вызывает перезарядку. Но тогда почему, при последующих, после перезарядки, нажатиях ЛКМ оружие не стреляет ? Или перезарядка происходит по иной причине ? Кто нить пытался разобраться с этим багом на уровне движка(исходников) ?

Поделиться этим сообщением


Ссылка на сообщение

 

 

и с какой версии X-Ray extensions эта ф-ция добавлена.

Для этого какие-либо extensions не нужны...

Поделиться этим сообщением


Ссылка на сообщение

 

 

без необходимиости отлавливать момент открытия инвентаря.

А что, это очень "энергозатратная" ф-ция ?

Поделиться этим сообщением


Ссылка на сообщение

 

 

без необходимости отлавливать момент открытия инвентаря.

А какой смысл в этом ? К примеру у меня для окна инвентаря создается индикатор, отображающий на апдейте некое значение. Какой смысл мне этот индикатор аттачить к скрытому окну инвентаря, да еще и апдейтить его ?

 

 

запустить из колбека на получение инфопоршня, это, конечно, затратно

Если Вы это серьезно - затраты копеечные, какой смысл за них напрягаться...

Поделиться этим сообщением


Ссылка на сообщение
  • Недавно просматривали   0 пользователей

    Ни один зарегистрированный пользователь не просматривает эту страницу.

AMK-Team.ru

×
×
  • Создать...