GTAOnline.net

San Andreas Multiplayer (sa:mp) => Scripting SA-MP [Pawn center] => Showroom SA:MP => Discussion démarrée par: R@f le 19 Décembre 2007, 16:02:37

Titre: codes/scripts utiles
Posté par: R@f le 19 Décembre 2007, 16:02:37
Salut a tous et a toutes,
J'ai créé ce sujet pour que les gens puissent partager leurs commandes ou bouts de scripts qu'ils ont créé eux même ! Si vous n'êtes pas le créateur d'un des ces bouts de script ou commande veuillez mettre l'auteur !


Je tiens aussi a préciser que les demandes d'aide dans ce topic ne sont pas les bienvenues, veuillez les poster ici (http://www.gtaonline.fr/forums/index.php/board,41.0.html).



Certains connaissent surment un topic se nommant "useful commands" ou "useful fonctions" sur sa-mp forums, ben j'ai pris exemple pour faire la version française de ce topic ^^
Je commence,
Commande de drogue by R@f (LoopingAnim by keyman)
En Haut du script avant Main :
Code: (cpp) [Sélectionner]
forward Drugoff (playerid);
new gPlayerUsingLoopingAnim[MAX_PLAYERS]; //by Keyman

Dans OnPlayerCommandText :
Code: (cpp) [Sélectionner]
//by R@f
if(strcmp(cmdtext, "/drug", true) == 0)
{
SetPlayerWeather(playerid, 188);
LoopingAnim(playerid,"PED","WALK_DRUNK",4.0,1,1,1,1,0);
SetTimerEx("Drugoff",20000,0,"i",playerid);
SendClientMessage(playerid,0xFF0000FF,"You are under the influence of drugs during 20 seconds");
}
Quelque part dans votre script (à la fin) :
Code: (cpp) [Sélectionner]
//by Keyman
LoopingAnim(playerid,animlib[],animname[], Float:Speed, looping, lockx, locky, lockz, lp)
{
    gPlayerUsingLoopingAnim[playerid] = 1;
    ApplyAnimation(playerid, animlib, animname, Speed, looping, lockx, locky, lockz, lp);
}

//------------------------------------------------------------------------------
//by R@f
public Drugoff (playerid)
{
ClearAnimations(playerid);
SetPlayerWeather(playerid,10);
SendClientMessage(playerid,0x008000FF,"The effects of the drug stopped");
}

Lire les PM (private message) des autres by R@f
Code: (cpp) [Sélectionner]
public OnPlayerPrivmsg(playerid, recieverid, text[])
{
new player[MAX_PLAYER_NAME];
new receiver[MAX_PLAYER_NAME];
new tmpp[256];
GetPlayerName(playerid, player, sizeof(player));
GetPlayerName(recieverid, receiver, sizeof(receiver));
format(tmpp, sizeof(tmpp), "PM from [%i]%s to [%i]%s: %s",playerid,player,recieverid,receiver,text);
SendAdminMessage(0xFFFF00FF,tmpp);
PlayerPlaySound(playerid, 1083, 0.0, 0.0, 0.0);
return 1;
}
SendAdminMessage by R@f (indispensable pour lire les MP des autres (voir plus haut))
Code: (cpp) [Sélectionner]
SendAdminMessage(color, text[]) {
for(new i = 0; i < MAX_PLAYERS; i ++) {
if(IsPlayerConnected(i)) {
if      (IsPlayerAdmin(i)) {
SendClientMessage(i, color, text);
}
}
}
}

Voila, c'est tout pour aujourd'hui ^^. Les textes de mes scripts sont en englais, à vous de les traduires si vous en avez envi ;)

A vous de poster vos codes  :cheers

Enoy
++
R@f
Titre: Re : codes/scripts utiles
Posté par: UrbanGhetto le 19 Décembre 2007, 16:30:55
Pourquoi pas, Voiçi une petite fonction pour la déconnexion et connexion des joueurs qui s'affiche dans le tableau des Deaths.

A mettre dans OnPlayerConnect :

SendDeathMessage(INVALID_PLAYER_ID, playerid, 200);
A mettre dans OnPlayerDisconnect :

SendDeathMessage(INVALID_PLAYER_ID, playerid, 201);
C'est à peut pres tout...
Titre: Re : codes/scripts utiles
Posté par: Sismix84 le 20 Décembre 2007, 18:35:27
Bien imaginé ce sujet, voilà un "petit" code pour que les joueurs n'ai plus d'armes à la sortie d'un véhicule (surtout pour les voitures de police qui possède un fusil à pompe) :

Dans OnPlayerExitVehicle :

new Car = GetPlayerVehicleID(playerid), Model = GetVehicleModel(Car);
switch(Model) { case /* ID des véhicule, à vous de compléter à votre guise */:
ResetPlayerWeapons(playerid);

Voilà ;)
Titre: Re : codes/scripts utiles
Posté par: Tetra-S le 06 Janvier 2008, 14:33:58
Je me permet de presiser la commande de Raf pour lire les pm des autre.
Ma version empêche que les admin vois 2 fois les pm qu'il on envoyer ou reçu

Code: (cpp) [Sélectionner]
public OnPlayerPrivmsg(playerid, recieverid, text[])
{
new string[256];
new playername[MAX_PLAYER_NAME];
new recievername[MAX_PLAYER_NAME];
GetPlayerName(recieverid, recievername, sizeof(recievername));
GetPlayerName(playerid, playername, sizeof(playername));
for (new a = 0; a < MAX_PLAYERS; a++)
{
if (IsPlayerConnected(a) && IsPlayerAdmin(a) && a != playerid && a != recieverid)
{
format(string, sizeof(string), "* %s(ID:%s) envoie a %s(ID:%s): %s", playername,playerid, recievername,recieverid, text);
SendClientMessage(a, 0xFFC0CBAA, string);
PlayerPlaySound(playerid, 1083, 0.0, 0.0, 0.0);
}
}
return 1;
}
Titre: Re : codes/scripts utiles
Posté par: Nikko™ le 18 Janvier 2008, 00:08:08
Bonjour,

Voila jai fais un petit kill-kick:


public OnPlayerDeath(playerid, killerid, reason)
{
new PlayerName[MAX_PLAYER_NAME];
GetPlayerName(playerid, PlayerName, sizeof(PlayerName));
    SendDeathMessage(killerid, playerid, reason);
GameTextForPlayer(playerid, "--- Tu es mort ---",6000,5);
SendClientMessage(killerid, rouge,"Tu a été kické pour kill !");
Kick(killerid);
return 1;
}


++
nikko
Titre: Re : codes/scripts utiles
Posté par: R@f le 18 Janvier 2008, 16:53:03
Anti-Slap By R@f
Voici une code très simple mais utile pour les serveurs de stunt ! Si le joueur utilise la touche tirer sa le freeze pour une seconde ;)
Code: (cpp) [Sélectionner]
//au-dessus de main
forward Unfreeze (playerid);

//OnPlayerKeyStateChange
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
if ((newkeys & KEY_FIRE))
{
if(GetPlayerState(playerid) == PLAYER_STATE_ONFOOT)
{
TogglePlayerControllable(playerid,0);
SetTimerEx("Unfreeze",1,0,"i",playerid);
}
}
}

//quelque part dans le script
public Unfreeze(playerid)
{
TogglePlayerControllable(playerid,1);
}

Enjoy ;)
++
R@f
Titre: Re : codes/scripts utiles
Posté par: UrbanGhetto le 18 Janvier 2008, 17:10:27
Pas mal, Ca me rappel MTA DM dans le mode Hay lol
Titre: Re : codes/scripts utiles
Posté par: R@f le 18 Janvier 2008, 17:13:57
j'ai juste mis a jour le code, j'avais oublié de regarder si le joueur était dans un véhicule ou pas ^^

++
R@f
Titre: Re : codes/scripts utiles
Posté par: Nip le 18 Janvier 2008, 19:39:55
Bonjour,

commandes pour etre invisible sur la carte
Tres simple et pratique (pour certain)

public OnPlayerCommandText(playerid, cmdtext[])
{
if (strcmp(cmdtext, "/invi", true)==0) {
SendClientMessage(playerid,COLOR_GREEN,"> Tu est maintenant invisible sur la map");
SetPlayerColor(playerid,0x33AA3300);
return 1;
}

+
Titre: Re : codes/scripts utiles
Posté par: doun le 19 Janvier 2008, 10:32:59
ANTI DRIVE-BY
Je l'ai essayer tout ceul sur mon server en Lan elle marche impecable mais avec plusieurs personne il pourai y avoir des bug (à tester)

En haut du script :

static DBWeapon[MAX_PLAYERS],DBAmmo[MAX_PLAYERS];
Dans OnPlayerStateChange :

if(newstate == PLAYER_STATE_DRIVER)
{
    GetPlayerWeaponData(playerid,4,DBWeapon[playerid],DBAmmo[playerid]);
      SetPlayerAmmo(playerid,DBWeapon[playerid],0);
 }
else if(oldstate == PLAYER_STATE_DRIVER)
{
    GivePlayerWeapon(playerid,DBWeapon[playerid],DBAmmo[playerid]);
}
Titre: Re : codes/scripts utiles
Posté par: UrbanGhetto le 28 Février 2008, 14:11:48
Attache Object To My Car

Salut,

Voilà un petit code pour marcher sur une route en voiture.

http://pastebin.gtaonline.fr/pastebin.php?show=378 (http://pastebin.gtaonline.fr/pastebin.php?show=378)

Il suffit de mettre ça en FS, De lancer le jeu, Et de faire /Attach :)
Titre: Re : codes/scripts utiles
Posté par: R@f le 18 Mars 2008, 11:53:28
CountDown By R@f
Code: (pawn) [Sélectionner]
//Avant Main
new Compte;
new countdown;
forward CountDown();

//La commande
if (strcmp(cmdtext, "/count", true) == 0)
{
      Compte=SetTimer("CountDown",1000,1);
      countdown = 5;
      SendClientMessageToAll(COLOR_RED,"Le compte à rebour commence !");
      return 1;
}
//En bas du script
public CountDown()
{
    new string[128];
    if(countdown == 0)
    {
        KillTimer(Compte);
    GameTextForAll("~g~GO GO GO !",1000,3);
    PlayAllSound(1057);
    }else{
format(string,sizeof(string),"~r~%d",countdown);
GameTextForAll(string,1000,3);
PlayAllSound(1056);
countdown--;
    }
    return 1;
}

Play All Sound By R@f (indispensable pour avoir le son dans le countdown(voir plus haut))
Code: (pawn) [Sélectionner]
PlayAllSound(soundid)
{
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    PlayerPlaySound(i,soundid,0.0,0.0,0.0);
    }
}

++
R@f
Titre: changer le nom d'un player
Posté par: [StAfF]MaN le 06 Avril 2008, 19:20:56
Bonjour !! J'ai créé une commande qui permet de changer le nom d'un joueur :

    if(strcmp(cmd,"/nom", true)==0)
{
    new pid, tmpp[256], tmp[256];
    new texte[256];
    new name[MAX_PLAYER_NAME];
    new name2[MAX_PLAYER_NAME];
    tmpp = strtok(cmdtext, idx);
    if(!strlen(tmpp))
    {
    SendClientMessage(playerid, COLOR_RED, "USAGE: /nom [playerid] [nom]");
    return 1;
    }
    pid = strval(tmpp);
    if(!IsPlayerConnected(pid))
    {
    SendClientMessage(playerid, COLOR_RED, "Ce player n'est pas connecté");
    return 1;
    }
    if(IsPlayerAdmin(playerid)==0)
    {
    SendClientMessage(playerid, COLOR_RED, "Tu n'es pas admin !!!");
    return 1;
    }
    tmp = strtok(cmdtext, idx);
    GetPlayerName(playerid, name, sizeof(name));
    GetPlayerName(pid, name2, sizeof(name2));
    format(texte, sizeof(texte), " %s a renomer %s en %s", name, name2, tmp);
    SendClientMessageToAll(COLOR_YELLOW, texte);
    SetPlayerName(pid,tmp);
    return 1;
 }

Si ça intéresse quelqu'un ^^
Titre: Re : codes/scripts utiles
Posté par: Bayshore le 09 Avril 2008, 21:36:17
Hey, j'ai découvert un truc sympa avec ta cmd mAn :happy

Quand un joueur à 24 caractères dans son pseudo, le texte qu'il écrit est en jaune! :-*
~~> http://www.noelshack.com/uploads/sa-mp-027014310.png

Sinon moi comme fonction utile j'ai fait un truc pour envoyer un texte aux admins, report ou autres. :happy

Code: (pawn) [Sélectionner]
public OnPlayerText(playerid, text[])
{
if(text[0] == '@')
{
new pName[24];
GetPlayerName(playerid, pName, sizeof(pName));
new string[128];
format(string, sizeof(string),"%s: %s", pName, text[1]);
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(IsPlayerAdmin(i)>= 1) SendClientMessage(i, COLOR_ADMIN, string);
}
printf("", string);
SendClientMessage(playerid, COLOR_ADMIN_PUBLIC, "Your message has been sent to admins online, and save for others admins!");
printf("[report]From %s: %s", pName, text[1]);
}
if(text[0] == '@') return 0; // If the player is sending a report we don't send his message on mainchat
else return 1; // If the player don't sent a report we send the msg
}

++
ZecKo
Titre: Re : codes/scripts utiles
Posté par: NatiVe™ le 09 Avril 2008, 23:13:22
Impossible d'avoir plus de 14 Caracteres dans son pseudo !

NV.

Titre: Re : codes/scripts utiles
Posté par: [StAfF]MaN le 10 Avril 2008, 14:01:15
Si il est possible d'avoir plus de 14 caractères grace a ma commande, mais c'est que les admin qui peuvent changer le nom d'un player ;)
Titre: Re : codes/scripts utiles
Posté par: NatiVe™ le 10 Avril 2008, 14:33:23
Ou mais InGame !

(je me suis trompé, c'est 16 Caracteres MAX)

Quand tu te connect dans un serveur si ton pseudo depace 16 Caracteres la connection ne seffectue  pas !

J'ai pris pour cette exemple un pseudo bidons "What_The_F**k_Man" (17 Caracteres)

Screen:

(http://nsa01.casimages.com/img/2008/04/10/0804100231242904261.jpg) (http://www.casimages.com)

En gros le screen dit "Reconnectez vous avec un pseudo entre 3 et 16 caracteres "

NV.

Titre: Re : codes/scripts utiles
Posté par: Bayshore le 10 Avril 2008, 17:25:16
Salut,

On le sait pour le In-game (http://www.jeuxvideo.com/smileys/11.gif) je parlait grace à la commande de mAn. (http://www.jeuxvideo.com/smileys/11.gif)
Titre: Re : codes/scripts utiles
Posté par: [StAfF]MaN le 12 Avril 2008, 00:11:29
pareil ^^ xD pas grave, en fin de compt la commande permet de faire un speudo gigantesque ^^
Titre: Re : codes/scripts utiles
Posté par: MadFire le 10 Mai 2008, 06:41:03
Bon  voici la commande /say tirer de R@f Admin :
else if (!strcmp(cmd, "/say", true) && IsPlayerAdmin(playerid)){
new tmpp[256];
tmpp = strtok(cmdtext, idx);
GetPlayerName(playerid, AdminName, sizeof(AdminName));
    format(tmpp, sizeof(tmpp), "Admin %s : %s",AdminName,cmdtext[5]);
SendClientMessage(playerid, 0xFF00FFFF, tmpp);
  return 1;
  }
:)
Titre: Re : codes/scripts utiles
Posté par: NatiVe™ le 10 Mai 2008, 11:49:36
Ce topic ser a donner des bout de code ou script utile de TA création ;)

NV.

Titre: Re : codes/scripts utiles
Posté par: Bayshore le 10 Mai 2008, 14:40:45
Code: (pawn) [Sélectionner]
if (!strcmp("/kill", cmdtext, true))
{
SetPlayerHealth(playerid, 0.0);
new name[16];       GetPlayerName(playerid, name, 16);
new string[36];     format(string, 36, "%s has used /kill", name);
for(new guy = 0; guy < 200; guy++) if(IsPlayerAdmin(guy)) SendClientMessage(guy, admin, string);
printf("[death]%s", string);
return 1;
}

Commande kill anti-abus :happy


Titre: Re : Re : codes/scripts utiles
Posté par: Orosko le 10 Mai 2008, 14:42:24
Si il est possible d'avoir plus de 14 caractères grace a ma commande, mais c'est que les admin qui peuvent changer le nom d'un player ;)

C'est possible mais ça fait crasher beaucoup de joueurs !
Titre: Re : Re : codes/scripts utiles
Posté par: inbox le 15 Mai 2008, 13:56:32
CountDown By R@f
Code: (pawn) [Sélectionner]
//Avant Main
new Compte;
new countdown;
forward CountDown();

//La commande
if (strcmp(cmdtext, "/count", true) == 0)
{
      Compte=SetTimer("CountDown",1000,1);
      countdown = 5;
      SendClientMessageToAll(COLOR_RED,"Le compte à rebour commence !");
      return 1;
}
//En bas du script
public CountDown()
{
    new string[128];
    if(countdown == 0)
    {
        KillTimer(Compte);
    GameTextForAll("~g~GO GO GO !",1000,3);
    PlayAllSound(1057);
    }else{
format(string,sizeof(string),"~r~%d",countdown);
GameTextForAll(string,1000,3);
PlayAllSound(1056);
countdown--;
    }
    return 1;
}

Play All Sound By R@f (indispensable pour avoir le son dans le countdown(voir plus haut))
Code: (pawn) [Sélectionner]
PlayAllSound(soundid)
{
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    PlayerPlaySound(i,soundid,0.0,0.0,0.0);
    }
}

++
R@f

Salut,

Tres pratique ton Script surtout pour fair un race avec quelques joueur en meme temps
mais si je veux faire un race seul que le compteur s'affiche juste pour moi

Il faut faire

public CountDown(playerid)
{
   new string[128];
   if(countdown == 0)
    {
    KillTimer(Compte);
    GameTextForPlayer(playerid,"~g~GO GO GO !",1000,3);
    PlayerPlaySound(playerid, 1057, 0.0, 0.0, 0.0);
    }else{
    format(string, sizeof(string), "~r~%d", countdown);
    GameTextForPlayer(playerid, string, 1000, 3);
    PlayerPlaySound(playerid, 1056, 0.0, 0.0, 0.0);
    countdown--;
    }
   return 1;
}

j'enleve GameTextForAll et je met a la place GameTextForPlayer

Voila c'est juste pour info pour les joueurs qui cherche a savoir
Je sais que pour vous c'est simple mais pour certain "comme moi"
qui sait pas coder comme un pro c'est assez chaud

Donc voila pour le petit script

et Merci au Créateur

Cordialement,
Titre: Re : codes/scripts utiles
Posté par: NatiVe™ le 24 Mai 2008, 02:23:56
La fameuse commande /report que tout le monde chercher et que j'ai fait hier pour Nikko

if(strcmp(cmdtext, "/report", true, 7) == 0)
{
new str[256];
new tmp[256];
new pname[14];
tmp = strtok(cmdtext, idx);
if(!strlen(tmp))
{
SendClientMessage(playerid, blanc,"USAGE: /report [text]");
return 1;
}
GetPlayerName(playerid, pname, 14);
format(str, sizeof(str), "* Plainte de '%s': %s *",pname, cmdtext[7]);
SendAdminMessage(rouge,str);
SendClientMessage(playerid, vert, "Plainte transmise !");
return 1;
}

SendAdminMessage(color, text[]) {
for(new i = 0; i < MAX_PLAYERS; i ++) {
if(IsPlayerConnected(i)) {
if      (IsPlayerAdmin(i)) {
SendClientMessage(i, color, text);
}
}
}
}


NV.

Titre: Re : codes/scripts utiles
Posté par: inbox le 24 Mai 2008, 08:57:26
Salut,

Je l'avait deja la commande prise sur le forum de Samp
J'ai fait ca a la place pour mon serveur.

if(strcmp(cmdtext, "/bug", true, 7) == 0)
{
new str[256];
  new tmp[256];
new pname[14];
tmp = strtok(cmdtext, idx);
if(!strlen(tmp))
{
SendClientMessage(playerid, blanc,"USAGE: /bug [Message]");
return 1;
}
        tmp2 = strtok(cmdtext, idx);
if(90 < strlen(tmp2) || strlen(tmp2) < 1) {
SendClientMessage(playerid, COLOR_YELLOW, "* Tapez un Texte de 1 a 90 caractéres.");
return 1;
}
GetPlayerName(playerid, pname, 14);
format(str, sizeof(str), "* [Message] Bug de '%s': %s *",pname, cmdtext[7]);
SendClientMessage(rouge,str);
                BUGS(str);
SendClientMessage(playerid, vert, "Bug ajouter avec succee");
return 1;
}

En bas du script
BUGS(string[])
{
new tmp[256];
format(tmp, sizeof(tmp), "%s \r\n",string);
new File:hFile;
hFile = fopen("logs/bugs.txt", io_append);
fwrite(hFile, tmp);
fclose(hFile);
}

J'ai pas fait de test encore donc faut voir
mais normalement ca marche.

Bon courage pour la suite :)

Cordialement,
Titre: Re : codes/scripts utiles
Posté par: Nikko™ le 24 Mai 2008, 10:21:33
Pas mal ton code ...

++
nikko
Titre: Re : codes/scripts utiles
Posté par: inbox le 03 Juin 2008, 15:56:26
Bonjour,

Voila un petit Cheat que j'ai fait sur mon serveur
il marche tres bien.

Place les forward en haut de votre GM
forward AntiCheat();
forward CheatArgent();
forward CheatArme();

AntiCheat sur les Armes
Note: a vous de mettre les ids des armes interdit sur vos serveurs

public CheatArme()
{
for (new i=0;i<MAX_PLAYERS;i++)
{
if(GetPlayerWeapon(i) == 38 || GetPlayerWeapon(i) == 1 ||
   GetPlayerWeapon(i) == 16 || GetPlayerWeapon(i) == 17 ||
   GetPlayerWeapon(i) == 18 || GetPlayerWeapon(i) == 35 ||
   GetPlayerWeapon(i) == 36 || GetPlayerWeapon(i) == 37)
{
new string[256];
new name[MAX_PLAYER_NAME];
GetPlayerName(i, name, MAX_PLAYER_NAME);
format(string, sizeof(string),"[AntiCheat] %s Est banni pour Cheat [Armes]", name);
SendClientMessageToAll(COLOR_GREEN,string);
//format(string, sizeof(string),"Users/%s.txt",name); // Ici c'est un code pour effacer le compte du joueur chez moi c'est .txt
//dini_Remove(string); // Ici c'est un code pour effacer le compte du joueur chez moi c'est .txt
RemovePlayerFromVehicle(i);
Ban(i);
}
}
return 1;
}

AntiCheat sur l'argent
Note: a vous de mettre la somme que vous voulez

public CheatArgent()
{
for (new i=0;i<MAX_PLAYERS;i++)
{
if(GetPlayerMoney(i) > 300000) // changez la somme que vous voulez
{
new string[256];
new name[MAX_PLAYER_NAME];
GetPlayerName(i, name, MAX_PLAYER_NAME);
format(string, sizeof(string),"[AntiCheat] %s Est banni pour Cheat [Argent]", name);
SendClientMessageToAll(COLOR_GREEN,string);
format(string, sizeof(string),"Users/%s.txt",name); // Ici c'est un code pour effacer le compte du joueur chez moi c'est .txt
dini_Remove(string); // Ici c'est un code pour effacer le compte du joueur chez moi c'est .txt
RemovePlayerFromVehicle(i);
Ban(i);
}
}
return 1;
}

Les timers
au lieu de faire 50 timers faites en 1 seul et qui regroupe le tout

Exemple
public AntiCheat()
{
       CheatArme();
       CheatArgent();
       return 1;
}

Timer

SetTimer("AntiCheat",100000,1);

et placez le timer dans OnGameModeInit

Voila je vais me faire un script entier pour l'anticheat j'ai trouver pas mal de solution pour détecter les grand saut et sur la vie God etc...
je posterais tout ca quand j'aurais fini :)

Bonne fin de soirée a vous et a bientot

Cordialement,
Titre: Re : codes/scripts utiles
Posté par: Franky™ le 03 Juin 2008, 18:44:06
Désolé mais j'ai déjà vu cette Anti Triche sur le Forum de SAMP.
Je l'avais pris et je l'avais modifié.

++ Franky
Titre: Re : codes/scripts utiles
Posté par: inbox le 03 Juin 2008, 19:02:12
Je doute fort
que tu es deja vue le code que j'ai mis ici
Je ne copie jamais un code qui n'est pas a moi

J'ai tout fait de AaZ

Cordialement,
Titre: Re : codes/scripts utiles
Posté par: Nikko™ le 03 Juin 2008, 19:05:58
Ca peu etre bien mais au niveau de l'argent, faudrait que tu fasse un timer pour vérifier que l'argent ne monte pas trop vite, dans ce cas, tu ban, sinon tu fait redéssendre le timer ...

++
nikko
Titre: Re : codes/scripts utiles
Posté par: Bayshore le 04 Juin 2008, 18:09:18
inbox j'aurait 2-3 conseils d'optimisations. :happy

Tu fait une boucle sur tout tes joueurs, il vaudrait mieux vérifier s'ils sont connectés avant, ça éviterait de faire 180 opérations inutiles. :)
Sinon tu fais un timer pour chaque player, et tu lui met dans OnPlayerConnect et le détruit dans OnPlayerDisconnect :)

Et il vaudrait mieux descendre ton timer à 10 sec. (pour moi c'est le minimum :happy).

Sinon il serait bon d'utiliser BanEx, ainsi qu'un printf quand le joueur se fait bannir. :)


++
Alexandre
Titre: Re : codes/scripts utiles
Posté par: Nikko™ le 18 Juin 2008, 21:15:19
Voila 2 petites chose qui peuvent interrésser quelques personne:
A mettre dans OneGameModeInit:

UsePlayerPedAnims();    >> pour que vos personnages puissent courir plus vite et non pas au ralenti

EnableZoneNames(1);   >> Pour affiicher en bah a droite, le nom des zone ou vous vous trouvez. (Exmple, je suis a grove street, ca me marque "Groove Street"

Voila

++
nikko
Titre: Re : codes/scripts utiles
Posté par: pinouf42 le 19 Juin 2008, 07:44:12
Merci Nikko, vraiment pratique !
Titre: Re : codes/scripts utiles
Posté par: pinouf42 le 20 Juin 2008, 21:35:58
Dsl pour le double poste mais une Commande qui va en ravir plus d'un!
Voila, le spawn de mon player était toujours de dos! et je ne savais pas comment le modifier. Et grâce à Nikko j'ai réussi!
Il suffit de mettre au dessus de CameraLookat un truc commme ça:
SetPlayerFacingAngle(playerid, un certaine angle (il faut en tester plusieurs!));
Voila ++
Titre: Re : codes/scripts utiles
Posté par: Nikko™ le 20 Juin 2008, 21:47:15
En principe cest deja dans tout les GM ....

++
nikko
Titre: Re : codes/scripts utiles
Posté par: pinouf42 le 20 Juin 2008, 22:41:42
Sauf pour ceux qui écrivent leur Game ! La preuve est la: Moi !
Titre: Re : codes/scripts utiles
Posté par: MasterOfQuebec le 15 Août 2008, 16:19:23
Priorité des Game Text,
Exemple: Vous avec un speedo avec un GameText et une fonction admin qui affiche un Game Text aux joueurs, le Game Text affiché aux joueurs ne dure que quelques secondes (voir moins) car le speedo viens le remplacer.
Avec cette fonction (très) simple vous pouvez définir une priorité aux Game Texts. Optimisez la et modifiez la comme vous voulez.

ShowGameTextForPlayer(playerid, msg[], time, type, prio) {
if(prio >= textprio[playerid])
{
textprio[playerid] = prio;
GameTextForPlayer(playerid, msg, time, type);
texttime[playerid] = time+1000; //+1000 car parfois le compte a rebours est appelé trop vite.
}
}

ShowGameTextForAll(msg[], time, type, prio) {
for(new playerid = 0; playerid < MAX_PLAYERS; playerid++) {
if(IsPlayerConnected(playerid)) {
ShowGameTextForPlayer(playerid, msg, time, type, prio);
    }
}
}

Hud(playerid) {
if(texttimer[playerid]>0) {
texttimer[playerid] = texttimer[playerid] - 1000;
} else {
texttimer[playerid] = 0;
textprio[playerid] = 0;
}
}

public Second() {
for(new i = 0; i < MAX_PLAYERS; i++) {
if ( IsPlayerConnected(i) ) {
Hud(i);
}
}
SetTimerEx("Second",1000,false,"");  //Utilisation de SetTimerEx car dans mon mode il y a plus d'actions dans la fonction Second et l'exécution de la fonction peut prendre plus que 1 seconde, alors pour utiliser moins de ressource j'apelle
}

Dans OnGameModeInit (noubliez pas de faire le forward des fonctions...):
SetTimerEx("Second",1000,false,"");
Titre: Re : codes/scripts utiles
Posté par: ludovic le 31 Août 2008, 21:25:20
bonjour

je vous remercie pour votre aide que vous m'avez apportez
Titre: Re : codes/scripts utiles
Posté par: » Lukubi™ le 23 Novembre 2008, 12:30:51
j'ai fait un petit code qui enlève les armes du joueur

en haut de votre GM

Code: (pawn) [Sélectionner]
forward antiarmes(playerid);
dans le gamemodinit

Code: (pawn) [Sélectionner]
SetTimer("antiarmes",1000,1);
quelque part dans votre GM

Code: (pawn) [Sélectionner]
public antiarmes(playerid)
{
ResetPlayerWeapons(playerid);
return 1;
}


voila sa peut servir pour les serveur stunt

Et un qui donne des armes au joueur :

en haut de votre GM

Code: (pawn) [Sélectionner]
forward armes(playerid);
dans le gamemodinit

Code: (pawn) [Sélectionner]
SetTimer("armes",1000,1);
quelque part dans votre GM

Code: (pawn) [Sélectionner]
public armes(playerid)
{
       GivePlayerWeapon(playerid, <id de l'arme>, <nombre de munition>);
return 1;
}

sa peut serveir pour les serveur DM
Titre: Re : codes/scripts utiles
Posté par: S!m le 23 Novembre 2008, 14:25:57
Salut,

tu ne peut te servir de ton timer de cette façon,
dans ta fonction, tu dois créer une boucle pour tester tous les joueurs

public antiarmes()
{
        for(new i; i<MAX_PLAYERS; i++){
ResetPlayerWeapons(i);
       }
return 1;
}

et pareil pour le arme

public armes()
{
       for(new i; i<MAX_PLAYERS; i++){
              GivePlayerWeapon(i, <id de l'arme>, <nombre de munition>);
       }
return 1;
}

Comme ça le code sera ok

++Sim++
Titre: Re : codes/scripts utiles
Posté par: » Lukubi™ le 23 Novembre 2008, 19:42:01
oui effectivement javais zaper cette étape je l'ai fait vite fais et je n'y ai pas penser
Titre: Re : codes/scripts utiles
Posté par: S!m le 25 Novembre 2008, 02:52:01
Salut à tous,

voici un code très simple qui permet de compter ses véhicules...

new vehcount;
new VehModel[215];

puis tu remplace tes AddStaticHevicle, CreateVehicle, AddStaticVehicleEx par une fonction quelconque du genre:

//AddStaticVehicle
stock AddStaticVehicleCount(modelid,Float:x,Float:y,Float:z,Float:a,col1,col2)
{
vehcount++;
new ID = AddStaticVehicle(modelid,x,y,z,a,col1,col2);
modelcount[modelid-400]++;
return ID;
}
//AddStaticVehicleEx
stock AddStaticVehicleExCount(modelid,Float:x,Float:y,Float:z,Float:a,col1,col2,time)
{
vehcount++;
new ID = AddStaticVehicle(modelid,x,y,z,a,col1,col2,time);
modelcount[modelid-400]++;
return ID;
}
//CreateVehicle
stock CreateVehicleCount(modelid,Float:x,Float:y,Float:z,Float:a,col1,col2,time)
{
vehcount++;
new ID = CreateVehicle(modelid,x,y,z,a,col1,col2,time);
modelcount[modelid-400]++;
return ID;
}

alors il ne reste qu'a remplacer les lignes AddStaticVehicle, ex ou CreateVehicle (CTRL+H recommandé!)

et on peut aisément s'en servir par exemple dans une commande d'information:

if(!strcmp(cmdtext,"/info",true)){
    new string[128];
    new NbModele;
    for(new i; i<215; i++){
       if(modelcount[i])NbModele++;
    }
    format(string,sizeof(string),"Il y a présentement %d véhicules de %d différents modèles sur le serveur!",vehcount,NbModele);
    SendClientMessage(playerid,0x33AA33AA,string);
    return 1;
}

Alors j'espère que ce bout de code sera utile à quelqu'un (sinon il n'a pas lieu d'être ici) ;D

++Sim++
Titre: Re : codes/scripts utiles
Posté par: NatiVe™ le 25 Novembre 2008, 10:32:52
Waa ! Sympa, je savais pas qu'on pouvais faire ca !

NV.

Titre: Re : codes/scripts utiles
Posté par: Syg le 25 Novembre 2008, 15:31:28
Le problème de ton comptage de véhicule c'est qu'il faut reprendre tout les AddStaticVehicle pour les remplacer.
En fait, il y a beaucoup plus simple pour "compter" les véhicules :
Il suffit de récupérer le retour du dernier AddStaticVehicle.

Exemple :
new NbVehicules;

AddStaticVehicle (432, 747.0, -2670.0, 29.9106,  90.0, -1, -1);
AddStaticVehicle (432, 747.0, -2735.0, 29.9106,  90.0, -1, -1);
...
AddStaticVehicle (432, 747.0, -2727.0, 29.9112,  90.0, -1, -1);
NbVehicules = AddStaticVehicle (432, 749.0, -2719.0, 29.9112,  90.0, -1, -1);

NB : Ce petit truc fonctionne aussi avec les objets.

++
Syg
Titre: Re : codes/scripts utiles
Posté par: S!m le 26 Novembre 2008, 03:49:16
Salut,

j'avais oublié cette technique là ;D

par contre la mienne a un avantage, on peut compter les modèles, par contre on peut également le faire avec une boucle sur tous les véhicules comme suit:

new Modele[215],ModelCount;
for(new i; i<MAX_VEHICLES; i++){
    Modele[GetVehicleModel(i)]++;
}
for(new i; i<sizeof(Modele); i++){
    if(Modele[i])ModelCount++;
}

ou à peu près, je viens de l'écrire sur le forum, en espérant qu'il n'y ai pas d'erreur.

P.S. si on fait le test sur un véhicule inexistant, quelle valeur retourne GetVehicleModel

++Sim++
Titre: Re : codes/scripts utiles
Posté par: Syg le 26 Novembre 2008, 10:22:19
Pour le comptage des modèles, ton code ne va pas fonctionner.
Tout d'abord (mais c'est un détail), il y a 212 modèle différents (et non pas 216).
Ensuite, le premier véhicule à l'ID 1 et non pas 0, tes boucles doivent donc commencer à 1.
Et il faut arrêter tes boucles sur le dernier véhicule créé et ne pas aller jusqu'à MAX_VEHICLES.

Mais le problème majeur est que la fonction GetVehicleModel retourne un nombre compris entre 400 et 611 donc la ligne
Modele[GetVehicleModel(i)]++;plantera à coup sur.

Voici le bout de code que j'utilise pour compter le nombre de modèles (types) :
new ModelUtilise[212];
new Model;
new NbVehicules;
new NdModels = 0;

NbVehicules = ..... // Voir méthode de calcul dans un post précédent

/* Calcul du nombre de modeles de vehicules */
for (i=1 ; i<=NbVehicules ; i++)
{
/* On récupère le modeles du véhicule */
Model = GetVehicleModel (i);
if (ModelUtilise[Model-400] == 0)
{
    /* On compte le nombre de modeles */
    ModelUtilise[Model-400] = 1;
    NbModels++;
}
}

++
Syg
Titre: Re : codes/scripts utiles
Posté par: S!m le 26 Janvier 2009, 01:10:43
Bonjour, plutôt bonne nuit, à tous,

après avoir tenter une modification à un yrace, j'en suis venu à la conclusion que les fonction floatsin et floatcos intégrées à sa-mp sont hautement imprécise

voici mon log:
Citer
[17:51:32] Angle: 270.065460 SIN: -0.111277 COS: 0.993789

donc, je me suis attelé à la création d'une fonction les remplaçants, voici ce à quoi je suis arrivé:

Float:Cos(Float:angle)
{
new Float:ang;
new nb = floatround(angle/180, floatround_ceil);
ang = (angle - 180 * nb) / 180 * PI;
return (1 - (ang * ang / 2) + (floatpower(ang,4)/ 24) - floatpower(ang,6)/720);
}

Float:Sin(Float:angle)
{
new Float:ang;
new nb = floatround(angle/180, floatround_ceil);
  ang = (angle - 180 * nb) / 180 * PI;
return (ang - (ang * ang * ang / 6) + (floatpower(ang,5)/ 120) - floatpower(ang,7)/5040);
}

ces fonctions offrent une marge d'erreur d'environ 0.001 ce qui est amplement suffisant sur sa-mp, par contre si vous désirez en augmenter la précision, vous pouvez toujours en allonger la suite

alors en voici une version plus précise:

Float:Cos(Float:angle)
{
new Float:ang;
new nb = floatround(angle/180, floatround_ceil);
ang = (angle - 180 * nb) / 180 * PI;
return (1 - (ang * ang / 2) + (floatpower(ang,4)/ 24) - floatpower(ang,6)/720 + floatpower(ang,8)/40320 - floatpower(ang,10)/3628800);
}

Float:Sin(Float:angle)
{
new Float:ang;
new nb = floatround(angle/180, floatround_ceil);
  ang = (angle - 180 * nb) / 180 * PI;
return (ang - (ang * ang * ang / 6) + (floatpower(ang,5)/ 120) - floatpower(ang,7)/5040 + floatpower(ang,9)/362880) + floatpower(ang,11)/39916800;
}

EDIT: j'avais oublié un détail, à placer au dessus de ces fonctions:
#define PI 3.14159265
Le pi provenant de ma calculatrice  :P

voilà en espérant que ça en aide certains ;)

++Sim++
Titre: Re : codes/scripts utiles
Posté par: Syg le 26 Janvier 2009, 14:05:34
Ah, les développements limités ... souvenirs souvenirs.

Deux choses :
1 - En terme de temps d'exécutions, tes fonctions vont faire monstrueusement ramer ta machine.

Code ajouté dans la fonction main :
new Float:C;
new i;
new T1, T2;

T1 = GetTickCount ();
for (i=0 ; i<1000000 ; i++)
{
C=Cos (150.0);
}
T2 = GetTickCount ();
printf ("Temps fonction Sim  : %d ms", (T2-T1));
printf ("Valeur de C = %f", C);

T1 = GetTickCount ();
for (i=0 ; i<1000000 ; i++)
{
C=floatcos (150.0, degrees);
}
T2 = GetTickCount ();
printf ("Temps fonction SAMP : %d ms", (T2-T1));
printf ("Valeur de C = %f", C);

Le résultat est sans appel :
[13:59:51] Temps fonction Sim  : 1688 ms
[13:59:51] Valeur de C = 0.866025
[13:59:51] Temps fonction SAMP : 94 ms
[13:59:51] Valeur de C = -0.866025

Et avec la version plus précises de ta fonction Cos :
[13:55:37] Temps fonction Sim  : 2266 ms
[13:55:37] Valeur de C = 0.866025
[13:55:37] Temps fonction SAMP : 94 ms
[13:55:37] Valeur de C = -0.866025

2 - Les fonctions floatsin et floatcos sont tout à fait précises.

Avec la calculatrice Windows :
sin (270.065460) = -0,11127726866931306777757596726546
cos (270.065460) =0,98438195063250492805999105500533
Ce qui est sensiblement la même chose que ce que tu trouve dans ton script (à part pour le cos mais c'est bizarre) .

Je pense que ton erreur vient du fait que tu as oublié de préciser l'unité dans laquelle les fonctions devaient traiter les angles.
Dans les calculs précédents, j'ai utilisé le radian comme unité (unité par défaut utilisée par SAMP).
Si ton angle est en degré (ce qui est la plupart du temps le cas), il faut appeler la fonction comme suit :

floatsin (270.065460, degrees);
++
Syg
Titre: Re : codes/scripts utiles
Posté par: [StAfF]MaN le 26 Janvier 2009, 17:46:44
comme d'hab, sur le cul xD fallait y penser :p
Titre: Re : codes/scripts utiles
Posté par: S!m le 26 Janvier 2009, 19:27:18
Salut,

désolé, :closedeyes
j'ai compris mon erreur en faisant la même erreur sur ma calculatrice tantôt... sacrés radians...

et pour la performance, je m'en doutais mais ça m'aura fait pratiquer mes mathématiques XD

EDIT:

Pour me rattraper, une fonction que je viens d'ajouter à mon "turoriel" sur les opérateurs et autres...

Il est possible de créer une fonction afin de déterminer si un nombre est pair ou impair grâce à l'opérateu & r:
stock IsImpair(Number)
{
    return number & 1;
}

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

#define IsImpair(%0) %0 & 1

En espérant que ça fonctionne, c'étais OK directement dans mon code....

++Sim++
Titre: Re : codes/scripts utiles
Posté par: Nikko™ le 27 Janvier 2009, 18:57:07
Salut,

petite question: A quoi ca sert de savoir si un nombre est pair ou impair ? Ca sert dans des commandes ?

++
nikko
Titre: Re : codes/scripts utiles
Posté par: S!m le 28 Janvier 2009, 23:18:56
Salut,

bien ça peut servir à trier certains trucs, il faut aussi noter qu'il est possible de faire la même chose pour n'importe quel bit:

if(number & 2)....
if(number & 4)....
if(number & 8)...

ça peut être utile si l'on veut, par exemple, trier certains joueurs à droite, d'autres à gauche, les pairs à droite et.....


++Sim++
Titre: Re : codes/scripts utiles
Posté par: Bayshore le 31 Janvier 2009, 11:05:22
En fait if(number & 2) ça équivaut à faire if((number % 2) == 0) ?

PS: Première méthode --> plus rapide.
Titre: Re : codes/scripts utiles
Posté par: Syg le 02 Février 2009, 21:55:38
Tout à fait Bayshore.
Mais ceci n'est possible qu'avec 2, 4, 8, 16, .... (toutes les puissance de 2).

Si on veut savoir si un nombre est divisible par 3, il faut utiliser le modulo (modulo = reste de la division) :
if ((Nombre % 3) == 0)
Le modulo est beaucoup plus lent car il implique une division.
Le & bit à bit est quasiment instantané.

++
Syg
Titre: Re : codes/scripts utiles
Posté par: S!m le 13 Mars 2009, 15:04:08
Bonjour à tous,

je viens de nouveau publié des fonctions qui n'ont aucun potentiel  :D

Ajouter une majuscule au début de chaque mot(après un espace) :

stock NomPropre(tmp[])
{
if(tmp[0] >= 'a' && tmp[0] <= 'z')
{
tmp[0] &= ~0x20;//devient une majuscule (on pourrait aussi utiliser la fonction toupper
}
new len = strlen(tmp);
for(new i = 1; i < len; i++)
{
    if(tmp[i] == ' ')
    {
        i++;
if(tmp[i] >= 'a' && tmp[i] <= 'z')
{
tmp[i] &= ~0x20;
}
}
}
}

Toutes les lettres d'un texte en majuscules :

stock Capitalize(tmp[])
{
for(new i = strlen(tmp); i >=0; i--)
{
if(tmp[i] >= 'a' && tmp[i] <= 'z')
{
tmp[i] &= ~0x20;
}
}
}

Toutes les lettres d'un texte en minuscules :

stock Minus(tmp[])
{
for(new i = strlen(tmp); i >=0; i--)
{
if(tmp[i] >= 'A' && tmp[i] <= 'Z')
{
tmp[i] |= 0x20;
}
}
}


en espérant qu'il y ait pas trop de fautes :p

p.s. codes NomPropre et Minus testés

++Sim++
Titre: Re : codes/scripts utiles
Posté par: Nikko™ le 13 Mars 2009, 15:31:17
Mdr les fonctions, merci quand meme  :) :laugh

++
nikko
Titre: Re : codes/scripts utiles
Posté par: Syg le 14 Mars 2009, 23:18:55
Des fonctions que l'ont fait quand on débute, sous forme d'exercice.
Juste quelques remarques, comme à mon habitude.

Le plus souvent, on ajoute ou retranche 0x20, plutôt que d'utiliser &= ou |= avec ~, c'est plus clair et plus simple:
tmp[i] += 0x20; // pour mettre une majuscule en minusculetmp[i] -= 0x20; // pour mettre une minuscule en majusculeEt ça fait exactement la même chose.

Sinon, dans ta fonction NomPropre, il manque le cas des parenthèses, des apostrophes et des guillemets.
Exemple :
bonjour, je m'appelle "jean" (mais tout le monde m'appelle jeannot).
Avec ta fonction, on aura :
Bonjour Je M'appelle "jean" (mais Tout Le Monde M'appelle Jeannot).
Le résultat correct devrait être :
Bonjour Je M'Appelle "Jean" (Mais Tout Le Monde M'Appelle Jeannot).

++
Syg
Titre: Re : codes/scripts utiles
Posté par: Anthony Wolf le 15 Mars 2009, 09:53:57
Commende pour avoir des armes :

if (strcmp("/armes 1", cmdtext, true, 10) == 0)
{
SendClientMessage(playerid, COLOR_GREEN,"*** Rangé d'arme 1 ***");
    GivePlayerWeapon(playerid, 44,1);
    GivePlayerWeapon(playerid, 31, 9999);
    GivePlayerWeapon(playerid, 25, 9999);
    GivePlayerWeapon(playerid, 23, 9999);
    GivePlayerWeapon(playerid, 43, 9999);
return 1;
}

 :snip  :rules

 
Titre: Re : codes/scripts utiles
Posté par: Bayshore le 15 Mars 2009, 10:07:43
Sim, les deux dernières fonctions existaient déjà dans dutils (mais en plus lourd).

À noter qu'à mon avis un toupper( tmp[i] ) est plus rapide que ce que tu fais.

Un truc pas mal à faire serait de vérifier si le caractères est supérieur à 128, puis vérifier si c'est un accent (ce que toupper() ne gère pas).
Titre: Re : codes/scripts utiles
Posté par: Syg le 16 Mars 2009, 00:52:19
Pour les caractères accentués, il faut se les "farcir" un par un car ils sont un peu en vrac dans le code ASCII.

Et je suis pratiquement sûr que les fonctions de Sim sont plus rapides que les strupper et strlower de dutils.

++
Syg
Titre: Re : codes/scripts utiles
Posté par: cristab le 22 Mars 2009, 20:03:34
voila un petit code pour le fun que j'ai coder quand je m'ennuyer  a tester c'est assez sympas

if(!strcmp("/cachemoi", cmdtext, true, 10))
{
buisson = CreateObject(647, 0, 0, 0, 0, 0, 0);
AttachObjectToPlayer(buisson, playerid, 0.0, 0.0, 0.0, 0, 0, 0);
return 1;
}
if(!strcmp("/stopcache", cmdtext, true, 10))
{
DestroyObject(buisson);
return 1;
}
je ne les pas tester avec plusieur personne juste moi


je ne savait pas ou le mettre j'espere etre dans la bonne categuorie
Titre: Re : codes/scripts utiles
Posté par: [viruz]rider_77 le 22 Mars 2009, 20:36:29
 :laugh C'est vraie que c'Est assez marrant :P
Titre: Re : codes/scripts utiles
Posté par: S!m le 23 Mars 2009, 01:07:17
Salut,

tu devrais ajouter un test si le joueur a déjà l'objet pour éviter un grand nombre d'objets,

j'ajouterais que tu dois faire un array pour ta variable (buisson[playerid] et buisson[MAX_PLAYERS] en haut du script)

++Sim++
Titre: Re : codes/scripts utiles
Posté par: cristab le 23 Mars 2009, 09:03:26
oui je m'en doute bien mais  c'etait un petit truc pour moi seul sur un serveur local pour les condition ces simple  a  faire
Titre: Re : codes/scripts utiles
Posté par: NatiVe™ le 23 Mars 2009, 10:38:08
Et tu a oublier de déclaré ta variable.

Code: (Pawno) [Sélectionner]
new buisson;
NV. 8)

Titre: Re : codes/scripts utiles
Posté par: cristab le 23 Mars 2009, 11:30:54
oui Merci de me l'avoir je mettrais a jour dans la journee puis je rajouterai avec requin et tortue MDR
Code: (pawn) [Sélectionner]
 
new requin;
new buisson;
new tortue;
new cache[MAX_PLAYERS];
public OnPlayerConnect(playerid)
{
cache [playerid] = 0;
return 1;
}
public OnPlayerDisconnect(playerid,reason)
{
cache [playerid] = 0;
return1;
}
if(!strcmp("/requin", cmdtext, true, 10))
{
if(cache == 1)
{
SendClientMessage(playerid, COLOR_BRIGHTRED, "tu ne peut pas etre cacher de nouveau");
 return 1;
}
else
{
requin = CreateObject(1608, 0, 0, 0, 0, 0, 0);
AttachObjectToPlayer(requin, playerid, 0.0, 0.0, 0.0, 0, 0, 0);
cache [playerid] = 1;
SendClientMessage(playerid, COLOR_BRIGHTRED, "tape /finrequin pour  faire une surprise");
return 1;
}
if(!strcmp("/buisson", cmdtext, true, 10))
{
if(cache == 1)
{
SendClientMessage(playerid, COLOR_BRIGHTRED, "tu ne peut pas etre cacher de nouveau");
 return 1;
}
else
{
buisson = CreateObject(647, 0, 0, 0, 0, 0, 0);
AttachObjectToPlayer(buisson, playerid, 0.0, 0.0, 0.0, 0, 0, 0);
cache [playerid] = 1;
SendClientMessage(playerid, COLOR_BRIGHTRED, "tape /finbuisson pour  faire une surprise");
return 1;
}
if(!strcmp("/tortue", cmdtext, true, 10))
{
if(cache == 1)
{
SendClientMessage(playerid, COLOR_BRIGHTRED, "tu ne peut pas etre cacher de nouveau");
 return 1;
}
else
{
tortue= CreateObject(1609, 0, 0, 0, 0, 0, 0);
AttachObjectToPlayer(tortue, playerid, 0.0, 0.0, 0.0, 0, 0, 0);
cache [playerid] = 1;
SendClientMessage(playerid, COLOR_BRIGHTRED, "tape /fintortue pour  faire une surprise");
return 1;
}

if(!strcmp("/finrequin", cmdtext, true, 10))
{
DestroyObject(requin);
cache [playerid] = 0;
return 1;
}
if(!strcmp("/finbuisson", cmdtext, true, 10))
{
DestroyObject(buisson);
cache [playerid] = 0;
return 1;
}
if(!strcmp("/fintortue", cmdtext, true, 10))
{
DestroyObject(tortue);
cache [playerid] = 0;
return 1;
}

Voila peu etre il y a des erreure je vient de le taper sur le forum est ce n'est pas simple
Titre: Re : codes/scripts utiles
Posté par: Syg le 24 Mars 2009, 00:02:18
Comme te le disait Sim à juste titre, il faut que tes variables pour tes objets soient des tableaux.
De plus, un joueur ne peut avoir qu'un seul objet à la fois, ce n'est donc pas la peine de faire 3 variables (requin, buisson, tortue). Une seule variable suffit donc.
Le variable Cache est inutile, on peut très bien se servir du tableau des objets pour savoir si le joueur en a un ou pas.
Et comme il n'y a qu'une seule variable pour les objets, une seule commande suffit pour la destruction.
J'ai aussi factorisé les commandes (pour pouvoir en ajouter facilement et corriger efficacement).
(Au passage, j'ai corrigé les fautes d'orthographe).

Voici mes corrections :
new Objet[MAX_PLAYERS];

public OnPlayerConnect (playerid)
{
   Objet[playerid] = -1; //Le joueur n'a pas d'objet
   return 1;
}
public OnPlayerDisconnect (playerid, reason)
{
   /* Si le joueur à un objet, il faut le détruire */
   if (Objet[playerid]  != -1)
   {
      DestroyObject (Objet[playerid]);
      Objet[playerid] = -1;
   }
   return1;
}

public OnPlayerCommandText (playerid, cmdtext)
{
   if (!strcmp("/requin", cmdtext, true))
   {
      CreerObjetJoueur (playerid, 1608);
      return 1;
   }

   if(!strcmp("/buisson", cmdtext, true))
   {
      CreerObjetJoueur (playerid, 647);
      return 1;
   }

   if(!strcmp("/tortue", cmdtext, true))
   {
      CreerObjetJoueur (playerid, 1609);
      return 1;
   }

   if (!strcmp("/fincache", cmdtext, true))
   {
      if (Objet[playerid] != -1)
      {
         DestroyObject (Objet[playerid]);
         Objet[playerid] = -1;
      }
      return 1;
   }
}

CreerObjetJoueur (playerid, TypeObjet)
{
   if(Objet[playerid] != -1)
   {
      SendClientMessage (playerid, 0xFF0000FF, "Tu ne peux pas être caché de nouveau, tapes /fincache d'abord.");
   }
   else
   {
      Objet[playerid] = CreateObject (TypeObjet, 0, 0, 0, 0, 0, 0);
      AttachObjectToPlayer (Objet[playerid], playerid, 0.0, 0.0, 0.0, 0, 0, 0);
      SendClientMessage(playerid, 0xFF0000FF, "Tape /fincache pour faire une surprise.");
   }
}

On peut maintenant facilement ajouter des objets pour se cacher (il suffit d'ajouter 3 lignes au script) :
   if(!strcmp("/AutrObjet", cmdtext, true))
   {
      CreerObjetJoueur (playerid, <NouveauType>);
      return 1;
   }

On peut même concevoir une commande où c'est le joueur qui choisi le modéle. Avec un petit strtok, on extraie le modèle d'objet désiré et on appelle CreerObjetJoueur.
Mais attention, certains objets peuvent faire crasher le client et comme il en existe des dizaines de millier, il faut se lever matin pour tous les tester et faire une commande qui filtre les objets indésirables.

++
Syg
Titre: Re : Re : codes/scripts utiles
Posté par: S!m le 24 Mars 2009, 01:03:06
Bonjour,

maitre Syg, il manque un espace au return suivant:
public OnPlayerDisconnect (playerid, reason)
{
   /* Si le joueur à un objet, il faut le détruire */
   if (Objet[playerid]  != -1)
   {
      DestroyObject (Objet[playerid]);
      Objet[playerid] = -1;
   }
   return1;
}

EDIT:

Pour tester la validité des objets, Y_Less avait créer une fonction dans son include Y_Objects...

stock Object_IsValidModel(modelid)
{
static
modeldat[] =
{
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -128,
-515899393, -134217729, -1, -1, 33554431, -1, -1, -1, -14337, -1, -33,
127, 0, 0, 0, 0, 0, -8388608, -1, -1, -1, -16385, -1, -1, -1, -1, -1,
-1, -1, -33, -1, -771751937, -1, -9, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, 33554431, -25, -1, -1, -1, -1, -1, -1,
-1073676289, -2147483648, 34079999, 2113536, -4825600, -5, -1, -3145729,
-1, -16777217, -63, -1, -1, -1, -1, -201326593, -1, -1, -1, -1, -1,
-257, -1, 1073741823, -133122, -1, -1, -65, -1, -1, -1, -1, -1, -1,
-2146435073, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1073741823, -64, -1,
-1, -1, -1, -2635777, 134086663, 0, -64, -1, -1, -1, -1, -1, -1, -1,
-536870927, -131069, -1, -1, -1, -1, -1, -1, -1, -1, -16384, -1,
-33554433, -1, -1, -1, -1, -1, -1610612737, 524285, -128, -1,
2080309247, -1, -1, -1114113, -1, -1, -1, 66977343, -524288, -1, -1, -1,
-1, -2031617, -1, 114687, -256, -1, -4097, -1, -4097, -1, -1,
1010827263, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -32768, -1, -1, -1, -1, -1,
2147483647, -33554434, -1, -1, -49153, -1148191169, 2147483647,
-100781080, -262145, -57, 134217727, -8388608, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1048577, -1, -449, -1017, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1835009, -2049, -1, -1, -1, -1, -1, -1,
-8193, -1, -536870913, -1, -1, -1, -1, -1, -87041, -1, -1, -1, -1, -1,
-1, -209860, -1023, -8388609, -2096897, -1, -1048577, -1, -1, -1, -1,
-1, -1, -897, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1610612737,
-3073, -28673, -1, -1, -1, -1537, -1, -1, -13, -1, -1, -1, -1, -1985,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1056964609, -1, -1, -1,
-1, -1, -1, -1, -2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-236716037, -1, -1, -1, -1, -1, -1, -1, -536870913, 3, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -2097153, -2109441, -1, 201326591, -4194304, -1, -1,
-241, -1, -1, -1, -1, -1, -1, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, -32768, -1, -1, -1, -2, -671096835, -1, -8388609, -66323585, -13,
-1793, -32257, -247809, -1, -1, -513, 16252911, 0, 0, 0, -131072,
33554383, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 8356095, 0, 0, 0, 0, 0,
0, -256, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-268435449, -1, -1, -2049, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
92274627, -65536, -2097153, -268435457, 591191935, 1, 0, -16777216, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 127
};
return Bit_Get(Bit:modeldat, modelid);
}

#define Bit_Get(%1,%2) \
_:Bit_GetBit(Bit:%1, _:%2)


#define Bit_GetBit(%1,%2) \
((%1[(%2) >>> CELLSHIFT]) & Bit:(1 << ((%2) & (cellbits - 1))))

#define cellbits (32)

#if cellbits == 32
#define CELLSHIFT (5)
#else
#if cellbits == 64
#define CELLSHIFT (6)
#else
#if cellbits == 16
#define CELLSHIFT (4)
#else
#error Unkown cell size
#endif
#endif
#endif

manque certains bouts de code mais je ne les retrouve pas, désolé

++Sim++
Titre: Re : codes/scripts utiles
Posté par: cristab le 24 Mars 2009, 09:21:49
Merci c'est vrai que le code que j'ai donner etait pour moi seul a la base donc tout etait bon

PS Merci pour les faute :s
Titre: Re : Re : Re : codes/scripts utiles
Posté par: Syg le 24 Mars 2009, 12:09:46
maitre Syg, il manque un espace au return suivant:
Bien évidement, je l'avais fait exprès pour éviter que les gens copie bêtement ....  ::)

Sinon, pour le truc de Y_Less, son tableau correspond à un champ de bit (un bit pour chaque objet).
Si le bit est à 0, l'objet n'est pas valide, si il est à 1, l'objet est valide.
Sachant que chaque élément du tableau fait 32 bits, il est facile de faire un fonction simple pour déterminer si un bit correspondant à un objet est à 0 ou à 1.
Il suffit de diviser le modéle par 4 (division entière) pour trouver l'élément correspondant dans le tableau. Ensuite, faire un décalage du nombre 1 de (modèle%32) vers la gauche et de faire un XOR avec l'élément du tableau.
Ce serait un solution plus simple que celle de Y_Less
J'ai la flemme de faire ce bout de code et de le tester mais si vous insistez, je le ferais.

Le plus compliqué dans cette fonction est le tableau lui-même (chapeau à Y_Less pour avoir eu le courage de le faire).

++
Syg
Titre: Re : codes/scripts utiles
Posté par: » Lukubi™ le 25 Avril 2009, 19:00:00
Salut, voila deux petite fonction Benines mais utiles :

Fonction 'BanAll'

BanAll()
{
for(new i = 0; i < MAX_PLAYERS; i ++)
{
     if(IsPlayerConnected(i))
     {
          SendClientMessageToAll(0xF47A00FF, "Un admin à banni tous les joueurs connectés!");
          Ban(i);
     }
}
}

Fonction 'KickAll'

KickAll()
{
for(new i = 0; i < MAX_PLAYERS; i ++)
{
     if(IsPlayerConnected(i))
     {
          SendClientMessageToAll(0xF47A00FF, "Un admin à kické tous les joueurs connectés!");
          Kick(i);
     }
}
}

++
MrT®
Titre: Re : codes/scripts utiles
Posté par: S!m le 25 Avril 2009, 19:04:15
Salut,

tu devrais sortir SendClientMessageToAll de la loop, présentement tu envoie le message à chaque fois que tu ban un joueur, de plus la plupart des fonctions de sa-mp comportent un test IsPlayerConnected, il serait donc plus rapide de faire:

stock BanAll()
{
     SendClientMessageToAll(0xF47A00FF, "Un admin a banni tous les joueurs connectés!");
     for(new i = 0; i < MAX_PLAYERS; i++)
     {
          Ban(i);
     }
}

ET:

stock KickAll()
{
     SendClientMessageToAll(0xF47A00FF, "Un admin a kické tous les joueurs connectés!");
     for(new i = 0; i < MAX_PLAYERS; i++)
     {
          Kick(i);
     }
}

voilà

plutôt pratique sinon, je vais surement ajouter d'une façon ou d'une autre à mon gm ^^

++Sim++
Titre: Re : codes/scripts utiles
Posté par: Franky™ le 25 Avril 2009, 19:06:44
Simpas et marant mdr ^^

++ Franky
Titre: Re : codes/scripts utiles
Posté par: Syg le 25 Avril 2009, 23:16:07
Ce qui est surtout marrant dans ces fonctions, c'est que l'admin qui les utilise va se bannir (ou se kicker) lui même ..  :D
Un petit test sur IsPlayerAdmin serait utile pour éviter aussi de bannir les copains admins.

Sinon, dans quel cas est-il utile de bannir tous les joueurs ?
NB : Ce n'est pas une critique, juste une question à laquelle je n'ai pas pu trouver de réponse.

++
Syg
Titre: Re : Re : codes/scripts utiles
Posté par: Franky™ le 25 Avril 2009, 23:38:42
NB : Ce n'est pas une critique, juste une question à laquelle je n'ai pas pu trouver de réponse.

J'avous, un KillAll est utiles, mais un BanAll, quand j'y pense, c'est vrais que c'est pas très utiles lol...

++ Franky
Titre: Re : Re : codes/scripts utiles
Posté par: » Lukubi™ le 26 Avril 2009, 03:19:19
Sinon, dans quel cas est-il utile de bannir tous les joueurs ?

Et bien a vrai dire moi même je ne sait pas, ce code m'est venu a l'idée par hasard  :-X

Mais on lui trouvera bien un contexte dans le quel il est utile  :)

++
MrT®
Titre: Re : codes/scripts utiles
Posté par: S!m le 26 Avril 2009, 04:16:36
en le modifiant ;légèrement, on obtient un "lock serveur":

new bool: lockedl //à placer en haut

//OnPlayerConnect:
    if(locked)
    {
        Kick(playerid);
    }

    dcmd(lockserver, 10, cmdtext);//à placer dans OnPlayerCommandText

//à la fin du script
dcmd_lockserver(playerid, params[])
{
    #pragma unused params
    if(IsPlayerAdmin(playerid))
    {
        if(locked)
        {
            locked = false;
            SendClientMessage(playerid, COLOR_WHITE, "Vous avez levé l'interdiction!");
        }
        else
        {
            locked = true;
            SendClientMessage(playerid, COLOR_WHITE, "Vous avez interdit le serveur à tous les joueurs");
            KickAll();
        }
    }
    else
    {
        SendClientMessage(playerid, COLOR_RED, "Vous n'êtes pas admin!");
    }
    return 1;
}

stock KickAll()
{
     SendClientMessageToAll(0xF47A00FF, "Un admin a kické tous les joueurs connectés!");
     for(new i = 0; i < MAX_PLAYERS; i++)
     {
          if(IsPlayerAdmin(i))continue;
          Kick(i);
     }
}

ainsi on obtient un lock serveur ^^ (ce code est approximatif)

++Sim++
Titre: Re : codes/scripts utiles
Posté par: » Lukubi™ le 26 Avril 2009, 21:45:38
Bien joué mais tu a fait une petite erreur d'étourderie :P

Tu kick tout les joueur lorsque tu retire l'interdiction et tu ne les kick pas lorsque tu interdit l'accès au serveur. ::)

++
MrT®
Titre: Re : codes/scripts utiles
Posté par: S!m le 26 Avril 2009, 22:30:11
effectivement, je corrige de ce pas...
Titre: Re : codes/scripts utiles
Posté par: Syg le 26 Avril 2009, 22:33:34
Pour l'utilité de KickAll(), je pensais effectivement à quelque comme ça.
Par contre, je ne vois toujours pas dans quel cas utiliser BanAll() ...

++
Syg
Titre: Re : codes/scripts utiles
Posté par: S!m le 26 Avril 2009, 22:39:36
Salut,

on se crée un serveur cheat et lorsqu'il y en a suffisamment.... :lmfao

mais sinon faut avouer que c'est plutôt limité...

++Sim++
Titre: Re : Re : codes/scripts utiles
Posté par: Klobbs le 02 Mai 2009, 12:35:07
Salut,

on se crée un serveur cheat et lorsqu'il y en a suffisamment.... :lmfao

mais sinon faut avouer que c'est plutôt limité...

++Sim++
Bah ils sont bannis de ton serveur cheat, ça les empêche pas de venir cheater ailleurs. x)
Titre: Re : Re : codes/scripts utiles
Posté par: Dark4ng3L le 03 Mai 2009, 11:33:44
new bool: lockedl //à placer en haut

//OnPlayerConnect:
    if(locked)
    {
        Kick(playerid);
    }

    dcmd(lockserver, 10, cmdtext);//à placer dans OnPlayerCommandText

//à la fin du script
dcmd_lockserver(playerid, params[])
{
    #pragma unused params
    if(IsPlayerAdmin(playerid))
    {
        if(locked)
        {
            locked = false;
            SendClientMessage(playerid, COLOR_WHITE, "Vous avez levé l'interdiction!");
        }
        else
        {
            locked = true;
            SendClientMessage(playerid, COLOR_WHITE, "Vous avez interdit le serveur à tous les joueurs");
            KickAll();
        }
    }
    else
    {
        SendClientMessage(playerid, COLOR_RED, "[b]Yous[/b] n'êtes pas admin!");
    }
    return 1;
}

stock KickAll()
{
     SendClientMessageToAll(0xF47A00FF, "Un admin a kické tous les joueurs connectés!");
     for(new i = 0; i < MAX_PLAYERS; i++)
     {
          if(IsPlayerAdmin(i))continue;
          Kick(i);
     }
}

depuis quand c'est Yous et pas Vous :p ?
 :jesors
Titre: Re : codes/scripts utiles
Posté par: Nikko™ le 03 Mai 2009, 15:08:59
Pas la peine de poster pour ca.

Sim, je comprend pas trop ce code. Pourquoi un "lock serveur" ? Ca kick mais les joueurs peuvent revenir ... ? Non ?

++
nikko
Titre: Re : codes/scripts utiles
Posté par: Ssk le 03 Mai 2009, 15:46:59
Beh non ca les kick a la connexion
Titre: Re : codes/scripts utiles
Posté par: Nikko™ le 03 Mai 2009, 15:49:25
Effectivement, j'avais pas vu ;)

++
nikko
Titre: Re : codes/scripts utiles
Posté par: S!m le 23 Mai 2009, 23:35:15
Bonjour,

je viens vous présenter la fonction que j'ai développée hier soir, une nouvelle implentation de strtok qui devrais, être plus rapide et sécuritaire, voici le monstre :

strtok(const source[], &index, dest[], separator = ' ')
strtok(const source[], &index, dest[], separator = ' ')
{
new i = 0;
while(source[index])//tant qu'on est pas à la fin du texte
{
if(source[index] != separator)//si l'on est pas encore rendu au séparateur
{
if((dest[i] = source[index]))//on copie l'information directement dans la destination
{
index++;//on augmente les deux
i++;
}
else
{
return 0;
}
}
else//on est rendu au séparateur
{
index++;//on saute le séparateur
break;
}
}
dest[i] = EOS;
return 1;
}

pour le test de rapidité, vous pouvez trouver le code source dans le pastebin sous le nom de strtok par Sim (il comporte malencontreusement une erreur (while(idx < 25) au lieu de while(idx <  et ne contient pas de test sur la copie des données dans le string de destination...)

Usage
Son utilisation diffère légèrement de l'implantation habituelle, au lieu de retourner le string, elle le sauvegarde dans la chaine passer en paramètre. Voici un exemple basé sur une commande usuelle, prise dans mon script d'admin en développement:

Quelques définitions utilisées ici....
#define SendTypoMessage(%0,%1) SendClientMessage(%0, 0xffffffff, "FORMULATION: "%1)
#define SendLevelErrorMessage(%0) SendClientMessage(%0, 0xFF0000FF, "Tu n'as pas le niveau requis pour effectuer cette action!")
Maintenant la commande:
// COMMANDE POUR KICKER LES JOUEURS //
if(!strcmp(cmdtext, "/kick ", true, 6))
{
if(IsPlayerAdmin(playerid))
{
if(!cmdtext[6])
{
SendTypoMessage(playerid, "/kick [joueur] [raison (optionnel)]");
return 1;
}
new cmd[128], idx = 6, pid;
strtok(cmdtext, idx, cmd);//remarquez ici l'utilisation du strtok, au lieu de cmd = strtok(cmdtext, idx);
if(IsNumeric(cmd))
{
pid = strval(cmd);
}
else
{
pid = ReturnPlayerID(cmd);
}
if(!IsPlayerConnected(pid))
{
SendErrorMessage(playerid, "Ce joueur n'est pas connecté!");
return 1;
}
new AName[MAX_PLAYER_NAME], PName[MAX_PLAYER_NAME];
GetPlayerName(playerid, AName, MAX_PLAYER_NAME);
GetPlayerName(pid, PName, MAX_PLAYER_NAME);
if(cmdtext[idx])
{
format(cmd, sizeof(cmd), "Admin %s a kické %s car %s", AName, PName, cmdtext[idx]);
}
else
{
format(cmd, sizeof(cmd), "Admin %s a kické %s", AName, PName);
}
SendClientMessageToAll(COLOR_KICK, cmd);
Kick(pid);
}
else
{
SendLevelErrorMessage(playerid);
}
return 1;
}

EDIT: merci à Syg pour ses commentaires :P

++Sim++
Titre: Re : codes/scripts utiles
Posté par: MrFredo le 02 Juin 2009, 11:21:58
J'sais pas si sa a déja été mit avant mais j'vous donne une petite commande qui peux être util une commande /afk qui freeze et rajoute [AFK] au pseudo et defreeze et retire [AFK] du pseudo quand on la retape :)



Code: (pawn) [Sélectionner]
if(strcmp(cmd, "/afk", true) == 0)
{
new playername[MAX_PLAYER_NAME];
GetPlayerName(playerid,playername,sizeof(playername));
if(strfind(playername,"[AFK]",true) != -1)// Si le joueur a le tag [AFK] dans sont pseudo
{
  strdel(playername,strlen(playername)-5,strlen(playername)); //On retire [AFK] du pseudo
SetPlayerName(playerid,playername); //On lui met le pseudo sans le tag [AFK]
format(string,sizeof(string),"%s n'est plus AFK",playername);
SendClientMessageToAll(0xFFFFFFFF,string); // On envoi le message, n'oublier pas de mettre la couleur de votre choix
TogglePlayerControllable(playerid,1); // On defreeze le joueur
}
else
{
format(string,sizeof(string),"%s est AFK",playername);
SendClientMessageToAll(0xFFFFFFFF,string); //On envoi le message, n'oublier pas de mettre la couleur de votre choix
strcat(playername,"[AFK]",sizeof(playername)); // On ajoute [AFK] au pseudo
SetPlayerName(playerid,playername); // On lui met le pseudo avec le tag [AFK]
TogglePlayerControllable(playerid,0); // On freeze le joueur
}
return 1;
}
Titre: Re : codes/scripts utiles
Posté par: Syg le 03 Juin 2009, 11:04:13
Très bien MrFredo.
Il faut juste vérifier à la connexion que le joueur n'a pas déjà [AFK] dans son pseudo (genre un petit malin) sinon ta commande ne va pas fonctionner.
Si c'est le cas, on peut par exemple la kicker avec un message lui indiquant que c'est interdit sur le serveur :
public OnPlayerConnect (playerid)
{
new playername[MAX_PLAYER_NAME];
GetPlayerName (playerid,playername,sizeof(playername));
if (strfind (playername,"[AFK]",true) != -1)// Si le joueur a le tag [AFK] dans sont pseudo
{
SendClientMessageToAll(0xFFFFFFFF,"L'usage de [AFK] dans un pseudo n'est pas autorisé ici");
Kick (playerid);
}
}

++
Syg
Titre: Re : codes/scripts utiles
Posté par: MrFredo le 03 Juin 2009, 11:42:53
Oui c'est vrai c'est mieux ^^
Titre: Re : codes/scripts utiles
Posté par: Nikko™ le 05 Juin 2009, 14:43:40
sympa le code :)

++
nikko
Titre: Re : codes/scripts utiles
Posté par: Atlas le 04 Juillet 2009, 11:14:24
 :) Salut,

Bon après la commande de /count de SFTDM pour compter en choisissant la durée du compte ( /count [Nombre de secondes] ) :

if(strcmp(cmd, "/count", true) == 0)
{
        if(IsPlayerAdmin(playerid))
   {
   new seconds;
tmp = strtok(cmdtext, idx);
seconds = strval(tmp);
if (!seconds)
         SendClientMessage(playerid, COLOR_BRIGHTRED, "Vous devez Indiquer un nombre en secondes.");
   if (seconds > 20)
 {
   SendClientMessage(giveplayerid, COLOR_BRIGHTRED, "Vous devez écrire une durée entre 1 et 20 secondes");
   return 1;
   }

     else if (cseconds)
         SendClientMessage(playerid, COLOR_BRIGHTRED, "Le chrono est déjà enclenché.");

     else
     {
         format(cstring,40,"Vous avez commencé un compte de %d secondes.",seconds);
         SendClientMessage(playerid,COLOR_LIGHTBLUE, cstring);
         cseconds = seconds+1;
         Count[playerid] = 1;
     }
     }
return 1;
}

