Aller au contenu


Variables - Une Variable Comme Nom De Sauvegarde


  • Veuillez vous connecter pour répondre
4 réponses à ce sujet

#1 nopanolator

nopanolator

Posté 11 décembre 2010 - 12:38

Bonjour,

J'utilise la fonction con_save d'OBSE et j'aimerais optimiser un script de sauvegarde en utilisant une variable comme nom de sauvegarde, afin de ne pas alourdir le code.

La version "lourde" :


short "VarCompteurSauvegardes"

...

 if "VarCompteurSauvegardes" == 1

con_save nomsauvegarde1

 if "VarCompteurSauvegardes" == 2

con_save nomsauvegarde2

... 

...etc


Ce que j'aimerais réaliser :


Short "VarNomdeSauvegardes"

Short "VarCompteurSauvegardes"

...

con_save ("VarNomdeSauvegardes" + "VarCompteurSauvegardes") 


Ce qui donnerait automatiquement nomsauvegarde1, nomsauvegarde2, nomsauvegarde3 ... etc 

Cela me permettrait aussi d'utiliser la variable VarNomdeSauvegardes pour nommer (avec les tests qui vont bien) de manière contextuelle la sauvegarde : CombatSauvegarde1, ExplorationSauvegarde2, DongeonSauvegarde3... je ne trouve pas comment charger mes textes dans ce paramètre, snif.



Je suis coincé, help :|

Merci d'avance à ceux qui m'aiguilleront.




Bon jeu




nop

Modifié par nopanolator, 11 décembre 2010 - 20:08.


#2 Shadow she-wolf

Shadow she-wolf

    Le katana de la GBT


Posté 11 décembre 2010 - 13:43

Coucou...

A première vue, il faudrait utiliser une variable de type String_var: une chaîne de caractères, ce type a été ajouté par OBSE...

String_var NomSauvegarde
Short VarCompteurSauvegardes

[...]

let VarCompteurSauvegardes += 1 ;on incrémente VarCompteurSauvegardes de 1
set NomSauvegarde to sv_Construct"Sauvegarde%.0f" VarCompteurSauvegardes ;on construit le nom de la sauvegarde
con_save $NomSauvegarde ;sauvegarde

Je ne suis pas une experte en manipulation de chaînes de caractères...
Mais à priori, ça semble fonctionner...

#3 nopanolator

nopanolator

Posté 11 décembre 2010 - 20:06

C'est exactement ce que je cherchais, merci de me l'avoir mis en forme pour clarifier la fonction (je débute...). 

Je prends le temps de finir le script et de le tester à fond, et je le mettrais en entier en suivant une fois propre et fonctionnel. C'est un script d'autosave.

Merci beaucoup Shadow, tu me sors une sacrée épine du pied !

cordialement 

nop



Une version simplifiée du script en question (car la version originale contient pas mal d'appels vers d'autres scripts); le nommage des sauvegardes fonctionne à merveille... encore merci shadow.


scn savautoscript


float fQuestDelayTime
short saveActive
short saveReady
short purgeram
short saveSlots
short saveActive
short saveCycle
float saveQuestTimer
float saveMinTrigger
float saveSecTrigger
String_var SaveName

Begin Gamemode


set saveSecTrigger to (saveMinTrigger * 60)                                    ;-- conversion du test en secondes, le test est configuré en minutes dans un menu via "saveMinTrigger"
set fQuestDelayTime to 2.0                                                               ;-- le script comptabilise le temps écoulé toutes les deux secondes 
set saveQuestTimer to saveQuestTimer + fQuestDelayTime             ;-- à chaque passage, incrémente le compteur intégré du temps écoulé

if saveQuestTimer >= FLsaveSecTrigger                                            ;-- compare le compteur au test converti en secondes
set saveActive to 1                                                                            ;-- permet un premier niveau d'options
set saveReady to 1                                                                           ;-- permet de forcer une sauvegarde en passant le timer et de distinguer les étapes
if saveActive && saveCycle >= saveSlots                                          ;-- si le premier niveau d'option est activé et si le nombre de sauvegardes dépasse le nombre limite
set saveCycle to 1                                                                            ;-- considère la sauvegarde en court comme la premiere sauvegarde du cycle
PrintToConsole "Nombre maximum d'emplacements atteint. Retour au premier emplacement."
elseif saveActive && saveCycle < saveslots                                      ;--  si le premier niveau d'option est actif et si le nombre de sauvegardes est inférieur au nombre limite
set saveCycle to saveCycle + 1                                                         ;-- incrémente la position dans le cycle
endif
endif
elseif saveActive && purgeram                                                          ;-- si le premier niveau d'option est actif et si une purge mémoire est configurée avant la sauvegarde
PCB                                                                                                   ;-- lancer une purge
PrintToConsole "Memoire purgée"
endif

if saveReady                                                                                     ;-- si le script peut passer à la seconde étape
set Savename to sv_Construct "Sauvegarde%.0f",saveCycle          ;-- nomme dynamiquement la sauvegarde
con_save $Savename                                                                        ;-- sauvegarde
PrintToConsole "Sauvegardé"
PlaySound UIMessageFade                                                              ;-- joue un son pour avertir
set saveReady to 0                                                                          ;-- remise à zéro du second niveau
set saveActive to 0                                                                           ;-- remise à zéro du premier niveau
set saveQuestTimer to 0                                                                  ;-- remise à zéro du chrono
endif
End

Je ne suis pas encore très à l'aise pour jongler avec les conditions, j'espère ne pas avoir oublié un endif quelque part en enlevant tous les appels vers d'autres scripts. Au pire le TESCS fera un rappel à l'ordre.



#4 Shadow she-wolf

Shadow she-wolf

    Le katana de la GBT


Posté 11 décembre 2010 - 20:20

Voir le messagenopanolator, le 11 décembre 2010 - 20:06, dit :

Au pire le TESCS fera un rappel à l'ordre.
Justement, il ne faut pas trop trop lui faire confiance...
Il accepte sans broncher des scripts qui font planter le moteur de script...


Notamment:

scn savautoscript


float fQuestDelayTime
short saveActive
short saveReady
short purgeram
short saveSlots
short saveActive
short saveCycle
float saveQuestTimer
float saveMinTrigger
float saveSecTrigger
String_var SaveName

Begin Gamemode


set saveSecTrigger to (saveMinTrigger * 60)									;-- conversion du test en secondes, le test est configuré en minutes dans un menu via "saveMinTrigger"
set fQuestDelayTime to 2.0															   ;-- le script comptabilise le temps écoulé toutes les deux secondes 
set saveQuestTimer to saveQuestTimer + fQuestDelayTime			 ;-- à chaque passage, incrémente le compteur intégré du temps écoulé

if saveQuestTimer >= FLsaveSecTrigger											;-- compare le compteur au test converti en secondes
   set saveActive to 1																			;-- permet un premier niveau d'options
   set saveReady to 1																		   ;-- permet de forcer une sauvegarde en passant le timer et de distinguer les étapes
   if saveActive && saveCycle >= saveSlots										  ;-- si le premier niveau d'option est activé et si le nombre de sauvegardes dépasse le nombre limite
	  set saveCycle to 1																			;-- considère la sauvegarde en court comme la premiere sauvegarde du cycle
	  PrintToConsole "Nombre maximum d'emplacements atteint. Retour au premier emplacement."
   elseif saveActive && saveCycle < saveslots									  ;--  si le premier niveau d'option est actif et si le nombre de sauvegardes est inférieur au nombre limite
	  set saveCycle to saveCycle + 1														 ;-- incrémente la position dans le cycle
   endif
endif
elseif saveActive && purgeram														  ;-- si le premier niveau d'option est actif et si une purge mémoire est configurée avant la sauvegarde
   PCB																								   ;-- lancer une purge
   PrintToConsole "Memoire purgée"
endif

if saveReady																					 ;-- si le script peut passer à la seconde étape
   set Savename to sv_Construct "Sauvegarde%.0f",saveCycle		  ;-- nomme dynamiquement la sauvegarde
   con_save $Savename																		;-- sauvegarde
   PrintToConsole "Sauvegardé"
   PlaySound UIMessageFade															  ;-- joue un son pour avertir
   set saveReady to 0																		  ;-- remise à zéro du second niveau
   set saveActive to 0																		   ;-- remise à zéro du premier niveau
   set saveQuestTimer to 0																  ;-- remise à zéro du chrono
endif

End

J'ai refait l'indentation du code...
Et comme on peut le voir, il y a un elseif qui devrait être un if...ou alors il y a un endif en trop...
(trois if, et quatre endif)

#5 nopanolator

nopanolator

Posté 11 décembre 2010 - 21:01

C'est bon à savoir, j'étais trop confiant. Il ne me reste plus qu'à prendre de bonnes habitudes...

Merci beaucoup pour la correction, je voulais partager le fruit de ton aide avec un code "réutilisable", même si ce n'est pas très novateur.

note : Après quelques essais il me semble que le fQuestDelayTime de 2 que j'ai mis soit un peu poussé pour ce type de fonction, même avec beaucoup de tests externes. Je pense qu'un test de sauvegarde toutes les trentes secondes voir toutes les minutes soit suffisant et plus économique.




0 utilisateur(s) li(sen)t ce sujet

0 membre(s), 0 invité(s), 0 utilisateur(s) anonyme(s)