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 23/11/2024 14:20:46
La Bibliothèque de Neverwinter Nights Index du Forum »
La Bibliothèque Binaire du NWScript - Neverwinter Nights
Voir le sujet précédent ¤ Voir le sujet suivant | |
---|---|
Auteur | Message |
NEO234 Acolyte Messages: 30 Localisation: Belgique |
Sur un site j'ai vus ce scripte particulierement intéressant pour les mods persistant;
Contenants persistants(version banque) Ce système sauvegarde le contenu du coffre sur lequel il est placé et le recharge à l'ouverture. Il y a aussi une possibilité de limité le contenu en nombre et il faut obligatoirement interdire les objets de type contenant qui fausse le comptage d'objet ainsi que les objets empilables. Donc il faut utiliser l'un des deux scripts à placer dans le ondisturbed disponible ici. Ce système est la version banque, il reconnait qui ouvre le coffre et fournit donc les items que la personne à placer la fois précédente. Il est aussi programmé pour pouvoir avoir plusieurs coffres de banque (donc un coffre dans chaque banque par exemple) en travaillant avec le TAG du coffre. Si vous mettez le même TAG il est possible que cela produise un effet du type des "coffres de diablo 2" lorsque l'on change d'acte, c-à-d que le contenu sera le même dans tous les coffres pour la même personne. Script à placer dans le OnOpen du contenant : NWScript :
//:///////////////////////// ///////////////////// //:: Contenants persistants(version banque) //:: Chargement du contenu(a placer dans le onopen du contenant) //:: Copyright (c) 2001 Bioware Corp. //:///////////////////////// //////////////////// /* */ //:///////////////////////// //////////////////// //:: Created By: Anthraxcite //:: Created On: 24 Jun 2004 //:///////////////////////// //////////////////// void main() { object oPC = GetLastOpenedBy(); string sDB = "Contenance_persistante"; string sTag = GetTag(OBJECT_SELF); int i = GetCampaignInt(sDB,sTag+"_NbreObj",oPC); SetLocalInt(OBJECT_SELF,"NbreObj",i); while(i > -1) { i--; RetrieveCampaignObject(sDB,sTag+"_o"+IntToString(i),GetLocation(OBJECT_SELF),OBJECT_SELF,oPC); } } Script à placer dans le OnClose du contenant : //:///////////////////////// ///////////////////// //:: Contenants persistants(version banque) //:: Sauvegarde du contenu(a placer dans le onclose du contenant) //:: Copyright (c) 2001 Bioware Corp. //:///////////////////////// //////////////////// /* */ //:///////////////////////// //////////////////// //:: Created By: Anthraxcite //:: Created On: 24 Jun 2004 //:///////////////////////// //////////////////// void main() { object oPC = GetLastClosedBy(); string sDB = "Contenance_persistante"; string sTag = GetTag(OBJECT_SELF); int i = 0; object oItem = GetFirstItemInInventory(); while(oItem!=OBJECT_INVALID) { StoreCampaignObject(sDB,sTag+"_o"+IntToString(i),oItem,oPC); DestroyObject(oItem); oItem = GetNextItemInInventory(); i++; } SetCampaignInt(sDB,sTag+"_NbreObj",i,oPC); } L'un des deux scripts est à placer dans le OnDisturbed de contenant: Script 1(avec limite de contenu): //:///////////////////////// ///////////////////// //:: Contenants persistants //:: Limite du contenu et interdiction des objets de type //:: contenants(a placer dans le ondisturbed du contenant) //:: Copyright (c) 2001 Bioware Corp. //:///////////////////////// //////////////////// //:///////////////////////// //////////////////// //:: Created By: Anthraxcite //:: Created On: 24 Jun 2004 //:: Updated On: 17 Dec 2004 //:///////////////////////// //////////////////// int GetIsStackable(int BASE_ITEM_TYPE); void main() { int nLimite = 10; int nDisturbType = GetInventoryDisturbType(); object oItem = GetInventoryDisturbItem(); object oCurrentItem; object oContenair; object oDisturber = GetLastDisturbed(); int nBaseItemType = GetBaseItemType(oItem); switch (nDisturbType) { case INVENTORY_DISTURB_TYPE_ADDED : { if(GetLocalInt(OBJECT_SELF, "NbreObj") < nLimite && nBaseItemType!=BASE_ITEM_LARGEBOX && !GetIsStackable(nBaseItemType)) { SetLocalInt(OBJECT_SELF, "NbreObj",GetLocalInt(OBJECT_SELF, "NbreObj")+1); } else { if (GetIsObjectValid(oDisturber)) { if(GetBaseItemType(oItem)!=BASE_ITEM_LARGEBOX) { CopyItem(oItem, oDisturber, TRUE); DestroyObject(oItem); } else { oContenair = CreateItemOnObject(GetResRef(oItem),oDisturber); oCurrentItem = GetFirstItemInInventory(oItem); while(oCurrentItem!=OBJECT_INVALID) { CopyItem(oCurrentItem, oContenair, TRUE); oCurrentItem = GetNextItemInInventory(oItem); } DestroyObject(oItem); } if (GetIsPC(oDisturber)) { SendMessageToPC(oDisturber, ""); } } else { DestroyObject(oItem); } } }break; case INVENTORY_DISTURB_TYPE_REMOVED : case INVENTORY_DISTURB_TYPE_STOLEN : { SetLocalInt(OBJECT_SELF, "NbreObj",GetLocalInt(OBJECT_SELF, "NbreObj")-1); }break; } } int GetIsStackable(int BASE_ITEM_TYPE) { switch(BASE_ITEM_TYPE) { case 39: case 49: case 54: case 62: case 75: case 77: case 81: case 104: case 105: case 31: case 59: case 63: case 20: case 25: case 27: case 76: return TRUE; break; default: return FALSE; break; } return FALSE; } Script 2(sans limite de contenu): //:///////////////////////// ///////////////////// //:: Contenants persistants //:: Interdiction des objets de type contenants et empilables(or compris) //:: (a placer dans le ondisturbed du contenant) //:: Copyright (c) 2001 Bioware Corp. //:///////////////////////// //////////////////// //:///////////////////////// //////////////////// //:: Created By: Anthraxcite //:: Created On: 31 Jul 2004 //:: Updated On: 17 Dec 2004 //:///////////////////////// //////////////////// int GetIsStackable(int BASE_ITEM_TYPE); void main() { int nDisturbType = GetInventoryDisturbType(); object oItem = GetInventoryDisturbItem(); object oCurrentItem; object oContenair; object oDisturber = GetLastDisturbed(); int nBaseItemType = GetBaseItemType(oItem); switch (nDisturbType) { case INVENTORY_DISTURB_TYPE_ADDED : { if(nBaseItemType!=BASE_ITEM_LARGEBOX && !GetIsStackable(nBaseItemType)) { SetLocalInt(OBJECT_SELF, "NbreObj",GetLocalInt(OBJECT_SELF, "NbreObj")+1); } else { if (GetIsObjectValid(oDisturber)) { if(GetBaseItemType(oItem)!=BASE_ITEM_LARGEBOX) { CopyItem(oItem, oDisturber, TRUE); DestroyObject(oItem); } else { oContenair = CreateItemOnObject(GetResRef(oItem),oDisturber); oCurrentItem = GetFirstItemInInventory(oItem); while(oCurrentItem!=OBJECT_INVALID) { CopyItem(oCurrentItem, oContenair, TRUE); oCurrentItem = GetNextItemInInventory(oItem); } DestroyObject(oItem); } if (GetIsPC(oDisturber)) { SendMessageToPC(oDisturber, ""); } } else { DestroyObject(oItem); } } }break; case INVENTORY_DISTURB_TYPE_REMOVED : case INVENTORY_DISTURB_TYPE_STOLEN : { SetLocalInt(OBJECT_SELF, "NbreObj",GetLocalInt(OBJECT_SELF, "NbreObj")-1); }break; } } int GetIsStackable(int BASE_ITEM_TYPE) { switch(BASE_ITEM_TYPE) { case 39: case 49: case 54: case 62: case 75: case 77: case 81: case 104: case 105: case 31: case 59: case 63: case 20: case 25: case 27: case 76: return TRUE; break; default: return FALSE; break; } return FALSE; } Mais le proble c'est que si ont ajoute un objet dans le cofre et quont déconecte par la suite sans sauvegarder sont perso ont recupère l'anciene sauvegarde mais le cofre lui a garder l'objet ce qui nous fait un objet dans le coffre et un autres dans l'inventaire, vive la duplications . La solutions si vous pouvier m'aider est de vérifier l'inventaire du joueur et celui du coffre si il y a un objet identique il faudrais que le scripte le supprime automatiquement, mais il y a aussi un autres probleme c'est que si ont arrive a cree un t'elle scripte comment ont vas faire pour les potions et parchemins vus quont a souvent des double voir des 10aine?! Help my please . |
Revenir en haut | |
Starkanas Grand Chevalier Messages: 110 |
Mais si c'est un monde persistant , tu es censé sauvegarder tes personnages non ?
_________________ LSDA 3ème Âge : Serveur RôlePlay basé sur les écrits de J.R.R.Tolkien ... |
Revenir en haut | |
NEO234 Acolyte Messages: 30 Localisation: Belgique |
C'est justement la le probleme, si tu ne sauvegarde pas tu pourait dupliquer t'es objets a volonter vive la triche.
Il faudrais a la conex au serveur une verifications de l'inventaire et du coffre via justement la variable du cofre et en cas d'objet identique au coffre une supressiont de l'objet imédia dans le cofre celement vus que le serveur grde les objet en mémoire donc plus de triche. Quelqu(un a une idées a ajouter au scripte? |
Revenir en haut | |
darkheaven Acolyte Messages: 35 Localisation: nevers |
sur un monde persistant si je ne dis pas de betise , le fait de se deconnecter creer une sauvegarde du pj sur le vault du serveur donc pas de probleme non?
je ne suis pas tres douer en script mais dans le onclientleave du module tu dois pouvoir mettre un script creant une sauvegarde du perso a chaque deco. voila ^^ _________________ La vie n'est qu'une plume que le destin balade au grés du vent... |
Revenir en haut | |
NEO234 Acolyte Messages: 30 Localisation: Belgique |
C'est justement pour sa que je demande un scripte mais bon lol, mais j'aimerais que la sauvegarde des perso sont gérer par le joueur et non par le serveur donc il me faudrais un scripte comme l'explications si dessus.
|
Revenir en haut | |
arknax Ecuyer Messages: 56 |
Premièrement, la seule façon que tes items se dupliquent est lorsque le serveur plante et que le serveur n'ait pas réussit à sauvegarder le joueur...
Enfin, pour te donner le sourire, je te propose un script fait maison : Il permet de sauvegarder le personnage serveur lors de la fermeture du coffre. NWScript :
//:///////////////////////// ///////////////////// //:: Contenants persistants(version banque) //:: Sauvegarde du contenu(a placer dans le onclose du contenant) //:: Copyright (c) 2001 Bioware Corp. //:///////////////////////// //////////////////// /* */ //:///////////////////////// //////////////////// //:: Created By: Anthraxcite //:: Created On: 24 Jun 2004 //:///////////////////////// //////////////////// void main() { object oPC = GetLastClosedBy(); string sDB = "Contenance_persistante"; string sTag = GetTag(OBJECT_SELF); int i = 0; object oItem = GetFirstItemInInventory(); while(oItem!=OBJECT_INVALID) { StoreCampaignObject(sDB,sTag+"_o"+IntToString(i),oItem,oPC); DestroyObject(oItem); oItem = GetNextItemInInventory(); i++; } SetCampaignInt(sDB,sTag+"_NbreObj",i,oPC); ExportSingleCharacter(oPC); } J'ai ajouté comme tu as peut-être pu le constater, la commande ExportSingleCharacter();. Avec ceci, ton problème devrait être réglé. |
Revenir en haut | |
NEO234 Acolyte Messages: 30 Localisation: Belgique |
Merci beaucoup mais, mais la je me retrouve avec des perso dupliquer, mdrrrrrr.
Bon l'utime solutions et la plus simple c'est qu'a l'ouverture du coffre il y aurait un scan de l'inventaire du joueurs et du contenant si il trouve un objet identique il le suprime du contenant, peut tu me faire un ajout de scripte dans c'est conditions? stp. je demande juste ça adieu la duplications et la triche . édit: quoique si le perso pose l'objets avant d'ouvrir le coffre ou le passe a quelqu'un autres bon bein une vérifications des objets au sol alort et du joueur. dsl, mais je crée mon premier mod-MMRPG je suis débutant en scripte mon serveur est a peine crée et sa manque de scripte pour le serveur lui meme, heureusement je suis très bon en décorations . |
Revenir en haut | |
arknax Ecuyer Messages: 56 |
Lol, je comprends que ce ne soit pas la meilleure des choses.
Cependant le script que tu me propose ne fera que rajouter des bugs...Et qui dit bugs, dit de nouvelles failles. À la place il faudrait voir à sauvegarder l'inventaire du joueur à la fermeture du coffre et de vérifier l'inventaire de celui-ci à son retour à la partie. (OnEnter)Je trouve cependant cela intile puisque la triche ne pourrait se produire que lors d'un plantage au niveau du serveur... Enfin, je vais regarder pour un tel script et je te reviens. |
Revenir en haut | |
NEO234 Acolyte Messages: 30 Localisation: Belgique |
Ok je t'atend .
_________________ NEO, Le mappeur FOU!!! Via le monde virtuel(informatique). Mes maps sur TmX !! |
Revenir en haut | |
arknax Ecuyer Messages: 56 |
Arf, ça ne pourra pas fonctionner...
La seule solution reste le bootage du joueur à la fermeture du coffre, mais bon...Je pense que c'est mieu de conserver le coffre tel quel étend donné que le duplicage ne pourrait se faire seulement lorsque le serveur planterait... |
Revenir en haut | |
NEO234 Acolyte Messages: 30 Localisation: Belgique |
Mouais mais il me faudrais le scriptes du modul alort, et je l'ai pas .
_________________ NEO, Le mappeur FOU!!! Via le monde virtuel(informatique). Mes maps sur TmX !! |
Revenir en haut | |
arknax Ecuyer Messages: 56 |
Le script du module?
|
Revenir en haut | |
NEO234 Acolyte Messages: 30 Localisation: Belgique |
oui, mais je crois que je vais simplement me contenter d'une simple campagne car c'est déjà asser compliquer avec les scriptes lol.
_________________ NEO, Le mappeur FOU!!! Via le monde virtuel(informatique). Mes maps sur TmX !! |
Revenir en haut | |
Arkain Voyageur Messages: 3 Localisation: -- |
Bonjour !
J'ai utiliser ton script pour un coffre et j'ai trouver une parade contre la duplication. J'ai penser donner un nom spécial aux objets puissants (puisque mon serveur fait restriction d'arme). J'aurais besoin de votre aide pour integrer un autre script qui détruirai automatiquement les armes portant le même nom ou tag. Merci Arkain |
Revenir en haut | |
La Bibliothèque de Neverwinter Nights Index du Forum »
La Bibliothèque Binaire du NWScript - Neverwinter Nights
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