Jump to content

Malboro

Members
  • Posts

    60
  • Joined

  • Last visited

  • Days Won

    2

Posts posted by Malboro

  1. Всем привет!

    Решил записать видос на тему моддинга, так как поступало много вопросов по этому поводу. Это вступительная часть из планируемой серии. Постараюсь развивать эту тему пока есть время. Хотелось бы выразить благодарность автору  данного сайта за проделанную работу, без него я бы сам не решился залезть в эти дебри 😁 . Все ссылки на программы и скрипты ищите под видео:

     

     

    Если данная темя интересна ставьте лайк под видео, или пишите в комментария на какую тему стоит запилить гайд. Приношу извинения за звук. Всем спасибо и пока.

    Сайт с тутерами << клаац

    CodeWalker

    OpenIV

    Arhcivefix

    Archevefix с ключами

    DLC Creator

    YTYP Generator

    GIMS Map Helper (3dmax script)

    GIMS Evo manual install (3dmax script)

     

    • Like 1
  2. В 13.06.2019 в 15:00, fllimon сказал:

    Добрый день, столкнулся с проблемкой, при сборке клиента, происходит выход из команды с кодом 4. Подскажите в чем может быть проблема?

    https://imgur.com/a/KSAigvX

    Ну я так полагаю проблема уже решена? 😎

  3. 15 минут назад, Movis сказал:

    Помогите пожалуйста такая проблема заполняю Логин и пароль пишет такую проблему что Socialclub с которого вы подключены не совпадает с тем который привязан к аккаунту , что делать?

    Аккаунт SocialClub(gta) с которого была произведена регистрация не совпадает с тем  с которого ты заходишь. Пиши на форум или  группу своего сервера, этот вопрос решается на их уровне

  4. 1 час назад, lopatindd сказал:

    Привет, у меня вопрос, сделал все как на видео, не загружается моя DLC и все, нет объектов на карте. А взял файл формата ymap из интернета, и вставил его так как в твоем уроке, все заработало... Можешь что подсказать

    И еще вопрос, Знаешь как подгружать свои тектуры и модели? Есть множество DLC в интернете но множество из них использует map builder (как я понял как раз из этого dlc и берутся модели стен и текстуры к ним.) Вот у меня и возник вопрос, есть ли возможность как-то добавить эти тектуры на сервер ну и не плохо было бы их добавить в CodeWalker.

    Возможно проблема в том что не все объекты можно установить. Обычно несколько моделей собирается в один props и тогда он уже устанавливается, но если для модели не создан props то  ее нельзя установить. Нету пока времени разбираться с этим, как дойду до маппинга в проекте выкачу что-нибудь по этому поводу. 

    Что касаемо объектов из DLC то нужно установить его в папку с игрой и CodeWalker должен его подхватить. 

     

     

     

    • Like 2
  5.  

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

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

    В cef точно не выйдет. А вот для NUI наверняка есть возможность. Но я не в курсе. Думаю что копать нужно в сторону скейлформ.

  6. 41 минуту назад, HEROofMAIDAN сказал:

    Каждый браузер озу жрет, они так экономят её, засовывая всё в 1 файл. Хотя по сути можно удалять браузер, когда он уже не нужен, но при создании микрофриз идет пока браузер создается. Короче с точки зрения игрока всё в 1 файле будет лучше, но для разработки это такое себе

    Для разработки ничего плохого тоже нет, особенно если использовать фреймворк

  7. Всем привет!

    Рассмотрим пример как сделать свой  простенький KeyHandler Для этого давайте создадим папку Inputs и в ней два файла.

    Можно скачать по ссылке на Git

    Создадим класс для кнопки:

    namespace YourNamespace.Inputs
    {   
      //создадим список enum с кодами кнопок
      enum KeyCodes
        {
            released = -1,
            F1 = 112, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12,
            Key_0 = 48, Key_1, Key_2, Key_3, Key_4, Key_5, Key_6, Key_7, Key_8, Key_9,
            A = 65, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z
        } 
      	//объявим делегат для функций обратного вызова
        public delegate void KeyActions();
      	//Сам класс
        class KeyModel
        {
          	//тут будет храниться код кнопки из нашего списка 
            public KeyCodes KeyCode;
          	//тут функция которая будет выполнятся по нажатии кнопки
            public KeyActions OnPress;
          	 //тут функция которая будет выполнятся при отпускании кнопки
            public KeyActions OnRelease;
          	//объявим конструктор класса
            public KeyModel(KeyCodes keyCode, KeyActions onPress, KeyActions onRelease)
            {
                KeyCode = keyCode;
                OnPress = onPress;
                OnRelease = onRelease;
            }  
        }
    }

    И непосредственно сам обработчик событий

    using RAGE;
    using System.Collections.Generic;
    
    namespace YourNamespace.Inputs
    {
       	//сам класс унаследованный от RAGE.Events.Script
        class Key: Events.Script
        {
          	//конструктор класса 
            Key()
            {
              	//подпишемся на событие Tick для вызова обработчика кждый кадр
                Events.Tick += Handler;
            }
          	//объявим некоторые переменные 
          	//тут создадим экземпляр ненажатой кнопки
            private static KeyModel Releazed = new KeyModel(KeyCodes.released, null, null);
          	//тут будем хранить текущее состояние кнопок, на начальном этапе присвоим ссылку на Releazed(Ни одна из кнопок не нажата)
            private static KeyModel Pressed = Releazed;
          	//создадим список где будем хранить все наши конфигурации кнопок
            private static List<KeyModel> InputList = new List<KeyModel>();
    		
          	//сам метод обработчика, вызывается каждый кадр
            private static void Handler(List<Events.TickNametagData> nametags)
            {
              	//проверяем не занят ли обработчик другим действием, если нет вызываем метод  CheckPressed
              	if (Pressed.KeyCode == KeyCodes.released) CheckPressed();
              	//если он занят в данный момент - ждем когда будет отпущена предыдущая кнопка
                else if (!Input.IsDown((int)Pressed.KeyCode))
                {
                  	//проверяем назначен ли метод на событие отпускания кнопки, если есть - выполняем
                    if (Pressed.OnRelease != null)  Pressed.OnRelease.Invoke();
                  	//сообщаем обработчику что он свободен
                    Pressed = Releazed;
                };           
            }
    		
          	//метод для проверки нажата ли какая либо клавиша из списка 
            private static void CheckPressed()
            {
              	//проходим по всему списку
                InputList.ForEach(i =>
                {
                  	//если нажата какая-то клавиша то
                    if (Input.IsDown((int)i.KeyCode))
                    {
                      	//назначаем ее обработчику сообщая ему что он занят в данный момент
                        Pressed = i;
                      	//проверяем назначен ли метод на событие нажатия кнопки, если есть - выполняем
                        if (i.OnPress != null) i.OnPress.Invoke();
                      	//выходим из метода
                        return;
                    }
                });           
            }
    		//метод для добавления кнопки в список принимает теже параметры что и класс KeyModel
            public static void Bind(KeyCodes keyCode, KeyActions onPress, KeyActions onRelease = null) {
              	//проверяем не назначены ли уже события для эой кнопки 
                if (InputList.Exists(i => i.KeyCode == keyCode))
                {
                  	//если назначены получаем объект данной кнопки
                    KeyModel Input = InputList.Find(i => i.KeyCode == keyCode);
                  	//и подписываемся на его события
                    Input.OnPress += onPress;
                    Input.OnRelease += onRelease;
                }
              	//если нет то просто создаем новый объект
                else InputList.Add(new KeyModel(keyCode, onPress, onRelease));
            }
          	// метод удаления кнопки из списка
            public static void Unbind(KeyCodes keyCode)
            {
               	//тут просто находим объект с данным кодом в списке и удаляем
                if (InputList.Exists(i => i.KeyCode == keyCode))
                {
                    KeyModel Input = InputList.Find(i => i.KeyCode == keyCode);
                    InputList.Remove(Input);
                }
            }
        }
    }

    Ну и конечно же пример добавляем или удаляем кнопку из списка при помощи методов Key.Bind() и Key.Unbind() предварительно подключив пространство имен YourNamespace.Inputs

    using RAGE;
    using YourNamespace.Inputs;
    
    namespace YourNamespace
    {
      	//к примеру при старте клиента
        class ResourceStart: Events.Script
        {
    		public ResourceStart(){
                //назначим обработчик для кнопки Е с методами при нажатии (OnKeyPress) и отпуске(OnKeyRelease) кнопки
            	Key.Bind(KeyCodes.E, OnKeyPress, OnKeyRelease);
            }
          
          	//это метод который будет вызван при нажатии
          	public static void OnKeyPress(){
               Chat.Output("check on click");
            }
          	//это метод который будет вызван при отпускании
          	public static void OnKeyRelease(){
              	Chat.Output("check on release");
            }
        }
    }

    Надеюсь кому-то было полезным всем пока

    • Like 3
  8. 20 минут назад, HEROofMAIDAN сказал:

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

    Стоит так делать вообще или другой вариант есть?

    Ничего страшного, ты просто подписываешься на событие. Серверу это не повредит хоть в каждом файле можно подписываться на одно и то же событие.

  9. Я бы просто посоветовал создать свой экземпляр Cef, я полагаю вы все равно будете использовать это для hud, и там создать свой собственный чат со своими методами, и через них уже выводить сообщения

     

  10. 25 минут назад, Thomas Morgan сказал:

    А какая будет задержка, если ты будешь устанавливать одежду на сервере? Или с сервера вызывать клиентскую функцию с параметрами, которая будет устанавливать одежду? У меня просто нет удаленного сервера, нет возможности проверить.

    Ребята вы что серьезно сейчас? Какая нах задержка.  Максимальная задержка это будет максимум 2.5 пинга: 150мс в среднем ну в наихудшем случае пусть 450

  11. Сугубо от личных способностей зависит. Все люди просто пишут с разной скоростью, что уж говорить о придумывании и написании кода. На этот вопрос невозможно ответить 

  12. 6 минут назад, josipo сказал:

    Ты тратишь много дней на подбор конфига с одеждой, устанавливаешь цены и т.д. Держишь его на клиенте.

    Я захожу на твой сервер и беру себе это конфиг. Чтобы не тратить своё время.

    Хочешь ли ты выкладывать свой труд в общее пользование?

    Такие конфиги нужно хранить только на сервере

    Я отвечал относительно передачи конфига в качестве json на клиент при загрузке, что в принципе ничем не безопаснее чем хранить конфиг на клиенте. А что хранить в каких конфигах это дело личное.

  13. 2 часа назад, HEROofMAIDAN сказал:

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

    сделай 2 копии конфига на сервере и клиенте и проверяй данные на сервере. Ну а в прочем делай как знаешь😊

  14. 11 час назад, KShaddix сказал:

    Я правильно понимаю, что если делать кастомный чат, то уже нельзя использовать методы SendChatMessage на сервере и chat.push на клиенте? Или можно как-то подменить? Не очень догоняю, в чём идея.

    Встроенный чат это ни что иное как экземпляр Cef с обвязкой, сделав свой чат в новом окне Cef ты с легкостью можешь использовать оба чата

  15. Я думаю что у каждого на то свои причины, есть даже сервера которые в качестве голосового чата используют teamspeak. Опять же это какая то оптимизация трафика с основным сервером, а стоит оно того или нет решать тебе

  16. 1 минуту назад, Chipu сказал:

    Спасибо, теперь все работает)
    У вас в видеоролике по серверной стороне src="Server", добавьте примечание, может кто тоже запутается

    там под видео содержимое файла выложено, то видео было удалено и поэтому я не могу его отредактировать

  17. 21 минуту назад, Chipu сказал:

    Консоль:
    [N] Starting network... - OK: (IPv4-only) at 127.0.0.1:22005
    (node:13348) ExperimentalWarning: The ESM module loader is experimental.
    Loading packages
    Initializing bridge (0.3.7.0)..
    Initializing Bootstrapper.dll (0.3.7.0)..
    -> SERVER STARTED AT 20.04.2019 13:00:08
    Unable to load acl.xml
    ACLEnabled: False
    Loaded 451 entries from vehicleData.json
    Loading resources..
    -> Starting Alpha resource..
    Alpha: loading scripts.. found 1 script(s)
    -> Resource Alpha started!
    Started! Waiting for connections..
    [P] Plugin bridge.dll loaded!
    Started HTTP server at 22006 port.

    Файл enable-clientside-cs.txt есть - https://imgur.com/BBqVjdq
    Событие не вызываются как на клиенте, так и на сервере

    твой meta.xml

    <meta>
      <info name="Alpha" type="script"/>
      <script src="Server"/>
    </meta>

    мой

    <meta>
      <info name="Tuter" type="script"/>
      <script src="Server.dll"/>
    </meta>

     

  18. 2 минуты назад, Chipu сказал:

    Да, действительно. Решил сделать рефакторинг проекта. Ошибок теперь же нет, но события не вызываются
    Код: https://yadi.sk/d/SDhAozfIEpGZXQ

    Какие именно события не вызываются на клиенте или на сервере, в серверной консоли что-то выводится при подключении? Если не работают клиентские события нужно убедится в наличии файла enable-clientside-cs.txt в папке с Rage

×
×
  • Create New...