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 28/11/2024 07:27:50
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 |
Black Knight Grand Maître Chanteur du Conseil Messages: 1031 Localisation: Fin fond du trou du cul du monde |
Bonjour.
Je suis bloqué a un telle point que j'fais 1 script pour verifier plein de truc, mais j'ai l'impression que c'est deux fonctions sont completement buggué ! Bon je vous explique mon problème ; Dans mon module j'autorise que les lettres de : - A à Z - a à z - 1 à 9 - ', _ et - C'est règle son mise pour pouvoir detruire les fichiers.bic sans trop soucis. Bref, j'ai donc fait un script pour convertir le nom du joueur en fichier.bic à savoir que un fichier.bic c'est : - Pas plus de 16 lettres - Petites lettres - Les caracteres que j'ai autorisé voici mon script (c'est une fonction) : NWScript :
string NF_GetFileBicName(object oPC) { string sName = GetName(oPC); sName = GetStringLowerCase(sName); string sCheck = "aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ123456789'_-"; string sBic; int i = 1; int iLenght = GetStringLength(sName); while(i <= iLenght) { if(FindSubString(sName, GetSubString(sCheck, i, 1)) != -1) { sBic += GetSubString(sName, i, 1); } else { sBic += ""; } i++; } if(GetStringLength(sBic) > 16) { sBic =GetSubString(sBic, 0, 16); } return sBic; } Donc on regarde chaque lettre de sName grâce a tout ce que j'ai autorisé (on regarde les autorisations dans sCheck). Bein pas moyen, ça bug ! Il accepte tout, même les caractères que je veux pas... Pourtant à ma connaissance -1 siginifie : n'est pas dedans. Donc j'ai fait un script pour verifier ... bein la c'est pire que ce que je croyais : NWScript :
void main() { object oPC = GetLastUsedBy(); string sName = GetName(oPC); string sRefu = "aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ123456789'_-"; int i = 0; int iLength = GetStringLength(sName); while(i <= iLength) { if(FindSubString(sName, GetSubString(sRefu, i, 1)) == -1) { SendMessageToPC(oPC, "F(-1) : "+GetSubString(sName, i, 1)); } else if(FindSubString(sName, GetSubString(sRefu, i, 1)) == 0) { SendMessageToPC(oPC, "F(0) : "+GetSubString(sName, i, 1)); } else if(FindSubString(sName, GetSubString(sRefu, i, 1)) == 1) { SendMessageToPC(oPC, "F(1) : "+GetSubString(sName, i, 1)); } else if(FindSubString(sName, GetSubString(sRefu, i, 1)) == 2) { SendMessageToPC(oPC, "F(2) : "+GetSubString(sName, i, 1)); } else if(FindSubString(sName, GetSubString(sRefu, i, 1)) == 3) { SendMessageToPC(oPC, "F(3) : "+GetSubString(sName, i, 1)); } else if(FindSubString(sName, GetSubString(sRefu, i, 1)) == -2) { SendMessageToPC(oPC, "F(-2) : "+GetSubString(sName, i, 1)); } else { SendMessageToPC(oPC, "Ta mere"); } i++; } } Et bien... je sais pas, défois ça va dans -1 défois dans 0 défois dans 2 et même 1 fois ça m'a dit "Ta mere" (je savais pas quoi mettre -.-) Quelqu'un peut m'expliquer précisément cette fonction très chiante ?? Merci _________________ [http] |
Revenir en haut | |
Ivellios Légende vivante Messages: 447 Localisation: Poitiers |
Je vois plusieurs problème à première vue, après je sais pas si ça vient de là.
En premier : Code : int i = 0;
// Et non pas : int i = 1; Ce n'est pas bon, car tu l'utilise pour faire une recherche (avec GetSubString) après en prenant i comme référence dans la chaîne de caractère, mais il faut savoir que ça commence à 0 une chaîne, donc tu loupera le premier caractère. Ensuite : Code : string sName = GetName(oPC);
sName = GetStringLowerCase(sName); string sCheck = "aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ123456789'_-"; Bon rien de grave, mais tu fait un LowerCase et dans ta variable de sCheck tu as mit des majuscules, juste pour dire que c'est inutile. Après : NWScript :
while(i <= iLenght) { if(FindSubString(sName, GetSubString(sCheck, i, 1)) != -1) { sBic += GetSubString(sName, i, 1); } else { sBic += ""; } i++; } Alors là je vais essayer d'être clair, pour celà on va prendre un exemple de nom : - Sunândrim Olentasse - sunândrim olentasse//Après le LowerCase - iLenght = 19 caractères Si on prend ta boucle tel quel (en prenant en compte mon changement de i=0), dans un premier temps du test si i < 19, donc si oui (attention tout se passe là ^^) : Tu test dans sName si tu trouve le caractère à la position i dans sCheck. Donc dans le cas présent tu test : - au 1er passage si il y a "a" dans sName - au 2em passage si il y a "A" dans sName - au 3em passage si il y a "b" dans sName - ... - au 18em passage si il y a "I" dans sName - au 19em passage si il y a "j" dans sName Tu devrais plutôt tester dans sCheck si tu trouve le caractère à la position i dans sName. Du coup tu test : - au 1er passage si il y a "s" dans sCheck - au 2em passage si il y a "u" dans sCheck - au 3em passage si il y a "n" dans sCheck - ... - au 17em passage si il y a "s" dans sCheck - au 18em passage si il y a "s" dans sCheck - au 19em passage si il y a "e" dans sCheck Du coup on trouvera "sunndrimolentass" car : - le â etant exclu. - l'espace étant exclu aussi. - le e de la fin supprimer sinon on fesait 17 caractères. Sinon tu peux supprimer ça : Code : else
{ sBic += ""; } Voilà voilou (pas facile d'expliquer des boucles ;p) _________________ Scripts, systèmes, fonctions,... c'est par ici... Pyjama pour castor, une vocation, un avenir sûr |
Revenir en haut | |
Black Knight Grand Maître Chanteur du Conseil Messages: 1031 Localisation: Fin fond du trou du cul du monde |
Merci de ta longue explication =)
J'ai remarqué que vaut mieux mettre aussi : < 0 pour dire "ne possede pas" et >= 0 pour dire "possede". Par contre truc vraiment très louche : les fichiers.bic la, ils sont pas un peu nommé au pif? Parce que moi j'ai mit un nom comme ça Cham""'-'--Smith quand je regarde le fichier.bic c'est : cham""'-'èè.bic Logique?? Merci EDIT: NWScript :
while(i <= iLenght) Il faut mettre à la place iLength - 1 car j'ai aussi un script NF_HasValidName(object oPC); et comme i = 0 il fait ce calcule : De 0 pour aller a iLenght : il compte le zéro donc si iLength = 10 lui il va compté 11. Voilou _________________ [http] |
Revenir en haut | |
Ivellios Légende vivante Messages: 447 Localisation: Poitiers |
C'est bien pour ça que j'avais juste mit < et non <=
Ivellios a écrit : du test si i < 19 _________________ Scripts, systèmes, fonctions,... c'est par ici... Pyjama pour castor, une vocation, un avenir sûr |
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