Buongiorno popolo di Inforge,
Volevo chiedere a qualcuno che si intende bene di exp table e roba simile come mai settato un certo valore nella colonna exp dei mob che superi mi sembra i 15/16kk di esperienza questa venga, una volta uccisi i mob che ne danno di più, tolta e azzerata al pg... questa cosa non mi quadra molto! C'è effettivamente un limite di exp da dedicare ai mob o di quanta il pg ne prenda in una volta sola?
Grazie mille in anticipo!
Si chiama Numerical Overflow, sostanzialmente quello che succede è che se si prova ad assegnare ad una variabile un numero > del suo limit range il conteggio riparte dal suo minimo valore.
esempio:
BYTE ->limit range: 0, 255
Proviamo con
BYTE overflow = 256;
scopriremo che overflow vale 0.
Se vuoi sapere la ragione nello specifico, questo avviene a causa del numero di bits che occupa la variabile in memoria.
in binario 255 si rappresenta come:
11111111
che sono 8bits, tutti di valore 1
mentre 256 si rappresenta come:
1[00000000]
9bits, di cui 8 sono 0 e il primo vale 1.
quello che succede è che BYTE che occupa solo 8 bits in memoria non può rappresentare il numero 256 che è rappresentabile con non meno di 9 bits.
quindi vengono assegnati a BYTE i primi 8bits (in binario i numeri sarebbero da leggere da destra a sinistra) che altro non sono che 8 zeri, che rappresentano appunto il numero 0.
questo sta succedendo nel tuo caso, con l'exptable.
Seppure tu assegni ad un mob un dato valore di exp nella tabella, l'exp che il mob effettivamente da ai player non è costante , viene calcolata tramite un algoritmo.
Sicuramente questo algoritmo tira fuori numeri che non sono rappresentabili da un int (che è il type che ha l'exp nella funzione CHARACTER:: DistributeExp) e quindi avviene il numerical overflow, che nel caso di numeri signed (dove il primo bit a sinistra è di segno) un numero che supera il suo limit range riparte dal minimo e cioè un numero negativo