• 22 Avril 2025, 19:36:48


Auteur Sujet: codes/scripts utiles  (Lu 132458 fois)

0 Membres et 2 Invités sur ce sujet

Hors ligne Infu

  • *
  • Modo LS - Admin FnF
  • Messages: 3551
    • Voir le profil
Re : codes/scripts utiles
« Réponse #360 le: 05 Octobre 2011, 11:00:11 »
Je le saurais pour la prochaine fois :) .


Adju ♥
(-_-)



Hors ligne Este

  • "Titre personnel" C koa sa ? kès ki veut dire ?
  • *
  • PLP <3 plus qu'une team <:
  • Messages: 245
    • Voir le profil
Re : Re : codes/scripts utiles
« Réponse #361 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 ^^

++



Lapoule est nul. Typo est bo.

Hors ligne S!m

  • *
  • Messages: 2341
    • Voir le profil
Re : codes/scripts utiles
« Réponse #362 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++





Hors ligne Sunaxx

  • *
  • Nouveau
  • Messages: 14
    • Voir le profil
Re : codes/scripts utiles
« Réponse #363 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;
}

Hors ligne spiirou

  • *
  • L'avenir appartient à ceux qui se lèvent
  • Messages: 866
    • Voir le profil
Re : codes/scripts utiles
« Réponse #364 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

Hors ligne mehdi-jumper

  • *
  • Bandit
  • Messages: 311
    • Voir le profil
Re : codes/scripts utiles
« Réponse #365 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é...

Hors ligne spiirou

  • *
  • L'avenir appartient à ceux qui se lèvent
  • Messages: 866
    • Voir le profil
Re : codes/scripts utiles
« Réponse #366 le: 01 Novembre 2011, 10:53:38 »
En l'occurence la qualité n'est pas la, revenons au sujet :)

Hors ligne Xartrick

  • *
  • C & Pawn Programmer
  • Messages: 1391
    • Voir le profil
    • Xartrick's Area
Re : codes/scripts utiles
« Réponse #367 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;
}

Hors ligne Ssk

  • *
  • Lulu's Stunt - Le serveur stunt de Lulu !
  • Messages: 8154
    • Voir le profil
Re : codes/scripts utiles
« Réponse #368 le: 23 Novembre 2011, 21:46:55 »
Tu as oublié deux accolades pour la boucle, sinon le code est bon.



Derrière tout programme se cache un programmeur, je considère le monde comme un programme.
Mon blog

Hors ligne Ssk

  • *
  • Lulu's Stunt - Le serveur stunt de Lulu !
  • Messages: 8154
    • Voir le profil
Re : codes/scripts utiles
« Réponse #369 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.



Derrière tout programme se cache un programmeur, je considère le monde comme un programme.
Mon blog

Hors ligne Xartrick

  • *
  • C & Pawn Programmer
  • Messages: 1391
    • Voir le profil
    • Xartrick's Area
Re : codes/scripts utiles
« Réponse #370 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.

Hors ligne Ssk

  • *
  • Lulu's Stunt - Le serveur stunt de Lulu !
  • Messages: 8154
    • Voir le profil
Re : codes/scripts utiles
« Réponse #371 le: 24 Novembre 2011, 17:57:13 »
Autant pour moi, je me suis trompé ^^



Derrière tout programme se cache un programmeur, je considère le monde comme un programme.
Mon blog

Hors ligne Xartrick

  • *
  • C & Pawn Programmer
  • Messages: 1391
    • Voir le profil
    • Xartrick's Area
Re : codes/scripts utiles
« Réponse #372 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.

Hors ligne Syg

  • Expert programmeur C/C++/PAWN
  • *
  • The GTAOnline Jesus
  • Messages: 3908
    • Voir le profil
Re : codes/scripts utiles
« Réponse #373 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
Courtesy of GtaManiac

Hors ligne Xartrick

  • *
  • C & Pawn Programmer
  • Messages: 1391
    • Voir le profil
    • Xartrick's Area
Re : codes/scripts utiles
« Réponse #374 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.