• 23 Avril 2025, 03:36:57


Auteur Sujet: Aide variable et timer  (Lu 1373 fois)

0 Membres et 1 Invité sur ce sujet

Hors ligne NevadaKee

  • *
  • Nouveau
  • Messages: 5
    • Voir le profil
Aide variable et timer
« le: 10 Mai 2012, 13:32:47 »
Bonjour bonjour,
Je suis en train de scripter ( Je débute ) un petit DM tout simple et je bloque sur un point, j'ai fais un menu qui permet de faire spawner un véhicule, seulement j'aimerais éviter que certains abusent de la commande et fassent crasher le serveur, du coup j'ai déjà mis un Timer pour détruire le véhicule au bout de 30min (Pour eviter qu'il respawn aussi) une fois que le joueur est sortit mais ça n’empêche pas d'en créer une 50aine, du coup j'ai créer une variable que j'ai appelé comme ça :
new personalvehicle[MAX_PLAYERS];Et donc se soir je ferais un système pour que lorsque l'on se co la variable est a 0, une fois qu'on spawn un véhicule SI la variable est a 0 le véhicule spawn et la variable se met a 1 et donc on ne peu plus en spawner. Mais si on quitte le véhicule 30min et qu'il est détruit comment faire pour que la variable se mette a 0 une fois le véhicule détruit ?
Mon bout de code :
public OnPlayerExitVehicle(playerid, vehicleid)
{
if(GetPlayerVehicleID(playerid) == vehicleidspawned[playerid])
{
SetTimerEx("DestroyVehicle",900000, 0, "d", vehicleidspawned[playerid]);
}
return 1;
}

Merci bonne journée :D

vincentdu90

  • Invité
Re : Aide variable et timer
« Réponse #1 le: 10 Mai 2012, 14:03:21 »
Je pense que ceci pourra t'aider : http://wiki.sa-mp.com/wiki/OnVehicleSpawn

Cette callback fonctionne aussi quand le véhicule en question REspawn.

Sinon tu peux toujours ajouter une ligne du genre : vehicleidspawned[playerid] = 0  à la fin de ton Timer , non  ?

Hors ligne Ssk

  • *
  • Lulu's Stunt - Le serveur stunt de Lulu !
  • Messages: 8154
    • Voir le profil
Re : Aide variable et timer
« Réponse #2 le: 10 Mai 2012, 17:48:10 »
Ton code est bon malgré quelques problèmes.

Par exemple, tu ne peux pas appeler une fonction de SA-MP (notamment ici DestroyVehicle).
Tu dois donc créer une fonction qui elle appelle DestroyVehicle.


Ensuite si le joueur descend 4 fois de sont véhicule, il y aura 4 timer de créé pour rien, donc tu devrai détruire le timer déjà créé.



Derrière tout programme se cache un programmeur, je considère le monde comme un programme.
Mon blog

Hors ligne NevadaKee

  • *
  • Nouveau
  • Messages: 5
    • Voir le profil
Re : Aide variable et timer
« Réponse #3 le: 10 Mai 2012, 19:56:51 »
Citer
Je pense que ceci pourra t'aider : http://wiki.sa-mp.com/wiki/OnVehicleSpawn

Cette callback fonctionne aussi quand le véhicule en question REspawn.

Sinon tu peux toujours ajouter une ligne du genre : vehicleidspawned[playerid] = 0  à la fin de ton Timer , non  ?

Vincentdu90 : Ha mais oui ! Donc au lieu de créer un timer qui détruira le véhicule, je met le destroyvehicule quand le véhicule doit respawner ! Merci ^^ Par contre comment faire pour remettre à 0 la variable du joueur qui a spawner le vehicule ? ( Si un autre joueur entre dans le véhicule entre temps etc.. ) ^^

Citer
Ton code est bon malgré quelques problèmes.

Par exemple, tu ne peux pas appeler une fonction de SA-MP (notamment ici DestroyVehicle).
Tu dois donc créer une fonction qui elle appelle DestroyVehicle.


Ensuite si le joueur descend 4 fois de sont véhicule, il y aura 4 timer de créé pour rien, donc tu devrai détruire le timer déjà créé.

Ssk : Pour créer la fonction je la met en haut du GM avec un new... non ? ( Je crois avoir lu ça quelque part ) Mais pourtant quand je met le timer a 1 milliseconde, a peine j'appuie sur F et le véhicule disparaît ^^

Et aussi comment faire pour que le véhicule qu'un joueur spawn soit verrouiller pour les autres joueurs ?
J'ai "bricoler" un petit truc comme ça pour les véhicule déjà présent sur le serveur mais comment l'adapter pour les véhicules spawner ? ^^
Merci ! :)

