JeuxOnLineForumsPlusCréer un compte
Forum jeux-vidéo>Neverwinter Nights
Maskado
Les forums JOL > Forum jeux-vidéo > Neverwinter Nights > NWN - Maskado > [script]SetLocalBoolean() ;) RSS
   
Répondre
Partager Outils Rechercher
Avatar de Jedaï
Jedaï
Alpha & Oméga
 
Avatar de Jedaï
 
Post

[script]SetLocalBoolean() ;)

Alors je vais rajouter ces deux fonctions au persistant des scripts, puisque je trouve que c'est vraiment une bonne idée d'Azraël que nous avons là !
Grâce à ces fonctions, et pourvu que vous stockiez beaucoup de booléen ( TRUE == 1 ou FALSE == 0 ) sur un même objet, vous pourrez économiser jusqu'à 31 local int par tranche de 32 booléens....
Gain évident de place, et donc de ressource pour votre CPU !!

Code PHP:
//Sur une idée et des fonctions originales de Azraël07
//remaniement par Jedaï

//Renvoie la valeur du bit de position nPosition du groupe sIntVarName
//oTrgObj : Objet cible par les variables
int GetBinInfo(object oTrgObjstring sIntVarNameint nPosition);

//prend un nombre et "normalise" sa longueur
string AdjustDecimal(int nNumberint nNumberOfDecimal 3);

//Attribue au bit de position nPosition du groupe sIntVarName la valeur bValue
//oTrgObj : Objet cible par les variables
void SetBinInfo(object oTrgObjstring sIntVarNameint nPositionint bValue TRUE);

string AdjustDecimal(int nNumberint nNumberOfDecimal 3)
{
    
string sNumber IntToString(nNumber);
    
int nL GetStringLength(sNumber);

    
nL nL nNumberOfDecimal;

    if (
nL<0)
        {
        
string sR "";
        for (; 
nNumberOfDecimal nNumberOfDecimal--)
            
sR += "0";
        return 
sR;
        }

    for (; 
nL nL--)
        
sNumber "0" sNumber;

    return 
sNumber;
}

void SetBinInfo(object oTrgObjstring sIntVarNameint nPositionint bValue TRUE)
{
    
int iNumber 0;
    for(; 
nPosition 32iNumber ++) nPosition -= 32;

    
string sStringName sIntVarName AdjustDecimal(iNumber);

    
iNumber << nPosition 1;

    
int nVar GetLocalInt(oTrgObjsStringName);
    
nVar bValue nVar iNumber nVar & ~iNumber;

    
SetLocalInt(oTrgObjsStringNamenVar);
}


int GetBinInfo(object oTrgObjstring sIntVarNameint nPosition)
{
    
int iNumber 0;
    for(; 
nPosition 32iNumber ++) nPosition -= 32;

    
string sStringName sIntVarName AdjustDecimal(iNumber);

    
iNumber << nPosition 1;

    
int nVar GetLocalInt(oTrgObjsStringName);

    return 
iNumber nVar TRUE FALSE;

Lien direct vers le message - Vieux
Avatar de 'Az
'Az [P.H.]
Alpha & Oméga
 
Avatar de 'Az
 
merci beaucoup jedaï
Lien direct vers le message - Vieux
Avatar de eMRaistlin
eMRaistlin
Alpha & Oméga
 
Avatar de eMRaistlin
 
Je cotoie des malades...


Merci en tout cas
Lien direct vers le message - Vieux
Avatar de RAT
RAT
Alpha & Oméga
 
Avatar de RAT
 
Merci aussi
Très bonne idée
Lien direct vers le message - Vieux
Avatar de talendil
talendil
Roi
 
Avatar de talendil
 
Thumbs up
je crois bien que je vais en abuser...
Lien direct vers le message - Vieux
Avatar de Jaha Effect
Jaha Effect
Alpha & Oméga
 
Avatar de Jaha Effect
 
J'aurais besoin d'une petite variante à ce système, et j'ai un doute sur la justesse de mon truc.
J'expose l'idée, j'ai défini des constantes sous forme de string dans une bibliothèque qui se présentent comme ça et bien sur, j'aimerais récupérer la valeur de mes 9 bits.
Code PHP:
string STR_GOD_ALIGN_AURILE  "010001010"
Je n'ai donc pas besoin de GetLocalInt ni de SetLocalInt par le fait et je n'ai besoin que de 9 valeurs booléennes donc j'en déduis que si je passe 9 bits au lieu de 32 ça posera pas de problèmes.
Et c'est là que je suis confronté à mes lacunes d'autodidacte, j'ai du mal à voir l'intérêt du AdjustDecimal dans mon cas.
N'irais je pas plus vite avec un GetSubString ?
Voilà si vous avez deux minutes pour me répondre

Jaha Effect
Lien direct vers le message - Vieux
Avatar de 'Az
'Az [P.H.]
Alpha & Oméga
 
Avatar de 'Az
 
bien si tu ne dépasse pas les 32 valeurs, tu peux facilement supprimer toute la première partie du code, destiné a répartire les bits exedentaires sur de nouvelles variables
Lien direct vers le message - Vieux
Avatar de Jaha Effect
Jaha Effect
Alpha & Oméga
 
Avatar de Jaha Effect
 
En fait je me dis que parfois je suis un peu naze car dans mon cas de figure, il est clair que GetSubString est la meilleur solution pour décomposer ma chaine.
Encore une question qui a sa réponse dans son énoncé, y'a des fois ou je me fait peur. Il faudrait que je pense à dormir un de ces quatre...

Jaha Effect
Lien direct vers le message - Vieux
Avatar de Gadjio
Gadjio
Alpha & Oméga
 
Avatar de Gadjio
 
Bon, dans l'idée, c'est beau, c'est chouette, mais...
Avec un système qui tourne en 32bit, des machines puissantes, de la ram à ne plus savoir qu'en faire (bon.. presque), vous êtes convaincus que ça optimise quelque chose ? L'appel d'une fonction à la place de la création d'une variable... bon, on doit y gagner un peu, mais est-ce vraiment sur ces choses là qu'il faut optimiser ? (au prix de la lisibilité du code, en général)

Ca ne mange pas de pain et c'est plus classe de stocker une trentaine de booleans sur 4 octets plutôt 128, certes. Mais à part pour les amstrad 6128, je suis pas persuadé que ça apporte énormément.

Joli boulot, Azra et Jedaï, en tout cas. (Comme d'hab' )
Lien direct vers le message - Vieux
Avatar de Skanzo Sylan
Skanzo Sylan
Empereur
 
Avatar de Skanzo Sylan
 
Citation:
bValue ? nVar | iNumber : nVar & ~iNumber
Mouarf!

Good job boy!
Lien direct vers le message - Vieux
Avatar de 'Az
'Az [P.H.]
Alpha & Oméga
 
Avatar de 'Az
 
Citation:
Avec un système qui tourne en 32bit, des machines puissantes, de la ram à ne plus savoir qu'en faire (bon.. presque), vous êtes convaincus que ça optimise quelque chose ? L'appel d'une fonction à la place de la création d'une variable... bon, on doit y gagner un peu, mais est-ce vraiment sur ces choses là qu'il faut optimiser ? (au prix de la lisibilité du code, en général)
Tout dépend a quelle echelle tu te place.

J'utilise ce système, par exemple, pour un système qui permet aux joueurs de gagner du savoir par la lecture des livres.

A raison d'au moins 100 bouquins prévus, ca pour chaques joueurs (disons 200 joueurs inscrit sur le module, et c'est une faible valeur), ca nous fait... 80ko pour enregistrer tout ca

