• 06 Mai 2024, 11:45:05


Voir les contributions

Cette section vous permet de consulter les contributions (messages, sujets et fichiers joints) d'un utilisateur. Vous ne pourrez voir que les contributions des zones auxquelles vous avez accès.


Sujets - S!m

Pages: 1 2 [3] 4
31
Showroom SA:MP / [FS] Bomb-Plant - V 0.3 - 29 mai 2009
« le: 24 Avril 2009, 04:39:51 »
Salut à tous,

suite au script de sasuke (disponible ICI), j'ai momentanément eu quelques idées afin de créer un script du même genre...

un script court et simple, mais le voici:

Bomb-Plant

Les commandes:

V0.1:
  • /bomb - placer une bombe sur le sol ou sur un véhicule
  • /mine - placer une bombe au sol, dès qu'un joueur passe trop près, elle explose (paramètres pouvant être réglés via des defines disposés dans le haut du script)
  • /bomhelp - aide sur le script
  • /bombon | /bomboff - Commandes pour les admins permettant d'autoriser / interdire l'usage des bombes
Ajouts V0.2:
  • /boom - Faire exploser sa propre bombe au moment désiré (dans les délai bien sûr)
  • /mined -Faire exploser une mine placée par soi
Ajouts V0.3:
  • /demine - Fonction de déminage
  • /disarm -Désamorcer une bombe

Il pourrait être intéressant de mentionner que le script utilise mon include multilangue, la version que j'utilise actuellement est incluse dans le téléchargement, évitant ainsi certains inconforts.

Détails :

V0.1:

- Script relativement basique,
- permet de placer des bombes et des mines,
-aucun objet utilisé,
- seulement 4 commandes,
- possibilité de choisir le délai avant l'explosion de la bombe (avec des limites + valeur par défaut),
- textdraw d'alarme lorsque près d'une mine (distance réglable).

V0.2:

- même fonctionnalités que la v0.1,
- ajout de la possibilité de faire exploser les mines et les bombes sur demande (/boom et /mined),
- ajout d'objets afin de rendre le tout plus intéressant,
- possibilité d'utiliser ou non un streamer (par défaut SimStream, évidemment ^^),
- ajout d'une animation au moment de l'installation d'une bombe au sol.

V0.3:

- même fonctionnalités que la v0.2,
- ajout de la possibilité de désamorcer les bombes,
- ajout de la possibilité de faire exploser les mines des autres à partir d'une certaine distance (blesse tout de même légèrement),
- TextDraw permettant de connaitre l'avancement du désamorçage
- Animation lors du désamorçage
- Avertissement du propriétaire de la bombe lorsqu'un joueur tente de la désamorcer

Téléchargement:

V0.1:


Pastebin

V0.2 :


Pastebin

Nouvelle version - V0.3 :


Pastebin

Nouvelle version - V0.3 - FR:


Pastebin

IMPORTANT:

n'oubliez pas de modifier les valeurs des constantes au haut du script afin de l'adapter à vos besoins, des descriptions accompagnent chacune de ces constantes
Postez des commentaires, si vous avez des idées d'ajouts, n'hésitez pas à en faire part

Pour une prochaine version:

 - Bombe sans temps d'explosion (uniquement via commande ou touche)
 - ...

Remerciements:

Sasuke78200 pour son script génial :P
Moi ::)

++Sim++

32
Showroom SA:MP / [FS-INC] SimStream V3 - MidoStream Modifié
« le: 28 Janvier 2009, 01:31:06 »
Salut à tous,

Je suis fier de vous présentez un script que j'utilise sur mon serveur,

SIMSTREAM V3

Il s'agit d'un midostream modifié, j'ai complètement enlevé des fonctions qui me semblaient inutiles, celle dont je ne me sert jamais et en ait refait certaines.

J'en ai grandement modifié le système de mouvement des objets, au lieu d'une fonction par objet, j'ai créer une grande fonction qui fait tous les objets du même coup
Ainsi, il en résulte, selon moi, une réduction des problème potentiels de conflits de timer, et aussi de surcharge du processeur (beaucoup de calculs refaits à chaque 200 ms)
j'en avais synchronisés les angles au début, mais ceux-ci n'étant pas synchronisés, je les ai enlevé afin de réduire la charge.

V3.3:

Plusieurs otions ont été retirées dans cette version du streamer.
j'ai forcé l'utilisation du système de zone et du mode "montrer les x objets les plus près du joueur". (x est une valeur que vous pouvez définir dans le fs)
Le système d'attachement des objets ne pouvant fonctionner sur la v0.3, il a été retiré de cette version.
Vous pouvez toujours désactiver le système de déplacement des objets.
J'ai tester ce streamer avec le gm test qui est inclus dans le pack de téléchargement (objecttest.pwn)

si vous avez des suggestions d'amélioration de la logique du streamer ou l'organisation des variables etc... veuillez s'il vous plait postez vos idées, merci :P

voici une liste des fonctions:

V3.3:
Citer
native CreateStreamObject(modelid,Float:xpos,Float:ypos,Float:zpos,Float:xrot,Float:yrot,Float:zrot) - Create a streamed object
native DestroyStreamObject(id) - Destroy a streamed object
native AddMovingObject(modelid,Float:X1,Float:Y1,Float:Z1,Float:X2,Float:Y2,Float:Z2,Float:RX,Float:RY,Float:RZ,Float:Speed2)
native MoveStreamObject(id,Float:X,Float:Y,Float:Z,Float:Speed)
native StopStreamObject(id);
native GetStreamObjectPos(id, &Float:x, &Float:y, &Float:z)
native GetStreamObjectRot(id, &Float:rx, &Float:ry, &Float:rz)
native SetStreamObjectRot(objectid, Float:xrot, Float:yrot, Float:zrot)


J'y ai également placé une callback qui peut être placée dans tous vos script ou non, à vous de choisir, OnStreamObjectMoved:
Citer
forward OnStreamObjectMoved(StreamID);

TÉLÉCHARGEMENT:

NOUVELLE VERSION: V3.3:


LA MISE À JOUR VERS LA V3.3 EST FORTEMENT CONSEILLÉE

Installation

1. Ajouter le FS au le dossier filterscript de votre serveur (et le compiler avec vos paramètres, il est recommandé de modifier le maxp (nombre maximum de joueurs) )
2. Ajouter SimStreamv3.3 à la ligne filterscript de votre server.cfg
3. Placer le fichier SimStream.inc dans le dossier includes de votre serveur.
4. Vous devez ajouter #include <SimStream.inc> au haut du script contenant les objets (possibilité d'enlever #include <a_samp.inc>, il est chargé par l'include)
5. Changer tous tes CreateObject en CreateStreamObject.

