Jump to content

Leaderboard

Popular Content

Showing content with the highest reputation on 06/02/19 in Posts

  1. I have no info about that, however there is a 'fix' for it. After player enters a vehicle you have to set that vehicle.invincibility to false (you gotta do it clientside as .invincibility is not implemented on the serverside api yet) and the vehicle will start getting damage like it should.
    1 point
  2. Thanks for the feedback! I got a VPS on Vultr for free, $50 credits through a coupon so I'll use it for a month and see how it is. I actually like having a VPS rather than only a gameserver, I can do more with it. And those dedicated prices are attractive. Kinda want that more now haha. Thanks! By the way, I can see my server has 90ms ping. A lot of servers have the same ping. What's the deal with that?
    1 point
  3. Всем привет! Рассмотрим пример как сделать свой простенький 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"); } } } Надеюсь кому-то было полезным всем пока
    1 point
  4. Thanks for your buttonchecker function suggestion, it was added to the new updated code
    1 point
  5. Wir suchen Teammitglieder für unseren Hardcorerp server weitere Infos findet ihr im Konzept: https://docs.google.com/document/d/1d9LRh4yhThLUcD4Y_dtGzL_GwHEOsOqHe4LWXTfbx5w/edit?usp=sharing
    0 points
×
×
  • Create New...