JeuxOnLineForumsPlusCréer un compte
Forum jeux-vidéo>Neverwinter Nights
Maskado
Répondre
Partager Outils Rechercher
Avatar de Steauxback
Steauxback
Roi
 
Avatar de Steauxback
 

Script antivol

Bonjour

Je voudrait que certains objets ne puissent être voler.
Les objets en question on tous leurs nom commençant par "Orbe de"
voila le script que j'ai mit dans le OnAquieredItem :

object oItem = GetModuleItemAcquired();
object oVoleur = GetItemPossessor(oVitem);
object oProprio = GetModuleItemAcquiredFrom();
if (GetStringUpperCase(GetStringLeft(GetName(oVitem),4)) == "ORBE")
{
CreateItemOnObject(GetResRef(oItem),oProprio);
DestroyObject(oItem);
SendMessageToPC(oVoleur,"Cet objet ne peut être voler.");
}

Avec sa des que je lance le module...il plante

Quelqun pourrait il s'il vous plais :

1) m'expliquer pourquoi sa fait planter?
2) me donner la solution pour l'antivol?

Merci d'avance

Nalk
Lien direct vers le message - Vieux
Avatar de Prince Nexus
Prince Nexus
Dauphin
 
Avatar de Prince Nexus
 
Salut à toi,

ton script est intéressant mais à priori il ne reconnaitra pas ton object oVitem. Fait des tests pour savoir si l'item est valide aussi et enfin, fait un test pour savoir si le PC est un joueur (pas un MD ni un PNJ).
Et puis ton script ne compile meme pas donc pas la peine de faire des tests avec le module.
Enfin, je crois aussi que si tu mets comme phrase "Cet objet ne peut être volé (<--)." ça ira beaucoup mieux !! (le compilateur n'aime pas les fautes de grammaire !!)

Prince Nexus.
Lien direct vers le message - Vieux
Avatar de Tyrion
Tyrion
Roi
 
Avatar de Tyrion
 
Deja ici 2 fautes

Code PHP:
object oVoleur GetItemPossessor(oVitem);
object oProprio GetModuleItemAcquiredFrom(); 
A mon avis tu a inversé les declarations et la 2eme erreurs ai que ce n'est pas oVitem mais oItem

Un conseil sert toi du tag pour les selection c'est plus simple que le nom.
Lien direct vers le message - Vieux
Avatar de Taern
Taern
Alpha & Oméga
 
Avatar de Taern
 
En l'état actuel, ton script ne compile pas

Commence par remplacer oVitem par oItem (à supposer que ce soit une erreur de frappe).

D'autre part, après moult tests j'en était arrivé à la conclusion que la fonction GetModuleItemAcquiredFrom() ne marchait pas. Donc, pour contourner le problème, tu peux utiliser le OnUnacquiredItem. Cela dit, je me trompe peut-être (sûrement même, vu que je n'avais jamais entendu parler de ce bug avant )

Ce genre de script est assez pénible à faire parce qu'il est difficile de faire les bons tests pour savoir s'il s'agit d'un DM, d'un PNJ, d'un PJ, si l'objet a été pris par terre ou ailleurs, etc.
Ca demande pas mal d'essais

Cela dit, avant de demander une solution sur le forum, commence au moins par faire en sorte que ton script compile. Il y a un sujet pour t'aider dans cette voie, que nous a amoureusement concocté Reyan : http://forums.jeuxonline.info/showth...hreadid=190739

Voilà voilà
Lien direct vers le message - Vieux
Avatar de Steauxback
Steauxback
Roi
 
Avatar de Steauxback
 
J'ai fait des erreur dans la copie de mon script (faut dire que j'ai poster vers 4h du mat....)

voila le script et il compile *mon problème n'est pas la compilation du script* mon problème est que *si ce script est dans le OnAcquiereItem le module plante au chargement* quelqu'un peut il m'expliquer pourquoi???

//je commente et dite moi si je me goure quelque part svp

//l'objet que le pj vient de recevoir
object oItem = GetModuleItemAcquired();
//le pj qui a reçut l'objet
object oVoleur = GetItemPossessor(oItem);
//l'ancien proprietaire de l'objet (OU OBJECT_INVALID)
object oProprio = GetModuleItemAcquiredFrom();
//Si le nom de l'objet oItem commence par "Orbe"
if (GetStringUpperCase(GetStringLeft(GetName(oItem),4)) == "ORBE")
{
//creer un objet "orbe" identique sur l'ancien posseseur
CreateItemOnObject(GetResRef(oItem),oProprio);
//detruire l'objet volé
DestroyObject(oItem);
//envoyer un message au voleur
SendMessageToPC(oVoleur,"Cet objet ne peut etre vole.");
//ma touche "É" marche pas dans l'éditeur de script
}

Donc ce que je demande c'est :

1) pourquoi sa fait *planté le module juste après le chargement*?
2) Si c'est pas bon pourquoi?
3) Si y a un truc que j'ai mal ou pas du tout comprit quoi et ou?

