Inscrit le: 12 Nov 2011 Messages: 1062 Sujets: 107 Spécialité en worldedit: Inactif(Enfin presque) Médailles: 1 (En savoir plus...)
Posté le: 21/01/13 18:06 Sujet du message: Ça marche sûrement pas
Voilà, vous le savez , j'apprend le vJass grâce au tuto de Sapeur(Qui est vraiment bien fait, je le conseille aux débutants(le tuto pas Sapeur)). Bref, je me suis dit que je pourrais faire comme dans son exemple avec les héros (J'étudie les structs en ce moment) , sauf que je voulais un peu plus de personnalisation, donc j'ai rajouté des trucs, qui n'ont d'ailleurs aucun rapport avec mon problème , et puis comme dans son exemple il expliquait pas comment on utilisait une instance de struct et une method dans une fonction autre que celle dans laquelle la struct est déclarée en tant que variable locale. donc j'ai fait un truc qui ne marche sûrement pas puisque j'ai besoin de me référer à l'instance du héros gagnant son niveau pour modifer les stats de mon héros lors de son levelup.
Le code:
Jass:
library CreateHero initializer StartCreateHero
struct CreateHero
//The Hero who will be created
unit Hero
integer HeroID
//The level of the hero
integer Level
//The stats of the hero
integer Strength
integer Agility
integer Intelligence
//The stat gained when the hero levelup
integer StrengthLevel
integer AgilityLevel
integer IntelligenceLevel
function CreateAnHero takes player p , integer ID , integer str , integer agi , integer int , integer strlvl , integer agilvl , integer intlvl , real x , real y , real a returns nothing
local integer i = 1
local CreateHero ch = CreateHero.create()
set ch.Hero = CreateUnit( p , ID , x , y , a )
set ch.Strength = str
set ch.Agility = agi
set ch.Intelligence = int
set ch.Level = 1
set ch.StrengthLevel = strlvl
set ch.AgilityLevel = agilvl
set ch.IntelligenceLevel = intlvl
call SetHeroStr( ch.Hero , ch.Strength , true )
call SetHeroAgi( ch.Hero , ch.Agility , true )
call SetHeroInt( ch.Hero , ch.Intelligence , true )
endfunction
function LevelUp takes nothing returns nothing
local CreateHero ch = CreateHero.create()
call ch.LevelUp()
endfunction
function StartCreateHero takes nothing returns nothing
local trigger levelup = CreateTrigger( )
local integer index
set index = 0
loop
call TriggerRegisterPlayerUnitEvent( levelup , Player(index), EVENT_PLAYER_HERO_LEVEL, null)
set index = index + 1
exitwhen index == bj_MAX_PLAYER_SLOTS
endloop
call TriggerAddAction( levelup , function LevelUp )
endfunction
endlibrary
C'est un truc simple, je commence les structs et veux pas me lancer dans un truc trop dur. _________________
Et donc ? tu veux faire quoi ? Exprimes toi plus clairement si te plait ( évite le pavet ).
Déjà au lieu de faire une functionAnCreate Hero tu peux faire une static method create. _________________
function takes player p , integer ID , integer str , integer agi , integer int , integer strlvl , integer agilvl , integer intlvl , real x , real y , real a returns nothing
local integer i = 1
local CreateHero ch = CreateHero.create()
set ch.Hero = CreateUnit( p , ID , x , y , a )
set ch.Strength = str
set ch.Agility = agi
set ch.Intelligence = int
set ch.Level = 1
set ch.StrengthLevel = strlvl
set ch.AgilityLevel = agilvl
set ch.IntelligenceLevel = intlvl
call SetHeroStr( ch.Hero , ch.Strength , true )
call SetHeroAgi( ch.Hero , ch.Agility , true )
call SetHeroInt( ch.Hero , ch.Intelligence , true )
endfunction
Cependant, deux petites remarques :
- La fonction CreateAnHero devrait renvoyer l'instance de structure créée pour qu'on puisse en faire quelque chose.
- La philosophie des structure est de regrouper tous les attributs dans la structure, donc tu devrais intégrer cette fonction dans la structure. Mais en disant ça, je me rend compte que j'ai expliqué ça un peu tardivement dans le tuto, donc laisse comme c'est .
Jass:
function LevelUp takes nothing returns nothing
local CreateHero ch = CreateHero.create()
call ch.LevelUp()
endfunction
Alors ici, il faut bien comprendre que quand tu fais ch.LevelUp(), ça s'applique à l'instance que tu viens de créer, dans cette même fonction.
Je suppose que tu as essayé de faire :
Jass:
call CreateAnHero(...)
call LevelUp()
Mais là, tu créer un héros a, puis un héros b (par l'intermédiaire de la fonction LevelUp), puis du ajoute un level au héros b, et non au héros a.
Il faudrait que ta fonction CreateAnHero renvoie l'instance créée, arranger la fonction LevelUp de cette manière :
Jass:
function LevelUp takes CreateHero a returns nothing
call a.LevelUp()
endfunction
Puis faire comme ça :
Jass:
local CreateHero a = CreateAnHero(...)
call a.LevelUp()
Ça n'a en effet pas de sens de créer un autre héros dans la fonction LevelUp.
Bref, je suis pas sûr d'avoir répondu à la question ni d'avoir été clair . _________________
Inscrit le: 14 Avr 2011 Messages: 1846 Sujets: 119 Spécialité en worldedit: fonctions paramétriques, équation de mouvement.
Posté le: 21/01/13 18:50 Sujet du message:
sapeur-goblin a écrit:
- La philosophie des structure est de regrouper tous les attributs dans la structure, donc tu devrais intégrer cette fonction dans la structure. Mais en disant ça, je me rend compte que j'ai expliqué ça un peu tardivement dans le tuto, donc laisse comme c'est Razz.
are you kidding me ?? vous m'avez TOUS pourri jusqu'à la mort pour que je mette tout dans la struct et lui osef ? >< je demande des excuses !!!
sinon j'ai vraiment pas compris la problème oO ça marche surement pas ??? ça veut dire que tu n'as pas testé ? tout ce que je peux te dire c'est que ça marchera peut être comme ça... _________________
22:27:43<Seiraw> Bah y a deux genre de personnes
22:27:57<Seiraw> les soumis et les soumises
Inscrit le: 12 Nov 2011 Messages: 1062 Sujets: 107 Spécialité en worldedit: Inactif(Enfin presque) Médailles: 1 (En savoir plus...)
Posté le: 21/01/13 19:17 Sujet du message:
Ben, je veux pouvoir récupérer les instances créées par CreateAnHero dans Levelup pour qu'ils gagnent des stats lorsqu'ils gagnent de l'expérience de quelque manière que ce soit parce que si j'utilise des variables locales la fonction LevelUp ne peut pas récupérer leur valeur.
@Full: Sans test je me doutais que ça marche pas vu que ch est locale.
@Sapeur: avec ta méthode, je risque pas de me retrouver avec deux héros ?
Parce que comme je dois ajouter des stats personnalisés par niveau, si je peux pas récupérer mon instance pour ajouter des stats à mon héros c'est un peu problématique.
J'illustre avec un exemple:
Je met que mon héros gagne 6 de force par niveau, lorsqu'il gagne un niveau, j'utilise LevelUp pour lui ajouter 6 de force à la force qu'il avait au niveau précédent(comme avec les constantes de jeu sauf que ça me permet de faire des héros plus personnalisables puisqu'ils ont pas tous les mêmes stats de départ et par niveaux) _________________
Vous ne pouvez pas poster de nouveaux sujets dans ce forum Vous ne pouvez pas répondre aux sujets dans ce forum Vous ne pouvez pas éditer vos messages dans ce forum Vous ne pouvez pas supprimer vos messages dans ce forum Vous ne pouvez pas voter dans les sondages de ce forum