J'ai crée une petit commande pour compter en Freezant les joueur et avec la Durée Voulue ( /countfr [Nombre de secondes] )  :)

public OnPlayerCommandText

if(strcmp(cmd, "/countfr", true) == 0)
{
        if(IsPlayerAdmin(playerid))
   {
   new seconds;
tmp = strtok(cmdtext, idx);
seconds = strval(tmp);
if (!seconds)
         SendClientMessage(playerid, COLOR_BRIGHTRED, "Vous devez Indiquer un nombre en secondes.");
   if (seconds > 20)
 {
   SendClientMessage(giveplayerid, COLOR_BRIGHTRED, "Vous devez écrire une durée entre 1 et 20 secondes");
   return 1;
   }

     else if (cseconds)
         SendClientMessage(playerid, COLOR_BRIGHTRED, "Le chrono est déjà enclenché.");

     else
     {
         format(cstring,40,"Vous avez commencé un compte de %d secondes.",seconds);
         SendClientMessage(playerid,COLOR_LIGHTBLUE, cstring);
      for(new i=0; i<MAX_PLAYERS; i++)
            TogglePlayerControllable(i, 0); //on Freeze les player
         cseconds = seconds+1;
         Count[playerid] = 1;
     }
     }
return 1;
}

En bas de votre Scripte

public ctimer()
{
    if (cseconds)
    {
        format(cstring,6,"~w~%d", cseconds-1);
        GameTextForAll(cstring,1100,4);
        SoundForAll(1056);

        cseconds --;

        if (!cseconds)
        {
            GameTextForAll("~r~GO GO GO!!!",2000,4);
            SoundForAll(1057);
            for (new i = 0; i < MAX_PLAYERS; i ++)
     {
        TogglePlayerControllable(i, 1); // On unfreeze les player
         if (IsPlayerConnected(i)) SetTimer("resetcount",2000,0);
   }
        }
    }
}

En haut de votre scripte : ( Pour le Le Forward du timer )

forward ctimer();
et pour le Timer a mettre dans public OnGameModeInit()

SetTimer("ctimer",1000,1);
et Surtout ne pas oublier : #define COLOR_BRIGHTRED 0xDC143CAA
                                                                                              #define COLOR_LIGHTBLUE 0x33CCFFAA
 :D

Atlas  ;)
Titre: Re : codes/scripts utiles
Posté par: cristab le 04 Juillet 2009, 11:40:21
oula

a expliquer cette ligne

else if (cseconds)
        SendClientMessage(playerid, COLOR_BRIGHTRED, "Le chrono est déjà enclenché.");

cseconds de?? d'ou ??

m'enfin deja vu sur samp le forum il y a meme un count qui freeze les joueurs autour de soit seulement car la tu freeze meme ceux qui ne veule pas et regarde mieux ton code si un admin freeze une personne ton code permet de le defreezer m'enfin je doute de la source je pense ne pas etre le seul
Titre: Re : codes/scripts utiles
Posté par: Ssk le 04 Juillet 2009, 11:57:29
Ton script fait mal au crane la tu peut mieu le faire est explqiuer d ou viennent certaine variable
Titre: Re : codes/scripts utiles
Posté par: cristab le 04 Juillet 2009, 12:01:57
c'est un copier coller du forum samp
Titre: Re : codes/scripts utiles
Posté par: S!m le 04 Juillet 2009, 15:15:30
Salut,

atlas, je t'invite à aller lire le premier poste de ce sujet, il y est clairement écrit que les codes postés doivent être de nous....

alors pour ne pas être HS, je poste un petit update de mon strtok avec quelques données afin de prouver sa rapidité:

strtok (const source[], &index, dest[], separator = ' ')
{
new i = 0;
while ((dest[i] = source[index]))//tant qu'on est pas à la fin du texte et que la destination est suffisament longue
{
if (source[index] != separator)//si l'on est pas encore rendu au séparateur
{
index++;//on augmente les deux
i++;
}
else//on est rendu au séparateur
{
index++;//on saute le séparateur
break;
}
}
dest[i] = EOS;
return 1;
}

maintenant les données concernant sa rapidité:

Citer
Temps 1er: 2730
Temps 2e: 3759
Temps 3e: 3635
Temps 4e: 2231

le 1er : ma version avant update
le 2e : version que j'utilisais avant
le 3e : version commune
le 4e : ma nouvelle version (elle est déjà utiliser sur mon script d'admin)

voilà, il faut bien sur noté que ces temps  (en millisecondes) sont tout de même faible, il s'agit de la séparation de 6 mots 250 000 fois sur un seul de mes deux processeurs (bref le temps devrait être plus court chez vous, mais les proportions sensiblement les mêmes)

++Sim++
Titre: Re : codes/scripts utiles
Posté par: cristab le 04 Juillet 2009, 15:24:50
hey pas mal je testerais dans un futur mode sa doit etre pas mal
Titre: Re : codes/scripts utiles
Posté par: Ssk le 04 Juillet 2009, 23:36:19
GG si on repete plusieur fois ton code ca nous fera economiser plusieurs seconde
Titre: Re : codes/scripts utiles
Posté par: S!m le 05 Juillet 2009, 00:48:44
salut,

bah pour economiser quelques secondes il faudrait l'executer des milions de fois XD


++Sim++
Titre: Re : codes/scripts utiles
Posté par: Ssk le 05 Juillet 2009, 15:59:30
lol Béh au moins tu nous fera economiser 1 seconde xD GG a toi
Titre: Re : Re : codes/scripts utiles
Posté par: Atlas le 07 Juillet 2009, 12:33:20
c'est un copier coller du forum samp

Mdr vous devez mieux lire ce que j'ecrit

Bon après la commande de /count de SFTDM pour compter en choisissant la durée du compte ( /count [Nombre de secondes] ) :

moi j'ai ajouté que TogglePlayerControllable(i, 0);  et TogglePlayerControllable(i, 1); alors faux lire avant parler  :blink

Atlas  ;)
Titre: Re : codes/scripts utiles
Posté par: cristab le 07 Juillet 2009, 15:03:27
sa etait fait sur le forum samp avant et je croit meme que raf a poster une commande du genre ici si je me trompe pas
Titre: Re : codes/scripts utiles
Posté par: Atlas le 07 Juillet 2009, 15:50:43
Re

je ne savais pas mais moi j'ai ajouté TogglePlayerControllable(i, 0);  et TogglePlayerControllable(i, 1); a la commande /count du SFTDM

Atlas  ;)
Titre: Re : codes/scripts utiles
Posté par: LePtitClown le 08 Juillet 2009, 13:28:41
Je déclare Atlas le roi du copier coller car prendre le count du SF DTM pour rajouter 2 lignes c un peu abusé
Atlas tu n'es plus crédible apprends un peu le pawno si tu veux que les scripteurs croient que c'est vraiment de toi
Sur ce
A+
Titre: Re : codes/scripts utiles
Posté par: Atlas le 08 Juillet 2009, 15:26:46
Re  ;)

Mort de Rire, Sois pas noob Le Petit Clown apprend a lire que j'ai précisé la source du scripte et j'ai aussi précisé que j'ai ajouté que 2 ligne et faux aussi lire les règles de ce topic :

Salut a tous et a toutes,
J'ai créé ce sujet pour que les gens puissent partager leurs commandes ou bouts de scripts qu'ils ont créé eux même ! Si vous n'êtes pas le créateur d'un des ces bouts de script ou commande veuillez mettre l'auteur !  

Enoy
++
R@f

Et bah j'ai précisé l'auteur ( SFDTM par Taxi ) alors tu dois donc apprendre bien a lire avant de posté  :D
Et n'oubli pas de Déclaré les règles de R@F  ::) Avant me Déclaré un Roi ( Comme le Roi Lion ou un Autre xD )

Amicalement Atlas  ;)

A+  :lmao
Titre: Re : codes/scripts utiles
Posté par: S!m le 08 Juillet 2009, 23:29:19
Salut,

fini le HS svp...

retour au sujet: postez vos codes/scripts utiles...

pour ne pas moi-même être HS, je vous poste quelques petites fonctions simples qui, j'espère, ne figurent pas dans les pages précédentes:

Teleport(playerid, Float:X, Float:Y, Float:Z, Float:Angle, interior)
{
if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER)
{
   new vehid = GetPlayerVehicleID(playerid);
   SetVehiclePos(vehid, X, Y, Z);
   SetVehicleZAngle(vehid, Angle);
LinkVehicleToInterior(vehid, interior);
SetPlayerInterior(playerid, interior);
}
else
{
   SetPlayerPos(playerid, X, Y, Z);
   SetPlayerFacingAngle(playerid, Angle);
SetPlayerInterior(playerid, interior);
}
return 1;
}

stock GetPosBehindAngle(playerid, &Float:x, &Float:y, Float:angle, Float:distance)
{
x += floatsin(angle, degrees) * distance;
y -= floatcos(angle, degrees) * distance;
return 1;
}

stock GetPosInFrontOfAngle(&Float:x, &Float:y, Float:angle, Float:distance)
{
x -= floatsin(angle, degrees) * distance;
y += floatcos(angle, degrees) * distance;
return 1;
}

#define MAX_STATE_LEN 32
stock GetStateName(pstate, tmp[])
{
if(pstate == PLAYER_STATE_NONE)
{
format(tmp, MAX_STATE_LEN, "Aucun");
}
else if(pstate == PLAYER_STATE_ONFOOT)
{
format(tmp, MAX_STATE_LEN, "À pied");
}
else if(pstate == PLAYER_STATE_DRIVER)
    {
format(tmp, MAX_STATE_LEN, "Conducteur");
}
else if(pstate == PLAYER_STATE_PASSENGER)
{
   format(tmp, MAX_STATE_LEN, "Passager");
}
/* else if(state == EXIT_VEHICLE)
{
   format(tmp, MAX_STATE_LEN, "Quitte son véhicule");
}
else if(state == ENTER_VEHICLE_DRIVER)
{
   format(tmp, MAX_STATE_LEN, "Entre dans un véhicule conducteur");
}
else if(state == ENTER_VEHICLE_PASSENGER)
{
   format(tmp, MAX_STATE_LEN, "Entre dans un véhicule passager");
}
*/  else if(pstate == PLAYER_STATE_WASTED)
{
   format(tmp, MAX_STATE_LEN, "Mort");
}
else if(pstate == PLAYER_STATE_SPAWNED)
{
   format(tmp, MAX_STATE_LEN, "Spawn...");
}
else if(pstate == PLAYER_STATE_SPECTATING)
{
   format(tmp, MAX_STATE_LEN, "Observateur");
}
return 1;
}

stock GetVehicleModelByName(tmp[])
{
static VehicleNames[][] =
{
"Landstalker", "Bravura", "Buffalo", "Linerunner", "Perrenial", "Sentinel",
"Dumper", "Firetruck", "Trashmaster", "Stretch", "Manana", "Infernus",
"Voodoo", "Pony", "Mule", "Cheetah", "Ambulance", "Leviathan", "Moonbeam",
"Esperanto", "Taxi", "Washington", "Bobcat", "Whoopee", "BF Injection",
"Hunter", "Premier", "Enforcer", "Securicar", "Banshee", "Predator", "Bus",
"Rhino", "Barracks", "Hotknife", "Trailer", "Previon", "Coach", "Cabbie",
"Stallion", "Rumpo", "RC Bandit", "Romero", "Packer", "Monster", "Admiral",
"Squalo", "Seasparrow", "Pizzaboy", "Tram", "Trailer", "Turismo", "Speeder",
"Reefer", "Tropic", "Flatbed", "Yankee", "Caddy", "Solair", "Berkley's RC Van",
"Skimmer", "PCJ-600", "Faggio", "Freeway", "RC Baron", "RC Raider", "Glendale",
"Oceanic","Sanchez", "Sparrow", "Patriot", "Quad", "Coastguard", "Dinghy",
"Hermes", "Sabre", "Rustler", "ZR-350", "Walton", "Regina", "Comet", "BMX",
"Burrito", "Camper", "Marquis", "Baggage", "Dozer", "Maverick", "News Chopper",
"Rancher", "FBI Rancher", "Virgo", "Greenwood", "Jetmax", "Hotring", "Sandking",
"Blista Compact", "Police Maverick", "Boxvillde", "Benson", "Mesa", "RC Goblin",
"Hotring Racer A", "Hotring Racer B", "Bloodring Banger", "Rancher", "Super GT",
"Elegant", "Journey", "Bike", "Mountain Bike", "Beagle", "Cropduster", "Stunt",
  "Tanker", "Roadtrain", "Nebula", "Majestic", "Buccaneer", "Shamal", "Hydra",
  "FCR-900", "NRG-500", "HPV1000", "Cement Truck", "Tow Truck", "Fortune",
  "Cadrona", "FBI Truck", "Willard", "Forklift", "Tractor", "Combine", "Feltzer",
  "Remington", "Slamvan", "Blade", "Freight", "Streak", "Vortex", "Vincent",
"Bullet", "Clover", "Sadler", "Firetruck", "Hustler", "Intruder", "Primo",
"Cargobob", "Tampa", "Sunrise", "Merit", "Utility", "Nevada", "Yosemite",
"Windsor", "Monster", "Monster", "Uranus", "Jester", "Sultan", "Stratium",
"Elegy", "Raindance", "RC Tiger", "Flash", "Tahoma", "Savanna", "Bandito",
"Freight Flat", "Streak Carriage", "Kart", "Mower", "Dune", "Sweeper",
"Broadway", "Tornado", "AT-400", "DFT-30", "Huntley", "Stafford", "BF-400",
"News Van", "Tug", "Trailer", "Emperor", "Wayfarer", "Euros", "Hotdog", "Club",
"Freight Box", "Trailer", "Andromada", "Dodo", "RC Cam", "Launch", "Police Car",
"Police Car", "Police Car", "Police Ranger", "Picador", "S.W.A.T", "Alpha",
"Phoenix", "Glendale", "Sadler", "Luggage", "Luggage", "Stairs", "Boxville",
"Tiller", "Utility Trailer"
};
for( new i = 0; i < 212; i++)
{
   if(strfind(VehicleName[i], tmp, true) != -1)
   {
       return i+400;
   }
}
return 0;
}

voilà, si certaines comportent des erreurs (j'ai dû faire quelques modifications sur le forum), merci de me les signaler..

ps. pour la fonction GetVehicleModelByName, je préfère mettre le tableau contenant les noms des véhicules en variable global

++Sim++
Titre: Re : codes/scripts utiles
Posté par: Ssk le 12 Juillet 2009, 17:28:53
Voila un code qui permet de savoir si un vehicule existe

forward VehicleExist(vehicleid);

public VehicleExist(vehicleid)
{
new Float:x,Float:y,Float:z,Float:a,mdl;
GetVehiclePos(vehicleid,x,y,z);
GetVehicleZAngle(vehicleid,a);
mdl = GetVehicleModel(vehicleid);
if(a == 0 && x == 0 && y == 0 && z == 0 && mdl == 0)
{
return 0;
}
return 1;
}

on peut l utiliser comme cela


if(VehicleExist( id du vehicle))




voila =)
Titre: Re : codes/scripts utiles
Posté par: S!m le 13 Juillet 2009, 01:57:44
Salut,

je crois qu'un simple test GetVehicleModel suffit (étant donné qu'aucun véhicule n'est de modèle 0 (que de 400 à 611)....

voila le code que je ferais:

#define VehicleExist(%0) (GetVehicleModel(%0) >= 400)
++Sim++
Titre: Re : codes/scripts utiles
Posté par: Ssk le 15 Juillet 2009, 16:50:40
Ouais c' est encore mieu GG
Titre: Re : codes/scripts utiles
Posté par: R@f le 04 Août 2009, 14:12:12
Petite fonction assez utile que les codeurs PHP reconnaitront directement, la fonction rand. Dans le même style que le random sauf que celui-ci, un peu y ajouter une valeur minimum.
rand(minnum = cellmin,maxnum = cellmax)
return random(maxnum - minnum + 1) + minnum;

++
R@f
Titre: Re : codes/scripts utiles
Posté par: hardcoder le 04 Août 2009, 18:44:44
Une macro bien utile, qui permet de tester la vitesse d'execution de fonctions, afin de les comparer (fait par yom, je l'ai juste traduit en fr):
Code: (pawn) [Sélectionner]
#define benchmarkinit(); new bmi,bmt1=GetTickCount(),bmt2;
#define benchmark(%0,%1,%2); for(bmi=0;bmi<%0;bmi++)%1(%2);bmt2=GetTickCount(),bmt1=bmt2-bmt1,printf("\n"#%1"\n -> Temps moyen par appel   : %8.f ns\n -> Temps total d'execution : %8d ms\n -> Appels par seconde      : %8.f appels",(float(bmt1)/%0)*1000000,bmt1,(%0.0/bmt1)*1000),bmt1=bmt2;

Utilisation:
benchmark(nombre_de_tests, nom_de_la_fonction, paramètre(s)_de_la_fonction)


Exemple:
Code: (pawn) [Sélectionner]
public OnFilterScriptInit()
{
    #define NOMBRE_DE_TESTS 10000000

    new Float:x, Float:y, Float:z;

    benchmarkinit();

    benchmark(NOMBRE_DE_TESTS, GetCoordsOnLine3D,  1.0, 1.0, 1.0, 1.0, 3.0, 1.0, 1.0, x, y, z);
    benchmark(NOMBRE_DE_TESTS, GetCoordsOnLine3D2, 1.0, 1.0, 1.0, 1.0, 3.0, 1.0, 1.0, x, y, z);
    benchmark(NOMBRE_DE_TESTS, GetCoordsOnLine3D3, 1.0, 1.0, 1.0, 1.0, 3.0, 1.0, 1.0, x, y, z);
}

Affiche dans la console:
GetCoordsOnLine3D
 -> Temps moyen par appel   :      329 ns
 -> Temps total d'execution :     3297 ms
 -> Appels par seconde      :  3033060 appels

GetCoordsOnLine3D2
 -> Temps moyen par appel   :      326 ns
 -> Temps total d'execution :     3265 ms
 -> Appels par seconde      :  3062787 appels

GetCoordsOnLine3D3
 -> Temps moyen par appel   :      292 ns
 -> Temps total d'execution :     2922 ms
 -> Appels par seconde      :  3422313 appels

Notes:

- Il y a juste un petit probleme: les fonctions doivent au moins avoir 1 paramètre.
- Plus le nombre de tests est important, plus les résultats seront précis.
- Dans l'exemple les fonctions sont appellées au moment où le FS se charge, ce qui peut donner un résultat érronné pour la première fonction testée. Il est donc préférable de tester les fonctions quelques secondes après le chargement de FS.
Titre: Re : codes/scripts utiles
Posté par: Bayshore le 04 Août 2009, 20:50:54
Sinon il y a celui d'Y_less qui marche du tonnerre.

Code: (c) [Sélectionner]
#define CODE_1 printf("%d", 42);
#define CODE_2 new str[4]; format(str, sizeof (str), "%d", 42); print(str);
#define CODE_3 print("42");
#define ITERATIONS (10000)

Test()
{
new
t0,
t1,
t2,
t3,
i;
t0 = GetTickCount();
for (i = 0; i < ITERATIONS; i++)
{
CODE_1
}
t1 = GetTickCount();
for (i = 0; i < ITERATIONS; i++)
{
CODE_2
}
t2 = GetTickCount();
for (i = 0; i < ITERATIONS; i++)
{
CODE_3
}
t3 = GetTickCount();
printf("Temps 1: %04d, temps 2: %04d, temps 3: %04d", t1 - t0, t2 - t1, t3 - t2);
}
Titre: Re : Re : codes/scripts utiles
Posté par: S!m le 06 Août 2009, 01:50:12
Salut,

j'aurais tendance à modifier légèrement la macro d'hardcoder, permettant d'y mettre autant de paramètres que désiré...
#define benchmark(%0,%1(%2)); for(bmi=0;bmi<%0;bmi++)%1(%2);bmt2=GetTickCount(),bmt1=bmt2-bmt1,printf("\n"#%1"\n -> Temps moyen par appel   : %8.f ns\n -> Temps total d'execution : %8d ms\n -> Appels par seconde      : %8.f appels",(float(bmt1)/%0)*1000000,bmt1,(%0.0/bmt1)*1000),bmt1=bmt2;

voilà, j'espère que %2 peut être rien du tout, donc une fonction sans paramètres...

l'utilisation diffère légèrement par contre:

benchmark(ITERATIONS, fonction(paramètres));
mais le code d'Y_Less demeure néanmoins plus flexible

++Sim++
Titre: Re : codes/scripts utiles
Posté par: Syg le 17 Août 2009, 12:34:51
Voici une version plus "propre" de la macro présentée par hardcoder.
Avec les modification apportées par Sim pour les fonctions sans paramètres.

La macro de départ avait 2 défauts :
- Illisible car sur une seule ligne donc très difficilement modifiable
- Il n'était pas possible de l'appeler plusieurs fois de suite sans erreur dans les calculs car la macro benchmarkinit ne peut être utilisée qu'une seule fois (sinon, erreur de compilation)

Voici ma version avec un exemple d'utilisation :
#include <a_samp>

#define BENCHMARK(%0,%1(%2)); {\
                              new bmi,bmt1=GetTickCount(),bmt2;\
                              for(bmi=0;bmi<%0;bmi++)%1(%2);\
                              bmt2=GetTickCount();\
                              bmt1=bmt2-bmt1;\
                              printf("\n"#%1"\n -> Temps moyen par appel   : %8.f ns\n -> Temps total d'execution : %8d ms\n -> Appels par seconde      : %8.f appels",(float(bmt1)/%0)*1000000,bmt1,(%0.0/bmt1)*1000),bmt1=bmt2;\
                              }

MaFonction1 ()
{
    GetPlayerVehicleID (0);
}

MaFonction2 (Var1, Var2)
{
    new Var;
    Var = Var1 + Var2;
    return Var;
}

main ()
{
    BENCHMARK (1000000, MaFonction1 ());
    BENCHMARK (1000000, MaFonction2 (1, 8));
}

public OnGameModeInit()
{
    return 1;
}

++
Syg
Titre: Re : codes/scripts utiles
Posté par: 69scorpion le 19 Août 2009, 12:59:27
J'ai fait une commande pour faire un gps utile pour les serveur rp  (Map San Fierro vous pouvez modifier)

En haut du script

new Menu:gps;

Callbacks

