Heures au format UTC + 1 heure [ Heure d’été ]


Règles du forum


Consultez la liste des Scripts : cliquez ici



Publier un nouveau sujet Répondre au sujet  [ 8 messages ] 
Auteur Message
 Sujet du message: Updater de projet ! Développez en continu !
MessagePublié: 02 Juil 2009, 14:14 
Bourgeois (Nv 1)
Avatar de l’utilisateur

Inscrit le: 03 Jan 2009, 01:00
Messages: 203
Localisation: Paris
Logiciel(s) préféré(s): VX
Point(s) Fort(s): Ruby
Sexe: Masculin
Points d'aide: 1/60

Créations :

Voir ses créations

Bonjour à tous, créatiens !

Pour un projet en cours j'ai ressorti et dépoussiéré mon script de téléchargement de fichiers. Et j'ai fait la découverte sensationnelle d'une API permettant de résumer ce script en ... 3 lignes.

Code: Tout sélectionner
#-------------------------------------------------------------------------------
#                                Mise à jour                                
#-------------------------------------------------------------------------------
#      vers.0.2                   par Berka                    rgss.1        
#-------------------------------------------------------------------------------

Url="http://rpgruby.olympe-network.com/berka"
ROOT=Dir.pwd << "/"
Mauvurl="L'url de téléchargement est incorrect"
Deconnect="Pas de connexion internet"

module Net
  UDTF=Win32API.new('urlmon','URLDownloadToFile','lpplp','l')
  IVU=Win32API.new('urlmon','IsValidURL','ppl','l')
  IIO=Win32API.new('url','InetIsOffline','l','l')
  WPPS=Win32API.new('kernel32','WritePrivateProfileString','pppp','l')
  GPPS=Win32API.new('kernel32','GetPrivateProfileString','pppplp','l')
#------------------------------------------------
  module HTTP
    module_function
    def download(url,int)
      print(Deconnect)if Net::IIO.call(0)!=0
      print(Mauvurl)if Net::IVU.call(nil,url,0)!=1
      Graphics.update
      Net::UDTF.call(0,url,int,0,0)==0
    end
  end
#------------------------------------------------ 
  def self.update(version,path)
    return [false,""]if !Net::HTTP.download("#{Url}/#{path}/vers.rgss","#{path}.upd")
    $majfich=File.readlines("#{path}.upd")
    File.delete("#{path}.upd")
    $vers=($majfich).shift.split(':')[-1].to_f
    ok=$vers>version.to_f
    return [ok,ok ? $vers : " "]
  end
#------------------------------------------------ 
  def self.get_version
    GPPS.call("Game","Vers","",v="\0"*16,16,".//Game.ini")
    v.delete!("\0")
    v=="" ? v="0" : v
  end
#------------------------------------------------ 
  def self.set_version
    WPPS.call("Game","Vers",$vers.to_s,".//Game.ini")
  end
#------------------------------------------------ 
  def self.dl
    $err/$majfich.size
  end
#------------------------------------------------ 
  def self.dl_patch(path)
    $err=0
    $majfich.each{|f|f.chomp!
      $err+=1 if Net::HTTP.download("#{Url}/#{path}/"+f,ROOT+f)
    }
    self.set_version
    return $err,$majfich.size
  end
end


Voila pour le script, à coller au dessus de main.
Certaines fonctions ont disparues, comme la progression, mais j'y travaille. La vérification du téléchargement laisse aussi à désirer.

Alors. Comment marche ce script ?

Il y a deux phases:

1) La configuration du serveur FTP
Vous vous connectez sur le serveur, puis vous créez un dossier, il contiendra tous vos projets (et chacun contiendra les versions). Perso, je fais un sous répertoire nommé berka à la racine de mon ftp. C'est disponible ici par protocole http:
Citer:
http://rpgruby.olympe-network.com/berka

