JeuxOnLineForumsPlusConnectés : 570 (sites) | 1137 (forums)Créer un compte
Forum jeux-vidéo>Neverwinter Nights
Maskado
Les forums JOL > Forum jeux-vidéo > Neverwinter Nights > NWN - Maskado > Incroyable ! Génération d'armes personnalisés ! RSS
   
Répondre
Partager Outils Rechercher
Avatar de Jedaï
Jedaï
Alpha & Oméga
 
Avatar de Jedaï
 

Incroyable ! Génération d'armes personnalisés !

L'un des gros problèmes auquel s'étaient heurté les bonnes volontés des créatifs qui voulait offrir des armes "sur mesures" à leurs joueurs était l'impossibilité de générer des objets possédant des caractéristiques non-prédéfinies.
Ce problème est maintenant presque résolue pour les armes, je cite ici le post fondateur de eMRaistlin :

Citation:
Je vous rappelle que :

- On peut depuis peu créer un 'OnHit' par script sur les armes.

- On peut créer une copie d'un objet en modifiant le tag

- On peut recuperer le tag d'une arme facilement...

Je pense que l'on peut donc creer des armes aux proprietes singuliere aussi facilement qu'en creant un script pour autre chose...

Va falloir s'y mettre (et paff... du boulot en plus .... )
Effectivement, toutes les propriétés de l'arme pourront être définies par script, incorporée dans son tag, qui sera vérifié par le script du OnHit pour savoir quels effets appliquer !!

C'est le début du règne des forgerons !

Le problème de la description peut-être réglé par l'octroi d'un pouvoir unique à l'arme, lançant un dialogue construit, grâce à des custom tokens, à partir du tag de l'arme appelante...

Au risque de surcharger son serveur (mais l'on espère que les armes "générée" resteront fort rares, on est pas des gros bills non plus), on peut également ajouter des caractéristiques "permanentes" aux objets, par le biais d'ExecuteScript() récursif. (mais là je reste plus réservé... ces caractéristiques "permanentes" devraient être réservé aux objets vraiment exceptionnels, sinon, les serveurs grilleront ! ).

Voilà je pense que les scripts seront assez simples à maintenir :
Il s'agira principalement de gargantuesques switch...case, s'appuyant sur les variables prédéfinies (traitées par le NWScript comme des constantes) d'effet (EFFECT_TYPE_* ), incorporée directement aux tags, avec une longueur constante et l'emploi de IntToString()...
Vraiment très simple !!
Pop des valeurs à travers une sélection de sous-chaînes puis boucle jusqu'à ce que la chaîne se réduise à une chaîne vide "".
Passage des paramètres par le même procédé : totalement mécaniste et très explicite du côté du script grâce à l'emploi des constantes et du case.
Lien direct vers le message - Vieux
Avatar de eMRaistlin
eMRaistlin
Alpha & Oméga
 
Avatar de eMRaistlin
 


Bien entendu, nous attendons vos suggestions pour le effets les plus interressant...
(Je suis personnelement sur la transformation d'une creature blessée en pierre, et un autre en poring ^^)
Lien direct vers le message - Vieux
Avatar de Skanzo Sylan
Skanzo Sylan
Empereur
 
Avatar de Skanzo Sylan
 
Heum... je passe mon tour

C'est hyper lourd à faire. Faudrait aut'chose qu'un scripteur de seconde zone comme moi (ok je sais, tu étais à cent lieues de penser à moi pour ce boulot, merci ça fait plaisir ).


Ça tente quelqu'un d'être l'auteur de cette petite merveille?
...
Oui! J'ai vu un doigt levé au fond!... D'accord, le projet est à toi cher Jedaï

Bon courage
Lien direct vers le message - Vieux
Avatar de Jaha Effect
Jaha Effect
Alpha & Oméga
 
Avatar de Jaha Effect
 
Ah pas moi, je suis en train de bosser sur le panthéon des royaumes oubliés avec tout les objets de culte qui donnerons les capacités que confère le clergé a ses prêtres et peut être quelques surprises.
J'espère seulement qu'une prochaine extension de NWN ne viendra pas me couper l'herbe sous le pied comme pour le jeu de carte merveilleux.

Jaha Effect
Lien direct vers le message - Vieux
Avatar de Jedaï
Jedaï
Alpha & Oméga
 
Avatar de Jedaï
 
Ben moi je veux bien, encore faut-il des suggestions, comme l'a si bien dit eM.

Le modèle général est pas bien compliqué, hein. Comme je l'ai dit, c'est pure question de manipulation de string et de switch...case... .
On peut faire tous les effets de base très simplement, par contre les effets nouveaux nécessitent de concevoir ça un peu plus soigneusement...

Premièrement, il faut établir soigneusement le modèle du tag : je suis complètement pour un tag entièrement chiffré, c'est clair et net ! D'accord c'est moins lisible, mais :
1, ça permet de compacter l'information (le tag est limité à 32 caractères non ?)
2, ça permet d'utiliser un switch...case, donc gain en vitesse d'exécution et en clarté du script.

Maintenant faut établir autre chose : faut-il avoir un modèle basé sur une taille des nombres fixe (3 chiffres chacun) par exemple ou sur des séparateurs ? (ou même mixte)
Le problème se pose surtout sur les paramètres à virgule flottante : on perd en précision et en taille si on prend la première solution.
D'un autre côté la première solution est beaucoup plus facile et rapide à mettre en oeuvre (surtout plus rapide) et c'est pas Azraël qui me contredira, vu que son "tableau" était basé sur ce principe.
C'est moins consommateur en CPU aussi.
Je vote donc pour la première solution, mais là, c'est une question de goût .

Donc, avis et suggestions ??
Lien direct vers le message - Vieux
Avatar de Jaha Effect
Jaha Effect
Alpha & Oméga
 
Avatar de Jaha Effect
 
Si tu t'en charge autant prendre une formule qui te conviendra le mieux non?

Jaha Effect
Lien direct vers le message - Vieux
Avatar de Skanzo Sylan
Skanzo Sylan
Empereur
 
Avatar de Skanzo Sylan
 
Houla, va y avoir une intense utilisation du GetSubString

On peut toujours économiser de la place dans le tag en utilisant de l'hexa, ainsi au lieu de trois caractères, on peut passer à deux.
Le problème est qu'il y a beaucoup plus que 256 spells...

Ya la fonction IntToHexString mais ya pô l'inverse
Lien direct vers le message - Vieux
Avatar de Jedaï
Jedaï
Alpha & Oméga
 
Avatar de Jedaï
 
Aarrg, j'ai dû faire une erreur quelque part...

Mon problème est surtout de savoir ce que vous attendez de ce système, de toute façon tout de suite, je suis assez limité dans mes possibilités de test, donc...

Je veux bien faire un modèle mais de toute façon, mettre tous les effets d'un seul coup, c'est un peu beaucoup... Disons que on va en discuter...
Bon et puis on continuera tout ça demain parce que là, il commence à se faire tard...

Première ébauche :
Code PHP:
//OnHit script (© Jedaï ;-) )

int GetParameter(string sTagint nOffset);

void main()
{
    
object oMod GetModule();
    
object oItem GetLocalObjectoMod"OnHit_Item" );
    
object oTarget OBJECT_SELF;
    
object oOwner GetLocalObjectoMod"OnHit_Owner" );
    
    
string sTag GetTagoItem );
    
int nOffset 0;
    
int nDamDealt GetTotalDamageDealt();
    
    while ( 
GetParametersTagnOffset ) )
    {
        switch( 
GetParametersTagnOffset++ ) )
        {
        case 
ITEM_PROPERTY_REGENERATION_VAMPIRIC //vampire
        
{
            
ApplyEffectToObjectDURATION_TYPE_INSTANTEffectVisualEffectVFX_IMP_NEGATIVE_ENERGY ), oTarget );
            
ApplyEffectToObjectDURATION_TYPE_INSTANTEffectVisualEffectVFX_IMP_HEALING_L  ), oOwner );
            
ApplyEffectToObjectDURATION_TYPE_INSTANTEffectHealnDamDealt  ), oOwner );
        }
        }
    }
}

int GetParameter(string sTagint nOffset)
{
    return 
StringToIntGetSubStringsTagnOffset 3);

Là y a qu'une propriété, mais les bases sont posées, et on peut affiner...
Lien direct vers le message - Vieux
Avatar de Jedaï
Jedaï
Alpha & Oméga
 
Avatar de Jedaï
 
C'est là que je me met à vouloir assassiner Bioware parce qu'ils ont "oublié" de mettre deux fonctions toutes bêtes : les fonctions de traduction de caractères vers le code ASCII, et l'inverse....
M****, avec ça on aurait pu travailler en base 256 !!! Deux caractères auraient été très largement suffisants !!
L'hexa ne suffit pas bien sûr et je ne me vois pas faisant une grosse fonction de conversion avec plein de if...else if... bien lourd pour le CPU s'il doit se peler ça une quinzaine de fois dans chaque script OnHit...
Lien direct vers le message - Vieux
Avatar de Jedaï
Jedaï
Alpha & Oméga
 
Avatar de Jedaï
 
Bon, on peut toujours y aller "à la barbare" comme ça pour la conversion :
Code PHP:
//fonctions de conversion int<->string hex

int HexStr2Intstring sHexa )
{
    
string sConv "0123456789ABCDEF";
    
    
int n 0;
    
int i 0;
    
int nL GetStringLengthsHexa );
    
    
string sChar;
    
    for(; 
nLnL--)
    {
        
sChar GetStringRightsHexa);
        
sHexa GetStringLeftsHexanL );        
        
+= FindSubStringsHexasChar ) * pow16);
        
i++:
    }
    
    return 
n;
}

string Int2HexStrint nDec )
{
    
string sConv "0123456789ABCDEF";
    
int i 10;
    
string s "";
    
int nT 0;
    
    while( 
nDec )
    {
        if( 
nT nDec pow16i) )
        {
            
+= GetSubStringsConvnT);
            
nDec -= nT pow16i);
        }
        
i--
    }
    
    return 
s;

Mais je le sens pas niveau temps de calcul...Quelqu'un aurait une autre suggestion ?
Lien direct vers le message - Vieux
Avatar de eMRaistlin
eMRaistlin
Alpha & Oméga
 
Avatar de eMRaistlin
 
ca me parait pas mal, mais honnetement, une fois que tu aura fais 99 case dans ton ActivateItem pour cette arme, je pense que tu aura largement rentabilisé ce OnHit.

non ?

(j'te rappelle qu'au niveau du OnHit, y'a deja d'autre options par defaut ^^)
Lien direct vers le message - Vieux
Avatar de Terminé
Terminé [?]
Roi / Reine
 
Avatar de Terminé
 
Ces armes seraient plus intéressantes que celles que l'on fait par l'éditeur ?
Ou les limites seront les même ?

(Je parle, niveau puissance)
Lien direct vers le message - Vieux
Avatar de eMRaistlin
eMRaistlin
Alpha & Oméga
 
Avatar de eMRaistlin
 
Citation:
(Je parle, niveau puissance)
Bein, a vrai dire, ca depend : si dans le OnHitActivate, tu met un script qui dit DestroyObject, la cible meurs sur le coup, sans sauvegarde, sans rien, en fait...

Si tu met un ApplyEffect(ExtraordinaryEffect(EffectDeath())), alors la cible meurs, protégée ou non par des immunités..

Apres, tu peux faire n'imps avec ca : la cible est transformée en creature autre, la cible est teleportée, la cible perd son or...

en fait, tout ce que tu peux faire via un trigger ou un sort ou autre...

Donc : oui, definitivement, tu peut faire plus puissant

Apres, je rappele qu'a vaincre sans péril, on triomphe sans gloire !
Lien direct vers le message - Vieux
Avatar de Reyan
Reyan [L.D.D]
Roi / Reine
 
Avatar de Reyan
 
l'interêt, c'est qu'elles sont "customisables" in-game
avec un forgeron quoi, on passe commande des effets qu'on veut, et ils sont implémenté sans qu'il soit forcé de reuploader un nouveau module avec un pov épée en plus dedans

ca permet de faire l'arme de gros bill de tes rêves, en plein jeu
enfin je crois
Lien direct vers le message - Vieux
Avatar de Terminé
Terminé [?]
Roi / Reine
 
Avatar de Terminé
 
Citation:
Provient du message de eMRaistlin
Bein, a vrai dire, ca depend : si dans le OnHitActivate, tu met un script qui dit DestroyObject, la cible meurs sur le coup, sans sauvegarde, sans rien, en fait...

Si tu met un ApplyEffect(ExtraordinaryEffect(EffectDeath())), alors la cible meurs, protégée ou non par des immunités..

Apres, tu peux faire n'imps avec ca : la cible est transformée en creature autre, la cible est teleportée, la cible perd son or...

en fait, tout ce que tu peux faire via un trigger ou un sort ou autre...

Donc : oui, definitivement, tu peut faire plus puissant

Apres, je rappele qu'a vaincre sans péril, on triomphe sans gloire !
Ok ,je vois ...

Il y aurait une éventuel parade face à ce genre de scripte?

Je dis ça parce que c'est très bien dans la mesure ou on peut personnalisé à fond son module, mais par contre ....
Il va y avoir de très gros abus sur les serveurs publiques.
Lien direct vers le message - Vieux
Répondre
Les forums JOL > Forum jeux-vidéo > Neverwinter Nights > NWN - Maskado > Incroyable ! Génération d'armes personnalisés !
   

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 15h32.
   

© 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