JeuxOnLineForumsPlusConnectés : 211 (sites) | 405 (forums)Créer un compte
Dark Age of Camelot
Général
Les forums JOL > Dark Age of Camelot > DAoC - Général > [programation] Logiciel de spellcraft RSS
   
Répondre
Partager Outils Rechercher
Avatar de Khaerdaeliss/Molenn
Khaerdaeliss/Molenn [PdM]
Roi / Reine
 
Avatar de Khaerdaeliss/Molenn
 

[programation] Logiciel de spellcraft

Bon, je ne sais pas si je suis sur le bon forum, mais je ne suis pas sûre que j'obtienne une réponse sur le forum technique, qui me semble parler plus des pbs liés au jeu en lui même (mais sinon, dépalcez moi )...

Je ne laisse pas tomber mon logiciel de craft, mais j'en ai commencé sur le spellcraft dans le même temps, et je dois dire que là, je cale...

Dans les faits, le logiciel est quasi fini, à une exception près : le calcul des points de charge.

Je récupère bien les pts de charge inhérents à chaque gemme, ce qui donne quelque chose du style :
charge1 = 5
charge2 = 3
charge3 = 7
charge4 = 1
(exemple totalement fictif et probablement faux, mais ce n'est pas le but de la question)

A partir de là, j'ai un soucis pour obtenir le total des points :
J'étais parti sur un test qui me ressort la variable la plus élevée des 4 valeurs, ce qui me donne dans mon exemple :
max = 7
autre1 = 5
autre2 = 3
autre3 = 1

Et là, j'applique une formule que je croyais être la bonne :
((max * 2) + autre1 + autre2 +autre 3.)/2

Et là j'obtiens un chiffre total qui me donne la charge de l'objet.
Soucis, ce chiffre n'est jamais bon... Je le compare avec ce que j'obtiens sur le logiciel de Finnithnel et ce n'est pas toujours bon.

A priori, mon soucis vient de l'arrondi, quand il y a des gemmes d'une valeur de 0,5.

D'où mon appel au secours :
Si quelqu'un pouvait m'expliquer où je me plante...
Encore mieux, si quelqu'un connait la réponse en VB.

J'ai envoyé un MP à Finnithnel qui doit avoir résolu ce pb et qui fait du VB, mais c'était mon 1er MP, je ne sais pas du tout si je l'ai envoyé comme il faut , ou alors s'il est en vacances ou s'il ne veut pas me donner la réponse (un logiciel concurrent ? ^^)...

Toujours est il que je sèche... Encore une demi-heure de boulot dessus et il est prêt à mettre à disposition, c'est rageant.

D'avance merci à ceux (et celles ) qui pourront m'aider, et désolé pour le mal de crâne occasionné à ceux que ça n'intéresse pas du tout (mais fallait pas lire jusqu'au bout:bouffon:
Lien direct vers le message - Vieux
eldora
Reine
 
Si tu pouvais indiquer le chiffre que tu obtiens et celui de Fin, ça permettrait de savoir d'où vient le pb

Je pencherais sur le fait que tu tronques le résultat alors qu'il faut faire un arrondi. Exemple :
Pour 10,5 => tronque = 10 Arrondi=11

Si c'est ça, rajoute juste à ta formule un +0,5
Ca deviens donc :
((max * 2) + autre1 + autre2 +autre 3.)/2 + 0.5
Lien direct vers le message - Vieux
Avatar de Tixu
Tixu
Alpha & Oméga
 
Avatar de Tixu
 
Citation:
Provient du message de eldora
Si tu pouvais indiquer le chiffre que tu obtiens et celui de Fin, ça permettrait de savoir d'où vient le pb

Je pencherais sur le fait que tu tronques le résultat alors qu'il faut faire un arrondi. Exemple :
Pour 10,5 => tronque = 10 Arrondi=11

Si c'est ça, rajoute juste à ta formule un +0,5
Ca deviens donc :
((max * 2) + autre1 + autre2 +autre 3.)/2 + 0.5
non c'est l'inverse

si tu regarde dans le herald le code du javascript du spellcalc tu trouve ca:

if ((itemStrength4 >= itemStrength2) && (itemStrength4 >= itemStrength3) && (itemStrength4 >= itemStrength1)) { itemStrength4 = itemStrength4 * 2; }
if ((itemStrength3 >= itemStrength2) && (itemStrength3 >= itemStrength1) && (itemStrength3 >= itemStrength4)) { itemStrength3 = itemStrength3 * 2; }
if ((itemStrength2 >= itemStrength1) && (itemStrength2 >= itemStrength3) && (itemStrength2 >= itemStrength4)) { itemStrength2 = itemStrength2 * 2; }
if ((itemStrength1 >= itemStrength2) && (itemStrength1 >= itemStrength3) && (itemStrength1 >= itemStrength4)) { itemStrength1 = itemStrength1 * 2; }


itemStrength = itemStrength1 + itemStrength2 + itemStrength3 + itemStrength4;
if (itemStrength > 0) { var i9 = Math.floor( itemStrength / 2); }
if (itemStrength < 1) { var i9 = 0; }

math. floor en javascript signifie que tu doit prendre la valeur entiere inferieure ou egale.

utilise trunc(x) plutot que round(x) en delphi ou floor en c++
Lien direct vers le message - Vieux
Avatar de Bagnard à Vie
Bagnard à Vie
Bagnard
 
Avatar de Bagnard à Vie
 
HS -
hum c'est quoi l'interet de refaire un programme qui existe déja en ultra complet , tel que le Leladia ?
fin du HS -
Lien direct vers le message - Vieux
Avatar de Tixu
Tixu
Alpha & Oméga
 
Avatar de Tixu
 
Citation:
Provient du message de Bagnard à Vie
HS -
hum c'est quoi l'interet de refaire un programme qui existe déja en ultra complet , tel que le Leladia ?
fin du HS -
peut etre un interet ludique...? la programmation aussi peut etre un loisir, pas seulement le farming de RP...
Lien direct vers le message - Vieux
Avatar de Bagnard à Vie
Bagnard à Vie
Bagnard
 
Avatar de Bagnard à Vie
 
effectivement j'avais pas pensé à ca
Lien direct vers le message - Vieux
Arnot Otto
Bagnard
 
Citation:
Provient du message de Tixu
peut etre un interet ludique...? la programmation aussi peut etre un loisir, pas seulement le farming de RP...
bonne réponse !
Lien direct vers le message - Vieux
Avatar de Khaerdaeliss/Molenn
Khaerdaeliss/Molenn [PdM]
Roi / Reine
 
Avatar de Khaerdaeliss/Molenn
 
Citation:
Provient du message de Bagnard à Vie
HS -
hum c'est quoi l'interet de refaire un programme qui existe déja en ultra complet , tel que le Leladia ?
fin du HS -
Il y a trois réponses :
La première est, il est vrai, que j'aime me torturer l'esprit. Le plaisir de trifouiller dans les lignes de code ... Mais je te rassure, je ne me fais pas de petits programmes que pour DAOC, mais il se trouve que j'y joue, alors, si en plus ça peut servir à quelqu'un. Mieux vaut avoir le choix entre plusieurs logiciels que d'être en train de pourrir la vie à un pauvre arcaniste et ses feuilles de papier. Et si tu veux continuer à utiliser celui de Leladia, sache que je ne t'en voudrais pas

La deuxième : ça m'occupe quand je craft (Vive SI et la fonction alt+tab !). Je lance une potion, je tape 2 lignes de code, je lance un proc, je colle un bouton... Tu saisis ?

La troisième : Bien que celui qu'a fait Finn soit bien et pratique (c'est celui que j'utilise), il manque toujours des fonctionnalités que j'aurai aimé avoir, etc... Et plutôt que lui demander de les ajouter ... ON n'est jamais aussi bien servir que par soit même. Je ne dis pas que le mien sera mieux (il est même possible qu'il soit moins complet, au moins dans un premier temps), mais puisqu'il aura le mérite d'exister, autant que j'en fasse profiter tout le monde... C'est un freeware, j'y gagne rien (enfin, si quelqu'un tient absolument à payer pour, je ne dirai pas non ! )


