La Pierre de Tear fait peau neuve ! L'aventure continue sur www.pierredetear.fr !

L'ancien site est a présent archivé pour la postérité et en mode "lecture seule". Vous pouvez consulter l'ensemble du contenu et des anciennes discussions du forum, mais plus créer de nouveaux topics ni écrire de nouvelles réponses.

Rendez-vous sur les nouveaux forums ici: www.pierredetear.fr/forum

N'hésitez pas à rejoindre le Discord de la Pierre de Tear en cliquant ici: Discord Pierre de Tear

- L'équipe des Admins: Klian, Owyn et DS

Topic Combat / Duel et autres fights
(Sujet créé par Méliane l 07/05/04 à 11:27)
non favori


Alors avec DS et Elann on a eu une idée. TATATA...

En bref, il manque un module combat sur le forum qui pourrait être utilisé pour permettre :
- aux PJ de tuer des méchantes engeances de l'ombre PNJ ou PJ,
- à la DS's bande de tenter d'exécuter certains "gentils" génants,
- à des PJ de se battrent en duel,
- et encore pleins d'autres situations.

Ce module devrait être utilisé avec modération (pas question d'entraîner des hécatombes), lorsque le rôle play si prête vraiment.

1) Chaque perso à 5 points de vie (PV).
2) Chaque membre du combat fait à tour de rôle un jet de dé (la situation RP décide de qui à l'initiative), sur un D10. Le plus haut score inflige un point de dégat à l'autre.
3) Le premier qui tombe à :
- 2 pv a perdu le duel (bah, non, pas de duel à mort, c'est pas cool),
- à 0 pv est mort.
4) Si le RP s'y prête il est possible de fuir ou de faire interrommpre le combat à tout moment.
5) Selon son appartenance à une com (là, ça va gueuler) et son classement dans la com il est possible d'obtenir des bonus à rajouter aux jets de dés.
Ainsi :
- apprenti lige : +1
- lige : +2
- maître d'arme : +3

Ou encore
- novice : + 1
- acceptée : +2
- Aes Sédaï : +3

6) Pas de bonus particulier pour les chefs de com, sauf pour le grand méchant DS qui disposant de la chance du ténébreux à droit à un Reroll par combat et un bonus de +4 (c'est quand même le grand méchant quoi).


7) Dernier "détail", les "jets de dés" se feraient dans un topic particulier et seraient générés aléatoirement en envoyant son post.
Ex : Je décris mon action dans un post, je clic sur envoyer et je découvre lisant mon post le score qui m'a été attribué. Puis mon adversaire riposte.
Cela pose des "petits" problèmes techniques = un vrai challenge pour Elann, mais rien d'insoluble.

Qu'en pensez-vous ???



Aller en bas de page
<< Page précédente Page suivante >>
Tous les posts
Aekar
10/05/2004 23:54
Ligeaillon travailleur

Elann... Il y a eu un combat entre Barberousse et moi comme tu peux le voir sur le topic Entraînement des Liges... et je veux attirer ton attention sur un point bien précis.

Résultat des tests sur ce combat :

26 jets en tout.
Le 1 est sorti sept fois
Le 3 est sorti cinq fois
Le 5 est sorti quatre fois
Le 7 est sorti trois fois
Le 9 est sorti sept fois

Suis-je le seul à observer que, mis à part le jet de DS un peu au-dessus (sans doute truqué, c'est un Réprouvé), il n'y eut pas un seul chiffre pair dans les résultats des jets de tous ici présents ?



Méliane
11/05/2004 11:22
Meliane#2818

Whaouuuuuuu, il est impressionnant Aekar ...
Elann
11/05/2004 11:54
<b>Wolfmaster</b>

Et il a raison

[d10] (si vous pouviez inclure un d10 à chaque post dans ce sujet, ça permettrait d'avoir plus de stats)


ATTENTION MATHS :

Mais y a pas de raison :

Ma formule est la suivante : j'additionne un ensemble de valeurs, je les multiplie (par un nombre pair mais ça n'a pas d'importance), et je prends le modulo par 10 (reste dans la division entière par 10). Ensuite j'ajoute 1 pour être entre 1 et 10 et pas 0 et 9.

Je vais l'étudier plus en détails mais y a pas de raison de ne pas avoir de nombres pairs.
Aekar
11/05/2004 12:08
Ligeaillon travailleur

Hmm... sais-tu que tout nombre multiplié par un nombre pair, auquel on ajoute 1, devient forcément un nombre impair ?

Si X=3 (nombre impair):
X * 2 + 1 = 7
X * 4 + 1 = 13

etc...

Si X=4 (nombre pair):
X * 2 + 1 = 9
X * 4 + 1 = 17
etc...


EDIT : Un p'tit coup de dé pour le fun :
[d10]


EDIT 2 : J'ai oublié de le préciser, mais tout nombre multiplié par un nombre impair, et auquel on ajoute 1, se trouve lui par contre avec une parité inversée, au lieu de se trouver forcément pair :

Si X=3 (nombre impair):
X * 3 + 1 = 10
X * 7 + 1 = 22

etc...

Si X=4 (nombre pair):
X * 3 + 1 = 13
X * 7 + 1 = 29
etc...
Aekar
11/05/2004 12:14
Ligeaillon travailleur

Attention discours informatique *warning*

Je me demandais sinon, pourquoi ne pas prendre directement la fonction PHP de rand(0, 10) ( ou 0 à 9 je ne sais plus) pour avoir le nombre aléatoire en question.

Afin de ne pas avoir des résultats différents à chaque fois qu'on consulte le post, on pourrait prendre comme initialisation du générateur aléatoire une propriété enregistrée pour le post.

En gros, quand tu écris un post, je suppose que vous l'enregistrez dans une table ; vous ajoutez à cette table une propriété init_aleatoire, initialisée donc aléatoirement au premier enregistrement du post (comme random seed, comme on dit pour ces cas là, pris par exemple par ce que renvoie la fonction time() soit le nombre de secondes depuis 1970). Cette propriété n'est pas modifiée même si on édite le post. Elle reste permanente et différente donc pour chaque post.

Donc, on obtient un post qui même s'il est édité, lu par qui que ce soit conserve une propriété unique d'initialisation du générateur aléatoire, non modifiable.

Ensuite, quand on relit le post, on relit cet init_aleatoire, l'utilise pour initialiser / réinitialiser le générateur aléatoire avant de traduire toute balise d10 de ce post précis, et là si on utilise rand(0, 10) cela renvoie exactement le même résultat. A la lecture des autres posts, on utilise leur init_aleatoire respectif pour réinitialiser le générateur, etc...



C'est à tester évidemment, c'est juste une chose qui me vient à l'esprit ; et d'ailleurs, je suppose déjà Elann que tu utilises un système similaire pour avoir le même résultat à chaque fois, non ?
DonLope
11/05/2004 12:25
<i>Doyen Ménestrel</i><br><br>

Pour le discours info, j'ai pas capté.
Mais pour les maths, le tisseur overbooké a raison : si tu multiplie par un nombre pair, le résultat est obligatoirement pair (y compris sa partie décimale et donc le dernier chiffre du modulo par 10).
Il te restera donc obligatoirement après ton modulo : 0,2,4,6,8. Donc tu tireras 1,3,5,7,9.
Aekar
11/05/2004 12:53
Ligeaillon travailleur

Ah DonLope c'est tellement plus clair en quatre lignes, je vais prendre des leçons ! tu as bien ciblé le problème.


Pour le discours info, je peux le réécrire en version moins informatique, si vous voulez, d'ailleurs je vais m'y mettre. C'est juste que je sais bien qu'Elann devait déjà avoir connaissance de tout cela, alors je ne voulais pas l'assommer avec le reste et puis peut-être que cela n'intéresse guère.


Donc j'explique, peuvent sauter cette partie ceux qui le désirent...



Discours info, version non cryptée...

Il existe une fonction dans le langage PHP (langage informatique utilisé dans la Pierre de Tear) pour renvoyer un nombre aléatoire : rand (a, b). Cette fonction renvoie un nombre aléatoire pris entre (a) et (b). C'est un nombre décimal qu'elle renvoie, mais on peut tout à fait n'en prendre que la partie entière.

Alors on pourrait dire qu'en utilisant rand(1, 10) tout marcherait direct, mais ce n'est pas aussi simple !

En effet, si votre PC sait faire des jets aléatoires, c'est juste une impression : en effet, il ne s'amuse pas à lancer un dé dans ses composants il ne connaît que des nombres fixes lui.

Il utilise en fait une table de nombres et prend un nombre au "hasard" dans cet ensemble. Au second jet (c'est-à-dire, la deuxième fois qu'on exécute rand() ), il prendra le nombre suivant, au troisième jet le nombre encore suivant, etc. Le nombre suivant ce n'est pas un +1 du nombre précédent, non c'est juste le prochain nombre bourré de décimales étranges dans sa table de nombres. J'ai simplifié là, c'est un peu plus complexe. La notion de hasard, c'est nous qui lui donnons.

Explications : tout ce qu'on peut faire, c'est lui dire quelle table de nombres utiliser et où commencer dans cette table de nombres. Ce qu'on appelle le générateur de nombres aléatoires (ou plutôt la racine de ce générateur, appelée en anglais random seed), c'est l'indicateur de table de nombres à utiliser. On lui dit : PC, tu utiliseras cet ensemble de nombres là.

Heureusement, il arrive à définir une table de nombres rien qu'à partir d'un autre nombre. L'ordinateur reçoit un nombre comme générateur, et à partir de ce nombre générera sa table de "nombres aléatoires". Du moment que le nombre utilisé est différent à chaque fois, les nombres aléatoires renvoyés seront différents également.

Alors comment savoir quel nombre utiliser comme générateur ? Afin d'utiliser toujours un random seed différent, il est courant d'utiliser le nombre de secondes écoulées depuis 1970, ce qu'on obtient en PHP avec la fonction time(). Comme ça, à chaque fois que vous initialiserez le générateur, ce sera avec un nombre différent.


Donc le problème est le suivant :

- On peut utiliser rand(0, 9) + 1 (en n'en prenant que la partie entière) pour obtenir un nombre aléatoire entre 1 et 10. Par contre, à chaque fois que vous exécuterez cette fonction, vous obtiendrez un nombre différent ; il ne faut donc pas exécuter rand() à chaque fois que vous rencontrez une balise d10 même pour la relire. Sinon, j'écris mon post et j'obtiens 7 par exemple, puis je le consulte, et je vois apparaître le nombre 4 ! Tout ça parce que j'aurai consulté mon post à une seconde différente de celle où je l'aurai écrit...

- Il existe plusieurs solutions pour obtenir le même nombre quand on écrit / consulte le post. C'est à Elann de choisir celle qu'il préfère. Jusque là il semble avoir trouvé un système qui tourne bien. Je lui parlais d'une solution utilisant la fonction rand()...

- Pour obtenir le même nombre quand j'écris ou consulte un même post (ou l'édite), si on exécute de nouveau la fonction rand() en voyant la balise d10, ce serait d'utiliser le même nombre comme générateur que celui utilisé auparavant.

Pour ce faire, quand vous écrivez un post :

- on détermine un nouveau générateur selon la seconde où vous postez (nombre de secondes écoulées depuis 1970, renvoyées par time() )

- on sauvegarde ce générateur pour votre post (en ajoutant cette information dans les tables de la base de données)

- quand vous lisez le post, on utilise ce nombre enregistré comme générateur, et donc rand() renverra le même nombre quelque soit le moment où vous consultez le post.

- quand vous éditez le post, on ne modifie par pour autant le nombre enregistré pour ce post comme générateur. Donc, si vous supprimez votre balise d10 pour en mettre une autre, ça ne changera rien : le premier appel de rand() renverra la même chose que l'appel précédent, donc vous aurez le même résultat

- le seul problème qui reste, c'est que si je mets plusieurs balises d10 dans un même post, j'obtiendrais plusieurs résultats différents. Le PC utilisera en effet la même table aléatoire (même générateur pour tout le post) mais renverra les nombres suivants à chaque fois. Mais là il existe des solutions simples, inutiles de les préciser.


Euh... hmm. Je crois bien ne pas avoir réussi à décrypter le sujet à 100 % pour autant. Désolé j'aurai essayé !

EDIT :

Mais en gros, si Toto écrit un post à l'instant t, on sauvegardera t.

Quand on affichera le post de Toto, on utilisera (t) comme générateur aléatoire. Quand on verra la balise d10, on exécutera rand() une première fois, on obtiendra le nombre X qui sera celui qu'on affichera.

Quand à un autre moment on affichera de nouveau le même post de Toto, on utilisera toujours (t) comme générateur aléatoire, puisque c'est celui qu'on aura sauvegardé. On aura donc le même résultat affiché, puisque rand() renverra la même chose.

En plus, de cette façon, on peut encore plus facilement prendre des balises de types de dés différents (d8, d4, etc.).
DragonSlayer
11/05/2004 13:26
Administrateur

ne serait il pas plus simple de multiplier le nombre par un impair ? ainsi nous aurions le cas de parité inversée, et donc un panel complet !

Caramon Bornhald
11/05/2004 13:31
vivre la décroissance

j avais pas vu ce topic, c est une bonne idee...
On pourraity rajouter des bonus selon les victoires les defaites au combats? (et bien sur on ne peut pas baisser en dessous d un certain stade).
Elann
11/05/2004 14:29
<b>Wolfmaster</b>

C'est à tester évidemment, c'est juste une chose qui me vient à l'esprit ; et d'ailleurs, je suppose déjà Elann que tu utilises un système similaire pour avoir le même résultat à chaque fois, non ?


Mmmm. J'ai juste voulu utiliser 42 comme nombre magique Il suffit que je le change ... mettons 21
DonLope
11/05/2004 14:33
<i>Doyen Ménestrel</i><br><br>

C'est pas en 4 lignes Aekar, mais j'ai pigé ce coup ci.
C'est rigolo votre truc. J'ai pas ces problèmes en Visual Basic.
Elann
11/05/2004 14:37
<b>Wolfmaster</b>

[d10]

C'est changé !

Cela dit Aekar, j'avais pensé effectivement au rand seed avec la date du post, mais je ne sais pas comment c'est gérer et ça m'inquiète un peu pour les performances.
Aekar
11/05/2004 14:48
Ligeaillon travailleur

Sous Visual Basic il doit sans doute gérer cela en interne, mais de la même façon - ce qui peut être bon ou pas.

Tous les langages utilisent la même façon de gérer l'aléatoire depuis le vieil MS-DOS et même le vieillissime Oric Atmos (48Ko de RAM).

Alors attendez, je vais rappeler Barberousse pour qu'on se fasse un nouveau duel et qu'on teste ce nouveau système

[d10]
Aekar
11/05/2004 14:49
Ligeaillon travailleur

*prend un sceau de dés, l'envoie en l'air et regarde ce que cela donne...*

[d10] et [d10]...

Tiens, et si j'essayais... [d6]

EDIT : Bon, pas encore de d6, après tout il n'en est pas besoin
Aekar
11/05/2004 14:52
Ligeaillon travailleur

J'espère que l'on aura pas que des nombres pairs cette fois... [d10]

Pour les performances Elann, avec une réinitialisation à chaque fois... ça devrait aller, puisqu'on utilise pas les d10 sur tous les posts en plus (sauf par ici !). Non, c'est juste que je n'ai jamais testé un tel fonctionnement.
Elann
11/05/2004 15:33
<b>Wolfmaster</b>

ça devrait aller, puisqu'on utilise pas les d10 sur tous les posts en plus (sauf par ici !)


Tu ne les utilises peut être pas, mais ils sont calculés. On pourrait rentrer dans les détails de l'implémentation du forum en privé si tu veux, pour voir si il y a des techniques plus performantes que la mienne pour remplacer les balises spéciales, mais en pratique voila


EDIT : Bon, pas encore de d6, après tout il n'en est pas besoin


Ouarf, une ligne à rajouter Mais bon, on (Méliane) a dit 10, c'est 10.

[d10]

J'espère que l'on aura pas que des nombres pairs cette fois...


Ah moi j'ai fait quoi qu'on m'a dit !

EDIT 2 : J'ai oublié de le préciser, mais tout nombre multiplié par un nombre impair, et auquel on ajoute 1, se trouve lui par contre avec une parité inversée, au lieu de se trouver forcément pair :



EDIT : non non ça marche bien, fais afficher tous les posts pour voir ...
JustBob
11/05/2004 16:00
Joyeux Barbare

JB attrape Galldrenn pour tenter de pulvériser le record mondial de lancer de nain :

[d10]

EDIT : cool ! Impair ! et zut le nain m'a échappé des mains ! M'en fous. Vais tenter un drop de 60 mètres.
Aekar
11/05/2004 16:33
Ligeaillon travailleur

Yeah ! Un nombre impair, des nombres pairs, ça fait la paire, tout est super !

[d10]

Aekar qui part se recoucher



A Elann -> Il me semble que les forums de la Pierre sont très performants. Je n'ai aucune crainte à ce niveau !
Elann
11/05/2004 16:35
<b>Wolfmaster</b>

Ben c'est pas top de mon point de vue, et j'ai des tas d'optimisations possibles à faire.

Elann optimise son bô forum [d10]
Barberousse
11/05/2004 16:43
Téorël Al'Torean
Lié à Lux Sedai

Après mon "duel" avec Aekar, j'aurais quelques suggestions pour les règles régissant les combats:

1. Qu'il y ait une phase attaque et une phase défense pour chaque combattants...
Si l'attanquant fait un nombre plus élevé que celui de son adversaire il lui inflige une perte de points, sinon le défenseur est indemne.

2.On pourrait faire varié les dégâts en faisant la différence entre le dés de l'attaquant et ceux du défenseur. (il faudrait donc donné plus que 5 points de vie à chacun, par exemple 20 )

Cela permettra de faire une différence entre une blessure légère et coup critique...

Les points de vie pourraient grimpé en fonction du niveau dans la comm et de l'anciennetée.

Qu'en pensez vous?
Aller en haut de page
<< Page précédente Page suivante >>
Tous les posts