[Module Persistant] Sauvegarder la position des Perso.

Répondre
Partager Rechercher
Voilà, je crois que le sujet a été débattu avec PUMA mais le post étant pas clair ( ) j'ai préféré en faire un nouveau...

Voilà, tant que le serveur ne reboot pas, les positions des perso sont sauvegardées et il reco au bon endroit, mais des que le serveur reboot, hop reco au lieu de départ du serveur.

A partir de là je voudrai savoir comment faire pour sauvegarder la position des perso pour éviter cette reco au départ après un reboot serveur, et si le seul moyen est avec PUMA. Parce qu'en fait, j'ai testé ce qui est écrit sur l'autre post mais ça marche pas. En fait qd je lance PUMA tout va bien, mais des que je fais ok, ca lance nwnserveur et la PUMA est en 'pas de reponse' mais des que je quitte nwnserveur, hop PUMA est redevenu normal...

Donc si qqun avait la gentillesse de m'aider
Attends la 1.30, qui ne devrait vraiment pas tarder, tu auras des fonctions de sauvegarde persistante directement intégrées, cf les nombreux post sur ce forum
Laisse tomber PUMA (dont je me sers cependant pour les crieurs de ville et public : il suffit de supprimer les fichiers crees et le tour est joue pour effacer les donnes). Oublie les gamineries de Bioware dont leurs bases de donnees sont toutes pourries (pas evolutif du tout leur truc) et passe a NWN2x de Papillon : j ai deja ecrit le script que tu cherches et bien plus encore ; tu trouveras tout ici :

les scripts comme on les aime

Je pense que la diversification des systemes est le meilleur moyen pour eviter les grosses mauvaises surprises en cas de plantage de la base de donnee (ce qui arrive parfois aussi)

Prince Nexus

Message modifie pour m excuser aupres de RAT dont je respecte le travail. C est vrai qu en me relisant, il y avait confusion, la critique ne s adressant uniquement qu a Bioware que je trouve culotte d offrir une base de donnee indigne de ses joueurs : on a quand meme paye 50€ leur production... Longue vie donc aux builders qui, avec les joueurs et les MDs font vivre la communaute Nwn. Pardon donc encore a tous ceux que mon post avait offense ou outre.
Mais non regardes, c'est pas un prince c'est qu'un écuyer, bouh l'imposteur !

Bon sérieusement, maintenant, il faut attendre le patch 1.30 (ça m'étonnerait qu'ils attendent si longtemps pour le sortir mais sinon, un peu plus bas dans le forum, y a une bidouille pour mettre le 1.30 US sur la 1.29 fr) parce que la BDD Bioware est quand même très bien pour la plupart des besoins courant, possèdent des possibilités que n'as pas NWNX2 pour les objets (NWNX2 est bien mieux pour la manip de BDD ok) et établit un standard de fait que tu trouveras bientôt dans tous les scripts pour monde persistants qui se voudront un minimum portable.
Oui mais si je passe en 1.30 le module, il faudra que tous les joueurs soient en 1.30 donc bon c'est pas super non plus, j'imagine que tlm n'a pas envi de trifouiller son NWN


Quand à Prince bein merci jvé voir un peu mais bon ayant pas un super pc non plus mettre dans onhearth me géne un peu quoi :/
Oui je sais, moi aussi je deteste le ohb, alors pourquoi ne pas eduquer le joueur et l inviter a utiliser son Emote Wand auquel on a ajoute le dialogue Sauvegarder votre joueur et mis ds le OnTaken la fonction SavePlayer(GetPCSpeaker()); ....

Voila qui resout pas mal de probleme : tu peux meme ajouter une commande pour un PopUp l invitant a sauver son perso et quitter lorsque le joeur quitte le module...

Mais je ne sais pas si on peut mettre un PopUp sur le OnClientLeave du module, alors je l ai mis ds un autre dialogue de l EmoteWand.


Prince Nexus qui est bien un Prince et pas un simple Ecuyer !!!
ça peut etre une idée intéressante mais qui laisse un probleme en cas de plantage serveur
et puis il faut que le joueur pense à save régulierement ce qui peut etre chiant, et si il lag et a une déco a cause de ca, pareil, il n'aura pas save donc bon :/
Citation :
Provient du message de Prince Nexus
Laisse tomber PUMA et les gamineries de Bioware quand a leurs bases de tonnées toutes pourries (pas evolutif du tout leur truc) et passe a NWN2x de Papillon : j ai deja ecrit le script que tu cherches et bien plus encore ; tu trouveras tout ici :

les scripts comme on les aime

Prince Nexus

C'est dingue ça, je vais devoir encore remettre ma phrase ici grrr

"La critique est facile mais l'art est difficile!!"


Maintenant, je n'ai j'aimais rien critiquer enfin je ne pense pas, on peut comparer oui, critiquer non. Car à ce moment là, on peut trouver des défauts partout.

Maintenant, que tu n'apprécies pas PUMA est un fait, chacun ses goût, moi je suis resté sur PUMA avant la 1.3 car NWNx2 avait des choses qui me plaisaient guère, mais c'est un choix aussi, mais moi je ne critique pas.
Pour Bioware, cela commence à m'énerver sérieusement de voir des critiques aussi rapides , aussi venimeuses qu'une vipère.
Alors au lieu de cracher ton venin comme ça sans réfléchir un instant, analyse bien les capacités de bioware, et tu verras premièrement que leur bdd est bien plus puissante que tu ne peux espérer et de plus, je ne suis pas un Probioware, mais par contre je respecte le travail de tous les développeurs.
Si tu critiques si facilement alors je pense que tu dois avoir les capacités aisément de pouvoir faire mieux qu'eux non???
Non? donc , donner ton avis, les aidera. Les détruire et les critiquer sans arguments valables excepté que tes phrases du style : Laisse tomber PUMA et les gamineries de Bioware quand a leurs bases de donnees toutes pourries (pas evolutif du tout leur truc)

Bon voilà, mon énervement du soir Bonsoir!

Désolé pour les autres,
Mais j'en ai marre qu'on puisse critiquer aussi facilement :/
Ancien joueur du server DragonLance - Krynn, petite astuce :

quand le joueur se repose , sauvegarde sa position. Assez simple à faire avec la bdd de bioware. Pour ceux ki utilisent les hcr, une pression sur la touche R suffit a sauvegarder la position, même si les hcr ne vous permettent pas de vous reposer encore .
J'ai testé avec les anciens codes du PUMA retranscrit avec la db bioware et cela marche impec, vous le mettez par exemple tous les 5 secondes et PAF cela sauvegarde
Il est tout a fait possible de creer une tache qui va s'effectuer a intervalle regulier sans pour autant passer par un OnHearthBeat.
L'astuce consiste a passer par les events 'User Defined'

exemple :

- Dans l'event OnModuleLoad :
Code PHP:

SignalEvent(OBJECT_SELFEventUserDefined(700)); 

- Dans l'event OnUserDefined du module :
Code PHP:

int ud GetUserDefinedEventNumber();

