Suppongo che questa sia una domanda sull'equilibrio di gioco e non una domanda di codifica, e ci sono molti modi per gestirlo. Dal tuo algoritmo esistente, sospetto che tu lo stia rendendo più complicato di quanto non debba essere (tre attributi E un numero casuale rendono un sistema estremamente fangoso dal punto di vista del giocatore). Il mio primo istinto è semplificare!
Favorire attributi che fanno più cose, piuttosto che risultati determinati da più attributi. DEX funziona perfettamente come il principale determinante della probabilità di colpire; l'aggiunta di tutto il resto serve solo a rendere più difficile l'equilibrio. Pensala in questo modo: il danno atteso da un giocatore per ogni colpo è la sua percentuale di colpi moltiplicata per il danno medio quando colpisce. Come pensi di calcolare una% "prevista" o "tipica" per colpire con così tante variabili?
Vedo un altro problema, ovvero che la tua formula non si ridimensiona e questo è probabilmente ciò che stai riscontrando. Supponendo che DEX, LUCK e SPEED tendano ad aumentare nel corso del gioco, anche le differenze tra giocatore e mostro in quelle statistiche tenderanno ad aumentare. Ad esempio, se il DEX di un giocatore all'inizio del gioco è compreso tra 4 e 6 e lo sono anche i mostri, questo è un modificatore del 10-20% per colpire. Se l'intervallo è più simile a 10-20 nelle fasi successive del gioco, è un modificatore fino al 100%.
Un modo per risolvere questo è quello di mantenere fisse le statistiche. Le gamme di giocatori e mostri sono le stesse durante tutto il gioco e ottenere qualcosa come +1 DEX è un affare enorme, estremamente raro e trattato come tale (se esiste del tutto). Quindi la tua formula funzionerà bene per l'intero gioco e vedrai un giocatore con quasi la stessa possibilità di colpire dappertutto.
Un altro modo è quello di cambiare quel "10" codificato in scala con il livello, quindi forse è "10 + livello mostro" o "10 + livello sotterraneo" o qualcosa del genere, che provoca un leggero aumento della difficoltà man mano che il gioco avanza a meno che il giocatore non salga di livello le loro statistiche di conseguenza.
Un terzo modo, come altri hanno già detto, è quello di impostare i limiti massimi sulla percentuale più alta e più bassa accettabile per colpire, e semplicemente dire "se il valore calcolato è inferiore a X, utilizzare invece X".
Per completezza, farò notare che non esiste una legge assoluta che DEVE includere in primo luogo un tiro per colpire. Agire in un gioco inefficace non è particolarmente divertente e non aggiunge esperienza all'esperienza se non in rari casi. Un'alternativa è quella di lasciare che i giocatori colpiscano SEMPRE, e semplicemente pasticciare con il raggio di danno in modo che a volte facciano molti meno danni di altri. Ricorda che i sistemi complessi sono più divertenti per il progettista che per il giocatore.