NWN - Maskado

Oui mais ... (Camelia pb bis ^^).

Répondre
Partager Rechercher
Voilà !

J'ai lu le fil du sujet intitulé : Mais comment qu'on fait pour diversifier son commerce ?

de Camélia et je le trouve très instructif.

Cependant, étant revenu proche de la quiche par "défaut" en matière de script (ouais! ca fait un bon moment que je n'ai pas remis le nez dedans!), je cherche un script similaire sur beaucoup de points à celui proposé par Dayo, mais sensiblement différent cependant sur d'autre.

Je vais essayer d'expliquer clairement ma requête ^^.

Voulant me passer du système monétaire habituel, je voudrais instaurer un système de troc via des gemmes qui permettrai de prendre tel ou tel objet. Chacun de ces objets seraient regroupés dans des "listes de valeur" (reconnaissance par le début du tag par exemple ?!?). Chaque objet introduit dans le module aurait donc une valeur de 1 à 20 gemmes.

A chaque fois qu'un joueur prend ou perd un objet (au sol, dans un contenant ou que sais-je), je voudrais qu'il perde ou gagne la valeur en gemme du dit objet.

- Si prend = perte de la valeur de l'objet en gemmes.(prises dans l'inventaire du perso).
- Si perdu par l'action d'un script ou déposé au sol = gain de la valeur de l'objet en gemmes.(mises dans l'inventaire du perso).

Une particularité est qu'il serait impossible de prendre un objet au sol ou ailleur si l'on ne possède pas sur soi la valeur en gemmes demandé par l'objet.

Voilà dans un premier temps ce que j'essai de faire ...

Ps : merci d'expliquer clairement comme dayo comment fonctionne le script. Ca me permettra de remettre le pied à l'étrier en douceur ^^. Que ce soit des gemmes ou des variables ne me gène pas (ca fera moins de tentation pour les voleurs ^^).

Noriak utilise un système de monnaie quasi-similaire, à l'exception que l'or a un poids, et que les prêteurs sur gages échangent les gemmes en prenant 1% -contrairement aux marchandises classiques- contre de l'or ou inversement.

Si ça peu t'aider, c'est assez simple, un magasin qui ne vend et n'achète que les gemmes dont le taux de vente est a 101% ou/et le taux de rachat est a 99%, il suffira que le joueur échange son or contre des gemmes pour s'alléger.

Ce système économise plus de cpu, et un pètage de câbles sur des scripts ignobles a réaliser (ton script semble cependant irréalisable et assez simplement je pense)

voilà
__________________
http://img143.imageshack.us/img143/8194/banniereweb9lm.jpg
Euh... c'est DEyo...elle va mal le prendre sinon...
Je suis fière et heureuse d'accueillir un nouveau membre dans la secte de la quiche mais je tiens à préciser que je ne céderais pas mon trône ! (avis au ptits malins qui voudraient se faire passer plus quiche que moi !)

(non, non pas taper ! je le ferais plus promis ! pas pu résister quand j'ai vu mon pseudo dans le titre...)
Citation :
Ce système économise plus de cpu, et un pètage de câbles sur des scripts ignobles a réaliser (ton script semble cependant irréalisable et assez simplement je pense)
^^ !!! Réalisable ou irréalisable Elgrim ? le sens de ta phrase me laisse perplexe
Parce que c'est justement là un des intérêts de ma demande.Si c'est simple, tant-mieux ... sinon, bah ... J'aurai eut le chic de proposer quelque chose d'impossible ^^.

Citation :
Si ça peu t'aider, c'est assez simple, un magasin qui ne vend et n'achète que les gemmes dont le taux de vente est a 101% ou/et le taux de rachat est a 99%, il suffira que le joueur échange son or contre des gemmes pour s'alléger.
En fait j'aurai voulut donner une gemme à chaque passage de lvl (pour restreindre le fait que certains joueurs ont 120 couteaux suisses et 2799 marteaux de guerre dans leur inventaire,ce qui les forcerait à faire un choix judicieux quand à leur équipement). Les gemmes sont censées faire office de "régulateur d'inventaire". Donc je vois mal les pjs aller acheter leur gemme pour cette raison.

Comment faire celà de manière pas trop compliquée ?
Merci de toutes l'aide offerte pour une nouvelle quiche comme moi

^^
Arf, j'ai cru déjà avoir posté la réponse hier, apparemment non :/ (je doit recommencer mon pavé )

Pour faire simple, je voulais dire réalisable, bien sûr, mais tu viens de m'embrouiller: tu dit voiloir un système qui se passe au niveau de la saisie ou la perte d'un objet, puis tu change en parlant des gemmes au passage de lv

Bref, je pense avoir compris, tu veu empêcher les joueurs d'avoir trop d'objets sur eux? Il est possible de donner une valeur maximale en po pour un équippement (porté) selon des critères comme le lv, la race ou la classe.
Donc il faut faire une table pour determiner la valeur maximale qu'un PJ peut porter selon son lv.
ex: 3000po x lv, -500po x lv si mage, -500po x lv si elf, etc...
tout objet ajouté qui dépasserait cette somme serait déséquippé automatiquement.

ps: ten fais pas pour les trucs impossible, je suis scripteur acharné depuis 4ans, j'ai déjà fais des scrips d'une complexité dont je n'arrive pas a en revenir moi-même

pps: désolé pour les fautes, mais je n'ai pas envie de me corriger
Citation :
ps: ten fais pas pour les trucs impossible, je suis scripteur acharné depuis 4ans, j'ai déjà fais des scrips d'une complexité dont je n'arrive pas a en revenir moi-même
C'est vrai que dans mes souvenirs, les scripts avaient plus l'air de formules incantatoires que de simples lignes...

Bon, vais essayer de faire quelque chose avec les OnAcquireItem et OnDesacquireItem du module, parce que je ne veut pas que le joueur se ballade avec 36 Arme +12 dans les poches en attendant de pouvoir les équipées.

Si une idée vous passe par la tête pour résoudre ce problème, laissez un message !!!

Egrim : Oui 1 niv = 1 gemme. Si plus de gemmes dispo au moment ou le perso se saisit d'un objet trouvé, et bah il le reperd aussitôt.

Si un objet de l'inventaire lâché, Gain de la valeur de l'objet en gemmes(ou +"valeur" dans une variable) dans l'inventaire du perso.



*Va faire quelques tests et revient plus tard*
Tu ne peux pas faire dire à ton script : " Tant que le joueur n'est pas niv 3200, il ne pourra pas prendre dans son sac la super arme qui faut 3200 niveaux pour la porter" ?

Ou vous l'avez peut-être déjà dit ? mais dans un langage que je comprend pas alors ...

*Camelia qui aime donner un coup de main*
Si j'ai bien compris, ce que tu cherche c'est a limiter "le poids", le nombre d'objet de tes PJ ?

Si c'est ca, c'est facile à mettre en place, mais sûrement très très long. En gros, il faut que tu assigne à chaque objet une valeur en gemme (une variable). Puis tu travaille avec le acquier et Unacquier comme tu le suggère.
Faut que tu vérifie au début si c'est un PJ qui prend l'objet, et si c'est le cas, que tu vérifie son LocalInt(oPC,"gem_de_troc"). Si ce LocalInt est < à ta variable sur l'objet, l'objet est lâché.
Mais tu peux pas te contenter d'1 gemme par niveau, sans ca tes PJ pourront soit rien porter, soit tu aura un nombre de combinaisons ridicules.

Ce qui risque d'être long surtout dans ce système, c'est d'assigner aux objets leurs valeurs en gemmes.
oui ca je suis d'accord ^^.

Comment fais-t'on pour qu'une variable (dans notre cas Gemme) soit imputée à un objet. Y à t'il quelque chose de nouveau depuis 1 an sur ce sujet (j'ai cru voir un tableau de variable apparaître klk part mais ne me souvient plus ou).Y à t'il un moyen de tous les regrouper dans une liste, voir par catégories ? (quelque chose du genre include?!?).

Merci pour toutes infos à ce sujet sur la manière de comment procéder.



De plus, quel est a commande exacte pour NON pas faire disparaître l'objet mais POUR que le PJ repose seulement celui-ci au sol?