Dans ce dossier berka, je vais crée un dossier projet1. il contiendra la mise à jour de mon superbe projet1
Citer:
http://rpgruby.olympe-network.com/berka/projet1

Ensuite, dans ce dossier, je vais créer un fichier, nommé vers.rgss. Ce fichier a une structure particulière:
Code: Tout sélectionner
version:5.1
Data/Actors.rxdata
Data/Animations.rxdata
Data/Areas.rxdata
Data/Armors.rxdata
Data/Classes.rxdata
Graphics/System/Image.png

A la première ligne, c'est le numéro de votre dernière version en ligne. Celle qui sera téléchargée.
Ensuite, viennent les chemins de tous les fichiers téléchargeables. Remarquez que la structure est la meme que celle d'un projet basique. Respectez cette structure pour mettre vos fichiers sur le ftp, faites comme si vous copiez directement le répertoire de votre projet sur le serveur.
Pour servir d'exemple, je vous envoie mon ftp:
http://rpgruby.olympe-network.com/berka/creator/
Enfin, quelques précisions: le système est sensible à la casse: vérifiez les majuscules. Et chmodez tous les fichiers à 755.

Voila pour le serveur.

2) La configuration du projet
Le plus simple est de placer ces quelques commandes juste après le begin du script main.
Il faut tout d'abord vérifier la présence d'une mise à jour en ligne:
Code: Tout sélectionner
maj_dispo=Net.update(Net.get_version,'projet1')

souvenez-vous ! "projet1" est le nom du sous dossier de tout à l'heure !
Net.get_version récupère la version du projet du joueur.
Net.update évalue les deux versions: joueur/serveur et autorise le téléchargement si la version du serveur est plus récente.
on enferme le tout dans une variable: maj_dispo
elle contiendra un booléen d'autorisation, ainsi que le numéro de la dernière version disponible.
C'est bon, on peu lancer le téléchargement:
Code: Tout sélectionner
Net.dl_patch('projet1') if maj_dispo[0]

Si l'autorisation est accordée, on va lancer le téléchargement des fichiers de 'projet1'

Voila, votre jeu, après un cours instant sera à jour: vous n'aurez qu'à relancer le jeu, ou appuyer sur F12 pour voir les nouveautés.

3) Détails techniques, pour les amateurs:
Il faut que je thread le tout, pour éviter le blocage du jeu.
Le numéro de version est stocké dans le fichier Game.ini

Et en bonus voici un petit programme ruby qui vous préparera un fichier vers.rgss tout prêt à copier sur votre serveur ftp ! Placez le dans votre projet et lancez le avec ruby:
Code: Tout sélectionner
require "Win32API"
GPPS=Win32API.new('kernel32','GetPrivateProfileString','pppplp','l')
class String
   def liste_rep(f="")
      f="" if f=="/"
      (Dir.open(self).sort-[".", ".."]).each{|fichier|
         case File.ftype(self+fichier)
         when "directory" then (self+fichier+"/").liste_rep(fichier+"/")
         when "file" then $fichier << f+fichier+"
" if f !=""
         end
      }
   end
end
$fichier=File.open("vers.rgss","w")
GPPS.call("Game","Vers","",v="\0"*16,16,".//Game.ini")
$fichier << "version:#{v.delete!("\0")}
"
"./".liste_rep
$fichier.close


J'espère que ce script vous sera utile, et je suis ouvert à toute question,

berka

_________________
Twitter: Pensées politiques et juridiques. Réflexions informatiques


Haut
 Profil  
 
 Sujet du message: Re: Updater de projet ! Développez en continu !
MessagePublié: 02 Juil 2009, 14:39 
Artisan (Nv 2)

Inscrit le: 14 Nov 2007, 01:00
Messages: 127
Points d'aide: 0/60

Créations :

Voir ses créations

Salut,
Merci pour ce super script.

