JeuWeb - Crée ton jeu par navigateur
Gestion des effets actifs sur un personnage - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : Gestion des effets actifs sur un personnage (/showthread.php?tid=3475)



Gestion des effets actifs sur un personnage - Ruz - 23-12-2008

Hello!
Je vais m'attaquer au dernier gros gros trucs de mon jeu : les effets en actions sur le personnage.

idéalement, le tout doit tenir en une seule table...
J'y retrouverais en vrac :
- effets magiques en cours (permanent / à durée (secondes/minutes/heures/jours/jusqu'à la fin du combat en cours))
- effets vitaux (faim, soif, blessure, poisons, dépendance drogues/manques, alcool)
- malus de conditions (suréquipé, brouillard, froid/chaud)
- autres trucs?

enfin, bref: pas mal de trucs pourraient influer sur le personnage... avec ou sans durée, et pouvant évoluer (la faim, faut tenir compte du dernier repas pris... malus augmentant avec le temps, à partir d'un seuil)
Zauriez mis au point un système du genre? en partie? des idées/astuces?
Enfin, voilà, avant de me lancer là-dedans, autant voir à contourner/éviter dès le début les erreurs communes...

Merci d'avance pour vos contributions ^^


RE: [GESTION] Effets actifs sur personnage - Sephi-Chan - 23-12-2008

Pour ma part, j'ai opté pour une table character, une table effects et une table character_effects.

Cette troisième table possède un identifiant, l'identifiant d'un personnage, l'identifiant d'un effet et les paramètres variables comme la durée restante, etc.
Certains effets sont visibles pour le personnage, d'autre non (il va savoir qu'il est "Affamé", mais ne saura pas qu'il est touché par "Poumons infestés d'amiante".

Avec ça, c'est très simple et on peut facilement faire des effets complexes (en codant en dur la résolution d'effets, ou bien en la scriptant).


Sephi-Chan


RE: [GESTION] Effets actifs sur personnage - wild-D - 23-12-2008

moi c'est encore à l'étude mais je vais surement adopter une solution avec juste deux tables :


- au départ j'étais parti dans l'idée de faire comme sephi: une table pour mes cartes (je précise c'est des cartes à jouer), une pour les interactions (carte_carte), une pour les effets, une carte_effet et une effet_effet (ben ouai je me retrouve avec un effet qui agit sur les effets.. c'est p-e moi qu'ai mal conçu mon système là >_<)

- et sinon une variante un peu tordue sur laquelle j'ai replanché et que je vais surement adopter vu comme ça me simplifie la gestion des tables; une table "instances" et une table "interactions" (instances/instances); l'idée étant que carte ou effet; j'ai pas vraiment besoin de les traiter "différemment". L'idée sogrenue derrière est de faire en sorte de traiter les effets comme des sortes de cartes virtuelles temporaires.(je suis pas très sûr de mon coup... mais apparememnt ça semble jouer)


RE: Gestion des effets actifs sur un personnage - gameprog2 - 15-02-2009

Citation :ben ouais je me retrouve avec un effet qui agit sur les effets
Bein non c'est bien ça^^ tu pourra ainsi avoir une carte effet qui diminue ou annihile un autre effet ou au contraire le booster.


RE: Gestion des effets actifs sur un personnage - Argorate - 15-02-2009

Ca tombe bien qu'on en parle, car j'en ai également besoin pour mon jeu.
A la base je pensé faire un seul champ état qui en fonction de la combinaison de chiffre représenterais 1 ou plusieurs effets actifs sur le perso.
Mais j'ai vite vu que c'était se prendre la tête pour rien, je pense donc que la méthode de Sephi reste encore la meilleur, et que je risque d'employer dans quelques temps.

A moins que quelqu'un est mieux? Smile


RE: Gestion des effets actifs sur un personnage - Hakushi - 15-02-2009

Personnellement j'ai un peu de la solution a Sephi, mais comme je trouvais que ça faisait trop de hit sur la DB, j'ai donc implémenté un layer memcache ou je stock deux choses:

- perso_id:effect -> effect_id1;effect_id2;effect_id3
- perso_id:effect_timer -> effect_id1_time_left;effect_id2_time_left;effect_id3_time_left;

Et vu que l'object Effect est aussi dans memcache, si je fais
Code PHP :
<?php 
try
{
$effect_id = DbConn::getKey($perso_id . ":effect");
$effect_time_left = DbConn::getKey($perso_id . ":effect_timer");
$effect = EffectMapper::get()->find($effect_id);
$effect->setTimeLeft($effect_time_left);
}catch(
Exception $e){
$effect = EffectMapper::get()->findPersoEffect($perso_id);
}

A moins que memcache ne vienne d'être flushé ou que l'effect n'y soit pas encore, la fonction find() ira cherche l'objet dans memcache.

C'est rapide, léger et simple à mettre en place. Cependant attention, il faut penser a implémenter un système qui marche au cas ou memcache soit out, perso je stock sous la meme structure que Sephi, avec un time_added dans la table perso_effect, qui me permet de faire rapidement le calcul si besoin est (uniquement si memcache est inacessible).


RE: Gestion des effets actifs sur un personnage - gameprog2 - 15-02-2009

Notez que ça datait de 2008 mais je pouvais pas m'empêcher là Wink