GTAOnline.net

San Andreas Multiplayer (sa:mp) => Scripting SA-MP [Pawn center] => Discussion démarrée par: UrbanGhetto le 09 Août 2007, 12:19:49

Titre: OnPlayerEnterPickup
Posté par: UrbanGhetto le 09 Août 2007, 12:19:49
Bonjour, J’ai décidé de faire un pickup aide dans ce genre :

(http://img507.imageshack.us/img507/8254/infopickupvy4.jpg)

Et une valise qui active un Checkpoint et un message d’alerte a tout le monde quand on la prend :

(http://img507.imageshack.us/img507/6093/maletteeu6.png)

Donc j'ai pencé a faire une nouvelle fonction dans le genre de OnPlayerEnterPickup

Mais le problème c'est que je cet pas comment faire  :(

Merci d'avance  ;)
Titre: Re : OnPlayerEnterPickup
Posté par: UZI-I le 09 Août 2007, 18:36:38
Arrêtez ce HS. Message Supprimer.

Pour ton "problème" qui n'en est pas un. Puisque c'est juste que tu est dans l'ignorance de "comment faire une fonction". Tout simplement en réfléchissant comment elle doit réagir.

Si le joueur prend le Pick Up c'est qu'il se trouve dans une certaine zone, alors il va falloir récupérer ses positions et vérifier si il est a proximité. Ensuite a toi de voir ce que tu veut faire de sa :)
Titre: Re : OnPlayerEnterPickup
Posté par: UrbanGhetto le 09 Août 2007, 19:24:20
J'ai finalement désider de créer un checkpoint juste au dessus de la mallette  et de faire un public OnPlayerEnterCheckpoint avec un GameTexteForAll  :)
Quand au Pickup Info j'ai l'ai supprimer ça sert a rien

PS : Désolé pour le HS  ;)
Titre: Re : OnPlayerEnterPickup
Posté par: kev375 le 11 Août 2007, 21:35:06
Yo Urban ! J'ai la solution :

tout en haut du script :  
new pickup1;


tout en bas :
public OnPlayerPickUpPickup(playerid, pickupid){


if ( pickupid == pickup1 )
{
SendClientMessage(playerid,COLOR_RED,"Info");
DestroyPickup(pickupid);
pickup1 = CreatePickup(1239,19,268.6798,1863.5541,8.7578);


}

   return 1;

}


//-------------------------

PS : Pour la valise, fait pareil : new pickup2;


Titre: Re : OnPlayerEnterPickup
Posté par: ApocKalipsS le 03 Octobre 2007, 17:32:21
Salut
Desoler du UP du sujet mais comment peut -on trouver les coordoner d'un Pickup
(emplacement)
Merci et desolé du Up !


Parceque voila mon script :
new pickup1;
public OnPlayerPickUpPickup(playerid, pickupid){
if ( pickupid == pickup1 )
{
SendClientMessage(playerid,COLOR_RED,"Bienvenue !");
DestroyPickup(pickupid);
pickup1 = CreatePickup(1239,19,268.6798,1863.5541,8.7578);
}

   return 1;

}

Et je voudrait placer mon PickUp ici a la place de ce persos :
AddPlayerClass(260,1948.4337,-2184.9961,13.5542,175.5193,0,0,0,0,0,0); //
Voila merci de me repondre ++
(http://www.gtaonline.fr/forums/Themes/proton/images/warnwarn.gif) Double poste en l'espace de 10 minutes. Merci d'utiliser la fonction "modifier". (http://www.gtaonline.fr/forums/Themes/proton/images/warnwarn.gif)
Titre: Re : OnPlayerEnterPickup
Posté par: UrbanGhetto le 03 Octobre 2007, 17:44:11
Avec une position X-Y-Z  ;)
Titre: Re : OnPlayerEnterPickup
Posté par: ApocKalipsS le 03 Octobre 2007, 17:57:39
Hum tu peut me la faire ou sur msn car jessaye je comprend rien  ;D
Titre: Re : OnPlayerEnterPickup
Posté par: [StAfF]MaN le 03 Octobre 2007, 19:45:22
Mais t'as juste a remplacer les coordonnée par celle du player que tu nous a montrés mdr ^^


new pickup1;
public OnPlayerPickUpPickup(playerid, pickupid){
if ( pickupid == pickup1 )
{
SendClientMessage(playerid,COLOR_RED,"Bienvenue !");
DestroyPickup(pickupid);
pickup1 = CreatePickup(1239,19,-2184.9961,13.5542,175.5193);
}

   return 1;

}