♦ Je n'ai pas compris a propos du serveur ftp. Il faut se créer un site ? Je ne sais pas vraiment ce qu'est un serveur ftp blush )
♦ Les deux petites lignes de codes, elles se placent juste sous le begin du script Main ?

♦ Le tout dernier petit script, ou faut-il le placer ?

Désolé pour ces questions, mais bon j'ai pas bien tout compris.
Cordialement,
Naruzozo


Haut
 Profil  
 
 Sujet du message: Re: Updater de projet ! Développez en continu !
MessagePublié: 02 Juil 2009, 14:43 
Bourgeois (Nv 1)
Avatar de l’utilisateur

Inscrit le: 03 Jan 2009, 01:00
Messages: 203
Localisation: Paris
Logiciel(s) préféré(s): VX
Point(s) Fort(s): Ruby
Sexe: Masculin
Points d'aide: 1/60

Créations :

Voir ses créations

bonjour,

1) Il te faut un serveur ftp. Tu en as un lorsque tu crées un site, fourni par ton hébergeur, mais tu as des logiciels qui permettent de t'en monter un sur ton ordi.

2) Les deux lignes se placent ou tu veux, avant main, dans main après begin, ou bien dans un script.

3) Le dernier script est un programme ruby, tu dois le mettre dans un fichier ruby.

berka

_________________
Twitter: Pensées politiques et juridiques. Réflexions informatiques


Haut
 Profil  
 
 Sujet du message: Re: Updater de projet ! Développez en continu !
MessagePublié: 02 Juil 2009, 15:17 
Artisan (Nv 2)

Inscrit le: 14 Nov 2007, 01:00
Messages: 127
Points d'aide: 0/60

Créations :

Voir ses créations

Merci de tes réponses, mais uelques questions subsistent.

1) Pourrais tu me passer un logiciel qui me permette d'en créer un si possible ? happy Car je ne sais pas trop comment créer un site
2) Ok merci.
3) Un fichier Ruby, c'est comme ce qu'il y a dans Data ?
Je le fait comment mon fichier Ruby ?

Merci.
Naruzozo.


Haut
 Profil  
 
 Sujet du message: Re: Updater de projet ! Développez en continu !
MessagePublié: 02 Juil 2009, 16:24 
Bourgeois (Nv 1)
Avatar de l’utilisateur

Inscrit le: 03 Jan 2009, 01:00
Messages: 203
Localisation: Paris
Logiciel(s) préféré(s): VX
Point(s) Fort(s): Ruby
Sexe: Masculin
Points d'aide: 1/60

Créations :

Voir ses créations

1) Tu as pas mal de logiciels, comme ftpexpert. Tiens un peu d'aide: sur pcAstuces

2) De rien Laughing

3) Il faut que tu installes l'interpréteur ruby. Site officiel fr

berka

_________________
Twitter: Pensées politiques et juridiques. Réflexions informatiques


Haut
 Profil  
 
 Sujet du message: Re: Updater de projet ! Développez en continu !
MessagePublié: 05 Juil 2009, 23:29 
Artisan (Nv 2)

Inscrit le: 14 Nov 2007, 01:00
Messages: 127
Points d'aide: 0/60

Créations :

Voir ses créations

Désolé mais y a pas mal de logiiel sur le site Ruby, et je ne sais pas lequel choisir. J'en ai téléchargé un mais il y a une cinquantaine de fichier applications dedans, et je ne sais vraiment pas comment faire pour ouvrir un script avec ça. D'ailleurs, il faut aussi un interpreteur Ruby pour lire ls scripts que l'on crée avec ton logiciel non ?..

Désolé, j'peux paraitre lourd mais moi j'y connais rien.
Merci.


Haut
 Profil  
 
 Sujet du message: Re: Updater de projet ! Développez en continu !
MessagePublié: 31 Juil 2009, 08:51 
Bourgeois (Nv 1)
Avatar de l’utilisateur

