Aller au contenu


Levelup D'un Familier


  • Veuillez vous connecter pour répondre
13 réponses à ce sujet

#1 Ptolémis

Ptolémis

Posté 20 août 2005 - 10:01

j'ai commencé un mod Familier. comme le nom le dit, le PJ est accompagné d'une créature qui le suit (AiEscort, jusque là c'est assez simple) mais je bloque dejà sur le levelup, comment faire en sorte qu'il monte un niveau en combatant ? vu que les créatures n'ont pas de compétences secondaires, j'aurai aimé faire comme dans Wow avec une barre d'XP mais celle-ci se remplierai lorsque le familier combaterai voire même (s'il est fort) tuerai l'ennemi... j'ignore s'il existe un fonction qui reconnaitrai ce genre de situation ou si tout simplement il n'en existe pas  :lol:
merci à quiconque souhaiterai m'aider pour ce problème :shock:

#2 a3jv

a3jv

    ... à 4 je reviens.


Posté 20 août 2005 - 14:24

A ma connaissance, il n'existe rien de tel pour les NPC/créatures, mais ma connaissance est limitée.
La soluce employée généralement est de faire évoluer le familier avec le PJ (ou seul suivant le temps passé ou des actions) via des scripts et dialogues.
Maintenant, quelqu'un a peut-être trouvé mieux.
Les choses n'ont que l'importance ou la valeur qu'on leur donne.

#3 John Athan

John Athan

Posté 20 août 2005 - 21:00

Bonsoir,

désolé je se sais pas te répondre.

J'ai néanmoins quelque chose à dire- mais-je me trompe peut-être- il me semble qu'il existe déjà un mos pour les familiers...
Quelqu'un de plus compétent pour infirmer ou confirmer ? :huhu:
Une signature sans fautes, c'est mieux.
------------------------------------------------
Vous aussi, ne rejoignez pas les Fervents Partisans de l'Immuabilité Avatarienne!
----------------
Il n'est pas rare d'être meilleur que le premier et moins bon que le troisième.

#4 Ptolémis

Ptolémis

Posté 21 août 2005 - 10:37

J'ai dwl cette nuit le mod Familiers de Lord Mortim avec le diablotin Iro. C'est à peu près ce que je recherche  :?:
j'ai une autre question concernant tjrs le levelup, lorsque l'on applique un niveau supplémentaire à la créature ( Setlevel CurrentLevel, avec Set CurrentLevel to (player->GetLevel) evidemment accompagné d'une reconnaissance à chaque évolution du PJ, If ( CurrentLevel < (player->GetLevel) ) ... ou du moins tous s'y rapprochant  :P  ), est-ce que les cara de la créature montent aussi ? ou faut-il les faire monter par un script ?

#5 a3jv

a3jv

    ... à 4 je reviens.


Posté 21 août 2005 - 14:25

Non, rien ne progresse seul, il faut aussi les faire monter par script (ou result dialogue) en choisissant ce qui convient le mieux par rapport à la créature ou en alignant aussi avec les caractéristiques du PJ. Pareil pour les talents.
Bon courage !...
Je viens peut-être de dire une connerie ! En fait, si la case 'auto calculate state' (un truc dans ce genre) est cochée, peut être que les caracts progressent avec la progression de niveau !?
Donc je ne sais pas !
Donc je ferai peut-être mieux de supprimer ce message !
Mais bon, je le laisse, ça te feras de la lecture. :P

Modifié par a3jv, 21 août 2005 - 14:31.

Les choses n'ont que l'importance ou la valeur qu'on leur donne.

#6 Ptolémis

Ptolémis

Posté 21 août 2005 - 15:39

negatif, cette case n'existe pas pour les créatures...
pour finir je crois que je vais bidouiller avec une randomize un fois que ya un levelup, ainsi yora des valeurs supplémentaires aléatoires pour les cara. mais il reste un pb : si le PJ est au lvl33 (ce n'est qu'un exemple) et que la créature apparait directement au lvl33, ses cara restent inchangées. dans cette situation, la randomize ne sert à rien vu qu'il y à 33 niveaux à rattraper. j'ai pensé à qqchose, mais j'ignore s'il y à un équivalent du Do-Loop-While dans le language du Tescs, si oui, je saurai peut etre travailler sur la différence du lvl du PJ avec celui de la créature et ainsi obtenir une initialisation des cara plus correcte.