public OnGameModeInit()
{
gps = CreateMenu("~r~GPS ~g~SF",1,125,150,300); // Titre en haut du Menu =GPS(rouge) SF(Vert)
if(IsValidMenu(gps)) {
SetMenuColumnHeader(gps , 0, "Choississez un Lieu:");
  AddMenuItem(gps ,0,"Mairie");
AddMenuItem(gps ,0,"Banque");
AddMenuItem(gps ,0,"Auto Ecole");
AddMenuItem(gps ,0,"Concession 1");
  AddMenuItem(gps ,0,"Concession 2");
AddMenuItem(gps ,0,"Victim");
AddMenuItem(gps ,0,"TF1");
AddMenuItem(gps ,0,"Police");
  AddMenuItem(gps ,0,"Hopital");
AddMenuItem(gps ,0,"Banque");
AddMenuItem(gps ,0,"Prison Federal"); // Ne pas mettre d'accent
AddMenuItem(gps ,0,"F.B.I");
  AddMenuItem(gps ,0,"CASERNE");
AddMenuItem(gps ,0,"24/7");
AddMenuItem(gps ,0,"24/7");
AddMenuItem(gps ,0,"24/7");
        AddMenuItem(gps,0,"Quitter");
        return 1;
}

Callbacks

public OnPlayerEnterCheckpoint(playerid)
{
    DisablePlayerCheckpoint(playerid);
    SendClientMessage(playerid,COLOR_WHITE," Vous êtes arriver a destination");//indique qu'il est arriver au marqueur rouge
    return 1;
}


SetPlayerCheckpoint(playerid,-2765.1860,375.5469,6.3437,5);==  x,y,z ou se trouve le lieu

Callbacks

public OnPlayerSelectedMenuRow(playerid, row) {
new Menu:Current = GetPlayerMenu(playerid);
if (Current == gps){
if (row == 0){
SetPlayerCheckpoint(playerid,-2765.1860,375.5469,6.3437,5);//Mairie
} else if (row == 1){
SetPlayerCheckpoint(playerid,-2650.3394,376.6824,6.1563,5);//Banque
} else if (row == 2){
SetPlayerCheckpoint(playerid,-2027.3289,-99.8707,35.1641,5);//auto ecole
} else if (row == 3){
SetPlayerCheckpoint(playerid,-1971.6180,286.8072,35.1719,5);//Concession
} else if (row == 4){
SetPlayerCheckpoint(playerid,-1642.6851,1205.1577,7.2500,5);//concession 2
} else if (row == 5){
SetPlayerCheckpoint(playerid,-1695.9248,950.1990,24.8906,5);//Victim vetement
} else if (row == 6){
SetPlayerCheckpoint(playerid,-2453.6975,504.0412,30.0799,5);//tf1 journal
} else if (row == 7){
SetPlayerCheckpoint(playerid,-1606.0563,712.7955,13.8436,5);//Police
} else if (row == 8){
SetPlayerCheckpoint(playerid,-2661.0408,636.9889,14.4531,5);//Hopital
} else if (row == 9){
SetPlayerCheckpoint(playerid,-2483.7095,-616.0777,132.5655,5);// Prison Fédéral
} else if (row == 10){
SetPlayerCheckpoint(playerid,-1942.6173,459.1057,35.1719,5);// F.B.I
} else if (row == 11){
SetPlayerCheckpoint(playerid,-2023.9453,88.3885,28.1693,5);// CASERNE pompier
} else if (row == 12){
SetPlayerCheckpoint(playerid,-2443.9419,752.8572,35.1786,5);// 24/7 1
} else if (row == 13){
SetPlayerCheckpoint(playerid,-2580.7271,310.1327,5.1797,5);// 24/7 2
} else if (row == 14){
SetPlayerCheckpoint(playerid,-2174.4958,-89.7845,35.3203,5);//24/7 2
HideMenuForPlayer(gps, playerid);//Quitter
} else if (row == 15){
SendClientMessage(playerid,COLOR_WHITE," Vous avez quitter le menu");//Quitter
}
TogglePlayerControllable(playerid,1);// on debloque
}
return 1;
}

Callbacks

public OnPlayerCommandText(playerid, cmdtext[])
{
if (strcmp("/gps", cmdtext, true, 10) == 0)
{
if(IsPlayerInAnyVehicle(playerid)) // le joueur doit être dans une voiture
{
ShowMenuForPlayer(gps,playerid); // activation du menu gps
TogglePlayerControllable(playerid,0); // on bloque
SendClientMessage(playerid, COLOR_GRAD2, "Le lieu est indiquer avec un marqueur rouge sur votre radar.");// confirme la commande
}
else{ //
SendClientMessage(playerid,COLOR_RED," Vous devez être dans un véhicule");//indique qu'il faut être dans un vehicule
}
return 1;
}


Ne mettez pas des caractères spéciaux dans les menus.
Titre: Re : codes/scripts utiles
Posté par: Lance le 19 Août 2009, 21:09:04
new Menu:tunning;

Ne corespond pas avec le reste du code relit toi  :rules
Titre: Re : codes/scripts utiles
Posté par: cristab le 19 Août 2009, 21:15:44
bien vu lance  :lmfao


un truc qui prouve que c'est copier coller et que sa a meme pas etait tester car pour tester il aurais fallut le compiler la sa m'etonnerais qu'il compile puis si on me dit que sa a etait coder sur le forum desoler mais j'aurais du mal a y croire  :ninja


PS


if (strcmp("/gps", cmdtext, true, 4) == 0)

if (strcmp("/carte", cmdtext, true, 6) == 0)

Voila deja pour que les commandes repondent

Encore mieux

if (strcmp("/gps", cmdtext, true) == 0)

if (strcmp("/carte", cmdtext, true) == 0)

PS2 tu zape de detruire le CP une fois dedans sa crash vite un serveur comme sa
Titre: Re : codes/scripts utiles
Posté par: S!m le 20 Août 2009, 00:54:25
Salut,

ne pas supprimer le checkpoint n'est pas vraiment un problème (même si ça peut être désagréable), chaque joueur ne peut voir plus d'un checkpoint, il sera tout simplement éliminer lorsqu'un autre checkpoint sera créé...

++Sim++
Titre: Re : codes/scripts utiles
Posté par: 69scorpion le 20 Août 2009, 02:03:51
J'ai edit et améliorer  Pour carte je voulais l'intégrer mais sa pas marcher et j'ai pas copier coller j'me suis inspirer d'un code ( [TUTO] Les menus de UrbanGhetto)je les compile mais sans /carte et j'ai réussi.

En haut du Script

forward Carte(playerid, row);
new Menu:carte;
;


public OnGameModeInit()
{
carte = CreateMenu("~r~Carte ~g~SF",1,125,150,300); // Titre en haut du Menu =GPS(rouge) SF(Vert) evite les accent
   if(IsValidMenu(carte)) {
SetMenuColumnHeader(carte , 0, "Choississez un Lieu:");
   AddMenuItem(carte ,0,"Mairie");
AddMenuItem(carte ,0,"Banque");
AddMenuItem(carte ,0,"Auto Ecole");
AddMenuItem(carte ,0,"Concession 1");
  AddMenuItem(carte ,0,"Concession 2");
AddMenuItem(carte ,0,"Victim");
AddMenuItem(carte ,0,"TF1");
AddMenuItem(carte ,0,"Police");
AddMenuItem(carte ,0,"Hopital");
AddMenuItem(carte ,0,"Banque");
AddMenuItem(carte ,0,"Prison Federal"); // Ne pas mettre d'accent
AddMenuItem(carte ,0,"F.B.I");
   AddMenuItem(carte ,0,"CASERNE");
AddMenuItem(carte ,0,"24/7 1");
AddMenuItem(carte ,0,"24/7 3");
AddMenuItem(carte ,0,"24/7 2");
AddMenuItem(carte,0,"Quitter"); // Quitter le menu
                return 1;
}

public OnPlayerCommandText(playerid, cmdtext[])
{
if (strcmp("/carte", cmdtext, true, 10) == 0)
{
ShowMenuForPlayer(carte,playerid); // activation du menu gps
TogglePlayerControllable(playerid,0); // on bloque
SendClientMessage(playerid, COLOR_GRAD2, "Le lieu est indiquer avec un marqueur rouge sur votre radar.");
}
return 1;
}

public OnPlayerEnterCheckpoint(playerid)
{
    DisablePlayerCheckpoint(playerid);
    SendClientMessage(playerid,COLOR_WHITE," Vous êtes arriver a destination");//indique qu'il est arriver au marqueur rouge
    return 1;
}

public Carte(playerid, row) {
new Menu:Current = GetPlayerMenu(playerid);
if (Current == carte){
if (row == 0){
SetPlayerCheckpoint(playerid,-2765.1860,375.5469,6.3437,5);//Mairie
} else if (row == 1){
SetPlayerCheckpoint(playerid,-2650.3394,376.6824,6.1563,5);//Banque
} else if (row == 2){
SetPlayerCheckpoint(playerid,-2027.3289,-99.8707,35.1641,5);//auto ecole
} else if (row == 3){
SetPlayerCheckpoint(playerid,-1971.6180,286.8072,35.1719,5);//Concession
} else if (row == 4){
SetPlayerCheckpoint(playerid,-1642.6851,1205.1577,7.2500,5);//concession 2
} else if (row == 5){
SetPlayerCheckpoint(playerid,-1695.9248,950.1990,24.8906,5);//Victim vetement
} else if (row == 6){
SetPlayerCheckpoint(playerid,-2453.6975,504.0412,30.0799,5);//tf1 journal
} else if (row == 7){
SetPlayerCheckpoint(playerid,-1606.0563,712.7955,13.8436,5);//Police
} else if (row == 8){
SetPlayerCheckpoint(playerid,-2661.0408,636.9889,14.4531,5);//Hopital
} else if (row == 9){
SetPlayerCheckpoint(playerid,-2483.7095,-616.0777,132.5655,5);// Prison Fédéral
} else if (row == 10){
SetPlayerCheckpoint(playerid,-1942.6173,459.1057,35.1719,5);// F.B.I
} else if (row == 11){
SetPlayerCheckpoint(playerid,-2023.9453,88.3885,28.1693,5);// CASERNE pompier
} else if (row == 12){
SetPlayerCheckpoint(playerid,-2443.9419,752.8572,35.1786,5);// 24/7 1
} else if (row == 13){
SetPlayerCheckpoint(playerid,-2580.7271,310.1327,5.1797,5);// 24/7 2
} else if (row == 14){
SetPlayerCheckpoint(playerid,-2174.4958,-89.7845,35.3203,5);//24/7 2
} else if (row == 15){
SendClientMessage(playerid,COLOR_WHIITE,"Vous avez quitter le menu");
}
TogglePlayerControllable(playerid,1);
}
Titre: Re : codes/scripts utiles
Posté par: cristab le 20 Août 2009, 09:24:49
tu peu retirer ceci sa ne sert pas HideMenuForPlayer(carte, playerid);//Quitter

pourquoi faire sa ?

ProxDetector(30.0, playerid, string, COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE);
Titre: Re : codes/scripts utiles
Posté par: R@f le 20 Août 2009, 13:26:34
Le mieux serait de poster un bout de code correct. Donc vérifiez ou demandez à quelqu'un ayant de l'expérience avant...

++
R@f
Titre: Re : Re : codes/scripts utiles
Posté par: 69scorpion le 20 Août 2009, 13:56:39

pourquoi faire sa ?

ProxDetector(30.0, playerid, string, COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE);

Pour les serveur RP sa désigne une action
Titre: Re : codes/scripts utiles
Posté par: cristab le 20 Août 2009, 14:24:46
et de quel genre car la je voit qu'apparement sa envoie un message en violler pour ceus qui serais a 30 metres mais le string vient d'ou
Titre: Re : codes/scripts utiles
Posté par: 69scorpion le 20 Août 2009, 23:39:44
Ok j'aurait pas du le mettre c'était dans mon GM je l'ai enlever du code va voir !
Titre: Re : codes/scripts utiles
Posté par: MrFredo le 17 Septembre 2009, 19:18:27
Voila 2 petite fonction qui vous seront ptet utile

Code: (pawn) [Sélectionner]
SetPlayerTag(playerid,const tag[],bool:beforepseudo = true)
{
new playername[MAX_PLAYER_NAME];
if(!strlen(tag) || strlen(tag) > MAX_SIZE_TAG || strlen(PlayerTag[playerid]) > 0) //Si tag est vide ou trop long ou si le joueur a deja un tag
   return false;

GetPlayerName(playerid,playername,sizeof(playername));
if(beforepseudo) //Si beforepseudo = true
   strins(playername,tag,0,sizeof(playername)); //On ajoute le tag au debut du pseudo
else //Sinon
   strins(playername,tag,strlen(playername),sizeof(playername)); // On ajoute le tag a la fin du pseudo

strmid(PlayerTag[playerid],tag,0,strlen(tag),sizeof(PlayerTag[])); //On stocke le tag
SetPlayerName(playerid,playername);//On aplique le pseudo au joueur
return true;
}

RemovePlayerTag(playerid)
{
    new playername[MAX_PLAYER_NAME];
if(!strlen(PlayerTag[playerid])) //Si aucun tag na été defini
   return false;

GetPlayerName(playerid,playername,sizeof(playername));
new postag = strfind(playername,PlayerTag[playerid]);
if(postag == -1)//Si le tag n'est pas trouvé dans le pseudo (au cas ou le pseudo aurait été modifier ailleur dans le script)
{
   strdel(PlayerTag[playerid],0,sizeof(PlayerTag[])); // On vide la variable contenant le tag
   return false;
}
strdel(playername,postag,(postag+strlen(PlayerTag[playerid]))); //On retire le tag
strdel(PlayerTag[playerid],0,sizeof(PlayerTag[])); // On vide la variable contenant le tag
SetPlayerName(playerid,playername); //On aplique le pseudo au joueur
return true;
}

Bon attention l'instalation de c'est fonction nececsite quelque petite chose

En haut de votre script ajouter:
Code: (pawn) [Sélectionner]
#define MAX_SIZE_TAG 10 // Nombre de caractere maximum que peux avoir un tag
new PlayerTag[MAX_PLAYERS][MAX_SIZE_TAG];

Dans OnPlayerConnect ajouter:
Code: (pawn) [Sélectionner]
strmid(PlayerTag[playerid],"",0,sizeof(PlayerTag[]),sizeof(PlayerTag));

Maintenant des explication sur le fonctionement:

SetPlayerTag permet d'ajouter un tag dans le nom du joueur les parametre sont:

playerid - ID du joueur a qui on veux apliquer le tag
tag[]    - Le tag a ajouter
beforepseudo - Si vaut true (valeur par defaut) le tag sera ajouter avant le pseudo, si vaut false, le tag sera ajouter a la fin du pseudo


RemovePlayerTag permet de suprimer le tag dans le nom du joueur, elle prend uniquement le playerid en parametre



Voila j'ai fait c'est 2 ptite fonction en vitesse pour mon prochain GM et j'me suis dit que sa pourait être utile pour d'autre personne :)

ps: Ya surment moyen de l'optimiser mais j'ai un peux la fleme la ^^
Titre: Re : codes/scripts utiles
Posté par: S!m le 17 Septembre 2009, 23:24:48
Salut,

tu devrais mentionner la nécessite de la variable globale PlayerTag[MAX_PLAYERS] et recommander de la réinitialiser à la connexion/déconnexion ...
sinon très belles fonctions, bravo

++Sim++
Titre: Re : Re : codes/scripts utiles
Posté par: MrFredo le 17 Septembre 2009, 23:27:33
Je l'ai fait


Bon attention l'instalation de c'est fonction nececsite quelque petite chose

En haut de votre script ajouter:
Code: (pawn) [Sélectionner]
#define MAX_SIZE_TAG 10 // Nombre de caractere maximum que peux avoir un tag
new PlayerTag[MAX_PLAYERS][MAX_SIZE_TAG];

Dans OnPlayerConnect ajouter:
Code: (pawn) [Sélectionner]
strmid(PlayerTag[playerid],"",0,sizeof(PlayerTag[]),sizeof(PlayerTag));

 :P ::)
Titre: Re : codes/scripts utiles
Posté par: cristab le 18 Septembre 2009, 18:28:07
Je vous presente une fonction pour les vehicules en gros sa sert pas a grand chose mais sa evite d'avoir des centaine de lignes dans la OnGameModeInit

en faite on va passer de ceci

AddStaticVehicle(411, -2015.9924, -146.3494, 35.0474, 90.3450, 64, 1);
a ceci

AddVehicle(1, 411, -2015.9924, -146.3494, 35.0474, 90.3450, 64, 1, 0, "coucou");
expliquation AddVehicle(ID,IDVEHICLE,X,Y,Z,ANGLE,COULEUR1,COULEUR2,INTERIOR,PLAQUE);

ID on augmente de 1 a chaque ligne ajouter

en haut de vos GM ajouter ceci

#define MAX_IDV 700
new Pveh[MAX_IDV];

en bas ajouter ceci

AddVehicle(IDV,VehId,Float:X,Float:Y,Float:Z,Float:A,Col1,Col2,Int,Plate[])
{
Pveh[IDV] = AddStaticVehicle(VehId,Float:X,Float:Y,Float:Z,Float:A,Col1,Col2);
SetVehicleNumberPlate(Pveh[IDV], Plate);
LinkVehicleToInterior(Pveh[IDV], Int);
SetVehicleToRespawn(Pveh[IDV]);
new string[256];
format(string, sizeof(string),"Vehicule cree(Numero :%d,Id: %d,PosX:%f,PosY: %f,PosZ: %f,Angle %f,Couleur1: %d,Couleur2: %d,Plaque: %s,Interiore: %d);",IDV,VehId,Float:X,Float:Y,Float:Z,Float:A,Col1,Col2,Plate,Int);
printf(string);
}

Vspawn(vehicleid,Int,Plate[])
{
SetVehicleNumberPlate(vehicleid, Plate);
LinkVehicleToInterior(vehicleid, Int);
}

Ensuite dans votre OnGameModeInit

AddVehicle(1,411,-2015.9924,-146.3494,35.0474,90.3450,64,1,0,"voiture1");
AddVehicle(2,411,-2013.9924,-146.3494,35.0474,90.3450,64,1,0,"voiture2");

ensuite dans la callback OnVehicleSpawn(vehicleid)

public OnVehicleSpawn(vehicleid)
{
    if(vehicleid == Pveh[1])
  {
      Vspawn(vehicleid,0,"voiture1");
}
   if(vehicleid == Pveh[2])
  {
      Vspawn(vehicleid,0,"voiture2");
}
   return 1;
}

en faite je poste le code ici peu etre qu'il serviras a une personne mais aussi j'aimerais qu'on m'explique si il existerait une fonction qui permettrais d'eviter la callback OnVehicleSpawn et je suis prenneur de toutes optimisation :)
Titre: Re : codes/scripts utiles
Posté par: MrFredo le 20 Septembre 2009, 14:30:19
Petite fonction qui verifie si une email est valide (elle cherche le signe @ et . , verifie ensuite que ya du texte avant le @ , que ya du texte entre le @ et le . et que le texte apres le . fait minimum 2 caractere)

Code: (pawn) [Sélectionner]
IsValidEmail(const email[])
{
new atpos = strfind(email,"@");
if(atpos == -1)
    return false;
   
new pointpos = strfind(email,".",false,atpos);
if(pointpos == -1)
    return false;
   
new str[2][256];
strmid(str[0],email,0,atpos,sizeof(str[]));
strmid(str[1],email,atpos+1,pointpos,sizeof(str[]));
if(!strlen(str[0]) || !strlen(str[1]) || strlen(email[pointpos+1]) < 2)
    return false;
   
return true;
}

Vla j'sais pas si ya une meilleur methode pour verifier qu'une email est valide si c'est le cas dite le moi ^^
Titre: Re : codes/scripts utiles
Posté par: cristab le 21 Septembre 2009, 23:27:36
Bonsoir voila je sus entrain de faire un Fs est seulement la j'ai remarquer qu'il avait penser a la fonction BanEx mais pas de KickEx alors voila ce que j'ai fait si sa peu aider

KickEx(playerid,raison[])
{
print(raison);
ecrfic(raison);
Kick(playerid);
}

ecrfic(contenue[])
{
new File:Fic;
Fic = fopen ("kicklog.ini", io_readwrite);
fwrite(Fic,contenue);
fclose (Fic);
}

il suffit de l'utiliser comme le BanEx

exemple pour une commande kick avec la raison

KickEx(giveplayerid,raison);
Titre: Re : codes/scripts utiles
Posté par: Syg le 22 Septembre 2009, 14:23:19
Pour un fonction qui journalise (écrit des chose les unes à la suite des autres) dans un fichier, il vaut mieux utiliser le mode io_appendl sinon ton fichier ne contiendra que la dernière chaîne écrite :
ecrfic(contenue[])
{
new File:Fic;
Fic = fopen ("kicklog.ini", io_append);
fwrite(Fic, contenue);
fclose (Fic);
}

Autre solution avec le mode io_readwrite :
ecrfic(contenue[])
{
new File:Fic;
Fic = fopen ("kicklog.ini"); // NB : le mode io_readwrite est le mode par défaut il n'est donc pas utile de le mettre
fseek (Fic, 0, seek_end); // Se positionne à la fin du fichier
fwrite(Fic, contenue);
fclose (Fic);
}

Ensuite, pour éviter que ce fichier ne deviennent trop gros, il faut le purger de temps en temps.

++
Syg
Titre: Re : codes/scripts utiles
Posté par: cristab le 22 Septembre 2009, 14:34:35
ah je vient de comprendre Merci pour cette eclairage car mon idee est de faire une include pour faciliter les fonctions
Titre: Re : codes/scripts utiles
Posté par: rafffel le 22 Octobre 2009, 17:10:06
Signalisation en cas de joueur derrière ou devant (pratique en course):

au debut du FS :

forward ScanTimer();
#define AHEAD_OF_CAR_DISTANCE    40.0
#define BEHIND_OF_CAR_DISTANCE    20.0
#define SCAN_RADIUS     20.0
A placer dans le coin fonction du filescript :

stock GetXYInfrontOfMe(i,Float:distance, &Float:x, &Float:y)
{
    new Float:z, Float:angle, currentveh;
    GetPlayerPos(i,x,y,z);
    currentveh = GetPlayerVehicleID(i);
    GetVehicleZAngle(currentveh, angle);
    x += (distance * floatsin(-angle, degrees));
    y += (distance * floatcos(-angle, degrees));
}
stock GetXYBehindOfMe(i,Float:distance, &Float:x, &Float:y)
{
    new Float:z, Float:angle, currentveh;
    GetPlayerPos(i,x,y,z);
    currentveh = GetPlayerVehicleID(i);
    GetVehicleZAngle(currentveh, angle);
    x -= (distance * floatsin(-angle, degrees));
    y -= (distance * floatcos(-angle, degrees));
}

A placer dans le coin fonction de votre FS :

public ScanTimer()
{
for(new i=0;i<MAX_PLAYERS;i++)
{
if(IsPlayerConnected(i))
{
if(IsPlayerInAnyVehicle(playerid))
{
for(new j=0;j<MAX_PLAYERS;j++)
{
if(IsPlayerStreamedIn(i,j))
{
GetPlayerPos(i, Xs, Ys, Zs);
GetXYInfrontOfMe(i,AHEAD_OF_CAR_DISTANCE,Xs,Ys);
if(IsPlayerInRangeOfPoint(j,40.0,Xs,Ys,Zs))
{
if(avantaffiche != 1)
{
// SendClientMessage(i, COLOR_GREEN, "ya du monde devant");
TextDrawShowForPlayer(i,Textdraw0);
avantaffiche = 1;
}
}
else
{
TextDrawHideForPlayer(i,Textdraw0);
avantaffiche = 0;
}
GetPlayerPos(i, Xs, Ys, Zs);
GetXYBehindOfMe(i,BEHIND_OF_CAR_DISTANCE,Xs,Ys);
if(IsPlayerInRangeOfPoint(j,SCAN_RADIUS,Xs,Ys,Zs))
{
if(derriereaffiche != 1)
{
//SendClientMessage(i, COLOR_GREEN, "ya du monde derriere");
TextDrawShowForPlayer(i,Textdraw2);
derriereaffiche = 1;
}
}
else
{
TextDrawHideForPlayer(i,Textdraw2);
derriereaffiche = 0;
}
}
}
}
}
}
}

A placer dans  OnFilterScriptInit():

       SetTimer("ScanTimer",500,1);
Textdraw0 = TextDrawCreate(348.000000,32.000000,"ATTENTION");
Textdraw2 = TextDrawCreate(233.000000,345.000000,"Attention");
TextDrawAlignment(Textdraw0,0);
TextDrawAlignment(Textdraw2,0);
TextDrawBackgroundColor(Textdraw0,0x000000ff);
TextDrawBackgroundColor(Textdraw2,0x000000ff);
TextDrawFont(Textdraw0,1);
TextDrawLetterSize(Textdraw0,0.799999,3.400002);
TextDrawFont(Textdraw2,1);
TextDrawLetterSize(Textdraw2,1.000000,3.400000);
TextDrawColor(Textdraw0,0xff0000ff);
TextDrawColor(Textdraw2,0xff0000ff);
TextDrawSetOutline(Textdraw0,1);
TextDrawSetOutline(Textdraw2,1);
TextDrawSetProportional(Textdraw0,1);
TextDrawSetProportional(Textdraw2,1);
TextDrawSetShadow(Textdraw0,5);
TextDrawSetShadow(Textdraw2,1);


Si il manque quelque chose ou qu'il y a une erreur a la compile , ou que vous souhaitez plus d'info faites signes
Titre: Re : codes/scripts utiles
Posté par: cristab le 24 Octobre 2009, 21:01:43
bonsoir je vous presente deux petites fonction pour spawn les boots


dans le onplayerconnect ajouter ceci pour un bot en voiture


ConnectcarNPC(playerid,"bot1",voiturebot1,47);
pour un bot a pied


Connectped(playerid,"bot2",136);

ajouter ceci en bas de votre GM

ConnectcarNPC(playerid,nombot[],nomcar,skinid)
{
if(IsPlayerNPC(playerid))
       {
           new npcname[MAX_PLAYER_NAME];
           GetPlayerName(playerid, npcname, sizeof(npcname));
       if(!strcmp(npcname, nombot, true))
           {
              PutPlayerInVehicle(playerid, nomcar, 0);
              SetPlayerColor(playerid,0xFFFFFFAA);
              SetPlayerSkin(playerid, skinid);
           }
       }
 }
Connectped(playerid,nombot[],skinid)
{
    new npcname[MAX_PLAYER_NAME];
    GetPlayerName(playerid, npcname, sizeof(npcname));
    if(!strcmp(npcname, nombot, true))
{
SetPlayerSkin(playerid, skinid);
  }
}

n'est ce pas plus simple
Titre: Re : codes/scripts utiles
Posté par: cristab le 05 Novembre 2009, 10:39:00
hop hop je remonte un peu ce topic avec une fonction pour cree un pickup de vie quand on tue une personne

en bas de votre GM

DropHealth(playerid)
{
new Float:X,Float:Y,Float:Z;
GetPlayerPos(playerid, X, Y, Z);
CreatePickup ( 1240, 19, X, Y, Z );
printf("pickupcree %f %f %f",X,Y,Z);
}

Dans le OnPlayerDeath

if (killerid != INVALID_PLAYER_ID)
{
   DropHealth(playerid);
}

petit code tout simple mais permet que ce topic ne sombre pas :)
Titre: Re : Re : codes/scripts utiles
Posté par: scott1 le 05 Novembre 2009, 13:55:17
[quote author=cristab link=topic=2149.msg140921#msg140921 date=1253291287]
Je vous presente une fonction pour les vehicules en gros sa sert pas a grand chose mais sa evite d'avoir des centaine de lignes dans la OnGameModeInit

en faite on va passer de ceci

[code]AddStaticVehicle(411, -2015.9924, -146.3494, 35.0474, 90.3450, 64, 1);

a ceci

AddVehicle(1, 411, -2015.9924, -146.3494, 35.0474, 90.3450, 64, 1, 0, "coucou");
expliquation AddVehicle(ID,IDVEHICLE,X,Y,Z,ANGLE,COULEUR1,COULEUR2,INTERIOR,PLAQUE);

[/code]


[/quote]

Que signifie le plaque?
Titre: Re : codes/scripts utiles
Posté par: cristab le 05 Novembre 2009, 13:59:04
fonction non reconnue sous samp 03a il me semble
Titre: Re : codes/scripts utiles
Posté par: scott1 le 05 Novembre 2009, 14:02:06
J'ai cru que c'était un texte qui s'affichait au dessus du joueur, ça aurai été pas mal
Titre: Re : codes/scripts utiles
Posté par: cristab le 05 Novembre 2009, 14:03:30
non c'etait pour changer la plaque d'immatriculation :)
Titre: Re : Re : codes/scripts utiles
Posté par: scott1 le 05 Novembre 2009, 14:34:22
non c'etait pour changer la plaque d'immatriculation :)

Ce qui veux dire? :D
Titre: Re : codes/scripts utiles
Posté par: Syg le 05 Novembre 2009, 14:40:29
Ce qui veux dire que tu peux changer la plaque d'immatriculation d'un véhicule pour y mettre le texte que tu veux.
Enfin, avant on pouvait, maintenant, il semblerait que ça ne fonctionne plus.

++
Syg
Titre: Re : codes/scripts utiles
Posté par: cristab le 05 Novembre 2009, 14:45:11
toujour a cause du stream oui :( a mon avis il faut voir de ce coter sa doit etre encore faisable puisque la fonction est toujours presente

sinon pour toi scott je vient de faire ceci vite fait

en haut de ton GM

new PlayerText3D:playertextid[MAX_PLAYERS];
tout en bas de ton GM

stock AddTextPlayer3D(playerid,COLOR,text[],Float:Distance)
{
playertextid[playerid] = PlayerText3D:Create3DTextLabel(text, COLOR, 0.0,0.0,0.0, Distance, 0, 0);
Attach3DTextLabelToPlayer(Text3D:playertextid[playerid], playerid, 0.0, 0.0, -0.4);
return 1;
}

stock DeletePlayerText(playerid)
{
Delete3DTextLabel(playertextid[playerid]);
return 1;
}

pour ajouter un text sur un joueur tu as juste a faire ceci

AddTextPlayer3D(playerid,0xFFFFFFAA,"Mon nom est Mike",40.0);
pour le detruire

DeletePlayerText(playerid)
Vola en esperant que sa servent :)
Titre: Re : codes/scripts utiles
Posté par: MrFredo le 05 Novembre 2009, 15:08:38
Si la fonction est toujours presente sa doit être fesable mais faut appeler SetVehicleNumberPlate dans OnVehicleStreamIn (fin c'est juste une suposition)
Titre: Re : codes/scripts utiles
Posté par: Ssk le 05 Novembre 2009, 16:30:30
Beh tout a l heure je code un FS/INC qui sync des chose =)
Titre: Re : Re : codes/scripts utiles
Posté par: scott1 le 05 Novembre 2009, 16:51:51
toujour a cause du stream oui :( a mon avis il faut voir de ce coter sa doit etre encore faisable puisque la fonction est toujours presente

sinon pour toi scott je vient de faire ceci vite fait

en haut de ton GM

new PlayerText3D:playertextid[MAX_PLAYERS];
tout en bas de ton GM

stock AddTextPlayer3D(playerid,COLOR,text[],Float:Distance)
{
playertextid[playerid] = PlayerText3D:Create3DTextLabel(text, COLOR, 0.0,0.0,0.0, Distance, 0, 0);
Attach3DTextLabelToPlayer(Text3D:playertextid[playerid], playerid, 0.0, 0.0, -0.4);
return 1;
}

stock DeletePlayerText(playerid)
{
Delete3DTextLabel(playertextid[playerid]);
return 1;
}

pour ajouter un text sur un joueur tu as juste a faire ceci

AddTextPlayer3D(playerid,0xFFFFFFAA,"Mon nom est Mike",40.0);
pour le detruire

DeletePlayerText(playerid)
Vola en esperant que sa servent :)

Quand un joueur rentre dans un véhicule a la place de son nom il aurai "Mon nom est Mike"? S'est super ^^, je n'ai plus qu'a le modifier a ma sauce
Titre: Re : codes/scripts utiles
Posté par: Ssk le 05 Novembre 2009, 16:57:25
voila l inc

#include <a_samp>

new Plate[MAX_VEHICLES][128];
new Locked[MAX_VEHICLES];
new Objective[MAX_VEHICLES];
/*
native SetVehicleNumberPlateEx(vehicleid,numberplate[]);
native SetVehicleParamsForPlayerEx(vehicleid,playerid,objective,doorslocked);
*/
public OnGameModeInit()
{
for(new i = 0;i < MAX_VEHICLES;i++)
{
    Plate[i] = "";
    Locked[i] = false;
    Objective[i] = false;
}
return 1;
}

public OnGameModeExit()
{
return 1;
}
public OnVehicleStreamIn(vehicleid, forplayerid)
{
SetVehicleParamsForPlayer(vehicleid,forplayerid,Objective[vehicleid],Locked[vehicleid]);
if(strlen(Plate[vehicleid]) != 0)
{
    SetVehicleNumberPlate(vehicleid,Plate[vehicleid]);
}
return 1;
}


forward SetVehicleNumberPlateEx(vehicleid,numberplate[]);
public SetVehicleNumberPlateEx(vehicleid,numberplate[])
{
SetVehicleNumberPlate(vehicleid,numberplate);
format(Plate[vehicleid],sizeof(Plate),"%s",numberplate);
}
forward SetVehicleParamsForPlayerEx(vehicleid,playerid,objective,doorslocked);
public SetVehicleParamsForPlayerEx(vehicleid,playerid,objective,doorslocked)
{
if(vehicleid > 0 && vehicleid < MAX_VEHICLES +1)
{
SetVehicleParamsForPlayer(vehicleid,playerid,objective,doorslocked);
if(objective){Objective[vehicleid] = true;}else{Objective[vehicleid] = false;}
if(doorslocked){Locked[vehicleid] = true;}else{Locked[vehicleid] = false;}
}
return 0;
}

donc SetVehicleParamsForPlayerEx(vehicleid,playerid,objective,doorslocked) pour lock ou mettre en objective
et SetVehicleNumberPlateEx(vehicleid,numberplate[]); pour mettre une plaque d imatriculation ^^

maintenant mettez le en inc lol
Titre: Re : Re : Re : codes/scripts utiles
Posté par: cristab le 05 Novembre 2009, 17:22:53
Quand un joueur rentre dans un véhicule a la place de son nom il aurai "Mon nom est Mike"? S'est super ^^, je n'ai plus qu'a le modifier a ma sauce

non sa affiche un text au dessus du joueur
Titre: Re : codes/scripts utiles
Posté par: scott1 le 05 Novembre 2009, 17:55:52
Arf tu m'a refroidit lol, si on vois encore le nom, ça ne me sert pas a grand chose ^^
Titre: Re : codes/scripts utiles
Posté par: Syg le 06 Novembre 2009, 10:27:57
Sasuke, as-tu tester les plaques d'immatriculations ?
Sur mon serveur en local, ça ne fonctionne pas, même en forçant un respawn des véhicules (comme préconisé dans l'aide sur la fonction SetVehicleNumberPlate).

Si ça marche chez toi, j'essaierais de voir pourquoi ça ne fonctionne pas ici.

++
Syg
Titre: Re : codes/scripts utiles
Posté par: cristab le 06 Novembre 2009, 10:50:15
+1 syg j'ai tester sa ne fonctionne pas a mon avis il faut piquer une autre info car meme avec l'ancienne commande /vnp ben aucun effet


en effet

Citation de: Key&nbsp; 0.3a Scripting Build (ended)
Notes:

- SetVehicleNumberplate does not work. This function can't work due to SA's internal coding which only assigns 1 numplate per vehicle model. The function itself will be left in for future use if it can be made to work.

Source :http://forum.sa-mp.com/index.php?topic=119892.0/
Titre: Re : codes/scripts utiles
Posté par: Syg le 06 Novembre 2009, 11:13:52
Bon ben ça répond à nos question.

++
Syg
Titre: Re : codes/scripts utiles
Posté par: Ssk le 06 Novembre 2009, 12:04:05
Ah je suis désolé mais j' ai oublier de dire que je n ai pas tester mais theoriquement avec ma facon ca devrais fonctionner mais vu que la fonction bug sur samp 0.3a ...

esperons que dans la 0.3b ce sera corriger ^^
Titre: Re : codes/scripts utiles
Posté par: Syg le 06 Novembre 2009, 14:44:40
En tous cas ça ne marche toujours pas avec la R3.
Mais bon, c'est un détail, ça ne remet rien en question.

++
Syg
Titre: Re : codes/scripts utiles
Posté par: Famas le 07 Novembre 2009, 09:42:51
Un petit code sympa a mettre dans votre FS de bot :

new Text3D: textidbot; //a changer pour chaque bot

public OnPlayerSpawn(playerid)
{
   if(IsPlayerNPC(playerid))
   {
        DeletePlayer3DTextLabel(playerid, textidbot);
        SetPlayerColor(playerid,0xFFFFFF00);// le rend invisible sur la map et le nom en blanc ( pour les rp surtout ;) )
        new name[256];
        new botinfo[256];
        GetPlayerName(playerid, name, sizeof(name));
format(botinfo, sizeof(botinfo),"%s(%d)",name,playerid);
textidbot = Create3DTextLabel(botinfo, 0xFFFFFFAA, 0.0,0.0,0.0,40,0,0);
Attach3DTextLabelToPlayer(textidbot, playerid, 0.0, 0.0, 0.3);//attache son nom au dessus de sa tete et en blanc
        return 1;
   }
}

Titre: Re : codes/scripts utiles
Posté par: cristab le 07 Novembre 2009, 10:09:23
ce n'est pas comme sa

Attach3DTextLabelToPlayer(Text3D:textidbot, playerid, 0.0, 0.0, 0.3);//attache son nom au dessus de sa tete et en blanc
Titre: Re : codes/scripts utiles
Posté par: Famas le 07 Novembre 2009, 10:31:57
C'est pareil non ? moi ca marche en tout cas  :lmao
Titre: Re : codes/scripts utiles
Posté par: cristab le 07 Novembre 2009, 10:38:17
moi j'ai tester sans Text3D: sa me fait des tag mismatch je les trouve sensible les text 3D
Titre: Re : codes/scripts utiles
Posté par: Famas le 07 Novembre 2009, 10:42:19
ah en effet  je savais pas réellement d'où ca venais avant merci  :)
Titre: Re : codes/scripts utiles
Posté par: cristab le 16 Novembre 2009, 10:22:03
bonjour voila je pense que tout le monde connait le bug des vehicules que si on les pousse dans l'eau il ne respawn pas je vient de faire un petit bout de code qui force le respawn


vehiculedanseau()
{
    for(new c; c<MAX_VEHICLES; c++)
{
    new Float:cY,Float:cX,Float:cZ;
    GetVehiclePos(c, cY,cX,cZ);
    if(cZ < 0)
    {
        SetVehicleHealth(c,0.0);
}
}
return 1;
}

voila il suffit de mettre ceci dans un timer deja existant au GM (exemple un kick ping)

vehiculedanseau();
en gros le code verifie tout les vehicules est si il y en a dans l'eau c'est a dire en dessous de 0 il met la vie de celui a 0 est donc il respawn
Titre: Re : codes/scripts utiles
Posté par: Syg le 16 Novembre 2009, 10:47:39
Le problème de ton code c'est que si il y a un joueur dans le véhicule, il va se faire exploser ....
Il faudrait contrôler que personne n'est dans le véhicule :

vehiculedanseau()
{
new Libre;
for(new c; c<MAX_VEHICLES; c++)
{
new Float:cY,Float:cX,Float:cZ;
GetVehiclePos(c, cY,cX,cZ);
if(cZ < 0)
{
Libre = 1;
for (new =0 ; p<MAX_PLAYERS && Libre==1 ; p++)
{
if (IsPlayerConnected (p) && IsPlayerInVehicle (p, c))
{
Libre = 0; // Le véhicule n'est pas libre
}
}
/* Si personne n'est dans le véhicule */
if (Libre == 1)
{
SetVehicleHealth (c,0.0);
}
}
}
return 1;
}

++
Syg
Titre: Re : codes/scripts utiles
Posté par: Mr_C30 le 16 Novembre 2009, 10:55:54
je prefairerais téléporter le veh très loin et après le faire exploser comme sa pas de blesser
 :)


++

Titre: Re : codes/scripts utiles
Posté par: cristab le 16 Novembre 2009, 11:03:05
ouai ben au finale il fait peter un vehicule au choix et pas forcement celui qui est dans l'eau je me suis fait avoir dans mes test xD
Titre: Re : codes/scripts utiles
Posté par: Ssk le 16 Novembre 2009, 13:13:58
if (strcmp("/respawnallcar", cmdtext) == 0)
{
new Vehicle[MAX_VEHICLES];
for(new i = 1;i < MAX_VEHICLES;i++)
{
for(new b = 0;b < MAX_PLAYERS;b++)
{
    if(!IsPlayerInVehicle(b,i))
    {
        SetVehicleToRespawn(i);
    }
}
}
return 1;
}


Voila une commande qui respawn tout les vehicules ou il y a personne dedans je n' est pas tester désolé donc je ne peut pas vous dire si ca fonctionne a merveille ^^
Titre: Re : Re : codes/scripts utiles
Posté par: Diablo62 le 16 Novembre 2009, 14:10:57
if (strcmp("/respawnallcar", cmdtext) == 0)
{
new Vehicle[MAX_VEHICLES];
for(new i = 1;i < MAX_VEHICLES;i++)
{
for(new b = 0;b < MAX_PLAYERS;b++)
{
    if(!IsPlayerInVehicle(b,i))
    {
        SetVehicleToRespawn(i);
    }
}
}
return 1;
}


Voila une commande qui respawn tout les vehicules ou il y a personne dedans je n' est pas tester désolé donc je ne peut pas vous dire si ca fonctionne a merveille ^^

Une commande qui me sera utile. J'allais mettre sur mon serv des Vélos et j'allais justement faire une commande pour les faire respawn automatiquement :)
Titre: Re : codes/scripts utiles
Posté par: BuBuNo le 21 Novembre 2009, 17:02:15
Heu je croit que cette ligne n'est jammais utiliser : "new Vehicle[MAX_VEHICLES];"
Titre: Re : codes/scripts utiles
Posté par: Ssk le 21 Novembre 2009, 20:07:11
Ouaip ta raison j ai pas vu ca lol
Titre: Re : codes/scripts utiles
Posté par: BuBuNo le 22 Novembre 2009, 02:25:22
:D

Et puis j'ai remarquer aussi qu'il ne marchais pas du moin pour moi !

DOnc du coup en discutant avec un amis et avec mes talent ( je sait je suis pas super)
J'ai fait un ptit RespawnAuto

en haut
[code]forward IsVehicleOccupied(vehicleid);
forward Respawn(playerid);

Dans OnGameModeInit :
SetTimer("Respawn", 30000, 1);
Et tout en bas :
public Respawn(playerid)
{
for(new i=0;i<MAX_VEHICLES;i++)
{
if(IsVehicleOccupied(i)  == 0)
   {
       SetVehicleToRespawn(i) ;
   }
}
return 1;
}

public IsVehicleOccupied(vehicleid)
{
for(new i=0;i<MAX_PLAYERS;i++)
{
if(IsPlayerInVehicle(i,vehicleid)) return 1;
}
return 0;
}


Bon sinon une autre de mes réalisation :

Réparation automatique du vehicule avec activation/désactivation.

En Haut :
forward Repair(playerid);
new Autorep[MAX_PLAYERS];

Dans OnGameModeInit :
SetTimer("Repair", 10000, 1);
La commande :
if (strcmp("/autorep", cmdtext, true, 10) == 0)
{
if(Autorep[playerid]==0)
   {
   Autorep[playerid]=1;
   GameTextForPlayer(playerid,"~n~~b~Autorep ~n~~g~Activer !",5000,3);
}
else
{
Autorep[playerid]=0;
GameTextForPlayer(playerid,"~n~~b~Autorep ~n~~r~DesActiver !",5000,3);
}
return 1;
}

Et tout en bas :
public Repair(playerid)
{
if(Autorep[playerid]==1)
{
for (new i=0 ; i<MAX_PLAYERS ; i++)// Pour tout les players en même temps
{
if (IsPlayerConnected (i))
{
if(IsPlayerInAnyVehicle(playerid))// Si le player est dans un vehicule
{
RepairVehicle(GetPlayerVehicleID(i));
}
}
}
}
return 1;
}
[/code]
Titre: Re : codes/scripts utiles
Posté par: MrFredo le 24 Novembre 2009, 09:01:02
Lup je vient de voir le code de sasuke pour SetVehicleParamsForPlayerEx mais ya un truc qui me gêne c'est qu'on perd la fonctionnalité de ne pas verrouillé le véhicule pour certain joueur une fois le véhicule re-streamer
vla donc comment moi j'ai fait:

Code: (pawn) [Sélectionner]
new VehicleObjective[MAX_PLAYERS][MAX_VEHICLES][2];
public OnVehicleStreamIn(vehicleid,forplayerid)
{
        SetVehicleParamsForPlayer(vehicleid,forplayerid,VehicleObjective[forplayerid][vehicleid][0],VehicleObjective[forplayerid][vehicleid][1]);
        return 1;
}
stock SetVehicleParamsForPlayerEx(vehicleid, playerid, objective, doorslocked)
{
SetVehicleParamsForPlayer(vehicleid, playerid, objective, doorslocked);
VehicleObjective[playerid][vehicleid][0] = objective;
VehicleObjective[playerid][vehicleid][1] = doorslocked;
return 1;
}
Donc on utiliser la fonction SetVehicleParamsForPlayrerEx de la même manière qu'on utilise SetVehicleParamsForPlayer ;)

Et en bonus une fonction qui va locker un véhicule pour tout le monde excepter un joueur:
stock SetVehicleLock(vehicleid,bool:locked,exception = INVALID_PLAYER_ID)
{
for(new i=0;i<MAX_PLAYERS;i++)
{
if(IsPlayerConnected(i) && i != exception)
SetVehicleParamsForPlayerEx(vehicleid,i,VehicleObjective[i][vehicleid][0],locked);
}
return 1;
}

Allait encore un pti bout de code , tout le monde sait que la callback OnPlayerEnterVehicle est appeler quand un joueur COMMENCE a entrer dans un vehicule mais que celui ci peux tres bien annulé sont action durant le laps de temps ou le personnage se dirige vers le vehicule, et il est parfois util de savoir si un joueur a FINI d'entrer dans un vehicule j'vous propose pour sa un pti bout de code tout con:

Code: (pawn) [Sélectionner]
forward OnPlayerFinishEnterVehicle(playerid, vehicleid, seat);
public OnPlayerFinishEnterVehicle(playerid, vehicleid, seat)
{
      //Code a executer quand le joueur a FINI d'entrer dans un vehicule
      return 1;
}
public OnPlayerStateChange(playerid, newstate, oldstate)
{
      if(oldstate == PLAYER_STATE_ONFOOT && (newstate == PLAYER_STATE_PASSENGER || newstate == PLAYER_STATE_DRIVER)) //Fini d'entrer dans un vehicule en tant que passager ou conducteur
      {
            OnPlayerFinishEnterVehicle(playerid,GetPlayerVehicleID(playerid),GetPlayerVehicleSeat(playerid));
      }
      return 1;
}

Et en bonus la callback OnPlayerFinishEnterVehicle recoit le numero du siege dans lequel se trouve le joueur ^^
Titre: Re : codes/scripts utiles
Posté par: BuBuNo le 24 Novembre 2009, 16:04:14
Ah sa peu être très utile ;)
Titre: Re : codes/scripts utiles
Posté par: cristab le 24 Novembre 2009, 19:36:48
Voila le code qui vous permettras de faire une foret de sapin de noel :)
a venir: la save

SapinCreat(Float:sapinx,Float:sapiny,Float:sapinz)
{
CreateObject(656, sapinx, sapiny, Float:sapinz-10, 0.0000, 0.0000, 0.0000);
CreateObject(3472, sapinx, sapiny, Float:sapinz-8, 0.0000, 0.0, 72.0000);
CreateObject(3472, sapinx, sapiny, Float:sapinz-6, 0.0000, 0.0, 144.0000);
CreateObject(3472, sapinx, sapiny, Float:sapinz-4, 0.0000, 0.0, 216.0000);
CreateObject(3472, sapinx, sapiny, Float:sapinz-2, 0.0000, 0.0, 288.0000);
CreateObject(3472, sapinx, sapiny, Float:sapinz, 0.0000, 00000, 255.0000);
CreateObject(3472, sapinx, sapiny, Float:sapinz+2, 0.0000, 0.0000, 0.0000);
printf("sapin cree");
return 1;
}

PS voila la commande

if(strcmp(cmd,"/sapin",true)==0)
{
 new Float:px,Float:py,Float:pz;
 GetPlayerPos(playerid,px,py,pz);
 SapinCreat(px,py,pz);
 SetPlayerPos(playerid,px,py+2,pz+1);
 SendClientMessage(playerid,COLOR_ORANGE, "sapin cree");
 return 1;
}

ps si vous conaisser deja la position que vous souhaiter dans le OnGameModeInit ajouter ceci
SapinCreat(Float:sapinx,Float:sapiny,Float:sapinz); avec les positions desirer est le sapin ce creera :)

Titre: Re : codes/scripts utiles
Posté par: S!m le 25 Novembre 2009, 01:20:36
Salut,

je pense qu'il serait mieux d'utiliser CallRemoteFunction au lieu d'appeler directement la fonction...
CallRemoteFunction("OnPlayerFinishEnterVehicle", "iii", playerid, GetPlayerVehicleID(playerid), GetPlayerVehicleSeat(playerid));Intéressant la commande au sapin^^

++Sim++
Titre: Re : codes/scripts utiles
Posté par: MrFredo le 25 Novembre 2009, 13:52:23
Plutôt CallLocalFunction dans ce cas , car si tu met le bout de code dans un GM et dans un FS sa risque de poser probleme (enfin je croit XD)
Titre: Re : codes/scripts utiles
Posté par: S!m le 26 Novembre 2009, 16:59:25
Salut,

bah jme suis dit que ça simplifierais de mettre dans un seul script et pouvoir utiliser dans tous les scripts.....
on peut facilement en faire un include (enfin une version "serveur" et une version "client"....)

++Sim++
Titre: Re : Re : codes/scripts utiles
Posté par: Xoss le 07 Décembre 2009, 07:29:08
Voila le code qui vous permettras de faire une foret de sapin de noel :)
a venir: la save

SapinCreat(Float:sapinx,Float:sapiny,Float:sapinz)
{
CreateObject(656, sapinx, sapiny, Float:sapinz-10, 0.0000, 0.0000, 0.0000);
CreateObject(3472, sapinx, sapiny, Float:sapinz-8, 0.0000, 0.0, 72.0000);
CreateObject(3472, sapinx, sapiny, Float:sapinz-6, 0.0000, 0.0, 144.0000);
CreateObject(3472, sapinx, sapiny, Float:sapinz-4, 0.0000, 0.0, 216.0000);
CreateObject(3472, sapinx, sapiny, Float:sapinz-2, 0.0000, 0.0, 288.0000);
CreateObject(3472, sapinx, sapiny, Float:sapinz, 0.0000, 00000, 255.0000);
CreateObject(3472, sapinx, sapiny, Float:sapinz+2, 0.0000, 0.0000, 0.0000);
printf("sapin cree");
return 1;
}

PS voila la commande

if(strcmp(cmd,"/sapin",true)==0)
{
 new Float:px,Float:py,Float:pz;
 GetPlayerPos(playerid,px,py,pz);
 SapinCreat(px,py,pz);
 SetPlayerPos(playerid,px,py+2,pz+1);
 SendClientMessage(playerid,COLOR_ORANGE, "sapin cree");
 return 1;
}

ps si vous conaisser deja la position que vous souhaiter dans le OnGameModeInit ajouter ceci
SapinCreat(Float:sapinx,Float:sapiny,Float:sapinz); avec les positions desirer est le sapin ce creera :)


lol GG ^^
Titre: Re : codes/scripts utiles
Posté par: ApocKalipsS le 23 Janvier 2010, 17:12:22
Hello,
Revenant d'un cours de Maths d'hier, je me suis dit que j'allais utiliser ce que j'ai appris.
Pour cela, j'ai fait une petite commande, qui est pratique, car un peu gonflant d'avoir un SetVehicleVelocity où l'on peut que aller en X ou Y :
Cette commande vous sert à vous donner un bon coup de boost vers l'angle auquel vous êtes orienté.


if(strcmp(cmd,"/vitesse",true)==0)
{
if(!IsPlayerInAnyVehicle(playerid))
{
new Float:Angle5;
new Float:Xx, Float:Yy, Float:Zz;
GetPlayerFacingAngle(playerid, Angle5);
GetPlayerPos(playerid, Xx, Yy, Zz);
new Float:DeltaX = 2 * (-floatsin(Angle5,degrees));
new Float:DeltaY = 2 * floatcos(Angle5,degrees);
SetPlayerVelocity(playerid, DeltaX, DeltaY, 0.1);
return 1;
}
if(IsPlayerInAnyVehicle(playerid))
{
new Float:Angle6;
GetVehicleZAngle(GetPlayerVehicleID(playerid), Angle6);
new Float:DeltaX = 2 * (-floatsin(Angle6,degrees));
new Float:DeltaY = 2 * floatcos(Angle6,degrees);
SetVehicleVelocity(GetPlayerVehicleID(playerid), DeltaX, DeltaY, 0.0);
return 1;
}
}


En haut de votre GM, vérifiez que vous ayez bien ceci : #include <float>
Intégrez cette commande dans "OnPlayerCommandText".

Je vous laisse profiter !  ;D
Titre: Re : Re : codes/scripts utiles
Posté par: Alexendro_Torres le 11 Avril 2010, 19:14:37
Hello,
Revenant d'un cours de Maths d'hier, je me suis dit que j'allais utiliser ce que j'ai appris.
Pour cela, j'ai fait une petite commande, qui est pratique, car un peu gonflant d'avoir un SetVehicleVelocity où l'on peut que aller en X ou Y :
Cette commande vous sert à vous donner un bon coup de boost vers l'angle auquel vous êtes orienté.


if(strcmp(cmd,"/vitesse",true)==0)
{
if(!IsPlayerInAnyVehicle(playerid))
{
new Float:Angle5;
new Float:Xx, Float:Yy, Float:Zz;
GetPlayerFacingAngle(playerid, Angle5);
GetPlayerPos(playerid, Xx, Yy, Zz);
new Float:DeltaX = 2 * (-floatsin(Angle5,degrees));
new Float:DeltaY = 2 * floatcos(Angle5,degrees);
SetPlayerVelocity(playerid, DeltaX, DeltaY, 0.1);
return 1;
}
if(IsPlayerInAnyVehicle(playerid))
{
new Float:Angle6;
GetVehicleZAngle(GetPlayerVehicleID(playerid), Angle6);
new Float:DeltaX = 2 * (-floatsin(Angle6,degrees));
new Float:DeltaY = 2 * floatcos(Angle6,degrees);
SetVehicleVelocity(GetPlayerVehicleID(playerid), DeltaX, DeltaY, 0.0);
return 1;
}
}


En haut de votre GM, vérifiez que vous ayez bien ceci : #include <float>
Intégrez cette commande dans "OnPlayerCommandText".

Je vous laisse profiter !  ;D


Pour ceux qui veulent que ce cois juste les admins , on le rajoute ou le "If" s'il vous plaît, merci de m'aidé je suis débutant
Titre: Re : codes/scripts utiles
Posté par: cristab le 11 Avril 2010, 19:42:42
if(strcmp(cmd,"/vitesse",true)==0)
{
              if(IsPlayerAdmin(playerid)){
if(!IsPlayerInAnyVehicle(playerid))
{
new Float:Angle5;
new Float:Xx, Float:Yy, Float:Zz;
GetPlayerFacingAngle(playerid, Angle5);
GetPlayerPos(playerid, Xx, Yy, Zz);
new Float:DeltaX = 2 * (-floatsin(Angle5,degrees));
new Float:DeltaY = 2 * floatcos(Angle5,degrees);
SetPlayerVelocity(playerid, DeltaX, DeltaY, 0.1);
return 1;
}
if(IsPlayerInAnyVehicle(playerid))
{
new Float:Angle6;
GetVehicleZAngle(GetPlayerVehicleID(playerid), Angle6);
new Float:DeltaX = 2 * (-floatsin(Angle6,degrees));
new Float:DeltaY = 2 * floatcos(Angle6,degrees);
SetVehicleVelocity(GetPlayerVehicleID(playerid), DeltaX, DeltaY, 0.0);
return 1;
}}
}
Titre: Re : Re : codes/scripts utiles
Posté par: Alexendro_Torres le 12 Avril 2010, 19:40:52
if(strcmp(cmd,"/vitesse",true)==0)
{
              if(IsPlayerAdmin(playerid)){
if(!IsPlayerInAnyVehicle(playerid))
{
new Float:Angle5;
new Float:Xx, Float:Yy, Float:Zz;
GetPlayerFacingAngle(playerid, Angle5);
GetPlayerPos(playerid, Xx, Yy, Zz);
new Float:DeltaX = 2 * (-floatsin(Angle5,degrees));
new Float:DeltaY = 2 * floatcos(Angle5,degrees);
SetPlayerVelocity(playerid, DeltaX, DeltaY, 0.1);
return 1;
}
if(IsPlayerInAnyVehicle(playerid))
{
new Float:Angle6;
GetVehicleZAngle(GetPlayerVehicleID(playerid), Angle6);
new Float:DeltaX = 2 * (-floatsin(Angle6,degrees));
new Float:DeltaY = 2 * floatcos(Angle6,degrees);
SetVehicleVelocity(GetPlayerVehicleID(playerid), DeltaX, DeltaY, 0.0);
return 1;
}}
}

merci
Titre: Re : codes/scripts utiles
Posté par: Ssk le 12 Avril 2010, 20:39:41
Voila le code a Gz' en un peu plus beau =)
for(new id=0;id<300;id++) {
     if(id==3 || id==8 || id==42 || id==65 || id==74 || id==86 || id==119 || id==149 ||  id==208 || id==266 || id==273 || id==289)
{
    continue;
}
AddPlayerClass(id,0.0,0.0,0.0,0.0,0,0,0,0,0,0);
}
Titre: Re : codes/scripts utiles
Posté par: Syg le 13 Avril 2010, 16:31:35
Effectivement Gzsume, le code de sazuke n'est pas équivalant au tien.

Sinon, voici la liste exhaustive des skins non valides :
3, 4, 5, 6, 8, 42, 65, 74, 86, 119, 149, 208, 266, 273, 289
Sachant que les ID de skins ne peuvent pas dépasser 299.

++
Syg
Titre: Re : codes/scripts utiles
Posté par: Ssk le 13 Avril 2010, 20:30:01
Oops je l'ai est oublié désolée ^^
Titre: Re : codes/scripts utiles
Posté par: Syg le 14 Avril 2010, 10:10:27
Voici ce que j'avais dans un des mes vieux gamemodes où je fais des essais :

new BadSkins[16] = {3, 4, 5, 6, 8, 42, 65, 74, 86, 119, 149, 208, 266, 273, 289, -1};

public OnGameModeInit ()
{

...

/* Ajout de tous les persos valides */
for (new i=0, j=0 ; i<300 ; i++)
{
if (i != BadSkins[j])
{
AddPlayerClass (i, 1930.8340, -1394.4470, 13.7947, 151.9744, 0, 0, 0, 0, 0, 0);
}
else
{
/* Mauvais skin suivant */
j++;
}
}

...
}

++
Syg
Titre: Re : codes/scripts utiles
Posté par: cristab le 16 Avril 2010, 13:05:47
afin d'aider les personne debutante en PAWN j'ai fais ceci pour trouver votre couleur dont vous avez besoin http://cristab.com/colorpwn.html (http://cristab.com/colorpwn.html)
Titre: Re : Re : codes/scripts utiles
Posté par: Barto le 16 Avril 2010, 13:11:47
afin d'aider les personne debutante en PAWN j'ai fais ceci pour trouver votre couleur dont vous avez besoin http://cristab.com/colorpwn.html (http://cristab.com/colorpwn.html)

GG, bien fait :)
Titre: Re : codes/scripts utiles
Posté par: cristab le 16 Avril 2010, 13:24:12
Merci

si il y a besoin de quelque chose pour aider les debutant vous pouvez envoyer un MP je tenterais de coder sa
Titre: Re : codes/scripts utiles
Posté par: Ssk le 16 Avril 2010, 13:31:04
Cristab ta page est vierge ^^

Y a rien qui apparait lol
Titre: Re : Re : codes/scripts utiles
Posté par: Barto le 16 Avril 2010, 13:32:29
Cristab ta page est vierge ^^

Y a rien qui apparait lol

Bah moi je la vois bien.
Titre: Re : codes/scripts utiles
Posté par: Eloctro le 16 Avril 2010, 16:47:27
Questions :
Sa fait quoi si on met un Skin invalide ?
Titre: Re : codes/scripts utiles
Posté par: Eloctro le 16 Avril 2010, 17:36:10
Ok mais y a pas de dangé pour le serveur ?
Titre: Re : Re : codes/scripts utiles
Posté par: cristab le 16 Avril 2010, 19:56:47
Cristab ta page est vierge ^^

Y a rien qui apparait lol

+1 je le voit plus je regarde sa ...
Titre: Re : Re : Re : codes/scripts utiles
Posté par: Ssk le 16 Avril 2010, 22:02:38
Cristab ta page est vierge ^^

Y a rien qui apparait lol

+1 je le voit plus je regarde sa ...


Jolie Cristab ^^

Sinon Coco76 pour les skins invalides ça crash le client, mais sous 0.3 normalement ça ne crash pas,ça affiche un message d'erreur et garde le skin que le joueur avait ^^
Titre: Re : Re : Re : Re : codes/scripts utiles
Posté par: S!m le 17 Avril 2010, 01:15:48
Cristab ta page est vierge ^^

Y a rien qui apparait lol

+1 je le voit plus je regarde sa ...


Jolie Cristab ^^

Sinon Coco76 pour les skins invalides ça crash le client, mais sous 0.3 normalement ça ne crash pas,ça affiche un message d'erreur et garde le skin que le joueur avait ^^

moi je n'ai pas de message d'erreur, ça me met simplement le skin par défaut (CJ)

++Sim++
Titre: Re : codes/scripts utiles
Posté par: Ssk le 28 Avril 2010, 23:11:49
En cherchant dans les fichiers samp j'ai decouvert une sorte de /save mais  qui est /rs elle ne fait pas de AddStatic etc ... mais elle sauvegarde que les positions dans une fichier rawpositions.txt utile pour faire un tableau facilement ^^

Sinon je peut vous fournir un samp modifié pour pouvoir faire plus de screen ( 999 initialement je peut allé jusque 999999999 )


Titre: Re : Re : codes/scripts utiles
Posté par: cristab le 29 Avril 2010, 08:39:41

Sinon je peut vous fournir un samp modifié pour pouvoir faire plus de screen ( 999 initialement je peut allé jusque 999999999 )




deja des que j'en ai 30 c'est la mort xD
Titre: Re : Re : codes/scripts utiles
Posté par: Syg le 29 Avril 2010, 10:44:31
Questions :
Sa fait quoi si on met un Skin invalide ?
En version 0.3, il n'est plus possible de faire planter le client avec un skin invalide (j'ai essayé).
Ni avec un objet invalide d'ailleurs.
Le code de la 0.3 contient des protection contre les ID invalides pour éviter les plantages.
Lorsqu'on utilise un id de skin invalide, il met le skin 0 (CJ) par défaut.

Au passage, j'ai remarqué que le skin 266 marchait en jeu maintenant (c'est un flic).
Par contre, je n'ai pas testé cet ID avec un AddPlayerClass.

EDIT : Le skin 266 est devenu un skin valide, il marche très bien avec AddPlayerClass et SetPlayerSkin.

++
Syg
Titre: Re : codes/scripts utiles
Posté par: cristab le 29 Avril 2010, 12:38:14
voila le lien direct des skin au pire je tenterais de faire une page web avec tout les skin mais classer differement


http://wiki.sa-mp.com/wiki/Skins:All (http://wiki.sa-mp.com/wiki/Skins:All)
Titre: Re : Re : codes/scripts utiles
Posté par: Ssk le 29 Avril 2010, 14:49:43
Old le /rs. ^^

lol je connaissais pas la commande ^^


Sinon le skin est jolie ^^ J'aime bien la tête rasé ^^


( Je sais c'est pas utile de le dire ^^ )
Titre: Re : codes/scripts utiles
Posté par: Syg le 03 Mai 2010, 12:01:43
Il n'y a pas tous les skins cristab, il en manque même un sacré paquets sur le Wiki de SAMP.

Darson les a tous photographié : http://www.gtaonline.fr/liste-des-skins-gta-sa.html (http://www.gtaonline.fr/liste-des-skins-gta-sa.html) (sauf le 266 puisque il était soit disant invalide)

++
Syg
Titre: Re : codes/scripts utiles
Posté par: cristab le 03 Mai 2010, 12:04:47
je le ferais IG avec les invalide peu etre qu'il y en a de zapper
Titre: Re : codes/scripts utiles
Posté par: Syg le 03 Mai 2010, 12:10:52
Sur la liste de Darson, ils y sont tous sauf le 266.

++
Syg
Titre: Re : codes/scripts utiles
Posté par: Ssk le 10 Mai 2010, 15:18:09
Voila deux fonction qui permette de faire des couleurs Hexadécimal à partir de RGB décimaux, ou RGBA


RGB(r,g,b)
{
    return (r << 24) | (g << 16) | (b << 8) | (255);
}

RGBA(r,g,b,a)
{
    return (r << 24) | (g << 16) | (b << 8) || (a);
}

On peut l'utilisé comme cela

SendClientMessage(playerid,RGB(255,0,0),"Salut je suis rouge !");
SendClientMessage(playerid,RGB(0,255,0),"Salut je suis Vert !");
SendClientMessage(playerid,RGB(0,0,255),"Salut je suis bleu !");

Ou

SendClientMessage(playerid,RGBA(255,0,0,255),"Salut je suis rouge opaque!");
SendClientMessage(playerid,RGBA(0,255,0,128),"Salut je suis Vert semi opaque!");
SendClientMessage(playerid,RGBA(0,0,255,0),"Salut je suis bleu transparant !");

Merci à sim pour m'avoir aidé ^^
Titre: Re : codes/scripts utiles
Posté par: Ssk le 10 Mai 2010, 17:17:53
On peut l'utilisé dans toute les fonctions qui utilise les couleurs, sauf celle des véhicules =)

Sinon c'est assez simple c'est juste un déplacement de bit ^^
Titre: Re : codes/scripts utiles
Posté par: Ssk le 10 Mai 2010, 17:36:34
Oo

Un bit l'unité informatique la plus petite, elle peut avoir comme valeur 0 ou 1 ( le binaire quoi ^^ )

Cadeau tout est expliqué =)

http://fr.wikipedia.org/wiki/Bit (http://fr.wikipedia.org/wiki/Bit)
Titre: Re : codes/scripts utiles
Posté par: S!m le 10 Mai 2010, 20:51:17
Salut,

je suis désolé, mais la seconde fonction comporte une petite erreur, tu as mis un || au lieu de |

ps.

il est également possible de le faire en define ce qui serait légèrement plus rapide:
#define RBG(%0,%1,%2) ((%0 << 24)|(%1 << 16)|(%2 << 8)|(255))
#define RBGA(%0,%1,%2,%3) ((%0 << 24)|(%1 << 16)|(%2 << 8)|(%3))
//tant quà y être pour les lumières des véhicules....
#define Lights(%0,%1,%2,%3) ((%0 << 3)|(%1 << 2)|(%2 << 1)|(%3))
Si quelqu'un peut confirmer pour les lumières comme je ne suis pas certains (ps. chaque paramètre = 1 lumière (1 = allumée, 0 = éteinte, autre valeur = bug))

allez bonne chance amusez vous :P

++Sim++
Titre: Re : codes/scripts utiles
Posté par: Ssk le 10 Mai 2010, 21:00:51
Ah merci j'avais pas remarqué ^^
Titre: Re : codes/scripts utiles
Posté par: Ssk le 13 Mai 2010, 17:11:51
Euh


dini_IntSet ? badSkins ?
Titre: Re : codes/scripts utiles
Posté par: S!m le 13 Mai 2010, 23:14:37
Salut,

la même chose en zcmd (sans le test de IsValidSkin):

CMD:skin(playerid, params[])
CMD:skin(playerid, params[])
{
new skin = 0;
if(sscanf(params, "i", skin))
{
SendClientMessage(playerid, COLOR_WHITE, "Formulation: /skin [skinid]");
}
else
{
SetPlayerSkin(playerid, skin);
}
return 1;
}

à noter que les skins invalide vous mettrons simplement le skin de CJ, j'ai toujours fais ainsi sans problème

++Sim++
Titre: Re : codes/scripts utiles
Posté par: Ssk le 03 Juin 2010, 10:18:21
Une petite fonction permettant de renommer un fichier

public RenameFile(File[],newFile[]);
public RenameFile(File[],newFile[])
{
if(!fexist(File) && fexist(newFile)){return false;}
new File:f = File:0,File:nf = File:0;
f = fopen(File,io_read);
nf = fopen(newFile,io_write);
new str[256] = "";

while(fread(f,str,sizeof(str))
{
    fwrite(nf,str);
}

fclose(nf);
fclose(f);
fremove(File);
return true;
}
Titre: Re : codes/scripts utiles
Posté par: S!m le 03 Juin 2010, 17:07:39
Salut,

puisque je ne semble pas l'avoir déjà postée, je vous sort une petite fonction que j'avais développé pour mon script de course:

ffit(filename[], string[], index=0, bool:ignorecase=true)
{
new File:Filefit;
Filefit = fopen(filename, io_read);
if(Filefit)
{
fseek(Filefit, index);
new tmp[256];//peut-être changer la taille si vos fichiers comportent de longues lectures
while(fread(Filefit, tmp))
{
if(strfind(tmp, string, ignorecase) != -1)
{
fclose(Filefit);
return 1;
}
}
fclose(Filefit);
}
return 0;
}
En gros, cette fonction permet de savoir si un bout de texte se retrouve dans un fichier

Par exemple:

if(ffit("/Users/Sim.ini", "password"))
{
    //si le mot password se trouve dans le fichier Sim.ini dans le dossier Users
}

EDIT:
Sasuke en ce qui concerne le premier test de ta fonction, je pense qu'il serait mieux de tester si le nouveau nom existe OU le fichier de départ n'existe pas. Sinon, il pourrait aussi être pertinent de vérifier que les fichiers sont bien ouvert (if(f && nf)) avant de tenter d'y travailler.

++Sim++
Titre: Re : codes/scripts utiles
Posté par: Ssk le 03 Juin 2010, 18:12:31
Merci pour la suggestion ^^

Et jolie le strfind pour les fichiers ^^

Et merci pour la suggestion ^^

( Je pense que le test est un peu inutile, non ? )
Titre: Re : Re : codes/scripts utiles
Posté par: S!m le 03 Juin 2010, 21:33:35
( Je pense que le test est un peu inutile, non ? )

un peu mais c'est plus sur, d'ailleurs si tu fais ce test, pu besoin de tester si le fichier original existait. (toujours mieux de le faire pour le nouveau)

++Sim++
Titre: Re : codes/scripts utiles
Posté par: Ssk le 30 Juin 2010, 17:52:43
Petite fonction que j'ai faite dans l'ennui, j'espère avoir un écran ce soir, et que les fonction ne soit pas erronées :-(


loul

stock PlayerLookPlayer( playerid, lookatid )
{
if( IsPlayerConnected( playerid ) && IsPlayerConnected( lookatid ))
{
    new Float:x, Float:y, Float:z,
        Float:x1, Float:y1, Float:z1;
GetPlayerPos( playerid, x, y, z );
GetPlayerPos( lookatid, x1, y1, z1 );
SetPlayerFacingAngle( playerid, atan2( y1 - y, x1 - x ) -180 );
}
}

stock DeuxJoueursSeRegarde( playerid, playerid2 ) // Hihi nom de fonction merdique désolé :(
{
if( IsPlayerConnected( playerid ) && IsPlayerConnected( playerid2 ))
{
    new Float:x, Float:y, Float:z,
        Float:x1, Float:y1, Float:z1;
GetPlayerPos( playerid, x, y, z );
GetPlayerPos( playerid2, x1, y1, z1 );
SetPlayerFacingAngle( playerid, atan2( y1 - y, x1 - x ) -180 );
SetPlayerFacingAngle( playerid2, atan2( y - y1, x - x1 )-180 );
}
}
Titre: Re : codes/scripts utiles
Posté par: Ssk le 02 Juillet 2010, 14:12:05
Voila un petit code qui permet de savoir l'ID du joueur le plus proche d'un autre joueur !


( La fonction retourne l'ID du joueur, sinon -1 )


stock JoueurLePlusProche( playerid )
{
if(!IsPlayerConnected( playerid )){return -1;}
new Playerid = -1;
new Float:Distance = 3000000000000.0; // Distance que je pense être impossbile entre deux joueurs ^^
new Float:x, Float:y, Float:z,
Float:x1, Float:y1, Float:z1;
GetPlayerPos(playerid, x, y, z);

#define DISTANCE(%1,%2,%3,%4,%5,%6) floatsqroot( floatpower(%1 - %4, 2) + floatpower(%2 - %5, 2) + floatpower(%3 - %6, 2))

for(new i = 0; i < GetMaxPlayers(); i++)
{
    if(!IsPlayerConnected( i )){continue;}
    GetPlayerPos(playerid, x1, y1, z1);
   
    if(DISTANCE(x, y, z, x1, y1, z1) < Distance)
    {
    Distance = DISTANCE(x, y, z, x1, y1, z1);
        Playerid = i;
    }
}
return Playerid;
}

à testé !
Titre: Re : codes/scripts utiles
Posté par: S!m le 05 Juillet 2010, 00:24:47
Salut,

belle fonction, par contre j'ai 3 suggestions:

 - utiliser INVALID_PLAYER_ID au lieu de -1
 - changer le nom du define pour un truc moins commun (pour éviter les problèmes de compatibilité)
 - #undef vers la fin de la fonction pour que le define ne soit valide que dans cette fonction

++Sim++
Titre: Re : codes/scripts utiles
Posté par: chneubeul le 05 Juillet 2010, 11:43:26
GG à toi Sasuke. :)

ps: Pourrais-je savoir à quoi sert le '' continue; " svp ?
Titre: Re : codes/scripts utiles
Posté par: Bayshore le 05 Juillet 2010, 18:02:40
Il sert à ignorer la suite de la boucle pour cette itération, il passe à la prochaine.
Titre: Re : codes/scripts utiles
Posté par: chneubeul le 05 Juillet 2010, 19:31:18
Ok merci ^^

Mais pourquoi ne pas mettre un return 1;
Titre: Re : Re : codes/scripts utiles
Posté par: Ssk le 05 Juillet 2010, 20:26:22
Ok merci ^^

Mais pourquoi ne pas mettre un return 1;


un return aurai stoppé la boucle, hors continue; permet de sauté une étape ^^

par exemple j'ai une boucle qui vérifie que les joueurs sont connectés et leurs envoie un message

je test si le joueur est connecté si oui, je lui envoie le message, sinon je fait continue, qui passe au prochain joueur directement ^^

Merci pour les suggestion Sim, j'avoue que je n'avais pas fait attention au #define
Titre: Re : codes/scripts utiles
Posté par: chneubeul le 05 Juillet 2010, 21:17:32
Ah oui, merci que j'suis bête ^^ =D
Titre: Re : codes/scripts utiles
Posté par: Ssk le 12 Juillet 2010, 17:27:40
stock MoveObjectEx( objectid, Float:x, Float:y, Float:z, Float:Speed, time )
{
SetTimerEx("MoveObject",time,0, "iffff", objectid, x, y, z, Speed );
}


cadeau, c'est une sorte de MoveObject, mais à retardement ^^


Vous faite

MoveObjectEx( id de l objet, x, y, z, Vitesse de déplacement de l objet, nombre de ms à attendre avant de bouger l'objet )
Titre: Re : codes/scripts utiles
Posté par: Ssk le 17 Juillet 2010, 17:06:39
C'est de toi ?
Titre: Re : codes/scripts utiles
Posté par: » Lukubi™ le 17 Juillet 2010, 20:00:42
C'est louche quand meme, tu arrive a coder une fonction aussi dur que sa et tu ne sais pas positionner un texdraw ... Soit tu a copier coller cette fonction de quelque part, soit tu t'es inspiré énormément de celle de dracoblues ...
Titre: Re : codes/scripts utiles
Posté par: cristab le 17 Juillet 2010, 20:47:22
du scipt de r@f il me semble aussi Radmin
Titre: Re : codes/scripts utiles
Posté par: Leonidas300 le 25 Juillet 2010, 12:46:56
Commande pour savoir le temps restant d'une personne jail, attention il faut le configurer, c'est compté en seconde! ( Je les faites moi meme )

Code: (pawn) [Sélectionner]
if(strcmp(cmd, "/temps", true) == 0)
{
if (PlayerInfo[playerid][pAdmin] < 1)
    {
    SendClientMessage(playerid, COLOR_GREY, "Vous n'ête pas autoriser");
    return 1;
    }
tmp = strtok(cmdtext,idx);
if (!strlen(tmp))
    {
    SendClientMessage(playerid, COLOR_GREY, "[Usage]: /temps [ID]");
    return 1;
    }
giveplayerid = ReturnUser(tmp);
if (giveplayerid == INVALID_PLAYER_ID)
    {
    SendClientMessage(playerid, COLOR_GREY, "Ce joueurs est Hors ligne");
    return 1;
    }
if (PlayerInfo[giveplayerid][pJailTime] > 0)
{
    GetPlayerName(giveplayerid, giveplayer, sizeof(giveplayer));
    format(string, sizeof(string), "%s: %d Secondes de Jail restant ", giveplayer, PlayerInfo[playerid][pJailTime]-0);
    SendClientMessage(playerid, COLOR_INVITER, string);
    }
return 1;
}
Titre: Re : codes/scripts utiles
Posté par: Leonidas300 le 25 Juillet 2010, 19:43:58
hein ?
Titre: Re : codes/scripts utiles
Posté par: Syg le 25 Juillet 2010, 21:32:05
Ca faisait un moment que je n'étais pas passé par là.
Je vais donc faire mon chieur ..... :)

1 - Pour Dizzy : La fonction IsNumeric existe certainement en C (même code qu'en PAWN) depuis avant ta naissance. Donc t'en approprier les crédits me semble un peu abusé. D'ailleurs, la fonction que tu montres se trouve dans <utils.h>, pas dans <dutils.h> (dans cette include, elle prend en compte le signe du nombre).
Pour l'autre fonction, <dutil.h> en contient une avec le même nom et le même paramètre (ce qui me parait louche, personnellement, étant français, quand je fais une fonction moi même, je lui donne un nom français ainsi qu'à ses paramètres).
Concernant le contenu de ta fonction ValidEmail, il est très différent du contenu de celle qu'on trouve dans <dutils.h> ce qui pourrait indiquer que c'est toi qui l'a écrite.

2 - Pour sazuke :
Hérésie !!!!
Pourquoi faire un #define à l'intérieur d'une fonction, autant mettre directement le code.
Hérésie 2 !!!!
Utilisation de continue dans une boucle for = truc de débutant qui ne sait pas coder et qui croit optimiser son code :
Le tien :
for(new i = 0; i < GetMaxPlayers(); i++)
{
   if(!IsPlayerConnected( i )){continue;}
   GetPlayerPos(playerid, x1, y1, z1);
   
   if(DISTANCE(x, y, z, x1, y1, z1) < Distance)
   {
    Distance = DISTANCE(x, y, z, x1, y1, z1);
       Playerid = i;
   }
}
Le mien (qui fait la même chose) :
for(new i = 0; i < GetMaxPlayers(); i++)
{
if (IsPlayerConnected (i)) // On ne traite que les joueurs connectés
{
GetPlayerPos (playerid, x1, y1, z1);

if (DISTANCE (x, y, z, x1, y1, z1) < Distance)
{
Distance = DISTANCE (x, y, z, x1, y1, z1);
Playerid = i;
}
}
}

Autre chose, le floatsqroot consomme beaucoup de ressources, pour ta comparaison il vaut mieux élever la distance au carré. De même que faire un floatpower pour élever au carré consomme plus que de simplement multiplier le nombre par lui même.
De plus, faire le calcul 2 fois consommera presque 2 fois plus de temps CPU.

Autre remarque : grosse erreur d'inattention dans le deuxième GetPlayerPos, il faut mettre i, pas playerid.

Mais l'erreur la plus grosse que tu es faîte dans cette fonction c'est que ta boucle for va faire le test pour TOUS les joueurs, y compris le joueur pour lequel on appelle la fonction. Et le résultat sera donc toujours le même : Le joueur le plus proche du joueur X est ..... le joueur X lui-même :).

Au final, on oublie le #define qui ne servira plus à rien (ça ma fait du mal quand j'ai vu ça :(), on corrige tous les petits défauts cités ci-dessus et on obtient un version optimisée (non testée mais je suis confiant) :
stock JoueurLePlusProche( playerid )
{
if(!IsPlayerConnected( playerid )){return -1;}
new PlusProcheJoueur = INVALID_PLAYER_ID;
new Float:Distance = 3000000000000.0; // Distance que je pense être impossible entre deux joueurs ^^
new Float:x, Float:y, Float:z, Float:x1, Float:y1, Float:z1, Float:D;
GetPlayerPos(playerid, x, y, z);

for(new i = 0; i < GetMaxPlayers (); i++)
{
if (IsPlayerConnected (i) && i != playerid) // Il ne faut pas faire le test pour le joueur lui-même
{
GetPlayerPos (i, x1, y1, z1);
D=(x-x1)*(x-x1)+(y-y1)*(y-y1)+(z-z1)*(z-z1);
if(D < Distance*Distance)
{
Distance = floatsqroot (D);
PlusProcheJoueur = i;
}
}
}
return PlusProcheJoueur;
}
NB : Les crédits restent à sazuke car c'est lui qui a eu l'idée de cette fonction, ce qui est certainement la chose le plus difficile en programmation (avoir des idées).

++
Syg
Titre: Re : codes/scripts utiles
Posté par: Ssk le 25 Juillet 2010, 21:41:19
Ah, ouais j'avoue que je n'y avais pas penser à ne pas tester le joueur lui même lol


Sinon je ne comprend pas le problème du continue ^^


(Merci Syg pour la correction ^^ )
Titre: Re : Re : codes/scripts utiles
Posté par: cristab le 25 Juillet 2010, 21:46:26

NB : Les crédits restent à sazuke car c'est lui qui a eu l'idée de cette fonction, ce qui est certainement la chose le plus difficile en programmation (avoir des idées).


j'avoue ^^

par contre j'appuie aussi le fait que si une personne cree une fonction (une personne fr) sa fonction le mieux pour lui c'est q'elle soit FR

exemple je suis en train de coder le serveur LZR avec un systeme achat de voiture qui fonctionne d'ailleur mais il manque encore trois commande on peu remarquer que mes var sont en FR

CarInfo[Voit][vendu]= dini_Int(CarAccount(Voit), "vendu");
CarInfo[Voit][proprio]= dini_Int(CompteVoiture(Voit), "proprio");
CarInfo[Voit][X]= dini_Int(CompteVoiture(Voit), "x");
CarInfo[Voit][Y]= dini_Int(CompteVoiture(Voit), "y");
CarInfo[Voit][Z]= dini_Int(CompteVoiture(Voit), "z");
CarInfo[Voit][A]= dini_Int(CompteVoiture(Voit), "a");
CarInfo[Voit][C1]= dini_Int(CompteVoiture(Voit), "Couleur1");
CarInfo[Voit][C2]= dini_Int(CompteVoiture(Voit), "Couleur2");
CarInfo[Voit][autorisevente]= dini_Int(CompteVoiture(Voit), "Autorisevente");
CarInfo[Voit][PrixAchat]= dini_Int(CompteVoiture(Voit), "PrixAchat");
CarInfo[Voit][PrixRevente]= dini_Int(CompteVoiture(Voit), "PrixRevente");
sauf pour CarInfo car VoitureInfo sa m'aurais enerver ^^
Titre: Re : codes/scripts utiles
Posté par: Ssk le 25 Juillet 2010, 22:07:02
Voila une dernière correction lol

T'a fait une petit erreur d'inattention Syg ^^

stock JoueurLePlusProche( playerid )
{
if(!IsPlayerConnected( playerid )){return INVALID_PLAYER_ID;}
new PlusProcheJoueur = INVALID_PLAYER_ID;
new Float:Distance = 3000000000000.0; // Distance que je pense être impossible entre deux joueurs ^^
new Float:x, Float:y, Float:z, Float:x1, Float:y1, Float:z1, Float:D;
GetPlayerPos(playerid, x, y, z);

for(new i = 0; i < GetMaxPlayers (); i++)
{
if (IsPlayerConnected (i) && i != playerid) // Il ne faut pas faire le test pour le joueur lui-même
{
GetPlayerPos (i, x1, y1, z1);
D=(x-x1)*(x-x1)+(y-y1)*(y-y1)+(z-z1)*(z-z1);
if(D < Distance*Distance)
{
Distance = floatsqroot (D);
PlusProcheJoueur = i;
}
}
}
return PlusProcheJoueur;
}

Tu retourne -1; Si le joueur n'est pas connecter alors qu'il aurai fallut retourner INVALID_PLAYER_ID ^^
Titre: Re : codes/scripts utiles
Posté par: cristab le 25 Juillet 2010, 22:20:53
sasuke INVALID_PLAYER_ID est -1 revient au meme en java on peu mettre -1 mais aussi 0xFFFF(Il s'agit d'un nombre 16-bit avec tous les bits à 1)

soit 0xFFFF = -1
Titre: Re : codes/scripts utiles
Posté par: Ssk le 25 Juillet 2010, 23:45:49
INVALID_PLAYER_ID vaut -1 ? à l'époque de la 0.2.* il valait 255 non ?

Je doit me tromper alors
Titre: Re : codes/scripts utiles
Posté par: scott1 le 26 Juillet 2010, 04:56:13
if(strcmp(cmdtext, "/pos", true) == 0)
{
new length = strlen(cmdtext);
while ((idx < length) && (cmdtext[idx] <= ' '))
{
idx++;
}
new offset = idx;
new result[64];
while ((idx < length) && ((idx - offset) < (sizeof(result) - 1)))
{
result[idx - offset] = cmdtext[idx];
idx++;
}
result[idx - offset] = EOS;
if(!strlen(result))
{
SendClientMessage(playerid, COLOR_YELLOW, "USAGE: /pos [commentaire]");
return 1;
}
if (IsPlayerAdmin(playerid))
{
new Float:px, Float:py, Float:pz;
new Float:angle;
if(IsPlayerInAnyVehicle(playerid)) { GetVehicleZAngle(GetPlayerVehicleID(playerid), angle); }
else { GetPlayerFacingAngle(playerid, angle); }
GetPlayerPos(playerid, px, py, pz);
SendClientMessage(playerid, COLOR_YELLOW, "Position sauvegardée");
new coordsstring[256];
format(coordsstring, 256, "%.4f,%.4f,%.4f,%.4f // %s\n", px, py, pz,angle,result);
new File:hFile;
hFile = fopen("Position.txt", io_append);
fwrite(hFile, coordsstring);
fclose(hFile);

}

Cette commande équivaut au /save mais plus facile.

Il faut être connecté à la RCON, on fait /pos commentaire IG  et ça nous ouvre un fichier positon txt ça nous ecris la position, l'angle, on peux directement copier coller les coordonnée.
Titre: Re : codes/scripts utiles
Posté par: cristab le 26 Juillet 2010, 09:16:04
avant INVALID_PLAYER_ID valais bien 255 mais desormer on peut aller a 500 joueur donc en regardant l'include on peu voir 0xFFFF  de meme pour les INVALID_VEHICLE un truc du genre
Titre: Re : codes/scripts utiles
Posté par: Ssk le 26 Juillet 2010, 12:54:47
Après test je connais maintenant la valeur de INVALID_PLAYER_ID, elle vaut 65535 ^^


Fait comme cela pour voir ^^


printf("INVALID_PLAYER_ID %d\n", INVALID_PLAYER_ID );

Un petit peu de doc sur ce nombre =)

