SetPersistentLocation Besoin d'aide

Répondre
Partager Rechercher
Bon une derniere question pour la route, j'utilise donc nwx4 j'ai fait un script afin de sauvegarder la position de mes joueurs quand ils se reposent (ca fonctionne bien) :

Code:
 void main()
 {
 object oPC = GetLastPCRested();
 
 	if (GetIsObjectValid(oPC) && GetIsPC(oPC))
 	{
 	SetPersistentLocation(oPC, "last_location", GetLocation(oPC), 0);
 	}
 	
 }
Comment faire pour que la position soit aussi sauvegarder toutes les 10minutes sans que le joueur soit obliger de se reposer ?

J'ai essayer d'utiliser un timer mais je ne vois pas comment inserer mon setpersistentlocation.

voici le code du timer (qui n'est pas de moi)

Code:
 
 //Timer-générateur d'évenement d'Anthraxcite
 //Incrémente une variable module toutes les minutes par l'intermédiaire
 //d'une chaine d'action infinie
 //Attention les chaines d'action sont interdites sur le placable lui
 //même mais vous pouvez les transferer par la fonction AssignCommand
 void main()
 {
 	int nUser = GetUserDefinedEventNumber();
 	switch(nUser)
 	{
 		case 0://minuit
 		break;
 		case 6://aube si vous avez configuré l'heure de votre aube à 6 heure
 		break;
 		case 12://midi
 		break;
 		case 18://crepuscule si vous avez configuré l'heure de votre aube à 18 heure
 		break;
 		case 606024:
 			int nHour = GetTimeHour();
 			if(GetTimeMinute()==0)
 			{
 				SignalEvent(OBJECT_SELF,EventUserDefined(nHour));
 			}		   
 			//Sauvegarde des persos toutes les 10 minutes
 			if(GetLocalInt(GetModule(),"minute")%10)
 			{
 				ExportAllCharacters();
 			}
 			ActionWait(60.0);
 			ActionDoCommand(SetLocalInt(GetModule(),"minute",GetLocalInt(GetModule(),"minute")+1));		   
 			ActionDoCommand(SignalEvent(OBJECT_SELF,EventUserDefined(606024)));
 		break;
 	}
 }
ET si tu fait que ton script s appelle lui meme toutes les 600 secondes.

genre si ton script s appelle localisation, dans celui ci tu met :

DelayCommand(600.0, localisation());

Il s appelera lui meme toute les 10 minutes
non pas de script qui se rappelle car dans ce cas ça va bouffer trop de mémoire car tant que le dernier n'est pas fini les autres scripts du même nom ne se ferment pas



par contre sur le onHeartBeat tu peux rajouter une variable et lui rajouter 1 à chaque fois.
Dès qu'elle atteind 100 tu lance ton script
tu le places dans le OHB du module

avec un compteur, qui compte le nb d'OHB executé depuis la derniere sauvegarde.
(si tu veux une sav toutes les 10 minutes IRL il te faudra attendre le 100 eme cycle)

ca donne ca :

Code PHP:

int save GetLocalInt(GetModule(),"save");
if (
save>=100)
{    
SetLocalInt(GetModule(),"save",0));
      
// METTRE ICI LE CODE DE SAVE DES PJs
} else
{    
Save++;
      
SetLocalInt(GetModule(),"save",save));

testé et tres efficace.

PS : je deconseille fortement le DelayCommand(600.0, localisation()); en cas de lag, la commande risque de partir dans les "limbes"
Citation :
Publié par -yi-
tu le places dans le OHB du module

avec un compteur, qui compte le nb d'OHB executé depuis la derniere sauvegarde.
(si tu veux une sav toutes les 10 minutes IRL il te faudra attendre le 100 eme cycle)

PS : je deconseille fortement le DelayCommand(600.0, localisation()); en cas de lag, la commande risque de partir dans les "limbes"
Oki merci beaucoup, je voulais justement eviter le delaycommand();
Vous devriez utiliser des modulos dans les scripts genre OHB, c'est l'opération la moins coûteuse pour un processeur et c'est tout à fait approprié à des opérations qui doivent se dérouler toutes les n fois.
Répondre

Connectés sur ce fil

 
1 connecté (0 membre et 1 invité) Afficher la liste détaillée des connectés