apostol1999, после запуска успевает переключится в полноэкранный режим или только чёрное окно? И всё - это как, приложение падает или остаётся висеть чёрный экран? А с логом какая проблема?
apostol1999
14.07.2016, 17:38
Цитата(Neo][ @ 14.07.2016, 19:32)
Цитата(apostol1999 @ 14.07.2016, 19:18)
P.S запуск, потом черный экран и все
apostol1999, после запуска успевает переключится в полноэкранный режим или только чёрное окно? И всё - это как, приложение падает или остаётся висеть чёрный экран? А с логом какая проблема?
Запускается, в полноэкранный режим, и просто висит на черном фоне Лог не могу скинуть, потому что сижу с мобилки.. А компа рядом нет
ColR_iT
14.07.2016, 17:56
Neo][, на сколько я помню lua_help - это консольная команда в игре. Мне нужно получить эти данные только при наличии xrGame.dll.
RayTwitty
14.07.2016, 18:48
ColR_iT, ты лучше объясни, что вообще хочешь сделать. Хэлп по всем скриптовым методам?
Пока очевидно только одно - то что ты хочешь, нужно писать с нуля.
mortan
14.07.2016, 19:35
Цитата(Neo][ @ 14.07.2016, 17:00)
mortan, посмотри следующие методы у других объектов: Код virtual void net_Export (NET_Packet& P); virtual void net_Import (NET_Packet& P);
virtual void save (NET_Packet &output_packet); virtual void load (IReader &input_packet);
для того, чтобы понять, что и когда вызывается начни раскручивать отсюда: Код CALifeStorageManager::load CALifeStorageManager::save
спасибо, уже смотрел, часть вопросов отпала, но всё равно есть нюансы: ни у одного из объектов что я смотрел нету сохранения дочерних элементов,сохраняется только родитель. Я тут поковырял всем известный nlc7 и посмотрел как там это сделал товарищ alpet - новый контейнер через объединение двух классов инв бокса и инв предмета,правда там свойства другие, нежели в ЗП, и инв бокс не наследуют прямо все свойства CGameObject. У меня такое не получается из-за конфликта - и инв бокс и инв предмет оба наследуют от CGameObject. Видимо придётся курить ещё раз про наследование и сразу такой вопрос - можно ли как-то перезаписать уже существующие методы у базового класса в дочернем классе?
ColR_iT
14.07.2016, 19:58
RayTwitty, я хочу:
Цитата(ColR_iT @ 12.07.2016, 20:48)
если ли возможность вернуть список всех методов доступных из Lua, сгруппированных по принадлежности к игровым объектам?
Возвращающий хотя бы массив строк (в идеале словарь, кажется тип map или std::pair, в общем любом виде доступном для маршалинга) с именами и сигнатурами методов, которые доступны в скриптах Lua. Саму же функцию ExportMethods я буду вызывать в коде C# посредством DllImport.
RayTwitty
14.07.2016, 20:00
ColR_iT, тогда:
Цитата(RayTwitty @ 14.07.2016, 18:46)
то что ты хочешь, нужно писать с нуля
Neo][
14.07.2016, 21:47
Цитата(ColR_iT @ 14.07.2016, 19:54)
Neo][, на сколько я помню lua_help - это консольная команда в игре. Мне нужно получить эти данные только при наличии xrGame.dll.
ColR_iT, функция в xrGame просто будет мостом к lua_help.
mortan, тут надо смотреть, как это лучше реализовать. Объект будет знать в каком контейнере он находится или контейнер будет знать свои объекты, или всё вместе.
На вскидку наводящие вопросы: как оружие хранит обвесы? Как артефакт попадает на пояс?
Цитата(mortan @ 14.07.2016, 21:33)
Видимо придётся курить ещё раз про наследование и сразу такой вопрос - можно ли как-то перезаписать уже существующие методы у базового класса в дочернем классе?
Кури сразу все основы ООП. Ты говоришь про overriding & hiding, но применяются они для абсолютно разных вещей.
Neo][
14.07.2016, 22:03
apostol1999, какая версия xray? Всётаки глянуть бы в лог. Как вариант можно попробовать оконный режим и разрешение выставь из ряда 4:3
-StalkMen-
14.07.2016, 22:29
ColR_iT, В чём проблема DO IT ? Где подсмотреть уже подсказали.
mortan
14.07.2016, 23:40
Neo][, ну мнеб избавиться от прикола с "ambiguous access of '%name%' "
Flammable
14.07.2016, 23:58
Цитата(ColR_iT @ 14.07.2016, 12:47)
Ещё раз повторюсь с вопросом: мне нужен функция в xrGame.dll вида:
Возвращающий хотя бы массив строк (в идеале словарь, кажется тип map или std::pair, в общем любом виде доступном для маршалинга) с именами и сигнатурами методов, которые доступны в скриптах Lua. Саму же функцию ExportMethods я буду вызывать в коде C# посредством DllImport.
Возможно, вам подойдет вот это. При запуске игры с параметром -dump_bindings весь внутренний скриптовый API экспортируется в текстовый файл в app_data_root.
Neo][
15.07.2016, 13:01
Цитата(mortan @ 15.07.2016, 01:38)
Neo][, ну мнеб избавиться от прикола с "ambiguous access of '%name%' "
mortan, при компиляции чтоли?
mortan
15.07.2016, 14:26
Neo][, да, но я правда уже понял что это и буду переписывать код)Опять же это проблема с наследованием: например "ambiguous access of 'ID' ". Спасибо за советы, жаль не могу плюс в репу поставить)
mortan
17.07.2016, 00:42
разобрался немного - добавил для серверного объекта add_offline\online и теперь содержимое отображается если бросить контейнер на землю. Как бы это теперь сделать для отображения в инвентаре.
RayTwitty
17.07.2016, 01:12
Цитата(mortan @ 09.07.2016, 00:35)
Я тут хочу конт для артов сделать,ибо скриптами не айс.
1) Создай производный класс от CInventoryItem, например CArtContainerItem. 2) Подключи в него CInventoryOwner. 3) Создай новый класс CSE_ArtContainerItem, по аналогии с CSE_InventoryBox. 4) Пропиши обработку CArtContainerItem в CUIInventoryWnd в контекстное меню. 5) Напиши ui-окно и вызывай его из контекстного меню инвентаря. 6) ??? 7) PROFIT!
mortan
17.07.2016, 02:58
RayTwitty, уже всё сделано,прям почти как ты описал) только предметы в контейнере не видны при загрузке игры или смене локации. Добавил add_online\offline от трейдера как я вот выше написал - теперь если конт лежит на земле при загрузке локации,то предметы отображаются нормально.
mortan
17.07.2016, 19:08
мне нужно заставить контейнер при спавне в рюкзаке актора или в другом контейнере спавнить дочерние предметы и выводить их в онлайн\оффлайн)
mortan
18.07.2016, 23:38
вопрос закрыт,я нашёл решение своей проблемы)
Neo][
19.07.2016, 10:35
Цитата(mortan @ 19.07.2016, 01:36)
вопрос закрыт,я нашёл решение своей проблемы)
mortan, поделись с другими, может кто-то ещё что-то подобное захочет реализовать
mortan
19.07.2016, 13:19
Цитата(Neo][ @ 19.07.2016, 10:33)
Цитата(mortan @ 19.07.2016, 01:36)
вопрос закрыт,я нашёл решение своей проблемы)
mortan, поделись с другими, может кто-то ещё что-то подобное захочет реализовать
оказалось что мое решение почти в точности копирует решение товарища alpet'a,вот теперь когда я знаю что делать я быстро нашёл такую же правку у него). Достаточно в паре файлов добавить две строки в фунцию:
ALife::OBJECT_IT I = object->children.begin(); ALife::OBJECT_IT E = object->children.end(); for ( ; I != E; ++I) { // this was for the car only // if (*I == ai().alife().graph().actor()->ID) // continue; // CSE_ALifeDynamicObject *l_tpALifeDynamicObject = ai().alife().objects().object(*I); CSE_ALifeInventoryItem *l_tpALifeInventoryItem = smart_cast<CSE_ALifeInventoryItem*>(l_tpALifeDynamicObject); R_ASSERT2 (l_tpALifeInventoryItem,"Non inventory item object has parent?!"); l_tpALifeInventoryItem->base()->s_flags.or(M_SPAWN_UPDATE); CSE_Abstract *l_tpAbstract = smart_cast<CSE_Abstract*>(l_tpALifeInventoryItem); object->alife().server().entity_Destroy(l_tpAbstract);
ещё нужно и оффлайн дописать по аналогии, правда работает и без этого, но лучше устранить потенциальную проблему чем искать и фиксить её потом.
mortan
20.07.2016, 01:11
можно как-то вывести значение fov'a в виде текста в настройках? Я прикрутил туда для него настройку,хотелось бы видеть текущее значение когда двигаешь ползунок.
RayTwitty
20.07.2016, 01:20
mortan,
Код
st:SetText(get_console():get_float("fov"))
где st - статик, в который надо выводить.
mortan
20.07.2016, 01:35
RayTwitty, ай спасибо тебе,добрый молодец)А есть ли коллбэк для изменения значения TrackBar?
RayTwitty
20.07.2016, 01:40
mortan, вроде бы есть, смотри перечисление ui_events. Или можно просто на апдейте окна.
mortan
20.07.2016, 03:05
RayTwitty, для него вызывается BUTTON_CLICKED,щас нашёл.Только как мне вызвать этот статик в другом файле?
function options_dialog:OnFovChange() fov_cap:SetText(get_console():get_float("fov")) end
и при изменении ползунка игра валится с ошибкой gamedata\scripts\ui_mm_opt_main.script:167: attempt to index global 'fov_cap' (a nil value) Что я делаю не так?
RayTwitty
20.07.2016, 03:07
Цитата(mortan @ 20.07.2016, 03:03)
Только как мне вызвать этот статик в другом файле?
Там есть примеры работы с элементами окна в разных файлах.
Цитата(mortan @ 20.07.2016, 03:03)
Что я делаю не так?
Написано же
Цитата
attempt to index global 'fov_cap' (a nil value)
mortan
20.07.2016, 03:21
Цитата(RayTwitty @ 20.07.2016, 03:05)
Цитата(mortan @ 20.07.2016, 03:03)
Только как мне вызвать этот статик в другом файле?
Там есть примеры работы с элементами окна в разных файлах.
Цитата(mortan @ 20.07.2016, 03:03)
Что я делаю не так?
Написано же
Цитата
attempt to index global 'fov_cap' (a nil value)
я так и не понял как статик из первого вызвать. Всё равно nil value )
-StalkMen-
20.07.2016, 13:51
mortan, fov_cap нигде не объявлен/не присвоено значение.
Можно его в self положить.
macron
20.07.2016, 14:31
Как у вас всё сложно. ЗЫ:
RayTwitty
20.07.2016, 14:54
Цитата(macron @ 20.07.2016, 14:29)
Как у вас всё сложно. ЗЫ:
Шкала под трекбаром одним статиком сделана или под каждое число свой?
macron
20.07.2016, 15:09
Сначала была только шкала. А цифры, каждая отдельно подгонялись и оформлялись.
RayTwitty
20.07.2016, 15:26
Цитата(macron @ 20.07.2016, 15:07)
А цифры, каждая отдельно подгонялись и оформлялись.
Не знаю, что значит "подгонялись и оформлялись", но если сделано через один статик, то у меня плохие новости - смени разрешение
macron
20.07.2016, 16:44
Цитата(RayTwitty @ 20.07.2016, 16:24)
сделано через один статик
Через разные.
Цитата(RayTwitty @ 20.07.2016, 16:24)
что значит "подгонялись и оформлялись",
Это когда вводишь определенный FOV, а потом под это положение бегунка подстраиваешь координаты текста с цифрами в ui_mm_opt.xml.
mortan
20.07.2016, 17:15
macron, , а нельзя ли в trackbar настроить шаг в скриптах?А то при движении ползунка меняются и тысячные знаки) RayTwitty,я уже сделал то что хотел,спасибо за помощь,правда для статика ты не указал что нужно ещё TextControl() писать перед SetText)вот что получилось:
картинка
картинка 2
RayTwitty
20.07.2016, 17:36
Цитата(mortan @ 20.07.2016, 17:13)
правда для статика ты не указал что нужно ещё TextControl() писать перед SetText
Это ты не указал, что работаешь на ЗП В ТЧ никаких TextControl нет.
Цитата(mortan @ 20.07.2016, 17:13)
а нельзя ли в trackbar настроить шаг в скриптах?
В xml есть атрибут step (если я правильно помню). В скрипты его вроде не экспортировали.
З.Ы. возможно, чтобы не округлять до десятых, можно попробовать заюзать get_string вместо get_float. Должен выдать по идее то, что пишет в консоле при вызове.
З.Ы. возможно, чтобы не округлять до десятых, можно попробовать заюзать get_string вместо get_float. Должен выдать по идее то, что пишет в консоле при вызове.
в консоли тоже пишут тысячные доли если значение меняешь через trackbar. P.S. step в зп криво работает
Winsor
21.07.2016, 11:35
Уважаемые, помогите разобраться с проблемой при чтении нетпакетов итемов... 1.0007. Для парсинга нетпакета использую m_netpk. cse_alife_inventory_item - 99% процентов этих итемов , которые лежат в инвентори у ГГ - имеют num_items=0. т.е. полей ph_position, ph_rotation и иже с ними не имеют. в движке это поле заполняется только для итемов, у которых нет парента. но у некоторого процента итемов из инвентори случайным образом (причем, неважно когда пытаюсь прочитать нетпакет - сразу после создания, спустя сейв/лоад) num_items==255 (либо 233,237) , и при попытке прочитать из скрипта update часть нетпакета log("before "..prop.name.." "..prop.type) ret.upd[prop.name] = this["_r_"..prop.type](pk, prop.ver) log("after "..prop.name.." "..prop.type.." "..ret.upd[prop.name])
кусок лога
нормальный итем: m_netpk:before num_items h8 m_netpk:after num_items h8 0 ненормальный итем (отличается от предыдущего только визуалом): m_netpk:before num_items h8 m_netpk:after num_items h8 237 m_netpk:before ph_position f32v3 m_netpk:after ph_position f32v3 79.319160461426 -0.073549270629883 462.92010498047 m_netpk:before ph_rotation q8v16 далее - чтение за границы
получаем чтение за границу нетпакета, так как почему то num_items!=0 а полей ph_position - нет, но при этом парент у итема есть. как такое может быть? само собой - значениям в поле ph_position уже доверять нельзя. да и откуда оно у итема в инвенторе актора? p.s. грешу, конечно, на m_netpk - поделитесь, пожалуйста, информацией, кто использует альтернативные парсеры... очень не хочется это все с нуля писать. и очень не хочется думать на какой нибуть труднонаходимый глюк движка... Благодарю за информацию.
mortan
22.07.2016, 02:13
Winsor, можете подсказать а зачем вообще нужно читать нетпакет,разве это задача сервера/игры? Ради его изменения? Я просто не знаю практического применения этому.
mortan
22.07.2016, 14:52
понял,вопрос снимается
mortan
26.07.2016, 15:59
такой вопрос - можно ли через движок поменять значение в xml файле?Интересует именно actor_menu.xml,хочу менять кол-во ячеек в dragdrop'ах в зависимости от кое-каких условий.
Giperion
26.07.2016, 18:58
Цитата(mortan @ 26.07.2016, 15:57)
такой вопрос - можно ли через движок поменять значение в xml файле?
Через движок можно уж если не все в системе, то по крайней мере многое. А уж какое то там значение - тем более. В движке есть класс сериализации xml, щас не вспомню правда.
RayTwitty
26.07.2016, 19:34
Цитата(mortan @ 26.07.2016, 15:57)
можно ли через движок поменять значение в xml файле?Интересует именно actor_menu.xml,хочу менять кол-во ячеек в dragdrop'ах в зависимости от кое-каких условий.
Конечно, модифицируй CUIDragDropList (примерное название класса) на динамическое изменение.
mortan
26.07.2016, 19:49
RayTwitty, спасибо,так и сделал,но для этого пришлось убрать из xml строки с ячейками,потом уже в игре эти параметры считываются из конфига предмета)
Vampir35
27.07.2016, 21:50
Подскажите пожалуйста, как экспортировать иммунитеты для инвентарных предметов, чтобы можно было изменять их из скриптов. Или ткните куда посмотреть. Потому как с экспортом всего остального, чего не было на репозитории (sprint_allowed например) я уже разобрался. ТЧ, репозиторий xp-dev
RayTwitty, ну, если делал копипаст и ничего не потерял, и не добавил, тогда ты используешь другую версию студии/настройки компилятора, нежели автор этих строк. В си объявлять переменные можно только в начале блока, попробуй исправить так:
Код
case 'b': { int res = 0; luaL_checktype(L, arg, LUA_TBOOLEAN); res = lua_toboolean(L, arg); sprintf(buff, "%s", res ? "true" : "false"); break; }
1001v
29.07.2016, 10:41
Цитата(Neo][ @ 29.07.2016, 10:20)
В си объявлять переменные можно только в начале блока, попробуй исправить так:
Только в С89, по-моему.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.