Edit : Avec le code c'est mieux  :ninja :
public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
{
if(GetVehicleModel(vehicleid) == 0 || (vehicleid) == 1 || (vehicleid) == 2 || (vehicleid) == 3 || (vehicleid) == 4 || (vehicleid) == 5 || (vehicleid) == 6 || (vehicleid) == 7 || (vehicleid) == 8 || (vehicleid) == 9 || (vehicleid) == 10 || (vehicleid) == 11 || (vehicleid) == 12 || (vehicleid) == 13 || (vehicleid) == 14 || (vehicleid) == 15 || (vehicleid) == 16 || (vehicleid) == 17 || (vehicleid) == 18 || (vehicleid) == 19)
{
if(Team[playerid] == TEAM_TERRO)
{
TogglePlayerControllable(playerid,0);
SendClientMessage(playerid, COLOR_RED, "Vehicule verrouiller");
TogglePlayerControllable(playerid,1);
}
}
else if(GetVehicleModel(vehicleid) == 20 || (vehicleid) == 21 || (vehicleid) == 22 || (vehicleid) == 23 || (vehicleid) == 24 || (vehicleid) == 25 || (vehicleid) == 26 || (vehicleid) == 27 || (vehicleid) == 28 || (vehicleid) == 29 || (vehicleid) == 30 || (vehicleid) == 31 || (vehicleid) == 32 || (vehicleid) == 33 || (vehicleid) == 34 || (vehicleid) == 35)
{
if(Team[playerid] == TEAM_ARMY)
{
TogglePlayerControllable(playerid,0);
SendClientMessage(playerid, COLOR_RED, "Vehicule verrouiller");
TogglePlayerControllable(playerid,1);
}
}
return 1;
}

Edit2 : Ha mais je peux pas mettre vehicleidspawned[playerid] dans on VehicleSpawn ;
public OnVehicleSpawn(vehicleid)
{
DestroyVehicle(vehicleidspawned[playerid]);
return 1;
}

C:\Users\NevadaKee\Documents\[Samp]ALPHA-NoName\Serveur\NoName\gamemodes\noname.pwn(87) : error 017: undefined symbol "playerid"
Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase


1 Error.
« Modifié: 10 Mai 2012, 21:41:03 par NevadaKee »

vincentdu90

  • Invité
Re : Aide variable et timer
« Réponse #4 le: 10 Mai 2012, 22:23:43 »
Oui pour le OnVehicleSpawn j'avais pas fais gaffe mais tu peux pas l'utiliser pour ça.
Les conseils de Ssk sont plus avisés.
Il faut que tu stoppes le Timer si le joueur descend plusieurs fois,pour éviter d'en avoir plusieurs, avec http://wiki.sa-mp.com/wiki/KillTimer.
Sinon pour la création de fonction voici un petit tuto : http://www.gtaonline.fr/forums/index.php/topic,11688.0.html

Voilà et encore désolé , je pensais bien faire.

Hors ligne NevadaKee

  • *
  • Nouveau
  • Messages: 5
    • Voir le profil
Re : Aide variable et timer
« Réponse #5 le: 10 Mai 2012, 22:49:03 »
Merci quand même c'est très gentil de m'aider :D,
Donc j'ai fais :

new timer1; // Timer personalvehicle

public OnPlayerExitVehicle(playerid, vehicleid)
{
if(GetPlayerVehicleID(playerid) == vehicleidspawned[playerid])
{
timer1 = SetTimerEx("DestroyVehicle",900000, 0, "d", vehicleidspawned[playerid]);
}
return 1;
}

public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
{
if(GetPlayerVehicleID(playerid) == vehicleidspawned[playerid])
    {
        KillTimer(timer1);
            }
return 1;
}

Je compile et aucune erreur mais lorsque j'enlève le KillTimer j'ai un warning alors que timer1 est utilisé dans OnPlayerExitVehicle :

C:\Users\NevadaKee\Documents\[Samp]ALPHA-NoName\Serveur\NoName\gamemodes\noname.pwn(214) : warning 204: symbol is assigned a value that is never used: "timer1"
Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase


1 Warning.

J'ai loupé un épisode ? ^^'

Merci :)

vincentdu90

  • Invité
Re : Aide variable et timer
« Réponse #6 le: 11 Mai 2012, 13:35:32 »
C'est normal puisque si tu enlèves le KillTimer , la variable timer1 n'est utilisée nulle part.
Dans le OnPlayerExitVehicle tu ne l'utilises pas mais tu lui affectes seulement une valeur , entre autre ici la valeur retour du SetTimerEx

Sinon comme le dis Ssk tu peux toujours créer une fonction qui est appelée lorsque le joueur entre dans le véhicule.

stock NomdeTaFonction(playerid,vehicleid)
{
 /* Condition */
}

Hors ligne Gilux

  • *
  • Mafioso
  • GOOBY PLS
  • Messages: 2209
    • Voir le profil
Re : Aide variable et timer
« Réponse #7 le: 11 Mai 2012, 22:49:10 »
Tu peux faire comme je faisais avant, tu crées un array autorisant un véhicule par joueur :

new Vehicule[MAX_PLAYERS];
Au spawn d'un véhicule :
DestroyVehicle(Vehicule[playerid]);
Vehicule[playerid] = CreateVehicle(....);

Je sais pas si tu vois où je veux en venir, mais j'ai pas trop le temps ce soir désolé  :happy