• Informations
    Merci d'utiliser votre pseudo Geocaching.com pour vous inscrire. Vous pouvez ensuite vous présenter et vous inscrire sur la carte des membres.

Stockage de zones dans une table (paramétrage)

Section dédié à la gestion de ces caches un peu particulières...

Stockage de zones dans une table (paramétrage)

Messagepar bzh972 » Dim 14 Mai 2017 16:48

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
bzh972
membre
 
Messages: 3
Enregistré le: Lun 14 Nov 2016 01:35
Membre:: Basic

Re: Stockage de zones dans une table (paramétrage)

Messagepar bzh972 » Dim 14 Mai 2017 16:53

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
bzh972
membre
 
Messages: 3
Enregistré le: Lun 14 Nov 2016 01:35
Membre:: Basic


Retourner vers Caches Wherigo

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité