La Bibliothèque de Neverwinter Nights
Aide et informations diverses sur Neverwinter Nights ainsi que D&D3.
Aide et informations diverses sur Neverwinter Nights ainsi que D&D3.
FAQ
Rechercher
Liste des Membres
Groupes d'utilisateurs
S'enregistrer Se connecter pour vérifier ses messages privés Connexion
S'enregistrer Se connecter pour vérifier ses messages privés Connexion
La date/heure actuelle est 01/11/2024 08:30:59
Voir le sujet précédent ¤ Voir le sujet suivant | |
---|---|
Auteur | Message |
mayk Novice Messages: 18 |
A mon avis, la persistance n'a pas forcément sa place dans la sauvegarde des sorts. Dans le sens ou si un joueur se connecte pour la premiere fois apres un reboot, tant pis pour sa gueule, il faudra qu'il se repose.
Une fois reposé, le serveur lui enregistre sa config de sorts. A chaque fois qu'il fait un sort, celui ci est déduit de sa sauvegarde par une variable qui en remplace celle sauvegardée apres le repos. Si il deconnecte puis reconnecte, il retrouvera ses sorts inchangés. Le but du systeme de scripts que j'ai fait est d'empecher la deco reco abusive de certains lourdauds. tu crees un include file : NWScript :
void SaveSpell(object oPC, int nSpellID) { if(GetIsPC(oPC)==TRUE) { int nRemainingSpells = GetHasSpell(nSpellID,oPC); SetLocalInt(oPC,"SPELL"+IntToString(nSpellID),nRemainingSpells); } } void SaveAllSpells(object oPC) { int x; int n = 0; SetLocalInt(oPC,"SortsRepos",FALSE); SetLocalInt(oPC,"compteursauvsorts",0); for(n ; n <=650 ; n++) { int nRemainingSpells = GetHasSpell(n,oPC); if(nRemainingSpells>0) { SetLocalInt(oPC,"SPELL"+IntToString(n),nRemainingSpells); } } } void LoadSpells(object oPC) { SendMessageToPC(oPC,"Reconstruction par le serveur de la sauvegarde des sorts de "+GetName(oPC)+"."); int x; int n = 0; for(n ; n <=650 ; n++) { int iSpellTimes = GetLocalInt(oPC,"SPELL"+IntToString(n)); int iHasSpell = GetHasSpell(n,oPC); if(iSpellTimes==0) { while(GetHasSpell(n,oPC)>0) { DecrementRemainingSpellUses(oPC,n); } } if(iHasSpell>iSpellTimes) { for(x=0; x<(iHasSpell-iSpellTimes) ;x++) { DecrementRemainingSpellUses(oPC,n); } } } } puis sur chaque sort du mod tu fous la fonction SaveSpell(object oPC, int nSpellsID). en gros, tu change ceci : NWScript :Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.
en ceci : NWScript :
#include "nom_du_include_choisi" void main() { SaveSpell(OBJECT_SELF, GetSpellId()); // suite du script de sort... /* warning: 1 unclosed block {} */ ensuite, sur ton onplayerrested, tu mets un declencheur de compteur, comme ceci : NWScript :
Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème. puis sur le OnHeartBeat ceci, un compteur qui enregistrera les sorts juste apres la fin des repos : NWScript :
#include "nom_du_include_choisi" void main() { if(GetLocalInt(oPC,"SortsRepos")==TRUE) { int iCounter = GetLocalInt(oPC,"compteursauvsorts"); iCounter = iCounter+1; if(iCounter<=3) { SetLocalInt(oPC,"compteursauvsorts",iCounter); } if(iCounter>3) { SaveAllSpells(oPC); SendMessageToPC(oPC,"Constitution d'une sauvegarde des sorts de "+GetName(oPC)+" par le serveur."); } } } C'est long et fastidieux, mais le résultat en temps de calcul est quand meme plus leger que si tu faisais un OHB en permanence : Ca fait des gros coups de lag a chaque battement du coeur de module, et imagine si il y a 25 utilisateurs de sorts sur le serveur. La fonction LoadSpells, juste sur le onenter, comme ceci, en se servant de conditions pour eviter ce processsus aux barbares ou guerriers peu intellectuels ^^: NWScript :
#include "nom_du_include_choisi" void main () { if((GetLevelByClass(CLASS_TYPE_CLERIC,oPC) > 0) || (GetLevelByClass(CLASS_TYPE_DRUID,oPC) > 0) || (GetLevelByClass(CLASS_TYPE_SORCERER,oPC) > 0) || (GetLevelByClass(CLASS_TYPE_WIZARD,oPC) > 0) || (GetLevelByClass(CLASS_TYPE_PALADIN,oPC) > 0) || (GetLevelByClass(CLASS_TYPE_RANGER,oPC) > 0) || (GetLevelByClass(CLASS_TYPE_BARD,oPC) > 0) || (GetLevelByClass(CLASS_TYPE_ARCANE_ARCHER,oPC) > 0)) { LoadSpells(oPC); } } Le serveur ne devrait avoir un coup de lag que a chaque connection de joueur utilisant de la magie, et le OHB du module est considérablement allégé. Pour ceux qui sont curieux d'en voir le fonctionnement, passez sur mon module : FR - [CEP] - MARKHOR (persistant (rôle)). Mayk - _Kyam_ ++++ |
Revenir en haut | |
Page 1 sur 1 ¤
Vous ne pouvez pas poster de nouveaux sujets dans ce forum
Vous ne pouvez pas répondre aux sujets dans ce forum
Vous ne pouvez pas éditer vos messages dans ce forum
Vous ne pouvez pas supprimer vos messages dans ce forum
Vous ne pouvez pas voter dans les sondages de ce forum