Voila c'est tout bête... mdr ^^
Titre: Re : Re : OnPlayerEnterPickup
Posté par: [StAfF]MaN le 03 Octobre 2007, 19:46:52
heu comment on fait pour enlever un message involontaire  :laugh ^^ :P
Titre: Re : OnPlayerEnterPickup
Posté par: ApocKalipsS le 03 Octobre 2007, 20:51:40
Ok mai sje le met ou ?
Titre: Re : OnPlayerEnterPickup
Posté par: [StAfF]MaN le 03 Octobre 2007, 21:01:34
A la fin de ton script pour pas que sa gène  ::)  8)

tu fera un truk du genre pour le séparer

//-------------------------------------------------------------------------------------------
new pickup1;
public OnPlayerPickUpPickup(playerid, pickupid){
if ( pickupid == pickup1 )
{
SendClientMessage(playerid,COLOR_RED,"Bienvenue !");
DestroyPickup(pickupid);
pickup1 = CreatePickup(1239,19,-2184.9961,13.5542,175.5193);
}

   return 1;

}


et voila ^^
Titre: Re : OnPlayerEnterPickup
Posté par: ApocKalipsS le 03 Octobre 2007, 21:04:25
Urban pk tu l'as enlever du mode ? Il y est plus la !
Titre: Re : OnPlayerEnterPickup
Posté par: ApocKalipsS le 04 Octobre 2007, 17:12:43
Rha aidez moi sa marche pas  :snip :snip
gamer tu dit a la fin de ton script ou GM ? : ;)

Oops dsl c'est staffMAn mdr dsl

Alors jai mit ce que tu as dit tout en bas de mon GM et j'ai recus une erreur (warning) :

C:DOCUME~1pcadrienMESDOC~1SERVEU~1GAMEMO~1SFTDM(5).pwn(1674) : warning 217: loose indentation
Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase


1 Warning.
Voila alors pk mon return 1 me fait ca ?
(http://www.gtaonline.fr/forums/Themes/proton/images/warnwarn.gif) Triple post. (http://www.gtaonline.fr/forums/Themes/proton/images/warnwarn.gif)
Titre: Re : OnPlayerEnterPickup
Posté par: [GFC]Gamer le 04 Octobre 2007, 17:39:14
slt a toi lepro49  :) , je croi que warning né pas une erreur mais ce que je coprend pas c'est loose identation  :bangin
Titre: Re : OnPlayerEnterPickup
Posté par: UrbanGhetto le 04 Octobre 2007, 18:07:28
Loose identation ça veux dire que ce n’est pas dans l'ordre, Que c'est mal mis dans le script mais ce n’est pas vraiment un problème car la compilation s'effectue quand même.
Titre: Re : OnPlayerEnterPickup
Posté par: [GFC]Gamer le 04 Octobre 2007, 18:57:04
merci  :D donc c'est se que j'ai dit warning né pas un probleme voilla voillou ton Code et bon ptet juste qu'il né pas au bon endroit  :happy
(je connais pas grand chose en pawno donc faux attendre les experes  :laugh

 :cheers                       
syg , uzi , guigui .... vous etes ou ? on a besoin de vous  LOL!!!




XD>>>[GFC]Gamer<<<DX               

Titre: Re : OnPlayerEnterPickup
Posté par: UrbanGhetto le 04 Octobre 2007, 20:30:27
En faite ce problème ce lance quand nos lignes sont mal empilées, Exemple :

public OnPlayerConnect(playerid)
{

SendClientMessage(playerid,"Teste");

return 1;
}

Vous remarquez sur le SendClientMessage n'est pas a la même ligne que le return, Alors il faut faire ca :

public OnPlayerConnect(playerid)
{

    SendClientMessage(playerid,"Teste");

    return 1;
}

Mais on peut aussi modifier la position du return comme ça :

public OnPlayerConnect(playerid)
{

SendClientMessage(playerid,"Teste");

return 1;
}

Voila, J'espert avoir été asses clair  ;)
Titre: Re : OnPlayerEnterPickup
Posté par: ApocKalipsS le 04 Octobre 2007, 20:38:55
Oui, mais ca ne marche pas :s si tu saurait comment faire, ou me le faire par msn. merci beaucoup j'aimerais trop avoir ce script !! Merci Beaucoup
Titre: Re : OnPlayerEnterPickup
Posté par: [StAfF]MaN le 04 Octobre 2007, 21:07:47
Mais normalement le warning n'empêche pas le script de fonctionner... mais si tu met dans ton scriptfile sa devrai marcher... avec le warning mais si il n'y que celui la c'est bon ^^

Mias dit nous plutôt si quand tu lance le jeu sa fait quelque chose de bizzard (sa marche pas, sa te jette du jeu ??)
Titre: Re : OnPlayerEnterPickup
Posté par: ApocKalipsS le 05 Octobre 2007, 17:08:29
non ca ne fait rien juste qu'il n'est pas la...
Sinon peut être il faut que je mette dans les pick up normal nan ?
Titre: Re : OnPlayerEnterPickup
Posté par: [StAfF]MaN le 05 Octobre 2007, 22:04:49
Bah dans gamemode init.. Où tu veu le metre sinon ?? ::)

