La Bibliothèque de Neverwinter Nights
Aide et informations diverses sur Neverwinter Nights ainsi que D&D3.
La date/heure actuelle est 02/05/2024 10:11:13


  Page 1 sur 1 ¤

Voir le sujet précédent ¤ Voir le sujet suivant 
Auteur Message
Black Knight
Grand Maître Chanteur du Conseil
Inscrit le: 27 Oct 2005
Messages: 1031
Localisation: Fin fond du trou du cul du monde
Répondre en citant
Posté le : 01/05/2007 16:51:41 Sujet du message : BlackSmith - RemoveEffect ça remove tout !!!

Bonjour.

C'est encore moi, et j'demande encore de l'aide, j'en suis désolé Confused Mais c'est pour le bonheure de tous (enfin de moi principalement Razz)

Voici une fonction que j'ai faite pour mon blacksmith:

NWScript :
void BS_AddProp(object oPC, itemproperty iProperty)
{
object oItem = BS_GetItem(oPC);
itemproperty ipFirst = GetFirstItemProperty(oItem);
    while(GetIsItemPropertyValid(ipFirst) && iReturn == TRUE)
    {
        if(BS_GetBonusType(oPC) == 1)
        {
            if(GetItemHasItemProperty(oItem, ITEM_PROPERTY_ABILITY_BONUS)==TRUE)
            {
            RemoveItemProperty(oItem, ipFirst);
            }
        }
        else if(BS_GetBonusType(oPC) == 2)
        {
            if(GetItemHasItemProperty(oItem, ITEM_PROPERTY_DAMAGE_BONUS)==TRUE)
            {
            RemoveItemProperty(oItem, ipFirst);
            }
        }
        else if(BS_GetBonusType(oPC) == 3)
        {
            if(GetItemHasItemProperty(oItem, ITEM_PROPERTY_ON_HIT_PROPERTIES)==TRUE)
            {
            RemoveItemProperty(oItem, ipFirst);
            }
        }
        else if(BS_GetBonusType(oPC) == 4)
        {
            if(GetItemHasItemProperty(oItem, ITEM_PROPERTY_SKILL_BONUS)==TRUE){RemoveItemProperty(oItem, ipFirst);}
            else if(GetItemHasItemProperty(oItem, ITEM_PROPERTY_BONUS_SPELL_SLOT_OF_LEVEL_N)==TRUE){RemoveItemProperty(oItem, ipFirst);}
            else if(GetItemHasItemProperty(oItem, ITEM_PROPERTY_SAVING_THROW_BONUS)==TRUE){RemoveItemProperty(oItem, ipFirst);}
            else if(GetItemHasItemProperty(oItem, ITEM_PROPERTY_SAVING_THROW_BONUS_SPECIFIC)==TRUE){RemoveItemProperty(oItem, ipFirst);}
            else if(GetItemHasItemProperty(oItem, ITEM_PROPERTY_DARKVISION)==TRUE){RemoveItemProperty(oItem, ipFirst);}
            else if(GetItemHasItemProperty(oItem, ITEM_PROPERTY_HASTE)==TRUE){RemoveItemProperty(oItem, ipFirst);}
        }
    ipFirst = GetNextItemProperty(oItem);
    }
IPSafeAddItemProperty(oItem, iProperty, 0.0f, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING);
}
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.


Petite légende:
BS_GetBonusType(oPC) == Dès que j'arrive a un bonus qui a plusieurs choix (exemple: caracteristique, vous avez force, constitution, etc...) je mets une LocalInt et je la retrouve avec cette fonction. (C'est juste pour eviter à ce que l'item ait plusieurs bonus de même "catégorie" si vous preferez)

BS_GetItem(oPC) == C'est l'item qui est entrain d'être créer et qui se trouve dans un endroit impossible pour les joueurs (donc en sécurité). C'est lui qui recevra les bonus, et il sera copié dans l'inventaire du joueur à la fin, puis détruit.

Bon voila, j'ai un problème. Ce script marche à la perfection, mais trop ! lol ! Je vais avoir du mal à vous expliquez, donc je vous fait un exemple:

J'ajoute un bonus de +1 en force.
(Je me suis trompé, alors je change)
J'ajoute un bonus de +5 en constitution (+1 en force est supprimé, +5 en constitution est ajouté)
J'ajoute rapidité (rapidité fait partie d'une catégorie "Autres Bonus" qui a pour "repere" BS_GetBonusType(oPC) == 4)
(l'item n'a pas le droit d'avoir plusieurs autres bonus)
(je veux pas rapidité, mais Darkvision (Darkvision fait partie des autres bonus))
J'ajoute Darkvision (normalement, ici, rapidité est supprimé !)

Je m'arrête ici. Le bug vient quand on arrive donc a l'ajout de "Darkvision". Enfaite au lieu de supprimer QUE rapidité, il supprime TOUT et met Darkvision. Donc l'item se retrouve que avec 1 bonus, et c'est pas le but que je voulais.

Au debut, je me suis dit .. le while s'arrête pas ou un truc du genre, alors j'ai mit un truc comme if(iReturn == FALSE) on stop le while, et par la suite j'ai remarqué que a ce moment la, il enlevait le premier bonus de l'item !

Donc apparament, le script comprend pas ce que je lui demande ! Mais je vois pas d'ou vient mon erreur ... puisque il supprime bien ce que je veux, etc... mais quand il s'agit de remodifier un bonus déjà mit, et que l'item a d'autre bonus, et bein la, ça bug...

Merci de votre aide =)
_________________
[http]
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Montrer les messages depuis :
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


Sauter vers:
FAQ | Rechercher | Liste des Membres | Groupes d'utilisateurs | S'enregistrer | Profil | Se connecter pour vérifier ses messages privés | Connexion
Powered by phpBB 2.* [m] © 2001, 2002 phpBB Group
Theme rewritten in beautiful XHTML code by Baldurien.
Thème "La Bibliothèque de Neverwinter" crée par Kruger
Traduction par : phpBB-fr.com
Page generated in 36.84ms