http://en.wikipedia.org/wiki/65535_%28number%29 (http://en.wikipedia.org/wiki/65535_%28number%29)

^^
Titre: Re : codes/scripts utiles
Posté par: cristab le 26 Juillet 2010, 13:09:32
effectivement on peu le voir comme ceci c'est un bug pawn en gros sa donne le meme resultat quand un joueur ce connect avec un tres gros ping que le serveur n'arrive meme pas a connaitre la valeur de sont ping on remarque qu'il renvoie 65535

donc on sais que 65535 est en reelement un nombre negatif :)


Titre: Re : codes/scripts utiles
Posté par: Ssk le 26 Juillet 2010, 13:31:39
Ce n'est pas du tout un bug, 65535 et tout simplement la valeur maximal que peut contenir une variable de 16 bits, et Kyeman à mis cette valeur comme cela lol, c'est comme avant avec 255 ^^

255 est le nombre maximal que peut supporter une variable de 8 bits.


Et voila pour l'histoire du ping ^^

http://en.wikipedia.org/wiki/Ping_of_death (http://en.wikipedia.org/wiki/Ping_of_death)

Titre: Re : codes/scripts utiles
Posté par: Syg le 26 Juillet 2010, 14:31:11
Pour l'histoire du -1 que je retourne que le joueur n'est pas connecté, ce n'est pas du tout un erreur inattention.
Ici, on est dans le cas où la fonction est appelée sur un joueur qui n'existe pas. On retourne -1 dans ce cas pour indiquer cette erreur.
Le cas où l'on retourne INVALID_PLAYER_ID survient que le joueur playerid est seul sur le serveur (et que donc on ne trouve aucun autre joueur proche de lui).
Ce sont bien deux cas différents qui peuvent justifier deux codes retour différents.

Concernant le 0xFFFF. Il vaut 65535 ou -1, tout dépend de la façon dont on veut le représenter.
En PAWN, toutes les variables entières sont sur 32 bits donc 0xFFFF vaut 65535. Pour avoir -1, il faut mettre 0xFFFFFFFF.

Maintenant, si on travaille en 16 bit, 0xFFFF vaut 65535 si on travaille en 16 bits non signé (unsigned word en C) et -1 si on travaille en entier signé (word en C).
NB : PAWN n'a qu'un seul type de variable entière (= long en C) qui peut prendre une valeur comprise entre -2.147.483.648 et 2.147.483.647.

Donc dans tous les cas, INVALID_PLAYER_ID et -1 ne sont pas égaux en PAWN.

++
Syg

Titre: Re : codes/scripts utiles
Posté par: Ssk le 26 Juillet 2010, 15:30:28
Ah ok, mais moi je partais du principe que si y a une erreur on retourne la même valeur ^^
Titre: Re : Re : codes/scripts utiles
Posté par: Syg le 27 Juillet 2010, 23:28:46
Ah ok, mais moi je partais du principe que si y a une erreur on retourne la même valeur ^^
On fait comme on veut en fait.
Surtout qu'appeler cette fonction sur un joueur qui n'est pas connecté me parait peu probable.

++
Syg
Titre: Re : Re : Re : codes/scripts utiles
Posté par: scott1 le 28 Juillet 2010, 04:39:47

Cette commande équivaut au /save mais plus facile.

Il faut être connecté à la RCON, on fait /pos commentaire IG  et ça nous ouvre un fichier positon txt ça nous ecris la position, l'angle, on peux directement copier coller les coordonnée.

Salut j'aimerai savoir où est-ce que le fichier est créer ? Et si c'est dans le fichier de GTA , peut-on changer le chemin ?
Merci ,
Beno++

Dans to dossier scriptfiles, fichier nomé pos.txt, apres tu peux renommer le fichier dans la cmd
Titre: Re : codes/scripts utiles
Posté par: scott1 le 20 Août 2010, 18:27:11
GG Dizzy, j'y avais avait pas penser, et marre de récupérer le nom par la manière traditionnelle, par contre si syg passe par ici il va te tirer les oreilles pour ton []
Titre: Re : codes/scripts utiles
Posté par: Leonidas300 le 31 Août 2010, 14:48:46
GG Dizzi, je te montrerais mon code que j'ai crée, un peux différent :)
Titre: Re : codes/scripts utiles
Posté par: Ssk le 31 Août 2010, 14:57:44
new KillerNom[MAX_PLAYER_NAME];
new KilledNom[MAX_PLAYER_NAME];
GetPlayerName(playerid,KilledNom,sizeof(KilledNom));
GetPlayerName(killerid,KillerNom,sizeof(KillerNom));
new message[158];
format(message,sizeof(message),"%s a tué %s ( Avec l'arme : %s )",KillerNom,KilledNom,NomArme[reason]);
SendClientMessageToAll(0xFF2F2489,message);


à mettre dans OnPlayerDeath
Titre: Re : codes/scripts utiles
Posté par: Ssk le 31 Août 2010, 16:57:03
Il y avais aussi une petit erreur ^^

Titre: Re : codes/scripts utiles
Posté par: S!m le 04 Septembre 2010, 18:13:43
Salut,

un petit truc pour faire de belles listes de commandes:


#define DIALOG_CMDS (2345)//changer pour n'avoir aucun conflit de dialog

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
if(dialogid == DIALOG_CMD)
{
   if(response)
   {
       if(inputtext[0] == '/')
       {
           CallRemoteFunction("OnPlayerCommandText", "is", playerid, inputtext);
       }
   }
}
return 1;
}

CMD:cmds(playerid, params[])
{
ShowPlayerDialog(playerid, DIALOG_CMD, DIALOG_STYLE_LIST, "Commands", "/menu\n/dance\n/handsup\n/sit\n/cell\n/beer\n/smoke\n/wine\n/sprunk\n/cmd2", "Ok", "Cancel");
return 1;
}
NB. j'utilise zcmd dans cet exemple, mais le système est compatible avec tous les systèmes de commandes.

En gros, il s'agit d'une liste de commande en dialog qui permet d'exécuter les commandes en cliquant dessus.

Il est possible aussi de mettre des description aux commandes avec cette version:

#define CARACTERE_DE_SEPARATION " "
#define DIALOG_CMDS (2345)//changer pour n'avoir aucun conflit de dialog

public OnDialogResponse()
{
new idx = 0;
if(dialogid == DIALOG_CMDS)
{
if(response)
{
if(inputtext[0] == '/')
{
idx = strfind(inputtext,  CARACTERE_DE_SEPARATION);//cherche le caractère de séparation et permet de couper si description il y a
if(idx != -1)//found the char
{
inputtext[idx] = '\0';//on retire la partie de description
}
CallRemoteFunction("OnPlayerCommandText", "is", playerid, inputtext);
}
}
}
return 1;
}

CMD:cmds(playerid, params[])
{
ShowPlayerDialog(playerid, DIALOG_CMD, DIALOG_STYLE_LIST, "Commands", "/menu Menu des options joueurs\n/dance Pour dancer!\n/handsup Pour lever les mains\n/sit Pour s'asseoir\n/cell Pour utiliser le cellulaire\n/beer Pour boire de la bière\n/smoke Pour fumer(pas recommandé)\n/wine Pour boire du vin\n/sprunk Pour boire une boisson gazeuse\n/cmd2 La suite des commandes", "Ok", "Cancel");
return 1;
}
PS. je n'ai pas testé cette version mais elle devrait fonctionner normalement...

Voilà, amusez vous

++Sim++
Titre: Re : codes/scripts utiles
Posté par: Ssk le 04 Septembre 2010, 20:03:27
ça ne fonctionnera pas, je pense, vu qu'inputtext est utilisé dans les DIALOG_INPUT et non pas dans les DIALOG_LIST.
Titre: Re : Re : codes/scripts utiles
Posté par: S!m le 04 Septembre 2010, 20:33:04
Salut,

Syg m'avait fait remarqué en message privé durant une discussion que lors de l'utilisation d'une boîte de dialogue de type "LIST", le texte envoyé (inputtext) était le contenu de la ligne qui avait été sélectionnée.

c'est exactement ça.
j'ai testé la première version (j'ai fait ça il y a quelques mois...).

++Sim++
Titre: Re : codes/scripts utiles
Posté par: Ssk le 04 Septembre 2010, 21:17:32
Hum ok merci pour l'information :)

Titre: Re : Re : codes/scripts utiles
Posté par: Syg le 07 Septembre 2010, 09:48:31
Syg m'avait fait remarqué en message privé durant une discussion que lors de l'utilisation d'une boîte de dialogue de type "LIST", le texte envoyé (inputtext) était le contenu de la ligne qui avait été sélectionnée.
Je confirme, j'utilise ceci dans le script de Lalu's Stunt (notamment dans la commande /vlist en grande partie faite par Gzsume).

++
Syg
Titre: Re : codes/scripts utiles
Posté par: Ssk le 07 Septembre 2010, 18:09:24
Tu peut largement simplifier ^^

Quelque ligne ça devrait suffire ^^
Titre: Re : codes/scripts utiles
Posté par: Mr_C30 le 18 Septembre 2010, 16:07:58
tu t'est bien embêter pour rien du tout  :laugh et puis même de plus samp possède déjà internement un système similaire lors de  la connexion au serveur ;)
Titre: Re : codes/scripts utiles
Posté par: Ssk le 19 Septembre 2010, 17:14:15
C'est de toi Dizzy?


ou http://wiki.sa-mp.com/wiki/ColorFix (http://wiki.sa-mp.com/wiki/ColorFix) ?
Titre: Re : Re : codes/scripts utiles
Posté par: Nesik le 19 Septembre 2010, 17:29:33
C'est de toi Dizzy?


ou http://wiki.sa-mp.com/wiki/ColorFix (http://wiki.sa-mp.com/wiki/ColorFix) ?
:lmfao
Titre: Re : codes/scripts utiles
Posté par: S!m le 08 Octobre 2010, 04:09:54
Salut,

pour le plaisir, j'ai refait les fonctions cos et sin (encore une fois....)

version légèrement améliorée:

Float:MyCos(Float:angle, termes, rad_ou_degre = 0)
{
    new t1 = GetTickCount();
    new Float:val = 0.0;
    termes *= 2;//ainsi,    avec 1 terme, on calcul à 1 - x²/2,     2 terme: 1 - x²/2 + x^4/6
    if(rad_ou_degre)angle *= (3.1415926535/180);
    for(new i = 0; i <= termes; i+=2)
    {
        val += (floatpower(angle, i)/Factorielle(i) * floatpower((-1), i/2));
    }
    new t2 = GetTickCount();
    printf("execution time: %dms", t2-t1);
    return val;
}

Float:MySin(Float:angle, termes, rad_ou_degre = 0)
{
    new t1 = GetTickCount();
    new Float:val = 0.0;
    termes = termes * 2 - 1;//ainsi,    avec 1 terme, on calcul à x,     2 terme: x - x³/6
    if(rad_ou_degre)angle *= (3.1415926535/180);
    for(new i = 1; i <= termes; i+=2)
    {
        val += (floatpower(angle, i)/Factorielle(i) * floatpower((-1), (i-1)/2));
    }
    new t2 = GetTickCount();
    printf("execution time: %dms", t2-t1);
    return val;
}

Factorielle(x)
{
    new val = 1;
    for(new i = 2; i <= x; i++)
    {
        val *= i;
    }
    printf("%d! = %d", x, val);
    return val;
}
Faut dire que je l'ai principalement fait car en Calcul Avancé on a fait une petite révision des séries de Taylor. Je voulais les faire avec la possibilité de choisir la précision de l'approximation (avec le nombre de termes).

NB. Ces fonctions sont très lentes. Recommandé de ne pas les utilisé.
NB2. ne pas dépasser 7 ou 8 pour le paramètre termes sinon on se ramasse avec une factorielle supérieure à 2^31. Bref, une valeur qui sera complètement biaisé.
NB3. Finalement, ne l'utilisez pas en aucun cas. Il ne s'agit que de fonctions pour le "plaisir"

voilà, au plaisir de venir poster d'autres petites fonctions (in)utile dans le futur^^

++Sim++
Titre: Re : codes/scripts utiles
Posté par: Dark4ng3L le 18 Octobre 2010, 04:02:03
Voici 2 petites fonctions qui pourrons peut-être aidé quelqu'un

Code: (pawn) [Sélectionner]
stock CreerPickup(Id,Mode,Float:x,Float:y,Float:z,text[],Color,Float:Distance)
{
AddStaticPickup(Id, Mode, x,y,z);
Create3DTextLabel(text,Color, x,y,z+1,Distance,0);
}
stock IsAnUsedVehicle(vehid)
{
for(new player=0; player<MAX_PLAYERS; player++)
    {
      if(IsPlayerInAnyVehicle(player))
{
if(GetPlayerVehicleID(player) == vehid)
{
return 1;
}
}
    }
    return 0;
}
Titre: Re : Re : codes/scripts utiles
Posté par: S!m le 18 Octobre 2010, 05:51:31
Salut,

Voici 2 petites fonctions qui pourrons peut-être aidé quelqu'un

Code: (pawn) [Sélectionner]
stock CreerPickup(Id,Mode,Float:x,Float:y,Float:z,text[],Color,Float:Distance)
{
AddStaticPickup(Id, Mode, x,y,z);
Create3DTextLabel(text,Color, x,y,z+1,Distance,0);
}
stock IsAnUsedVehicle(vehid)
{
for(new player=0; player<MAX_PLAYERS; player++)
    {
      if(IsPlayerInAnyVehicle(player))
{
if(GetPlayerVehicleID(player) == vehid)
{
return 1;
}
}
    }
    return 0;
}

belles fonctions.

Dans ta seconde, tu pourrais retirer le premier test, si le joueur n'est pas dans un véhicule il ne sera pas dans le véhicule en question. Et le fait que le joueur ne soit pas dans un véhicule ne change rien au test avec GetPlayerVehicleID.

++Sim++
Titre: Re : codes/scripts utiles
Posté par: Syg le 18 Octobre 2010, 10:33:49
Pour ta fonction IsAnUsedVehicle, Dark4ng3L, il y a une fonction plus pratique que GetPlayerVehicleID :
stock IsAnUsedVehicle(vehid)
{
for(new player=0; player<MAX_PLAYERS; player++)
    {
if (IsPlayerInVehicle (player, vehid))
{
return 1;
}
}
    return 0;
}

Sinon, concernant ta première fonction, elle ne permet pas la destruction du pickup et du texte car tu ne retourne pas les handles.

++
Syg
Titre: Re : codes/scripts utiles
Posté par: spiirou le 18 Octobre 2010, 21:41:56
Bonjour,
J'ai un petit script inutile pour vous :

FuckPlayer(nom[30], sanction[5])
{
    new name[MAX_PLAYERS][128];
    for( new i = 0; i<MAX_PLAYERS; i++)
    {
        GetPlayerName(i,name[i],sizeof(name));
        if(strfind(name[i],nom))
        {
            if(strcmp(sanction, "kick") == 0) return Kick(i);
            else if(strcmp(sanction, "ban") == 0) return Ban(i);
            else return 0;
        }
    }
    return 1;
}

Le tout est a utiliser de la sorte :

public OnPlayerConnect(playerid)
{
FuckPlayer("turlututu","kick"); // Si le joueur qui se connecte a un pseudo contenant "turlututu", il sera kick.
return 1;
}

Voila,
Je pense pas que ca soit terrible, mais bon...
J'aurais essayé  :P

Spiirou
++
Titre: Re : codes/scripts utiles
Posté par: Ssk le 18 Octobre 2010, 21:45:23
Une mini amélioration, pour tester un seul joueur^^


FuckPlayer( playerid, nom[], sanction[] )
{
    new name[MAX_PLAYER_NAME] = "";
    GetPlayerName( playerid, name, sizeof(name) );
if( strfind( name, nom ) )
{
if(strcmp(sanction, "kick") == 0) return Kick(playerid);
else if(strcmp(sanction, "ban") == 0) return Ban(playerid);
else return 0;
}
    return 1;
}
Titre: Re : codes/scripts utiles
Posté par: spiirou le 18 Octobre 2010, 21:48:42
Ouais, j'y pensais ^^
Titre: Re : codes/scripts utiles
Posté par: Ssk le 18 Octobre 2010, 21:51:48
Sinon pour les sanctions je te conseillerai plutôt d'utiliser des nombres, au lieu de chaine de caractères ^^
Titre: Re : codes/scripts utiles
Posté par: spiirou le 18 Octobre 2010, 21:55:05
Oui, je l'avait fait au debut, mais j'ai changé ^^
Enfin, c'est pour le fun :p



Citation de: Test
Code: (pawno) [Sélectionner]
public OnPlayerConnect(playerid)
{
FuckPlayer(playerid,"zizi","kick");
return 1;
}

Code: (console) [Sélectionner]
Incoming connection: 127.0.0.1:64828
[join] zizi_fou has joined the server (0:127.0.0.1)
[part] zizi_fou has left the server (0:2)

Spiirou
++

NB : Désolé pour le pseudo, mais je suis en cruel manque d'imagination
Titre: Re : codes/scripts utiles
Posté par: Ssk le 18 Octobre 2010, 21:59:26
Un truc de ce genre


#define     SANCTION_KICK       0x00000001  // Kicker le joueur
#define     SANCTION_BAN        0x00000010  // Bannir le joueur
#define     SANCTION_BJR        0x00000100  // Dire bonjour au joueur








FuckPlayer( playerid, nom[], sanction )
{
    new name[MAX_PLAYER_NAME] = "";
    GetPlayerName( playerid, name, sizeof(name) );
if( strfind( name, nom ) )
{

   if( sanction & SANCTION_BJR )
SendClientMessage( playerid, 0xFFFFFFFF, "Bonjour !" );

if( sanction & SANCTION_KICK )
Kick( playerid );

if( sanction & SANCTION_BAN )
BaBan( playerid );
}
    return 1;
}


Pour kicker le joueur:

FuckPlayer( playerid, "AFK", SANCTION_KICK );
Pour dire bonjour au joueur:

FuckPlayer( playerid, "Salut", SANCTION_BJR );
Pour dire Bonjour, puis kick le joueur:

FuckPlayer( playerid, "Cheat", SANCTION_BJR + SANCTION_KICK );
Etc, on peut ensuite ajouter facilement des sanctions ^^
Titre: Re : codes/scripts utiles
Posté par: Ssk le 20 Octobre 2010, 18:19:23
Cadeau les amis !


http://pastebin.gtaonline.fr/pastebin.php?show=909 (http://pastebin.gtaonline.fr/pastebin.php?show=909)


Avec ça vous pouvez faire ce que vous voulez avec les serveurs favoris de votre launcher SA:MP ( Ils sont contenu dans le fichier "USERDATA.DAT").


Pour cette class:

CSAMPUserData
vous devez obligatoirement appeler

NextServer()
Pour que tout soit fonctionnel, sinon pour le reste il faut juste lire les noms des membres =)


EDIT:


Bon je fais une petit explication ( Hein Dizzy :p )

Alors, on déclare une des deux classe dans mon cas, je déclare la classe CSAMPUserDataWriter pour créer 47 faux serveurs ^^

Alors, je fais fait donc:

CSAMPUserDataWriter* Userdata = new CSAMPUserDataWriter( 47 ); // Ici je met le 47 pour dire que je vais créer 47 serveurs

for( int i = 0; i < 47; i++ ) // Ici une boucle pour les 47 serveurs
{
Userdata->SetServerHost( i, "127.0.0.1" ); // ici je leurs met comme IP 127.0.0.1
Userdata->SetServerName( i, "yooooh" ); // Je leurs donne comme nom yooooh
Userdata->SetServerport( i, 7777 + i ); // et la le port 7777 + la valeur de i
}

Userdata->WriteFile( "C:\\Users\\Sasuke78200\\Documents\\GTA San Andreas User Files\\SAMP\\USERDATA.DAT" ); // Ensuite je dit d'écrire les serveurs dans le fichier USERDATA.DAT, et si on ouvre SAMP, on verra 47 serveurs nommé yooooh


Voila tout =)
Titre: Re : codes/scripts utiles
Posté par: Ssk le 20 Octobre 2010, 18:41:43
Béh en faite il faut juste comprendre le fonctionnement des fichiers favoris SAMP qui est vraiment basique


on a 4 octets au début du fichier qui sont


0x53 0x41 0x4D 0x50 qui veut dire SAMP, ensuite 4 autres octets pour la version du fichier pour l'instant elle vaut 0x000001 qui veut dire 1 :p
et toujours 4 octets pour le nombres de serveurs contenu dans le fichier

Cette ensemble la, on l'appel le header ( en-tête ),
ensuite pour chaque serveurs on a:


4 Octets pour la taille de l'IP du serveur
Le nombre précédent trouver d'octets pour l'IP du serveur
4 Octets pour le port.
4 Octets pour la taille du nom du serveur
Le nombre précédent trouver d'octets pour le nom du serveur
8 octets qui valent 0

Voila tout ^^
Titre: Re : codes/scripts utiles
Posté par: Ssk le 02 Novembre 2010, 12:10:42
Je te conseil de mettre la constante MAX_PLAYER_NAME à la place de 20 quand tu déclare la variable nom.


new pseudo[ MAX_PLAYER_NAME ] = ""; // Et il ne faut pas oublier d'initialiser ^^
Titre: Re : codes/scripts utiles
Posté par: Ssk le 02 Novembre 2010, 12:30:19
Je ne sais pas du tout, mais on sait jamais si dans une prochaine release de SAMP, ils n'augmentent la taille que peut avoir les pseudos, et donc ça évite de changer la valeur à la main ^^
Titre: Re : codes/scripts utiles
Posté par: S!m le 02 Novembre 2010, 15:10:05
Salut,

en fait elle vaut 24.

Sasuke78200 a raison, il vaut toujours mieux utiliser les constantes, ainsi quand elles changeront il suffit de compiler à nouveau....
Pas seulement pour MAX_PLAYER_NAME mais pour toutes les constantes.

D'ailleurs pour les valeurs qu'on utilise plusieurs fois, il en vaut la peine de se définir une constante afin de pouvoir la changer aisément ultérieurement.

+Sim++
Titre: Re : codes/scripts utiles
Posté par: Ssk le 28 Novembre 2010, 18:37:49
Voila un petit code qui permet de sauvegarder et charger certains stats de joueur dans un fichier en binaire.



http://pastebin.gtaonline.fr/pastebin.php?show=957 (http://pastebin.gtaonline.fr/pastebin.php?show=957)
Titre: Re : codes/scripts utiles
Posté par: Xartrick le 28 Novembre 2010, 19:32:41
Message supprimé, voir raison plus bas.
Titre: Re : codes/scripts utiles
Posté par: Ssk le 28 Novembre 2010, 19:35:41
Je crois que Gzsume avais posté ça dans les post précédant ^^
Titre: Re : codes/scripts utiles
Posté par: Xartrick le 28 Novembre 2010, 19:44:44
Aie, pas vue, je vais faire une recherche et cela est vrai, je supprimerais mon message.
EDIT: Ceci est exact, désolé pour le gène occasionné.
Titre: Re : codes/scripts utiles
Posté par: Ssk le 28 Novembre 2010, 20:11:42
Ah non y a pas de gène lol, je disais juste ça pour t'informer ^^
Titre: Re : codes/scripts utiles
Posté par: Xartrick le 28 Novembre 2010, 23:49:01
Salut, c'est encore moi, j'ai trouvé un petit moyen pour raccourcir la condition considérablement !

Code: (Pawn) [Sélectionner]
#include <a_samp>

forward AddAllPlayerClass(Float:X, Float:Y, Float:Z, Float:Angle);

public AddAllPlayerClass(Float:X, Float:Y, Float:Z, Float:Angle)
{
new BadSkin[16] = {3, 4, 5, 6, 8, 42, 53, 65, 74, 86, 91, 119, 149, 208, 273, 289};

for(new i = 0; i <= 299; i++)
{
if (i == BadSkin[0 || 1 || 2 || 3 || 4 || 5 || 6 || 7 || 8 || 9 || 10 || 11 || 12 || 13 || 14 || 15])
{}
else
{
AddPlayerClass(i, Float:X, Float:Y, Float:Z, Float:Angle, 0, 0, 0, 0, 0, 0);
}
}
}

Voilà, après la remarque que m'a fait Sasuke78200 comme quoi Gzume avait déjà créé cette fonction après l'avoir fini, je me suis dis que je pouvais l'améliorer. Je prend toujours les remarques pour mieux coder !
Titre: Re : codes/scripts utiles
Posté par: S!m le 29 Novembre 2010, 01:04:47
Salut,

malheureusement, l'opérateur || ne peut pas être utilisé de cette façon, d'ailleurs je suis plutôt surpris que tu n'ait pas d'erreur avec ce code...
il faut vraiment faire chacun des tests. La seule façon de réduire la longueur, c'est avec une loop (je recommande une for pour ceci).

++Sim++
Titre: Re : codes/scripts utiles
Posté par: GtaManiac le 29 Novembre 2010, 01:10:58
Page introuvable pour le lien de Cristab.
Titre: Re : codes/scripts utiles
Posté par: Xartrick le 29 Novembre 2010, 07:11:59
J'ai également était surprit du fonctionnement de ce code mais ça marche :P.
Titre: Re : Re : codes/scripts utiles
Posté par: cristab le 29 Novembre 2010, 13:23:03
Page introuvable pour le lien de Cristab.

quelle lien???
Titre: Re : Re : codes/scripts utiles
Posté par: S!m le 29 Novembre 2010, 15:28:25
Salut,

J'ai également était surprit du fonctionnement de ce code mais ça marche :P.

ce code:
0 || 1 || 2 || 3 || 4 || 5 || 6 || 7 || 8 || 9 || 10 || 11 || 12 || 13 || 14 || 15Sort une valeur, donc ton code est validé par pawno, par contre si tu utilise la fonction, il ne testera que l'un des skins en question, il suffit de tester avec des printf:

main()
{
printf("Valeur: %i", 0 || 1 || 2 || 3 || 4 || 5 || 6 || 7 || 8 || 9 || 10 || 11 || 12 || 13 || 14 || 15);
new BadSkin[16] = {3, 4, 5, 6, 8, 42, 53, 65, 74, 86, 91, 119, 149, 208, 273, 289};
for(new i = 0; i < sizeof(BadSkin); i++)
{
if (BadSkin[i] == BadSkin[0 || 1 || 2 || 3 || 4 || 5 || 6 || 7 || 8 || 9 || 10 || 11 || 12 || 13 || 14 || 15])
{
printf("Skin %d : invalide!", BadSkin[i]);
}
else
{
printf("Skin %d : valide!", BadSkin[i]);
}
}
}

Maintenant on teste....

Citer
[09:27:08] Valeur: 1
[09:27:08] Skin 3 : valide!
[09:27:08] Skin 4 : invalide!
[09:27:08] Skin 5 : valide!
[09:27:08] Skin 6 : valide!
[09:27:08] Skin 8 : valide!
[09:27:08] Skin 42 : valide!
[09:27:08] Skin 53 : valide!
[09:27:08] Skin 65 : valide!
[09:27:08] Skin 74 : valide!
[09:27:08] Skin 86 : valide!
[09:27:08] Skin 91 : valide!
[09:27:08] Skin 119 : valide!
[09:27:08] Skin 149 : valide!
[09:27:08] Skin 208 : valide!
[09:27:08] Skin 273 : valide!
[09:27:08] Skin 289 : valide!

donc cette fonction ne rend invalide que le skin 4....

++Sim++
Titre: Re : codes/scripts utiles
Posté par: Xartrick le 29 Novembre 2010, 17:54:30
Exactement, donc cette fonction ne sera pas valide pour l'utilisation d'on nous voulons.
Dommage, je vais me pencher sur une autre solution quand j'aurais le temps !
Titre: Re : codes/scripts utiles
Posté par: Xartrick le 01 Décembre 2010, 19:12:12
Salut,
pour commencé, désolé pour le double poste.
Je viens de "créé" une fonction pour passer une chaîne de caractère tout en minuscule ou alors en majuscule.
Deux fonctions qui ont tout deux un seul paramètre (voir deux si on compte la variable à modifier).

http://pastebin.gtaonline.fr/pastebin.php?show=958 (http://pastebin.gtaonline.fr/pastebin.php?show=958)
Titre: Re : codes/scripts utiles
Posté par: Wing le 03 Décembre 2010, 20:47:15
THHHHHHX
Titre: Re : codes/scripts utiles
Posté par: Xartrick le 03 Décembre 2010, 22:02:21
Il aurait-il une personne pour m'aider à améliorer le code que j'ai poster à la fin de la page 21 ?
J'accepte les critiques, mon défaut est de ne pas pouvoir "avancer" sans la critique des autres.
Titre: Re : codes/scripts utiles
Posté par: Ssk le 03 Décembre 2010, 22:40:18
Je crois l'avoir posté y a quelques mois ^^


Sinon elle est très limite ta fonction, déjà tu limite la chaine à 32 caractères, je te conseillerai de modifier directement la chaine ^^
Titre: Re : codes/scripts utiles
Posté par: Xartrick le 03 Décembre 2010, 23:07:51
Justement, c'est là que c'est intéressant, moi j'ai utilisé 32 car j'utilise cette fonction pour un hash MD5.
Si un utilisateur à besoin de plus de place, il doit seulement modifier la valeur de ce tableau.
Je n'ai pas trouvé d'autre méthode car cela est interdit de modifier la valeur d'un tableau dynamiquement !
Titre: Re : codes/scripts utiles
Posté par: Ssk le 03 Décembre 2010, 23:22:59
Qui à dit qu'il est interdit de modifier la valeur d'un tableau ? Sinon ça ne servirai plus à rien d'avoir des variables :p

EDIT: voila pour mettre un miniscule en majuscule


TextMinInMaj(Text[])
{
for(new i = 0; i < strlen(Text); i++)
{
if(Text[i] >= 'a' && Text[i] <= 'z')
{
    Text[i] -= 'a' - 'A';
}
}
}
Titre: Re : codes/scripts utiles
Posté par: Xartrick le 03 Décembre 2010, 23:30:24
Pardon, je me suis mal exprimé, je voulais dire de la taille d'un tableau (à ma connaissance, il est interdit de modifier dynamiquement la taille d'un tableau).
Titre: Re : codes/scripts utiles
Posté par: Ssk le 03 Décembre 2010, 23:36:11
ah ouais en pawn c'est pas possible de le faire, et dommage :(
Titre: Re : codes/scripts utiles
Posté par: S!m le 03 Décembre 2010, 23:40:33
Salut,

juste pour être clair et sur:

en PAWN l'allocation de la mémoire se fait de façon statique. C'est à dire que la taille ne peut être changer après leur création. D'ailleurs, pour des débutants ce système est idéal. Le fait de ne pas pouvoir allouer de la mémoire comme on le veut nous évite beaucoup de problèmes, de la fragmentation de la mémoire à l'écriture sur une donnée existante (par exemple en sortant d'un tableau).

++Sim++
Titre: Re : Re : codes/scripts utiles
Posté par: scott1 le 07 Décembre 2010, 02:46:19
Qui à dit qu'il est interdit de modifier la valeur d'un tableau ? Sinon ça ne servirai plus à rien d'avoir des variables :p

EDIT: voila pour mettre un miniscule en majuscule


TextMinInMaj(Text[])
{
for(new i = 0; i < strlen(Text); i++)
{
if(Text[i] >= 'a' && Text[i] <= 'z')
{
   Text[i] -= 'a' - 'A';
}
}
}



Syg en avait posté un comprenant les accents et caractères spéciaux

TextMinInMaj (Text[])
{
for(new i = 0; i < strlen(Text); i++)
{
if(Text[i] >= 'a' && Text[i] <= 'z')
{
    Text[i] -= 'a' - 'A';
}
else
{
switch (Text[i])
{
case 'à', 'â' :
{
Text[i] = 'A';
}
case 'é', 'è', 'ê':
{
Text[i] = 'E';
}
case 'î' :
{
Text[i] = 'I';
}
case 'ô' :
{
Text[i] = 'O';
}
case 'ù', 'û' :
{
Text[i] = 'U';
}
case 'ç' :
{
Text[i] = 'C';
}
}
}
}
        return Text;
}
Titre: Re : codes/scripts utiles
Posté par: cristab le 12 Décembre 2010, 20:57:20
coucou

Voila sa fait un moment que je n'est pas postez un truc ici

Donc voila un truc qui sert ou pas mais je trouve que sa peu remplacer le MAX_PLAYERS qui lui va jusqu'a 500 pour rien souvent

on va inventer une define pas trop long

#define MP 10 //ici mettre le nombre de slot de votre serveur samp
ensuite dans le main

main()
{
if(MP!= GetMaxPlayers())
{
   printf("Attention la define MP a etait mal renseigner define MP %d nombre de slot serveur %d",MP,GetMaxPlayers());
   SendRconCommand("exit");
}
}
ensuite au lieu d'utiliser MAX_PLAYERS vous utiliser MP

Voila ce qui se produit si la define MP est mal renseigner


----------
Loaded log file: "server_log.txt".
----------

SA-MP Dedicated Server
----------------------
v0.3c RC2, (C)2005-2010 SA-MP Team

[20:48:29]
[20:48:29] Server Plugins
[20:48:29] --------------
[20:48:29]  Loaded 0 plugins.

[20:48:29]
[20:48:29] Ban list
[20:48:29] --------
[20:48:29]  Loaded: samp.ban
[20:48:29]
[20:48:29]
[20:48:29] Filter Scripts
[20:48:29] ---------------
[20:48:29]   Loading filter script 'gl_realtime.amx'...
[20:48:29]   Loading filter script 'Cadmin.amx'...
[20:48:29]
--------------------------------------
[20:48:29]  Cadmin [FS]by Cristab
[20:48:29] --------------------------------------

[20:48:29]   Loading filter script 'fsdebug.amx'...
[20:48:29]
  *********************
  * SA:MP DEBUG 0.2   *
[20:48:29]   * By Simon Campbell *
  *********************
[20:48:29]   * Version: 0.5c      *
  *********************
[20:48:29]   * -- LOADED         *
  *********************

[20:48:29]   Loaded 3 filter scripts.

[20:48:29] Attention la define MP a etait mal renseigner define MP 10 nombre de slot serveur 50
[20:48:29]
----------------------------------
[20:48:29]  +++++++++++++++++++
[20:48:29] ----------------------------------

[20:48:29] Number of vehicle models: 0
[20:48:29] --- Server Shutting Down.
[20:48:29]
  *********************
  * SA:MP DEBUG 0.2   *
[20:48:29]   * -- SHUTDOWN      *
Titre: Re : codes/scripts utiles
Posté par: S!m le 12 Décembre 2010, 21:22:05
Salut,

pas mal l'idée cristab^^

Toutefois, ce serait mieux de faire:

#undef MAX_PLAYERS
#define MAX_PLAYERS 100

...
public On(FilterScript/GameMode)Init()
{
if(MAX_PLAYER < GetMaxPlayers())
{
    printf("Attention la define SLOTS est trop basse, erreur critique. (define: %d nombre de slot serveur: %d)",MAX_PLAYERS,GetMaxPlayers());
    SendRconCommand("exit");
}
...
return 1;
}
...

de cette façon même pas besoin de changer le define et le script tolère une valeur trop grande (qui peut toujours être acceptée).
Il ne fait que protéger de problèmes vitaux, pas d'utilisation de mémoire inutile (je trouve ça un peu moins ennuyant car parfois on vas jouer sur le nombre de slot et s'il faut tout recompiler c'est embêtant).

++Sim++
Titre: Re : codes/scripts utiles
Posté par: cristab le 12 Décembre 2010, 21:23:53
j'avais tester ceci mais pour une raison que j'ignire mon compilot plante va comprendre  :(
Titre: Re : codes/scripts utiles
Posté par: S!m le 12 Décembre 2010, 21:53:24
Salut,

Je ne vois pas trop pourquoi vous vous prenez la tête...

Code: (pawn) [Sélectionner]
#undef MAX_PLAYERS
#define MAX_PLAYERS GetMaxPlayers()

Ne serait-il pas plus simple ?
(Je n'ai pas de compilateur sous la main pour vérifier et ça fait pas mal de temps que j'ai pas touché au Pawn, donc il se pourrait que je me trompe).

Comme GetMaxPlayers() est une fonction, elle est appelé en cours d'exécution du serveur. bref, on ne peut s'en servir pour les tailles de variables et c'est un peu plus lent (par exemple avec une boucle).

++Sim++
Titre: Re : codes/scripts utiles
Posté par: cristab le 12 Décembre 2010, 22:17:04
sa plante aussi le compilot je vient de tester ^^
Titre: Re : codes/scripts utiles
Posté par: Xartrick le 13 Décembre 2010, 07:30:29
Citation de: Gzsume
Bah dans ce cas pourquoi ne pas placer mes deux lignes dans la callback OnGameModeInit ?

Car, si je ne dis pas de bêtise, que la variable (constante ?) ne sera plus générale mais interne à ton callback.
Titre: Re : codes/scripts utiles
Posté par: Ssk le 14 Décembre 2010, 17:47:23
Peut-être que c'est hors sujet, mais il y a quelque temps j'avais codé une fonction pour permettre de savoir si un véhicule existe en jeu car il n'y en avais pas, mais en cherchant un peu dans les fichiers du serveur SAMP, j'ai trouvé une fonction qui se nomme


IsValidVehicle( vehicleid )
pour que vous puissiez l'utiliser ajoutez native IsValidVehicle( vehicleid ); dans votre script
Titre: Re : codes/scripts utiles
Posté par: cristab le 14 Décembre 2010, 19:52:39
Oo il y aurait des fonction non citer tu pense qu'il y en aurais d'autre?
Titre: Re : codes/scripts utiles
Posté par: Ssk le 14 Décembre 2010, 20:01:13
bof je connais pas toute les fonctions, mais si vous voulez je peut vous donner toutes les fonctions qui sont dans le serveurs sans les arguments.
Titre: Re : codes/scripts utiles
Posté par: cristab le 14 Décembre 2010, 20:23:13
comme tu le sens ^^ peu etre quelque fonction ne sont pas dans le wiki ^^
Titre: Re : codes/scripts utiles
Posté par: anthony_54 le 16 Décembre 2010, 11:53:27
Code: (pawn) [Sélectionner]
public OnPlayerDeath(playerid, killerid, reason)
{
    SendClientMessage(killerid,COLOR_YELLOW, "Tu la tuer 1 point + 1000 $ GG !!");
    GivePlayerMoney(killerid,1000);
    SetPlayerScore(killerid,GetPlayerScore(killerid)+1);
    SendClientMessage(playerid,COLOR_BLACK, "Tes mort tu à perdu 500 $ xD");
    GivePlayerMoney(playerid,-500);
    if(killerid == INVALID_PLAYER_ID)
    {
    SendDeathMessage(INVALID_PLAYER_ID,playerid,reason);
    }
     else
    {
    SendDeathMessage(killerid,playerid,reason);
    }
    return 1;
 }

Un petit code pour les kills
Un kill = 1 point + 1000$
si tu meurt -500$

Jesper que personne la déjà mi

Cordialement Anthony_54
Titre: Re : codes/scripts utiles
Posté par: Xartrick le 16 Décembre 2010, 16:17:37
Anthony_54, cela sert à quoi d'envoyer un message à un joueur invalide ?
Titre: Re : codes/scripts utiles
Posté par: anthony_54 le 16 Décembre 2010, 17:21:22
Bonsoir =)

Comment sa Oo ?
Y'a une erreurs dans le scripts ?
Ou un truc inutile ?


Cordialement Anthony_54
Titre: Re : codes/scripts utiles
Posté par: Pixect le 16 Décembre 2010, 17:31:21
Salut,

Quand il parle d'ID invalide, il parle de si le joueur s'est suicidé, ou pas.
Je te refais :

Code: (PAWN) [Sélectionner]
public OnPlayerDeath(playerid, killerid, reason)
{
    if(killerid != INVALID_PLAYER_ID)
    {
            SendClientMessage(killerid,COLOR_YELLOW, "Tu la tuer 1 point + 1000 $ GG !!");
    GivePlayerMoney(killerid,1000);
    SetPlayerScore(killerid,GetPlayerScore(killerid)+1);
    SendClientMessage(playerid,COLOR_BLACK, "Tes mort tu à perdu 500 $ xD");
    GivePlayerMoney(playerid,-500);
    SendDeathMessage(killerid, playerid, reason);
    }
    return 1;
}

EDIT: Excuse la mauvaise indentation, mais le C/C ne copie colle pas correctement.
Titre: Re : codes/scripts utiles
Posté par: Xartrick le 16 Décembre 2010, 17:53:41
Ici, tu vérifie seulement le tueur et non le tué.

if(IsPlayerConnected(playerid) && IsPlayerConnected(killerid))
{
SendClientMessage(killerid, 0xFFFFFFFF, "Tu as tué une personne: +1 point & +1000$");
GivePlayerMoney(killerid, 1000);
SetPlayerScore(killerid, (GetPlayerScore(killerid) + 1));

SendClientMessage(playerid, 0xFFFFFFFF, "Tu as été tué: -1 point & -500$");
GivePlayerMoney(playerid, -500);
SetPlayerScore(killerid, (GetPlayerScore(killerid) - 1));
}
Code fait rapidement sur le forum.

Je préfère comme ceci.
Titre: Re : codes/scripts utiles
Posté par: Pixect le 16 Décembre 2010, 18:11:29
Salut,

Personnellement, lorsqu'un joueur meurt, c'est qu'il est connecté pour moi. ^^
Mais sinon nos codes sont à peu près pareils.

++
Lloyd
Titre: Re : codes/scripts utiles
Posté par: Xartrick le 16 Décembre 2010, 18:26:42
Le tueur également alors, une vérification doit quand même être faite pour n'oublier aucun cas !
Titre: Re : codes/scripts utiles
Posté par: S!m le 16 Décembre 2010, 20:03:15
Salut,

personnellement je fais comme ceci:

public OnPlayerDeath(playerid, killerid, reason)
{
SendDeathMessage(killerid, playerid, reason);
if(killerid != INVALID_PLAYER_ID)
{
GivePlayerMoney(killerid, 1000);
SetPlayerScore(killerid, GetPlayerScore(killerid)+1);
}
GivePlayerMoney(playerid, -500);
return 1;
 }

Je ne voit pas l'intérêt d'un message, la personne le sait forcément comme elle est morte où vient d'éliminer l'autre...
Je ne crois pas que les suicides doivent être gratuits non plus, mourir c'est mourir, peu importe la façon dont on meure.

ps. Anthony, quand tu publie un tel code, essaie de le faire propre (J'entends ici des phrases bien formulées, un code assez optimisé et qui fonctionne exactement de la façon dont on le voudrait).

++Sim++
Titre: Re : codes/scripts utiles
Posté par: anthony_54 le 16 Décembre 2010, 21:50:27
Ok désolé.
Merci pour vos infos
au revoir ;).

Cordialement_54
Titre: Re : codes/scripts utiles
Posté par: Boomerkuigi le 30 Décembre 2010, 13:10:47
Je sais pas si elle a deja ete postée , je tente
Pour savoir quel joueur conduit une voiture en particulier
forward GetVehicleDriverPlayerID(vehicleid);

public GetVehicleDriverPlayerID(vehicleid)
{
       for(new i=0; i<MAX_PLAYERS; i++)
       {
               if(IsPlayerInVehicle(i, vehicleid) && GetPlayerState(i) == PLAYER_STATE_DRIVER) return i;
       }
       return INVALID_PLAYER_ID;
}

Titre: Re : codes/scripts utiles
Posté par: jonjon le 30 Décembre 2010, 14:20:36
Salut à tous, voici une petite commande que je viens de faire, elle permet avec la commande /plaque 1 - 9 de mettre une plaque de couleur à notre nom sur notre véhicule, la voici :

// A placer tout en haut du FS/GM
#define COLOR_YELLOW 0xFFFF00AA
#define COLOR_RED 0xFF0606FF

// A placer en haut de OnPlayerCommandText
new cmd[256],tmp[256];
new playername[MAX_PLAYER_NAME];
cmd = strtok(cmdtext, idx);

// A placer dans OnPlayerCommandText
  if(strcmp(cmd, "/plaque", true) == 0)
{
   if(!IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid,COLOR_RED,"ERREUR: Vous n'êtes pas dans un véhicule.");
   tmp = strtok(cmdtext, idx);
   if(!strlen(tmp))
   {

     SendClientMessage(playerid,COLOR_RED,"ERREUR: Vous devez écrire : /plaque 1 - 9");
}
else
{
       new Float:vx, Float:vy, Float:vz, Float:va;
    new veh = GetPlayerVehicleID(playerid);
new CarColor[MAX_PLAYERS];
new SelectColor = strval(tmp);
new retour[256];
  if(SelectColor == 1)
  {
               CarColor = "{38FF06}";
               SendClientMessage(playerid,COLOR_YELLOW,"Vous avez crée une plaque {38FF06}verte {FFFF00}sur votre véhicule.");
}
else if(SelectColor == 2)
{
CarColor = "{FF66FF}";
SendClientMessage(playerid,COLOR_YELLOW,"Vous avez crée une plaque {FF66FF}rose {FFFF00}sur votre véhicule.");
}
else if(SelectColor == 3)
{
CarColor = "{FF9900}";
SendClientMessage(playerid,COLOR_YELLOW,"Vous avez crée une plaque {FF9900}orange {FFFF00}sur votre véhicule.");
}
else if(SelectColor == 4)
{
CarColor = "{FF0606}";
SendClientMessage(playerid,COLOR_YELLOW,"Vous avez crée une plaque {FF0606}rouge {FFFF00}sur votre véhicule.");
}
else if(SelectColor == 5)
{
CarColor = "{FFFF00}";
SendClientMessage(playerid,COLOR_YELLOW,"Vous avez crée une plaque jaune sur votre véhicule.");
}
else if(SelectColor == 6)
{
CarColor = "{0000BB}";
SendClientMessage(playerid,COLOR_YELLOW,"Vous avez crée une plaque {0000BB}bleue {FFFF00}sur votre véhicule.");
}
else if(SelectColor == 7)
{
CarColor = "{FFFFFF}";
SendClientMessage(playerid,COLOR_YELLOW,"Vous avez crée une plaque {FFFFFF}blanche {FFFF00}sur votre véhicule.");
}
else if(SelectColor == 8)
{
CarColor = "{330066}";
SendClientMessage(playerid,COLOR_YELLOW,"Vous avez crée une plaque {330066}violette {FFFF00}sur votre véhicule.");
}
else if(SelectColor == 9)
{
CarColor = "{000000}";
SendClientMessage(playerid,COLOR_YELLOW,"Vous avez crée une plaque {000000}noire {FFFF00}sur votre véhicule.");
}
else
{
SendClientMessage(playerid,COLOR_RED,"ERREUR: Vous devez choisir un chiffre de 1 à 9 (/plaque 1 - 9)");
}
    GetVehiclePos(veh, vx, vy, vz);
    GetVehicleZAngle(veh,va);
    GetPlayerName(playerid, playername, sizeof(playername));
    format(retour, sizeof(retour), "%s%s",CarColor,playername);
    SetVehicleNumberPlate(veh,retour);
    SetVehicleToRespawn(veh);
    SetVehiclePos(veh, vx, vy, vz);
    SetVehicleZAngle(veh, va);
  PutPlayerInVehicle(playerid, veh, 0);
}
return 1;
}

// By Metra-Concept.fr (jonjon) for Gtaonline


Amusez-vous bien !


Cordialement, MK.

Ps: désolé pour l'indentation, le forum l'a modifié
Titre: Re : codes/scripts utiles
Posté par: cristab le 03 Janvier 2011, 08:36:00
Bonjour je vous presente une petite fonction qui devrais vous aider pas trop mal ^^

SendFormattedText(option1,couleur,text[],option2)
{
    new string[128];
    format(string,sizeof(string),text,option2);
    SendClientMessage(option1,couleur,string);
}

option1 = playerid ou autre
couleur = pas besoin de dire ce que c'est
text = le text a formater
option2 = le reste que vous mettez dans votre format

exemple

a=1;
b=2;

SendFormattedText(playerid,0xFFFFFFAA,"%d + %d = %d",a,b,a+b);
Titre: Re : codes/scripts utiles
Posté par: cristab le 03 Janvier 2011, 16:28:22
meme pas vu il faut dire je telecharge pas tout les FS ^^
Titre: Re : Re : codes/scripts utiles
Posté par: Ssk le 03 Janvier 2011, 18:05:34
Bonjour je vous presente une petite fonction qui devrais vous aider pas trop mal ^^

SendFormattedText(option1,couleur,text[],option2)
{
    new string[128];
    format(string,sizeof(string),text,option2);
    SendClientMessage(option1,couleur,string);
}

option1 = playerid ou autre
couleur = pas besoin de dire ce que c'est
text = le text a formater
option2 = le reste que vous mettez dans votre format

exemple

a=1;
b=2;

SendFormattedText(playerid,0xFFFFFFAA,"%d + %d = %d",a,b,a+b);

Je comprend pas pourquoi tu met les arguments infinis dans une seule variable, tu peut m'expliquer s'il te plait ?
Titre: Re : codes/scripts utiles
Posté par: cristab le 03 Janvier 2011, 18:16:49
je vais paraitre un peu blonde mais en therme moin technique c'est a dire (puis crotte t'as vu l'heure 18h16 je suis KO xD)
Titre: Re : codes/scripts utiles
Posté par: cristab le 03 Janvier 2011, 18:34:56
car j'ai pas besoin de plus personnelement mais je vient de trouver

http://forum.sa-mp.com/showthread.php?t=38965&page=148 (http://forum.sa-mp.com/showthread.php?t=38965&page=148)



je me permet d'editer pour proposer une petite astuce bien sympas j'espere et qui aideras pas mal de monde

dans vos declaration de variable ajouter c'est deux la
new initialname[MAX_PLAYERS][MAX_PLAYER_NAME];
new playerfinal[32];//32 pris au hazard mais sa ne bug pas avec plus il y a des chance que sa bug

en bas de votre script

SetInitialname(playerid)
{
SetPlayerName(playerid,initialname[playerid]);
}
SetBeforName(tag[],playerid)
{
format(playerfinal, 32, "%s%s",tag, initialname[playerid]);
SetPlayerName(playerid, playerfinal);
}
SetAfterName(tag[],playerid)
{
format(playerfinal, 32, "%s%s", initialname[playerid],tag);
SetPlayerName(playerid, playerfinal);
}

dans le onplayerconnect
GetPlayerName(playerid, initialname[playerid], MAX_PLAYER_NAME);
par exemple dans votre commande /dm vous l'utiliser comme ceci SetBeforName("[DM]",playerid);

sinon voila 3 commande pour tester

public OnPlayerCommandText(playerid, cmdtext[])
{
if (strcmp("/reset", cmdtext, true) == 0)
{
SetInitialname(playerid);
return 1;
}
    if (strcmp("/after", cmdtext, true) == 0)
{
SetAfterName("[dm1]",playerid);
return 1;
}
if (strcmp("/befor", cmdtext, true) == 0)
{
SetBeforName("[dm1]",playerid);
return 1;
}
return 0;
}
Titre: Re : codes/scripts utiles
Posté par: Ssk le 04 Janvier 2011, 18:14:48
Pas mal Cristab ^^
Titre: Re : codes/scripts utiles
Posté par: cristab le 17 Janvier 2011, 21:03:07
Bonsoir

Voila une petite fonction que j'avait faite un moment il necessite l'utilisation de l'include dutils

Code: (pawn) [Sélectionner]
stock Encode(mot[])
{
new Long=strlen(mot);
    new passe1 = 0;
    new passe2 = 1;
    new passe3 = -1;
    for (new n=0; n<Long; n++)
    {
       passe1 = (passe1 + (mot[n]*99887766/8));
       passe2 = (passe2 / (passe1*99887766)/15);
       passe3 = (passe3+(passe2 - passe1))*Long;
    }
    new encrypt;
    encrypt = (((passe2*52) + (passe3*3))*(passe1*Long))*(Long*passe3)*526;
    new tmp[256];
    new s[128];
    format(s, sizeof(s), "%d", encrypt);
  set(tmp,s);
tmp=strreplace("1","=",tmp);
  tmp=strreplace("2","!",tmp);
  tmp=strreplace("3",";",tmp);
  tmp=strreplace("4","@",tmp);
  tmp=strreplace("5","#",tmp);
  tmp=strreplace("6","+",tmp);
  tmp=strreplace("7","*",tmp);
  tmp=strreplace("8","'",tmp);
  tmp=strreplace("9",".",tmp);
  tmp=strreplace("0","°",tmp);
  tmp=strreplace("-","§",tmp);
    return tmp;
}

si on fait un test

printf("%s",Encode("soleil"));
sa donne ceci  §=.++@°@!!@
voila

une escuse pour voir un peu plus de code sympathique de la part des membres :)
Titre: Re : codes/scripts utiles
Posté par: nivi le 19 Janvier 2011, 18:34:23
Commande fausse, je vais ajouté d'autres aprés.
Titre: Re : codes/scripts utiles
Posté par: Xartrick le 19 Janvier 2011, 18:58:02
C'est un peu léger comme fonction.
Titre: Re : codes/scripts utiles
Posté par: spiirou le 23 Janvier 2011, 10:36:09
C'est un peu faux comme fonctions.
Titre: Re : codes/scripts utiles
Posté par: Ssk le 23 Janvier 2011, 13:05:03
Ta commande /reparer est faussé, l'erreur est dans le SendClientMessageToAll
Titre: Re : codes/scripts utiles
Posté par: Xartrick le 23 Janvier 2011, 18:20:54
Fonction:

enum
{
X_MONEY_ADD,
X_MONEY_DELETE,
X_MONEY_SET
}

stock xMoneyAction(action, amount, playerid)
{
if(action == X_MONEY_ADD)
{
GivePlayerMoney(playerid, amount);
}
else if(action == X_MONEY_DELETE)
{
new tmp = 0;

tmp = GetPlayerMoney(playerid);

if((tmp - amount) > 0)
{
GivePlayerMoney(playerid, -amount);
}
else
{
return 0;
}
}
else if(action == X_MONEY_SET)
{
ResetPlayerMoney(playerid);
GivePlayerMoney(playerid, amount);
}

return 1;
}

Usage:

xMoneyAction(X_MONEY_ADD, 100, 1); // Ajoute 100$ au joueur qui possède l'ID numéro 1
xMoneyAction(X_MONEY_DELETE, 100, 1); // Retire 100$ au joueur (si possible (non négatif)) qui possède l'ID numéro 1 sinon retourne 0 (erreur)
xMoneyAction(X_MONEY_SET, 100, 1); // Met l'argent du joueur à 100$ au joueur qui possède l'ID numéro 1
Titre: Re : codes/scripts utiles
Posté par: Eloctro le 19 Février 2011, 18:33:49
enum
{
X_MONEY_ADD,
X_MONEY_DELETE,
X_MONEY_SET
}
:ninja
Je pense que tu dois plutôt appliquer des defines .
Titre: Re : Re : codes/scripts utiles
Posté par: S!m le 20 Février 2011, 04:23:19
Salut,

enum
{
X_MONEY_ADD,
X_MONEY_DELETE,
X_MONEY_SET
}
:ninja
Je pense que tu dois plutôt appliquer des defines .


non, l'enum est correcte. C'est même mieux car on ne risque pas de se tromper et de mettre deux fois la même valeur.

++Sim++
Titre: Re : codes/scripts utiles
Posté par: Eloctro le 20 Février 2011, 21:59:27
Bah désolé alors je savais qu'on pouvais faire ça  :D

Pour la peine voila un Script pour savoir si le nom du Joueur est RP(Ex:"Leo_Ingrosso")
Ce script vérifie si le pseudo ne comporte pas de chiffres,si il y a des Majuscules et si y a le "_" .
new CMajusules[] = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z' };
stock IsPlayerHasValidName(playerid)//By Eloctro
{
new cName[MAX_PLAYER_NAME],CharS=-1;
        GetPlayerName(playerid, cName, MAX_PLAYER_NAME);
if(strfind(cName, "_", true) == -1) return false;
else {
for(new i; i <= strlen(cName); i++) {
if(cName[i] != '_') {
if (cName[i] <= '9' && cName[i] >= '0') return false;
if(i != 0 && i != CharS) for(new c; c < sizeof(CMajusules); c++) { if(cName[i] == CMajusules[c]) return false; }
else if(i==0) {
for(new c; c < sizeof(CMajusules); c++){ if(cName[0] == CMajusules[c]) CharS=-2; }
if(CharS!=-2) return false; } }
else CharS=i+1; } }
for(new c; c < sizeof(CMajusules); c++) if(cName[CharS] == CMajusules[c]) return true;
return false;
}

Exemple d'Utilisation :
public OnPlayerConnect(playerid)
{
if(!IsPlayerHasValidName(playerid)) Kick(playerid);
}
Titre: Re : codes/scripts utiles
Posté par: Smail_Smith le 04 Mars 2011, 14:35:28
Salut
Ouai j'avoue  ;)
Merci
Titre: Re : codes/scripts utiles
Posté par: Xartrick le 04 Mars 2011, 21:37:58
Voici une fonction pour vérifié si une IP entrée est correct.
Je l'ai condensé donc vous pourrez avoir un certain mal à lire ce code.

http://pastebin.gtaonline.fr/pastebin.php?show=1052 (http://pastebin.gtaonline.fr/pastebin.php?show=1052)
Titre: Re : codes/scripts utiles
Posté par: Gilux le 04 Mars 2011, 23:56:07
Bien pensé, je viens d'apprendre un truc sur les phrases  :)
Titre: Re : codes/scripts utiles
Posté par: Xartrick le 04 Mars 2011, 23:57:45
@Gilux: Tu parle de quelle code ?
Titre: Re : codes/scripts utiles
Posté par: Gilux le 05 Mars 2011, 00:38:16
Celui de vérification des IP.
Titre: Re : codes/scripts utiles
Posté par: Xartrick le 05 Mars 2011, 00:55:37
Qu'apprend-tu à travers ces fonctions, j'aimerais bien savoir, je suis très curieux :P.
Titre: Re : codes/scripts utiles
Posté par: Gilux le 05 Mars 2011, 00:57:51
C'est le fait de chercher dans chaque caractère :
for(i = 0; i < length; i++)

(C'est basique pourtant, mais j'en ai jamais eu besoin...  :ninja)
Titre: Re : codes/scripts utiles
Posté par: Xartrick le 05 Mars 2011, 00:59:22
C'est pourtant logique de parcourir une chaîne de caractère de cette façon.
Heureux que cela t'es aidé ;).
Titre: Re : codes/scripts utiles
Posté par: S!m le 07 Mars 2011, 16:35:06
Salut,

peut-être un petit commentaire sur ton code Xartrick:

Je crois que le test sur la nombre de points devrait être plus grand ou égal à 1, au lieu de plus grand que 1.

Concernant ta fonction IsNumeric, je ne comprend pas pourquoi effectuer une boucle.
Attention, je crois que ta fonction retourne 1 s'il ne s'agit pas d'un chiffre. Il faudrait faire l'inverse selon le nom.

De plus, je nommerais plutôt cette fonction IsCharADigit, qui est un peu plus explicite.

J'ai posté le code modifié ici: http://pastebin.gtaonline.fr/pastebin.php?show=1054 (http://pastebin.gtaonline.fr/pastebin.php?show=1054)

++Sim++
Titre: Re : codes/scripts utiles
Posté par: Ssk le 08 Mars 2011, 08:14:05
Je vous conseil de tester aussi si les nombres de l'ip ne sont pas plus grand que 255 ^^
Titre: Re : codes/scripts utiles
Posté par: Xartrick le 08 Mars 2011, 18:01:58
Citation de: Sim
Concernant ta fonction IsNumeric, je ne comprend pas pourquoi effectuer une boucle.

À la base, j'effectué une comparaison de caractère selon une chaîne, donc je fessais une boucle.
J'ai oubliai de supprimer la boucle.
Titre: Re : codes/scripts utiles
Posté par: dydy5910 le 11 Avril 2011, 14:22:49
Bonjour tout le monde déja vous m'impréssioner avec vos codes je tient a vous féliciter car la ^^
Alors voila je cherche un script qui save tout le personnage son argent son arme sa position son score sa voiture ses maisons et tout mais j'ai chercher sur google sans réponse soit le code je ne le comprend pas soit il y a des erreurs innombrables donc si vous pouvez m'aider a avoir un script comme sa sa ne serais pas de refus donnez moi un tutoriel ou autres du momment que je peut faire mon code ou si vous avez déja se code sa serais très simpa de me le donner merci beaucoup.
Bonne après midi   :happy
Cordialement Dydy :p.
Titre: Re : codes/scripts utiles
Posté par: Ssk le 24 Mai 2011, 11:25:45
Salut, en regardant un peu dans le serveur samp, je viens de découvrir que l'on ne connaissais pas un argument pour OnVehicleDeath, et une callback qui s'appel OnScriptCash.

public OnVehicleDeath (http://wiki.sa-mp.com/wiki/OnVehicleDeath)( vehicleid, killerid );
public OnScriptCash( unk, unk, unk ); Peut-être playerid, argent gagné, ancienne nombre d'argent. ( http://forum.sa-mp.com/showthread.php?t=112915 (http://forum.sa-mp.com/showthread.php?t=112915) ) ça n'as pas l'air de fonctionner.

Titre: Re : codes/scripts utiles
Posté par: anthony_54 le 24 Juillet 2011, 08:55:13
Voilà un petit codes pour un derby .
spawn avec véhicules.

Code: (pawn) [Sélectionner]
new gPlayerVehicles[MAX_PLAYERS];
new IsInDM[MAX_PLAYERS];
new initialname[MAX_PLAYERS][62];
new playerfinal[62];

////////////////////////////////////////////////////////////////////////////////

new Float:derby[7][4] =
{
{-1425.9888,957.4713,1027.6860,357.3053},
{-1478.7693,986.7899,1028.3901,280.7596},
{-1443.5608,1033.8302,1029.8827,193.7936},
{-1402.1676,1037.2571,1029.9587,179.2527},
{-1351.8804,1028.6732,1028.3414,162.3887},
{-1323.4956,979.3501,1027.8088,61.0256},
{-1361.0549,959.4532,1027.4058,25.7441}
};

////////////////////////////////////////////////////////////////////////////////

public OnPlayerSpawn(playerid)
{
if (IsInDM[playerid] != 0)
{
switch(IsInDM[playerid])
{
case 1:
{
new rand = random(sizeof(derby));
gPlayerVehicles[playerid] = CreateVehicle(503,derby[rand][0],derby[rand][1],derby[rand][2],derby[rand][3],-1,-1,900);
SetVehicleVirtualWorld(gPlayerVehicles[playerid], 15);
LinkVehicleToInterior(gPlayerVehicles[playerid], 15);
SetPlayerVirtualWorld(playerid,15);
SetPlayerInterior(playerid,15);
PutPlayerInVehicle(playerid,gPlayerVehicles[playerid],0);
SetVehicleHealth(gPlayerVehicles[playerid],1000.0);
SetVehicleParamsForPlayer(gPlayerVehicles[playerid],playerid,0,1);
}
}
}
return 1;
}

////////////////////////////////////////////////////////////////////////////////

public OnPlayerDisconnect(playerid, reason)
{
SendDeathMessage(INVALID_PLAYER_ID, playerid, 201);
if(IsInDM[playerid] != 0)
{
RemovePlayerFromVehicle(gPlayerVehicles[playerid]);
DestroyVehicle(gPlayerVehicles[playerid]);
gPlayerVehicles[playerid] = 0;
}
return 1;
}

////////////////////////////////////////////////////////////////////////////////

public OnPlayerDeath(playerid, killerid, reason)
{
RemovePlayerFromVehicle(gPlayerVehicles[playerid]);
DestroyVehicle(gPlayerVehicles[playerid]);
gPlayerVehicles[playerid] = 0;
return 1;
}
////////////////////////////////////////////////////////////////////////////////

public OnPlayerCommandText(playerid, cmdtext[])
{
if(strcmp("/derby", cmdtext, true) == 0)
{
if(IsInDM[playerid] !=0)
{
SendClientMessage(playerid, 0xFFFFFF, "Vous êtes déjà dans un DM !");
return 1;
}
new rand = random(sizeof(derby));
gPlayerVehicles[playerid] = CreateVehicle(503,derby[rand][0],derby[rand][1],derby[rand][2],derby[rand][3],-1,-1,900);
SetVehicleVirtualWorld(gPlayerVehicles[playerid], 15);
LinkVehicleToInterior(gPlayerVehicles[playerid], 15);
SetPlayerVirtualWorld(playerid,15);
SetPlayerInterior(playerid,15);
PutPlayerInVehicle(playerid,gPlayerVehicles[playerid],0);
SetVehicleHealth(gPlayerVehicles[playerid],1000.0);
SetVehicleParamsForPlayer(gPlayerVehicles[playerid],playerid,0,1);
IsInDM[playerid] = 2;
format(playerfinal, 62, "[derby]%s", initialname[playerid]);
SetPlayerName(playerid, playerfinal);
new Name[MAX_PLAYER_NAME],phrase[240];
GetPlayerName(playerid,Name,sizeof(Name));
format(phrase,sizeof(phrase),"%s est au derby {0000FF}(/derby).",Name);
SendClientMessage(playerid, couleur_bleu, "Pour quitter le deathmatch ==>{FFFF00} /dmq");
SendClientMessageToAll(couleur_orange,phrase);
return 1;
}

////////////////////////////////////////////////////////////////////////////////

if(strcmp("/dmq", cmdtext, true) == 0)
{
if(IsInDM[playerid] == 0)
{
SendClientMessage(playerid, 0xFFFFFF, "Vous n'êtes pas dans un DM !");
return 1;
}
if(IsInDM[playerid] != 0)
{
RemovePlayerFromVehicle(gPlayerVehicles[playerid]);
DestroyVehicle(gPlayerVehicles[playerid]);
gPlayerVehicles[playerid] = 0;
}
IsInDM[playerid] = 0;
SetPlayerInterior(playerid,0);
SetPlayerVirtualWorld(playerid, 0);
SetPlayerPos(playerid,-516.7958,2541.3340,53.5156);
SetPlayerFacingAngle(playerid,221.976);
SetPlayerName(playerid, initialname[playerid]);
new Name[MAX_PLAYER_NAME],phrase[240];
GetPlayerName(playerid,Name,sizeof(Name));
format(phrase,sizeof(phrase)," %s viens de quitter le DM {FFFF00}(/dmq).",Name);
SendClientMessageToAll(couleur_rouge,phrase);
return 1;
}

Voilà c'est pas grand choses mais bon ;)

Cordialement Anthony_54
Titre: Re : codes/scripts utiles
Posté par: cristab le 24 Juillet 2011, 09:55:07
pourquoi ne pas avoir fait sa en FS car ce n'est pas un code mais un script
Titre: Re : codes/scripts utiles
Posté par: Xartrick le 24 Juillet 2011, 11:35:09
J'ai voulus réécrire la fonction de Eloctro que je trouvais pas très esthétique :P, et voilà le résultat.

http://pastebin.gtaonline.fr/pastebin.php?show=1140 (http://pastebin.gtaonline.fr/pastebin.php?show=1140)

Et voici la forme attendu:


[MAJUSCULE][minuscules]_[MAJUSCULE][minuscules]
Titre: Re : codes/scripts utiles
Posté par: Eloctro le 24 Juillet 2011, 11:59:13
Effectivement elle est mieux :)
Je savais que je pouvais éviter les boucles mais je n'ai jamais mis à jours par flemme X)

En tout cas merci je vais changer celle de mon RP par celle-ci :)
Titre: Re : codes/scripts utiles
Posté par: Xartrick le 28 Juillet 2011, 07:19:14
Mon code étant faux, on peut faire toujours mieux :P, merci à toi me l'avoir remontré, j'ai corrigé la fonction, mais elle est toujours aussi longue.
Je m'étais amusé avec un ami à rendre un code le plus petit possible, c'était assez enrichissant.


#include <a_samp>

forward _AddAllPlayerClass(Float:fX, Float:fY, Float:fZ, Float:fAngle);

public _AddAllPlayerClass(Float:fX, Float:fY, Float:fZ, Float:fAngle)
{
new iBadSkin[16] = {3, 4, 5, 6, 8, 42, 53, 65, 74, 86, 91, 119, 149, 208, 273, 289};

for(new i = 0; i <= 299; i++)
{
for(new i2 = 0; i2 <= sizeof(iBadSkin); i2++)
{
if (i != iBadSkin[i2])
{
AddPlayerClass(i, Float:fX, Float:fY, Float:fZ, Float:fAngle, 0, 0, 0, 0, 0, 0);
}
}
}
}
Titre: Re : codes/scripts utiles
Posté par: Xolokos le 28 Juillet 2011, 14:06:42
Il suffit juste d'enlevé l'identation pour avoir 1 - 2 - 3 ligne(s) je me suis fait ça :

Code: (pawn) [Sélectionner]
{
new Nom[MAX_PLAYER_NAME]; GetPlayerName(playerid, Nom, sizeof(Nom));for(new i=0; i<256; i++){if( strfind(Nom[i], "Xolokos", true ) == 0){SendClientMessage(playerid,GRIS,"[Bienvenue à toi.]");printf("[XOLOKOS est là.]");} else {SendClientMessage(playerid,GRIS,"[La commande demandée est inconnue [/aide]]");}}
return 1;
}

La ça ce vois pas mais ça fait 5 lignes.
Titre: Re : codes/scripts utiles
Posté par: cristab le 28 Juillet 2011, 14:20:35
pourquoi ne pas avoir utiliser strcmp ???
Titre: Re : codes/scripts utiles
Posté par: Xolokos le 28 Juillet 2011, 16:51:42
Tu a raison mais pour avoir Xolokos qui ce suis...
Enfin dans le moins de ligne possible dans le sens optimisé.
Titre: Re : codes/scripts utiles
Posté par: cristab le 28 Juillet 2011, 18:08:50
en optimiser c'est
new Nom[MAX_PLAYER_NAME];
GetPlayerName(playerid, Nom, sizeof(Nom));
if(strcmp(Nom[playerid],"Xolokos",false) == 0)
{
   SendClientMessage(playerid,GRIS,"[La commande demandée est inconnue [/aide]]");
}
else
{
   La commande
}

et voila une boucle inutile en moin est pas de possibilité de passer a travers ta verification
Titre: Re : codes/scripts utiles
Posté par: Xartrick le 28 Juillet 2011, 20:37:58
new Nom[MAX_PLAYER_NAME];

GetPlayerName(playerid, Nom, sizeof(Nom));

if(!strcmp(Nom[playerid],"Xolokos",false))
{
    SendClientMessage(playerid,GRIS,"[La commande demandée est inconnue [/aide]]");
}
else
{
    //La commande
}

Code un peu raccourci :p
Titre: Re : codes/scripts utiles
Posté par: Xartrick le 02 Août 2011, 15:17:37
Ceci n'est pas du Pawn mais du Python.
J'ai fait ce petit code pour récupérer la liste de tous les skins manquant.
Programmé avec Python 2.7.2


http://pastebin.gtaonline.fr/pastebin.php?show=1145 (http://pastebin.gtaonline.fr/pastebin.php?show=1145)

Ce qui donne ...

SkinID 0 to 300 without ...
SkinID 3
SkinID 4
SkinID 5
SkinID 6
SkinID 8
SkinID 42
SkinID 53
SkinID 65
SkinID 74
SkinID 86
SkinID 91
SkinID 119
SkinID 149
SkinID 208
SkinID 273
SkinID 289



Voici un autre code basé sur celui du haut qui permet de récupérer toutes les images des skins.
C'est encore une fois du Python.

http://pastebin.gtaonline.fr/pastebin.php?show=1144 (http://pastebin.gtaonline.fr/pastebin.php?show=1144)

Et ce qui donne ...

http://img88.imageshack.us/img88/8035/resulty.png (http://img88.imageshack.us/img88/8035/resulty.png)
Titre: Re : codes/scripts utiles
Posté par: cristab le 04 Août 2011, 12:49:51
sa ma l'air sympas le Python est ce complexe et est ce limiter?
Titre: Re : codes/scripts utiles
Posté par: Xartrick le 04 Août 2011, 15:33:31
C'est simple, mais un peu limité.
Titre: Re : codes/scripts utiles
Posté par: guyv le 08 Août 2011, 12:27:13
Bonjour quelqu'un pourrait m'aidez please . Je voudrait savoir comment on rajoute des skin a l'entreé de son serveur dm ? .
Titre: Re : codes/scripts utiles
Posté par: D4MI3N le 08 Août 2011, 12:33:35
Tu te poste pas dans la bonne partie poste dans Problème , Soucis , Beug et on n'y répondra . Et apronfondie ta demande
Titre: Re : codes/scripts utiles
Posté par: Ssk le 08 Août 2011, 13:44:44
Bonjour quelqu'un pourrait m'aidez please . Je voudrait savoir comment on rajoute des skin a l'entreé de son serveur dm ? .

Je tiens aussi a préciser que les demandes d'aide dans ce topic ne sont pas les bienvenues, veuillez les poster ici (http://www.gtaonline.fr/forums/index.php/board,41.0.html).
Titre: Re : Re : codes/scripts utiles
Posté par: Armans le 13 Août 2011, 02:21:30
Bonjour quelqu'un pourrait m'aidez please . Je voudrait savoir comment on rajoute des skin a l'entreé de son serveur dm ? .

