Guide Broke Protocol

Apprenez le modding, développement de plugins, mapping et la gestion de serveur pour Broke Protocol

🔧

Modding

Introduction au Modding

Bases du modding pour Broke Protocol

Création de véhicules

Comment créer et importer des véhicules personnalisés

Scripting avancé

Techniques avancées de scripting pour les mods

🔌

Plugins

Premier Plugin

Créer votre premier plugin pour BP

Base de données

Intégration MySQL dans vos plugins

🗺️

Mapping

JSON File Size Reduction Tool

Outil spécialisé pour optimiser les maps Broke Protocol (bpm)

📚

Tutoriels

Setup Serveur

Installation et configuration d'un serveur BP

Optimisation Performance

Optimiser les performances de votre serveur

Sécurité Serveur

Sécuriser votre serveur contre les attaques

📝 Exemples de Code

Plugin de Base
using BrokeProtocol.Entities;
using BrokeProtocol.Managers;

namespace MyPlugin
{
    public class MyPlugin : Plugin
    {
        public override void Load()
        {
            Debug.Log("Mon plugin est chargé !");
        }
    }
}
Gestionnaire d'Événements
EventsHandler.Add("OnPlayerJoin", new Action<ShPlayer>(OnPlayerJoin));

private void OnPlayerJoin(ShPlayer player)
{
    player.SendChatMessage("Bienvenue sur le serveur !");
}
Ne pas perdre son inventaire à la mort
using BrokeProtocol.API;
using BrokeProtocol.Entities;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace FLO.Default_Game_Fix
{
    class Player : PlayerEvents
    {
        [Execution(ExecutionMode.Override)]
        public override bool RemoveItemsDeath(ShPlayer player, bool dropItems)
        {
            return true;
        }
    }
}
Augmenter/Réduire sa vitesse
using System;
using System.IO;
using BrokeProtocol.API;
using BrokeProtocol.Entities;

namespace TEST_PLUGIN_FLO.Command
{
    public class Command : IScript
    {
        public Command()
        {
            CommandHandler.RegisterCommand("setspeed", new Action<ShPlayer, float>(this.SetSpeedEvents), null, null);
            CommandHandler.RegisterCommand("resetspeed", new Action<ShPlayer>(this.SetDefaultSpeed), null, null);
        }

        public void SetSpeedEvents(ShPlayer player, float speed)
        {
            try
            {
                player.svPlayer.SetMaxSpeed(speed);
                player.svPlayer.SendGameMessage("&a[FloPlugin] &aSuccès &7-&7 &fVous avez défini votre vitesse à " + speed.ToString());
                Console.WriteLine($"Le joueur {player.displayName} a défini sa vitesse à {speed}.");
            }
            catch (Exception ex)
            {
                Console.WriteLine($"Une erreur s'est produite lors de l'exécution de la commande setspeed : {ex.Message}");
                player.svPlayer.SendGameMessage("Une erreur s'est produite lors de l'exécution de la commande.");
            }
        }
        
        public void SetDefaultSpeed(ShPlayer player)
        {
            try
            {
                player.svPlayer.SetMaxSpeed(12f);
                player.svPlayer.SendGameMessage("&a[FloPlugin] &aSuccès &7-&7 &fVous avez réinitialiser votre vitesse à 12 (base)");
                Console.WriteLine($"Le joueur {player.displayName} a réinitialiser sa vitesse à 12 (base).");
            }
            catch (Exception ex)
            {
                Console.WriteLine($"Une erreur s'est produite lors de l'exécution de la commande resetspeed : {ex.Message}");
                player.svPlayer.SendGameMessage("Une erreur s'est produite lors de l'exécution de la commande.");
            }
        }
    }
}
Connexion Base de Données
using System.Data.SqlClient;

private void SavePlayerData(string playerName, int money)
{
    string query = "INSERT INTO players (name, money) VALUES (@name, @money)";
    using (SqlConnection conn = new SqlConnection(connectionString))
    {
        SqlCommand cmd = new SqlCommand(query, conn);
        cmd.Parameters.AddWithValue("@name", playerName);
        cmd.Parameters.AddWithValue("@money", money);
        conn.Open();
        cmd.ExecuteNonQuery();
    }
}