NB. il est recommandé d'éviter le paramètre de distance puisque désormais inutile, il a été conservé par soucis de compatibilité avec la v3.0

Pour les paresseux, l'étape 5 peut-être remplacer par une macro du genre:
#define CreateObject CreateStreamObject
#define DestroyObject DestroyStreamObject


Crédits:
Moi- Sim
Midoban (script original Midostream, disponible: ICI)

Je vous prie de bien laisser vos commentaires, si vous rencontrez un problème, je me ferai plaisir de vous aider

++Sim++

33
Scripting SA-MP [Pawn center] / Problème load d'info
« le: 04 Janvier 2009, 20:52:36 »
Salut,

j'ai récemment commencé à utilisé l'include djson, tout va bien sauf une chose,

quand j'essaie de charger certaines informations, il semble que le chargement na donne rien...

voici mon code:

format(tmp,sizeof(tmp),"%s/HorseFound",PlayerName);
new tmpp[sizeof(HorseFinding)];
format(tmpp,sizeof(tmpp),"%s",dj(PLAYERS_DATA_FILE,tmp));

et le lien pour djson:
DJSON

++Sim++

34
Salut à tous,

alors je vais expliqué rapidement ce que j'ai compris aux différents opérateurs présents en pawn,
si vous vous y connaissez bien, je vous prie de bien ajouter vos connaissances...



L'opérateur '!':

Le point d'exclamation (appelé NOT) permet d'inverser les bits d'une variable:

!true = false
on peut en déduire que
!false = true

Donc, dans une variable on obtient ceci:

EXEMPLE:
!010111000011101011
qui est équivalent à:
101000111100010100
(tous les 1 deviennent des 0 et vice versa)
ainsi, utilisé dans un if(....) il permet de vérifier si une expression est fausse et non vrai ( if(!...) )



Les strings compressés :

Le point d'exclamation peut également servir à la création de "packed string", soit des string compressés,
Il est évident que ceci permet de sauver une grande quantité de mémoire, par contre la plupart des fonction en pawn ne supportent pas les string compressés.
Ainsi, il est plutôt rares qu'ils soient utilisés.
vous pouvez créer des string compressés à la base dès leur création:
Code: (pawn) [Sélectionner]
new string[12] = "Salut à tous";//12 cell 48 bytes
new string[12 char] = !"Salut à tous";//3 cell 12 bytes
Comme on peut le voir d'après les commentaires (code original de Y_Less), le string compressé est 4 fois plus petit.
Il existe également deux fonctions dans le string.inc qui permettent de compresser/décompresser des string, il s'agit de strpack et strunpack

strpack(dest[],const source[],maxlenght)
 - dest: Le string de destination (sous la forme var[nb char]
 - source: le string d'où provient les données
 - maxlenght: la longueur maximale de la chaîne à copier (paramètre optionnel)

strunpack(dest[],const source[],maxlenght)
 - dest: Le string de destination (string décompressé)
 - source: le string d'où proviennent les données compressées
 - maxlenght: la longueur maximale de la chaîne de caractère à décompresser



Le caractère '=' :

Seul, le signe = change la valeur de la variable de gauche pour la valeur de celle de droite(dans le sens <<------), souvent employé comme ceci:
Code: (pawn) [Sélectionner]
time = GetTickCount();Il en va ainsi pour toutes les variables,
par contre il faut l'employé avec une certaine précaution, seules les variables(j'entend ainsi également les valeurs retournés par les fonctions) de même type peuvent être impliqués dans les '='

EXEMPLE:
Code: (pawn) [Sélectionner]
new Float:x,nb,string[128],string2[64],Float:y,maVar;

//les expressions suivantes sont fausses:
x=nb;//type de variable différent
string = string2//longueur de string différent
maVar = y;//type différent
y=string;//type différent

//Les expressions suivantes sont vraies:
x=maVar;//deux entiers
x=y;//deux float
format(string,sizeof(string),"%s",string2);//ici on change les caractère de string pour devenir ceux de string2, du moins en partie (car string plus long que string2)
nb = string[34];//comme l'on prend seulement le 34e caractère, il s'agit d'un nombre entier tout comme nb, donc aucun problème ici
maVar=floatround(y);//on arrondi le nombre à virgule, donc on obtient un entier



Le caractère '==' :

Il s'agit d'un opérateur logique d'égalité, employé pour les conditions, la valeur retournée est true si l'expression de droite à la même valeur que l'expression de gauche, false dans le cas contraire.
Note : On ne peut comparé deux string de cette façon, la façon de faire est dans l'exemple suivant
L'utilisation de cet opérateur se fait comme suit:
Code: (pawn) [Sélectionner]
new int1 = 3;
new int2 = 45;
new int3 = 3;
if(int1 == 3)//on compare avec une valeur constante
{
//le code suivant sera exécuté
}
if(int2 == 34)
{
//le code suivant ne sera pas exécuté (int2 n'égale pas 45)
}
if(int1 == int3)//on compare les variables entre eux
{
//le code suivant sera exécuté
}
if(int2 == int3)
{
//le code suivant ne sera pas exécuté
}
if(GetPlayerVehicleID == int2)//ici on compare la valeur retourné par la fonction et la variable
{
//le code suivant sera peut-être exécuté, dépendant de la valeur retournée par la fonction
}
new Float:float1 = 34.3453;
new Float:float2 = 456.5461;
new Float:float3 = 34.3453;
new Float:x,Float:y,Float:z;
GetPlayerPos(23,x,y,z);//on récupère la position du joueur numéro 23
if(float1 == float3)//on compare les deux variable
{
//ce code sera exécuté
}
if(float2 == 345.231)//compare une variable à virgule avec un nombre à virgule constant
{
//ce code ne sera pas exécuté
}
if(float2 == y)/on compare le y du GetPlayerPos avec la float2
{
//ce code peut être exécuté selon la position du joueur 23
}



L'opérateur logique '&':

Si vous ne savez pas ce qu'est un bit, je vous suggère de sauter cette partie.
Seul '&' permet la comparaison de bits (il s'agit en quelque sorte d'un ET),
si le bit que l'on vérifie est à 1, la valeur retournée est vraie,
par exemple si l'on veut extraire le 4e bit d'une variable quelconque:
Code: (pawn) [Sélectionner]
new variable = 857;
if(variable & 16)..//si la variable à le 4e bit à 1...

