GTAOnline.net

San Andreas Multiplayer (sa:mp) => Scripting SA-MP [Pawn center] => Discussion démarrée par: Komolos le 28 Novembre 2010, 20:19:22

Titre: [Topic Général] Aide de Komolos
Posté par: Komolos le 28 Novembre 2010, 20:19:22
Bonsoir,

Aujourd'hui j'aimerai crée un public qui freeze est unfreeze, après X secondes, donc j'ai fait comme ça :



public Freeze()
{
    for(new i; i<MAX_PLAYERS; i++)
    {
        if(IsPlayerConnected(i))
        {
            if(gPlayerSpawned[i] == 1)
            {
                new nomjoueur[MAX_PLAYER_NAME];
                new string[256];
                GetPlayerName(i,nomjoueur,MAX_PLAYER_NAME);
            {
    {
                        SendClientMessage(i, COLOR_WHITE, "Vous avez était freeze");
                        TogglePlayerControllable(i, 0);
                        SetTimer("UnFreeze", 20000, 0);

                    }
             }
            }
        }
    }
    return 1;
}


Donc pour la fonction unfreeze on fait pareille et ça unfreeze, j'aimerai savoir si sais bien comme ça qui faut faire.

J'aimererai aussi comprendre quoi est la défirrence entre :

SetTimer

&

SetTimerEx


Voilà merci d'avance ^^
Titre: Re : [Topic Général] Aide de Komolos
Posté par: chneubeul le 28 Novembre 2010, 21:31:31
Salut :)

Tu t'y prend mal,
il faudrait plutôt quelque chose comme ceci.


public Freeze(playerid, time)
{
new string[128];
format(string, sizeof(string), "Vous avez était freeze pour %d secondes", time);
SendClientMessage(i, COLOR_WHITE, string);
    TogglePlayerControllable(i, 0);
    SetTimerEx("UnFreeze", time, 0, "i", playerid);
    return 1;
}

public UnFreeze(playerid)
{
TogglePlayerControllable(playerid, 1);
}


SetTimer et SetTimerEx, servent à la même chose : appeler une fonction MAIS l'un sans et l'autre avec des paramètres. Je m'explique si jamais tu veux appeler cette fonction

public Fonction(playerid)

Tu va devoir utiliser SetTimerEx

Au contraire si la fonction n'a aucun paramètre  exemple :

public Fonction()

Alors là c'est simple : SetTimer

A+ Sam.
Titre: Re : [Topic Général] Aide de Komolos
Posté par: Xartrick le 28 Novembre 2010, 21:37:40
Je tiens également à dire que public est juste un type de fonction.
Donc, tu ne dois pas appeler ta fonction public.
Une fonction public est une fonction qui pourra se faire appeler par des fichiers externes.
Par exemple, si ta fonction Freeze est dans une include, si tu l'ajoute à ton script, tu pourras l'appeler.
Au contraire, si ta fonction est de type private, elle ne pourra être appelé seulement dans le fichier courant.

Il peut également exister des fonctions sans type !
Titre: Re : [Topic Général] Aide de Komolos
Posté par: chneubeul le 28 Novembre 2010, 21:48:54
Les fonctions public servent aussi à l'utilisation de Timer.
Titre: Re : [Topic Général] Aide de Komolos
Posté par: Xartrick le 28 Novembre 2010, 23:11:10
Un timer peut également être de type private !
Titre: Re : [Topic Général] Aide de Komolos
Posté par: Komolos le 02 Décembre 2010, 14:54:37
Ensuite je me suis fait un scripte pour savoir X détient l'ip X mais ça fait crash mon serveur si je le fait :

GetPlayerIp( giveplayerid,IP,sizeof(IP));
  format(string, sizeof(string), "Vous avez l'ip %s",IP);
SendClientMessage(playerid,COLOR_RED,string);


avec biensur le : new IP[256];

je me met dans OnPlayerConnect, puis si je me connecte ça me fait crash....
Je sais pas pourquoi.


J'ai aussi fait un petit TextDraw pour dire au ancien que un nouveau joueurs arrivent, mais il ne marche pas, j'ai l'est aussi mis dans OnPlayerConnect, sa marque à tout le monde :

if(PlayerInfo[playerid][pLevel] =< 2) // égal ou inférieure aux level 2
{
  new Text3D:NEW;
  NEW = Create3DTextLabel("[ATTENTION NOUVEAU JOUEUR !]",COLOR_RED,0,0,0,10,0,0);
  Attach3DTextLabelToPlayer(NEW,playerid,0,0,0.5);
}
Titre: Re : [Topic Général] Aide de Komolos
Posté par: cristab le 02 Décembre 2010, 15:05:52
<?php
new Ip[90];//preparons nous a l'ip V6 qui arrive dans 6 semaine a peu pret
GetPlayerIp(playerid,Ip,sizeof(Ip));
new 
string[128];
format(stringsizeof(string), "Vous avez l'ip %s",Ip);
SendClientMessage(playerid,COLOR_RED,string);
comme ceci aussi sa crash??

Ton erreure vient de la je pense
GetPlayerIp( giveplayerid,IP,sizeof(IP));
Titre: Re : [Topic Général] Aide de Komolos
Posté par: Komolos le 02 Décembre 2010, 15:07:27
Je vais essayé Cristab.

Effectivement ça marche maintenant.

J'ai mis mon deuxième problème en haut.
Titre: Re : [Topic Général] Aide de Komolos
Posté par: cristab le 02 Décembre 2010, 15:22:21
j'aurais fait comme ceci dans le onplayerspawn

en ajoutant une nouvelle var
new FirstSpawn[MAX_PLAYERS];
dans le onplayerconnect
FirstSpawn[playerid]=0;
if(FirstSoawn[playerid]==0)
{
   if(PlayerInfo[playerid][pLevel] =< 2) // égal ou inférieure aux level 2
   {
      new Text3D:NEW[MAX_PLAYERS];
      NEW[playerid] = Create3DTextLabel("[ATTENTION NOUVEAU JOUEUR !]",COLOR_RED,0,0,0,10,0,0);
      Attach3DTextLabelToPlayer(NEW[playerid],playerid,0,0,0.5);
      FirstSpawn[playerid]=1;
   }
   else
   {
       FirstSpawn[playerid]=1;
   }
}
Titre: Re : [Topic Général] Aide de Komolos
Posté par: Komolos le 02 Décembre 2010, 15:35:25
Okay merci.

ta fait une erreur mais j'ai corrigé ^^