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

Titre: Probleme ...
Posté 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 ???
Titre: Re : Probleme ...
Posté par: Ssk le 18 Août 2009, 19:48:17
Detruit l' objet et recreer le ;)
Titre: Re : Probleme ...
Posté par: xEagl3Zx le 18 Août 2009, 21:34:29
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é ...
Titre: Re : Probleme ...
Posté par: Ssk le 18 Août 2009, 22:11:25
Le detruire et le recreer c' est une facon de faire pour que tout les joueurs puissent revoir l objet ;)
Titre: Re : Probleme ...
Posté par: xEagl3Zx le 19 Août 2009, 00:27:32
Je ne comprend pas se que tu ve dire ...
Titre: Re : Probleme ...
Posté par: Lance le 19 Août 2009, 04:09:45
Un DestroyObject puis un CreateObject.
Titre: Re : Probleme ...
Posté par: Syg le 19 Août 2009, 09:11:02
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
Titre: Re : Probleme ...
Posté par: xEagl3Zx le 19 Août 2009, 12:04:09
Et on pourrait me dire comment faire sa ??? s'il vous plait ...

Double post
Et j'utilise le streamer de sim SimStreamv3.0 ...
Titre: Re : Probleme ...
Posté par: cristab le 19 Août 2009, 14:13:56
sont include a une fonction detruire creer regarde sont topic
Titre: Re : Probleme ...
Posté par: xEagl3Zx le 19 Août 2009, 14:31:45
Humm trouve pas le topic tu pourrais me l'envoyer s'il te plait merci ...
Titre: Re : Probleme ...
Posté par: cristab le 19 Août 2009, 14:50:19
http://www.gtaonline.fr/forums/index.php/topic,6417.0.html (http://www.gtaonline.fr/forums/index.php/topic,6417.0.html)
Titre: Re : Probleme ...
Posté par: xEagl3Zx le 19 Août 2009, 17:35:47
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 ...
Titre: Re : Probleme ...
Posté par: Lance le 19 Août 2009, 17:47:08
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...
Titre: Re : Probleme ...
Posté par: cristab le 19 Août 2009, 17:54:18
c'est tres simple voila comment faire


Code: (declaration) [Sélectionner]
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
Titre: Re : Probleme ...
Posté par: Syg le 20 Août 2009, 10:30:59
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 :

Code: (pawn) [Sélectionner]
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 :

++
Syg
Titre: Re : Probleme ...
Posté par: cristab le 20 Août 2009, 10:41:41
A chaque fois que tu post j'apprend de nouvelle chose bien sympastique  :-*


Je connaisser pas ce genre de fonction Merci
Titre: Re : Probleme ...
Posté par: Ssk le 22 Août 2009, 20:00:50
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);
}
Titre: Re : Probleme ...
Posté par: cristab le 22 Août 2009, 20:18:36
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
Titre: Re : Probleme ...
Posté par: S!m le 23 Août 2009, 02:01:30
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++