Merci de vos réponses.

Nalk
Lien direct vers le message - Vieux
Avatar de Taern
Taern
Alpha & Oméga
 
Avatar de Taern
 
Je serais toi, je commencerais par commenter la ligne avec le CreateItemOnObject().

Mais sinon, ton script semble devoir marcher tel qu'il est. Peut-être que le problème vient du GetModuleItemAcquiredFrom(), donc teste et reviens nous voir
Lien direct vers le message - Vieux
Avatar de Prince Nexus
Prince Nexus
Dauphin
 
Avatar de Prince Nexus
 
GetModuleItemAcquired() est une fonction qui cause de nombreux ennuis (cf un autre post dont je ne me souviens plus le nom). Il faut repenser le script pour pouvoir le mettre dans onacquireitem du module cad mettre tous les tags des objets, testé s'ils sont dans l'inventaire du joueur (et non d'un MD ou d'un PNJ) et enfin le supprimer si tel est le cas.

Pour cette satanée fonction GetModuleItemAcquired, Bioware travaille dessus et prévoit de la modifier dans la 1.31 ou ultérieur : faut etre patient.

S'il y en a beaucoup, c'est fastidieux, mais bon, c'est jusqu'à maintenant le seul moyen...

Prince Nexus
Lien direct vers le message - Vieux
Avatar de Steauxback
Steauxback
Roi
 
Avatar de Steauxback
 
Ce que je ne comprend pas c'est que tant que ceci n'est pas dans le script :

//créer un objet "orbe" identique sur l'ancien possesseur
CreateItemOnObject(GetResRef(oItem),oProprio);
//détruire l'objet volé
DestroyObject(oItem);

ça fonctionne sans pb. Dés que je met la création de l'objet puis sa destruction sa plante le module au chargement....
Lien direct vers le message - Vieux
Avatar de Prince Nexus
Prince Nexus
Dauphin
 
Avatar de Prince Nexus
 
Mouarf, le programme boucle à l'infini : le proprio devient le voleur et le voleur le proprio....

Perso, je ne vois pas comment s'en sortir à part en mémorisant en permanent le nom du proprio en lui mettant un LocalInt.

J'espère avoir répondu à ta question...

Prince Nexus
Lien direct vers le message - Vieux
Avatar de Nermir
Nermir
Reine
 
Avatar de Nermir
 
Citation:
//ma touche "É" marche pas dans l'éditeur de script
Il y a un truc : tu tapes ton "é" dans le chercheur de fonctions (à droite), et tu fais un copier/coller.
Lien direct vers le message - Vieux
Répondre
Les forums JOL > Forum jeux-vidéo > Neverwinter Nights > NWN - Maskado > Script antivol
   

Outils Rechercher
Rechercher:

Recherche avancée

Les vidéos de Neverwinter Nights RSS
  • Aucune vidéo pour le moment...
Thème visuel : Fuseau horaire GMT +1. Il est actuellement 09h30.
   

© JeuxOnLine, le site des MMO, MMORPG et MOBA. Tous droits réservés. - Conditions générales d'utilisation - Conditions d'utilisation des forums - Traitement des données personnelles - ! Signaler un contenu illicite