switch( 
ud )
{
    case 
700:
    
//ici une procedure quelconque, comme sauvegarder la position des persos
    
DelayCommand(60.0SignalEvent(OBJECT_SELFEventUserDefined(700)));
    break;

Et voila une procedure qui s'execute elle-meme toutes les minutes, sans passer par un OnHearthBeat... l'interet étant qu'on peut regler la durée comme on veut
Ba moi cela fonctionne dans le OnModuleLoad

Comme j'ai mis aussi plusieurs d'autres scripts qui fonctionnent sur le même principe.



C'est à dire des fonctions récursives dans le OnmoduleLoad

Enfin d'un autre coté, est-ce que le serveur s'en porte mieux, j'ai des doutes, par contre c'est vrai que le réglage de la durée est plus précis

Et je préfère m'abstenir de faire des commentaires sur certains posts, RAT a tout dit de toute facon
Citation :
Provient du message de Zunder
Enfin d'un autre coté, est-ce que le serveur s'en porte mieux, j'ai des doutes, par contre c'est vrai que le réglage de la durée est plus précis


Tu as totalement raison sur le principe que suivant la config du serveur, il faudra éviter de trop le charger

Citation :
Et je préfère m'abstenir de faire des commentaires sur certains posts, RAT a tout dit de toute facon
Au fait personne n'avait l'intention de faire un prog pour récupérer les données dans la base de Bioware sur un site web? J'avais cru entendre ça un jour
(RAT faudra que tu sorte tes scripts pour les sauvegardes des données -pvs positions principalement- lorsque la bd sortire )
Ba ils sont déjà tout prêt comme c'est ceux du PUMA que j'ai remodifé pour la version database bioware.

Vous avez juste à DL la version 2 de la banque et vous aurez toutes les modifications.

Moi en tout cas j'ai fais des tests quand je testai la banque et cela marche super .
Merci pour ce post et tes excuses !!

Pour reparler juste de ton post modifié, et te donner un argument constructif face à ton argument qui est tout à fait constructif et compréhensible.

Je suis tout à fait d'accord avec toi, que bioware aurait pu faire une db plus puissante et plus poussée pour les 50 euros que nous avons mis dans leurs jeux, et que leurs fonctions sont aussi un peu simpliste tout de même à mon goût.

Mais maintenant, à mon grand désarroi, je ne m'arrête pas qu'à cela, et j'essaye de penser d'un point de vue général.
Tout d'abord, je comprends que 50 euros coûtent cher, mais malheureusement c'est le prix de tous les jeux. Et quand on voit que Bioware a fait un jeu et en plus offre une technologie tout de même impressionnante pour permettre à un utilisateur lambda de pouvoir créer tout un monde impressionnant et le plus sympa c'est de pouvoir créer cela en tant que serveur ouvert à tout le monde.
De plus, par rapport à d'autres boites de jeux, bioware essaye tout de même à rendre leur jeux de plus en plus intéressant et propose des MAJ gratuite que d'autres ne proposent pas (cf UO).
Bon je pourrai encore donner plein d'exemples, mais cela suffira pour cet argument là.
Donc en résumé, je pense que les 50 euros sont largement exploités, je trouve. Mais ce n'est qu'un avis personnel.

Maintenant, pour la db bioware, comme j'ai pu le dire hier sur le chan avec Cdn,Azra et Tharkùn. C'est que oui, ils auraient peut être du penser à une database SQL ou Mysql et permettre d'utiliser des requêtes.
Mais il ne faut pas oublier, que tout le monde n'a pas la faculté que nous pouvons avoir à exploiter un langage et les bases de données ( car je voudrais rappeler que si on fait une base non structurée c'est comme en gros ne rien faire ^^. Donc il faut penser à certaine chose, à avoir une certaine logique, et s'aider si vous avez du mal juste de tête par un MCD etc...).
Si tout le monde trouvait cela facile, alors je ne vois même pas pourquoi il y a encore des gens qui demandent de l'aide chaque jour . Nwnscript est pourtant facile comme langage, je ne pense pas qu'on me dirait le contraire, mais pourtant, il n'est pas facile pour tout le monde. C'est idem pour le MySQL.
A mon simple avis, je pense qu'ils ont fait ainsi pour ceux qui ont déjà du mal avec le nwnscript, et qu'ils ne veulent pas les forcer à devoir apprendre à faire des requêtes etc... (qu'il faut avouer qu'il faut un certain temps pour pouvoir faire des requêtes correctes et qui ne sont pas lourde niveau ressource.)
D'ou les fonctions à mon avis, qui sont simple à utiliser, et qui restent dans le nwnscript.

En conclusion, nous ne sommes pas seuls dans la communautés. Il n'y a pas que des scripteurs ou des personnes étant dans l'informatique autant d'un point de vue métier que d'un point de vue passion ou les deux (comme moi ).
Alors, oui, elle est un peu simpliste mais elle est ouvert à tout le monde.
Et si vous voulez l'attaquer, vous pouvez utiliser les pilotes ODBC .

Voila mon argument!!

Ce n'est qu'un avis,
Je voulais juste le partager avec vous!

@ bientôt

RAT
D'accord avec RAT.

Le problème de BioWare pour intégrer une fonctionnalité SQL avancée à sa base actuelle, c'est qu'il faudrait créer de nouveaux principes de programmation, ou se faire chier avec un GetFirst/GetNext pas forcément idéal... Les fonctions qu'il faudrait créer, à mon avis, sont :
Code PHP:

// Execute une requête SQL sur la base de donnée et retourne le nombre d'éléments affectés ou retournés.
// nQueryID sert à différencier les requêtes les unes des autres pour boucler dessus.
int SQLQuery(string sDataBasestring sSQLint nQueryID 0);
// Les GetFirstSQL* servent à récupérer le retour d'un query de sélection SQL. Retourne une chaine vide ou une valeur nulle si nQueryID n'est pas une requête SQL de sélection valide.
string GetFirstSQLString(string sColint nQueryID 0);
int GetFirstSQLInt(string sColint nQueryID 0);
float GetFirstSQLFloat(string sColint nQueryID 0);
location GetFirstSQLLocation(string sColint nQueryID 0);
vector GetFirstSQLVector(string sColint nQueryID 0);
object GetFirstSQLObject(string sColint nQueryID 0);
// Tout pareil, mais pour le bouclage.
string GetNextSQLString(string sColint nQueryID 0);
int GetNextSQLInt(string sColint nQueryID 0);
float GetNextSQLFloat(string sColint nQueryID 0);
location GetNextSQLLocation(string sColint nQueryID 0);
vector GetNextSQLVector(string sColint nQueryID 0);
object GetNextSQLObject(string sColint nQueryID 0); 
Comme on peut le constater, c'est un sacré boulot... Y'a aussi la "solution de facilité" ( ) qui consisterais à créer un type de variable variant, et pourquoi pas un objet de retour SQL, ou des tableaux de variable pour faire un fetch...

Bref, c'est un sacré boulot!!
Répondre

Connectés sur ce fil

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