et après que tu ait mis ta ligne

AddStaticPickup(ID,Style de PickUp,X,Y,Z); (enfin un truk du genre)

dans gamemode init

tu met dans

Public OnPlayerPickUpPickup(playerid, pickupid)

ça :

{

if(pickupid==idMinigun)
{
GivePlayerWeapon(playerid, 362,1500);
}
return 1;
}

(ceci rajoute fait que quand le perso entre dans le pickup il ait un minigun, après tu change l'interrieur par ce que tu veun des messages, des téléportations, etc...)


Titre: Re : OnPlayerEnterPickup
Posté par: Syg le 05 Octobre 2007, 23:05:45
Pour la création du pickup, presque tout a été dit dans ce topic. Sauf qu'aucun post ne donne la méthode complète.
Donc je m'y colle.

En haut du script on ajoute les lignes :
forward CreerPickup ();
new MonPickup;


Dans OnGameModeInit, on ajoute la ligne suivante :
MonPickup = CreatePickup (Modèle (http://www.gtaonline.fr/forums/index.php/topic,427.0.html), Type (http://stephantom2.st.funpic.de/experiments/samp/files/pickup-types.html), X, Y, Z);
Note : Seuls les types 2 et 3 sont utiles (2 =>lle pickup revient après avoir été pris, 3 => le pickup ne revient pas)

Puis on rajoute la fonction OnPlayerPickupPickup :
public OnPlayerPickUpPickup (playerid, pickupid)
{
   if  (pickupid == MonPipickup) //attention, double signe =
   {
      /* ICI ON FAIT CE QU'ON DOIT FAIRE (Ajout de vie ou attribution d'arme ou téleport ou ...) */

      /* Si le pickup est de type 3, il faut le détruire car il n'apparaitra plus */
      /* Inutile pour un pickup de type 2 ou si on ne veut pas recréer le pikcup */
      DestroyPickup(pickupid);

      /* Re-création du pickup dans 10 secondes (10000 ms) */
      /* Inutile pour un pickup de type 2 ou si on ne veut pas recréer le pikcup */
      SetTimerEx ("CreerPickup", 10000, 0);
   }
   return 1;
}


Et enfin, la fonction de re-création du pickup à placer en bas du script :
public CreerPickup ()
{
   /* On creer un nouveau pickup */
   MonPickup = CreatePickup (Modèle (http://www.gtaonline.fr/forums/index.php/topic,427.0.html), Type (http://stephantom2.st.funpic.de/experiments/samp/files/pickup-types.html), X, Y, Z);
}


++
Syg
Titre: Re : OnPlayerEnterPickup
Posté par: ApocKalipsS le 06 Octobre 2007, 07:27:00
Salut SYG,
desolé mais esceque tu pourrais le mettre en code][/code ?
Merci ! :D

AHhh cool ca marche c'est super ! :D :D,
Mais mtn je veut en mettre deux, trois, quattres :s comment faire ?

Ah non marche pu :s
Voici mon script tous en bas de mon GM :

public OnPlayerPickUpPickup (playerid, pickupid)
{
   if  (pickupid == MonPickup) //attention, double signe =
   
SendClientMessage(playerid, COLOR_LIGHTGREEN,"<<=====StuntMania=====>>");
SendClientMessage(playerid, COLOR_RED,"Bienvenue à StuntMania !");
SendClientMessage(playerid, COLOR_GREEN,"Ici est une ville stuntm modifié ");
SendClientMessage(playerid, COLOR_GREEN,"Pour un max de plaisir !");
SendClientMessage(playerid, COLOR_LIGHTGREEN,"<<=====StuntMania=====>>");
DestroyPickup(pickupid);
      SetTimerEx ("CreerPickup", 10000, 0);
   }
   return 1;
}
{
MonPickup = CreatePickup (1239, 1, 1948.4337,-2184.9961,13.5542);
}


Et voici mes ereurs :
C:DOCUME~1pcadrienMESDOC~1SERVEU~1GAMEMO~1SFTDM(5).pwn(1791) : warning 217: loose indentation
C:DOCUME~1pcadrienMESDOC~1SERVEU~1GAMEMO~1SFTDM(5).pwn(1796) : warning 217: loose indentation
C:DOCUME~1pcadrienMESDOC~1SERVEU~1GAMEMO~1SFTDM(5).pwn(1796) : warning 202: number of arguments does not match definition
C:DOCUME~1pcadrienMESDOC~1SERVEU~1GAMEMO~1SFTDM(5).pwn(1798) : error 010: invalid function or declaration

voila et l'erreur c'est encore le return 1;
 ;D

Aidez moi svpp
(http://www.gtaonline.fr/forums/Themes/proton/images/warnpmod.gif) Triple post pour la troisième fois.
Modéré pour 7 jours. (http://www.gtaonline.fr/forums/Themes/proton/images/warnpmod.gif)
Titre: Re : OnPlayerEnterPickup
Posté par: NatiVe™ le 06 Octobre 2007, 12:41:42
La ligne de ton erreur c'est laquel ?

Parce que il y a ecri error ligne 1798 mais on ne sais pas la quel c'est !

AK NV.
Titre: Re : Re : OnPlayerEnterPickup
Posté par: ApocKalipsS le 06 Octobre 2007, 13:02:07
voila et l'erreur c'est encore le return 1;

Voila c sa le return 1; ;)

Ok ca remarche sauf encore et encore un probleme,
Ca ne veut pas se compiler quand je met le timer de SYG : mon script
new pickup1;
public OnPlayerPickUpPickup(playerid, pickupid){
if ( pickupid == pickup1 )
{
SendClientMessage(playerid,COLOR_LIGHTGREEN,"<<=====StuntMania=====>>");
SendClientMessage(playerid,COLOR_DARKRED,"Bienvenue à Stuntmania :");
SendClientMessage(playerid,COLOR_LIGHTBLUE,"Ici est une ville stunt modifié pour...");
SendClientMessage(playerid,COLOR_LIGHTBLUE,"...Un maximum de plaisir !");
SendClientMessage(playerid,COLOR_LIGHTGREEN,"<<=====StuntMania=====>>");
SetPlayerPos(playerid, 1953.5978,-2181.6936,17.0000);
DestroyPickup(pickupid);
SetTimerEx (CreatePickup, 10000, 0);
pickup1 = CreatePickup(1239,19,-2184.9961,13.5542,175.5193);
}

   return 1;

}
mes erreurs :
C:\DOCUME~1\pcadrien\MESDOC~1\SERVEU~1\GAMEMO~1\SFTDM(5).pwn(1801) : error 076: syntax error in the expression, or invalid function callVoila et cette ligne c'est mon SetTimerEx.
Le probleme est : je doit mettre quoi a la place de CreerPickup Create pickup etc car ca na marche pas, et, si sa marche, ca remttra le pickup après 10 Secondes ?
Titre: Re : OnPlayerEnterPickup
Posté par: Syg le 06 Octobre 2007, 15:02:39
Ta avais juste un peu oublié des accolades on dirait, fais attention à l'indentation, ça aide pour voir les accolades manquantes.

J'ai mis le code dans le pastebin : http://pastebin.gtaonline.fr/pastebin.php?show=98
Et, comme à mon habitude, j'avais fait une petite erreur : il manquait un paramètre à l'appel à la fonction SetTimerEx.
SetTimerEx ("CreerPickup", 10000, 0, "");

Sinon, pour créer plusieurs pickup, il faut :

- Déclarer plusieurs variables en haut du script (pickup1, pickup2, ...)

- Affecté à chaque variable la valeur retour d'un appel à CreatePickup (attention, ne pas utiliser AddStaticPickup)
   pickup1 = CreatePickUp (...);
   pickup2 = CreatePickUp (...);
   etc

- Rajouter un test spécifique pour chaque nouveau pickup
   if (pickupid == pickup1)
   {
       ....
   }
   else if (pickupid == pickup2)
   {
       ....
   }


++
Syg
Titre: Re : OnPlayerEnterPickup
Posté par: ApocKalipsS le 06 Octobre 2007, 16:51:35
Ok le timer marche mais mtn je veut en mettre d'autre (et oui, je sais je vous fé ***** mdr)
Alors.. j'ai rien compris a ton truk pour en mettre un autre :S  ;D
Titre: Re : OnPlayerEnterPickup
Posté par: Syg le 06 Octobre 2007, 22:19:30
Je viens de poster le code pour 3 pickups dans le pastebin : http://pastebin.gtaonline.fr/pastebin.php?show=99
J'ai mis des commentaires au début du script.

Par contre, je n'ai pas eu le temps de tester

++
Syg