Citation:
Provient du message de eldora
Si tu pouvais indiquer le chiffre que tu obtiens et celui de Fin, ça permettrait de savoir d'où vient le pb
Je vais prendre un vrai exemple, ça va être plus parlant.
Je mets sur un objet :
vie + 28 = 7 pts de charge
constitution + 7 = 5 pts de charge
1 compétence +2 = 5 pts de charge
Focus quelqu'il soit = 0,5 pts de charge.

Avec ma formule actuelle, j'obtiens 12,25


Si je remplace dans ma formule le signe de division, ce qui donne :
((max * 2) + autre1 + autre2 +autre 3.) \ 2 (le signe \ arrondi lors de la division en VB)
J'obtiens 12.

En vérifiant sur le logiciel de Finn, déjà, j'ai un soucis, un focus seul, il m'indique 1 pt de charge, je croyais que c'était 0,5).
En mettant les mêmes gemmes, j'obtiens 12,5
J'ai quasiment tout le temps une différence de 0,5)


Citation:
itemStrength = itemStrength1 + itemStrength2 + itemStrength3 + itemStrength4;
if (itemStrength > 0) { var i9 = Math.floor( itemStrength / 2); }
if (itemStrength < 1) { var i9 = 0; }

math. floor en javascript signifie que tu doit prendre la valeur entiere inferieure ou egale.

