Partagez
Aller en bas
avatar
Hermoni
Membre

Nombre de messages : 945
Localisation : Quelque part entre la cuisine et le clavier.
Distinction : - Hermomo' le Chat. Noir et sarcastique mais chat tout de même é_è [Shamu' :3]
Poisson 2018 [Amal']
Rat de mon zoo sur le thème des rats [Ministre de la Culture]
Date d'inscription : 07/09/2015

Résolu [résolu] Soucis d'écriture d'un bout de script

le Dim 19 Juin 2016 - 16:47
Hey, question qui semblera peut être simple pour les scripteurs mais bon j'ai pas trouvé^^
J'aimerais juste mieux écrire ceci :

Spoiler:

Code:
                      if members[@index].states.include?($data_states[90])  
                              @index += members.size - 1
                              @index %= members.size
                                    if members[@index].states.include?($data_states[90])  
                                    @index += members.size - 1
                                    @index %= members.size
                                          if members[@index].states.include?($data_states[90])  
                                          @index += members.size - 1
                                          @index %= members.size
                                                if members[@index].states.include?($data_states[90])  
                                                @index += members.size - 1
                                                @index %= members.size
                                                      if members[@index].states.include?($data_states[90])  
                                                      @index += members.size - 1
                                                      @index %= members.size
                                                            if members[@index].states.include?($data_states[90])  
                                                            @index += members.size - 1
                                                            @index %= members.size
                                                                  if members[@index].states.include?($data_states[90])  
                                                                  @index += members.size - 1
                                                                  @index %= members.size
                                                                  end
                                                            end
                                                      end
                                                end
                                          end
                                    end
                              end

En gros, je sais juste pas faire une boucle je crois, mais comme je reprends la partie gérant les targets possibles des sorts en combat, j'ai pas envie de devoir faire 1500 lignes pour chaque condition.


Dernière édition par Hermoni le Dim 19 Juin 2016 - 23:13, édité 1 fois
avatar
Hinola
Modérateur

Nombre de messages : 953
Age : 25
Distinction : Gagnant invaincu à ce jour de tous les concours de mapping de ce forum fait par Coco'
[Coco' Smile]
Grande figure du Mapping Show .
Grand admirateur de notre mascotte Vehyxine
STI Haruhiste like me [Hamu' Wink]
et fier de l'être ! [bibi ^^]
Un fier Homme du désert sans foi ni loi è_é [:3]
Date d'inscription : 21/05/2009

Résolu Re: [résolu] Soucis d'écriture d'un bout de script

le Dim 19 Juin 2016 - 17:56
Tu peux expliquer ce que ce bout de script est sensé faire ? ^^

par ce que je comprends pas :3
à mon avis il n'y a pas qu'un problème de boucle ici.
L'imbrication est bizarre.

Spoiler:

Code:

@index = 1 # index = 1
# members a 8 valeurs de 0 à 7

if members[@index].states.include?($data_states[90]) # on test members[0]
  @index += members.size - 1 # index = 0 + 8-1 = 7
  @index %= members.size    # index = 7 % 10 = 7
  if members[@index].states.include?($data_states[90]) # on test members[7]
      @index += members.size - 1 # index = 7 + 8-1 = 14
      @index %= members.size    # index = 14 % 10 = 4
      if members[@index].states.include?($data_states[90]) # on test members[4]
        @index += members.size - 1 # index = 4 + 8-1 = 11
        @index %= members.size    # index = 11 % 10 = 1
        if members[@index].states.include?($data_states[90]) # on test members[1]
            @index += members.size - 1 # index = 1 + 8-1 = 8
            @index %= members.size    # index = 8 % 10 = 8
            if members[@index].states.include?($data_states[90]) # on test members[8]
              @index += members.size - 1 # index = 8 + 8-1 = 15
              @index %= members.size    # index = 5 % 10 = 5
              if members[@index].states.include?($data_states[90]) # on test members[5]
                  @index += members.size - 1 # index = 5 + 8-1 = 12
                  @index %= members.size    # index = 12 % 10 = 2
                  if members[@index].states.include?($data_states[90]) # on test members[2]
                    @index += members.size - 1 # index = 2 + 8-1 = 9
                    @index %= members.size    # index = 9 % 10 = 9
                  end
              end
            end
        end
      end
  end
end

Et tout ce code ne se passe que si le premier member testé respecte la condition " .states.include?($data_states[90]) "


Dernière édition par Hinola le Dim 19 Juin 2016 - 18:06, édité 2 fois

_________________
( )


____________________________________________________
J'offre un support par messagerie privée pour ceux qui le veulent.
Présentation de projet | news | mapping | évents | scénario | personnages | tests | ...
click >>
Envoyez un mp clair de votre problème / question / idée, j'y répond dans les meilleurs délais possibles. << click
_______


avatar
Hermoni
Membre

Nombre de messages : 945
Localisation : Quelque part entre la cuisine et le clavier.
Distinction : - Hermomo' le Chat. Noir et sarcastique mais chat tout de même é_è [Shamu' :3]
Poisson 2018 [Amal']
Rat de mon zoo sur le thème des rats [Ministre de la Culture]
Date d'inscription : 07/09/2015

Résolu Re: [résolu] Soucis d'écriture d'un bout de script

le Dim 19 Juin 2016 - 18:04
C'est juste un bout de ma fonction modifiée de changement de cible. En gros, si un ennemi a un certain statut il est impossible de le cibler.
Mais j'ai pas de soucis du coté fonctionnement car ça marche très bien. Juste je me demandais comment écrire correctement l'imbrication pour pas avoir à faire autant de vérification a chaque fois que je bouge le curseur top ou down.

Parce que là ça fait :
"Si la cible a le statut, on passe à la suivante, si celle ci a le statut, on passe encore à la suivante, si celle ci a le statut, on passe à la suivante" et c'est chiant et loin d'être propre à écrire.



Si tu veux la fonction entière, tiens(ya la même pour movedown) :

Spoiler:

Code:

  #--------------------------------------------------------------------------
  # ● Move Cursor Target Up
  #--------------------------------------------------------------------------
  def cursor_up2(members, actor)
    Sound.play_cursor
              members.size.times do
                    @index += members.size - 1
                   @index %= members.size
              case $mesvariables[1]
                when 0 #target all
                   #Rien à faire, c'est useless à garder mais j'm'y repère
                when 1  #target frontlane
                              if members[@index].states.include?($data_states[90])
                              @index += members.size - 1
                              @index %= members.size
                                    if members[@index].states.include?($data_states[90])  
                                    @index += members.size - 1
                                    @index %= members.size
                                          if members[@index].states.include?($data_states[90])  
                                          @index += members.size - 1
                                          @index %= members.size
                                                if members[@index].states.include?($data_states[90])  
                                                @index += members.size - 1
                                                @index %= members.size
                                                      if members[@index].states.include?($data_states[90])  
                                                      @index += members.size - 1
                                                      @index %= members.size
                                                            if members[@index].states.include?($data_states[90])  
                                                            @index += members.size - 1
                                                            @index %= members.size
                                                                  if members[@index].states.include?($data_states[90])  
                                                                  @index += members.size - 1
                                                                  @index %= members.size
                                                                  end
                                                            end
                                                      end
                                                end
                                          end
                                    end
                              end

                              
                end #end when
                          
                          
                
                break if actor
                break if members[@index].exist?
              end
    @help_window2.set_text_n01add(members[@index])
  end


avatar
tonyryu
Membre

Nombre de messages : 895
Age : 38
Localisation : Près de Nantes
Distinction : aucune
Date d'inscription : 27/05/2010
http://www.tonyryudev.com

Résolu Re: [résolu] Soucis d'écriture d'un bout de script

le Dim 19 Juin 2016 - 21:08
Peux tu détailler fonctionnellement ce que tu cherches à réaliser. Surtout au niveau des phases du combat.

En gros. C'est aux joueurs de choisir les actions, tu fais donc combattre sur le premier menu du groupe. ensuite tu arrives sur le menu du premier personnage, avec toutes les possibilités d'action, tu choisi "Attaque", Et là, Tu détailles exactement ce que ton système doit faire.
avatar
Hermoni
Membre

Nombre de messages : 945
Localisation : Quelque part entre la cuisine et le clavier.
Distinction : - Hermomo' le Chat. Noir et sarcastique mais chat tout de même é_è [Shamu' :3]
Poisson 2018 [Amal']
Rat de mon zoo sur le thème des rats [Ministre de la Culture]
Date d'inscription : 07/09/2015

Résolu Re: [résolu] Soucis d'écriture d'un bout de script

le Dim 19 Juin 2016 - 21:20
Tout c'que j'veux c'est juste que sous certaines conditions (là c'est une state) un ennemi ne soit pas selectionnable (et lors de la selection si l'ennemi suivant est pas selectionnable ça passe a celui d'apres).
Mais le truc c'est que ça... ça fonctionne déjà. Je voulais juste écrire de manière plus propre cette partie pour éviter de m'emmêler et tout.
avatar
tonyryu
Membre

Nombre de messages : 895
Age : 38
Localisation : Près de Nantes
Distinction : aucune
Date d'inscription : 27/05/2010
http://www.tonyryudev.com

Résolu Re: [résolu] Soucis d'écriture d'un bout de script

le Dim 19 Juin 2016 - 21:36
Sans avoir le script global, impossible de comprendre ta fonction toute seule.

Oui, mais exprimer la fonctionnalité de manière clair permet de plus facilement concevoir le programme. Et j'ai beau relire la fonction que tu nous copies, je n'y panne rien.

Bon, je vais essayer de résumer.

En gros, ta fonction doit basculer le curseur sur l'ennemi au suivant dans le cas où il possède un certain state. Dans le cas où ils sont tous avec le state à vérifier, il doit se passer quoi? Bon bref, on va partir du postula qui ne sont pas tous sous le state précis.

La fonction doit donc automatiquement passer à l'ennemi suivant, jusqu'à tomber sur l'adversaire n'ayant pas le states.

De plus tu es déjà dans une boucle qui fait autant d'itération que du nombre de membres :
Code:
members.size.times do
  # boucles autant de fois que du nombre de membres
  @index ++ # ajoute 1 à index
  @index %= members.size # si on dépasse on revient au début
end
avatar
Hinola
Modérateur

Nombre de messages : 953
Age : 25
Distinction : Gagnant invaincu à ce jour de tous les concours de mapping de ce forum fait par Coco'
[Coco' Smile]
Grande figure du Mapping Show .
Grand admirateur de notre mascotte Vehyxine
STI Haruhiste like me [Hamu' Wink]
et fier de l'être ! [bibi ^^]
Un fier Homme du désert sans foi ni loi è_é [:3]
Date d'inscription : 21/05/2009

Résolu Re: [résolu] Soucis d'écriture d'un bout de script

le Dim 19 Juin 2016 - 21:51
franchement, j'ai beau comprendre ce que tu veux, à savoir l'index de la sélection des ennemis qui sautent ceux qui ont l'état 90, je comprends rien à ton script et comment il est possible qu'il fonctionne.

Ou en tout cas, il y a pas de logique pour le rendre plus court.
Une boucle, c'est en gros soit un nombre de fois déterminé, soit jusqu'à ce que une condition soit remplie.

Donc la boucle doit se faire 7 fois je suppose ...
mais les deux lignes à exécuter n'ont aucun sens
@index += members.size - 1
@index %= members.size

pour passer à l'index suivant ça devrait être
@index += 1
@index %= members.size

Et dans ce cas, il n'y a pas de raison de le faire pour tous les ennemis à la suite.

Tu as essayé dans le cas ou deux ennemis de suite ont le statut ?
Il se passe quoi si tout les ennemis ont le statut ?

et sinon, la réponse qui me vient comme ça serait

Code:
@index += 1
while members[@index].states.include?($data_states[90]) do
  @index += 1
  @index %= members.size
end

mais là ça va boucler à l'infini si tout le monde à le statut...

_________________
( )


____________________________________________________
J'offre un support par messagerie privée pour ceux qui le veulent.
Présentation de projet | news | mapping | évents | scénario | personnages | tests | ...
click >>
Envoyez un mp clair de votre problème / question / idée, j'y répond dans les meilleurs délais possibles. << click
_______


avatar
Hinola
Modérateur

Nombre de messages : 953
Age : 25
Distinction : Gagnant invaincu à ce jour de tous les concours de mapping de ce forum fait par Coco'
[Coco' Smile]
Grande figure du Mapping Show .
Grand admirateur de notre mascotte Vehyxine
STI Haruhiste like me [Hamu' Wink]
et fier de l'être ! [bibi ^^]
Un fier Homme du désert sans foi ni loi è_é [:3]
Date d'inscription : 21/05/2009

Résolu Re: [résolu] Soucis d'écriture d'un bout de script

le Dim 19 Juin 2016 - 22:12
Bon, double post pour la bonne cause :

Ta fonction est sensée SIMPLEMENT incrémenter l'index de la cible de 1.

Code:

def cursor_up2(members, actor)

   @index += 1
   
end

On ajoute ensuite la condition que si cette fameuse cible est sous l'emprise de l'effet 90, on passe à la cible suivante.

Code:

def cursor_up2(members, actor)

   @index += 1
   if members[@index].states.include?($data_states[90])
      @index += 1
   end
   
end

Sauf que bien sur, TANT QUE la cible a cet effet, on continue à avancer.

Code:

def cursor_up2(members, actor)

   @index += 1
   while members[@index].states.include?($data_states[90]) do
      @index += 1
      @index %= members.size
   end
   
end

Maintenant, pour éviter la boucle infinie, on ajoute un break si la valeur atteint la valeur de base.
La fonction vas donc retourner 'true' si aucune cible ne peut être visée.
Faudra donc agir en conséquence.

Code:

def cursor_up2(members, actor)

   @index += 1
   @begin_with = @index
   no_target = false
   while members[@index].states.include?($data_states[90]) do
      @index += 1
      @index %= members.size
      no_target = @begin_with == @index
      break if no_target
   end
   return no_target
   
end

Et enfin t'ajoute tout plein de truc en plus comme le son et l'affichage

Code:

def cursor_up2(members, actor)

   Sound.play_cursor
   @index += 1
   @begin_with = @index
   no_target = false
   while members[@index].states.include?($data_states[90]) do
      @index += 1
      @index %= members.size
      no_target = @begin_with == @index
      break if no_target
   end
   @help_window2.set_text_n01add(members[@index])
   return no_target
   
end

_________________
( )


____________________________________________________
J'offre un support par messagerie privée pour ceux qui le veulent.
Présentation de projet | news | mapping | évents | scénario | personnages | tests | ...
click >>
Envoyez un mp clair de votre problème / question / idée, j'y répond dans les meilleurs délais possibles. << click
_______


avatar
Hermoni
Membre

Nombre de messages : 945
Localisation : Quelque part entre la cuisine et le clavier.
Distinction : - Hermomo' le Chat. Noir et sarcastique mais chat tout de même é_è [Shamu' :3]
Poisson 2018 [Amal']
Rat de mon zoo sur le thème des rats [Ministre de la Culture]
Date d'inscription : 07/09/2015

Résolu Re: [résolu] Soucis d'écriture d'un bout de script

le Dim 19 Juin 2016 - 22:46
Désolé du temps de réponse, je fais plusieurs trucs en même temps^^

Sinon, j'avais pas précisé d'où venait le bout de script car j'croyais dur comme fer que c'était des scripts de bases de RM mais en fait ça vient à la base du script SBS que j'utilise et qui réécrit pas mal de fonctions^^'
Donc ptete pour ça qu'il y a des trucs que vous pigiez pas. En gros j'avais surtout juste récup la fonction du dit script et rajouté mes conditions.

(le script d'origine a ça comme fonctions que j'ai juste repris telles quelle) :
Spoiler:

Code:

  #--------------------------------------------------------------------------
  # ● Move Cursor Target Up
  #--------------------------------------------------------------------------
  def cursor_up(members, actor)
    Sound.play_cursor
    members.size.times do
      @index += members.size - 1
      @index %= members.size
      break if actor
      break if members[@index].exist?
    end
    @help_window2.set_text_n01add(members[@index])
  end
  #--------------------------------------------------------------------------
  # ● Move Cursor Target Down
  #--------------------------------------------------------------------------
  def cursor_down(members, actor)
    Sound.play_cursor
    members.size.times do
      @index += 1
      @index %= members.size
      break if actor
      break if members[@index].exist? && !actor
    end
    @help_window2.set_text_n01add(members[@index])
  end

Pour la boucle infinie, c'est pas fini et je l'avais pas inclu MAIIIIS je prends volontier ce que t'as fait pour contrer un éventuel futur oubli (j'ai encore des vérifs à inclure, comme le fait que s'il n'y a QUE des ennemis avec ce statut ils deviennent alors ciblables, je retirerais surement le statut en fait vu que celui ci est sensé représenter le fait que les ennemis sont en backlane (donc si la frontlane est morte, bah ya pu vraiment de front/back)).

Fin dans tout les cas... MERCI HINOLA car juste la partie "while" c'est juste ce que j'savais pas écrire xD
avatar
Hinola
Modérateur

Nombre de messages : 953
Age : 25
Distinction : Gagnant invaincu à ce jour de tous les concours de mapping de ce forum fait par Coco'
[Coco' Smile]
Grande figure du Mapping Show .
Grand admirateur de notre mascotte Vehyxine
STI Haruhiste like me [Hamu' Wink]
et fier de l'être ! [bibi ^^]
Un fier Homme du désert sans foi ni loi è_é [:3]
Date d'inscription : 21/05/2009

Résolu Re: [résolu] Soucis d'écriture d'un bout de script

le Dim 19 Juin 2016 - 22:51
Sinon tu peut garder la fonction intacte et modifier la partie qui valide le choix.

Au moment d'appuyer sur entrée, tu regarde si le statut est présent, tu met un son et tu fait rien de plus.
Du coup tu peux viser tout le monde mais valider que un ennemi qui n'a pas le statut.
Et si ils l'ont tous (pour une raison ou une autre), tu peut toujours annuler ton action et faire autre chose.

Au moins le joueur ne se posera pas la question de pourquoi des fois le curseur il passe sur certains ennemi et pourquoi des fois non.

_________________
( )


____________________________________________________
J'offre un support par messagerie privée pour ceux qui le veulent.
Présentation de projet | news | mapping | évents | scénario | personnages | tests | ...
click >>
Envoyez un mp clair de votre problème / question / idée, j'y répond dans les meilleurs délais possibles. << click
_______


avatar
Hermoni
Membre

Nombre de messages : 945
Localisation : Quelque part entre la cuisine et le clavier.
Distinction : - Hermomo' le Chat. Noir et sarcastique mais chat tout de même é_è [Shamu' :3]
Poisson 2018 [Amal']
Rat de mon zoo sur le thème des rats [Ministre de la Culture]
Date d'inscription : 07/09/2015

Résolu Re: [résolu] Soucis d'écriture d'un bout de script

le Dim 19 Juin 2016 - 23:03
J'avais déjà fait ça pour le rez (à mes yeux une correction de bug, car lancer un rez sur une cible en vie j'trouve ça stupide), mais pour cette partie je préfère ne pas autoriser le curseur dessus.

Normalement le joueur n'aura pas à se poser de questions, si je gère bien tout ça derrière il pigera pourquoi il ne peut pas (j'ai déjà plusieurs idées). Et si un moment tous ont le statut ce sera un bug vu que ça ne doit jamais arriver^^

Fin j'vais pouvoir finaliser cette partie et de manière plus propre^^
Contenu sponsorisé

Résolu Re: [résolu] Soucis d'écriture d'un bout de script

Revenir en haut
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum