Domanda [DOPO QUESTA SMETTO] PROBLEMA EXP TABLE

Stato
Discussione chiusa ad ulteriori risposte.

O.Evil.O

Utente Electrum
4 Marzo 2014
185
37
11
122
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!
 
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
 
Ah quindi in sostanza sto assegnando un numero di exp tale da non essere calcolato dal limit range, quindi in sostanza mi sembra di capire che se non ce un modo per far si che il limit sia aumentato, devo attenermi al numero massimo di exp che il mob può dare o far si che l algoritmo riconosca nella sua sequenza l index apportato alla colonna dell exp, ma presumo sia necessario sbloccare per cosi dire il limit range! E possibile farlo in maniera da assegnare più exp ai mob o rimango con i miei 15/16 mln di exp assegnati?
Ringrazio @_Othon_ e soprattutto Ikarus_ per l esaustiva risposta! :)
 
  • Mi piace
Reazioni: __Othon__
La fai più grande di quel che è ahah le soluzioni sono due:
1) lasci l exp con valore maswimo
2) se vuoi aumentare cambi il tipo di variabile nei src
 
Ah quindi in sostanza sto assegnando un numero di exp tale da non essere calcolato dal limit range, quindi in sostanza mi sembra di capire che se non ce un modo per far si che il limit sia aumentato, devo attenermi al numero massimo di exp che il mob può dare o far si che l algoritmo riconosca nella sua sequenza l index apportato alla colonna dell exp, ma presumo sia necessario sbloccare per cosi dire il limit range! E possibile farlo in maniera da assegnare più exp ai mob o rimango con i miei 15/16 mln di exp assegnati?
Ringrazio @_Othon_ e soprattutto Ikarus_ per l esaustiva risposta! :)
Devi semplicemente modificare dalle sorgenti il tipo di variabile da BYTE ad unsigned long long.
 
grazie a tutti quanti dei consigli ma non ho in mano sorgenti di alcun genere percio direi che continuero a settare i livelli di exp in modo da stare sempre raso al limite ;)
 
Stato
Discussione chiusa ad ulteriori risposte.