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

MySQL Discussion :

Précisions sur les événements


Sujet :

MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Par défaut Précisions sur les événements
    Bonjour,

    malgré mes recherches, je n'arrive pas à trouver l'information : y'a t-il une limite au nombre d'événement que l'on puisse créer avec MySQL ?

    Et admettons que je puisse créer 10000 events, y'a t-il un risque de moulinage intense du moteur ?

    Merci de vos éclaircissements

  2. #2
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 090
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 090
    Par défaut
    Moi, c'est d'avoir autant d'event ?!
    A Quoi cela peut servir ?
    On s'en passait bien avec des Shell Linux !
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Membre Expert Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Par défaut
    En fait c'est pour la création d'un jeu en php

    Pour faire simple, lorsqu'un joueur crée plusieurs unités en meme temps (ex: 50 fantassins), il faut qu'il obtienne ses 50 fantassins répartis sur 50*(temps necessaire de creation par_fantassin) et non pas qu'il obtienne ses 50 fantassins d'un coup. Pour faire ca j'ai pensé aux events MySQL

    :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $event = "CREATE EVENT $nom_event ON SCHEDULE EVERY $frequence SECOND STARTS CURRENT_TIMESTAMP + INTERVAL $frequence SECOND ENDS CURRENT_TIMESTAMP + INTERVAL $duree SECOND DO UPDATE $table SET nb_unites_actuel=nb_unites_actuel+1, date_event_start=unix_timestamp(), date_event_end=unix_timestamp()+ $frequence WHERE id_joueur=$_SESSION[id_joueur];";

    Mais l'inconvenient c'est qu'un joueur peut lancer autant de production d'unités qu'il le souhaite et ce combiné avec tout les joueurs possibles on peut facilement arriver à 10k events voir beaucoup plus

    A moins que quelqu'un voit une autre solution sachant qu'il faut que les unités soient crées à la seconde près en cas d'attaque par exemple d'un joueur sur un autre. Enfin bref, si vous voulez d'autres explications complémentaires demandez moi

    Merci

  4. #4
    Membre Expert Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Par défaut
    Bon finalement, je me suis débrouillé avec une options full php

    Pas de surchage du moteur comme ca, le nombre d'unités étant updaté à chaque fois que l'on en a vraiment besoin

  5. #5
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 090
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 090
    Par défaut
    Effectivement, mettre trop de règle "métier" dans la Base ce n'est pas toujours la meilleure idée, mieux vaut avoir ses objets et workflow dans son code ! même pour un jeu !

    Tu veux simuler un temps de production, la solution la plus simple, tu insères dans la DB des Unités, la Date de Validité de ton unité\batiment, ainsi, le joueur peut se connecter, lancer une construction de 50 unités, cela insère les unités dans la table avec la Date de disponibilité, tu gères en plus comme la file de construction ...
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  6. #6
    Membre Expert Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Par défaut
    bah finalement j'ai crée une fonction php qui s'execute lorsque le joueur va dans son menu de troupes ou alors lorsqu'on l'attaque

    Pour info pour ceux que ca interesse :

    Code php : 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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
    function maj_base_unites($id_joueur){
     
    //On supprime les evenements terminés
    $params = array('type'=>'DELETE', 'table'=>'events_unites', 'cond'=>"nb_unites_demandees=nb_unites_actuel and id_joueur=$id_joueur");
    $resultat = $this->requete($params);
     
    $params = array('table'=>'events_unites', 'cond'=>"id_joueur=$id_joueur");
    $resultat = $this->requete($params);
     
    while($ligne = mysql_fetch_assoc($resultat)){
    	$now = time();
    	$id_event_unites = $ligne['id_event_unites'];
    	$unite = $ligne['unite'];
    	$groupe = $ligne['groupe'];
    	$nb_unites_demandees = $ligne['nb_unites_demandees'];
    	$nb_unites_actuel = $ligne['nb_unites_actuel'];
    	$date_event_start = $ligne['date_event_start'];
    	$date_event_end = $ligne['date_event_end'];
     
    	//Si on se trouve dans l'interval de production de la ligne de l'unite ou plus
    	if($now >= $date_event_start){
     
    	$temps_prod_unite = $this->calcul_temps_creation_unite($unite);
    	$prod_theorique = (int)(($now - $date_event_start) / $temps_prod_unite);
     
    	if($prod_theorique > $nb_unites_demandees)
    		$prod_theorique = $nb_unites_demandees;
     
    	$delta_a_produire = $prod_theorique - $nb_unites_actuel;
     
    	$params2 = array('table'=>'events_unites', 'type'=>'UPDATE', 'champs'=>'nb_unites_actuel', 'value'=>"$prod_theorique", 'cond'=>"id_event_unites=$id_event_unites");
    	$resultat2 = $this->requete($params2);
     
    	$params2 = array('table'=>'unites', 'type'=>'UPDATE', 'champs'=>"$unite", 'value'=>"$unite + $delta_a_produire", 'cond'=>"id_joueur=$id_joueur");
    	$resultat2 = $this->requete($params2);
     
    	}
    	}
    }

    En gros, lorsque je lance la production d'unités, celles ci sont stockées dans une table avec entre autre des champs groupe (2 unités de meme groupe ne peuvent etre créees en meme temps) et un champs qui correspond a la fin de la production de cet/ces unitée(s).
    Ensuite, je calcule la production théorique de ces unités depuis la derniere maj de cette table et je l'ajoute dans la table des unités sous conditions.

    Voilà c'est mal expliqué mais ca marche

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Précision sur les makefile
    Par vinzzzz dans le forum Systèmes de compilation
    Réponses: 6
    Dernier message: 09/05/2006, 20h40
  2. [HTML][USEMAP] Précision sur les zones réactives
    Par cladsam dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 08/02/2006, 08h20
  3. Précisions sur les listes
    Par Virgile59 dans le forum Access
    Réponses: 1
    Dernier message: 07/02/2006, 21h20
  4. Précisions sur les recordset DAO
    Par Igricheff dans le forum VBA Access
    Réponses: 2
    Dernier message: 18/01/2005, 17h16
  5. Précision sur les sauvegarde à chaud
    Par alxkid dans le forum Administration
    Réponses: 2
    Dernier message: 09/08/2004, 18h55

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