IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Linux Discussion :

script random sur fichier


Sujet :

Linux

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 23
    Par défaut script random sur fichier
    Bonjour à tous
    je suis nouveau dans le monde de linux et encore plus dans la programmation
    Le but:
    Je souhaiterais modifier l'ordre des maps et ajouter les nouvelles de manière automatique dans mon jeux Counter-Strike Condition Zero.

    Pour cela, tout se passe dans un fichier mapcycle.txt
    Ce fichier est rempli du nom des maps mais sans leur extension bsp.
    Le fichier est composé de ma manière suivante.

    de_dust
    de_prodigy
    de_dust2
    de_nuke

    Je souhaiterais donc faire un script lancé de n'importe ou (par exemple /home)

    il prendrait tous les fichiers ayant l'extension bsp dans le répertoire indiqué : .../cstrike/maps.
    Ensuite avec une fonction de type "random" rangerais les maps (mais sans leur extension bsp) dans le fichier mapcycle.
    Le fichier mapcyle serait donc à chaque lancement de ce script toujours différent au niveau de l'ordre des maps.

    De plus je souhaiterais que le script lance ensuite l'application par une ligne de commande qui serait
    de type :

    cd /usr/serveurs/serveur1/

    ./srcds_run -console -game czero -port 27015 +map XXXXX +maxplayers 16 -tickrate 100

    La map lancée ici XXXXX serait la dernière du map cycle (pour ne pas la jouer 2 fois)

    Comment faire ca ????


    Merci d'avance

  2. #2
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 832
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 832
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par ricco75 Voir le message
    Bonjour à tous
    je suis nouveau dans le monde de linux et encore plus dans la programmation
    Le but:
    Je souhaiterais modifier l'ordre des maps et ajouter les nouvelles de manière automatique dans mon jeux Counter-Strike Condition Zero.

    Pour cela, tout se passe dans un fichier mapcycle.txt
    Ce fichier est rempli du nom des maps mais sans leur extension bsp.
    Le fichier est composé de ma manière suivante.

    de_dust
    de_prodigy
    de_dust2
    de_nuke

    Je souhaiterais donc faire un script lancé de n'importe ou (par exemple /home)

    il prendrait tous les fichiers ayant l'extension bsp dans le répertoire indiqué : .../cstrike/maps.
    Ensuite avec une fonction de type "random" rangerais les maps (mais sans leur extension bsp) dans le fichier mapcycle.
    Le fichier mapcyle serait donc à chaque lancement de ce script toujours différent au niveau de l'ordre des maps.
    Comment faire ca ????
    Te faut apprendre à programmer car c'est déjà un petit truc qui n'est pas à la portée du néophyte. Mais surtout te faut choisir un langage.
    - Le shell: simple à appréhender mais c'est plus un langage pour manipuler le système. Il manquera pas mal d'outils (dont la gestion du random)
    - Le C: puissant et rapide mais faut tout faire depuis le plus bas niveau (réservation mémoire pour stocker le nom de la map, etc)
    - Python: Souple et puissant qui répond bien à ton problème
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    #!/usr/bin/env python
    # coding: Latin-1 -*-
     
    import os
    import random
     
    # Création de la liste
    liste=[]
    for file in os.listdir(".../cstrike/maps"): liste.append(file)
     
    # Mélange
    random.shuffle(liste)
     
    # Enregistrement de la liste
    fp=open("mapcycle.txt", "w")
    for file in liste: fp.write("%s\n" % file)
    fp.close()
    Tu enregistres ce code dans un fichier "toto.py", tu lui mets le droit "x" puis il ne te reste plus qu'à lancer "./toto.py" chaque fois que tu voudras avoir un nouveau mapcycle.

    J'aurais pu aussi utiliser des langages équivalents à Python comme Ruby ou Perl mais je ne les connais pas. Ptet que d'autres forumeurs te sortiront une version en Ruby ou Perl...

    Citation Envoyé par ricco75 Voir le message
    De plus je souhaiterais que le script lance ensuite l'application par une ligne de commande qui serait
    de type :
    cd /usr/serveurs/serveur1/

    ./srcds_run -console -game czero -port 27015 +map XXXXX +maxplayers 16 -tickrate 100

    La map lancée ici XXXXX serait la dernière du map cycle (pour ne pas la jouer 2 fois)
    Là c'est plus un truc à faire en shell
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    #!/bin/bash
    map=`head -1 mapcycle.txt`
     
    cd /usr/serveurs/serveur1/
     
    ./srcds_run -console -game czero -port 27015 +map "$map"  +maxplayers 16 -tickrate 100
    Tu enregistres ce code dans un fichier "toto.sh", tu lui mets aussi le droit "x" puis t'as plus qu'à taper "./toto.sh" pour qu'il lance ton serveur CS.

    Voilà. Mais apprend quand-même ces deux langages que sont le shell et Python car 1) c'est bien pratique quand on bosse sur Unix/Linux de pouvoir se créer un outil rapide quand il faut (j'ai mis 3mn à taper ces scripts après avoir lu ta question) et 2) on va pas te taper tout tes programmes (là je l'ai fait "exceptionnellement" pour te montrer la facilité de ces outils mais c'est tout)
    Tu trouveras un cours de shell Linux ici: http://linux.developpez.com/cours/
    Tu trouveras des tuto Python ici: http://python.developpez.com/cours/

    Bon frag.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 23
    Par défaut Merci à toi
    oula c du rapide !!
    merci à toi pour ta gentillesse!
    ca fait plaisir de voir qu'il y a des gens sympas.

    Je crois qu'il y a pas mal de boulot en prévison !!
    Je vais aller faire un tour sur les sites que tu m'as indiqués.

    Encore merci

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 23
    Par défaut oups
    Salut
    je viens de tester le script

    ca marche presque sauf que je voudrais juste récuper les fichier bsp du répertoire maps

    une fonction de type

    for file in os.listdir(".../cstrike/maps/*.bsp"): liste.append(file)

    mais ca ne marche pas

    je cherche mais ca m'a l'air drolement puissant Python

  5. #5
    Membre chevronné
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    271
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 271
    Par défaut
    En utilisant une liste compréhensive (list comprehension) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    import os
    liste = [ x for x in os.listdir('.../cstrike/maps/*.bsp') if os.path.splitext(x)[1] == ".bsp" ]

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 23
    Par défaut
    J'ai modifié le script initial de la sorte :
    mais ca ne fonctionne pas ?



    #!/usr/bin/env python
    # coding: Latin-1 -*-

    import os
    import random

    # Création de la liste
    #liste=[]
    liste = [ x for x in os.listdir('.../cstrike/maps/*.bsp') if os.path.splitext(x)[1] == ".bsp" ]
    for file in os.listdir(".../cstrike/maps"): liste.append(file)


    # Mélange
    random.shuffle(liste)

    # Enregistrement de la liste
    fp=open("mapcycle.txt", "w")
    for file in liste: fp.write("%s\n" % file)
    fp.close()

Discussions similaires

  1. Script Shell sur des fichiers et chaînes
    Par chris_wafer dans le forum Shell et commandes GNU
    Réponses: 1
    Dernier message: 29/01/2008, 21h45
  2. erreur sur fichier script a.s
    Par flashdams dans le forum Flash
    Réponses: 1
    Dernier message: 03/01/2008, 15h52
  3. Appliquer un script perl sur un fichier uploadé
    Par Oli_Ifre dans le forum Langage
    Réponses: 4
    Dernier message: 04/04/2007, 11h14
  4. Script gestion évenement sur fichier.
    Par beloc dans le forum Linux
    Réponses: 4
    Dernier message: 02/06/2006, 13h57
  5. script autorisation sur fichier
    Par oasis_5 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 13/03/2006, 16h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo