Annonce

Réduire
Aucune annonce.

Tuto #3 : Les fonctions

Réduire
Ceci est une discussion importante.
X
X
  • Filtre
  • Heure
  • Afficher
Tout nettoyer
nouveaux messages

  • Tuto #3 : Les fonctions

    Hellow,

    Troisième tuto pour dev en Sourcepawn.
    Ici nous allons apprendres les fonctions.
    #Attentions, sans connaitres comment compiler un plugin en locale ça ne vous serviras pas (Un tutos de compilations arrive).

    Explications :
    Les fonctions sont les bases dans un languages de programation, ce sont les mots qui permettent de faire différentes choses.
    Elles sont définis par leur languages mais des extentions, includes, ... peuvent en apporter bien plus.

    Dans le Sourcepawn une fonction est appeller par une include (principalement !).
    Une include est une librairie de fonction, ça permet aussi de moduler un plugin, mais nous verront ça bien bien après.

    Pour inclure un librairie de fonction nous devons dire au plugins de lire l'include, ce n'est pas compliquers.
    Ici nous allons utiliser l'include sdktools qui permet de donner une arme, ...

    Code PHP:
    #include <sdktools> 
    Voilà, le plugins sais que il dois lire l'include sdktools

    Nous allons désormais créé un plugin qui permetteras de donner un deagle, c'est simple.
    Nous allons utiliser :

    Code:
    OnPluginStart : Appeller quand le plugins se lance
    RegConsoleCmd : Définis une commande console (! et / dans le chat OU sm_ dans la console)
    GivePlayerItem : Permet de donner une arme (un item)
    IsClientInGame : Permet de vérifier si le joueur est en jeu
    IsClientConnected : Permet de vérifier si le joueur est connecter
    IsPlayerAlive : Permet de vérifier si le joueur est en vie
    PrintToChat : Envois un message dans le chat à l'index du client demander
    GetClientTeam : Permet de reprendre la team de l'index du client demander
    Dans certaines fonctions nous allons utiliser se que on appel un CallBack.
    Le CallBack est simplement l'appellation de se que dois faire la fonction.
    Fonction = Maman | CallBack = Enfant (En très gros c'est ça).

    Pour pouvoir donner une arme nous avons besoin de l'include sdktools et de définir la commande quand le plugins se lance

    Code PHP:
    #include <sdktools>

    public void OnPluginStart()
    {
        
    RegConsoleCmd("sm_deagle"Command_Deagle"Commande qui permet de donner un deagle");

    Vous avez surement remarquer que dans le RegConsoleCmd nous avons se que nous appellons des arguments.
    Le premier arguments est la commande qui permet d'appeller le callback (sm_deagle dans la console ou !deagle dans le chat ou /deagle dans le chat).
    Le deuxième argument est le nom du CallBack de la commande, nous aurions pus l'appeller CallBackDeLaCommandeDeagle, mais le CallBack appeller doit porter le même nom, sinon ça ne marche pas.
    Le troisième argument est l’explication de la commande dans le sm_help (Perso je l'utilise jamais).

    Maintenant nous devons appeler le callback de la commande

    Code PHP:
    #include <sdktools>

    public void OnPluginStart()
    {
        
    RegConsoleCmd("sm_deagle"Command_Deagle"Commande qui permet de donner un deagle");
    }

    public 
    Action Command_Deagle(int clientint args)
    {


    Ici commence la complication : (client, args)
    Ce sont les arguments demander quand vous définisser une commande.
    La variable client permet de définir le joueur qui tape la commande, l'arguments args c'est le nombre d'argument après la commande :
    !deagle toto prout caca auras trois arguments.
    #Informations : Vous pouvez nommer les variables comme vous avez envie

    Maintenant nous allons vérifie que le joueur est connecter et en jeu. Cela évite d'avoir un message dans les logs du genre
    "Index clients XXX is invalid"
    Pour cela nous allons utiliser les conditions d’existence (Tuto #2)

    Code PHP:
    #include <sdktools>

    public void OnPluginStart()
    {
        
    RegConsoleCmd("sm_deagle"Command_Deagle"Commande qui permet de donner un deagle");
    }

    public 
    Action Command_Deagle(int clientint args)
    {
        if(
    IsClientInGame(client) && IsClientConnected(client))
        {
        
        }

    Nous vérifions maintenant que sont équipe est supérieur celle des CT sinon on lui dit qu'il est en CT
    Code PHP:
    #include <sdktools>

    public void OnPluginStart()
    {
        
    RegConsoleCmd("sm_deagle"Command_Deagle"Commande qui permet de donner un deagle");
    }

    public 
    Action Command_Deagle(int clientint args)
    {
        if(
    IsClientInGame(client) && IsClientConnected(client))
        {
            if(
    GetClientTeam(client) > 1)
            {

            }
            else
            {
                
    PrintToChat(client"Vous ne pouvez pas utiliser la commande en spectateur");
            }
        }

    On vérifie qu'il est en vie sinon on lui dit qu'il est mort
    Code PHP:
    #include <sdktools>

    public void OnPluginStart()
    {
        
    RegConsoleCmd("sm_deagle"Command_Deagle"Commande qui permet de donner un deagle");
    }

    public 
    Action Command_Deagle(int clientint args)
    {
        if(
    IsClientInGame(client) && IsClientConnected(client))
        {
            if(
    GetClientTeam(client) > 1)
            {
                if(
    IsPlayerAlive(client))
                {
                
                }
                else
                {
                    
    PrintToChat(client"Vous ne pouvez pas utiliser la commande en étant mort");
                }
            }
            else
            {
                
    PrintToChat(client"Vous ne pouvez pas utiliser la commande en spectateur");
            }
        }

    Et on donne le deagle si il est en vie
    Code PHP:
    #include <sdktools>

    public void OnPluginStart()
    {
        
    RegConsoleCmd("sm_deagle"Command_Deagle"Commande qui permet de donner un deagle");
    }

    public 
    Action Command_Deagle(int clientint args)
    {
        if(
    IsClientInGame(client) && IsClientConnected(client))
        {
            if(
    GetClientTeam(client) > 1)
            {
                if(
    IsPlayerAlive(client))
                {
                    
    GivePlayerItem(client"weapon_deagle");
                }
                else
                {
                    
    PrintToChat(client"Vous ne pouvez pas utiliser la commande en "étant mort");
                }
            }
            else
            {
                PrintToChat(client, "
    Vous ne pouvez pas utiliser la commande en spectateur");
            }
        }

    Voilà, le plugin est coder, mais il y a un problème, si le joueur à déjà une arme secondaire (un petit gun) ça donneras l'arme à terre et la commande peut-être flood.
    Pour cela nous allons faire une vérification, et si il à déja un gun on lui retire.
    Pour faire tout cela nous allons avoir besoin de l'include <cstrike>

    Nous allons utiliser :
    GetPlayerWeaponSlot : Permet de reprendre une arme de l'index du client utiliser
    CS_SLOT_SECONDARY : Define défini par l'include cstrike (nous verrons les defines plus tard)
    RemovePlayerItem : Permet de retirer l'item d'un joueur


    Nous allons créé une nouvelle variable nommer weapon et y stocker l'arme secondaire :
    Si ce n'est pas vide (au dessus de -1) on donne l'arme, sinon on la remove et on la donne

    Code PHP:
    #include <sdktools>
    #include <cstrike>

    public void OnPluginStart()
    {
        
    RegConsoleCmd("sm_deagle"Command_Deagle"Commande qui permet de donner un deagle");
    }

    public 
    Action Command_Deagle(int clientint args)
    {
        if(
    IsClientInGame(client) && IsClientConnected(client))
        {
            if(
    GetClientTeam(client) > 1)
            {
                if(
    IsPlayerAlive(client))
                {
                    
    int weapon GetPlayerWeaponSlot(clientCS_SLOT_SECONDARY)
                    
                    if(
    weapon != -1)
                    {
                        
    RemovePlayerItem(clientweapon);
                        
    GivePlayerItem(client"weapon_deagle");
                    }
                    else
                    {
                        
    GivePlayerItem(client"weapon_deagle");
                    }
                }
                else
                {
                    
    PrintToChat(client"Vous ne pouvez pas utiliser la commande en "étant mort");
                }
            }
            else
            {
                PrintToChat(client, "
    Vous ne pouvez pas utiliser la commande en spectateur");
            }
        }

    Pour les fonctions vous pouvez aussi les créés tout commes les includes.
    La création d'une fonction se fais simplement :

    Code PHP:
    stock void SetClientSpeed(clientfloat amount)
    {
        
    SetEntPropFloat(clientProp_Data"m_flLaggedMovementValue"amount);

    Je passe le questionnaire pour ce tutos, j'ai pas trop d'idée ^^"
    Dernière modification par Kriax, 13 juillet 2016, 18h09.


  • #2
    Tu n'as pas de questionnaire alors je vais te poser moi une question, qu'est ce qu'un VOID pour toi ? ;).

    Commentaire


    • #3
      Envoyé par CM_Delachambre Voir le message
      Tu n'as pas de questionnaire alors je vais te poser moi une question, qu'est ce qu'un VOID pour toi ? ;).
      void = rien
      En théorie pour dire qu'une fonction ne retourne rien.
      En C, souvent pour déclarer des pointeurs. (Mais je crois pas qu'il y a de Pointeurs en Sourcepawn)

      Commentaire


      • #4
        Dans d'autres language c'est déclarer par un * et permettent d'utiliser une valeur avec un & (en C si j'dit pas de connerie) si je dit pas de connerie et le sp le comprends donc techniquement je pense que c'est possible, je me suis jamais poser la question.

        Par curiosité je ferais une recherche.

        Delachambre, si t'as envie de m’ennuyer j'ignorerais.
        La réponse se trouve au dessus, et au passage merci Alex.
        Dernière modification par Kriax, 08 septembre 2015, 21h16. Motif: Correction de ma phase avec mon ordi :p

        Commentaire

        Chargement...
        X