Bonjour,
je voudrais créer une wherigo style jeu de l'oie sous Urwigo.
J'ai pour cela une variable var_numero_case qui contient le numéro de la case sur laquelle le joueur se trouve.
Ce que je voudrais pouvoir faire c'est paramétrer le numéro de la case suivante en fonction du résultat du dé.
Jusque là me direz-vous c'est simple, numero_case_suivante= numero_case + var_valeur_de
Là où mon histoire se complique, c'est que je ne souhaite activer que la zone de la case suivante et qu'au moment où c'est à elle d'entrer en jeu, du coup je voudrais pouvoir écrire une syntaxe du genre:
zone_case[(var_valeur_de + var_numero_case)].Active = true
Mes zones se nomment de façon originale zone_case_1, zone_case_2, etc...
J'ai d'abord essayé de recomposer le nom de la zone version chaine de caractère avec [[zone_case]]..(var_valeur_de + var_numero_case). Mais a priori impossible d'y coller la propriété .Active .
J'ai donc ensuite pensé créer une table locale que j'appelle zone_case:
local zone_case = {}
et dans le code généré par urwigo, j'ai remplacé tous les appels à zone_case_1 par zone_case[1], etc...
Mais ça ne fonctionne pas non plus. Pourtant d'un point de vue syntaxique, le zone_case[1].Active = true me paraît correct.
Je me suis ensuite dit que le problème venait de la portée de ma table zone_case. Je l'ai donc "intégrée" à ma cartouche (dans et avant .ZVariables = {... ) en utilisant la même syntaxe que les variables "classiques" créées directement dans Urwigo, mais sans succès.
Voilà si quelqu'un sait comment incorporer dans une table les différentes zones, pour ensuite pouvoir les appeler de façon paramétrée, je suis très preneur.
D'avance merci et félicitations pour les courageux qui m'ont lu jusqu'au bout.
Bonne journée
Bzh972
Stockage de zones dans une table (paramétrage)
Message
Re: Stockage de zones dans une table (paramétrage)
Je me réponds, en partie seulement, à moi-même dans la foulée après avoir posé le problème.
Depuis j'ai presque réussi ce que je voulais mais pour je ne sais quelle raison, pas complètement.
J'ai donc profité de la déclaration de variables de la cartouche pour y ajouter ma table zone_case en calquant la déclaration automatique écrite par urwigo, et l'ai déplacée en amont de la déclaration des zones pour que la variable existe déjà au moment de la déclaration de zones.
-- Cartridge Variables --
zone_case = {}
var_valeur_de = 0
var_numero_case = 0
current_zone = _IrUC("\073\107\103\119\069\071\002\123\002\103\055\119")
_VgBMi = _IrUC("\108\054\060\060\093")
_7uJM = _IrUC("\108\054\060\060\093")
_BmVkw = _IrUC("\015\002\074\026\069\055\002\074\119\069\049")
_Edd1V = _IrUC("\108\054\060\060\093")
_zOyt = _IrUC("\108\054\060\060\093")
la_cartouche.ZVariables = {
zone_case = {},
var_valeur_de = 0,
var_numero_case = 0,
current_zone = _IrUC("\073\107\103\119\069\071\002\123\002\103\055\119"),
_VgBMi = _IrUC("\108\054\060\060\093"),
_7uJM = _IrUC("\108\054\060\060\093"),
_BmVkw = _IrUC("\015\002\074\026\069\055\002\074\119\069\049"),
_Edd1V = _IrUC("\108\054\060\060\093"),
_zOyt = _IrUC("\108\054\060\060\093")
}
Ensuite, je fais ça pour chaque zone:
zone_case_1 = Wherigo.Zone(la_cartouche)' rel='nofollow noopener noreferral' target='_blank' class='external-link'>Wherigo.Zone(la_cartouche)
zone_case_1.Id = "1ee40137-d59d-4e4a-b980-06acbdec718f"
zone_case_1.Name = _IrUC("\124\002\074\119\032\049")
zone_case_1.Description = ""
zone_case_1.Visible = true
zone_case_1.Media = img_chiffre_1
zone_case_1.Icon = img_chiffre_1
zone_case_1.Commands = {}
zone_case_1.DistanceRange = Distance(-1, "feet")
zone_case_1.ShowObjects = "OnEnter"
zone_case_1.ProximityRange = Distance(60, "meters")
zone_case_1.AllowSetPositionTo = false
zone_case_1.Active = false
zone_case_1.Points = {
ZonePoint(14.6209889747886, -61.0509294744633, 0),
ZonePoint(14.6209240910089, -61.0509683664999, 0),
ZonePoint(14.6208702374572, -61.050879853589, 0),
ZonePoint(14.6209545863877, -61.050826879953, 0)
}
zone_case_1.OriginalPoint = ZonePoint(14.6209344724106, -61.0509011436263, 0)
zone_case_1.DistanceRangeUOM = "Feet"
zone_case_1.ProximityRangeUOM = "Meters"
zone_case_1.OutOfRangeName = ""
zone_case_1.InRangeName = ""
zone_case[1] = zone_case_1
je ne fais en fait que rajouter la dernière ligne. Je ne sais pas pourquoi il est visiblement impossible de ne pas passer par l'étape zone_case_1 et de déclarer directement du style:
zone_case[1] = Wherigo.Zone(la_cartouche)
zone_case[1].Id = etc.....
J'ai essayé aussi zone_case[1]["Id"] mais pas mieux.
Enfin au moment de l'appel, cette fonction est maintenant acceptée:
zone_case[(var_valeur_de + var_numero_case)].Active = true
ce qui est un vrai plus par rapport à avant.
Du coup ça me permet a priori de faire ce que je voulais, c'est à dire paramétrer l'activation de la zone correspondant à la case suivante. Mais le passage par l'étape intermédiaire zone_case_1 me paraît un peu bizarre et j'aurais aimé m'en passer. Mais bon, c'est maintenant de l'ordre du détail. Si vous avez des idées je suis quand même bien sûr preneur. Merci
Depuis j'ai presque réussi ce que je voulais mais pour je ne sais quelle raison, pas complètement.
J'ai donc profité de la déclaration de variables de la cartouche pour y ajouter ma table zone_case en calquant la déclaration automatique écrite par urwigo, et l'ai déplacée en amont de la déclaration des zones pour que la variable existe déjà au moment de la déclaration de zones.
-- Cartridge Variables --
zone_case = {}
var_valeur_de = 0
var_numero_case = 0
current_zone = _IrUC("\073\107\103\119\069\071\002\123\002\103\055\119")
_VgBMi = _IrUC("\108\054\060\060\093")
_7uJM = _IrUC("\108\054\060\060\093")
_BmVkw = _IrUC("\015\002\074\026\069\055\002\074\119\069\049")
_Edd1V = _IrUC("\108\054\060\060\093")
_zOyt = _IrUC("\108\054\060\060\093")
la_cartouche.ZVariables = {
zone_case = {},
var_valeur_de = 0,
var_numero_case = 0,
current_zone = _IrUC("\073\107\103\119\069\071\002\123\002\103\055\119"),
_VgBMi = _IrUC("\108\054\060\060\093"),
_7uJM = _IrUC("\108\054\060\060\093"),
_BmVkw = _IrUC("\015\002\074\026\069\055\002\074\119\069\049"),
_Edd1V = _IrUC("\108\054\060\060\093"),
_zOyt = _IrUC("\108\054\060\060\093")
}
Ensuite, je fais ça pour chaque zone:
zone_case_1 = Wherigo.Zone(la_cartouche)' rel='nofollow noopener noreferral' target='_blank' class='external-link'>Wherigo.Zone(la_cartouche)
zone_case_1.Id = "1ee40137-d59d-4e4a-b980-06acbdec718f"
zone_case_1.Name = _IrUC("\124\002\074\119\032\049")
zone_case_1.Description = ""
zone_case_1.Visible = true
zone_case_1.Media = img_chiffre_1
zone_case_1.Icon = img_chiffre_1
zone_case_1.Commands = {}
zone_case_1.DistanceRange = Distance(-1, "feet")
zone_case_1.ShowObjects = "OnEnter"
zone_case_1.ProximityRange = Distance(60, "meters")
zone_case_1.AllowSetPositionTo = false
zone_case_1.Active = false
zone_case_1.Points = {
ZonePoint(14.6209889747886, -61.0509294744633, 0),
ZonePoint(14.6209240910089, -61.0509683664999, 0),
ZonePoint(14.6208702374572, -61.050879853589, 0),
ZonePoint(14.6209545863877, -61.050826879953, 0)
}
zone_case_1.OriginalPoint = ZonePoint(14.6209344724106, -61.0509011436263, 0)
zone_case_1.DistanceRangeUOM = "Feet"
zone_case_1.ProximityRangeUOM = "Meters"
zone_case_1.OutOfRangeName = ""
zone_case_1.InRangeName = ""
zone_case[1] = zone_case_1
je ne fais en fait que rajouter la dernière ligne. Je ne sais pas pourquoi il est visiblement impossible de ne pas passer par l'étape zone_case_1 et de déclarer directement du style:
zone_case[1] = Wherigo.Zone(la_cartouche)
zone_case[1].Id = etc.....
J'ai essayé aussi zone_case[1]["Id"] mais pas mieux.
Enfin au moment de l'appel, cette fonction est maintenant acceptée:
zone_case[(var_valeur_de + var_numero_case)].Active = true
ce qui est un vrai plus par rapport à avant.
Du coup ça me permet a priori de faire ce que je voulais, c'est à dire paramétrer l'activation de la zone correspondant à la case suivante. Mais le passage par l'étape intermédiaire zone_case_1 me paraît un peu bizarre et j'aurais aimé m'en passer. Mais bon, c'est maintenant de l'ordre du détail. Si vous avez des idées je suis quand même bien sûr preneur. Merci