Rolemaster JDR

Programation en BAsic

Aller en bas

Programation en BAsic

Message  Anar-sule le Mer 11 Juil 2018, 10:37 pm

Salut à tous !

Quelqu'un si connait un peu en programmation en Basic sous open office ?

J'ai récupéré un générateur de trésor en open source, mais il y a quelques bugs que je n'arrive pas résoudre... Suspect

_________________
Rien ne sert de courir pirat
avatar
Anar-sule

Nombre de messages : 860
Age : 51
Location : Maizières-lès-Metz
Date d'inscription : 10/10/2007

Voir le profil de l'utilisateur http://www.sanctuary.free.fr/

Revenir en haut Aller en bas

Re: Programation en BAsic

Message  Khiva le Jeu 12 Juil 2018, 11:10 am


Salut !

Je m'y connais en programmation mais je n'ai jamais fait de Basic sous Open Office. J'imagine que ça ne doit pas être beaucoup plus compliqué que du VBA sous Microsoft Wink

_________________
Nous n'avons qu'un seul Dieu, c'est la vie sur Terre. Nous n'avons qu'un seul Dieu, c'est d'aimer son frère.
avatar
Khiva

Nombre de messages : 224
Age : 32
Date d'inscription : 16/04/2013

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: Programation en BAsic

Message  Anar-sule le Jeu 12 Juil 2018, 3:55 pm

Le Basic sert de base au VBA, c'est tout.
Si je te soumet un fragment de programmation tu pourrai trouver la faille ?

_________________
Rien ne sert de courir pirat
avatar
Anar-sule

Nombre de messages : 860
Age : 51
Location : Maizières-lès-Metz
Date d'inscription : 10/10/2007

Voir le profil de l'utilisateur http://www.sanctuary.free.fr/

Revenir en haut Aller en bas

Re: Programation en BAsic

Message  Khiva le Jeu 12 Juil 2018, 4:55 pm

Vas y envoie, je peux essayer mais je promets rien !

_________________
Nous n'avons qu'un seul Dieu, c'est la vie sur Terre. Nous n'avons qu'un seul Dieu, c'est d'aimer son frère.
avatar
Khiva

Nombre de messages : 224
Age : 32
Date d'inscription : 16/04/2013

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: Programation en BAsic

Message  Anar-sule le Jeu 12 Juil 2018, 7:02 pm

Dans celle-ci j'ai besoin de supprimer la fonction :Cas de deux effets spécifique sans nuire au reste


ElseIf instr(MyArmeBonus , "Propriété spéciale, rejouez le dé") Then

            ' Détermination du bonus de l'arme
            if instr(maPuissance, "faible") then
            MyMaxD100=85
            elseif instr(maPuissance, "intermédiaire") then
            MyMaxD100=62
            else
            MyMaxD100=49
            endif            
      MyArmeBonus = selectionObjetMagique(TAB_OBJET_MAG_ARMES_COL, maPuissance,0,MyMaxD100)
MyArmeBonusCout = right(MyArmeBonus,len(MyArmeBonus)-instr(MyArmeBonus,"(")) ' Récupération du cout du bonus d'arme
MyArmeBonusCout = left(MyArmeBonusCout,instr(MyArmeBonusCout,")")-1) ' Supression parenthèse de fin                  
      MyArmeBonus = int( right(MyArmeBonus,len(MyArmeBonus)-instr(MyArmeBonus,"+")))
     
' Détermination de l'effet spécifique
If instr(MaTypeArme , "Arme à distance usuelle") Then   ' table 8-15
                MyArmeSpe = selectionObjetMagique(TAB_OBJET_MAG_ARMES_PROPRIETES_DISTANCES_COL, maPuissance)
            Else                                                                                       ' table 8-14
                MyArmeSpe = selectionObjetMagique(TAB_OBJET_MAG_ARMES_PROPRIETES_COL, maPuissance)
            End If
                                     
            ' Cas de deux effets spécifiques              
            if instr(MyArmeSpe,"Rejouez deux fois") then

