TEDERIs

Members
  • Content Count

    152
  • Joined

  • Last visited

  • Days Won

    1

Everything posted by TEDERIs

  1. Доброго времени суток. Секрет здесь в модели персонажа. Перед тем как попасть в игру, моделька снабжается весами для каждой вершины и направляющими векторами. Затем вектора пакуются во float и помещаются в дополнительные UV каналы. В шейдере вектор распаковывается и перемножается на вес. Дальше уже заурядное перемножение на юниформ константу. Тело персонажа делится на 6 зон морфинга, каждая зона утилизирует однин из двух доп. UV каналов, и твикается доп. константами чтобы добавить морфинг для определённых частей тела.
  2. Нет, на данный момент такой возможности нет
  3. Любой транспорт, включая рельсовый, может приобрести любого вида движение с помощью функции setElementPosition. Достаточно определить пути, и покадрово обновлять положение транспорта в событии onClientPreRender. Аргумент dt этого события поможет сделать движение одинаковым вне зависимости от частоты кадров.
  4. A simple mask shader should help you. Just create an arrow texture and use it along with the mask shader. An example of this shader you can find at Shader_examples
  5. Самое простое - рисовать сектора при помощи текстуры. Но это может дать неудовлетворительные результаты из-за растрового характера текстуры, будет сложно масштабировать и варьировать кол-во секторов. Поэтому шейдер в самом деле хороший выбор. Но что имеется в виду под прозрачностью? Судя по скриншоту здесь наверное имелось в виду размытие фона. Для этих целей используется screen-space шейдер на подобии blur. Поверх блюра уже рисуется колесо выбора оружия.
  6. Дерево элементов - это простейшая структура, которая напоминает собой настоящее дерево с ветвями. Места объединения ветвей называют узлами или нодами. Root - это нематериальный узел, который просто стоит выше всех в дереве. Ниже идут узлы игроков и ресурсов. Дерево очень полезно при вызове определенных событий. Например, если мы хотим, чтобы событие распространялось на все элементы дерева - нужно просто вызвать triggerEvent и указать root или getRootElement(). При этом событие пройдет по всем ветвям и узлам, дав о себе знать всем без исключения нодам. Но представим ситуацию, что мы хотим затронуть лишь определенные узлы, начиная с некоторого. Что для этого нужно сделать? Верно, расположить эти узлы под каким-то другим узлом и вызвать triggerEvent, указав этот самый узел. Событие будет распространяться только по нисходящим дочерним узлам. Функция getElementRoot() возвращает root элемент. То есть, можно сказать root = getElementRoot(), они идентичны, и переменная root нужна просто для удобства. Точно так же обстоят дела с getResourceElement(getThisResource()), которая идентична resourceRoot. Если мы хотим, чтобы событие затронуло только элементы под узлом resourceRoot - мы вызываем triggerEvent("onSomeEvent", resourceRoot, ...). Если заходить дальше, то вызов triggerEvent так же затрагивает узлы выше. То есть, triggerEvent("onSomeEvent", player, ... ) так же даст о себе знать root элементу. По поводу того, что такое дерево можно более подробно поискать в интернетах.
  7. TEDERIs

    MTA ASE Parser

    Hi everyone! I have made a simple parser of ASE bytecode to convert it to JSON format. Maybe it'll be useful for someone else. The program automatically downloads bytecode and writes it to readable JSON text plain. Mainly it was developed for Linux purposes, but may be simply built under the Windows. https://github.com/tederis/ase2json
  8. I think a shader is the best choice. Here you can find lots of examples.
  9. Если ElementData только локально на клиенте, то это не окажет никакого влияния на сервер. Если ElementData используется для синхронизации между клиентом и сервером, то здесь есть два фактора, влияющих на производительность: Частота изменения ElementData. Чем чаще вызывается setElementData, тем хуже. Длина имени ElementData и объем синхронизируемых данных. Чем длина имени больше и чем объем данных больше, тем хуже.
  10. I didn't use the default semantics because they provide bone-relative information only. It's not enough for appropriate morphing. Instead, I have baked morphing normals into vertex elements(normals and other) as a scalar for each morphing feature. Thus for three morphing features is required three floats or one vector(normal, for instance). In an example for the breast from the video above, I packed the normals to a scalar and calculate attenuation weights. At a shader side, these normals should be unpacked and multiplied by weights. In this way, it's possible to create universal morphing regardless of its complexity.
  11. So, I have released the resource from the video. There is a complex login system that includes the logo, rain rendering, and custom UI example. I hope it helps you. https://github.com/tederis/mta-resources/tree/master/sp_login
  12. I have added the new resource that may be helpful for creating your own login system. It's also an example for using the depth-buffer. https://github.com/tederis/mta-resources/tree/master/sp_login
  13. Hello everyone. About 3 years ago I have worked on some project and got experiments on skin morphing. The video below shows some results in that: MTA gives all opportunities for creating a morphing for a face, body or something else. I hope in the future someone makes a full-customizable character.
  14. Just use the code above to render your object with any contrast color. Then write simple post-processing shader, that finds the contrast color, converts it to black-n-white and delimits your object from a background. In case of the depth buffer, you might use the example from wiki . It probably also will require hiding of all world objects. For this is possible to use vertex shader that moves all vertices far away. By the way, a sample of the second approach you can watch here
  15. What about the post-processing? It is possible to color some object with world-shader and then just cut off all the rest by post-processing. Or use the depth buffer to remove a background.
  16. Just checking a connection status to determine whether a server is connected or not. It's very bad coding standard, indeed.
  17. You can use the example of my obfuscation system: https://github.com/tederis/gta-obfuscation. It's may be used in different ways include MTA integration.
  18. Для таких целей можно использовать мой пример обфускатора: https://github.com/tederis/gta-obfuscation
  19. There are plenty approaches to do it. You may use server-side text via the textCreateDisplay function. Or client-side dxDrawText to use DirectX opportunities. Moreover, you can you GUI elements via the guiCreateLabel. You should learn all about them and select the best one for you.
  20. I have tried to reproduce the issue, but all is fine. It seems like a bug. I faced similar issues in the past and server restarting only helped me.
  21. Hello, are you alone on the server when this issue appears?
  22. All is well http://funkyimg.com/view/2GxoZ
  23. Okay, I have found the problem. I've just rebuilt the TXD by TXD Workshop 5.0.
  24. @Cyber14, Nope, there was a message about it, but a download isn't started.