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

Bugs, problèmes d'installation, de patch, optimisation
Avatar de l’utilisateur

Topic author
Osi_3D
Nouvelle Recrue
Nouvelle Recrue
Messages : 53
Inscription : 27 mai 2014

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

#1

Message 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. @+
Ancien membre deReactor ONE.
Avatar de l’utilisateur

Psycho
Pilote Philanthrope
Pilote Philanthrope
Messages : 4189
Inscription : 04 décembre 2003

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

#2

Message 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.
Image i5 13600KF@5.1Ghz / Asus STRIX Z790 / RTX 3090 Ti STRIX LC OC / 32Go DDR4 Gskill / SSD 980 PRO M.2 1To / Asus 27' / HOTAS TM Warthog / Quest 3 / Point-ctrl v2
Avatar de l’utilisateur

galevsky
Pilote Confirmé
Pilote Confirmé
Messages : 3102
Inscription : 22 décembre 2002

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

#3

Message par galevsky »

Oui c'est faisable, par du script lua comme tu l'as deviné.
Image
Avatar de l’utilisateur

galevsky
Pilote Confirmé
Pilote Confirmé
Messages : 3102
Inscription : 22 décembre 2002

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

#4

Message 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))
Dernière modification par galevsky le mar. mai 27, 2014 3:48 pm, modifié 1 fois.
Image
Avatar de l’utilisateur

Topic author
Osi_3D
Nouvelle Recrue
Nouvelle Recrue
Messages : 53
Inscription : 27 mai 2014

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

#5

Message 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!
Dernière modification par Osi_3D le mar. mai 27, 2014 1:06 pm, modifié 1 fois.
Ancien membre deReactor ONE.
Avatar de l’utilisateur

galevsky
Pilote Confirmé
Pilote Confirmé
Messages : 3102
Inscription : 22 décembre 2002

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

#6

Message 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...
Image
Avatar de l’utilisateur

Psycho
Pilote Philanthrope
Pilote Philanthrope
Messages : 4189
Inscription : 04 décembre 2003

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

#7

Message par Psycho »

Très intéressant Gal', je m'en servirai surement dans une prochaine mission :yes:
Merci
Image i5 13600KF@5.1Ghz / Asus STRIX Z790 / RTX 3090 Ti STRIX LC OC / 32Go DDR4 Gskill / SSD 980 PRO M.2 1To / Asus 27' / HOTAS TM Warthog / Quest 3 / Point-ctrl v2
Avatar de l’utilisateur

Topic author
Osi_3D
Nouvelle Recrue
Nouvelle Recrue
Messages : 53
Inscription : 27 mai 2014

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

#8

Message 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.
Ancien membre deReactor ONE.
Avatar de l’utilisateur

galevsky
Pilote Confirmé
Pilote Confirmé
Messages : 3102
Inscription : 22 décembre 2002

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

#9

Message 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))
Image
Avatar de l’utilisateur

Topic author
Osi_3D
Nouvelle Recrue
Nouvelle Recrue
Messages : 53
Inscription : 27 mai 2014

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

#10

Message 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 ?
Ancien membre deReactor ONE.
Avatar de l’utilisateur

Ghost_Dragon03
Pilote Philanthrope
Pilote Philanthrope
Messages : 582
Inscription : 09 décembre 2013

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

#11

Message 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
Je vole sur A10CII au 06th MHR (Multirole Helicopter Regiment ) - discord https://discord.gg/bzDJvQrnTQ

Avant j'étais sur des hélicos UH-1H / KA-50 / AH-64D maintenant je suis leur ange gardien en A10CII
Avatar de l’utilisateur

galevsky
Pilote Confirmé
Pilote Confirmé
Messages : 3102
Inscription : 22 décembre 2002

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

#12

Message 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....
Image
Avatar de l’utilisateur

galevsky
Pilote Confirmé
Pilote Confirmé
Messages : 3102
Inscription : 22 décembre 2002

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

#13

Message 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
Image
Avatar de l’utilisateur

Ghost_Dragon03
Pilote Philanthrope
Pilote Philanthrope
Messages : 582
Inscription : 09 décembre 2013

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

#14

Message 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.
Je vole sur A10CII au 06th MHR (Multirole Helicopter Regiment ) - discord https://discord.gg/bzDJvQrnTQ

Avant j'étais sur des hélicos UH-1H / KA-50 / AH-64D maintenant je suis leur ange gardien en A10CII
Avatar de l’utilisateur

Topic author
Osi_3D
Nouvelle Recrue
Nouvelle Recrue
Messages : 53
Inscription : 27 mai 2014

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

#15

Message par Osi_3D »

Merci pour les infos pareil pour la doc de mist je passais par wiki
Ancien membre deReactor ONE.
Répondre

Revenir à « Support technique »