• 22 Avril 2025, 20:00:32


Auteur Sujet: Pickup Ramassable uniquement en vehicule  (Lu 2911 fois)

0 Membres et 1 Invité sur ce sujet

Hors ligne S!m

  • *
  • Messages: 2341
    • Voir le profil
Re : Pickup Ramassable uniquement en vehicule
« Réponse #15 le: 11 Juin 2011, 03:04:36 »
Salut,

tu devrais regarder ça:http://www.gtaonline.fr/forums/index.php/topic,6175.0.html

++Sim++





Hors ligne Syg

  • Expert programmeur C/C++/PAWN
  • *
  • The GTAOnline Jesus
  • Messages: 3908
    • Voir le profil
Re : Pickup Ramassable uniquement en vehicule
« Réponse #16 le: 11 Juin 2011, 17:52:52 »
Tu compares un PickupID avec un VehicleID, c'est forcé que ça ne marchera pas.
Ensuite, tu essaie de réparer le joueur et non pas le véhicule, ce qui ne marchera pas non plus (enfin si, ça réparera le véhicule qui à le même ID que le joueur mais qui peut se trouver à l'autre bout de la carte).

De plus, le deuxième paramètre de SetVehicleHealth varie de 0.0 à 1000.0 (et non pas 100.0 comme pour un perso)
---> http://wiki.sa-mp.com/wiki/VehicleHealth

Sinon, voilà comment il faut faire.
Déclaration d'une variable globale :
new MonPickup;
Création du pickup (dans OnGameModeInit par exemple) :
MonPickup = CreatePickup (...);
Et enfin la callback de gestion de pickup :
public OnPlayerPickupPickup (playerid, pickupid)
{
   /* Si c'est le bon pickup */
   if (pickupid == MonPickup)
   {
      /* Si le joueur est en véhicule */
      if (IsPlayerInAnyVehicle (playerid))
      {
         /* On repare le véhicule */
         SetVehicleHealth (GetPlayerVehicleID (playerid), 1000.0); // ou RepairVehicle (GetPlayerVehicleID (playerid));
         GameTextForPlayer (playerid, "~r~~h~Reparation du vehicule ~n~~n~~h~Terminer", 1000, 3);

         /* Ici, on peut jouer un son par exemple pour prévenir le joueur */
         /* On peut aussi faire disparaitre le pickup (DestroyPickup) et lancer un timer pour le faire réapparaitre */
      }
   }
}

NB : Code non testé mais vu le nombre de lignes, ça devrait fonctionner.

++
Syg
Courtesy of GtaManiac

Hors ligne vitry_selkato

  • *
  • Tueur en série
  • Thug Life Style - Vie de voyous Virtuel
  • Messages: 174
    • Voir le profil
    • http://www.thuglifestyle.1x.net/
Re : Pickup Ramassable uniquement en vehicule
« Réponse #17 le: 14 Juin 2011, 00:01:32 »
Chez moi cela fonctionne pas , avec les deux options repairvehicle ou setvehiclehealth

Hors ligne cristab

  • *
  • Messages: 8379
    • Voir le profil
Re : Pickup Ramassable uniquement en vehicule
« Réponse #18 le: 14 Juin 2011, 09:06:22 »
peut'on voir comment tu as fais car cela m'etonne fortement que sa ne fonctionne pas
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 vitry_selkato

  • *
  • Tueur en série
  • Thug Life Style - Vie de voyous Virtuel
  • Messages: 174
    • Voir le profil
    • http://www.thuglifestyle.1x.net/
Re : Re : Pickup Ramassable uniquement en vehicule
« Réponse #19 le: 15 Juin 2011, 14:18:52 »
peut'on voir comment tu as fais car cela m'etonne fortement que sa ne fonctionne pas

Pas de problèmes,
new repveh01;

repveh01 = CreatePickup(3096, 1, 3070.5557, -2291.6531, 26.2190, -1);

if (pickupid == repveh01)
{
if (IsPlayerInAnyVehicle(playerid))
{
RepairVehicle (GetPlayerVehicleID (playerid));
GameTextForPlayer(playerid, "~r~~h~Reparation du vehicule ~n~~n~~h~Terminer", 1000, 3);
}
}

Je n'ai pas fait de copier coller , j'ai copier tout à la main.

Hors ligne Pixect

  • Verbal Criminal
  • *
  • Tueur en série
  • ser la fèt isi, tqvu
  • Messages: 219
    • Voir le profil
Re : Pickup Ramassable uniquement en vehicule
« Réponse #20 le: 15 Juin 2011, 16:46:00 »
Salut,

Je pense que tu devrais utiliser ce code là:

<?php // Ne prête pas attention à ça, c'est pour la couleur. ;)

public OnPlayerPickUpPickup(playeridpickupid)
{
    if(
pickupid == repveh01// Si l'ID du pickup est "repveh01"...
    
{
        if(
IsPlayerInAnyVehicle(playerid) == 1// Si le joueur est dans un véhicule...
        
{
            
RepairVehicle(GetPlayerVehicleID(playerid)); // On répare le véhicule.
            
GameTextForPlayer(playerid"~h~Reparation du vehicule...~n~~n~~h~Terminee !"10003); // On avertit le joueur.
        
}
        else 
// Sinon...
        
{
            
GameTextForPlayer(playerid"~h~Vous devez etre dans un vehicule~n~~n~pour effectuer une reparation !"10003); // On avertit le joueur (au cas où). :p
        
}
    }
    return 
1;
}

Après, libre à toi de rajouter un son, une vue modifiée de la caméra, etc. ;)

++


Citation de: Stéphane ARLEN
« Défendre le c cédille majuscule n’est-il pas vain ? Ca m’isole, comme disent les fous. »

S'il vous plaît, passez par ici si vous avez le temps.

Hors ligne Syg

  • Expert programmeur C/C++/PAWN
  • *
  • The GTAOnline Jesus
  • Messages: 3908
    • Voir le profil
Re : Pickup Ramassable uniquement en vehicule
« Réponse #21 le: 15 Juin 2011, 23:21:27 »
Le problème vient du fait que les pickup de type 1 ne peuvent être ramassés que quand on est à pied.
Il faut donc utiliser le type 14 et gérer la réapparition du pickup car il ne réapparait pas si on reste dans les parages.

Voici la solution (testée) :

Variable globale :
new MyPickup;
Fonction de timer :
forward CreerPickup ();
public CreerPickup ()
{
MyPickup = CreatePickup (3096, 14, 1884.6749, -1388.3657, 13.5703, -1);
}

Dans OnGameModeInit :
SetTimer ("CreerPickup", 100, 0);
La callback :
public OnPlayerPickUpPickup (playerid, pickupid)
{
if (pickupid == MyPickup)
{
/* Le pickup n'est ramassable qu'en véhicule donc le joueur est forcément dans un véhicule
   => Pas besoin de test */
DestroyPickup (MyPickup);
RepairVehicle (GetPlayerVehicleID (playerid));
GameTextForPlayer (playerid, "~h~Reparation du vehicule...~n~~n~~h~Terminee !", 1000, 3);
SetTimer ("CreerPickup", 1000, 0);
}
}

++
Syg
Courtesy of GtaManiac

Hors ligne vitry_selkato

  • *
  • Tueur en série
  • Thug Life Style - Vie de voyous Virtuel
  • Messages: 174
    • Voir le profil
    • http://www.thuglifestyle.1x.net/
Re : Pickup Ramassable uniquement en vehicule
« Réponse #22 le: 16 Juin 2011, 01:02:24 »
Non , je pense pas que tu est raison .
Les pickups Type 14 il s'affiche mais pas à l'emplacement d'un spawn , j'ai mit des pickups Type 14 il ne s'affiche pas la ou il faut il s'affiche en dessous de ma map , et flotte sur l'eau , au dessus des vagues et suit le mouvement des vageuux :(

j'ai effectuer ce que tu a mit de nouveau , j'ai mit le type 14 , aucun pickup !

=S
« Modifié: 16 Juin 2011, 01:27:40 par vitry_selkato »

Hors ligne Syg

  • Expert programmeur C/C++/PAWN
  • *
  • The GTAOnline Jesus
  • Messages: 3908
    • Voir le profil
Re : Pickup Ramassable uniquement en vehicule
« Réponse #23 le: 16 Juin 2011, 09:32:51 »
Les pickup de types 14 sont les seuls ramassables en véhicule.
Par contre, il est bien dit dans le wiki de SAMP que ces pickup passent à travers les objets ajoutés (CreateObject ou autre) et vont se positionner au niveau de la carte originale (donc au niveau de la mer si tu as créé une map au dessus de la mer).

La seule solution pour toi, c'est de passer par une détection de la position du joueur. Donc oublie la callback OnPlayerPickupPickup.

Pour résumer :
Tu crées un pickup de type 1
Dans un timer, tu vérifies si le joueur est à la position du pickup (dans un rayon de 0.5 ou 1 m) :il existe plein d'exemple pour ça.
Si c'est le cas et si il est dans un véhicule, tu répares son véhicule.

++
Syg
Courtesy of GtaManiac

Hors ligne vitry_selkato

  • *
  • Tueur en série
  • Thug Life Style - Vie de voyous Virtuel
  • Messages: 174
    • Voir le profil
    • http://www.thuglifestyle.1x.net/
Re : Pickup Ramassable uniquement en vehicule
« Réponse #24 le: 19 Juin 2011, 14:11:31 »
Bon, j'ai laisser tomber , j'ai cherchez comment détecter la position d'un joueur , j'ai pas trouver des trucs satisfaisant .
J'abandonne , et j'ai fait une commande tampis.