• 22 Avril 2025, 22:36:24


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

0 Membres et 5 Invités sur ce sujet

Hors ligne Syg

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

Hors ligne cristab

  • *
  • Messages: 8379
    • Voir le profil
Re : codes/scripts utiles
« Réponse #61 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
pas d'aide en PM, vous êtes sur un forum est il me semble que vous êtes la pour avoir de l'aide donc pourquoi MP une seul personne qui ne vous répondra pas alors qu'il y a plein de membre ici

Hors ligne [viruz]rider_77

  • *
  • Mafioso
  • C/C++ programming
  • Messages: 2154
    • Voir le profil
Re : codes/scripts utiles
« Réponse #62 le: 22 Mars 2009, 20:36:29 »
 :laugh C'est vraie que c'Est assez marrant :P

Hors ligne S!m

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





Hors ligne cristab

  • *
  • Messages: 8379
    • Voir le profil
Re : codes/scripts utiles
« Réponse #64 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
pas d'aide en PM, vous êtes sur un forum est il me semble que vous êtes la pour avoir de l'aide donc pourquoi MP une seul personne qui ne vous répondra pas alors qu'il y a plein de membre ici

Hors ligne NatiVe™

  • *
  • Messages: 7977
    • Voir le profil
Re : codes/scripts utiles
« Réponse #65 le: 23 Mars 2009, 10:38:08 »
Et tu a oublier de déclaré ta variable.

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



Tu vois avant? Bah j'étais là encore avant!

Hors ligne cristab

  • *
  • Messages: 8379
    • Voir le profil
Re : codes/scripts utiles
« Réponse #66 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
« Modifié: 23 Mars 2009, 22:08:38 par cristab »
pas d'aide en PM, vous êtes sur un forum est il me semble que vous êtes la pour avoir de l'aide donc pourquoi MP une seul personne qui ne vous répondra pas alors qu'il y a plein de membre ici

Hors ligne Syg

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

Hors ligne S!m

  • *
  • Messages: 2341
    • Voir le profil
Re : Re : codes/scripts utiles
« Réponse #68 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++
« Modifié: 24 Mars 2009, 02:06:29 par Sim »





Hors ligne cristab

  • *
  • Messages: 8379
    • Voir le profil
Re : codes/scripts utiles
« Réponse #69 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
pas d'aide en PM, vous êtes sur un forum est il me semble que vous êtes la pour avoir de l'aide donc pourquoi MP une seul personne qui ne vous répondra pas alors qu'il y a plein de membre ici

Hors ligne Syg

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

Hors ligne » Lukubi™

  • *
  • Soy el bico loco
  • Messages: 3282
    • Voir le profil
Re : codes/scripts utiles
« Réponse #71 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®

“Si la Terre est un endroit dangereux ce n’est pas à cause des hommes mauvais mais à cause des hommes bons qui ne font rien pour les empêcher.” (Albert Einstein).

Hors ligne S!m

  • *
  • Messages: 2341
    • Voir le profil
Re : codes/scripts utiles
« Réponse #72 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++
« Modifié: 25 Avril 2009, 19:10:57 par Sim »





Hors ligne Franky™

  • Franky™ est bien la
  • *
  • Gangster
  • Messages: 1058
    • Voir le profil
Re : codes/scripts utiles
« Réponse #73 le: 25 Avril 2009, 19:06:44 »
Simpas et marant mdr ^^

++ Franky


°°((Franky's WebSite
Désolé pour mes fautes d'orthographes

Hors ligne Syg

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