' Détermination de l'effet spécifique 2
If instr(MaTypeArme , "Arme à distance usuelle") Then   ' table 8-15
                MyArmeSpe = selectionObjetMagique(TAB_OBJET_MAG_ARMES_PROPRIETES_DISTANCES_COL, maPuissance,1,99)
            Else                                                                                       ' table 8-14
                MyArmeSpe = selectionObjetMagique(TAB_OBJET_MAG_ARMES_PROPRIETES_COL, maPuissance,1,99)
            End If  

      ' Détermination du cout de l'effet spécifique 2 de l'arme
      if instr(MyArmeSpe,"po") then
      MyArmeSpeBonusPrix = right(MyArmeSpe, len(MyArmeSpe)-instr(MyArmeSpe,"+")) ' récuperation du bonus en prix de la capacité spécifique de l'armure
      MyArmeSpeBonusPrix2= left(MyArmeSpe,len(MyArmeSpe)-1) ' Supression de la parenthèse de fin    
      else
      MyArmeSpeBonusPrix2 = int(right(MyArmeSpe, len(MyArmeSpe)-instr(MyArmeSpe,"+"))) ' récuperation du bonus en prix de la 2ième capacité spécifique de l'arme                  
      MyArmeSpeBonusPrix = MyArmeSpeBonusPrix+ MyArmeBonus ' ajout au bonus de base de l'arme
      endif
      MyArmeSpe2 =  left(MyArmeSpe,instr(MyArmeSpe,"(")-1)      
               
' Détermination de l'effet spécifique 1
If instr(MaTypeArme , "Arme à distance usuelle") Then   ' table 8-15
                MyArmeSpe = selectionObjetMagique(TAB_OBJET_MAG_ARMES_PROPRIETES_DISTANCES_COL, maPuissance,1,99)
            Else                                                                                       ' table 8-14
                MyArmeSpe = selectionObjetMagique(TAB_OBJET_MAG_ARMES_PROPRIETES_COL, maPuissance,1,99)
            End If                        
            endif
                           
      ' Détermination du cout de l'effet spécifiqueb 1 + 2 de l'arme        
      if instr(MyArmeSpe,"po") then
      MyArmeSpeBonusPrix = right(MyArmeSpe, len(MyArmeSpe)-instr(MyArmeSpe,"+")) ' récuperation du bonus en prix de la capacité spécifique de l'armure
      MyArmeSpeBonusPrix = left(MyArmeSpe,len(MyArmeSpe)-1) ' Supression de la parenthèse de fin    
      MyArmeBonusCout = MyArmeBonusCout &  MyArmeSpeBonusPrix ' Ajout du cout en po du 1ier effet spécifique              
      else
      MyArmeSpeBonusPrix = int(right(MyArmeSpe, len(MyArmeSpe)-instr(MyArmeSpe,"+"))) ' récuperation du bonus en prix de la capacité spécifique de l'arme
      MyArmeSpeBonusPrix = MyArmeSpeBonusPrix+ MyArmeBonus ' ajout au bonus de base de l'arme
        MyArmeBonusCout    = oDocument.sheets.getByName("Objets Magiques").GetCellByPosition(21,MyArmeSpeBonusPrix+2).getstring() ' récupération du prix de l'armure                  
      endif
      ' Cas ou il y a un cout en po pour un 2ième effet
      if instr(MyArmeSpeBonusPrix2,"po") then
      MyArmeBonusCout = MyArmeBonusCout & MyArmeSpeBonusPrix2 ' Ajout du cout en po du 2ième effet spécifique
      endif      
     
          MyArmeSpe =  left(MyArmeSpe,instr(MyArmeSpe,"(")-1) ' Récupération de l'effet spécial

            ' Mise en forme pour affichage de l'armure ou du bouclier magique avec capacité spéciale
            MyArme = MyArmeType & "+" & MyArmeBonus
            if len(MyArmeSpe)>0 then
            MyArme = MyArme & " " & MyArmeSpe
            endif
            if len(MyArmeSpe2)>0 then
            MyArme = MyArme & "/" & MyArmeSpe2
            endif            
            MyArme = MyArme & " (" & MyArmeBonusCout & " " & MyArmeTypeCout & ")"
                   
        Rem  
        Rem Cas d'une arme magique simple
        Rem      
      Else