Il est possible de créer une fonction afin de déterminer si un nombre est pair ou impair grâce à cet opérateur:
Code: (pawn) [Sélectionner]
stock IsImpair(Number)
{
  return number & 1;
}

Encore, il est possible d'améliorer cette fonction à l'aide de DEFINE (voir plus bas)

Code: (pawn) [Sélectionner]
#define IsImpair(%0) %0 & 1



L'opérateur logique '&&':

Le symbole && il constitue l'opérateur de logique "ET", il permet d'ajouter une condition à un if , d'une certaine façon

EXEMPLE:
Code: (pawn) [Sélectionner]
if(IsPlayerConnected(playerid) && IsPlayerInAnyVehicle(playerid))....//ce code ne s'exécutera que si le joueur est connecté ET dans un véhicule



Les opérateurs '<', '>', '<='et '>=' :

Ils permettent de vérifier quelle valeur de celle de gauche ou de droite est la plus grande.
Ils peuvent également être accompagnés de l'opérateur '=' afin d'accepter également la possibilité d'une égalité..
Bref,
  • '<' => Plus petit que....
  • '>' => Plus grand que....
  • '>=' => Plus grand ou égal à....
  • '<=' => Plus petit ou égal à....
Code: (pawn) [Sélectionner]
new local1 = 2,
local2 = 3,
local3 = 2;
if(local1 < local2)...//le code sera exécuté car local1 est plus petit que local2
if(local1 < local3)...//ne sera pas exécuté car local1 n'est pas plus petit que local2
if(local1 <= local3)....//sera exécuté car local1 est égale à local3
if(local2 > local3)....//sera exécuté car local2 est plus grand que local3



Les opérateurs '<<'et '>>' :

Ces opérateurs permettent de faire des opération bits à bits, << permet de décaler des bits vers la gauche (division par deux) tandis que '>>' décale plutôt les bits vers la droite, une multiplication par 2
NB : Dans les décalages de bits, les bits qui "sortent" par la gauche ou la droite sont perdus. Ainsi (13>>2)<<2 ne donnera pas 13 mais 12

Code: (pawn) [Sélectionner]
if ((a << 30) >>> 31)



L'opérateur '|' :

Seul '|' est un OU bit à bit

EXEMPLE:
Code: (pawn) [Sélectionner]
0|0 = 0
1|0 = 1
0|1 = 1
1|1 = 1



L'opérateur '||' :

Il correspond à l'opérateur logique "ou" dans toute condition
Dès qu'une des valeurs est vraie, l'expression retourne vrai (voir exemple)
EXEMPLE:
Code: (pawn) [Sélectionner]
if(IsPlayerInAnyVehicle(playerid) || GetPlayerState(playerid) != PLAYER_STATE_ONFOOT)....//le joueur est dans un véhicule ou encore il n'est pas à pied



Le mot clé 'if' :

Il permet de faire un test de logique, les parenthèses le suivant continent une expression qui retourne une valeur, si cette expression est vraie, le code suivant le if (entre les {} la plupart du temps) sera exécuté, dans le cas contraire il sera sauté
EXEMPLE:
Code: (pawn) [Sélectionner]
if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER)//si le joueur conduit un véhicule
{
 AddVehicleComponent(GetPlayerVehicleID(playerid),1010);//on lui donne de la nitro
}



Le mot clé 'else' :

Il doit être utilisé de concert avec le mot clé if et le code le suivant sera appelé si et seulement si le if est faux et le code suivant le if n'est pas exécuté.

EXEMPLE:
Code: (pawn) [Sélectionner]
if(30 == 10)//expression évidemment fausse
{
 AddVehicleComponent(GetPlayerVehicleID(playerid),1010);//on donne de la nitro
}
else
{
 SendClientMessage(playerid,COLOR_RED,"Tu ne peut avoir de la nitro, car tu a été méchant ^^");
}

Le else et le if peuvent être combiné afin d'obtenir de multiples possibilités selon la valeur de différents paramètres, ce qui donne le mot clé else if

EXEMPLE:
Code: (pawn) [Sélectionner]
if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER)//si le joueur conduit un véhicule
{
 AddVehicleComponent(GetPlayerVehicleID(playerid),1010);//on lui donne de la nitro
}
else if(IsOn == 2)
{
 SendClientMessage(playerid,COLOR_RED,"Tu ne peut avoir de la nitro, car tu a été méchant ^^");
}
else if(IsOn == 3)
{
 SendClientMessage(playerid,COLOR_RED,"Tu ne peut avoir de la nitro, car tu n'as pas mangé ton gateau ^^");
}
else if(IsOn == 4)
{
 SendClientMessage(playerid,COLOR_RED,"Tu ne peut avoir de la nitro, car tu n'as pas nourrit le chien ^^");
}
else
{
 SendClientMessage(playerid,COLOR_RED,"Tu ne peut avoir de la nitro, car tu n,est pas en véhicule!");
}



Les FORWARD :

le forward permet d'indiquer au compiler qu'une fonction existe avant qu'il ne la rencontre.
Si vous obtenez le warning "function used before definition, forcing reparse",
Placez un forward de votre fonction au haut de votre script où déplacez votre fonction afin de la placer avant son usage.
Notez bien que les fonction public ont obligatoirement besoin d'un forward



Les NEW :

l'expression new indique au compiler que le mot suivant est une variable, cette variable peut être un texte, un nombre à virgule, un simple entier ou encore une valeur booléenne (vrai ou faux)
Par contre, afin de ne pas créer un simple entier, il faut placer un "tag" devant le nom de la variable (voir exemple)
EXEMPLES:
Code: (pawn) [Sélectionner]
new entier;//un entier
new Float:NbVirgules;//un nombre a virgule (float en anglais pour floating point (point flottant, bref qui bouge^^))
new MyText[128];//un string, array, peut contenir du texte comme la suivante
new MyText2[] = "salut à tous!!!";//lorsque l'on place déjà un texte dans une variable, aucun besoin d'assigner une taille à la variable
new bool:MyBool;//on crée une variable booléenne (vrai ou faux)
new MyArray[32] = {-1,0,2,3,5,6,74,45...};//un array, contient différentes valeurs ayant toutes une signification quelconque;

Dans la même catégorie l'on retrouve également les static qui sont en quelque sorte comme les new,
mais à l'exception qu'ils ne sont accessible que dans la section du script les contenant,
par exemple un static dans un include ne peut être utilisé dans le script, alors qu'un new le pourrait