Merci Morethil de ton aide Tu as mis pile poil dans le mille pour tout le début ^^.
Le truc compliqué est qu'une gemme est l'équivalent d'1 Objet de valeur 1.

Lvl 1 = 1 gemme = 1 seul objet de valeur 1.
Lvl 2 = 2 gemmes = 2 objets de valeur 1 OU 1 objet de valeur 2.
Lvl 3 = 3 gemmes = 3 objets de valeur 1 OU 1 objet de valeur 1 + objet de valeur 2 OU ENCORE 1 objet de valeur 3 . etc etc etc ...

Note : Gemmes ou pas d'ailleur, car quand on y pense bien, il faut juste que la valeur des objets dans leur Totalité puisse au Maximum être équivalent au lvl des PJs). y à peut-être quelque chose de plus rapide en la matière (?!?).Genre une variable qui prend le niveau du Pj et ensuite vérifie que le niveau de valeur de la totalité des objets n'exède pas celui-ci (d'ou la variable à inclure à chaques objets) etc ...
Pour ce qui est par le seuil de PO max/lvl, pourquoi pas mais j'ai un gros doûte qu'a force ce système puisse être corrompu

Pour essayer d'être encore plus clair dans ma recherche si l'explication précédente n'a pas suffit : (au hasard)

-Si une dague est un objet de valeur 1. (1)
-Si un casque est un objet de valeur 2. (2)
-Si un bouclier est un objet de valeur 3. (3)

Alors toutes les configurations possibles seront les suivantes :

Lvl 1 = [1 dague(1)].
Lvl 2 = [2 dagues(2x1)] OU [1 casque(2)].
Lvl 3 = [3 dagues(3x1)] OU [1 dague et 1 casque (1+2)] OU [1 bouclier(3)].
Etc ...


Elgrim : Le système dont tu me parle à bugguer pour moi sur le serveur Noriak (Chuuut !! ^^). J'en est parlé rapidement avec Iris (). Plutôt que d'en expliquer les causes sur ce fil,contact-moi par MP si tu as besoin de plus amples informations à ce sujet
Ps : Si en plus tu donnes des cours de scriptage de façon désintéressée, je suis prenneur !!!


Bref ! il se fait très tard, je ne me reli donc pas...

A peluche ^^
Si j'ai bien comprit ce que tu veux faire, il faudrai que chaque objet d'inventaire qui intervient dans ton module ai tous soit une portion de tag représentant la valeur, soit, une variable interne représentant cette valeur. Cela t'interdira l'utilisation des objet précrées de nwn (à moins de faire un script pour modifier leur tag ou leur implanter la variable locale lors de leur création dans le mod).

Tu as pour cela les fonctions suivantes :
Code PHP:

// Create an item with the template sItemTemplate in oTarget's inventory.
   // - nStackSize: This is the stack size of the item to be created
   // - sNewTag: If this string is not empty, it will replace the default tag from the template
   // * Return value: The object that has been created.  On error, this returns
   //   OBJECT_INVALID.
   // If the item created was merged into an existing stack of similar items,
   // the function will return the merged stack object. If the merged stack
   // overflowed, the function will return the overflowed stack that was created.
   
CreateItemOnObject(string sItemTemplateobject oTarget=OBJECT_SELFint nStackSize=1string sNewTag="")
   
   
// Create an object of the specified type at lLocation.
   // - nObjectType: OBJECT_TYPE_ITEM, OBJECT_TYPE_CREATURE, OBJECT_TYPE_PLACEABLE,
   //   OBJECT_TYPE_STORE, OBJECT_TYPE_WAYPOINT
   // - sTemplate
   // - lLocation
   // - bUseAppearAnimation
   // - sNewTag - if this string is not empty, it will replace the default tag from the template
   
object CreateObject(int nObjectTypestring sTemplatelocation lLocationint bUseAppearAnimation=FALSEstring sNewTag=""
Pour inclure une valeur d'un nombre entier dans un objet, tu as les fonctions suivantes

Code PHP:

// Set oObject's local integer variable sVarName to nValue
   
void SetLocalInt(object oObjectstring sVarNameint nValue
Pour lire cette valeur, il y a :

Code PHP:

// Get oObject's local integer variable sVarName
   // * Return value on error: 0
   
int GetLocalInt(object oObjectstring sVarName
oObject étant l'objet dans lequel on trouve la valeur
sVarName est le nom de ta variable
nValue est la valeur

Si tu veux implanter cette valeur via aurora, tu le peux via les propriétés de l'objet, dans l'onglet description. Tu peux d'ailleurs y mettre plusieurs variables de plusieurs types.



Pour ce qui est de la gestion de la valeur des objets possibles, le système par gemme pourra permettre au joueur de voir facilement où il en est juste en regardant son inventaire, pour la solution par variable dans un objet de persistance, il te faudra un script qui par exemple donnera la valeur actuelle au perso via un dialogue.
Tiens au passage, petite question :
Dans l'expression ci-dessous :

if(oItemFouet == OBJECT_INVALID || (oFouetFroid != OBJECT_INVALID && d2(==1))


- Pourquoi et à quoi correspond le ! (pourquoi certaines expressions en ont et pas d'autres du même genre ?)
- que veut dire la fin de l'expression : && d2(==1)) ???


Et sinon une autre solution à laquelle j'ai pensé serai d'avoir la posibilité de faire ouvrir un magasin ou il serait possible de payer avec une monnaie d'échange NON PAS EN PO mais grace à des items (Gemmes par exemple). Est-ce possible ?
Citation :
oFouetFroid != OBJECT_INVALID
le != signifie "Pas égal à" ou "Strictement différent de". Donc on teste l'object oFouetFroid pour savoir s'il n'est pas invalide (OBJECT_INVALID)

Traduit en français l'expression (j'ai remis les parenthèse comme je pense qu'elle devraient l'être) :
if(oItemFouet == OBJECT_INVALID || (oFouetFroid != OBJECT_INVALID && d2==1)))
donnerai

Si (
oItemFouet est égal à OBJECT_INVALID ou l'ensemble de : oFouetFroid est différent de OBJECT_INVALID et d2 est égal à 1)

Quand on a == c'est que l'on veut tester les deux expressions pour savoir si elles sont identiques

Quand on a != c'est qu'on veut tester les valeurs pour savoir si elles sont différentes

quand on a = c'est qu'on veut donner la valeur de l'expression de droite à l'expression de gauche (par exemple si on mais d2 = 1, alors la l'expression d2 prendra la valeur de 1)

le && sert pour figurer un ET logique. pour que l'expression
(oFouetFroid != OBJECT_INVALID && d2==1) soit VRAI il faudra que les expressions oFouetFroid != OBJECT_INVALID ET d2==1 soient vraies toutes les deux.

Dans un même ordre d'idée, le || représente un OU logique, pour qu'une expression soit vrai, il faudra que l'une OU l'autre partie soit vrai.
Et bien, vous avez de la chance que Gurvan s'improvise tutorial online et gratuit à la demande....
Avec les couleurs et tout, ça mériterait d'être en persistant tout ça
Ben pour une fois que je sait répondre à une question, et que personne n'a répondu avant moi.....


Sinon, pour le !, dans le même ordre d'idée, on peut voir ça avec les fonctions, par exemple, le fonction : GetIsObjectValid(object)

cette fonction sert à savoir si un objet est valide ou non, s'il est valide cela renverra la valeur 1 (vrai), sinon, ça renverra la valeur 0(faux)

si on place le ! juste devant cette fonction, on ajoute une négation à la fonction, cela devient : !GetIsObjectValid(object), qui peut se traduire alors, si l'objet n'est pas valide, alors renvoi un 1 (vrai, l'objet n'est pas valide), sinon, renvoi un 0 (l'objet est valide)
si on écrit :
if(oItemFouet == OBJECT_INVALID) Si l'objet oItemFouet est égal à OBJECT_INVALID
on peut remplacer ça par
if( !GetIsObjectValid(oItemFouet )) que l'on pourrait traduire par Si l'objet oItemFouet n'est pas valide.
Citation :
if(oItemFouet == OBJECT_INVALID) Si l'objet oItemFouet est égal à OBJECT_INVALID
on peut remplacer ça par
if( !GetIsObjectValid(oItemFouet )) que l'on pourrait traduire par Si l'objet oItemFouet n'est pas valide.
J'ajoute même que Bioware avait annoncé jadis sur le forum officiel, qu'ils conseillaient la seconde syntaxe depuis je ne sais plus quel patch
Woa !!!

On à le droit à des tournures de phrases maintenant
Vive l'interro-negative
C'est pour quand le premier roman écrit uniquement en script ?

Gurvan : Merci de ton tuto online ^^ mais je ne demandais que pour le !
Cependant je suis sûr que ton intervention aidera beaucoup tous ceux essayant de comprendre un peu mieux un script. Au nom de ceux-là, je te remercie
(Quand on voit les crêpages de chignons sur un autre fil au sujet de la "communauté francophone" alors qu'il n'y à plus beaucoup de monde, C'est t'y pô malheureux ?!? Mais comme on dit, faut savoir rebondir et faire bouger les choses pour quelles évoluent)

Cependant 2 petites choses m'ennuies encore ...

- d2 est donc un dé à 2 faces ou j'ai loupé klk chose ?
Et si il fait 2 ? Parce ce qui me fait drôle depuis le début avec ce "d2" c'est qu'il ne me semble pas avoir vu de If .... d2==2, ou alors OBJECT_INVALID, FALSE ???
*Retourne voir le script de Nek*

Citation :
if(oItemFouet == OBJECT_INVALID || (oFouetFroid != OBJECT_INVALID && d2==1)))

Si (oItemFouet est égal à OBJECT_INVALID ou l'ensemble de : oFouetFroid est différent de OBJECT_INVALID et d2 est égal à 1)
- "Ou l'ensemble de : oFouetFroid" :
pour moi je n'y voit qu'un fouet de froid ...
Argl, j'avais pas fait attention au fait que tu parlais de la fonction d2()


Quand on veut agir avec une fonction, qu'elle renvoi une valeur ou non, il faut pas oublier les parenthèses.

On doit écrire d2(), ou d2(1) ==> le 1 indiquant alors qu'on lance 1 D à deux faces, la fonction renverra alors une valeur. On peut changer la valeur entre parenthèses pour avoir le nombre de D que l'on veut lancer.

Si on a n D, alors, la valeurs résultante sera la somme des tirages de chaque D.

Par exemple, si on écrit d2(3), c'est comme si on écrivait d2()+d2()+d2()
La, je voit pas trop. Il a quoi de spécial ton objet "NO DROP"?

Je pense que déjà, s'il est classé en "Objet de quête" (case cochée dans les propriétés de l'objet), ça devient difficile, à moins qu'il existe une fonction pour en enlever cette propriété, mais je n'en voit aucune capable de faire ça.
Les objets NODROP et les objets de quête (PLOT) ne sont pas négociables dans les magasins tant qu'ils sont "flaggés".

Les fonctions pour retirer ces flags sont:
SetPlotFlag()
et
SetItemCursedFlag()

Pour utiliser ces deux fonctions dans ton cas (vente dans un magasin), il n'y a, à mon avis qu'une seule façon. A l'ouverture du magasin (évènement du magasin OnOpenStore), tu passes en revue tout l'inventaire du personnage et tu positionnes ces flags comme tu les veux. Attention, faire une sélection relève de l'enfer si tu n'as pas prévu le truc dès le départ. Tu vas donc sûrement devoir tout passer en Non Cursed et Non Plot.

Par contre, je ne vois pas l'intérêt de mettre un objet en Cursed (maudit) pour permettre de le vendre. Tout l'intérêt c'est que justement il est NODROP. Sinon, le prochain passant au magasin va le racheter et il ne sera plus NODROP puisqu'on on l'a modifié. Donc, on pourra se le refiler entre joueurs.
Répondre

Connectés sur ce fil

 
1 connecté (0 membre et 1 invité) Afficher la liste détaillée des connectés
Rechercher
Rechercher:

Recherche avancée