Author Topic: problème dans le déroulement du script  (Read 590 times)

THELASTMURDER

  • Apprenti poseur de brushs
  • Posts: 64
problème dans le déroulement du script
« on: November 28, 2007, 11:08:47 AM »
Re-bonjours,
Et oui c'est encore moi mais bon j'ai bientôt fini avec cette satanée map mais il n'y a qu'un problème:

Voilà mon script initial :
main()
{
maps\mp\_load::main();
maps\mp\porte::main();
maps\mp\mortier_fx::main();
maps\mp\feu_fx::main();
maps\mp\explo_bidon::main();

setExpFog(0.0001, 0.55, 0.6, 0.55, 0);
// setCullFog(0, 16500, 0.55, 0.6, 0.55, 0);
ambientPlay("ambient_mp_murder");


game["allies"] = "american";
game["axis"] = "german";
game["attackers"] = "allies";
game["defenders"] = "axis";
game["american_soldiertype"] = "normandy";
game["german_soldiertype"] = "normandy";


setCvar("r_glowbloomintensity0", ".25");
setCvar("r_glowbloomintensity1", ".25");
setcvar("r_glowskybleedintensity0",".3");

level thread mortier();

}

mortier()
{
mortier = getentarray ("mortier","targetname");
while (1)
{
wait (1 + randomfloat(1));
GoodPosition = false;
while (!GoodPosition)
{
level.rand = randomint(mortier.size);
GoodPosition = true;
players = getentarray("player", "classname");
for(i = 0; i < players.size; i++)
{
if (distance(mortier[level.rand].origin,players.origin) < 10)
{
GoodPosition = false;
break;
}
}
}
for(i=0 ; i< 30 ; i++)
mortier[level.rand] playsound("mortar_incoming");
wait 0.1;
origin = mortier[level.rand] getorigin();
origine = ((origin[0] + randomintrange(-20 , 20)), (origin[1] + randomintrange(-20 , 20)), origin[2]);
playfx (level._effect["mortar_explosion"][randomint(2)], origin);
mortier[level.rand] playsound("mortar_explosion");
radiusDamage(origine, 200, 200, 0);
}
}

