Page 1 sur 1

Placement aléatoire d'un "group" dans une zone.

Publié : mar. mai 27, 2014 9:22 am
par Osi_3D
Bonjour à tous,
Existe t'il un moyen de placer un groupe ou une unité aléatoirement dans une zone donnée ? à la façon de l'éditeur de mission des Silent Hunter.
Pour exemple j'aimerai faire apparaitre une Shilka placée aléatoirement dans une zone de 10 km, pour pouvoir mettre un élément de surprise agréable (ça dépend pour qui!) quand on relance la mission.
Je me doute qu'il faille passer par les systèmes de script LUA ou MIssion Scripting Tools (Mist) (mais là j'y cromprends nada :crying: :crying: )
Via le forum de C6 j'ai vu un sujet sur les scripts sur le site des Black-Reapers mais j'ai pas trouvé mon bonheur!!
Si des personnes utilisant ce style de script peuvent m'aider merci. @+

Re: Placement aléatoire d'un "group" dans une zone.

Publié : mar. mai 27, 2014 11:07 am
par Psycho
Salut,
Je ne sais pas si c'est possible, si ça ne l'est pas tu peux contourner le problème en plaçant plusieurs shilkas dans ta zone, tous désactivés, et les activer aléatoirement en jouant avec les Flags et le paramètre aléatoire. Je n'ai pas l'éditeur sous les yeux mais je suis quasi-certain que ça marche.

Re: Placement aléatoire d'un "group" dans une zone.

Publié : mar. mai 27, 2014 11:30 am
par galevsky
Oui c'est faisable, par du script lua comme tu l'as deviné.

Re: Placement aléatoire d'un "group" dans une zone.

Publié : mar. mai 27, 2014 11:57 am
par galevsky
En gros, tu sauves le script suivant dans un fichier que tu appelles genShilka.lua, et ce fichier doit être executé par un trigger 2s après le lancement de la mission. Regarde ici pour un exemple (le fichier s'appelle baksan.lua mais c'est pareil):

Image
http://wiki.3rd-wing.net/index.php?titl ... 3.A9diteur

Dans l'éditeur, tu définies des zones 'trigger areas' dont le nom commence par shilka, donc shilka1, shilka2, autant que tu en veux. Le script génèrera le shilka dans un endroit aléatoire pris dans une des zones dont le nom commence par 'shilka'.

Je n'ai pas testé le script car recomposé vite-fait à la main, je vais le faire comme ça tu auras un truc qui marche, mais l'idée est là: c'est comme ça que sont faites les missions CSAR typiquement, car si le concepteur participe au vol et sait où il a placé le mec à aller chercher... ça n'a plus d'interêt ! :emlaugh:

Code : Tout sélectionner

-------------------------- -- Unique ID generation -- -------------------------- generatedUnitsNb = 100 function getGenerationId() generatedUnitsNb = generatedUnitsNb + 10 return generatedUnitsNb end function getRandomLocationInPrefixedZones(prefix) local prefixedZones={} for zoneName, zone in pairs(mist.DBs.zonesByName) do if (string.find(zoneName, "^"..prefix..".*")) then table.insert(prefixedZones,zone) end end if table.getn(prefixedZones) == 0 then return nil end local chosenZone = prefixedZones[math.random(#prefixedZones)]; local result = {} result.x = chosenZone.point.x + math.random(chosenZone.radius * -1, chosenZone.radius) result.z = chosenZone.point.z + math.random(chosenZone.radius * -1, chosenZone.radius) return result end function getAAAGroup(chosenUnit, chosenSkill, chosenForce, chosenLocation) local unitId = getGenerationId() local data = { ["visible"] = false, ["groupId"] = unitId, ["tasks"] = { }, ["hidden"] = false, ["units"] = getAAAUnit(unitId, chosenUnit, choseSkill, chosenForce, chosenLocation), ["y"] = chosenLocation.y, ["x"] = chosenLocation.x, ["name"] = chosenUnit.." - "..unitId, } return data end function getAAAUnit(unitId, chosenUnit, chosenSkill, chosenForce, chosenLocation) local units = {} for i=1, chosenForce do LastGeneratedGroundUnitId = unitId+i units[i] = { ["type"] = chosenUnit["name"], ["y"] = chosenLocation.y, ["x"] = chosenLocation.x, ["name"] = chosenUnit..unitId..i, ["heading"] = math.random(360), ["unitId"] = unitId+i, ["skill"] = chosenSkill, ["playerCanDrive"] = true, } end return units end unitsSkills = { 'average', 'good', 'excellent' } local chosenSkill = unitsSkills[math.random(#unitsSkills)]; local chosenForce = 1 local chosenLocation = getRandomLocationInPrefixedZones('shilka') coalition.addGroup('RUSSIA', Group.Category.GROUND, getAAAGroup('ZSU-23-4 Shilka', chosenSkill, chosenForce, chosenLocation))

Re: Placement aléatoire d'un "group" dans une zone.

Publié : mar. mai 27, 2014 12:44 pm
par Osi_3D
YES ! :cheer:
merci , effectivement je suis tombé sur cette commande de mist GetRandomPointInCircle.
Je saute sur l'éditeur de DCS pour essayé (car je ne maitrise pas encore toutes ces lignes de codes :emlaugh: ) d'appliquer déja ce que tu as fait je te tient au courant.
encore merci!

Re: Placement aléatoire d'un "group" dans une zone.

Publié : mar. mai 27, 2014 12:57 pm
par galevsky
Ben là j'utilise une fonction maison getRandomLocationInPrefixedZones, j'ai pas regardé mais ça doit faire pareil que le GetRandomPointInCircle mais avec en plus l'utilisation des noms de zones...

Re: Placement aléatoire d'un "group" dans une zone.

Publié : mar. mai 27, 2014 1:23 pm
par Psycho
Très intéressant Gal', je m'en servirai surement dans une prochaine mission :yes:
Merci

Re: Placement aléatoire d'un "group" dans une zone.

Publié : mar. mai 27, 2014 2:02 pm
par Osi_3D
Effectivement j'ai vu ta Fonction maison getRandomLocationInPrefixedZones(prefix) :yes: j'aurai jamais trouvé seul !
Par contre vu que je débute dans l'application des scripts j'ai des petites questions...
J'ai bien suivi à la lettre tes indications, si je comprends bien on ne créer pas de shilka dans l'éditeur elle est générée dans le fichier LUA avec ses competences et son appartenance de pays ?
on place simplement un trigger dans l'éditeur appelé shilka dans l'exemple là ou on veut la voir apparaitre.
Maintenant quand la mission se lance j'ai un message d'erreur qui apparait au bout de 2s (normal) me disant que le pays de l'unité n'est pas trouvé , tu pourra publier comme tu l'as dit un exemple pret à l'emploi pour que je puisse voir ce que tu changes comme ligne dans le script genShilka.lua ? (ok je suis trop impatient de voir fonctionner tout ça et surtout de comprendre les mecanismes :Jumpy: )
merci de ton aide.

Re: Placement aléatoire d'un "group" dans une zone.

Publié : mar. mai 27, 2014 3:46 pm
par galevsky
Voilà le script qui marche.... j'avais fais 2 boulettes en simplifiant le truc car c'est issue de fonction persos qui se basent sur une banque de données pour aléatoirement choisir le type d'unités etc...

Code : Tout sélectionner

-------------------------- -- Unique ID generation -- -------------------------- generatedUnitsNb = 100 function getGenerationId() generatedUnitsNb = generatedUnitsNb + 10 return generatedUnitsNb end function getRandomLocationInPrefixedZones(prefix) local prefixedZones={} for zoneName, zone in pairs(mist.DBs.zonesByName) do if (string.find(zoneName, "^"..prefix..".*")) then table.insert(prefixedZones,zone) end end if table.getn(prefixedZones) == 0 then return nil end local chosenZone = prefixedZones[math.random(#prefixedZones)]; local result = {} result.x = chosenZone.point.x + math.random(chosenZone.radius * -1, chosenZone.radius) result.z = chosenZone.point.z + math.random(chosenZone.radius * -1, chosenZone.radius) return result end function getAAAUnit(unitId, chosenUnit, chosenSkill, chosenForce, chosenLocation) local units = {} for i=1, chosenForce do LastGeneratedGroundUnitId = unitId+i units[i] = { ["type"] = chosenUnit, ["y"] = chosenLocation.z, ["x"] = chosenLocation.x, ["name"] = chosenUnit..unitId..i, ["heading"] = math.random(360), ["unitId"] = unitId+i, ["skill"] = chosenSkill, ["playerCanDrive"] = true, } end return units end function getAAAGroup(chosenUnit, chosenSkill, chosenForce, chosenLocation) local unitId = getGenerationId() local data = { ["visible"] = true, ["groupId"] = unitId, ["tasks"] = { }, ["hidden"] = false, ["units"] = getAAAUnit(unitId, chosenUnit, choseSkill, chosenForce, chosenLocation), ["y"] = chosenLocation.y, ["x"] = chosenLocation.x, ["name"] = chosenUnit.." - "..unitId, } return data end unitsSkills = { 'average', 'good', 'excellent' } local chosenSkill = unitsSkills[math.random(#unitsSkills)]; local chosenForce = 1 local chosenLocation = getRandomLocationInPrefixedZones('shilka') coalition.addGroup(country.id["RUSSIA"], Group.Category.GROUND, getAAAGroup('ZSU-23-4 Shilka', chosenSkill, chosenForce, chosenLocation))

Re: Placement aléatoire d'un "group" dans une zone.

Publié : mar. mai 27, 2014 5:35 pm
par Osi_3D
Super ! ça marche nickel un grand merci pour ton aide galevsky :notworthy
J'ai commencé à décortiquer ton script et avec la doc je commence à saisir les rudiments ça me fait une super base de départ :busted_co
Et par la suite est-il possible d'appeler un template d'un groupe composé de différents véhicules (fichier lua) à la place de la Shilka ligne function getAAAUnit ?

Re: Placement aléatoire d'un "group" dans une zone.

Publié : mar. mai 27, 2014 6:20 pm
par Ghost_Dragon03
Osi_3D a écrit :Super ! ça marche nickel un grand merci pour ton aide galevsky :notworthy
J'ai commencé à décortiquer ton script et avec la doc je commence à saisir les rudiments ça me fait une super base de départ :busted_co
Et par la suite est-il possible d'appeler un template d'un groupe composé de différents véhicules (fichier lua) à la place de la Shilka ligne function getAAAUnit ?
Bonjour

Tu parle de quelle doc ??? car si il existe une documentation expliquant le fonctionnement des script je suis preneur.

Merci d'avance pour vos réponses

Re: Placement aléatoire d'un "group" dans une zone.

Publié : mar. mai 27, 2014 6:21 pm
par galevsky
J'ai une banque d'unités dans laquelle je tape pour générer des choses grâce au menu F-10. Sachant que j'ai aussi le nombre d'humain à bord de chaque type d'appareil, je peux générer le bon nombre...

Peu de choses sont impossibles avec le lua....

Re: Placement aléatoire d'un "group" dans une zone.

Publié : mar. mai 27, 2014 6:24 pm
par galevsky
@Ghost_Dragon03: ben depuis toujours il existe la doc pour le scripting...


pour la partie Scripting Engine d'ED: http://wiki.hoggit.us/view/Simulator_Sc ... umentation
pour la partie Mist, en plus du .pdf qui vient avec le script, il y a: http://wiki.hoggit.us/view/Mission_Scri ... umentation

Re: Placement aléatoire d'un "group" dans une zone.

Publié : mar. mai 27, 2014 6:28 pm
par Ghost_Dragon03
galevsky a écrit :@Ghost_Dragon03: ben depuis toujours il existe la doc pour le scripting...


pour la partie Scripting Engine d'ED: http://wiki.hoggit.us/view/Simulator_Sc ... umentation
pour la partie Mist, en plus du .pdf qui vient avec le script, il y a: http://wiki.hoggit.us/view/Mission_Scri ... umentation
Merci j'avoue je mettais jamais trop posé la question, car je me débrouillait bien avec les triggers.

Je pensais que c’était super complexe mais je vois qu’il y a énormément de personne qui les utilisent, donc je vais voir ça encore merci.

Re: Placement aléatoire d'un "group" dans une zone.

Publié : mar. mai 27, 2014 7:20 pm
par Osi_3D
Merci pour les infos pareil pour la doc de mist je passais par wiki