GTAOnline.net

San Andreas Multiplayer (sa:mp) => Scripting SA-MP [Pawn center] => Discussion démarrée par: Tetra-S le 14 Septembre 2007, 21:00:06

Titre: Probleme texte pour une personne
Posté par: Tetra-S le 14 Septembre 2007, 21:00:06
Bonjour je vien de modifier mon script et g un probleme un texte qui doit etre reserver au un classid special ba s'affiche avec toute les classid voici le code qui me pose probleme

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

bien sur g modifier a_sa-mp pour metre sa la

j'epere que quelq'un peut remedier a mon probleme car cela m'arrangerai bien
Titre: Re : Probleme texte pour une personne
Posté par: Tetra-S le 15 Septembre 2007, 08:39:38
y'a quelq'un sur se topic j'ai besion d'aide svp

merci de votre futur aide
Titre: Re : Probleme texte pour une personne
Posté par: Syg le 15 Septembre 2007, 11:46:35
C'est normal, tu n'a pas mis ton code dans le bonne fonction :
public OnPlayerSpawn (playerid) -> il n'y a pas de classid donc il vaut toujours 0.

Ton code doit être placé dans le fonction OnPlayerRequestClass :
public OnPlayerRequestClass (playerid, classid) -> attention, il n'y a pas de vehicleid

Et quand je dit "ton code", c'est juste la partie concernant classid.

++
Syg
Titre: Re : Probleme texte pour une personne
Posté par: Tetra-S le 15 Septembre 2007, 19:10:50
merci je je v modier tou de suite mon script par contre on peut empecher des personne de prendre des pickup
Titre: Re : Probleme texte pour une personne
Posté par: Syg le 15 Septembre 2007, 22:53:16
non, on ne peut pas empêcher les joueurs de prende un pickup.

++
Syg
Titre: Re : Probleme texte pour une personne
Posté par: Tetra-S le 16 Septembre 2007, 16:28:06
ok ba alors est il posible d'mpecher un personne d'entrer dans un perimtre definnit
Titre: Re : Probleme texte pour une personne
Posté par: Syg le 16 Septembre 2007, 22:48:50
Tu peux limiter la zone dans laquelle évolue un joueur avec la fonction SetPlayerWorldBounds mais je ne pense pas qu'elle corresponde à ce que tu veux faire.

Par contre, la solution à ton problème pourrait être de téléporter le joueur qui entre dans une zone aux limites de cette zone, ou en un point prédéfini à l'extérieur de la zone.

Mais là encore, ce n'est pas très joli car tu risques de devoir téléporter le joueur en un point autre que son point d'entrée dans la zone, ce qui créera des choses bizarres pour les joueurs sur ton serveur (téléportation semblant aléatoire).

Bien sur, pour corriger cela, tu peux toujours coder un script compliqué qui détecte le point d'entrée dans la zone et téléporte le joueur à ce point. Mais là, je te dis juste : "Bon courage" :)

++
Syg
Titre: Re : Probleme texte pour une personne
Posté par: Tetra-S le 17 Septembre 2007, 06:57:07
ok mais vu mon ba niv je me v tenter de me lancer dans quelque que ligne de code pour annuler le effet du pickup aux moment ou on le prend

mais je c meme pas le nom de la fonction ou mettre sa
Titre: Re : Probleme texte pour une personne
Posté par: Syg le 17 Septembre 2007, 11:58:34
Il existe une callback appelée OnPlayerPickUpPickup.
Je pense qu'elle pourrait t'aider.

Sinon, pour enlever une arme (si c'est ce qu'est ton pickup) à un joueur, il faut :
1 - Faire la liste des armes du joueur (GetPlayerWeaponData)
2 - Lui enlever toutes ces armes (ResetPlayerWeapons)
3 - Puis lui redonner toutes les armes qu'il avait sauf le pickup (GivePlayerWeapon)

Si ton pickup est autre chosequ'une arme (jetpack, vie, ...), il faut utiliser une autre méthode.

++
Syg
Titre: Re : Probleme texte pour une personne
Posté par: UrbanGhetto le 17 Septembre 2007, 14:01:51
Pour la callback voila ce que tu peux faire :

Tout en haut :

new pick1;
Devant le pickup qui doit executer une action :

pick1 =
Exemple :

pick1 = AddStaticPickup(372,2,414.4668,2535.3127,23.2773); // TEC 9
Et enfin tout en bas :

public OnPlayerPickUpPickup(playerid, pickupid);
if (pick1)
{
/* On fais ce qu'il y a a faire */
}
return 0;
}

Et voila le travail  ;)
Titre: Re : Probleme texte pour une personne
Posté par: Syg le 17 Septembre 2007, 22:54:22
Urbanghetto, ton test if (pick1) est erroné.
Un test c'est un comparaison entre deux valeurs et dans le tien, il n'y en a qu'une.

Par défaut, le compilateur va remplacer ton test pas if (pick1 != 0)
C'est à dire que si pick1 vaut 0, on n'exécute pas le code.
Par contre, pour toutes les autres valeurs 1,2,3, ... -1, -2, ..., le code sera exécuté.

Et pour le cas qui nous occupe, ton test aurait du être :
if (pickupid = = pick1)

++
Syg
Titre: Re : Probleme texte pour une personne
Posté par: Tetra-S le 18 Septembre 2007, 22:11:38
merci maintenant g plus que 1 probleme pour annuler les effets du pick up de vie. je pense que je dois utiliser la fonction getplayerheath (si elle existe) pour obtenir sa vie et la mettre dans une variable puis utiliser setplayerhealth
Titre: Re : Probleme texte pour une personne
Posté par: NatiVe™ le 18 Septembre 2007, 22:18:05
Oui sa existe GetPlayerHealth

AK NV.
Titre: Re : Probleme texte pour une personne
Posté par: Tetra-S le 19 Septembre 2007, 13:12:20
oui mais sa ajouterais pas de la vie par hazard
Titre: Re : Probleme texte pour une personne
Posté par: Syg le 19 Septembre 2007, 18:20:04
GetPlayerHealth permet d'obtenir la vie d'un joueur.
SetPlayerHealth permet de fixer la vie d'un joueur.


++
Syg
Titre: Re : Probleme texte pour une personne
Posté par: Tetra-S le 19 Septembre 2007, 20:41:40
ok mais la je compren dvrament plus rien  :blink  ;D car g preparer un code pour les armure mais sois i m'affiche pas le bon texte ou il y'a un bug au niveaut des pick up (i un autre apparait diretement quand je le prend) et don la fonction na pas le temps d'agire et donc le personne a tout sa vie le phenomene de la double appartition se manifester a partir deu deuxime pickup

new pickgp; //au debut apres les include

    //sf
pickgp = AddStaticPickup(1242, 2, -1614.8715,686.6466,7.1875);
pickgp = AddStaticPickup(1242, 2, -1617.3870,686.5842,7.1875);
pickgp = AddStaticPickup(1242, 2, -1614.8715,686.6466,7.1875);
pickgp = AddStaticPickup(1242, 2, -1619.9105,692.9993,7.1875);
pickgp = AddStaticPickup(1242, 2, -1600.9403,730.5913,-4.9063);
pickgp = AddStaticPickup(1242, 2, -1599.4857,730.3182,-4.9063);
pickgp = AddStaticPickup(1242, 2, -1596.2815,730.4917,-4.9063);
pickgp = AddStaticPickup(1242, 2, -1590.8850,733.8392,-4.9063);
pickgp = AddStaticPickup(1242, 2, -1593.2040,734.7852,-4.9063);
pickgp = AddStaticPickup(1242, 2, -1595.4840,735.1523,-4.9063);
pickgp = AddStaticPickup(1242, 2, -1598.3239,735.3124,-4.9063);

//lv
pickgp = AddStaticPickup(1242, 2, 301.5684,170.4484,1007.1719);
pickgp = AddStaticPickup(1242, 2, 301.7295,172.0406,1007.1719);  //sa dans [b]OnGameModeInit[/b]

public OnPlayerPickUpPickup(playerid, pickupid){
{
if (pickupid == pickgp)
{
if(gTeam[playerid] == POLICE || gTeam[playerid] == ADM )
SendClientMessage(playerid,0x8000FFFF,"Ne le gaspille pas");
}else{
SendClientMessage(playerid,0xFF0000FF,"Desoler mais tu ne fait pas parti de la police");
SetPlayerArmour(playerid,0.0);
}

}
return 1;
} //sa ver la fin

je comprend pas ma faute elle dois etre toute bette mais je vois vraiment pas
Titre: Re : Probleme texte pour une personne
Posté par: Syg le 19 Septembre 2007, 21:37:56
Premièrement, tu utilises la même variable pour tous les pickups.
Si je te montre les lignes suivantes :
a=1;
a=2;
a=3;

Combien vaut a ?
3 bien évidement et bien pour tes pickups c'est pareil, ta variable contient l'ID du dernier pickup que tu as crée.

Deux cas se présente à toi :

1 - Si tu n'as que des armures comme pickups (c'est à dire que tu veux faire la même chose quand un joueur prend un pickup quelconque:

Oublies la variable pickgp, tu n'en n'as pas besoin.
Ton code devient donc :

   AddStaticPickup (1242, .......);

public OnPlayerPickUpPickup(playerid, pickupid)
{
   if(gTeam[playerid] == POLICE || gTeam[playerid] == ADM )
   {
      SendClientMessage(playerid,0x8000FFFF,"Ne le gaspilles pas");
   }
   else
   {
      SendClientMessage(playerid,0xFF0000FF,"Désolé mais tu ne fais pas partie de la police"); // J'ai corrigé les fautes au passage
      SetPlayerArmour(playerid,0.0);
   }
   return 1;
}


2 - Tu as plusieurs types de pickups :

Tu dois stocker les ID des pickups dans un tableau :

#define NB_MAX_ARMURES     13
new pickgp[NB_MAX_ARMURES];

   pickgp[0] = AddStaticPickup (1242, ....);
   pickgp[1] = AddStaticPickup (1242, ....);
   ...
   pickgp[12] = AddStaticPickup (1242, ....);

public OnPlayerPickUpPickup(playerid, pickupid)
{
   for (new j=0 ; j<NB_MAX_ARMURES ; j++)
   {
      if (pickupid == pigp[j])
      {
         if(gTeam[playerid] == POLICE || gTeam[playerid] == ADM )
         {
            SendClientMessage(playerid,0x8000FFFF,"Ne le gaspilles pas");
         }
         else
         {
            SendClientMessage(playerid,0xFF0000FF,"Désolé mais tu ne fais pas partie de la police"); // J'ai corrigé les fautes au passage
            SetPlayerArmour(playerid,0.0);
         }
         /* Permet de sortir de la boucle si on a trouvé le pickup */
         j = NB_MAX_ARMURES;
      }
   }
   return 1;
}


