GTAOnline.net
San Andreas Multiplayer (sa:mp) => Scripting SA-MP [Pawn center] => Discussion démarrée par: xEagl3Zx le 18 Août 2009, 18:05:57
-
Salut all.
Mon probleme viens du respawn de tono explosif enfet j'ai creer une map avec des tono mais quand je fonce dedans j'explose se qui est logique mais pour le respawn je les voit mais les autres joueur non ??? pouvez vous m'aider ... et pour voir plus près vous pouver aller sur le server mais je le donne pas comme sa faut me le demander pasque je tient pas etre bannis pour pub ... Merci à vous ...
Double post
Donc personne c'est ???
-
Detruit l' objet et recreer le ;)
-
ee s'est pas une question de recreer s'est une question de faire respawn l'objet o plus vite pour que tout le monde les en visibilité ...
-
Le detruire et le recreer c' est une facon de faire pour que tout les joueurs puissent revoir l objet ;)
-
Je ne comprend pas se que tu ve dire ...
-
Un DestroyObject puis un CreateObject.
-
Les objets ne respawnent pas automatiquement, contrairement aux véhicules.
Ce qui est normal puisque la plupart du temps, un objet est fixe ou en mouvement mais le joueur ne peut pas l'emmener à l'autre bout de la carte.
Donc lorsqu'un tonneau explose, il est en fait toujours là pour le serveur.
Le problème réside dans le fait qu'il est impossible pour le serveur de savoir si un tonneau a explosé ou pas.
Le mieux reste donc de faire une fonction qui détruit tous les tonneaux (même ceux qui n'ont pas explosé) et qui les recrée.
++
Syg
-
Et on pourrait me dire comment faire sa ??? s'il vous plait ...
Double post
Et j'utilise le streamer de sim SimStreamv3.0 ...
-
sont include a une fonction detruire creer regarde sont topic
-
Humm trouve pas le topic tu pourrais me l'envoyer s'il te plait merci ...
-
http://www.gtaonline.fr/forums/index.php/topic,6417.0.html (http://www.gtaonline.fr/forums/index.php/topic,6417.0.html)
-
Euh comment on fait désolé de vous embéter je suis pas encore superd bon en scripting pour tout comprendre d'un cou ... si vous voulez bien m'aidez merci ... merci beaucoup a vous ...
-
Ba tu fais en sorte qu'un DestroyStreamObject détruit tous les tono, et pis un CreateStreamObject qui les re-créer. Sois avec une coommande, ou un Timer pour que sa sois automatique ect...
-
c'est tres simple voila comment faire
new barril1;
new barril2;
new barill3;
forward Detruire();
ensuite on va proceder a une fonction sympatique
CreatBarill()
{
barril1 = CreateObject( 2587, 2001.195679, 1547.113892, 14.283400, 0, 0, 96 );
barril2 = CreateObject( 2587, 2001.195679, 1547.113892, 14.283400, 0, 0, 96 );
barril3 = CreateObject( 2587, 2001.195679, 1547.113892, 14.283400, 0, 0, 96 );
printf("barril creer");
}
Dans ton OnGameModeInit ajoute ceci
CreatBarill();
puis un timer
SetTimer("Detruire", 5000, 1);
la on va faire le public qui permettras de detruire et de recreer les barrille
public Detruire()
{
DestroyObject(barril1 );
DestroyObject(barril2 );
DestroyObject(barril3 );
printf("barril detruit");
}
voila le public qui permet de detruire mais on aimerais qui reapparaissent oui mais comment en remettant un autre timer nan du tout juste en reprennant une fonction que nous avons faite aupparravent
CreatBarill();
ce qui donne
public Detruire()
{
DestroyObject(barril1 );
DestroyObject(barril2 );
DestroyObject(barril3 );
printf("barril detruit");
CreatBarill();
}
PS: les CreateObject citer sont tirer du wiki samp
PS2: je n'est pas tester ce code mais il devrait fonctionner je pense
-
Le problème avec la solution de cristab c'est que si il y a 50 barils, il faut 50 variables, 50 lignes de code pour la création et 50 pour la destruction.
Sachant que l'attribution des ID sous SAMP se fait de manière continue (les ID des objets vont se suivre), le script suivant permet facilement de créer/détruite autant de barils que l'on veut avec le minimum de script :
new BarilDebut;
new BarilFin;
/**********************************
* FONCTION DE CREATION DES BARILS *
***********************************/
CreerBarils ()
{
/* Création du premier baril */
BarilDebut = CreateObject (...);
/* Ici on mettra autant de créations de barils que l'on veut sans affecter les ID à aucune variable */
CreateObject (...);
CreateObject (...);
CreateObject (...);
...
/* Création du dernier baril */
BarilFin = CreateObjet (...);
}
/*************************************
* FONCTION DE DESTRUCTION DES BARILS *
**************************************/
DetruireBarils ()
{
new i;
for (i=BarilDebut ; i<=BarilFin ; i++)
{
DestroyObject (i);
}
}
Remarques :
- Les deux fonctions ci-dessus peuvent appeler n'importe quand et dans n'importe quelle autre fonction (dans un timer par exemple qui détruit et recrée les barils à intervalle régulier).
- Il est aussi très facile de remplacer les CreateObject et DestroyObject de ce bout de script par les fonctions correspondantes d'un streamer.
- Le nombre total de barils est donné par : NbBarils = BarilFin - BarilDebut + 1;
++
Syg
-
A chaque fois que tu post j'apprend de nouvelle chose bien sympastique :-*
Je connaisser pas ce genre de fonction Merci
-
New Baril[256];
Baril[0] = CreateObject(........);
Baril[1] = CreateObject(........);
Ainsi de suite.
puis dans ta fonction permettant de detruire les objet tu fais simplement ca
for(new i = 0;i < 256;i++)
{
DestroyObject(Baril);
}
-
la fonction de syg est plus simple imaginons 76 barril ben bon courage pour ecrire chaque ligne tans dis que celle de syg permet d'en ajouter comme on veut sa ce soucier du code
PS il voulait les detruire est les reconstruires directement
-
Salut,
par contre, n'utilisez pas cette technique si vous avez d'autres objets à détruire / créer dont il est possible qui peuvent laisser des emplacement d'objets vides
par exemple, vous utilisez le code de Syg, mais entre la destruction des barril et leur création, vous détruisez les 3 premiers objets (id 0, 1 et 2) (pour INVALID_OBJECT, utilisez -1), lors de la création des barril, le premier aura l'id 0 et le dernier disons l'ID 500, lors de la destruction d'autres objets seront également détruits.... or ce n'est pas souhaitable...
++Sim++