GTAOnline.net

San Andreas Multiplayer (sa:mp) => Scripting SA-MP [Pawn center] => Discussion démarrée par: Jcvag44800 le 26 Février 2011, 15:17:31

Titre: [Topic de Jcvag44800]
Posté par: Jcvag44800 le 26 Février 2011, 15:17:31
Salut tout le monde !

Voila, j'ouvre mon topic !

J'ai donc une première question

A quoi sert ces chiffres :

{1958.3783,1343.1572,15.3746},

Par exemple, j'ai tout ces chiffres :

new Float:gRandomPlayerSpawns[23][3] = {
{1958.3783,1343.1572,15.3746},
{2199.6531,1393.3678,10.8203},
{2483.5977,1222.0825,10.8203},
{2637.2712,1129.2743,11.1797},
{2000.0106,1521.1111,17.0625},
{2024.8190,1917.9425,12.3386},
{2261.9048,2035.9547,10.8203},
{2262.0986,2398.6572,10.8203},
{2244.2566,2523.7280,10.8203},
{2335.3228,2786.4478,10.8203},
{2150.0186,2734.2297,11.1763},
{2158.0811,2797.5488,10.8203},
{1969.8301,2722.8564,10.8203},
{1652.0555,2709.4072,10.8265},
{1564.0052,2756.9463,10.8203},
{1271.5452,2554.0227,10.8203},
{1441.5894,2567.9099,10.8203},
{1480.6473,2213.5718,11.0234},
{1400.5906,2225.6960,11.0234},
{1598.8419,2221.5676,11.0625},
{1318.7759,1251.3580,10.8203},
{1558.0731,1007.8292,10.8125},
//{-857.0551,1536.6832,22.5870},   Out of Town Spawns
//{817.3494,856.5039,12.7891},
//{116.9315,1110.1823,13.6094},
//{-18.8529,1176.0159,19.5634},
//{-315.0575,1774.0636,43.6406},
{1705.2347,1025.6808,10.8203}
};

Voila, je n'ai jamais trop compris à quoi ça servais

Merci de m’éclaircir dessus s'il vous plait
Titre: Re : [Topic de Jcvag44800]
Posté par: MK le 26 Février 2011, 15:24:46
Les coordonnées de position  X, Y, Z
Titre: Re : [Topic de Jcvag44800]
Posté par: Jcvag44800 le 26 Février 2011, 15:34:31
Oui merci , mais

Enfin je voulais dire, pourquoi entre accolade ? et dans un new ??
Titre: Re : [Topic de Jcvag44800]
Posté par: Foo le 26 Février 2011, 15:38:27
Ba logiquement, c'est les positions aléatoires ("random") ou tes joueurs vont spawn
Titre: Re : [Topic de Jcvag44800]
Posté par: Jcvag44800 le 26 Février 2011, 16:03:13
Oui mais pourquoi plusieurs pos  ???
Titre: Re : [Topic de Jcvag44800]
Posté par: Lucifer le 26 Février 2011, 16:15:58
Elles sont entre { } car ce sont des valeurs d'un tableau qui est déclarer ici :

new Float:gRandomPlayerSpawns[23][3]
Avec le nombre 23 étant le nombre de cellules du tableau.

Ce sont des positions aléatoires où va spawn ton joueur.

En espérant t'avoir aidé  ;)
Titre: Re : [Topic de Jcvag44800]
Posté par: Jcvag44800 le 26 Février 2011, 16:55:17
Ah d'accord merci !

C'est donc , par exemple

Je clique sur spawn, je vais spawn à la pos 1
Et si je reclique sur spawm, je vais spaw à la pos 2 ??
Titre: Re : [Topic de Jcvag44800]
Posté par: Lucifer le 26 Février 2011, 17:00:34
De rien ! ;)

Je voyais pas çà comme sa moi xD.

En gros, il spawn au hasard quoi, j'avais au même endroit..sa change. Enfin je crois que c'est sa ^^
Titre: Re : [Topic de Jcvag44800]
Posté par: Jcvag44800 le 26 Février 2011, 17:25:41
Oui, à mon avis tu as raison, je pensais un peut comme toi

Quelqu'un pour confirmer s'il vous plait ?
Titre: Re : [Topic de Jcvag44800]
Posté par: Xartrick le 26 Février 2011, 19:17:35
Je vais expliqué avec des mots plus technique.

Ceci est un tableau, mais pas un simple tableau, un tableau multidimensionnel.
Ici, tu ne fais que déclarer le tableau, donc pas encore de notion de nombre aléatoire (qui ne sont pas réellement aléatoire).

Voici un exemple sous forme de code.


new TableauMultiDimensionnel[5][2] = {
{0, 1}, // 0
{2, 3}, // 1
{4, 5}, // 2
{6, 7}, // 3
{8, 9}  // 4
};

TableauMultiDimensionnel[0][0]; // = 0
TableauMultiDimensionnel[0][1]; // = 1

TableauMultiDimensionnel[1][0]; // = 2
TableauMultiDimensionnel[1][1]; // = 3

TableauMultiDimensionnel[2][0]; // = 4
TableauMultiDimensionnel[2][1]; // = 5

TableauMultiDimensionnel[3][0]; // = 6
TableauMultiDimensionnel[3][1]; // = 7

TableauMultiDimensionnel[4][0]; // = 8
TableauMultiDimensionnel[4][1]; // = 9
Titre: Re : [Topic de Jcvag44800]
Posté par: Jcvag44800 le 01 Mars 2011, 19:36:43
Voila tout le monde,

J'ai voulu faire une commande de "makeadmin" en m'aidant du modèle d'une commande de LARP  :blink

La voici
    if(strcmp(cmdtext, "/makeadmin", true) == 0)
{
    if(IsPlayerConnected(playerid))
    {
        new tmp[256];
        new idx;
tmp = strtok(cmdtext, idx);
if(!strlen(tmp))
{
SendClientMessage(playerid, 0xC0C0C0FF, "{00FF00}USAGE: {C0C0C0}/makeadmin [playerid/Nom] [level]");
return 1;
}
para1 = ReturnUser(tmp);
new para1;
new level;


level = strval(tmp);
tmp = strtok(cmdtext, idx);
if(PlayerInfo[playerid][pAdminLevel] >= 5)
{
    if(IsPlayerConnected(para1))
    {
                   new giveplayer[MAX_PLAYER_NAME];
       new sendername[MAX_PLAYER_NAME];
       GetPlayerName(para1, giveplayer, sizeof(giveplayer));
       GetPlayerName(playerid, sendername, sizeof(sendername));
       PlayerInfo[para1][pAdminLevel] = level;
       printf("AdmCmd: %s a mis %s level %d admin.", sendername, giveplayer, level);
           new string[256];
             format(string, sizeof(string), "   Tu es maintenant level {00FF00}%d{FFFFFF} admin.", level);
       SendClientMessage(para1, 0xFFFFFFFF, string);
       format(string, sizeof(string), "   Vous avez mis {00FF00}%s{FFFFFF} level {00FF00}%d{FFFFFF} admin.", giveplayer,level);
       SendClientMessage(playerid, 0xFFFFFFFF, string);
}
}
else
{
SendClientMessage(playerid, 0xC0C0C0FF, "Vous n'êtes pas autorisé à utiliser cette commande !");
}
}
return 1;
}

J'ai n'ai aucune érreur & aucun warning,
Cependant ,
Quand je vais IG :

Quand je ne suis pas admin : Sa me dit bien que la commande n'est pas autorisé à bibi
Quand je suis admin : rien ne se passe  :'(

J'aurais penser à une érreur dans les strings ?

Merci à vous
PS : Mettez moi sur le chemin au lieu de me donner la réponse, sa m'aideras pour les autres commande  :cheers
Titre: Re : [Topic de Jcvag44800]
Posté par: S!m le 01 Mars 2011, 19:45:11
Salut,

Concernant ton tableau, quand tu dit au hasard, jamais au même endroit....
Au hasard oui, jamais au même endroit ... non.

Tu peut apparaitre plusieurs fois de suite au même endroit, puis apparaitre à d'autres positions... c'est ça du hasard.

En ce qui concerne le tableau, et non pas le hasard:
Chaque ligne correspond à une position. Donc, dans ton tableau, tu as 23 positions différentes où les joueurs peuvent apparaitre.

Ensuite, quand tu veut faire ton spawn aléatoire, tu vas choisir, au hasard, une de ces 23 positions. C'est là que le hasard intervient, via la fonction random(max).


Pour ta commande de makeadmin, le strtok cause problème, il commence là lecture au premier caractère et donc ne donne pas la bonne information. Tu devrais ajuster la valeur initiale de idx.
Il peut y avoir d'autres erreurs, mais celle ci empêche clairement ta commande de fonctionner.

++Sim++
Titre: Re : [Topic de Jcvag44800]
Posté par: Jcvag44800 le 01 Mars 2011, 20:12:01
Ok merci pour ta réponse Sim

Mais je ne comprend pas quand tu dit " Tu devrais ajuster la valeur initiale de idx. "
C'est à dire ? Faire comme ceci : new idx = 9;

Je ne sais pas vraiment ^^'

Merci .
Titre: Re : Re : [Topic de Jcvag44800]
Posté par: S!m le 01 Mars 2011, 21:43:20
Salut,

Ok merci pour ta réponse Sim

Mais je ne comprend pas quand tu dit " Tu devrais ajuster la valeur initiale de idx. "
C'est à dire ? Faire comme ceci : new idx = 9;