utilise trunc(x) plutot que round(x) en delphi ou floor en c++ [/i]
Je suis désolé, je ne comprends rien au javascript, ni au delphi, ni au c++.

par contre, si je rentre la fonction :
charge_posée = ((max * 2) + autre1 + autre2 +autre 3.) / 2
charge_posée = Round(charge_posée), j'obtiens 12 (en fait, je crois que \ = round, faudra que je revérifie)

Idem si j'utilise la fonction Fix(charge_posée)

La fonction Trunc n'existe pas en VB, je regarde si un équivalent existe...
Lien direct vers le message - Vieux
Avatar de Tixu
Tixu
Alpha & Oméga
 
Avatar de Tixu
 
Citation:
Provient du message de Khaerdaeliss

Je suis désolé, je ne comprends rien au javascript, ni au delphi, ni au c++.

par contre, si je rentre la fonction :
charge_posée = ((max * 2) + autre1 + autre2 +autre 3.) / 2
charge_posée = Round(charge_posée), j'obtiens 12 (en fait, je crois que \ = round, faudra que je revérifie)

Idem si j'utilise la fonction Fix(charge_posée)

La fonction Trunc n'existe pas en VB, je regarde si un équivalent existe...
erf. bon moi je ne connais pas les fonctions VB mais il faut que tu cherches dans les fonction mathematique, une fonction qui ne prend que la partie entiere (ou qui arrondi vers le bas)

voila different mot clef que je connais pour different langage qui fond ca :

floor (arrondi vers -infini)
trunc (arrondi vers 0)
int (ne marche que pour les entiers non signé ce qui est ton cas)

je pense que round en visualbasic doit avoir la meme fonction qu'en delphi ou d'autre langages c'est a dire arrondi a l'entier le plus proche (round(12.1)=12 et round(12.8)=13)
tu devrais trouver, c'est impensable que la fonction n'existe pas
Lien direct vers le message - Vieux
Avatar de Caelia
Caelia [Vin]
Reine
 
Avatar de Caelia
 
C'est trés simple : un focus ne vaut pas 0.5, il vaut 1.
Donc avec 1 focus tu as 1 points de charge, avec 2 focus (2*1+1)/2 soit 1.5 points de charge que le programme arrondi vers le bas (le total est TOUJOURS arrondi vers le bas) et avec 3 focus (2*1+1+1)/2 soit 2 points de charge.

