Archived
Private
Public Access
1
0
This repository has been archived on 2026-02-04. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
ProjectBackup/C#/FiveM/Framework/Framework.Server/Handlers/JoinHandler.cs
2023-07-31 21:20:56 +02:00

52 lines
2.4 KiB
C#

using System;
using System.Collections.Generic;
using CitizenFX.Core;
using CitizenFX.Core.Native;
using Framework.Server.Extensions;
using Framework.Shared.Extensions;
using Framework.Shared.Models;
namespace Framework.Server.Handlers {
public static class JoinHandler {
public static Vector3 Spawn = new Vector3(258.7932f, -942.7487f, 29.3940f);
public static readonly IDictionary<int, PlayerData> PlayerDatas = new Dictionary<int, PlayerData>();
public static async void OnPlayerJoining([FromSource] Player player) {
API.SetPlayerRoutingBucket(player.Handle, player.ServerId());
API.SetRoutingBucketPopulationEnabled(player.ServerId(), false);
API.SetRoutingBucketEntityLockdownMode(player.ServerId(), "strict");
API.SetPlayerInvincible(player.Handle, true);
var identifier = "license:" + player.Identifiers["license"];
var result = await MySql.FetchAll<PlayerData>($"SELECT * FROM players WHERE owner = '{identifier}'");
if (result.Count == 0) player.TriggerEvent("client:spawn:register");
else player.TriggerEvent("client:spawn:choose", result);
}
public static async void OnRegister([FromSource] Player player, PlayerData data) {
var identifier = "license:" + player.Identifiers["license"];
data.LastPosition = Spawn.ToArray();
await MySql.Execute($"INSERT INTO players VALUES ('{identifier}', '{Guid.NewGuid()}', {data.Sex}, {data.Height}, '{data.FirstName}', '{data.LastName}', '{data.Birth}', {data.Skin}, '{data.LastPosition.Serialize()}')");
LoadCharacter(player, data);
}
public static async void CharacterSelected([FromSource] Player player, string charId) {
var data = await MySql.FetchOne<PlayerData>($"SELECT * FROM players WHERE CharId = '{charId}'");
LoadCharacter(player, data);
}
private static void LoadCharacter(Player player, PlayerData data) {
player.Character.Position = data.LastPosition.ToVector3();
API.SetPlayerModel(player.Handle, data.Skin);
PlayerDatas.Remove(player.ServerId());
PlayerDatas.Add(player.ServerId(), data);
API.SetPlayerInvincible(player.Handle, false);
API.SetPlayerRoutingBucket(player.Handle, 0);
}
}
}