La Bibliothèque de Neverwinter Nights
Aide et informations diverses sur Neverwinter Nights ainsi que D&D3.
La date/heure actuelle est 19/05/2024 06:21:44


  Page 1 sur 2 ¤ Aller à la page 1, 2  Suivante

Voir le sujet précédent ¤ Voir le sujet suivant 
Auteur Message
L'Erudit
Seigneur
Inscrit le: 26 Oct 2005
Messages: 167
Répondre en citant
Posté le : 28/01/2006 09:57:06 Sujet du message : Fonctions utiles

Le sujet du topic parle de lui même Wink !
Pour poser vos questions, et afin de ne pas encombrer celui-ci, rendez vous sur ce sujet.

Pour commencer, voilà une fonction qui vous permet de convertir un temps de jeu (IG), en secondes réelles (IRL).
Cette fonction est utile pour les "DelayCommand", qui réclament des temps en secondes (IRL, et en float d'ailleurs Laughing).

Si vous rencontrez des problèmes signalez les sur ce sujet ou par MP, j'editerais mon message en conséquence.

Petite précision. Il est question de Fonctions, et non de Scripts ! Pour cela il y a un autre sujet.
Vous pouvez néanmoins illustrer vos créations par un Script, mais seulement à titre d'exemple, afin de correspondre au sujet initial Wink !

NWScript :
// Convert an In-Game Time into an In-Real Life number of seconds
// - nHour: number of hours you want to convert
// nMinute: number of minutes you want to convert
// nSecond: number of seconds you want to convert
// nMillisecond: number of milliseconds you want to convert
// - nFirstRatio: default value (1h(IG)=2m(IRL))
// nSecondRatio: default value (1h(IG)=2m(IRL))
// nThirdRatio: default value (1h(IG)=2m(IRL))
float IGTimeToIRLSecond(int nHour, int nMinute, int nSecond=0, int nMillisecond=0, int nFirstRatio=120, int nSecondRatio=2, float nThirdRatio=0.000002f);

float IGTimeToIRLSecond(int nHour, int nMinute, int nSecond=0, int nMillisecond=0, int nFirstRatio=120, int nSecondRatio=2, float nThirdRatio=0.000002f)
{
float fIRLSecond = IntToFloat(nHour*nFirstRatio)
                  + IntToFloat(nMinute*nSecondRatio)
                  + IntToFloat(nSecond)
                  + IntToFloat(nMillisecond)*nThirdRatio;


    return fIRLSecond;
}
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.
Dernière édition par L'Erudit le 05/03/2006 18:57:04; édité 5 fois
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Sith Vicious
Grand Sage du Conseil
Inscrit le: 19 Oct 2005
Messages: 693
Répondre en citant
Posté le : 29/01/2006 03:48:02 Sujet du message :

J'avons rien compris hihi.

Une fonction à la con, j'pense pas que ça interesse quelqu'un mais bon.
NWScript :

////////////////////////////// ///////////////////////////
//
//  Craftable Natural Resources (CNR) by Festyx
//
//  Name:  cnr_spells_inc
//
//  Desc:  This function stands alone to facilitate
//        alternate language translations.
//
//  Author: David Bobeck 01May03
//  Modified by Sith Vicious 28 Jan 2006
//
////////////////////////////// ///////////////////////////
string CnrGetNameForSpell(int nSpell)
{
  string sSpellName;
  int nNum = StringToInt(Get2DAString("spells","Name",nSpell));
  sSpellName = GetStringByStrRef(nNum);
  return sSpellName;
}
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.


Ca renvoit le nom d'un sort à partir de la constante (genre SPELL_CHARM_PERSON). J'en avais besoin pour le CNR, si vous l'utilisez ça peut vous servir (ça permet de mettre n'importe quel sort dans une recette et d'avoir le nom direct dans le dialogue et surtout y a plus rien à traduire, puisque ça chope le nom dans le tlk)
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Djezebel
Héros
Inscrit le: 29 Sep 2005
Messages: 252
Répondre en citant
Posté le : 30/01/2006 20:41:22 Sujet du message :

J'ajoute les miens qui sont simples peut-être pas top utiles mais bon ^^

Pour animer un levier par exemple :

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.


Pour faire un cadran solaire :

NWScript :
void main()
{
int nHeure = GetTimeHour();

if (6 < nHeure > 19)
    {
    ActionSpeakString("Il est "+ IntToString(nHeure)+" heure");
    }
else
ActionSpeakString("");
}
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.


Si on veut que quelque chose ne se fasse qu'une seule fois :

NWScript :
int nDoOnce = GetLocalInt(OBJECT_SELF, "DO_ONCE");
if(nDoOnce == 1)
return;

SetLocalInt(OBJECT_SELF, "DO_ONCE", 1);
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.


Examiner un objet par un clique gauche :

NWScript :
void main()
{
    object oPC=GetLastUsedBy();
    object oTarget=OBJECT_SELF;

    AssignCommand(oPC, ActionExamine(oTarget));
}
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.




Effacer l'inventaire d'un joueur à sa connexion :

NWScript :
SendMessageToPC(oPC, "");
  item = GetFirstItemInInventory(oPC);
  while (GetIsObjectValid(item)) // boucle qui vide l'inventaire
    {
    DestroyObject(item);
    item = GetNextItemInInventory(oPC);


  DestroyObject(GetItemInSlot(INVENTORY_SLOT_ARMS, oPC));
  DestroyObject(GetItemInSlot(INVENTORY_SLOT_ARROWS, oPC));
  DestroyObject(GetItemInSlot(INVENTORY_SLOT_BELT, oPC));
  DestroyObject(GetItemInSlot(INVENTORY_SLOT_BOLTS, oPC));
  DestroyObject(GetItemInSlot(INVENTORY_SLOT_BOOTS, oPC));
  DestroyObject(GetItemInSlot(INVENTORY_SLOT_BULLETS, oPC));
  DestroyObject(GetItemInSlot(INVENTORY_SLOT_CARMOUR, oPC));
  DestroyObject(GetItemInSlot(INVENTORY_SLOT_CHEST, oPC));
  DestroyObject(GetItemInSlot(INVENTORY_SLOT_CLOAK, oPC));
  DestroyObject(GetItemInSlot(INVENTORY_SLOT_CWEAPON_B, oPC));
  DestroyObject(GetItemInSlot(INVENTORY_SLOT_CWEAPON_L, oPC));
  DestroyObject(GetItemInSlot(INVENTORY_SLOT_CWEAPON_R, oPC));
  DestroyObject(GetItemInSlot(INVENTORY_SLOT_HEAD, oPC));
  DestroyObject(GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oPC));
  DestroyObject(GetItemInSlot(INVENTORY_SLOT_LEFTRING, oPC));
  DestroyObject(GetItemInSlot(INVENTORY_SLOT_NECK, oPC));
  DestroyObject(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC));
  DestroyObject(GetItemInSlot(INVENTORY_SLOT_RIGHTRING, oPC));
  // donne les objets voulus au personnage
  CreateItemOnObject("ResRef de l'objet a mettre dans l'inventaire", oPC);
  item = CreateItemOnObject("ResRef de l'objet a equiper comme armure", oPC);
  ActionEquipItem(item, INVENTORY_SLOT_CHEST);
  // donne 1 xp au joueur pour identifier qu'il n'est plus un nouveau joueur
  GiveXPToCreature(oPC, 1);

  // message de bienvenu a tous les joueurs
  SendMessageToPC(oPC, "Bienvenue sur le module etc...");

}
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.
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
lylver
Héros
Inscrit le: 08 Avr 2005
Messages: 274
Répondre en citant
Posté le : 31/01/2006 10:08:58 Sujet du message :