s'est tout simple rajoute une autre classe avec le skin de ton skin demander.
Titre: Re : codes/scripts utiles
Posté par: Infu le 04 Octobre 2011, 23:59:35
Petit ClearChat, qui ne prend pas beaucoup de place. (par moi)
Code: (php) [Sélectionner]
<?php // ne pas mettre ceci !!!
        
new cc;
if(strcmp(cmdtext"/cc"true) == 0)
{
    while(cc 200)
{
    SendClientMessage(playerid,0xFFFFFFFF,"              ");
    cc++;
}
}
Titre: Re : codes/scripts utiles
Posté par: S!m le 05 Octobre 2011, 00:40:38
Salut,

tu devrais mettre la variable cc dans la commande et non pas à l'extérieur.
Ça évitera qu'elle soit créée inutilement quand le joueur tape une autre commande que celle-ci.

++Sim++
Titre: Re : codes/scripts utiles
Posté par: Ssk le 05 Octobre 2011, 07:54:31
Le top c'est de le faire comme ça


if( strcmp( cmdtext, "/cc", true ) == 0 )
{
for( new i = 0; i < 100; i++ )
SendClientMessageToAll( -1, "" );
return 1;
}

j'envoie que 100 lignes car c'est le nombre de ligne dans la chatbox SA-MP, et j'envoie aucun texte pour éviter que ça envoie des données inutiles.
Titre: Re : codes/scripts utiles
Posté par: Infu le 05 Octobre 2011, 11:00:11
Je le saurais pour la prochaine fois :) .
Titre: Re : Re : codes/scripts utiles
Posté par: Este le 12 Octobre 2011, 11:01:44
la derniere fois j'ai utilisé while sa faisait planter le serv lol

Laisse moi deviné c'est sur mon serveur ? :rire:
La commandes faisait crasher sévère ^^

++
Titre: Re : codes/scripts utiles
Posté par: S!m le 12 Octobre 2011, 14:33:53
Salut,

aucun boucle n'est meilleure qu'une autre.

C'est plutôt... que chacune a des particularité différente et s'emploie mieux dans certains cas.

Par exemple, pour lire un fichier au complet, rien de mieux qu'un while (alors qu'un for ce serait plutôt difficile, mais faisable).
Pour une factorielle, on peut utiliser plein de méthode:

for:
Factorielle(nombre)
{
    new value = 1;
    if(nombre < 0)
        value = 0xffffffff;//c'est bien NaN si ma mémoire est bonne?
    else
        for(new i = 2; i <= nombre; i++)
        {
            value *= i;
        }
    return value;
}

while:
Factorielle(nombre)
{
    new value = 1, i = 2;
    if(nombre < 0)
        value = 0xffffffff;//c'est bien NaN si ma mémoire est bonne?
    else
        while(i <= nombre)
        {
            value *= i;
            i++;
        }
    return value;
}

Par récursivité (autre forme de boucle souvent négligé):
Factorielle(nombre)
{
    if(nombre < 0)
        return 0xffffffff;//c'est bien NaN si ma mémoire est bonne?
    else if(nombre < 2)
        return 1;
    else
     return nombre * Factorielle(nombre-1);
}

enfin, c'est qu'un exemple...

ps. désolé d'avoir raccourci les trucs un peu, jsuis devenu paresseux...
ps2. désolé pour les multiples retours, mais c'est accepté dans ce genre de cas (enfin selon mon prof de l’an passé...)

++Sim++
Titre: Re : codes/scripts utiles
Posté par: Sunaxx le 30 Octobre 2011, 23:46:13
Un FS/Addon fait en 3 minute qui permet d'acheter des armes :
if (strcmp("/pack", cmdtext, true, 10) == 0)
{
       SendClientMessage(playerid,COLOR_A1,"/pack gun [numero de 1 à 5] ");
       SendClientMessage(playerid,COLOR_A4,"_____________________________| Pack Gun |___________________________");
       SendClientMessage(playerid,COLOR_A1,"1.  Pack Pistolet           | Prix : 1750$                            ");
       SendClientMessage(playerid,COLOR_A1,"2. Pack Gilet              | Prix : 3000$ ");
       SendClientMessage(playerid,COLOR_A1,"3. Pack M4                 | Prix : 10000$                         ");
       SendClientMessage(playerid,COLOR_A1,"4. Pack Vie/Gilet          | Prix : 5000$                                 ");
       SendClientMessage(playerid,COLOR_A1,"5. SANS NOMS             | Prix : 50000$ ");
       SendClientMessage(playerid,COLOR_A1,"____________________________________________________________________");
   return 1;
}
if (strcmp("/pack gun 1", cmdtext, true, 10) == 0)
{
   if(moneys > 1750)
   {
       SendClientMessage(playerid,COLOR_A1,"¤|- Pack 1 : Achetée !  -|¤ ");
       GivePlayerWeapon(playerid, 22, 32);
       GivePlayerWeapon(playerid, 3, 1);
       GivePlayerWeapon(playerid, 28, 25);
       GivePlayerMoney(playerid, -1750);
       }
       if(moneys < 1750)
   {
       SendClientMessage(playerid,COLOR_E1,"[Serveur] : Erreur 2, vous n'avez pas l'argent suffisant. ");
       }
   return 1;
}
if (strcmp("/pack gun 2", cmdtext, true, 10) == 0)
{
       if(moneys > 3000)
   {
       SendClientMessage(playerid,COLOR_A1,"¤|- Pack 2 : Achetée !  -|¤ ");
   SetPlayerArmour(playerid,103);
   GivePlayerMoney(playerid, -3000);
   }
   if(moneys < 3000)
   {
       SendClientMessage(playerid,COLOR_E1,"[Serveur] : Erreur 2, vous n'avez pas l'argent suffisant. ");
       }
   return 1;
}
if (strcmp("/pack gun 3", cmdtext, true, 10) == 0)
{
       if(moneys > 10000)
   {
       SendClientMessage(playerid,COLOR_A1,"¤|- Pack 3 : Achetée !  -|¤ ");
       GivePlayerWeapon(playerid, 31, 400);
       GivePlayerMoney(playerid, 10000);
       }
       if(moneys < 10000)
   {
       SendClientMessage(playerid,COLOR_E1,"[Serveur] : Erreur 2, vous n'avez pas l'argent suffisant. ");
       }
   return 1;
}
Titre: Re : codes/scripts utiles
Posté par: spiirou le 31 Octobre 2011, 10:39:05
Sunaxx,

1- ton code sort d'un GM ou FS mais ne peut pas s’exécuter seul.
2- la variable argent sort de nul part
3- le code est indenté avec les pieds
4- il faudrait utiliser if .. else pour les conditions d'argent, et non if(y > x) .. if(y < x)
5- dans le pack 3 on donne 10 000$ au lieu de les retirer
6- il n'y a pas de commande pour le pack 4, ni le 5
7- le pack 5 n'est pas de nom, mais a quand même une faute dedans

il y a peut être d'autres erreurs mais je n'ai pas envie d'indenter un code qui n'est pas propre

pour finir, si ce code est vraiment de toi et que tu veux des explications,
poste dans la section appropriée et on te répondra
Titre: Re : codes/scripts utiles
Posté par: mehdi-jumper le 31 Octobre 2011, 22:32:05
Code fait en 3 min? Le but est d'aller le plus vite??? Perso si tu l'as fait en 1h ou 2 secondes c'est la qualité qui compte pas la rapidité...
Titre: Re : codes/scripts utiles
Posté par: spiirou le 01 Novembre 2011, 10:53:38
En l'occurence la qualité n'est pas la, revenons au sujet :)
Titre: Re : codes/scripts utiles
Posté par: Xartrick le 23 Novembre 2011, 21:43:55
Le code suivant permet de récupérer l'indice d'un joueur en fonction de son pseudo.

stock _GetPlayerIndexByName(sUsername[])
{
    new i = 0,
        sUser[MAX_PLAYER_NAME];
    
    for (i = 0; i < MAX_PLAYERS; i++)
        if (IsPlayerConnected(i))
        {
            GetPlayerName(i, sUser, sizeof(sUser));
            
            if (strcmp(sUsername, sUser) == 0)
                return i;
        }
    
    return -1;
}
Titre: Re : codes/scripts utiles
Posté par: Ssk le 23 Novembre 2011, 21:46:55
Tu as oublié deux accolades pour la boucle, sinon le code est bon.
Titre: Re : codes/scripts utiles
Posté par: Ssk le 24 Novembre 2011, 07:47:04
Ce n'est pas une fonction native, donc il faut la recoder ou prendre celle qu'il propose sur le wiki.
Titre: Re : codes/scripts utiles
Posté par: Xartrick le 24 Novembre 2011, 17:22:57
Citation de: Ssk
Tu as oublié deux accolades pour la boucle, sinon le code est bon.

Je ne l'ai aucunement oublié, il est facultatif quand seulement une seule instruction est utilisé dans le bloc.
Titre: Re : codes/scripts utiles
Posté par: Ssk le 24 Novembre 2011, 17:57:13
Autant pour moi, je me suis trompé ^^
Titre: Re : codes/scripts utiles
Posté par: Xartrick le 28 Novembre 2011, 17:18:57
Voici une fonction de chiffrement et de déchiffrement basé sur l'opérateur XOR.
Il utilise une clef qui est codé sur un char (théoriquement), donc allant de 0x00 (0) à 0xFF (255).

Pastebin GTAOnline.fr - Outil de collaboration dans le développement (http://pastebin.gtaonline.fr/pastebin.php?show=1178).
Titre: Re : codes/scripts utiles
Posté par: Syg le 29 Novembre 2011, 11:11:51
Premier problème : avec une clef sur un octet ce n'est pas du tout sécurisée.

Deuxième problème beaucoup plus embêtant : si la chaîne en question contient au moins une fois le caractère clef, le décryptage ne fonctionnera pas.
Explication :
La particularité du XOR c'est que si on fait A^A, on obtient 0. Donc si dans ta chaîne de départ, tu as un caractère qui est celui de la clef, la chaîne cryptée contiendra le caractère 0x00 à cette même place. Lors du décryptage, la fonction s'arrêtera sur ce caractère puisqu'elle le prendra pour un caractère de fin de chaîne et le résultat sera donc tronqué et différent de la chaîne de départ.

Règle n° 391 : Ne pas utiliser strlen que on joue avec XOR

La première solution à ce problème est d'utiliser un caractère clef dont on est sûr qu'il ne se retrouvera pas dans une chaîne. Mais on se rend vite compte qu'il n'y en a pas beaucoup ce qui limite le nombre de clefs possibles et augmentent encore le manque de sécurité.

L'autre solution est de travailler non plus sur des chaînes de caractères mais sur ce qu'on appelle des buffer de données (un tableau de taille fixe dont les éléments peuvent avoir n'importe quelle valeur entre 0x00 et 0xFF).
De plus, il est inutile de passer par une variable intermédiaire dans ce cas, il vaut mieux crypter/décrypter le buffer sur lui-même.

Si on reprend ta fonction avec tout ce qui précède, on obtient ceci :
#define KEY_LENGTH    (100+1)
new Key[KEY_LENGTH] = "sdfg435ze321cqs5df321ze651s321v68sd1f32s1d685fgs1sdfg435ze321cqs5df321ze651s321v68sd1f32s1d685fgs1";
// NB : La clé peut contenir n'importe quel caractère et faire n'importe quelle longueur.
//      Ici, je n'ai mis que des caractères affichables car c'est un exemple mais on peut la
//      générer de façon à couvrir les 256 caractères ASCII (0x00 compris).
//      NB : avec 100 caractères pour la clef, on obtient un cryptage sur 800 bits

stock _XOR(sSource[], iLength)
{
new i;
   
for (i = 0 ; i<iLength ; i++)
sSource[i] ^= sKey[i%KEY_LENGTH];
}
Le i%KEY_LENGTH sert à reboucler sur les caractères de la clef si celle-ci est moins longue que le buffer à crypter.

Pour l'utilisation, on fixe une taille arbitraire pour le buffer à crypter, par exemple 255.
new Buffer[255] = "Ceci est un buffer qui contient une chaîne";

_XOR (Buffer, 255);
// Maintenant, la variable Buffer a été crypté sur 255 caractères

Pour décrypter, il faut absolument utiliser la même taille que pour le cryptage sinon on risque de perdre des informations :
_XOR (Buffer, 255);
// Maintenant, la variable Buffer contient la chaîne de départ

++
Syg
Titre: Re : codes/scripts utiles
Posté par: Xartrick le 29 Novembre 2011, 18:59:17
Purée, je n'avais pas pensé au null char, grosse grosse erreur de ma part.
Effectivement, x ^ x = 0.

Pour le problème de sécurité, c'était purement pour montrer un.
Pour la boucle sur la taille de la chaîne (i % KEY_LENGTH), je trouves ça malin.
Titre: Re : codes/scripts utiles
Posté par: mehdi-jumper le 29 Novembre 2011, 22:16:10
En effet ;)
Titre: Re : codes/scripts utiles
Posté par: Xartrick le 30 Novembre 2011, 13:07:07
@mehdi-jumper: J'aimerais que tu t'abstienne de faire des commentaires inutiles, je trouves ça particulièrement agaçant quand une ou des personnes essaye de tenir une conversation.

Je veux dire par là que ton commentaire n'apporte rien à cette discution et ne fait qu'augmenter ton compteur de message, si ce n'est ton objectif.

J'ai pu remarqué que tu étais souvent averti pour ce type d'infraction, je me permet donc de mettre ça au clair car je pense que la modération en à marre de modérer ce type de message.

À bon entendeur.
Titre: Re : codes/scripts utiles
Posté par: mehdi-jumper le 30 Novembre 2011, 13:20:03
Très bien, c'est entendu.
Titre: Re : codes/scripts utiles
Posté par: FR_SalutSSBB le 30 Décembre 2011, 17:10:02
Salut ! Tien un code utiles pour être en AFK (sauf le problème que quand c'est un SFTDM ou LVTDM on va a LS)

if (strcmp("/afk", cmdtext, true, 10) == 0)
{
TogglePlayerControllable(playerid, 0);
SetPlayerPos(1818.3849,-1292.9879,131.7344,158.6616,0,0,0,0,0,0); //Pour qui soit en AFK (Pause)
     new name[ 24 ], string[ 64 ];
    GetPlayerName( playerid, name, 24 );

    format( string, sizeof(string), "%s est en AFK ! (PAUSE)(/AFK)", name );
    SendClientMessageToAll(COLOR_YELLOW,string);
SetPlayerName(playerid, name, "[AFK]%s");
}
return 1;
}
if (strcmp("/back",cmdtext, true, 10) == 0)
{
new name[ 24 ], string[ 64 ];
    GetPlayerName( playerid, name, 24 );

    format( string, sizeof(string), "%s est de retour !(/BACK)", name );
    SendClientMessageToAll(COLOR_GREEN,string);
TogglePlayerControllable(playerid, 1);
SetPlayerPos(1482.9598,-1638.5828,14.1484,286.6787,0,0,0,0,0,0); //
SetPlayerName(playerid, name,"%s");
}
return 1;
}

C'est gros mais c'est un peu utile ...
Titre: Re : codes/scripts utiles
Posté par: Ssk le 30 Décembre 2011, 17:21:06
c'est dans les balises code, pas PAWN qu'on met son code ^^
Titre: Re : codes/scripts utiles
Posté par: Infu le 31 Décembre 2011, 06:41:37
Au lieu que ça le fasse mettre à LS.

GetPlayerPos avant l'AFK.
Et SetPlayerPos pour qu'il récupère son ancienne position :).

A toi de mettre ça dans le script.
Citer

new Float:x, Float:y, Float:z;
GetPlayerPos(playerid, Float:x, Float:y, Float:z);
SetPlayerPos(playerid, Float:x, Float:y, Float:z);

Désolé s'il y a des erreurs, bonne chance :).
Titre: Re : codes/scripts utiles
Posté par: Antonio.C le 13 Janvier 2012, 19:25:41
Je vous présente une commande kill entièrement scripté par moi :p ( même si elle est facile )

if(strcmp("/kill", cmdtext, true) == 0)
{
        new name[MAX_PLAYER_NAME], string[35+MAX_PLAYER_NAME];
GetPlayerName(playerid, name, sizeof(name));
SetPlayerHealth(playerid, 0.0);
SetPlayerScore(playerid, GetPlayerScore(playerid)-1 )
SendClientMessage(playerid, BLANC, " Vous vous êtes suicidé... Vous perdez 1 point de score." ); // #define BLANC 0xFFFFFFAA en haut du script
format(string, sizeof(string), " %s s'est suicidé ( pour une raison inconnue )...", name ); // #define ROUGE 0xAA3333AA en haut du script
SendClientMessageToAll( ROUGE, string);
return 1;
}

C'est ma première commande :)
Titre: Re : codes/scripts utiles
Posté par: Xartrick le 13 Janvier 2012, 19:28:24
Ton code ne peut fonctionner FR_SalutSSBB.

SetPlayerName(playerid, name, "[AFK]%s");
SetPlayerName(playerid, name,"%s");
Ces fonctionne n'accepte pas les formateurs, tu dois passer par la fonction format.
Titre: Re : Re : codes/scripts utiles
Posté par: spiirou le 13 Janvier 2012, 19:48:55
Je vous présente une commande kill entièrement scripté par moi :p ( même si elle est facile )

if(strcmp("/kill", cmdtext, true) == 0)
{
        new name[MAX_PLAYER_NAME], string[35+MAX_PLAYER_NAME];
GetPlayerName(playerid, name, sizeof(name));
SetPlayerHealth(playerid, 0.0);
SetPlayerScore(playerid, -1);
SendClientMessage(playerid, BLANC, " Vous vous êtes suicidé... Vous perdez 1 point de score." );
format(string, sizeof(string), " %s s'est suicidé ( pour une raison inconnue )...", name );
SendClientMessageToAll( ROUGE, string);
return 1;
}

C'est ma première commande :)

Le SetPlayerScore(playerid, -1); met le score a -1 et ne soustrait pas 1 au score actuel
Ceci serai mieux : SetPlayerScore(playerid, GetPlayerScore(playerid)-1 );
Titre: Re : codes/scripts utiles
Posté par: Antonio.C le 14 Janvier 2012, 09:36:58
Merci de m'avoir corrigé spriou :p je modifie sur mon post :)

Et j'en profite pour mettre une commande /afk et /back qui fonctionne :) entièrement faite par moi ( avec de l'aide ^^ )

if (strcmp("/afk", cmdtext, true, 10) == 0)
{
new name[MAX_PLAYER_NAME], string[35+MAX_PLAYER_NAME];
GetPlayerName(playerid, name, sizeof(name));
GetPlayerHealth(playerid,vie); // new Float:vie; a mettre en haut du script sinon vous aurez des erreurs.
TogglePlayerControllable(playerid,0);
format(string, sizeof(string), "%s est maintenant AFK !", name);
SendClientMessageToAll(VERT, string);
AFK = Create3DTextLabel("Mode AFK", VERT, 30.0, 40.0, 50.0, 40.0, 0);
    Attach3DTextLabelToPlayer(AFK, playerid, 0.0, 0.0, 0.7);
GameTextForPlayer(playerid, " Vous etes maintenant AFK, tapez /back pour revenir au jeu.",6000, 5);
SetPlayerHealth(playerid,9999.999);
    return 1;
}

if (strcmp("/back", cmdtext, true, 10) == 0)
{
    new name[MAX_PLAYER_NAME], string[35+MAX_PLAYER_NAME];
GetPlayerName(playerid, name, sizeof(name));
TogglePlayerControllable(playerid,1);
format(string, sizeof(string), "%s est de retour sur son ordinateur !", name);
SendClientMessageToAll(VERT, string);
Delete3DTextLabel(Text3D:AFK);
GameTextForPlayer(playerid, "  Vous etes maintenant de retour, bon jeu sur Stunt Land !.",6000, 5);
SetPlayerHealth(playerid, vie);
    return 1;
}


Par contre on peut se mettre /back même si on est pas /afk ... je recherche toujours une solution

EDIT : J'ai modifié pour que quand on passe /back, on gagne pas de vie mais on reprend notre vie avant le /afk.
Titre: Re : codes/scripts utiles
Posté par: cristab le 14 Janvier 2012, 09:49:39
mais si jamais vous verifier que le joueur est en afk sa va être difficile ^^ ajoute une variable IsPlayerAfk[MAX_PLAYERS]; que tu passe a true si afk est false quand il sort
Titre: Re : codes/scripts utiles
Posté par: Antonio.C le 14 Janvier 2012, 10:36:50
Merci de m'avoir répondu mais ça me dit que la variable IsPlayerAfk n'existe pas
Titre: Re : codes/scripts utiles
Posté par: cristab le 14 Janvier 2012, 10:47:34
tu as oublier de la declarer ^^
Titre: Re : codes/scripts utiles
Posté par: Antonio.C le 14 Janvier 2012, 10:55:14
je dois la déclarer avec
new bool:IsPlayerAfk
Et mettre une condition comme quoi IsPlayerAfk est vrai ou faux, s'il est vrai, on autorise la commande back, si non, on envoie un message comme quoi il faut être afk avant d'être back, c'est ça ?
Titre: Re : codes/scripts utiles
Posté par: Gilux le 14 Janvier 2012, 12:52:59
Exact ;)
Titre: Re : codes/scripts utiles
Posté par: Antonio.C le 14 Janvier 2012, 14:09:25
Code corrigé, merci à vous tous :)


<?php // Ne mettez surtout pas ça, c'est juste pour que le code soit en couleur ;)

new Float:vie// Definissez ces news tout en haut de votre script, en haut de " if desfined filterscript "
new bool:IsPlayerAfk;

// là y'a tout votre code

/* Mettez les commandes suivante dans 
public OnPlayerCommandText(playerid, cmdtext[]) */


if (strcmp("/afk"cmdtexttrue4) == 0)
{
new name[MAX_PLAYER_NAME], string[35+MAX_PLAYER_NAME];
GetPlayerName(playeridnamesizeof(name)); // On prend le nom du joueur
GetPlayerHealth(playerid,vie); // On prend la vie actuelle du joueur ( avant qu'il fasse /afk ) 
TogglePlayerControllable(playerid,0); // Le joueur ne peut plus bouger
format(stringsizeof(string), "%s est maintenant AFK !"name); // On dit à tout le monde que le joueur se met AFK
SendClientMessageToAll(VERTstring);
AFK Create3DTextLabel("Mode AFK"VERT30.040.050.040.00); // Ici le joueur a sur sa tête :
        
Attach3DTextLabelToPlayer(AFKplayerid0.00.00.7); //             " Mode AFK "
GameTextForPlayer(playerid" Vous etes maintenant AFK, tapez /back pour revenir au jeu.",60005);
SetPlayerHealth(playerid,9999.999); // On lui met la vie infinie pour qu'on ne puisse pas le tuer pendant son absence
IsPlayerAfk true// On passe IsPlayerAfk a true pour permettre le joueur de passer en /back plus tard
        
return 1;
}

if (strcmp("/back"cmdtexttrue10) == 0)
{
if (IsPlayerAfk == true)
{
   
new name[MAX_PLAYER_NAME], string[35+MAX_PLAYER_NAME];
GetPlayerName(playeridnamesizeof(name)); // On prend le nom du joueur
TogglePlayerControllable(playerid,1); // Le joueur peut bouger à nouveau
format(stringsizeof(string), "%s est de retour sur son ordinateur !"name); // On dit à tout le monde que le joueur est revenu
SendClientMessageToAll(VERTstring);
Delete3DTextLabel(Text3D:AFK); // On enleve le "Mode AFK de la tête du joueur "
GameTextForPlayer(playerid"  Vous etes maintenant de retour, bon jeu sur [VotreServeurIci] !.",60005);
SetPlayerHealth(playeridvie); // On remet au joueur la vie qu'il avait avant de faire /afk ( pour pas qu'il se heal en utilisant ces commandes )
IsPlayerAfk false// On remet IsPlayerAfk false sinon la commande /back pourra s'executer même en n'étant pas AFK
        
return 1;
        }

        else
        {
        
SendClientMessage(playeridROUGE_CLAIR" Vous ne pouvez pas être de retour si vous n'êtes pas afk...");
return 1;
}

}


Et voilà :) Je viens de tester le code, il marche très bien !  ;)
Titre: Re : codes/scripts utiles
Posté par: Antonio.C le 14 Janvier 2012, 14:35:07
D'accord, je connais pas tout ça :blink Merci de m'avoir corrigé  :)
Titre: Re : codes/scripts utiles
Posté par: Xartrick le 14 Janvier 2012, 15:01:06
La variable IsPlayerAfk va être attribué à tout les joueurs, je veux dire que un joueur peut changer la variable qui est *normalement* destiné à une par joueur, pour cela, créer un tableau à la place d'une simple variable.
Titre: Re : codes/scripts utiles
Posté par: Antonio.C le 14 Janvier 2012, 16:23:03
Ah d'accord, et comme je dois faire ?  :-[
Titre: Re : codes/scripts utiles
Posté par: Xartrick le 14 Janvier 2012, 16:31:30
Tu déclare un tableau:

new bool:IsPlayerAFK[MAX_PLAYERS];
Et ensuite, tu utilise l'indice du joueur pour indice du tableau.

IsPlayerAFK[playerid] = true;
Titre: Re : codes/scripts utiles
Posté par: Antonio.C le 14 Janvier 2012, 18:10:38
C'est quoi la différence entre ma proposition et celle là ?
Car la mienne marche et quand je met celle là, ça me met une erreur de compilation
Titre: Re : codes/scripts utiles
Posté par: Xartrick le 14 Janvier 2012, 18:12:30
J'ai expliqué pourquoi ta solution ne fonctionne pas.

Ta variable va être utilisé par l'ensemble des joueurs, donc ce n'est pas vraiment ce que tu désire.

Quel est ton erreur de compilation ?
Titre: Re : codes/scripts utiles
Posté par: spiirou le 14 Janvier 2012, 18:16:53
Il a du faire ca :

new bool:IsAfk[MAX_PLAYERS];

IsAfk = true; // Sans mettre l'index
Titre: Re : codes/scripts utiles
Posté par: Antonio.C le 14 Janvier 2012, 18:40:40
J'ai mis ça :

new bool:IsPlayerAfk[MAX_PLAYERS]
Et tout les IsPlayerAfk = true ( ou false )  je les ai remplacés par :

IsPlayerAfk[playerid] = true ( ou false )
Et l'erreur : C:\Program Files (x86)\Rockstar Games\Samp server\pawno\GM.pwn(183) : error 033: array must be indexed (variable "IsPlayerAfk")
Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase


1 Error.

Voilà ...
Desolé d'être aussi lourd, je débute :p
Titre: Re : codes/scripts utiles
Posté par: Xartrick le 15 Janvier 2012, 12:17:02
Montre nous le code complet (sur Pastebin).
Titre: Re : codes/scripts utiles
Posté par: Antonio.C le 15 Janvier 2012, 17:08:15
Voici Voilà ^^ : http://pastebin.gtaonline.fr/pastebin.php?show=1192 (http://pastebin.gtaonline.fr/pastebin.php?show=1192)
Titre: Re : codes/scripts utiles
Posté par: Xartrick le 15 Janvier 2012, 17:17:06
if (IsPlayerAfk == true)
if (IsPlayerAfk[playerid] == true)
Titre: Re : Re : codes/scripts utiles
Posté par: spiirou le 15 Janvier 2012, 17:33:08
Il a du faire ca :

new bool:IsAfk[MAX_PLAYERS];

IsAfk = true; // Sans mettre l'index

Gagné :)
Titre: Re : codes/scripts utiles
Posté par: Antonio.C le 15 Janvier 2012, 18:14:52
Ah oui merci, je l'avvais pas vu celui-là ^^
Titre: Re : codes/scripts utiles
Posté par: Xartrick le 27 Février 2012, 21:26:33
La fonction StringCompare permet de comparer deux chaînes et retourne vrai si les deux chaînes sont exactement les mêmes.
Cette fonction peut être utilisé, par exemple, pour la comparaison de commandes dans la fonction évènementielle OnPlayerCommandText car grand nombre d'entre vous ne savent pas utiliser les arguments de la fonction strcmp mais aussi, utiliser sa valeur de retour.
Ici, il suffit simplement d'indiquer les deux chaînes et de dire si la comparaison doit être faite de façon sensible à la case ou non.


/*
    fStringCompare
    
    @sString1:    First string to compare.
    @sString2:    Second string to compare.
    @bIgnoreCase: true:  case insensitive
                  false: case sensitive.
*/

public bool: fStringCompare(sString1[], sString2[], bool:bIgnoreCase)
{
    new iLength1 = strlen(sString1),
        iLength2 = strlen(sString2);
    
    if (iLength1 == iLength2)
        if (strcmp(sString1, sString2, bIgnoreCase, iLength1) == 0)
            return true;
    
    return false;
}

Et pour l'utilisation:

fStringCompare("XARTRICK", "xartrick", true);  // true
fStringCompare("XARTRICK", "xartrick", false); // false
fStringCompare("xar",      "xartrick", true);  // false
fStringCompare("xartrick", "xar",      true);  // false
Titre: Re : codes/scripts utiles
Posté par: Kiloutre le 02 Janvier 2013, 21:07:15
Code: (pawn) [Sélectionner]
SendPlayerCommand(playerid, cmdtext[]) return OnPlayerCommandText(playerid, cmdtext);Permet de faire comme si le joueur tapait une commande <:
(Ne marche que avec les commandes dans OnPlayerCommandText).
Titre: Re : codes/scripts utiles
Posté par: Ssk le 02 Janvier 2013, 21:41:23
Tu peux aussi faire.


Code: (pawn) [Sélectionner]

#define SendPlayerCommand OnPlayerCommandText

Titre: Re : codes/scripts utiles
Posté par: Gzsume le 03 Janvier 2013, 06:11:52
J'aurai plutôt utilisé PlayerSendCommand comme nom, mais bon. Sinon, on peut tout aussi bien juste faire OnPlayerCommandText(pid, cmd) sans se prendre la tête, puis ça reste instinctif au moins (on sait directement ce que ça fait).
Titre: Re : codes/scripts utiles
Posté par: Kiloutre le 03 Janvier 2013, 20:18:24
Je voulais rester dans le style des commandes de samp.
(SendPlayerMessage, SendClientMessage)
Si les commandes auraient été PlayerSendMessage et ClientSendMessage, j'aurais fait comme tu m'as dit :) .
Titre: Re : codes/scripts utiles
Posté par: Infu le 18 Mai 2013, 16:34:35
Petit up mais j'ai fait ça en 5 minutes, et je trouve ça assez utile  :smile:

Code: (pawn) [Sélectionner]
/* En haut du script */
forward connectiontime(playerid);
new connect[MAX_PLAYERS] = 0;
new CT[MAX_PLAYERS];

/* OnPlayerConnect / OnPlayerSpawn comme vous voulez */
CT[playerid] = SetTimerEx("connectiontime", 60 * 1000, true, "i", playerid);

/* En dessous de OnPlayerConnect/Spawn */
public connectiontime(playerid)
{
connect[playerid]++;
}

/* OnPlayerDisconnect */
new pname[MAX_PLAYER_NAME];
GetPlayerName(playerid, pname, sizeof(pname));
KillTimer(CT[playerid]);
printf("%s s'est déconnecté après %i minutes de jeu !", pname, connect);

Comme vous pouvez voir, ça permet de savoir combien de temps un joueur a jouer sur votre serveur... Voilà voilà  :bye:

Petite image: (http://gyazo.com/17bc417355560d0f7fa4d364354b87ac.png)
Titre: Re : Re : codes/scripts utiles
Posté par: Gzsume le 18 Mai 2013, 18:27:43
Code: (pawn) [Sélectionner]
/* En haut du script */
forward connectiontime(playerid);
new connect[MAX_PLAYERS] = 0;
new CT[MAX_PLAYERS];

/* OnPlayerConnect / OnPlayerSpawn comme vous voulez */
CT[playerid] = SetTimerEx("connectiontime", 60 * 1000, true, "i", playerid);

/* En dessous de OnPlayerConnect/Spawn */
public connectiontime(playerid)
{
connect[playerid]++;
}

/* OnPlayerDisconnect */
new pname[MAX_PLAYER_NAME];
GetPlayerName(playerid, pname, sizeof(pname));
KillTimer(CT[playerid]);
printf("%s s'est déconnecté après %i minutes de jeu !", pname, connect[playerid]);

Petite correction. Tu avais oublié de préciser quelle entrée du tableau afficher dans la console pour le tableau connect. Ça a fonctionné lorsque tu as testé car connect pointe vers connect[0] (première entrée du tableau), mais avec plusieurs joueurs, ça aurait buggé. :)
Titre: Re : codes/scripts utiles
Posté par: Infu le 18 Mai 2013, 18:29:19
Exact, merci Citron  :smile:
Titre: Re : codes/scripts utiles
Posté par: natsu00 le 18 Mai 2013, 18:48:06
salut, merci pour ce FS c'est pas mal x)
je navigue sur ce post y a plein de truc cool ^^
Titre: Re : codes/scripts utiles
Posté par: R@f le 19 Mai 2013, 16:50:35
@Info & Gzsume : Il y a un moyen plus simple et consommant moins de ressources pour faire ceci.

Code: (pawn) [Sélectionner]
/* Variable (en haut du script) */
new
iConnectTime[MAX_PLAYERS] = 0;

/* Dans OnPlayerConnect */
iConnectTime[playerid] = gettime();

/* Dans OnPlayerDisconnect */
new
iPlayedTime = 0,
sPlayerName[MAX_PLAYER_NAME];

iPlayedTime = gettime() - iConnectTime[playerid];
GetPlayerName(playerid, sPlayerName, sizeof(sPlayerName));
printf("Le joueur %s(%d) s'est déconnecté après %d minutes de jeu.", sPlayerName, playerid, iPlayedTime / 60);

++
R@f
Titre: Re : codes/scripts utiles
Posté par: Gzsume le 19 Mai 2013, 17:20:47
Effectivement, c'est bien plus pratique. Je n'ai pas tellement réfléchi au moment de corriger le code, ça consomme bien moins avec ta manière de faire. Par contre, je ne me souviens plus de si la fonction gettime fonctionne ou non sous Linux (il fût un temps où ça posait problème).
Titre: Re : Re : codes/scripts utiles
Posté par: R@f le 19 Mai 2013, 17:25:39
Effectivement, c'est bien plus pratique. Je n'ai pas tellement réfléchi au moment de corriger le code, ça consomme bien moins avec ta manière de faire. Par contre, je ne me souviens plus de si la fonction gettime fonctionne ou non sous Linux (il fût un temps où ça posait problème).

C'est GetTickCount (http://wiki.sa-mp.com/wiki/GetTickCount) qui posait problème. Le gettime fonctionne sans problèmes ;)

++
R@f
Titre: Re : codes/scripts utiles
Posté par: Ssk le 19 Mai 2013, 17:34:51
D'ailleurs on peut se faire notre propre GetTickCount avec gettime.


Code: (pawn) [Sélectionner]
new iStartingTimeStamp = 0;

main()
{
iStartingTimeStamp = gettime();
}

GetTickCountEx()
{
return gettime() - iStartingTimeStamp;
}
Titre: Re : codes/scripts utiles
Posté par: Infu le 20 Mai 2013, 20:16:11
J'ai copié ton code pour essayer R@f, et j'ai eu ce résultat  :huh:
Titre: Re : codes/scripts utiles
Posté par: Lacuisse le 21 Mai 2013, 12:18:18
J'ai copié ton code pour essayer R@f, et j'ai eu ce résultat  :huh:

Encore du cheat tout ça  :angry:

++
Titre: Re : Re : codes/scripts utiles
Posté par: Infu le 26 Mai 2013, 17:21:03
@Infu & Gzsume : Il y a un moyen plus simple et consommant moins de ressources pour faire ceci.

Code: (pawn) [Sélectionner]
/* Variable (en haut du script) */
new
iConnectTime[MAX_PLAYERS] = 0;

/* Dans OnPlayerConnect */
iConnectTime[playerid] = gettime();

/* Dans OnPlayerDisconnect */
new
iPlayedTime = 0,
sPlayerName[MAX_PLAYER_NAME];

iPlayedTime = gettime() - iConnectTime[playerid];
GetPlayerName(playerid, sPlayerName, sizeof(sPlayerName));
printf("Le joueur %s(%d) s'est déconnecté après %d minutes de jeu.", sPlayerName, playerid, iPlayedTime * 60);

++
R@f

J'ai "résolu" ton erreur, surement de l’inattention.... 
Tu fais:

Code: (pawn) [Sélectionner]
printf("Le joueur %s(%d) s'est déconnecté après %d minutes de jeu.", sPlayerName, playerid, iPlayedTime * 60);
Tu multiplies alors qu'il faut diviser  :smile: Donc:
Code: (pawn) [Sélectionner]
printf("Le joueur %s(%d) s'est déconnecté après %d minutes de jeu.", sPlayerName, playerid, iPlayedTime / 60);
 :bye:
Titre: Re : codes/scripts utiles
Posté par: R@f le 28 Mai 2013, 00:25:40
Youps, en effet, faute d’inattention (comme avec ton pseudo  :laugh: ). Merci ;)

++
R@f