Sujet n°2119
Posté par
Krosk le
8 Nov - 11:10 (2008)Titre :
Capacités évolutives by Krosk[Script] Capacités évolutives
by Krosk
./2110.htmlempire1601 s'est essayé à permettre aux capacités d'évoluer en puissance. Voici une solution alternative.
Morceau de code à copier dans Pokemon_Custom, tout à la fin, après les derniers end.
La formule d'augmentation de la puissance d'un skill est la suivante : puissance de base + PAS_PUIS * (nombre_d'utilisation / PAS_UTIL).
En gros, tous les PAS_UTIL utilisations, votre capacité augmente de PAS_PUIS en puissance.
Code: |
module POKEMON_S # Capacités évolutives class Skill PAS_UTIL = 20 PAS_PUIS = 10 alias initialize_temp initialize def initialize(id) initialize_temp(id) @use_number = 0 end def power @use_number = 0 if @use_number == nil # Protection indéfinition return Skill_Info.base_damage(id) + PAS_PUIS * (@use_number / PAS_UTIL) end alias use_temp use def use use_temp @use_number = 0 if @use_number == nil # Protection indéfinition @use_number += 1 if @usable end end end
|
Posté par
Dark' le
8 Nov - 12:38 (2008)Je le prends, celui là !
Si j'ai bien compris :
L'attaque aura cette puissance :
Code: |
Puissance normal + X fois le nombre d'utilisation divisé par Y |
Avec X et Y des nombres réglables...
Mettons qu'une attaque ai 100 de puissance, je l'utilise 10 fois, ça donne ça ?
Code: |
100+10*10/20 = 100+100/20 = 100+5 = 105 |
C'est bien ça ? Dans ce cas, pourquoi avoir mis 20 et 10 plutôt que 2 et 1 ?
Posté par
Empire1601 le
8 Nov - 13:00 (2008)Merci de t'être penché sur ce script
Comme ça, ils auront quelque chose qui marche
Posté par
Krosk le
8 Nov - 13:02 (2008)mettre 2 et 1 est différent de mettre 20 et 10, car la division effectuée est euclidienne (après édit du script, car j'avais oublié les parenthèses!).
Grimper de 10 de puissance toutes les 20 utilisations, ce n'est pas pareil que grimper de 1 de puissance toutes les 2 utilisaitons. L'une est une évolution par palliers et l'autre est une évolution graduelle.
Posté par
Dark' le
8 Nov - 13:30 (2008)D'accord, merci Krosk !
Donc, si je reprends avec mes mots, on a ça :
Code: |
Puissance normal + X fois (le nombre d'utilisation divisé par Y) |
Avec X et Y des nombres réglables.
Mettons qu'une attaque ai 100 de puissance, je l'utilise 10 fois, ça donne ça ?
Code: |
100+10*(10/20) = 100 + 10*0.2 = 105 |
Et avec 1 et 2 :
Code: |
100+1*(10/2) = 100 + 1*5 = 105 |
C'est pareil, non ?
Et je pense que ça reste ainsi quelques soit le nombre d'utilisation et la puissance...
Après test sur Excel, c'est bien le cas.
A moins que...
Quand tu dis Euclidienne, tu veux dire que dans mon exemple du haut :
100+10*(10/20) = 100 + 10*0.2 = 100
Car 0.2 est enregistré par le script comme 0 ?
Dans ce cas, je comprends mieux
PS : Désolé si je pose tant de questions qui paraisse évidentes, mais j'ai toujours eu un esprit embrouillé, et si je ne suis pas certain, je m'y perds tellement que ça me gène atrocement !
Posté par
Krosk le
8 Nov - 13:38 (2008)Le symbole / en ruby est la division, mais quand la division se fait entre 2 entiers, elle devient euclidienne (et donc donne un entier). La division est exacte quand au moin l'un des 2 nombres est un flottant (à virgules).
10 / 20 = 0
Mais 10.0 / 20 = 0.2
et 10 / 20.0 = 0.2
autre exemple, 55 / 10 = 5
Posté par
Dark' le
8 Nov - 14:30 (2008)Merci beaucoup ! J'avais déjà lu quelques choses sur ça quelque part, mais je n'y avais pas prêté grande attention !
Posté par
Angi-MK le
8 Nov - 16:33 (2008)Hey merci Krosk de t'être intéressé à ma suggestion mais dis moi, je remet les script POKEMON et POKEMON_Battle_core 2 comme ils étaient à l'origine ?
Parce que sinon le bug persiste et moi tout seul je ne comprend pas le probleme...
EDIT:Ouais ça marche avec les scripts d'origines ! Merci à tout ceux qui ce sont penché sur mon idée :D !
Posté par
Droledami le
8 Nov - 22:02 (2008)C'est vraiment une bonne idée
k:
Posté par
Mini' le
8 Nov - 23:28 (2008)Superbe Idée !
Je pensais que c'était irréalisable mais vous venez de me prouvez le contraire ^^'
Bravo tout le monde ! ; )
Est-ce que je l'inclurai dans mon jeu ?
Posté par
Angi-MK le
10 Nov - 07:22 (2008)J'ai une nouvelle idée, enfin j'ai envie de pousser celle là ^,^"
Serait-il possible de faire que quand l'attaque deviens plus puissante elle perde des PP ?
Jusqu'a une limite de 10 (et non 5 comme les CT les plus puissante) ce qui ferait que l'on garderais plutôt un charge de force 100 avec 10 PP qu'un ultra laser de 100 avec 5 PP :idea:
Et ensuite j'ai une autre question, est ce que l'attaque à une limite avec la modification que tu as effectuer ou bien si on l'utilise 10000 fois elle deviens ultime ?
Ce serait un moyen de faire la différence entre 2 POKEMON de niveau 100...? :mrgreen:
Posté par
Krosk le
10 Nov - 16:46 (2008)La limitation en PP est possible, suffit de modifier un peu le code. (Je posterai la modif plus tard)
L'attaque peut devenir ultime, il n'y a pas de limitation en puissance. Mais ca peut devenir ridicule si charge est plus fort qu'ultralaser...
Posté par
PiVa le
10 Nov - 18:38 (2008) Krosk a écrit: |
Mais ca peut devenir ridicule si charge est plus fort qu'ultralaser...
|
Bah tu sais quand on regarde pokémon a la TV, la puissance des attaques, c'est tout et n'importequoi... mais dans les jeux vaut mieux mettre une limitation.
Mister-K a écrit: |
Ce serait un moyen de faire la différence entre 2 POKEMON de niveau 100...? :mrgreen:
|
C'est sur mais les combats où tu tue tous le monde en un coup, c a pu vraiment d'intérêt, après vient la stratègie et la logique auquel ce rajoute les objets pour battre les LVL 100.
En tous cas bravo pour ce joli morceau de script.
A bientôt.
Posté par
Angi-MK le
28 Déc - 12:43 (2008)ok j'ai revus le sujet, je vais tenter de refaire ton calcul mais d'une autre manière, c'est à dire au début gagner quelque chose comme +1 toutes les 10 attaques pour avancer progressivement vers un +1 toutes les 50 attaques.
C'est faisable ?
(je connais pas assez le Ruby pour le faire :mrgreen: )
mais j'aurais aussi besoin d'une soustraction de PP à chaque points gagné
SVP
k:
-En gros je veux passer en suite géométrique+arithmétique (aritméticogéometrique) pour fixer une "semi" limite-
Posté par
Angi-MK le
2 Jan - 07:20 (2009)Non
?
Posté par
Sphinx le
2 Jan - 10:26 (2009) ca doit être faisable, mais faudrait avoir des détails très précis pour qu'on puisse t'aider
Posté par
Angi-MK le
2 Jan - 11:11 (2009)En fait ça augmente de moins en moins vite...
Très mal schématisé, je sais
...
(les chiffres données ne sont que des exemples)
Posté par
Sphinx le
2 Jan - 11:21 (2009)^_^" T'aurais une formule plutôt ?
>> PS : ptite question, y a t il moyen de pouvoir intégrer 2 choses :
1°) que seules certaines attaques (ou certains ID effets) soient concernés
2°) que le nbre d'utilisation se remette à 0 si on change d'attaque (exemple : le poké utilise vive-att plusieurs fois, il peut utiliser la vitesse des attaques précédentes. Mais s'il s'arrête pr lancer une autre attaque, ben... ^_^ quand il repart, il ne peut pas bénéficier de ce bonus précédent, puisqu'il s'est arrêté
)
Posté par
Angi-MK le
2 Jan - 12:02 (2009)variable"1" > convertir en nombre entier > variable"2" ( variable"2" = partie_entière(variable"1") ) = puissance de l'attaque
variable"3" = nombre de fois lancée ( le "n" dans la suite définie après )
variable"1"(n+1) == variable"1"(n) + (1/n) x 0,05 x variable"1"(n)
variable"2"(n+1) == Partie_entière(variable"1"(n))
( ici donc n=variable"3" )
Posté par
Angi-MK le
3 Jan - 12:48 (2009)Bahhhh.... ?
Posté par
Sphinx le
3 Jan - 14:01 (2009)^_^" g pas tt compris ds les calculs lol xP
X : dégâts du tour précédent
Y : nbre de lancements
Z : dégâts finaux (ceux qui seront infligés)
Z = entier(X + (1/Y) x 0,05 x X)
C'est bien ca ?
Posté par
PiVa le
3 Jan - 17:18 (2009)En français sa donne quoi car là ça fait brouillon :?
Posté par
Angi-MK le
4 Jan - 02:51 (2009)c'est pourtant bien expliqué,
la variable 1 représente la puissance de l'attaque (avec virgule
exemple 20.26535215)
la variable 2 représente la puissance de l'attaque (arrondis en nombre entier
exemple 20)
la variable 3 le nombre de fois ou l'attaque est lancé...
exemple:
une attaque a une puissance 20,
tu la lance une fois:
la variable 1 = 20 (donc la variable 2 aussi)
la variable 3 devient 1
il suffit d'appliquer la formule que j'ai donné
??
Posté par
Krosk le
8 Jan - 11:27 (2009)Pour simuler une courbe pareil, tu peut aussi appliquer une fonction racine (ou log éventuellement)).
Code: |
return Skill_Info.base_damage(id) + Math.sqrt(PAS_PUIS * (@use_number / PAS_UTIL)).to_i |
Il faudra jouer sur les paramètres PAS_PUIS et PAS_UTIL (qui perdent leur sens original) pour avoir l'augmentation désirée
Posté par
Angi-MK le
12 Jan - 18:03 (2009)Je fais comment exactement
Posté par
Krosk le
15 Jan - 23:49 (2009)regarde dans le morceau de script que j'ai posé en tete de topic, y'a une ligne "return ...". Change là par celle que j'ai donné au post précédent.
Posté par
Sphinx le
16 Jan - 19:35 (2009)>> krosk, peut on limiter cet effet qu'à certaines attaques ?
Posté par
Empire1601 le
16 Jan - 20:38 (2009)Je crois qu'il y a quelque chose qui y ressemble pour frénésie non
?
Posté par
Suicune31 le
17 Jan - 02:47 (2009)Taillade est le meilleur exemple je pense . . .
Posté par
Krosk le
17 Jan - 13:14 (2009) Sphinx a écrit: |
>> krosk, peut on limiter cet effet qu'à certaines attaques ? |
Bien sur. Suffit de donner une condition avant le retour genre
Code: |
def power @use_number = 0 if @use_number == nil # Protection indéfinition if @id == xx return Skill_Info.base_damage(id) + PAS_PUIS * (@use_number / PAS_UTIL) else return Skill_Info.base_damage(id) end end |
Posté par
Sphinx le
17 Jan - 14:10 (2009)ah oki
^_^ Jle prendrai ptêtre pr mon jeu alrs
(@id c le n° de l'attaque, si g tt compris)
Posté par
Angi-MK le
17 Jan - 17:33 (2009)Oui, tu as juste à le remplacer par l'id de l'attaque (ça marche nickel
)
Posté par
Shimo le
31 Jan - 21:49 (2009)Et supposons que l'on veuillent faire plusieurs capacitées pouvant évoluer mais pas à la même vitesse ; par exemple une qui gagne 10 de puissance toutes les
10 utilisation et une autre qui gagne 250 de puissance toutes les 250 utilisations (exemple un petit peu bizzare je l'accorde :lol: ).
Suffit-il de copier le morceau de script :
Code: |
class Skill PAS_UTIL = 1 PAS_PUIS = 10 alias initialize_temp initialize def initialize(id) initialize_temp(id) @use_number = 0 end def power @use_number = 0 if @use_number == nil # Protection indéfinition if @id == 468 return Skill_Info.base_damage(id) + PAS_PUIS * (@use_number / PAS_UTIL) else return Skill_Info.base_damage(id) end end alias use_temp use def use use_temp @use_number = 0 if @use_number == nil # Protection indéfinition @use_number += 1 if @usable end end end |
Une seconde fois ou y a t'il une démarche particulière à suivre?
Merko d'avance celui, celle ou ceux qui me répondra(-drons) ^-^
Posté par
Sphinx le
31 Jan - 23:30 (2009) Code: |
class Skill PAS_UTIL = 1 PAS_PUIS = 10 alias initialize_temp initialize def initialize(id) initialize_temp(id) @use_number = 0 end def power @use_number = 0 if @use_number == nil # Protection indéfinition if @id == 468 return Skill_Info.base_damage(id) + PAS_PUIS * (@use_number / PAS_UTIL) elsif @id == XXXX #<========================================== là tu mets l'ID de ton attaque à la place du XXXX return Skill_Info.base_damage(id) + YYYY * (@use_number / ZZZZ) #<========= Les YYYY (bonus obtenu) et ZZZZ (nbre d'utilisations) sont à remplacer par les valeurs correspondantes else return Skill_Info.base_damage(id) end end alias use_temp use def use use_temp @use_number = 0 if @use_number == nil # Protection indéfinition @use_number += 1 if @usable end end end |
>> T'as juste à mettre :
Code: |
elsif @id == XXXX #<========================================== là tu mets l'ID de ton attaque à la place du XXXX return Skill_Info.base_damage(id) + YYYY * (@use_number / ZZZZ) #<========= Les YYYY (bonus obtenu) et ZZZZ (nbre d'utilisations) sont à remplacer par les valeurs correspondantes |
autant que nécessaire, au même endroit que moi =) (elsif signifie "sinon si" )
Posté par
Shimo le
1 Fév - 10:29 (2009)Youpi! Merci, merci , merci! :mrgreen:
Tout marche super bien ! Je me suis même amusé à faire la même attaque (en ajoutant + et X à la FF) qui évolue plus lentement mais plus aussi
C'est vraiment cool !
B-R-A-V-O K-R-O-S-K !!!
k: B-R-A-V-O S-P-H-I-N-X !!!
k:
PS : Oublié de préciser : Bravo à Mister-K et à Empire 1604 (j'espère que c'est les bon chiffres :mdr: ) d'avoir eu cette superbe idée. ^-^
Posté par
Angi-MK le
2 Fév - 18:22 (2009) Amélia a écrit: |
PS : Oublié de préciser : Bravo à Mister-K et à Empire 1604 (j'espère que c'est les bon chiffres :mdr: ) d'avoir eu cette superbe idée. ^-^ |
C'est 1601