Pour faire des comparaisons de date et de durée et d'autres bricoles

NWScript :

//:: ////
//:: created 2003, dluan Wheel of Time
//:: updated 2004, lylver SoW
//:: ////
int _day()
{
    int iCTY = GetCalendarYear() ;
    int iCTM = GetCalendarMonth() ;
    int iCTD = GetCalendarDay() ;
    int iCDay = iCTY*12*28 + iCTM*28 + iCTD ;
    return iCDay ;
}

int _time()
{
    int iTH = GetTimeHour();
    int iTM = GetTimeMinute();
    int iTS = GetTimeSecond();
    int iCTime = FloatToInt(HoursToSeconds(iTH)) + iTM*60 + iTS ;
    return iCTime ;
}

void _grant_rest(object oPC)
{
//
// Init du repos et mort
    int nDelai = 540 ; // 9 minutes
    SetLocalInt(oPC, "PC_LastRest", _time()-nDelai);
    SetLocalInt(oPC, "PC_LastDayRest", _day());
    SetLocalInt(oPC, "DyingHP", -1);
    SendMessageToPC(oPC, "" ) ;
}

void _anti_deco(object oPC) {
  if (!GetIsDM (oPC)) {
  // don't let players to cheat deco/reco
      talent tFeat, tSpell;
      int nIndex, i, nTalentID;
      for (nIndex=1; nIndex<1000; nIndex++) {
        tFeat = TalentFeat (nIndex);
        tSpell = TalentSpell(nIndex);
        if (GetIsTalentValid(tFeat)) {
            nTalentID = GetIdFromTalent(tFeat);
            for (i=1; i<40; i++) {
              DecrementRemainingFeatUses(oPC, nTalentID);
              if (!GetHasFeat(nTalentID, oPC)) i = 40;
            }
        }
        if (GetIsTalentValid(tSpell)) {
            nTalentID = GetIdFromTalent(tSpell);
            for (i=1; i<40; i++) {
              DecrementRemainingSpellUses(oPC, nTalentID);
              if (!GetHasSpell(nTalentID, oPC)) i = 40;
            }
        }
      }
      SendMessageToPC(oPC, "" ) ;
  // end cheating section
  }
}
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.


Pour illustration utilisation du temps dans un script de repos

NWScript :

// morceau du script de repos
    // debut du repos
    if (GetLastRestEventType() == REST_EVENTTYPE_REST_STARTED) {
// .... //
        int iRestDay = GetLocalInt(oPC, "PC_LastDayRest");
        int iRestSecond = GetLocalInt(oPC, "PC_LastRest") ;
        int iRestDelay = _time() - iRestSecond + FloatToInt(HoursToSeconds(( _day() - iRestDay) * 24));
        SetLocalInt(oPC, "PC_HPRest", curHP);
        // si on a des provisions (pass-DM) : Repos Immediat
        object oProvisions = GetItemPossessedBy(oPC, "PROVISIONS");
        if (oProvisions != OBJECT_INVALID) { iRestDelay = RESTDELAY ; DestroyObject(oProvisions) ; } ;
        /* Checking the Resting Delay */
        if (iRestDelay < RESTDELAY) {
            AssignCommand(oPC, ClearAllActions());
            if (RESTDELAY-iRestDelay <= 60) SendMessageToPC(oPC, "Vous devez attendre moins d'une minute pour vous reposez");
            else SendMessageToPC(oPC, "Vous devez attendre " + IntToString(FloatToInt(IntToFloat((RESTDELAY-iRestDelay))/60)) + "");
            return;
        }
// ..... //
}
// plus loin
    // Repos effectif
    if (GetLastRestEventType() == REST_EVENTTYPE_REST_FINISHED) {
        SetLocalInt(oPC, "PC_LastRest", _time() );
        SetLocalInt(oPC, "PC_LastDayRest", _day() );
}
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.
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Enki
Légende vivante
Inscrit le: 06 Déc 2005
Messages: 432
Répondre en citant
Posté le : 31/01/2006 13:32:18 Sujet du message :

