SuperCD / Raminghi-Suicide-Kings

A Spend-All DKP Manager Module for Joomla, with PHP Raider import capabilities
1 stars 0 forks source link

Calcolo dei punteggi #2

Open SuperCD opened 13 years ago

SuperCD commented 13 years ago

Una delle cose che mancano per ora è il calcolo dei punteggi per ogni giocatore, e direi che è una cosa importante.

Per ora ho pensato a due opzioni 1) Tenere il punteggio in DB e aggiornarlo dopo ogni evento fisicamente 2) Calcolare il punteggio con una query ogni volta che serve (o fare una vista che faccia questo, se si riesce)

Entrambe le vie son percorribili, e io ritengo che la prima sia più facile, ma meno corretta (a livello di teoria dei DB relazionali).

Ad ogni modo il punteggio va calcolato, secondo me, con questa logica.

Si parte da 0 ad ogni suicide (oppure si parte da N, valore manualmente inserito, se inserito in data successiva all'ultimo suicide), e poi si sommano i punti per i raid ed eventuali aggiunte/sottrazioni manuali (magari dovute ad errori).

Come è meglio procedere?

eymerich commented 13 years ago

Si, più o meno mi sembra corretto, io farei così.

  1. Terrei i punteggi in un DB ad hoc per il componente
  2. I punteggi sono manualmente aggiornabili sempre Quando dobbiamo aggiornare i punteggi in maniera più o meno automatica, diciamo importare i punteggi dei raid, facciamo:
  3. Ci memorizzamo/recuperiamo nel DB l'ultimo (ID?) di raid importato
  4. Visualizziamo una lista di raid importabili (con ID > presumo)
  5. Riassunto dell'import: ad esempio la lista di giocatori con i delta punteggi per ogni raid che si vuol importare
  6. Permettere la modifica addizionale con un altro punteggio che può essere + o -
  7. Mostrare quindi gli eventuali totali del merge
  8. Infine mergiare i dati
  9. Salvare / flaggare gli ID dei raid testè importati come importati
SuperCD commented 13 years ago

Te tabelle DB del componente ci sono già. è li che importo i raid o i giocatori... tenere i punteggi da qualche parte non sarebbe un problema.

La cosa dell'id > dell'ultimo non mi piace molto, visto che ti impedisce ad esempio di importare più raid partendo dall'ultimo e andando all'indietro.

Per ora decidere cos'è da importare è fatto caricando la lista degli id degli importati, e la lista dei raid, e facendo una differenza tra le liste.

tra i raid importati ci sono anche quelli ignorati (perché certi eventi non danno punti) Non so però se questo metodo è sicuro, visto che se le liste crescono molto potrebbe essere inadeguato...

Il problema principale non è quando aggiornare i punteggi, ma come conservarli...

Cmq credo anch'io che alla fine la via più semplice sia tenerle la somma salvata in DB e aggiornarla ad ogni modifica...

Conseguentemente si procederà così!

eymerich commented 13 years ago

Il motivo per il quale la somma da memorizzare mi pare buono è perchè comunque sia il punteggio è manualmente modificabile, se quindi dovessi recuperare le somme con i riferimenti ai raid fatti mi servirebbe anche una tabella (se si vuole lo storico) oppure solo un campo per le modifiche manuali e non sarebbe neanche tanto lavoro solo che così siamo direttamente legati al DB del raidplanner qualsiasi cosa succeda, nell'altro modo siamo un po più slegati, abbiamo le nostre copie in locale sottoforma di totali aggregati o no con i modificatori manuali, gli eventuali modificatori manuali (+10 ... -2 punti etcc) li possiamo memorizzare in un campo addizionale tipo raid_pts and manual_pts con questi due poi facciamo l'aggregato.

Invece come pensi di memorizzare per ogni player gli ID dei raid che concorrono alla formazione del suo totale di punti? Una tabella di relazione? id_player <-> id_raid? oppure serializziamo l'array PHP degli id dei raid dentro un blob del record del player? :|

SuperCD commented 13 years ago

In questo momento tutti i dati vengono solo letti dalle tabelle del planner e poi scritti in tabelle interne, dove vengono conservati. La tabella planner viene contattata solo per l'import di raid e giocatori, nulla più.

Inoltre c'è una tabella già presente che collega raid importati a player che partecipano, si chiama sk_attendance, che inoltre contiene info su come ogni giocatore era iscritto al raid (se ha partecipato, o era solo disponibile, o era indisponibile).

In realtà, per quanto messe in modo disparato, ci sono già...

Al momento è possibile importare una lista di giocatori dal planner al db locale, importare o ignorare i raid dal planner, e modificare i raid importati per (ad esempio) dire che un certo giocatore ha giocato e un altro no.

Se si aggiunge il calcolo dei punti di tutto questo e un paio di cosette extra siamo già pronti per andare live...

Il 08/05/2011 12:57, eymerich ha scritto:

Il motivo per il quale la somma da memorizzare mi pare buono è perchè comunque sia il punteggio è manualmente modificabile, se quindi dovessi recuperare le somme con i riferimenti ai raid fatti mi servirebbe anche una tabella (se si vuole lo storico) oppure solo un campo per le modifiche manuali e non sarebbe neanche tanto lavoro solo che così siamo direttamente legati al DB del raidplanner qualsiasi cosa succeda, nell'altro modo siamo un po più slegati, abbiamo le nostre copie in locale sottoforma di totali aggregati o no con i modificatori manuali, gli eventuali modificatori manuali (+10 ... -2 punti etcc) li possiamo memorizzare in un campo addizionale tipo raid_pts and manual_pts con questi due poi facciamo l'aggregato.

Invece come pensi di memorizzare per ogni player gli ID dei raid che concorrono alla formazione del suo totale di punti? Una tabella di relazione? id_player<-> id_raid? oppure serializziamo l'array PHP degli id dei raid dentro un blob del record del player? :|