Une notion importante en lien avec les NEW est bien entendu l'intialisation, c'est à dire l'assignement d'une valeur à la variable lors de sa création.
Il est possible d'assigner la valeur que l'on désire (en restant dans le bon type de variable) à la variable créée
EXEMPLE:
Code: (pawn) [Sélectionner]
new playerid = 9;
new entier = playerid;
playerid = 13;
new entier2 = playerid;
entier = entier2;



Les '++' :

Cet expression permet d'ajouter 1 à une valeur, généralement placé après une variable afin d'en augmenter la valeur de 1.
Il est à noter que ceci modifie la valeur de la variable en question.

EXEMPLES:
Code: (pawn) [Sélectionner]
new entier = 6;//un entier
printf("%d",entier);//écrit 6
entier++;
printf("%d",entier);//écrit 7 (6+1)



Les '--' :

Cet expression permet d'enlever 1 à une valeur, généralement placé après une variable afin d'en réduire la valeur de 1.
Il est à noter que ceci modifie la valeur de la variable en question.

EXEMPLES:
Code: (pawn) [Sélectionner]
new entier = 6;//un entier
printf("%d",entier);//écrit 6
entier--;
printf("%d",entier);//écrit 5 (6-1)



Les '+=' :

Cet expression permet d'ajouter une valeur à une valeur,
placé après une variable afin d'en augmenter la valeur du nombre suivant cet opérateur. (voir exemple)
Il est à noter que ceci modifie la valeur de la variable en question.

EXEMPLES:
Code: (pawn) [Sélectionner]
new entier = 6;//un entier
printf("%d",entier);//écrit 6
entier+= 10;
printf("%d",entier);//écrit 16 (6+10)



Les '-=' :

Cet expression permet d'enlever une valeur à une valeur,
généralement placé après une variable afin d'en réduire la valeur du nombre suivant cet opérateur (-=).(voir exemple)
Il est à noter que ceci modifie la valeur de la variable en question.

EXEMPLES:
Code: (pawn) [Sélectionner]
new entier = 58;//un entier
printf("%d",entier);//écrit 58
entier-=25;
printf("%d",entier);//écrit 33 (58-25)



Les '*=' :

Cet expression permet de multiplier la valeur de gauche par la valeur de droite.
Il est à noter que ceci modifie la valeur de la variable en question.

EXEMPLES:
Code: (pawn) [Sélectionner]
new entier = 6;//un entier
printf("%d",entier);//écrit 6
entier*=5;
printf("%d",entier);//écrit 30 (6*5)



Les STOCK :

un stock sert à déclaré une fonction ou une variable qui peut ne pas être utilisée, ce type d'initialisation est très utile dans les includes.
L'avantage du stock sur le #pragma unused ... est que la fonction/variable déclaré en stock ne sera pas compilée si inutilisée, contrairement au #pragma qui ne fait qu'éliminer l'avertissement
ainsi si je déclare la variable mais ne m'en sert pas, il n'y a aucun problème:
Code: (pawn) [Sélectionner]
new stock myNumber = 5;
new ILike = 15;
printf("%d",ILike);
Dans ce code myNumber ne sera pas compiler car il n'est pas utilisé
Par contre, dans le code suivant, elle le sera:
Code: (pawn) [Sélectionner]
new stock myNumber = 5;
printf("%d",myNumber);



Les LOOPS :

En tout premier lieu, vous devez savoir qu'il existe trois différents type de loops que l'on rencontre fréquemment sur les codes en PAWN pour SA-MP:

  • Les do-while
  • Les while
  • Les for

Les DO-WHILE :