Deuxièmement, concernant les pickups, tu as mis 2 comme deuxième paramètre à ta fonction AddStaticPickup.
Si tu vas voir à ce lien (http://forum.sa-mp.com/index.php?topic=139.msg1582#msg1582), tu verras que 2 veux dire que le pickup réapparait au bout d'un certaint temps.
Pour que le pickup ne réapparaisse pas, il faut mettre la valeur 3, mais il ne réapparaitra plus jamais jusqu'au prochain redémarrage du mode.

++
Syg
Titre: Re : Probleme texte pour une personne
Posté par: Tetra-S le 19 Septembre 2007, 22:23:10
merci syg vraiment merci , ton en C et C++ doit etre haut car une boucle j'y aurait jamais pencer.

tu n'est certe pas un maitre jedi mais tu est un maitre codeur et encore je ne cite pas les insigne qui vont avec se grades

aller j'arrette le hs

ps; juste pour etre sur : "j" je peut mettre "a" "b" ou d'otre lettres a la place

pss : desoler pour les faute dans les texte mais je jongle entre mapping et codding donc je stres a fond car je me suis imposer une limite de temps
Titre: Re : Probleme texte pour une personne
Posté par: Syg le 20 Septembre 2007, 01:18:45
Oui Tetra-S, à la place de j tu peux mettre a, b ou NumeroPickUp ou JaimeLaSaucisseQuandElleEstFraiche, c'est toi qui choisi, faut juste éviter de mettre un mot reservé.

Pour les fautes, c'estparce que j'ai copié/collé ton code et que vu mon âge, je fais attention à l'orthographe.

++
Syg

Titre: Re : Probleme texte pour une personne
Posté par: Tetra-S le 20 Septembre 2007, 06:55:40
ok merci maintenant que g les clef en mains g plus que a les adater en fontion du pickup

ps : la page que tu ma donner regorge de lien mais aucun na un rapport avec les pickup et sur la page il n'y a rien sur les pickup appart le nombres max
Titre: Re : Re : Probleme texte pour une personne
Posté par: UrbanGhetto le 20 Septembre 2007, 13:59:12
Urbanghetto, ton test if (pick1) est erroné.
Un test c'est un comparaison entre deux valeurs et dans le tien, il n'y en a qu'une.

Par défaut, le compilateur va remplacer ton test pas if (pick1 != 0)
C'est à dire que si pick1 vaut 0, on n'exécute pas le code.
Par contre, pour toutes les autres valeurs 1,2,3, ... -1, -2, ..., le code sera exécuté.

Et pour le cas qui nous occupe, ton test aurait du être :
if (pickupid = = pick1)

++
Syg

Désolé j'été pas bien concentrer  :P
Titre: Re : Probleme texte pour une personne
Posté par: Syg le 20 Septembre 2007, 14:27:44
Tetra-S
Si si, le lien que je t'ai donné t'amène directement au post n° 1582 d'un certain Postaly qui traite des types de pickups.

Urbanghetto
Pas grave ça arrive à tout le monde de faire des erreurs.

++
Syg
Titre: Re : Probleme texte pour une personne
Posté par: UrbanGhetto le 20 Septembre 2007, 14:40:09
Citer
Here's the pickup ID's for health, armor, and adrenaline pill:

1240 health
1241 adrenaline pill
1242 armor

enjoy.

Comme il a dis, Enjoy  ;)
Titre: Re : Probleme texte pour une personne
Posté par: Tetra-S le 20 Septembre 2007, 18:53:25
SYG je crois que je v pleurer mais maitenant le message apparaisse plus je c vrament pas d'ou sa vien   ;D :dejadehors
sa m'enerve car j'en ai vraiment besion
public OnPlayerPickUpPickup(playerid, pickupid)
{
   for (new j=0 ; j<NB_MAX_ARMURES ; j++)
   {
      if (pickupid == pickgp[j])
      {
         if(gTeam[playerid] == POLICE || gTeam[playerid] == ADM )
         {
            SendClientMessage(playerid,0x8000FFFF,"Ne le gaspilles pas");
         }
         else
         {
            SendClientMessage(playerid,0xFF0000FF,"Désolé mais tu ne fais pas partie de la police"); // J'ai corrigé les fautes au passage
            SetPlayerArmour(playerid,0.0);
         }
         /* Permet de sortir de la boucle si on a trouvé le pickup */
         j = NB_MAX_ARMURES;
      }
   }
   return 1;
}

         if(gTeam[playerid] == POLICE || gTeam[playerid] == ADM )
j'ai tenter de remplacer le texte en rouge pas max_players mais sa me met un erreur
Titre: Re : Probleme texte pour une personne
Posté par: Syg le 20 Septembre 2007, 22:03:22
Ton erreur peux venir de plusieurs facteurs, il faudrait voir le script en entier pour le dire.

Mais bon, tout d'abord, il faut t'assurer que toutes les variables utilisées dans les tests ont la bonne valeur, c'est à dire être sûr qu'elles ont été initialisées correctement dans les autres parties de ton script.
Ceci concerne les variables pickgp[j] et gTeam[playerid].

Je pense que ton problème vient de pickgp[j] sinon on verrait quand même un des deux messages.
pickgp[j] doit être initialisée quand tu fais un appel à AddStaticPickup :

pickgp[0] = AdStaticPickup (...);
pickgp[1] = AdStaticPickup (...);
... etc

Donc regardes dans OnGameModeInit si tu fais bien ça.
Sinon, tu peux toujours mettre ton script dans le pastebin (http://pastebin.gtaonline.fr/pastebin.php).

++
Syg
Titre: Re : Probleme texte pour une personne
Posté par: Tetra-S le 20 Septembre 2007, 22:25:55
ok normalement je ne donne pas mon script entier pour sa mais je v faire une exeption je post demain
Titre: Re : Probleme texte pour une personne
Posté par: Syg le 20 Septembre 2007, 22:57:35
Si tu veux pas montrer ton script à tout le monde, on peut faire ça par MSN.
Je t'ai envoyé un message privé pour de donner mon MSN.

++
Syg