DraftBot-A-Discord-Adventure / DraftBot

A Discord adventure bot that speaks english and french
MIT License
229 stars 61 forks source link

Rework campagne + ajout mission PVE #2119

Closed BastLast closed 1 year ago

BastLast commented 1 year ago

à faire après #2118

Feiryn commented 1 year ago

Pour la campagne je pense que ce serait bien d'ajouter une sauvegarde des missions déjà faites ou non car :

Je propose d'enregistrer un blob binaire avec chaque bit qui correspond à une mission de campagne faite, par exemple : Un joueur qui a en sauvegarde 0b1110111111111101, on sait qu'il lui manque la mission 4 et 15, on peut donc les lui faire faire

BastLast commented 1 year ago

J'aime bien go convertir ce commentaire en issue

Feiryn commented 1 year ago

Cette issue sert à ça en soit

Feiryn commented 1 year ago

Ah ouais non en fait ça marche pas car si on ajoute une mission au milieu faut tout décaler. Faut trouver un truc mieux

BastLast commented 1 year ago

Ah ouais non en fait ça marche pas car si on ajoute une mission au milieu faut tout décaler. Faut trouver un truc mieux

Quel est le soucis de tout décaler ? Ca se fait en une migration non ?

Feiryn commented 1 year ago

C'est chiant à faire et c'est le meilleur moyen de se planter

BastLast commented 1 year ago

On fait une fonction dans utils qu'on test avec des test unitaires et qu'on a juste à appeler dans les migrations

BastLast commented 1 year ago

L'autre option c'est une table externe et une tablende jointure

romain22222 commented 1 year ago

proposition : on donne un id aux missions (id string, pas int) qui serait unique à chaque mission de campagne, comme ca suffit de stocker dans le joueur à chaque nouvelle maj les nouvelles missions. La position de mission resterait, donnant la dernière mission à effectuer

BastLast commented 1 year ago

Nanpas dans le joeur pitié ca va faire une string gigantesque et indéchiffrable.

Tu fais une table missions campagne

Et une table "mission campagne done" Qui contient une colonne "id player" et une "mission id"

Et tu peux faire un select qui te donne toutes les id de missions réussies

Feiryn commented 1 year ago

La table va grandir super vite ça va être lourd

BastLast commented 1 year ago

La table va grandir super vite ça va être lourd

La table en question c'est 2 integer par ligne ca va pas prendre plus de place que ton blob

Feiryn commented 1 year ago

1 int = 4 octets

Pour un joueur ayant fait 50 missions : 50 2 4 = 400 octets

Si on ajoute une colonne dans la table MissionInfo en stockant un blob (8 missions par octets) : 50 / 8 = 7 octets pour stocker

Donc pour cet exemple on est sur un ratio de 5714%

Pour 100 missions ça fait un ratio de 6154%

Feiryn commented 1 year ago

Ah et j'ai pas compté le temps CPU pour faire la jointure

Feiryn commented 1 year ago

image

BastLast commented 1 year ago

Alors go faire mon idée avec la fonction testé unitairement

BastLast commented 1 year ago

Memz si je pense qu'on peut tanker 800 octet x 20k joueurs

romain22222 commented 1 year ago

SALE POLUEUR

BastLast commented 1 year ago

SALE POLUEUR

So tu as mieux go proposer

BastLast commented 1 year ago

cette story a été faire à travers la pr #2203