Inscrit le: 03 Jan 2009, 01:00
Messages: 203
Localisation: Paris
Logiciel(s) préféré(s): VX
Point(s) Fort(s): Ruby
Sexe: Masculin
Points d'aide: 1/60

Créations :

Voir ses créations

Tout fichier ruby est exécuté par l'interpréteur ruby. Donc, tous les fichiers *.rb et *.rbw peuvent etre codés avec n'importe quel éditeur de texte, mais doivent etre exécutés avec ruby.

berka

_________________
Twitter: Pensées politiques et juridiques. Réflexions informatiques


Haut
 Profil  
 
 Sujet du message: Re: Updater de projet ! Développez en continu !
MessagePublié: 12 Jan 2010, 18:15 
Artisan (Nv 3)

Inscrit le: 12 Aoû 2006, 00:00
Messages: 153
Points d'aide: 2/60

Créations :

Voir ses créations

Merci pour ce script ;) il me sera utile. perso j'ai ajouté :
Citer:
print("La dernière mise à jour disponible a été installer.")if maj_dispo[0]
$defaultfonttype = $fontface = "Arial"
$defaultfontsize = $fontsize = 21

après
Citer:
Net.dl_patch('001') if maj_dispo[0]
(dans Main) comme sa on sait que la mise a jour a été effectué ;).

Sinon j'ai un petit problème :oops: quand j'utilise "vers.rbw" le fichier "vers.rgss" ce créé bien mais le fichier graphique(ou audio) sont ecrit comme sa :
Citer:
Autotiles/002-G_Shadow01.png

Et lors de la MàJ, le fichier n'est pas ajouté a mon dossier de jeu.(en fait il manque le premier dossier)
je doit manuellement ajouté "Graphics/" devant chaque ligne (Graphics/Autotiles/002-G_Shadow01.png)

C'est un peu chiant quand on a beaucoup d'images(ou de sons), quelqu'un a une solution pour moi ? :|

merci :mrgreen:
_________________________________________________

Edit : en fait c'est bon ;) j'ai remplacer la ligne 8 du fichier vers.rbw par :
Citer:
when "directory" then (self+fichier+"/").liste_rep(self+fichier+"/")
Maintenant le dossier est bien écrit. j'ai juste ./ qui se place devant chaque ligne, mais Edition>remplacé ./ par *rien* et c'est bon :D
__________________________________________________

Edit 2 : Bon j'ai modifier un petit peu ce qu'il y a après BEGIN, dans main :
Citer:
maj_dispo=Net.update(Net.get_version,'lejeu')
print("Une mise à jour est disponible, cliquez sur OK pour commencer le téléchargement.")if maj_dispo[0]
Net.dl_patch('lejeu') if maj_dispo[0]
print("La dernière mise à jour a été installer.Pour connaitre les nouveauté, lisez le fichier MaJ dans le dossier du jeu.")if maj_dispo[0]


Voila :) maintenant le joueur est averti avant la MàJ, et après il peu lire le fichier MaJ pour connaitre...Baa le but de la Mise à jour ;) (il faut créé un fichier texte dans le dossier du jeu, et ajouté "MaJ.txt" dans le fichier vers.rgss)

_________________
Image
j'ai déjà gagné 21€ :D et j'ai bien tout recu sur mon compte paypal ;)


Haut
 Profil  
 
Afficher les messages depuis:  Trier par  
Publier un nouveau sujet Répondre au sujet  [ 8 messages ] 

Heures au format UTC + 1 heure [ Heure d’été ]


Qui est en ligne ?

Utilisateurs parcourant actuellement ce forum : Aucun utilisateur inscrit et 2 invités


Vous ne pouvez pas publier 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 insérer de pièces jointes dans ce forum

Rechercher pour:
Sauter vers:  
cron
RPG Creative Forum version 5 ; Tous droits réservés
phpBB Group (Traduit par Xaphos)
Optimisé pour une résolution 1024*728