Diferencia entre revisiones de «Item loot template»

De TimelessWoW
Ir a la navegación Ir a la búsqueda
Sin resumen de edición
Sin resumen de edición
 
(No se muestran 2 ediciones intermedias del mismo usuario)
Línea 200: Línea 200:
===groupid===
===groupid===
Un número que agrupa varias entradas del loot, y sirve para dar a elegir distintas posibilidades dentro del mismo loot.
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:
<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.