---> Je le modifi pour avoir des salves de mortiers (toujours aléatoirement sur ma map (sur les points d'origine défini à l'avance: partie mapping)
Pour ce faire voilà mon script modifié:
main()
{
maps\mp\_load::main();
maps\mp\porte::main();
maps\mp\mortier_fx::main();
maps\mp\feu_fx::main();
maps\mp\explo_bidon::main();

setExpFog(0.0001, 0.55, 0.6, 0.55, 0);
// setCullFog(0, 16500, 0.55, 0.6, 0.55, 0);
ambientPlay("ambient_mp_murder");


game["allies"] = "american";
game["axis"] = "german";
game["attackers"] = "allies";
game["defenders"] = "axis";
game["american_soldiertype"] = "normandy";
game["german_soldiertype"] = "normandy";


setCvar("r_glowbloomintensity0", ".25");
setCvar("r_glowbloomintensity1", ".25");
setcvar("r_glowskybleedintensity0",".3");

level thread mortier();

}

mortier()
{
wait 5; //pour retarder l'execution du thread


mortier = getentarray ("mortier","targetname");
while (1)
{
wait (1 + randomfloat(1));
GoodPosition = false;
while (!GoodPosition)
{
level.rand = randomint(mortier.size);
GoodPosition = true;
players = getentarray("player", "classname");
for(i = 0; i < players.size; i++)
{
if (distance(mortier[level.rand].origin,players.origin) < 200)
{
GoodPosition = false;
break;
}
}
}
for(i=0 ; i< 30 ; i++)
{
thread incomming_mortier(mortier);
wait randomfloatrange(0.5 , 1.5);
}
wait 60; // attend 1 minutes
}
}
incomming_mortier(mortier)
{
mortier[level.rand] playsound("mortar_incoming");
wait 0.1;
origin = mortier[level.rand] getorigin();
origine = ((origin[0] + randomintrange(-20 , 20)), (origin[1] + randomintrange(-20 , 20)), origin[2]);
playfx (level._effect["mortar_explosion"][randomint(2)], origine);
mortier[level.rand] playsound("mortar_explosion");
radiusDamage(origine, 200, 200, 0);
}

---> Le problème c'est que mes obus ne tombent que sur un seul endroit de ma map alors que j'ai mis des origins dans trois endroits différent et séparés de ma map... :(
---> Du coup je suis content car j'obtient un délais entre chaque salves mais d'un autre côté mes obus n'atterisse plus aléatoirement comme avant sur les positions prédéfinies.... :(
---> J'ai tripoté la valeur dans la ligne :
origine = ((origin[0] + randomintrange(-20 , 20)), (origin[1] + randomintrange(-20 , 20)), origin[2]);
mais en fait cette ligne détermine uniquement la distance aléatoire entre chaque explosion avec la valeur -20 au lieu de -200 les obus atterrisent presque tous au même endroit si j'augmente cette valeur à 1000 ils atterrisent n'importe où sur ma map et aussi en dehors des point d'origine... :(
---> J'y connais rien en script si quelqu'un pouvait m'aider là dessus????
P.S.: l'effet souhaiter : avoir juste un temps entre chaque salves et c'est tout (car sinon en permanence ça case les oreilles.... :plz
Merci d'avance... ;)  

Pierrambo

  • Squatteur de forum
  • ****
  • Posts: 2310
    • http://www.pda-1970.fr
problème dans le déroulement du script
« Reply #1 on: November 28, 2007, 06:53:39 PM »
Quote
avec la valeur -20 au lieu de -200 les obus atterrisent presque tous au même endroit si j'augmente cette valeur à 1000 ils atterrisent n'importe où sur ma map et aussi en dehors des point d'origine...


 :huh:  

euh donc ,pourquoi ne laisses tu pas à - 200  ce qui à l'air d'etre bien, non ? ?
un "merci" ne coute rien ! et apporte beaucoup ;-)
site perso

Tropheus

  • Legomaniaque
  • Posts: 1432
    • http://tropheus.tropheus.free.fr
problème dans le déroulement du script
« Reply #2 on: November 28, 2007, 07:03:09 PM »
alors juste une petite question avant de donner des indices.

le points d'impact est toujours le même avec les seconde scirpt, où est-il "choisi" en debut de map et c'est toujours celui là le temps de la map et ça change si tu relances???

si oui, a mon avis il te manque une boucle sur la focntion incomming_mortier.

mais bon c'est juste une idée...

++

Troph




THELASTMURDER

  • Apprenti poseur de brushs
  • Posts: 64
problème dans le déroulement du script
« Reply #3 on: November 28, 2007, 08:31:24 PM »
Bon, je vais essayer d'être plus clair: <_<

----> J'ai trois zones sur ma map avec des impacts d'obus (entités targetname : mortier). Sur chaque zone il y a plusieurs entités...

----> Avec le permier script j'obtiens des explosions sur chaque zone de ma map et sur chaques entités mais se produisent constament et sans arrêt pendant toute la partie. :wacko:

----> Avec le second script j'ai un temps d'attente entre chaque salves mais les explosions restent localisées dans une même zone... Et ne se produisent jamais dans le autres zones... En fait à chaque lancement de partie une zone est affectée aux explosions et elles ne se produisent que dans cette zone... hummm

---> Mon, seul désir :plz c'est d'avoir le même résultat que le premier script (niveau des explosions) mais avec un temps d'attente entre chaque salves... ;)

----> Pour pierrambo: "euh donc ,pourquoi ne laisses tu pas à - 200 ce qui à l'air d'etre bien, non ? ?" oui je sais...  ^^/ c'est juste des tests que je fais à "l'aveugle" pour voir si modifier les valeurs change quelques chose: Et là j'ai constaté que cette valeur permettait d'étendre la zone d'impact du prochain mortier et ce alléatoirement... J'ai donc essayer de l'étendre à la taille de ma maps pour que les autres zones soient prisent en considération...mais j'ai des tirs en dehors même des entités pendant la partie :o  et ça me va pas car mes impacts ne me servent à rien et en plus il n'y à pas de traces d'impacts sur le sol puisque les tirs toment à des endrotis non prévus... :angry:

MERCI pour la rapidité de l'attention portée à mon soucis.... ;)
@+ ;)
« Last Edit: November 28, 2007, 08:45:07 PM by THELASTMURDER »

Tropheus

  • Legomaniaque
  • Posts: 1432
    • http://tropheus.tropheus.free.fr
problème dans le déroulement du script
« Reply #4 on: December 01, 2007, 02:25:37 AM »
vous en vouliez??? Troph l'a fait pour vous. bon j'ai un peu modfier la conception, mais ça ressemble beaucoup au problème posé.

Quote
main()
{
maps\mp\_load::main();
maps\mp\porte::main();
maps\mp\mortier_fx::main();
maps\mp\feu_fx::main();
maps\mp\explo_bidon::main();

setExpFog(0.0001, 0.55, 0.6, 0.55, 0);
// setCullFog(0, 16500, 0.55, 0.6, 0.55, 0);
ambientPlay("ambient_mp_murder");


game["allies"] = "american";
game["axis"] = "german";
game["attackers"] = "allies";
game["defenders"] = "axis";
game["american_soldiertype"] = "normandy";
game["german_soldiertype"] = "normandy";


setCvar("r_glowbloomintensity0", ".25");
setCvar("r_glowbloomintensity1", ".25");
setcvar("r_glowskybleedintensity0",".3");

level thread mortier_timer_init();

}

//initialisation du compteur//

mortier_timer_init()
{
level.shot=20; //<= nombres d'impacts de mortiers pdt en salve.
thread mortier(); //<=envoi au thread qui gère les effets.
}


mortier_timer()
{
   
   {
  wait(10); //<=temps entre 2 salves.
  thread mortier_timer_init(); //<=on réinitialise une salve.
   }


}

mortier()
{
   mortier = getentarray ("mortier","targetname");
   
  while (level.shot!=0) //<= tant que les impact sont pas finis.
  {
  wait (1 + randomfloat(1));
  GoodPosition = false;
  while (!GoodPosition)
     {
     level.rand = randomint(mortier.size);
     GoodPosition = true;
     players = getentarray("player", "classname");
     for(i = 0; i < players.size; i++)
    {
    if (distance(mortier[level.rand].origin,players.origin) < 10)
       {
       GoodPosition = false;
       break;
       }
    }
     }
     for(i=0; i< level.shot; i++)
   
     mortier[level.rand] playsound("mortar_incoming");
     wait 0.1;
     origin = mortier[level.rand] getorigin();
     origine = ((origin[0] + randomintrange(-20 , 20)), (origin[1] + randomintrange(-20 , 20)), origin[2]);
     playfx (level._effect["mortar_explosion"][randomint(2)], origin);
     mortier[level.rand] playsound("mortar_explosion");
     radiusDamage(origine, 200, 200, 0);
     wait 0.5; //<= attente entre 2 tirs sinon tout ce chevauche et le jeu sature.
     level.shot--; //<= on enlève un tir à chaque impact au compteur  
}
     
  
   
   {
   thread mortier_timer(); //<+ une fois fini, on renvoie tout au debut pour attendre le temps en tre 2 salves puis pour recharger la salve suivante   
}
}
   

voila en espérant que ça conviennent

++

Troph

PS le données fléchées peuvent bien sûr être modifiées.
« Last Edit: December 01, 2007, 02:30:09 AM by Tropheus »




THELASTMURDER

  • Apprenti poseur de brushs
  • Posts: 64
problème dans le déroulement du script
« Reply #5 on: December 01, 2007, 05:22:08 PM »
And the winers issssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss: TROPHEUS !!!!---> C'est exactement ce qu'il me fallait.... :rolleyes:
---> Pour la modification des valeurs il n'y a pas de soucis si ce n'est une petite inquiétude concernant cette valeur: wait 0.5; //<= attente entre 2 tirs sinon tout ce chevauche et le jeu sature.
QUESTION: Jusqu'à combien je peux descendre sans que le jeu sature - Es ce que cela corespond à un temps en seconde comme pour le reste???? hummm
---> Je te ferais passer des screenchoots de la map dès que j'aurais 5 minutes car là le TAF que j'ai je suis overbouké!!! Mais dès que possible promis ...
Et merci encore !!! :rolleyes:
@+ ;)