Voici une fonction toute simple pour enlever tous les effets d'un joueur :

NWScript :
void RemoveAllEffect(object oPJ)
  {
    effect eLoop=GetFirstEffect(oPJ);

while (GetIsEffectValid(eLoop))
  {
      RemoveEffect(oPJ, eLoop);
      eLoop=GetNextEffect(oPJ);
  }
}
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.
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Enki
Légende vivante
Inscrit le: 06 Déc 2005
Messages: 432
Répondre en citant
Posté le : 31/01/2006 13:35:57 Sujet du message :

Une autre fonction simple pour attribuer le nombre d'XP nécessaire pour qu'un joueur soit level X :
NWScript :
///a partir de "contest of champion" de Brenon Holmes ////
int GetXPRequiredForLevel(int nLevel )
{
    int nRequiredXP;
    int nCount;

    nRequiredXP = 0;

    for ( nCount = 1; nCount <= nLevel; nCount++ )
    {
        nRequiredXP += 1000 * (nCount - 1);
    }
    return nRequiredXP;
}
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.



EDIT : je la laisse pour comprendre le message d'en dessous : bravo Lylver !
Dernière édition par Enki le 31/01/2006 13:49:29; édité 1 fois
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
lylver
Héros
Inscrit le: 08 Avr 2005
Messages: 274
Répondre en citant
Posté le : 31/01/2006 13:44:34 Sujet du message :

NWScript :
// + simple et + rapide
int GetXPRequiredForLevel(int nLevel )
{
return ( nLevel * ( nLevel - 1 )) / 2 * 1000 ;
}
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.
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Sith Vicious
Grand Sage du Conseil
Inscrit le: 19 Oct 2005
Messages: 693
Répondre en citant
Posté le : 31/01/2006 13:51:05 Sujet du message :

NWScript :
// encore + simple et aussi rapide
int GetXPRequiredForLevel(int nLevel )
{
return ( nLevel * ( nLevel - 1 )) *500 ;
}
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.


Désolé j'ai pas pu m'empécher... Razz
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
lylver
Héros
Inscrit le: 08 Avr 2005
Messages: 274
Répondre en citant
Posté le : 31/01/2006 13:57:04 Sujet du message :

*mdr*
Pour la petite histoire ; c'est une formule de math : somme de 1 à n-1 = n*(n-1)/2
Dernière édition par lylver le 31/01/2006 14:01:00; édité 1 fois
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Enki
Légende vivante
Inscrit le: 06 Déc 2005
Messages: 432
Répondre en citant
Posté le : 31/01/2006 13:59:47 Sujet du message :

Voici une fonction qui peut servir de pouvoir unique pour un objet (merci à Djezebel qui m'a donné l'idée). Cela fait le même effet que le pouvoir "Poussée de Force" dans KOTOR pour ceux qui connaissent :

NWScript :
#include "x0_i0_position"

void Degage(object oNPC = OBJECT_SELF);

void Degage(object oNPC = OBJECT_SELF)
{

  object oPC = GetItemActivator();

  object oArea=GetArea(oPC);
  float fOrientation= GetFacing(oPC);

  vector vPosition = GetPosition(oNPC);
  float fDirection=GetNormalizedDirection(fOrientation);
  float fOrientation02=GetOppositeDirection(fOrientation);
  vector vNewPos=GetChangedPosition(vPosition,5.0f,fDirection );
  location lDestination=Location(oArea,vNewPos,fOrientation02) ;


    AssignCommand(oNPC,JumpToLocation(lDestination));

    DelayCommand(0.1,AssignCommand(oNPC,PlayAnimation(ANIMATION_LOOPING_DEAD_BACK,8.0,1.5)));
  }

void main()
{
  object oNPC = GetItemActivatedTarget();

      Degage(oNPC);
      }
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.

Libre à vous de rajouter des dégats !
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
lylver
Héros
Inscrit le: 08 Avr 2005
Messages: 274
Répondre en citant
Posté le : 31/01/2006 14:14:01 Sujet du message :

J'en ferais bien l'implémentation en sort d'altération pour magicien/ensorceleur.
Ca me rappelle deux sorts d'ADD : Push (Poussée niv 1) et Répulsion (niveau 7, sort de zone je crois)
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Anthraxcite
Légende vivante
Inscrit le: 12 Juin 2004
Messages: 372
Localisation: Belgique
Répondre en citant
Posté le : 31/01/2006 18:35:23 Sujet du message :

Pour ceux qui connaisse pas encore : [http]
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur MSN Messenger Ignorer l'utilisateur
 
L'Erudit
Seigneur
Inscrit le: 26 Oct 2005
Messages: 167
Répondre en citant
Posté le : 01/02/2006 00:45:08 Sujet du message :

Pour toutes questions/remarques/demandes, etc... prenez la peine de poster dans le topic correspondant. Ainsi, les messages seront clairement identifiés, et plus lisibles, je vous remercie Very Happy !
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Sith Vicious
Grand Sage du Conseil
Inscrit le: 19 Oct 2005
Messages: 693
Répondre en citant
Posté le : 04/02/2006 03:37:13 Sujet du message :

Bon je m'ennuyais alors j'ai bricolé.
Ca existe surement déjà et en mieux mais tant pis : c'est une fonction qui permet de créer du texte en rayons (en effets visuels quoi). Ca sert à rien mais c'est joli.
Ca donne des trucs comme ça : screen.