Cette boucle suit la structure suivante:
Code: (pawn) [Sélectionner]
do
{
 ......//votre code
}
while(//une condition);
ainsi le code passera en premier par le do{....} et ce code sera exécuté, par la suite, si la condition est vraie, on refait le do{....} ainsi de suite jusqu'à ce que la condition ne soit plus vraie.


Les WHILE :

Cette boucle suit la structure suivante:
Code: (pawn) [Sélectionner]
while(//une condition)
{
.....
}
Ainsi, le code test en premier lieu la condition et si elle s'avère vraie, le code contenu entre les {} sera exécuté, un fois cela fait, on retourne au début et si la condition est vraie, on recommence le code, sinon, on passe par dessus et continue la suite du code...
Ce genre de boucle est souvent utilisé avec la déclaration préalable d'une variable qui sera modifié dans le while d'une façon où d'une autre...
Par exemple, pour arrêter un timer, il serait possible, je dit bien possible de faire le code suivant:
Code: (pawn) [Sélectionner]
new IsOk;
while(IsOk == 0)
{
 IsOk = KillTimer(timerquelconque);
}
bien entendu, le résultat de cette loop est quelque peut étrange (je ne suis pas sûr d'où vient la plupart des problèmes de timers qui ne se stoppent pas, mais s'il s'agit de la fonction qui ne fonctionne pas correctement, ceci devrait corrigé le problème.
P.S. il est cité dans le wiki que plusieurs fonction ne retournent aucune valeurs spécifique, or dans la plupart des cas une valeur est retourné, vrai si la fonction à réussi, faux dans le cas contraire

Les FOR :

Cette boucle suit la structure suivante:
Code: (pawn) [Sélectionner]
for(new i = 0; i<VALEUR; i++)
{
 .....
}
Donc, à voir la structure de cette loop, on voit aisément qu'une variable doit être déclaré, on pose ensuite une condition, et une variation de cette variable à chaque fois que le code est exécuté.
La loop précédante serait aussi équivalente à:
Code: (pawn) [Sélectionner]
new i;
while(i<VALEUR)
{
 ......
 i++;
}

Il est également possible d'ajouter certaines déclaration dans cette loop, par exemple une nouvelle variable et l'appel à une fonction afin d'obtenir une valeur:
Code: (pawn) [Sélectionner]
for(new i = 0,j = getMaxPlayers(); i<j; i++)
{
 ...
}



Les SWITCH :

En tout premier lieu, qu'es-ce qu'un switch?
Un switch est un opérateur logique un peu dans le genre du if/else if/... et sert à principalement à remplacer une longue série de if/else if
Il s'écrit de la façon suivante:
Code: (pawn) [Sélectionner]
switch(variable ou expression)
{
 case /*les/la valeur(s) pour lesquelles la même action sera exécutés/*:
 {
 ....
 }
 case/*d'autre(s) valeur(s) pour lesquelles on exécutera le même code*/:
 {
 ....
 }
 default:
 {
 //tous les cas qui ne sont pas énumérés plus haut
 }
}

Le principal avantage d'un switch, est la possibilité de regroupé différentes valeurs ensemble afin de simplifier l'écriture du code.
D'un autre côté, son principal défaut est l'impossibilité de placer comme valeur désirée une variable, il faut absolument y placer une constante, ici je parle des valeurs dans les case, la valeur dans le switch() peut bien évidemment être une variable.

Les CASE :

Cette expression est utilisé de concert avec les switch, il s'agit de l'expression qui indique au programme que les valeurs le suivant et devant les ':' sont les valeurs à rechercher
(EXEMPLE: voir code ci-dessus)

Les DEFAULT :

Cette expression est utilisé de concert avec les switch,
il peut être pris en compte comme un case, à la différence qu'il doit être à la fin et suivit d'aucune valeur.
Il s'agit du code qui sera appelé si aucune des autres valeurs n'a été appelée, de son nom, la valeur par défaut.
(EXEMPLE: voir code ci-dessus)



Les Directives de compilation:


Les '#define' :

Ces expressions peuvent avoir trois différentes utilités:

Éviter de compilé certaines partie de code que l'on ne désire pas, on en retrouve un exemple parfait dans le new.pwn que l'on retrouve dans le dossier pawno
EXEMPLE:
Code: (pawn) [Sélectionner]
#define USE_LANGUE_SYS

#if defined USE_LANG_SYS
 SendMsg(playerid........);
#else
 SendClientMessage(playerid.....);
#endif
Les autres expressions contenues dans cet exemples seront cités plus loin

Les define peuvent servir à définir des valeurs reprise à plein d'endroit, afin de pouvoir en changer la valeur aisément.
Il suffit que de penser à l'expression MAX_PLAYERS définie par a_samp.inc
EXEMPLE:
Code: (pawn) [Sélectionner]
#define NOMBRE_DE_KICK_AVANT_BAN 3

public OnPlayerDisconnect(playerid,reason)
{
 if(KickCount[playerid] == NOMBRE_DE_KICK_AVANT_BAN)Ban(playerid);
}

Et nous arrivons à l'utilité la moins utilisé: la création de simples fonctions.
Les defines peuvent prendres certains paramètres variables, il faut alors les représenter par %(nombre)
EXEMPLE:
Code: (pawn) [Sélectionner]
#define dcmd(%1,%2,%3) if ((strcmp((%3)[1], #%1, true, (%2)) == 0) && ((((%3)[(%2) + 1] == 0) && (dcmd_%1(playerid, "")))||(((%3)[(%2) + 1] == 32) && (dcmd_%1(playerid, (%3)[(%2) + 2]))))) return 1

Les '#if' :

sert à faire un test directement par le compiler, ainsi si certaines expressions sont vraies, défini, on peut ajouter ou non une partie de code
EXEMPLE:
Code: (pawn) [Sélectionner]
#define USE_POWER


#if defined USE_POWER
#include .....inc
#else
#error Could not load include
#endif

Les '#else' :

Si le premier test avec un #if était faut, ce qui suit sera pris en compte
(voir exemple au dessus)

Les '#endif' :

sert à fermer un #if , exactement comme un '}' avec un if normal
(voir exemple au dessus)

Pour une liste complète, mais en anglais:http://forum.sa-mp.co.uk/index.php/topic,248.0.html#post_directives


REMERCIEMENTS:

Un énorme merci à Syg pour toutes ses précisions, ajouts et corrections
Merci à [viruz]rider_77 pour ses suggestions d'ajouts
Merci à Bayshore pour sa suggestion

Pour conclure,
j'espère bien vous avoir appris au moins 2 ou 3 trucs dans ce petit tuto,
merci de votre attention  ;)

++Sim++

35
Scripting SA-MP [Pawn center] / Problème avec DJson
« le: 24 Décembre 2008, 22:17:01 »
Salut à tous,

alors je me suis remit sur mon système de comptes (fonctionne mal etc....) mais en essayant djson

alors, pour ceux d'entre vous qui connaitriez cet include qui me semble prometteur, pourriez vous m'aider avec un petit petit problème....

j'arrive très aisément à sauvegarder des données de la façon que je le désire mais je rencontre un ennui au moment de les récupérer...

les fonction (dj, djInt, djFloat....) me retourne sans arrêt des valeurs incohérente: des 0

j'ai bien chercher dans mon script, mais je ne voit point où le problème peut bien se situer...


je vous donne un petit exemple:

Save(playerid,PlayerName)
{
new tmp[64];
format(tmp,sizeof(tmp),"%s/Registered",PlayerName);
djSetInt(PLAYERS_DATA_FILE,tmp,1,true);
.....
}

Load(playerid,PlayerName)
{
format(tmp,sizeof(tmp),"%s/AdminLevel",PlayerName);
PlayersStats[playerid][AdminLevel] = djInt(PLAYERS_DATA_FILE,tmp,true);
...
}

public OnPlayerConnect(playerid)
{
GetPlayerName(playerid,PlayersStats[playerid][PName],MAX_PLAYER_NAME);
    format(string,sizeof(string),"%s/Registered",PlayersStats[playerid][PName]);
    if(djInt(PLAYERS_DATA_FILE,string))
{
    format(string,sizeof(string),"%s/LastIp",PlayersStats[playerid][PName]);
    if(!strcmp(dj(PLAYERS_DATA_FILE,string,true),PlayersStats[playerid][IP],true,9))
{
        LoadPlayerVariables(playerid,PlayersStats[playerid][PName]);
        SendMsg(playerid,COLOR_GREEN,"You have been automatically logged in!","Tu as été logué automatiquement!");
        if(PlayersStats[playerid][KickCount] >= KICK_TO_BAN)return BanEx(playerid,"Has been kicked too many times!");
        PlayersStats[playerid][LoggedIn] = true;
        return 1;
}
else SendMsg(playerid,COLOR_YELLOW,"/register to get an account","/register pour un compte");
}
.....
}

P.S. PLAYERS_DATA_FILE est le nom du fichier où je stocke toutes les données des joueurs

++Sim++

36
Scripting SA-MP [Pawn center] / [TUTO] Lancer un serveur sa-mp [PP]
« le: 12 Décembre 2008, 22:48:36 »
Salut à tous,

Tutoriel sur la création d'un serveur sa-mp

je sais qu'un tuto similaire existe déjà, masi puisque j'avaiis du temps libre et que je devais me praqtiquer avec powerpoint, je vous en ai créer un en .ppsx afin que tous puisse le regarder et c'est plus agréable... par contre c'est légèrement moins pratique pour les liens etc...

alors le voici, DOWNLOAD:


P.S. j'ai poster ici car je peut pas poster dans tuto :( désolé...
P.S.2 Si vous voulez des screens, j'en ferai....

Merci Felbrau: Visionneuse PowerPoint2007 et inférieur&nbsp; ;)

++Sim++

37
Autre / Pu d'idée :(
« le: 08 Novembre 2008, 04:29:24 »
Salut à tous,

alors pour mon serveur de stunt, je n'ai plus d'idée de quoi ajouter,

je voudrais un truc original et pas trop facile à copié...

mais présentement j'ai:

- un anti-fall
- un auto-nos (remet la nos automatiquement)
- deux langues
- etc

 alors, juste un truc vraiment rare voir m^me unique, n'importe quoi qui vous passe par la tête svp, je sais plus quoi scripter...

++Sim++

38
salut à tous,

Comme l'indique le titre du fil de discussion,
je travaille présentement sur un script de stunt :D et j'ai le désagrément d'être affligé par des crash plutôt fréquent et pour des raisons que je n'arrive a identifier >:(
alors, je suis ici afin de vous quérir de l'aide :closedeyes.. voici les statistiques du serveur:

- environ 2500 objets (utilisés avec un streamer, ne vous inquiétez pas, streamer que j'ai d'ailleur modifié afin d'y placer une limite d'objets simultanés de 165)
- plus ou moins 400 véhicules
- une vingtaine de pickup
- aucun checkpoint
- 3 timer (dont celui du streamer)
- 3 textdraw (nom du serveur et automessage)
- automessages dans le chat (1 par 2 minutes tout comme ceux du textdraw)
- script ultra simple et basique d'admin intégré au gamemode
- 1 filterscript (le streamer)
 et...

mais bon voilà, rien de cela ne me parait réellement suspect à causer des crash si fréquents :-X... je me doute bien que quelques modèle d'objets peuvent être instables, :-\ mais pas à ce point....
Lorsqu'il y a deux joueurs, ils ont de la difficulté à jouer plus de 15 minutes, parfois, surement par chance, trois ou quatre pendant environ 1 heure, mais guère plus :(

p.s. quand je parle de crash, je parle des clients, et il arrive que tous crash au même moment...

je post le script entier sur pastebin, voici le lien: http://pastebin.gtaonline.fr/pastebin.php?show=498

alors merci à ceux et celles qui s'efforceront de jeter un œil a mon script, et s'il-vous-plait, respectez les droits d'auteurs si vous empruntez certains bouts de codes....

++Sim++

39
Showroom SA:MP / [FS] Fast-Move pour les admins
« le: 02 Octobre 2008, 02:55:06 »
Salut à tous,

Voici mon 2e don pour ce showroom:

Fast-Move pour Admin

Un FilterScript permettant aux admins logés en rcon de pouvoir bouger plus rapidement à l'aide de touches autres que celles de déplacements,
Les touches utilisés sont facilement éditables grâce a des define en haut du FilterScript et ce FS est conçu avec les fonctions de mon include de langues, que vous pouvez trouver ICI
J'ai noté que parfois, et je ne suis pas sûr que ce script en est la cause, lorsque l'on met une distance trop grande à parcourir, l'on se retrouve si loin de San Andreas que le serveur plante.... mais je n,en suis pas sûr, donc j'ai ajouter une distance maximale à parcourir par fois



Fonctionnalités:
  • /fm [distance] : L'admin commence le fast-move ou l'arrête si la distance est de 0
  • KEY_ANALOG_LEFT : Avancer vers l'endroit où pointe le perso (ou skin)
  • KEY_ANALOG_RIGHT : Reculer vers l'arrière du skin
  • KEY_SUBMISSION : monter lorsque l'on passe sous le sol

NOUVELLE VERSION:

  • KEY_ANALOG_LEFT: en véhicule, tourne a gauche de 30°, identique à l'ancienne version à pied
  • KEY_ANALOG_RIGHT: en véhicule, tourne a droite de 30°, identique à l'ancienne version à pied
  • KEY_ANALOG_UP: en véhicule seulement(la key n,est pas détecté à pied) :Avancer
  • KEY_ANALOG_DOWN: en véhicule: reculer
  • KEY_SUBMISSION : monter lorsque l'on passe sous le sol



Installation (pour les débutants)

C'est très simple, il faut placer les fichiers fournis dans le .rar dans le dossier FilterScriptdu serveur sa-mp et ajouter dans le fichier server.cfg: FMAdmin dans la ligne filterscript
ou encore copier le code du pastebin dans un nouveau fichier .pwn, le placer dans le dossier filterscript et le compiler à l'aide de pawno, puis ajouter FMAdmin dans le server.cfg comme ci-dessus

N.B. AFIN DE COMPILER CE SCRIPT, IL VOUS FAUT MON INCLUDE DE LANGUES, VOUS POUVEZ TROUVER LE LIEN CI-DESSUS DANS MON «INTRODUCTION»



Téléchargement:

FMAdmin.rar sur rapidshare
FMAdmin.pwn sur pastebin

NOUVELLE VERSION:


http://pastebin.gtaonline.fr/pastebin.php?show=523



Si vous trouvé des bugs, s'il vous plait, signalé le sur ce topic!

Experts et habitués

 &nbsp; &nbsp;Si vous êtes moindrement intéressés, pourriez vous s'il -vous-plait regarder le code et m'expliquer ce qui pourrait être améliorer, je ne suis toujours pas un expert en PAWN après tout.... :closedeyes



En espérant que ce soit utile à certains..... :D

CONSEIL: ne le modifier pas afin de permettre à tous les joueurs de le faire, cela amènerais uniquement une surcharge de la bande passante ::)

