Merge branch 'master' of git://cams.pavlovian.net/questhelper
[QuestHelper.git] / Development / zorba_qhideas.txt
blobc1f056449ed19fde7f105068d72e6ff3ebf1e3b8
3 Scarlet Defender cannot be found
4 prat 3.0 conflict?
7 Cartographer waypoints scale with Cartographer
8 More map labels :(
9 There's some pvp quest in Icecrown that breaks badly, figure that out once you get there? Add a new icon for it also.
12 "I know this, but it told me that [b]both[/b] quests were completed after [b]6[/b] kills."
14 Marauders of Darrowshire
16 * Add some concept of per-user prefs
17 * /qh level per-user
19 * Routing recovery
20 * Fix the flight paths
21 * Routing infinite-loop test (and kill)
22 * Build!
24 * New data storage
25 * Build!
27 @ Remember priorities
28 @ "Too Tough For Me" button
30 @ See if it can be made faster, re-enable sanity checks on at least some level
31 * Re-enable asserts in general, ha ha
33 * Rebuild build system
34   * Re-enabled "zero nodes"
35   
36 * Rebuild routing
38 * BUGS
39 * Record drops per-instance so we don't think both Kael'Thas'es are the same
40 * Rig static.lua to break if it doesn't load or has a version mismatch
41 * Lots of things break when flightpoints are updated. Lots of them.
42 * Cartographer 3 incompatibility?
43 * Bug: Full info in Tomtom's waypoint line?
44 * Bug: The assert check is going to break if the flightpoints are updated. Make this not happen. Actually now that I think about it, I bet updating the flight points is causing a lot of those crashes!
45 QuestHelper: The Routing Co-Routine just exploded:
46 Interface\Addons\Questhelper\objective.lua:30: stack overflow
47 * The only annoying thing I've run into so far is the cartographer arrow not showing up until you do /qh cartwp twice which has always been there. 
48 * "Hide" does not function properly when entering instances.
49 * Incompatible with Mapster?
51 @ Flying mounts
52 @ Tunable not-in-group penalties
53 * Build!
55 * Better data collection - collect more from more people, prompt them to upload once they have a good chunk of data
56 * Track player paths
57 * Track quest-item drops only when quest is still unfinished
58 * Track monster spots in a more specific fashion
59 * Track quest XP
60 * Track quest followups?
61 @ Teleporters functional?
62   @ Mage teleport
63   @ Druid teleport
64   @ DK teleport
65   @ Hearthstone?
66 * Build!
68 * Bug: QH:ComputeTravelTime is not taking the "last leg" from the zone entry point to the destination into account when doing path optimization
69 * Bug: AddObjectiveBest is not adding objectives in the best place in any sense of the word
70 * Bug: Explicit allocation. Seriously. This is a bug. IT IS IDIOTIC. WHY DID YOU DO THIS. WHAT WERE YOU THINKING.
71 * Bug: Aaaargh wacky custom half-classes with no abstraction (eats own face, dies)
73 * Bug: ObjectiveTravelTime2 is obviously inconsistent with ComputeTravelTime2, also what the hell is it doing
74 * Bug: Crash bug on timed quests?
76 * Flavor: include the name of the boat/zeppelin
77 * Remove all those wacky random-enchant items from the drop tables
78 * Switch to GUIDs if we haven't already
79 * Less reset-pathing-information, seriously wtf
80 * Show what you should be doing when you're at a flight point
82 * Better geography and barriers
83   * Pick this up automatically after "better data collection"?
84 * Higher cost for traveling through high-level areas?
86 * Custom handling for complex quests that QH currently kind of fails on ("collect these items, then use this to combine them, then give it to me" which invariably only gives you the second part at some random place in the world)
88 * Monster spawn zones should be more obvious, not just a few "go here" spots that you can't see simultaneously without a non-obvious UI feature
89 * Drop rates for quests
91 * Quest followups added automatically
92 * "Quest-like" things
93   * Recipes
94   * Flight paths
95   * Weapon training
96   * Skill training
97   * Automatic reagent/ammo restocking
98   * Repairs
99   * Mounts
100   * Pick-up dailies?
101 * Add "get quest"?
103 * Loose prioritization
104 * Give some priority to turning in quests
105 * Tracking "leveling" as part of the route finder (ha ha oh god)
106   * Along with training, mounts
107   * What the hell let's toss reagents and repairs in here as well :D :D :D
109 * Separate CPU-usage multiplier for
110   * Combat
111   * City
112   * PvP
113   * World
114   * Instance
116 *** Unsorted
118 * Auto-/target script?
119 * Track/infer completed quests
120 * Display more vertically? Is this even possible?
124 Bug:
125 Message: ..\AddOns\QuestNav\graph.lua line 185:
126 attempt to compare nil with number
128 Message: ..\AddOns\QuestHelper\utility.lua line 190:
129 bad argument #1 to 'ceil' (number expected, got nil)
130 Debug:
131 [C]: ?
132 [C]: ceil()
133 QuestHelper\utility.lua:190:
134 QuestHelper\utility.lua:189
135 (tail call): ?
136 QuestHelper\lang.lua:25:
137 QuestHelper\lang.lua:21
138 [C]: gsub()
139 QuestHelper\lang.lua:42:
140 QuestHelper\lang.lua:40
141 QuestHelper\lang.lua:85:
142 QuestHelper\lang.lua:47
143 (tail call): ?
144 QuestHelper\flightpath.lua:68: TaxiNodeOnButtonEnter()
146 Message: ..\AddOns\QuestHelper\dodads.lua line 242:
147    attempt to index field 'pos' (a nil value)
148 Debug:
149    [C]: ?
150    QuestHelper\dodads.lua:242 GetOverlapObjectives()
151    QuestHelper\dodads.lua:441
152       QuestHelper\dodads.lua:437
154 this happens every single time I fly from Azeroth(ironforge) to Outland(quel danas, ghostlands, etc) 
156 =-=-=-=-=-=
158 What do we need?
159   
160 * Monsters
161   * Locations
162   * Levels
163   * Loot count
164   * Loot, in detail
165   * Faction
166 * Items
167   * Lootable flag
168   * Disenchantable flag
169   * Prospectible flag
170   * Ilevel
171   * Weapon/armor and weapon/armor subtype
172   * Loot, in detail
173   * Disenchanting
174   * Prospecting
175 * Objects
176   * Locations
177   * Loot, in detail
178 * Events
179   * Locations
180 * Rep gains?
181 * Quests
182   * Levels
183   * Start character
184   * End character
185   * Start/end *location*
186   * Items/events involved?
187   * Rep gain
188   * XP gain
189   * Money gain
190   * Item rewards
191     * Item reward equip testing? vs. spec, class, level
192   * Faction
193 * Flight paths that exist
194 * Flight path timing
195 * Zone boundaries
196 * Subzone boundaries
197 * Walk paths
199 QuestHelper_Collector_Version = 1
200 QuestHelper_Collector = {
201   ["0.58 on 1.2.3/enUS/2"] = {
202     ["monster"] = {
203       [IDnumber] = {
204         -- Standard merger base here
205         "DENSDENSDENSDENS",
206         "DENSDENSDENS",
207         "DENS",
208         level_34 = 12,
209         level_35 = 99,
210         level_36 = 29,
211         name_Hello! = 19,
212         reaction_4 = 155, -- this is the friendly-hostile stuff
213         
214         loot_yes = 109,
215         loot_no = 12,
216         loot_opened = 20,
217         loot_items = {
218           [itemid] = 4,
219           [itemid] = 9,
220         }
221         skin_yes = 109,
222         skin_no = 12,
223         skin_opened = 20,
224         skin_items = {
225         }
226         
227         -- TODO from here
228         sells = {
229           [itemid] = true,
230           [itemid] = amount,
231         }
232         questloots = {
233           [itemid] = {4, 8},  -- This only triggers if we know this critter drops a specific bit of loot - in some ways, it overrides the "loots" above
234         }
235       }
236     },
237     ["item"] = {
238       [IDnumber] = {
239         name = "Hello!",
240         ilevel = (level),
241         minlevel = (level),
242         quality = (quality),
243         type = "type/subtype",
244         equiplocation = "LOC",
245         
246         loot_yes = 109,
247         loot_no = 12,
248         loot_opened = 20,
249         loot_items = {
250           [itemid] = 4,
251           [itemid] = 9,
252         }
253         de_yes = 109,
254         de_no = 12,
255         de_opened = 20,
256         de_items = {
257           [itemid] = 4,
258           [itemid] = 9,
259         }
260         looted = 12,
261         loots = {
262           [itemid] = 4,
263           [itemid] = 9,
264         }
265         
266         -- TODO from here
267         equipped = {
268           "CLEVSPEC", "CLEVSPEC"
269         }
270         equipped_no = { "CLEVSPEC", "CLEVSPEC" }
271       }
272     },
273     ["object"] = {
274       ["name"] = {
275         -- Standard merger base here
276         "DENSDENSDENSDENS",
277         "DENSDENSDENS",
278         "DENS",
279         
280         herb_yes = 109,
281         herb_no = 42,
282         mine_yes = 111,
283         mine_no = 12345,
284         
285         loot_count = 20,
286         loot_items = {
287           [itemid] = 4,
288           [itemid] = 9,
289         }
290         herb_count = 20,
291         herb_items = {
292           [itemid] = 4,
293           [itemid] = 9,
294         }
295       }
296     },
297     ["fishing"] = {
298       [DENS] = {
299         fish_count = 20,
300         fish_items = {
301           [itemid] = 9,
302         }
303       }
304     },
305     ["worldloot"] = {
306       [DENS] = {
307         loot_count = 20,
308         loot_items = {
309           [itemid] = 9,
310         }
311       }
312     },
313     ["quest"] = {
314       [QuestID] = {
315         name = "Hello!",
316         level = 40,
317         start = "M1234mDENSM1234mDENS", -- again, I kind of fucked this up, but it should be readable since M isn't a valid continent
318         end = "M1234mDENSM1234mDENS",
319         criteria_1_text = "hello I am a monster"
320         criteria_1_type = "monster"
321         criteria_1_satisfied = "(C3c)M1234mI1234iL(locbolus)l"
322         items_reward = {
323           [id] = count
324         }
325         items_choice = {
326           [id] = count
327         }
328         
329         -- TODO
330         repgain = { faction, amount }
331         xpgain = { level, amount }
332         moneygain = { level, amount }
333         completedby = { "CLVSPEC", "CLVSPEC" }
334       }
335     },
336     ["flight_master"] = {
337       ["location_name"] = {
338         master = monsterid,
339         x = 123.456,
340         y = 123.456,
341       }
342     }
343     ["flight_time"] = {
344       ["src@@dst"] = {
345         ["xx:yy@xx:yy"] = time, -- these are midpoints in the path, we can only get x,y coords and they seem to be slightly inaccurate. We'll collate on the build process.
346         ["xx:yy@xx:yy##count"] = count, -- how many samples we've taken. The "time" is a sum, divide by this for final results.
347         ["xx:yy"] = time,
348         [""] = true, -- this merely indicates that the two are directly connected
349       },
350       ["src@@dst"] = {
351       },
352     },
353     ["zone"] = {
354       ["zone@@realzone@@subzone"] = {
355         border = {
356           "DENSDENS",
357           "DENS", -- merged
358         }
359         update = {
360           "DENSDENS",
361           "DENS", --merged
362         }
363         TODO xp = {
364           level = "amount"
365         }
366       }
367     },
368     ["traveled"] = {
369       building = { "decompy" }
370       compressing = {}
371       done = {
372         "COMPCOMPCOMP",
373         "COMPCOMPCOMP",
374         "COMPCOMPCOMP",
375       }
376     },
377     TODO ["achievement"] = {
378       [ID] = {
379         objectives = {
380           { "monster/1234" = 12, "monster/4456" = 2 },
381           { "item/1234" = 9, },
382           { "reputation/1234" = 14, },
383         }
384         previous = (idnumber)
385         name_enUS =
386         -- Availability should only be tagged for achievements in the static DB, since otherwise it will be heavily biased
387         faction_1_avail =
388         faction_1_noavail =
389       }
390     }
391     TODO ["history"] = {
392       ["uniqueid"] = {
393           "level 19",
394           "had quest 1234",
395           "had quest 1234",
396           "completed quest 1234",
397           "gained level 20",
398           "abandoned quest 1234",
399           "received quest 1234",
400           "available quests at X, a b c d",
401         }, {
402           "had quest 1234",
403           "had quest 1234",
404           "completed quest 1234",
405           "abandoned quest 1234",
406           "received quest 1234",
407         }
408       }
409     }
410   }
413 DENS: ZZXXYY, zone X Y. X and Y: take the value, add 9, divide by 19, bitpack that into three 8-bit values. Gives about 88k points within the standard 1-to-0. Good 'nuff.
414 COMP: DENS, then a stream of compressed eight direction vectors and a swim bit toggle (starting with the toggle if the user is already swimming) and a fall-damage notifier
417 Detect "going inside a cave"? Holy crap. I have never considered such a thing before.
420 ---- LET US THINK ABOUT LOOTING
422 So. A loot window pops up. What's it from?
424 There's a few options.
426 * Monster loot
427 * Skinning, mining, or herbing (or engineering?) (could be either from a monster, or from an entity)
428 * Using an entity
429 * Opening a container from inventory
430 * Fishing
431 * Pickpocketing
433 Alternatively, you might just get random things.
435 * Using an item from inventory (modern clams)
436 * Talking to a dude (argent dawn?)
437 * Getting it for kills (honor tokens)
438 * Getting it for end-of-BG
440 (argent clams!)
444 Now here's a question. I already have to deal with items showing up in inventory out of nowhere. Is it perhaps better to just hook that, rather than trying to interpret loot windows? Also, what do I do about groups?
446 I think there's useful info I can get from loot windows, I'll stick with that. This also means that - in general - I don't want to worry about stuff that Simply Appears unless I think the user is actually involved somehow (using item from inventory, talking to a dude.) I'm not all that hugely worried about having to track where warglaives of azzinoth come from, at least for now.
449 So let's see how I can figure these out:
451 * Monster loot - Look for events and mouseover. Might not have it targeted, so don't assume they will.
452 * Skinning, mining, or herbing - All of these are spellcasts, see what the spell is (and what it targets) and what the user has targeted in case it's a monster. Also watch the last mouseover event, or the last tooltip?
453 * Disenchanting/prospecting - watch for Disenchant spellcast, look for last tooltip
454 * Using an entity - Spellcast, again. Watch tooltip for the entity and watch the cast timer?
455 * Opening a container from inventory - Tooltip, yet again. I think that's the best I can do. Also watch for the "can be opened" text.
456 * Fishing - IsFishingLoot, and spellcast. At least this one's easy.
458 Alternatively, you might just get random things.
460 * Using an item from inventory (modern clams) - tooltip, and watch for the "can be opened" text?
461 * Talking to a dude (argent dawn?) - right-click
464 * if LOOT_CLOSED fires without LOOT_OPENED firing, there just wasn't anything
465 * Watch for kills without looting! Track kill number too. If kills >> loots, use kills. Test this on those dudes in the desert.
468 Mouseover monster -> monster killed (can I detect this in any way? Maybe?) -> mouseover monster -> LOOT_CLOSED means looted ended -> might become skinnable/minable/herbable
469 We'll get lots of extra positives for group critters that are minable, since we never loot_close them, but I'm okay with that.
471 If we never LOOT_CLOSE a critter, we assume they may or may not have been looted, and we don't check skinnable/minable/herbable. We only count those if they're positive, or if there's a known LOOT_CLOSE. This will weight towards positive, but since the values should be either 0 or 1, I'm not too worried.
472 Looting and mining and the like target the creature! This helps a lot.