et le script c'est ça :
Ce message est un spoiler, et risque de vous informer de choses que vous auriez dû apprendre par vous même (fin d'un jeu, film, etc). À vos risques et périls (ludiques), vous pouvez le voir en cliquant sur cet avertissement.
Spoiler :

NWScript :

//by Sith Vicious
//4/02/06
/////////////////
const int VFX_BEAM_FLAME = 444;
const int VFX_BEAM_DISINTEGRATE = 447;

string SV_ALPHABET ="ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890+-*/'&lt;&gt;!:=";
string RESREF_INVIS = "plc_invisobj";

vector GetChangedPosition(vector vOriginal, float fDistance, float fAngle,float fHeight=0.0)
{
    vector vChanged;
    vChanged.z = vOriginal.z+fHeight;
    vChanged.x = fabs(vOriginal.x + fDistance * cos(fAngle));
    vChanged.y = fabs(vOriginal.y + fDistance * sin(fAngle));

    return vChanged;
}

location GenNewLocFromLoc(location lTarget, float fDistance, float fAngle, float fOrientation,float fHeight=0.0)
{
    object oArea = GetAreaFromLocation(lTarget);
    vector vNewPos = GetChangedPosition(GetPositionFromLocation(lTarget),
                                        fDistance,
                                        fAngle,
                                        fHeight);
    return Location(oArea, vNewPos, fOrientation);
}

void Write(string sCode, location lLoc, int bVertical,float fDuree, int nBeam, float fHaut, float fLarge, float fOrient )
{
    location lNew;
    int nPos = FindSubString(sCode,"+");
    string sRayon = GetStringRight(sCode,GetStringLength(sCode)-nPos-1);
    int nCode = StringToInt(GetStringLeft(sCode,nPos));
    object oPt1,oPt2,oPt3,oPt4,oPt5,oPt6,oPt7,oPt8,oPt9,oCible,oCurrent;
    effect eBeam;
    int i, nTarget;

    for (i=1;i<=9;i++)
    {
        if (nCode%2 == 1)
        {
            switch (i)
            {
                case 1 : lNew = GenNewLocFromLoc(lLoc,fLarge/2,fOrient,0.0);
                        oPt9 = CreateObject(OBJECT_TYPE_PLACEABLE,RESREF_INVIS,lNew);
                        oCurrent = oPt9;
                        break;

                case 2 : lNew = GenNewLocFromLoc(lLoc,fLarge,fOrient,0.0);
                        oPt8 = CreateObject(OBJECT_TYPE_PLACEABLE,RESREF_INVIS,lNew);
                        oCurrent = oPt8;
                        break;

                case 3 : lNew = (bVertical) ? GenNewLocFromLoc(lLoc,fLarge,fOrient,0.0,fHaut/2)
                                              : GenNewLocFromLoc(lLoc,sqrt(pow(fLarge,2.0)+pow(fHaut/2,2.0))
                                                                  ,fOrient+atan((fHaut/2)/fLarge),0.0);
                        oPt7 = CreateObject(OBJECT_TYPE_PLACEABLE,RESREF_INVIS,lNew);
                        oCurrent = oPt7;
                        break;

                case 4 : lNew = (bVertical) ? GenNewLocFromLoc(lLoc,fLarge/2,fOrient,0.0,fHaut/2)
                                              : GenNewLocFromLoc(lLoc,sqrt(pow(fLarge/2,2.0)+pow(fHaut/2,2.0))
                                                                ,fOrient+atan((fHaut/2)/(fLarge/2)),0.0);
                        oPt6 = CreateObject(OBJECT_TYPE_PLACEABLE,RESREF_INVIS,lNew);
                        oCurrent = oPt6;
                        break;

                case 5 : lNew = (bVertical) ? GenNewLocFromLoc(lLoc,fLarge/2,fOrient,0.0,fHaut)
                                              :GenNewLocFromLoc(lLoc,sqrt(pow(fLarge/2,2.0)+pow(fHaut,2.0))
                                                                  ,fOrient+atan(fHaut/(fLarge/2)),0.0);
                        oPt5 = CreateObject(OBJECT_TYPE_PLACEABLE,RESREF_INVIS,lNew);
                        oCurrent = oPt5;
                        break;

                case 6 : lNew = (bVertical) ? GenNewLocFromLoc(lLoc,0.0,fOrient,0.0,fHaut/2)
                                              :GenNewLocFromLoc(lLoc,fHaut/2,fOrient+90.0,0.0);
                        oPt4 = CreateObject(OBJECT_TYPE_PLACEABLE,RESREF_INVIS,lNew);
                        oCurrent = oPt4;
                        break;

                case 7 : lNew = (bVertical) ? GenNewLocFromLoc(lLoc,fLarge,fOrient,0.0,fHaut)
                                              : GenNewLocFromLoc(lLoc,sqrt(pow(fLarge,2.0)+pow(fHaut,2.0))
                                                                  ,fOrient+atan(fHaut/fLarge),0.0);

                        oPt3 = CreateObject(OBJECT_TYPE_PLACEABLE,RESREF_INVIS,lNew);
                        oCurrent = oPt3;
                        break;

                case 8 : oPt2 = CreateObject(OBJECT_TYPE_PLACEABLE,RESREF_INVIS,lLoc);
                        oCurrent = oPt2;
                        break;

                case 9 : lNew = (bVertical) ? GenNewLocFromLoc(lLoc,0.0,fOrient,0.0,fHaut)
                                              : GenNewLocFromLoc(lLoc,fHaut,fOrient+90.0,0.0);
                        oPt1 = CreateObject(OBJECT_TYPE_PLACEABLE,RESREF_INVIS,lNew);
                        oCurrent = oPt1;
                        break;
            }
            if (fDuree>0.0) DestroyObject(oCurrent,fDuree);
            eBeam= EffectBeam(nBeam,oCurrent,BODY_NODE_CHEST);
            while (StringToInt(GetSubString(sRayon,GetStringLength(sRayon)-2,1))==10-i)
            {
                nTarget = StringToInt(GetStringRight(sRayon,1));
                switch (nTarget)
                {
                    case 2 : oCible = oPt2; break;
                    case 3 : oCible = oPt3; break;
                    case 4 : oCible = oPt4; break;
                    case 5 : oCible = oPt5; break;
                    case 6 : oCible = oPt6; break;
                    case 7 : oCible = oPt7; break;
                    case 8 : oCible = oPt8; break;
                    case 9 : oCible = oPt9; break;
                }
                ApplyEffectToObject(DURATION_TYPE_PERMANENT,eBeam,oCible);
                sRayon = GetStringLeft(sRayon,GetStringLength(sRayon)-2);
            }

        }

        nCode>>=1;
    }
}

string Caractere(int nPos);
string Caractere(int nPos)
{
string sResult = "";
switch (nPos)
{
    case 0 : return "182+254758"; //a
    case 1 : return "446+121528475678"; //B
    case 2 : return "450+121328";//C
    case 3 : return "388+121727";//D
    case 4 : return "490+12132846";
    case 5 : return "488+121346"; //f
    case 6 : return "462+1213286778";//g
    case 7 : return "486+123847";
    case 8 : return "17+59";
    case 9 : return "226+242838";//j
    case 10 : return "482+123448";
    case 11 : return "386+1228";
    case 12 : return "458+12163638";
    case 13 : return "450+121838";
    case 14 : case 35 : return "450+12132838";
    case 15 : return "484+12133747" ;
    case 16 : return "458+1213283868";//q
    case 17 : return "486+1213374748";
    case 18 : return "486+1314284778";
    case 19 : return "337+1359";
    case 20 : return "450+122838";//u
    case 21 : return "321+1939";
    case 22 : return "458+12263868";//w
    case 23 : return "450+1823";
    case 24 : return "456+1623" ;
    case 25 : return "450+132328";
    case 26 : return "74+3638";
    case 27 : return "486+1324283747";
    case 28 : return "462+13283867";
    case 29 : return "61+454759";//4
    case 30 : return "441+1415294669";
    case 31 : return "441+1215294669";
    case 32 : return "484+132347";
    case 33 : return "486+1213283847";
    case 34 : return "358+13143847";
    case 36 : return "53+4759";
    case 37 : return "36+47";
    case 38 : return "503+18234759";
    case 39 : return "192+23";
    case 40 : return "48+45";// '
    case 41 : return "53+454749"; //&lt; = fleche gauche
    case 42 : return "53+475779"; //&gt; fleche droite
    case 43 : return "53+495979"; // ! fleche bas
    case 44 : return "53+455759"; // : fleche haut
    case 45 : return "166+2847"; //=

}
return "";
}

// sText : texte a ecrire
// lLoc : point de depart
// bVertical : TRUE les lettres seront debout, FALSE elles seront sur le sol
// nBeam : type de rayon
// fDuree : duree en secondes
// fHaut : Hauteur des lettres
// fLarge : Largeur fEspace : espace entre 2 lettres

void SvBeamWrite(string sText, location lLoc, int bVertical= TRUE, int nBeam = VFX_BEAM_SILENT_FIRE, float fDuree=0.0, float fHaut =1.0, float fLarge = 0.0, float fEspace = 0.0,float fOrient = 0.0);
void SvBeamWrite(string sText, location lLoc, int bVertical= TRUE, int nBeam = VFX_BEAM_SILENT_FIRE, float fDuree=0.0, float fHaut =1.0, float fLarge = 0.0, float fEspace = 0.0, float fOrient = 0.0)
{
  sText = GetStringUpperCase(sText);
  if (fLarge == 0.0) fLarge = fHaut*0.75;
  if (fEspace == 0.0) fEspace = fHaut * 0.25;
  int nLength = GetStringLength(sText);
  int i,nPos;
  string sChar,sCode;
  float fFacing = GetFacingFromLocation(lLoc);
  location lStart;

  for (i=0;i<nLength;i++)
  {
    lStart = GenNewLocFromLoc(lLoc,(fLarge+fEspace)*i,fFacing,0.0);
    sChar = GetSubString(sText,i,1);
    nPos = FindSubString(SV_ALPHABET,sChar);
    if (nPos!=-1)
    {
        sCode = Caractere(nPos);
        Write(sCode,lStart,bVertical,fDuree,nBeam,fHaut,fLarge,fOrient+fFacing);
    }
  }
}
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.



Je suis quand même assez fier de moi sur ce coup là.

EDIT : j'ai rajouté quelques signes : + - / * = '
plus 4 fleches avec les caractères
< flêche gauche
> flêche droite
! flêche bas
et : flêche haut

Re-EDIT : Réécrit, 115 lignes de moins ! Maintenant il est en couleur. Il fait rien de plus mais c'est plus propre.
Ajout de 2 constantes d'effets visuels bien cachés (mais disponibles, en tout cas dans la 1.66 HotU)

Encore EDIT : remplacez la 3ème ligne par ça :
string SV_ALPHABET ="ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890+-*/'<>!:=";
ça déconne ça veut pas afficher les < et > correctement.
Dernière édition par Sith Vicious le 07/02/2006 18:06:49; édité 5 fois
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
SexLove
Novice
Inscrit le: 15 Nov 2005
Messages: 16
Localisation: dans le cosmos
Répondre en citant
Posté le : 04/02/2006 05:03:21 Sujet du message : Suuuper!!!

Sad Sith Viscious....ton lien ne fonctionne pas, Moi je trouve ca génial!!! Lol ca ferait une belle demande de mariage venant de la part d'un illusionniste...
_________________
Eauprofonde-Cité des slendeurs, module en création bientot en beta [http]
Cinq minutes avant sa mort, il était toujours vivant!!!
Cliquez ce lien pour moi^^merci!
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Sith Vicious
Grand Sage du Conseil
Inscrit le: 19 Oct 2005
Messages: 693
Répondre en citant
Posté le : 04/02/2006 13:00:26 Sujet du message :

Quel lien ? le screen ? il marche chez moi c'est bizarre. Ou le spoiler ? Suffit de cliquer dessus (on se moque pas j'ai eu du mal à comprendre comment ça marche Uh ? )
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
SexLove
Novice
Inscrit le: 15 Nov 2005
Messages: 16
Localisation: dans le cosmos
Répondre en citant
Posté le : 04/02/2006 22:28:03 Sujet du message :

