Files
BlaMacfly fa6d14c4a0 Butin WoD/Legion : brancher les boss sur le Guide d aventure
Signalement Discord : les instances haut niveau ne lachent aucun equipement.

Sur ce core, le butin d equipement des boss modernes ne vient pas de
creature_loot_template mais de Unit::Kill, qui lit creature_template_journal
(entree -> JournalEncounterID) puis tire 2 objets dans JournalEncounterItem.db2
avec le bon masque de difficulte et le bon contexte d objet. Cette table ne
contenait que 45 lignes, toutes Burning Crusade : aucun boss de Draenor ni de
Legion, et ces boss ont lootid = 0. Ils ne lachaient donc rigoureusement rien.

44 correspondances ajoutees, etablies depuis les DB2 officiels du client
(JournalInstance -> JournalEncounter -> JournalEncounterCreature ->
CreatureDisplayInfoID -> creature_template.modelid), une seule creature par
rencontre et uniquement celles sans table de butin, pour ne rien doubler.
Couvre entre autres la Fonderie des Rochenoire (10 boss), les Docks de fer,
Haut-perchoir, le Pic Rochenoire, la Floraison eternelle, le Siege du
Triumvirat (4 boss), le Tombeau de Sargeras (6), Gul dan et Elisande.

Les scripts de generation et de verification sont dans chantiers/butin-journal.
2026-09-10 19:50:19 +02:00

26 lines
1.2 KiB
Python

import sys, subprocess, collections
sys.path.insert(0, '/home/ubuntu')
from db2read import DB2
D = '/home/ubuntu/server/data/dbc/enUS/'
ji = DB2(D+'JournalInstance.db2', "ssiiiihhbbi", [1]*11, 10, -1)
je = DB2(D+'JournalEncounter.db2', "ssfhhhhbbii", [1,1,2,1,1,1,1,1,1,1,1], -1, -1)
jei = DB2(D+'JournalEncounterItem.db2', "ihbbbi", [1]*6, 5, 1)
instMap = {ji.getId(i): ji.getRaw(i,6,0,"h") for i in range(ji.recCount)}
enc = {}
for i in range(je.recCount):
enc[je.getId(i)] = (instMap.get(je.getRaw(i,6,0,"h"),0), je.getRaw(i,9,0,"i"))
rows = subprocess.run(['mysql','-N','-B','dc_world','-e',
"SELECT j.entry, j.JournalEncounterID, ct.name FROM creature_template_journal j "
"JOIN creature_template ct ON ct.entry=j.entry WHERE j.entry>70000"],
capture_output=True, text=True).stdout
print("entry\tenc\tcarte\tordre\tnbObjets\tnom")
bad=0
for line in rows.splitlines():
e, eid, name = line.split('\t'); eid=int(eid)
mid, oi = enc.get(eid, (0,0))
n = len(jei.parentMap.get(eid, []))
flag = "" if (mid and n) else " <<< PROBLEME"
if flag: bad+=1
print("%s\t%d\t%d\t%d\t%d\t%s%s" % (e, eid, mid, oi, n, name, flag))
print("problemes:", bad)