MyArmeBonusCout = right(MyArmeBonus,len(MyArmeBonus)-instr(MyArmeBonus,"(")) ' Récupération du cout du bonus d'arme
MyArmeBonusCout = left(MyArmeBonusCout,instr(MyArmeBonusCout,")")-1) ' Supression parenthèse de fin      
MyArmeBonus = int(right(MyArmeBonus,len(MyArmeBonus)-instr(MyArmeBonus,"+")))

      MyArme =  MyArmeType & " +" & MyArmeBonus & " (" & MyArmeBonusCout & " " & MyArmeTypeCout & ")"
       End If


       Rem  
       Rem Résultat pour une arme magique
       Rem          
       maObjetMagique = "Arme: " & MyArme

_________________
Rien ne sert de courir pirat
avatar
Anar-sule

Nombre de messages : 860
Age : 51
Location : Maizières-lès-Metz
Date d'inscription : 10/10/2007

Voir le profil de l'utilisateur http://www.sanctuary.free.fr/

Revenir en haut Aller en bas

Re: Programation en BAsic

Message  Khiva le Sam 14 Juil 2018, 8:21 pm

Je ne comprends pas pourquoi on écrit "endif" et des fois "end if", à vérifier si les 2 passent ou s'il faut en corriger ? Dans ce qui suit j'ai rajouté les espaces là où il n y en avait pas (et j'ai mis un commentaire "Charlotte : manque un espace ?"
Ensuite je ne suis pas sure de savoir ce que tu veux, voilà ce que je ferai pour ne plus gérer le cas "cas de 2 effets spécifiques", tu me diras :

ElseIf instr(MyArmeBonus , "Propriété spéciale, rejouez le dé") Then

' Détermination du bonus de l'arme
if instr(maPuissance, "faible") then
MyMaxD100=85
elseif instr(maPuissance, "intermédiaire") then
MyMaxD100=62
else
MyMaxD100=49
end if 'Charlotte : manque un espace ?      
MyArmeBonus = selectionObjetMagique(TAB_OBJET_MAG_ARMES_COL, maPuissance,0,MyMaxD100)
MyArmeBonusCout = right(MyArmeBonus,len(MyArmeBonus)-instr(MyArmeBonus,"(")) ' Récupération du cout du bonus d'arme
MyArmeBonusCout = left(MyArmeBonusCout,instr(MyArmeBonusCout,")")-1) ' Supression parenthèse de fin                  
MyArmeBonus = int( right(MyArmeBonus,len(MyArmeBonus)-instr(MyArmeBonus,"+")))

' Détermination de l'effet spécifique
If instr(MaTypeArme , "Arme à distance usuelle") Then   ' table 8-15
MyArmeSpe = selectionObjetMagique(TAB_OBJET_MAG_ARMES_PROPRIETES_DISTANCES_COL, maPuissance)
Else                                                                                       ' table 8-14
MyArmeSpe = selectionObjetMagique(TAB_OBJET_MAG_ARMES_PROPRIETES_COL, maPuissance)
End If

' Cas ou il y a un cout en po pour un 2ième effet
if instr(MyArmeSpeBonusPrix2,"po") then
MyArmeBonusCout = MyArmeBonusCout & MyArmeSpeBonusPrix2 ' Ajout du cout en po du 2ième effet spécifique
end if 'Charlotte : manque un espace ?      

MyArmeSpe =  left(MyArmeSpe,instr(MyArmeSpe,"(")-1) ' Récupération de l'effet spécial

' Mise en forme pour affichage de l'armure ou du bouclier magique avec capacité spéciale
MyArme = MyArmeType & "+" & MyArmeBonus
if len(MyArmeSpe)>0 then
MyArme = MyArme & " " & MyArmeSpe
endif
if len(MyArmeSpe2)>0 then
MyArme = MyArme & "/" & MyArmeSpe2
endif            
MyArme = MyArme & " (" & MyArmeBonusCout & " " & MyArmeTypeCout & ")"

Rem  
Rem Cas d'une arme magique simple
Rem      
Else
MyArmeBonusCout = right(MyArmeBonus,len(MyArmeBonus)-instr(MyArmeBonus,"(")) ' Récupération du cout du bonus d'arme
MyArmeBonusCout = left(MyArmeBonusCout,instr(MyArmeBonusCout,")")-1) ' Supression parenthèse de fin      
MyArmeBonus = int(right(MyArmeBonus,len(MyArmeBonus)-instr(MyArmeBonus,"+")))

MyArme =  MyArmeType & " +" & MyArmeBonus & " (" & MyArmeBonusCout & " " & MyArmeTypeCout & ")"
End If


Rem  
Rem Résultat pour une arme magique
Rem          
maObjetMagique = "Arme: " & MyArme

_________________
Nous n'avons qu'un seul Dieu, c'est la vie sur Terre. Nous n'avons qu'un seul Dieu, c'est d'aimer son frère.
avatar
Khiva

Nombre de messages : 224
Age : 32
Date d'inscription : 16/04/2013

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: Programation en BAsic

Message  Anar-sule le Dim 15 Juil 2018, 5:25 pm

D'après ce que j'ai trouvé les deux versions sont valide.

Merci pour tes investigations !

J'ai finalement décidé de supprimer la fameuse entrée "Rejouez deux fois" des différentes tables tongue , elle générée trop de problème.

Autre demande : J'ai besoin d'entrée de nouveaux "objets merveilleux" parmi les trois tables existantes... sauf que je suis déjà à 100 entrées sur chacune d'elle. Voici la routine actuellement existante :
Erruis a écrit:     Const TAB_OBJET_MAG_MERV_F_COL = 110
    Const TAB_OBJET_MAG_MERV_I_COL = 114
    Const TAB_OBJET_MAG_MERV_P_COL = 118
Elles correspondent aux colonnes de mes tables
Rem
    Rem   Objets merveilleux
    Rem  
    ElseIf instr(maObjetMagique , "Objets merveilleux") Then
       If instr(maPuissance,"faible") Then
        maObjetMagique = "Objet merveilleux : " & selectionObjetMagique(TAB_OBJET_MAG_MERV_F_COL)
       ElseIf instr( maPuissance,"intermédiaire") Then
        maObjetMagique = "Objet merveilleux : " & selectionObjetMagique(TAB_OBJET_MAG_MERV_I_COL)
       Else
        maObjetMagique = "Objet merveilleux : " & selectionObjetMagique(TAB_OBJET_MAG_MERV_P_COL)
       End If

  1. solution 1 :
    Elargir le tableau en y ajoutant des colonnes comme pour mes "objets non-magique"

  2. Solutions 2 :
    Créer trois nouvelles tables du type Const TAB_OBJET_MAG_MERV_FTB_COL = 133, Const TAB_OBJET_MAG_MERV_ITB_COL = 137, Const TAB_OBJET_MAG_MERV_PTB_COL = 141

Je pense que la solution 2 serai plus rapide et efficace. Pour plus de clarté je peux trouvé le moyen de te faire parvenir le dit document dans son intégralité via clé USB...

_________________
Rien ne sert de courir pirat
avatar
Anar-sule

Nombre de messages : 860
Age : 51
Location : Maizières-lès-Metz
Date d'inscription : 10/10/2007

Voir le profil de l'utilisateur http://www.sanctuary.free.fr/

Revenir en haut Aller en bas

Re: Programation en BAsic

Message  Contenu sponsorisé


Contenu sponsorisé


Revenir en haut Aller en bas

Revenir en haut

- Sujets similaires

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