Interragir avec les constantes du fichier SDL en temps réel
3 participants
Page 1 sur 1
Interragir avec les constantes du fichier SDL en temps réel
J'aimerais avoir un peu d'explication concernant ce point.
J'aimerais pouvoir interragir avec les constantes du fichier SDL du quartier en temps réel. Malheureusement, je connais que leurs utilisations sous la console Plasma ce qui ne permet pas grand chose .
Je voudrais un exemple de scripts sous la console Python. Par exemple, faire apparaître des citrouilles ou partir les feux d'artifices de la fontaine centrale.
Merci!
J'aimerais pouvoir interragir avec les constantes du fichier SDL du quartier en temps réel. Malheureusement, je connais que leurs utilisations sous la console Plasma ce qui ne permet pas grand chose .
Je voudrais un exemple de scripts sous la console Python. Par exemple, faire apparaître des citrouilles ou partir les feux d'artifices de la fontaine centrale.
Merci!
V@-Annabelle- Modérateur
- Messages : 340
Date d'inscription : 14/05/2010
Localisation : Canada
Re: Interragir avec les constantes du fichier SDL en temps réel
Voici le code que j'utilise moi :
- Code:
def SetSDL(name, value):
sdl = PtGetAgeSDL()
sdl[name] = (value,)
Re: Interragir avec les constantes du fichier SDL en temps réel
Ce code ne fonctionne pas.
Ça me donne un message d'erreur. Je doute que cela m'aide en quoi que ce soit. Je veux pouvoir modifier un SDL sans quitter l'âge et l'appliquer à tous les gens présents également.
Ça me donne un message d'erreur. Je doute que cela m'aide en quoi que ce soit. Je veux pouvoir modifier un SDL sans quitter l'âge et l'appliquer à tous les gens présents également.
V@-Annabelle- Modérateur
- Messages : 340
Date d'inscription : 14/05/2010
Localisation : Canada
Re: Interragir avec les constantes du fichier SDL en temps réel
Hmm, ça fonctionne pour moi.
Tu dois l'utiliser ainsi: 'SetSDL("nb01FountainVis", 2)' (par exemple).
Tu dois l'utiliser ainsi: 'SetSDL("nb01FountainVis", 2)' (par exemple).
Re: Interragir avec les constantes du fichier SDL en temps réel
La commande proposée par Lyrositeur est correcte.
Pour ma part, dans un soucis de rapidité et afin d'éviter les frappes inutiles, je me suis fabriqué un script appelé Voir() qui gère les cas les plus courants et que j'améliore en fonction de mes tests.
Le script permet de placer ou d'enlever des objets SDL dans un âge, comme tu le souhaites dans ta question.
Voici le code :
Comme tu peux le voir, le code est assez long. Tout simplement car je crée, avant de lancer la commande sdl[] , un dictionnaire qui reprend ce que je veux voir apparaître ou disparaître dans différents âges. Ce dictionnaire évolue donc au fil du temps car je rajoute des objets d'autres âges et fur-et-à-mesure que mes test sont concluants.
Actuellement, j'ai traité deux âges : le quartier et la ville. J'ai déjà préparé la section Relto mais encore rien mis dedans...
Comment utiliser ce script?
Je vais prendre un exemple. Imaginons que je veuille rendre visible les lampions du quartier.
C'est un cas qui est repris dans mon dictionnaire à la ligne elif objet == "lanternes" or objet == "lampions" or objet == "la":
Je dois juste taper Voir ("lanternes") ou voir ("lampions") ou tout simplement voir ("la") pour voir les lampions du quartier.
Si je veux les enlever je tape Voir ("lanternes",False)
Les mots que tu places dans ton dictionnaire sont des mots faciles à retenir. Tu y mets ce que tu veux et autant que tu veux simplement en rajoutant un or objet == "motquetuveuxenminuscules". La seule chose c'est qu'il n'y ait pas deux fois le même nom d'objet dans un même âge et qu'ils soient écrits en minuscules.
Lorsque tu appelles la commande Voir(), tu peux écrire les mots avec ou sans majuscule car le programme va de toute façon les transformer en minuscules avant de regarder s'ils sont repris dans ton dictionnaire.
Maintenant, lorsque je fais mes tests, les objets ne sont pas encore repris dans mon dictionnaire. Alors je dois utiliser le script en tapant le nom exact de l'objet sdl à voir ou à enlever. Par exemple, si je veux enlever la page du livre de Yeesha dans Descent, je tape :
Voir('dsntYeeshaPageMusicPlayerVis',False,False)
dsntYeeshaPageMusicPlayerVis est le nom exact de la page du livre de Yeesha qui place la boîte à musique dans notre Relto
Le premier False dit de l'enlever (True la replace)
Le second False dit que je n'utilise pas mon dictionnaire et que donc le mot tapé est le nom réel de l'objet.
Si le résultat me convient, je rajoute cela dans mon dictionnaire juste avant la ligne (en fin de script)
if objet != "" :
sdl[objet]=(valeur,)
comme ceci :
La prochaine fois que je voudrais voir apparaître cette page à Descent je n'aurai plus qu'à taper Voir('pm') pour la placer ou Voir('pm', False) pour l'enlever.
Je suppose que tu vas me demander de t'envoyer ce script pour ne pas devoir le retaper ? . Je vais donc anticiper ta demande et te l'envoyer par mail...
Pour ma part, dans un soucis de rapidité et afin d'éviter les frappes inutiles, je me suis fabriqué un script appelé Voir() qui gère les cas les plus courants et que j'améliore en fonction de mes tests.
Le script permet de placer ou d'enlever des objets SDL dans un âge, comme tu le souhaites dans ta question.
Voici le code :
- Code:
def Voir(objet='',valeur=True,dico=True):
#Pour fichiers SDL: True pour placer, False pour enlever, dico False : pour utiliser le nom tel quel
sdl=PtGetAgeSDL()
ageName = PtGetAgeName()
print ageName
if dico==True:
objet=objet.lower()
if ageName == "Neighborhood":
#objets du quartier
if objet == "beachball" or objet == "ballon" or objet == "plage" or objet == "b" :
objet = "nb01BeachBallVis"
elif objet == "garden" or objet == "tsogal" or objet == "delin" or objet == "lg" :
objet = "nb01LinkBookEderToggle"
livre=GetSDL(objet)
if livre==0:
valeur=2
elif livre==2:
valeur=3
else:
valeur=2
elif objet == "happynewyear" or objet == "bonne annee" or objet == "ba":
objet = "nb01HappyNewYearVis"
elif objet == "camera" or objet == "video" or objet == "c":
objet = "nb01WebCamVis"
elif objet == "rat" or objet == "r":
objet = "nb01RatCreatureVis"
elif objet == "horloge" or objet == "clock" or objet == "h":
objet = "nb01ClockVis"
elif objet == "pancarte" or objet == "chevalet" or objet == "p":
objet = "nb01BulletinBoardVis"
elif objet == "teledahn" or objet == "livre teledahn" or objet == "t":
objet = "nb01LinkBookTeledahnVis"
elif objet == "yeesha" or objet == "page" or objet == "y":
objet = "nb01YeeshaPage07Vis"
elif objet == "thanksgiving" or objet == "thanks" or objet == "tg":
objet = "nb01ThanksgivingVis"
elif objet == "lanternes" or objet == "lampions" or objet == "la":
objet = "nb01LanternsVis"
elif objet == "cones" or objet == "co":
objet = "nb01ConesVis"
elif objet == "portes" or objet == "oeuf" or objet == "po":
objet = "nb01PrivateRoomsOuterDoorEnabled"
elif objet == "ayhoheek" or objet == "jeu" or objet == "a": #valeur 2 pour un jeu fonctionnel, 1 pour table eteinte
sdl['nb01Ayhoheek5Man1State']=(valeur,)
objet = "nb01AyhoheekAccountingFunc"
elif objet == "tapisserie" or objet == "etoffe" or objet == "ta":
sdl['nb01JourneyCloth1Vis']=(valeur,)
objet = "nb01JourneyCloth2Vis"
elif objet == "bateau" or objet == "boat" or objet == "bateau bahro" or objet == "bb":
objet = "nb01BahroBoatsRun"
sdl['nb01BahroBoatsEnabled']=(valeur,)
sdl['nb01BahroBoatsChance']=(valeur,)
sdl['nb01BahroBoatsProximity']=(valeur,)
elif objet == "feu" or objet == "artifice" or objet == "feu artifice" or objet == "f":
objet = "nb01FireworksOnBalcony"
if valeur==1:
sdl['nb01HappyNewYearVis']=(valeur,)
sdl['nb01FireworksOnBanner']=(valeur,)
sdl['nb01FireworksOnFountain']=(valeur,)
elif objet == "lumieres" or objet == "lumieres lac" or objet == "lumieres ville" or objet == "l":
objet = "nb01LakeLightState"
sdl['nb01CityLightsArchState']=(valeur,)
sdl['nb01CityLightsConstruction01Vis']=(valeur,)
sdl['nb01CityLightsConstruction02Vis']=(valeur,)
sdl['nb01CityLightsConstruction03Vis']=(valeur,)
sdl['nb01CityLightsConstruction04Vis']=(valeur,)
sdl['nb01LigtsGreatZeroVis']=(valeur,)
sdl['nb01CityLightsMoving01Vis']=(valeur,)
sdl['nb01CityLightsMoving02Vis']=(valeur,)
sdl['nb01CityLightsMoving03Vis']=(valeur,)
sdl['nb01CityLightsHarborVis']=(valeur,)
elif objet == "eau" or objet == "water" or objet == "e":
objet = "nb01FountainWaterVis"
sdl['nb01WaterfallVis']=(valeur,)
elif objet == "lampes" or objet == "lampes quartier" or objet == "lumieres quartier" or objet == "lq":
objet = "nb01FireMarbles1Vis"
sdl['nb01FireMarbles2Vis']=(valeur,)
sdl['nb01GardenLightsFunc']=(valeur,)
sdl['nb01BlueLightOn']=(valeur,)
sdl['nb01GreenLightOn']=(valeur,)
sdl['nb01OrangeLightOn']=(valeur,)
sdl['nb01GardenLightsVis']=(valeur,)
sdl['nb01LanternsVis']=(valeur,)
sdl['nb01LampOption01Vis']=(valeur,)
sdl['nb01WaterfallTorchesVis']=(valeur,)
sdl['nb01ResidenceAdditionsVis']=(valeur,)
elif objet == "documents" or objet == "doc" or objet == "livres" or objet == "d":
sdl['nb01KiNexusJournalVis']=(valeur,)
sdl['nb01Poetry1JournalVis']=(valeur,)
sdl['nb01LinkBookNexusVis']=(valeur,)
sdl['nb01HoodInfoImagerVis']=(valeur,)
sdl['nb01DRCImagerVis']=(valeur,)
sdl['nb01PlayerImagerVis']=(valeur,)
sdl['nb01YeeshaPage07Vis']=(valeur,)
sdl['nb01DRCInfoBoardsVis']=(valeur,)
sdl['nb01LinkBookGZVis']=(valeur,)
sdl['nb01LinkBookTeledahnVis']=(valeur,)
sdl['nb01LinkBookGarrisonVis']=(valeur,)
sdl['nb01BahroStonePedestalVis']=(valeur,)
sdl['nb01DniPaperVis']=(valeur,)
sdl['nb01BulletinBoardVis']=(valeur,)
objet = "nb01LinkBookEderToggle"
if valeur==1:
valeur=2
elif objet == "bahro" or objet == "bh":
objet = "nb01BahroPedestalShoutRun"
elif objet == "barrieres" or objet == "travaux" or objet == "barricades" or objet == "tr":
objet = "nb01CommunityAreaState"
if valeur == 0:
valeur = 2
elif ageName == "Personal":
#objets du Relto
pass
elif ageName == "city":
#objets de la ville
if objet == "lightmeter" or objet == "luxmetre" or objet == "lm" :
objet = "islmLakeLightMeterVis"
elif objet == "annonceur" or objet == "advert" or objet == "an" :
objet = "islmReaderBoardVis"
elif objet == "tapisseries" or objet == "etoffes" or objet == "ta" :
objet = "islmJourneyCloth05Vis"
sdl['islmJourneyCloth01Vis']=(valeur,)
sdl['islmJourneyCloth02Vis']=(valeur,)
sdl['islmJourneyCloth03Vis']=(valeur,)
sdl['islmJourneyCloth04Vis']=(valeur,)
elif objet == "Teledahn" or objet == "Te":
sdl['islmTeledahnLinkLibraryExteriorVis']=(valeur,)
objet = 'islmTeledahnLinkCourtyardVis'
if objet != "" :
sdl[objet]=(valeur,)
Comme tu peux le voir, le code est assez long. Tout simplement car je crée, avant de lancer la commande sdl[] , un dictionnaire qui reprend ce que je veux voir apparaître ou disparaître dans différents âges. Ce dictionnaire évolue donc au fil du temps car je rajoute des objets d'autres âges et fur-et-à-mesure que mes test sont concluants.
Actuellement, j'ai traité deux âges : le quartier et la ville. J'ai déjà préparé la section Relto mais encore rien mis dedans...
Comment utiliser ce script?
Je vais prendre un exemple. Imaginons que je veuille rendre visible les lampions du quartier.
C'est un cas qui est repris dans mon dictionnaire à la ligne elif objet == "lanternes" or objet == "lampions" or objet == "la":
Je dois juste taper Voir ("lanternes") ou voir ("lampions") ou tout simplement voir ("la") pour voir les lampions du quartier.
Si je veux les enlever je tape Voir ("lanternes",False)
Les mots que tu places dans ton dictionnaire sont des mots faciles à retenir. Tu y mets ce que tu veux et autant que tu veux simplement en rajoutant un or objet == "motquetuveuxenminuscules". La seule chose c'est qu'il n'y ait pas deux fois le même nom d'objet dans un même âge et qu'ils soient écrits en minuscules.
Lorsque tu appelles la commande Voir(), tu peux écrire les mots avec ou sans majuscule car le programme va de toute façon les transformer en minuscules avant de regarder s'ils sont repris dans ton dictionnaire.
Maintenant, lorsque je fais mes tests, les objets ne sont pas encore repris dans mon dictionnaire. Alors je dois utiliser le script en tapant le nom exact de l'objet sdl à voir ou à enlever. Par exemple, si je veux enlever la page du livre de Yeesha dans Descent, je tape :
Voir('dsntYeeshaPageMusicPlayerVis',False,False)
dsntYeeshaPageMusicPlayerVis est le nom exact de la page du livre de Yeesha qui place la boîte à musique dans notre Relto
Le premier False dit de l'enlever (True la replace)
Le second False dit que je n'utilise pas mon dictionnaire et que donc le mot tapé est le nom réel de l'objet.
Si le résultat me convient, je rajoute cela dans mon dictionnaire juste avant la ligne (en fin de script)
if objet != "" :
sdl[objet]=(valeur,)
comme ceci :
- Code:
elif ageName == "Descent":
#objets de Descent
if objet == "page" or objet == "musique" or objet == "pm" :
objet = "dsntYeeshaPageMusicPlayerVis"
La prochaine fois que je voudrais voir apparaître cette page à Descent je n'aurai plus qu'à taper Voir('pm') pour la placer ou Voir('pm', False) pour l'enlever.
Je suppose que tu vas me demander de t'envoyer ce script pour ne pas devoir le retaper ? . Je vais donc anticiper ta demande et te l'envoyer par mail...
V@-Michel- Admin
- Messages : 1172
Date d'inscription : 13/05/2010
Age : 69
Localisation : Belgique
Re: Interragir avec les constantes du fichier SDL en temps réel
Oui STP Michel J'aimerais l'obtenir par mail.
J'espère que je pourrai le voir ce soir. Je ne suis pas certaine de conserver du courant toute la soirée... je vais préparer mon souper d'avance sinon...
J'espère que je pourrai le voir ce soir. Je ne suis pas certaine de conserver du courant toute la soirée... je vais préparer mon souper d'avance sinon...
V@-Annabelle- Modérateur
- Messages : 340
Date d'inscription : 14/05/2010
Localisation : Canada
Re: Interragir avec les constantes du fichier SDL en temps réel
Il est vraiment super ton script Voir.py Michel !
Quand j'essaie d'importer tes scripts du site du forum, ça ne marche jamais.
Vu que tu m'as envoyé ton script tel quel par mail, il fonctionne parfaitement...il faut tout de même que je lui applique une petite retouche --> Je sais que tu veux que ton nom apparaisse sur tes scripts, je transforme les 3 ou 4 lignes que tu donnes pour qu'elles deviennent des commentaires (elles passent de rouge à vert) sinon tes scripts ne fonctionnent pas.
Il faut que vous avez pris connaissance du script Voir.py, tu peux taper les valeurs de son dictionnaire dans la commande Voir.Voir("horloge",True,) et tu obtiens l'horloge en 1 sec. Les noms du dictionnaires peuvent être modifié mais Michel à quand même mis 3 choix pour chaque SDL et ses choix sont logiques. L'horloge s'appelle avec "horloge", les feux d'artifices s'appellent avec "feu", etc...
Quand j'essaie d'importer tes scripts du site du forum, ça ne marche jamais.
Vu que tu m'as envoyé ton script tel quel par mail, il fonctionne parfaitement...il faut tout de même que je lui applique une petite retouche --> Je sais que tu veux que ton nom apparaisse sur tes scripts, je transforme les 3 ou 4 lignes que tu donnes pour qu'elles deviennent des commentaires (elles passent de rouge à vert) sinon tes scripts ne fonctionnent pas.
Il faut que vous avez pris connaissance du script Voir.py, tu peux taper les valeurs de son dictionnaire dans la commande Voir.Voir("horloge",True,) et tu obtiens l'horloge en 1 sec. Les noms du dictionnaires peuvent être modifié mais Michel à quand même mis 3 choix pour chaque SDL et ses choix sont logiques. L'horloge s'appelle avec "horloge", les feux d'artifices s'appellent avec "feu", etc...
V@-Annabelle- Modérateur
- Messages : 340
Date d'inscription : 14/05/2010
Localisation : Canada
Re: Interragir avec les constantes du fichier SDL en temps réel
Le problème du copier-coller à partir du forum c'est que l'indentation n'est pas toujours respectée. Or, dans Python, c'est justement l'indentation qui est importante.
Pour rappel, l'indentation c'est les blancs qui existent au début de chaque ligne afin qu'un bloc de commande soit cohérent. Par exemple si je tape :
Cela ne fonctionnera pas. Il va y avoir un message d'erreur, déjà au moment d'importer le module dans la console Python de PlClient.
Il est impératif de taper :
Je décalle toutes les lignes qui appartiennent au bloc if machin de 4 vers la droite.
Maintenant concernant les commentaires dans un script.
Il y a deux manières d'écrire des commentaires. Soit en mettant le caractère # devant la ligne de commentaire soit en le mettant entre """ et """
Dans le premier cas, il est nécessaire de répéter chaque # en début de ligne, alors que dans l'autre cas, tu peux écrire plusieurs lignes de commentaires et terminer par """.
Dans le premier cas, le commentaire apparaît en vert dans plasmashop alors que dans le second il apparaît en rouge.
Alors je ne comprends pas pourquoi tu as dû mettre des # à la place des """ dans mon module voir.py. Chez moi cela fonctionne parfaitement.
Voici le commentaire que j'ai mis dans ce module :
Je place toujours des commentaires dans mes scripts afin de m'y retrouver plus tard si je dois faire des modifications et dans l'en-tête aussi pour savoir qui l'a écrit et à quelle date, ainsi, celui qui l'utilise sait à qui il doit s'adresser s'il ne comprend pas comment l' utiliser.
Pour rappel, l'indentation c'est les blancs qui existent au début de chaque ligne afin qu'un bloc de commande soit cohérent. Par exemple si je tape :
- Code:
if machin == "ok" :
chose = 0
truc = 1
Cela ne fonctionnera pas. Il va y avoir un message d'erreur, déjà au moment d'importer le module dans la console Python de PlClient.
Il est impératif de taper :
- Code:
if machin == "ok":
chose = 0
truc = 1
Je décalle toutes les lignes qui appartiennent au bloc if machin de 4 vers la droite.
Maintenant concernant les commentaires dans un script.
Il y a deux manières d'écrire des commentaires. Soit en mettant le caractère # devant la ligne de commentaire soit en le mettant entre """ et """
Dans le premier cas, il est nécessaire de répéter chaque # en début de ligne, alors que dans l'autre cas, tu peux écrire plusieurs lignes de commentaires et terminer par """.
Dans le premier cas, le commentaire apparaît en vert dans plasmashop alors que dans le second il apparaît en rouge.
Alors je ne comprends pas pourquoi tu as dû mettre des # à la place des """ dans mon module voir.py. Chez moi cela fonctionne parfaitement.
Voici le commentaire que j'ai mis dans ce module :
- Code:
"""Scripts pour manipulation des objets sdl
Michel Lacoste
-----Juillet 2012------"""
Je place toujours des commentaires dans mes scripts afin de m'y retrouver plus tard si je dois faire des modifications et dans l'en-tête aussi pour savoir qui l'a écrit et à quelle date, ainsi, celui qui l'utilise sait à qui il doit s'adresser s'il ne comprend pas comment l' utiliser.
V@-Michel- Admin
- Messages : 1172
Date d'inscription : 13/05/2010
Age : 69
Localisation : Belgique
Re: Interragir avec les constantes du fichier SDL en temps réel
Oui ça fonctionne finalement...
Je connaissais que la manière '#' d'écrire des commentaires.
Je connaissais que la manière '#' d'écrire des commentaires.
V@-Annabelle- Modérateur
- Messages : 340
Date d'inscription : 14/05/2010
Localisation : Canada
Re: Interragir avec les constantes du fichier SDL en temps réel
L'avantage d'écrire un commentaire entre """ et """ dans une définition de fonction ou de classe c'est qu'il est possible de le lire à l'écran en tapant dans la console python :
print nomdeladéfinition.__doc__
Par exemple, si je définis une fonction et que je place un commentaire entre """ en-dessous comme ceci :
et que je tape dans la console python :
>>> print essai.__doc__
J'aurai à l'écran :
>>>Ceci est un test pour voir le commentaire
print nomdeladéfinition.__doc__
Par exemple, si je définis une fonction et que je place un commentaire entre """ en-dessous comme ceci :
- Code:
def essai():
"""Ceci est un test pour voir le commentaire"""
(suite des instructions)
et que je tape dans la console python :
>>> print essai.__doc__
J'aurai à l'écran :
>>>Ceci est un test pour voir le commentaire
V@-Michel- Admin
- Messages : 1172
Date d'inscription : 13/05/2010
Age : 69
Localisation : Belgique
Sujets similaires
» Annonces diverses
» Un fichier bat pour lancer des instances plus rapidement
» Quatrième page : Dans les rouages du temps
» Quatrième page "Dans les rouages du temps"
» Quatrième page : "Dans les rouages du temps"
» Un fichier bat pour lancer des instances plus rapidement
» Quatrième page : Dans les rouages du temps
» Quatrième page "Dans les rouages du temps"
» Quatrième page : "Dans les rouages du temps"
Page 1 sur 1
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum
|
|