NWNX4 - Un peu d'aide s'il vous plait

Répondre
Partager Rechercher
Bonjour, j'aimerais avoir quelques éclaircissement si possible, je viens d'installer l'alpha nwnx4 1.06, puis ma base de données mysql comprenant la table pwdata de base. Avez vous un exemple de script permettant de stocker la position du joueur dans la table et de la recuperer afin de le repositionner à l'endroit ou il a quitter le module. En bref si vous avez juste un ou deux petits morceaux de script afin de m'expliquer comment stocker des infos sur les pj ou autres afin de mettre en place un petit systeme de persistance. Merci par avance
Citation :
Publié par silverkrog
Bonjour, j'aimerais avoir quelques éclaircissement si possible, je viens d'installer l'alpha nwnx4 1.06, puis ma base de données mysql comprenant la table pwdata de base. Avez vous un exemple de script permettant de stocker la position du joueur dans la table et de la recuperer afin de le repositionner à l'endroit ou il a quitter le module. En bref si vous avez juste un ou deux petits morceaux de script afin de m'expliquer comment stocker des infos sur les pj ou autres afin de mettre en place un petit systeme de persistance. Merci par avance
Cela rejoint un peu mon probleme.

Personnellement je n utilise pas NWN4, mais je cree un waypoint avec pour tag le nom du joueur au moment ou il se repose.

L idée est de teleporter le joueur a ce waypoint au moment ou le joueur entre dans le module.

Pour l instant ca ne marche pas encore, car visiblement le script de teleportation se declenche trop tot :

Le script sur le oncliententer se declenche, mais le joueur est envoyé au point de depart du modue APRES l execution de ce script.

Je vais donc essayer avec un delay command.

Sinon, tu peux regarder mes bout de script ici :

sur le clientonenter
Code:
 
 object oPC = GetEnteringObject();
 
 if (!GetIsPC(oPC)) return;
 
 object oTarget;
 location lTarget;
 String name = GetName(oPC) ;
 
 oTarget = GetWaypointByTag(name); // le waypoint cree au moment du rest
 
 lTarget = GetLocation(oTarget);
 
 
 if (GetAreaFromLocation(lTarget)==OBJECT_INVALID) return;
 
 AssignCommand(oPC, ClearAllActions());
 
 AssignCommand(oPC, ActionJumpToLocation(lTarget)); <-- a essayer avec un delaycomand de xx secondes 10 ? 15 ?
ET la creation du waypoint sur le onrest :

Code:
object oPC = lejoueur qui viens de  se reposer
 object oTarget;
 object oSpawn;
 location loc_PC;
 oTarget = oPC;
 Loc_PC = GetLocation(oPC);
 // recherché de la loc du dernier rest
 String name = GetName(oPC) ;
 Object tagway = GetWaypointByTag(name) ;
 // destruction de l ancien point de rest
 DestroyObject(tagway) ;
 //*-------------------------------------------
 //*creation du nouveau point de rest
 //*-------------------------------------------
 
 oSpawn=CreateObject(OBJECT_TYPE_WAYPOINT,"resref du waypoint",Loc_PC,FALSE,name);
Merci, je vais essayer cela. Sinon personne n'a de petit bout de script histoire de m'expliquer l'intercation avec mysql sous nwnx4. genre sauver les objets dans un coffre et les recharger au relancement du module etc...
Je viens de tester avec un delay command de 30 et ca marche !

Le perso arrive sur le point de depart du module et 10 secondes apres il est teleporté au dernier point de repos !
Oui j'ai tester cela marche aussi. J'ai un petit probleme qui persiste dans le même genre, enfin c'est plus une question. Je viens de créer une zone d'attente afin de téléporter les joueurs sur leurs dernière location.

Donc une zone avec un grand trigger et sur l'entrée de celui-ci ce script :

Code:
 void main() 
 { 
 	object oPC = GetEnteringObject();
 	if (GetIsObjectValid(oPC) && GetIsPC(oPC )&& !GetIsDM(oPC))
 	{
 		location lLoc = GetPersistentLocation(oPC, "last_location");
 		SendMessageToPC(oPC, "test recup loc");
 		DelayCommand(10.0,AssignCommand(oPC,ActionJumpToLocation(lLoc))); 
 	} 
 }
Comment je peu gérer le fait d'un nouveau joueur qui na donc pas de location sauvegardée?
Bon bah je me réponds tout seul

J'ai essayé cela :

Code:
 void main() 
 { 
 	object oPC = GetEnteringObject();
 	if (GetIsObjectValid(oPC) && GetIsPC(oPC )&& !GetIsDM(oPC))
 	{
 		location lLoc = GetPersistentLocation(oPC, "last_location");
 		if (GetAreaFromLocation(lLoc)!=OBJECT_INVALID)
 		 {
 			SendMessageToPC(oPC, "Vous allez être téléporter à votre dernière position connue");
 			SendMessageToPC(oPC, "Merci de patientez");
 			DelayCommand(20.0,AssignCommand(oPC,ActionJumpToLocation(lLoc)));
 		}
 		else
 		{
 				object oTarget = GetWaypointByTag("mod_first_spawn");
 				 location lLoc = GetLocation(oTarget);
 				SendMessageToPC(oPC, "Vous allez être téléporter au départ du module");
 				SendMessageToPC(oPC, "Merci de patientez");
 				DelayCommand(20.0,AssignCommand(oPC,ActionJumpToLocation(lLoc)));	
 		}
 	} 
 }
quelqu'un peu me dire si cela est fiable ou si je peu l'optimiser? merci par avance
Ce code me paraît bon


Mais si l'on veut batailler à la ligne 4

Code:
 (...)
 	if (GetIsObjectValid(oPC) && GetIsPC(oPC )&& !GetIsDM(oPC))
 (...)
tu pourrais le réduire et enlever && !GetIsDM(oPC)

pour la zone le mieux serait une zone intérieure 1x1 complétement vide (juste une lumière) pour optimiser le temps de chargement

et du coup aussi le delaycommand (vu que le script est sur le OnEnter d'un trigger/déclencheur peut lui aussi être réduit à quelques secondes, le temps pour le joueur de lire le message (5-10 secondes à mon humble avis)
Citation :
Publié par nexus - Aethis
J'ai toujours du mal à comprendre pourquoi vous prenez nwnx4 pour sauvegarder une position de joueur alors que la BDD interne le fait très bien....
comment tu fais avec la BDD ?
Tu as des fonctions telles que SetCampaignLocation
ou bien SetCampaignString et SetCampaignVector si tu veux décomposer ta location en tag de zone + vecteur pour éviter des soucis lors d'ajout/retrait de zones...

Pour faire simples avec SetCampaignLocation tu sauvegardes la position d'un joueur et GetCampaignLocation tu la récupères.
Répondre

Connectés sur ce fil

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