ajoutons y un même système pour voir si oui ou non je joueur a déjà visité un lieu (bonus pour le joueur s'il voit la mer pour la première fois, bonus s'il voit la tour blanche de minas tirith pour la première fois, bonus s'il voit.....), disons une 100aine de lieux aussi, ca fait 80ko en plus.

Ensuite, placons nous au niveau des pnj named, pour enregistrer si oui ou non la quète à été faite ou pas, et ou en sont les relations générales avec le pnj...

A raison de 200pnj named, et au moins 4statuts par pnj(donc 2bits), ca nous fait... 320 ko

ce n'est qu'une petite partie de tout ce que je veux enregistrer de cette mannière, mais nous en sommes deja à 400ko, ce qui commence a devenir significatif (quand même 0.4mo) si on prend en compte le fait qu'il faut encore retenir de nombreuses autres valeurs, alors qu'avec ce système, pour une charge CPU suplémentaire négligeable et une complexité dans le script identique, on passe de 400ko à 12ko. Inutile d'aller bouffer les ressources pour rien, on en à largement besoin ailleur.
Lien direct vers le message - Vieux
Avatar de Gadjio
Gadjio
Alpha & Oméga
 
Avatar de Gadjio
 
Clair.

Mon propos n'était pas vraiment de dire "ça sert à rien", mais plutôt qu'il ne fallait pas céder à la fièvre de l'optimisation quand l'apport est négligeable (ce qui n'est pas forcément le cas).
Tu appliques ton système de conversions binaires à une gestion des variables persistantes comme Puma et là franchement tu es heureux d'avoir une variable à la place de 32. Le tout est de se demander si l'optimisation est légitime, pour pas se retrouver avec du binaire partout même pour coder cinq malheureux booleans.
Lien direct vers le message - Vieux
Avatar de Jedaï
Jedaï
Alpha & Oméga
 
Avatar de Jedaï
 
Oui, c'est sûr mais parfois c'est même plus logique de traiter un champ de booléen par référence numérique plutôt que par string, par exemple pour ma taverne, l'état des chambres (louée ou non) est stocké de cette façon sur un champ "bbChambre" avec le 1er booléen pour la première chambre, le 2ème pour la chambre n°2, etc... C'est plus lisible que si j'avais fait dix variables "bChambre1", "bChambre2", etc.. non ?
Lien direct vers le message - Vieux
Avatar de Jaha Effect
Jaha Effect
Alpha & Oméga
 
Avatar de Jaha Effect
 
j'adhère entièrement
Et je détourne à l'occase

Jaha Effect
Lien direct vers le message - Vieux
Répondre
Les forums JOL > Forum jeux-vidéo > Neverwinter Nights > NWN - Maskado > [script]SetLocalBoolean() ;)
   

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 23h20.
   

© 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