• 02 Juillet 2025, 08:17:33


Auteur Sujet: [RESOLU]Questions  (Lu 2862 fois)

0 Membres et 1 Invité sur ce sujet

Hors ligne Ananas_Xpress

  • *
  • Nouveau
  • Messages: 23
    • Voir le profil
[RESOLU]Questions
« le: 20 Juillet 2013, 20:48:11 »
Bonjours a tous !

Alors voila je me poser une question, comment bloquer un vehicule SANS le bloquer par l'id, exemple :

Donc le joueur possede une sultan (id:460 je croit)

et j'ai une sultan en exposition devant la concession

Comment bloquer la sultan devant la concession , car si je bloque l'id du vehicule , ils seront tous bloquer logique ...

Jespere que vous comprendrais ma question !
« Modifié: 21 Juillet 2013, 19:10:32 par Ananas_Xpress »
Cordialement
Ananas_Xpress

Hors ligne NatiVe™

  • *
  • Messages: 7977
    • Voir le profil
Re : Questions
« Réponse #1 le: 20 Juillet 2013, 21:13:06 »
J'y connais pas grand chose, mais peut être la bloqué en utilisant le système de zone, genre bloquer les véhicules dans une zone spécifique prédéfini.

NV.



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

Hors ligne Ananas_Xpress

  • *
  • Nouveau
  • Messages: 23
    • Voir le profil
Re : Questions
« Réponse #2 le: 20 Juillet 2013, 21:23:10 »
oui j'y ait déjà penser , mais si je bloque a la concession , le joueur arrive pour acheter une voiture en sultan (évidemment) elle sera elle aussi bloquer du coup .

Je me demander si un FS ou autre exister pour gérer plus facilement les véhicules ...
Cordialement
Ananas_Xpress

Hors ligne TheExtraCrow

  • *
  • Criminel
  • Fan de Paranormal
  • Messages: 31
    • Voir le profil
Re : Questions
« Réponse #3 le: 20 Juillet 2013, 21:37:46 »
En Faite,tu voudrais Bloquer ta Slutan,pour que toi ,et toi seulement,puise la conduire ?
I Aint Afraid Of No Ghosts

Hors ligne Gzsume

  • *
  • Compétent dans l'inutile
  • Messages: 2236
    • Voir le profil
Re : Questions
« Réponse #4 le: 20 Juillet 2013, 21:39:21 »
car si je bloque l'id du vehicule , ils seront tous bloquer logique ...

Ce n'est pas le cas. Chaque véhicule dispose de ce qu'on appelle un modelid. Pour l'Infernus, par exemple, c'est 411. Pour la NRG-500, 522 (ou 520, je ne sais plus). C'est ce qui permet de connaître le modèle du véhicule.

Lorsque tu fais apparaître un véhicule avec la fonction CreateVehicle(), elle retourne un identifiant unique. En fait, dans ton serveur un tableau est créé, et pour chaque case du tableau, il fait référence à un véhicule qui a été spawn. Donc, avec le code suivant :

Code: (pawn) [Sélectionner]
new monVehicle = CreateVehicle(/* Arguments */);
La variable monVehicle contient le numéro de la case du tableau créé par SA-MP dans laquelle est stocké le véhicule chargé par CreateVehicle(). Tu peux donc utiliser cette variable pour agir sur ce véhicule spécifiquement.

Si tu choisies de te servir du modelid pour par exemple bloquer toutes les Infernus, tu dois :
  • Récupérer le modelid (pour l'Infernus, c'est 411) ;
  • Faire une boucle qui fait telle action sur les véhicules dont le modelid est untel ;

Par exemple, une fonction qui respawn toutes les Infernus du serveur :

Code: (pawn) [Sélectionner]
public RespawnInfernus()
{
  for(new vehicle = 0; vehicle < MAX_VEHICLES; vehicle++)
  {
    if(GetVehicleModel(vehicle) == 411)
    {
      SetVehicleToRespawn(vehicle);
    }
  }

  return 1;
}

Voilà, je pense avoir tout dit. À toi de creuser un peu le sujet, si tu as besoin d'aide j'expliquerais plus en détail.

Bonne soirée !

Hors ligne Ananas_Xpress

  • *
  • Nouveau
  • Messages: 23
    • Voir le profil
Re : Questions
« Réponse #5 le: 20 Juillet 2013, 21:42:25 »
j'ai compris ce que tu veut dire Gzsume, maintenant je passe a la pratique , je me retourne ver toi si je rencontre des problèmes !

Merci !

============================================================================

Questions: Comment vérifier a quelle ligne appartient le véhicule en question ?
La se sont les lignes de mes vehicules devant la concession
new monVehicle0 = CreateVehicle(415,549.3237,-1258.1016,16.5027,338.1807,-1,-1,86400); //
new monVehicle1 = CreateVehicle(415,544.2635,-1261.5669,16.5749,335.0604,-1,-1,86400); //

Que doi-je mettre dans le public OnPlayerStateChange pour verifier la ligne du vehicule ?

Je debute en pawn donc je doit dire que je rame un peu mais sa me plait ! mouahaha !
« Modifié: 20 Juillet 2013, 22:07:35 par Ananas_Xpress »
Cordialement
Ananas_Xpress

Hors ligne Infu

  • *
  • Modo LS - Admin FnF
  • Messages: 3551
    • Voir le profil
Re : Questions
« Réponse #6 le: 20 Juillet 2013, 22:30:48 »

Bonsoir !  :smile:
Source du WIKI:

Code: (pawn) [Sélectionner]
public OnPlayerStateChange(playerid, newstate, oldstate)
{
    if(oldstate == PLAYER_STATE_ONFOOT && newstate == PLAYER_STATE_DRIVER) // Player entered a vehicle as a driver
    {
        new vehicleid = GetPlayerVehicleID(playerid);
        AddVehicleComponent(vehicleid, 1010); // Add NOS to the vehicle
    }
    return 1;
}

Je traduis:

Dans la ligne 3 nous regardons si le joueur est monter dans un véhicule en tant que conducteur.
Dans la 5, nous créons " vehicleid " qui nous servira à comparer l'id du véhicule dans lequel tu monteras.
La 6 ne sert à rien, mais c'est un exemple, c'est pour ajouter du NOS dans le véhicule dans lequel tu es.


Donc, ce que nous voulons nous, c'est qu'on ne puisse pas utiliser le véhicule d'exposition, logique. Alors nous allons vérifier, dans le script, si le joueur est dans l'un de ces véhicules. Voici un exemple:

Code: (pawn) [Sélectionner]
public OnPlayerStateChange(playerid, newstate, oldstate)
{
    if(oldstate == PLAYER_STATE_ONFOOT && newstate == PLAYER_STATE_DRIVER)
    {
        new vehicleid = GetPlayerVehicleID(playerid);
        if(vehicleid == monvehiculedexpo)
        {
             SetVehicleParamsEx(/* Les paramètres voulu, par exemple éteindre le moteur, comme ça on ne peut pas s'en servir..*/);
         }
    }
    return 1;
}

J'ai utilisé SetVehicleParamsEx car je trouve ça plutôt pas mal, après tu peux mettre une alarme, fermer les portes, tout ça...

Voilà, bonne chance.  :smile:


Adju ♥
(-_-)



Hors ligne Ananas_Xpress

  • *
  • Nouveau
  • Messages: 23
    • Voir le profil
Re : Questions
« Réponse #7 le: 21 Juillet 2013, 11:25:31 »
donc j'ai réussit a bloquer QUE mon véhicule d'expo , maintenant si j'ai plusieurs véhicules a bloquer , comment je m'y prend ? dois-je recréer une variable pour chaque vehicule ? ou peut on réunir tout les véhicules d'exposition dans une seul et même variable ?

