GTAOnline.net
San Andreas Multiplayer (sa:mp) => Scripting SA-MP [Pawn center] => Discussion démarrée par: Tmas le 30 Avril 2011, 03:06:55
-
Bonsoir, j'ai récupéré un bout de code de cristab qui sert à drop un item de vie, mais voilà quand je drop l'item après avoir tué le joueur je n'obtiens pas de vie en plus
le code:
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);
}
source: http://www.gtaonline.fr/forums/index.php/topic,2149.135.html (http://www.gtaonline.fr/forums/index.php/topic,2149.135.html)
Si quelqu'un pouvez m'aider à mieux comprendre pourquoi cela ne fonctionne pas, merci d'avance.
Cordialement,
Tmas.
-
Cela est tout-à-fait normal, tu ne créer qu'un pickup, mais tu créer pas d’évènement quand un autre joueur passe sur celui-ci ;).
-
regarde les callback coorespondant au pickup
-
Ok je vois mais quel callback ajouterais de la vie au drop ?
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);
SetPlayerHealth(playerid, 100);
}
comme sa?
merci pour votre aide.
-
Je penserais à un tableau qui contiendrait tous les identificateurs (aussi appelé index ou encore id).
Ensuite, lorsqu'un joueur entre dans un pickup, tu lance une boucle qui vérifie si le pickup qui est prit est dans le tableau, et si oui, tu lui augmente sa vie, sinon, tu fais rien :P.
-
Non, il y a un évènement appelé lorsque le joueur passe sur le pickup (OnPlayerPickUpPickup)
Mais je crois que même sans passer par cet event, le pickup donne de la vie. Le problème, c'est qu'en 2e paramètre, il y a 19 : "Pickupable, but has no effect (information icons?)" (http://wiki.sa-mp.com/wiki/PickupTypes (http://wiki.sa-mp.com/wiki/PickupTypes))
Donc, ton pickup peut être ramassé, mais il n'y a aucun effet. Essaye avec le mode n°4, qui apparemment permet au pickup d'être détruit quelques secondes après avoir été créé.
++
EDIT : D'ailleurs, si ça fonctionne sans devoir passer par l'event, utilise plutôt AddStaticPickup qui ne retourne pas d'ID (léger gain de mémoire ?) et qui se contente juste de créer un pickup.
-
bon voila le code que j'ai fait grâce a tes infos
new vie;
public OnPlayerDeath(playerid, killerid, reason)
{
cash = CreatePickup(1274, 2, 0.0, 0.0, 9.0);
return 1;
}
public OnPlayerPickUpPickup(playerid, pickupid)
{
if(pickupid == vie) SetPlayerHealyh(playerid,100);
return 1;
}
sa peut le faire?
-
Pourquoi tu utilise la variable cash, elle n'existe pas !
new vie;
public OnPlayerDeath(playerid, killerid, reason)
{
vie = CreatePickup(1274, 2, 0.0, 0.0, 9.0);
return 1;
}
public OnPlayerPickUpPickup(playerid, pickupid)
{
if(pickupid == vie)
{
SetPlayerHealyh(playerid, 100);
}
return 1;
}
-
new vie;
public OnPlayerDeath(playerid, killerid, reason)
{
vie = CreatePickup(1274, 2, 0.0, 0.0, 9.0);
return 1;
}
public OnPlayerPickUpPickup(playerid, pickupid)
{
if(pickupid == vie)
{
SetPlayerHealth(playerid, 100.0);
}
return 1;
}
Une erreur c'est glissé dans votre code, sinon votre système ne fonctionnera qu'avec qu'un seul pickup, je vous conseil de faire ça avec des tableaux ^^
Un truc de ce genre, à tester http://pastebin.gtaonline.fr/pastebin.php?show=1081 (http://pastebin.gtaonline.fr/pastebin.php?show=1081)
-
Normalement, il n'y a même pas besoin d'utiliser cette partie :
public OnPlayerPickUpPickup(playerid, pickupid)
{
if(pickupid == vie)
{
SetPlayerHealth(playerid, 100.0);
}
return 1;
}
-
Ouais, sauf s'il veut mettre la vie à 100% ^^
-
Ouais, sauf s'il veut mettre la vie à 100% ^^
Ah oui c'est vrai les pickups ne donnent qu'un peu de vie... autant pour moi :P