non désolé tout fonctionne, je crois que je vais arreter de boire lol... Laughing
_________________
Eauprofonde-Cité des slendeurs, module en création bientot en beta [http]
Cinq minutes avant sa mort, il était toujours vivant!!!
Cliquez ce lien pour moi^^merci!
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Enki
Légende vivante
Inscrit le: 06 Déc 2005
Messages: 432
Répondre en citant
Posté le : 15/02/2006 23:33:53 Sujet du message :

Une fonction pour envoyer un message à tous les joueurs d'une zone :

A mettre sur un trigger par exemple, ou sur le OnDeath d'un PNJ.

NWScript :
void SendMessageToAllPCInArea(string szMessage)
{
  // object oArea=GetArea(OBJECT_SELF);
  int n;
  object oPC=GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC,OBJECT_SELF,n);

  for(n = 1; oPC!=OBJECT_INVALID ; n++)
                    {

            oPC =GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC,OBJECT_SELF,n);
            SendMessageToPC(oPC,szMessage);
                    }
              }
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.


Très bonne idée ce post l'Erudit !
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
edisnotdead
Grand Chevalier
Inscrit le: 19 Fév 2005
Messages: 132
Répondre en citant
Posté le : 16/02/2006 06:50:13 Sujet du message :

a ce lien

