Placement aléatoire d'un "group" dans une zone.
Placement aléatoire d'un "group" dans une zone.
#1Bonjour à 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 )
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. @+
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 )
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.
Re: Placement aléatoire d'un "group" dans une zone.
#2Salut,
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.
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.
#3Oui c'est faisable, par du script lua comme tu l'as deviné.
Re: Placement aléatoire d'un "group" dans une zone.
#4En 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):
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 !
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 !
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.
Re: Placement aléatoire d'un "group" dans une zone.
#5YES !
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 ) d'appliquer déja ce que tu as fait je te tient au courant.
encore merci!
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 ) 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.
Re: Placement aléatoire d'un "group" dans une zone.
#6Ben 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.
#7Très intéressant Gal', je m'en servirai surement dans une prochaine mission
Merci
Merci
Re: Placement aléatoire d'un "group" dans une zone.
#8Effectivement j'ai vu ta Fonction maison getRandomLocationInPrefixedZones(prefix) 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 )
merci de ton aide.
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 )
merci de ton aide.
Ancien membre deReactor ONE.
Re: Placement aléatoire d'un "group" dans une zone.
#9Voilà 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.
#10Super ! ça marche nickel un grand merci pour ton aide galevsky
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
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 ?
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
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.
-
- Pilote Philanthrope
- Messages : 582
- Inscription : 09 décembre 2013
Re: Placement aléatoire d'un "group" dans une zone.
#11BonjourOsi_3D a écrit :Super ! ça marche nickel un grand merci pour ton aide galevsky
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
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 ?
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
Avant j'étais sur des hélicos UH-1H / KA-50 / AH-64D maintenant je suis leur ange gardien en A10CII
Re: Placement aléatoire d'un "group" dans une zone.
#12J'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....
Peu de choses sont impossibles avec le lua....
Re: Placement aléatoire d'un "group" dans une zone.
#13@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
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
-
- Pilote Philanthrope
- Messages : 582
- Inscription : 09 décembre 2013
Re: Placement aléatoire d'un "group" dans une zone.
#14Merci j'avoue je mettais jamais trop posé la question, car je me débrouillait bien avec les triggers.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
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
Avant j'étais sur des hélicos UH-1H / KA-50 / AH-64D maintenant je suis leur ange gardien en A10CII
Re: Placement aléatoire d'un "group" dans une zone.
#15Merci pour les infos pareil pour la doc de mist je passais par wiki
Ancien membre deReactor ONE.