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

Редактирование движка X-Ray


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

11 часов назад, Zagolski сказал:

непосредственно из секции самой аномалии в конфигах.

Да, точно ! Как-то об этом не подумал.

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

Ссылка на комментарий

Уважаемые знающие, вопрос про серверные объекты.

создаю некий клиентский класс

class CGBox:public CInventoryItemObject

експортирую в скрипты

Скрытый текст

void CGBox::script_register(lua_State *L)
{
	module(L)
		[
			class_<CGBox, CGameObject>("CGBox")
			.def(constructor<>())
		];
}

регистрирую в class_registrator.script

cs_register(object_factory, "CGBox", "se_gbox.se_gbox", "CL_GBOX_S", "game_box_s")

сам серверный скриптовый класс

class "se_gbox"    (cse_alife_item)

Так вот вопросы -

1) почему у меня для итема данного класса (CL_GBOX_S) в упор не хотят вызываться методы on_unregister/on_register/keep_saved_data_anyway/on_spawn ? при этом __init/STATE_Read/STATE_Write вызываются.

2) как в биндере объекта (object_binder) из скриптов "увидеть" переход offline/online? Для этого же объекта почему то из биндера не вызываются методы net_export/net_import. При переходе в офлайн вызывается net_destroy, но он же вызывается и при обычном release()

Благодарю!

p.s. зачем все это - дабы в момент перехода в оффлайн сохранить данные клиентского скриптового объекта в серверный, при онлайн - обратно.

Изменено пользователем Winsor
Ссылка на комментарий

OnUnloaded. В ЧН и ЗП радиоактивные зоны урон тоже через m_eHitTypeBlowout наносят. А в ТЧ многое не так как нужно сделано...

 

Winsor. Для ТЧ делаешь? Если для ТЧ, то вешай сразу на движковый класс, который в clsid определен.

Изменено пользователем Zagolski
Ссылка на комментарий
46 минут назад, Zagolski сказал:

то вешай сразу на движковый класс

что именно вешать? почему то из скриптового движкового класса не вызываются методы нужные... или я немного не понял Ваш ответ.

 

p.s. так же выяснил что, если класс наследован от CInventoryitemObject и лежит в инвентаре актора - в онлайн он не переводиться (т.е. для него не вызываются движковый метод CSE_ALifeDynamicObject::add_online)

Изменено пользователем Winsor
Ссылка на комментарий

Не нужно ничего в скриптах регистрировать никаких классов. В движке в clsid_game.h новый класс регистрируй как какой-нибудь O_GBOX, на него в игре свой предмет и цепляй. В ТЧ для большинства так нужно делать.

 

upd. А если скриптовые классы создавать, то да, половина глючить начинает. То в онлайн не переводится, то нет-пакеты не читаются. Но в ЧН/ЗП все с этим корректно.

Изменено пользователем Zagolski
Ссылка на комментарий
3 минуты назад, Zagolski сказал:

Не нужно ничего в скриптах регистрировать никаких классов. В движке в clsid_game.h новый класс регистрируй как какой-нибудь O_GBOX, на него в игре свой предмет и цепляй. В ТЧ для большинства так нужно делать.

До определенного момента хватало биндера (object_binder). Но приспичило мне сохранять некие данные в нетпакете класса. save/load работают , но если выбросить такой предмет на землю - то при переходе offline/online методы save/load не вызываются. т.е. задача именно из скриптов увидеть этот переход.

Ссылка на комментарий

В ЧН/ЗП вызывается can_switch_online для этого дела. А в ТЧ лучше юзать нет-пакет от Артоса, взаимодействовать им напрямую с движковым классом. Я таким вариантом на ТЧ и пользуюсь, потому как тоже встречал проблемы с переходом в онлайн объектов на скриптовых классах. Не работают они корректно на ТЧ. Особо глубоко не разбирался почему, плюнул на них.

Изменено пользователем Zagolski
  • Спасибо 1
Ссылка на комментарий