Modifié par Ptolémis, 21 août 2005 - 15:40.


#7 Nwart

Nwart

Posté 21 août 2005 - 16:52

Tu pourrais peut-être faire en sorte que le familier ne monte que d'un niveau à la fois... Bon, bien sûr, c'est un peu chiant pour le PJ de devoir demander 33 fois à son familier de monter de niveau...

Sinon, il n'y a pas de while, juste des scripts qui s'exécutent à chaque frame.
une idée comme ça:
quand on demande un level-up, mettre une variable montéeDeNiveau du familier à 1

et dans le script du familier
si montéeDeNiveau = 1,
  si niveau inférieur à celui du PJ, monter d'un niveau (avec montée de caracs)
  sinon mettre montéeDeNiveau à 0

EDIT:
Pardon, je dis une connerie, y'a un while,
While ( condition ) 
; instructions à exécuter 
EndWhile

La différence, c'est que l'utiliser peut "geler" l'écran tant que la montée de niveau n'est pas finie. Mais dans ce cas, comme ça n'arrive que rarement et que ça ne devrait pas être trop long, ça devrait suffire.

Modifié par Nwart, 21 août 2005 - 17:14.

"Maybe the Wabbajack is the Book of Knowledge. Maybe I'm smarter because I know cats can be bats can be rats can be hats can be gnats can be thats can be thises."

#8 Ptolémis

Ptolémis

Posté 21 août 2005 - 17:16

oui en effet, je m'orientai vers cette solution, mais tout de même vu que c'est chiant pr le PJ, j'ai essayé de bidouillé et ça donne qqchose comme ça, mais ça marche tjrs pas. (le script ci-dessous est associé au familier en question)
Spoiler
si qq'un peut m'expliquer ce qui ne va pas...

Modifié par Ptolémis, 21 août 2005 - 17:22.


#9 Ptolémis

Ptolémis

Posté 21 août 2005 - 17:25

@Nwart : OK, je vai regarder ça, merci :rolleyes:

#10 a3jv

a3jv

    ... à 4 je reviens.


Posté 21 août 2005 - 18:55

Il manque un 'to' (ou un '.') et j'enlèverai les doubles parenthèses.

Citation

if ( GetLevel < player->GetLevel )
      set FAM_LevelOnce to ( player->GetLevel - GetLevel )
      MessageBox "Votre familier vient de monter %g niveau(x).", FAM_LevelOnce
      endif
      if ( FAM_LevelOnce > 0 )
      Set FAM_CurrentLevel to ( GetLevel + 1 )
      SetLevel to FAM_CurrentLevel
Pour les 'Random', c'est peut-être superflu vu que les résultats restent invisibles du joueur, autant ne mettre qu'une possibilité ou les réduire à 3 pour alléger un peu. Enfin c'est toi qui voit.
Sinon, j'ai pris un mal de tête à vérifier si pas trop de 'if' 'elseif' dans la boucle if/endif mais ça a l'air bon. :rolleyes:

Modifié par a3jv, 21 août 2005 - 18:55.

Les choses n'ont que l'importance ou la valeur qu'on leur donne.

#11 Ptolémis

Ptolémis

Posté 22 août 2005 - 11:16

ok, je regarde ça tout de suite et j'éditerai, merci a3jv :rolleyes:

EDIT: la correction avec les parenthèses et le 'to' ne changent rien. j'ai cherché à alleger le script en supprimant le :
if ( GetLevel < ( player->GetLevel ) )
 set FAM_LevelOnce to ( ( player->GetLevel ) - GetLevel )
 MessageBox "Votre familier vient de monter %g niveau(x).", FAM_LevelOnce
endif
et en le remplaçant par un :
if ( GetLevel < player->GetLevel )
	set PCLevel to ( player->GetLevel )
	MessageBox "Votre familier vient d'atteindre le niveau %g." PCLevel; en variable locale
endif
et ça donne ce morceau, lorsque button == 1, càd lorsque l'on désire consulter les caracs :
if ( GetLevel < player->GetLevel )
	set PCLevel to ( player->GetLevel )
	MessageBox "Votre familier vient d'atteindre le niveau %g." PCLevel 
