This is a mobile optimized page that loads fast, if you want to load the real page, click this text.

Проблема Events (регистрация в Server)

Holod

Новый участник
10 Янв 2025
24
3
8
Как правильно зарегистрировать / добавить Events? У меня есть следующий код:
C#:
using GTANetworkAPI;
using namerp_server.handlers;

namespace namerp_server
{
    public class Server : Script
    {
        public Server()
        {
            Events.Add("client_register_request", OnClientRegisterRequest);
            Events.Add("client_login_request", OnClientLoginRequest);
            Events.Add("client_create_character_request", OnClientCreateCharacterRequest);
        }
        private async void OnClientRegisterRequest(Player player, string username, string password)
        {
            await new AuthHandler().Register(player, username, password);
        }
        private async void OnClientLoginRequest(Player player, string username, string password)
        {
            await new AuthHandler().Login(player, username, password);
        }

        private async void OnClientCreateCharacterRequest(Player player, string characterName)
        {
            await new CharacterHandler().CreateCharacter(player, characterName);
        }
    }
}

Ругается на:
Код:
Events.Add("client_register_request", OnClientRegisterRequest);
Events.Add("client_login_request", OnClientLoginRequest);
Events.Add("client_create_character_request", OnClientCreateCharacterRequest);

Имя "Events" не существует в текущем контексте.
 

Jerry (ChatGPT)

AI-powered language model
VIP
helper
17 Окт 2023
2,428
239
100
Чтобы использовать Events в GTANetworkAPI, вам необходимо создать экземпляр класса Events и затем добавлять обработчики событий к нему. В вашем случае, вам нужно добавить следующее:

C#:
Events.ClientEventTrigger += OnClientEventTrigger;
Events.Add("client_register_request", 3 /* expected arguments count */);
Events.Add("client_login_request", 3);
Events.Add("client_create_character_request", 2);

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

C#:
private void OnClientEventTrigger(Client client, int eventNameHash, params object[] arguments)
{
    if (eventNameHash == "client_register_request".GetHashCode())
    {
        string username = arguments[0].ToString();
        string password = arguments[1].ToString();
        OnClientRegisterRequest(client, username, password);
    }
    else if (eventNameHash == "client_login_request".GetHashCode())
    {
        string username = arguments[0].ToString();
        string password = arguments[1].ToString();
        OnClientLoginRequest(client, username, password);
    }
    else if (eventNameHash == "client_create_character_request".GetHashCode())
    {
        string characterName = arguments[0].ToString();
        OnClientCreateCharacterRequest(client, characterName);
    }
}

Этот код должен помочь вам правильно зарегистрировать и добавить обработчики событий в GTANetworkAPI.
 

Holod

Новый участник
10 Янв 2025
24
3
8
Все равно ругается именно на Events
 

JJIGolem

Старожил
High developer
BackEnd developer
19 Окт 2020
239
289
142
На серверной части C# свои события объявляются через атрибут над методом:
C#:
[RemoteEvent("event_name")]
public void TestEvent(Player player)
{
  // code
}
Важно, сигнатура метода должна иметь первым параметром Player player !
После, можете указать другие свои параметры. Используйте примитивы.

Есть еще один способ, использовать NAPI.ClientEvent.Register. Но использование атрибута более чем достаточно, если вы не преследуете привязку/отвязку событий.
 
Реакции: Holod, Inoi и m0v1l3