et s'il vous plait, laissez les crédits et demandez une autorisation avant de publier ce script :cheers

++Sim++

40
Scripting SA-MP [Pawn center] / Crash serveur
« le: 11 Septembre 2008, 00:27:25 »
salut à tous,

alors comme le titre du sujet l'indique, j'ai un problème : mon serveur crash,

et je sais très bien ce qui est appelé à ce moment là, ou presque,

il s'agit de OnPlayerDisconnect amis je n'ai rien trouvé de suspect dans aucune de ces callbacks

voici les codes:

public OnPlayerDisconnect(playerid, reason)
{
  spawned[playerid] = 0;
  haskilled[playerid][0] = 0;
  haskilled[playerid][1] = 0;
  saved[playerid][0] = 0;
  lang[playerid][isset] = 0;  lang[playerid][eng] = 0;  lang[playerid][fr] = 0;
  Dm[playerid] = 0;
  pcount[playerid] = -1;
  afb[playerid] = 0;
  soundplayed[playerid] = 0;
return 1;
}

public OnPlayerDisconnect(playerid, reason)
{
altele[playerid] = 0;
new pname[MAX_PLAYER_NAME], string[256], str[256];
GetPlayerName(playerid, pname, sizeof(pname));
        SendDisconnectMsg(playerid,,pname,reason);
return 1;
}

