Diferencia entre revisiones de «Item loot template»
Sin resumen de edición |
Sin resumen de edición |
||
Línea 230: | Línea 230: | ||
*Si la '''probabilidad de grupo''' es mayor que 100, entonces algunas entradas perderán parte de su probabilidad para acomodarse al máximo de 100. Por tanto hay que evitar porcentajes cuya suma exceda del 100. | *Si la '''probabilidad de grupo''' es mayor que 100, entonces algunas entradas perderán parte de su probabilidad para acomodarse al máximo de 100. Por tanto hay que evitar porcentajes cuya suma exceda del 100. | ||
Procesar entradas con "misma probabilidad" lleva mucho menos tiempo que con las de "probabilidad explícita", por tanto se recomienda usar las primeras. | Procesar entradas con "misma probabilidad" lleva mucho menos tiempo que con las de "probabilidad explícita", por tanto se recomienda usar las primeras. | ||
Ahora que las aplicaciones básicas de los grupos están claras: | |||
*Los grupos con probabilidad de grupo de 100% generan '''exactamente un item''' cada vez. Esto se necesita a menudo, por ejemplo para el loot de tiers en bosses. | |||
*Los grupos con probabilidad de grupo < 100 generan uno o '''ningún item''' cada vez manteniendo las probabilidades de cada item inalterables. Este comportamiento es útil para limitar el número máximo de items por loot. | |||
===mincountOrRef=== | |||
Este campo define | |||
*Cuando es positivo: el número mínimo de copias del item que saldrá. | |||
*Cuando es negativo: una referencia a reference_loot_template. | |||
El cero no se usa. | |||
El significado de los números positivos está claro. El negativo puede resultar algo lioso. | |||
*Un mismo grupo puede ser utilizado para varios tipos de loots. Esto ayuda a reducir el tamaño de la Base de Datos. Para más detalles ver Loot de referencia. | |||
Template de referencia | |||
mincountOrRef < 0, group = 0 | |||
El loot de referencia pide al emulador que busque en la tabla reference_loot_template otro loot (con un entry igual a "-mincountOrRef") para incluir el loot que tengo ahí en la tabla de loot actual. Simple. | |||
El valor del campo maxcount en este caso sirve para definir la cantidad de veces que se consultará esa referencia. | |||
Ejemplo, loot de tiers: Un boss tiene que tirar 3 tiers siempre, aunque sean repetidos. Para ello añadimos una referencia al campo de reference_loot_template donde se encuentran los tres tiers, y establecemos maxcount = 3. | |||
Cuidado con las autoreferencias y bucles infinitos, porque algo como por ejemplo: | |||
<code>INSERT INTO `creature_loot_template` (`entry`,`item`,`mincountOrRef`) VALUES | |||
(21215,0,-21215); </code> | |||
hará que el emulador se caiga por sobrecarga. |
Revisión actual - 23:39 18 may 2025
Las tablas `*_loot_template`
Estas tablas sirven para organizar todo el sistema de loots de items. En total hay 11 tablas:
creature_loot_template: Loot de criatura.
disenchant_loot_template: Loot de desencantar.
fishing_loot_template: Loot de pesca.
gameobject_loot_template: Loot de entidad.
item_loot_template: Loot de item.
pickpocketing_loot_template: Loot de criatura cuando es robada.
prospecting_loot_template: Loot de prospectar.
skinning_loot_template: Loot de criatura cuando es desollada/minada/recolectada.
quest_mail_loot_template: Loot de correo de misión.
reference_loot_template: Loot de referencia.
milling_loot_template: Loot de moler.
Field | Type | Null | Key | Default | Extra |
---|---|---|---|---|---|
entry | mediumint unsigned | NO | PRI | 0 | |
item | mediumint unsigned | NO | PRI | 0 | |
ChanceOrQuestChance | float | NO | 100 | ||
lootmode | smallint | NO | 1 | ||
groupid | tiyint | NO | 0 | ||
mincountOrRef | mediumint | NO | 1 | ||
maxcount | tinyint unsigned | NO | 1 |
Relaciones
Las 11 tablas tienen diferentes relaciones con otras tablas de la base de datos.
Tabla de loot | Campo | Relación | Tabla relacionada | Campo | Comentario |
---|---|---|---|---|---|
fishing_loot_template | Sin relación | Sin relación | Sin relación | Sin relación | El entry está enlazado con la ID del área de pesca. |
creature_loot_template | entry | varios ← varios | creature_template | lootid | |
gameobject_loot_template | entry | varios ← varios | gameobject_template | data1 | Sólo las entidades de tipo 3 (GAMEOBJECT_TYPE_CHEST) o 25 (GAMEOBJECT_TYPE_FISHINGHOLE) usan data1 como ID de loot. Los demás usan data1 para otras cosas. |
item_loot_template | entry | varios ← uno | item_template | entry | |
disenchant_loot_template | entry | varios ← varios | item_template | DisenchantID | |
prospecting_loot_template | entry | varios ← uno | item_template | entry | |
milling_loot_template | entry | varios ← uno | item_template | entry | |
pickpocketing_loot_template | entry | varios ← varios | creature_template | pickpocketloot | |
skinning_loot_template | entry | varios ← varios | creature_template | skinloot | Aparte de los items desollados, también puede almacenar items minables/recolectados de criaturas. |
quest_mail_loot_template | entry | quest_template | RewardMailTemplateId | ||
reference_loot_template | entry | varios ← varios | *_loot_template | mincountOrRef | En caso de mincountOrRef negativo |
Descripción de los campos
entry
El identificador del loot. Las filas con una misma ID definen un mismo grupo de loot.
Lo normal es usar la misma ID que la fuente (entry de la criatura, entidad, etc.), pero puede usarse cualquiera, ya que ese valor se le asigna en su tabla de template (ver "Campo" en la tabla de arriba).
item
ID del item que estará en el loot.
NOTA: En el caso de entries de referencia, como veremos más adelante, este valor no sirve para nada, y lo normal es poner el mismo número (positivo) que la entrada de la referencia, por tener un orden.
ChanceOrQuestChance
El significado de este campo depende de lo que se ponga aquí y en mincountOrRef:
Entrada simple
ChanceOrQuestChance > 0, mincountOrRef > 0
Con ambos valores positivos, es el porcentaje que con el caerá el item, siendo 100 lo máximo.
Despojo de misión
ChanceOrQuestChance < 0, mincountOrRef > 0
Como en el paso de la entrada simple. Pero colocando el porcentaje en negativo indicamos que el item sólo debe aparecer si el jugador tiene que tener activa la misión correspondiente.
Loot de referencia
mincountOrRef < 0
Si ponemos mincountOrRef negativo estamos indicando que no sea un item lo que caiga, sino un grupo de items de otro loot (de la tabla reference_loot_template). Teniendo esto claro, queda aclarar qué significado tendrá ChanceOrQuestChance en este caso.
ChanceOrQuestChance = 0: Sólo válido si se agrupan varias entradas en un mismo grupo (ver groupid). En caso de que estén agrupadas, elegirá una (o más, dependiendo de lo que se ponga en maxcount) con igual porcentaje de posibilidades de entre todas las entradas del mismo grupo.
ChanceOrQuestChance > 0: Entran en juego a la hora de generar loots agrupados. Ver más adelante.
ChanceOrQuestChance < 0: No tiene sentido. No se usa.
lootmode
Un parámetro especial para separar loots condicionales. No nos interesa, y siempre usaremos 1.
groupid
Un número que agrupa varias entradas del loot, y sirve para dar a elegir distintas posibilidades dentro del mismo loot.
Distinguiremos entre dos tipos de grupos: los de probabilidad explícita (ChanceOrQuestChance dinstinto de 0) y los de igual probabilidad (ChanceOrQuestChance = 0) entries. Como se ha explicado, el grupo igual probabilidad selecciona sus items con el mismo porcentaje.
Por supuesto un grupo consistirá en
- Sólo entradas con probabilidad explícita
- Sólo entradas con igual probabilidad
- Entradas de ambos tipos
La forma más fácil de entender cómo funcionan los grupos es ver el proceso que sigue el emulador:
Antes de hacer nada:
- Los grupos están formados - todas las entradas agrupadas con los mismos valores de groupid y entry se separan en dos tipos - uno para los de probabilidades explícitas y otro para los de misma probabilidad.
Durante la generación del loot:
- El emulador tira los dados para las entradas de probabilidad explícita (si hay):
- Sale un número aleatorio N de 0 a 100.
- La probabilidad de que salga cada item se comprueba por cada entrada de "probabilidad explícita":
- Si N es menor que el valor absoluto de ChanceOrQuestChance de la entrada, entonces "gana" el item y se incluye en el loot. Se detiene el procesamiento de grupos, el resto de grupos se detienen.
- Si la entrada "pierde" el item, pierde su probabilidad de aparecer en el loot. A N se le resta el valor del porcentaje que tenía la entrada "perdida" y sigue comprobándose el resto de grupos.
- Si ninguna de las entradas de "probabilidad explícita" gana, se para a las de "misma probabilidad" (si hay):
- Se selecciona una entrada aleatoria de las de "misma probabilidad" y se incluye su item en el loot.
Ahora usaremos el término probabilidad de grupo como la suma de todos los valores de ChanceOrQuestChance de un mismo grupo. Si entiendes el proceso, entenderás los resultados:
No caerá más de un item de un mismo grupo.
- Si la probabilidad de grupo es al menos 100, entonces caerá un item seguro.
- Si la probabilidad de grupo no pasa de 100, entonces cada item definido en el grupo tiene esa probabilidad de aparecer.
- Si la probabilidad de grupo es mayor que 100, entonces algunas entradas perderán parte de su probabilidad para acomodarse al máximo de 100. Por tanto hay que evitar porcentajes cuya suma exceda del 100.
Procesar entradas con "misma probabilidad" lleva mucho menos tiempo que con las de "probabilidad explícita", por tanto se recomienda usar las primeras.
Ahora que las aplicaciones básicas de los grupos están claras:
- Los grupos con probabilidad de grupo de 100% generan exactamente un item cada vez. Esto se necesita a menudo, por ejemplo para el loot de tiers en bosses.
- Los grupos con probabilidad de grupo < 100 generan uno o ningún item cada vez manteniendo las probabilidades de cada item inalterables. Este comportamiento es útil para limitar el número máximo de items por loot.
mincountOrRef
Este campo define
- Cuando es positivo: el número mínimo de copias del item que saldrá.
- Cuando es negativo: una referencia a reference_loot_template.
El cero no se usa.
El significado de los números positivos está claro. El negativo puede resultar algo lioso.
- Un mismo grupo puede ser utilizado para varios tipos de loots. Esto ayuda a reducir el tamaño de la Base de Datos. Para más detalles ver Loot de referencia.
Template de referencia mincountOrRef < 0, group = 0
El loot de referencia pide al emulador que busque en la tabla reference_loot_template otro loot (con un entry igual a "-mincountOrRef") para incluir el loot que tengo ahí en la tabla de loot actual. Simple.
El valor del campo maxcount en este caso sirve para definir la cantidad de veces que se consultará esa referencia. Ejemplo, loot de tiers: Un boss tiene que tirar 3 tiers siempre, aunque sean repetidos. Para ello añadimos una referencia al campo de reference_loot_template donde se encuentran los tres tiers, y establecemos maxcount = 3.
Cuidado con las autoreferencias y bucles infinitos, porque algo como por ejemplo:
INSERT INTO `creature_loot_template` (`entry`,`item`,`mincountOrRef`) VALUES
(21215,0,-21215);
hará que el emulador se caiga por sobrecarga.