on a:
apparentypepluspeau(prendre une apparence en donnant une peau ..util pour sous race )
off appareansetype pluspeau(retour normal)

tlobjectpillar(effet stargate...ou comment creer une collonne par script))

appareancetypenormal ( reprendre son appaerance normal sans stoker de variable apré un setappaearance)

shootcreature(ejecter une creature en arriére)
et d autre ...

http://www.deepblack.be/forum/viewforum.php?f=13
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
L'Erudit
Seigneur
Inscrit le: 26 Oct 2005
Messages: 167
Répondre en citant
Posté le : 05/03/2006 16:50:41 Sujet du message :

Deux nouvelles fonctions complémentaires: "HasManyItems" et "HasSomeOfManyItems".

La première vérifie si l'Objet du test possède bien tous les Items requis.
La seconde agit de même, mais se contente d'un Item ou plus, parmi les Item spécifiés.

Vous pouvez spécifier dix Items au plus pour chaque fonctions. Pourquoi dix? Parcequ'il fallait choisir une valeur finie, symbolique, et que j'ai pensé que dix possibilités suffiraient amplement.
Néanmoins, si vous voulez en spécifier plus, il faut modifier quelque peu la ou les fonction(s).
Ceci peut paraître difficile pour certains, alors s'ils le souhaitent et sur demande par MP, je peux le faire pour eux.

Je n'ai essayé ces fonctions que très rapidement, donc s'il y a un quelconque problème faites le moi savoir Wink !

NWScript :
// Returns TRUE if oCreature possesses Item(s) with the specified Tag(s)
// - oObject: Creature, Placeable or Store
// - sItemTag: the specified Tag for each Item
int HasManyItems(object oObject, string sFirstItemTag, string sSecondItemTag, string sThirdItemTag="", string sFourthItemTag="", string sFifthItemTag="", string sSixthItemTag="", string sSeventhItemTag="", string sEighthItemTag="", string sNinthItemTag="", string sTenthItemTag="");

int HasManyItems(object oObject, string sFirstItemTag, string sSecondItemTag, string sThirdItemTag="", string sFourthItemTag="", string sFifthItemTag="", string sSixthItemTag="", string sSeventhItemTag="", string sEighthItemTag="", string sNinthItemTag="", string sTenthItemTag="")
{
object oItem = GetFirstItemInInventory(oObject);
string sItemTag = GetTag(oItem);

int b1I, b2I, b3I, b4I, b5I, b6I, b7I, b8I, b9I, b10I, n;


    if (sFirstItemTag == "") b1I = TRUE;
    if (sSecondItemTag == "") b2I = TRUE;
    if (sThirdItemTag == "") b3I = TRUE;
    if (sFourthItemTag == "") b4I = TRUE;
    if (sFifthItemTag == "") b5I = TRUE;
    if (sSixthItemTag == "") b6I = TRUE;
    if (sSeventhItemTag == "") b7I = TRUE;
    if (sEighthItemTag == "") b8I = TRUE;
    if (sNinthItemTag == "") b9I = TRUE;
    if (sTenthItemTag == "") b10I = TRUE;


        while (oItem != OBJECT_INVALID)
      {
            if (sItemTag == sFirstItemTag
            && b1I != TRUE) b1I = TRUE;
      else if (sItemTag == sSecondItemTag
            && b2I != TRUE) b2I = TRUE;
      else if (sItemTag == sThirdItemTag
            && b3I != TRUE) b3I = TRUE;
      else if (sItemTag == sFourthItemTag
            && b4I != TRUE) b4I = TRUE;
      else if (sItemTag == sFifthItemTag
            && b5I != TRUE) b5I = TRUE;
      else if (sItemTag == sSixthItemTag
            && b6I != TRUE) b6I = TRUE;
      else if (sItemTag == sSeventhItemTag
            && b7I != TRUE) b7I = TRUE;
      else if (sItemTag == sEighthItemTag
            && b8I != TRUE) b8I = TRUE;
      else if (sItemTag == sNinthItemTag
            && b9I != TRUE) b9I = TRUE;
      else if (sItemTag == sTenthItemTag
            && b10I != TRUE) b10I = TRUE;

                    n = (b1I == TRUE
                    && b2I == TRUE
                    && b3I == TRUE
                    && b4I == TRUE
                    && b5I == TRUE
                    && b6I == TRUE
                    && b7I == TRUE
                    && b8I == TRUE
                    && b9I == TRUE
                    && b10I == TRUE);

                    if (n) break;

        oItem = GetNextItemInInventory();
        sItemTag = GetTag(oItem);
      }


                        return n;
}
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.

NWScript :
// Returns TRUE if oCreature possesses one or more Items
// amongst those with the specified Tags
// - oObject: Creature, Placeable or Store
// - sItemTag: the specified Tag for each Item
int HasSomeOfManyItems(object oObject, string sFirstItemTag, string sSecondItemTag, string sThirdItemTag="", string sFourthItemTag="", string sFifthItemTag="", string sSixthItemTag="", string sSeventhItemTag="", string sEighthItemTag="", string sNinthItemTag="", string sTenthItemTag="");

int HasSomeOfManyItems(object oObject, string sFirstItemTag, string sSecondItemTag, string sThirdItemTag="", string sFourthItemTag="", string sFifthItemTag="", string sSixthItemTag="", string sSeventhItemTag="", string sEighthItemTag="", string sNinthItemTag="", string sTenthItemTag="")
{
object oItem = GetFirstItemInInventory(oObject);
string sItemTag = GetTag(oItem);

int b1I, b2I, b3I, b4I, b5I, b6I, b7I, b8I, b9I, b10I, n;


    while (oItem != OBJECT_INVALID)
  {
        if (sItemTag == sFirstItemTag
        && b1I != TRUE) b1I = TRUE;
  else if (sItemTag == sSecondItemTag
        && b2I != TRUE) b2I = TRUE;
  else if (sItemTag == sThirdItemTag
        && b3I != TRUE) b3I = TRUE;
  else if (sItemTag == sFourthItemTag
        && b4I != TRUE) b4I = TRUE;
  else if (sItemTag == sFifthItemTag
        && b5I != TRUE) b5I = TRUE;
  else if (sItemTag == sSixthItemTag
        && b6I != TRUE) b6I = TRUE;
  else if (sItemTag == sSeventhItemTag
        && b7I != TRUE) b7I = TRUE;
  else if (sItemTag == sEighthItemTag
        && b8I != TRUE) b8I = TRUE;
  else if (sItemTag == sNinthItemTag
        && b9I != TRUE) b9I = TRUE;
  else if (sItemTag == sTenthItemTag
        && b10I != TRUE) b10I = TRUE;

            n = (b1I == TRUE
            || b2I == TRUE
            || b3I == TRUE
            || b4I == TRUE
            || b5I == TRUE
            || b6I == TRUE
            || b7I == TRUE
            || b8I == TRUE
            || b9I == TRUE
            || b10I == TRUE);

            if (n) break;

    oItem = GetNextItemInInventory();
    sItemTag = GetTag(oItem);
  }


                    return n;
}
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.
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Ivellios
Légende vivante
Inscrit le: 25 Jan 2005
Messages: 447
Localisation: Poitiers
Répondre en citant
Posté le : 06/03/2006 22:07:13 Sujet du message :

La même mais sans limites de nombres, ce qui est dommage c'est que la surcharge n'existe pas comme en prog (même si on peut toujours faire mieu ^^).
Là à la place de mettre plein de tag séparément, tu les mets tous dans un string séparés par un ;.
Exemple : "Tag1;Tag2;Tag3;"

Compilé mais pas testé...

Code :
/*============================================================================*\
||************************* PROTOTYPES DES FONCTIONS *************************||
\*============================================================================*/

// Renvoie TRUE si le joueur possède un des objets avec l'un des tags spécifiés.
// - oPC : Le PJ/PNJ possèdant les objets
// - sTag : La liste des Tag(s) des objets recherchés séparé par des ";".
int HasManyItems(object oPC, string sTag);

// Renvoie TRUE si le joueur possède tous les objets avec les tags spécifiés.
// - oPC : Le PJ/PNJ possèdant les objets
// - sTag : La liste des Tag(s) des objets recherchés séparé par des ";".
int HasSomeManyItems(object oPC, string sTag);

// Renvoie un élément de string défini par une position à partir de séparateurs.
// - sString : Le string de départ.
// - sChar : Le séparateur.
// - iNum : L'emplacement (position).
// Merci Anthraxcite
string GetString(string sString, string sChar, int iNum);

// Renvoie le nombre de caractères sChar contenu dans une chaîne de caractère.
// - sString : Le string de départ.
// - sChar : Le caractère.
int NmbChar(string sString, string sChar);


Code :
/*============================================================================*\
||******************************** FONCTIONS *********************************||
\*============================================================================*/

//////////////////////////////////////////////////////////////////<HasManyItems><DEB>
int HasManyItems(object oPC, string sTag)
{
int i = 0;
int k = 0;
int j = NmbChar(sTag, ";");
string sItem = "";

while(i < j)
{
i++;
sItem = GetString(sTag, ";", i);
if(GetItemPossessedBy(oPC, sItem) != OBJECT_INVALID)
{
k++;
}
}

i = 0;
if(k == j)
i=1;

return i;
}
//////////////////////////////////////////////////////////////////<HasManyItems><FIN>

//////////////////////////////////////////////////////////////<HasSomeManyItems><DEB>
int HasSomeManyItems(object oPC, string sTag)
{
int i = 0;
int k = 0;
int j = NmbChar(sTag, ";");
string sItem = "";

while(i < j)
{
i++;
sItem = GetString(sTag, ";", i);
if(GetItemPossessedBy(oPC, sItem) != OBJECT_INVALID)
{
k++;
}
}

i = 0;
if(k > 0)
i=1;

return i;
}
//////////////////////////////////////////////////////////////<HasSomeManyItems><FIN>

/////////////////////////////////////////////////////////////////////<GetString><DEB>
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Merci Anthraxcite <<<<<<<<<<<<<<<<<<<<<<<<<<<<\\
string GetString(string sString, string sChar, int iNum)
{
int iNextPos = FindSubString(sString, sChar);
string sPart = GetSubString(sString, 0, iNextPos);
sString = GetStringRight(sString, GetStringLength(sString)-iNextPos-1);
int i = 0;
string s = "";

while(iNextPos!=-1 && i < iNum)
{
i++;
if(i == iNum)
{
s = sPart;
}
iNextPos = FindSubString(sString, sChar);
sPart = GetSubString(sString, 0, iNextPos);
sString = GetStringRight(sString, GetStringLength(sString)-iNextPos-1);
}
return s;
}
/////////////////////////////////////////////////////////////////////<GetString><FIN>

///////////////////////////////////////////////////////////////////////<NmbChar><DEB>
int NmbChar(string sString, string sChar)
{
int i = 0;
int iLength = GetStringLength(sString);
int iFind = FindSubString(sString, sChar);

while(iFind != -1)
{
i++;
sString = GetSubString(sString, iFind+1, iLength-iFind-1);
iFind = FindSubString(sString, sChar);
}
return i;
}
///////////////////////////////////////////////////////////////////////<NmbChar><FIN>

_________________
Scripts, systèmes, fonctions,... c'est par ici...
Pyjama pour castor, une vocation, un avenir sûr
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur MSN Messenger Ignorer l'utilisateur
 
L'Erudit
Seigneur
Inscrit le: 26 Oct 2005
Messages: 167
Répondre en citant
Posté le : 07/03/2006 11:04:17 Sujet du message :

Je me demandais s'il était effectivement possible de réaliser quelquechose de ce genre, et je vois que c'est assez réussi Smile !

Par contre, les 2 premières fonctions que tu as repris ne sont pas tout à fait optimisées. Tu testes à chaque fois tout l'inventaire pour savoir si l'Item est présent, supposes qu'il y en ai plusieurs.
Mes scripts ne sont pas si longs pour rien Laughing !
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Ivellios
Légende vivante
Inscrit le: 25 Jan 2005
Messages: 447
Localisation: Poitiers
Répondre en citant
Posté le : 07/03/2006 16:43:11 Sujet du message :


L'Erudit a écrit :
Par contre, les 2 premières fonctions que tu as repris ne sont pas tout à fait optimisées. Tu testes à chaque fois tout l'inventaire pour savoir si l'Item est présent, supposes qu'il y en ai plusieurs.
Gniaiiis ?



L'Erudit a écrit :
Mes scripts ne sont pas si longs pour rien Laughing !
C'était juste pour virer la limite...
_________________
Scripts, systèmes, fonctions,... c'est par ici...
Pyjama pour castor, une vocation, un avenir sûr
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur MSN Messenger Ignorer l'utilisateur
 
L'Erudit
Seigneur
Inscrit le: 26 Oct 2005
Messages: 167
Répondre en citant
Posté le : 09/03/2006 10:40:06 Sujet du message :

J'explique.

La fonction "GetItemPossessedBy()", sélectionne le Tag de l'Item requis, et le compare alternativement à chacun des Tags, des Items de l'inventaire, un à un.

Une démarche inverse consisterait, à sélectionner un Item de l'inventaire et son Tag, pour comparer ce dernier aux Tags des Items requis, un à un.

Pour la fonction "HasSomeOfManyItems()", cette démarche est, je crois, plus adaptée, au delà d'1 Item requis, car elle ne requiert pas plusieurs tests d'inventaire, au contraire de "GetItemPossessedBy()".
Pour la fonction "HasManyItems()", la valeur de l'une par rapport à l'autre est déjà plus discutable.
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Ivellios
Légende vivante
Inscrit le: 25 Jan 2005
Messages: 447
Localisation: Poitiers
Répondre en citant
Posté le : 09/03/2006 18:46:22 Sujet du message :

(On pourra supprimé après car le post n'est pas fait pour ça, je réponds juste).

Je pense que bioware a fait sa fonction plus proprement qu'en nwscript direct, je pense qu'ils ont trouvé un moyen plus performant (et externe) d'avoir un retour sur les objet disponible ou non.
Après je me trompe peut être mais à ce momment là la fonction ne serait pas plus utile que toutes celle faites main par les scripteurs de l'époque (avant la sortie de la fonction).
_________________
Scripts, systèmes, fonctions,... c'est par ici...
Pyjama pour castor, une vocation, un avenir sûr
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur MSN Messenger Ignorer l'utilisateur
 
Montrer les messages depuis :
Page 1 sur 2 ¤ Aller à la page 1, 2  Suivante


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 144.706ms