public OnPlayerDisconnect(playerid, reason)
{
DestroyPlayerObject(playerid,ma);
DestroyPlayerObject(playerid,tj);
DestroyPlayerObject(playerid,hj);
DestroyPlayerObject(playerid,mj);
DestroyPlayerObject(playerid,hmmm);
Object_OnPlayerDisconnect(playerid, reason);
return 1;
}


sinon y a que le vactions

alors comme la plupart ce sont des variables, et quelles sont supposées être ok.... je voit vraiment pas :(

merci de m'aider :D

EDIT:

alors je viens de penser à un truc, mais je ne crois pas vraiment que ce soit en cause mais j'ai ajouter à mon include de langues les fonctions suivantes, je me demande si elles pourraient être en cause...:

SendFormattedMsg(playerid,color,const msg1[],const msg2[],{Float,_}:...)
{
new string[256];
if(!GetLang(playerid)){
    format(string,sizeof(string),msg1, {Float,_}:...);
}else format(string,sizeof(string),msg2,{Float,_}:...);
  return SendClientMessage(playerid,color,string);
}


SendFormattedMsgToAll(color,const msg1[],const msg2[],{Float,_}:...)
{
new stringfr[256];,stringeng[256];
format(stringeng,sizeof(stringeng),msg1,{Float,_}:...);
format(stringfr,sizeof(stringfr),msg2,{Float,_}:...);
for(new i; i < maxp; i++){
    if(!IsPlayerConnected(i))return 1;
if(!GetLang(i))return SendClientMessage(i,color,stringeng);
else return SendClientMessage(i,color,stringfr);
}
}

Merci à tous de votre aide (encore  :P) :cheers

++Sim++

41
Showroom SA:MP / [INC] Système MultiLangue
« le: 08 Septembre 2008, 02:48:35 »
Salut à tous,

alors je suis ici afin de vous présenté ma première participation au showroom :P... mon nouveau, et premier...

Include de langues

Fonctionnalités:

  • GetLang(playerid) : fonction qui permet de déterminer la langue d'un joueur
  • SendRndMsg : un SendClientMessage avec un random sur les couleurs (pas besoin de se casser la tête à en mettre, surtout utile lorsque l'intérêt d'une couleur spécifique est restreins)
  • SendMsg : un SendClientMessage où l'on choisi la couleur
  • SendRedMsg : un SendClientMessage spécialement pour les messages d'erreur: rouge
  • GameTextToPlayer : un GameTextForPlayer normal sauf pour les langues
  • GameTextToAll : un GameTextForAll
  • dcmd_lang : la commande que le joueur tape pour choisir sa langue
  • ChoisiTaLangue : Fonction à placer dans la callback de votre choix ( je recommande OnPlayerConnect ou OnPlayerSpawn), elle envoie un message au joueur de choisir une langue s'il ne l'a pas fait
  • SendMsgToAdmins(Couleur,MessageAnglais[],MessageFrançais[]); envoie le message de la langue correspondante à chaque admin logué en rcon
  • SendMsgToAllExcept(playerid,Couleur,MessageAnglais[],MessageFrançais[]); envoie le message à tous les joueurs excepté un seul, le playerid
  • GameTextToAllExcept(playerid,Couleur,MessageAnglais[],MessageFrançais[],time,type); envoie le GameText à tous les joueurs excepté un seul
  • SendFormatMsg(playerid,Couleur,MessageAnglais[],MessageFrançais[], {Float,_}:...); envoie le message formaté à un seul joueur
  • SendFormatMsgToAll(Couleur,MessageAnglais[],MessageFrançais[], {Float,_}:...); envoie le message formaté à tous les joueur
  • FormatGameTextToPlayer(playerid,MessageAnglais[],MessageFrançais[],temp,style, {Float,_}:...); envoie le GameText formaté à un joueur
  • FormatGameTextToAll(MessageAnglais[],MessageFrançais[],temp,style, {Float,_}:...); envoie le GameText formaté à tous les joueurs

P.S. Je tien à remercier MISTER-FRED pour son format qui m'a permit d'ajouter les 4 dernières fonctions, MERCI BEAUCOUP

Comment s'en servir?

C'est très simple, chacune de ces fonctions à deux paramètre de message, le premier est pour le message en anglais et le second pour celui en français,

Exemple:
SendRndMsg(playerid,/*pas de couleur*/"Welcome to the server *** and have fun","Bienvenu sur le serveur *** et amuse toi bien");
ce message remplacerait:
SendClientMessage(playerid,COLOR_YELLOW,"Bienvenu sur le serveur *** et amuse toi bien");
alors je crois cet exemple plus qu'explicite, par contre, si vous voulez plus d'exemple le fichier .rar contient un script d'exemple

Pour inclure cet include à votre script, tout comme n'importe quel autre, il vous faut placer "#include langues" en haut de votre gamemode,
 vous pouvez également enlever a_samp, il est chargé dans l'include

et finalement je voudrais ajouter de ne pas oublier le dcmd(lang,4,cmdtext); dans OnPlayerCommandeText et de placer ChoisiTaLangue(playerid) dans une callback

Téléchargement:

V 1.0 :
Langues.rar sur rapidshare
Langues.inc sur pastebin

V1.1 :
Langues.inc sur pastebin
Langues.rar sur Savefile


V1.2 (PLUS RÉCENTE) :
PASTEBIN


V En/Fr/De :
PASTEBIN


Si vous trouvé des bugs où fonction manquante, s'il vous plait, signalé le sur ce topic!

Points importants :

Vous devez ABSOLUMENT placé les éléments suivants pour le bon fonctionnement de l'include:

 - GetPlayerCount() Dans OnGameModeInit, cette fonction retourne le nombre maximum de joueurs que votre serveur peut acceuillir, il s'agit d'une façon simple d'optimiser légèrement les for lopp utilisées dans
 lescript, par contre, si vous oubliez de le placer, les fonctions qui envoi des messages à tous ne fonctionneront plus...
 - ChoisiTaLangue(playerid) dans la calback OnPlayerSpawn afin d'informer vos joueurs de faire un choix de langue, aucun message s'ils ont déjà choisi
 - dcmd_lang(playerid,4,cmdtext); dans la callback OnPlayerCommandText

De plus, il est grandement recommandé d'ouvrir l'include et de mettre le nombre de joueur maximum que votre serveur peut accueillir à la ligne 46 à la suite du #define maxp ...., remplacez le 200 par la valeur que vous avez besoin, ainsi les variables pourront être réduites en taille

Une nouvelle version vien tout juste de sortir, elle contient certaines amélioration (niveau variables) mais très peu, son avantage est le suivant: trois langues au lieu de seulement 2.
Je tien a remercier jonjon (aussi connu sous le nom de metrakit) pour l'idée et l'aide qu'il m'a apporter (à vrai dire il avait commencé et je ne l'ai aidé que très peu ^^). Les langues par défauts sont: francais, anglais et allemand

Avis aux connaisseurs :
ceux qui serait intéressé, pourriez vous s'il -vous-plait regarder le code et m'expliquer ce qui pourrait être améliorer, je ne suis toujours pas un expert en PAWN après tout.... :closedeyes

Have fun :cheers

Modifier une langue :

Afin de remplacer une langue existante sur l'include par une autre, il faut effectuer les étapes suivantes:
  • 1. remplacer le #define en haut du script (ligne 60 environ) par la langue désirée
  • 2 remplacer la langue désirée dans le enum suivant (ligne 120):
enum langues
{
bool:isset,
bool:eng,
bool:fr,//ex: bool:esp pour espagnol
}
  • 3. modifié la valeur modifié dans l'énumération à la même expression dans la fonction GetLang
  • 4. si désiré, changer les native afin de voir la bonne langue dans la liste des fonctions dans pawno comme ceci:
native SendMsgToAll(color,msgENG[],msgFR[]);
DEVIENT:
native SendMsgToAll(color,msgENG[],msgESP[]);//pour l'espagnol

merci de postez vos commentaire et de respecter les crédits (pour mister-fred, Jonjon et moi (désolé jonjon, j'ai oublié de l'écrire dans le fichier :'( :'( :closedeyes)

++Sim++

42
Scripting SA-MP [Pawn center] / include système de langues
« le: 06 Septembre 2008, 23:01:08 »
salut à tous,

dernièrement j'ai travaillé sur un include pour faire une système de langues, 2 dans ce cas,anglais et français, et bon... je voudrais savoir les fonction qui pourraient être utiles pour la plupart des utilisateurs

volià ce que j'ai de fait:

- couleurs intégrées à certaines fonctions de message (aléatoires)
- équivalent du SendClientMessage à deux textes différents, l'un pour anglais, l'autre français
- équivalent du GameTextForPlayer
- équivalent du SendClientMessageToAll
- une fonction pour détecter la langue d'un joueur

et possiblement (sur mon gm présentement):

- message choisi une langue au spawn
- commande pour changer la langue d'un joueur (admin)
- commande pour choisir la langue (joueur)

alors voilà et si vous avez des idées/suggestions/commentaires n'hésitez pas à les poster, merci :D :D

 et puis si bien entendu ça intérresse quelques personnes, je le mettrai dans le showroom  :happy

++Sim++

43
Scripting SA-MP [Pawn center] / les randoms
« le: 05 Septembre 2008, 05:21:49 »
salut à tous,

alors voila, je me demandais si faire les random prennent beaucoup de puissance,

s'ils sont complexes a exécuter ou s'il s'agit d'une fonction que l'on pourrait utiliser à volonté....

alors merci de répondre au plus vite... :) :)

++Sim++

44
Scripting SA-MP [Pawn center] / Problème d'angle (sin,cos,tan)
« le: 04 Septembre 2008, 03:32:24 »
salut a tous,

alors voila, comme le titre le dit, j'aurais un problème avec les sin,cos,tan

alors je voudrais a l'aide de mesures trouvé la mesure d'un angle qui le compose.......

alors c'est que si par exemple un joueur regarder au nord-est (vue de haut) et bien je voudrais trouver l'angle qu'il forme avec l'axe horizontal.....

le probleme est très simple, mais je n,ai pas trouvé de fonction arcsin, arccos ou encore arctan.

puisque toutes les méthodes que j'aie vu les utilise, je ne trouve pas, alors aidez moi s.v.p. :D

merci d'avance

++Sim++

45
Scripting SA-MP [Pawn center] / Bug de joueur qui disparaissent
« le: 12 Avril 2008, 17:16:29 »
salut,

alors voilà,

j'ai modifier mon taxi fs pour que les véhicules ne disparaissent pas selon la variable, mais plutôt s'il n'y a aucun joueur à l'intérieur....

donc au lieu de :

if(vehisused[VehicleInfo[i][idnum]] == 0) {
if(IsPlayerClose(i,SPAWN_DISTANCE) == 0) {
            DestroyVehicle(VehicleInfo[i][idnum]);
            VehicleInfo[i][spawned] = 0;
                    modelcount[VehicleInfo[i][modeltx]-400]--;
streamcount--;
      }
}

j'ai mit:
    if(!IsAnyPlayerInVehicle(VehicleInfo[i][idnum])){
        if(!IsPlayerCloseToUsed(VehicleInfo[i][idnum],SPAWN_DISTANCE)){
            DestroyVehicle(VehicleInfo[i][idnum]);
            VehicleInfo[i][spawned] = 0;
                    modelcount[VehicleInfo[i][modeltx]-400]--;
streamcount--;
}
}

en ayant bien entendu défini les fonction IsAnyPlayerInVehicle et IsPlayerCloseToUsed

ces deux fonction sont correcte...


alors voila le problème,

il arrive parfois, asser rarement quand même, qu'un joueur disparaisse completement de la carte et du jeu, ill est totalement invisible....

on ne le voit plus, il n'a plus de radar, la seule façon de savoir qu'il est la est tab ou s'il est dans un véhicule, il se déplace mais le véhicule est marqué comme n'ayant aucun joueur à l'intérieur.... ???

si quelqu'un peut m'expliquer le bug.... merci beaucoup

P.S. je suis presque sur qu'il de ce bout de script puisque la seule autre chose que j'ai modifié est avoir le choix entre le texte en anglais ou français...

++Sim++


Pages: 1 2 [3] 4