Sur un objet ... imaginons +20 PdV +7 constit +7 force +2 parade (c'est un exemple) on obtient :
(5*2 + 5 + 5 + 5)/2 = 12.5 arrondi vers le bas : 12.
Il ne faut pas oublier non plus que le premier point de compétence et le premier point de résist est gratuit.

Vala. J'espére que ca peut aider ...
Lien direct vers le message - Vieux
Avatar de Tixu
Tixu
Alpha & Oméga
 
Avatar de Tixu
 
tiens en farfouillant sur google j'ai trouvé ca qui devrait t'eclairer sur les arrondis en VB:

http://groups.yahoo.com/group/visual...e/message/5767

apparement int(x) existe en VB mais attention ca ne marche que pour les entiers non signé (>0) mais on s'en fout puis que tu ne vas pas dans les nombre negatif dans ton cas.

(je ne me ferai jamais au VB avec ses variables non typées...)
Lien direct vers le message - Vieux
Avatar de Khaerdaeliss/Molenn
Khaerdaeliss/Molenn [PdM]
Roi / Reine
 
Avatar de Khaerdaeliss/Molenn
 
Citation:
Provient du message de Caelia
C'est trés simple : un focus ne vaut pas 0.5, il vaut 1.
Ce qui est bizarre, c'est que j'ai sous les yeux un tableau (trouvé sur un post de JoL, avec des cases bleus/jaunes/vertes si ça vous parle. Impossible de le retrouver... la fonction recherche n'est décidément pas mon amie, ou alors trop occupée pour prendre le temps de répondre à mes requêtes).
Dans ce tableau, il est marqué que tous les focus ont 0,5 pts de charge, mais je me pose une question. Peut être que la division par 2 dans le calcul est déjà effectuée.
Quelqu'un peut me confirmer que
les caractéristiques, c'est bien : 1,3,5,7,9,11,13,15,17,19
les compétences : 0,5 , 5,10,15,20,25,30,35,40,45
=> si c'est 2 là sont bons, le reste devrait suivre ^^ (sauf les focus ).

Bon, sinon, à partir de ce que vous m'avez indiqué, je vais essayer de mettre une beta en ligne.
Lien direct vers le message - Vieux
Avatar de Caelia
Caelia [Vin]
Reine
 
Avatar de Caelia
 
Ah oui, pour les gemmes +1 comp, c'est 1 aussi. Comme le focus en fait.
Sinon, je pense que c'est correct niveau caracs ...
Lien direct vers le message - Vieux
Avatar de Khaerdaeliss/Molenn
Khaerdaeliss/Molenn [PdM]
Roi / Reine
 
Avatar de Khaerdaeliss/Molenn
 
J'ai ma réponse.. Dans la table que j'avais, toutes les gemmes à 1 pt de charge était divisé par 2 (sauf caractéristiques et HP), sans doute pour simuler le fait que la 1ère était gratuite dans son mode de calcul ... C'est corrigé )

J'avance Je mettrai une 1ère version en ligne demain après midi, j'espère que vous m'aiderez à débugguer tout ça ^^
Lien direct vers le message - Vieux
Avatar de Roen
Roen
Alpha & Oméga
 
Avatar de Roen
 
Code:
if ((itemStrength4 >= itemStrength2) && (itemStrength4 >= itemStrength3) && (itemStrength4 >= itemStrength1)) { itemStrength4 = itemStrength4 * 2; }
if ((itemStrength3 >= itemStrength2) && (itemStrength3 >= itemStrength1) && (itemStrength3 >= itemStrength4)) { itemStrength3 = itemStrength3 * 2; }
if ((itemStrength2 >= itemStrength1) && (itemStrength2 >= itemStrength3) && (itemStrength2 >= itemStrength4)) { itemStrength2 = itemStrength2 * 2; }
if ((itemStrength1 >= itemStrength2) && (itemStrength1 >= itemStrength3) && (itemStrength1 >= itemStrength4)) { itemStrength1 = itemStrength1 * 2; }
Moi j'aurais indicé mes itemStrengh et j'aurais fais une boucle, mais bon, pour si peu c'est pas des plus indispensable.
Lien direct vers le message - Vieux
Répondre
Les forums JOL > Dark Age of Camelot > DAoC - Général > [programation] Logiciel de spellcraft
   

Outils Rechercher
Rechercher:

Recherche avancée

Les vidéos de Dark Age of Camelot RSS
Les critiques de Dark Age of Camelot RSS
Thème visuel : Fuseau horaire GMT +1. Il est actuellement 03h06.
   

© 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