endif
While ( GetLevel < player->GetLevel )
	Set FAM_CurrentLevel to ( GetLevel + 1 )
	SetLevel to FAM_CurrentLevel
	Set Rnd to Random 6

	if ( Rnd == 0 )
  modhealth 3
  .......
	endif
endWhile

set fam_health to GetHealth
set fam_strength to GetStrength
set fam_speed to GetSpeed
set fam_endurance to GetEndurance
set fam_intelligence to GetIntelligence
set fam_agility to GetAgility
MessageBox "......"
set MsgState to 0
dans le jeu, lorsque button == 1, le script saute tout de suite au messagebox, "...." qui affiche les caracs mais pas moyen de démarrer la boucle du levelup... je soupçonne donc la condition if ( GetLevel < player->GetLevel ) de ne pas être correcte

Modifié par Ptolémis, 22 août 2005 - 12:12.


#12 Ptolémis

Ptolémis

Posté 22 août 2005 - 16:53

bon bon bon... après mon aprè-midi flaché sur le script, j'ai fait quelques modifications :
- j'ai viré la globale FAM_CurrentLevel qui ne sert à rien en dehors du script alors je l'ai passée en locale, FAM_level (tout simplement)
- j'ai viré le While/endWhile (hé ouais, j'ai planté l'ordi avc  :) ) et j'ai procédé avec une imbrication de if/else/endif et un renvoi en debut de script pour l'évolution des caracs.
Spoiler
j'ai constaté de beaux progrès mais à présent, j'ai observé un autre petit et tout dernier problème (enfin j'éspère), c'est le :
Set FAM_level to ( GetLevel + 1 )
SetLevel (to) FAM_level; avec ou sans le 'to', il se passe rien
d'ailleur j'ai lu ça dans les contents : "Level (only works with Set and Get)" alors bon, je continu de ramer  :sorry:

Modifié par Ptolémis, 22 août 2005 - 16:55.


#13 Angora

Angora

    Danse avec les bugs


Posté 22 août 2005 - 21:16

C'est un gros problème, les fonctions setTruc semblent rarement fonctionner avec des variables... Est-ce que SetLevel accepte de fonctionner avec une constante, du style SetLevel 20 ? En ce cas, il serait possible d'avoir recours à une sorte de "case"

if ((player->getLevel) > 30)
   setLevel 30
elseif ((player->getLevel) > 20)
   setLevel 20
elseif ((player->getLevel) > 10)
   setLevel 10
endif

Mais ce serait assez pénible à faire si on veut plus détaillé que ça. (Là, je me contente des niveaux 11 à 31+, avec le familier qui gagne un gros boost tout les dix niveaux et rien entre-temps.)

D'un autre côté, je suis pas convaincu que le niveau serve à grand'chose vu que les caracs sont réglées à part. Enfin, j'ai pas beaucoup scripté de bestioles, peut-être n'ont-elles pas de fonction SetCombat, SetMagic et SetStealth pour leur compétences à elles.
Le saviez-vous ?

En français, il n'y a jamais, jamais, JAMAIS, J-A-M-A-I-S, de cédille à un 'c' devant un 'e', un 'i' ou un 'y'. Jamais. Sans aucune exception. Pas la moindre. Zéro. Cédille devant e, i ou y = faute. Un point, c'est tout, c'est comme ça, ça a toujours été comme ça, et ça le sera toujours.

#14 Ptolémis

Ptolémis

Posté 23 août 2005 - 13:48

oui je vien de regardé et c plutot long à taper... et pis aussi t'as raison, le niveau peu rester comme il est puisqu'il est invisible au player. alors j'ai viré la ligne :
Set FAM_level to ( GetLevel + 1 )
SetLevel FAM_level
afin de la remplecer par :
Set FAM_level to FAM_level + 1
qui est à présent plus utile. alors vu que j'ai commencé, j'ai été plus loin et mtn ça marche impec'  :woot
pour les interressés : (j'ai fini par virer la randomize)
Spoiler
donc c'est bon, topic résolu :yahoo:

Modifié par Ptolémis, 23 août 2005 - 13:56.





0 utilisateur(s) li(sen)t ce sujet

0 membre(s), 0 invité(s), 0 utilisateur(s) anonyme(s)