Ultima modifica:
Il titolo penso dica già tutto.
Il System permette di settare il drop dei mob dal database invece di usare mob_drop_item.txt, common_drop_item.txt, drop_item_group.txt che se sbagli di uno spazio ti legge solo mezzo file e non ti da nemmeno una traccia di errore per farti sapere che non è stato settato il drop come intendevi fare tu (ymir fail).
WARNING : Il System non disattiva i file txt, potete usare quindi mezzo e mezzo, o solo txt o solo tabelle.
Per tutti coloro i quali hanno ancora dubbi sull'utilità di avere un database invece dei txt, vi voglio far notare qualche vantaggio:
- Possibilità di eseguire queries per vedere cosa un mob droppa/gruppo droppa chiaramente e in pochi instanti.
- Possibilità di sfruttare le tabelle da un sito ad esempio per visualizzare (ad esempio in una wiki) cosa un mob droppa o da che mob puoi droppare un item.
- Possibilità di eseguire il backup del drop insieme ai backup del database.
- Oltre a vantaggi, una cosa da considerare è che non ha svantaggi.
Ho inserito per comodità il comando "/reload d" che vi permette di ricaricare le tabelle drop senza riavviare il gioco.
Le tabelle sono organizzate cosi:
-drop_common : semplice assegnazione di drop al rank del mob con startlevel e endlevel di drop dell'item (come il common_drop.txt)
-drop_default : semplice assegnazione di drop al vnum del mob con drop_pct (possibilità di drop) e item count.
-drop_mob_group_kill : in questa tabella vanno specificati i "group" di item droppabili da un mob (la struttura è "group_id(key) | mob_vnum | kill_per_drop")
come succede per il mob_drop_item.txt la chance di drop è calcolata in modo inversamente proporzionale al kill_per_drop (aumentare questo numero riduce il drop)
e in caso di drop con successo verrà estratto solo 1 item dal gruppo di item (la % di estrazione di un item rispetto a un altro è spiegata in seguito)
-drop_mob_item_kill : in questa tabella vanno specificati gli item da aggiungere ai group creati nella precedente tabella (la struttura è `group_id`, `item_vnum` , `count`, `part_prob`)
il group id dovrà essere stato dichiarato nella precedente tabella e part_prob invece è un numero che incide sull'estrazioni dell item dal group in caso di drop con successo.
supponiamo di avere due item in questa tabella con lo stesso group id (appartenenti allo stesso gruppo quindi) e con part_prob rispettivamente 100 e 200
l'item con part prob 100 ha 1/3 di chance di essere estratto, mentre l'altro ha 2/3 di chance.
-drop_mob_group_level: in questa tabella vanno specificati i "group" di item droppabili da un mob se il player appartiene a un certo range di livello (struttura : `group_id` , `mob_vnum` , `level_start` , `level_end`)
se il player killerà un mob avete un group in questa tabella e il range sarà rispettato dal livello del player allora inizierà un sorteggio per ogni item del group ( ogni item ha la sua chance di drop per tanto, non è estratto solo uno dal group come per le kill)
-drop_mob_item_level: in questa tabella vanno specificati i gli item che appartengono ai group specificati nella precedente tabella (struttura : `group_id`, `item_vnum` , `count`, `prob` FROM `drop_mob_item_level`)
ogni item ha quindi qui specificato il suo "prob" che a differenza delle tabelle kill, verranno checkati per ogni item del group (quindi questo gruppo può droppare più item per kill)
Per chi ha già un mob_drop_item.txt settato e un common_drop_item.txt settato ho in scrittura un tool che li converte in tabelle (si può anche scegliere di lasciarli in txt anyway)
Nei prossimi giorni lo aggiungerò alla release aggiornando il post.
Ultima cosa da sapere è che nelle tabelle quando si parla di prob si intende chance 1/1000. (la chance di drop viene però aumentata o diminuita in base alla differenza di livello tra player e mob nell'algoritmo di drop di ymir quindi non è fissa come voi la inserite in tabella)
questa scala si può cambiare (passando ad esempio a una scala di 1/10000 o 1/100) dal lenght.h cambiando il valore di DROP_SCALE_TABLE
Di default quindi usando 1000 in tabella si ha la chance base (poi variata nell algoritmo come precedentemente detto) di 100% di drop
SVILUPPI FUTURI:
- Ho in mente di fare un drop.bin da mettere in root, ricavato dalle tabelle che potrà essere utile a fare ad esempio una wiki sul drop in game (senza pesare sul server visto che cosi le info saranno front-end)
- Ho in mente di fare un target drop info basato su queste tabelle, che userà il file drop.bin di cui sopra per indicare nel target del mob i suoi drop.
- Ho in mente di fare un tool che facilità l'aggiunta di group di item nelle tabelle kill/level
Il System è stato testato ma in caso di bug vi prego di segnalarle sotto la discussione e non in privato, cosi che tutti gli utenti possano venire a conoscenza del bug.
Ecco qui il LINK alla repository su gitlab.
MySkype : live:ikarus.developer
update:
Added a small part to install only if you are using __SEND_TARGET_INFO__ to show the drop in the target board
Il System permette di settare il drop dei mob dal database invece di usare mob_drop_item.txt, common_drop_item.txt, drop_item_group.txt che se sbagli di uno spazio ti legge solo mezzo file e non ti da nemmeno una traccia di errore per farti sapere che non è stato settato il drop come intendevi fare tu (ymir fail).
WARNING : Il System non disattiva i file txt, potete usare quindi mezzo e mezzo, o solo txt o solo tabelle.
Per tutti coloro i quali hanno ancora dubbi sull'utilità di avere un database invece dei txt, vi voglio far notare qualche vantaggio:
- Possibilità di eseguire queries per vedere cosa un mob droppa/gruppo droppa chiaramente e in pochi instanti.
- Possibilità di sfruttare le tabelle da un sito ad esempio per visualizzare (ad esempio in una wiki) cosa un mob droppa o da che mob puoi droppare un item.
- Possibilità di eseguire il backup del drop insieme ai backup del database.
- Oltre a vantaggi, una cosa da considerare è che non ha svantaggi.
Ho inserito per comodità il comando "/reload d" che vi permette di ricaricare le tabelle drop senza riavviare il gioco.
Le tabelle sono organizzate cosi:
-drop_common : semplice assegnazione di drop al rank del mob con startlevel e endlevel di drop dell'item (come il common_drop.txt)
-drop_default : semplice assegnazione di drop al vnum del mob con drop_pct (possibilità di drop) e item count.
-drop_mob_group_kill : in questa tabella vanno specificati i "group" di item droppabili da un mob (la struttura è "group_id(key) | mob_vnum | kill_per_drop")
come succede per il mob_drop_item.txt la chance di drop è calcolata in modo inversamente proporzionale al kill_per_drop (aumentare questo numero riduce il drop)
e in caso di drop con successo verrà estratto solo 1 item dal gruppo di item (la % di estrazione di un item rispetto a un altro è spiegata in seguito)
-drop_mob_item_kill : in questa tabella vanno specificati gli item da aggiungere ai group creati nella precedente tabella (la struttura è `group_id`, `item_vnum` , `count`, `part_prob`)
il group id dovrà essere stato dichiarato nella precedente tabella e part_prob invece è un numero che incide sull'estrazioni dell item dal group in caso di drop con successo.
supponiamo di avere due item in questa tabella con lo stesso group id (appartenenti allo stesso gruppo quindi) e con part_prob rispettivamente 100 e 200
l'item con part prob 100 ha 1/3 di chance di essere estratto, mentre l'altro ha 2/3 di chance.
-drop_mob_group_level: in questa tabella vanno specificati i "group" di item droppabili da un mob se il player appartiene a un certo range di livello (struttura : `group_id` , `mob_vnum` , `level_start` , `level_end`)
se il player killerà un mob avete un group in questa tabella e il range sarà rispettato dal livello del player allora inizierà un sorteggio per ogni item del group ( ogni item ha la sua chance di drop per tanto, non è estratto solo uno dal group come per le kill)
-drop_mob_item_level: in questa tabella vanno specificati i gli item che appartengono ai group specificati nella precedente tabella (struttura : `group_id`, `item_vnum` , `count`, `prob` FROM `drop_mob_item_level`)
ogni item ha quindi qui specificato il suo "prob" che a differenza delle tabelle kill, verranno checkati per ogni item del group (quindi questo gruppo può droppare più item per kill)
Per chi ha già un mob_drop_item.txt settato e un common_drop_item.txt settato ho in scrittura un tool che li converte in tabelle (si può anche scegliere di lasciarli in txt anyway)
Nei prossimi giorni lo aggiungerò alla release aggiornando il post.
Ultima cosa da sapere è che nelle tabelle quando si parla di prob si intende chance 1/1000. (la chance di drop viene però aumentata o diminuita in base alla differenza di livello tra player e mob nell'algoritmo di drop di ymir quindi non è fissa come voi la inserite in tabella)
questa scala si può cambiare (passando ad esempio a una scala di 1/10000 o 1/100) dal lenght.h cambiando il valore di DROP_SCALE_TABLE
Di default quindi usando 1000 in tabella si ha la chance base (poi variata nell algoritmo come precedentemente detto) di 100% di drop
SVILUPPI FUTURI:
- Ho in mente di fare un drop.bin da mettere in root, ricavato dalle tabelle che potrà essere utile a fare ad esempio una wiki sul drop in game (senza pesare sul server visto che cosi le info saranno front-end)
- Ho in mente di fare un target drop info basato su queste tabelle, che userà il file drop.bin di cui sopra per indicare nel target del mob i suoi drop.
- Ho in mente di fare un tool che facilità l'aggiunta di group di item nelle tabelle kill/level
Il System è stato testato ma in caso di bug vi prego di segnalarle sotto la discussione e non in privato, cosi che tutti gli utenti possano venire a conoscenza del bug.
Ecco qui il LINK alla repository su gitlab.
MySkype : live:ikarus.developer
update:
Added a small part to install only if you are using __SEND_TARGET_INFO__ to show the drop in the target board