De rien.

Tout à fait, mais 9 n'est pas la bonne valeur. Sinon, tu peut toujours faire deux appel à strtok. Au moment de l'exécution ce sera un peu plus lent, mais vu la différence....

++Sim++
Titre: Re : [Topic de Jcvag44800]
Posté par: Jcvag44800 le 01 Mars 2011, 22:40:56
C'est bon j'ai réussi !

Merci encore Sim ;)

Et maintenant, je viens de faire une commande /mute, je prossédé comme ça :

if(strcmp(cmd, "/mute", true) == 0)
{
   if(IsPlayerConnected(playerid))
   {
new tmp[256];
tmp = strtok(cmdtext, idx);
if(!strlen(tmp))
{
SendClientMessage(playerid, 0xC0C0C0FF, "USAGE: /mute [idjoueur]");
return 1;
}
new playa;
playa = ReturnUser(tmp);
if (PlayerInfo[playerid][pAdminLevel] >= 1)
{
   if(IsPlayerConnected(playa))
   {
       if(playa != INVALID_PLAYER_ID)
       {
new giveplayer[MAX_PLAYERS];
new sendername[MAX_PLAYER_NAME];
   GetPlayerName(playa, giveplayer, sizeof(giveplayer));
GetPlayerName(playerid, sendername, sizeof(sendername));
if(PlayerInfo[playa][pMuted] == 0)
{
PlayerInfo[playa][pMuted] = 1;
printf("AdmCmd: %s a muté %s",sendername,  giveplayer);
new string[256];
format(string, sizeof(string), "AdmCmd: %s a été muté %s",giveplayer ,sendername);
ABroadCast(0xFF7575FF,string,1);
}
else
{
PlayerInfo[playa][pMuted] = 0;
printf("AdmCmd: %s démute %s",sendername,  giveplayer);
new string[256];
format(string, sizeof(string), "AdmCmd: %s a démuté %s",giveplayer ,sendername);
ABroadCast(0xFF7575FF,string,1);
}
}
}
}
else
{
SendClientMessage(playerid, 0xC0C0C0FF, "Tu n'es pas autorisé à utiliser cette commande !");
}
}
return 1;
}
public OnPlayerText(playerid, text[])
{
    new Muted[MAX_PLAYERS];
    if(Muted[playerid] == 1) return 0;
    return 1;
}

Et je peut toujours parler ...
La encore, pouvez vous me mettre sur le chemin svp ?
Merci
Titre: Re : [Topic de Jcvag44800]
Posté par: Lucifer le 02 Mars 2011, 13:35:44
Citer
Tu peut apparaitre plusieurs fois de suite au même endroit, puis apparaitre à d'autres positions... c'est ça du hasard.

C'est ce que j'ai voulu dire mais avec mes mots :P. Mais sinon oui je suis d'accord avec cela Sim ;).
Titre: Re : [Topic de Jcvag44800]
Posté par: Jcvag44800 le 02 Mars 2011, 13:58:40
Merci à toi  :D

PS : Le beug commande /mute est réglé  ::)

Maintenant j'aimerais crée une course ( /race )
Mais je ne sait pas vraiment bien m'y prendre
J'ai regardé ici :
http://wiki.sa-mp.com/wiki/SetPlayerRaceCheckpoint (http://wiki.sa-mp.com/wiki/SetPlayerRaceCheckpoint)
http://wiki.sa-mp.com/wiki/IsPlayerInCheckpoint (http://wiki.sa-mp.com/wiki/IsPlayerInCheckpoint)

Mais je n'ai sais pas trop par ou commencer :S

J'ai aussi regardé ceci http://wiki.sa-mp.com/wiki/YSI:Races (http://wiki.sa-mp.com/wiki/YSI:Races) 
Mais je n'ai pas trop compris ^^

Merci à vous
Titre: Re : [Topic de Jcvag44800]
Posté par: Lucifer le 02 Mars 2011, 14:14:45
Tu as un FS vraiment bien qui s'appelle YRACE. Tu peux t'aider de celui là pour faire le tient ;).
Titre: Re : [Topic de Jcvag44800]
Posté par: Jcvag44800 le 02 Mars 2011, 14:20:24
Salut tout le monde !