Voila mon code :
new Vehicules;
public OnGameModeInit()
{
new Vehicules0 = CreateVehicle(541,549.3237,-1258.1016,16.5027,338.1807,58,8); //
new Vehicule1 = CreateVehicle(603,544.2635,-1261.5669,16.5749,335.0604,69,1); // ceci ne fonctionne pas
        return 1;
}
public OnPlayerStateChange(playerid, newstate, oldstate)
{
if(oldstate == PLAYER_STATE_ONFOOT && newstate == PLAYER_STATE_DRIVER)
    {
        new vehicleid = GetPlayerVehicleID(playerid);
        if(vehicleid == !Vehicules )
        {
             RemovePlayerFromVehicle(playerid);
SendClientMessage(playerid, Orange, "[[Serveur]] Voiture d'exposition! Vous ne pouvez pas la conduire !");
return 1;
         }
    }

J'ai fait plusieurs essais qui n'ont rien donner ...
« Modifié: 21 Juillet 2013, 13:00:45 par Ananas_Xpress »
Cordialement
Ananas_Xpress

Hors ligne spiirou

  • *
  • L'avenir appartient à ceux qui se lèvent
  • Messages: 866
    • Voir le profil
Re : Questions
« Réponse #8 le: 21 Juillet 2013, 13:06:05 »
Tu peux faire comme ca pour tes différents véhicules d'exposition :

new vExpo[12]; // En supposant que tu aies 12 véhicules d'exposition

vExpo[0] = CreateVehicle(..);
..
....
vExpo[11] = CreateVehicle(..);

Ca évite de créer plein de variables :wink:

Et quand il rentre dedans tu peux tester comme ca :

new vehid =  GetPlayerVehicleID(playerid);
for(new i = 0; i < sizeof(vExpo); i++)
{
if(vehid == vExpo[i])
{
        RemovePlayerFromVehicle(playerid);
SendClientMessage(playerid, Orange, "[[Serveur]] Voiture d'exposition! Vous ne pouvez pas la conduire !");
return 1;
}
}

Je n'ai pas testé, mais ca devrait fonctionner! En esperant que tu comprennes  :smile:

Hors ligne Ananas_Xpress

  • *
  • Nouveau
  • Messages: 23
    • Voir le profil
Re : Questions
« Réponse #9 le: 21 Juillet 2013, 13:28:49 »
Pourrait tu m'expliquer 'en details' la ligne suivante s'il te plait ?
for(new i = 0; i < sizeof(vExpo); i++)
Sinon pour le code , je les adapter au nombres de véhicules et c'est parfait !

Encore merci de votre aide !!
« Modifié: 21 Juillet 2013, 13:40:56 par Ananas_Xpress »
Cordialement
Ananas_Xpress

Hors ligne Infu

  • *
  • Modo LS - Admin FnF
  • Messages: 3551
    • Voir le profil
Re : Questions
« Réponse #10 le: 21 Juillet 2013, 15:33:19 »
Bonjour  :smile:


Alors, je vais t'expliquer. for est une boucle, utile pour Kicker tout les joueurs d'un coup par exemple.
donc:

Code: (pawn) [Sélectionner]
for()
/* Sans ' ; ' à la fin, comme pour les conditions ' if '
On créer une variable qu'on initialise à 0 - ce qui donne ceci:*/

for(new i = 0)

/* La variable peut s'appeler autrement bien sur...
Ensuite, on dit que ' i ' est nettement plus petit que la valeur de ' vExpo ' ce qui donne:*/

for(new i = 0; i < sizeof(vExpo))

/* Mais comme nous voulons la valeur entière de vExpo, il faut ajouter ' +1 ' à chaque fois.. ' +1 ' qui peut se traduire par ' ++ '. Et on a donc une boucle complète.*/

for(new i = 0; i < sizeof(vExpo); i++)

J'espère que ce que j'ai dit est compréhensible  :smile:


Adju ♥
(-_-)



Hors ligne Kiloutre

  • Nolife, nerd et geek passionné d'Ordinatique ! ^^
  • *
  • Grand Banditisme
  • Messages: 567
    • Voir le profil
Re : Questions
« Réponse #11 le: 21 Juillet 2013, 18:06:41 »
Voici une autre explication du for en cas où tu n'auras pas compris ^^
faire
for(new i=0;i < sizeof(vExpo); i++)
{
//CODE...
}

revient à faire

new i=0;
while (i< sizeof(vExpo))
{
//CODE...
i++;
}

PS: Gzsume, l'id de la NRJ est bien 522 ^^

[/url]

Hors ligne Ananas_Xpress

  • *
  • Nouveau
  • Messages: 23
    • Voir le profil
Re : Questions
« Réponse #12 le: 21 Juillet 2013, 18:46:12 »
Okai merci des réponse ! Je comprend un peu mieux !

Maintenant es-que je peut en créer autant que je veut (dans la limite du raisonnable) pour les véhicule de chaque métier par exemple sans risque de LAG/CRASH , ou y'a t'il encore une autre façon plus efficace ?

Désoler si c'est question vous paraisse stupide  :rolleyes:
Cordialement
Ananas_Xpress

Hors ligne Kiloutre

  • Nolife, nerd et geek passionné d'Ordinatique ! ^^
  • *
  • Grand Banditisme
  • Messages: 567
    • Voir le profil
Re : Questions
« Réponse #13 le: 21 Juillet 2013, 18:57:55 »
Et bien, tu veux en créer combien ?
Essaie de ne pas dépasser 1000 et tu peux être sûr que ça ne fera pas crasher le serveur ^^
(Mais tu peux quand même dépasser cette valeur, essaie par toi même pour voir comment le serveur réagit)

Ah et, si j'ai bien compris, tu souhaiterais bloquer l'accès aux véhicule dans le concessionaire
Pour ça, il y a un paramètre appliquable avec SetVehicleParamsEx (lock) qui permet de verrouiller la porte d'un véhicule
Exemple:
Code: (PAWN) [Sélectionner]
new iEngine, iLights, iAlarm,iDoors, iBonnet, iBoot,iObjective;
 
GetVehicleParamsEx(iPlayerVehicle, iEngine, iLights, iAlarm, iDoors, iBonnet, iBoot, iObjective);
SetVehicleParamsEx(iPlayerVehicle, iEngine, iLights, iAlarm, 1, iBonnet, iBoot, iObjective);
Pour faire simple, on récupère les paramètres du véhicule (moteur, phares, alarmes, etc), et on les réappliques pour éviter de changer quoi que ce soit pour rien
Mais, on remplace le iDoors (la variable qui contient le numéro qui indique si le véhicule est bloqué ou non) par 1, donc les portes sont verrouillées
Mais même après ça il vaut mieux vérifier dans OnPlayerEnterVehicle si un joueur rentre dans un véhicule de concession, car des cheats permettent de rentrer dans des véhicules vérrouillés :/

[/url]

Hors ligne Ananas_Xpress

  • *
  • Nouveau
  • Messages: 23
    • Voir le profil
Re : Questions
« Réponse #14 le: 21 Juillet 2013, 19:10:06 »
Je n'en sait trop rien encore mais j'ai genre 6/7 métier sans compter les 'a coter' donc je me renseigne !
Je vais le faire comme je le sent puis on rectifieras le tire en cas de besoin
Merci pour toutes ces informations bien utile !
Cordialement
Ananas_Xpress