Какая-то полная печаль и уныние:(.

 

16 часов назад, UnLoaded сказал:

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

Я год назад об этом сам спрашивал, и сам же потом и отвечал, поиском например можно было и найти, и ты уже даже не второй с такими вопросами. Потому-что у зоны радиации другая механика работы, она не хитует, а накапливает в акторе радиацию, т.е. непосредственно не "бьет" (хотя и проходит все этапы кроме сигнала, поэтому, например, броники от радиации защищают нормально), поэтому она и в хит-коллбеке не отрабатывает, можешь сам посмотреть. Потом уже сам апдейт начинает уменьшать здоровье, статик в игре о опасной радиации берется ведь не от того, какой величины заражение в той зоне, в которой ты находишься, что логически кстати тоже неверно и надо переделывать.

 

@Winsor по первому вопросу текстом не знаю как быстро описать.

 

Только что, Winsor сказал:

при переходе offline/online методы save/load не вызываются. т.е. задача именно из скриптов увидеть этот переход.

Мое хранилище умеет это делать (различать факт того, когда объект удален, от факта, когда объект просто ушел в оффлайн) , пример использования можешь в m_items.script посмотреть. Подробнее писал тут.

 

1 час назад, Zagolski сказал:

А в ТЧ многое не так как нужно сделано...

Перечисли несколько примеров, если не трудно. И вот здесь, что конкретно не так?

 


 

И мой риторический вопрос, сообщения (очередность) хитов никто не переделывал? Косяк вроде известный, особенно после личного осознания. У меня проблем нет, просто интересно альтернативные варианты посмотреть. И еще, количество потоков никто не сокращал (после упрощения клиент-серверной фиесты)? Какие проблемы были, как решали?

 

 

  • Спасибо 1
Ссылка на комментарий
Только что, Карлан сказал:

И вот здесь, что конкретно не так?

Конкретно тут может и так, после того как ты по полочкам все разложил. Касаемо вообще аномалий, то взять хотя бы частое неразрывание тушек в карусели на ТЧ, когда тело остается крутиться в воздухе.

 

Может кто подскажет, при включении саншафтов на зп-шном рендере R4 на дх11 образуется вот это:

5854e426487dt.jpg

 

Т.е. солнечные лучи сами по себе функционируют корректно, но наделены сверхяркостью в виде чистого белого света, примерно как если смотреть в игре на включенную лампу. На скриншоте показан дверной проем в который светят лучи (слева окно, сверху крыша, скрин снят в помещении). Это движковая трабла скорее всего, потому как шейдеры используются родные зп-шные и без каких-либо модификаций.

И да, на дх10 этой проблемы не наблюдается.

Изменено пользователем Zagolski
Ссылка на комментарий
Только что, Карлан сказал:

И еще, количество потоков никто не сокращал (после упрощения клиент-серверной фиесты)? Какие проблемы были, как решали?

Тут можно поподробнее? Я у себя всю мультиплеерную шнягу повырезал, вот ищу, что еще можно удалить/упростить ненужного для облегчения. Как раз клиент-сервером сейчас занимаюсь. По-хорошему там бы вообще все переделать, от сервер-клиент отказаться, но это уже отдельный разговор.

А ты в Prospectors так и оставил ТЧ-шный вариант сервера или на ЗП переделывал?

Изменено пользователем Zagolski
Ссылка на комментарий

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

Может уже существует подобное?

А еще меня интересует: почему в меню нет "правильных" настроек насыщенности цветовой гаммы?

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

andreyholkin.gif

rod_cccp.gif

 

Ссылка на комментарий
14 часов назад, Дизель сказал:

включать черно-белое изображение

пост процесс, аналогично работе ПНВ. Где то на просторах интернета даже валялся (вроде на сталкерине) файлик с черно-белым постпроцессом.

Ссылка на комментарий
21 час назад, Карлан сказал:

по первому вопросу текстом не знаю как быстро описать

можно не быстро, главное - понять что не так.

21 час назад, Карлан сказал:

Мое хранилище умеет это делать (различать факт того, когда объект удален, от факта, когда объект просто ушел в оффлайн) , пример использования можешь в m_items.script посмотреть.

посмотрел очень внимательно. не увидел ничего, что относилось бы к проверке такого факта. Есть, конечно write_pstor, но она у Вас движковая - мне ничем не поможет. единственное что хоть как то наводит на мыслб о отличии удаляется объект или переходит в офлайн - это local sobj = sim:object(obj:id()). Хотя по коду движка серверный объект всегда удаляется позже клиентского (ну во всяком случае такая очередность удаления объекта и сообщения GE_DESTROY)... Не смог найти... :(

Ссылка на комментарий

@Winsor, да я думал про зелёный постпроцесс, что его можно переделать. Но потом, я подумал, а почему так печально в самом движке с гаммой. Вообще то мне надо цвет вывести из под консоли, значениями от и до (либо да или нет), для меню настроек.

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

andreyholkin.gif

rod_cccp.gif

 

Ссылка на комментарий

Мне нужно скомпилировать mixed xrSE_Factory:

 

7>..\..\xrServerEntities\xrServer_Objects_ALife.cpp(66) : error C3861: 'StrCmpLogicalW': identifier not found
7>..\..\xrServerEntities\xrServer_Objects_ALife.cpp(79) : error C3861: 'StrCmpLogicalW': identifier not found

Корень зла тут: #        include <shlwapi.h>

 

C:\Program Files\Microsoft SDKs\Windows\v6.1\Include\Shlwapi.h

LWSTDAPI_(int) StrCmpLogicalW(__in LPCWSTR psz1, __in LPCWSTR psz2);

 

Что делать и как побороть? Я нуб еще в таких тонкостях. Что ли надо Microsoft SDKs старее?

А причём тут директории 64 бита? Проект 32. Может быть причина, что проект создавался на ХР?

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

andreyholkin.gif

rod_cccp.gif

 

Ссылка на комментарий

Сменил путь на 32битную Microsoft СДК v5.0:

Это пропало:

7>..\..\xrServerEntities\xrServer_Objects_ALife.cpp(66) : error C3861: 'StrCmpLogicalW': identifier not found
7>..\..\xrServerEntities\xrServer_Objects_ALife.cpp(79) : error C3861: 'StrCmpLogicalW': identifier not found

Это вылезло:

7>LINK : fatal error LNK1104: cannot open file '..\..\..\..\intermediate\xrServerEntities\pch_script.obj'

 

 

Причину эту смогу решить - она в косячных путях проекта.

 

Собрал полностью xrAi - были косячные настройки проекта (под ХР).

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

andreyholkin.gif

rod_cccp.gif

 

Ссылка на комментарий

Кто-нибудь правил такую вот траблу в ЗП - когда лутаешь труп или контейнер то итем не переносится в рюкзак а прыгает в тот слот который прописан в конфиге. Или же если наоборот хочешь засунуть оружее для первого слота во второй то оно само прыгает в первый слот если он свободен. Насколько я понял движок просто не выполняет след. net-packet который идёт сразу после перемещения итема от одного владельца к другому.

Ссылка на комментарий
Только что, mortan сказал:

то итем не переносится в рюкзак а прыгает в тот слот который прописан в конфиге

Не знаю при чем тут "след. net-packet", но дело в том, что в движке в обработчике появления у актера предмета(обычно что-то со словами "Take") происходит проверка: "а подходит ли появившийся предмет для какого-либо слота?", и если подходит и слот пуст - предмет туда и устанавливается. Траблой это назвать нельзя, т.к. это сознательно сделанная "фишка".

Ссылка на комментарий

@UnLoaded  тогда почему он не перемещается после в нужный слот? В функции SendEvent_Item2Slot сначала идёт проверка что если у актора нету итема то выполняется move_item_from_to, и уже после должна выполняется отправка пакета GEG_PLAYER_ITEM2SLOT. Но этого не происходит. Где же тут "фишка" если это самая настоящая недоработка? На ориг. игру это не шибко сильно влияет, но если создать какой-нибудь новый внешний контейнер ( скажем так какой-нибудь рюкзак ), то это вызывает определённые проблемы.

Ссылка на комментарий

Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий

Комментарии могут оставлять только зарегистрированные пользователи

Создать аккаунт

Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!

Зарегистрировать новый аккаунт

Войти

Есть аккаунт? Войти.

Войти
  • Недавно просматривали   0 пользователей

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