J'ai voulu faire un système d'annonce automatique.
J'ai donc procédé comme ceci :
forward Annonce();public OnGameModeInit()
{

    print("Démarrage du Timer...");
    SetTimer("Annonce",1000,false);
....
public Annonce()
{
 SendClientMessageToAll(0xFFFF00FF, "=============================================================================================================");
 SendClientMessageToAll(0x009D00FF, "Vous jouez sur {FF0000}******{009D00}. Merci de votre confience !");
 SendClientMessageToAll(0x009D00FF, "Vous pouvez aussi aller sur notre site web, {FF0000}*****");
 SendClientMessageToAll(0xFFFF00FF, "=============================================================================================================");
 return 1;
}

Malgré tout, rien ne se passe

Merci à vous.
Titre: Re : [Topic de Jcvag44800]
Posté par: cristab le 03 Mars 2011, 14:49:06
pourtant apparement sa se passe tres bien mais c'est tellement rapide que tu na pas le temps de te connecter pour le voir remplace false par true
Titre: Re : [Topic de Jcvag44800]
Posté par: Jcvag44800 le 03 Mars 2011, 15:39:14
Ah oui merci :)
Par contre j'ai changé le Timer xD parce que le message toute les 1 seconde ...  :ninja
Titre: Re : [Topic de Jcvag44800]
Posté par: Jcvag44800 le 11 Mars 2011, 13:26:32
Salut tout le monde !

Voila, j'aimerais savoir si c'est possible d'enlever le " pion " dans la carte l'hors qu'on utilise SetPlayerColor (http://wiki.sa-mp.com/wiki/SetPlayerColor).

Merci à vous.
Titre: Re : [Topic de Jcvag44800]
Posté par: Tux le 11 Mars 2011, 13:41:27
Il suffit d'ajouter ça dans OnGameModeInit: ShowPlayerMarkers(0);
Si tu veux l'enlever en utilisant juste SetPlayerColor, il te faudra trouver une couleur hexadécimal invisible.
Titre: Re : [Topic de Jcvag44800]
Posté par: Jcvag44800 le 11 Mars 2011, 13:53:06
Merci à toi Tux !
Titre: Re : [Topic de Jcvag44800]
Posté par: Jcvag44800 le 13 Mars 2011, 21:01:29
Salut tout le monde !

Voila j'ai plusieurs questions !

Le casque où l'on peut mettre quand on va par exemple sur un scooter y est toujours dans la version 0.3 de SA:MP ?

Et je ne comprend pas se que veut dire " index " , a quoi ça sert

http://wiki.sa-mp.com/wiki/SetPlayerAttachedObject (http://wiki.sa-mp.com/wiki/SetPlayerAttachedObject)

Merci à vous

Titre: Re : [Topic de Jcvag44800]
Posté par: babaorum59 le 14 Mars 2011, 17:25:52
message supprimé , nouvelle page non vue
Titre: Re : [Topic de Jcvag44800]
Posté par: Xartrick le 14 Mars 2011, 17:50:01
index, ou plus couramment appelé, id.
Utilisé pour:

- http://wiki.sa-mp.com/wiki/RemovePlayerAttachedObject (http://wiki.sa-mp.com/wiki/RemovePlayerAttachedObject)
- http://wiki.sa-mp.com/wiki/IsPlayerAttachedObjectSlotUsed (http://wiki.sa-mp.com/wiki/IsPlayerAttachedObjectSlotUsed)
Titre: Re : [Topic de Jcvag44800]
Posté par: Smail_Smith le 17 Mars 2011, 14:25:38
Wiki marche po chez moi  ;D LoooL
++
Titre: Re : [Topic de Jcvag44800]
Posté par: Jcvag44800 le 19 Mars 2011, 16:34:46
Salut tout le monde !

Voila,

J'ai un problème ><

Je viens de faire ceci :

http://pastebin.com/Eg899hQC (http://pastebin.com/Eg899hQC)

Pourtant, sa me marque toujours pas, la variable de mon compte est pourtant à : Langage = 2 ...

Merci à vous
Titre: Re : [Topic de Jcvag44800]
Posté par: Jcvag44800 le 26 Mars 2011, 23:03:32
:laugh Salut tout le monde  :laugh

Voila, j'une question

J'aimerais savoir, comment montrer que, tant de joueur son dans un DM, par exemple

J'ai donc faire la variable pDM ( etc )
Enfaîte, j'aimerais montrer combien de joueur en ligne on la variable pDM = 1;

Merci à vous
Titre: Re : [Topic de Jcvag44800]
Posté par: Ssk le 26 Mars 2011, 23:19:17
tu peut faire un truc de ce genre ^^


GetPlayerCountInDM( )
{
new number = 0;
for( new i = 0; i < MAX_PLAYERS; i++ )
{
if( IsPlayerConnected( i ) && DM[i] != 0 )
{
number++;
}
}
return number;
}
Titre: Re : [Topic de Jcvag44800]
Posté par: Jcvag44800 le 26 Mars 2011, 23:35:20
Merci à toi Ssk,

Je n'ai pas trop compris comment utiliser ce code, aucune défine à faire, new ???
Titre: Re : [Topic de Jcvag44800]
Posté par: Jcvag44800 le 27 Mars 2011, 00:48:51
Ah d'accord,

Merci à vous deux :)