Quantcast
Viewing all articles
Browse latest Browse all 5196

[SM >= 1.7] - 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(clientargs)
{



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 ^^"

Viewing all articles
Browse latest Browse all 5196